./PaxHeaders.3194/cb2bib-1.9.70000644000000000000000000000013213124510217012404 xustar0030 mtime=1498583183.291252111 30 atime=1498583183.003254785 30 ctime=1498583183.291252111 cb2bib-1.9.7/0000755000175000001440000000000013124510217013716 5ustar00constansusers00000000000000cb2bib-1.9.7/PaxHeaders.3194/LICENSE0000644000000000000000000000007413124510115013333 xustar0030 atime=1498583183.003254785 30 ctime=1498583182.555258944 cb2bib-1.9.7/LICENSE0000644000175000001440000010450513124510115014725 0ustar00constansusers00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. http://fsf.org/ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see http://www.gnu.org/licenses/. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read http://www.gnu.org/philosophy/why-not-lgpl.html. cb2bib-1.9.7/PaxHeaders.3194/COPYRIGHT0000644000000000000000000000007413124510115013621 xustar0030 atime=1498583183.003254785 30 ctime=1498583182.555258944 cb2bib-1.9.7/COPYRIGHT0000644000175000001440000000065213124510115015211 0ustar00constansusers00000000000000The cb2Bib. Copyright (C) 2004-2017 by Pere Constans The cb2Bib includes third party GPL and LGPL code that is copyrighted by others: - Class clipboardPoll is based on work by Lubos Lunak, 2003 - Function citeToLyXPipe is adapted from work by Robby Stephenson, 2005 - Class QtSingleApplication by Digia Plc, 2013 - Icons come from the Oxygen, Crystal SVG, and Noia icon sets, published by the KDE Desktop Environment. cb2bib-1.9.7/PaxHeaders.3194/c2btools0000644000000000000000000000013213124510217013776 xustar0030 mtime=1498583183.295252074 30 atime=1498583183.003254785 30 ctime=1498583183.295252074 cb2bib-1.9.7/c2btools/0000755000175000001440000000000013124510217015445 5ustar00constansusers00000000000000cb2bib-1.9.7/c2btools/PaxHeaders.3194/med2bib0000644000000000000000000000007413124510115015304 xustar0030 atime=1498583183.003254785 30 ctime=1498583182.607258461 cb2bib-1.9.7/c2btools/med2bib0000755000175000001440000000507113124510115016677 0ustar00constansusers00000000000000#!/bin/sh #------------------------------------------------------------------------------- # med2bib -- Script to convert PUBMED format to BibTeX # cb2Bib Tools # # Copyright (C) 2009 by Filippo Rusconi # rusconi@mnhn.fr # # Based on previous work by # Pere Constans # constans@molspaces.com # # See LICENSE file that comes with this distribution # # Usage: med2bib input_med output_bib #------------------------------------------------------------------------------- # Using med2xml and xml2bib utilities from: # http://bibutils.refbase.org/ #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # Init variables #------------------------------------------------------------------------------- # Modify accordingly #med2xml=/usr/local/bin/med2xml #xml2bib=/usr/local/bin/xml2bib med2xml=med2xml xml2bib=xml2bib med2xml_flags="-u" xml2bib_flags="-sd -b" #------------------------------------------------------------------------------- # Immediately check that the needed programs are there: "${med2xml}" --version > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program med2xml (suite bibutils) is required." echo "Set it in your path, and/or modify $0 accordingly." echo "Ending processing." exit 1 fi "${xml2bib}" --version > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program xml2bib (suite bibutils) is required." echo "Set it in your path, and/or modify $0 accordingly." echo "Ending processing." exit 1 fi # Make sure we trap errors (we put that after the tests above because # we need the tests to fail, in case, without exiting immediately). set -e # Getting filenames from command line echo "cb2Bib Tools: Script to convert PUBMED-XML format to BibTeX" echo "" echo "It uses external package bibutils from" echo "http://bibutils.refbase.org/" echo "" if test "$#" != 2; then cat < c2b_tmp.xml "${xml2bib}" $xml2bib_flags c2b_tmp.xml | sed 's%^ISSUE=%NUMBER=%g' > c2b_tmp.bib # Clean up cd "${work_dir}" cp "${tmp_dir}"/c2b_tmp.bib "$bib" rm -rf "${tmp_dir}" echo "" echo "$0 ended." cb2bib-1.9.7/c2btools/PaxHeaders.3194/bib2pdf0000644000000000000000000000007413124510115015310 xustar0030 atime=1498583183.003254785 30 ctime=1498583182.607258461 cb2bib-1.9.7/c2btools/bib2pdf0000755000175000001440000000631613124510115016706 0ustar00constansusers00000000000000#!/bin/sh #------------------------------------------------------------------------------- # bib2pdf -- Script to convert BibTeX files to PDF # cb2Bib Tools # # Copyright (C) 2005-2017 by Pere Constans # constans@molspaces.com # # Improvements and modifications: # Copyright (C) 2009 by Filippo Rusconi # rusconi@mnhn.fr # # May/June 2009: # - Added checks to ensure that the used commands are available on # system. # - Make use of mktemp to create a temp directory. # # See LICENSE file that comes with this distribution # # Usage: bib2pdf input_bib output_pdf #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # Init variables #------------------------------------------------------------------------------- # Modify accordingly, by choosing either pdflatex or latex+dvipdfm #latexCmd=pdflatex latexCmd=latex ; dvi2pdfCmd=dvipdfm bibtexCmd=bibtex #------------------------------------------------------------------------------- # Immediately check that the needed programs are there: "${latexCmd}" --version > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program ${latexCmd} (LaTeX software) is required." echo "Ending processing." exit 1 fi "${bibtexCmd}" --version > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program ${bibtexCmd} (BibTeX software) is required." echo "Ending processing." exit 1 fi # Special case with dvi2pdf: if [ "x${dvi2pdfCmd}" != "x" ] then "${dvi2pdfCmd}" --version | head -n2 | grep dvipdfm > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program ${dvi2pdfCmd} (LaTeX software) is required." echo "Ending processing." exit 1 fi fi # Make sure we trap errors (we put that after the tests above because # we need the tests to fail, in case, without exiting immediately). set -e # Getting filenames from command line echo "cb2Bib Tools: Script to convert BibTeX to PDF" if test "$#" != 2; then cat < "${tmp_dir}"/c2b_tmp.tex < /dev/null 2>&1 "${bibtexCmd}" c2b_tmp "${latexCmd}" $latex_flags c2b_tmp > /dev/null 2>&1 "${latexCmd}" $latex_flags c2b_tmp if [ "x${dvi2pdfCmd}" != "x" ] then "${dvi2pdfCmd}" c2b_tmp > /dev/null 2>&1 fi # Make sure we trap errors. set -e # Clean up cd "${work_dir}" cp "${tmp_dir}"/c2b_tmp.pdf "$pdf" rm -rf "${tmp_dir}" echo "$0 ended." cb2bib-1.9.7/c2btools/PaxHeaders.3194/isi2bib0000644000000000000000000000007413124510115015323 xustar0030 atime=1498583183.003254785 30 ctime=1498583182.607258461 cb2bib-1.9.7/c2btools/isi2bib0000755000175000001440000000534513124510115016722 0ustar00constansusers00000000000000#!/bin/sh #------------------------------------------------------------------------------- # isi2bib -- Script to convert ISI format to BibTeX # cb2Bib Tools # # Copyright (C) 2005-2017 by Pere Constans # constans@molspaces.com # # Improvements and modifications: # Copyright (C) 2009 by Filippo Rusconi # rusconi@mnhn.fr # # May/June 2009: # - Added checks to ensure that the used commands are available on # system. # - Make use of mktemp to create a temp directory. # # See LICENSE file that comes with this distribution # # Usage: isi2bib input_isi output_bib #------------------------------------------------------------------------------- # Using isi2xml and xml2bib utilities from: # http://bibutils.refbase.org/ #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # Init variables #------------------------------------------------------------------------------- # Modify accordingly #isi2xml=/usr/local/bin/isi2xml #xml2bib=/usr/local/bin/xml2bib isi2xml=isi2xml xml2bib=xml2bib isi2xml_flags="-u" xml2bib_flags="-sd -b" #------------------------------------------------------------------------------- # Immediately check that the needed programs are there: "${isi2xml}" --version > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program ris2xml (suite bibutils) is required." echo "Set it in your path, and/or modify $0 accordingly." echo "Ending processing." exit 1 fi "${xml2bib}" --version > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program xml2bib (suite bibutils) is required." echo "Set it in your path, and/or modify $0 accordingly." echo "Ending processing." exit 1 fi # Make sure we trap errors (we put that after the tests above because # we need the tests to fail, in case, without exiting immediately). set -e # Getting filenames from command line echo "cb2Bib Tools: Script to convert ISI format to BibTeX" echo "" echo "It uses external package bibutils from" echo "http://bibutils.refbase.org/" echo "" if test "$#" != 2; then cat < c2b_tmp.xml "${xml2bib}" $xml2bib_flags c2b_tmp.xml | sed 's%^ISSUE=%NUMBER=%g' > c2b_tmp.bib # Clean up cd "${work_dir}" cp "${tmp_dir}"/c2b_tmp.bib "$bib" rm -rf "${tmp_dir}" echo "" echo "$0 ended." cb2bib-1.9.7/c2btools/PaxHeaders.3194/ris2bib0000644000000000000000000000007413124510115015334 xustar0030 atime=1498583183.003254785 30 ctime=1498583182.607258461 cb2bib-1.9.7/c2btools/ris2bib0000755000175000001440000000535113124510115016730 0ustar00constansusers00000000000000#!/bin/sh #------------------------------------------------------------------------------- # ris2bib -- Script to convert RIS format to BibTeX # cb2Bib Tools # # Copyright (C) 2005-2017 by Pere Constans # constans@molspaces.com # # Improvements and modifications: # Copyright (C) 2009 by Filippo Rusconi # rusconi@mnhn.fr # # May/June 2009: # - Added checks to ensure that the used commands are available on # system. # - Make use of mktemp to create a temp directory. # # See LICENSE file that comes with this distribution # # Usage: ris2bib input_ris output_bib #------------------------------------------------------------------------------- # Using ris2xml and xml2bib utilities from: # http://bibutils.refbase.org/ #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # Init variables #------------------------------------------------------------------------------- # Modify accordingly #ris2xml=/usr/local/bin/ris2xml #xml2bib=/usr/local/bin/xml2bib ris2xml=ris2xml xml2bib=xml2bib ris2xml_flags="-u" xml2bib_flags="-sd -b" #------------------------------------------------------------------------------- # Immediately check that the needed programs are there: "${ris2xml}" --version > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program ris2xml (suite bibutils) is required." echo "Set it in your path, and/or modify $0 accordingly." echo "Ending processing." exit 1 fi "${xml2bib}" --version > /dev/null 2>&1 if [ "$?" != "0" ] then echo "Program xml2bib (suite bibutils) is required." echo "Set it in your path, and/or modify $0 accordingly." echo "Ending processing." exit 1 fi # Make sure we trap errors (we put that after the tests above because # we need the tests to fail, in case, without exiting immediately). set -e # Getting filenames from command line echo "cb2Bib Tools: Script to convert RIS format to BibTeX" echo "" echo "It uses external package bibutils from" echo "http://bibutils.refbase.org/" echo "" if test "$#" != 2; then cat < c2b_tmp.xml "${xml2bib}" ${xml2bib_flags} c2b_tmp.xml | sed 's%^ISSUE=%NUMBER=%g' > c2b_tmp.bib # Clean up cd "${work_dir}" cp "${tmp_dir}"/c2b_tmp.bib "$bib" rm -rf "${tmp_dir}" echo "" echo "$0 ended." cb2bib-1.9.7/PaxHeaders.3194/c2bscripts0000644000000000000000000000007413124510115014327 xustar0030 atime=1498583183.003254785 30 ctime=1498583182.607258461 cb2bib-1.9.7/c2bscripts/0000755000175000001440000000000013124510115015771 5ustar00constansusers00000000000000cb2bib-1.9.7/c2bscripts/PaxHeaders.3194/c2bciter0000644000000000000000000000007413124510115016024 xustar0030 atime=1498583183.003254785 30 ctime=1498583182.607258461 cb2bib-1.9.7/c2bscripts/c2bciter0000755000175000001440000000127513124510115017421 0ustar00constansusers00000000000000#!/bin/sh #------------------------------------------------------------------------------- # c2bciter -- Wrapper for calling cb2Bib Citer # cb2Bib Tools # Copyright (C) 2004-2017 by Pere Constans # constans@molspaces.com # # Copyright (C) 2009 by Filippo Rusconi # rusconi@mnhn.fr # # June 2009: # - Make use of the "$@" argument instead of problematic "$1". # # See the LICENSE file that comes with this distribution #------------------------------------------------------------------------------- # Usage: c2bciter [dirname1 [dirname2 ... ]] # c2bciter [filename1.bib [filename2.bib ... ]] #------------------------------------------------------------------------------- cb2bib --citer "$@" cb2bib-1.9.7/c2bscripts/PaxHeaders.3194/c2bimport.desktop0000644000000000000000000000007413124510115017700 xustar0030 atime=1498583183.003254785 30 ctime=1498583182.607258461 cb2bib-1.9.7/c2bscripts/c2bimport.desktop0000644000175000001440000000061313124510115021265 0ustar00constansusers00000000000000[Desktop Entry] Comment=Download reference to cb2Bib Comment[ca]=Importa referència al cb2Bib Exec=cb2bib --import %f GenericName=cb2Bib Import Reference GenericName[ca]=Importa referència al cb2Bib Icon=cb2bib MimeType=text/x-bibtex;application/x-download;application/bibtex; Name=c2bImport Path=/usr/bin NoDisplay=false StartupNotify=false Terminal=false Categories=Office; Type=Application cb2bib-1.9.7/c2bscripts/PaxHeaders.3194/c2bciter.desktop0000644000000000000000000000007413124510115017474 xustar0030 atime=1498583183.003254785 30 ctime=1498583182.607258461 cb2bib-1.9.7/c2bscripts/c2bciter.desktop0000644000175000001440000000064013124510115021061 0ustar00constansusers00000000000000[Desktop Entry] Comment=Bibliographic Reference Citation Tool Comment[ca]=Eina bibliogràfica per escriure citacions Exec=cb2bib --citer %F GenericName=Reference Citation Tool GenericName[ca]=Eina per citacions bibliogràfiques Icon=cb2bib MimeType=text/x-bibtex; Name=c2bCiter Path=/usr/bin StartupNotify=false Terminal=false Categories=Office; Type=Application Keywords=bibliography,citations,scientific articles; cb2bib-1.9.7/c2bscripts/PaxHeaders.3194/cb2bib.desktop0000644000000000000000000000007413124510115017122 xustar0030 atime=1498583183.003254785 30 ctime=1498583182.607258461 cb2bib-1.9.7/c2bscripts/cb2bib.desktop0000644000175000001440000000064313124510115020512 0ustar00constansusers00000000000000[Desktop Entry] Comment=Bibliographic Reference Extracting Tool Comment[ca]=Eina per extreure referències bibliogràfiques Exec=cb2bib --bibedit %F GenericName=Reference Extracting Tool GenericName[ca]=Eina per extreure referències Icon=cb2bib MimeType=text/x-bibtex; Name=cb2Bib Path=/usr/bin StartupNotify=true Terminal=false Categories=Office; Type=Application Keywords=bibliography,citations,scientific articles; cb2bib-1.9.7/c2bscripts/PaxHeaders.3194/c2bimport0000644000000000000000000000007413124510115016230 xustar0030 atime=1498583183.003254785 30 ctime=1498583182.607258461 cb2bib-1.9.7/c2bscripts/c2bimport0000755000175000001440000000147313124510115017625 0ustar00constansusers00000000000000#!/bin/sh #------------------------------------------------------------------------------- # c2bimport -- Script for calling cb2Bib in "Download Reference to cb2Bib" mode # cb2Bib Tools # Copyright (C) 2004-2017 by Pere Constans # constans@molspaces.com # # Copyright (C) 2009 by Filippo Rusconi # rusconi@mnhn.fr # # June 2009: # - Make use of quoted "$1" argument instead of $1. # # See the LICENSE file that comes with this distribution #------------------------------------------------------------------------------- # Usage: c2bimport tmp_imported_reference_file #------------------------------------------------------------------------------- if test "$#" != 1; then cat <(.+)(.+).+Abstract:(.+)$ # cb2Bib 0.6.0 Pattern: PNAS Table of Contents Alert article title author journal year volume pages ^(.+)(.+)(PNAS) (\d\d\d\d)\;(\d+) ([\d|\-|\s]+).+$ # cb2Bib 0.6.0 Pattern: Wiley InterScience Journal Abstracts article journal volume pages year title author keywords abstract ^(.+)Volume (\d+), Issue.+, Pages ([\d|\-|\s]+)Published Online:.+(\d\d\d\d).+(.+)(.+).+KEYWORDS(.+)ABSTRACT(.+)$ # cb2Bib 0.6.0 Pattern: ISI Web of Knowledge Table of Contents Alert article title author journal volume pages year abstract ^Title:(.+)Authors:(.+)Source:(.+), (\d+) \(.+\): ([\d|\-|\s]+); .+ (\d\d\d\d)Abstract:(.+)$ # cb2Bib 0.6.0 Pattern: DBLP Article article author title journal volume pages year ^([^:]+): ([^\.]+)\. (.+) (\d+)\(.+\): ([\d|\-|\s]+) \((\d\d\d\d)\)$ # cb2Bib 0.6.0 Pattern: Nature from Fisrt Paragraph article journal volume pages year title author abstract ^(Nature) (\d+), ([\d|\-|\s]+) \(.+ (\d\d\d\d)\).+ (.+)(.+).+ .+ (.+)$ # cb2Bib 0.6.0 Pattern: ScienceDirect article journal volume number year pages title author abstract keywords ^(.+) Volume (\d+), Issues* ([\d|\-|\s]+), .+ (\d\d\d\d), Pages ([\d|\-|\s]+) .+Copyright .+ Elsevier [^<]+([^<]+) ([^<]+).+Abstract(.+)Author Keywords:(.+)$ # cb2Bib 0.6.0 Pattern: ScienceDirect (Keywords: instead of Author Keywords:) article journal volume number year pages title author abstract keywords ^(.+) Volume (\d+), Issues* ([\d|\-|\s]+), .+ (\d\d\d\d), Pages ([\d|\-|\s]+) .+Copyright .+ Elsevier [^<]+([^<]+) ([^<]+).+Abstract(.+)Keywords:(.+)$ # cb2Bib 0.6.0 Pattern: ScienceDirect (No Author Keywords) article journal volume number year pages title author abstract ^(.+) Volume (\d+), Issues* ([\d|\-|\s]+), .+ (\d\d\d\d), Pages ([\d|\-|\s]+) .+Copyright .+ Elsevier [^<]+([^<]+) ([^<]+).+Abstract(.+)$ # cb2Bib 0.6.0 Pattern: IOP Electronic Journals article year journal volume pages title author abstract ^.+ (\d\d\d\d) (.+) (\d+) ([\d|\-|\s]+)(.+)(.+).+Abstract\. (.+)$ # cb2Bib 0.6.0 Pattern: PubMed Search article journal year volume pages ^(.+) (\d\d\d\d).*;(\d+).*:([\w\d|\-|\s]+)\..*$ # cb2Bib 0.6.0 Pattern: JSTOR article title author journal volume number month year pages abstract ^(.+)(.+)(.+)[,>]\s*Vol\.\s*(\d+),\s*No\.\s*(\d+).+\((.+),\s*(\d\d\d\d)\),\s*p{1,2}\.([\d|\-|\s]+)\.{0,1}.+Abstract(.+)$ # cb2Bib 0.6.0 Pattern: JSTOR (No Abstract) article title author journal volume number month year pages ^(.+)(.+)(.+)[,>]\s*Vol\.\s*(\d+),\s*No\.\s*(\d+).+\((.+),\s*(\d\d\d\d)\),\s*p{1,2}\.([\d|\-|\s]+)\.{0,1}$ # cb2Bib 0.8.1 Pattern: PDF Import Example article journal volume pages year title author abstract ^(Ars Magna), (\d+), ([\d\-–\s]+), (\d\d\d\d)(.+)(.+).+SUMMARY(.+).+$ # cb2Bib 0.8.1 Pattern: Example with Multiple Author Sets article journal volume pages year title author author abstract ^(Journal Name), (\d+), ([\d|\-|\s]+), (\d\d\d\d) (.+) (.+).+(.+).+Abstract:(.+)$ # cb2Bib 1.0.1 Pattern: JCP article title journal volume pages year author abstract ^(.+)(.+) (\d+), ([\d\-–\s]+) \((\d\d\d\d)\);.+(.+).+(.+)©.+$ # cb2Bib 1.2.0 Pattern: PROLA article journal volume number pages year title author abstract ^APS » PROLA »(.+)» Volume([\s\d]+)» Issue([\s\d]+).+([\d\-–\s]+)\((\d\d\d\d)\)(.+).+(.+).+(.+).+$ cb2bib-1.9.7/data/PaxHeaders.3194/netqinf.txt0000644000000000000000000000007413124510115015444 xustar0030 atime=1498583183.003254785 30 ctime=1498583182.611258424 cb2bib-1.9.7/data/netqinf.txt0000644000175000001440000004346713124510115017047 0ustar00constansusers00000000000000############################################################ # CB2BIB/EDITOR BOOKMARKS AND NETWORK QUERY INFORMATION FILE ############################################################ ########### # BOOKMARKS ########### # Syntax: # bookmark=Description|Target URL # Notes: # - cb2Bib tags, e. g. BibTeX fields enclosed as <<...>>, can be included in the URL. These tags will be # substituted by the current values. # - The non BibTeX tag <> is the placeholder for the current text selection. # - Some special characters, such as |, might need percent encoding to properly work. # Bookmark Examples: bookmark=PubMed Citation Finder|http://www.ncbi.nlm.nih.gov/pubmed/citmatch bookmark=HighWire Press -- Search|http://highwire.stanford.edu/cgi/search/ bookmark=DBLP Bibliography|http://dblp.org/search/ bookmark=arXiv.org e-Print archive|http://arxiv.org/ bookmark=CiteSeerX|http://citeseerx.ist.psu.edu/ bookmark=Directory of Open Access Journals|http://doaj.org/search bookmark=PLoS - The Public Library of Science|http://www.plos.org/ bookmark=OAIster|http://www.oclc.org/oaister.en.html bookmark=Search ACS Publications|http://pubs.acs.org/search/advanced bookmark=Google Scholar|https://scholar.google.com/ bookmark= | bookmark=Search arXiv for selected text|http://search.arxiv.org:8081/?query=<> bookmark=Search Citebase for Authors|http://www.citebase.org/search?type=metadata&maxrows=10&author=<>&submitted=Search bookmark=Search CiteSeerX for Title|http://citeseerx.ist.psu.edu/search?q=title%3A<>&sort=cite bookmark=Search PubMed for Title|http://www.ncbi.nlm.nih.gov/pubmed?term=<<title>> bookmark=Search PubMed for DOI|http://www.ncbi.nlm.nih.gov/pubmed?term=<<doi>> bookmark=Search Google for literal Title|https://www.google.com/search?ie=UTF-8&q=%22<<title>>%22 bookmark=Search Scholar for literal Title|https://scholar.google.com/scholar?ie=UTF-8&q=%22<<title>>%22 bookmark=Search Crossref for Journal + Volume + Page|http://www.crossref.org/guestquery/?search_type=journal&auth=&issn=&title=<<journal>>&art_title=&volume=<<volume>>&page=<<pages>>&isbn=&comp_num=&series_title=&multi_hit=on&view_records=Search bookmark=Search ISBN Database|http://isbndb.com/search-all.html?kw=<<isbn>> bookmark=Open DOI Document|http://dx.doi.org/<<doi>> # CR subscribers might consider its bookmark as: # bookmark=Current 'Journal-Volume-Page' to DOI|http://doi.crossref.org/resolve?pid=<USR>:<PWD>&aulast=&title=<<journal>>&volume=<<volume>>&issue=&page=<<pages>>&year=&isbn=&comp_num=&series_title= # See http://www.crossref.org/help/ ################## # EDITOR BOOKMARKS ################## # Syntax: # editorbookmark=Description|Target file name|Shortcut|Icon file name # Bookmark Example: editorbookmark=Bookmarks Description|http://www.molspaces.com/d_cb2bib-c2beditor.php#bookmarks|| ########################### # NETWORK QUERY INFORMATION ########################### # Description: # The cb2Bib tags <<journal>>, <<volume>>, <<pages>>, <<doi>> and/or <<excerpt>> are # substituted in the Submition Form (see below) by the actual values of the reference. # In a first step, the 'query' URL containing above substituted tags is sent to the # database server or publisher's website. # Once the URL is retrieved, in a second step, cb2Bib captures a database identifier for # the desired reference. This step is a regular expression caption. # Steps 1) and 2) are, therefore, a mapping from the given reference fields to an internal # database identifier. In the next step, step 3), this identifier is used to retrieve the # complete bibliographic reference, and possibly, in step 4), the link or URL for the # target document, usually a PDF file. # # # Queries are performed in 4 steps: # 1) Post Query( journal-fullname, volume, first page; or doi; or excerpt ) (HTML post + cb2Bib tags) # 2) Capture referenceurl and pdfurl from query (RegExp) # 3) Retrieve referenceurl = referenceurl_prefix + capture_from_query + referenceurl_sufix # 4) Schedule for retrieving pdfurl = pdfurl_prefix + capture_from_query + pdfurl_sufix # # #-------------------------------------------------------------------------------------------- # Submition Form # All field/lines required, ordered as here, no comment or blank lines in between #-------------------------------------------------------------------------------------------- # QUERY INFO FOR #journal=cb2Bib Long Journal Name|journal code (or left blank if none needed, see ACS example) #query= (use '<<post>>http://www...' for http post method, instead of get method) #capture_from_query= #referenceurl_prefix= #referenceurl_sufix= #pdfurl_prefix= #pdfurl_sufix= #action= # #-------------------------------------------------------------------------------------------- # Action Description: #-------------------------------------------------------------------------------------------- # # blank = cb2Bib imports query output to clipboard panel # browse_query = cb2Bib opens the url in query # browse_referenceurl = cb2Bib opens referenceurl_prefix + capture_from_query + referenceurl_sufix # # Perform HTML to text conversion before importing to clipboard panel: # htm2txt_query = cb2Bib imports the url in query # htm2txt_referenceurl = cb2Bib imports referenceurl_prefix + capture_from_query + referenceurl_sufix # #-------------------------------------------------------------------------------------------- # Examples below explain and clarify this query syntax #-------------------------------------------------------------------------------------------- # QUERY INFO FOR IJQC # No BibTeX reference available. Instead, set 'action=browse_referenceurl'. # Reference and PDF file can later be extracted from browser, by selecting it. journal=International Journal of Quantum Chemistry| query=http://www3.interscience.wiley.com/search/allsearch?mode=citation&contextLink=%3Ca+href%3D%22%2Findex.html%22+target%3D%22_top%22%3EHome%3C%2Fa%3E+%2F+%3Ca+href%3D%22%2Fcgi-bin%2Fbrowsebysubject%3Fcode%3DCHEM%22+target%3D%22_top%22%3EChemistry%3C%2Fa%3E+%2F+%3Ca+href%3D%22%2Fcgi-bin%2Fbrowsebycategory%3Fcode%3DCH65%22+target%3D%22_top%22%3EComputational+Chemistry+and+Molecular+Modeling%3C%2Fa%3E&issn=1097-461X&volume=<<volume>>&issue=&pages=<<pages>> capture_from_query=/journal/(\d+)/abstract referenceurl_prefix=http://www3.interscience.wiley.com/journal/ referenceurl_sufix=/abstract pdfurl_prefix= pdfurl_sufix= action=browse_referenceurl # QUERY INFO FOR PNAS (Volume and Page) # Extracts BibTeX reference and article PDF file journal=Proceedings of the National Academy of Sciences of the United States of America| query=http://www.pnas.org/search?submit=yes&submit=Submit&pubdate_year=&volume=<<volume>>&firstpage=<<pages>>&doi=&author1=&author2=&title=&andorexacttitle=and&titleabstract=&andorexacttitleabs=and&fulltext=&andorexactfulltext=and&fmonth=Jan&fyear=1915&tmonth=Jul&tyear=2017&tocsectionid=all&format=standard&hits=10&sortspec=relevance&submit=yes capture_from_query=/content/(.+)\.(extract|abstract|full) referenceurl_prefix=http://www.pnas.org/citmgr?type=bibtex&gca=pnas; referenceurl_sufix= pdfurl_prefix=http://www.pnas.org/content/ pdfurl_sufix=.full.pdf action= # QUERY INFO FOR PNAS (DOI) # Extracts BibTeX reference and article PDF file journal=Proceedings of the National Academy of Sciences of the United States of America| query=http://www.pnas.org/search?submit=yes&submit=Submit&doi=<<doi>> capture_from_query=/content/(.+)\.(extract|abstract|full) referenceurl_prefix=http://www.pnas.org/citmgr?type=bibtex&gca=pnas; referenceurl_sufix= pdfurl_prefix=http://www.pnas.org/content/ pdfurl_sufix=.full.pdf action= # QUERY INFO FOR BIOMETRIKA # Extracts BibTeX reference journal=Biometrika| query=http://biomet.oxfordjournals.org/cgi/search?sendit=Search&pubdate_year=&volume=<<volume>>&firstpage=<<pages>>&DOI=&author1=&author2=&title=&andorexacttitle=and&titleabstract=&andorexacttitleabs=and&fulltext=&andorexactfulltext=and&fmonth=Jan&fyear=&tocsectionid=all&RESULTFORMAT=1&hits=10&hitsbrief=25&sortspec=relevance&sortspecbrief=relevance capture_from_query=http://biomet\.oxfordjournals\.org/cgi/content/abstract/([/\d\w]+)\? referenceurl_prefix=http://biomet.oxfordjournals.org/cgi/citmgr?type=bibtex&gca=biomet; referenceurl_sufix= pdfurl_prefix= pdfurl_sufix= action= # QUERY INFO FOR NAR # Extracts BibTeX reference and article PDF file journal=Nucleic Acids Research| query=http://nar.oxfordjournals.org/cgi/search?sendit=Search&pubdate_year=&volume=<<volume>>&firstpage=<<pages>>&DOI=&author1=&author2=&title=&andorexacttitle=and&titleabstract=&andorexacttitleabs=and&fulltext=&andorexactfulltext=and&fmonth=Jan&fyear=1990&tocsectionid=all&RESULTFORMAT=1&hits=10&hitsbrief=25&sortspec=relevance&sortspecbrief=relevance capture_from_query=http://nar\.oxfordjournals\.org/cgi/content/abstract/([/\d\w]+)\? referenceurl_prefix=http://nar.oxfordjournals.org/cgi/citmgr?type=bibtex&gca=nar; referenceurl_sufix= pdfurl_prefix=http://nar.oxfordjournals.org/cgi/reprint/ pdfurl_sufix=.pdf action= # QUERY INFO FOR SCIENCE # Extracts BibTeX reference and article PDF file journal=Science| query=http://www.sciencemag.org/cgi/search?sendit=Search&pubdate_year=&volume=<<volume>>&firstpage=<<pages>>&DOI=&author1=&author2=&title=&andorexacttitle=and&titleabstract=&andorexacttitleabs=and&fulltext=&andorexactfulltext=and&fmonth=Jan&fyear=1990&tocsectionid=all&RESULTFORMAT=1&hits=10&hitsbrief=25&sortspec=relevance&sortspecbrief=relevance capture_from_query=http://www\.sciencemag\.org/cgi/reprint/sci;([/\d\w]+)\? referenceurl_prefix=http://www.sciencemag.org/cgi/citmgr?type=bibtex&gca=sci; referenceurl_sufix= pdfurl_prefix=http://www.sciencemag.org/cgi/reprint/ pdfurl_sufix=.pdf action= # QUERY INFO FOR BJ # Extracts BibTeX reference and article PDF file journal=Biophysical Journal| query=http://www.biophysj.org/cgi/search?sendit=Search&pubdate_year=&volume=<<volume>>&firstpage=<<pages>>&DOI=&author1=&author2=&title=&andorexacttitle=and&titleabstract=&andorexacttitleabs=and&fulltext=&andorexactfulltext=and&fmonth=Jan&fyear=1990&tocsectionid=all&RESULTFORMAT=1&hits=10&hitsbrief=25&sortspec=relevance&sortspecbrief=relevance capture_from_query=http://www\.biophysj\.org/cgi/reprint/([/\d\w]+)\? referenceurl_prefix=http://www.biophysj.org/cgi/citmgr?type=bibtex&gca=biophysj; referenceurl_sufix= pdfurl_prefix=http://www.biophysj.org/cgi/reprint/ pdfurl_sufix=.pdf action= # QUERY INFO FOR B # Extracts BibTeX reference and article PDF file journal=Bioinformatics| query=http://bioinformatics.oxfordjournals.org/cgi/search?sendit=Search&pubdate_year=&volume=<<volume>>&firstpage=<<pages>>&DOI=&author1=&author2=&title=&andorexacttitle=and&titleabstract=&andorexacttitleabs=and&fulltext=&andorexactfulltext=and&fmonth=Jan&fyear=1990&tocsectionid=all&RESULTFORMAT=1&hits=10&hitsbrief=25&sortspec=relevance&sortspecbrief=relevance capture_from_query=http://bioinformatics\.oxfordjournals\.org/cgi/reprint/([/\d\w]+)\? referenceurl_prefix=http://bioinformatics.oxfordjournals.org/cgi/citmgr?type=bibtex&gca=bioinfo; referenceurl_sufix= pdfurl_prefix=http://bioinformatics.oxfordjournals.org/cgi/reprint/ pdfurl_sufix=.pdf action= # QUERY INFO FOR PubMed # Extracts Medline reference # Blank journal meaning 'any journal name' journal= query=http://www.ncbi.nlm.nih.gov/pubmed?term=<<doi>> capture_from_query=\bPMID:\D{1,10}(\d+)\D referenceurl_prefix=http://www.ncbi.nlm.nih.gov/pubmed/ referenceurl_sufix=?report=xml&format=text pdfurl_prefix=http://www.ncbi.nlm.nih.gov/pmc/articles/pmid/ pdfurl_sufix=/pdf/ action=htm2txt_referenceurl # QUERY INFO FOR PROLA # Extracts BibTeX reference journal= query=http://link.aps.org/doi/<<doi>> capture_from_query=href="/export/(.+)\?type=bibtex referenceurl_prefix=http://prola.aps.org/export/ referenceurl_sufix=?type=bibtex pdfurl_prefix= pdfurl_sufix= action= # QUERY INFO FOR PROLA # Extracts BibTeX reference journal= query=http://link.aps.org/doi/<<doi>> capture_from_query=href="/export/(.+)\.bibtex referenceurl_prefix=http://physics.aps.org/export/ referenceurl_sufix=.bibtex pdfurl_prefix= pdfurl_sufix= action= # QUERY INFO FOR PubMed, SPECIAL CASES (PubMed doesn't know full journal name) # Extracts Medline reference journal=Proteins: Structure, Function, and Bioinformatics|Proteins journal=Proteins: Structure, Function, and Genetics|Proteins query=http://www.ncbi.nlm.nih.gov/pubmed?term=<<journal>>[Jour]+AND+<<volume>>[volume]+AND+<<pages>>[page] capture_from_query=\bPMID:\D{1,10}(\d+)\D referenceurl_prefix=http://www.ncbi.nlm.nih.gov/pubmed/ referenceurl_sufix=?report=xml&format=text pdfurl_prefix=http://www.ncbi.nlm.nih.gov/pmc/articles/pmid/ pdfurl_sufix=/pdf/ action=htm2txt_referenceurl # QUERY INFO FOR PubMed # Extracts Medline reference # Blank journal meaning 'any journal name' journal= query=http://www.ncbi.nlm.nih.gov/pubmed?term=<<journal>>[Jour]+AND+<<volume>>[volume]+AND+<<pages>>[page] capture_from_query=\bPMID:\D{1,10}(\d+)\D referenceurl_prefix=http://www.ncbi.nlm.nih.gov/pubmed/ referenceurl_sufix=?report=xml&format=text pdfurl_prefix=http://www.ncbi.nlm.nih.gov/pmc/articles/pmid/ pdfurl_sufix=/pdf/ action=htm2txt_referenceurl # QUERY INFO FOR ACS # BibTeX references are available... but they contain HTML encoding for non-ascii characters. # So just point to the abstract page. journal=Accounts of Chemical Research|achre4 journal=ACS Applied Materials and Interfaces|aamick journal=Analytical Chemistry|ancham journal=Analytical Chemistry A-Pages|anchama journal=Biochemistry|bichaw journal=Bioconjugate Chemistry|bcches journal=Biomacromolecules|bomaf6 journal=Biotechnology Progress|bipret journal=Chemical Research in Toxicology|crtoec journal=Chemical Reviews|chreay journal=Chemistry of Materials|cmatex journal=Crystal Growth and Design|cgdefu journal=Energy and Fuels|enfuem journal=Environmental Science and Technology A-Pages|esthaga journal=Environmental Science and Technology|esthag journal=Industrial and Engineering Chemistry|iechad journal=Industrial and Engineering Chemistry Research Fundamentals|iecfa7 journal=Industrial and Engineering Chemistry Research|iecred journal=Inorganic Chemistry|inocaj journal=Journal of Agricultural and Food Chemistry|jafcau journal=Journal of Chemical and Engineering Data|jceaax journal=Journal of Chemical Information and Computer Sciences|jcisd8 journal=Journal of Chemical Information and Modeling|jcisd8 journal=Journal of Chemical Theory and Computation|jctcce journal=Journal of Combinatorial Chemistry|jcchff journal=Journal of Medicinal Chemistry|jmcmar journal=Journal of Natural Products|jnprdf journal=Journal of Organic Chemistry|joceah journal=The Journal of Physical Chemistry A|jpcafh journal=The Journal of Physical Chemistry B|jpcbfk journal=The Journal of Physical Chemistry C|jpccfk journal=Journal of Physical Chemistry|jpchax journal=Journal of Proteome Research|jprobs journal=Journal of the American Chemical Society|jacsat journal=Langmuir|langd5 journal=Macromolecules|mamobx journal=Molecular Pharmaceutics|mpohbp journal=Nano Letters|nalefd journal=Organic Letters|orlef7 journal=Organic Process Research and Development|oprdfk journal=Organometallics|orgnd7 query=http://pubs.acs.org/action/quickLink?quickLinkJournal=<<journal>>&quickLinkVolume=<<volume>>&quickLinkPage=<<pages>>&cookieSet=1 capture_from_query= referenceurl_prefix= referenceurl_sufix= pdfurl_prefix= pdfurl_sufix= action=browse_query # QUERY INFO FOR JCP, JAP and JMP # Extracts BibTeX reference journal=The Journal of Chemical Physics|JCP journal=Journal of Chemical Physics|JCP journal=Journal of Applied Physics|JAP journal=Journal of Mathematical Physics|JMP query=http://link.aip.org/link/?<<journal>>/<<volume>>/<<pages>> capture_from_query=filetype=pdf&id=([\w\d]+)& referenceurl_prefix=http://scitation.aip.org/getabs/servlet/GetCitation?fn=view_bibtex2&source=scitation&PrefType=ARTICLE&PrefAction=Add+Selected&SelectCheck= referenceurl_sufix=&downloadcitation=+Go+ pdfurl_prefix=http://scitation.aip.org/getpdf/servlet/GetPDFServlet?filetype=pdf&id= pdfurl_sufix=&idtype=cvips action= # QUERY INFO FOR DOI # If DOI is known, and so far the reference is not found, at least browse reference journal= query=http://dx.doi.org/<<doi>> capture_from_query= referenceurl_prefix= referenceurl_sufix= pdfurl_prefix= pdfurl_sufix= action=browse_query # QUERY INFO FOR CR journal= query=http://www.crossref.org/guestquery?search_type=journal&auth=&issn=&title=<<journal>>&art_title=&volume=<<volume>>&issue=&page=<<pages>>%20&year=&isbn=&comp_num=&series_title=&multi_hit=on&view_records=Search&queryType=bibsearch capture_from_query=>\s*http://dx\.doi\.org/(.+)</a> referenceurl_prefix=http://dx.doi.org/ referenceurl_sufix= pdfurl_prefix= pdfurl_sufix= action=browse_referenceurl # QUERY INFO FOR PubMed # Extracts Medline reference # Uses <<title>> tag journal= query=http://www.ncbi.nlm.nih.gov/pubmed?term=<<title>> capture_from_query=\bPMID:\D{1,10}(\d+)\D referenceurl_prefix=http://www.ncbi.nlm.nih.gov/pubmed/ referenceurl_sufix=?report=xml&format=text pdfurl_prefix=http://www.ncbi.nlm.nih.gov/pmc/articles/pmid/ pdfurl_sufix=/pdf/ action=htm2txt_referenceurl # QUERY INFO FOR Google Scholar # Uses <<excerpt>> tag journal= query=https://scholar.google.com/scholar?hl=en&lr=&ie=UTF-8&q=<<excerpt>>&btnG=Search capture_from_query= referenceurl_prefix= referenceurl_sufix= pdfurl_prefix= pdfurl_sufix= action=browse_query # QUERY INFO FOR Google Scholar journal= query=https://scholar.google.com/scholar?hl=en&lr=&ie=UTF-8&q=<<doi>>&btnG=Search capture_from_query=info:(\w+):scholar referenceurl_prefix=https://scholar.google.com/scholar.bib?hl=en&lr=&ie=UTF-8&q=info: referenceurl_sufix=:scholar.google.com/&output=citation&oe=ASCII&oi=citation pdfurl_prefix= pdfurl_sufix= action= # QUERY INFO FOR Google Scholar # Uses <<excerpt>> tag journal= query=https://scholar.google.com/scholar?hl=en&lr=&ie=UTF-8&q=<<excerpt>>&btnG=Search capture_from_query=info:(\w+):scholar referenceurl_prefix=https://scholar.google.com/scholar.bib?hl=en&lr=&ie=UTF-8&q=info: referenceurl_sufix=:scholar.google.com/&output=citation&oe=ASCII&oi=citation pdfurl_prefix= pdfurl_sufix= action= ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/data/PaxHeaders.3194/tex2html_local_mathjax_header.html��������������������������������0000644�0000000�0000000�00000000132�13124510216�022067� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.719257421 30 atime=1498583183.003254785 30 ctime=1498583182.719257421 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/data/tex2html_local_mathjax_header.html������������������������������������������������0000644�0001750�0000144�00000000444�13124510216�023463� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<script type="text/x-mathjax-config"> MathJax.Hub.Config({ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], tex2jax: {inlineMath: [["$","$"],["\\(","\\)"]]} }); </script> <script type="text/javascript" src="/usr/share/javascript/mathjax/MathJax.js"></script> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/data/PaxHeaders.3194/lexicon.pos�������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�015420� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.711257496 30 atime=1498583183.003254785 30 ctime=1498583182.711257496 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/data/lexicon.pos�����������������������������������������������������������������������0000644�0001750�0000144�00002175677�13124510216�017043� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#--------------------------------------------------------------------------- # cb2Bib POS Lexicon File #--------------------------------------------------------------------------- # # Tags: # A adjective # B between # C countable: one, two, ..., i, ii, ... # F from # G verbal noun # I in, on, for # N noun # O plural noun # P preposition # Q as # R adverb # S short word # T to # U union # V verb # # Values for non-regular words had been set according to www.wiktionary.org. #--------------------------------------------------------------------------- 2536 .A.A.A.A.N. .A.A.A.G. .A.A.A.N. .A.A.A.N.N.O. .A.A.A.NV. .A.A.A.NV.NV. .A.A.A.NV.O. .A.A.A.O. .A.A.A.OV. .A.A.AN. .A.A.AN.AN.O. .A.A.AN.G. .A.A.AN.N. .A.A.AN.O. .A.A.ANR. .A.A.ANV. .A.A.ANV.N. .A.A.ANV.NV. .A.A.ANV.NV.G. .A.A.ANV.OV. .A.A.AR.OV. .A.A.AR.OV.O. .A.A.AV.A.NV. .A.A.G.NV. .A.A.G.O. .A.A.G.OV. .A.A.I.A.OV. .A.A.N. .A.A.N.A.G. .A.A.N.A.N. .A.A.N.G. .A.A.N.I.AN.O. .A.A.N.I.N.N. .A.A.N.I.N.NV. .A.A.N.I.NV.N. .A.A.N.N. .A.A.N.N.N. .A.A.N.N.NV. .A.A.N.N.NV.N. .A.A.N.NV. .A.A.N.NV.N. .A.A.N.NV.N.N. .A.A.N.NV.O. .A.A.N.O. .A.A.N.OV. .A.A.N.P.AN.OV. .A.A.N.P.O. .A.A.N.U.AN.N. .A.A.NV. .A.A.NV.I.A.OV. .A.A.NV.N. .A.A.NV.NV. .A.A.NV.O. .A.A.NV.OV. .A.A.O. .A.A.O.I.A.NV. .A.A.O.I.N.O. .A.A.O.I.N.U.N. .A.A.O.N. .A.A.O.U.N.O. .A.A.OV. .A.A.S.O. .A.A.U.A.N. .A.A.U.A.NV. .A.A.U.A.O. .A.AG. .A.AG.N. .A.AN.A.N. .A.AN.A.NV. .A.AN.A.O. .A.AN.A.OV. .A.AN.AN.AN.O. .A.AN.AN.G.N. .A.AN.AN.N. .A.AN.AN.O. .A.AN.AN.O.I.ANV.NV. .A.AN.AN.O.U.O. .A.AN.AN.OV. .A.AN.ANR.A.N. .A.AN.ANV.N. .A.AN.ANV.OV. .A.AN.AR.OV. .A.AN.G.ANRV.O. .A.AN.G.I.AN.O. .A.AN.G.N. .A.AN.G.O. .A.AN.I.A.NV. .A.AN.I.A.O. .A.AN.I.N.OV. .A.AN.N. .A.AN.N.G. .A.AN.N.I.N.N. .A.AN.N.N. .A.AN.N.NV. .A.AN.N.O. .A.AN.N.OV. .A.AN.N.U.O. .A.AN.NV. .A.AN.NV.N. .A.AN.NV.N.I.A.G. .A.AN.NV.NV. .A.AN.NV.O. .A.AN.NV.OV. .A.AN.O. .A.AN.O.I.NV.OV. .A.AN.O.P.AN.O. .A.AN.O.U.O. .A.AN.OV. .A.AN.OV.U.ANV.OV. .A.AN.S.N. .A.AN.S.N.N.O. .A.AN.U.AV.O. .A.AN.U.N. .A.AN.U.NV. .A.ANRV.A.N. .A.ANRV.N.I.N.NV. .A.ANRV.N.N. .A.ANRV.N.NV. .A.ANRV.N.O. .A.ANRV.N.OV. .A.ANRV.NV. .A.ANRV.NV.N. .A.ANRV.NV.NV. .A.ANRV.NV.O. .A.ANV.A.N. .A.ANV.A.N.N. .A.ANV.AN.N. .A.ANV.AN.O. .A.ANV.ANRV.N. .A.ANV.ANV.N. .A.ANV.ANV.NV. .A.ANV.AR.OV. .A.ANV.G.ANV.N. .A.ANV.G.U.N. .A.ANV.I.A.NV. .A.ANV.I.A.OV. .A.ANV.I.AN.O. .A.ANV.I.ANV.N. .A.ANV.I.N.O. .A.ANV.I.N.OV. .A.ANV.I.O. .A.ANV.I.OV. .A.ANV.N. .A.ANV.N.G. .A.ANV.N.N. .A.ANV.N.NV. .A.ANV.N.O. .A.ANV.NV. .A.ANV.NV.AN.O. .A.ANV.NV.G. .A.ANV.NV.N. .A.ANV.O. .A.ANV.OV. .A.ANV.U.N.N. .A.AR.ANV.A.N. .A.AR.OV.N. .A.AR.OV.NV. .A.AR.OV.O. .A.ARV.N.O. .A.AV.A.A.NV. .A.AV.A.NV. .A.AV.G.OV. .A.AV.N.NV. .A.AV.NV.NV. .A.AV.U.AN.O. .A.B.N.N.U.NV. .A.B.NV.U.N.N. .A.C.N. .A.G. .A.G.AN. .A.G.ANRV.N. .A.G.ANRV.O. .A.G.ANV. .A.G.I.A.O. .A.G.I.AN.O. .A.G.I.O. .A.G.N. .A.G.N.N. .A.G.NV. .A.G.NV.O. .A.G.NV.T.NV.G. .A.G.O. .A.G.O.I.N.G. .A.G.OV. .A.G.P.ANV.N.N. .A.G.U.A.O. .A.G.U.G. .A.G.U.N.NV. .A.I.AN.AN.O. .A.I.AN.N.N. .A.I.N.A.N. .A.I.N.N.N. .A.I.N.N.NV. .A.I.N.NV.N. .A.I.N.U.N.OV. .A.I.S.AN.N. .A.N.A.G. .A.N.A.N. .A.N.A.N.N. .A.N.A.NV. .A.N.A.OV. .A.N.AN.N. .A.N.AN.N.N. .A.N.AN.O. .A.N.ANRV.N. .A.N.ANRV.O. .A.N.ANV. .A.N.ANV.N. .A.N.ANV.O. .A.N.B.C.O. .A.N.C. .A.N.C.N. .A.N.C.N.N. .A.N.G. .A.N.G.N. .A.N.G.NV. .A.N.G.NV.N. .A.N.G.NV.O. .A.N.G.O. .A.N.I.A.A.NV.NV. .A.N.I.A.AN.O. .A.N.I.A.G. .A.N.I.A.N. .A.N.I.A.NV. .A.N.I.A.NV.NV. .A.N.I.A.O. .A.N.I.A.O.U.O. .A.N.I.A.OV. .A.N.I.AN.AN.O. .A.N.I.AN.N. .A.N.I.AN.NV. .A.N.I.AN.O. .A.N.I.AN.OV. .A.N.I.ANR.N.NV. .A.N.I.ANV.O. .A.N.I.G.O. .A.N.I.N.N. .A.N.I.N.NV.O. .A.N.I.N.O. .A.N.I.N.OV. .A.N.I.NV.N. .A.N.I.NV.NV. .A.N.I.NV.OV. .A.N.I.O. .A.N.I.O.I.N.NV. .A.N.I.O.U.O. .A.N.I.OV. .A.N.I.R.A.NV. .A.N.N. .A.N.N.ANRV.NV. .A.N.N.ANV.NV. .A.N.N.G. .A.N.N.I.A.O. .A.N.N.I.AN.N. .A.N.N.I.N.N. .A.N.N.I.O. .A.N.N.N. .A.N.N.N.NV. .A.N.N.N.O. .A.N.N.NV. .A.N.N.NV.O. .A.N.N.O. .A.N.N.OV. .A.N.NV. .A.N.NV.ANV.N. .A.N.NV.I.O. .A.N.NV.N. .A.N.NV.N.N. .A.N.NV.NV. .A.N.NV.O. .A.N.NV.OV. .A.N.O. .A.N.O.I.A.G. .A.N.O.I.NV.N.O. .A.N.O.I.NV.O. .A.N.O.I.O. .A.N.O.N. .A.N.O.P.ANV.N.N. .A.N.O.Q.N.O. .A.N.OV. .A.N.P.A.G. .A.N.P.AN.G. .A.N.P.AV.G. .A.N.P.G. .A.N.P.OV. .A.N.S.N. .A.N.S.N.O. .A.N.S.O. .A.N.T.A.G. .A.N.T.A.N.I.OV. .A.N.T.A.NV. .A.N.T.AN.N. .A.N.T.G. .A.N.U.A.N. .A.N.U.A.O. .A.N.U.AN.N. .A.N.U.AN.O. .A.N.U.ANRV.N. .A.N.U.N.N.O. .A.N.U.N.NV.O. .A.N.U.N.O. .A.N.U.N.OV. .A.N.U.O. .A.NV.A.N. .A.NV.A.O. .A.NV.AN. .A.NV.AN.N.OV. .A.NV.ANV. .A.NV.C.OV. .A.NV.G. .A.NV.G.N. .A.NV.G.NV. .A.NV.G.OV. .A.NV.I.A.NV. .A.NV.I.A.U.A.N. .A.NV.I.AN.NV. .A.NV.I.AN.O. .A.NV.I.AN.OV. .A.NV.I.N.I.N. .A.NV.I.N.N. .A.NV.I.N.NV. .A.NV.I.O. .A.NV.I.OV. .A.NV.N. .A.NV.N.G. .A.NV.N.I.A.O. .A.NV.N.I.O. .A.NV.N.N. .A.NV.N.N.OV. .A.NV.N.NV. .A.NV.N.O. .A.NV.N.OV. .A.NV.N.U.AN.O. .A.NV.N.U.O. .A.NV.NV. .A.NV.NV.I.A.O. .A.NV.NV.N. .A.NV.NV.N.O. .A.NV.NV.N.P.A.G. .A.NV.NV.NV. .A.NV.NV.O. .A.NV.NV.OV. .A.NV.O. .A.NV.O.U.NV.OV. .A.NV.O.U.OV. .A.NV.OV. .A.NV.OV.N. .A.NV.P.A.A.A.O. .A.NV.P.A.ANV.O. .A.NV.P.A.N. .A.NV.P.A.O. .A.NV.P.N.O. .A.NV.P.OV. .A.NV.S.O. .A.NV.T.AN.N. .A.NV.U.A.NV. .A.NV.U.A.NV.N. .A.NV.U.ANV.NV. .A.NV.U.G. .A.NV.U.N.NV. .A.NV.U.O. .A.O.ANV. .A.O.G. .A.O.I.A.A.N.N. .A.O.I.A.A.O. .A.O.I.A.G. .A.O.I.A.N. .A.O.I.A.N.NV.N. .A.O.I.A.NV. .A.O.I.A.O. .A.O.I.AN.AN.O. .A.O.I.AN.N.N. .A.O.I.AN.O. .A.O.I.ANR.O. .A.O.I.ANV.O. .A.O.I.G.A.O. .A.O.I.N.N. .A.O.I.N.N.O. .A.O.I.N.NV. .A.O.I.N.NV.OV. .A.O.I.N.O. .A.O.I.N.OV. .A.O.I.N.S.N. .A.O.I.O. .A.O.I.O.U.N. .A.O.I.OV. .A.O.I.OV.U.OV. .A.O.NV. .A.O.NV.N. .A.O.NV.NV. .A.O.NV.OV. .A.O.P.A.O. .A.O.P.O. .A.O.Q.O. .A.O.T.A.N. .A.O.T.N.O. .A.O.U.A.AR.OV. .A.O.U.A.N.O. .A.O.U.A.O. .A.O.U.ANV.N.O. .A.O.U.N.G. .A.O.U.N.O. .A.O.U.O. .A.O.U.O.I.O. .A.O.U.O.N. .A.O.U.OV. .A.OV.A.N.N. .A.OV.I.A.G. .A.OV.I.A.NV. .A.OV.I.A.O. .A.OV.I.AN.G. .A.OV.I.AN.N. .A.OV.I.AN.O. .A.OV.I.N.AN.O. .A.OV.I.N.N. .A.OV.I.O. .A.OV.I.OV. .A.OV.I.R.A.O. .A.OV.N. .A.OV.N.I.N. .A.OV.OV. .A.OV.P.A.ANRV.A.N. .A.OV.P.A.O. .A.OV.P.ANV.NV. .A.OV.P.N.O. .A.OV.T.O. .A.OV.U.A.N. .A.OV.U.A.O. .A.OV.U.N.O. .A.OV.U.NV.OV. .A.OV.U.O. .A.OV.U.OV. .A.P.A.AN.O. .A.P.C.N.O. .A.P.NV.NV.O. .A.R.A.G. .A.R.A.NV. .A.R.A.OV. .A.S.A.N. .A.S.AN.N. .A.S.G. .A.S.N.N. .A.S.N.N.O. .A.S.N.O. .A.S.O. .A.S.S.N. .A.S.U.N.O. .A.U.A.A.NV. .A.U.A.AN.S.N. .A.U.A.G. .A.U.A.G.N. .A.U.A.N. .A.U.A.N.I.N.N. .A.U.A.N.N. .A.U.A.N.N.N.O. .A.U.A.N.N.O. .A.U.A.N.O. .A.U.A.N.OV. .A.U.A.N.S.N. .A.U.A.N.S.N.N. .A.U.A.NV. .A.U.A.NV.OV. .A.U.A.O. .A.U.A.O.I.AN.NV. .A.U.A.O.I.ANV.N. .A.U.A.OV. .A.U.A.OV.I.AN.N. .A.U.A.OV.T.NV.N. .A.U.A.S.AN.N. .A.U.AN.A.N. .A.U.AN.A.N.O. .A.U.AN.G. .A.U.AN.N.NV. .A.U.AN.O. .A.U.AN.OV. .A.U.ANP.O. .A.U.ANR.O. .A.U.ANR.OV. .A.U.ANRV.N.NV. .A.U.ANV.O. .A.U.ANV.OV. .A.U.AR.N. .A.U.AR.N.O. .A.U.AR.O. .A.U.AV.A.NV. .A.U.G.G. .A.U.G.NV. .A.U.G.O. .A.U.G.OV. .A.U.N.G. .A.U.N.N. .A.U.N.N.OV. .A.U.N.NV. .A.U.N.O. .A.U.N.OV. .A.U.NV.OV. .A.U.R.A.N. .A.U.R.G. .AG.A. .AG.ANRV.G. .AG.ANRV.O. .AG.N. .AG.NV. .AG.O. .AG.OV. .AN.A.A.G. .AN.A.A.N. .AN.A.A.NV. .AN.A.A.NV.O. .AN.A.A.O. .AN.A.AN.N. .AN.A.AN.NV. .AN.A.AN.O. .AN.A.AN.OV. .AN.A.G. .AN.A.G.N. .AN.A.G.O. .AN.A.G.OV. .AN.A.N. .AN.A.N.G. .AN.A.N.I.AN.N. .AN.A.N.N. .AN.A.N.N.OV. .AN.A.N.NV. .AN.A.N.NV.O. .AN.A.N.O. .AN.A.N.O.I.N.N. .AN.A.N.OV. .AN.A.NV. .AN.A.NV.N. .AN.A.NV.NV. .AN.A.NV.O. .AN.A.NV.OV. .AN.A.O. .AN.A.OV. .AN.A.U.A.A.NV. .AN.A.U.A.A.O. .AN.A.U.A.O. .AN.AN.A.G. .AN.AN.A.G.N. .AN.AN.A.N. .AN.AN.A.O. .AN.AN.A.OV. .AN.AN.AN. .AN.AN.AN.AN.O. .AN.AN.AN.G. .AN.AN.AN.N. .AN.AN.AN.NV.NV. .AN.AN.AN.NV.OV. .AN.AN.AN.O. .AN.AN.ANV.N. .AN.AN.G.N. .AN.AN.G.NV. .AN.AN.G.OV. .AN.AN.I.N.NV. .AN.AN.N. .AN.AN.N.A.O. .AN.AN.N.AN.N. .AN.AN.N.G.N. .AN.AN.N.I.A.A.N. .AN.AN.N.I.O. .AN.AN.N.N. .AN.AN.N.N.O. .AN.AN.N.NV. .AN.AN.N.NV.NV. .AN.AN.N.O. .AN.AN.N.OV. .AN.AN.NV. .AN.AN.NV.A.O. .AN.AN.NV.N. .AN.AN.NV.NV. .AN.AN.NV.O. .AN.AN.NV.OV. .AN.AN.O. .AN.AN.O.A.N. .AN.AN.O.I.A.O. .AN.AN.O.I.AN.NV. .AN.AN.O.I.ANR.NV. .AN.AN.O.I.ANV.NV. .AN.AN.O.N. .AN.AN.O.NV.N. .AN.AN.O.P.A.NV. .AN.AN.O.P.OV. .AN.AN.O.U.O. .AN.AN.OV. .AN.AN.OV.N. .AN.AN.S.O. .AN.ANR.A.N. .AN.ANR.A.O. .AN.ANR.A.OV. .AN.ANR.NV.NV. .AN.ANRV.G.O. .AN.ANRV.G.OV. .AN.ANRV.N.I.G. .AN.ANRV.N.I.N. .AN.ANRV.O.I.G. .AN.ANRV.O.I.N. .AN.ANRV.U.A.G.N. .AN.ANV.A.N. .AN.ANV.AN.NV. .AN.ANV.ANV.N. .AN.ANV.I.A.NV. .AN.ANV.I.AN.NV. .AN.ANV.I.N.N. .AN.ANV.I.N.O. .AN.ANV.I.N.U.N. .AN.ANV.I.NV.O. .AN.ANV.I.O. .AN.ANV.I.OV. .AN.ANV.N. .AN.ANV.N.I.A.N. .AN.ANV.N.I.A.O. .AN.ANV.N.N. .AN.ANV.NV. .AN.ANV.NV.N. .AN.ANV.NV.O. .AN.ANV.O. .AN.ANV.OV. .AN.AR.AN.NV. .AN.AR.OV.N. .AN.AV.A.N. .AN.AV.NV.N. .AN.C.N.O. .AN.C.O. .AN.G. .AN.G.AN.N. .AN.G.ANRV.O. .AN.G.ANV.NV. .AN.G.I.AN.AN.N. .AN.G.I.AN.O. .AN.G.I.AN.OV. .AN.G.I.ANV.N. .AN.G.I.O. .AN.G.N. .AN.G.N.N. .AN.G.N.NV. .AN.G.NV.N. .AN.G.O. .AN.G.U.G. .AN.G.U.N.N. .AN.I.A.G. .AN.I.A.N. .AN.I.A.NV. .AN.I.A.O. .AN.I.A.OV. .AN.I.AN.N. .AN.I.AN.NV. .AN.I.AN.O. .AN.I.G.N. .AN.I.N.AN.N. .AN.I.N.G. .AN.I.N.N. .AN.I.N.NV. .AN.I.N.O. .AN.I.N.OV. .AN.N.A.N. .AN.N.AN. .AN.N.AN.N. .AN.N.AN.O. .AN.N.AN.OV. .AN.N.ANV. .AN.N.ANV.N. .AN.N.ANV.NV. .AN.N.ANV.O. .AN.N.G. .AN.N.G.N. .AN.N.G.O. .AN.N.G.OV. .AN.N.I.A.G. .AN.N.I.A.G.O. .AN.N.I.A.N. .AN.N.I.A.N.O. .AN.N.I.A.NV. .AN.N.I.A.NV.G. .AN.N.I.A.O. .AN.N.I.A.OV. .AN.N.I.A.U.A.N. .AN.N.I.AN.A.N. .AN.N.I.AN.N. .AN.N.I.AN.NV. .AN.N.I.AN.O. .AN.N.I.ANR.N. .AN.N.I.ANRV.G. .AN.N.I.ANV.N. .AN.N.I.ANV.OV. .AN.N.I.AR.A.O. .AN.N.I.AR.A.O.OV. .AN.N.I.AR.U.A.N. .AN.N.I.G.U.O. .AN.N.I.N.I.O. .AN.N.I.N.I.OV. .AN.N.I.N.N. .AN.N.I.N.NV. .AN.N.I.N.O. .AN.N.I.N.O.U.N. .AN.N.I.N.U.A.N. .AN.N.I.N.U.N.N. .AN.N.I.NV.ANR.NV. .AN.N.I.NV.C.NV. .AN.N.I.NV.G. .AN.N.I.NV.N. .AN.N.I.NV.N.U.N. .AN.N.I.O. .AN.N.I.O.I.N.N. .AN.N.I.O.I.O. .AN.N.I.O.U.N. .AN.N.I.OV. .AN.N.I.OV.U.OV. .AN.N.I.R.A.N. .AN.N.N. .AN.N.N.A.O. .AN.N.N.C. .AN.N.N.G. .AN.N.N.I.A.N. .AN.N.N.I.A.N.O. .AN.N.N.N. .AN.N.N.N.NV. .AN.N.N.N.OV. .AN.N.N.NV. .AN.N.N.O. .AN.N.N.OV. .AN.N.N.P.AN.N. .AN.N.NV. .AN.N.NV.G. .AN.N.NV.N. .AN.N.NV.NV. .AN.N.NV.O. .AN.N.NV.OV. .AN.N.O. .AN.N.O.I.O. .AN.N.OV. .AN.N.P.R.AN.O. .AN.N.S.N. .AN.N.U.A.N. .AN.N.U.A.O. .AN.N.U.AN.N. .AN.N.U.ANR.NV. .AN.N.U.N. .AN.N.U.N.N. .AN.N.U.N.O. .AN.N.U.N.OV. .AN.N.U.NV. .AN.N.U.NV.N. .AN.N.U.O. .AN.NV.A.G. .AN.NV.A.NV. .AN.NV.A.O. .AN.NV.AN. .AN.NV.AN.AN.O. .AN.NV.AN.N. .AN.NV.AN.NV. .AN.NV.AN.O. .AN.NV.AN.OV. .AN.NV.ANRV.G. .AN.NV.B.OV. .AN.NV.C.NV. .AN.NV.G. .AN.NV.G.OV.U.O. .AN.NV.I.A.N. .AN.NV.I.A.NV. .AN.NV.I.AN.N. .AN.NV.I.AN.NV. .AN.NV.I.AV.G. .AN.NV.I.N.N. .AN.NV.I.N.N.U.N. .AN.NV.I.N.NV. .AN.NV.I.N.O. .AN.NV.I.NV.N. .AN.NV.I.O. .AN.NV.N. .AN.NV.N.N. .AN.NV.N.N.NV. .AN.NV.N.NV. .AN.NV.N.O. .AN.NV.N.OV. .AN.NV.NV. .AN.NV.NV.N. .AN.NV.NV.NV. .AN.NV.NV.O. .AN.NV.O. .AN.NV.O.I.A.G. .AN.NV.OV. .AN.NV.OV.I.A.O. .AN.NV.U.A.O. .AN.NV.U.N. .AN.NV.U.NV.N.N. .AN.NV.U.O. .AN.O.G. .AN.O.I.A.A.O. .AN.O.I.A.G. .AN.O.I.A.N.N.NV. .AN.O.I.A.O. .AN.O.I.A.OV. .AN.O.I.AN.N.NV. .AN.O.I.AN.NV. .AN.O.I.ANR.NV. .AN.O.I.ANR.O. .AN.O.I.N.N.N. .AN.O.I.N.NV. .AN.O.I.N.NV.N. .AN.O.I.N.NV.O. .AN.O.I.N.O. .AN.O.I.N.OV. .AN.O.I.N.U.N. .AN.O.I.NV.N. .AN.O.I.NV.OV. .AN.O.N.I.N.G. .AN.O.NV. .AN.O.O. .AN.O.OV. .AN.O.P.A.NV. .AN.O.P.AN.O. .AN.O.P.AN.U.ANV.O. .AN.O.P.G.O. .AN.O.P.N. .AN.O.P.NV. .AN.O.P.O. .AN.O.P.OV. .AN.O.P.R.AN.N. .AN.O.T.N. .AN.O.U.A.O. .AN.O.U.AN.O. .AN.O.U.AN.OV. .AN.O.U.N.O.I.OV. .AN.O.U.O. .AN.O.U.O.I.AN.N. .AN.O.U.OV. .AN.OV.B.NV.O. .AN.OV.I.A.N. .AN.OV.I.AN.N. .AN.OV.I.G.O. .AN.OV.I.N. .AN.OV.I.N.N. .AN.OV.I.N.O. .AN.OV.I.O. .AN.OV.N. .AN.OV.O. .AN.OV.U.G.O. .AN.OV.U.O. .AN.P.ANRV.N. .AN.P.N.NV. .AN.P.N.O. .AN.Q.N. .AN.R.A.AN.O. .AN.R.AN.N. .AN.S.N.N.O. .AN.T.A.N. .AN.T.A.NV. .AN.T.A.O. .AN.T.AN.N. .AN.T.AN.NV. .AN.T.AR.NV. .AN.T.N.N. .AN.T.N.NV. .AN.T.NV.N. .AN.T.NV.NV. .AN.U.A.G. .AN.U.A.N. .AN.U.A.O. .AN.U.A.OV. .AN.U.AN.AN.O. .AN.U.AN.N. .AN.U.AN.NV. .AN.U.AN.O. .AN.U.AN.O.I.O. .AN.U.AN.OV. .AN.U.ANRV.NV. .AN.U.ANV.N. .AN.U.ANV.NV. .AN.U.ANV.O. .AN.U.ANV.OV. .AN.U.AV.G. .AN.U.AV.O. .AN.U.AV.OV. .AN.U.G.O. .AN.U.N.G. .AN.U.N.N.OV. .AN.U.N.O. .AN.U.N.OV. .AN.U.NV.AN.O. .AN.U.NV.O. .AN.U.R.A.AN.O. .ANP.U.A.O. .ANR.A.A.N. .ANR.A.A.NV. .ANR.A.A.NV.NV. .ANR.A.AN.N. .ANR.A.ANV.O. .ANR.A.G.NV. .ANR.A.N.NV. .ANR.A.N.O. .ANR.A.NV.N. .ANR.A.NV.NV. .ANR.A.NV.O. .ANR.AN.N.NV. .ANR.ANV.N. .ANR.G. .ANR.N.A.NV. .ANR.N.AN.NV. .ANR.N.ANV.G. .ANR.N.ANV.O. .ANR.N.G.NV. .ANR.N.N. .ANR.N.N.N. .ANR.N.N.OV. .ANR.N.NV.O. .ANR.N.NV.P.AN.N. .ANR.N.O. .ANR.N.OV.I.AN.N. .ANR.NV.A.AN.O. .ANR.NV.A.N. .ANR.NV.AN. .ANR.NV.AN.A.O. .ANR.NV.AN.O. .ANR.NV.ANV.NV.O. .ANR.NV.G. .ANR.NV.N. .ANR.NV.N.G. .ANR.NV.N.N. .ANR.NV.N.NV. .ANR.NV.NV.O. .ANR.NV.OV. .ANR.O.U.O. .ANR.OV.I.AN.A.N. .ANR.R.ANRV.N.NV. .ANR.S.N.N. .ANR.U.A.O.U.OV. .ANR.U.ANV.N. .ANR.U.ANV.O. .ANR.U.ANV.OV. .ANRV.A.A.N. .ANRV.A.G.O. .ANRV.A.N.N. .ANRV.A.N.N.NV. .ANRV.A.N.NV.O. .ANRV.A.NV.O. .ANRV.AN.NV.NV. .ANRV.AN.O. .ANRV.ANV.N. .ANRV.G. .ANRV.N.A.O. .ANRV.N.AN.N. .ANRV.N.I.AN.AN.ANV.N. .ANRV.N.I.AN.N.N. .ANRV.N.I.O. .ANRV.N.N. .ANRV.N.N.O. .ANRV.N.NV. .ANRV.N.NV.N. .ANRV.N.NV.NV. .ANRV.N.NV.OV. .ANRV.N.O. .ANRV.N.O.I.AN.NV.NV. .ANRV.N.OV. .ANRV.NV.G. .ANRV.NV.N. .ANRV.NV.N.N. .ANRV.NV.NV. .ANRV.NV.O. .ANRV.O.U.O. .ANRV.R.N. .ANRV.S.N. .ANRV.U.A.G. .ANRV.U.A.N. .ANRV.U.ANRV.N. .ANRV.U.AR.O. .ANV.A.ANPR.N.NV. .ANV.A.N. .ANV.A.N.I.N.NV. .ANV.A.N.N. .ANV.A.N.NV. .ANV.A.N.O. .ANV.A.NV.N. .ANV.A.NV.NV. .ANV.A.NV.O. .ANV.A.NV.OV. .ANV.A.O. .ANV.A.O.U.O. .ANV.AG. .ANV.AN.A.N. .ANV.AN.AN.NV. .ANV.AN.AN.O. .ANV.AN.N. .ANV.AN.N.N. .ANV.AN.NV.NV. .ANV.AN.NV.O. .ANV.AN.O. .ANV.ANV.AN.N. .ANV.ANV.N. .ANV.ANV.NV. .ANV.ANV.NV.N. .ANV.ANV.NV.NV. .ANV.ANV.NV.O. .ANV.ANV.O. .ANV.AR.OV.N. .ANV.AR.OV.O. .ANV.AV.A.NV. .ANV.C.N.N. .ANV.C.N.O. .ANV.G. .ANV.G.N. .ANV.G.O. .ANV.G.OV. .ANV.G.U.G. .ANV.G.U.N. .ANV.I.A.A.N. .ANV.I.A.A.N.U.N. .ANV.I.A.A.NV. .ANV.I.A.A.OV. .ANV.I.A.AN.NV. .ANV.I.A.N. .ANV.I.A.N.O. .ANV.I.A.N.U.N. .ANV.I.A.NV. .ANV.I.A.NV.O. .ANV.I.A.O. .ANV.I.A.OV. .ANV.I.A.OV.I.A.G. .ANV.I.AG.NV.O. .ANV.I.AG.O. .ANV.I.AN.A.OV. .ANV.I.AN.AN.N.N. .ANV.I.AN.AN.N.N.O. .ANV.I.AN.AN.O. .ANV.I.AN.N. .ANV.I.AN.N.NV. .ANV.I.AN.N.O. .ANV.I.AN.NV. .ANV.I.AN.NV.O. .ANV.I.AN.O. .ANV.I.AN.O.NV. .ANV.I.AN.OV. .ANV.I.AN.S.N. .ANV.I.ANR.N.G. .ANV.I.ANV.A.O. .ANV.I.ANV.A.O.U.O. .ANV.I.ANV.AN.N. .ANV.I.AP.OV. .ANV.I.AR.A.O. .ANV.I.AV.N. .ANV.I.AV.O. .ANV.I.AV.OV. .ANV.I.G.O. .ANV.I.G.OV. .ANV.I.N.G. .ANV.I.N.N. .ANV.I.N.NV. .ANV.I.N.NV.O. .ANV.I.N.O. .ANV.I.N.OV. .ANV.I.NV.I.ANRV.N. .ANV.I.NV.N. .ANV.I.NV.N.O. .ANV.I.NV.O. .ANV.I.NV.OV. .ANV.I.R.AN.O. .ANV.I.R.AN.OV. .ANV.N.A.O. .ANV.N.AN. .ANV.N.AN.N. .ANV.N.ANV. .ANV.N.AV.O.I.AN.N. .ANV.N.G. .ANV.N.G.NV. .ANV.N.I.A.N. .ANV.N.I.AN.O. .ANV.N.I.N.I.N.NV. .ANV.N.I.N.N. .ANV.N.I.N.NV. .ANV.N.I.N.O. .ANV.N.I.N.OV. .ANV.N.I.NV.NV.OV. .ANV.N.I.O. .ANV.N.I.OV. .ANV.N.N. .ANV.N.N.A.N. .ANV.N.N.N. .ANV.N.N.NV. .ANV.N.N.O. .ANV.N.NV. .ANV.N.NV.N. .ANV.N.NV.N.N. .ANV.N.NV.NV. .ANV.N.O. .ANV.N.OV. .ANV.N.U.N. .ANV.NV.A.AN.O. .ANV.NV.A.NV.O. .ANV.NV.A.O. .ANV.NV.AN.AN.O. .ANV.NV.AN.N. .ANV.NV.AN.O. .ANV.NV.AN.OV. .ANV.NV.B.O. .ANV.NV.G. .ANV.NV.G.N. .ANV.NV.G.O. .ANV.NV.I.A.O. .ANV.NV.I.AN.NV. .ANV.NV.I.AN.O. .ANV.NV.I.N.AN. .ANV.NV.I.N.N. .ANV.NV.I.NV.AN. .ANV.NV.I.NV.NV. .ANV.NV.I.OV. .ANV.NV.N. .ANV.NV.N.AN.O. .ANV.NV.N.N.NV.N. .ANV.NV.N.O. .ANV.NV.NV. .ANV.NV.NV.N. .ANV.NV.NV.O. .ANV.NV.O. .ANV.NV.O.I.AN.AN.O. .ANV.NV.OV. .ANV.NV.U.ANR.A.NV. .ANV.O.AN.AN.O. .ANV.O.I.A.G.O. .ANV.O.I.AN.A.AN.OV. .ANV.O.I.O. .ANV.O.N.NV. .ANV.O.OV. .ANV.O.U.A.NV.N. .ANV.O.U.O. .ANV.OV.I.A.N. .ANV.OV.I.A.N.O. .ANV.OV.I.AN.N. .ANV.OV.I.O. .ANV.OV.U.OV. .ANV.U.A.A.OV. .ANV.U.A.N. .ANV.U.A.O. .ANV.U.A.OV. .ANV.U.AN.A.N. .ANV.U.AN.N. .ANV.U.AN.O. .ANV.U.AN.OV. .ANV.U.ANR.A.OV. .ANV.U.ANRV.O. .ANV.U.ANRV.OV. .ANV.U.ANV.NV. .ANV.U.ANV.OV. .ANV.U.AV.O. .ANV.U.AV.OV. .ANV.U.N.AN.N. .ANV.U.N.AN.O. .ANV.U.N.N. .ANV.U.N.NV. .ANV.U.N.NV.O. .ANV.U.N.O. .ANV.U.N.OV. .ANV.U.NV.G. .ANV.U.NV.N. .ANV.U.NV.N.O. .ANV.U.NV.O. .ANV.U.NV.OV. .APRV.G. .AR.A.AN.O. .AR.A.N. .AR.A.N.NV. .AR.A.NV.N.N. .AR.AN.AN.NV. .AR.AN.I.OV. .AR.AN.I.OV.N. .AR.AN.N.N. .AR.AN.N.OV. .AR.ANV.A.N. .AR.ANV.A.N.I.N.NV. .AR.N.A.NV. .AR.N.I.A.OV. .AR.N.N. .AR.N.N.NV. .AR.O.I.A.OV. .AR.OV.I.N. .AR.OV.N.N. .AR.OV.N.NV. .AR.OV.NV.NV.OV. .AR.R.A.N. .AR.U.A.A.OV. .ARV.A.A.N. .ARV.A.A.N.N. .ARV.A.N.O. .ARV.AN.N.N. .ARV.ANV.I.O. .ARV.N.I.A.N. .ARV.N.NV.O. .ARV.NV.O.I.ANRV.OV. .ARV.O.I.A.O. .ARV.U.A.O. .ARV.U.A.OV. .ARV.U.ANV.O. .AV.A.A.NV. .AV.A.A.NV.NV. .AV.A.ANV.NV. .AV.A.N. .AV.A.N.N. .AV.A.N.O. .AV.A.NV.N. .AV.A.NV.NV. .AV.AN.NV.N.NV. .AV.ANV.A.NV. .AV.ANV.I.A.O. .AV.ANV.I.AN.O. .AV.ANV.I.AN.OV. .AV.ANV.I.O. .AV.ANV.NV.N. .AV.N.A.N.N. .AV.N.ANV.ANV.N. .AV.N.ANV.O. .AV.N.I.AN.N. .AV.N.I.AN.O. .AV.N.I.N.N. .AV.N.I.OV. .AV.N.N.G. .AV.N.N.G.N. .AV.N.NV.N. .AV.N.NV.NV. .AV.N.O. .AV.N.OV. .AV.NV.I.AN.NV. .AV.NV.I.N.NV. .AV.NV.N.N. .AV.NV.NV.O. .AV.NV.O. .AV.U.AN.N. .AV.U.AN.O. .AV.U.AN.OV. .AV.U.AV.N. .AV.U.AV.O. .G.A.A.N.A.G. .G.A.A.N.O. .G.A.AR.OV.O. .G.A.N. .G.A.N.O. .G.A.NV.U.A.A.OV. .G.A.O. .G.A.O.OV. .G.A.O.P.A.N.O. .G.AN.N.I.A.O. .G.ANPR. .G.ANR. .G.ANV. .G.ANV.O.I.ANV.N. .G.B.N.U.N. .G.G. .G.I.A.G. .G.I.A.O. .G.I.AN.N.I.O.N. .G.I.AN.O. .G.I.ANRV.O. .G.I.ANV.OV. .G.I.N.ANV.OV. .G.I.N.N.O. .G.I.N.O. .G.I.N.OV. .G.I.NV.O. .G.I.O.T.N.O. .G.I.OV. .G.N. .G.N.A.OV. .G.N.C. .G.N.G.OV. .G.N.I.A.O. .G.N.N. .G.N.N.N. .G.N.N.NV. .G.N.N.NV.O. .G.N.N.O. .G.N.N.U.O. .G.N.NV. .G.N.NV.O. .G.N.O. .G.N.OV. .G.N.U.AN.N. .G.NV. .G.NV.I.A.O. .G.NV.I.AN.O. .G.NV.I.AN.OV. .G.NV.I.N.NV. .G.NV.I.N.O. .G.NV.N. .G.O. .G.O.I.A.A.O. .G.O.I.A.G. .G.O.I.A.N.G.O. .G.O.I.A.O. .G.O.I.O.I.AN.NV. .G.O.NV. .G.O.U.O. .G.ORV. .G.OV. .G.OV.I.A.G. .G.OV.I.A.N. .G.OV.I.ANV.O. .G.OV.U.G.OV. .G.P.S.O. .G.P.S.OV. .G.Q.N. .G.R.A.G.O. .G.U.G.NV.O. .G.U.G.O. .N.A.A.N. .N.A.A.NV. .N.A.A.O.N. .N.A.A.OV. .N.A.AN. .N.A.AN.N. .N.A.ANRV.N. .N.A.ANRV.NV. .N.A.ANV. .N.A.ANV.NV. .N.A.AR.OV. .N.A.G.I.N.G. .N.A.G.N. .N.A.N. .N.A.N.AN.N.N. .N.A.N.N. .N.A.N.N.O. .N.A.N.NV. .N.A.N.O. .N.A.N.OV. .N.A.N.U.N. .N.A.NV. .N.A.NV.AN.G. .N.A.NV.N. .N.A.NV.NV. .N.A.NV.NV.I.A.O. .N.A.NV.O. .N.A.NV.O.I.A.O. .N.A.NV.OV. .N.A.O. .N.A.O.N. .N.A.OV. .N.A.U.A.OV. .N.AG.N. .N.AG.NV. .N.AG.O. .N.AG.OV. .N.AN.A.N. .N.AN.A.N.O. .N.AN.A.O. .N.AN.A.OV. .N.AN.AN.N. .N.AN.AN.NV. .N.AN.AN.O. .N.AN.AR.NV. .N.AN.AR.OV. .N.AN.AV.N. .N.AN.G. .N.AN.G.N. .N.AN.I.O. .N.AN.N. .N.AN.N.ANV.N. .N.AN.N.I.N.I.O. .N.AN.N.I.N.O. .N.AN.N.N. .N.AN.N.N.N. .N.AN.N.NV. .N.AN.N.O. .N.AN.N.OV. .N.AN.NV. .N.AN.NV.F.AN.N. .N.AN.NV.N. .N.AN.NV.N.O. .N.AN.NV.NV. .N.AN.NV.NV.NV. .N.AN.NV.O. .N.AN.O. .N.AN.O.I.A.G. .N.AN.O.I.N.N. .N.AN.OV. .N.AN.OV.I.A.N. .N.AN.OV.U.OV. .N.ANR.O. .N.ANRV.N. .N.ANRV.N.N. .N.ANRV.N.NV. .N.ANRV.N.O. .N.ANRV.N.OV. .N.ANRV.OV. .N.ANV.A.N. .N.ANV.A.NV. .N.ANV.AN. .N.ANV.AN.O. .N.ANV.C.O. .N.ANV.G. .N.ANV.I.A.N. .N.ANV.I.A.O. .N.ANV.I.N.NV. .N.ANV.I.N.O. .N.ANV.I.OV. .N.ANV.N. .N.ANV.N.N. .N.ANV.N.NV. .N.ANV.N.O. .N.ANV.NV. .N.ANV.NV.G. .N.ANV.NV.N. .N.ANV.NV.NV. .N.ANV.NV.NV.NV.O. .N.ANV.NV.O. .N.ANV.O. .N.ANV.OV. .N.ANV.U.N.N. .N.ANV.U.N.NV. .N.AR.AN.O. .N.AR.OV.O. .N.AV.N.N. .N.B.C.O. .N.B.C.OV. .N.B.N.U.NV. .N.B.NV.U.N. .N.C.AN.NV. .N.C.N. .N.C.N.N. .N.C.N.O. .N.C.O. .N.G. .N.G.A.N. .N.G.AN.N.N.O. .N.G.ANRV.N. .N.G.ANV.OV. .N.G.I.O. .N.G.N. .N.G.N.N. .N.G.N.O. .N.G.N.P.NV.O. .N.G.NV. .N.G.NV.N. .N.G.NV.O. .N.G.O. .N.G.OV. .N.G.P.N.N. .N.G.P.S.O. .N.G.P.S.OV. .N.G.S.O. .N.G.U.A.N. .N.G.U.G. .N.G.U.N.N. .N.G.U.N.NV. .N.G.U.NV.O. .N.I.A.A.A.N. .N.I.A.A.A.O. .N.I.A.A.N. .N.I.A.A.N.N. .N.I.A.A.NV. .N.I.A.A.NV.N. .N.I.A.A.NV.NV. .N.I.A.A.O. .N.I.A.AN.AN.O. .N.I.A.AN.G. .N.I.A.AN.N. .N.I.A.AN.N.G. .N.I.A.AN.NV. .N.I.A.AN.O. .N.I.A.ANV.NV. .N.I.A.ANV.OV. .N.I.A.G.O. .N.I.A.N. .N.I.A.N.I.AN.N. .N.I.A.N.N. .N.I.A.N.NV. .N.I.A.N.O. .N.I.A.N.U.A.N. .N.I.A.N.U.AN.N. .N.I.A.N.U.N. .N.I.A.NV.G. .N.I.A.NV.N. .N.I.A.NV.N.O. .N.I.A.NV.NV. .N.I.A.NV.O. .N.I.A.O. .N.I.A.O.I.N.N. .N.I.A.O.U.N. .N.I.A.O.U.O. .N.I.A.OV. .N.I.A.OV.P.N.N. .N.I.A.OV.P.O. .N.I.A.U.A.N. .N.I.A.U.A.NV. .N.I.A.U.AN.N. .N.I.A.U.AN.NV. .N.I.A.U.AN.O. .N.I.A.U.G.O. .N.I.A.U.N.G. .N.I.A.U.N.O. .N.I.AN.A.G. .N.I.AN.A.O. .N.I.AN.AN.N. .N.I.AN.AN.O. .N.I.AN.N. .N.I.AN.N.N. .N.I.AN.N.NV. .N.I.AN.N.O. .N.I.AN.N.OV. .N.I.AN.N.U.A.N. .N.I.AN.N.U.N. .N.I.AN.NV. .N.I.AN.O. .N.I.AN.O.I.ANR.O. .N.I.AN.OV. .N.I.AN.OV.I.G.O. .N.I.AN.U.A.G. .N.I.AN.U.A.O. .N.I.AN.U.N.G. .N.I.AN.U.O.G. .N.I.ANR.A.NV. .N.I.ANR.A.O. .N.I.ANR.AN.N.NV. .N.I.ANR.N.NV. .N.I.ANR.O. .N.I.ANRV.N.O. .N.I.ANV.AN.O. .N.I.ANV.ANV.N. .N.I.ANV.I.A.N.O. .N.I.ANV.N. .N.I.ANV.NV.N. .N.I.ANV.NV.NV. .N.I.ANV.O. .N.I.ANV.O.T.O. .N.I.ANV.OV. .N.I.ANV.U.AN.O. .N.I.AR.A.O. .N.I.AR.OV.N. .N.I.AV.ANV.NV. .N.I.AV.N. .N.I.AV.NV. .N.I.AV.O. .N.I.AV.OV. .N.I.G.A.G. .N.I.G.A.O. .N.I.G.AN.NV.N. .N.I.G.N.N. .N.I.G.N.NV.U.N. .N.I.G.P.O. .N.I.N.A.G. .N.I.N.A.N. .N.I.N.A.OV. .N.I.N.AN.N. .N.I.N.AN.NV. .N.I.N.AN.O. .N.I.N.AN.OV. .N.I.N.ANRV.N. .N.I.N.ANV.N. .N.I.N.G.N. .N.I.N.G.NV. .N.I.N.G.U.A.N. .N.I.N.I.A.G. .N.I.N.I.A.O. .N.I.N.I.N.OV. .N.I.N.I.O. .N.I.N.I.OV. .N.I.N.N. .N.I.N.N.I.AN.NV. .N.I.N.N.N. .N.I.N.N.N.G. .N.I.N.N.NV. .N.I.N.N.O. .N.I.N.N.U.AN.O. .N.I.N.N.U.G. .N.I.N.N.U.N. .N.I.N.N.U.N.N. .N.I.N.N.U.O.G. .N.I.N.NV. .N.I.N.NV.N. .N.I.N.NV.P.N.N. .N.I.N.NV.U.NV. .N.I.N.NV.U.NV.N. .N.I.N.O. .N.I.N.O.P.N.O. .N.I.N.P.ANV.N.N. .N.I.N.P.N.NV.N. .N.I.N.Q.N. .N.I.N.S.N. .N.I.N.T.N. .N.I.N.T.O. .N.I.N.U.A.G. .N.I.N.U.A.N. .N.I.N.U.AN.G. .N.I.N.U.AN.N. .N.I.N.U.AN.O. .N.I.N.U.N.N. .N.I.N.U.N.O. .N.I.N.U.O.N. .N.I.NV.A.OV. .N.I.NV.AN.O. .N.I.NV.ANR.NV. .N.I.NV.C.NV. .N.I.NV.N. .N.I.NV.N.O. .N.I.NV.N.U.N. .N.I.NV.N.U.NV.N. .N.I.NV.NV.N. .N.I.NV.O. .N.I.NV.OV. .N.I.NV.U.ANV.NV. .N.I.NV.U.N. .N.I.NV.U.NV. .N.I.NV.U.NV.A.N. .N.I.O. .N.I.O.G.U.G.N. .N.I.O.I.A.O. .N.I.O.I.AN.N. .N.I.O.I.G.O. .N.I.O.I.N.N. .N.I.O.I.NV.O. .N.I.O.I.O. .N.I.O.N.U.G. .N.I.O.NV.NV. .N.I.O.T.O. .N.I.O.T.OV. .N.I.O.U.A.O. .N.I.O.U.N.N. .N.I.O.U.O. .N.I.O.U.O.OV. .N.I.OV. .N.I.OV.U.O. .N.I.R.A.N. .N.I.R.A.N.NV. .N.I.R.A.NV. .N.I.R.AN.O. .N.I.R.AN.OV. .N.I.S.A.O. .N.I.S.AN.O. .N.I.S.T.N. .N.N. .N.N.A.G. .N.N.A.N. .N.N.A.NV. .N.N.A.OV. .N.N.AN. .N.N.AN.N. .N.N.AN.N.I.A.N. .N.N.AN.NV. .N.N.ANRV.N. .N.N.ANRV.NV. .N.N.ANV. .N.N.ANV.N. .N.N.ANV.NV. .N.N.ANV.OV. .N.N.APR.G. .N.N.B.O. .N.N.C.N. .N.N.C.N.O. .N.N.C.O. .N.N.G. .N.N.G.ANV. .N.N.G.N. .N.N.G.NV. .N.N.G.O. .N.N.G.OV. .N.N.I.A.A.NV. .N.N.I.A.G. .N.N.I.A.N. .N.N.I.A.N.I.O. .N.N.I.A.N.O. .N.N.I.A.NV. .N.N.I.A.NV.N. .N.N.I.A.NV.OV. .N.N.I.A.O. .N.N.I.AN.N. .N.N.I.AN.N.N. .N.N.I.AN.N.U.N. .N.N.I.AN.NV. .N.N.I.AN.O. .N.N.I.AN.O.U.N. .N.N.I.ANRV.NV. .N.N.I.N.AN.O. .N.N.I.N.ANPR.A.O. .N.N.I.N.N. .N.N.I.N.NV. .N.N.I.N.O. .N.N.I.N.S.N. .N.N.I.N.U.N. .N.N.I.NV.AN.O. .N.N.I.NV.G.O. .N.N.I.NV.N. .N.N.I.O. .N.N.I.O.I.O. .N.N.I.O.Q.N. .N.N.I.O.U.O. .N.N.I.OV. .N.N.N. .N.N.N.ANRV.NV. .N.N.N.ANV. .N.N.N.ANV.N. .N.N.N.C. .N.N.N.G. .N.N.N.I.A.NV. .N.N.N.N. .N.N.N.N.N. .N.N.N.N.NV. .N.N.N.N.O. .N.N.N.NV. .N.N.N.O. .N.N.N.OV. .N.N.NV. .N.N.NV.N. .N.N.NV.NV. .N.N.NV.O. .N.N.NV.OV. .N.N.O. .N.N.O.A.I.N.N. .N.N.O.I.AN.AN.O. .N.N.O.I.N.N. .N.N.O.I.N.U.G. .N.N.O.N. .N.N.O.NV. .N.N.O.OV. .N.N.OV. .N.N.P.N.AN.N. .N.N.P.NV.A.NV. .N.N.S.N.O. .N.N.S.O. .N.N.T.A.N. .N.N.U.A.A.N. .N.N.U.A.A.N.N. .N.N.U.A.G. .N.N.U.A.N. .N.N.U.A.O. .N.N.U.AN.O. .N.N.U.ANV.N. .N.N.U.G. .N.N.U.N. .N.N.U.N.N. .N.N.U.N.N.N. .N.N.U.N.N.O. .N.N.U.N.O. .N.N.U.N.OV. .N.N.U.NV.N. .N.N.U.O. .N.N.U.O.G. .N.NP. .N.NRV. .N.NV. .N.NV.A.N. .N.NV.A.OV. .N.NV.AN. .N.NV.AN.N. .N.NV.ANV. .N.NV.ANV.N. .N.NV.C.N. .N.NV.G. .N.NV.G.N. .N.NV.G.O. .N.NV.I.A.N. .N.NV.I.A.NV. .N.NV.I.AN.N. .N.NV.I.AN.O. .N.NV.I.N.N. .N.NV.I.N.NV. .N.NV.I.N.S.N. .N.NV.I.N.U.AN.N. .N.NV.I.NV.U.N. .N.NV.I.O. .N.NV.I.OV. .N.NV.N. .N.NV.N.G. .N.NV.N.N. .N.NV.N.N.N. .N.NV.N.N.N.ANV.N. .N.NV.N.NV. .N.NV.N.NV.N. .N.NV.N.O. .N.NV.N.OV. .N.NV.N.U.N. .N.NV.NV. .N.NV.NV.I.O. .N.NV.NV.N. .N.NV.NV.N.N. .N.NV.NV.NV. .N.NV.NV.NV.N. .N.NV.NV.O. .N.NV.O. .N.NV.O.I.AN.AN.O. .N.NV.O.I.N.N. .N.NV.O.I.NV.OV. .N.NV.O.I.O. .N.NV.O.P.AN.O. .N.NV.O.U.O. .N.NV.OV. .N.NV.P.AN.N. .N.NV.P.G.N. .N.NV.P.N.N. .N.NV.P.NV.N. .N.NV.P.NV.NV. .N.NV.P.OV. .N.NV.P.R.O.A.NV. .N.NV.Q.N. .N.NV.S.N. .N.NV.T.N.S.N. .N.NV.U.AN.ANV.NV.N. .N.NV.U.AN.N. .N.NV.U.N.G. .N.NV.U.N.N. .N.NV.U.N.NV. .N.NV.U.NV.N. .N.NV.U.NV.NV. .N.O. .N.O.G.AN.N. .N.O.I.A.G. .N.O.I.A.N.O. .N.O.I.A.O. .N.O.I.A.O.U.G. .N.O.I.AN.AN.O. .N.O.I.AN.N.N. .N.O.I.ANV.N.N. .N.O.I.N.ANRV.N. .N.O.I.N.O. .N.O.I.NV.O. .N.O.N. .N.O.NV.N. .N.O.O. .N.O.OV. .N.O.P.A.N.O. .N.O.P.A.O. .N.O.P.N.N. .N.O.P.N.OV. .N.O.P.O. .N.O.Q.A.OV. .N.O.Q.N.O. .N.O.U.A.NV.O. .N.O.U.A.OV. .N.O.U.AN.O. .N.O.U.ANRV.O. .N.O.U.N.O. .N.O.U.N.OV. .N.O.U.NV.N. .N.O.U.O. .N.O.U.OV. .N.OV. .N.OV.I.A.N. .N.OV.I.A.O. .N.OV.I.AN.NV. .N.OV.I.ANV.N. .N.OV.I.N.N. .N.OV.I.N.NV. .N.OV.I.N.O. .N.OV.I.O. .N.OV.I.OV. .N.OV.P.AN.N. .N.OV.P.OV. .N.OV.U.A.O. .N.OV.U.ANV.OV. .N.OV.U.N.N. .N.OV.U.O. .N.P.N.NV.ANV.N. .N.P.N.NV.N.N. .N.Q.N. .N.Q.NV.NV. .N.R.N. .N.S.A.N. .N.S.AN. .N.S.AN.N. .N.S.ANV. .N.S.N. .N.S.N.ANV.O. .N.S.N.N. .N.S.N.N.N. .N.S.N.N.N.N. .N.S.N.O. .N.S.O. .N.S.O.U.N.N. .N.S.S.N. .N.S.U.N.O. .N.S.U.S.O. .N.T.A.A.NV. .N.T.A.A.NV.N. .N.T.A.G.N. .N.T.AN.A.NV. .N.T.AN.AN.O. .N.T.ANR.NV.N. .N.T.ANV.A.O. .N.T.ANV.N.NV. .N.T.ANV.N.O. .N.T.ANV.NV.N. .N.T.G.ANRV.N. .N.T.N.I.OV. .N.T.N.N.U.O. .N.T.N.NV.N. .N.T.NV.AN.A.G. .N.U.A.G.ANRV.N.NV. .N.U.A.N.O. .N.U.AN.N. .N.U.AN.NV. .N.U.ANR.NV.N. .N.U.ANRV.N.N. .N.U.ANRV.N.N.O. .N.U.ANV.AN.O. .N.U.ANV.G. .N.U.ANV.N. .N.U.ANV.O. .N.U.G. .N.U.G.N. .N.U.G.O. .N.U.G.OV. .N.U.N. .N.U.N.A.OV. .N.U.N.AN.N. .N.U.N.ANV.OV. .N.U.N.G. .N.U.N.I.A.A.NV. .N.U.N.I.A.O. .N.U.N.I.AN.O. .N.U.N.I.G.N. .N.U.N.I.N.O. .N.U.N.I.N.OV. .N.U.N.N. .N.U.N.N.N. .N.U.N.N.O. .N.U.N.N.OV. .N.U.N.NV. .N.U.N.NV.N. .N.U.N.NV.O. .N.U.N.NV.OV. .N.U.N.O. .N.U.N.OV. .N.U.N.P.ANV.N. .N.U.NV. .N.U.NV.G. .N.U.NV.N. .N.U.NV.NV. .N.U.NV.O. .N.U.NV.OV. .N.U.O.G. .N.U.O.I.A.N. .N.U.O.N. .NR.NV. .NV.A.A.N.O. .NV.A.AN.O. .NV.A.ANV. .NV.A.ANV.N. .NV.A.ANV.OV.U.OV. .NV.A.I.ANV.N. .NV.A.N. .NV.A.N.N. .NV.A.N.NV. .NV.A.N.NV.O. .NV.A.N.O. .NV.A.NV. .NV.A.NV.N. .NV.A.NV.O. .NV.A.O. .NV.A.O.U.NV.O. .NV.A.OV. .NV.AN.I.ANV.NV. .NV.AN.I.N.G. .NV.AN.I.N.NV. .NV.AN.N. .NV.AN.N.N. .NV.AN.N.NV. .NV.AN.N.OV. .NV.AN.NV. .NV.AN.O. .NV.AN.O.P.R.AN.N. .NV.AN.OV. .NV.ANR.NV.N. .NV.ANV.A.NV. .NV.ANV.ANV.NV. .NV.ANV.G. .NV.ANV.I.A.N. .NV.ANV.N. .NV.ANV.N.N. .NV.ANV.N.OV. .NV.ANV.NV. .NV.ANV.NV.N. .NV.ANV.O. .NV.AOV.U.OV. .NV.B.C.N. .NV.B.C.O. .NV.B.C.OV. .NV.B.N.O. .NV.B.N.U.N. .NV.B.NV.U.NV. .NV.B.S.O. .NV.C.A.N. .NV.C.A.N.N.N. .NV.C.A.N.O. .NV.C.A.O. .NV.C.N. .NV.C.N.N. .NV.C.N.O. .NV.C.NV. .NV.C.NV.NV. .NV.C.O. .NV.C.OV. .NV.G. .NV.G.ANV. .NV.G.I.O. .NV.G.N. .NV.G.O. .NV.G.OV. .NV.G.U.G. .NV.G.U.NV.G. .NV.G.U.O.G. .NV.I.A.A.N. .NV.I.A.A.NV. .NV.I.A.A.O. .NV.I.A.ANR.OV. .NV.I.A.G. .NV.I.A.G.U.N. .NV.I.A.N. .NV.I.A.N.I.N. .NV.I.A.N.NV. .NV.I.A.N.O. .NV.I.A.N.U.G. .NV.I.A.N.U.N. .NV.I.A.N.U.O. .NV.I.A.NV. .NV.I.A.NV.N. .NV.I.A.NV.NV. .NV.I.A.O. .NV.I.A.OPV. .NV.I.A.OV. .NV.I.A.U.A.G. .NV.I.A.U.A.N. .NV.I.A.U.A.O. .NV.I.AG.O. .NV.I.AN.A.N. .NV.I.AN.A.O. .NV.I.AN.AN.N. .NV.I.AN.AN.NV. .NV.I.AN.AN.O. .NV.I.AN.ANR.OV. .NV.I.AN.ANV.OV. .NV.I.AN.N. .NV.I.AN.N.I.N.N. .NV.I.AN.N.N. .NV.I.AN.N.N.OV. .NV.I.AN.N.U.N.O. .NV.I.AN.O. .NV.I.AN.OV. .NV.I.AN.U.A.O. .NV.I.AN.U.AV.O. .NV.I.AN.U.N.N. .NV.I.AN.U.O.G. .NV.I.ANR.N.NV. .NV.I.ANRV.U.A.G. .NV.I.ANV.O. .NV.I.ANV.OV. .NV.I.APRV.AN.N. .NV.I.AV.N. .NV.I.AV.NV. .NV.I.AV.O. .NV.I.C.AN.ANV.O. .NV.I.G.N. .NV.I.G.NV. .NV.I.G.O. .NV.I.G.OPV. .NV.I.G.OV. .NV.I.N.ANRV.N. .NV.I.N.G. .NV.I.N.I.OV.U.OV. .NV.I.N.N. .NV.I.N.N.N. .NV.I.N.N.U.O. .NV.I.N.NV. .NV.I.N.NV.NV. .NV.I.N.O. .NV.I.N.OV. .NV.I.N.S.N. .NV.I.N.U.A.N. .NV.I.N.U.AN.O. .NV.I.N.U.N.O. .NV.I.NV.G. .NV.I.NV.G.NV. .NV.I.NV.N. .NV.I.NV.N.N. .NV.I.NV.NV. .NV.I.NV.O. .NV.I.NV.OV. .NV.I.O.I.NV.A.N. .NV.I.O.N. .NV.I.O.N.U.G. .NV.I.O.NV. .NV.I.O.NV.U.AN.G. .NV.I.O.OV. .NV.I.O.U.O.OV. .NV.I.OV.N. .NV.I.OV.NV. .NV.I.R.A.O. .NV.I.S.N.OV. .NV.N. .NV.N.A.N. .NV.N.A.O. .NV.N.AN. .NV.N.AN.N. .NV.N.AN.NV. .NV.N.ANRV.O. .NV.N.ANV.N. .NV.N.B.NV.U.NV. .NV.N.G. .NV.N.G.N. .NV.N.G.NV. .NV.N.G.O. .NV.N.I.A.G. .NV.N.I.A.NV. .NV.N.I.A.O. .NV.N.I.AN.N. .NV.N.I.AN.NV. .NV.N.I.AN.O. .NV.N.I.C.OV. .NV.N.I.N.N. .NV.N.I.N.O. .NV.N.I.O. .NV.N.N. .NV.N.N.A.N. .NV.N.N.G. .NV.N.N.I.NV. .NV.N.N.N. .NV.N.N.N.NV. .NV.N.N.NV. .NV.N.N.O. .NV.N.N.OV. .NV.N.NV. .NV.N.NV.I.N. .NV.N.NV.N. .NV.N.NV.NV. .NV.N.NV.O. .NV.N.O. .NV.N.O.I.N. .NV.N.OV. .NV.N.P.A.G. .NV.N.P.A.N. .NV.N.P.AN.NV. .NV.N.P.N. .NV.N.P.N.N. .NV.N.P.O. .NV.N.S.N. .NV.N.U.A.N. .NV.N.U.AN.N. .NV.N.U.AN.O. .NV.N.U.N. .NV.N.U.N.N. .NV.N.U.N.NV. .NV.N.U.NV.N. .NV.N.U.NV.N.N. .NV.N.U.O. .NV.NRV. .NV.NV. .NV.NV.A.O. .NV.NV.A.OV. .NV.NV.AG.NV. .NV.NV.AN.AN.O. .NV.NV.AN.O. .NV.NV.AV.G. .NV.NV.AV.O. .NV.NV.B.C.O. .NV.NV.C. .NV.NV.G. .NV.NV.G.I.N. .NV.NV.G.OV. .NV.NV.I.A.O. .NV.NV.I.AN.N. .NV.NV.I.ANV.NV. .NV.NV.I.N.I.O. .NV.NV.I.N.N. .NV.NV.I.N.NV. .NV.NV.I.NV.O. .NV.NV.N. .NV.NV.N.I.A.NV. .NV.NV.N.I.A.NV.NV. .NV.NV.N.I.AN.O. .NV.NV.N.N. .NV.NV.N.N.I.ANV.N. .NV.NV.N.NV. .NV.NV.N.O. .NV.NV.N.OV. .NV.NV.NV. .NV.NV.NV.N. .NV.NV.NV.O. .NV.NV.O. .NV.NV.OV. .NV.NV.U.AV.NV. .NV.NV.U.NV.N. .NV.NV.U.NV.NV. .NV.O. .NV.O.I.A.G. .NV.O.I.A.N. .NV.O.I.A.N.G. .NV.O.I.A.N.U.G. .NV.O.I.A.NV.N. .NV.O.I.A.O. .NV.O.I.AN.A.N.G. .NV.O.I.AN.AN.O. .NV.O.I.AN.N. .NV.O.I.AN.NV. .NV.O.I.ANR.N.NV. .NV.O.I.N.N. .NV.O.I.N.NV. .NV.O.I.N.O. .NV.O.I.N.U.A.O. .NV.O.I.NV.N. .NV.O.I.NV.N.OV. .NV.O.I.NV.U.N. .NV.O.I.NV.U.N.O. .NV.O.I.O. .NV.O.P.AN.N. .NV.O.P.ANRV.G. .NV.O.P.ANRV.G.OV. .NV.O.U.A.N. .NV.O.U.A.O. .NV.O.U.N.O. .NV.O.U.NV.OV. .NV.O.U.O. .NV.O.U.OV. .NV.OV. .NV.OV.I.A.G. .NV.OV.I.A.N.O. .NV.OV.I.A.O. .NV.OV.I.AN.N. .NV.OV.I.AN.OV. .NV.OV.I.AV.A.OV. .NV.OV.I.N.NV. .NV.OV.I.N.U.N. .NV.OV.I.O. .NV.OV.U.N.OV. .NV.OV.U.NV.O. .NV.OV.U.NV.OV. .NV.Q.A.NV. .NV.Q.AN.NV. .NV.Q.ANV.N. .NV.Q.ANV.NV. .NV.Q.N. .NV.Q.N.N. .NV.S.N. .NV.S.N.O. .NV.S.O. .NV.T.A.N. .NV.T.AN.N. .NV.T.AN.NV. .NV.T.AN.O. .NV.T.ANV.A.N. .NV.T.AV.N. .NV.T.AV.O. .NV.T.N. .NV.T.N.N. .NV.T.N.NV. .NV.T.NV.NV. .NV.T.O. .NV.U.A.N. .NV.U.A.NV. .NV.U.A.O. .NV.U.AN.AN.O. .NV.U.AN.G. .NV.U.AN.N. .NV.U.AN.NV. .NV.U.AN.O. .NV.U.AN.OV. .NV.U.ANV.AN.N.N. .NV.U.ANV.N. .NV.U.ANV.NV. .NV.U.ANV.O. .NV.U.ANV.OV. .NV.U.N.G. .NV.U.N.I.N.O. .NV.U.N.I.N.OV. .NV.U.N.I.O. .NV.U.N.I.OV. .NV.U.N.N. .NV.U.N.NV. .NV.U.N.O. .NV.U.N.OV. .NV.U.NV. .NV.U.NV.G. .NV.U.NV.I.N.O. .NV.U.NV.N. .NV.U.NV.NV. .NV.U.NV.O. .NV.U.NV.OV. .NV.U.O. .NV.U.OV. .O.A.AN.N.O. .O.AN.OV. .O.ANPR.A.ANV.OV. .O.ANPR.A.OV. .O.ANPR.N.O. .O.ANPR.N.OV. .O.B.A.OV. .O.B.AN.O. .O.B.C.OV. .O.B.N.U.N. .O.G. .O.G.AN.AN.N.N. .O.G.O. .O.I.A.A.N.N. .O.I.A.A.O. .O.I.A.AN.O. .O.I.A.AN.OV. .O.I.A.AR.OV. .O.I.A.N. .O.I.A.N.NV.N. .O.I.A.N.O. .O.I.A.N.OV. .O.I.A.N.U.N. .O.I.A.N.U.O. .O.I.A.NV.N.O. .O.I.A.O. .O.I.A.O.U.O. .O.I.A.U.A.A.O. .O.I.A.U.A.N.N. .O.I.AN.AN.O. .O.I.AN.G. .O.I.AN.N. .O.I.AN.N.I.NV.G. .O.I.AN.N.I.O. .O.I.AN.N.I.O.N. .O.I.AN.N.N.NV. .O.I.AN.N.NV.O. .O.I.AN.O. .O.I.ANV.A.NV. .O.I.ANV.A.O. .O.I.ANV.AN.N. .O.I.ANV.N. .O.I.ANV.NV.A.AN.O. .O.I.ANV.O. .O.I.AR.OV.O. .O.I.AR.U.A.N. .O.I.AV.ANV.OV. .O.I.G.A.O. .O.I.G.AN.A.O. .O.I.G.N.N. .O.I.G.N.OV. .O.I.G.P.O. .O.I.N.A.N.OV. .O.I.N.A.NV. .O.I.N.AN.N. .O.I.N.G. .O.I.N.I.A.O. .O.I.N.I.ANV.NV. .O.I.N.N. .O.I.N.N.N. .O.I.N.N.N.N. .O.I.N.N.O. .O.I.N.NV.N. .O.I.N.NV.NV. .O.I.N.NV.O. .O.I.N.O. .O.I.N.OV.U.A.O. .O.I.N.S.N. .O.I.N.S.N.N. .O.I.N.S.N.N.N. .O.I.N.U.A.N. .O.I.N.U.A.O. .O.I.N.U.G. .O.I.N.U.N. .O.I.N.U.N.N. .O.I.NV.AN.O. .O.I.NV.N. .O.I.NV.N.U.NV.N. .O.I.NV.NV.O. .O.I.O.G.U.N.N. .O.I.O.I.A.O. .O.I.O.NV.U.N. .O.I.O.NV.U.N.N. .O.I.O.U.O. .O.I.O.U.OV. .O.I.R.A.OV. .O.N. .O.N.N. .O.N.N.N. .O.N.NV. .O.N.O. .O.N.U.G. .O.N.U.N. .O.N.U.N.O. .O.N.U.NV. .O.N.U.NV.N. .O.NPR.N.NV. .O.NPR.N.OV. .O.O. .O.P.A.ANR.O. .O.P.A.G. .O.P.A.N. .O.P.A.N.O. .O.P.A.N.OV. .O.P.A.NV. .O.P.A.O. .O.P.A.OV. .O.P.AN.N.OV. .O.P.AN.NV.OV. .O.P.R.AN.O. .O.P.R.AN.OV. .O.Q.A.O. .O.Q.A.OV. .O.Q.N. .O.Q.N.N.O. .O.Q.NV.S.O. .O.T.A.ANV.I.A.G. .O.T.A.O.U.N.O. .O.T.AN.AN.O. .O.U.A.O. .O.U.A.OV. .O.U.AN.O. .O.U.AN.OV. .O.U.AN.OV.I.AN.N. .O.U.ANV.O. .O.U.ANV.OV. .O.U.N.O. .O.U.N.O.I.OV. .O.U.NV.I.N.G. .O.U.O. .O.U.O.I.A.N. .O.U.O.I.ANRV.G. .O.U.O.I.N.NV.N. .O.U.OV. .ORV.N. .OV.I.A.G. .OV.I.A.N. .OV.I.A.N.G. .OV.I.A.N.G.O. .OV.I.A.N.O. .OV.I.A.NV. .OV.I.A.O. .OV.I.A.OV. .OV.I.AG.N. .OV.I.AN.G. .OV.I.AN.N. .OV.I.AN.N.A.O. .OV.I.AN.N.OV. .OV.I.AN.O. .OV.I.AN.O.I.NV.OV. .OV.I.AN.OV. .OV.I.ANR.ANV.O. .OV.I.N.N. .OV.I.N.N.U.O.G. .OV.I.N.O. .OV.I.N.OV. .OV.I.NV.I.A.A.O. .OV.I.NV.N. .OV.I.NV.NV.U.N. .OV.N. .OV.N.ANV. .OV.O. .OV.P.A.ANRV.A.N. .OV.P.A.N. .OV.P.A.O. .OV.P.A.OV. .OV.P.N.N. .OV.P.N.O. .OV.P.NV.O. .OV.Q.N. .OV.U.ANV.N.I.N.N. .OV.U.O. .OV.U.OV. .R.A.A.A.NV. .R.A.A.A.NV.NV. .R.A.A.N. .R.A.A.NV. .R.A.A.NV.NV. .R.A.A.O. .R.A.A.OV. .R.A.AN.G. .R.A.AN.N.OV. .R.A.AN.NV. .R.A.AN.O. .R.A.AN.OV. .R.A.ANV.O. .R.A.AR.OV. .R.A.AV.N. .R.A.AV.N.NV. .R.A.G.O. .R.A.I.A.OV. .R.A.I.N.O. .R.A.I.N.OV. .R.A.N. .R.A.N.A.N. .R.A.N.ANV.N. .R.A.N.N. .R.A.N.NV. .R.A.N.NV.O. .R.A.N.O. .R.A.N.OV. .R.A.NV.N. .R.A.NV.NV. .R.A.NV.NV.O. .R.A.NV.O. .R.A.NV.OV. .R.A.O. .R.A.O.I.N.OV. .R.A.U.ANRV.N.NV. .R.A.U.R.ANRV.N.NV. .R.AN.A.N. .R.AN.A.NV. .R.AN.A.O. .R.AN.A.OV. .R.AN.AN.NV. .R.AN.AN.O. .R.AN.ANV.NV. .R.AN.N.N. .R.AN.N.NV. .R.AN.N.O. .R.AN.NV.N. .R.AN.NV.OV. .R.AN.O. .R.ANRV.N.NV. .R.ANV.A.NV. .R.ANV.AN.NV. .R.ANV.ANR.OV. .R.ANV.ANV.NV. .R.ANV.N.NV. .R.N.A.A.N.NV. .R.N.N. .R.N.N.NV. .R.O.A.NV. .R.R.A.N. .R.R.A.NV. .R.R.AN.N. .S.A.N.O. .S.AN.N.N. .S.G.N. .S.G.O. .S.N.A.N. .S.N.A.N.N. .S.N.A.N.O. .S.N.A.NV. .S.N.A.NV.N. .S.N.A.NV.O. .S.N.AN.A.O. .S.N.AN.AN.O. .S.N.AN.N. .S.N.N. .S.N.N.AN.O. .S.N.N.I.AN.N.N. .S.N.N.N. .S.N.N.NV. .S.N.N.NV.N. .S.N.N.O. .S.N.NV. .S.N.NV.N. .S.N.S.O. .S.N.U.N.O. .S.U.S.AN.O. .S.U.S.N. .S.U.S.N.O. .S.U.S.O. 13 ANGR bleeding blinding blooming cracking darkling flipping freaking frigging fucking passing raving running spanking 3 ANPRV like part round 9 ANPR inside next opposite outside over ower past through underneath 1 ANPV pace 7 ANP anti ben following given mid minus vice 70 ANRV ajar back backcast bad bare bear best better big blind clean clear counter crisscross damn dead double fast feel fine flat forward free gain half heavy home jolly just last left light long manifold nought okay overnight parallel pat plain plum plumb pretty queer rear retail reverse right room sharp short slack sleek slow smooth still stone super top trim true underground upfront upstage well wholesale wild worst wrong zigzag 133 ANR accelerando accompagnato adagietto adagio addolorato agape agitato allegro almost andante anon backstage batshit beaucoup bimonthly biweekly breech bush cantabile cold contrary crazy daily deep diminuendo diviso downhill downslope downstage downstairs downtown due early east easterly eastward everloving extempore extra far faster feminine forte fortissimo fortississimo fortnightly friendly good grandioso great hard hawse here high hourly ill incog incognito inland instant late latest likely loco main midcalf midgame midmarket midstorm midweek midwinter mighty moderato monthly more most nightly nonstop north northerly northward now orderly outstation overall overhead overside postcareer precious prefeminism prior quarterly quick real saddleback sciolto several sforzando sideway small solid sooner sore south southerly southward staccato straight straightaway stretto stupid sweet tandem tenuto thick unlikely upcountry uphill upright upslope verbatim vigoroso weekly west westerly westward whole wicked wide windward witherward worse yearly 598 ANV abrupt abstract accordion ace acute addle advance affine agglomerate aggregate aggro airmail alert alien alternate antic antique ape arch arm aspirate associate astroturf audible aught autograph average azure baby backhand bald ballpark bandy base batch battle bay beat beef bent beta bigger birth black blag blank blanket blue bluff blunt bodge bogan bombast bone bootleg born boss bottom bound brag brand brave brick brief broadcast bronze brown budget buff buffer bulk bull bully bum bung burlesque bust calm camp canary cant carpetbag case cat center champion chance charcoal charter chelate chicken chill chuff clambake class close cloverleaf clutch colly color commonplace compact complex composite compound concave concrete conditionate confederate conglomerate conscript content coo coordinate copper copycat copyleft corkscrew cosy cotton counterfeit cover cozy crack crank crap crash craven cream credential crimson cripple crisp crook cross crown crump cuckoo cut damask damp dapple deadpan deal dearn debit decrescendo degenerate delipidate dern diamond dink discount disquiet divine dop dope doss downcast draft dread drunk duff dun duplex duplicate dwarf ebb elect empty epoxy equal evergreen excommunicate exempt expatriate export express extravasate fab faint fair fake fallow fancy farewell fat favorite favourite fawn fay fear feint fell fellow filk firm fit flagellate flambe flame flank flannel flash flatter fleet flip flirt flit flush fly fore foreset foster foul frail frank fraught freak freelance french fribble fringe frisk frit frolic front full fun game garden gas gilt gimp ginger goan gorge graduate grave gray grayscale greek green grey greyscale grill grit grizzle gross ground grouse grue gun gut gutter hackney hallow hash head hench het heterodyne hinder hollow hood hurt inboard incarnadine inchoate incuse initial insensate inspiral intermediate interwiki intimate invalid inverse involute iron jade jet joint keen key kit kvetch labrish lag lame land lash lateral laureate lay lead lease leather leer letterbox levant level lighter lime limit limp lit lite lobster loose low lush magic mail mainstream major manifest mank marcel market maroon mass master mean meet mellow mere metric minor mint minute miscast miscome mock model moderate monotone monster moot mordant motive motor multiplex mum murk mushroom mute neap necklace negative net neuter noncuple nucleate null number oblique occult ochre opaque open opiate orange ordinate orphan outsize overcast overweight oyster pale palsy panic pap paper pappyshow patent peach pedal pilot pimp pink pinpoint pirate plane plus pocket polish poll pony pop port precast precedent precipitate premier preorder preseed present primary prime print proctor profane prompt proof proxy puke punk purple putty quack quad quadruplicate quarter quicksilver quiet quintate quintuple quintuplicate radge rainbow rank raspberry raven rebound recce red reflex refuse remainder remote renate reprobate retrofit retrograde ripe roast rodomontade rogue romance rose rouge rough rubbish run rush sage salt sand sandwich sanguine savage scotch scratch scrimp scrub scud secret seed seesaw select separate septimate set sextate sextuplicate shallow sham shank sheen sheer shit shite shoal shot shotgun shy sick sickle signal simple single skill skimp slate slick slight slim slurry smock smoke snub snug sob sole solo sound sour spalt spanish spare spin spiral splay split sport spruce square squat stable starch steam steep sticky stiff stiletto stock stonewall stray subject sublime submarine subordinate suction sulfur sunder superordinate surrogate suspect swank swell swike swish taboo tally tarry tart tartan tender tense tensor test thin thunk tickle tin tinct tinsel token toom total tough trade traitor traunch treble trial trick trip triple truck turnkey twin twoc underline underwater underweight unfavorite upcast uplift upset upskirt upstart vassal veg verbal vintage void wallow wanton waste wax wee weed weekend weird welcome welter wet whiff wick wildcat windup wizard wont wood yellow young 5301 AN abdicant abdominal abducent abecedarian abelian aberdonian aberrant abessive abhesive abirritant abkhasian abkhaz abkhazian ablative ablauting abluent ablutophiliac abnormal abolitionist aboriginal abortifacient abortogenic abram abrasive absolute absolutist absolvent absorbent abstergent abstersive abstinent abstractionist absurd absurdist abyssinian academic acadian acanthopterygian acaricide acatalectic acataleptic accadian acceptant accessary accessorial accessory accidental accusative accused acephalan acerate acescent achaean achaian achean acheulean acheulian acid acmeist acoelomate acoustic acrocentric acrocephalic acrocoracoid acrodont acromegalic acrylic actinoid actinopterygian active actual adamant adamantium addictive additive adelaidean adelaidian adenoid adept adessive adherent adhesive adipose adjaran adjarian adjectival adjective adjoint adjunct adjunctive adjutant adjuvant administrant adnominal adolescent adoptionist adrenal adsorbent adult adulterine adventist adverbial adversative advisory aeginetan aerial aero aerosol aerospace aery aesthetic affected afferent affirmative affluent affluential affricative afghan afghani afghanistani aforementioned african afrotherian ageist agentive agglutinant aggravative agnate agnathan agnostic agoraphobic agrarian agriculturist agrin agrypnotic airborne akkadian alabaman alabamian alabaster alar alate albanian albertan albino albuminoid alcaic alcoholic alepidote aleut aleutian alexipharmic alexiteric algebroid algerian alienans aliped aliphatic aliquant aliquot aliterate alkadienyl alkaline alkenyl alkynyl allative allelochemical allopolyploid allotetraploid alluvial almond almondine alpha alpine alpinist alsatian alterable alterative alternant alternative aluredian alveolar alveolate alwite amacrine amandine amaranthine amateur amber ambient ambisexual ambulatory amenorrheic amenorrhoeic amerasian american ameriginal amerikkkan amethyst amino aminoethoxy aminoethyl aminomethoxy aminomethyl aminopropyl ammonoid amnesic amoeboid amorite amphibian amphidiploid amygdalate amygdaloid amyl amyloid anabolic anacreontic anaesthetic anal analeptic analgesic analog analogue anaphrodisiac anarchist anatolian anchal ancient ancillary andalusian andean andorran android anejo aneroid anesthetic aneuploid angevin angiosperm anglian anglican anglophone angolan anguillan angular anhedral anhidrotic animal anionic annelid anodyne anointed anorectic anorexic anorexigenic anosmic antacid antaphrodisiac antarctican antarthritic antasthmatic antecedent antediluvian antepaenultimate antepenultimate anthelmintic anthro anthropoid antiaircraft antialarmist antiallergenic antiangiogenic antiarrhythmic antiart antiarthritic antiasthmatic antiauthoritarian antibacterial antibiotic antibugging anticapitalist anticar anticatarrhal anticatholic anticestodal anticharm anticholesterol anticholinergic antichristian anticipant anticlerical anticlinal anticoagulant anticoagulation anticollectivist anticommunist anticonsumer anticonsumerist anticonvulsant anticonvulsive anticorrosive antidemocracy antidepressant antidepressive antidesiccant antidiarrheal antidiarrheic antidiarrhoeal antidiarrhoeic antidisestablishmentarian antidiuretic antidivision antiegalitarian antielitist antiemetic antiepileptic antiequalitarian antifascist antifebrile antifeedant antifeminist antifibrinolytic antifibrotic antifield antiflatulent antifolate antifungal antigalactic antigonorrhoeic antiguan antihelminthic antihemorrhagic antiherpetic antihistaminic antiholiday antihyperglycemic antihypertensive antiinfective antiknock antileukaemic antileukemic antiliberal antilibertarian antilithic antillean antiluetic antimalarial antimicrobial antimicrobic antimilitarist antimitotic antimodern antimodernist antimonarchist antimonial antimuscarinic antimycotic antinationalist antinaturalist antineoplastic antinephritic antinicotinic antinoise antinomian antinuke antiochan antiochene antiochian antioxidant antipain antiparallel antiparasitic antiphase antiphlogistic antiphonal antiphonary antipluralist antipodean antipollution antiprotozoal antipsoriatic antipsychotic antipyretic antiquarian antirachitic antiracism antiracist antirad antirepublican antiretroviral antirevolutionary antirheumatic antiromantic antirust antiscience antiscorbutic antisecretory antiseptic antisexist antisnob antispasmatic antispasmodic antispastic antistrange antisyphilitic antiterrorist antithrombotic antitranspirant antitrinitarian antitussive antiunification antiunitary antivaccinationist antivivisectionist antwerpian anxiogenic anxiolytic aorist aostan aotearoan aperient aperitive aphasic aphidian aphrodisiac apiarian apocalyptic apolitical apopemptic apostate apotreptic appellant appellative apposite appositive approbative appurtenant apricot aqua aquaholic aquamarine aquarian arab arabian arachnoid aragonese aramaean aramean araucanian arboreal arcadian archaic archconservative archer ard argent argentine argentinean argentinian arian arietian aristotelian arithmetic arizonan armchair armenian arminian armorial aromatic arsenic arsenical arterial arthritic aruban aryan arytenoid asbestos asbuilt ascendant ascendent ascetic asexual ashcan ashkenazi asian asiatic asper aspergerian asphyxiant aspic aspirant aspirational assessorial assistant assurgent assyrian asthmatic astringent asturian atacaman ataractic atheist atlantan atlantean atlantian atta attendant attic attrahent attributive atypical auburn audio augmentative augustinian aularian aulic auricular ausonian austral australian australopith australopithecine austrian austronesian auteurist authenticist authoritarian autistic autolocking automatic automatist autosexual autumn auvergnese auxiliary avar aventine aversive avian avocado awesomesauce awol awrath axillar azerbaijani azorean azorian aztec azurine babylonian bacchanal bacchanalian bacchant backer backgain backroom backstairs backstreet backup backwoods baconian badass baggy baghdadi baghdadian bahamian bahian bahraini bajan balaamite balinese ballbusting ballotechnic balzacian bamboo banana bandleading bandpass bangladeshi bangy banner bantam baptist barbadian barbarian barbudan barbudian barcelonan barcelonian barny barnyard barren barytone basal bashert bashkir bashkortostani basic basisphenoid basque bass bastard batavian batrachian batteling batty bavarian bayard bayfront bdelloid beachside bearbaiting beasting beavery behabitive behavioralist beige belarusan belarusian belgian belgradian belgravian belizean belizian bellicist belligerent bellywark beloved beltway bendy benedictine benedictive bengali beninese benthamite benzenoid benzo beotian berber bermudan bermudian berserk beryl beserk bessarabian betamimetic betrothed bhutanese biafran biannual biaryl bible bicentennial bichord bicoastal bicolour biconditional bicuspid bicyclic bielorussian biennial biflagellate bifundamental bigeminal bignose bigorexic bijou bilabial bilbaoan bilevel bilingual billable billiard billionth bimetallist bimillenary bimillennial binary binational binomial binominal biochemical biodegradable bioidentical biologic biomedical biomusical biotech bioterrorist birdy birthing bisexual bisque bissextile bistable bitter bittersweet bituminous bivariate blackleg blackpudlian blah blairite bleak blinder blinky blockbuster blond blonde bloquiste blueberry bluffer boeotian boffo bohemian boilerplate boine bolivian bolognese bolshie bolshy bombe bombproof boolean boon borax borderline bosniac bosnian bosom bostonian bostonite botanical botswanan bouffant bougie bourgeois boutique bovine bowtie bozal brabantian braced bracero brachycephalic bracteate bragger brahmin brant brash brass brassy bratislavan braunschweiger bravest bravura braxy brayon brazilian breakable breakaway breakthrough brethren bridal briefer bright brill brilliant brimstone brindle briny brittle broad broadband broadleaf broadloom broadsheet broadway brobdingnagian bronzer broody brookside broon brownite brummie bruneian brunet brunette brusselian brutalist brutalitarian brute bryozoan bubblegum bubbly buccaneering bucharestian buckshee buckskin bucolic budapestian buddhist buggy bughouse bulgarian bulimic bummer bummy bumper bunny bunodont burgeois burgundy buriat burkinabe burkinese burlywood burman burmese burnsian burrata burundian buryat buryatian bushist business bustier butch butlerian butoh butterscotch buttery butthurt bygone byronian bysen byzantine cabindan cablinasian cactus cade caenozoic caesarean caesarian caesarist caitiff cajun calabrian calefactory calgarian calico californian callable callistan callistoan calmative calmer calymmian cambodian cambrian camelback cameloid cameronite cameroonian campbellite camper camun camunian canaanite canadarian canadian canarian canberran cancerian cancroid candid canine canonical cantabrigian cantheist cantonese canuck capacity capital capitalist capitate capitulary capitulationist cappadocian capricornian captive carbenoid carbolic carboniferous carcinostatic cardholding cardinal cardio cardioid careerist caretaker carian caridoid carminative carmine carnation carnivoran carolingian carolinian carotenoid carotid carriable carryable carryon carthusian cartilaginoid cartooney castaway castilian castiron castoff castrato casual catalan catalanophile cataleptic catalonian catarrhine catastrophist catawampus cathartic cathartical catholic catoptric catty caucasian caudatan causal causative caustic cavalier cavicorn cayenne caymanian cebine celadon celestial celibate cellular celsius cenozoic centauroid centenarian centenary centigrade centralist centrist cephalochordate cepheid ceramic ceratopsian ceratopsid ceremonial cerise cerulean cerumenolytic cesarean cestode cestoid cestrian cetacean cfnm chadian chaldean chaldee chalybeate chameleon chamois champagne champaign champian chapel characteristic charismatic charnel chartreuse chattanoogan chattel chaucerian chauvinist cheapass cheapie cheapjack cheapo chechen chelicerate chelonian chemic chemical chemophobic chemopreventive chemoprophylactic chemotherapeutic cherry chestnut chewa chic chicano chickenshit chief childbearing childcaring chilean chiller chinese chinggisid chinky chipotle chipper chippy chirpy chitty chocolate choctaw choice choleretic cholesteric cholinomimetic choplogic choral chordate christadelphian christian christofascist chromo chronic chubby churchgoing churchy chuvash cidery ciliate cimmerian cincinnatian cinderblock cinemagoing cinereous cinnabar cinnamon circassian circular circumbendibus circumflex circumstantial cisuralian citrine citron citrus civilian cladoxylopsid clairvoyant clamshell claret clarion classic classified classist clathrate clatty claustrophobic cleaner cleanup clearer clerical clericalist climacteric closer closing clubgoing clumsy coalescent coalitionist cockney cocktail cocktailian cocky cocoa codependent coed coeliac coelomate coelurosaurian coequal coeval coffee cognate coherentist cohortative coinsured colic coliform collaborative collagist collateral collectable collectible collective collectivist colloid colombian colonial colonialist colonic colophonian coloratura colored colossian coloured columbian comanche combustible comedogenic comedolytic comestible comic comitative commemorative commensal commercial commie commissive committal common commoner communist communitarian commuter comoran comorian compacter comparative compatibilist completer completist component compostable comprehensive compulsive compulsory concessionary concomitant concubinary condemned conditional conductant confectionary confederationist confessional conformist confucian congolese congratulant congregationalist conic conjunct connectionist connective connexive consequent consequentialist conservative conservatory consistent consonant conspecific constabulary constant constituent constitutional constitutionalist constructionist constructivist consumable consumerist consumptive contemplative contemporary contextualist continent continental contingent continuative contraband contraceptive contradictory convalescent conventionalist conventual convergent convertible convulsant cooler cooperative cooty copenhagener coprophiliac coptic copyrightable coracoid coral coralline cordial cordovan corfiot corinthian cormorant cornflower cornish cornsilk coronal coronary corporal corporate corporatist corrective correlative correspondent corrigent corroborative corrosive corsican cosignatory cosmetic cosmopolitan cotemporary coterminal counterfactual counterfeminist counterrevolutionary counterterrorist country countrypolitan county courtesy couth covert crackajack crackerjack crackpot cracky cracovian crapola crapper creative creek creekside crematory crenate crescent cretacean cretan crickety cricoid criminal crinoid crisper crispy croat croatian cromwellian crosser crowleyan crude crummy crunk crusty cryogenian cryptic crypto cryptofascist cuban cubic cubist cuboid cubozoan cult culturist cuneiform cunning cupreous curacaoan curbside curly curmurring current cursive curtal cush custom customary cutaway cutover cutthroat cuttie cyan cyberfeminist cyberian cybertopian cyberutopian cycloid cygnine cymric cynic cyprinid cyprinoid cypriot cytoprotective cytostatic czech czechoslovak czechoslovakian dacian dactylic dadaist daffodil dagestani dahomeyan daimonic dainty dairy dalmatian damnedest damocloid damper damson dandelion dandy danish danophone danubian daredevil dark darling darnedest darwinian dastard dative daytime dba deadbeat deader deadeye deadweight deaf dear dearest decadent decanal decapod deceased decemberist decembrist decennial decillionth decimal decisionist declensionist deconstructionist deconstructivist decorative decrescent decretal decubitis decycling deductible deerskin defeatist defective defensive definitive deictic deist delawarean delectable delhian delicate delinquent deliverable delivery delphinine deltoid deltoideus democrat demographic demoniac demonstrative demotic demulcent denarian denialist denominative deodorant departed dependent depilatory deponent depositary depressant depressive derelict derivative derogatory descendant descriptive descriptivist desi desiccant designer desirable deskside desktop desmoid detergent determinable determinate determinist deterrent detraque developmental deviant devonian devotional dexter diabetic diablo diacaustic diacritic diagnostic diagonal dialup diamante diaphoretic diatomic dickensian dickey dicky dicty didacticist didactyl diehard dielectric different differential diffusionist digastric digestive digitigrade diglot dihedral dilambdodont dilatant dilettante dilly diluent diminutive dimmer dinocephalian dinosaurian dioptric diploid directional directive directoire dirigible dirigist disabled discordian discriminant disestablishmentarian disinfectant disney dispensationalist disphenoid disposable dissentient dissident dissociative dissolvent distaff disyllabic diterpenoid dithyrambic diuretic diurnal docent docetist doctrinaire documentary dodecyl doeskin doggerel doggy dolichocephalic dolichoderine dolomite domestic domiciliary dominant dominican doner doomsday doper doppio dorian doughnut downbeat downgoing downline downstyle dozenal drab dreadful drier drinkable dropdown dropside drudgey drudgy druggy drukpa druze dryer drystone dual dualist ducky duffer dumbshit dundonian duodecillionth duodecimal duoplural duotrigintillionth durable durative dusky dutch dynamic dyslectic dyslexic dyspeptic dyspraxic dysthymic eager earnest earthian earthican eatable ebon ebony ecbolic eccentric ecclesiastic eclectic eclecticist economy ecru ecstatic ectasian ecuadorean ecuadorian ecumenist ecumenopolitan edentate ediacaran edible editorial edmontonian educational effluent egalitarian eggshell egocentric egressive egyptian eighteenth eighth eightieth ejectile elapid elastic elder elected elective electric electrical elegiac elemental eleutheromaniac elevenish eleventh eligible eliminativist elite elitist ellipsoid elliptical embonpoint embryoid emerald emergency emergent emeritus emetic emirati emo emollient emphatic empiric emplastic empyrean emulgent emunctory enantiornithine enate endemic endocrine endohedral enemy english engrailed enlightened enlisted ensuite entire enzootic eoarchean eobiotic eocene ephemeral ephesian epic epical epicene epicurean epidemic epidural epileptic epinician epipaleolithic episcopal episcopalian epispastic epizootic equalitarian equative equestrian equilateral equine equinoctial equipotential equivalent equivalve equivocal erasmian erewhonian ergative eristic eritrean erratic errhine ersatz ersatzist erse eruptive escapist escharotic esculent eskimo eskimoan esperantist essential essentialist essive estonian etesian ethical ethiopian ethmoid ethnic ethnobotanical ethoxy etruscan euboean eugeroic euphoriant euploid eurasian europan european eurosceptic euroskeptic eutectic eutectoid eutherian eutrophic eutychian evangelical eventualist everliving everyday evidentialist evil ewe excess excitant exclusionist exclusive executable executive exercitive exessive exhibitionist exhortative existentialist exoduster exotic expansionist expat expedient expendable experient expert expletive explosive exponential expressionist expressivist exquisite exterior externalist extinguishant extractive extracurricular extraterrestrial extremaduran extremal extreme extremist extrusive fabian facial fader fae faeroese fairyland fairytale faithful fakie fallback fallen falsificationist familiar family fanatic fancier fantom farmaceutical faroese fascist fashionable fastigiate fattist fatty faultfinding fauvist fav fave febricitant febrifacient fed federal federalist federation feldspathoid feline female feminist feminoid fencible feodatory feral ferroelectric festival fetid feudalist feudatory fictionalist fiducial fiduciary fifteenth fifth fiftieth fijian filipina filipino fils final finest finnic firstborn firstling fiscal fisheye fishy fissiped fitter fixative flamboyant flamingo flammable flatbed flatiron flatscreen flavian fledgling flexible flexitarian flimsy flippy floaty flocculent floppy floral florentine floridian fluid fluorescent fluoroaromatic flyaway flyspeck focusing foldout foldover folk folkie fond footlong forgotten formal formalist formative former formosan forprofit fortean forthgoing forthputting fortieth fouler foursquare fourteenth fourth fracking fractal fractile fractional franciscan francophile francophone franker franquist freebooting freer freezable fremd frequentative frequenter fresh fresher freshling freshwater freudian fricative frisian friulian frizzy froggy frontal frontier frontline frontpage fuchsia fucoid fuegian fugitive fuller functional fundamental funeral fungoid funicular funny furongian furrier furry futilitarian future futurist gabonese gagauz gainsboro gala galenical galician galilean gallant galliform gallophone galwegian gambian gamboge gamer gamine gammy gamomaniac gandharan gangsta ganymedean garnet gascon gastrokinetic gaudy gay gayer gazillionth geminian genderqueer general generic genethliac genevan genital genitive genoan gentile gentilic geodesic geordie georgian geranium gergovian geriatric german germane germanophone germinant geru getaway gewgaw ghanaian ghanan ghetto ghosty giant gibberish gibraltarian giganto gimcrack ginge girlie girly glagolitic glaswegian glenoid global globalist globoid globular glomalean glossy glottal glutton gneissoid gnostic gobby goblinoid goidelic gold goldenrod gombeen gooder goofball googlish googly googolplexth googolth goony gorgon gorgonian gossamer goth gothic gourmet govvy gradable gradual graecian graminoid grand granny grape graphic graver grecian grecophone greeny greige gridelin grizzly grotesque groundbreaking grownup guadalupian guadeloupean guadeloupian guamanian guatemalan guerrilla guilty guinean gules gummy gurkha guttural guyanese gymnic gypsy habiline hadean haggard hagueite hairline hairpin hairshirt haitian hakka halcyon haler halfpenny halfwidth haligonian hallucinogenic hamate hamiltonian hamitic hammy handheld handwaving hangdog hanoian hanoverian haplodiploid haploid hardback hardball hardcore hardcover harder hardline harlequin hartlepudlian hatstand hawaiian hawt hayekian haywire hazel hbd headful hearing heartbreaking heartcut hearthside heathen heather heathery heavyweight hebrean hebrephrenic hebrew hebridean hegemonist helicoid heliotrope hellenic hellenophile hellion helminthic helsinkian helvetian hematic hematinic hemichordate hemipteran hemiterpenoid hendecasyllabic henna hepatic hepatotoxicant heptapeptide herbal hereditarian hereditary hermaphrodite herzegovinian hesperian hessian heteroaromatic heteroclite heteroclitic heterocyclic heterodont heterometal heteropod heterosexual heterospecific hetty heuristic hexactine hexadecimal hexaploid hexapod hibernian hibernophile hickory hieratic hieroglyphic highbrow highland highpass himalayan hind hindoo hindu hip hippie hippy hircine hirundine hispanian hispanic hispano hissy historicist hitlerite hittite hoar hobartian hobohemian hoisanese hokie holo holocene homarine homebrewed homeful homespun homey hominid homo homophile homosexual honduran honey honeydew honorific hookup hooky hopeful horary horizontal horrible horsey horsy hortative hortatory hostile hotshot household houseless human humanist humanitarian humanoid humbler humean humeian humian humpy hundredth hungarian hunky hurrian husky hyaline hybrid hydro hydrocholeretic hydroid hylic hymeneal hymenopteran hymnal hyoid hyperborean hyperepidemic hypergeometric hyperreal hypertensive hypnotic hypnotizable hypochondriac hypocoristic hypodermic hypoglycemic hypomanic hypothecary hypothenar hypothetical hyracoid hysteric hysteroid iambic iberian icebox ichthyoid ickle ideal identical identikit idumean idyllic ignostic iguanian ilk illative illegal illinoisan illiterate ilocano ilokano immeasurable immigrant immortal immovable immune immunoabsorbent immunological immunosuppressant immunosuppressive immunotherapeutic immutable impaired imparisyllabic imped imperative imperfect imperfective imperforate imperial imperialist implex implosive imponderable imponent impossible impromptu inanimate inaugural inbred incandescent incendiary inchoactive incident incidental incipient incombustible incoming incommensurable incompetent incomplete incorrigible incumbent incurable independent indeterminant indexical indian indicative indigent indigo indiscernible indispensable individual indolic indonesian indubitable industrial indwelling inebriant inedible inegalitarian inequivalve inert inessential inessive inevitable infective inferentialist inferior infinitesimal infinitive inflatable influent influential infralittoral infrared ingrate ingressive ingush inhalant initiative injectable injectible inner innocent inorganic insectoid insomniac inspissant instakill institutionalist instructional instructive instrumental insured insurgent inswing intangible integral integrant intellectual intended intensive intensivist intent interarrival intercity intercostal interdune interester interglacial interhalogen interim interior interlayer interlinear interlocutory intermediary intermeshing intermetallic intermonsoon intermorph internalist international internationalist interphase interrogative interrogatory intersex intersexual intershell interstadial interstate interstitial intervarsity intervenient intestine intoxicant intramural intrant intrastate intravenous intrusive intuitive invariant invasionist invasive invective invertebrate invincible inviso invitational invitatory inworking ionian iqalungmiut irani iranian iraqi irish ironclad irony irrational irreconcilable irredentist irreducible irregular irresponsible irritant islamist islamite islamofascist isolationist isometric isopycnic isostatic isothermal israeli istrian italian italic italophone ithacan itinerant ivoirian ivorian ivory jackanape jackleg jacksonian jacobean jacobian jacquard jain jakartan jake jamaican jamerican jammy jannock jansenist jap japanese japonica jaspe jasperoid javanese jazeraint jean jeffersonian jerkwater jerky jerusalemite jesuit jibberish jihadi jihadist jimcrack jingoist jordanian jovian judaean judahite judaica judicatory judicial jugal jugoslavian jugular jumbo jungian junior junky jussive juvenal juvenile kabulese kaki kalmyk kalua kamboh kamboj kamchatkan kampuchean kantean kantian kareli karelian kashmiri katangese katzenjammer kazakh kazakhstani keener kenyan keresan keynesian khaki khurrite kia kiasu kiddie kiddy kidskin kievan killer kin kind kindred kiribatian kitsch kittitian kittsian kiwi kneejerk knockabout knockdown knockout known koepanger korean kosovan kosovar krunk kurdistani kutcha kuwaiti kyivan kymric kyrgyz lab labial labiate labradorian labyrinthodont lacedaemonian lacedemonian lacertilian lachrymatory lacteal lactoovovegetarian lactovegetarian lacunar laestrygonian laggard lagrangian laic lakefront lakeside lamarckian lamed lamellicorn lameo lamer languedoc lao laodicean laotian lapidarian lapidary laplacian lapp lapsarian lardy largemouth larghetto larghissimo laryngeal lastborn latchkey latex latin latino latitudinarian latvian laurentian lavaliere lavender lax laxative laxer lazarist leavening lebanese led leet leftist leftmost leftover leftpondian legacy legal legion legionary legislative lego lemnian lemon lemurian lemuroid leninist lenitive lenticular leonian lepetodrilid lepidopteran lesbian lesbigay lesser lesvonian lethal leveler leviathan levirate lewesian liberal liberian libertarian liberticide libertine libran librul libyan lied liege lieutenant lifesaving lightning lightweight ligurian lilac liliopsid lilliputian lily limey limper lingual lipoid lippy liquid lisboner lissamphibian literal literate lithuanian litoral littoral liveaboard livelong liver liverpudlian livornian ljubljanan llandovery lobstery local localist locative lockean locomotive loden logaoedic logistic londonian lonesome longhair longicorn longsuffering looksist loony lopingian louisianan louisianian lovat lovely lowbrow lowdown lowercase lowpass loxodont lucinid lumbering lumbricine luminal lumpsum lunate lunatic lupine lusatian lusk lusophone lutheran luxembourgian luxury lycian lydian lymphatic lyric maastrichtian macaronic macedonian machiavellian macho macro macrorealist madagascan madagascarian madcap madder madecassee madeiran madrilenian madrileno maduran magdeburgian magenta magistral maglev magnesian magnolia magnoliopsid maharashtrian maiden maigre mainstage makeshift malabarian malachite maladroit malagan malagasy malaitan malaprop malawian malay malayali malayan malaysian malcontent maldivian male malfeasant malglico malian mallorcan mallorquin malted maltese mammaliaform mammalian mammary mammillary mammoth manchu manchurian mancunian mandarin mandibulate mangaian mangalorean manhattanite manichaean manichaeist manichean manichee manila maniot manipulative manitoban mannerist mansard mantinean mantuan manual manuscript manx manzonian maoist maori mapuche marcionite marcosian marginal mariachi mariavite marinara marine marist marlovian marquesan married marshallese marsupial martian martinican martiniquais martiniquan marxist mascarene masculinist masculist maslin masovian massy masticatory mastoid masurian material matey matrimonial matrist matronymic matte mattoid maurician mauritanian mauritian mauve maverick maxi maxillary maximal maximalist maximum maxonian maxwellian mayan mazandarani mazanderani mazarine mccarthyite meagre measurable meccan medean medial median medical medician medieval medinan medium medusoid megadollar megalopolitan megapixel megapod megapode megapolitan megarian megrelian melancholic melancholy melburnian melic meliorist melon melungeon memorial memphite mende mendicant menial mensan mentalist mercantilist mercenary mercurial mercurian meridian meridional meristemoid meristic meseraic meshuggener mesocephalic mesolithic mesopotamian mesoscale mestee metacarpal metacentric metallic metalorganic metamict metamorphic metaphysic metapodial metatarsal metatherian metazoan methodist metonymic metropolitan mexica mexican mezzanine mezzobrow michigander mick mickle micro microcephalic microelectronic microlaser microphase microsurgery midair midconcert middle middlebrow midi midland midlife midmeal midrise midroll midseason midship midsong midsummer midtempo midterm mignon mignonette migrant mild militant militarian military millenarian millennial millikelvin millionth milquetoast mimantean mimetic mimsy minaean mineral miniature minimalist minion minoan minorcan minuscule miscellanist mischiefmaking miscreant misere misocapnist misotheist mississippian missy miwokan mixoploid miz miztec mnemonic mobile moccasin mocha mockney modal modern modernist modified molar molariform moldavian moldovan moldovian molossian monacan monastic monegasque monetarist moneymaking mongolian monitory mono monoaromatic monochrome monoclonal monocular monofractal monogenic monoglot monomaniac monomial monophysite monoploid monosyllabic monoterpenoid monotreme monrovian montanan montane montenegrin montessorian montserratian moony moped moral moravian mordovian mordvinian moribund mormon moroccan mortal mortuary mosaic moslem motel motley mountainslope mountaintop mousseux mouthbreathing movable moveable mozambican mucolytic mudejar mulberry multialgorithm multicable multicast multicellular multichine multicomplex multiculturalist multicuspid multidisciplinarian multiduplex multienzyme multiethnic multifamily multiferroic multiform multifractal multilateralist multimedia multinational multinomial multipath multiplane multiplay multiple multiplicative multiport multiquark multiracial multiring multiskyrmion multistorey multistory multistreaming multitheist multiton multitouch multituberculate multivalve multivariate multivitamin mumbaikar mumsy mundane municipal murcian muscatian muscid muscovian muscovite musculotropic museumgoing musical muslim mustard mutant mutton mutual myanmarese mycenaean mydriatic myelosuppressive myopic myriad mystic nabatean nacroleptic nahua naif naija namibian nanofluid nanophase nanoscale nappy narcoleptic narcotic narnian narrative narrower nasal nassuvian nasty naticoid national nationalist native natriuretic natufian natural nauruan navarran navarrese navicular navy nazarene nazi neanderthal neapolitan neat nebraskan necessitarian negotiable negro negroid nelly nematic neocolonialist neofascist neoliberal neon neopagan neopythagorean neorealist neosocialist neoteric neotraditionalist nepalese nepali nephritic neptunian nerdcore nescient nestorian netherlandish neurochemical neuroleptic neuroprotectant neurotic neutral neutralist neutrophil newborn newcome newfie newlywed newsgathering newsmaking newsy newtonian ngoni nibbly nicaraguan nicosian nietzschean nigerian nigerien niggard nihilarian nil nilotic nimby nineteenth ninetieth ninth nippy nisibene nitrenoid nitro nitroaromatic nitroaryl nitrous niuean noachian noble noetic noggen noir noisette nominal nominative nonacademic nonacid nonadolescent nonadult nonaffected nonafrican nonagenarian nonagreement nonalcohol nonalcoholic nonanesthetic nonanimal nonantique nonanxiety nonaromatic nonassociation nonasthmatic nonbank nonbelligerent nonbilaterian nonbiodegradable nonbisexual nonblack nonblonde nonbusiness noncancellation noncaring nonce nonceramic noncharismatic nonchemical nonclass noncognate noncola noncompete noncomplying noncompound nonconformist noncountry noncrime noncriminal noncrystal nondaily nondance nondepressive nondescript nondesigner nondiabetic nondiscipline nondissident nondrama nondrug nondurable nondyslexic nonedible noneffective nonegalitarian nonelitist nonemergency nonemployment nonepileptic nonequal nonequalitarian nonequestrian nonessential nonevangelical nonevergreen nonevidence nonexecutive nonexempt nonextremist nonfamily nonfeature nonfeeling nonfeline nonfemale nonfiring nonflammable nonfriable nonfugitive nongame nongay nongoal nongroup nonheterosexual nonhistone nonhomosexual nonhorse nonhuman nonhybrid nonillionth nonindigent nonindividual noninjury noninnocent noninteger nonintellectual noninterview noninvestment nonjuvenile nonkilling nonlabial nonlending nonlesbian nonliberal nonlibertarian nonlife nonlistening nonliterate nonlocal nonmale nonmarried nonmarxist nonmilitant nonmineral nonminor nonmixing nonmonetarist nonmortal nonmusical nonmutant nonmystic nonnarcotic nonnative nonnegotiable nonneurotic nonnovel nonobjective nonobservable nonofficial nonpagan nonparanoid nonparticipant nonpartisan nonparty nonpathology nonperennial nonperishable nonphobic nonpolicy nonpollen nonpolynomial nonprimitive nonprofessional nonprofit nonproperty nonprotectionist nonprotein nonpsychic nonpsychotic nonradical nonreading nonrecognition nonrecombinant nonrecyclable nonrelationship nonrelative nonrenewable nonreporting nonrepublic nonresident nonresistor nonretirement nonreturnable nonrevisionist nonrevolutionary nonrival nonroyal nonroyalty nonruminant nonscalar nonschizophrenic nonschool nonsecret nonsectarian nonsedative nonsenior nonserial nonsolvent nonspecialist nonsquare nonstandard nonstaple nonstate nonstative nonstudent nonsuicide nonsurvival nonsympathizer nonsystem nontangible nontargeting nontaxation nonterminal nonthinking nontime nontranssexual nontrinitarian nonunity nonuniversity nonvariant nonvirus nonvisionary nonvitamin nonwar nonwestern nonwhite nonwoven nonzero nordic normal norman normotensive northeast northwest norwegian nostalgic notable noteworthy notoungulate novgorodian novocastrian nth nubile nuchal nude nudist nueir nullifidian numidian nuptial nutbar nutrient nutzoid nuyorican nymphomaniac nymphomanic oak oatmeal objective objectivist oblate oblatum oblomovist oblong obround obscurant obscurer observable obsessive obsidian obverse obviative occidental occipital occlusive occurrent oceanfront oceanian oceanview ocker octal octic octillionth octogenarian octonary octoploid octuple ocular oddball odontalgic odorant oecumenical oecumenist ofay offbeat offensive official offside okinawan old ole olive omani omnibus omnilingual omnitheist omphaloskeptic oncoming oneirocritic onyx ooid oolitic oorie opaline operant operative operculate ophidian opioid oppidan optative optic optimum oral orangey orchid ordinal ordinary ordophone oregonian organic organobromine organochlorine organofluorine organohalogen organoid organoiodine organomercurial organometallic organonitrogen organosilicon oriental original ormolu ornamental orthorexic orthotic osakan oscan osloite ossete ossetian ossetic osteoid ostian ostrobothnian otalgic ottawan ottoman oulipian outboard outer outland outpatient ouvrierist oval overage overharvesting overweening ovibovine oviedan ovine ovoid oxblood oxfordian oxyacetylene oxytocic oxytone pachycaul padanian paedo paedophiliac pagan pahari painstaking paintery paisley paki pakistani palaeoconservative palaeographical palaeolithic palamite palatal palatinate palatine palauan paleocene paleoconservative paleolithic palestinian palliative pally palmate palmetto pamplonan panamanian pandeist pandemic panjabi pannonian pansexual pansy pantheist pantywaist paperback paphian papionine papish pappy paprika papuan paquebot para parabolic paracelsian parachordal paraguayan paralympian paralysant paralytic paramilitary paranoiac paranoid paranuchal paraphilic paraplegic paraprofessional parasitic parasomniac parastatal parasympatholytic parasympathomimetic parathyroid paratyphoid parental parenthetical parietal parisian parmesan parol parotid paroxytone parthian partial participial particular particulate partisan partitive parvenu pascha passe passerine passional passionate passive pastafarian pastoral pasty patagonian patavine paternalist patient patientive patina patrician patronymic paulian pavonine pawnee payable peaker pearly pectinate pectoral pedestrian pedigree pedophiliac pedosexual peekaboo peerie pejorative pelasgian pendent penetrant penitent penitentiary pennsylvanian pensionary pentadecimal pentecostal pentecostalist pentimal penultimate pequiste perciform percipient peregrine perennial perfecter perfective performant performative period periodical peripatetic peripheral perishable periwinkle perlative permanent permeant peronist perpendicular perrisodactyl perse persian personal perspective perthian peruvian petrochemical petunia pewter phanariot phantom pharmaceutical phasianid phenolic philipino philippian philistine phobic phocine phoenician phonetic phoney phony phosphorescent photorealist phrygian phthisic physical phytochemical phytopharmaceutical piano picard picaresque pichileminian picky pictorial pictorialist piedmont piezoelectric piggy pincer pinchbeck pindaric pineal pinky pinniped pinto piscean pisiform pissant pitcairner pitmatic pituitary placeable placental placoid plaid plainclothes planer plantigrade plastic plathelminth platinoid platinum platy playboy player plebeian plebian plenary plenipotentiary plosive plumiped plumper pluperfect plural plush plutonian pluvial pneumatic pneumoniac pococurante poddy pogonophoran pohnpeian poikilotherm pointillist pokey poky polemic polemical political polonaise poltroon poly polyacoustic polyacrylic polyaromatic polybromide polychloride polychord polycyclic polycystid polycystine polyester polyfluoro polyglot polymorphonuclear polymorphonucleate polynemid polynemoid polynesian polynoid polynomial polyodont polypharmaceutical polyphenolic polypiarian polyplacophoran polyplacophore polyploid polypod polyschematist polyseme polysilicon polysomic polysyllabic polytechnic polytene polyterpenoid polyunsaturate polyzoan polyzoic pomeranian pommie pommy pomosexual pompeian pompeiian ponent pontifical pooer poopie poopy poor poppy populist populous porky porn pornograph portable portmanteau portside portuguese posho positive possessive possible postadolescent postcanine postcapillary postcommunist posterior postern postfeminist postgame postgrad postgraduate posthuman postimpressionist postintegration postmodernist postnoun postop postpositive postseason postsectarian poststructuralist potager potential potty povvo pracademic practical praetorian praguian prasine prat preacclimation preadolescent preadult preantepenultimate prebendary precancer precapitalist precative precipitant precision precognitive preconscious prediabetic prediagnosis predicable predicant predicative predominant preferred preflight pregame prehuman prehypertensive preinflation prekindergarten prelim preliminary preliterate premarket premium preop prepollent prepositional prepositive preppy preprofessional preraphaelite prerequisite prerogative presbyterian preschool prescription prescriptivist preservative presphenoid prestart prestimulation prestudy preteen preterite preterm pretrial pretrigger preventative preventive previous primatal primigravid primitive primitivist primo primrose principal priority private privative privy proabort probiotic problematic procathedral procedural processional processionary procoagulant prodigal profaner professional proficient profligate prog prognostic progressive prohibitive proinflammatory projectile proletarian promethean prompter propaedeutic propagandist proparoxytone propellant propellent properispomenon prophylactic prosimian prosthetic prostyle prosumer protectionist protective proteid proteinomimetic protoctist protoctistan protohominid protohuman protostomian prototherian protozoan protreptic proturan proverbial provincial provisional provocative proximate prussian pseudo pseudocoelomate pseudoprime pseudovirgin psittacine psittacosaurid psychedelic psychic psycho psychoneurotic psychostimulant psychotic psychotomimetic psychotropic ptarmic pteropine pteropod pteropodine public puce pueblan puebloan pulmonate punjabi punky purebred purgative purgatoric purist puritan purpure pushbutton pussy pygmalion pygmoid pygmy pyramidal pyrectic pyro pyroelectric pyromantic pyrotic pyrrhic qallunaaq qatari quadragenarian quadral quadrate quadratic quadratojugal quadrilateral quadriliteral quadrillionth quadringentenary quadrinomial quadrumane quadruplex qualitative quality quant quantifiable quantum quartan quartic quartodeciman quasquicentennial querulent quickset quieter quiltmaking quinarian quinate quincentenary quinoid quinquagenarian quinquennial quintic quintillionth quorate quotidian racegoing racist rad radial radiant radical radiochemical radioprotective raelian raglan rah random randy rangoonese ranid rapid rapier rash rasher rastafarian rational ratshit rattletrap reactionary reactionist readymade realis reassortant recalcitrant receivable rechargeable reciprocal recitative recluse recombinant reconcilable reconstructivist recreant rectosigmoid recumbent recusant recyclable redeye redistributable reductionist reductivist redwood reentrant reflexive reformatory reformist refractory reginan regional regionalist regular regulation reichian rejectionist relative reliabilist reliable relict religious remarried remiped remulakian renaissance renewable rental renunciant renunciate repellant repellent replicant reprehensible representative reproductive reptilian republican requisite resale reseda resident residentiary residual resistant resolvent responsorial restorative resultant retardant retinal retinoid retributivist retro retrospective returnable reunionese revanchist reverend reversionary revisionist revivalist revolutionary rexist rhaetian rhenish rheumatic rhinestone rhodesian rhodian rhomboid ribald ricegrowing ridgeside rigan righteous rightmost rightpondian riojan ristretto ritual riverside roadside roan roborant robosexual rococo rollercoaster romaean roman romanian romantic rookie rosicrucian rosy rotary rote rothbardian roughspun roumanian roundabout rounder roundhead rousseauian routine rowdy royal ruby ruddy ruderal rulemaking rum rumdum ruminant rundown rung runtime ruritanian russet russian russki russophone rustic rusyn rwandan rwandese sabaean sabbatian sabbatical sabean sabellian sable sacramentarian sacroiliac saddamist safe saffron sagittarian sahrawi salesian salient salientian saline sallow salmon salmonid salmonoid saltwater saluretic salutatory salvadoran salvadorean salvadorian salvationist salvatorian samaritan samian sammarinese samoan samogitian sandbelt sandgrounder sandy sanitarian sapphire sapphirine saragossan sarajevan sarcoid sardinian sarmentose sartrean sasanian sasanid sassanian sassanid satin saturnian saucier saudi saurian saurischian savonian savory sawney sawtooth saxonian scabious scalar scandinavian scant scaphoid scapular scapulocoracoid scarlet scenic schematic schemey schemie schismatic schizoid schizophasic schizophreniac schizophrenic schizosexual scholastic schooly scombrid scopophiliac scoptophiliac scorpion scorpionate scouse screwball screwtop scurvy scythian seafaring seashell seaside secessionist secondary sectarian sectional sedative seedling segovian segregant selenodont selenoid selenomethionyl seljuk seljuq seltzer semelfactive semese semiautomatic semicentennial semiclassic semidocumentary semifluid semiliquid semipro semiprofessional semivegetarian senegalese senior sensationalist sensitive sentient seoulite separatist sepia sepiolid septic septillionth septothecal septuagenarian sequent serb serbian serbophile sere serene serial serialist seriatum serotine serpentine serpentry servian sesamoid sesquicentennial sesquipedalian sesquiquadrate sesquiterpenoid sessional sesterterpenoid settleable seventh seventieth sevillan sevillian sexagenarian sexagenary sexagesimal sexcentenary sexennial sexist sextile sextillionth sextuple seychellois shakedown shakespearean shan shanghainese shanty shareholding sharper shavian sheeny sheepy shiite shimerian shitfuck shithouse shitter shoddy shojo shorter shortfin shorthorn shortie shortwave siamese siberian sibilant siboglinid sicanian sich sicilian sienese sienna sigmoid signature signified sikh silent silesian silly silver simian similar simoniac simplex sindhi singalong singaporean singsong singular singulative sinhalese sinophone sinusoid siren sirian situationist sixth sixtieth skinnerian skinny skookum skopjan slappy slapstickery sleepy slicker slimmer slinky slipover slovak slovene slovenian slower smartass smectic smiley smoggy smoothbore smoother snell snotnose social socialist socinian sociopathic sofian softcover sogdian solipsist solitaire solitary solute solvent somali somatroph somesuch somnifacient somnolytic sooky sophomore soporific sorrel sorry sortal sounder sourdine sourdough southeast souther southwest sovereign soviet spacefaring spagiric sparky sparoid spastic speccy special specialist specieist speciesist speciest specific specky spectacular spectralist spendthrift spenserian sphenoid spheroidal sphingid spiffy spinny spinoidal spinozist spiritual spiritualist splitist splitsville splittist spoony spotty spouting springfieldian squaloid squiggly stainless stakhanovite stale stalinist stalwart stammel standard standout standover starfucking starvation static statist statistic steamboating stereo sterling stern sternocleidomastoid sternutative sternutatory stiddy stigmatic stimulant stirrup stockholmer stoic stopgap storybook stour stout straightedge straighter stranger straussian straw strawberry streetcorner strikebreaking strippy structuralist stubby stuckist stunod stupefacient sturdy styptic suave subadult subaltern subarctic subconscious subfilter subfossil subfusc subgrid subharmonic subhuman subjectivist subjunctive subliterate submachine submersible submissive submonolayer subprime subregional subsalt subsidiary substantive subsurface subteen subtonic subtropical subversive subwavelength succulent sudanese sudorific sudovian suede suffragan suicidal sulky sulphoaluminate sumatran sumerian summary sundry sunflower sunrise sunshine superciliary superconservative superficial superfluid supergene superheavy superheavyweight superhuman superinvariant superior superlative superluxury supermajor supermax supernatant supernatural supernumerary superplastic superpremium superrich supersessionist superspecial superspeed superstar supertall superwide supine supplemental suppliant supplicant supralittoral supramembrane suprasegmental suprematist surform surinamese surplus surrealist susceptible suspensory suzerain swati swift swiss syllabic sylvan symbiotic sympathizer sympatholytic sympathomimetic synchromesh synthetic syphilitic syracusan syriac syrian syrphian syrphid tabanid tabby tabletop tabloid tactic tadzhik tagalog tahitian taishanese taiwanese tajik tajikistani takeaway takeout tallinner tanganyikan tangent tangerine tangible tanzanian taoist tardigrade tardy tarentine tarragonan tarrier tarsal tartessian tasmanian tatarian tatterdemalion tattletale tatty taupe taurean taurine tawny taxable tchaikovskian teak teal technic technical technicolor technosexual technoutopian tectiform teenage teiid teleost telephoto telltale tellurian temporal temporary tench tenderer tennessean tenochca tenochcan tenor tentative tenth tephritid teratogenic teratoid tercentenary termagant terminal terminative ternary terpsichorean terracotta terran terrestrial territorial terrorist tertian tertiary tetanuran tetradecimal tetraplicate tetraploid tetrapod tetraterpenoid teucrian textbook textile thai thatcherite theatregoing theatrical theban thematic theocratical therian thermal thermoplastic thespian thessalian thessalonian thessalonican thinner thirteenth thirtieth thirtysomething thomist thoroughbred thousandth thumby thyasirid tibetan ticky tidier timewasting timonian timonist tinclad tinhorn tipulid tiranan titanian titian titular tocharian tocolytic togolese toisanese tokelauan tomfool tongan tonian tonic topaz topgallant topiary topical topside torontarian torontonian tort tortoiseshell tory totalitarian toxicant toxophilite traditionary traducian transactinide transcaucasian transdermal transformist transgender transgenic transhuman transient transitionist transjordanian translative transmembrane transnational transnistrian transorbital transpondian transsexual transvaalian transversal transylvanian trendy tribal tribrid tributary tricenarian tricentennial tricolor tricolpate tricorn tricuspid tridentine triennial trifluvian trifluvien trifluvienne triggery trilingual triliteral trillionth trimillennial trimmer trimonthly trimotor trinary trine trinidadian trinomial triplex tripolitanian triquetral trisexual triskaidekaphobic tristate trisyllabic trite triterpenoid triumphalist trochoid troglophile trojan tropic tropical truant trumpery trunk trusty tsarist tubby tudor tufty tumbleweed tungusic tunicate tunisian turbellarian turbinal turbinate turkmen turkoman turkophone turquoise tusky tutelar tutelary tutorial tuvaluan tuvan twentieth twilight twissell twisty twp tyrolean ubersexual udmurt udmurtian ugandan uggo ugly ukie ukrainian ulster ultimate ultra ultraconservative ultracrepidarian ultrafundamentalist ultraliberal ultralight ultramarine ultramontane ultranationalist ultraportable ultrarevolutionary ultrashort ultraviolet umber umbilical umbrian unaccusative unaffected unary uncial unciform unconscious unconventional uncopyrightable uncountable undead undecided undecillionth undefeatable underage underarm undercover undergraduate underinsured underprivileged undersigned understage undesirable unemployed unergative unfamiliar unforgiven unfortunate ungulate unicellular unicity unicursal unicuspid unificationist uniform uniformitarian uniglot uninjured uninsured unionist unit unitarian unitary univalve univariate universal universalist universist univocalic unknowable unknown unlockable unloved unmarried unpredictable unprintable unpronounceable unquantifiable unreachable unsalable unthrift untouchable ununderstanding unwearable upbeat upland upline uplink upper uppercase upstyle uranian urartean urartian urticant uruguayan usanian usonian usp usufructuary uterotonic utile utilitarian utmost utopian uttermost uzbek valedictory valencian valetudinarian vallecular valuable vandal vanilla vanuatuan variable variant varietal varioloid varsovian vasopressor vasorelaxant vast vaunting vegan vegetable vegetarian veggie veggo vegliot vegliote velar velopharyngeal vendible venetian venezuelan venitive venizelist venti venusian verbile verdictive vermeil vermifuge vermilion vermillion vernacular versant vert vertebrate vertical vesicant vesicatory vesicomyid vespid vestal vestiary veteran veterinary vetitive vicenarian victorian viennese vietnamese vigintillionth vincentian vinyl violet virago viral virgate virgin virginal virgoan virid viridian virostatic virtual virtuoso visayan visionary visitant visual vitalist vitreous viverrine vivid vocable vocal vocative volitive voluntary vomitive vomitory vorticist votive voyeurist vulcanoid vulnerary wabbit wack wackadoo wacko wagnerian walachian wallachian walloon walnut wantaway ware warmer warsovian washingtonian watercolor waterside wayside weakling wealthy wearable weeny welterweight wesleyan wessexian western westphalian wetter whacko wheat wheaten whirlwind whist white whitewall whitsun whity whovian wiccan widescreen wight wikipedian windian windowfront windy winky wireless wittgensteinian wobbly wollof wolof woodland woodwind woody wool woolen wooly wordsworthian workaholic workday worsted worthy wounded woven wraparound wrath wrinkly writ wussy wykehamist wyomingite xanthian xaverian xenobiotic xenophobic xerophytic xian xiphioid xiphosuran yachty yeller yemeni yeniseian yerevanian yew yiddish yogi yogist youngling yugoslav yugoslavian yuwaaliyaay zagrebian zairean zalambdodont zambezian zambian zamoran zanzibari zapodid zapotec zapotecan zaragozan zarathustrian zebrine zebroid zen zetetic zilch zillionth zimbabwean zionist ziphioid zoantharian zoophytic zoroastrian zulu zuni zwinglian zygenid zygodactyl zygodactyle 1 AORV inbounds 11 AOV bats butters dis fish gis honors lies loads nuts pants singles 20 AO bananas billions crackers divers emerita gangbusters insurgents inuit jokes langers lds mates millions nongames postgames presales quebecois scots taters trillions 3 AGP concerning pending wanting 3 AGR according effing sidling 467 AG abiding aborning abounding absorbing accepting accommodating accusing aching addicting adjoining admiring adoring affecting affixing agonizing alarming alternating amazing amusing anastomosing annoying antisymmetrizing appalling appealing appetising appetizing appreciating approaching approving astonishing astounding attacking backstabbing baffling balding barnstorming bathing beaming begrudging bellying betting bewildering bitching blazing blinking blistering blithering bordering borning bouncing brachiating bridging bristling budding bursting busting calculating caring challenging charming chilling chording chuffing chugging circulating classifying cliffhanging clinching cloying coaxing coevolving collimating comforting competing compromising condescending conducing confiding conflicting conforming confusing confuzzling conniving consenting conserving consuming contracting contrasting controlling converging convincing coordinating copropagating corking corotating corroborating counterflowing countermoving coying cricketing crippling damaging damning daunting deafening dealkylating dearomatizing debilitating debranching decalcifying dechlorinating declogging decohering deglycosylating degrading dehydrogenating delimiting demanding demeaning demoralising demoralizing departing deprecating depreciating depressing despairing desynchronizing deubiquitylating devastating developing disappointing disbelieving discerning discomposing discouraging discriminating disgusting disheartening disparaging dispiriting displeasing disquieting disspiriting distinguishing distorting distressing disturbing dividing dizzying doddering domineering doting drifting drywalling dwindling edifying effecting electrifying emerging enchanting encircling encouraging encroaching endearing engaging engrossing enravishing ensuing entertaining enticing entrancing ethylating exacting exasperating exciting exhausting exhilarating expecting expiring explaining extenuating exulting fascinating fearing feminising feminizing fetching firming flaking flaming flaunting fleeting floating flustering flying fooking forbearing forbidding forboding forgiving freeping frightening frustrating fulfilling fulminating fuming fuzzifying galling gaping glancing glaring glittering glouting grasping gripping gushing halting harrowing heartening hectoring honeymooning horrifying humiliating immunizing impending imposing incapacitating incriminating incurving inducing infuriating ingratiating ingressing inspiring inspiriting insulting interacting interconverting interlocking interpenetrating interplaying intimidating intoxicating intriguing invigorating inviting iodinating ionising ionizing irritating isomerizing jumping kissing kleptoparasiting knowing lancinating languishing lateralizing latrating lippening lubricating luteinizing maddening marauding masing mating mattifying menacing metabolizing metering methylating misconceiving misdeeming misfunctioning misleading missing mitigating mortifying motivating mutating myelinating mystifying nagging necrotizing neighboring neighbouring nictitating nitrating nodulating normalizing nucleating obliging offstanding operating opposing opsonizing optimizing orientating oscillating osculating overarching overmastering overpowering overtopping overwhelming owing oxidising parching patronizing penetrating perishing perplexing petrifying phosphorylating photodisintegrating photosensitising photosensitizing piddling piffling pinching pitching plodding polarizing polluting polymerizing practicing prancing preceding presiding prevailing projecting punishing raging raking ravishing reacidifying rearomatizing reassuring reciprocating reclining recurring reducing reeking reigning relaxing rending repeating reproving restricting retaining retiring retrotransposing revealing rewarding ridiculing ripping riveting roaring rocking rollicking rotating rousing roving saddening scandalizing scathing scheming scintillating scorching screaming sensitising sensitizing shining shocking shrinking sickening silylating sinuating skinning slamming slavering slighting slimming sloping slumbering sobering sodding soothing sopping sparing sparkling sparsifying spiffing sporting sporulating sprawling staggering startling stifling stimulating stinging stinking stomping stonking stooping striking stunning submarining succeeding sweltering syllabificating tantalizing taunting taxing tempting terminating terrifying threatening thrilling thundering tickling titillating tolerizing tottering touching touring towering trailing transactivating trending trimethylating troubling trying unbending unclinging underperforming undreaming undulating unifying unowning unpausing unrecognizing unruffling unsanctifying unsettling unspeaking unthinking upgoing upstanding vacillating vernalizing vibrating virializing vulgarising wading waking wasting watching wavering welcoming whacking whopping winning withering witting worrying zigzagging 1 APRV near 10 APR abeam after apropos around doon forby inbetween less nearhand regardless 2 APV absent granted 6 AP aged gone imbetween nearer nearest sans 18 ARV bloody darn direct dirty durn even further headlong live mad offshore onshore outright piggyback plump slambang stark unlike 468 AR ablaze ablush abox adoze adrift agog aground akimbo alfresco alike alone aloof aloud alow anticlockwise antisunward aplenty archwise asea askance askant askew aslant aslope asquat asquint astern atilt away awful awry backward backwards badly bally bannerlike barefoot barefooted barehanded bareheaded barelegged batlike behindhand behovely bidaily bigtime bihourly billionfold birdlike biyearly blasted blimming blueward bluewards bluggy bodily boustrophedon bowled breadthwise brotherly bulllike bytewise careerlong castewise chainwise checkerwise chequerwise chickenlike chiefly chockablock chordwise christianly churchwide circumambient cityward classwide cleanly clockward clockwise coastward coastwise communitywide communitywise consarned continentwide contraclockwise counterclockwise courtside cowardly crabwise crosswise cuckoldly cussed dadgum damned darned daylong deadly dearer deathly deathward departmentwide devilish districtwide diverse doglike doubtless dovelike downcanyon downdip downmarket downrange downriver downstream downtempo downward ducklike earlier earliest earthside earthward eastbound eastwardly eath eeny eighteenfold eightfold eightyfold elevenfold else endly enough enuf equatorward ever exgratia fanwise farmward farther farthest featly fele fewfold fiberwise fifteenfold fiftyfold filmwise fing fireward fivefold fleetwide foremost forestward fortyfold fourfold fourteenfold freckly fricking froglike frontward frontwards fuguelike furst gainwise gardenless geet gentlemanly gert ghastly gingerly goalward godward goldang goldurn googolfold gradely gratis graveward grazioso grimly groundly headfirst heah heavenward heightwise hella helluv higgledypiggledy hillward homeward horsely hourwise hundredfold incommunicado infinityfold innerly inshore inward kindly kingly kitchenward knightly laggardly lakeward lateish later least leftward leisurely lengthways lengthwise lento liever listwise little lizardlike longer longest lordlier lordliest lordly loud lowly lubberly mair maist manward manyfold marketwide masterly matronly midfloor midmatch midmovie midround midscene midsequence midsession midtour midverse mightly millionfold mondayish monkeylike moonward motherfucking mouselike much museumwide nearby negatory nextdoor nice niggardly nightlong ninefold ninetyfold none northbound northeastward northeastwards northwesterly northwestward northwestwards oceanward oceanwards octillionfold offhand offline offscreen offstage onboard online only onsite onstage onward orful orse otherwise outward overarm overboard overhand overhanded oversea overseas pagewise pairwise parallelwise parcelwise piecemeal planetside planetward planetwide plotwise ploughwise poleward polewards pondward poolside poorly pooty postconception postinfection postprison postsurgery princely pure pursuant quadrillionfold queenly quicksmart quintillionfold randomwise rascally rathe ratlike rearward rearwards recitational redward redwards reet reight rife rightward ringwise riverward rotten sabbathly scarce schoolward schoolwise seaward secondhand seemly selfly semimonthly sentencewise septillionfold sevenfold seventeenfold seventyfold severalfold sextillionfold sharpish shoreward sideling sidelong sideward sidewards sideways sisterly sitewide sixfold sixteenfold sixtyfold slantwise slapdash sly smartish smegging snuggly societywide sometime somewheres soon soonest soothfast southbound southeasterly southeastward southeastwards southernly southwesterly southwestward southwestwards spiralwise spokewise sprightly spritely squarewise squirrellike stairwise starward stately stateside stepwise sternward stewardly stilly storewide straightforward streetward stripewise stripwise strong subjectwise sudden sunward superfast surlier surliest swanlike swith tandemwise teethly tenfold theretoward thicker thickest thirdhand thirteenfold thirtyfold thousandfold threefold tight together tolerable toothly townward trebly trillionfold truthward twentyfold twofold uber uncleanly uncomely underfoot underhand unmanly unobserved upbound upmarket uppermost upstairs upstate upstream uptempo upwind utg valleyward vanward very virginly wallward warpwise weakly weasellike weekdaily weftwise westbound westwardly whilom widthways widthwise wis wordwise worldly worldwide yearlong yeomanlike yeomanly yon yond yonder 418 AV abbreviate abdicated abrase absolutised absolutized accelerate accrete accumulate acerbate acuate acuminate adapt adulterate aestivated affectionate agglutinate alienate alight alphabetised alphabetized amind anastomose angulate animate apocopate apply appropriate approximate arched articulate asperate attenuate attrite auspicate averse awake awakened backlit bankrupt based bearproof beheld bespoke bifurcate blear blither bold brachiate brazen broke built bulletproof busy caughten cellulate characterised chid childproof clung combated combatted combust complete complicate concorporate congenerate conglobate congregate consummate convolute cool copresent copywritten correct corrival corrupt creaseproof crocked cruel cumulate customised cyber dampproof dang deadstick deafferent decerebrate decussate defunct deliberate depauperate designate desolate diffuse dilatate dilute dim dimidiate disaggregate disbound discalceate disincarnate disjoint disproportionate disproven dizzy downscale draughtproof dressed dry dull dumb edged effuse elaborate elate elongate emancipate emasculate enervate engraft eradiate erect exact exalt excarnate federate fireproof flabaghast flameproof flemish floodproof flung foliate fordone foretold fornicate founded foveate freezeproof frequent frustrate fucken fuckin fungiproof fungusproof furcate futureproof geminate gentle glad got greaseproof groomed gyrate hamstrung handfast handsome harsh heatproof hilited homodyne hot humble hung hypercorrect idealised idealized idle imbricate importunate inable inbound incarnate incurvate indurate infirm ingeminate inlaid inline innate inorder installed integrated interoffice interplant intricate invected irradiate italianate kidnaped kittle knowed kosher laced laevigate lank lapped lavish lean learnt legitimate loike lost louche lower macgyvered maculate mainline maledict malign mastered mature medaled mediate meek misset misspent mizzled moistureproof monodisperse monospace mopy mosied mothproof mozy muddy multipartition myelinate narrow nested newfashion numb numerate nutmegged obligate obnubilate obscure obsolete offski olden outdate outen overbuilt overshot overwater overwound own paired palpate patinate pent peregrinate perfect perforate perspirate pert petrified photowritten plicate plim plowed polarized pollicate pollinate pollute porrect predominate predose predy prepaid prepense preset pressed pressurised prim proportionate prorupt prostrate punctulate pustulate quadruple quits radiate radicate rainproof raisinate rare ready reanimate rebrobate redial reduplicate reekin reiterate remarked remediate reparate replete repressed restruck restrung reticulate revolute rewrought rid roleplayed rotproof rounded rustproof said satiate savvy scandalised scrubbed scuff secure sedate segregate septuple sequestrate seriate serrate shiten shockproof shod shrill sinuate situate skew skim slayed smart snowproof sober sodden solubilised soundproof spatulate spent spilt spoilt sprung stank staunch steady stipulate striate strode strongarm stuck sulphured supple supreme suss swart tame taughten terminate tidy tore transcendent trifurcate truncate twilit typeset typewrote ulcerate unbent unbid unbound uncloaked underly undershot undersold understood undry undulate unfit unground unknotted unlaid unlatched unlearnt unmade unright unsaddled unsaid unset unsteady unwad upscale used utter variegate variolate vermiculate vesiculate wainscoted warm waterproof weary weatherproof wedged welsh went widdle wilder windproof winterproof wise withheld wizen wrought wry xxx yar zhoosh 16685 A aad aalenian abaxile abbevillian abbreviatory abderian abdominocardiac abeyant abgeschmackt abhorrent abhorrible abient abitibian abject abjecter abjectest abjuratory ableist abler ablest ablow ablutionary aboil abolitionary abominationly aboveboard abovedeck aboveground abovesaid abranchiate abrim abristle abrupter abruptest abs absinthian absolut absoluter absolutest absolutory absolvatory absonant absorbifacient absorpt abstersory abstractest abstruse abstruser abstrusest absurder absurdest abubble abundant abustle abuzz acalephoid acalycine acalymmate acanthine acardiac acarine acaroid acaudate acaulescent acauline acaulose acceleratory accendible accessible accipitrine acclamatory accordant accrescent accretionary accumbent accurate accurst accusatory acerata acerb acerber acerbest acerose acervate acervose acervuline acetabuliform acetose achelate achier achiest achillean achlamydate achordate achy aciculate aciculiform acidfree acidproof acidy aciform acinaciform acinetiform aciniform acinose acipenserine acquiescent acquisitory acrawl acrid acrider acridest acro acrocephaline acromiocoracoid acropolitan acrostichoid actorish actorly actressy aculeate aculeiform aculeolate acuminose acuter acutest acutifoliate adamantanoid adamantean adamantine adamesque adangle addible adding additionary additory adducent adducible adeciduate adeniform adenomatoid adenose adepescent adequate adherently adjacent adjudicatory adjuratory admissible admonitory adnate adorabubble adorant adrip adroit adroiter adroitest adsorbant adstringent adulatory aduncate adust advenient adventuresome adverse adverser adversest adversifoliate advertent advisatory advocatory aefauld aegean aeolian aeonian aerian aerier aeriest aeriform aerose aeschylean aesculapian aesopian aetat afebrile afire aflame aflutter aforegoing aforesaid aforethought afraid afrikaans afrindian afroth aftercoming afterfest aftermost afterschool afterseen aftershow aftersun aftertax afterwise aftmost agast agaze agelong aggerose aggri aggry aghast agile agiler agilest aglare agleam aglimmer aglint aglitter aglow agro aguish aidant ailurophiliac aimworthy ainu airblown airbreathing airier airiest airish airmobile airproof airsick airside airtight airwise airworthier airworthiest airworthy airy akan akin alary alaskan alaudine albescent albigensian albinoid alcalescent aldine aleatory alete alexandrian algherese algid algoid algonquian alible alienesque aliform alimentary alkalescent alkaliproof alkalizate alkylmercury allantoid allegiant alleviatory allocrine alloimmune allover almighty almondy alonest alongshore alopecoid alosid alpen alphabetiform alreet alright altarwise alternifoliate althusserian altmanesque aluminian amanitoid amateurish amatory amazonian ambery ambident ambisense ambisinister ambulant ameban amebean amebiform ameboid amendatory amensh amethystine amish amiss amissing ammino ammonian amoeban amoebean amort ampery amphiprostyle ample amplectant ampler amplest amplexicaul amplexiform ampulliform amygdaliform anabranching anacolpate anadromus analept anaphylactoid anaporate anatine anatreme anaxagorean ancienter ancientest anconad andamanese anellarioid angiocarpian angioid angrier angriest angry angstier angstiest angsty anguiform anguilliform anguine anguinine angulaperturate angustifoliate angustimurate anile animalish animesque animose aniseedy anjouan annamese annectant annelidan annulate annunciatory anny anoda anomotreme anopheline anorakish anorchid anovulatory anseriform anserine antaircraft antebellum antefebrile antegrade antelucan antemeridian antemortem antemundane antennary antenniform antepartum anterior anterograde anteroposterior anthelmint antiabortion antiabuse antiacne antiaddiction antiadministration antiadvertising antiageing antiaggregant antiaggregatory antiaging antiair antiairport antialcohol antialgae antialien antiallergy antiambush antiamnesty antianaemia antianemia antianxiety antiapartheid antiapoptosis antiaristocracy antiarmor antiarmour antiarthritis antiasthma antiauteurist antiauthority antiavian antiavoidance antibacklash antiban antibanking antibattery antibeauty antibias antibillboard antiblack antiblast antibleeding antiblue antibonus antiboss antibound antibourgeois antiboycott antibranding antibribery antibritish antibrowning antibudget antibug antibullfighting antibullying antibundling antibureaucracy antiburglary antibusiness antibusing antibussing anticaking anticancer anticandida anticarcinoma anticardiolipin anticaries anticasino anticaste anticavity anticelebrity anticelibacy anticellulite anticensorship antichange antichav antichild antichinese antichip antichoice antichromatin antichurch anticigarette anticipatory anticircumcision anticircus anticity anticling anticloning anticlot anticlotting anticlutter anticoalition anticold anticollege anticollision anticollusion anticommerce anticommission anticommuting anticomputer anticonquest anticontagion anticontra anticopying anticopyright anticorporate anticorrosion anticorruption anticough anticrack anticrash anticrime anticrisis anticruelty anticult anticure antidamping antidandruff antidarkening antidazzle antidebt antideer antidefamation antidefendant antideficit antidepression antidesertification antidetonation antidevelopment antidiabetes antidiarrhea antidiarrhoea antidictatorship antidilution antidisco antidiscrimination antidisestablishment antidoctor antidog antidoping antidraft antidrilling antidrink antidrinking antidrought antidrug antidrugs antidumping antiearthquake antieducation antielite antiepilepsy antiespionage antiestablishment antievolution antiexpansion antiexploitation antiexport antiexpressionist antiextremist antifactory antifade antifamily antifarm antifarmer antifarming antifat antifatigue antifemale antifeminine antifertility antifever antifighting antifilibuster antifish antifishing antiflea antiflicker antiflood antiflooding antiflu antifluoridation antifluoride antifoaming antifog antifogging antifood antifootball antiforeclosure antiforeign antiforeigner antiformalist antifoul antifouling antifraud antifriction antifrost antifungus antifur antigag antigambling antigaming antigang antigangster antigay antigender antigenocide antigiardiasis antigirl antiglare antiglaucoma antiglobalism antigogglin antigoglin antigold antigovernment antigraffiti antigraft antigreen antigrowth antiguerrilla antigun antigypsy antihacker antihacking antihalation antihandgun antihanging antiharassment antihate antiheadache antihelicopter antihelminth antihepatoma antiherbivore antiherpes antiherpesvirus antihierarchy antihighway antihijack antihijacking antihippie antiholdup antihorse antihuman antihumanist antihunting antiimmigrant antiimmigration antiimport antiincinerator antiindependence antiinfection antiinflammation antiinflammatory antiinsect antiintrusion antiitch antijam antijamming antijapanese antijewish antijunta antikick antikickback antikidnap antikidnapping antiklan antilabor antilatent antilaundering antileak antileakage antilearning antileft antileishmania antileprosy antilife antiliteracy antiliterate antilitter antilittering antilock antilogging antiloitering antilopine antilove antilynching antimachine antimacho antimajoritarian antimalaria antimale antimalware antimammalian antiman antimanagement antimanufacturing antimargarine antimarijuana antimarket antimarriage antimarxism antimasturbation antimeat antimedicalization antimedicine antimen antimercenary antimerger antimetastasis antimicrotubule antimigraine antimilitant antimilitary antimilk antimine antimissile antimisting antimonatian antimoney antimonian antimonoan antimonogamy antimonopoly antimosquito antimotility antimouse antimurder antimuseum antimyeloma antinarcotics antinausea antinegro antinematode antinepotism antineutrophil antinucleating antinudity antiobesity antiobscenity antioccupation antioppression antioquenian antioxygen antipaedophile antipaparazzi antiparasite antipatent antipatico antipatronage antipeace antipeddling antipedophile antipeople antiperformance antipersistent antipersonnel antipest antipesticide antipet antiphishing antipig antipigeon antipilling antipiracy antipirate antiplague antiplaintiff antiplane antiplaque antiplatelet antipleasure antipoaching antipoisoning antipolice antipoor antipop antiporn antipornography antipot antipoverty antipredator antipregnancy antipress antiprevention antiprivacy antiprofiteering antiprogress antiprostitution antiprotectionist antiprotest antiprotestant antipsoriasis antipsychiatry antipsychology antiquake antiqueen antiqueer antiquest antiquey antirabbit antirabies antiracing antiracketeering antiradio antirail antirailroad antirailway antirally antirape antirat antirecession antirecoil antirecycling antireferendum antireflection antireform antiregulatory antirejection antirelaxation antireligion antiresearch antiresonant antiretaliation antireunification antirich antiriot antiripening antiroad antirobbery antirobot antirock antirocket antiroll antirotating antirussian antirusting antisag antisagging antisalt antisanctions antisarcoma antisatellite antiscalping antischolarship antischool antiscuff antisecession antisecrecy antisegregation antiseizure antisex antisexism antishake antishark antiship antishock antishoplifting antishopping antisink antisiphon antiskid antislave antislavery antisleep antislip antislippage antismog antismoke antismoking antismuggler antismuggling antismut antisodomy antisoil antisoiling antisoviet antispam antispamming antispanking antispasticity antispatter antispeculation antispending antisphexish antispill antispoilage antispoof antispoofing antisport antisprawl antispyware antistab antistate antistatus antisteroid antistick antistigma antistimulus antistress antistrike antistudent antisub antisubmarine antisubsidy antisubversion antisuicide antisupermarket antisurface antisurfing antisurgery antisurveillance antisway antitakeover antitamper antitampering antitank antitarnish antitax antitaxation antitechnology antitelevision antiterror antitesting antitetanus antithalian antitheft antitherapy antithyroid antitipping antitobacco antitoll antitorque antitorture antitotalitarian antitracking antitrafficking antitrain antitransglutaminase antitrend antitrespass antitruancy antitrust antituberculosis antitumor antitumour antityphoid antiulcer antiunion antiuniversity antiurban antivaccination antivaccine antivampire antivandalism antivegetarian antivibration antivice antivictim antiviolence antivivisection antiwarfare antiwaste antiwelfare antiwhaling antiwhite antiwildlife antiwoman antiwomen antiwork antiwrinkle antiyellow antiyellowing antiyuppie antizoo antoecian antonine antproof antrorse antsier antsiest antsy antwacky anty anucleate aok apennine aperturate apeshit aphrodisian apian apicomplexan apiculate apish apo apocrine apollonian apophian aporose appalachian apparent appeasatory appellate appendant appendiculate appetible appley applicatory appreciatory apprehensible approbatory apricotty apricoty aprilly apt apter aptest aquabis aquiform aquiline aquinian aquiver aracanese arachnoidian arakanese araneiform arawak arbit arbitrary arborescent arboriform arc arcane archaean archconservatism archdiocesan archest archimedean arciform arcuate ardent arean areawide arenose areolate argentian argentophil argmax argmin argute arid arider aridest arielian ariose arisen aristate aristophanean arizen armillarioid armillary armlong arnamagnaean arrabbiata arrant arranter arrantest arretine arrogant arrowy arsenatian arsenian arsenitian arsenoan arsey artemidean artemisian artesian artgoing arthropodan arthropodean arthurian articulatory artier artiest artinian artsier artsiest artsy arty arylating asbestiform ascient asconoid asectarian aseptate asetate ashake ashen ashier ashiest ashine ashmolean ashy asimovian asinine askey asleep asnarl asperulate aspiny aspiratory asprawl assamese assident assimilatory assinine assonant asterid asterostromelloid astir astronomicodiluvian astute astuter astutest aswarm atacamenan aterian athabascan athabaskan athenian athetoid athirst atingle atomate atrabilarian atremble attery atticky attitudey attry atumble atwinkle atwitter atwoodian audenesque audient audile auditory augaean augean augustan auguster augustest augusty aukstaitian aulate auntlier auntliest aureate aurian auriculate auriform auriphrygiate auscultatory aussie austenesque austere austerer austerest australasian australoid authorly autocrine autoethnography autofluorescent autofluorescing autohidden autoigniting autoimmune autoinhibitory autoploid autopolyploid autoregulatory autumny avellane aveniform avernian avertible avesta avestan avid avogadrian avoidant awanting aware awarer awarest awash aweary aweigh awesome awesomer awesomest awestricken awestruck awfulest awfuller awfullest awheel awhirl awkward awkwarder awkwardest awkweird awny awoken awsome axile axillary azatricyclo azeotroping azerty azo azooxanthellate aztecan azurn babelish babish baboonish babyish babylonish babyproof baccate bacciform bacillary bacilliary bacilliform backassward backasswards backbitten backbreaking backest backflowing backmost backreacting backslidden backstabby backstair backswept backwaterish backwood backwoodsy bacony bacterioid baculiform badder baddest baddish badoglian baggier baggiest baion bairnly bakgat bakhtinian balder baldest baldish balinesian balkan balkier balkiest balky ballardian balletgoing balloony ballsier ballsiest ballsy balmier balmiest balmy balsamy bammy banaler banalest bananery bandsawn bandstop bangier bangiest bangsian bankerish bankerly banksian banty banzai barbary barbellate bareboat barebones barebow barehand barer barest barfy barian barkier barkiest barky barmier barmiest barmy barocline baroque baroquey barrener barrenest barside basalmost baseborn baser basest bashy basinwide basipterygoid bassackward bassackwards bassalian bassy bastarding bastardly bataillean batavophone batesian bathukolpian bathykolpian batrachomyomachian battier battiest battish battlesome battleworthy baudelairean baudelairian baulkier baulkiest baulky bawdier bawdiest bawdy bayesian bayside bbc beachbound beachcast beachfront beachier beachiest beachy beadier beadiest beady beakier beakiest beaky beamier beamiest beamish beamy beardier beardiest beardy bearish bearly beastish beastlier beastliest beastly beatemest beaten beatlesque beatley beautifulest beautifullest beckettian beclad bedbound bedfast bedrel bedridden bedroomy bedworthy beechen beechier beechiest beefcakey beefier beefiest beefish beefy beeg beeproof beerbohmian beerier beeriest beerish beery beethovenian beetrooty beey befallen beggarlier beggarliest beggarly begone begotten begun behad behemothian beholden behung beigy belain belchy belieffulness beliven bellairsian bellicose belluine belonoid belorussian beloving belowground beluine bendier bendiest bendsome benedictory beneficent benign benignant benigner benignest benzylating beowulfian berberophone beresque bergamask bergmanian bernankean bernese berryish berylline berzelian beseen besetten bespoken bestest bestolen bestrewn bestridden bestselling besung betaken betjemanesque betjemanian betther bewitching bewritten biauriculate biblethumping bibovine bicarinate bicaudate bichrome biciliate bicolligate bicomponent biconcave biconjugate biconvex bicornuate bicrenate bicyclo bidden bidentate bidisperse bifid bifold bifoliate bifoliolate biforate biform bifront bigender bigfin biggest biggish biggity bigleaf bigleague bihamiltonian bijugate bilabiate bilateran bilgier bilgiest bilgy biliary bilinguis billowier billowiest billowy bilobate biloculine bimaculate bimboesque bindaas bindup binetian binucleate bioaccessible bioaccumulatory bioaffluent biocompatible biodeficient biodiverse biofriendly bioinert bioluminescent bioregulatory bioremediating biosensory bipalmate biparting bipartisan bipartite bipeltate bipennate bipenniform bipinnate bipotent biquinary biradiate biradicaloid biraphid birchen birdish birdly birdproof birdseye birefringent birostrate birotate bisaryl biscuity biscutate bisectarian biserrate bismarckian bismuthatian bismuthian bismuthoan bisonant bisontine bistate bistratose bisulcate bitchen bitchier bitchiest bitchin bitchinest bitchy biternate bitey bitier bitiest bitsy bitten bitterer bitterest bitterish bittier bittiest bitty bitwise biuncinate biunique bivariant bivittate bivoltine bizarre bizarrer bizarrest bizarro blabbier blabbiest blabby blacker blackest blackish blacklip blahdy blameworthy blancmangey bland blander blandest blandiloquent blanker blankest blankety blase blastproof blastworthy blatant blate blavatskian blavatskyan bleaker bleakest blearier bleariest bleary bleaty blebby blechy bleen bleepier bleepiest bleepy bleh blesseder blessedest bliddy blimpish blindest blingier blingiest blingy blippy blistery blithe blithesome blithest blizzarding blobbier blobbiest blobby blockbustery blockier blockiest blockish blocklong blockwise blockworthy blocky bloggy blogish blokeish blokey blonder blondest blondish bloodcurdling bloodier bloodiest bloodshot bloodsucking bloodthirstier bloodthirstiest bloodthirsty bloomier bloomiest bloomy blossomest blossomy blotchier blotchiest blotchy blottesque blottier blottiest blotto blotty blousier blousiest blousy blowier blowiest blown blownup blowsier blowsiest blowsy blowy blowzier blowziest blowzy blubbery bluechip bluegrassy blueish bluer bluesier bluesiest bluest bluesy bluetail bluewater bluey bluffest bluish blunter bluntest blurrier blurriest blurry blushy blustery blytonesque blytonian bobbly boccaccian bodleian bodywide bodyworn boggier boggiest bogglesome boggy bogus bohmian boingy bok bolder boldest bolognian bolshier bolshiest boltzmannian bombycine bonafide boncer bonedry boney boneyer boneyest bonier boniest bonkbusting bonkers bonnie bonnier bonniest bonny bonser bony bonza bonzer boobish boofier boofiest boofy bookier bookiest bookish bookishly bookly booksy bookwormish bookwormy booky boomier boomiest boomy boorish boosterish boostglide boozier booziest boozy boppier boppiest boppish boppy boratian boratoan boresome borgesian borgian borian borky borne bornean boroughwide boskier boskiest bosky bosomy bossier bossiest bossy bostin botchier botchiest bothersome botticellian bottomfeeding bottommost bottomy bottony botuliform bouffanty bouldery boulle bouncier bounciest bouncy bounden bounderish bourgie boutiquey bowbent bowery boxier boxiest boxy boyish boysy brachyuran brackish bracteolate bracteose braggest braggier braggiest braggy bragworthy braille braindead brainier brainiest brainy braky bramblier brambliest brambly branchiate branchier branchiest branchy brasher brashest brashier brashiest brassier brassiest brattier brattiest brattish bratty braver brawlier brawliest brawnier brawniest brawny breaden breadier breadiest bready breakbulk breakneck breakproof breaky breasty breathier breathiest breathtaking breathy brechtian breechloading breezier breeziest breezy bressonian breton breughelian breviloquent brevipennate brevirostrate brezhnevian briary brickier brickiest brickle brickwise bricky briefest briery brigandish brighter brightest brightish brinier briniest brisant brisbanian brisk brisker briskest bristlier bristliest bristly british brittish brittler brittlest broadacre broader broadest broadscale broadspectrum brockle brokeback brokedown broken broking bromatian bromian bronchodilatory bronchopulmonary brontean bronzen bronzey bronzier bronziest bronzy broodier broodiest broomier broomiest broomy brosey brosy brothier brothiest brothy browbeaten brownean browner brownest brownian brownier browniest brownish browny bruegelian brueghelian brummagem brung brunswikian brushier brushiest brushy brusk brusker bruskest brusque brusquer brusquest brutish brutist bryalean bubblier bubbliest budgetary buffest buffoonish buffy bugfree buggier buggiest bugproof buildingwide bulbiform bulgier bulgiest bulgy bulkier bulkiest bulksome bulky bullate bulliform bullish bullshittiest bullshitty bummest bumpier bumpiest bumpy bunchier bunchiest bunchy bungfu buoyance buoyant burblier burbliest burbly burdensome burglarproof burgundian burlier burliest burly bursiform bursten burstier burstiest bursty bushian bushier bushiest bushy busier busiest businesswide businessworthy businessy bustiest busty butchy butterier butteriest buttermilky butterscotchy buttondown buxom buxomer buxomest buzzier buzziest buzzworthy buzzy byblian byronesque byzantinesque caballine cabbagey cabbagy cabellian cabre cacatory cacciatore cackly cactusy caddish caddoan caddywompus cadent cadgy cadmian caducicorn caerulean caesian cagey cagier cagiest cagy cairene cakey cakier cakiest caky calcariform calceiform calcian calciform calculary calculatory calculiform caledonian calescent calfbound caliciform calliopean callipygean callipygian callistonian callow callower callowest calmest cameline campaniform campanulate campest campier campiest campodeiform campuswide campy camusian canaliculate canaliform canalside cancriform cancrine candent candescent candlelit canescent caniniform cannier canniest canny cantabrian cantaloupey cantatory cantorian canty canvassy capabler capablest capacitary capeverdean capilliform capillose capitatim capoid caprid capriform caprine capsian capsulate capsuliform caraboid carbonatian carbonian carbonmonoxy cardboardy cardiac cardiopulmonary cardiorespiratory carefree carelessest caretaken careworn carfree cariban caribbean caricaturesque caricaturish carinate carnivalesque carnose caroline carpathian carpellary carpellate carrollian carroty carsick cartesian carthaginian cartoonish cartoony carven casebound casewise cashflow caspian cassubian catalanophone catarrhy catchier catchiest catchy catechetick catenulate catharist cathodoluminescent catilinian catproof cattellian cattier cattiest cattish cattycorner cattywampus caucasoid cauchy caudate caudiform caudine caulescent cauliform cauline cautionary cavitary caycean cebuano cedarn cedary celebratory celiac cellary celliform cellularizing censitary centralian centremost centum centuple centuriate cephaloid cephalopagus cerambycoid ceratoid cerebriform cererian cerian ceroan certain cerule cerulescent cervicorn cervine cesarian cesian cessile chaffy chagallian chainwide chairbound chairfast chalkier chalkiest chalky chamorro chancier chanciest chancriform chancy chandleresque chandlerish chapfallen chaplinesque charcoaly charcotian charier chariest charmest charminger charmingest charonian charrier charriest charry chary chaste chaster chastest chatoyant chattery chattier chattiest chatty chavish chavvier chavviest chavvish chavvy cheap cheaper cheapest cheapish cheatier cheatiest cheaty cheddary cheekier cheekiest cheeky cheerfuller cheerfullest cheerier cheeriest cheerleaderish cheery cheesecakey cheesefare cheeseparing cheesier cheesiest cheesy chekhovian chelating cheliform chemiluminescent chemoluminescent chemorefractory chemoresistant chemosensitizing chemosensory chemosterilant chequy cher cherty chestier chestiest chestnutty chesty chewier chewiest chewy chicer chicest chichi chickeny chidden chiefest childfree childish childly childsafe chillier chilliest chilly chinesey chingisid chinglish chinnier chinny chintzier chintziest chintzy chipperly chirpier chirpiest chirrupy chlamydate chloralkaline chloratian chlorian chloriney chloroid choate chocker chockers chocolatey chocolaty choicer choicest chomskian chomskyan choosey choosier choosiest choosy chopfallen choppier choppiest choppy chosen christing christmassier christmassiest christmassy christmasy chromaffin chromatian chromian chryselephantine chrysippan chthonian chubbier chubbiest chukchi chummier chummiest chummy chumpier chumpiest chumpy chunkier chunkiest chunky chur churchillian churchlier churchliest churchly churlish churrigueresque chutzpadik ciceronian ciconine ciliary cilician ciliform cinerary cingulate cinnamony circadian circean circinate circlewise circulatory circumadjacent circumbinary circumburst circumcinct circumfluent circumjacent circumlocutionary circumlocutory circummeridian circummultiple circumnavigatory circumplanetary circumprimary circumscissile circumscript circumsecondary circumspect circumsporozoite circumvolant circussy circusy cirrate cirrhose cirrigrade cirrose cis cisacting cisalpine cisgender cismarine cismasculine cismontane cisoid cisplanckian cispontine citatory citigrade citizenish citizenly citrusy citybound citywide civil civilish claggier claggiest claggy clairaudient clairsentient clamant clammier clammiest clammy clandescent clandestine clane clangier clangiest clangy clankier clankiest clanky clannish clarificatory clarkean classier classiest classificatory classwise classy clattery clattier clattiest clausewitzian clavate clavicorn claviform clayey clayier clayiest clayish claytons cleanest cleanish cleanshaven clearcut clearest clement clerkish clever cleverer cleverest cleverish clickier clickiest clicky clientside cliffy clifty climatory clingier clingiest clingy clinkery clinky clinoid clinquant clintonesque clintonian cliquey cliquish cliquy clithridiate clockworky cloddish cloddy cloggy clompy clopen closest closish clost clothbound clothy clottish cloudcapt cloudier cloudiest cloudy cloven clownish cloysome clubbier clubbiest clubby clucky cluey clumpier clumpiest clumpy clumsier clumsiest clunkier clunkiest clunky cluttery coadjacent coadjoint coadunate coalier coaliest coalitionary coaly coarctate coarse coarser coarsest cobaltian cobaltoan cobbly cobby cobordant cobwebbier cobwebbiest cobwebby cochannel cochleariform cochleiform cockamamie cockamamy cockier cockiest cockroachy cocksure cocompact coconutty codgerly codicillary codominant coelacanthine coercible coercionary coevolutionary coexistent cofinite cogent cogitabund cogitant cognisant cognizant cogongrass cogredient coherent cohesible coincident coindicant cointegrating coky colder coldest coldish coldproof coleopteroid coleridegy coleridgean coleridgian colicky collaboratory collagey collapsible collegebound collegewide collegey collegiate colliest collinsian colorblind colorfast colourblind colourfast colpate coltish colubriform colubrine columbiform columelliform columniform comatose combinatory comcaac comelier comeliest comely cometary comfier comfiest comfy commanding commandwide commemoratory commendatory commensurate comminatory commonest commonish commonsense communicatory comorbid compactest compactible companionate companywide comparing compassionate compatible compelling compensatory competent compilatory complacent complaisant compleatest complementary completest compliant complicit complimentary compony composerly compossible composty comprehendible comprehensible compressible compulsatory computerate computeresque computery concentrating concertgoing concessible conchiform conciliant conciliary conciliatory concise conciser concisest conclamant conclusory concolorate concordant concordatory concrescent concrescible concretionary concupiscent concupiscible concurrent condemnatory condign condolatory conductible conductorly conductory conduplicate condyloid confabulatory confarreate confessory confident confirmatory confiscatory conflagrant conflagratory conflictory confluent conformant confronte confusible congestant congestible conglutinant congratulatory congruent coniform conjectory conjoint connate connectible connivant conoid conradian conrotatory consanguine consecratory considerate consignificant consilient consolatory consolute conspiratory constantinian constat constructible consummatory contemptible contestible contone contortionate contourne contractible contractile contractionary contragredient contraindicatory contraplex contrarotating contrasty contrasuggestible contraterrene contravariant contributory contrite controvertible convenient conversant convex cooingly coolest coolio coolish copernican coppery coprime copulatory coquettish coraciiform coralliform coralloid corally corbusian corbusierian cordate cordiform corkier corkiest corkscrewy corky cornellian corniculate cornier corniest corniform cornuate corny corolliform coronoid corporatewide corporationwide correcter correctest corrigible corroboratory corrodible corrosible corruptest corruptible corticate corticopontine coruscant corvine corymbiform coryneform cos cos2 cosegregating cosier cosiest cosmogonically costiform costimulatory costlier costliest costly costumey cotswold cottagey cottony cotyledonary cotyliform cotylosaurian couchant couchbound counterair counterattracting counterbattery countercorruption counterdrawn counterdrug counterflory counterguerilla counterguerrilla counterpropagating countersniper counterstreaming countersung countersunk countertrafficking countryish countrymade countrywide countywide coupley couply courtlier courtliest courtly cousinly covariant cowardesque cowardian cowardy cowboyish cowiest cowperian cowy coy coyer coyest cozier coziest crabbier crabbiest crabbit crabby cracid crackback crackier crackiest cracklier crackliest crackly crackproof craftier craftiest craftsy crafty cragfast craggier craggiest craggy crampy cranker crankest crankier crankiest cranky crappest crappier crappiest crappy crapy crashier crashiest crashworthy crashy crass crasser crassest crassulacean crawly crazier craziest creakier creakiest creaky creamier creamiest creamy creationary creaturely credible creditworthy creepier creepiest creepy crenulate crepey crepier crepiest crepitant crepy cressy crestfallen cretinoid cribriform cribrose crimean crimefree crimeridden cringemaking cringeworthy cringy crinkly crinky crispate crispest crispier crispiest cristate criticproof croaky cronenbergian crossbench crossborder crossclass crosscourt crossest crossfield crossgender crossparty crossrange crosstown crostinis crotchetier crotchetiest crotchety croupy crowdier crowdiest crowdy cruciate cruciform cruddier cruddiest cruddy cruder crudest crueler cruelest crueller cruellest cruftier cruftiest crufty cruisey cruisier cruisiest cruisy crumbier crumbiest crumblier crumbliest crumbly crumby crummier crummiest crumply crunchier crunchiest crunchy crunker crunkest crushproof crustier crustiest crustose crypticity cryptocrystalline crystalline cteniform ctenoid cthulhu cubiform cubomedusan cuckoldy cuculine cucullate cuddlesome cuddlier cuddliest cuddly culinary cultish culty cumaean cumbersome cumbrian cumhungry cummingsesque cummy cumthirsty cumuliform cunctatory cuneate cunninger cunningest cuntier cuntiest cunting cuntish cunty cupboardy cupidinian cuppy cuprian cuproan cupulate curetonian curiouser curlier curliest curmudgeonlier curmudgeonliest curmudgeonly currenter currentest currish cursedest cursory curt curtate curter curtest curule curvier curviest curvy cushdie cushdy cushier cushiest cushiony cushite cushty cushy cuspidate cuspier cuspiest cuspy custardy cute cuter cutesie cutesier cutesiest cutest cutesy cutglass cutty cvd cyanophycean cyanose cyberpunkish cybersavvy cycadean cyclopean cyclopropenoid cyllenean cyllenian cymose cyprine cysteinyl cytherean cytocompatible cyzicene czarian czarish dacent daddyish daedalian daffier daffiest daffy daft dafter daftest daggier daggiest daggy dagnasty dahlian daintier daintiest dakotan daliesque daltonian damfool damnatory damnfool dampest dampish dancegoing dancerly dancette dancey dancy dandier dandiest dandruffy dangly dank danker dankest dankish dantean dantesque dapper darker darkest darkhorse darkish darksome darlingest darwinulid dastardlier dastardliest dastardly dat daughterly davidian dawkinsian daydreamy dazy deacyl deadborn deadest deadlier deadliest deadset deafblind deafer deafest dealate deathworthy debonair decadelong decadeslong decapartite decatenatory decemberish decembery decent decentish declamatory declaratory declasse declassee decoherent decollete decolletee deconfining deconjugating decorrelating decreasing decrepit decretory decumbent decuple decurrent decurtate dedicatory deducible deedy deeper deepest deepfelt deepish deepwater def defamatory defaulty defeasible defectible defensible deferent deffer deffest defiant deficient definite deflagrant deflationary deflex deflorate deft defter deftest deglucosyl degravitating dehiscent dehydroamino deletionist deleuzean deleuzian delible delightsome deliquescent delish delitescent delphine delusionary delusory deluxe dementing demibold demilune democritean demure denary dense denser densest dentate denticulate dentiform dentproof denunciatory deoxy depascent depletant deprecatory depreciatory depressible depressionary deregulatory derisively derisory dermatoid dermoid dernier derridean descendent descendible deserty designatory designerly designy deskbound desmethyl desmostylian desolatory desperate despondent destitute destructible desultory detectible detractory deubiquitinating deubiquitinylating devanagari developmentary devoid devolutionary devout devouter devoutest dewier dewiest dewy dexterwise dextrorotatory diacranterian dialectally diaperish diasporan diazido diazo diblock dicey diciest dickian dickier dickiest dickinsonian dickish dicy diddier diddiest diddy didelphine dideoxy diderotian didine didonian diel dietary diety difficult diffident diffusible difluent digestible digitaloid digitate digitiform dihydroxy diisopropyl dilatory dilettantish diligent diluvian dimissory dimmest dimmish dimplier dimpliest dimply dingier dingiest dingy dinkier dinkiest dinkum dinky dinosaurish dinq diocesan diogenean dioicus dionean dionysiac dionysian diophantine dipeptidyl diphtheroid dippy diradicaloid dire directer direr direst dirgy dirigiste dirtier dirtiest dirtproof dirtyish discarnate discernible disciform disciplinary disclamatory discoid discompassionate disconcerting disconfirming disconsolate discordant discorporate discreet discreeter discreetest discrepant discrete discretionary discriminatory discussible disequalising disequalizing dishier dishiest dishonest dishwatery dishy disinflationary disinhibitory disintermediary dismissible disobedient disorderly disparate dispassionate dispersible displaying disrotatory dissatisfactory dissectible dissimilatory dissoluble dissolute dissonant distant distensible distinct distingue distortionary distractible distrait distraught disulfur disuniform disuniformly ditchy dithery ditsier ditsiest ditsy ditzier ditziest ditzy divaish divergent diversionary divey divinatory divinest divisible dizzier dizziest djiboutian doabler docile doctorish doddery dodgier dodgiest dodgy dodwellian doggier doggiest doggish doggone dogproof doldrum dolefuler dolefulest dollopy dolorose doltish dominating donnish doodly doolally doomier doomiest doomwatch doomy dopest dopey dopier dopiest dopy doris dorkier dorkiest dorkish dorky dormant dormie dorty dotier dotiest dottier dottiest dotty doty doubtworthy douce douchey doughier doughiest doughtier doughtiest doughty doughy dour dourer dourest doveish dovish dowdier dowdiest dowdy downbent downblouse downcoming downcore downest downfallen downfield downflowing downgone downhole downier downiest downlevel downsloping downstair downtrodden downy doylean dozier doziest dozy drabber drabbest drabbier drabbiest drabby draconian draconine draftsmanly drafty draggier draggiest draggy dragonish drapey draughtier draughtiest draughtsmanly draughty drawish drawly drawn dreambound dreamier dreamiest dreamwrapt dreamy drearier dreariest drearsome dreary dreich dressier dressiest dressy dribbly driest driftier driftiest drifty drillproof drinkworthy drippier drippiest drippy dritten driven driverside drizzlier drizzliest drizzly droll droller drollest droney dronish drony droogish drooly droopier droopiest droopy drossier drossy droughtproof droughty drowsier drowsiest drowsy drugfree druggier druggiest drunken drunker drunkest drusy druzy drydenesque drydenian dryest dryish dryopithecine drywipe dubby duchampian duchessy ductible ductile dudely dulcet duller dullest dullish dumasian dumber dumbest dumbish dumbstruck dumpier dumpiest dumplingy dumptier dumptiest dumpty dumpy duncey dungeonesque dungier dungiest dungy dunnish dunsanian dunzo duobinary duodecuple duodenary duple durkheimian duskier duskiest dustfree dustier dustiest dustproof dusty dutchier dutchiest dutchophone dutchy dutybound dutyfree dvorak dwarfish dwarven dwarvish dweebier dweebiest dweebish dweeby dworkinian dykey dylanesque dym dysprosian dystectoid dystopian dyun earlyish earsplitting earthborn earthbound earthen earthier earthiest earthlit earthmoving earthshaking earthshattering earthwards earthy earwiggy easier easiest eastern easternmost eastery eastmost easy easygoing easyish eaten eatworthy ebber ebbest ebracteate ebracteolate ebullating ebullient eburnean eburnine ecaudate ecchi eccrine echinulate echoey echonian echt ecky eco ecofriendly economywide ecostate ecotopian edematose edgier edgiest edgy edificatory educible edwardian eelfare eeliest eely eensy eentsy eerie eerier eeriest eerisome eery eeyorish effectible effectory effeminate efferent effervescent effete efficient efflorescent effluviant effulgent eggbound eggier eggiest eggy egobese eighteenish eighteenpenny eightpenny eightyish einsteinian ejaculatory elapine elastocapillary elderly eldritch electrocapillary electrochemiluminescent electrochemogene electrogene electroluminescent electrophosphorescent electrosensory electrospun electrostrong electroweak electrowon eleemosynary elegant elementary elephantiac elephantine elephantoid eleusinian elevenpenny eleventeenth elfin elfish eliminatory eliotian elizabethan elizabethian elmy elocutionary eloquent elpidian elucidatory elusory elven elvisesque elvish elvisy elysian elysium emanant emancipatory emarginate emberizine embracingly emersonian eminent emirian empsonian emptier emptiest emptyish enantiocontrolling enantiodiscriminating enantiopure enantiornitine enceinte enceladan enceladean endian ending endmost endocavitary endoeuropean endometrioid endometroid endoreversible engirt englishy enneastyle ennuye enrapt ensiform enteroendocrine enterprisewide enterprisey enterprising entomoid entrywise enturbulant enuff envirofriendly eny eolian eonian eotvos ephemeride epidermoid epifluorescent epigene epileptiform epistemologically epistolary epitheliod epithelioid epithelizing epulary equidistant equifrequency equifrequent equiluminant equinecessary equipotent equisonant equitant equivariant erbian erectile ericksonian ericoid eridian eriksonian erodible erose errant errorfree erstwhile eruciform erudite erumpent erythroid escheresque espanish esquamulose estuarine esurient etaprime etchi ethmosphenoid ethnosectarian euahlayi euchelicerate euclidean euclidian eulerian eumenine eunuchoid eupsychian eurabian euripidean euronesian europian europoan euryhaline euthyroid evacuant evadible evanescent evasible evener evenest everbearing everblooming everchanging everfalling everflowing evergoing evergrowing everlasting everlearning evermoving everrunning evershifting eversible everwhat evident evidentiary eviler evilest eviller evillest evolutionary exaggeratory exanimate exarate exascale excandescent excaudate excitatory exclamatory exclusionary exclusory excretory excruciating exculpatory excurrent excusatory executory exemplary exhalatory exhaustible exhortatory exigent exigible exilian existent existing exocrine exoplanetary exorbitant exoterrene exotrojan exp expansible expansile expansionary expectant expeditionary expertest expiatory expiratory explanate explanatory explicatory explicit explodey exploratory explosible expositionary expository expostulatory expressible expurgatory exsanguine exstipellate exstipulate exsufflicate extant extemporary extendible extense extensible extensile exterminatory extinct extortionary extortionate extrabellum extrabodily extracardiac extractivist extralarge extraliterary extralong extramedullary extramundane extraordinaire extraordinary extrapair extraparliamentary extraplanetary extrapulmonary extrasensory extrastatutory extrastriate extrauterine extravagant extremotolerant extropian extrorse extry exuberant exultant exurban exxy exy eyecatching eyeopening eyewatering fabbest fabbier fabby fabiform faboo facesaving facety facile faciliatory facilitatory faclempt factorywise facty faddier faddiest faddish faddy fadeproof fadest fadish faggier faggiest faggoty faggy faginesque fahrenheit failproof failsafe failureproof fainter faintest faintish fairer fairest fairish fairtrade fairweather fakest fakey faklempt falcate falciform falconine fallaway fallible fallopian false falser falsest falstaffian fanboyish fanciest fandabidozi fanfold fangy fanmade fannish faraway farby farinose farkakteh farnesoid farouche farrant farreaching farseeing farspoken farthermost fashiony fastest fastgrowing fatherly fatiloquent fattening fatter fattest fattier fattiest fattish faulknerian faultier faultiest faulty faustian faustiest fausty faux favonian favoritest favourablest favouritest favy fawce fearfuller fearfullest fearsome feasible featherier featheriest featherlight feathery febrile fecund fecundist feeble feebler feeblest feelbad feelgood feely feepaying feer feetlong feistier feistiest feisty fellest felliniesque felty femmer fenceline fenestrate fennoscandian fenny ferine ferior ferklempt ferny ferrety ferrian ferroan ferrocenyl ferromagnesian ferryl fertile fervent fervid fescennine festy feuillemorte feverish few fewer fewest fewscore fey feyest fibery fibriform fibrillary fibrillatory fibroblastoid fickle fictile fictiveness fiddlier fiddliest fiddly fidgetier fidgetiest fidgety fiendish fiendly fierce fiercer fiercest fierier fieriest fiery fifteenish fifteenpenny fiftyish figgy fightingest figulate figurate filamentary filamentoid filamentose filemot filetail filiform filmier filmiest filmworthy filmy filthier filthiest filthy fimbriate finer finespun fingery finickety finickier finickiest finicking finickity finicky finikin finitary finite finito finnier finniest finnish finnophone finny fireballing firelit fireworky firmer firmest firmish firmwide first firstest firsthand firstmost fishier fishiest fishish fissile fittest fivepenny fizzier fizziest fizzy flabbier flabbiest flabby flabellate flabelliform flaccid flagelliform flagrant flain flakey flakier flakiest flaky flamethrowing flamier flamiest flammant flamy flannelly flapperesque flappier flappiest flappy flashier flashiest flashy flatleaf flattest flattish flatwater flavescent flavid flavorsome flavoursome flaxen fleaborne flearidden fleecier fleeciest fleecy fleeter fleetest fleshier fleshiest fleshly fleshy flexile flickery flickier flickiest flicky fliest flightier flightiest flightworthy flighty flimsier flimsiest flinchy flintier flintiest flintstonian flinty flippant flippest flippier flippiest flirtier flirtiest flitten flitty floatier floatiest flobby floccose floodlit flooey floppier floppiest flopsy florescent florid flory flossier flossiest flossy flouncier flounciest flouncy flourier flouriest floury flowerier floweriest flowery flowier flowiest flown flowy floydian fluctuant fluent fluffier fluffiest fluffy flukey flukier flukiest flukish fluky fluorian flushest flutey flutier flutiest fluttery fluty fluviatile flyblown flycatching flyproof foamier foamiest foamy foetid fogbound fogeyish foggier foggiest foggy fogyish foine foldaway foldup foliose folkier folkiest folkish folklorish folksier folksiest folkstyle folksy folky fonder fondest foodborne foody foofier foofiest foofy foolhardier foolhardiest foolhardy foolish foolisher foolproof foorth footballing footloose footsore foppish forbidden forborne forcasten forcene forcible fordrunken foredone foregone foreign foreknown foresaid foreseen foresty forgettil forgettle forgitty forgiven forgone forky forlorn forlorner forlornest formfitting formican formicarian formicine fornicatory forold forridden forsaken forsworn forthcoming forthpushing forthright fortis fortunate fortyish fortypenny forwardmost forworn fossulate fossy fou foucaldian foucauldian foucaultian foudroyant foulest foundherentist fourche fourierite fourpartite fourpenny fourteenish fourteenpenny fousty foxier foxiest foxy fragile fragmentary fragrant fraidier fraidiest fraidy frailer frailest frammit francoesque francoist franconian frangible frankensteinian frankensteinish frankest frankish fraudproof freakier freakiest freakish freaky freash frecklier freckliest freeborn freeform freehand freemium freest freestanding fregean frekel frem fremder fremdest frequentest freshest fretty fricken friendish friendlier friendliest friendworthy friggin frightsome frigid frillier frilliest frilly frim fringey fringier fringiest fringy friskier friskiest frisky frizzier frizziest frizzlier frizzliest frizzly froggish frolicsome frommian frondescent frondose fronter frontest frontmost frontside froofy froren frory frostbitten frostier frostiest frostproof frosty frothier frothiest frothy froward frownier frowniest frowny frowsier frowsiest frowsty frowsy frowzier frowziest frowzy frozen frugiferent fruitier fruitiest fruity frum frumentary frumpier frumpiest frumpish frumpy frutescent fruticose fubby fubsier fubsiest fubsy fuckish fudgier fudgiest fudgy fugazi fugient fuglier fugliest fugly fulgent fulgid fulgurant fulicine fuliguline fullcourt fullest fullish fullmade fullscale fullwidth fulminant fulsome fumatory fumid fumiest fumy fundiform fundu funerary funest fungible fungiform funkier funkiest funky funloving funnelform funner funnest funnier funniest funnish furanoid furder furibund furriest furrin furshlugginer furtherest furthermost furthest furzy fusible fusiform fusimotor fusionesque fusoid fussier fussiest fussocky fussy fustier fustiest fusty futhermost futile fuzzier fuzziest fuzzy gabbier gabbiest gabby gadgety gadiform gadoid gadolinian gaga gagworthy gainly gainsome galaxian galaxywide galeate galeiform galeproof galerinoid gallian galline gallus galore gamesome gamest gamey gamier gamiest gaminesque gamy ganglier gangliest gangliform gangling ganglioform gangly gangsterish ganymedian gappier gappiest gappy garagey garbagey garbagy garboesque gardnerian gargantuan garish garlicky garrisonian garveyan gashly gasiform gaslit gaspier gaspy gassier gassiest gassy gastight gatesian gatvol gauche gauchest gaudier gaudiest gaulish gaunt gaunter gauntest gaussian gauzier gauziest gauzy gawkier gawkiest gawky gayest gayish gdynian geekier geekiest geekish geekly geeky geezerly geezery gelatinoid gelid gemmary gemutlich generich geniculate geniohyoid genitourinary genomewide genovese genteel gentlemanish gentler gentlest genuine geopolitically geostationary geraldine germanatian germanian germanoid germfree germier germiest germproof germy gesticulatory gewd ghastlier ghastliest ghentish ghey ghostlier ghostliest ghostly ghostwritten ghoulish gibsonian giddier giddiest giddy gifty gigajillion gigantesque gigglesome gigglier giggliest gigglish giggly gilaki gilbertian gilliamesque gimlety gimmicky gimpier gimpiest gimpy ginchiest ginchy gingerish gingery ginny ginsbergian giocoso giottesque gipsyish giraffine girlfriendly girlier girliest girlish girthier girthiest girthy glabrescent glace glacimarine glaciolacustrine glaciomarine gladder gladdest gladsome glaiky glaky glammy glandiform glassier glassiest glassy glatt glazen glazy gleamier gleamiest gleamy glib glibber glibbest glimmery glinty glitchier glitchiest glitchy glitterier glitteriest glittery glitzier glitziest glitzy globose glomeromycotan gloomier gloomiest gloomish gloomy gloopier gloopiest gloopy gloppier gloppiest gloppy glossier glossiest glossopalatine glost glowy gluey gluggy gluier gluiest glum glummer glummest glurgy glutaryl glutenfree gluttonish glycoprocessing glycosylating gnarley gnarlier gnarliest gnarly gnashy gnatty gnawn gneissose gnomish goalbound goatier goatiest goatish goatly goatproof goaty gobbier gobbiest gobsmacking goddamn goddang godfatherly godfearing godforsaken godlier godliest godly godmotherly godsent godwinian goebbelsian goethean gogetting goggly gogolian goldarn golden goldeny goldiest goldlip goldtail goldy gollumish gompertzian goncharovian gonzo goodest goodish goodo goodwife gooey goofier goofiest goofy googlier googliest gooier gooiest gooky goopier goopiest goopy goosebumpy goosey goosy gopping gorbachevian gordian goreyesque gorier goriest gorillian gormenghastian gormy gorsy gory goshdarn goshdurn gospelly gossipier gossipiest gossipy gothically gothicky gothy gotten gouty governessy governmentwide goyish grabbier grabbiest grabby gracile gradelier gradeliest gradewide gradgrindian grainier grainiest grainy grande grander grandest grandfatherly grandiloquent grandiose grandmotherly graney grapefruity grapey grapier grapiest grasscourt grassier grassiest grassroots grassy gravelly graven gravesian gravest gravid gravogyro grayer grayest grayish greasier greasiest greasy greater greatest greedier greediest greedy greeker greekest greekish greenean greener greenest greengagey greenish greenside gregorian grenadian greyer greyest greyish gricean griesly grievousest grim grimier grimiest grimlier grimliest grimmer grimmest grimy grippier grippiest grippy grislier grisliest grisly gristlier gristliest gristly grittier grittiest gritty grizzlier grizzliest groanworthy grodier grodiest grody groggier groggiest groggy groovesome groovier grooviest groovy grosser grossest grottier grottiest grotty grouchier grouchiest grouchy groundward groundwards grouty grovy growlier growliest growly grown growne grubbier grubbiest grubby grudging grueling gruelling gruesome gruesomer gruesomest gruff gruffer gruffest gruffish grum grumblier grumbliest grumbly grummer grummest grumpier grumpiest grumpy grungier grungiest grungy guardant gud guestfriendly guffmanesque guidebookish guiltfree guiltier guiltiest guiltridden guitary gujarati gulfy gullah gullible gulliverian gullwing gummier gummiest gungey gungier gungiest gungy gunkier gunkiest gunky gunshy gunslinging gurgly gushier gushiest gushy gustatory gustier gustiest gusty gutenbergian gutsier gutsiest gutsy guttate guttiest guttiform gutty gutwrenching guyish gypsyish gyratory gyrosynchrotron habile hackerish hackerproof hackier hackiest hackish hackly hackproof hacky hadronizing haedine haemagglutinating hafnian haggish hagrid hagridden haimish haircurling hairier hairiest hairraising hairy haken hakkanese halesome halest halfawake haline hallmarkish hallmarky halloweeny hallucinatory hammier hammiest hamose hamulate hamulose handblown handbuilt handier handiest handly handmade handsewn handsfree handsomest handspun handsy handwavey handwavy handwoven handwritten handy hangoverish hangry haphazard haplodeficient haploinsufficient haplophyte happeningest happier happiest happy haraam haram harborside hardbitten hardbound hardest hardier hardiest hardish hardscrabble hardshell hardwearing hardwon hardworking hardy hardyan hardyesque harlequinesque harpyish harsher harshest hasslefree hastate hastier hastiest hasty hateworthy hattier hattiest hatty haughtier haughtiest haughty hauptmannian haurient hausdorff hautest hawkish hawky hawthornean hawthornian hawthorny hazardproof hazelly hazelnutty hazier haziest hazy headachy headier headiest headish headmasterly headmost headrushing headstrong heady healsome healthier healthiest healthy heapier heapiest heapy hearn hearsome heartachey heartachy heartbroken heartfelt heartier heartiest heartrending heartsick heartsore heartstopping heartwhole heartwrenching hearty heathenish heathier heathiest heathy heavenlier heavenliest heavenly heavenwards heavier heaviest heavyish heavyset hebbian hecka heckuva heegaard hefnerian heftier heftiest hefty hegelian heideggerian heightist heinleinian heliborne hellbent hellbound hellish helluva hellzapoppin helmholtzian helminthoid hemagglutinating hemilabile hemingwayesque hemolymphoid hempen hep hepatobiliary hepburnian heptastyle herbose herby herculaean herculean herdwide herile hermian hermitian herodotean herpetiform herschelian hertzian hesitant heteroaryl heterodisperse heterodox heterofriendly heteroousian heterophase heterophile heteroploid heteroresistant heterosexually hevery hewn hexacoordinate hexacore hexastyle hiccupy hidden hidebound hifalutin highborn highbush highcut higher highest highfalooting highfalutin highfaluting highflying highish highprofile highresolution highrisk hiligaynon hillier hilliest hilly hindermost hindi hindustani hinkier hinkiest hinky hintermost hintikkian hiphugger hipper hippest hippieish hippier hippiest hippocrepiform hippoid hippopotomonstrosesquipedalian hippotigrine hippyish hipshot hipsterish hircose hirquine hirrient hirsute hispanophone hissier hissiest hitchcockian hitlerian hitlerish hitmaking hmong hoarier hoariest hoarse hoarser hoarsest hoary hobbesian hobbity hobbly hobbsian hocclevean hocclevian hochwohlgeboren hodiern hofstadterian hoggish hoggy hognose hokey hokier hokiest hoky holaspid holey holier holiest hollower hollowest hollywoodesque hollywoodian hollywoodish holmesian holmian holy homeborn homebound homegrown homelier homeliest homely homemade homeowning homerian homesick homestyle homewards homier homiest homodiploid homodont homoiousian homoousian homoresistant honest honestest honeyish honorary honourary hookier hookiest hooty hopperesque hoppier hoppiest hopposite hoppy horatian hornier horniest horny horowitzian horrid horrider horridest horrisonant horrorstricken horrorstruck horsedrawn horsier horsiest hotcha hotelwide hott hotter hottest hottish houdiniesque hourlong hourslong housebound housebroken housemade housewide housewifely housewifey housewifish hoyden hoydenish hubbardian hucksterish huffingly huffy huge huger hugest huggermugger huggier huggiest huggy hughesian huipil hulking hulky humane humaniform humanmade humblest humbucking humdrum humid hummin hummocky humongoid humpier humpiest humusy hungover hungrier hungriest hungry hunkier hunkiest hunkish hunseemly hurtier hurtiest hurty husbandly huskier huskiest husserlian hyacinthine hyalescent hyaloid hyblean hydatidiform hydatoid hydrido hydrogenian hydronian hydrosaline hydrosanitary hydroskimming hydrosoluble hydrostationary hydroxy hydroxylian hygrophoroid hylobatine hymeniform hyper hyperaccreting hyperacid hyperacute hyperalert hyperarid hyperarticulate hyperaware hypercapitalist hyperclean hypercompact hypercomplex hyperconfident hyperconsumerist hyperdiploid hyperefficient hypereutectoid hyperextensible hyperfast hyperfeminine hyperfine hyperfinite hyperforeign hyperhygienist hyperinflationary hyperintelligent hyperintense hyperionian hyperkahler hyperlegible hyperlight hyperliterate hyperluxe hypermasculine hypermobile hypermodern hyperpartisan hypersaline hyperscaling hypersoft hypersomniac hypersusceptible hypertense hyperthyroid hypervigilant hypervisible hypervivid hyphy hypnoid hypogean hypogene hypohamiltonian hypomethylating hypostyle hypothyroid hypsodont hystricine hystricomorph ianthine iapetian iberomaurusian ibizan ibsenesque ibsenian icebound icebreaking icelandish icey ichthyosiform icier iciest ickier ickiest icklest icky icterine icteroid icy idean idem idempotent identarian ideomotor idiotproof idlest iffier iffiest iffy ignescent ignoble ignorant ignorantest iid ikey ileac iliac ilka illegible illegitimate iller illest illicit illinois illiquid illish illlit illocutionary illuminatory illusionary illusory illuster illyrian imaginary imido immaculate immanent immarcescible immature immeasurably immediate immense immersible imminent immiscible immiserizing immobile immoderate immodest immotile immund immunocompatible immunocompetent immunodeficient immunodominant immunoelectron immunoenhancing immunofluorescent immunogene immunomodulating immunomodulatory immunoprecipitating immunoregulating immunoregulatory immunostimulating immunostimulatory immunotolerant imparipinnate impassible impassionate impatient impenitent imperceptible impercipient imperiality impermanent impermeant impermissible impertinent impish implausible implicit impolite impotent impraescriptible imprecatory imprecise impressible improper improvident improvisatory imprudent impudent impunctate impune impure impurer impurest inaccessible inaccurate inacquiescent inadept inadequate inadmissible inadvertent inamyloid inane inaniloquent inapparent inapposite inapprehensible inappropriate inapt inarticulate inaudible inauguratory inavertible inband inborn inbroken inbuilt incalcitrant incalescent incan incantatory incessant inchlong inchwide incivil inclement includible inclusible inclusionary inclusionist incognizant incoherent incoincident incommensurate incompatible incompossible incomprehensible incompressible incomunicado incondign incondite incongruent inconsiderate inconsistent inconsolate inconsonant inconstant incontestible incontinent incontrovertible inconvenient inconvertible incony incorrect incorrupt incorruptible increasing increate incredible incriminatory incruent inculpatory incult incurrent incut indecent indef indefeasible indefectible indefensible indefinite indehiscent indeliberate indelible indelicate indescript indestructible indeterminate indianan indicatory indicible indifferent indigestible indignant indigoid indirect indiscreet indiscrete indiscriminate indiscriminating indiscussible indissoluble indistinct indivisible indoaryan indochinese indocile indoeuropean indoor indrawn inducible indulgent industrywide industrywise inefficient inelegant ineligible ineloquent ineludible inept inerrant inevident inexact inexhaustible inexistent inexpedient inexpert inexplicit inexpressible inextendible inextensible infallible infalling infantile infantine infeasible infecund infeft infertile infinitary infinite infirmer infirmest inflammatory inflationary inflexible inflight inflorescent inflowing informatory infradian infrangible infrequent infrequently infuckingcredible infundibulate infundibuliform infusible infy ingenuine ingestible ingoing ingrowing ingrown inherent inhibitory inhouse inhuman inhumane initiatory inkier inkiest inky inlying inmost innercity innermost innerspring innocenter innominate innovatory innumerate inoperant inopportune inordinate inplane inquisiturient inquorate inrushing insane insanitary insatiate insatiaty inscient insectan insectile insectproof insecty insecure inseducible insensible insentient insequent insiderish insidery insignificant insincere insipid insipient insistent insober insoluble insolvent insouciant inspiratory institutionwide instore insubordinate insufficient insurrectionary insusceptible inswinging inswung intact intaken integrating integumentary intelligent intelligible intemerate intemperate intense intenser intensest interagency interamerican interarm interatom interband interbank interbasin interbeat interbinary interborough interbranch interbuilding interburst intercalary intercamp intercarrier intercaste intercave intercavitary intercessory interchain interchannel interchromatin interchurch intercloud interclub intercluster intercollege intercollegiate intercollision intercommunity intercommuting intercompany intercompartment intercomponent intercomprehensible interconference interconvertible intercorporate intercountry intercrater intercrystalline intercurrent intercycle interday interdealer interdendrimer interdependent interdictory interdimer interdisciplinary interdistrict interdomain interdot interelectrode interelectron interesting intereuropean interevent interfaction interfaith interfamily interfemale interfilament interfleet interfluent interforce interform interfulgent interfullerene intergender intergrain intergroup intergrown interhelix interhuman interisland interjacent interjudge interkinetochore interlaboratory interlacustrine interladder interleaflet interleague interleukine interlevel interlibrary interline interlinking intermale intermaxillary intermembrane interminate interminiband intermittent intermodel intermonomer intermountain internecine internucleon internucleoside internucleotide interobserver interorgan interpair interparent interparticle interparty interpatient interpeak interpeptide interphotoreceptor interphylum interplane interplanetary interplate interplayer interploidy interprocess interprocessor interproject interprotein interprotocol interprotomer interpulmonary interpulse interpupillary interquark interquartile interqubit interrater interreducible interresidue interridge interruptible intersample interscale interschool intersectarian intersegment interservice interset intersheet intersite intersong interspecies interspike interstack interstage interstep interstereocilia interstimulus interstrain interstrand interstring interstroke intersubband intersubject intersubunit intersurface intersurvey intersymbol intersystem intertaxon interthread intertrack intertrimer intertube interunion interuniversity interurban interuser intervalence intervalley intervehicle intervein intervenose intervillage intervortex interword interwoven interzoo intestate intimidatory intolerant intraband intrabank intrabinary intrabuilding intraburst intracardiac intracarotid intracase intracavitary intracavity intracell intrachain intracity intraclade intracloud intraclub intracluster intracompany intracomponent intraconference intracoronary intracrater intracrine intracycle intraday intradimer intradistrict intradivision intradot intraexon intrafamily intragrain intragroup intrahost intralayer intraleague intramembrane intramode intramonthly intranight intransient intransigeant intransigent intraoffice intrapair intraparticle intrapartum intraparty intrapathway intrapatient intraphase intrapipette intraplate intrapolaron intrapore intrapulmonary intrapulse intraresidue intraschool intrasite intraspecies intrasquad intrasubband intrasubunit intrateam intratumor intraunion intraurban intrauterine intravalley intrepid introducible introductory intromittent introrse intruse intumescent invasible invasionary inverecund invertible investible investigatory inveterate invex inviolate inviscid invisible involatile involuntary inwrought iodatian iodian iowan iracund irascible irate irater iratest iridescent iridian irksome ironshot iroquoian irradiant irrealis irredundant irrefrangible irrelevant irremissible irreparate irreprehensible irrepressible irreproducible irresistible irresoluble irresolute irreverend irreverent irreversible irruent irvingian isiac isidian islamicate islamitish islandwide islandy isocapacitary isocrystalline isodisperse isodispersion isoenergy isofemale isofrequency isosceles israelite issuant isthmian itchier itchiest itchy iterant ith itsier itsiest itsy itty ivorine jabberwocky jabbery jabby jacksonesque jacobethan jaden jaggeder jaggedest jaggedy jaggier jaggiest jaggy jailbroken jamesian jammier jammiest janglier jangliest jangly janian janiform janitory jankier jankiest janky janner japanesey japetian japhetite jargony jas jasest jasminy jaspery jaspidean jatvingian jauntier jauntiest jaunty javan jawdropping jaynesian jazzier jazziest jazzy jeevesian jejune jellyish jerkier jerkiest jerkish jerksome jerran jerrybuilt jesusian jesusy jetset jewish jhatka jigglier jiggliest jiggly jiggy jigsawn jillionth jimp jimper jimpest jinglier jingliest jingly jingoish jinkier jinkiest jinky jitterier jitteriest jittery jivey jobsian jockish jocky jocose jocund johannine johnsonian jokesome jokey jokier jokiest joky jollier jolliest joltier joltiest joltproof jolty jominian jongian jonsonesque jonsonian jouncy jowlier jowliest jowly joycean joycian joyridden jrm jubilant judean judenrein jugate juicier juiciest juicy julian jumpier jumpiest jumpout jumpy junglier jungliest jungly juniorest junkier junkiest junoesque junonian juster justest justificatory justinian juvenescent juvey juxtamembrane kaalgat kabuli kafkaesque kaflooey kagyu kalian kamboji kambuja kanny kansan kapampangan kapingamarangi kaput kaputt karabakhi kartu kartvelian kashubian katywampus kawaii keatsian keenest keirseyan kelantanese kemalist kempt kempty kennedyesque kenspeckle keplerian keratinoid keratose kerflewie kerflewy kerflooey kerouacian ketchuppy kewl kewler kewlest khinalug kickass kickier kickiest kicky kiddish kidhood kidhoods kierkegaardian kiganda kimilsungist kinder kindest kindlier kindliest kingian kinglier kingliest kingsize kinkier kinkiest kinky kinociliary kinseyan kiplingesque kiplingian kirlian kissiest kissingerian kissy kitscher kitschest kitschier kitschiest kitschy kittenish kittler kittlest kittycorner kittywampus kleinian klezmerish klimtian kludgy klutzier klutziest klutzy knaggier knaggiest knaggy knaveproof knavish kneedeep knobbier knobbiest knobblier knobbliest knobbly knobby knockproof knottier knottiest knotty knownst knuckly knurlier knurliest knurly kolmogorov kookier kookiest kookish kooky kool kordofanian koreshian kroeberian kruegeresque kubrickian kuhnian kurdish kvetchier kvetchiest kvetchy kwaai labelloid labent labile laborsaving laborsome laboursome labyrinthian labyrinthine laccate lacertian lacertine lacey lachrymary lachrymose lacier laciest laciniate lackluster lacklustre lactescent lacunary lacunose lacustrine lacy laddish laden ladyish ladykilling laevorotatory lageniform laggier laggiest laggy laidback lain laingian lairy lakewide lakoffian lakovian laky lambdoid lambent lamby lamellate lamelliform lamest lanate lancastrian lanceolate landbound landladyish landowning landside landward languedocian languid lanker lankest lankier lankiest lanky lanose lanthanian lappish laqueary lardier lardiest large largeish largeleaf largenose larger largest largish larkinesque larkinian larky lasting latent latescent lathery latian latinate latish latrorse latter latterday laudatory laughsome laughworthy lauryl laveyan lavy lawrentian lawyerly laxest layerwise lazier laziest lazuline lazy lazyish leaden leading leadoff leafbearing leafen leafier leafiest leafy leaguewide leakier leakiest leakproof leaky lealer lealest leaner leanest leastest leatherbound leatherier leatheriest leathern leathery leavy lechy lecythiform leerier leeriest leery leesome leetle leeward leftfield lefthand leftish leftwing legatine legendaire legendary leggier leggiest leggy legible legit leibnizian lekker lemony lengthier lengthiest lengthly lengthy lenient leninian lenis lenns lenten lentiform leonese leonine lepiotoid leporine leptokurtosis lesbianish lethean letten lettish lettucey lettucy levantine levelest levorotatory lewd lewder lewdest lewer lewest liberalish liberatory librarianly libre licey licit lickle licky liefer liefest liefsome lifechanging lifedraining lifegiving lifelong lifesize liftin lightest lightfast lightfoot lightish lightproof lightsome lightstruck ligulate likelier likeliest likest likish lil limacine limbate limber limerent limicoline limiest limitary limoniform limpest limpid limpish limy lincoln lincolnesque lincolnian lindberghian lineny linguiform linguisticky lingulate linian linking linky linnaean linnean linsey lintfree linty lionish lipoamino liposoluble lippier lippiest lipschitz lipsticky liquescent liquidly liquidy liquoricey lirate lispy lissom lissome listy lisztian literary lithe lither lithesome lithest lithian litho lithoid littler littlest livebearing liveborn livelier liveliest lively liverish livid lizardly lizardy ln loamier loamiest loamy loath loathest loathiest loathlier loathliest loathly loathsome lobachevskian lobate lobopodian lobsterish locellate lochside locomotor locomotory locrian loegrian loftier loftiest lofty log logamediate logier logiest logy lojban londonesque londonish lone lonelier loneliest lonely longheld longiloquent longish longlasting longnose longrunning longshore longstanding longterm longtime longward longwave lookist looney loonier looniest loopier loopiest looptail loopwise loopy looseleaf looser loosest lophodont lophophorate loricate lorra loserish losingest lossmaking lossy loth lother lothest lotsa louder loudest loudish loungey loungier loungiest loungy loury louseborne lousier lousiest lousy loutish louty lovecraftian lovelier loveliest lovelorn loverly lovesick lovesome lovestruck loveworthy lowborn lowbush lowcost lowcut lowermost lowery lowest lowgrade lowish lowlier lowliest lown lucasian lucent lucid lucilian luckier luckiest lucky lucretian lucullan ludibund ludlovian ludlow lukasiewiczian luke lukewarm lulzier lulziest lulzworthy lulzy lumicrine luminant luminescent luminiscente lumpen lumpier lumpiest lumpish lumpy lunkish lunky lurid lurvely lusher lushest lusitanian lustier lustiest lusty lutecian luteinising luvverly luxembourgish luxuriant lyard lyart lymphoblastoid lymphoid lyncean lynchian lyonnaise lyotardian lyrate lyriform lysyl lytdybr macabre macanese macaronesian macbethian maccabean machiolate macneicean macrobian macrocephalus macrocrystalline macrodont macroevolutionary macropine macropodine macrospin maculatory maculose maddest maddish madid madreporiform madurese magdala maggiore maggotish maggoty maghrebi maghrebin maglemosian magnetocoriolis magnetocrystalline magnetoresistant magnicaudate magnificent magniloquent magrittean mahoran maidenly maileresque mailorder maily maimonidean mainest majorcan majoritarian makah makeout makhani makhonee making malabarese malapropos maledicent maleficent malestream malignant malleiform malshapen maltesian malthusian maltier maltiest malty mamillary mammate mammery mammiform mammilloid mammonish mammose mancalline mancipatory mancude mancunide mandatory mandibuliform mandibulohyoid manganian manganoan mangier mangiest mangy manhattanese manicky maniform mankier mankiest manky manlier manliest manly manmade mannerly mannish manque manques manslaughtering mantegnesque manualiter manubiary manueline manurey manycore mapley maply maraging marathi marbly marcescent marchy mardier mardiest mardy marfanoid margariney marginate marian marioesque maritime markan markovian markworthy marlier marliest marly marmaladey marmalady maroonish marrowish marshier marshiest marshmallowy marshside marshy martellato martuthunira martyrish martyrly marv marvy marxian masaman masculine mashy masqueradish massaman masseterine massier massiest masturbatory matchlit matchwinning matchy materterine matin matt mattery matthean matty maturer maturest maturish maudlin maughamesque maughamian maumish mauretanian mausolean mauvest mauvish mawkish mawky max maxillipedary mayberry mayonnaisey mazier maziest mazy mccarthyesque meadowy meady meager meagerer meagerest meagrer meagrest mealier mealiest mealy meandry meaner meanest meanish measlier measliest measly meatier meatiest meaty mechanosensory meddlesome mediad mediating mediatory mediocre mediterranean mediumwave medullary medullate meeker meekest mega megachiropteran megacool megarich megascale megaselling megavariate megavitamin megawealthy meh meiji melanesian meline melkite mellifluent mellower mellowest melony melpomenean melpomenish meltaway meltier meltiest meltproof melty membraniform memoirish memorylessness menckenian mendelian mennish menschier menschy mensuralist meowy mephistophelean meraspid mercantile merchantile mercuroan merest meringuey merocrine merodiploid merrier merriest merry merulioid meseraick meshuga meshugah meshugga meshuggah meshugge mesoamerican mesoarchean mesocrystalline mesokurtosis messier messiest messy meta metabelian metalating metalbearing metalpoor metasedimentary metatectoid metidian mettlesome miaphysite michelangelesque microblade microcirculatory microcrystalline microdiverse microevolutionary microfine micrometazoan micronesian micropapillary micropolitan micropower microreversible microscanning microsize microsoftian microstock microtine micturient midadolescent midaltitude midblock midbrow midbudget midcall midcampaign midcap midcareer midcentury midchapter midcoast midconstruction midcontinent midcourse midcycle middlemost middling midengine midflight midfoot midfrequency midfuck midgey midgrade midheight midlevel midlist midmarriage midmonth midmost midmountain midpark midperiod midprice midquarter midranking midscale midsentence midsex midshow midsize midstrength midtier midweekly midweight midwestern miffy mighter mightest mightier mightiest migratory milanese milch milder mildest mildewy mildish milelong milewide miliary milkier milkiest milkwhite milky millean millenary millenne millerian millian milligrade milquetoasty miltonian milvine mimantian min minatory mindbending mindblowing mindboggling minerally mingent mingier mingiest minging mingy miniscule minkowskian minneapolitan minnesotan minorish mintier mintiest minty minuter minuteslong minutest minxish miny miocene mirandan mirandian mirier miriest mirky mirrory miry misbegotten misborn miscible miscut misdone miserly misfortunate misgiven misgone misgotten mishuga misproduce misseeming misseen misshapen missileproof missish mistaken misthrown mistier mistiest misty miswritten mitigatory mitosing mixeder mixolydian moany mobbish modalist modelesque modelly modest modish modishest modulatory moist moister moistest moisty molassine moldier moldiest moldy molieresque molluscan molluskan molten molybdian momentary monaxonid monetary monetesque moneygrubbing moneyspinning mongoloid mongrelly moniliform monkeyish monkish monocrystalline monodentate monogyne mononucleate monopartite monopeptidyl monophyte monorchid monosulcate monotectoid monstrose montagovian monthlong monthslong moodier moodiest moody moonier mooniest moonish moonlit moonstruck moorish moory moosey mopey mopier mopiest mopish moppy moratory morbid morbilliform mordvin moreish moreso moresque moriform morish mornay morose morphophonologically mosquitoey mossier mossiest mossy mostest mothbally motherfuckin motherish motherloving motherly mothier mothiest mothy motile motorik mouldier mouldiest mouldy mountainy mouseproof mousey mousier mousiest mousy mouthier mouthiest mouthwatering mouthy moviegoing moving mown mozartian mucho muckier muckiest mucky mucociliary mucoid mucousy mucronate muddier muddiest mudproof muggier muggiest muggletonian muggy muhammadan mulcible muley mulish multiaccess multiacre multiact multiaddress multiage multiagency multiagent multiamplifier multiangle multiantenna multiapplication multiarchitecture multiarea multiarray multiatom multiauthor multiball multiband multibank multibarrel multibaryon multibathroom multibay multibeam multibedroom multibillion multibit multiblade multiblock multibody multiboot multiborough multiboson multibranch multibrand multibrane multibridge multibuffer multibuilding multibuy multibyte multicamera multicampus multicandidate multicarat multicarbon multicarrier multicase multicat multicell multicenter multicentre multichain multichallenger multichannel multichapter multicharacter multichromatid multicity multiclade multiclaim multiclan multiclass multiclassifier multiclient multicluster multicoat multicode multicollection multicollision multicolor multicolour multicolumn multicommittee multicommodity multicompartment multicomponent multicomputer multiconductor multiconfiguration multiconsole multiconstituent multicopy multicore multicountry multicounty multicourse multicraft multicriteria multicult multiculti multicurie multicurrency multicurrent multicustomer multidate multiday multideath multidecade multidefendant multident multidentate multidepartment multidetector multidevice multidigit multidirector multidirectory multidisc multidisciplinary multidiscipline multidisk multidoctor multidog multidomain multidose multidriver multidrop multidrug multielectrode multielectron multielement multiemployer multiengine multiepisode multiexchange multifacet multifaction multifactor multifaith multifare multifarm multifibre multifid multifield multifigure multifilament multiflash multiflight multifluid multifold multifoliate multifood multiformat multifracture multifragmenting multiframework multifrequency multifront multifunction multigame multigap multigas multigate multigender multigene multigeneration multigenome multigenre multigerm multigluon multigrade multigrain multigram multigravid multigraviton multigrid multihadron multihazard multihectare multiheterodyne multihole multihomer multihop multihorse multihour multiindustry multiitem multijet multijoin multijudge multijugate multijurisdiction multikey multikilobase multikilogram multikilojoule multikilometer multikilowatt multilabel multilane multilanguage multilaser multileg multilepton multilevel multilibrary multilight multiline multilink multiliter multilitre multilobulate multilocation multiloculate multilocus multiloop multiloquent multimagazine multimanager multimarket multimedium multimegaton multimember multimeson multimessenger multimethod multimode multimodel multimonitor multimorbid multimove multimovement multimuseum multination multinetwork multinight multinitrogen multinucleate multinucleon multiobject multioctave multioperation multiorgan multioutlet multipackage multipacket multipage multipane multipanel multiparameter multiparcel multiparent multipart multiparticle multipartite multiparton multiparty multipass multipattern multipayer multipayment multipeak multiperson multiphase multiphonon multiphoton multipicture multipiece multipion multipipe multipipeline multipiston multipixel multiplanet multiplant multiplatform multiplatinum multiplayer multiplot multipoint multipolicy multipool multiposition multipotent multipound multipower multipresent multiproblem multiprocess multiproduct multiprogram multiprong multiprotein multiprotocol multiprovince multipurpose multiquanta multiqubit multirace multirack multirange multireel multireference multiresistant multiresolution multiresponse multirestaurant multiride multirisk multiriver multirole multiroom multirow multisample multiscale multiscaling multiscene multischema multischeme multischool multiscience multiscreen multiseason multisectarian multisection multisector multisegment multisense multisensor multisensory multisentence multiserver multiservice multisession multishade multishell multiship multishipment multishop multisite multisize multiskill multisoliton multisolution multisource multispacecraft multispanning multispeaker multispeciality multispecialty multispecies multispeckle multispectra multispin multispore multisport multisports multistage multistate multistatement multistation multistep multistop multistore multistrain multistrand multistrange multistrategy multistream multistreet multistrike multistudent multisubunit multisulcate multisulfur multisulphur multisurface multisymptom multisystem multitab multitargeting multitaxon multiteam multitemperature multitenant multiterm multitest multitheater multitheatre multitherapist multitherapy multithread multiticket multitier multititle multitooth multitower multitown multitrace multitrack multitrillion multiturbine multiunion multiunit multiuse multiuser multivalley multivalue multivariant multivehicle multivendor multivenue multiverb multivessel multiview multivoltine multivolume multiwall multiwarehouse multiwarhead multiwavelength multiway multiweek multiwell multiwindow multiword multizone mumbly mummiform mumpish mumpy mumsier mumsiest mundaner mundanest mundificatory munificent munting muricate murine murkier murkiest murky muscicapine musclebound muscley musclier muscliest muscly museumesque museumworthy mushier mushiest mushroomy mushy muskier muskiest musky mussy mustardy mustier mustiest musty mutest muybridgean muzaky muzzleloading mycelioid mycenoid myeloid myocadiac myoendocrine myoid myoxine myrrhy mysterioso mythy myxoid nabokovian naevoid naevose naff naffer naffest nagelian naggier naggiest naggy naiant naifer naifest nailbiting naily nameworthy nangry nanocrystalline nanoid nanoparticulate nanosize napiform nappier nappiest nariform narky narratorly narratory narrowband narrowest narrowhead narrowish narsty nary nascent nashian nastier nastiest natant natatory nationist nationwide natrian nattier nattiest natty naucorioid naughtier naughtiest naughty nauseating nausicaan nautiliform naviform neaper neapest neapy nearish neater neatest nebbie nebbier nebbiest nebbishy nebby nebuly necessary necrotising nectarean nectarel nee needier neediest needlenose needly needy nefast negligent negligible nehruvian neighborhoody neighborly neighbourly nekkid nematoid nemean neoadjuvant neoarchean neodymian neogene neomodern nerdier nerdiest nerdish nerdy nerts nertz nervier nerviest nervine nervy nesh nessary nether netherlands nett nettlesome nettly networkwide neurodiverse neuroendocrine neuroevolutionary neurofibrillary neuroid neuromotor neurosecretory neurosensory neutrois nevadan neverending nevisian newbuilt newer newest newfound newish newmown newsier newsiest newspaperish newsroomwide newsworthy nfg ngarrindjeri ngcha niceish nicer nicest nichey nicois nicomachean niddering niffier niffiest niffy niftier niftiest nifty niggardliest niggerish niggerly niggly nightclubby nightmarish nijinskian nilpotent nimbier nimbiest nimble nimbler nimblest nimbyer nimbyest ninepenny nineteenish ninetyish niobatian niobian nippier nippiest nipply nipponese nitid nitpickier nitpickiest nitpicky nitratian nitrian nitrifying nitty noarch nobbier nobbiest nobblier nobbliest nobbly nobby nobel nobiliary nobler noblest nocent noctilucent noctivagant nodose nodulose noetherian nogai nogo noice noirest noirish noisemaking noisier noisiest noisome noisy nonabelian nonabsorbent nonabsorbing nonabstract nonabutting nonacademically nonaccelerating nonaccepting nonaccounting nonaccusatory nonacetate nonacting nonadapting nonaddicting nonadherent nonadipose nonadjacent nonadjoint nonadjusting nonadopting nonadsorbent nonadventure nonadverse nonadvertising nonadvisory nonaerospace nonaffectionate nonafferent nonaffine nonaffluent nonageing nonagency nonagenda nonaging nonagouti nonagrarian nonagreeing nonaid nonairborne nonairfield nonairline nonairport nonairtight nonalarm nonalarming nonalarmist nonalbum nonalienation nonalimony nonalloy nonaluminum nonambient nonambulance nonambulatory nonamino nonanalog nonanalogue nonancillary nonangry nonanimation nonannealing nonantioxidant nonantiparallel nonantisense nonapparent nonappealing nonappearing nonaquarium nonarbitrary nonarcing nonarid nonarmy nonarousing nonartillery nonarts nonary nonasbestos nonasian nonaspirin nonassignment nonattack nonattacking nonattending nonattracting nonauction nonaudio nonauditory nonauto nonautoimmune nonautomation nonauxiliary nonauxin nonavian nonaviation nonawake nonback nonbacklit nonbacktracking nonbad nonbaking nonbald nonbalding nonballet nonbanana nonbanking nonbankrupt nonbankruptcy nonbarbecue nonbarking nonbarley nonbarren nonbasalt nonbaseball nonbaseline nonbasement nonbasketball nonbattery nonbattle nonbauxite nonbayesian nonbeach nonbedside nonbeer nonbelieving nonbellicose nonbenign nonbetting nonbidding nonbiliary nonbinary nonbinding nonbiology nonbiomass nonbirding nonbirefringent nonbiting nonbladder nonblameworthy nonblank nonbleach nonbleaching nonbloc nonblockbuster nonblocking nonblog nonblogging nonblue nonblurring nonblurry nonboard nonboarding nonboating nonboiling nonbold nonbonding nonbonus nonbony nonbookkeeping nonboom nonbooting nonborderline nonboring nonboron nonborrowing nonbotulinum nonbound nonbourgeois nonbovine nonboxing nonbraille nonbranching nonbrass nonbread nonbreaking nonbreastfeeding nonbreathing nonbrewing nonbridge nonbridging nonbrittle nonbroadband nonbroadcast nonbroadcasting nonbroken nonbromine nonbronze nonbrown nonbubbly nonbudget nonbudgetary nonbullying nonbuoyant nonburger nonburning nonburrowing nonbusy nonbutter nonbutterfat nonbuying nonbyte noncabinet noncaching noncactus noncadmium noncaking noncalcifying noncalcium noncalculus noncampaign noncampaigning noncamping noncampus noncanadian noncancer noncanine noncanvas noncarb noncarbon noncard noncardiac noncardiopulmonary noncareer noncarotid noncasein noncash noncasino noncassette noncaste noncatalog noncatchment noncattle noncavitary noncelebratory noncelibate noncement noncensoring noncerium noncertificate noncesium nonchalant nonchalky nonchallenging nonchanging noncharging noncheating nonchecking noncheese nonchelating nonchemistry nonchess nonchicken nonchildbearing nonchinese nonchipping nonchlorine nonchlorofluorocarbon nonchloroplast nonchocolate noncholera noncholesterol nonchord nonchromium nonchurch nonchurchly noncigarette noncinema noncircadian noncirculating noncircus noncitrus noncity noncivil nonclandestine nonclassifying nonclassroom nonclay nonclayey nonclean noncling nonclosing nonclothing nonclotting noncloudy noncloying noncoaching noncoalition noncobalt noncocoa noncoding noncoffee noncognizant noncoherent noncoincident noncoinciding noncoking noncold noncollapsible noncollecting noncollectivist noncollege noncollegiate noncolliding noncolorfast noncombat noncombustible noncommon noncommunicating noncommunity noncommuting noncompact noncompassionate noncompatible noncompetent noncompeting noncompetition noncomplementary noncomplementing noncomplete noncomplex noncompliant noncomplimentary noncomposite noncomprehending noncompressible noncompulsory noncomputer noncon nonconcave nonconcert nonconcessionary nonconciliatory nonconcurrent nonconcurring noncondemning noncondensate noncondominium nonconducting nonconference nonconfessing nonconfident nonconfining nonconfirmatory nonconflicting nonconfluent nonconforming noncongealing noncongruent nonconjoint nonconsensus nonconsequent nonconserving nonconsolute nonconstant nonconstituency nonconstricting nonconstruction nonconsulting nonconsumerist nonconsuming noncontact noncontaminating noncontemporary noncontending noncontingent noncontinuing noncontraband noncontract noncontractile noncontracting noncontradictory noncontributing noncontributory noncontrolling nonconvergent nonconverging nonconversant nonconvertible nonconvex nonconvincing noncooking noncooperating noncoordinating noncopper noncoralline noncore noncoronary noncorporate noncorrect noncorrelating noncorridor noncorrodible noncorroding noncorrupt noncorrupting noncosmopolitan noncotton noncount noncounterfeit noncounty noncoupon noncourt noncovariant noncreaky noncreationary noncredible noncredit noncreditworthy noncrossing noncrumbly noncrustacean noncrustose noncrystalline nonculinary noncult noncurfew noncurly noncurrency noncurrent noncussing noncustom noncustoms noncut noncute noncutting noncyber noncycling noncylinder noncytochrome noncytokine noncytosol nondairy nondamaging nondamping nondancing nondatabase nondating nondead nondeadly nondeaf nondealership nondebt nondecaying nondeclaring nondecreasing nondeducible nondeductible nondeep nondefault nondefecting nondefence nondefense nondeficient nondeficit nondefining nondefinite nondeflationary nondefoliating nondegenerate nondegree nondehydrating nondelaying nondelegation nondeliberate nondemanding nondemonstrating nondenaturing nondenticulate nondeodorant nondepolarizing nondepot nondepreciating nondesensitizing nondesert nondeserving nondesign nondesignating nondesktop nondesperate nondessert nondestination nondeterminate nondeterrent nondeviant nondextrose nondialect nondialup nondialysis nondiamond nondiapausing nondictionary nondiet nondietary nondieting nondifferent nondiffracting nondiffuse nondiffusible nondiffusing nondigestible nondiploid nondipole nondirect nondirty nondisaster nondiscerning nondisciplinary nondiscordant nondiscretionary nondiscriminant nondiscriminate nondiscriminating nondiscriminatory nondisjoint nondisjunct nondisqualifying nondistant nondistinct nondistinguishing nondistorting nondistracting nondisturbing nondivergent nondiverse nondividing nondiving nondivisible nondivision nondivorce nondivorcing nondocking nondoctrinaire nondocumentary nondoing nondomain nondomicile nondominant nondonating nondoorman nondormant nondormitory nondouble nondrainage nondraining nondream nondreaming nondrilling nondrinking nondrip nondriving nondrowsy nondrunken nondrying nonductile nonduplex nondying nonearly nonearning nonearthbound noneastern nonechoing nonecholocating noneducation nonefficient nonegg nonejaculatory nonelderly nonelecting nonelection nonelementary nonelevator nonelite nonemergent nonempty nonemulsion nonendocrine nonenergy nonenforcing nonengaging nonengineering nonenterprise nonentertainment nonequine nonequity nonerect nonerectile noneroding nonerosion nonerupting nonerythroid nonescrow nonestablishment nonestrogen nonestuarine nonethanol nonethylene noneuro nonevaporating noneven nonevil nonevolutionary nonevolving nonexamination nonexcess nonexciting nonexclusionary nonexculpatory nonexecuting nonexercise nonexercising nonexhaust nonexhibit nonexhibiting nonexhibitionist nonexistent nonexisting nonexpense nonexplanatory nonexplicit nonexploiting nonexploratory nonexport nonexpository nonextant nonextensile nonextreme nonfacsimile nonfactory nonfaculty nonfading nonfailing nonfallout nonfalse nonfantasy nonfarm nonfarming nonfashion nonfast nonfasting nonfat nonfattening nonfatty nonfaulty nonfeasible nonfebrile nonfee nonfeeder nonfeeding nonfeminine nonfertile nonfertilizer nonfighting nonfilamentary nonfilming nonfinance nonfinite nonfire nonfirefighting nonfish nonfishery nonfishing nonfission nonfissioning nonfit nonflaccid nonflaking nonflaky nonflashing nonflat nonfleet nonflexible nonflickering nonfloating nonfloor nonflour nonflow nonflowering nonflowing nonfluctuating nonfluent nonfluffy nonfluorescent nonfluorine nonflush nonflushing nonflying nonfoam nonfoaming nonfoamy nonfoliate nonfoodborne nonfootball nonforaging nonforbidden nonforcible nonforcing nonforeclosure nonforeign nonforest nonforestry nonfossil nonfoveate nonfracture nonfracturing nonfragmentary nonfragrant nonfraud nonfree nonfreestanding nonfreeway nonfreezing nonfreight nonfrench nonfrequent nonfriendly nonfrigid nonfrilly nonfringe nonfrozen nonfructose nonfruit nonfruiting nonfuel nonfulfilling nonfull nonfunctioning nonfundraising nonfungible nonfurnace nonfurry nonfusion nonfussy nonfuture nonfutures nonfuzzy nongadget nongadolinium nongambling nongaming nongang nongarden nongardening nongarrison nongasoline nongaussian nongelling nongender nongenuine nongeography nongeology nongermane nongermanium nonghetto nonghostly nongiving nonglare nonglass nonglassy nonglaucoma nongloss nonglossy nonglucose nonglue nongluten nonglycerol nonglycogen nongold nongolf nongoods nongourmet nongoverning nongovernment nongraduating nongrainy nongraphics nongraphite nongrass nongrassy nongravitating nongray nongrazing nongreasy nongreat nongreedy nongreen nongreenhouse nongrey nongrocery nongrooming nonground nongrowing nongrowth nonguerrilla nonguideline nonguilty nongullible nonhair nonhairy nonhanging nonhaploid nonhappy nonhardcore nonhardening nonhardware nonhardy nonharvest nonheadline nonhealing nonhealthcare nonhealthy nonhearing nonheart nonheavy nonheavyweight nonhelium nonheme nonhereditary nonheritage nonhidden nonhighway nonhilly nonhip nonhockey nonhollow nonholy nonhome nonhomework nonhorror nonhospitality nonhostile nonhot nonhotel nonhourly nonhousehold nonhousing nonhumanitarian nonhumiliating nonhungry nonhunting nonhydrazine nonhydrogen nonhyperdiploid nonhypertext nonidempotent nonidentifying nonidle nonidling nonill nonilliterate nonimmediate nonimmune nonimpact nonimperialist nonimport nonimportant nonimporting nonimpotent nonimpressionist nonincandescent nonincendiary noninclusionary nonincreasing nonindependent nonindium noninducing nonindustry noninert noninfantile noninfecting noninfinite noninflammatory noninflationary noninflecting noninformation noninfrastructure noninherent noninheriting noninhibiting noninhibitory noninput noninsane noninspiring noninsulating noninsulin noninsulting noninsurance noninsurrectionary nonintegrating nonintelligent nonintense noninteracting nonintercourse noninterdependent noninterdisciplinary noninterest noninteresting noninterface noninterfering noninterim noninterlocking noninterlocutory nonintermediate nonintermittent noninterpolating noninterrupt nonintersecting nonintimate nonintimidating nonintoxicating nonintroductory noninvading noninvariant noninventory noninverting noninvestigatory noninvesting noniodine nonionizing noniridescent noniron nonirritating nonitinerant nonjade nonjail nonjapanese nonjava nonjazz nonjogging nonjoining nonjoint nonjudging nonjungle nonjunk nonjuring nonjury nonkeratinizing nonkeyboard nonkindergarten nonkinky nonkitchen nonkosher nonlab nonlabor nonlaboratory nonlaboring nonlabouring nonlactating nonlake nonland nonlandowning nonlaptop nonlarge nonlaser nonlatex nonlathering nonlattice nonlaughing nonlaundry nonlaying nonlazy nonlead nonleading nonleafy nonleague nonleaking nonleaky nonleap nonlearning nonleather nonlegacy nonlegendary nonlegitimate nonleukemia nonlevel nonlibrary nonligand nonlimbate nonlimiting nonlinen nonlinking nonliterary nonlithium nonlittering nonliver nonlivestock nonliving nonlobbying nonlocking nonlocomotory nonlodging nonlogistics nonlonely nonlookahead nonloopback nonlooping nonlosing nonlottery nonloving nonlower nonluxury nonlymphoid nonmachine nonmacrophage nonmagazine nonmagnesium nonmail nonmainframe nonmainstream nonmaize nonmalaria nonmalignant nonmammalian nonmanagement nonmandatory nonmanganese nonmanufacturing nonmarble nonmarijuana nonmarine nonmaritime nonmarket nonmarketing nonmarketplace nonmarrying nonmasculine nonmasing nonmassage nonmasticating nonmasturbating nonmasturbatory nonmatching nonmaternity nonmath nonmating nonmatrix nonmature nonmeat nonmeaty nonmedia nonmediating nonmedication nonmeditating nonmedullary nonmembrane nonmemory nonmenthol nonmercenary nonmercury nonmerger nonmessy nonmetro nonmetropolitan nonmexican nonmicrophone nonmigraine nonmigrating nonmigratory nonmilitary nonmilk nonmining nonmissile nonmissionary nonmobile nonmodem nonmoderate nonmodern nonmoisturizing nonmolybdenum nonmonetary nonmoney nonmonthly nonmoralizing nonmorbid nonmortgage nonmortuary nonmotile nonmotivating nonmotorcycle nonmouse nonmovie nonmoving nonmultilayer nonmultimedia nonmultiplex nonmultiplexing nonmultivariate nonmundane nonmurder nonmurine nonmuscle nonmuseum nonmutating nonmutation nonmute nonnegligent nonnegligible nonnegotiating nonnesting nonnetwork nonnew nonnews nonnewsworthy nonnewtonian nonnickel nonnitrogen nonnodulating nonnorthern nonnull nonnursing nonnurturing nonobese nonobjecting nonoblate nonobligate nonobligatory nonobscene nonobservant nonobsolescent nonobsolete nonobstructing nonocean nonodd nonoffice nonofficiating nonoil nonoily nonold nonolfactory nonomnipotent nonomniscient nonopalescent nonopaque nonopera nonoperating nonopposing nonorange nonorderly nonordinary nonorthodox nonoscillatory nonosmium nonoutlet nonoutlying nonoutput nonovarian nonovergrown nonoverhanging nonoverlapping nonovernight nonoverridden nonovert nonovoid nonovulating nonoxidising nonoxidizing nonoxygen nonozone nonpackaging nonpaging nonpaid nonpaint nonpainting nonpalmate nonpaper nonpapillary nonparacompact nonparaffin nonparallel nonparish nonpark nonparkinsonian nonparliamentary nonparsing nonparticipating nonparticipatory nonpartizan nonpasserine nonpassionate nonpast nonpasta nonpasture nonpaternity nonpatronizing nonpaying nonpeak nonpedigree nonpenetrating nonpenicillin nonpenile nonpeptidyl nonperceiving nonperching nonperfect nonperforming nonperiod nonpermanent nonpermeating nonpermissible nonpersistent nonpersonality nonpersonnel nonpertinent nonpetroleum nonphage nonpharma nonpharmacy nonphoning nonphosphorus nonphoto nonphysics nonpiano nonpine nonpink nonpitching nonpituitary nonpivoting nonpixel nonpizza nonplacement nonplague nonplanetary nonplankton nonplant nonplantation nonplantigrade nonplaque nonplatelet nonplatinum nonplaying nonplayoff nonpliant nonplutonium nonplywood nonpoints nonpoisoning nonpoker nonpolarizing nonpolice nonpolite nonpolling nonpolluting nonpolyester nonpolymerizing nonpolypoid nonpolyurethane nonpoor nonporcine nonpork nonpossessory nonpostmodern nonpostpartum nonpotassium nonpotato nonpottery nonpoultry nonpoverty nonpowdery nonpower nonpracticing nonpractising nonpraying nonpreaching nonprecipitating nonprecise nonpredatory nonpredicate nonpregnant nonprehensile nonpremature nonpremium nonprescription nonpresent nonpress nonpressuring nonprestige nonprickly nonpriestly nonprimary nonprime nonprint nonprinting nonprison nonprivate nonprocrastinating nonproducing nonprofane nonprogram nonprogramming nonprojectile nonproliferating nonproofreading nonpropellant nonproper nonproportionate nonproprietary nonpropulsion nonprosecution nonprotesting nonprotozoan nonprotruding nonproven nonprurient nonpubescent nonpublishing nonpulmonary nonpulse nonpurchasing nonpure nonpurine nonpurple nonquantum nonquarantine nonquarterly nonqueer nonquestioning nonqueueing nonqueuing nonquiescent nonquiet nonquota nonrabbit nonracing nonradiate nonradio nonradiopaque nonradium nonradon nonrail nonrailroad nonrailway nonrainforest nonrainy nonranching nonrandom nonrape nonraster nonratifying nonrating nonraw nonreactionary nonrealtime nonrecent nonreceptor nonrecession nonrecessionary nonreciprocating nonrecirculating nonrecoil nonrecombining nonrecording nonrecourse nonrecruiting nonrecurrent nonrecurring nonreducible nonreducing nonredundant nonreference nonreflecting nonreflex nonreform nonreforming nonrefracting nonrefractory nonrefreshing nonregister nonregulatory nonrelaxing nonrelevant nonrelocating nonremote nonrenewing nonrepeat nonreplicating nonreplying nonreproducible nonreproducing nonreptilian nonresearch nonreservation nonreserve nonresilient nonresin nonresistant nonresisting nonresonant nonrespiratory nonresponsible nonrestaurant nonresting nonrestraining nonresurgent nonretail nonretaliatory nonretractile nonretracting nonretrograde nonrev nonrevenue nonreversible nonreviewing nonrevisionary nonrevolving nonrewarding nonrhyming nonrice nonrich nonriding nonriemannian nonright nonrights nonrigid nonrioting nonriparian nonripe nonrisk nonrisky nonriverine nonroad nonroaming nonrobbery nonrobust nonrocky nonromance nonroof nonroster nonrotating nonrotting nonround nonroutine nonrubber nonrubella nonruby nonrugby nonruminating nonrunning nonrusting nonrusty nonsaccharine nonsafe nonsailing nonsalary nonsale nonsales nonsalient nonsaline nonsalivary nonsalmon nonsalt nonsalty nonsalutary nonsandstone nonsapient nonsatisfying nonsaturating nonsave nonsavvy nonscalding nonscaling nonscaly nonscanning nonscarce nonscary nonschizoid nonscholarly nonscholarship nonscissile nonscoring nonscreaming nonscrolling nonscuff nonsea nonsecondary nonsecretory nonsecure nonsecurity nonsedating nonsedimentary nonseeing nonsegregating nonselenium nonselfadjoint nonsemisimple nonsenate nonsenile nonsensationalist nonsensory nonsentient nonseptate nonserotonin nonserum nonserver nonservile nonserving nonsessile nonsevere nonsex nonsexist nonsexy nonshaking nonshallow nonshareholding nonshattering nonshearing nonshedding nonsheep nonshell nonshiny nonshipping nonshivering nonshoe nonshooting nonshopping nonshower nonshowy nonshrink nonshrinking nonshy nonsignificant nonsigning nonsilicon nonsilicone nonsilk nonsilly nonsilver nonsimple nonsimplex nonsimulation nonsinging nonsingle nonsiphonate nonskid nonslack nonslaveholding nonsleepy nonsliding nonslip nonslippery nonsloping nonsmall nonsmart nonsmoking nonsmooth nonsnack nonsnow nonsoapy nonsoccer nonsocializing nonsociology nonsodium nonsoftware nonsoil nonsoiling nonsolicit nonsolicitation nonsoliciting nonsolitary nonsoluble nonsoundtrack nonsoup nonsouthern nonsovereign nonsoviet nonspacing nonspalling nonspare nonsparking nonsparkling nonspeaking nonspecializing nonspecialty nonspecification nonspeech nonspending nonspicy nonspinning nonsplintering nonspoken nonspongy nonsponsoring nonsport nonsporting nonstaff nonstaining nonstale nonstarchy nonstarving nonstationary nonstatutory nonsteak nonsteam nonsteel nonsterilizing nonstick nonsticky nonstiff nonstiffening nonstimulating nonstipendiary nonstockholding nonstolen nonstorage nonstore nonstraight nonstrange nonstratiform nonstray nonstreaming nonstretch nonstretchy nonstrict nonstrike nonstriking nonstudio nonstudying nonstupid nonsubmarine nonsubordinate nonsubordinating nonsubscribing nonsubscription nonsubstrate nonsubtle nonsuburban nonsucrose nonsufficient nonsugary nonsuing nonsulfhydryl nonsulfur nonsulphur nonsummer nonsuperconducting nonsuperfluid nonsupermarket nonsupervisory nonsupplementary nonsupporting nonsurplus nonsurvey nonsusceptible nonsushi nonsustaining nonswearing nonsweet nonswimming nonswitching nonswollen nontabby nontaboo nontackle nontactile nontape nontarget nontariff nontarnish nontaxing nontaxpaying nonteaching nonteak nonteam nontech nontechnology nonteenage nontelescoping nontelevision nontellurium nontemperate nontempering nontemplate nontemple nontennis nonterminating nonternary nonterrible nonterror nonterrorism nontertiary nontest nontext nontextile nonthallium nontheater nontheft nonthickening nonthorium nonthreatening nonthrowing nonthrust nontimber nontin nontipping nontitanium nontitle nontobacco nontorpid nontort nontotalitarian nontouching nontouring nontourism nontouristy nontournament nontrade nontrading nontrain nontransgender nontransient nontransit nontransition nontransitioning nontransitory nontranslucent nontransmissible nontransparent nontransportation nontransverse nontrapping nontravel nontraveling nontreasury nontrendy nontrespassing nontroublesome nontrue nontrump nontuberculosis nontuition nontumescent nontungsten nontwist nontwisting nontyphoid nonultrasound nonultraviolet nonunary nonunderground nonundulating nonuniform nonuniformitarian nonunion nonunique nonunitary nonupper nonupset nonuranium nonurban nonurea nonurethane nonurgent nonurinary nonurine nonusing nonuterine nonutilitarian nonutopian nonvacant nonvacation nonvacationing nonvaccine nonvalid nonvalidating nonvanadium nonvanilla nonvanishing nonvarsity nonvarying nonverbatim nonverbose nonvertebrate nonvertex nonveterinary nonvibrating nonvibratory nonvictimizing nonvideo nonviewing nonvintage nonvinyl nonviolet nonvirile nonvisa nonviscid nonvisible nonvisiting nonvivid nonvocabulary nonvocalizing nonvoice nonvoid nonvolant nonvolatile nonvolume nonvoluntary nonvolunteering nonvomiting nonvortex nonvoting nonvuggy nonwage nonwaiting nonwaiver nonwalking nonwarehouse nonwartime nonwater nonwaterborne nonwaterproof nonwatertight nonwatery nonwave nonwaveform nonwaveguide nonwavering nonwaxy nonweak nonwealthy nonweapon nonweapons nonweather nonwedding nonweekend nonweekly nonwetting nonwhale nonwhaling nonwheat nonwheelchair nonwhiskey nonwhole nonwholesale nonwild nonwilderness nonwildlife nonwind nonwinding nonwine nonwinning nonwinter nonwobbly nonwood nonwooden nonwoodland nonwoody nonwool nonworking nonworkplace nonworkshop nonworthwhile nonwriting nonwritten nonxanthine nonxenon nonxylene nonxylitol nonxylose nonyellow nonyellowing nonyielding nonyoga nonyoung nonzinc nonzirconium nonzonate nonzone noobish noodly normalish norse northeasterly northeastern northeasternmost northern northernly northernmost northmost northwestern northwesternmost nosey noshore nosier nosiest nosy notchy notewise noteworthier noteworthiest nott nouny nourishing nouveau novatian novelesque novembery nubbly nubby nubian nuder nudest nudiustertian nuevo nugatory nuggety nullary nulliploid nullipotent numbest numerary nummy numptyish nunly nurturant nutant nutbrown nutmeggy nutso nutsy nuttier nuttiest nutty nyc nycer nycest nyctian nymphean nymphine nymphish nymphly nymphoid nyunga oafish oaken oakier oakiest oaky oaten oathbound oaty oaxacan obcordate obdeltoid obdurate obedient obeisant oberonian obese obfuscatory objurgatory oblanceolate oblatory obligatory obliteratingly oblyrate obmutescent obovate obovoid obpandurate obpyriform obreniform obsagittate obscene obscener obscenest obscurest observant obsolescent obstinant obstinate obtect obtuse obtuser obtusest obzocky oceangoing oceanside ocellary octan octapartite octastyle octavating octobery octopoid octostyle oculomotor odd odder oddest oddish odontoid odyssean oecumenopolitan offbase offfield officewide offish offlist offputting offroad offsite offsuit offtrack offwing ogreish ogrish ogry oikish oilier oiliest oilproof oily okayish older oldest oldish oldskool olfactible olfactory olid oligocene oligocyclopropyl oligopotent olivary oliver olivey omakase omissible omnicompetent omnificent omnipotent omnipresent omniscient omnisentient omphalinoid omy onefold onetime oneway onfield onglaze ongoing onhand onionier onioniest oniony onkus onliest onlooking ono onrushing onry onscreen onside onsides onsight ontarian onwing oofy oozier ooziest oozy opalescent opaquer opaquest opencast operagoing operose opportune oppugnant optomotor orangeish oranger orangest orangier orangiest orangish orangy orbiculate orbitomaxillary orbitosphenoid orcadian ordovician organoaluminium organoaluminum organobarium organobismuth organoboron organocadmium organocalcium organocarbon organocerium organocesium organochromium organocobalt organocopper organodysprosium organoerbium organoeuropium organogallium organogermanium organogold organohafnium organohydrogen organoindium organoiridium organoiron organolanthanum organolead organolithium organolutetium organomagnesium organomanganese organomercury organomolybdenum organoneodymium organonickel organoniobium organoosmium organooxygen organopalladium organophosphorus organoplatinum organoplutonium organopolonium organopotassium organorhenium organorhodium organorubidium organoruthenium organosamarium organoscandium organoselenium organosilver organosilyl organosodium organostrontium organosulfur organosulphur organotantalum organotechnetium organotellurium organothallium organothorium organotin organotitanium organotungsten organouranium organovanadium organoxenon organoytterbium organoyttrium organozinc organozirconium orientationist originary orinoco orkish ornate orne ornee ornerier orneriest ornery orodispersible orosirian orotund orthodox orthograde orthoprax ortonesque orwellian oscillatory oscine osmeriform osmian osmoregulatory osmoresistant osseocarnisanguineoviscericartilaginonervomedullary ostensible othersome otherworldish otherworldly otherworldy otiose otsu ould oulder ouldest ourie outbound outbursting outcoming outdone outdoor outdoorsier outdoorsiest outdoorsy outdrawn outdriven outermore outermost outflowing outflown outflung outgrown outlain outlandish outlying outmost outre outridden outsiderish outsiderly outspoken outspread outstanding outstate outsung outsworn outworn outwritten ovarian ovate ovenproof overabundant overbank overbattle overbearing overbeaten overbitter overblown overbold overbore overbought overbright overbroad overcompensatory overcomplete overcomplex overconfident overcontact overconvergent overcute overdemanding overdense overdependent overdone overdrawn overdriven overdue overeager overearnest overeaten overelaborate overexuberant overfine overflown overfond overfrequent overfriendly overfull overgone overgreedy overground overgrown overhasty overhot overindulgent overjubilant overkeen overladen overlain overland overlarge overlavish overlong overloose overloud overluxuriant overlying overmighty overmodest overmuch overnice overprecise overproof overproportionate overproud overready overreliant overridden overripe overrude oversanguine overscale overseen oversimple oversize oversoft oversold overspeeding oversquare overstage overstrict overstrung oversubtle oversweet overt overtaken overthrown overtrusting overwise overwordy overworn overwritten overwrought oviform ovulatory owld owlish oxbridgian oxonian oxycalcium oxygenian oxyhydrogen ozymandian pabulary pacesetting pacey pacier paciest pacy paenultimate pagnolesque painkilling painstaken painterly paintier paintiest painty paiwan palaeeskimo paleoarchean paleochristian paleofantasy paleogene paler palest palish palladian palladoan pallescent pallid pallier palliest palmatifid palmatipartite palmatisect palmerian palmerstonian palmiest palmy palpitant paltrier paltriest paltry palustrine panamax pancyprian pandaedalian pandean pandoran pandurate panduriform pangasinan panglossian panicky paniculate pantagruelian panzoist paperbound papery papillary papillate papilliform papillose papulose papyriform paracompact paraconsistent paracrine paradisiac paramount pareve paripinnate parkier parkiest parkinsonian parkside parky parliamentary parmenidean parmese parmigiana parro parroty parsnipy partaken partible participatory partite parturient partygoing partywide pascalian passant passeriform passible pastier pastiest patchier patchiest patchworky patchy patellate patelliform patelline pathbreaking pathetisad pathwise patibulary pauce paucibacillary paucidisperse pauciloquent pauline paultry paunchier paunchiest paunchy pavid pavlovian pavonian pawkier pawkiest pawky paydirt peacefullest peachier peachiest peachy peacockian peacockish peacocky peakean peakier peakiest peaky peanutty pearlescent pearlesque pearlier pearliest peary peatier peatiest peaty pebblier pebbliest pebbly peccant peckish pecksniffian pectiniform pecuniary pedaliter pedate pedicellate pediform pedunculate peepier peepiest peepy peevish peircean pekid pelagian pellucid peltate pencilly penicillate penile penisy pennate penniform pennyante pennywise pensile pentacoordinate pentacuspid pentadactyl pentadentate pentakis pentaploid pepperminty peppery peppier peppiest peppy peptidyl pepysian peralkaline perceptible perceptuomotor percoid percurrent perdu perdue peremptory perfectest perfectible perfecto perfervid perfluoro perfoliate perforant perfumey perfunctory perhydro peribiliary pericapillary periciliary periclean perigastrulation periinfarct perimammary perimortem periovulatory peripartum peripubescent perisylvian peritectoid periurban perivitelline perkier perkiest perky perlish perlocutionary perlsian permafrozen permian permissible pernickety peronate persecutory perseverant perseverent persistent persnickety perspiratory persuasible perter pertest pertinent pertuse perugian perverse perviest pervy peskier peskiest pesky pesty petaloid petascale petit petite petrean pettier pettiest pettish petty petulant pezizoid phagostimulatory phantasmagorian pharate phasematching phaseoliform phat phatter phattest phildickian philippine phlegmier phlegmiest phlegmy phoebean phonier phoniest phosphatian phosphorent phosphorian phossy photoconvertible photodamaging photodissociating photoinducible photoionizing photolabile photolithographically photoluminescent photoreversible photostationary photostimulating phototransducing phthisicky phunky phytelephantoid phytosanitary picassian picayune picayunish piccata pickier pickiest pickproof picksome picnicky picoscale picturesque piddlier piddliest piddly piebald piggier piggiest piggish pigmentary pigovian pilferproof piliform pillowtop pillowy pilose pimpish pimplier pimpliest pimply pimpy pinchy pindling pineappley pineapply piney pinguid pinier piniest piniform pinker pinkest pinkier pinkiest pinkish pinnate pinnatifid pinnatipartite pinnatisect pinteresque piny piquant piriform piscatory pisciform piscine pissier pissiest pissy pistillate pitcairnese pitchier pitchiest pitchside pitchy pithier pithiest pithy pitifuller pitifullest pixieish pixyish pizazzy pizzaiola pizzazzy placatory placid plaguesome plaguey plaguier plaguiest plaguy plainer plainest plainish plainspoken planckian planeside planest planetary plangent planoconcave planoconvex plantwide plashy plasmacytoid plasticky plateresque platey plathian platinian platinoan platonian platykurtosis platyrrhine plausible plautine playline playsome pleasant pleasanter pleasantest plebby pleistocene plexiform pliant plinian plinky pliocene ploppier ploppiest ploppy plotlessness plottier plottiest plotty pluckier pluckiest plucky plumbean plumbian plumboan plumiliform plummier plummiest plummy plumose plumpest plumpish plumpy plumulose plumy plunderage pluriform pluripotent plusher plushest plushier plushiest plushy plutarchian pluterperfect pobby poddier poddiest podgier podgiest podgy poean poesque poignant pointier pointiest pointwise pointy pokier pokiest polite politer politest polliniate pollinose pollockian pollyannaish pollyannish poltroonish polyacid polyadelphian polyandrian polycarpellary polycatenary polychrome polycotyledonary polycrystalline polydactyl polydent polydentate polydisperse polydomain polydrug polyembryonate polyendocrine polygamian polygonate polygyne polygynian polyhalogeno polyhydroxy polyinstanton polyloquent polymorphean polymyarian polymyodian polymyoid polynemiform polynucleate polyorchid polyphase polypiform polypine polypoid polypotent polysectarian polysperm polystrate polysubstance polyvariant polyvinyl pomeridian pomoan poncey poncier ponciest poncy pondian pondy ponerine pongier pongiest pongy pontine ponzi poochy pooey poofier poofiest poofy pooiest poorer poorest poorish popcorny popean popish popperian poppier poppiest poppish porciform porcine porkier porkiest porkish pornier porniest porny porridgey porridgy portlier portliest portly pos posey posh posher poshest positiver positivest possessory possibler possiblest postaccident postadministration postadsorption postapartheid postarrest postassembly postassessment postattachment postauction postbaccalaureate postbailout postbankruptcy postbattle postbellum postbinge postboomer postbounce postboxing postbreakup postbubble postcampaign postcancer postcapitalist postcaucus postcollege postcollegiate postcolumn postconcert postconcussion postconflict postconsumer postconviction postcopulatory postcorrelation postcourse postcrash postcrisis postdeadline postdebate postdefection postdeployment postdisaster postdischarge postdoctorate postdose postdraft postearthquake postelection postepisode postevent postexecution postfight postfilm postflight postflood postflop postfuck postfusion postgadolinium postgelation postgenocide postgermination postharvest posthearing postherpes postholiday posthurricane postimplantation postindependence postinformation postinitiation postinjection postinvasion postisolation postlapsarian postlayoff postlegislation postliberation postliterate postlockout postlunch postmagma postmarathon postmarket postmarketing postmarriage postmatch postmedium postmerger postmeridian postmidnight postmigratory postmillennium postmodern postmonsoon postmove postmovement postnucleation postobese postorder postovulation postovulatory postpaid postpainterly postpartisan postpartum postperformance postpetroleum postplaying postpolio postpoliomyelitis postpolymerization postpractice postpregnancy postpremiere postprenylation postpresidency postprimary postprocedure postpuberty postpubescent postpublication postpunk postqualifying postrace postracist postratification postreaction postrecession postrecruitment postrelease postresidency postresonance postretirement postrevolutionary postround postsale postsaturation postscreening postsecondary postselection postsemester postsermon postservice postsex postshock postshow postslavery postsleep postsnap postsocialist poststimulus poststorm poststrike postsuicide postsurge postswim posttraining posttransfer posttransition posttransplantation posttrauma posttreatment posttumor postundergraduate postvacation postverdict postveto postvictory postviewing postvote postweaning postworkout potassian potatoey potatory potbound potent potterian pottier pottiest poufier poufiest poufy poulantzasian poundian poutier poutiest pouty pov powdery powerfullest poxier poxiest poxy praeeminent praiseworthier praiseworthiest praiseworthy prancy prankier prankiest prankish pranksome pranksterish pranky praseodymian prasugrel prawny preacherly preachier preachiest preachy preadipose preadmission preassessment preattack preauction prebankruptcy preblog preboom preborn prebound prebreak prebubble prebudget prebuilt precambrian precampaign precatory precaucus precautionary precharge precinema precise preciser precisest preclair precode precognisant precognizant precollapse precollege precombustion precommunist precompetition precomputer preconcert preconference preconquest preconsumerist precontact precontest preconvention preconviction precopulatory precorrelation precrash precredit precrisis precursory precurtain predatory predebate predecimalisation predecimalization predefection predeparture predeployment predialysis prediluvian predinner predisaster predischarge predisco prediscount prediscussion predraft predrought preemergent preeminent preemptible preemptory preequilibrium preexposure prefatory prefeminist prefight prefilm prefire preflare preflood preflop prefocus prefuck pregenocide pregentrification preggers preggo pregnant pregraduate preground prehatch prehatching prehearing prehensile prehiatus prehire preholiday prehung prehurricane preimmune preimpact preimplantation preimpressionist preinauguration preincident preindictment preinjection preintegration preintermission preinvasion prejudicate prejump prelabour prelanding prelapsarian prelaugh prelaunch prelegislation preliberation prelife preliminatory prelockout prelunch premalignant premammalian premarketing premarkup premarriage premarxist prematch prematernity premature premaxillary premechanization premeeting premerger premilitary premisory premodern premonitory premonsoon premorbid premotor premyelinating prenewtonian prenex prenubile prenucleation preobese preocclusion preopening preoperation preparatory prepartum preperformance prepetition preplanetary preplayoff preponderant prepopulist prepossessing prepotent preppier preppiest prepractice prepregnancy prepremiere prepress preprimary prepuberty prepubescent prepublication prepurchase prequalify prequantum prerace preratification prerecession prerecessionary preregulation prerelease preremote prerenovation prereplication preretirement prerevolution prerevolutionary preride prerock preround presaturation prescient prescriptible presectarian presecurity presenescent presenile presentence presentencing presentient presentist preservice presex preshift preshock preshot preshown preshrunk preslavery presleyesque presmoking presnap prespill prespin prestimulus prestissimo prestorm prestrung presuburban presuicide presupernova presurge presurgery preswim pretassel pretax pretaxation preteenage pretelecast pretheater pretorian pretour pretournament pretraining pretransplantation pretransport pretravel prettier prettiest prettyish pretumor preunion preurban prevacation prevenient preventible prevote prewedding prewritten pricey pricier priciest pricklier prickliest prickly pricy pridoli priestlier priestliest priestly priggish prima primavera primetime primmer primmest princelier princeliest princessly princessy priscan prissier prissiest prissy pristine privater privatest prizewinning prizeworthy proabortion probationary proboscidate probosciform prochoice proclamatory procreant procrustean procumbent prodeath prodefendant prodemocracy prodrop producible profanest profinite profitmaking profitseeking profligatory proforma profound profuse progeroid prograde progredient prohibitory prolate prolix promarket prominent promising promissory promotility promptest promulgatory promyelinating prone pronunciatory proper properer properest propitiatory proplaintiff proplanetary proprietary proprietory proresearch proscience prosier prosiest prosuicide prosy protaspid protean protestant protistan protobacco protobinary protocollary protocuneiform protofascist protofeminist protominimalist protomodern protoneutron protoplanetary protractedly protractile protrade protrusible protrusile protuberant proud prouder proudest proustian proven provident provincewide proviolence provisory prowest prowhaling prudent prudish pruinose pruney prurient pryany pseudoagouti pseudobinary pseudoconcave pseudoconvex pseudohallucinatory pseudohypersensitivity pseudoliterary pseudopregnant pseudoprofound pseudoproper pseudorandom pseudoreversible pseudy psychobabbling psychomotor pterygiate pterygoid pterygopalatine ptolemaian ptolemean pubbier pubbiest pubbish pubby pubescent pucka puckeroo puckery puckish puddingy puddley puddly pudgier pudgiest pudgy pudibund puellile puerile puffier puffiest puffingly puffy puginesque puisne puissant pukey pukka pulicene pulicine pulmonary pulpier pulpiest pulpish pulpy pulsatile pulsatory pulverulently punchier punchiest punchy punctate pungence pungent punier puniest punkest punkier punkiest punkish punnier punniest punny puny pupillary puppyish purblind purdier purdiest purdy pureplay purer purest purificatory purkinjean purpler purplest purplish purply pursy purty purum pushdown pushier pushiest pushy pussier pussiest pustuliform putrefacient putrescent putrescible putrid puttier puttiest puzzly pynchonesque pyranoid pyrenean pyriform pyrrhonian pythagorean pythian pythonesque qid quackish quadcore quade quadratfrei quadrible quadricostate quadridentate quadrifid quadrifoil quadrifoliate quadriform quadrijugate quadrilobate quadripartite quadripennate quadrivariate quadrivoltine quadrupartite quaggier quaggiest quaggy quagmiry quaint quainter quaintest quaintish quakeproof quakerish quakerly quakey quakier quakiest quaky qualificatory qualmish quarrelsome quartersawn quartzier quartziest quartzose quartzy quasi quasiblack quasibound quasiconcave quasiconvex quasicrystalline quasidocumentary quasifree quasigovernment quasiparallel quasiperfect quasirandom quasisplit quasistationary quate quaternary quaternate quavery queachy queasier queasiest queasy queazy quechuan queenish queenlier queenliest queeny queerer queerest queerish quercine quethen quibbly quicker quickest quickfire quickfrozen quicksandy quicksilvery quiescent quietest quietish quilly quilty quinary quinian quinonoid quinquedentate quinquefid quinquefoliate quinquefoliolate quinquelobate quinquepartite quinquevalve quintenary quippiest quippy quirkier quirkiest quirky quivery quondam quoteworthy quotinoctian qwerty rabbity rabblerousing rabelaisian rabid raccoonish racemiform racemose racier raciest rackety racy radcliffean radcliffian radiationproof radicant radiculose radiodense radiofrequency radiolitid radiolucent radioopaque radiopaque radiopure radioresistant radiosensitizing radonproof raffish rafty raggedier raggediest raggedy raggier raggiest raggy ragtag ragtimey railside rainbowish rainbowy rainfast rainier rainiest rainstormy rainswept rainy raisiny rajasthani rakish rallentando ralline ramiform rammy ramose rampant ramshackle ranarian rancid randian randier randiest randomest randomish rangant rangebound rangefree rangier rangiest rangy raniform ranine ranivore ranker rankest ranty rapey raphanoid rapider rapidest rapscallionly rapt rareish rarer rarest raring rashest rashy raspberryish raspier raspiest rasputinesque raspy ratchety ratproof rattier rattiest rattish rattlier rattliest rattly ratty raunchier raunchiest raunchy ravening raw rawer rawest rayproof readdicting readerly readier readiest readworthy reaganesque realer realest realler realtime rearmost rearview reattribute reawoken rebegun reborn reborne recent recessionary recessionproof recherche rechosen recognizant recommendatory reconciliatory recondite reconstructible recriminatory recrudescent rectouterine recurrent redbrick redder reddest reddish reddy redivivus redmondian redneckish rednecky redone redrawn redressible reducible redundant redux reechy reedier reediest reedy reefy reeky reemergent referrible reflationary refluent refractile refrangible refringent refrozen refulgent regalian regardant regionwide regiven regnant regrown regulatory reheard rehidden reichenbachian reillustration reiterant relationshippy relevant reliant religiose relucent reluctant remaining remanent rembrandtesque reminiscent remiss remissible remittent remoter remotest renascent reniform renitent renunciatory reordrant repentant reporterly repressible reproducible reproductory repudiatory repugnant requisitionary resawn researchy resemblant resewn reshaken residuary resignedly resilient resiny resistible resoluble resolute resoluter resolutest resonant resown respiratory resplendent responsible restiff restitutory restrainedly restricken resupinate resurgent resworn retaken retaliatory rethrown reticent retiform retinogeniculate retorn retractile retrocedent retrofire retroflex retromingent retroserrate retrousse retuse revegetation revelationary revelatory reverberant reverberatory reverent reversible revertant revertible revisionary reworkability rewoven rewritten reynoldsian rhabdoid rhadamanthine rhean rhenian rheumaticky rheumatoid rheumy rhonchisonant rhubarby rhyacian riant ribbony rich richer richest richish ricketier ricketiest ricketty rickety ridden ridgy ridibund riemann riemannian rifer rifest riffier riffiest riffly riffy righter rightest righthand rightish rightwing rigid rilkean rimose rimy ringent ringleading ringside rioplatense riparian riper ripest ripply ripshit ripsnorting ripstop ripuarian risen risible riskfree riskier riskiest risktaking risky risque ritenuto ritzier ritziest ritzy riven riverain riverine roadgoing roadshown roadworn roadworthy robespierrean robust robuster robustest rocambolesque rockbound rockier rockiest rockingest rockish rockwellesque rocky rodentproof rodenty rogatory roguish roily rollaway rolldown rolltop romanesque romany romish rooky roomier roomiest roomwise roomy roopit roopy rootsy ropey ropier ropiest ropy rorty roscian roseate rosid rosier rosiest rosish rotatory rotiform rottener rottenest rotund rougher roughest roughish roughshod roundarm roundest roundish rousseauesque rovian rowdier rowdiest rowleian rubberier rubberiest rubberoid rubbery rubbishy rubblier rubbliest rubbly rubenesque rubescent rubicose rubicund rubidian rucervine ruddier ruddiest rude ruder rudest rudimentary rufescent ruffly ruggeder ruggedest rugose rulebound rulier ruliest ruly rumanian rumbly rummest rumsfeldian runcible runcinate runiform runnier runniest runny runty runyonesque rupestrian rurban rushy russificatory rustier rustiest rustly rusty ruthenian rutherfordian ruthian rutilant ruttiest ruttish rutty sabbatine sabelloid sabinian sabulose sacagawean saccate saccharine saccharoid sacciform sacculate sacrosanct sad sadder saddest saddish saddlesore sadducaean sadducean sadduceean sadean sadian saditty safeish safer safest saffrony safranophile sager sagest sagey saggier saggiest saggy sagier sagiest sagittate sagittiform sagy sahaguntine saharan sahelian sailworthy saintish saintlier saintliest saintly salady salafi salamandrian salamandriform salamandrine salamandroid salian salingerian saliniform salique salishan salitrose salivary salivatory sallower sallowest sallowish sallowy salmoniform salmony salopian saltatory saltfree saltier saltiest saltish saltproof salty salutary salvifying samarian samean samely samey sanatory sandblind sandier sandiest sandpaperish sandpapery sandwichy sane saner sanest sanguinary sanitary sanserif sapid sapient sappier sappiest sappy sarcomatoid sardanapalian sarkier sarkiest sarky sartin saskatchewanian saskatonian sassier sassiest sassy satem satiny satisfactory satrapian saturnalian saturnine sauciest saucy sausagey sausagy savantish savilian savoury savvier savviest sawdusty sawn saxicoline saxon saxophony scabbier scabbiest scabby scabrosity scalariform scalefree scalene scaleproof scalier scaliest scaly scampish scandent scandian scanian scanter scantest scantier scantiest scanty scarabaeoid scarcer scarcest scarecrowish scaredest scarier scariest scary scattershot scattery scattier scattiest scatty scaturient scelerate scelidate schizy schlockier schlockiest schlocky schloopy schlubbier schlubbiest schlubby schlumpier schlumpiest schlumpy schmaltzier schmaltziest schmaltzy schmalzier schmalziest schmalzy schmancy scholarly schoolbookish schoolboyish schoolgirlish schoolgirly schoolgoing schoolish schoolmarmish schoolteacherish schoolwide schtum schumpeterian schwarzeneggeresque scient scillonian scintillant scissile sciurine scleractinian scombroid scorchy scoriac scoriform scornworthy scorpaeniform scorpioid scorsesean scortatory scottish scoundrelly scouty scraggier scraggiest scraggly scraggy scrambly scrappier scrappiest scrappy scratchier scratchiest scratchproof scratchy scrawnier scrawniest scrawny screamier screamiest screamingest screamy screechier screechiest screechy screenbound screwier screwiest screwy scribblier scribbliest scribbly scrimy scrolly scrotiform scroungy scrubbier scrubbiest scrubby scruffier scruffiest scruffy scrummier scrummiest scrummy scrumtrelescent sculpturesque scummier scummiest scummy scumsucking scungier scungiest scungy scurfy scurvier scurviest scutate scutiform scuzzier scuzziest scuzzy sdrucciola seaborn seaborne seagirt seagoing seamanly seamier seamiest seamy seasick seasonlong seaswept seaweedy seaworthy sech seclusionary second secretory sectionwide securer securest securitarian sedater seddity sedecuple sedentary sedgier sedgiest sedgy sedimentary seducible seedeating seedier seediest seedy seemlier seemliest seen seethrough segmentary segmentwise segreant sejant sejunct selachian seld selecting selenatian selenian selenitian selfadjoint selfcongratulatory selfconsistent selfgravitating selfish selforganizing selfsame selfsome selfstanding seljukian semee semiabstract semiamusing semianimate semiarid semibold semibuoyant semiclad semicoherent semiconducting semiconjugate semicrystalline semidefinite semidilute semidirect semidiscrete semidivine semidry semifertile semifinite semiflexible semiforce semifrozen semigloss semihallucinatory semihidden semihollow semihuman semiinfinite semilegible semilegitimate semiliterate semilunate semiluxury semimajor semiminor seminude semipermanent semiplausible semiposh semiprivate semiquantum semirare semirecumbent semirevealing semirigid semischolarly semisecret semisimple semisoft semisolid semistupid semisweet semiterete semitransparent semivolatile semiweekly semiwild semperjuvenescent sempervirent semy senary senescent senile seniorest sensate sensible sensorimotor sensory separatory septate septembery septempartite septenary septenate sequoian serener serenest serer serest serfish seri serocompatible serodiscordant serrasalmine serrulate serverside servile sesotho sesquialterate sesquiplicate sessile setiform seussian sevenpenny seventeenish seventyish severe severer severest sewn sexagenerian sexier sexiest sexpartite sexy seychellean shabbier shabbiest shabby shacky shadier shadiest shadowier shadowiest shadowy shady shaggier shaggiest shaggy shaken shakespearian shakey shakier shakiest shaky shaley shallower shallowest shallowish shaly shamanesque shambling shambly shampooey shannonian shapelier shapeliest shapely shareowning sharky sharpest shatneresque shatnerian shatterproof shaven shearfree sheepier sheepiest sheepish sheerer sheerest sheisty sheldonian shellproof shelly shelvy shepherdly sherbety sherlockian shermanesque shetlander shewn shier shiest shife shiftier shiftiest shifty shimmery shingly shinier shiniest shinto shiny shipboard shipborne shipbound shipshape shipwide shirty shish shitey shitier shitiest shittest shittier shittiest shitty shiveringly shivery shlocky shlubby shmexy shodden shoddier shoddiest shoegazey shonkier shonkiest shonky shoogly shopkeeperly shoppier shoppiest shoppy shopworn shorebound shoreside shortcrust shortest shorthold shortish shortleaf shorttail shoutier shoutiest shouty showbizzy showerier showeriest showery showier showiest shown showstopping showy shrewd shrewder shrewdest shrewdish shrewish shrieky shriller shrillest shrimpier shrimpiest shrimpy shrinky shriven shrubbier shrubbiest shrubby shrunken shticky shtokavian shtoom shtum shuddery shuffly shure shyer shyest shyish shysterish sialyl sibylline sicker sickest sickish sicklier sickliest sickly siderian sidescrolling sidesplitting siftproof sightlier sightliest sightly sightseen sightworthy sigmate significant silicatian silician silken silkier silkiest silky sillier silliest siltier siltiest silty silurian silvan silverier silveriest silverish silvern silvery simpatico simpler simplest simpsonian simpy sin sin2 sincere sincerer sincerest sinewy singlehandedly singleplayer singsongy sinister sinisterwise sintery siouan siphonapteran sisyphean sisyphusean sitwellian sixpenny sixteenish sixteenpenny sixtiesish sixtyish sizey sizy skankier skankiest skanky skaterly skeely skeevier skeeviest skeevy skeezier skeeziest skeezy sketchier sketchiest sketchy skewampus skewbald skewiff skewwhiff skiddier skiddiest skiddy skidproof skiey skilfull skillo skimmy skimpier skimpiest skimpy skinnier skinniest skint skintight skippy skipworthy skittery skittish skronky skunky skyborne skyclad skyey skylit skyscraping skywards skyworthy slabbier slabbiest slabby slackerish slackerly slackest slaggiest slaggy slain slangier slangiest slangy slanty slaphappy slapsticky slatternly slaty slaveholding slavish sleazier sleaziest sleazy sleeker sleekest sleepaway sleepbound sleepier sleepiest sleetier sleetiest sleety slender slenderer slenderest sleuthy slickest sliddery slidey slier sliest sligh slighter slightest slightish slimier slimiest slimline slimmest slimy slingshotten slinkier slinkiest slipperier slipperiest slippery slippier slippiest slippy slipshod slithery slithy slitten slittier slittiest slitty sliven slobbery slobbier slobbiest slobbish slobby slopeside slopey sloppier sloppiest sloppy slopy sloshier sloshiest sloshy slouchier slouchiest slouchy sloughy slovakian slovenlier slovenliest slovenly slowest slowish sludgier sludgiest sludgy sluggardly sluggish sluggisher sluggishest slummier slummiest slummy slumpy slurpy slurrier slurriest slushier slushiest slushy slutsky sluttier sluttiest sluttish slutty slyer slyest smaller smallerscale smallest smallish smallscale smalltime smaragdine smarmier smarmiest smarmy smarter smartest smarting smashmouth smashproof smearier smeariest smeary smeggy smellier smelliest smelly smexier smexiest smexy smilier smiliest smilish smirkier smirkiest smirky smithian smithsonian smitten smoggier smoggiest smokefree smokeproof smokey smokier smokiest smoky smoochier smoochiest smoochy smooshy smoothest smoothish smudgier smudgiest smudgy smug smugger smuggest smurfier smurfiest smurfy smushy smuttier smuttiest smutty snacky snaggier snaggiest snaggy snailish snakebit snakebitten snakey snakier snakiest snaky snappier snappiest snappish snappy snapshooter snarkier snarkiest snarkish snarky snarlier snarliest snarly snatchier snatchiest snatchy snazzier snazziest snazzy sneakier sneakiest sneaky sneery sneezier sneeziest sneezy snellest snide snider snidest sniffier sniffiest sniffly sniffy sniggery snippier snippiest snippy snittier snittiest snitty snobbier snobbiest snobbish snobby snoof snoopier snoopiest snoopy snootier snootiest snooty snoozier snooziest snoozy snottier snottiest snotty snoutier snoutiest snouty snowblind snowbound snowflakey snowflaky snowier snowiest snowstormy snowsure snowswept snowy snufflier snuffliest snuffly snuffy snugger snuggest snugglier snuggliest soapier soapiest soapy soaraway sobby soberer soberest sociorealist sockdologizing socko sodian soft softbound softer softest softish softnose softpaste softshell softspoken softwater soggier soggiest soggy soigne soignee soilborne solartype soldierly solemn solidary solider solidest solivagant solly solovian soluble solzhenitsynian somalian somatoform somatomotor somatosensory somber somberer somberest sombre sombrest somethingth somnambulant somnambulatory somnolescent sonant songworthy songwriterly songy soople sootier sootiest sooty sophoclean soppier soppiest soppy sorbian sordid sorer sorest sorrier sorriest sottish soubrettish soulagean soulish soundest soupier soupiest soupy sourer sourest sourish southeastern southeasternmost southern southernmost southeyan southmost southwestern southwesternmost sown sowwy soz spaceborne spacesick spaceworthy spacey spacier spaciest spacy spammier spammiest spammy spanglier spangliest spangly spanwise sparer sparest sparklier sparkliest sparkly sparry sparse sparser sparsest spartan spathulate spazzy specieswide speciose speckly speculatory speedier speediest speedy spellbinding spellbound spendier spendiest spendy spermatozoan spesh speshul sphexish sphingian spicier spiciest spicy spidery spielbergian spiffier spiffiest spikey spikier spikiest spiky spillproof spilly spinachy spindlier spindliest spindly spinechilling spinescent spinier spiniest spinnier spinniest spinoid spinose spinozan spinsterish spinsterly spintrian spiny spiry spitten spitty spivakian spivvish spivvy splashier splashiest splashproof splashy spleeny splendid splendiloquent splintery splitproof splodgier splodgiest splodgy splotchier splotchiest splotchy spludgy spluttery spockian spoken spongeworthy spongey spongier spongiest spongiform spongy sponsible spoofier spoofiest spoofy spookier spookiest spookish spooky spooney spoonier spooniest sporebearing sportier sportiest sportsmanly sporty spottier spottiest sprack sprauncy sprawly sprayproof sprier spriest sprightlier sprightliest springier springiest springy sprinkly sproingy sprote sprouty sprucer sprucest spry spumy spunkier spunkiest spunky spunlaid sputtery spyproof squabbly squalid squaliform squallier squalliest squallish squally squamiform squamulose squarefree squarer squarest squarish squarrose squashier squashiest squashy squattier squattiest squatty squawkier squawkiest squawky squeakier squeakiest squeaky squeamish squeezy squelchier squelchiest squelchy squewiff squickier squickiest squicky squidgier squidgiest squidgy squiffier squiffiest squiffy squigglier squiggliest squintier squintiest squinty squirmier squirmiest squirmish squirmy squirrelish squirrellier squirrelliest squirrelly squirty squishier squishiest squishy squooshier squooshiest squooshy sravya stabby stabler stablest staccatissimo stagebound stagestruck stagewide stagey stagflationary stagier stagiest stagnant stagy staid staider staidest staler stalest stalinian stalkerish stalkier stalkiest stalky staminate standalone standoffish stannary stannian stannoan starchier starchiest starchy starey starfaring starforming stargazy starker starkers starkest starkish starlit starrier starriest starry starstruck starting stary statant statelier stateliest statesmanly statewide statherian staticky staticproof stationary statuesque statusy statutory stauncher staunchest steadfast steadfaster steadfastest steadier steadiest stealthier stealthiest stealthy steamier steamiest steamy steatopygian steelier steeliest steely steeper steepest steepish steeziest steezy steinbeckian stellate stelliform stemmy stenchy stendhalian stennian stenohaline stentorian stepford stereoblind stereoblock stereociliary stereocontrolling stereofluorescent sterile sternean sterner sternest sternmost sternocleid sternomastoid stewy stibatian stibian stiboan stickery stickier stickiest stickily stickproof stiddiest stiffer stiffest stiffish stillborn stiller stillest stilliform stilty stimulatory stingier stingiest stingy stinkier stinkiest stinko stinky stipellate stipendary stipendiary stipitate stockier stockiest stocky stodgier stodgiest stodgy stokavian stolen stolid stolider stolidest stompier stompiest stompy stonebuilt stoneground stonehard stonier stoniest stonish stony stoopid stoopider stoopidest stoopy stoppardian stopping storebought storky stormbound stormier stormiest stormproof stormwater stormwaters stormy storybookish stoss stouter stoutest stoutish stoveside stragglier straggliest straggly straightest straightish strange strangelovian strangest strappier strappiest strappy straticulate stratiform strawberryish strawen strawn strawne strawy streakier streakiest streaky streamside streamwise streamy streetlit streetside streetsmart streetwise streety strengthier strengthiest strengthy strepent stressfree stressy stretchier stretchiest stretchy strewn stricken strickenthrough strict stricter strictest stridden strident strigine strigose strikebound strindbergian stringent stringier stringiest stringy stripey stripier stripiest stripy striven strombolian stronger strongest strongish strongside strontian stroppier stroppiest stroppy strowen strummy struthian stubbier stubbiest stubblier stubbliest stubbly stubborn stubborner stubbornest studenty studlier studliest studly stuffier stuffiest stuffy stultifying stumbly stumpier stumpiest stumpy stunk stupent stupider stupidest stupidish sturdier sturdiest stush stuttery stygian styliform stylish styloid suaver suavest suaviloquent subacid subacute subadamantine subadnate subaffluent subalpine subangstrom subarachnoid subarcmin subarcminute subarcsecond subaverage subcabinet subcampanulate subcentimeter subchelate subclavian subconducting subconfluent subdecurrent subdetection subdiffraction subellipsoid subfemtosecond subfertile subfreezing subfulgent subgap subhertz subhorizon subhumid subinhibitory subinvestment subjacent subkiloton sublacustrine sublageniform subleading sublight sublimer sublimest sublunary submicrometer submicrometre submicron submillimeter submillimiter submillisecond subminiature subminimum submontane subnanometer subnanoscale subnanosecond subnivean suboptimum subovoid subparallel subparsec subpercolating subpicosecond subplanetary subpremium subpruinose subradiant subrhomboid subsea subsequent subservient subshock subsinuate subsistent subsolidus substandard substitutionary subsultory subterahertz subterranean subterrene subthreshold subtle subtlest subtopian subulate subumbonate suburban suburbicarian subviscid subweekly subzero succedent succinct suckier suckiest sucky sudanian suddenwoven sudsier sudsiest sudsy suetty suety sufficient suffolky suffrutescent suffruticose sugarfree sugarier sugariest sugary suggestible sulcate sulfa sulfatian sulfitian sulfosalt sulfurian sulfury sulkier sulkiest sullen sullener sullenest sulpha sulphatian sulphitian sulphosalt sulphurian sulphury sultrier sultriest sultry summerish summerlong summerly summery sumptuary sumpy sunbeamy sunblush sunburnt sundanese sundayish sunfast sung sungrazing sunk sunken sunlit sunni sunnier sunniest sunny sunshiney sunshiny sunshot sunstricken sunstruck sunswept superabsorbent superabundant superachieving superaffluent superalert superalkaline superalmighty superarachnoid superb superbad superber superbest superbold superbright supercheap supercoherent supercold supercompact superconducting superconfident superconsumerist superconvenient supercosmically supercozy supercute superdeluxe superdense superduper superefficient supereminent supererogatory superexcruciating superextensile superextreme superfalse superfeminine superfilter superfine superfit supergauge supergeeky supergood supergroovy superhard superhealthy superheterodyne superhigh superhip superhorizon superhot superimmense superimportant superincumbent superintelligent superinteresting superjacent superlarge superlean superlight superlightweight superliterate superlong superlow superluminescent superlunary supermacho supermasculine supermassively supermaximum supermicron supermodelesque supermodern supermorbid supermundane supernice superoinferior superordinary superoscillatory superoverwhelming superparallel superpolite superprecise superquick superquiet superradiant superresistant superrotating supersafe supersalty supersecret supersecure supersenior supersensible supersensory supersexy supersharp supershort supersimple superskinny supersleek superslick superslim supersmall supersmart supersoft supersport superstimulating superstrict superstrong supersudden supersweet supertechnicolor superterranean superthick superthin superthreshold supertight supertiny supertough supertrue superugly supervenient supervirile supervisory supervoting superwash superwavelength superweak superwealthy superwelterweight superwhite supplementary suppler supplest supplicatory supporting suppressible supraglenoid suprahuman supramillion supramundane suprasensible supremer supremest surculose sure surer surest surferish surfier surfiest surfside surfy surgent surly sussultatory susurrant svalbardian svelt svelte svelter sveltest svo swabian swaggery swampier swampiest swampy swanker swankest swankier swankiest swanky swarthier swarthiest swarthy swashbuckling swearier sweariest sweary sweatier sweatiest sweatproof sweaty swedenborgian swedish sweer sweeter sweetest sweetish sweetsmelling swelf swellegant sweller swellest sweptback swifter swiftest swiftian swindonian swingeing swingy swinish swirlier swirliest swirly swisher swishest swishier swishiest swishy swivelly swole swollen swonken swoonsome swoony swoopy swordbearing swordproof sworn swottier swottiest swotty swum swunk sybilline sydneyan symbionese symbolist sympathoadrenomedullary sympathoexcitatory syn syncranterian syntectoid synthy syrophoenician syrupier syrupiest syrupy systemwide tabescent tabid tableside tabloidish tabloidy tacit taciturn tackier tackiest tacky tactile tadpolish tagliacotian tagliacozzian tailormade taken taliacotian talibanesque taligrade talkier talkiest talky tall taller tallest talleyrandian tallish tallowy tamest tamil tamperproof tan tan2 tandoori tangier tangiest tanglesome tangly tangy tannest tannish tantalian tantalising tantamount tarantinoesque tardier tardiest tarriest tartare tartarean tarter tartest tartier tartiest tartish tarty tastemaking tastier tastiest tasty tattier tattiest taut tauter tautest tawdrier tawdriest tawdry tawnier tawniest taxfree taxpaying teacherly teamwide tearier teariest tearjerking teary teasy techier techiest technicolour techniquewise techy teenagery teenier teeniest teensier teensiest teensy teeny teetotaling teetotalling teflon tehrani teleparallel telepresent teletypewritten telluratian telluritian temperate tempory tenderest tenebrose tenible tennesseean tennysonian tenpenny tenser tensest tensile tenuis tepid terascale terbian terebinthinate terefah terephah terete termly ternate terrene terrible terrorstricken terrorstruck terse terser tersest testamentary testate testiculate testier testiest testudinate testy tetchier tetchiest tetchy tethyan tetracoordinate tetracyclo tetradactyl tetradentate tetraglot tetrakis tetrapartite teugh textbookish textbooky thackerayan thalian thallian thalline thalloan thalloid thamesian thameside thanatoid thankfuller thankfullest thatcheresque theaterwide theatrewide thecate theftproof themistian theopneust therizinosauroid thermocapillary thermohaline thermolabile thermoluminescent thermoparticulate thermoregulatory thermoremanent thermoreversible thermosensory thermosetting thermotolerant thetidian thewy thickish thickset thievish thingish thingly thinky thinnest thinnish third thirstier thirstiest thirsty thirteenish thirteenpenny thirtyish thirtypenny thisclose thistly thongy thoreauvian thorian thornier thorniest thornproof thorny thoro thoroughgoing thoughten thracian thrashier thrashiest thrashy threadbare threadier threadiest threadsafe thready threepenny thriftier thriftiest thrifty thrillseeking thrilly thriven throatier throatiest throaty throwaway thrown thrung thuggish thuggy thulean thulian thumpy thunderstormy thunderstricken thunderstruck thundery thymey thymy tiberian tibiiform tickborne ticklish tickly tiddly tideover tidgy tidiest tiebreaking tigerish tighter tightest tightfitting tightish tightknit tigrine tigrish tilty timebound timeconsuming timelier timeliest timely timesaving timeworn timid timider timidest timonean timorese tindery tingible tinglier tingliest tingly tinier tiniest tinkly tinnient tinnier tinniest tinny tinpot tinselly tintinnabulatory tiny tippy tipsier tipsiest tipsy tireder tiredest tiresome tironian tissuey titanoan titchy titianesque titsup titubant tlingit toadyish toastier toastiest toasty tobaccoish tobroken tocquevillian toey toilsome toilworn tolerant tolkienesque tolkienian tollfree tolstoyan tomatoey tomboyish tomentose tonier toniest tony toothachey toothachy toothcombing toothier toothiest toothpasty toothsome toothy topazine topdown topflight topfree topfull topheavy toploading toplofty topmost topnotch toppo toppy topspun topsy topwater torchier torchiest torchy torfer torfere torn torpid torquemadan torricellian torrid tortile totipotent tottery touchier touchiest touchy tougher toughest toughish toughly touristy towardliest towardly towery townish townwide toxophil toxophile toysome tracible trackside trad traditionbound trafe trafficky traif trailblazing trailside trainsick traitorly tramontane trampier trampiest trampish trampy trancey tranquil tranquiler tranquilest trans transalpine transborder transboundary transcardiac transcatheter transdanubian transdisciplinary transearth transeunt transfermium transfinite transfluent transfusible transiliac transilient transitory translationary translatory translawrencium translesion translocus translog translucent translunary transmale transmarine transmasculine transmigratory transmissible transmittant transmontane transmundane transmutant transocean transoid transondent transpadane transparent transpartisan transplanckian transplanetary transplutonium transpontine transregionate transrhenane transtiberine transtigritane transuranium transverse transworld trapeziform trappy trashier trashiest trashy trayf treaclier treacliest treacly treblier trebliest treebound treif treife trembly trenchant trenchardian trendier trendiest trendsetting trepid trepidatory treyf treyfe triacid tribalesque triblock tribunician tricholomatoid trichrome trickier trickiest trickish trickledown tricksier tricksiest tricksy tricky tricomponent tricoordinate tricorner tricounty tricyclo tridactyl tridentate trifid trifling trifold trifoliate triform triggest trilaminate trilly trilobate trimmest trinitarian trinkety trinkly trioculate tripartisan tripartite triphase triploid trippier trippiest trippy triquarter triservice triste triter tritest tritonian triumphant triune triweekly trochilidine trodden trollish trollopy troo troppo troublefree troublesome trouty troy truckish truer truest truffley truffly trumpian trustier trustiest trustworthy truthier truthiest truthsome truthy tsarian tsarish tubbier tubbiest tuberculate tuberculoid tudorbethan tulgey tumbledown tumescent tumid tumourigenicity tungstatian tungstenian tunnelly tupian tuppenny turbid turdiform turfy turgescent turgid turinese turkish turneresque turnippy turnipy turpid turpsy turquoisey turquoisy turrible turvy tuscan tussocky twainesque twainian twangy twattier twattiest twatty twee tweedier tweediest tweedy tweenage tweezer twelvepenny twentyish twentypenny twerpish twerpy twiddly twiform twiggier twiggiest twiggy twilightish twilighty twilitten twinborn twinight twinklier twinkliest twinkly twirlier twirliest twirly twistfree twistier twistiest twitchier twitchiest twitchy twittery twopartite twopenny typesafe typewritten tyrolese tzarian uberwealthy ubiquarian uffish uglier ugliest ugsome ulterior ultrablond ultrabright ultrabroad ultracharming ultracheap ultraclean ultraclever ultracold ultracompact ultracompetent ultracomplex ultracontemporary ultracool ultracrisp ultradeep ultradelicate ultradense ultradian ultradiscreet ultradiscrete ultradistant ultradistinct ultradry ultraefficient ultraelegant ultrafaint ultrafast ultrafeminine ultrafine ultrafunky ultraglossy ultragreen ultrahard ultraheavy ultrahigh ultrahip ultrahot ultrahuman ultraintense ultralean ultraleft ultralightweight ultralong ultralow ultraluxury ultramacho ultramasculine ultraminimalist ultramobile ultramodern ultramoist ultramundane ultranarrow ultraorthodox ultrapotent ultraprecise ultrapure ultraquantum ultraquick ultraquiet ultrarapid ultrarare ultrarich ultraright ultraripe ultrasafe ultrasecret ultrasecure ultraselect ultrasharp ultraslick ultraslim ultraslow ultrasmall ultrasmart ultrasmooth ultrasnug ultrasoft ultrastrong ultraswift ultrathick ultrathin ultratight ultratough ultravast ultrawarm ultraweak ultrawealthy ultrawide ultrawideband umbilicate umbonate umbrielian umpteen umptieth umpty umteenth unabating unabrupt unabsorbing unaccessible unaccommodating unaching unaffecting unaffectionate unafraid unagile unaging unairworthy unalluring unaltering unamazing unamerican unamusing unangry unanimitarian unapparent unappealing unappetising unappetizing unapproving unapt unarousing unasleep unaspiring unassuming unattaining unaustralian unavailing unawakening unawaking unaware unawoken unbaroque unbeaten unbeautifulness unbecoming unbefitting unbegun unbeholden unbeknown unbelieving unbenign unbereft unbidden unbitchy unbitten unblameworthy unblanching unblinking unblown unblue unblushing unbookish unboring unborn unbought unbounden unboxy unbright unbritish unbroadcast unbroken unbrotherly unbudging unbuilt unburnt unbustling unbusy uncalculating uncalm uncandid uncannier uncanniest uncanny uncapitulating uncaring uncast uncatchy uncate uncaught uncavalier unceasing uncertain unchallenging unchancy unchanging uncharming unchaste unchildish unchilly unchosen unchristian unchurchly unchurlish uncinate uncincate uncircumspect uncivil unclad unclean uncleaner uncleanest uncleanlier uncleanliest unclearer unclearest unclever uncloudy uncloven unco uncollapsible uncollectible uncomelier uncomeliest uncomfy uncommon uncommoner uncommonest uncompassionate uncompelling uncomplaining uncomplaisant uncomplimentary uncomprehending uncomprehensible uncompressible uncompromising uncomradely uncondescending unconfident unconsenting unconsoling unconstraining unconsuming unconversant unconvincing uncool uncoordinate uncoquettish uncorrect uncorrupting uncosy uncourtly uncousinly uncouth uncouther uncouthest uncowardly uncozy uncrafty uncreditworthy uncruel uncrying uncurly uncurrent uncustomary uncut uncute undancerly undaring undaunting undazzling undealt undecadent undecaying undeducible undefiant undegenerate undemanding underabundant underate undercabinet underconfident underdense underdone underdrawn undereaten undereye underfloor undergoing undergone undergrown underheard underhill underhood underhung underknown underlain underlit underlying undermost underpaid underproof underripe undersea underseen undersize underslung undersnow understair understrength undersung undertaken underthrown underway underwhelming underwound underwritten undeserving undesigning undesponding undeviating undifferentiating undigestible undiligent undirect undiscerning undisclosing undiscriminating undistinct undistraught undisturbing undivine undivisible undoctorly undoctrinaire undone undoubting undrawn undreamt undriven undrunk undrunken undue undug undulant undulatory undying uneager unearnt unearthly uneasier uneasiest uneasy uneaten uneath uneating unebbing unechoing unedifying unelaborate unelegant uneloquent unembarrassing unempowering unenchanting unencouraging unendearing unending unenforcible unengaging unenlightening unenquiring unenriching unenterprising unentertaining unenthralling unenticing unerring unerudite uneven unevener unevenest unexact unexacting unexciting unexistent unexisting unexplanatory unexplicit unextendible unextraordinary unfading unfailing unfair unfairer unfairest unfallen unfalling unfaltering unfancy unfatherly unfattening unfeasible unfecund unfeeling unfelt unfeminine unfeminist unfertile unfervent unfeverish unfinicky unfishy unfitting unflabby unflagging unflamboyant unflashy unflattering unflickering unflinching unflowering unflowery unfluctuating unfluent unfond unforbidden unforeseen unforetold unforgetting unforgiving unforgotten unforsaken unforthcoming unfought unfound unfragrant unfraught unfree unfresh unfriendlier unfriendliest unfriendly unfrightening unfrilly unfrozen unfruiting unfrumpy unfulfilling unfun unfunky unfunnier unfunniest unfunny unfussier unfussiest unfussy unfuzzy ungainlier ungainliest ungainly ungainsaid ungallant ungazing ungeeky ungenteel ungentle ungentlemanly ungerminating ungimmicky ungirlish ungiven ungiving unglitzy unglossy ungodlier ungodliest ungodly ungood ungratifying ungreat ungreen ungrieving ungrudging unguiculate unguligrade unhale unhandsome unhandsomer unhandsomest unhandy unhappier unhappiest unhappy unhardy unhasty unhealthier unhealthiest unhealthy unheard unhearing unheavenly unheeding unheimlich unheld unheppen unhesitant unhesitating unhewn unhinderedly unhip unhirsute unhit unholier unholiest unholy unhomely unhot unhousebroken unhuman unhumanitarian unhung unhungover unhungry unhurt uniat uniate unicase unicast unicolor unificatory uniflow unifoliate uniformer uniformest unijugate unilateralist unilluminating unimportant unimposing unimpossible unimpressible uninformedly uningratiating uninquiring uninsistent uninspiring unintelligent unintelligible uninteresting uninterruptible unintimidating unintriguing uninucleate uninviting uninvolving unipartite unipennate unipotent unique unisectarian unisex unisulcate unitarist univallate univariant universitywide univoltine unixy unjewish unjolly unjudging unjuicy unjust unkeen unkempt unkept unkind unkinder unkindest unkindlier unkindliest unkingly unkinky unknightly unknowing unkosher unlachrymose unladen unlaughing unleafy unlet unlevel unlikelier unlikeliest unlistening unlit unliterary unliving unlonely unlovelier unloveliest unlovely unloving unluckier unluckiest unlucky unlying unmaidenly unmanifest unmanlier unmanliest unmasculine unmeaning unmeant unmelancholy unmenacing unmeriting unmerry unmessy unmet unmighty unmilitary unmisleading unmistaken unmodern unmodernist unmotherly unmotivating unmourning unmoving unmown unmurmuring unnecessary unneighborly unneighbourly unnessary unnewsworthy unnice unnoble unobjecting unobliging unobservant unobtuse unoffending unorderly unordinary unorthodox unoverridden unpaid unparanoid unparliamentary unpassionate unpatronising unpatronizing unperceiving unperfect unpicturesque unpitying unplausible unpleasant unpleasing unpliant unpolite unpossible unpostmodern unpraying unprepossessing unpresuming unpretending unpretty unpriestly unprincely unpristine unproducible unprojecting unpromising unproofread unproper unproportionate unproven unpure unquailing unquavering unqueenly unquestioning unquiet unquirky unquivering unradiant unrainy unrandom unread unreadier unreadiest unready unreasoning unreflecting unreflectively unrefreshing unregarding unregenerate unrelaxing unrelenting unreluctant unremembering unremittant unremitting unrepaid unrepentant unrepenting unreproducible unrepublican unreset unresistant unresisting unresonant unresting unreticent unrevealing unreverent unrevolutionary unrewarding unrewound unridden unripe unriper unripest unriven unroadworthy unrude unrulier unruliest unruly unrun unsafe unsafer unsafest unsaintly unsalty unsanguine unsanitary unsappy unsatisfactory unsatisfying unsavory unsavoury unsavvy unscary unscheming unscholarly unseaworthy unsecret unsectarian unsecure unseeing unseemlier unseemliest unseemly unseen unselfish unsensationalist unsensing unsent unserene unservile unsewn unsexier unsexiest unsexy unshaken unshakespearean unshapely unshapen unsharp unshaven unshining unshiny unshod unshone unshorn unshot unshown unshowy unshrinking unshriven unshrunk unshrunken unsighing unsightlier unsightliest unsightly unsilly unsisterly unslain unsleek unsleeping unsleepingly unsleepy unslick unslumbering unsmiling unsmitten unsmooth unsmug unsneezing unsold unsoldierly unsoppy unsordid unsought unsound unsounder unsoundest unsown unspaceworthy unsparing unspent unspilt unsplendid unsplit unspoilt unspoken unsporting unsportsmanly unsprightly unspun unsqueaking unsqueaky unsqueamish unstabler unstablest unstagey unstagy unstaid unstatesmanly unsteadfast unsteadier unsteadiest unsterile unstewardly unstill unstimulating unstinting unstirring unstodgy unstolen unstrange unstraying unstreetwise unstrewn unstricken unstrong unstruck unstuffy unstung unstylish unsuave unsubtle unsudden unsugary unsullying unsummery unsung unsunny unsupporting unsuppressible unsure unsurer unsurest unsurprising unsurrendering unsusceptible unsuspecting unsvelte unsweet unswept unswerving unswollen unsworn unsympathizing untaken untasty untaught untaxing untenably untender untenty unthorough unthreatening unthrifty untidier untidiest untidy untimelier untimeliest untimely untiring untold untomboyish untoothsome untorn untouristy untoward untranquil untrembling untrendy untrod untrodden untroublesome untroubling untrue untruer untruest untrusting untrustworthy ununiform ununique unvacillating unvain unvarying unvictorian unvisionary unvivid unwaking unware unwarier unwariest unwarping unwary unwavering unwealthy unweary unwearying unweeping unweird unwelcome unwelcoming unwell unwept unwhole unwholesome unwieldier unwieldiest unwieldy unwild unwilling unwincing unwinesque unwinking unwise unwiser unwisest unwithering unwithstood unwitting unwitty unwizardly unwoken unwomanly unwon unworldly unworn unworrying unworthier unworthiest unworthwhile unworthy unwoven unwritten unwrought unwrung unyielding unyoung upcoming updrawn upfield upflung upgiven upgrown uphand upholdatory uplandish uplevel uplifting upmost uppish uppitier uppitiest uppity upsidedown upstair upswept upswollen upthrown uptight uptonian uptorn upwinding uranoan uranylian urban urbane urbaner urbanest urceolate urdu urgent urinant urinary urinatory urinose ursiform ursine userfriendly usurpatory utahn uterine utriculate utterest vacant vacillatory vadose vagile vaginate vaginatoid vague vagueish vaguer vaguest vain vainer vainest vairy valiant valid valvate vampier vampiest vampiresque vampirish vampish vampy vanadatian vanadian vanadoan vanadylian vaniloquent vapid vapider vapidest vaporish vapory vapourish vapoury varangian varicose variform varimax varying vascon vasoconstricting vasodilatory vasomotor vaster vastest vasty vatican vaticinatory vatinian vaultworthy vealy vectisian vegete vehement veiny velvetier velvetiest velvety venerian venitian ventilatory ventricose ventripotent ventrolaterally venturesome verbose verboten verdant verecund verier veriest verklemmt verklempt verlainesque vermian vermiform veronese verruciform verrucose verruculose versatile versicolour verticillate vespertine vespine vestian vestimentary vestpocket vetoproof vibrant vibratory vibrioid vibrotactile vicariant viceregally vicissitudinary victimy viewy vigenary vigilant vigilantist vile viler vilest villagey villainously villiform villose vilnian vincible vindicatory vinegarish vinegary vinier viniest vintagey viny violaceus violeter violetest violetish viperish virescent virgilian virginian viridescent virile virilescent virussy viscerosensory viscid visible visuomotor vitelline vitrescent vittate vixenish vixenly vociferant voegelinian voetstoots vogueing voguish volage volant volatile voltairean voluble volucrine voluntariest volvate vomity vonnegutian voodooish vorticose vowelly vuggy vughy vulgarer vulgarest vulpine vulturine vulviform wacker wackest wackier wackiest wacky wafflier waffliest waffly wafty waggier waggiest waggily waggish waggly waggy waifish waistlong waitressy walnutty walrasian wambly wan wanchancy wanderlusty wankerish wankier wankiest wankle wanky wanner wannest wanthriven wapanese warbly warholesque warholian warier wariest warmest warmish warring wartier wartiest wartorn warty warworn wary washier washiest washy waspish waspy waterborne waterier wateriest waterish watertight watery watry waugh waughesque waughian wavery wavier waviest wavy waxen waxier waxiest waxy wayward waywise wayworn weak weaker weakest weakish weaklier weakliest weaksauce weakside wealden wealthier wealthiest wearier weariest wearisome weaselier weaseliest weaselly weasely weatherbeaten weatherly weathertight webbier webbiest webby websafe weddingy wedgy weedgrown weedier weediest weedy weeklong weekold weensy weepier weepiest weepy weer weest wegenerian weightier weightiest weighty weirder weirdest weirdsome weirdy wellborn wellesian wellknown wellsian wenlock werewolfish westcottian westernmost westmost westy wetproof wettest wettish whackier whackiest whacky whartonian whatever whatsoever wheatier wheatiest wheaty wheelback wheely wheezier wheeziest wheezy wheyey wheyish whichever whiffier whiffiest whiffy whiggish whiney whingy whinier whiniest whiny whippier whippiest whippy whirlier whirliest whirly whiskery whispery whistly whitebread whitelip whiter whitest whitish whizzier whizziest whizzy wholescale wholesome wholewheat whoreish whorish wibbly wickeder wickedest widdler widdlest wideband wideish wider widerscale widerspread widescale widespread widest widish wieldier wieldiest wieldy wifelier wifeliest wifely wifty wiggier wigglier wiggliest wiggly wiggy wildean wildest wildish wilhelmine wilier wiliest willowier willowiest willowy wily wimpier wimpiest wimpish wimpy windbitten windblown windborne windbound windbreaking windfallen windier windiest windswept windthrown windtight winey winier winiest winningest winsome winterier winteriest winterish winterlong winterly wintery wintrier wintriest wintry winy wiredrawn wirier wiriest wiry wisconsinite wisecracky wiselier wiseliest wiser wisest wispier wispiest wispy witchier witchiest witchy withdrawn withholden withier withiest withspoken wittier wittiest wittle witty wizardly woaden wobblier wobbliest wodehousean wodehousian woebegone woggish woken wolffian wolfish wolframatian wolframian womanish womanlier womanliest womanly wonderfool wonderfulest wonderfullest wonderstruck wonkier wonkiest wonkish wonky wontedly woodburning wooden woodest woodfree woodier woodiest woodish woodsier woodsiest woodsy wooley woolfian woolier wooliest woollen woollier woolliest woolly woozier wooziest woozy wordier wordiest wordish wordy workaday workfree working workly workshy worksome worky worldlier worldliest worldlywise worldshaking wormier wormiest wormish wormy worn worrisome worser worsest worstest worth worthen worthier worthiest worthwhile wrathier wrathiest wrathy wretcheder wretchedest wrier wriest wrigglier wriggliest wriggly wrinklier wrinkliest wristy writerly writhen writhy writing written wroclavian wroth wryer wryest wud wussier wussiest wycliffite xanthochroid xenophanean xenophontean xerarch xerxean ximenean xiphoid xiphoidian xlnt xxxx xylary xylocopine xyloid yachtboard yachtier yachtiest yackety yago yaller yapese yappier yappiest yappy yardlong yare yarer yarest yarny yarrish yatvingian yawnier yawniest yawny yclept yearbookish yearslong yeastier yeastiest yeasty yeatsian yechier yechy yella yellower yellowest yellowier yellowiest yellowish yellowy yelpier yelpiest yelpy yeshivish yeuky yiffest yiffier yiffiest yiffy yobbish yoghurty yogurty yolky yoong yotvingian younger youngest youngish ypresian ypsiliform ypsiloid ytterbian yttrian yuckier yuckiest yucky yukkier yukkiest yukky yummier yummiest yummo yummy zaftig zairese zamenhofian zanier zaniest zany zappaesque zappier zappiest zappy zarking zazzy zeitgeisty zeldaesque zennish zeolitiform zephyry zeroary zeroth zestier zestiest zesty zhlubby ziggety ziggy zigzaggy zincian zincky zincoid zincy zingier zingiest zingy zinky zippier zippiest zippo zippy ziptop zirconian zittier zittiest zitty zizekian zoanthoid zoftig zolaesque zonary zonate zoomier zoomiest zoomy zoosanitary zooty zooxanthellate zoquean zorkian zygobranchiate zygoid zygose 25 C eight five four i ii iii iv ix nine one seven six ten three two v vi vii viii x xiii xix xx xxi zero 2 NGP barring failing 1 NPRV post 6 NPR across aside behind beyond but contra 7 NPV bar come cum par save sub till 9 NP ala bout despite longa midst modulo mong pro upside 22 NRV alias amen bang bit broadside dab ditto flop fuck hen nope pitapat plonk sidearm slap smack spang stag stop supply yes yet 85 NR abroad alot ana argal atm aye beauty byembye cuz deiseal elsewhere felly foretime forever forth friday heor hereafter horseback hotfoot innard ipof jist kerchunk kerslap kerslop kerwallop kinda leafmeal legato longhand manana maybe meantime meanwhile midnightmare midswing midthought midway monday nation needer nowhere nowt obiter outdoors overtime owt peradventure pianissimo pizzicato plenny plenty presto saturday scienter sho sidesaddle sorta sostenuto straightway sunday tanto thar there thursday today tomorrow tonight tricorne tuesday tutti way wednesday whereabouts wherefore yah yay yea yep yesterday yestertide yestertime yesterweek yup 5477 NV aah abandon abate abend abode abort abscess absciss abseil abuse accent access accession acclaim accolade accord accost account ache acrospire act action acupuncture add addend addict address adduct adenylate adlib admin advantage adventure advert advocate adze affect affection affiliate affix affray affright affront age aggress ague ahh aid ail aim air airbrush airdrop airfreight airlift alarm alibi aliment allomother alloy allure ally amaze amble ambuscade ambush amends ammoniate amnesty amount amp anagram anchor angel anger angle angst anguish ankle annex annexe annoy answer ante anticross antidote apparel appeal append applicate applique apprentice approach aquacise aqualung aquaplane aquatint arbiter arbitrage archetype architect archive armor armour array arrest arrow arse article arylate ash ask asphalt assart assassin assault assay assegai assent assert assfuck assign assist asterisk atrophy attack attaint attempt attire attitude attribute auction auctioneer audiotape audit audition auger augment augur author autocancel autoclave autodestruct autofocus autograft automobile autopilot autopsy autosave avail avalanche avenge aver award awe axe baa babbitt babble bach backbite backburn backchannel backchat backcross backdoor backfill backfire backflip backflush backgammon background backhaul backheel backhoe backlash backlight backlist backlog backpack backscatter backsheesh backshift backsight backslash backspace backspin backstitch backstop backstroke backtalk backtrace backtrack backwater backwind badge badger baff baffle baffs bag bagpipe bail bait bake bakeout baksheesh balance bale balk ball balladeer ballast balloon ballot ballyhoo bam ban band bandage bandish bandsaw bane bangtail banhammer banjax banjo bank bankroll banquet banter barb barback barbecue barber bard barf bargain barge bark barney barrack barrage barrel barricade barter baseline bash basket bassoon bastinado bat bate bath bathe batik baton batten batter baulk bayonet beach beacon bead beagle beak beal beam bean beard bearhug beast beatbox bebop bed bedizen bee beeline beep beeswax beetle befall beg begeck beggar begin begunk belay belch bell bellow belly bellyache belt bench benchmark bend benefice benefit berm berry berth bespeak bet bevel bever bevvy bias bibblebabble bicycle bid biff bigfoot bike bilge bill billet billow bimble bin bind binge biograph biography biopsy birch bird birdie birdlime birl bisect bitbucket bitch bitchslap bite bitmask bitt bivouac bivvy bivy blab blabber blackball blackboard blackjack blacklead blacklist blackmail blacktop blade blame blamestorm blanch blare blarney blaspheme blast blat blather blatter blaze blazon bleach bleat bleb bleed bleep bleg blemish blend blether blevey blidget blight blimp blindfold blindside blink blinker blip blister blit blitz blizzard bloat block blockade blog blood bloom blooter blop blorp blossom blot blotch blouse blow blowtorch blubber bludge bludgeon blueprint bluescreen bluewash blunder blur blurb blush bluster board boast boat bob bobar bobbar bobbasheely bobble bobsled bobtail bode body bodyboard bodycheck bodyguard bodyslam boff bog bogart bogey boil boldface bollix bollock bolster bolt bomb bombard bond bong bongo bonk bonus boo boob boogie boogieboard book bookend bookmark boom boomerang boondock boondoggle boost boot bootblack bootjack bootstrap booze bop border bore borg bork boro borrow bot botch bother bottle bottleneck boulder bounce bow bowel bowl box boy boycott braai brace bracket braid brail brain brainstorm brainwash braise brake branch brandish brandy brangle brank brawl brawn bray breach bread breadcrumb break breakdance breakeven breakfast breast breaststroke breed breeze brew bribe brickfilm bridesmaid bridge bridle brigade brilliantine brim brine bristle broach brocade brock brogue broil broker bromate brood brook broom brother brownnose browse bruise brunch brush bubble buccan buccaneer buck bucket buckle buckram buckrams bud buddle buddy buffalo buffet buffoon bug bugger bugle build bulge bulldog bullet bulletin bullshit bullwhip bulwark bumble bump bunch bunco bund bundle bungle bunk bunker bunt buoy burble burden burke burl burn burp burr burrow burst bury bus busk buss bustle butcher butler butt butter butterfly buttfuck button buttonhole buttress buy buzz bycatch byname bypass cabbage cable cache cack cackle caddie caddy cadence cadge cage cake calcimine calendar calender calk call callus calque cam camber came cameo camo camouflage campaign campus canal cancan cancel candle candy cane canker canna cannon cannonade cannonball canoe canter cantilever canton canvas canvass cap caparison cape caper captain caption capture caracole caravan carbonado carbonate carboxylate card care career caricature carol carom carp carpet carpool carry cart cartoon cartwheel cartwhip cascade caseate cash cashier cast castle catalog catalogue catapult catcall catch caterwaul catnap caucus caulk cause caution cave caveach caveat cavil caw ceil cellar cement censor censure census centerpunch centrifuge certificate cess chafe chaff chaffer chagrin chain chainsaw chair chalk challenge chamber chamfer champ change channel chant chap chaperon chaperone chapter char charge charioteer chark charleston charm chart chase chasse chat chatter chauffeur chaulk chaw cheat check checker checkmate checkpoint checksum checkup cheddar cheek cheep cheer cheese chequer chest chevron chevy chew chib chicane chilltime chime chimney chimp chin chink chinkle chinwag chip chirp chirr chirrup chisel chit chitchat chiv chivvy chivy chloroform chock choke chomp chop chopper chord chore chortle chorus chromatograph chrome chronicle chuck chuckle chug chum chunder chunk church churn cinch cincture cinder cipher circle circuit circumfix circumstance citrate clabber clack clag claim clam clamor clamour clamp clang clangor clangour clank clap clash clasp clatter clause claver claw clay cleat cleave cleft clem clench clerk clew click climax climb clinch clink clip clive cloak clobber clock clog cloister clomp clone clonk clop closet clot clothes clothesline clothespin cloud clout clove clown club cluck cludge clue clump clunk cluster clutter coach coagulate coal coapt coast coat coauthor coax cob cobble cock cockblock cockfight cockle cocktease cocoon coculture cod code codename coffer coffin cog cohost coif coil coin collage collapse collar collect collocate colour comb combat combine comfort comix command comment commerce commission commit commune comp compass compere compilate compile complement compliment compost compress compromise con concentrate concern concert concertina conch concord condition conduct cone confab confection confine confines conflict confuzzle conga conge conjecture conjugate conjure conk consarn consense consent conserve consist console consort construct construe consult contact contest continue contract contrast control conversation converse convert convict convoy cooee cook coom coon coop cop copay cope copilot copperplate coppice copse copter copy copypasta copyright coquet cord cordon corduroy core cork corn corner cornhole corpse corral correlate corset cosplay cosponsor cosset cost costar costume cottage couch cough counsel count countdown countenance counterattack counterbalance counterbid counterbore countercheck counterclaim counterflow countermand countermarch countermove counteroffer counterpicket counterplot counterpoint counterpoise counterpressure counterpunch countersign countersink counterstain counterstrike counterweight couple courier course court covenant cow cowboy cowgirl cox crab crackle cradle craft cram cramp crane crankle crate crater crawfish crawl crayon craze creak creampie crease credit creed creep creosote crescendo crest crew crib crick cricket crimp cringe crinkle critique crizzle croak crochet crock crome crop croquet crossbreed crosscheck crossclaim crosscut crossfade crossgrade crosshatch crosslink crosspost crossref crossruff crotchet crouch crow crowbar crowd cruise crumb crumble crumple crunch crusade crush crust cry cryosection cryptograph cub cube cuckold cuddle cudgel cue cuff culch cull culls cully culture cuntfuck cup curate curb curd cure curl curlicue curmur curry currycomb curse cursor curtain curtsey curve cushion cwtch cyberattack cyberbully cybersex cycle cyclostyle cypher dado dag dally dam damage damages dance dander dangle dap dare dart dash dashboard database date dateline daub dawn daydream daylight daytrade daze deaccession deacon deadbolt deadhead deadlift deadlink deadlock deathmatch debate debauch debouch debut decay decease deck decline decoke decontrol deconvert decoupage decoy decrease decree decrement decypher dee deed deejay deekies deem default defeat defect defilade defile defy deke delay delayer dele delegate delete delight deluge delve demagogue demand demanufacture demean demise demo demur den denizen dent deposit dequeue derail descant desert design desire desk desolvate despair despatch detail detent detour detox devel deviate devil devise devvel dew diadem diagram dial dialogue diaper diaphragm dibble dibs dice dick dicker dictate diddle die diesel diet diff difference dig digest dike dildo dill dime dimension dimple din dinge dint dip diplomate dirk dirt disaccord disadvantage disarray discard discharge discipline disco discomfort disconnect discord discourse disdain disease disengage disfavor disfavour disgrace disguise disgust dish dishonor dishonour disillusion disinterest dislike dismay dismount disparage dispatch display disposition dispute disregard disrelish disrepute disrespect diss dissent dissolve distance distaste distemper distress district distrust disuse disvalue ditch divide divorce divvy diy dob dock docket doctor document dodder dodge dog dogear dogfight dogfood dogleg dogpile dogsled dole doll dollop dolly dom domesticate dominate don donk doodle doom door doorbell doorstep dosado dose dot dote dots doublecross doubt douche dough dought dove dovetail dower downgrade downlink download downvote dowse dox doze drabble drag dragoon drain drape draw drawbore drawl dreadlock dreads dream dredge drench dress dribble drift driftnet drill drink drip drive drivel drizzle drone drool droop drop dropkick drove drowse drudge drug drum druther drydock drywall dub duchess duck duct duel duet dug duke dummy dump dunch dung dunk dunker dunt duodecimate dupe dusk dust dwell dye dynamite eagle earmark earplug earth earthscape earwig ease eats eavesdrop echelon echo eckle eclipse ecoculture eddy edge edit eel eep effect efflux effort egg egocast egress eisegete ejaculate eject elbow electroplate electroshock electrotype ellipse email embarge embargo embrace emcee employ enamel encore encounter encroach end endeavor endeavour endplay enfilade engineer entail enter entrail entrance entreat enucleate environs envy equipoise ermine ern errand error escalade escape escheat escort escrow espalier esquire essay esteem estimate ethoxylate ettle euchre evidence example excerpt exchange excise excuse exegete exercise exfiltrate exhaust exhibit exile exit expense experience experiment exploit exploiter expose extract eye eyeball eyewitness fable fabulate face facebook facelift facemail facepalm faceplant facet facsimile factor fade fadge fag fail falcon fall falsecard falter fame fan fandango fang fansub fantasy fap fard fare farm farrow farspeak fart fartarse fash fashion fate father fathom fatigue fatwa fatwah fault favor favour fearmonger feast feather featherbed feature feck fecks feddle feed feedback feedforward fellowship felt fence fend ferment ferret ferry fess festoon fetch fete fetter fettle feud fianchetto fib fid fiddle fidget field figger fight figure file filetype filibuster filigree fill fillet fillip film filter filtrate fin finance finch finesse finger fingerbang fingerpaint fingerpick fingerprint finish fink fire firebolt firebomb firehose firewalk firewall fishtail fission fissure fist fistfight fisticuff fix fixture fizz fizzle flabbergast flack flag flail flake flambee flap flare flatline flavor flavour flaw fleck fleece flesh fletch flex flick flicker flimflam flinch flint flipflop flipper flite float flob flock flood floodlight floor floss flounce flounder flour flourish flow flower flox flub fluff fluke flump flurry flurt flute flutter flux flyer foal foam fob focus fog foil foist fold fondue fool foot footer footle footnote footslog foozle forage foray forbear forbisen forbode force ford forearm forecast foredoom foreflow forefoot foreground forehold foreken forelook foremind foreread foresmell forest foretaste foretoken forewalk forewit forfeit forflutter forge fork forklift form format fortress founder fountain fourpeat fowl fox foxhunt foxtrot fraction fracture frag fragment frame franchise fratch fray freckle freebase freecycle freefall freeroll freestyle freewheel freeze freight fresco fret fricassee friend frieze frig frill frisbee frith fritter fritz frivol frizz frob frock frog frogmarch frosh frost frostbite frot froth frother frottage frounce frown frowst fruit fry ftp fuddle fudge fuel fulminate fumble fume function fund funk funnel fur furlough furnace furnish furrow fuse fusillade fuss futz fuze fuzz gab gad gaff gaffle gag gage gaggle gaincome gait gall gallop gallows gam gamahuche gamble gambol gamemaster gamemasters gammon gander gang gangbang gangrape gaol gap gape garage garb garbage gargle garland garner garnett garnish garnishee garotte garrison garrote garrotte garter gasconade gash gaslight gasp gat gate gatekeep gather gauge gaum gauze gavage gavel gawk gaze gazette gazunder gear gedge gee geek gel geld gelt gender genlock genotype geocache geranylate gerbil germ gerrymander gesture getter gherao ghost gib gibber gibbet gibe gift gig giggle gillie gillnet gilravage gimlet gimme gimmick gin ginn gird girdle girt giss git glance glare glass glaze gleam gleek gleg glide glimmer glimpse glint glissade glisten glister glitch glitter gloat glob globe glomp gloom gloop glop glory gloss glove glow glower gloze glue glug glut glutch glycate gnar gnarl goad goat gob god godfather goggle goggles goldbrick golf golly gong goo goof google googlewhore goose gore gossip gouge governess gown grab grace grade graffiti graft grain gralloch grandfather grandstand grant graph grapple grasp grass grate gravel graylist graze grease greenwash greets greylist grid griddle grief grieve grift grig grimace grime grin grind grip gripe groan groin groom groove grope grouch groundfish group grout growl grub grubstake grudge grumble grump grundle grunt guarantee guard guerdon guess guesstimate guest guestimate guff guffaw guggle guide guile guillotine guilt guitar gull gulp gum gummer gunge gunzel gurgle gurn gush gust guy guzzle gybe gyp gyre habit hack hackle hacksaw hade haemorrhage haft hail haint hale halftone hallelujah hallmark hallo halloo halo halt halter ham hammer hamper hance hand handbag handball handbrake handcraft handcuff handicap handle handplant handsel handwave hang hansel hap haplotype harangue harbinger harbor harbour hare harm harnass harness harp harpoon harrow harrumph harumph harvest hassle hasta haste hatch hatchet hate haul haunt haven haver haves havoc haw hawk haxor hay hazard haze headbutt headline heaf heap hearse heart hearthstone heat heave hedge heed heel heft heist helicopter heliograph helm help hem hemorrhage hemstitch herald herd heterograft hex hiccough hiccup hick hickup hide hie highball highjack highlight hijack hike hikoi hilite hinge hinny hint hire hiss histogram hit hitch hive hoard hoax hob hobble hobnob hobo hock hockle hoe hog hoik hoist hoke hold hole holiday holler hollo holster holystone homebrew homer homeschool homestead hone honeycomb honeymoon honk honor honour hoodoo hoof hook hoon hoop hooray hoot hoover hop hope hopscotch horlicks horn hornpipe horse horseplay horseshoe horsewhip hose host hotbox hotdog hothouse hotline hotlist houdini hough hound house housemaid hovel howl hoy huck huckster huddle huff hug huggle hull hum humbug humor humour hump hunch hunger hunker hunt hurdle hurl hurrah hurry hurtle husband hush husk hustle huswife hut huzza huzzah hydrate hydroplane hymn hype hyperlink hypertexture hypertrophy hyphenate ice icq illuminate image immunoblot imp impact implant implement import impress imprint inbeat inblow inbreak inbuild incense inch incline inconvenience increase increment incross indent indenture index indite indulgence inebriate infare infill infix influence ingress initiate ink inkle inlay inlead inosculate input insert inset instal install instance institute instream instructs instrument insuck insult intake interact intercept interchange intercrop intercross interdict interest interface interfix interflow interlace interleaf interlink interlock interlude intermix intern internetwork interplay interrupt interspace interview interwind intrigue intro inventory invert invest invite invoice inwheel inwork irc ire iris island isolate isotope issue itch iterate ixnay jab jabber jack jackal jackaroo jackass jacket jackhammer jackknife jackrabbit jacuzzi jag jail jailbreak jam jambok jangle japan jape jar jaundice jaunt jaup jaw jawbone jazz jedge jeer jell jelly jerk jerkoff jess jetski jettison jew jib jibe jig jigger jiggle jigsaw jill jilt jimmy jingle jink jinx jit jitter jitterbug jive jizz job jock jockey jog join joist joke jol jolt jones jook josh jostle jot jounce journal journey joust joy joyride joystick judder judge jug juggle juice juke julienne jumar jumble jump jumpstart junk junket jupe jury jut juxtaposition kabob kalsomine karyotype kayak kayo kaypoh kazoo kebab keck kedge keek keel keep keeve ken kennel kerb kern ketch kettle keyboard keyframe keynote keypunch keyword kibble kick kickflip kickstart kid kidnap kill killfile kiln kilt kink kip kipe kipper kiss kist kite kiteboard kitemark kitten kleptoparasite kludge knack knacker knag knap knapsack knee kneecap knell knife knight knob knock knoll knot knout know knuckle knuckleball knurl kotow kowtow label labor labour labyrinth lace lack lackey lacquer lacquey lactate ladder ladle laff lair lake lallygag lam lamb lament laminate lamp lampoon lance landfill landmark landscape lant lap lapper lapse lard larf lark larrup laser lasso latch lathe lather laud laugh launch launder lavage lave lawyer layaway layer leach leaf leaflet league leak leam leap leapfrog lear leash leave leaven lech lecture leech leg lek lens lesion lessee lesson let letter lever leverage levy libel licence license lick lickspittle lid lie lien lift lilt limb limewash line link linker lip liposuction liquor lisp list lithograph litter liveblog livescan load loaf loan loanshark lob lobby lock lockpick lodge loft lollygag longboard longe look lookbook loom loop loophole loot lop lope lopper lord losings lounge louse lout love lowball lube luck luff lug luge lull lumber lump lunch lunge lurch lure lurk lurv lurve lust luster lute luv maas mace macerate machete machine machinegun mack macule malfunction malky mallet malloc malt mambo man manacle manage mandate manet maneuver mangle manicure manifesto manoeuver manoeuvre manscape mantle manufacture manure manwhore map mar marble marcot margin marinade mark marker marl marmalade marmite marshal martyr marvel marver mascara mash mask masker mason masquerade massacre massage mast mastermind mat match mate matter maul mawn maximin maze meal meander measure medal medevac medivac medley meed megaphone meld melt memo menace mend mense mention mentor meow merchandise merchandize merge merit mesh mess message messenger met metablog metal metaphrase mete meter methylate metre mezzotint miaou miaow mic microblog microchip microcrack microfilm micropattern microphone microprogram microsoft microtome microwave midwife miff mike mildew milk mill mime mimeograph mimic mince mind mindfuck mindwipe mine minimax miniprep minister minnow mire mirror misbeat misbid misconduct misconjugate misconnect miscopy miscue miscure misdate misdeal misfall misfield misfire misfit mishit miskick mismatch misnomer misparse misprint misrhyme misrule miss mission missort misstep mist mistake mistell misthrow mistle mistrust misuse misyield miter mither mitre mix mizzle moan mob moblog mod moil mold molder mollycoddle molt monger monitor monkey monogram monograph monolog monologue montage moo mooch moon moonlight moonwalk moor mop mope morph mortar mortgage mortice mortise mosquito moss mote moth mothball mother motion motorbike motorboat motorcycle mottle mould moulder moult mound mount mountainboard mountebank mourn mouse mousetrap mousse mouth move mow muck mud muddle muff muffle mug muggle mulch mulct mull muller multiload mumble mummy munch mung murder murmur muscle muse mush muss muster mutiny mutter mux muzzle myspace nag nail name namespace nance nanny nanoimprint nap napalm nape narc nark narrowcast narrows natter neck necromance necropsy need needle neglect neigh neighbor neighbour nerve nest netsplit nettle network neuroimage nevermind newspaper nibble nick nickel nicker nickname niggle nightclub nim ninja nip nitrate nix nock nod nog noise nom nonplus nonsense nonsuit noodge noodle noogie noose norm nose nosedive nosegrind noseprint noseslide nosh notch note notice noun nudge nudzh nuke nurdle nurl nurse nursemaid nurture nut nutmeg nutshell oar oath object occasion octavate offcast offer officer offload offset offstand ogle oil oink ollie omen oncome onde onfall ontake oompah ooze opinion option orb orbit order orgasm orienteer ornament outbox outbreak outburst outcaste outcross outcry outdent outfall outfire outfit outflux outgo outlaw outlay outleap outline outpour output outrage outreach outride outsend outshow outskin outspan outtake outthrust outwork overbet overbid overburden overcall overcommit overdesign overdose overdraw overdub overfall overfill overflow overgo overhang overhaul overhold overissue overkill overlap overlay overleverage overline overload overmake overman overmatch overorder overpass overpressure overprint overpull overreach override overruff overrun oversample overshoot oversit overspill oversteer overstitch overstock oversupply overtalk overthrow overtype overuse overview overvote overwatch overwear overwork overwrap oxidate ozonate pack package packet pad paddle paddock padlock page pain paint paintball pair pal palaver palimpsest palisade pall palm palp pam pamphleteer pan pancake pander pandy panel pang panhandle pant pantomime parachute parade paraffin paragon paragraph paraphrase parasail parbuckle parcel pardon parent parget park parlay parley parleyvoo parody parole parp parquet parrot parry parse partition partner party pash pasquinade pass passage passenger password paste pastiche pastime pastor pasture patch patchwork patrol patronage patter pattern paunch pause pave pavilion paw pawl pawn pay pcr pdf peak peal pearl pebble peck pedestal pedicure pee peel peen peep peer peeve peg peise pellet pelt pen pencil pend penny pension pep pepper perch percolate perfume peril periphrase periscope perk perm permaban permablock permit peroxide peruse perv pervert pestle pet petard peter petition phagocyte phase phenocopy phenotype phial philander philibuster phish phone phosphate photo photocopy photoduplicate photograph photomap photometer photoset photostat phrase phreak phrensy physic picaroon pick pickax pickaxe picket pickle pickpocket picnic picture piddle pie piece piffle pig pigeon pigeonhole pigment pike pikey pile pill pillage pillar pillory pillow pilm pin pinball pinch pincushion pine pinfold pinion pinnacle pinprick pinwheel pioneer pip pipe pipeclay pipeline pipet pique pirouette piss pistol pit pitch pitchfork pith piton pitter pittle pity pivot pize placard place plague plait plan plank plant plash plaster plasterboard plat plate plateau platform platoon plaw play playfight playlist pleasure pleat pledge plight plink plip plod plop plot plotter plough plow pluck plug plume plummet plunder plunge ply pock pod podcast podium podreel pogo point poise poison poke pole poleaxe police polka pollard pollock polyadenylate polygraph pomade pommel pompador pompadour ponce pond pong poniard pontificate poo pooch poof pooka pool poop poot pootle popple pore pork porpoise portage porter portion portscan pose posit position posset postcode postfix postil postlude postmark postulate posture pot potter pouch pounce pound pour poussette pout powder power powerpoint powwow practice praise prance prang prank prate pratfall prattle prawn prebake precancel precaution precis precondition preculture predate predecease predicate preface prefilter prefix preform prejudice prelease prelude premiere premise premix prep preposition preprint preread presage presence preserve preshow presoak press pressure pretest pretext preview prevision prewash prewrite prey price prick prickle pride prig prink prison priss privateer prize probate probe proceeds process procession prod produce proffer profile profit profiteer program progress project prolapse promenade promise pronk prop proportion proposition prose proselyte prospect prostitute protest prototype provision prune prusik pry psalm psyche pub pucker puddle puff puggle pule pull pulp pulse pumice pump pun punch puncture punt pup purchase puree purfle purge purl purport purpose purr purse push pushbike put putt putter putz puzzle pwn pyrograph quaere quaff quahog quail quake quarantine quarrel quarry quarterback quaver quay queef queen quell quench query quest question queue quibble quicken quicklime quicksort quickstep quid quiff quill quilt quine quinella quip quire quirt quitch quitclaim quitter quiver quiz quonk quote rabbet rabbit race rack racketeer raconteur radar raddle radio radioassay radiobroadcast radiolabel raffle raft rag rage raid raik rail railbank railroad rain raise rake rally ram ramble ramp rampage rampart ramraid ramrod ranch range rankshift ransom rant rap rape rappel rapture rase rasp rat rataplan ratchet rate rathole ration ratoon rattle ravage rave rawk ray razor razz reach read readies ream reap reason reattempt reaudit rebate rebel rebleed rebluff reboot rebrand rebuff rebuffer rebuild rebuke rebuy rec recall recanvass recap recaption recapture recast receipt recess rechallenge recharge recharter recheck reclaim recoat recoil recompense recon reconnoiter reconnoitre record recount recover recross recruit redbait redd reddle redesign redirect rediscount redline redo redraft redraw redress redrum redshirt redub reduct reecho reef reek reel reencounter reeve referee reference refill refit reflux reform refrain refresh refund refurb regale regard regas regen regift regiment register regraft regress regret rehab rehash reheat reign reimport rein reissue reject rejoinder rekick relapse relaunch relay release relegate relent relet relish relook remain remake remand remark rematch remedy remise remit remix remortgage remount remove render rendezvous rendition renounce rent rentback reoffer rep repaint repair repartee repartition repast repatriate repeal repeat replay replevin reply report repose repress reprieve reprimand reprint reprise reproach repulse repurchase repute request requisition reraise rerecord rerelease rerun rescue research reserve reserves reset reshoot reshuffle resist resit resolve resort resource respite respond respray rest restart restreak restrike result resume resupply resync retake retard retcon retest retire retort retouch retrace retread retreat retrieve retrospect retry return reuse reveal revel revenge revere reverence revert review revise revisit revoke revolt revote reward rewash rewind rework rewrite rez rhyme rib ribbit ribbon rice rick rickshaw ricochet riddle ride ridge ridicule riff riffle rifle rift rig rim rinse riot rip riposte ripple ripsaw rise risk rival rive river rivet rmgroup roadblock roadshow roar robe robocall robotrip rock rocket rode roleplay roll rollback rollerblade romp roof rook roop roost roostertail root rope roquet rort roshambo rosin roster rot rotoscope roughcast roughhouse roughneck roundhouse roup rouse rout route router row rowel rub rubberneck ruck ruddle rue ruff ruffle rufie ruin rule rumba rumble rummage rumor rumormonger rumourmonger rupture rust rustle rut sabotage sabre sac sack sacrifice saddle safeguard sag sail sailboard saint salaam salamander salary sally salsa salute salvage salve sam samba sample sanction sandbag sandboard sandbox sandpaper sap sarge sarse sashay sass sat sate sauce sauna saunter savor savour saw say scab scaffold scag scale scallop scalp scam scamp scamper scan scapegoat scar scare scaremonger scarf scat scene scent scepter sceptre schedule scheme schlep schlepp schlomp schmooze school schoolmaster schuss schvitz scissor scissors sclate scoff scollop scone scoop scoot scooter scope scorch score scorn scourge scours scout scow scowl scrag scram scramble scrap scrapbook scrape scrawl scream scree screech screed screen screenshot screeve screw scribble scribe scrimmage scrimshander scrimshaw script scrobble scrod scroll scrounge scruff scruffle scrummage scrunch scrunt scruple scrutineer scuba scuffle scull sculpture scum scumber scumble scummer scunner scupper scut scutch scuttle scythe seajack seal sealift seam sear search season seat secretary section sed sediment seel seep segfault segment segue segway seine seiyuu sell sellotape semaphore semiquote sense sent sentence sentinel sepulcher sepulchre sequence serenade serotype serve service settle sex sext shack shackle shade shadow shadowbox shaft shag shake shale shambles shame shampoo shanghai shape shard share shave sheaf shear sheath sheave shed sheet sheetrock shell shellac shellack shelter shelve shemozzle shepherd sherpa shield shift shill shim shimmer shimmy shin shine shingle shinny ship shipwreck shirk shitcan shiv shiver shlep shock shoe shoegaze shoehorn shook shoot shop shore shoulder shout shove shovel shovelbum show showboat showcase shower shrank shred shriek shrimp shrine shrink shrinkwrap shroom shroud shrug shuck shudder shuffle shuggle shunt shut shutter shuttle shuttlecock shvitz shylock side sideline sidestep sideswipe sidetrack sidle siege sieve sigh sight sign signpost silence silhouette silkscreen silo silt simmer simper simulcast singe sink sinter sip sipe siphon sir sire sister sit site size sizz sizzle sjambok skank skate skateboard skeet skell skelp sketch skewer ski skiboard skid skin skink skip skipper skirmish skirt skit skitter skittle skive skrike skulk skull skunk sky skydive skylark skyline skyrocket slab slabber slag slalom slam slander slang slant slash slat slather slaughter slave slaver sled sledge sledgehammer sleep sleet sleeve sleigh sleuth slew slice slide slime slingshot slip slipstream slit slive sliver slobber slog sloganeer sloosh slop slope slosh slot slouch slough slowplay slub slubber sludge slue slug sluice slum slumber slump slunk slur slurp slut smail smarm smarts smash smatch smear smell smelt smile smirk smithy smog smooch smother smouch sms smudge smurf smush smut smutch snack snaffle snag snaggle snake snap snapshot snare snark snarl snatch sneak sneck sneer sneeze snib snick snicker sniff sniffle snigger snip snipe snirt snitch snivel snog snood snook snooker snoop snooze snore snorkel snort snout snow snowball snowblade snowboard snowdrop snowmobile snowplow snowshoe snuff snuffle snuggle soak soap soapbox soar soccer sock sod softsoap soil sojourn solace solder soldier soliloquy solvate somersault soogee sook soother sop sophisticate sorb sorrow sort sortie sot sough soundtrack soup source souse sow space spacewalk spackle spad spade spall spam span spancel spangle spank spar spark sparkle spasm spat spatchcock spawn spay spaz spazz speak spear spearfish spearhead spec speckle speed speedrun speedskate speel spell spellcheck spelt spend spew spider spiderweb spiel spiff spike spile spill spindle spire spirit spit spitball spitchcock spite splash splat splatter splice splint splinter splish splodge splotch splurge spoil spoils spoke sponge sponsor spoof spooge spook spool spoon spoor spore spork spot spotface spotlight spouse spout spraddle sprain sprawl spray spread sprig springboard springle sprinkle sprint spritz sprog sprout spud spume spunk spur spurn spurt spurtle sputter spy squabble squall squash squawk squeak squeal squee squeegee squeeze squelch squib squick squidge squiggle squinch squint squire squirm squirrel squirt squish squitter squizz squop squush ssh stab stack staddle staff stage stagger stain stake stalemate stalk stall stammer stamp stampede stanchion standby standoff staple star starburst stare start startle stash state statement station stave stay staycation stead steal steals steamroller steek steel steeple steer stell stem stencil stenograph step stereotype stet stevedore steven stevvon stew steward stick sticker stickybeak stifle stilt stim stimy stink stint stip stipple stir stirfry stitch stockade stockpile stodge stoke stole stomach stomp stonk stook stoop stoor stopper stopple store storm storyboard stot stove straddle strafe strain straitjacket strand strap streak stream streamline stress stretch stretcher stride strike strikethrough strip stripe striptease strobe stroke stroll strop structure struggle strum strut stub stucco study stuff stum stumble stump stunt stutter sty style stymie stymy subclass subclone subculture subgrant subgroup sublease sublet sublicense submeter subnet subpoena subsample subsign substitute subtitle subtotal subtype subvert subway succor succour suck sucker suffix sugar suicide suit suitcase suitor sulfate sulfonate sulk sulphate sulphur sum summer summit summons sump sun sunburn sunscald sunset suntan sup supercalender superclass supercoil supercruise superglue supersede supershift superstrate supertitle supertype supper supplement support surcease surcharge surf surface surfboard surfeit surge surmise surname surprise surrender surround surrounds surtitle survey sustain suture sux swab swag swage swagger swallow swamp swan swap swarm swash swat swathe sway swear sweat sweep swelter swig swill swim swindle swingle swipe swirl switch switchback swivel swizz swizzle swoon swoop swoosh swop swot syllable symbol symlink synapse sync synch syndicate syphon syringe sysop tab table tack tackle tag tail tailgate tailor taint take tale talk tallyho tamper tang tangle tango tank tap tape taper tapestry tar tare target tariff tarmac tarnish tarp taser task tassel taste tat tatter tatters tattle tattoo taunt taw tawn tax taxi tchick tea teabag team tear teargas tease teasel ted tee teen teetertotter telecast telecine teleconference telefax telegram telegraph telemonitor telephone teleprint telescope teletype telework telex tell telnet telpher temp temper tempest template tenant tenon tension tent tenter tenure term terp terrace tetch tether text texture thack thatch thaw therapy thew thimblerig think thirst thole thorn thort thou thought thrall thrash thread threap threepeat thrill throb throne throng throttle throw thrum thrust thrutch thud thumb thumbnail thumbshot thumbtack thump thunder thwack thwart tick ticket tide tie tier tiff tile tiller tilt time timeline timestamp timetable tincture tinge tingle tinker tinkle tinplate tint tip tipple tiptoe tire titer tithe title titre titter tittup titwank toady toast toboggan toe toenail toepoke tog toggle toil toilet toke toll tomahawk tomato tomb tombstone tomcat tone tong tongue tonsure tool toot toothbrush topline topspin topstitch torch torment torpedo torque torture toss tot tote totter touch tour touse tout tow towel tower toy trace track trademark traffic trail trailer train traipse tram trammel tramp trample trampoline transect transfer transfix transform transit transition translate transplant transport transpose trap trapeze trash travail travel traverse travesty trawl tray tread treadle treasure treat tree trek tremble tremor trench trend trepan trephine trespass tress triage tribotest trice trickle tricycle trifle trigger trike trill trindle triplicate triumph troat troll trolley trollop troop trope trot trouble trough troupe trouser trout trowel truckle trudge trump trumpet trundle truss trust trustee try tryst tub tube tuck tucker tuft tug tumble tump tune tunnel tup turf turn turtle tush tusk tussle tut tutor twaddle twang twat tweak tween tweet twerk twig twine twinge twink twinkle twirl twist twit twitch twitter twizzle twonk type typo ultracentrifuge umbrage umlaut ump umpire underbet underbid undercast undercoat undercut underdose underestimate underhang underhold underkeep underlay underlead underlook underorder underplant underplate underplay underrate underruff underscore underseal underset underspend understeer understock understudy underuse underwire underwork undress unfriend unicycle unknot unreason upbreak upchuck upcome update upfault upgrade upkeep upload uppercut uprate uprush upsend upsert upshift upstand upsurge upsweep upswell upthrow upthrust uptilt upturn upvalue upvote urge use usher vacation vacuum vagabond valet value valve vamp vang vanpool vapor vapour varnish vasal vaseline vat vault vaunt vector veel veer veil velcro velvet veneer vent venture verb verge vermicompost verse vest vet veto vial vibe vibrate victory victual vidcast viddy video videocast videoconference videotape view vignette vill vinegar vision visit vitriol vittles viva vocalise vodcast vogue voice volley volplane volunteer vom vomit voodoo vote vouch voucher vow voyage vurp wad waddle wade waffle waft wag wage wager waggle waggon wagon wail wain wainscot wait waitress waiver wake wakeboard wale walk wall waller wallop wallpaper waltz wamble wand wander wane wang wangle wank want wanter war warble ward wardrive warehouse wark warp warrant warranty wash wassail watch watchdog watchlist water waterboard waterfall waterflood watermark waterski wattle watusi wave waveguide waver waw wean wear weasel weather weatherstrip weave web webcast wedge weds weight welch weld welt wend wester wether wetnurse whack whale wham whap wheek wheel wheeze whelp whicker whid whiffle whig whimper whine whinge whinny whip whiplash whipsaw whipstitch whir whirl whirr whish whisk whisper whistle whitelist whitemail whitewash whittle whiz whizz whoop whoosh whop whore whorl whump wibble widow wig wiggle wigwag wiki wikipedia wildcraft wildfowl wile wilt wimble wimp wimple win wince winch wind windmill windproofs wine wink winnow winter winterfeed winterkill wipe wire wireframe wiretap wisecrack wit witch withers witness woad wobble wog wok wolf woman womble won wonder woodshed woof woos word wordsmith wore work workshop world worm worry worship woulder wound wow wrack wrangle wrap wreath wreck wrench wrestle wriggle wrinkle writhe wuffle wunner wuv wyte xenograft xeriscape xerox xor xylograph yabby yacht yack yak yakka yammer yandy yang yank yap yard yarm yarn yatter yaw yawl yawn yawp yeast yed yell yelm yelp yen yeuk yield yiff yip yodel yoik yoke yomp youtube yowl yoyo zag zap zed zest zig zinc zip zipper zizz zone zonk zoom zorb zot zouk 4340 N aal aar abdabs abdal abducens abettal abhal abraxas abuttal academicals acalephae acarminative accouterments accroides accrual accusal acephal acetable acetal achar achimenes acibenzolar acinaces acinetae acquittal acrocephaly acromegaly acrostic activewear acylal adeling adeps adidas admiral advergaming advertorial aedes aegilops aelotropic aeolotropic aequative aerobraking aerocolpos aeromechanic aeromodelling aerophilately aerotowing aerotrekking affixative afterburning aftercooling afterdeal afterings afterpotential afterpulsing afters agal agar agaric agogic agonistes agremens agrichemical agrochemical agueweed ailing airbed airconditioning airshed airspeed airwaves ajapsandal ajvar akonting akropolises alatae albicanal alcazar alegar alembic alexanders alkermes alkynal allenylphosphonates alleygating allheal alligatoring allobar allobarbital allodizing allografting alloparenting alloplastic allseed alluvials alms almsdeed almsgiving alphametic alphos altar ambages aminal aminodeoxysugar aminopropanal ammonal amobarbital amphiboly analects analloerotic analvos anamonic ananas anencephaly aneolithic aneurismatic angolar angries anhydrosugar animatic animelles aniseed anisophylly annal anomaly anopheles antbear antialiasing antialigning antianginal antiar antibunching anticommons anticounterfeiting antiderivative antidiagonal antifogmatic antifundamental antigropeloes antigropelos antiking antimacassar antimusic antinarrative anting antiphasing antiphonar antipodes antipruritic antisceptic antiscreening antistar anycasting apar apehangers apikoros appliable applicatorful appraisal apprisal approval apronful arachnodactyly arbelos arborvitae arcading archbishopric archcriminal archgrounds archrival arctophily argininal aries arisings arkful armful armorsmithing armoursmithing arousal arras arrear arrival arsenal arsenosugar arsinous arsoles artic artmaking ascar ascites ashing ashlar ashweed asperges assembly asterids astragal astrophilately atar atgar atheling athleticwear atlas atled attar attokatal aughts aulos auriculars aurochs autoblanking autoboxing autocephaly autochthones autoclitic autodial autodocking autogas autogating autoindexing autolearning automagic automaking automapping autonumbering autopartitioning autopoisoning autopositioning autoprocessing autorenewal autoreply autoscanning autoscattering autoscrolling autoshaping autotools aval avatar avens averral avgas avowal awning azasugar azidosugar azkal azygos babalaas babbelas babycakes babyproofing babywear backbenches backcrossing backloading backmasking backsies backstepping backswing backtesting badderlocks badders badfic badgemaking badlands bagful bagmaking bagpipes baldric balkar balletwear ballhandling ballocks balmoral balthazar bandpassing banns bantling barbering barbital barbitos barcoding barebacking bareboating barefooting barfly barful barkeeping barleymeal barnstar barrelful barristering barwalking barytes baseboarding baserunning basinful basketful basketweaving bathful bathos bathydemersal batwing bauks bayes bazaar beable beachcombing beachful beachgoing beachwear beakerful beakful beamforming beanmeal beanspilling beastings beatmatching beavering bedclothes bedful bedspring bedwetting beechdrops beehive beekeeping beermaking beestings beeswing begar beggarticks beheadal bejabbers bejeebers bellbottoms bellmaking bellringing bellyful belowstairs beltful benchmarketing bengal benthos benzobarbital bequeathal beremeal bestowal betrayal betrothal beylic bezoar bhuddas bialy biceps biclustering bicrystal biestings bifocals bigos bikeshed bikeshedding bikewear bilberrying bilboes billboarding billpaying billposting billy bindweed bing binocs binoculars binormal bioadhesive biobanking biobed bioceramic biochar biocomputing bioengineering biofabric biofouling biogas biogeneric biohacking bioimaging bioleaching biologicals biomanufacturing biomaterial biometal biomineral biomixing biomodelling biomonitoring biomusic bionanomaterial biopharmaceutical biopharming biopic bioplastic bioprinting bioprocessing bioprospecting biosensing biosignal biosimilar biotherapeutic biovar biped biradical birdcatching birdfeed birding birdkeeping birdling birdseed birdwatching birdwing bishopric bishopsweed bitstring bitterling bitters bitts bivocal blackberrying blackbirding blackfly blackfriar blanketweed blazar blessing blewits bling blinkenlights blockbusting blogoholic blogworking bloodletting bloodred bloodshed bloodshedding blowfly blueberrying bluecurls bluejeans blueshifting bluesnarfing bluestocking blundering blutchers boar boardsailing boardshorts boatbuilding boatful bocal bodybuilding bodyguarding bodyless boerewors boing bolivar bollocking bombmaking bonefishing bonemeal bongoes bookbinding bookful bookmaking bookselling boondocks boonies boosies bootmaking borating bordar boresighting borstal bosal bossnapping bossyboots bostal botfly bottlefly bottleful botts bouldering bowhunting bowlful bowstring boxcar boxful boxspring boyar boyloving boyshorts boyswear brachycephaly brachydactyly brae braies brainwashing brambling brandcasting brandling branks branmeal bratling breadmaking breadwinning breakables breakdancing breastful breeching breeks brekkers brending briar bribetaking bricklaying brickmaking brickworks bridalwear brinelling brinjal brisling bristols britches brittlestar broadwing broguing brolly bromal bromosugar bronzemaking bronzewing bronzeworking brushbar brushmaking bubkes bucketful buckjumping buckskins budgerigar bugbear bugleweed buildering bulerias bulgar bullbaiting bullfighting bullring bumsters bunburying bunkbed bunning buntal bupkes burglar burial bursar busbar bushing bushranging bushwalking businesswear busybodying butanal butenal butterfingers butyral bvds bwoys bygones cabal caballing cabbaling cabbeling cabbing cabdriving cabinetmaking cablecar cabrales cacoethes caddisfly caerphilly caesar cageling cahoots caic cajal cajones cakemaking calcar calends calipers callicarpenal callipers calvados cambric camcording camiknickers camming campanulids candlemaking candlemas candyflipping canful cannibal cantal cantar cantharides canuding canyoneering canyoning capful capias cappabar capperbar car caracal caramoussal caravanning carbophos cardiomegaly cardmaking cardplaying cardtable caregiving caretaking carful caricae caries carling carmaking carnassial carnitas carnival carotenal carousal carpal carpentering cartful cartonful cartophily carwashing caseful castanets castful castlebuilding castling casualwear catacaustic catchfly caterpillar catfighting cathar catharping cathedral catholicos cauldronful caviar cazic cedar ceiling cellpadding cellspacing celly centenar centennial centikatal centroiding ceramal ceras cereal cerevisiae chadar chaddar chaffweed chainring chairmaking chamar chamets champers chandlering changeling chantefable chantilly chaos chaparral chappal charas chazal chebs checkstring cheesemaking cheffing chemorepellent chemosignal chemovar chequing chervonets chesed chessboxing chestful chesticles chewings chicharrones chickenfeed chickling chickweed childbed childraising childrearing childrenswear chinar ching chinos chipmaking chipmusic chiromegaly chiropractic chital chitlins chitterlings chive chlamys chleuasmos chloral chlorethoxyfos chlorfenvinphos chlorosugar chlorpyrifos chocaholic chocoholic chokedar cholent choros chowkidar christmas chubes chuddar chuddies chulent chumar cicely cidermaking cigar cigarmaking cilly cinefilming circs circumambages cirriped citeable citral citronellal civies civils civitas civvies cks claes clamdiggers clarithmetic clas classloading classroomful clearcutting clearwing cleric clerkling cleverclogs clickjacking cling clinic clitic clockmaking closetful clothesmaking clothmaking cloudbusting cls clubwear cmos coachbuilding coachful coachwhipping coalbed coalheaving coaming coassembly coasteering cobbing cobblestoning cobinding cochineal coclustering cocrystal codebreaking codemaking codiverged codling codoping coffeehousing coffeemaking cognisances cognos cogwheeling cohousing coinflipping cojones coking collapsar collins colluvies collywobbles columbusing combings combjelly commissar commital communitas companding comptrolling concepting conferral confirmities confucianisms confusopoly congeries congratudolences conibear connegative constable construal containerful contradancing contragestive contrapositive contretemps contumely conveyancing coolibar cooly cootling copacking copal cophasing copolymerizes copperas copperbars coppersmithing copperworks copyediting cording cordovans corduroys cornflakes cornicular cornmeal corps corsetmaking corsive cortinar corydoras cosmaceutical cosmeceutical cosmos cotes cottaging cottar cottonseed cottonweed cotunneling cotunnelling cougar coumaphos counterappeal counterconditioning counterflashing counterinitiative counterkilling countermeeting counteroffensive counterprogramming counterproposal counterrally counterspying countertactic counterwar cous couscous covariable coveralls coving cowling coworking cowshed cracklins craic cranberrying cranefly crateful creamcups cred creekbed cremains crimebusting crimefighting cringeling critic crofting croplands crossbar crossbenches crossbones crossbracing crosscoupling crossfostering crowdfunding crowdsourcing crudites cruisewear cryocooling cryoelectroncs cryofocusing cryosampling cryosectioning cryotrapping cryovial cryptomaterial cryptoprocessing crystal csardas cts ctvhcs cudweed culottes cultivar cuntlicking cuntlips cupboardful cupful curlies cusping custumal cyberbanking cybercapital cybercheating cybercounseling cybercriminal cyberczar cyberdating cyberdetective cyberequivalent cyberflirting cybergambling cybergaming cyberissues cyberlearning cyberloafing cybermarketing cybermentoring cybernews cyberoperations cyberpal cybershopping cyberslacking cyberspying cybersquatting cyberstudies cybersurfing cyberteaching cybervandal cyberwar cyberwear cyberwedding cyclewear cyclops cymar cymbal cymbaling cynocephaly cysteinal cytomegaly czar czardas daal dactyly daffodowndilly daggering dagmar dahling dairying dal daled dalmatic damar dampproofing damselfly danceaholic dancemaking dancewear darbar daric datacasting daybed daylily daysailing daystar daywear dealloying dealmaking dealy deasphalting deathbed deathfic deathstar debiasing deblending deblurring debunching decakatal decal decasyllable dechanneling decikatal decisionmaking declawing declustering decompensated decrial dedal deeksies deferral definiens definitioneering defrayal degumming dehors dehubbing dehydriding delative delts demurral denar denial denims denimwear denoising deodar deoxysugar depairing dephasing depinning depointing deprival deschooling deshelving deshielding deshopping desiderative designerwear desolventizing despisal dessertspoonful detective determinans determinative dethreading detwinning deviless dewar dhal dhobying diabetes diadumenos dialectic diapositive diaromatic dichlorvos dickens dickweed dicrotophos diddly didemnaketal dideoxysugar diflunisal diking dillseed dimictic dinar ding dingaling dinnerwear diplegic dipperful diradical disapproval disassembly disavowal disbudding disbursal discowear discretionaries dishful dishwashing disincentive dismissal disobeyal disordering dispersal disposal dissavings dissyllable disyllable dithioacetal dithiohemiacetal dithioketal divewear divvers dobsonfly docklands dockworking dodecasyllable doeling dogballs dognapping doily doings doldrums dollar dollmaking dolos domaining dominos doos douar doughmaking downfolding downlighting downsampling downsizings downswing downwelling dragonfly drainings drawbar drawerful drawfiling drawgear drawspring drawstring dreadlocks dregs dressmaking drins dromos droppings dropseed droughting drugtaking drumbeating drumful druthers dryas dsms duar duckling duckweed duds dumpling dundrearies dungarees duniwassal dunking duopoly durbar duxelles dwarfling dyirbal dyking ear earful earing earlies earmuffs earnings earring earthling earthstar earwear easting eaves eburones ecliptic ecocritic ecodesigning econocar ecowar ectocommensal ectotympanic edgebanding editioning eelspear efaproxiral eggar egosurfing eic einherjar ejective elative elbowful elderberrying elding electroblotting electroceramic electrocoating electrofishing electroforming electroloading electropolishing electrorefining electrospinning electrospraying electrowetting electrowinning elevenses elevensies elotropic emotronic emptins enal encaustic enclitic encyclical endive endocannibal enhydros enquires enriched ensanguining ensembling entertailing entomophily entrails entremets eolotropic epanodos epiboly epizoodic equipartitioning erastes eric erlking eromenos eros errorbar erysipelas escargots eschar eschewal escolar espial espousal etaloning eteostic ethanal ethanoic ethic ethnomusic ethos eudicotyledons euouae eurodollar eurostar eutely eveningwear eventing everclear evildoing exakatal excretable excusal execs exemplar exergaming exocannibal exophthalmos explanans extrados extrudites exuviae eyas eyebar eyeful eyering eyewear fabids fabric faceful facesitting facetiae facies fackins factfinding factorial faeces fafrotskies faggoting fagmosexual fagoting fairyfly fal falderal fambly fancypants fanfic fanlisting fantasylands fanwear faravahar farthing fasces fasciating fatling fatliquoring faujdar fauxmosexual fauxtatoes fawnlily fbs feces feldspar fellwalking felspar femtoengineering femtokatal fenks ferrometal fetishwear fibreglassing fic fictionmaking fiftysomething filesharing filly filmgoing filmmaking filmstar financials finching fingerful fingerling fingerpointing fingerspelling finial finings finning firefighting firefly firehosing fireweed fireworks fishfinding fishfly fishkeeping fishmeal fishmongering fisking fistful fiveling fivestones fixings flamewar flanging flaskful flatcar flatlands flaunching flavouring flaxseed fledgeling fleming fleshfly fleshings flews flexecutive flexihours flexwing flightseeing fling flitterjigs flixweed floodwaters floorless floorplanning flowcharting flowerbed flowerfly fluorimaging fluorochemical fluorosugar fluorspar flyboarding flyfishing flyspecking flyting folar folksinging folly foobar foodaholic foodshed footbed footbinding footdragging footgear footing footprinting footwear footwriting forceps forebear foredeal foreking forewing forkful formalwear formfeed formfilling forslitting forthdeal fortunetelling fortysomething fosterling foundationwear foundling fracas fracing frameshifting framily freebanding freebirthing freediving freerunning freeskiing freethinking freewriting friar frogling frontrunning frugging fruitfly fryling fulmar fumblefingers funbags funboarding fundable fundholding fundraising furfural fustic futsal fynbos gable gadfly gaincoming gaingiving gainsharing gal galanas galangal galashiels galimatias galletting gallfly gallinaceous galluses gally galpal gamekeeping gar gardenful garlic gasfitting gasworks gathering gavial gaybar gaydar gaywings gazar gbs gcns geas geekwear genderbending genetive gengineering genitals geniting genomovar gens gentlefolks geocaching geoengineering geomaterial geophily geopotential geranial gerundive gharial ghazal ghostbusting ghosthunting ghosting gibbs giblets gigakatal gigapascal gigayear gimbal ginsing girlswear girlwatching girning giros gisaring glacading glaive glamping glanders glassblowing glassful glassmaking glasswashing glassworking glassworks gleed glenzing glimms gloaming gloated globemaking glossohyal gloveful glucal glycal glyceral glycinal glycopeptidomimetic glyoxal goal goalkeeping goalscoring goatling gobar gobful godling godmoding godsakes godspeed golddiggers goldenseal goldilocks goldsmithing gomeral goniolens gonys googlewhacking goolies gooseberrying goral gosling gossipmongering goutweed goyal grammar gramps grandmothering grantmaking grapeseed grasscutting gravastar graveclothes graverobbing graviscalar gravitas grayling greed greedyguts greenfeed greenfly greengrocing greenkeeping greenling greenskeeping greenweed gribenes gridding grolies grossular groundling grounds groundskeeping gruds grundies gts guar gubbins guestmeal guidwilly gujjar gully gummies gunkholing gunmetal gunrunning gunsmithing gurning gutful gwas haar habdabs habeas haemoderivative hagseed haircutting hairdressing hairpulling hairsplitting hairspring hairstyling hairwashing halfbreed halfling halfsies halmos haloaromatic halosugar halvans hamadryas hamal hamets hammal hammochrysos hammocking hamstring handcar handclapping handful handholding handlebar handspring handwashing handweaving handwringing hangar hanimal haras harddrive hardstanding harmal harmdoing harns harpings harras hartal hashbrowns hashtable hatchling hatelisting hatemongering hatful hatmaking hatred havable havildar hawaladar hawkweed haymaking hayseed hayshed hazing headcollar headgear headies headlighting headphones headquarters headshaking headspring headwaters headwear heapings heartcutting heartful heartstring heartstrings heavyhanded hectokatal hectopascal hed heelies heightening heliboarding heliskiing hellenismos hemiacetal hemiaminal hemiketal hemimegaloencephaly hemoderivative hempseed hendecasyllable hendiadys hepatomegaly hepatopancreas hepatosplenomegaly heptanal heresthetic heretic herpes herring heterophylly heteroradical heteroring heterostyly heuretic hexacoral hiccoughs hieroglyphed higgs highlands highlining hijinks hilding hillbilly hillclimbing hillwalking hindwing hiphuggers hippocras hireling hirsuties histogramming histostaining hobelar hobilar hocketing hodening hogweed holidaymaking hollands holliers holly holming holoprosencephaly hols homebuilding homebuying homecoming homemaking homeschooling homeshoring homesourcing homewares homeworking homewrecking homily hommos homocoupling homophily honeymaking hongweibing hoodening hornfels horsefeathers horsefly horseracing horseriding horseweed hosannahing hospital hospodar hosteling hostelling hostessing hotbed hotdesking hoteling hotelling hotlinking hotpants hots hotting hoummos hoummous houmous housebuilding housebuying housecar housefly houseful househunting housekeeping houselights housepainting housewares housewarming hoverboarding hovercar hoverfly huanglongbing huevos hundial hundred hurdies hurling hussar husting hustings hydriding hydroblading hydrocephaly hydrochronic hydrodewaxing hydroengineering hydrofining hydroforming hydrofracking hydrofracturing hydrometrocolpos hydropillar hydroprocessing hydrops hydroseeding hydroxymethylfurfural hylleraas hyperarousal hyperchaos hypercinnabar hypercritic hyperdactyly hyperdrive hypergraphic hyperlens hypermiling hyperscalar hyperspeed hypnobirthing hypospadias iceboating icemaking ichnofacies ichthys idear iftar iliopsoas illderly illogic imagemapping iminosugar immunoassaying immunoblotting immunocontraceptive immunoediting immunoimaging immunophenotyping immunostaining immunotyping impatiens imping inbetweening inbreaking incentive incunable inerting infeed inferencing inferognathal infighting infodemic infographic infoholic infomercial infommercial informercial infowar ing inholding iniencephaly injunctive inkling inning innkeeping inpainting inpouring inshoring instar instreaming interbeing interiorscaping interlining internals internegative interoceanic interposal interpositive interspersal interstacking intertrons interval intervising interwebs interworking intrados introverting invar investigable iodosugar ironmaking ironmongering ironsmithing ironweed ironworking ironworks irreconcileable islandful isobar isopycnal isoscalar isoscaling isoseismal iwar jacal jacamar jackpudding jacktar jacobs jaggies jaghirdar jaguar jamadar jameed jamjar jandal janitoring janjaweed jankers japanning jarful javascripting jeanswear jegging jeggings jellybelly jemadar jemidar jeos jetsetting jewelweed jharal jibbing jimjams jimsonweed jingal jobseeking jodhpurs jodies jogpants johannes jointing jointweed jonkmanskas joual jougs jubbly judas jugful juggins jumpseed kafal kahal kairos kajal kalends kamal kamees kantar karbovanets karting kashkaval katal kaval kecks ked keepalive kees keftedes kegful keks kermes kes ketal kettledrumming kettleful kettling kevlar keybinding keyboarding keylogging keymapping keypal keyring keytar khachkar khaddar khanjar khedive khimar khitmatgar khitmutgar khoums kickboxing kicksled kidswear kiladar kilobar kilocal kilokatal kilopascal kiloyear king kingmaking kirtankar kitchenful kiteboarding kitemaking kittening klackers klismos knapweed knar kneecapping knickerbockers knickers knicks knifemaking knitwear knotweed kobzar kogal kommos kotwal kouros kourotrophos kouskous kraal kriging krumping ksar kunjoos kunming kursaal kvas kymys labiovelar laborshed labourshed labrys lacemaking lacewing laches ladieswear ladyparts lagering lahar lakebed lambic lamiids lammas lampas lamping lancers lanczos landholding langar laniquidar lantibiotic lapwing lar largened largening largens larimar lascar latchstring latexwear latic lative lats launchings lawbreaking lawing lawmaking lawnmowing lawyering lazar lazybones leafcasting leafleteering leapling leathergoods leathermaking leatherwear leatherworking leatherworks leavings lebesgue_stieltjes legwear leisurewear lekvar lemming lennard_jones leptomeninges letteral leucinal leudes liar lias lidar lifecasting lifeguarding lifehacking lifestreaming lightbar lighting lightspeed lightyear lignicolous lineaging linebacking linefeed ling linseed lisencephaly lissencephaly listmaking listwashing litas lithal lithofacies lithops litotes litterboxes loadstar loblolly lobscows lockpicking lockring locksmithing locoweed lodestar lodging loggets logic logodaedaly logrolling lolly longboarding longhauling longjohns longlining lookalike lordling lorryful loukoumades loungewear loutrophoros loveling lovemaking lowriding lucas lues luggable lungful lupanar lustmaking lynching maar machosexual macrocephaly macrocracking macrodiagonal macrofamily macroing macromixing macroprogramming macropteres macroradical macroseeding madras madrigal maecenas mafficking magar magnetar mahal maimings mainspring maizemeal makar mal malling mallomar malternative malvertising mammal manas mandyas mangal manimal maniped mansplaining manyplies maoming mapmaking mapvertising marae marans marathoning marechal mareschal marketeering masdar mastic matchboarding materfamilias maths matins matric maxilliped mayfly maying mayweed measles meatpacking meatworks mebos mechanic mechanicals mechanosensing mecuricals medfly mediamaking medic medivacking medlar medmal meeting megabuilding megadeal megakatal megamusical megapascal megaportal megasiemens megastar megatrial megayear mehmandar menses menswear menubar menuing mephobarbital mereswines meroving merrymaking mescal mesoclitic mesonephros metacinnabar metagrammar metaheuristic metalens metalogic metalworking metamaterial metamodeling metamodelling metanarrative metaperspective metar metareasoning metastring metatable metathinking methamidophos methamphetamines methanal methohexital methylal methylglyoxal methylphenobarbital metic metical metrosexual mezcal microalloying microbar microbleed microbrewing microbunching microcar microcephaly microcharcoal microcomputing microcosmos microcrystal microdistilling microdrive microengineering microfabric microfinancing microforceps microinjecting microkatal microlearning microlending microlens microlensing microlidar micromachining micromanufacturing micromaterial micromineral micromixing micromosaic micropillar micropositioning microprinting microprocessing microquasar microremains microring microseed microseeding microsensing microstamping microtargeting microtear microtubing microwear midding middlings midmeeting midmorning midteens midyear migradollar milkbar milkweed milletmeal millful millibar milliequivalent millikatal millipascal millisiemens millworks mimbar minbar minesweeping mineworking ming minibar minicanal minicar minicomputing miniepic minifacial minifestival minimusical miniretrospective miniserial miniseries minispiral minisupercomputing minitrial miniwar mipmapping mips mirrorshades misandric misassembly misbidding mischmetal misconstrual misdeed miseryguts misfiling misgendering misgiving mishandling misincentive miskal mispriming missal missive misspeaking mistal mistrafficking mistral mistrial mithqal modacrylic mogas molding molly moly monal moneylending monial monkeywrenching monkies monocrotophos monocrystal monodactyly monoderivative monophyly monopoly monosyllable monotal monotasking monothioacetal monothiohemiacetal mons monthling moondial moongazing moonseed moonshining mores morgellons morning morningstar morphospecies morphotyping mosaicking motorboating motorcar moulding mountainboarding mountaineering mouthbrooding mouthful moval moviemaking msys mudsled mudslinging mudwrestling mugful mugging muggins mujahed mukhtar mulligrubs multibillions multibooting multibranding multibuffering multicasting multicrystal multihoming multilayering multipathing multipotential multiprocessing multisampling multiskilling multiskills multisourcing multithreading multitracking mumps munchies municycling mural music musicing mustanging muttonbirding muttonchops muttonheaded mylar mythmaking mythos nabal nachos nads nailbed nakharar namaskar namevoting nanobunching nanocable nanoceramic nanocoating nanocomputing nanocosmetic nanocrystal nanodielectric nanoengineering nanoequivalent nanofocusing nanoforging nanofractal nanokatal nanolensing nanomanufacturing nanomaterial nanometal nanomoulding nanopatterning nanopharmaceuticals nanopillar nanopositioning nanoprobing nanopublishing nanoring nanosiemens nanostring nanostructuring nanotweezers naos narcodollar nariyal narwhal nasheed nates natting navbar navier_stokes navigates naxarar nebuchadnezzar necessaries neckwear necrophily nectar ned needleful needleworking nekropolises nenuphar neoconservative nephromegaly nephros nephs nerdic netbeans netful nethers netminding netraising netroots neuromarketing neuticles neutraceutical news newsfeed newsweekly newton_cotes nibling nibral niding nightclothes nightdreaming nightgear nighthawking nightjar nightwear nilas nilradical nitpicking nitriding nitrofural nixtamal nomos nonagesimal nonally nonanal nonanalgesic nonantibiotic nonarousal nonarrival nonbeing nonbereaved nonbias nonbully noncannibal nonchaos noncompos noncritic nondiabetes nones nongas nonking nonliar nonmammal nonmeaning nonmetal nonnational nonplastic nonproposal nonrefusal nonrenewal nonreply nonscandal nonsceptic nonscholar nonsibling nonsked nonskeptic nonsports nonstar nonsugar nonsuperstar nontalent nonworkaholic nootropic nopal nopales northing nosebleed nosebleeding noseful noshoring notaphily notetaking nothospecies notifying noughties nous nowcasting nucleofecting nullisomic numbnuts numeral nuptials nursling nutraceutical nylons nymshifted nymshifting nymshifts oakling oarweed oathbreaking obsequies octavofinal octocoral octosyllable odds oddsmaking oersted offal officeholding offroading offscouring offspring ogive oilseed oilskins oleocanthal oleochemical oligohydramnios oligopoly olisbos olivegrowing omkar omphalos onboarding ontos oodles opal opisthenar opisthodomos ops opticals orbifolding orbital orcharding orcos ordeal organometal orienteering orling orofecal oscar osmosensing osteocartilaginous othering oughties ouroboros oustering outbreeding outbuilding outcoupling outcropping outerwear outlands outpouching outpouring outswing overbar overcooling overdelivering overdrive overhedging overhunting overling overlining overlogging overparenting overplanning overpotential oversocks overswing overthrowal overtrousers overyielding overzeal owling oxfords oxyradical oysterbed oysterling pachymeninges padkos pageful pailful paintmaking pairbreaking pairforming pajamas paladar palatovelar palmas palmreading pamphleteering pancreas pandal panegyric paneling panful panoply panpipes pansharpening pantalets pantalettes pantaloons paperhanging papermaking parable paracrystal parados paragraphos paralegal parallelepiped paramedic paramotoring paraoptometric paraphily paraphyly pararealgar parascending paratroops paregoric pargeting paries parseval parthanatos partywear pascal pasilaly passcodes passepied pastrymaking patas patchouly paterfamilias pathfinding pathic pathing pathos pathovar pathworking patternmaking pawful pawnbroking payables paytable peacebuilding peacekeeping peacemaking peacemongering peagrowing pear peating ped pedlar peds peening peierls pelike pemetrexed penates pencilmaking pendentive penmaking pennyroyal penpal pentadactyly pental penthos pentobarbital pentothal peplos peptidomimetic pergal perusal pes petakatal petal petrichloral petrodollar petroholic phal pharming phasetrafficking phelloplastic phenobarbital phenotyping philately philharmonic philippic pholas phosphoimaging phosphomimetic phosphorimaging photoaging photoblinking photoceramic photocoupling photocrosslinking photocuring photodarkening photofading photofinishing photoheating photoimaging photokilling photolabeling photolabelling photomosaic photomural photopatterning photoreversal photoswitching phototuning phototypesetting phragmites phrasemaking phytobezoar phytomining pibal pic pickerelweed picokatal picosiemens piemaking pigling pigopoly pigweed pilates pilliwinks ping pingas pinstriping pipeful piperonal pipesmoking piridosal pisces pissabed pisspants pitful placeshifting plagiocephaly plakous planeful planetesimal planimetric plateful platterful playgoing playmaking plaything playwear playwrighting playwriting pleuroperitoneal pling plowing pls plumbing pocahontas pocketful podagric podfading podslurping poes poffertjes pointling poitrinal pokedollar pokeweed polestar policlinic policyholding policymaking poltergeistic polyacetal polyclinic polycrystal polydactyly polyderivative polydrugs polyforming polyhydramnios polyking polyphyly polyradical polysyllable pondweed pons popcorning poplar poppyseed popstar pornstar portal porteous portrayal portugal postprocessing potables potbelly potful potholing pothos pothunting potjiekos potscaping pouchful poundal pous powerboating powerbroking powerlifting powersharing practic preapproval preassembly prebaiting prebuttal preclamping precleaning preclear precoding prediabetes predrinks preincubating preionizes premed premelting premetric premolar prenursing prephilately preplanetesimal preplanning preplating prepotential preschooling presulfiding pretargeting priar prilling primorial princeling printmaking printworks prizefighting prizzly proadjective proclitic proferens prokinetic promwear pronaos pronephros propanal propedeutic propenal propenoic prophases prophesied propheteering proposal proseminar proslambanomenos prosopagnosic protanomaly proteomimetic prothetely protomammal protostar prototyping protuberancies proxenos prybar pseudocereal pseudocoding pseudocoloring pseudocolouring pseudofaeces pseudofeces pseudoideal pseudointellectual pseudologic pseudomonas pseudopotential pseudoradical pseudoscalar pseudosibling pseudostuttering pseudotyping psoas psogos psychobilly psychopharmaceutical psyops psywar pubbing publands puckhandling puddening pudding pufferbelly pullikins pully pulsar pumpkinseed punding punies punkabilly punkling puppeteering pursestring pyjamas pyknic pyramiding pyridoxal pyrosequencing qadar qantar qawwal qindar qintar qiyas qlipothic qsar quadrans quadrantal quadric quadriceps quadriplegic quadrisyllable quadrivial quadruped quadruplexing quaily qual qualificative quantic quarterfinal quartzing quas quasar quasicrystal quasipolynomial quasispecies quasistar quetzal quilling quinquesyllable quintal quisling quiverful quotative raajmahal rabies racebending racecar racewear rackabones radiometal radiopharmaceutical radiopulsar radioscanning radiosounding radiotracking radiowaves ragweed railbed railcar railfanning railful railworks raines raingear rainmaking rainwear rakshas raltitrexed rangering rantings rapeseed rascal rastering ravewear raycasting raytracing realgar reappraisal reapproval reassembly rebar rebinding rebirthing rebrightening reburial rebuttal recessional rechipping recital recombineering recordkeeping recusal redbed redbelly redcedar redshifting redwing reed reedbed reeding refarming referral refreshaholic refusal refutal reggae regimentals registrar rehearsal reimbursal reinking relic relvar remittal remoting removal rendezvoused renditioning renewal repointing reposal repricing reprisal reproval republic requital rereading reredos rereferral res rescattering resequencing reshoring resilencing resourcing respacing ressaldar restauranteering restaurateuring restoral retable retiral retrial retrieval retrocomputing retrogaming retrosexual revers reversal reviewal revisal revival rewetting rezoning rhetoric rhinoceros rial ricemeal ricercar riches rickets ridesharing ridgeling ridgewalking ridgling riesling rillettes rims ring risped rissaldar riverbed rixdollar riyal rms roadbed roastnear robemaking rockabilly rockhounding rockstar rogering roguelike rollbar romanichal rompers rooibos rooigras roomful ropemaking rorqual rosemaling roundheels roundtable rtos rubberwear rubric ruching rugging rulebreaking ruminates rupes russies ryemeal sabal sabellic sackful saddlebred sads safebreaking safecracking safekeeping safranal saggar sahidic sahiwal saibling saic sailboarding sailboating sailmaking saintling sakkos sal salading salal salicional salmanazar saloonkeeping salopettes saltcellar saltmaking saltworks salubrinal salwar sambal sambar samovar sandal sandbar sandboarding sanderling sandfly sanguinivorous sanies sapiens sapling sarking saros sashichigal sassafras satchelful satcomms satcoms saucerful saunders sausagemaking sawbones sawfly scabies scaffolding scally scandal scandalmongering scanties scantling scaphocephaly sceptic sceptically schilling schizodactyly schmear schnapps scholar schooldays schoolteaching schoolwear scimitar scoopful scorekeeping scorpionfly scorpionweed scouting scoutmastering scratchings screencasting screenful screenreading screenwriting scripophily scriptwriting scrollbar sculpting scumming seabed seakeeping sealegs seamstressing seastar seaweed secateurs secobarbital sectoring seedbed seizings selfassembling selfassembly selfdual selfheal selfing selfquenching semiacetal semifinal semiketal semimetal seminar semiochemical semiring semirural semisyllable semitutorial sendal seneschal sepal sequellae serdar series seronegative serovar serval setar sevenless seventysomething sewadar sewering sexaholic sexdactyly sferic shabbos shadowboxing shadowcasting shaheed shalwar shamal shammes shampers shants shaobing shapewear sharwal shaveling sheading shealing shearling sheeling sheepherding sheepshearing sheerlegs sheetful sheeting shegging sherryvallies shieling shikar shillyshallying shipbroking shipbuilding shipful shirting shirtmaking shive shockvertising shoegear shoelacing shoemaking shoestring shoewear shofar shoofly shopaholic shopful shopkeeping shoreweed shoring shortalls shortcoming shortfalling shortribs shotmaking shovelful showjumping shreddies sial sibling siccative sickbed sidebar sideburns sidecar siemens sieveful signboarding signwriting silkwear silverling silversmithing silverweed simar sing sinkerballing sirdar sirkar sisal sitar sizar sked skeevies skeezicks skeiling skelly skeptic skibobbing skimboarding skinful skinnymalinks skiwear skopos skraeling skully skunkweed skunkworks skurfing skyfarming skyful skysurfing skywriting slacklining slapsies sleepdriving sleepwear sleevenotes sleighful sling sliotar slippering slivovic slugabed slurring slyboots smackeroonies smallclothes smallgoods smallholding smalls smartweed smartypants smellies smirting smithing smores snakefly snakeling snakeweed snappily sneakers sneezeweed snookums snootful snowbear snowbilly snowmaking snowmobiling snowshed snuggums soapmaking soapstar sobersides sociative sockful socred sofabed sofar softlifting solebar solubles sombrely sonar songfic songwriting soothsaying sordes sorites sortes sos soukous soundalike soundbar soundpainting soupspoonful sourbelly southing sowar sowbelly spacebar spacegoing spacelegs spaceling spacewear spadeful spalting spamdexing spankies sparable sparagmos sparsening sparsing spearfishing spearphishing species spectatoring speechmaking speechreading speechwriting speedboarding speedboating speedskating speedsolving spelling speltmeal spendaholic speos sphereing sphering sphugmicks spic spinar sping spiroacetal spiroketal spittal spitted spivias splenomegaly spoligotyping spondulic spondulicks spoonbending spoonful sportscar sportscasting sportswear sportswriting spreadsheeting spring springhaas spriting squarial squegging stadial staffing stageful stagewear stakebuilding stakeholding standardbred stapes starling starveling stationkeeping stats steamfitting steelmaking steelworking steelworks steeplechasing stepfamily stepparenting stepsibling stereometamaterial sterndrive sternsheets stickfighting stickweed stieltjes stillsons sting stinkweed stipes stirling stockbroking stockfeed stockholding stockingful stockjobbing stocktaking stolly stomachful stonefly stooly stoozing stoping storekeeping storytelling stovies streambed streetcar streetfighting streetful streetlighting streetwalking streetwear streptomyces strewing string sts studentizing studentships stymphalides subadar subassembly subceiling subcooling subcycling subderivative subdual subedar subfamily subflooring subgoal subheading subinterval sublative sublogic submittal subring subsampling subspecies substring subtable subtelomeric subtopic subvertising suffers sugarally sugarholic sugarolly sugging suitcaseful sukkos sulfiding sulfonal suling sulphonal summerful summerwear sunbed sundae sundial sundowning sundrops sungazing sunglasses sunseed superarrival superbeing supercar superclimbing supercoiling supercollapsar supercomputing supercriminal superdetective superembedding superessive superfactorial superfamily superfatting superficies superfly superglobal superharmonic superhumeral superhumping superlens supermusical superpositioning superpotential supersedeas superspecies superspinar superstitial superstring supertonic supervisal superweed surbahar surfriding surrebuttal surreply surroyal survival suspenders swanling swapsies swaybar sweatpants sweethearting sweetling sweetlips swillking swimwear swing swishing switchgear swordmaking swordsmithing symboled symboling symbolled symbolling symbrachydactyly syndactyly syndic syngas synophrys tabes tableful tablespoonful tableting tabletting tacops takable talebearing talent talipes tallevas talonas talukdar taluqdar tamal tankful tanling tapas tapesponding taring tariquidar tartar tarweed tas taskbar tasselseed tatar tavernkeeping tbs tchervonets tcs tdrs teacupful teamaking teambuilding teaspoonful technocritic technofear technomusic technopoly teddybear teddybears tehsildar teinds telebanking telecomputing telegaming teleheating telemarketing telementoring telepersonals telepresencing teleprinting teleprocessing teleprogramming telesales teleseminar teleshopping teletutoring telly temefos temenos temephos templar tennies tentful tepal terakatal teras tercentennial tertial testbed testimonial tetraarsenic tetraplegic tetrasyllable texas textaholic thanadar thanatos thanksgiving theatergoing thenar thermocycling thermohardening thermophily thermoprinting thermos thial thickening thimbleful thimerosal thing thining thinnings thioacetal thiohemiacetal thiohemiketal thioketal thiomersal thiopental thneed tholos thomas thornproofs threadjacking thresholding thrifting thrips throughgoing thrushling thugging thunking thymos tic ticketing tiddlywinks tiding tidytips tightlacing tights tilemaking tilly timar timbal timbering timekeeping timeserving timesharing timeshifting tinful ting tinsmithing tiswas titanides toastmastering toches toeprinting togemans toileting tokhes tolar tolerancing tollbar tomling toolbar toolmaking toolshed toolsmithing toothypegs topic topos torchmaking tournedos towbar townful townwear toxophily toxotes toymaking tracing trackbar trackbed tracklisting tradewinds trailerful trainful trainspotting tramcar transexual transferal transferral transfugitive transhistorical transmittal trapshooting traversal trayful treadmilling treadwear treatymaking treemapping treggings trendspotting trevally trews tribar tribbing tribunal triceps triceratops trichobezoar trichording tridactyly triens triflic trifluoroacetic trifocals trimmings trional trioval tripos triradical trisyllable trocar troosers troublemaking troupial trousers troutling trowelful truckbed trucking truckmaking truffling truing trunkful trunking trupial trustbusting truthmaking truthtelling tryscoring tsar tsimmes tsores tubful tuches tulwar tumblerful tunesmithing tunic tureenful turmeric turntable turps tweed tweens tweezers twentysomething twilling twining twinling twosies twothirds tymbal tympanites typebar typosquatting tzar tzimmes uae uglies ultradiscretizing ultramarathoning ultraradical underbar underbelly underbuilding underclothes underclothing undercrackers underdrawers underdrawing underfilling underhedging underling undermatching underoos underpainting underpants underpotential underpredicting undersampling undershorts understairs understanding underthing undertrial underwear underwebbing underwing undies unicasting uniped unmakable unmentionables unnecessaries unranking unsatisfiable unschooling unsoiling upas upbringing upheaping upheaval uproar uprootal upscattering upskirting upspring upswimming upswing upwelling urial urinal urnful utas valeral valuables vanful vanitas varchar varifocals vas vaseful vates vaultful veal vectorpotential veepstakes vegies veining ventriculomegaly verballing veritas veronal versal versemaking versioning vertexing ves vespers vetchling viaticals vicar vidding videodating videogaming videomaking videorecording viewsers viewshed viking vinbarbital vintenar violinmaking virial vishing vitals voguing volatiles vortal vortexing vraic vrykolakas vsic vtable vysar wabs wadding wadmal wagonful wainscoting waisting wakeboarding walkies wallcovering wallcrossing wallhacking wally warblefly wardriving warehouseful warfighting wargaming warlording warning warragal warrigal wartweed warwalking watchkeeping watchmaking watchstanding waterbed waterboarding waterlily watershed waterskiing waterweed waterworks wattleseed wattling wavetable waxwing waxworking wayfinding waymarking weal weanling weaponsmithing weatherboarding weatherstripping webbing webcomic webfeed webinar weblogging webring websquatting weightlifting wellbeing wellderly wellies wellspring welly wels werebear westing wheal wheatear wheatmeal wherewithal whimperative whing whipmaking whiskering whistleblowing whiteboarding whitecedar whitefly whitegoods whitening whiteprinting whitesmithing whitewing whiting whitling whoremongering wicketkeeping wikiholic wiking wildcarding wildling willy windfarming windowful windowing windowmaking windpants windspeed winebar wineglassful winegrowing winemaking winetasting wing wingding winkers winnings wintersports winterwear wiremaking wirewalking wireweed witblits witchweed withdrawal witherling witling wolfling womenfolks womenswear woodcarving woodchipping woodcutting woodshaving woodturning woodworking woolens woolgathering woollens woolshed wordbuilding wordprocessing workalike worktable workwear worldbuilding worldling wormseed worryguts worrylines wors wrongdoing wurly xenophanes xenygloxal xiphias xyloketal yaar yachtful yardful yeanling year yearful yearling yellowbelly yellowlegs yellowshanks yestermorning yesteryear yngling yoctokatal yogalates yonks yottakatal ysterbos zaatar zaildar zamindar zeal zemindar zenzizenzic zenzizenzizenzic zing ziplining zoar zoografting zookeeping zoophily zoophorous zorbing zosuquidar zygodactylae zzzs 1 OPV times 5 ORV blazes forwards needs tops winters 10 OR balls days een fridays lots mondays nights noons probs summers 3501 OV aahs abandons abates abends abjects ablegates abodes abords aborts abrupts abscesses abseils abstracts abuses accents accessions acclaims accolades accompts accords accounts accreases acronyms acrospires actions acts acupunctures addicts addresses adds adducts adlibs advances advantages adventures adverts advocates adzes affects affixes affrays affrights affronts ages aggregates aids ails aims airbrushes airdrops airlifts airs ajars alerts aliens aliments allies alloys alternates ambles ambuscades ambushes amels amens amounts anagrams analyses anastomoses anchors anchours angles anguishes annexes annoys anticrosses antics appeals appends applauds appliques apprentices approaches arbitrages arches archetypes archives arcs arms arses assarts assaults assays assegais assents assfucks assieges assigns assists associates asterisks attacks attempts attributes auctions auditions audits augers augurs authors autocancels autoclaves autographs automobiles avails avalanches avaunts awaits baas babbitts babies backbites backchannels backchats backcrosses backfills backfires backflushes backgrounds backhands backheels backpacks backs backscatters backspaces backstitches backstops backstrokes backwaters badgers badges bags baits balances balloons ballots ballparks ballyhoos bams bandages bandishes bands banes bangs bankrolls banks banquets barbecues barbers barbs barges barks barneys barracks barrels barricades bars barters bases bashes baskets bassoons bastinadoes batches baths batiks batters battles baulks bays beaches beacons beagles beaks beams beans beards bears beatboxes beats beds beelines beeps beetles beggars begs belays belches bellies bellows bellyaches benches benchmarks bends benefits berms berries berths besoms bests betas bets betters bevels bevers biases biasses bicycles bids bields biffs biggers bikes bilges billets billows bills bimbles binds binges bins biopsies birches birdies bisects bitches bitchslaps bites bivouacs blabbers blackballs blackboards blackjacks blamestorms blankets blanks blares blasphemes blasts blazons bleaches bleeps blegs blemishes blends blidgets blimps blindfolds blinds blinkers blips bloats blockades blocks blogs bloods blooms blossoms blotches blots blows blowtorches bludgeons blueprints blues bluescreens bluewashes bluffs blunders blurs blushes blusters boards boasts bobbles bobs bobsleds bobtails bodes bodyboards bodychecks bogarts bogeys bogs boils boldfaces bollocks bolsters bolts bombards bombs bonds bones bongs bonks boogies bookends bookmarks books boomerangs booms boos boosts bootjacks boots bops borders bores borgs borns borrows bosses botches bothers bottlenecks bottles bottoms bounds bowls bows boxes boycotts braais brackets braids brails brainstorms brakes branches brandies brands brangles braves brawls breaches breads breakdances breakfasts breaks breasts breaststrokes breedes breeds breezes brews brickfilms bridesmaids bridges bridles briefs brigues bristles broaches broadcasts broadsides brobs brocades brocks broils brokers bronzes broods brooks brooms brownnoses browns bruises brunches brushes bubbles buccans buckles buddies buddles budgets buds buffaloes buffers buffs buggers bugles bugs bulks bullies bulwarks bumbles bumps bunches bundles bungles bungs bunks bunts buoys burdens burls burns burps burrows bursts buses busks busses bustles busts butchers buttfucks buttons buttresses butts buys buzzes bypasses cables cackles caddies cadences cadges cakes calcimines calendars calenders calks calls calluses calms calves camos camouflages campaigns camps campuses canaries cancels candies canes cankers cannonballs cannons canoes cans canters cants canvases canvasses caparisons capers caps captains captures caravans careers cares caresses caroms carpets carpools carps carries cartoons cartwheels cascades caseates cases cashiers casts catalogs catalyses catcalls catches caters catnaps cats caucuses causes cautions caves caws censors censours centerpunches centers centres cesses chains chairs challenges chambers chamfers champions chances changes channels chants chaperones chaperons chaps charges charioteers charks charms charts chats chaunts chaws cheats checkers checkmates checks cheddars cheeps cheers cheeses chevrons chews chibs chicanes chickens chills chimes chinks chins chirps chirrs chisels chits chivies chivs chivvies chocks chomps chops chores chortles choruses chronicles chucks chuffs chugs chums chunks churns cinches cinctures circles circumfixes cites citrates claims clamors clamours clamps clangors clangours clangs clanks clashes classes clatters clauses claws clays cleans cleats clems clerks clicks climaxes clings clinks clips cloaks clobbers clocks clogs cloisters clomps clonks clops closets clots clouds clowns clubs cludges clues clunks clutches coaches coals coauthors cobbles cockblocks cockles cocks cockteases cocoons cocultures coffins cohosts coiffes coifs coils coins collages collapses collars collects collies colors colours combats combines comforts commands comments commissions compacts companies complements composites compounds compresses compromises concaves concentrates concerns concertinas conches concords conditions conducts confects conferences confixes conflicts congas conjectures conjugates conks conquests cons conscripts consents conserves consoles consorts constructs consults contacts contents contests contracts controls converts convicts convoys cooks coops coordinates copays copes copies cops copypastas copyrights coquets cores corks corkscrews corners corpses corrals corsets cosies cosponsors costars costs costumes couches coughs counsels counterattacks counterbids counterchecks countermarches counterpickets counterpoints counterpoises counterpressures counterpunches counters countersigns countersinks counterstains counts couples couriers courses courts covenants cows coys cozies crabs crackles cracks crafts cramps cranes cranks craps crashes craters crates cravens crawls creaks creams creases credits creeps creosotes crescendoes crests cries cringes crinkles crisscrosses croaks crochets cromes crooks crops crosschecks crossclaims crosses crossfades crossgrades crosshatches crosslinks crossposts crossruffs crouches croups crowbars crowds crowns crows crumbles crunches crusades crushes cubes cuckolds cuddles cudgels cues cultures curds cures curls currycombs curses curtains curtseys curtsies curves cushions cuts cyberbullies dabs dadoes dallies damns dams dances dapples daps dares dashes dates daubs dawns dazes deaccessions deadheads deadlifts deadlinks deadlocks deals debauches debits debouches debuts decks declines decons decontrols deconverts decreases decrees decrescendos decyphers deeds defaults defeats defects defies defiles degenerates dekes delayers delays deletes delights delipidates deluges demagogues demands demises denizens dents deposits dequeues descants designates designs desires desks desolvates despatches details detours detoxes deviates diadems diagnoses diagrams dials diamonds diapers dibbles dices dicks dictates dies diets diffs digests digs dimensions dings dinks dins diplomates dips dirks disadvantages discharges disciplines discomforts discords disfavours dishes disillusions dislikes dismounts disorders dispatches displays dispositions disputes dissents disses distances districts ditches dive dives divorces divvies djs dockets docks doctors documents dodges dogears dogfights dogfoods doglegs dogpiles dogs donks dons doodles doorbells dopes doses dotes doublecrosses doubles doubts douches dovetails dowers downgrades downlinks downloads downs dowses dozes drafts dragoons drags drains drapes drawls draws dreams dredges dresses drfs dribbles dries driftnets drifts drills drinks drives drools dropkicks drops drugs drums dubs dumps dungs dunkers dunks duns dusts dwarfs eagles ears earwigs eavesdrops ebbs echoes eclipses edges edits eeps effects eggs egocasts elbows electrophoreses electroplates embargoes embraces empties enamels encores encounters endeavors endeavours ends enfilades engineers ensamples entails entrances entreats enucleates envies epoxies equals errands errors escheats escorts escrows espaliers essays ethoxylates evens evidences excerpts excommunicates excuses exegetes exempts exercises exes exfiltrates exhausts exhibits exits expenses experiments exploits exposes expresses extracts eyeballs eyes fabs facebooks facelifts faceplants faces facets factors fades fadges fallows falls fancies fans farms farrows farts fashes fasts fates fathers fathoms fatigues favors favours fawns faxes fears featherbeds features feddles feedbacks feedforwards feeds feels feints fells fences ferments ferrets ferries festoons fetes fets fetters fettles fiddles fidgets fields figgers fights figures files filetypes filibusters filigrees fillets fills films filters finances fines fingerpaints fingerpicks fingerprints fingers finishes finks firebombs fires firewalks firks firms fishes fishtails fissures fistfights fists fits fixes fizzes flabbergasts flacks flails flambees flambes flames flaps flares flashes flatters flavours fleets fletches flexes flickers flies flings flints flipflops flips flirts flites flits floats flocks floodlights floors flops flosses flourishes flowers flows fluffs flumps flurries flushes flutters flyers focuses fogs folds fools footnotes footslogs forays forbears forces foregrounds forelooks foreminds foreshows forests forfeits forks formats forms fortunes fosters fouls founders fountains fowls foxhunts foxtrots fractures fragments frags frails frames franks frays freaks freecycles freerolls frees freezes frets fricassees fridges fries frigs fringes frisbees fritters frobs frogmarches frogs fronts frowns frowsts fruits fucks fudges fuels fulminates fumes functions funds funnels furloughs furrows fuses fusillades fusses fuzes gads gaffs gaggles gags gains gallops gambles games gams gangbangs gangs gaols gaps garages gardens garlands garners garnishes gasconades gases gashes gasps gasses gates gathers gavels gears gees gelds genders genotypes geranylates gerbils gerrymanders gestures getters gheraos ghosts giggles gigs gillnets gimlets gimmicks gimps gins girdles girds girts glances glazes gleams glimmers glimpses glitches gloats gloops glories glouts glozes glutches gluts glycates gnarls gnars goads gobs gods goldbricks gongs googles googolplexes goos gooses gores gorges gossips gouges gowns grabs graces grades graduates grandfathers grandstands graphs grapples grasps grasses graylists grays greeks greens greylists griddles grids grieves grifts grills grimaces grinds gripes grips grits grizzles groans grooms grooves gropes grosses grouches groups grubs grumbles grunts guarantees guaranties guerdons guesses guffaws guggles guides guillotines gulches gulls gulps gummers guns gurns gushes gusts guts gutters habits hackneys hacks hacksaws hades haemorrhages hafts hallows halos halters halts halves hammers hampers hances handcrafts handcuffs handles hands haplotypes haps harangues harbours hares harms harnasses harnesses harpoons harrows harrumphs harumphs harvests hatches hates haunts havers hawks haws haxors hays hazards hazops headbutts heads heaps hearses hearts heaves hedges heeds hefts heists heliographs helps hemstitches heralds herds hexes hiccups hides highjacks highlights hijacks hikes hilites hinges hinnies hints hisses hitches hits hives hoards hoaxes hobbles hocks hoes hogs hokes holes holidays hollows holsters holystones homebrews homes hones honeycombs honks honours hoods hoofs hooks hoops hoorays hoots hoovers hopes hops horses horseshoes horsewhips hoses hosts hotdogs hothouses houghs hounds housemaids houses hoys hucksters hucs huddles huffs hugs hulls humbugs humours humps hums hunches hungers hunkers hunts hurdles hurries husbands husks hydrates hydrolyses hymns hyperlinks icqs images imagines impacts implants implements imports impresses imprints inboards inches inconveniences increases incrosses incuses indents indexes inebriates infills influences initiates inlays inputs inserts instances institutes insults intakes intercepts intercrosses interdicts interests interfixes interlocks intermixes interrupts interviews interwikis intimates intrigues inventories inverses inverts invites involutes irons isolates issues itches jackals jackets jackhammers jacuzzies jacuzzis jades jags jailbreaks jails jamboks jams japes jarks jars jaunts jawbones jazzes jeers jellies jerks jesses jests jets jetskis jettisons jigs jilts jimmies jinks jitters jives jockeys jogs joins jollies jolts joneses jostles journals journeys joyrides joys juggles jugs jumbles jumps jumpstarts junkets junks jupes justs juts kalsomines karyotypes kayoes kazoos keeks keels keens keeps kens kerns keyboards keys kibbles kicks kickstarts kids kills kilns kinks kipes kips kisses kists kludges knackers knacks knags knapsacks knees knells knifes knocks knolls knots knouts knuckles knurls kotows kvetches labels labors labours laces lacks ladles laffs lakes lames lams lances landfills landmarks lands landscapes lappers laps lapses larfs larps lashes lasts latches laterals lathes lauds laughs launches launders lawyers layers lays leaches leads leafs leagues leaks leashes leavens leaves lectures leeches leers lefts legs lesions lets letters levants levels levers levies libels librates licences licenses licks lifts lights likes lilts limbers limewashes limits limps lines links liquours lisps lists lithographs litters liveblogs liveries lives loafs loansharks lobsters lockpicks locks lodges lofts logs longs looks looms loops lopes lops lords lounges louses louts loves lowballs lows luffs lugs lulls lunches lunges lurches lushes luvs luvz macerates maces machetes machines mackles maeanders mails malfunctions mambos mammocks mandates maneuvers manicures manifestos manifests manoeuvers manoeuvres mans manscapes manufactures maps marbles marches marcots marinades markers marks marmites maroons marshals marvels marvers masks masquerades masses masterminds matches matters mauls maunches mawns meanders means measures medals medevacs medivacs meets megaphones memorates memos menaces mends mentors meows merges merits meshes messages messengers messes metablogs metals metamorphoses metaphrases meters metes methylates metres mew miaous miaows microblogs microcracks microfilms micropatterns microphones microwaves midwives miffs mikes milks mills mimeographs mimes mimics minces mindfucks minds mines minimaxes ministers mints mirrors mirrours mirvs misconducts misconnects miscopies miscues misdeals misfires misfits mishits miskicks mismatches misnomers misprints misrhymes misses missions missorts mistakes mistells misthrows mists misuses mithers mixes moans mobs mocks models moils molders molts moments mongers monitors monkeys monograms monologs monologues moons moors moos moots mops morphs mortars mortgages mortices mortises motions motorbikes motorcycles motors moulds mounds mountebanks mounts mouses mousetraps mousses mouths mows muddles muffles muffs mulches mulcts mules mulls multiplexes munches murmurs murthers muscles muses mushes musters mutinies mutters muzzles myspaces names nanoimprints naps narcs narks narrowcasts natters neaps necks necromances necroses needles neighbors neighbours neighs nerves nests nets neuroimages neuters newspapers nibbles nicks niggles nightclubs nips noises noodges noodles nopes nosedives noshes notches notices noughts nourishes nudzhes nukes nulls numbers nursemaids nurses nutmegs oars objects octavates offers offloads offprints oils oinks oks omens oozes opens opiates options orbits orders orgasms ornaments orphans osmoses outcrosses outlaws outlines outpours outrages outreaches outrides outthrusts overbets overburdens overcalls overdoses overdubs overfalls overflows overhangs overhauls overholds overloads overmatches overnights overorders overpasses overprints overreaches overrides overruffs oversamples oversteers overstocks oversupplies overswings overvotes oxidates ozonates paces packages packets packs paddles paddocks padlocks pads pages pains paintballs paints pairs pales palimpsests palls palms pals palsies pandars panders pandies pangs panics pantomimes papers paps parades paralyses paraphrases parasails parcels pardons parents parks parlays parodies parries parrots parties partitions parts pashes passages passes pastes pastours pasts pastures patches patents pauses pawns peaches peaks peals pearls pebbles pecks pedals peels peeps peers pees peeves pegs peises pellets pens pensions people peoples peps perches percolates perfumes periphrases perks permabans permablocks permits perms peroxides perpends perverts pervs pestles peters pets phials philanders phones photocopies photographs photolyses phrases phreaks picaroons pickaxes pickets pickles picks picnics pictures piddles pieces pies pigeonholes pigments pikeys pillories pills pimps pinches pincushions pines pinfolds pings pinions pinnacles pinpoints pins pinwheels pioneers pipes pirouettes pitches pitters placards places plagues plaits planes plans plants plasters playfights pleasures pleats plies plights plinks plonks plops plots plows plugs plumbs plummets plums pms pockets podcasts podreels points poisons pokes polishes polkas polls polygraphs pomades pommels pongs poniards pookas poops poos pootles pops pores porpoises portages porters portscans positions posits possets postcodes postfixes postmarks posts postulates pots pouches pounds pouts powders powerpoints powers practices praecipitates praedicates praefaces praejudices praeludes praeserves praises prances prangs pranks prates prawns precasts precultures predates predeceases predicates prefaces prefilters prefixes preforms preleases premieres premiers prepositions preprints preps prereads presages preseeds presents preserves presoaks pretties previews previsions prewashes prices prickles pricks prides primes prints prisons privateers privileges probates probes processes processions prods proffers profits programs projects prolapses promises prompts proportions propositions props prospects protests provisions prunes prusiks puckers puddles pukes pules pulls pulps pumps punches punctures punks puns punts purchases purees purls purposes purrs pushes putters putties putts puzzles pyrographs pyrolyses quacks quadruplicates quaeries quaffs quails quarrels quarterbacks quats quavers queefs queens queers quells queries questions quests queues quicksorts quiets quilts quintuplicates quips quires quirts quivers quizzes quotes rabbets races racketeers radges radios raffles rafts rags raids raiks railbanks railroads rains rakes rambles ramps ramraids ramrods rams ranges ranks rants rapes rappels raps raptures rasps rataplans ratholes ratoons rats rattles ravages raves reaches reams reanalyses rears reasons reattempts reaudits rebates rebels reboots rebounds rebrands rebuffers rebuffs rebuys recalls recanvasses recaps recaptures recces receipts recesses recharters rechecks recoats reconnoiters recoopers records recounts recrosses recruits redds redesigns redirects rediscounts redlines redrafts redresses redubs reducts reechos reefs reencounters references refills reforms refrains refunds refurbs regards regens regifts regiments registers regrafts regrets rehabs rehashes reheats reigns reimports reins reissues rejects relays releases relents relishes remainders remakes remarks rematches remedies remises remortgages remounts removes rencounters renders renditions rents reoffers repairs repartees repartitions repasts repeals repeats replevins replies reports reprieves reprimands reprints reproaches reprobates repulses requisitions reraises rescues researches resets reshoots reshuffles resists resorts respects respites responds resprays restarts restrikes rests resumes resyncs retakes retards retcons retests retorts retouches retreads retreats retries retrofits reverses reverts reviews revises revisits revolts rewards rewrites rhymes ribbits ribs rices ricks ricochets riddles rides riffles riffs rifles rifts rigs rimes rings riots ripples rips ripsaws risks rivals rivers rives rivets rmgroups roadblocks roars roasts rocks rollerblades rolls romances romps roofs rooks rooms roops roostertails roosts ropes roquets rorts roses rosins rosters rots roughs rounds roups rouses routers routes routs rows rubs rues ruffles ruins rules rumbas rumbles rumormongers runs ruptures rustles rvs sacks sacres sacrifices saddles safeguards sails saints salaams sallies salts sambas samples sanctions sandpapers sands sandwiches sarcles sarses sauces saunters saves savors savours scags scales scalps scamps scans scapegoats scapes scarfs scars schemes schmoozes schools schusses sclates scoffs sconces scoops scooters scoots scopes scorches scores scotches scourges scouts scowls scows scrambles scrapbooks scrapes scraps scratches scrawls screams screeches screeds screens screeves screws scribbles scrimmages scrimps scripts scrobbles scrolls scruffles scrummages scrunts scruples scrutineers scuffles scunners scuppers scuttles seals seams searches seasons seats seconds secretaries secrets sections seeps sees segfaults seines selects sells semiquotes senses sentences separates septimates sequences serves sets sexes sexts shacks shades shadowboxes shadows shafts shakes shales shampoos shanks shapes shards shares sharps shaves shears sheds sheers shells shelves shepherds sherpas shews shields shies shifts shills shimmers shims shins ships shites shits shivs shoals shocks shoehorns shoots shops shores shotguns shoulders shouts shovelbums shoves showboats showcases showers shrieks shrieves shrouds shucks shudders shuffles shunts shuts shuttlecocks shylocks sidearms sides sidesteps sideswipes sidles sieves sighs sights signals signs sikes silences silhouettes silkscreens simpers simples simulcasts singes sings sinks sins siphons sires sits sizzles skanks skateboards skates sketches skewers skids skies skins skips skirmishes skirts skives skunks skylarks slacks slags slanders slants slaps slashes slates slathers slats slavers sleds sleeps sleighs sleuths slices slights slimes slings slips slipstreams slits slivers sloganeers slopes slots slouches sloughs slowplays slubbers slubs slugs slumbers slums slurps slurries slurs sluts smacks smarms smashes smells smelts smiles smirks smokes smooches smoothes smooths smothers smouches smses smurfs smutches snacks snags snakes snaps snares snarls snatches snecks sneezes snickers sniffs snipes snips snitches snites snookers snoops snoozes snorts snowballs snowboards snows snowshoes snubs snuggles snugs soaks soaps soars sobs socks soils sojourns solaces solders soldiers solvates somersaults sops sorrows sorties sorts sounds sources sours sows spaces spacewalks spades spads spams spangs spanks spans spares sparkles sparks spars spasms spatchcocks spearheads spears speedruns speeds speedskates spellchecks spells spice spiels spies spiffs spikes spills spins spires spirits spits splashes splats splatters splices splints splits sponges sponsors spoofs spooks spools spoons spores sports spotfaces spotlights spots sprains springs sprinkles spritzes sprouts spruces spurns spurs spurts squabbles squalls squares squashes squawks squeals squeezes squelches squibs squicks squints squires squirts squishes squizzes squushes stabs stacks staffs stages staggers stains stakes stalemates stalks stalls stammers stamps stanchions stand stands staples starches stars startles starts stashes states stations staves stays steads steamrollers steels steeples steers stems stents steps stews sties stifles stills stimies stims stings stinks stints stips stirfries stirs stitches stocks stodges stomachs stomps stones stonewalls stonks stoops stops storms storyboards stounds straddles strains strands straps strays streaks streams stresses stretches strides strikes stripes strips strobes strokes strolls structures struggles struts stubs stumbles stumps stums stunts stutters styles stymies subclasses subclones subcultures subgrants subjects sublets submarines submeters subordinates subpoenas subs subsets substitutes subtotals subverts sucks sugars suicides suitors suits sulfates sulfonates sulfurs sulks sulphates sulphurs summonses sumps sums sunburns suntans superglues supershifts superstrates suppers supplements supplies supports surfaces surfeits surnames surrenders surveys suspects sustains swabs swages swallows swamps swaps swarms swathes swats sways swears sweats sweeps swelters swigs swims swindles swirls swishes switches swoops swooshes swots swounds synapses syncs syphons tables tabs tackles tacks tags tails taints talks tallies tangoes tangos tantamounts tapestries taps targets tarries tars tartans tarts tasers tasks tastes tats taunts taws taxes taxies tchicks teams teargases tears teds telegrams telemonitors telephones teleprints teletypes telexes tempers templates temps tenants tenders tenons tenses tensions tensors tests tethers texts thatches thaws therapies thews thieves thimblerigs thinks thins thirds thirls thirsts thralls thrills throbs thromboses throngs throttles throws thrums thrusts thrutches thumbs thumps thwacks thwarts ticks tiers ties tiffs tiles tillers tilts timelines timeouts timestamps tingles tinkers tins tints tipples tips tires tithes toadies toasts toboggans toenails toggles togs toils tolls tomahawks tombs tongs tongues tools toots toplines torches torments torpedoes tosses totals totters touches tourneys tours touts towels towers toys traces tracks trademarks trades trails trains traitors tramples tramps transects transfers transfixes transforms transgenders transits translates transports traps travails travels traverses trays treads treasures trees treks trellises trembles tremors trenches trends trephines trespasses tresses tribotests trices trickles tricycles tries trifles triggers trills trims triples trips trists triumphs troats trobles trolleys trolls troops trots troubles trouts trucks trumpets trumps trundles trusses trusts trysts tubes tubs tuckers tucks tufts tugs tunes turfs turnkeys turns turtles tussles tutors twangs twats tweaks tweets twerks twigs twinges twinks twins twirls twists twitches twits twitters twizzles twonks types umbraids umlauts umps underbets undercasts undercuts underdoses undergrounds underleads underorders underplates underruffs underscores underseals understeers understudies underwaters underwires unfavorites updates upfaults upgazes upgrades upgushes uplifts uploads uppercuts uprates ups upsets upshifts upsurges upsweeps upswells upturns upvalues urges uses vacuums vails vamps vasals vaselines vats vaults vaunts vectors velvets veneers vents verbals verbs verges vermicomposts vests vetoes vials vibes victories victuals vidcasts videocasts videoconferences videos views vignettes visits vitriols voices voids votes vouchers vouches vows voyages waddles wades wagers wages waggons wags wails wainscots waits waivers waives wakeboards wakes wales walks wallers wallops wallpapers wallpresses walls wambles wanders wanes wanks wantons wardrives wards warehouses warisons warranties warrants wars washes wastes watchdogs watches watchlists waterboards waterfalls waterfloods watermarks waters waterskis watusis wavers waves waxes wears weaves wedges weeds weekends weights weirds welches welcomes welds wells welts wends wetnurses wets whacks whales whams wheeks wheels wheezes whelps whickers whiffles whiffs whigs whimpers whinges whinnies whips whirrs whishes whispers whistles whitemails whitewashes whizzes whoises wholesales whoops whooshes whops whores whumps wicks widows wiggles wigwags wikipedias wildcrafts wills wilts winches windmills winds wines wings winks winnows wins wires wiretaps wisecracks witnesses wizards wobbles wonders wones woods woodsheds words works worms worries worships wounds wrangles wreaths wrecks wrenches writhes wrongs xeriscapes xors yachts yacks yandies yanks yaps yarns yatters yawps yaws yellows yells yelms yelps yeuks yields yiffs yips yodels yoiks yokes yomps youtubes yowls zaps zeroes zests zigs zigzags zings zones 3397 O aaliis aartis abaci abacisci abaculi abassis abazis abecedaria abisetaoshis aboideaus aboideaux aboiteaus aboiteaux abomasa abomasi abortogenics abstandsprachen abstracta academics acais acajous acanthi acari acatalectics acataleptics acciaccature acephali acervuli acetabula acinaci acini acroamata acrocentrics acrocephalics acromegalics acropodia acropoleis acropoli acrostics acroteria acrylics actinobacteria actinotrichia addenda adenomata adieus adieux adivasis admen adpeople adwomen adynata adzukis aecia aecidia aedeagi aegagri aeromechanics aesthetics afficionadi afghanis afghanistanis aficionadi agarics agenda agnomina agnostics agogics agoraphobics agoroth agoutis agribusinessmen agrimis agrypnotics ahis ahlspiessen ahmadis aidmen aiolis aircraft aircraftmen aircraftsmen aircraftswomen aircraftwomen aircrewmen airmen airwomen ais akiapolaaus akousmata albarelli albumina alcaics alcoholics aldermen alderpeople alderwomen alembics alexiterics alhajis alibis aliphatics aliyot alkalis allodia alloplastics alluvia almiquis almsmen alphametics alphaproteobacteria altocumuli altostrati alumni alveoli amakhosi amakosi amakwerekwere amapakatis amatis ambulacra ambulancemen ambulancewomen ameli ameloblastomata amenorrheics amenorrhoeics amenta amici amnesics amnia amoretti amphibia anabolics anacoloutha anacolutha anacreontics anaesthetics analeptics analgesics anamonics anaphora anapodota anastasis anasyrmata anathemata anchormen anchorpeople anchorwomen ancone androecia anecdota anesthetics angioleiomyomata angiomata anhidrotics anionics anis annuli anorectics anorexics anorexigenics anosmics antarthritics antasthmatics antependia anthelmintics anthemia antheridia anthocauli anthropophagi antiallergenics antiangiogenics antiarrhythmics antiarthritics antiasthmatics antibiotics antibrachia anticatholics anticholinergics antidiuretics antiemetics antiepileptics antifibrinolytics antifibrotics antifogmatics antigalactics antihelminthics antihemorrhagics antiherpetics antihistaminics antihyperglycemics antileukaemics antileukemics antilipidemics antilithics antiluetics antimicrobics antimitotics antimuscarinics antimusics antimycotics antineoplastics antinephritics antinicotinics antinuclei antiparasitics antipasti antiphlogistics antipruritics antipsoriatics antipsychotics antipyretics antirachitics antirheumatics antiromantics antis antisceptics antiscia antiscorbutics antiseptics antisera antispasmatics antispasmodics antispastics antisyphilitics antithrombotics antitragi antoniniani antra anxiolytics apemen aphasics apiculi apikorsim apis apocalyptics apocolpia apodeictics apopemptics apotreptics apparachiki apparatchiki appletinis appressoria apronsful aprosdoketa aptychi aquaholics aquamanilia aquaria arboreta arcana archaea archaebacteria archaics archbishoprics archebacteria archegonia archei archencephala archentera archmagi areg argumenta arie arithmetics armamentaria armsful arnis aromatics arthritics artics artillerymen ascetics asci ascomata ashkenazim aspergilla aspersoria aspics assemblymen assemblywomen associahedra asterisci asthmata asthmatics astragali asyndeta ataractics ataris atheromata atria attackmen attics auditoria aulics auloi aurar aurei aurochsen ausbausprachen autistics autobahnen autoclitics automata automatics autopodia avocadi awqaf axemen axiomata axmen azerbaijanis azeris babassus babus bacilli backfische backmen backwoodsmen bacteria bacula badfics badmen baggagemen baghdadis bagmen bagsful bahrainis bahus bahuvrihis baijis bailsmen bajaus balanghais baldrics ballotechnics baloi balsamaria baltis bandeaus bandeaux bandsmen bangladeshis barbitoi barfis bargemen bargewomen barmen barramundis barrelsful baryonia baseis basemen basenjis basewomen bashkortostanis basicrania basics basidia basidiomata basipterygia basketsful basotho batmen batsmen batswana batswomen baymen bayous beakersful beaus beaux beedis beggarmen beggarwomen bellinis bellmen beltsful bengalis bergamaschi berimbaus betamimetics bhajis bhangis bhelpuris bhikkhus bhikshus bhindis bicyclics biennia bigorexics bijous bikinis bildungsromane biminis binbashis bindiis bindis binmen binomina bioceramics biofabrics biogenerics biologics biopics bioplastics biotherapeutics bipkwele birdmen birdwomen birianis biriyanis biryanis bis biscottis bishoprics bispectra bitumina bivis blackfeet blastoise blastomata blinis blogoholics bluesmen blueswomen boatmen boatsful boatsmen bogeymen bogeywomen bogymen boilermen bondmen bondsmen bondswomen bondwomen bonesmen bonsais boogeymen boogiemen boogymen booklice bookmen borborygmi bordereaux borzois bostangis bostanjis bottlesful bottomonia boubous bouzoukis bowlsful bowmen boyaus boychildren brachia brachycephalics braggadocii brainchildren brakemen branzini bregmata brennschlusse brewskis brickmen bridesmen brindisis brinksmen broccolis bronchi brothermen bryozoa btus bucketsful buckteeth bucolics bucrania bulbospongiosi bulimics bungus bureaus bureaux burkinis burnous burqinis bushmen bushwomen businessmen businesspeople businesswomen busmen buttinskis buttonmen cabassous cabmen cacti cadis caducei caeca cafetoria calcanea calcanei calculi caldaria caliculi calpollis calpoltin calyculi camaieus cambia cameramen camerawomen camis campi canaliculi cancelli candelabra candirus candrabindus candymen cannolis canoemen cansful cantatrici canthari canthi capitula capitulationer capitulationest capsful caravansarais caravanserais carcajous carcinomata carcinosarcomata carcinostatics cardecus caribous carmen carpi carpometacarpi carsful cartmen cartonsful cartsful carus castellani castrati catacaustics cataleptics catechus catfishermen cathari cathartics catheti catholics catoptrics cattlemen cattlewomen cauldronsful cauris caustics cavalrymen cavalrywomen cavemen cavewomen caxixis cazics cebus ceca cecidia cedis ceilidhean cellaria cellarmen celli cembali centermen centra centremen ceramics cerata cerci cerebella cerebra ceromata cerumenolytics cgis chaddis chadris chainmen chairmen chairpeople chairwomen chalazia chalumeaux chantis chapatis chapattis chapeaus chapeaux chapmen chaprassis characteristics charismata charismatics charizard charmonia charwomen chasmata chateaus chateaux checkweighmen chederim chedis cheilocystidia chemodectomata chemophobics chemoprophylactics chemotherapeutics cherubim chervontsy chessmen chestsful chiantis chiasmata chiasmi chibis chics chilis chillis chillun chimichurris chinamen chis chloralkalis chocaholics chocoholics choleretics cholesteatomata cholesterics cholinomimetics cholis chondrosarcomata choonz chordomata chorioangiomata choriocarcinomata choristomata chromonemata chubis chunnis chuppot churchmen churchpeople churchwomen ciceroni cics cilia cipollinis circumradii cirri cismen ciswomen citharai clansmen classics classroomsful claustrophobics clawfeet cleistothecia clergymen clergypeople clergywomen clerics cleroteria climacterics clinics clitics closetsful clubfeet clubmen clypei coachmen coachwomen coalmen coastguardsmen coatimundis coatis cocci cocksmen coelomata coemeteria coenoecia cognomina cognoscenti colics colloquia colluvia collyria colobomata colonics colormen colossi colourmen coltsfeet columbaria combis comedogenics comedolytics comics comitadjis commata committeemen committeewomen compacta compendia conatus concerti concreta congressmen congresspeople congresswomen conidia conmen conopss consiglieri consortia conspecifics containersful continua contrafacta contralti conundra convolvuli conwomen coquis corgis corgwn coria cornermen cornishmen cornishwomen corpora corpsmen corrigenda coryphaei cosmoi cosmopoleis councilmen councilwomen countermen countertactics counterwomen countrymen countrywomen cowmen cowpeople coypus cpus cracksmen craftsmen craftspeople craftswomen cragsmen crania craniopagi cratesful crayfishermen crematoria creminis crenarchaea crescendi crewmen criminis criteria critics croci crorepatis crossbowmen crura crus crustacea cryptics cryptococci cubics cubicula cuboctahedra cudighis cumuli cumulonimbi cuniculi cunjevois cupboardsful cupsful curricula cyanobacteria cybermen cynganeddion cynics cysticerci cystidia cytostatics cywyddau dactylics dagestanis daggermen daiquiris dairymen dairywomen dalasis dalesmen dalmatics damakzevkis danceaholics dangermen darbaris dashikis data daysmen dcis dcss deadmen deathfics deathsmen decahedra decennia decrescendi defencemen defensemen definienda definientia degus deictics deliria delis deliverymen deliverypeople deltaproteobacteria deltohedra demesmen demis demoi denari denarii denis derrickmen desiderata designata deskmen dessertspoonsful detrita devadasis dhakis dhimmis dhobis dholkis dhonis dhotis diabetics diacaustics diacritics diagnostics dialectics diaphoretics diaromatics diastemata diatomics dicta didactics didicois didjeridus dielectrics diencephala dihedra dilemmata dilettanti dioptrics dipinti diplegics diplococci diplomata dippersful discoboli disequilibria disir disyllabics dithyrambics diuretics diverticula dizis djelis djinnis docus dodecadodecahedra dodecahedra dogmata dogmen dolia domatia domestics doofi doormen doorpeople doorwomen dorgis dormice doubleyous doufus doujinshis douroucoulis drachmai draftsmen draftspeople draftswomen dragomen dramata drapur draughtsmen draughtspeople draughtswomen drawersful draymen dreamchildren dromoi drumsful drusen dsis dumky duodena dupondii durbaris durukulis durzis dustmen dutchmen duumviri dyslectics dyslexics dyspeptics dyspraxics dysthymics dziggetais ealdormen earsful earthmen earthsmen earthwomen ebbermen ecbolics eccentrics ecclesiastics eclectics ecliptics ecocritics ecstatics ecthymata ecumenopoleis ecus eczemata edemata effendis effluvia efis egocentrics eidola eigenspectra einsatzgruppen eisteddfodau elastics electroceramics electrophori elemis elytra emacsen emalangeni embola emboli emeriti emetics emeus emiratis empirics emplastics emporia empyrics emus enanthema encaustics encephala enchiridia enclitics encomia endarteria endemics endobacteria endocardia endocrania endometria endomysia endoplasma endosporia endostea endothecia endothelia endotheliomata enemata enginemen englishmen englishwomen englynion enigmata enokis enterobacteria enterococci entozoa envois ephebi ephemera epicardia epicedia epics epidemics epigastria epileptics epilimnia epimanikia epiphaenomena epiphenomena epirrhemata epis epistemai epithalamia epithelia epithelialisation epitomai epizootics eponychia epsila epyllia equilibria equiseta erastai erhus erics eristics eroge eromenoi errata erratics eruvim erythemata erythrodermata escharotics esophagi eteostics ethanoicer ethanoicest ethe ethea ethnica ethnics ethnika ethoi etuis etyma eubacteria eucalypti eugeroics eukarya eurosceptics euroskeptics eutectics eutrophics everymen everywomen exanthemata excisemen exempla exopoda exotica exotics exozodis explananda expressmen extrema eyen eyesful eyeteeth fabliaux fabrics facemen famuli fanatics fanbois fanfics fantis fasciculi fascina fatawa fedayeen feet feiseanna fellahin fellowmen feminazis femora ferraris ferroelectrics ferryboatmen ferrymen ferrywomen festschriften fianchetti fiaschi fiasci fibromata fichus fics fideicommissa fieldmice fila filipodia filopodia fingersful firemen firepeople firewomen fishermen fisherpeople fisherwomen fishwomen fistsful flagella flagmen flambeaux flambergen flatfeet flatus flavobacteria flittermice flocci flokatis floorpeople florilegia flumina fluoroaromatics flus flyfishermen flymen foci foederati foemen foeti fogous foodaholics footmen fora foramina forefeet foremen forepeople foreteeth foretopmen forewomen forgemen forksful formicaria fornicatoria foundrymen fraenula frangipanis fraus freedmen freemen frenchwomen frenula freshmen freshpeople freshwomen fretmen frigidaria frogmen frolics frontiersmen frontierswomen frontmen frontwomen froufrous frusta fsherwomen fuglemen fulcra fumetti fungi funnymen furfen fyrdmen gabbais gadgetbahnen galge gametangia gametogonia gammaproteobacteria ganglia ganglioneuromata gaohus gardai gardensful garibaldis garlics gasmen gastrinomata gastrocnemii gastrokinetics gateaus gateaux gatemen gatewomen gdis geese geis gemachim geminis genera generics genii genioglossi genizoth gennelmen gentlemen gentlepeople gentlewomen geodesics geriatrics ghazis ghiblis gilgais gilgulim girlchildren gladioli glassesful gleemen gleewomen glioblastomata gliomata glissandi glomeruli glovemen glovesmen glutaei gnaborretnis gnostics gnus gobsful godchildren godis gomesis gonadoblastomata gonangia gonococci gonopodia goodmen gooris gothics gouramis gownsmen goyim grana grandchildren granthis granulomata gravamina grocerymen groomsmen groszy groundsmen groundswomen guardsmen guardswomen guarris gubernacula guembris gunbais gunmen gunwomen gurrnkis gurujis gurus guslis gutsful gwarris gymnasia gynoecia gyri gyroradii hackmen hadhramautis hadjis hadramautis haematomata haeretics haflis haiku haikus hajis hajjis halachot halachoth halfpence halloumis hallucinogenics haloaromatics halobacteria halonuclei hamantaschen hamantashen hamentaschen hamentashen hammermen hamuli handakuten handcraftsmen handicraftmen handicraftsmen handsful handymen handypeople handywomen hanghang hangmen happis haptonemata haptotropics hapukus hardmen hardwaremen harkis harmonics harvestmen hassidim hatchetmen hatchmen hatsful hausfrauen hausfraus haustoria headmen headsful headsmen heartsful hebrephrenics heliobacteria helminthics helmsmen helmswomen hemangiopericytomata henchmen henchpeople henchwomen hentai hepatics hepatomata hepatopancreata heptahedra heptaparallelohedra herbaria herdmen herdsmen herdswomen heretics heroa herrenvolker hetairai heteroaromatics heteroclitics heterocyclics heterospecifics hetime heuretics hexahedra hexecontahedra hibachis hibernacula hieroglyphics highlandmen highmen highwaymen highwaywomen hillsmen hindian hindus hindustanis hippocampi hippopotami hirdmen hispanics hitmen hitwomen hodmen hokkus holyhedra homunculi honoraria honorifics honus hordeola hormogonia horsemen horsewomen hosen houdinis houndsteeth houris housebois housemen housesful huhus humeri huntsmen huntspeople huntswomen husbandmen hydrocholeretics hydroecia hylics hymenia hypaspistai hypemen hyperbata hypergeometrics hypergraphics hypernuclei hypnotics hypochondria hypocoristics hypodermics hypogaea hypogea hypoglycemics hypomanics hyponychia hypoptila hypothalami iambics icemen ichnogenera ichthyosauri icosahedra icosidodecadodecahedra icosidodecahedra icositetrahedra idiomata idlis idola idyllics ignorami ignostics ilea ilia imartis imbroglii immunotherapeutics imparisyllabics impedimenta imperia impluvia imprimantur impromptus improvisatori improvisatrici inconnus incubi incunabula indolics indusia infantrymen infodemics infographics infoholics infraphyla infundibula inia inkosis innuendis inorganics inradii inss insulinomata intermetallics interstitia interwebz intrichi inukshuit inuksuit invadopodia ious ipus iqalummiut irishmen irishwomen ironmen irukandjis ischia ischiocavernosi isocola isometrics isopycnics isostatics israelis isthmi italics ithyphalli izibongo izimbizo izinyanga jabirus jaborandis jackmen jaguarondis jaguarundis jalfrezis jambeaux jambus jamdanis jarsful jazzmen jazzwomen jehadis jehus jejuna jellia jerseymen jhampanis jiaozis jidaigekis jigglypuff jihadis jinnis jivanmuktis jndis jnis jokis josekis journeymen journeypeople journeywomen jtwis judogis jugsful jugula jujus jukskeis junkmen jurymen jurywomen jus kabaddis kabassous kaffeeklatschen kagus kahaus kaikis kaisekis kajis kakis kalamkaris kana kangris karahis karelis kashmiris kathakalis katis kauris kazakhstanis kazis kegsful keiretsus kemonomimis kendis kepis keratoacanthomata kerugmata kerygmata kettlesful ketubbot ketubot khachapuris khasis khatris khazis kibbutzim kibeis kidsmen kielbasis kikois kimono kincajous kingsmen kinkajous kinocilia kinsmen kinspeople kinswomen kippot kipunjis kiwis klansmen klanswomen kleroteria klezmorim klismoi knifemen knifesmen kobzari kohlrabis kokoretsis kolkhozy kolkozy komondorok kongonis kooris korun kouroi kourotrophoi kovshi kowhais krais kroner kronor kronur krooni kudus kudzus kuffar kufis kukis kukris kukuis kulfis kulichi kumazemis kunstlerromane kurdistanis kuvaszok kuwaitis kyus labara labella lacemen lactobacilli lactococci lagerstatten lahmajous laics lais lambics lamborghinis lamellipodia lamellopodia lanais landaus landmen landsmen lantibiotics lantzmen lasagne lassis latera lathis lati laundrymen laundrywomen lawmen laymen laypeople laywomen leadfeet leadsmen leathermen lebensraume lebenswelten leetmen legendaria legmen lei leiomyomata leiomyosarcomata leis lemmata leprosaria lepta leptocephali leptocystidia leptomata lesspeople lettermen leucodermata leucomata leukomata leva levermen lexeis lexica leylandiis libretti lice lieder liegemen liegewomen liftmen lightermen lightweighter lightweightest linemen linesmen linespeople lineswomen linkmen lire lisente litai litchis lithophyta litui liulis liverymen lizardmen lobstermen lobsterwomen loci locomen loculi logaoedics logia logics logistics lolis longbowmen longshoremen longshorewomen loreleis loti lotis lovechildren lrne luaus lubki lulus lumbermen lumina lunatics lungis lungsful lustra lymphangiomata lymphatics lymphoedemata lymphoepitheliomata lymphomata lymphonodi lyrics maare macaronics machiavellis machzorim macra macroconidia macronuclei madmen madwomen maestri mafiosi maggidim magi magsmen maguaris maharanis maharishis mahmudis mahzorim mailmen mailpeople mailwomen makis makuta mala malayalis malibus malihinis mallei malleoli mallus maloti maltmen mamudis manatiq manchildren manchus manicous manitous manjis mankinis manteaus manubria maoris mapaus maqamat marabous maravedis maria mariachis mariengroschen markkaa markmen marksmen markspeople markswomen marsupia martinis martyria mashgichim masseboth mastercraftsmen mastics mastmen masus matatus matrics matronymics matsuris matzot matzoth mausolea maxima maxis mazandaranis mazanderanis mazzeboth mbaris mealmen meatmen mechanics media mediastina medics mediostrata meese megafeet megalopoleis megalopoli megapoleis megara megatsunamis meharis melancholics melanomata melics melismata melodramata memoranda men menaia menchildren meningococci menisci menologia menoroth menschen menstrua menus meowth merchantmen merchantwomen merchildren meristics mermen merpeople merwomen meseraics mesocephalics mesoclitics mesonephroi mesotheliomata metacarpi metacentrics metadata metaheuristics metallics metalogics metalorganics metaphysics metapodia metatarsi meticais metics metoeci metrics metropoleis metropolia mewtwo mezuzot mezuzoth miasmaler miasmalest miasmata mice microcephalics microconidia microcosmoi microelectronics microemboli microminis micromosaics micronuclei microphenomena microsporidia microvilli mics middlemen middlewomen midis midshipmen mikveot milieus milieux militiamen militiawomen milkmen milkwomen millenia millennia mimetics miniepics miniloci minima minis minshukus minutemen minyanim mipss misandrics miscellanea missingno mitochondria mitzvot mitzvoth mmapis mmis mnemonics mochis mocktinis modacrylics modica moduli modulini mogwais mohelim mokihis momenta monastics moneymen mongeese monoaromatics monogenics monokinis monophyla monosyllabics monsignori moolis moonchildren moose moratoria morioris moronis mortaria mortarmen mosaics moshavim moshavot motormen motorsportsmen mottis mousambis mouthsful mss mucolytics mueslis muftis mugsful muhajireen muhajirun mujtahidun multiethnics multiferroics munis muri musaea musclemen musclewomen musculotropics musea musics muskoxen mussulmen mutanda muthammanis muumuus muzungus mycelia mycobacteria mydriatics myelomata myocardia myocloni myomata myopics myrmecodomatia mystics mythoi mythopoeics myxobacteria mzungus nacroleptics naevi nanobacteria nanoceramics nanocosmetics nanotori narcissi narcoleptics narcotics nasturtia natatoria natriuretics nauplii nautili nazis nebulosi necropoleis needlewomen nematics neostriata neoterics nephritics nephroi nestohedra netsful neura neurocrania neuroepithelia neurofibromata neurofibrosarcomata neuroleptics neuromata neurosarcomata neurotics nevi newsmen newspapermen newspaperwomen newspeople newswomen nexus ngonis nidi nidopallia niggaz nighantus nightwatchmen nightwatchwomen nikis nilgais nilghais nimbi niqaab nitroaromatics nitrobacteria nivkhi noblemen noblewomen noemata noetics nonacademics nonalcoholics nonanalgesics nonanesthetics nonantibiotics nonaromatics nonasthmatics nonceramics noncharismatics nonchildren nonclergymen noncritics nondiabetics nondyslexics nonepileptics nonequilibria nonetti nonis nonmen nonmystics nonnarcotics nonneurotics nonpeople nonphobics nonplastics nonpsychics nonpsychotics nonrepublics nonsalesmen nonsceptics nonschizophrenics nonskeptics nonwomen nonworkaholics noobz nootropics nordics norsewomen northmen nostalgics nostra noumena novelle noyaus noypis nozzlemen ntamanis nubcakez nuclei nucleoli nuis nullisomics numina nunavummiut nunchakus nuristanis nurserymen nurserywomen nychthemera nycthemera nyepis nymphaea nymphomanics oarsmen oarswomen obeli obis oboloi occipita oceanaria ocelli octahedra octics octopi oculi odea oeconomi oedemata oesophagi oestri oidia oilmen okapis olisboi omasa ombudsmen ombudspeople ombudswomen omegala omenta omicra ommatidia omophoria omphaloskeptics onagri oncomice oneirocritics onia ooecia oogonia oolitics opera operanda opercula opia optics optima orangemen orangewomen orchardmen organics organometallics oribis origamis orthorexics orthotetrahedra orthotics oscula osmotica ossa osteosarcomata ostinati ostraca ostraka otakus otalgics otoconia ouakaris ouroboroi ous outdoorsmen outdoorswomen ova overmen overweeningness owsen oxen oxymora oxytocics oystermen pacemen pacis packmen paczkis pagatis pagesful pagris paharis pailsful paise pakistanis pali palladia pallia pancreata pandemics pandemonia panegyrics paninis panjabis panni pansful panthea pantrymen paparazze paparazzi pappi papyri parablepsia parabolics paradigmata paragangliomata paralytics paramecia paramedics paramoecia paraoptometrics parapegmata paraphilics paraphyla paraplegics parapodia pararescuemen parasitics parasympatholytics parasympathomimetics paregorics parhelia parsis parvenus passersby pastophori pastramis patagia pathics patrolmen patrolwomen patronymics pawsful peevishlyer peevishlyest pelmenis pence pendula pengulus penii penmen pentahedra penwomen pepperonis pepsis peptidomimetics pericardia peridia perihelia perikarya perinaea perinea perineuria perioeci periostraca peripatetics peripli periploi peris perithecia peritonaea peritonea permutohedra pessima petroholics petrolea pfennige phaenomena phaeochromocytomata phalli phantasmata phaseoli phenolics phenomena pheochromocytomata philerass philharmonics philippics philodendra philtra phis phobics phocomeli phoeti photini photobacteria photomosaics photostimuli phthisics phyla phytotelmata pianissimi pianoforti picalillis piccalillis pichvais picocyanobacteria pics piemen pierogis piewomen pigsnie pikachu pikachus pikemen pilaus pilgarlics pili pilotis pinealomata pineoblastomata pineta pipemen pipesful pirogis pis pitchmen pitchwomen pitmen pitohuis pitsful pivotmen pizze pizzelle placemen plainclothesmen plainsmen plainswomen plana planaria planesful planetaria plasmalemmata plasmodesmata plasmodia plastics plateaux platemen platesful plattersful platypi platysmata plectra plena pleopoda plethra pleura pleurocystidia ploughmen plowmen pluralia pneumococci pocketsful pocula podagrics podia poleis policemen policepeople policewomen policlinics pollinia poltergeister poltfeet polyacrylics polyaromatics polyclinics polycyclics polyhedra polymethacrylicer polymethacrylicest polyphenolics polypi polyptota polysomics polyspectra polysyllabics polytechnics polyzoa polyzoaria polyzoics ponceaus pooris portmanteaus portmanteaux portmen positronia possibilia postcrania postmen postpeople postscripta postulata postwomen potawatomis potmen potpourris potsful poultrymen poultrywomen pracademics practica praefixa praemia praenomina prahus prediabetics prefixa premia presidia pressmen pretecta primordia probiotics problemata problematics probosci procambia proclitics prognostics prokinetics prolactinomata prolegomena pronuclei prooemia propaedeutics prophylactics propionibacteria proscenia prosciutti prosopagnosics prospermatogonia prosthetics protei proteinomimetics proteobacteria proteomimetics prothalli prothallia protonemata protozoa protreptics proventriculi proxeni proxenoi prutot prytanea prytaneis psalteria pseudanthia pseudopodia pseudothecia psoai psoi psus psychedelics psychics psychoneurotics psychotics psychotomimetics psychotropics ptarmics pterygia publics pudenda puerperia pulaskis pulik pulis pulvini puncta punjabis punnais puris purlieus putamina putti pygidia pyknics pylori pyodermata pyramidia pyrectics pyritohedra pyroelectrics pyromantics pyrosoma pyrotics pyrrhics pysanky qadis qataris qawwalis qazis qindarka qinghaosus qis quadratics quadrennia quadrics quadriplegics quadrivia qualia quanta quantics quarkonia quarrymen quartics quasimomenta questmen quindecemviri quinquennia quinqueviri quintics quipus quiversful quora rabbis radarmen raddlemen radialia radii radiolaria radioli radiomen raftsmen ragmen ragus railwaymen rajkumaris rakhis rakis rakshasis rami ranchmen ranchwomen ranis ranunculi rapakivis rastamen raviolis reais rebetika recta recti reddlemen referenda regatte regimina regna reguli reikis reinsmen relata relics remaindermen repairmen repairwomen representamina reptilia republics rescuemen residua retiari retiarii retinoblastomata rewritemen rhetorics rheumatics rhinoceri rhinoceroi rhizobacteria rhizobia rhombi rhombohedra rhonchi riflemen riflewomen rishis rmis roadmen rodmen rokurokubi romantics rondeaus rondeaux roomsful ropesmen rosaria rostis rostra roundsmen rsis rttis rubrics ruckmen rumina rusalki rusalky russkis rustics saamis sabzis sacella sacksful sacra sacraria sadgurus sadhus saepta safaris saffis sahaba sahrawis saics sailormen sailorwomen saimiris sajous saketinis sakkoi salamis salarymen salesmen salespeople saleswomen saliceta salivaria salmagundis salmis saltarelli salukis saluretics salvis samis sampis samurais sanatoria sandmen sandwichmen sanitaria sanitoria sanseis santokus sarangis sarcomata sarcophagi saris sartorii sashimis sastrugi satchelsful satgurus saucersful saudis sawteeth scallopinis scaloppini scenaria scenarii scenics sceptics schemata schematics scherzi schismatics schizophasics schizophrenics scholastics scholia schoolchildren schoolmen schwannomata sclerotia scoopsful scotchmen scotchwomen scotomata screensful scriptoria scrota scrubwomen seamen seamice seaquaria seedsmen selectmen selectwomen semantra semata semiautomatics seminomata senitis senryus senseis sensilla sephardim sephirot sephiroth septa sequuntur sera seraphim seris servicemen servicepeople servicewomen sestertii sewermen sexaholics sferics shakuhachis shamen shangani shaomais shearmen sheep sheepmen sheetsmen shekalim shellfishermen shentlemen sheqalim sherwanis shieldmen shieldsmen shikaris shinobis shipmen shipsful shittim shiurim shkotzim shochetim shofroth shopaholics shopmen showmen shrewmice shtetlach shuftis sicilici sidemen sidesmen sievesful sifus sigla signalmen signalwomen signori signorine silkmen silkwomen silphia similia simulacra sinfonie sistra skeptics skiesful skis skus slaughtermen smectics snafus snaggleteeth sne snorlax snowmen snowpeople snowwomen sociopathics soferim solaria solatia solidi somalis somata somnolytics somonis songfics soporifics soredia soum soundmen sous souvlakis sox spacemen spacewomen spadesful spahis spastics spearmen spearsmen spearwomen specifics specimina spectra spectrahedra specula spendaholics spermatagonia spermatogonia spermatozoa spheria spics spicula spinosauri spissati splayfeet spokesmen spokespeople spokeswomen spoonsful sporangia sporogonia sportsmen sportspeople sportswomen spreiten spumonis sputa stadia stamina staphylococci statesmen stateswomen statistics status staus steamboatmen steersmen stegosauri stemmata stepchildren stepgrandchildren stereocilia sterigmata sterna steroidogenicer steroidogenicest stewardii stickmen sticksmen stigmata stigmatics stimuli stockingfeet stockmen stoics stomata stomia stomodea storemen stotinki strangeonia strata strategi strati streetsful streptococci stromata strongmen strongwomen stuntmen stuntpeople stuntwomen styli stylobata styptics subashis subepithelia subgenera subharmonics sublemmata sublogics submenus subphyla subregna subsellia subspectra substrata subtaxa subtonics subtopics succedanea succubi sudokus sudorifics sufganiyot sugarmen suitcasesful sulci sulus supercilia supercolossi supercontinua superharmonics supermen supermice superminis superpeople superphenomena superphyla superplastics superregna supersalesmen superstimuli superstrata supertaxa supertonics supertori superwomen suppedanea supraspinati suprema surfaris surilis surrogata sushis suzanis svarabhaktis svengalis swagmen swamis swatis sweese swingmen switchmen swordsmen swordswomen sylis syllabi syllabics symbiotics sympatholytics sympathomimetics symposia synandria syncitia syncytia syndics synoptics syntagmata synthetics syphilitics tableaus tableaux tablesful tablespoonsful tabus tacksmen tactics tafoni tagmata taijis takfiris talesmen tali talismen tallymen talwege tankinis tanookis tanukis tapus tarakihis targumim tarsi tarsometatarsi tatakis tatamis taus taxa taxis taxmen taxwomen tchervontsy teacupsful teaspoonsful technics technocritics technopoleis tecta teeth teethbrush tefillin tegus telebureaus telebureaux teledus telencephala teletsunamis temenoi tempi tenderfeet tendus tengus tentoria tentsful tepidaria teppanyakis terais terata teratogenics teratomata teriyakis termini terraria tessiture tetani tetrahedra tetrahemihexahedra tetralemmata tetramethylammonia tetraplegics tetrevangelia teus textaholics thais thalami thalis thalli thalwege thankyous thecia thematics theorics thermoplastics thesauri thesaurusi thimblesful thingmen tholoi thrombi thugz thymi thyrsi tics tikis tillermen timbermen timpanis tinamous tinmen tinsful tintinnabula tipis tiramisus titis titmen titmice tocolytics tofinus tohubohus tokajis tolais tomenta tonics topics topmen topoi toponia toquis torchmen tori torsi tortonis townsful townsmen townspeople townswomen toxotai toymen toywomen trackmen tradesmen tradeswomen tragi transgenics transmen transwomen trapezia trapezii trapezohedra trashmen traumata travaux trax traysful tremata trenchermen triacontahedra tribesmen tribeswomen trichobothria tricola triennia triggermen trihedra trikinis triskaidekaphobics triskelia trispectra trisyllabics tritocerebra triumviri trivia tropics trousseaus trousseaux trowelsful truchmen trumeaus tsarevichi tsitsiyoth tsotsis tsunamis tucuxis tuis tulkus tumblersful tumuli tunics tureensful turmerics tuttis tutus tympana tyrannosauri tzatzikis uakaris ubermenschen ulstermen ultimata umbilici umlaute umus uncini underclassmen understrata underworkmen undulipodia unis univocalics unpeople untermenschen upperclassmen upsila uraei uranisci uredinia urnsful ursprachen urtis ushabtis ushabtiu uteri uterotonics utilitymen uzis vacua vagi variora vatus vaus vela veniremen ventis ventriculi verfremdungseffekte vestrymen viatica vicechairmen vici victoriati videmus villi vincula virelais virgalieus viri virii virostatics virtuosi viscera vivaria vizslak vleis vodkatinis vomitoria wadis wagemen wagonsful wahabis wahhabis wais waitpeople walis walkthrus walrusser wanderjahre wangteeth wapitis waragis warehousemen warehousesful waris wasabis washermen washerwomen washwomen watchmen watchwomen watermen wazungu wealdsmen wealsmen weathermen weatherpeople weatherwomen webcomics webfeet weighmen welchmen welshmen welshwomen weltanschauungen whalemen whanaus wheelmen whipmen wikiholics wikis wildmen windowsful wineglassesful wingmen wiremen wolfmen women wonderchildren wonderwomen woodlice woodmen woodmice woodsmen woodswomen workaholics workingmen workingwomen workmen workpeople workwomen wunderkinder xanthelasmata xanthogranulomata xanthomata xenobiotics xenodocheia xenodochia xenophobics xerophytics xiphiplastra xiphisterna xiphopagi xis xoana xus xylostromata xysti yachtsmen yachtspeople yachtswomen yadim yagis yagouarondis yagouarundis yaguarondis yaguarundis yalis yandere yangmeis yaravis yardmen yarramen yashikis yearmen yearsmen yeggmen yemenis yeomen yeowomen yeshivot yesmen yetis ynambus yoginis yogis yonis yorkshiremen yorkshirewomen yous yuzus zadruge zafus zaibatsus zakouski zakuski zambonis zamindaris zamis zanzibaris zastrugi zebus zeitgeister zemindaris zemis zemstva zeppole zetetics zeugmata zionazis zlotych zoa zoili zonohedra zoocytia zoodendria zooecia zoosporangia zoris zucchinis zugzwange zulus zunis zuzim zuzzim zyga zygantra zygomata zygomatici 5 GP bating excepting excluding including regarding 2 GR awing bleeping 4 U and or versus vs 1 B between 1 F from 4 I for in of on 2 PRV affor nigh 23 PR abaft aboard aboon afore agin agyen along alongside apart astride atop ayein ayen ayond ayont below beneath besides endlong forbye imell notwithstanding throughout 2 PV belong except 75 P abaht aboot about acrost aftah afther against ago ahn aka amid amidst among amongst anear apres arter at athwart atwix befo behither bencath benorth beside betune betwixt bewest bove by chez circa down during ere faw fer foreby furth gainst intiv into mauger neath off offa onto ontop out outta outwith per pon pre rel since than thru til toward towards twixt umb umbe under until up upon via wid wif with within without wiv 1 Q as 1 T to 17 RV abraid abroach bareback belive bereft betides caught chugalug dooced hyar ish multiply please pray rather sic whither 644 R aback abask abed ablings ablins abloom aborad abread abreast abuilding aburst acapella acock acockbill adagissimo adance afar affrettando afield aflare afloat afoot aforehand afoul afresh aft afterhind afterward afterwards again agewise aglee agley ahead ahold ahorseback aht ahull aiblins aight ajog ake aland alee aliter allargando allegretto allegrissimo allus aloft already also altogether always alwuz amain amidship amidships amock amok amuck anaphorical ance andantino anew anglewise antispinward anyhoo anyhow anymore anyplace anyroad anyway anyways anywhen anywhence anywhither anywho anywise apace apiece aport approx apriori arco arguendo aright arriswise artwise asahp asaic asap ashore assai assward asswards astraddle astray asunder aswell aswirl atcha athwartship athwartships atiptoe attacca aways aweather awhile awluz ayelp babywise barebacked barwise batspit battleward bce beachward beachwards bedeen bedward bedwards beforehand beggarwise belowdecks bendways bendwise betime betimes bimeby boldlier bookwise boxwise breadthways brushwise bulkwise businesswise capriccioso careerwise carpetward cashwise catwise certes chairward chevronwise churchward citywards classward cloudwise colorwise colourwise combwise comodo contrariwise cornerwise crescentwise crosslots crossways cuntward cupboardwise cupwise cyberstyle daint deasil deff deffo defo deosil deskward deuced disregardless divint doggo dogwise dolente dollarwise doosed downcourt downright downsection downwards downwind dreamward dreckley dropwise duncy eastwards ectad edgeways edgewise eliminable elsewhen elsewhence elsewhither elsewise endlang endways endwise enside entad ergo espressivo etc evar evermore everso everyplace everytime everyway everywhen everywhere facedown facefirst faceup featurewise fesswise flatwise foodwise foothot forasmuch forevermore fornigh forrard forthwith forthy freshlier frice fulltime furioso furthermore gatewise goalside goalwards godwards golfwise greenward groinward growthwise guisto halfway harshlier harshliest headforemost headling healthwise hellward hence henceforth henceforward hereabout hereabouts hereat hereaway hereby herein hereinabove hereinafter hereinbefore hereinto hereinunder hereish hereof hereon heretofore hereunder hereuntofore hereupon herewith hillwards hither hitherto hithertofore hoo hotelward however howso howsoever howsomdever iceward iinm imprimis inbye inchmeal indeed indeedie indeedy indoors infra insofar insomuch instanter instead inwards iow iwis jailward januarys jeah jildi jildy lacrimoso lamentoso landwards langsyne lapward lashwise leastaways leastways leastwise leftwards legerrio lief likewise limbmeal literatim loadsa longways longwise looard lookswise loverwise madonnawise maestoso makai manwise mapwise marcato mauka mayhaps mebbe mebby memberwise midbite midbow midleap midperformance midphrase midplay midpursuit midrun midset midships midstep midstretch midstride midtrip militarywise mirrorwise moar modificatory moneywise moonwise morendo moreover mouthward mouthwards natch nathless nauther nebber nerehonde nevah never nevermore nevertheless nobbut nohow nonetheless noo nopers noplace northwards not nowadays noway noways nowheres nowhile nuch obvi obvs offkey oft often oftener oftenest oftentime oftentimes ofter oftest ofttimes once onwards oop orad othertimes otherways otherwhere ottava outbye outwards overleaf pagemeal palewise parkward partway passim perchance perforce perhaps peripherad permyriad phantomwise phoneward phonewise pianississimo pickaback piecewise plankwise plantwise policywise portato posthaste praps precipitato profitwise pronto qua qualitywise quantitywise quindicessima quite rathering ratherish redhanded regretable riffwise rightwards ritardando roofward sackwise sacrad saddlewise saleswise saltirewise saturdays scarfwise scilicet scissorwise scotfree scrollwise seasonabliest seawards secus seldom seldomer seldomest selfward sempre seriatim shelfward shieldwise shipward shipwards shirtwise shopward shopwards shorewards shuttlewise sidewise sightwise simpliciter sinkward sizewise skyward sleepward sleepwise slopewise slowlier slowliest smorzando snakewise someday somehow someplace sometimes someway somewhat somewhen somewhere somewhither somewhy soonish sooo soooo soundwise southwards spaceward spadewise spinward spoonwise stageside starwards stationward sternwards storeward straightforth subito sundays sunwards sunwise supra swithe tableward tablewards tablewise talewise tastewise taxwise teamwise tentwise thataway thence thenceforth thenceforward thenceforwards thereabout thereabouts thereafter thereagainst therearound thereat thereatop therebefore therebetween therebeyond thereby therefor therefore therefrom therein thereinafter thereinbefore thereinunder thereof thereon thereover therethrough therethroughout theretofore thereunder thereupon therewith therewithal thighward thisaway thither tho thor though thrice thur thursdays thuswise timewise tomorn too townwards toyear trafficwise transitionary treeward truthwards ttr tuesdays tunicwise tuskwise twelvefold twice unawares unbeknownst underseas unoften unwares upcourt upriver upsection upward upwards valleywards varry verrry vicibus videlicet visionwise viz waterward waterwards weatherwise wedgewise wednesdays weightwise westwards whar whatsay whence whenceforth whencever whenever whensoever whereabout whereafter whereby wherefor wherein whereinto wheresoever whereunto wherever whitherever whithersoever whitherward whyever whysoever widdershins widelier wideliest withal withershins withinside yance yeah yeap yeppers yer yestereve yestermonth yfere yis youthward yowzah yuppers yus zillionfold 16377 V abacinate abacinates abalienate abalienates abands abase abases abash abashes abastard abastardize abastardizes abastards abbreviates abdicate abdicates abduce abduces abduct abducts abear abears aberrate aberrates aberrs aberuncates abet abets abhor abhors abide abides abies abirritate abirritates abite abjoint abjudge abjudges abjudicate abjudicates abjugates abjure abjures ablactate ablactates ablaqueate ablaqueates ablate ablates ables abligates abludes ablute ablutes abnegate abnegates abnormalise abnormalises abnormalize abnormalizes abolish abolishes abolitionize abolitionizes abominate abominates abomines abought abound abounds abrade abrades abraids abrases abray abreact abreacts abrenounces abridge abridges abroaches abrogate abrogates abrook abrooks abscind abscinds abscise abscises abscisses abscond absconds absents absinthiate absinthiates absists absolue absolutise absolutises absolutize absolutizes absolve absolves absorb absorbs absquatulate absquatulates abstain abstains absterge absterges absterse absterses abstractifies abstractify abstrict abstricts abstringe abstringes abstrude abstrudes absumes abut abuts abuy abvolate abvolates aby abye abyes academicize academicizes academize academizes accede accedes accelerates accend accends accentuate accentuates accept accepts accesses accessorise accessorises accessorize accessorizes accinges accites acclamate acclimate acclimates acclimatise acclimatises acclimatize acclimatizes accloy accloys accoasts accoil accoils accolls accommodate accommodates accompanies accompany accompanying accomplish accomplishes accorporates accosts accouche accouches accouple accouples accourages accourts accouter accouters accoutre accoutres accoys accredit accredits accresce accresces accretes accriminate accriminates accroach accroaches accrue accrues acculturate acculturates accumbers accumulates accurize accurse accurses accuse accuses accustom accustomize accustoms acerbates acervates acetifies acetify acetize acetizes acetylate acetylates achieve achieves achieving achromatise achromatises achromatize achromatizes acidifies acidify acidize acidizes acidulate acidulates acierate acknew acknow acknowledge acknowledges acknown acknows acquaint acquaints acquiesce acquiesces acquiets acquire acquires acquit acquits acronymize acronymized acronymizes acting activate activates actualise actualises actualize actualizes actuate actuates acuates acuminates acupunctuate acutes acylate acylates adapts addeem addeems addooms adduce adduces addulce addulces adeem adeems adempt adempts adenylates adhere adheres adhibit adhibits adjectivize adjoin adjoins adjourn adjourns adjudge adjudges adjudicate adjudicates adjure adjures adjust adjusts adjutes admeasure admeasures administer administers administrate administrates admire admires admit admits admix admixes admixt admonish admonishes adnominalize adnominalizes adolesce adolesces adonize adonizes adopt adopts adore adores adorest adorn adorns adrenalectomize adrenalectomizes adrenalise adrenalises adrenalize adrenalizes adsorb adsorbs adsorp adsorps adulate adulates adulterates adulters adultize adultizes adumbrate adumbrates advect advects advene advenes adverbialise adverbialises adverbialize adverbializes advertise advertises advertizes adviews advise advises advoke advokes aerate aerates aerifies aerify aerobicize aerobicizes aerosolise aerosolises aerosolize aerosolizes aesteems aestheticise aestheticises aestheticize aestheticizes aestivate aestivates afears affamishes affears affectest affectionates affeers affiance affiances affies affirm affirms afflict afflicts affoards affoords afforce afford affords afforest afforests affors affranchise affranchises affranchize affranchizes afoords africanise africanises africanize africanizes aftersee afterthink againbuy againsay againstand agatize agatizes aggerate aggerates agglomerates agglutinates aggrace aggraces aggrade aggrades aggrandise aggrandises aggrandize aggrandizes aggravate aggravates aggrege aggreges aggresses aggrieve aggrieves aggroes aggroups agist agists agitate agitates agnises agnizes agnominate agnominates agoes agone agonise agonises agonize agonizes agree agrees agriculturalize agriculturalizes agriculturize agrises agues aguises airdash airdashes airfreights airmails airt airts ajaxifies ajaxify akens akes akether aks albuminize alchemise alchemises alchemize alchemizes alcoholise alcoholises alcoholize alcoholizes algorithmize algorithmizes alibies alienates alights align aligns aline alines alit alkalifies alkalify alkalinise alkalinises alkalinize alkalinizes alkalize alkalizes alkylate alkylates allay allays allege alleges allegorise allegorises allegorize allegorizes alleviate alleviates allide allides alliterate alliterates allocate allocates allocute allocutes allot allots allow allows allude alludes allures alphabetise alphabetises alphabetize alphabetizes alter altercate altercates alters aluminise aluminises aluminize aluminizes aluminumize amalgamate amalgamates amass amasses amay amazes ambiguate ambiguates ambulate ambulates ameliorate ameliorates amend amerce amerces americanise americanises americanize americanizes ameses aminate aminates ammoniates ammonifies ammonify amortise amortises amortize amortizes amoves amplifies amplify amputate amputates amscray amuse amuses anaesthetise anaesthetises anaesthetize anaesthetized anaesthetizes anagrammatise anagrammatises anagrammatize anagrammatizes analogise analogises analogize analogizes analyse analyze analyzes anathematise anathematises anathematize anathematizes anatomise anatomises anatomize anatomizes anears aneles anesthetize anesthetizes angers anglicise anglicises anglicize anglicizes angsts angulates animadvert animadverts animalize animalizes animates ankylose ankyloses anneal anneals annihilate annihilates annoint annoints annotate annotates announce announces annualise annualises annualize annualizes annul annuls annunciate annunciates anodise anodises anodize anodizes anoint anoints anonymise anonymises anonymize anonymizes antagonise antagonises antagonize antagonizes antecede antecedes antecipate antecipates antedate antedates antes anthologise anthologises anthologize anthologizes anthropize anthropizes anthropomorphise anthropomorphises anthropomorphize anthropomorphizes antialias antialiases anticipate anticipates anticorrelate antioxidize antioxidizes antiquate antiquates antisepticise antisepticises antisepticize antisepticizes antithesize antithesizes aphorise aphorises aphorize aphorizes apocopates apodize apodizes apologise apologises apologize apologizes apostatise apostatize apostatizes apostemate apostrophise apostrophises apostrophize apostrophizes apotheosise apotheosises apotheosize apotheosizes appal appall appalls appals apparate apparels appeaches appear appears appease appeases apperceive apperceives appertain appertains appetise appetises appetize appetizes applaud applies applying appoint appoints apportion apportions appose apposes appraise appraises appreciate appreciates apprehend apprehends appress appretiate apprise apprises apprize apprizes approbate appropinquate appropriates approprinquates approve approves approximates aquacises arabise arabises arabize arabizes araises arbitrate arbitrates arborise arborises arborize arborizes archaize archaizes arcweld arcwelds argue argues argufies argufy arise arises arising arizes armors armours aroints aromatise aromatises aromatize aromatizes arose arouse arouses aroze arpeggiate arpeggiates arraign arraigns arrange arranges arrive arriven arrives arrogate arrogates arrove arterialize articulates artificialize artificializes artuate artuates ascend ascends ascerbates ascertain ascertains ascribe ascribes asearches asexualise asexualises asexualize asexualizes ashame ashames asks aslake aslakes asperates asperse asperses asphalts asphyxiate asphyxiates aspire aspires asplode asplodes assail assails assains assassinate assassinates assemble assembles asserts assess assesses asseverate asseverates assibilate assiege assimilate assimilates assoil assoils assoilzie assonate assonates assort assorts assoyle assoyles assran assrape assrun assruns assuage assuages assubjugates assume assumes assure assures asswages ast astonies astonish astonishes astound astounds astrict astricts astringe astringes astrogate astrogates astroturfs ate atheise atheises atheize atheizes athetize athetizes atomise atomises atomize atomizes atone atones atrede atren attach attaches attain attains attaints attask attemper attempers attend attends attenuates attest attests attires attitudinise attitudinises attitudinize attitudinizes attorn attorns attract attracts attrit attrites attrits attuite attuites attune attunes atwite augle augments aurifies aurify auscult auscultate auscultates auspicates austemper austempers austenitize austenitizes australianise australianises australianize australianizes australize australizes auth authenticate authenticates authorise authorises authorize authorizes auths autoactivate autoactivates autoamputate autoamputates autoboot autoboots autocatalyse autocatalyses autocatalyze autocomplete autocompletes autoconfigure autoconfigures autodelete autodeletes autodestructs autodetect autodetects autofocuses autofocusses autoformat autoformats autogenerate autogenerates autohid autohide autohides autoinhibit autoinhibits autoionize autoionizes autoload autoloads autolyse autolyses autolyze autolyzes automate automates automatised automatize automatizes automize automount automounts autophosphorylate autophosphorylates autoreact autoregulate autoregulates autosaves autoselect autoselects autostart autostarts autotune autotunes autoxidise autoxidises autoxidize autoxidizes avale avel avels aventres averruncate averruncates avers averses avert averts aviate aviates aviles avises avocates avoid avoids avouch avouches avow avows avulse await awaiteth awaken awakens awakes awarn awarns awent awes awhape awhapes awoke awroth axiomatise axiomatises axiomatize axiomatizes ayield azotise azotises azotizes azures babbles babelize babelizes babifies babify babysat babysit babysits bachs backbit backcasts backcheck backchecks backcomb backcombs backdate backdates backfoot backgammons backhauls backlists backload backloads backpedal backpedals backport backports backpropagate backpropagates backreact backread backreads backscratch backscratched backscratches backslap backslapped backslaps backslid backslide backslides backspun backstab backstabs backtalks backtest backtests backtracks backwound bacterize bacterizes bade badmouth badmouths baggs bagses bagsie bagsy bails bakes balkanise balkanises balkanize balkanizes balks ballasts bamboozle bamboozles bamfoozle bamfoozles banalise banalises banalize banalizes bandies bangalore bangalores banhammers banish banishes banjaxes bankrupts banninate banters baptise baptises baptize baptizes barbarize barbarizes bares barfs barhop barhops barnstorm barnstorms bartend bartends bask basks bastardise bastardises bastardize bastardizes baste bastes bastonade bates bathes bauf bawl bawls bbq bearing beath beatifies beatify beautifies beautify bebleed beblot beblubber beblur bebops bebother bebothers becall becalm becalms became bechances beckon beckons beclothes becloud beclouds become becomes becover becripple becue bedabble bedabbles bedare bedark bedarken bedarkens bedash bedaub bedaubs bedaze bedazes bedazzle bedazzles bedeck bedecks bedelve bedevil bedevils bedew bedews bediaper bedim bedims bedinner bedizens bedo bedoubt bedraggle bedraggles bedrops bedusts bedwet beeswaxes befalls befang befeather befeathers befell befie befight befile befind befit befits befitteth beflake beflatter beflay beflea beflee beflow befly befoam befog befogs befold befools befoul befouls befriend befriends befuddle befuddles began beganst begaud begay begem beget begets begink begins begird begirdle begirdles begirds beglooms begot begown begrave begrime begrimes begrudge begrudges beguile beguiles beguilty behap behappen behat behate behave behaves behead beheads behear beheart behell behelm behew behight behold beholds behoney behoove behooves behorn behove behoves behowl bejewel bejewels bejumble beken bekiss beknave beknight beknit beknow belabor belabors belabour belabours beladle belap belate belates belaud belave belaves belawgive belead beleaguer beleaguers beletter belick belie belies believe believes belifans belight belime belittle belittles belives bellycrawl bellyflop bellyflops belock belongs belord belout belove bemad bemask bemaze beme bemean bemerd bemerds bemete bemingle bemire bemires bemist bemoan bemoans bemourn bemud bemuds bemuse bemuses benames benegro benempt benet benight benights benote bentsh bentshes benumb benumbs bepaint bepaints bepat bepearl bepelt bepelts bepinch bepinches bepiss bepisses bepities beplaster beplasters bepommel bepommels bepowder bepowders bepraise bepraises beprose bepurple bepurples bequeath bequeaths bequiver bequivers berate berates beray berays bereave bereaves berhyme berhymes beribbon beribbons berime berimes bes bescatter bescreen besee beseech beseeches beseek beseems beset besets beshine beshrew beshrews beshroud beshut besiege besieges besit beskirts beslabber beslabbers beslave beslaver beslavers beslaves beslime beslimes beslobber beslobbers besmear besmears besmirch besmirches besmoke besmooth besmut besmutch besnow besnowball besnowballs besnows besnuff besoil besot besots besoul besouls besour bespangle bespangles bespatter bespatters bespawls bespeaks bespeckle bespeckles bespell bespells bespend bespit bespittle bespoil bespoils bespot bespread besprenges besprent besprinkles bestain bestand bestead besteads besteals bestialize bestializes bestick bestill bestir bestirs bestole bestood bestorm bestow bestows bestraddle bestreak bestrew bestrews bestride bestrides bestrode bestud beswaddle beswike beswinge beswink betag betail betake betakes betalk betallow betaught beteach betear beteem betell betells bethink bethinks bethought betide betine betoken betokens betold betook betray betrays betroth betroths bewail bewails bewake beware bewash beweep beweeps bewent bewept bewet bewets bewhisper bewhore bewield bewilder bewilders bewimple bewinter bewitch bewitches bework bewray bewrays bewreak bewreck bewrite bewrites bewrote bibble bibblebabbles bibbles bibulate bicker bickers bide bides bield bifurcates biggen bilk bilks bilocate bilocates binarise binarize bioaccumulate bioaccumulates bioactivate biodegrade biodegrades biographise biographises biographize biographizes biomagnifies biomagnify biomineralize biomineralizes bioremediate biosynthesise biosynthesises biosynthesize biosynthesizes birdsat birdsit birdsits birle bist bitbuckets bituminise bituminises bituminize bituminizes bivouacks blabs blacken blackens blackmails blackmark blackmarks blacktops blags blames blameshift blameshifts blanches blandifies blandify blandish blandishes blarneys blathers blats blatters blears bleats blech bleches bleeds blench blenches blenderize blenderizes bless blesses blet blets blew blights blithers blooden bloodens bloodies bloop bloops bloviate bloviates blub blubbers blubs bludges bluejack bluejacks blunge blunges blunk blurt blurts boak boaks bobars bobbars bobbitt bobbitts bodges bodyslams bodysurf bodysurfs boffs boggle boggles boink bolden boldens bolds bolix bolixes bolk bollixes bollockses bombinate bombinates bonjour boobytrap boobytraps boohoo boohoos bookcross bookcrosses bookkeep bootlick bootlicks boozes borks bornin bornt bose bosonise bosonises bosonize bosonizes botanise botanises botanize botanizes botrytize bought bouse bouses bowdlerise bowdlerises bowdlerize bowdlerizes bowge bowk bowkin bowks bowse bowses brachiates brags brainwashes brandishes brandwash brang brattle brattles brawns braze brazens brazes breadthen breadthens breastfeed breastfeeds breathalyse breathalyses breathalyze breathalyzes breathe breathes brenned brens brian brighten brightens brilliantines brines brings brivet brivets broaden broadens broddle broddles brode broiders brominate brominates brought browbeat browbeats browses browzes bruit bruits brumate brutalise brutalises brutalize brutalizes brux bruxes budge budges budnamed buffets bulbectomize bulbectomizes bulldoze bulldozered bulldozes bulletinize bulletinizes bulletproofs bullshat bullshits bullyrag bullyrags bumbazes bumfuzzle bumfuzzles bunds burbles bureaucratize bureaucratizes burgeon burglarise burglarises burglarize burglarizes burgle burgles buries burnish burnishes burnt bushbash bushwack bushwacks bushwhack bushwhacks busies busticate busticates buttle buttles buttonholes butylate butylates bycaught byheart cachinnate cacks cacumate cadgin caffeinate caffeinates cahoot cajole cajoles calcifies calcify calcinate calcine calcines calculate calculates calefy calendarize calendarizes calibrate calibrates calligraph calumnate calumniate calumniates calve cambers camcord camcords cameth canadianise canadianize canadianizes canalise canalises canalize canalizes cancans cancerate cannibalise cannibalises cannibalize cannibalizes cannulate cannulates canonicalize canonicalizes canonise canonises canonize canonizes canoodle canoodles cantillate capacitate capacitates capitalise capitalises capitalize capitalizes capitulate capitulates caponize caponizes capsize capsizes capsulize capsulizes captivate captivates carabine carabines caramelise caramelises caramelize caramelizes carboard carboards carbonatise carbonatises carbonatize carbonatizes carbonify carbonise carbonize carbonizes carbonylate carburet carburets carburize carburizes carcade carcades cardinalize cardiovert cardioverts careen careens carefront caress caretake caretakes caretook carjack carjacks carmelize carmelizes carnalize carnalizes carouse carouses carshare carshares cartelize cartelizes carve carves casefies casefy caseharden casehardens cashes castellate castigate castigates castrate castrates casualise casualises casualize casualizes catabolize catabolizes catalanize catalyse catalysize catalyze catalyzes catastrophize catastrophizes catechise catechises catechize catechizes categorifies categorify categorise categorises categorize categorizes catenate catenates cater catermaul catermauls caterwauls cathect catheterise catheterises catheterize catheterizes catsit catsits caulks cauponize cauterise cauterises cauterize cauterizes cavils cavitate cavitates cavort cavorts cease ceases cede cedes ceils celebrate celebrates celestialize cense censures centesimate centralise centralises centralize centralizes cerebralise cerebralises cerebralize cerebralizes cerebrate certifies certify chack chacks chafes chaffers chaffs chagrins chalks champs channelize channelizes channelled chaptalize characterise characterises characterize characterizes charbroil charbroils chargrill chargrills charlies chasten chastens chastise chastises chasts chatters chaulks chavel cheapen cheapens cheerlead cheerleads chelp chemisorb chemisorbs chemosorb chemosorbs cherish cherishes cherrypick cherrypicks chiack chiacks chide chides childmind childminds childproofs chillax chillaxes chillaxin chirally chitter chitters chlorinate chlorinates chlorinise chlorinises chlorinize chlorinizes chloroforms choose chooses chope chor choreograph choreographs chorrin chors chose chouse christen christens christianise christianises christianize christianizes chromes chronologise chronologize chugalugs chumble chumbles chunders chunter chunters chupse churr churrs chuses cicatrise cicatrize cimmerianize cimmerianizes cinched cinematise cinematises ciphers circularise circularises circularize circularizes circulate circulates circumambulate circumambulates circumcise circumcises circumcizes circumflect circumfuse circumfuses circumgyrate circumlocute circummure circummures circumnavigate circumnavigates circumnutate circumrotate circumscribe circumscribes circumstantiate circumstantiates circumundulate circumvallate circumvallates circumvent circumvents circumvolute circumvolve circumvolves cite citifies citify civilianize civilianizes civilise civilises civilize civilizes clabbers clad clads clags clamber clambers clarifies clarify classicalize classicise classicises classicize classicizes classifies classify clavers cleanse cleanses clears cleaves clenches clepes clicket clickjack cliffhang cliffhangs cliffhung climbs clinches clintonize clipt clitoridectomize closen closens closes clothe cloverleafs cloy cloys clubhaul clubhauls clucks cludged clumb clumps clutters cnawvshawl coact coacts coadsorb coagulates coalesce coalesces coalises coalizes coapplies coapply coarsen coarsens coarticulate coarticulates coassemble coassembles coasts coaxes cobrand cobrands cockneyfies cockneyfy cocreate cocreates cocrystallize coddle coddles codenature codesign codesigns codetermine codge codges codifies codify codisplay codiverge coedit coedits coeducate coeducates coelute coelutes coenrich coenriches coerce coerces coevolve coevolves coexert coexist coexists coexpose coexposes coexpress coexpresses coextend coextends cofire cofires cofound cofounds cogenerate cogenerates cogitate cogitates cognise cognises cognize cognizes cohabit cohabitate cohabitates cohabits cohaere cohaeres cohere coheres cohobate coiffe coimmunoprecipitate coimmunoprecipitates coincide coincides coinhabit coinhabits coinsure coinsures coldcock coldcocks coll collaborate collaborates collate collateralise collateralises collateralize collateralizes collates collectivise collectivises collectivize collectivizes collide collides colligate colligates collimate collimates collineate colliquate collocates colloquialize colloquializes colloquize colls collude colludes collusitate colocalised colocalize colocalizes colocate colocates colonise colonises colonize colonizes colorate colorize colorizes colourise colourises colourize colourizes colport colports columbaries columnize columnizes comarket comarkets combusts comes comigrate comigrates comixes commandeer commandeers commemorate commemorates commence commences commend commends commentate commentates commerces commercialise commercialises commercialize commercializes comminate comminates commingle commingles comminute comminutes commiserate commiserates commits commix commixes commodifies commodify commoditise commoditises commoditize commoditizes commonise commonises commonize commonizes commove commoves communalise communalize communicate communicates communifake communise communises communize communizes commute commutes comove comoves compactifies compactify compare compares compart compartmentalise compartmentalises compartmentalize compartmentalizes comparts compel compels compenetrate compensate compensates compete competes compilates compiles complain complains compleats complect complects completes complexifies complexify complicates complies comply componentize componentizes comport comports compose composes composts comprehend comprehends comprendo comprise comprises comprising compute computerise computerises computerize computerizes computes concatenate concatenates conceal conceals concede concedes conceive conceives concelebrate concenter concenters concentre conceptualise conceptualises conceptualize conceptualizes concertize concertizes concerts conciliate conciliates conclude concludes concluding concoct concocts concomitate concomitates concretes concretise concretises concretize concretizes concur concurs concuss concusses condemn condemns condense condenses condescend condescends conditionalize conditionalizes condole condoles condone condones conduce conduces confabulate confabulates confect confer conferruminate confers confess confesses confessionalise confessionalises confessionalize confide confides configure configures confirm confirms confiscate confiscates conflagrate conflagrates conflate conflates conform conforms confound confounds confront confronts confuddle confuscate confuse confuses confusticate confusticates confutes confuzzles congeal congeals congest congests conglobates conglobe conglobes conglobulate conglutinate conglutinates congratulate congratulates congregates conjects conjoin conjoins conjugating conjures conn connect connects connive connives connotate connotates connote connotes conns conquer conquers consecrate consecrates conservate conservates consider considering considers consign consigns consisting consists consolidate consolidates conspire conspires constate constellate consternate consternates consters constipate constipates constitute constitutes constitutionalise constitutionalises constitutionalize constitutionalizes constrain constrains constrict constricts constringe construes consume consumerize consumerizes consumes consummates contain containerise containerises containerize containerizes containing contains contaminate contaminates contemn contemns contemplate contemplates contemporize contend contends contextualise contextualised contextualises contextualize contextualizes continues contort contorts contracept contradict contradicts contradistinguish contradistinguishes contraindicate contraindicates contrasts contravene contravenes contribute contributes contrist contrists contrive contrives controvert controverts contuse contuses convalesce convalesces convect convects convene convenes conventionalise conventionalises conventionalize conventionalized conventionalizes converge converges conversate conversates converses convexify convey conveyorise conveyorize conveyorizes conveys convince convinces convoke convokes convolutes convolve convolved convolves convulse convulses cooccur cooccurs cools cooperate cooperates coopt coopts coos coown coowns copaid copolymerize copperfasten coprecipitate coprecipitates copresents coproduce copromote copromotes copublish copublishes copulate copulates copurifies copurify copyedit copyedits copylefts copyread copyreads copywrite copywrites copywrote coralise coralises coralize coralizes cornifies cornify cornute cornutes coronate coronates corotate corotates corporatise corporatises corporatize corporatizes corrade corrades corrects correspond corresponding corresponds corrivals corroborate corroborates corrode corrodes corrugate corrugates corrupts corruscate corruscates coruscate coruscates cosediment cosediments cosegregate cosegregates cosher coshers cosign cosigns cosleep cosleeps coslept cosplays costain cosupervise cosupervises cotransfect cotransfects couldest couldst counteract counteracts counterargue counterargues counterassert counterasserts counterattract counterattracts counterchange counterdraws counterdrew counterilluminate counterilluminates countermands countermine counterpose counterposes counterprogram counterprograms countersang countersank countersings counterstruck countersue countersues countervail countervails countifies countify countrifies countrify countryfies countryfy covariantize covariantizes covaries covary coventrate coventrates covet covets cowardize cower cowers cowrite cowrites cowritten cowrote cozens craigslist craigslists crapflood crapfloods crave craves crazes creaseproofs create creates credences creeds creepifies creepify cremate cremates crenelate crenelates crenellate crenellates creolise creolises creolize creolizes crepitate crept cretinise cretinises cretinize cretinizes cribble criminalise criminalises criminalize criminalizes criminate criminates crispen crispens criticise criticises criticizes croon croons croquets crossmatch crossreact crucifies crucify crunkle cryofocus cryofocuses cryopreserve cryopreserves cryoprotect cryoprotects crystalise crystalises crystalize crystalizes crystallise crystallises crystallize crystallizes cubiclize cubiclizes culminate culminates cultivate cultivates cumber cumbers cums cumulates curdle curdles curiousest curr curtail curtails curvet curvets cuss cusses customise customises customize customizes cutifies cutify cyberattacks cyberise cyberises cyberize cyberizes cybers cyberstalk cyberstalks cyclised cyclize cyclizes cyclodimerize cycloisomerize cyclomerize cyclotetramerize cyclotrimerize cytoreduce cytoreduces dabble dabbles daddle daddles daemonize daemonizes daintify damnifies damnify dampen dampens dampne dampproofs damps dandifies dandify dandle dandles dangles dangs daresay darken darkens darkle darns darraigns darrains dast daunt daunts daven davens dawdle dawdles dawt daydreamt daylit daysail daysails dazzle dazzles deacetylate deacetylates deacidifies deacidify deactivate deactivates deaden deadens deadenylate deadenylates deadpans deads deadsticks deaerate deaerates deafen deafens deafferents deagglomerate deagglomerates dealign dealigns dealkylate dealkylates deallocate deallocates dealt dealuminate dealuminates deamidate deamidates deaminate deaminates dearomatise dearomatises dearomatize dearomatizes dearrest dearrests deauthorise deauthorises deauthorize deauthorizes deaverage deaverages debag debags deballast deballasts debar debark debarks debarrass debarrasses debars debase debases debeak debeaks debeard debilitate debilitates deblend deblends debloat deblock deblocks deblur deblurs deboard deboards debond debonds debone debones deboss debosses debouche debounce debounces debranch debranches debride debrides debrief debriefs debrine debrines debruise debug debugs debulk debulks debunk debunks deburr deburrs decaffeinate decaffeinates decalcifies decalcify decalibrate decalibrates decamp decamps decant decants decapacitate decapacitates decapitalize decapitalizes decapitate decapitates decapsulate decarbonate decarbonates decarbonise decarbonises decarbonize decarbonizes decarbonylate decarbonylates decarboxylate decarboxylates decarburize decays deceases deceive deceives decelerate decelerates decellularise decellularize decellularizes decenter decenters decentralise decentralises decentralize decentralizes decentre decentres decertifies decertify dechlorinate dechlorinates dechristianize decide decides decimalise decimalises decimalize decimalizes decimate decimates decipher deciphers decivilise decivilises decivilize decivilizes declaim declaims declare declares declass declassifies declassify declaw declaws declimb decloak decloaks declolorise declutch declutter declutters decocainize decoct decocts decode decodes decohere decoheres decollate decollates decolonise decolonises decolonize decolonizes decolorise decolorises decolorize decolorizes decolourise decolourize decommission decommissions decommodifies decommodify decompactifies decompactify decompartmentalise decompartmentalises decompartmentalize decompartmentalizes decompensate decompile decompiles decompose decomposes decompress decompresses deconceptualise deconceptualises deconceptualize deconceptualizes decondition deconditions deconfine deconflict deconflicts decongest decongests deconsecrate deconsecrates deconstruct deconstructs decontaminate decontaminates decontextualise decontextualises decontextualize decontextualizes deconvolute deconvolutes deconvolve deconvolves decorate decorates decorrelate decorrelates decorticate decorticates decoupages decouple decouples decrements decreolize decreolizes decrepitate decries decriminalise decriminalises decriminalize decriminalizes decry decrypt decrypts deculturize deculturizes decumulate decunt decunts decussates dedicate dedicates dedifferentiate dedifferentiates dedisperse deduce deduces deduct deducts deduplicate deduplicates deein deek deekin deeks deeky deekyin deemphasise deemphasises deemphasize deemphasizes deems deepen deepens deepthroat deepthroats deescalate deescalated deescalates deexcite deface defaces defaecate defaecates defalcate defalcates defalks defame defames defamiliarise defamiliarises defamiliarization defamiliarize defamiliarizes defang defangs defat defatigate defats defecate defecates defeminise defeminises defeminize defeminizes defend defends defenestrate defenestrates defer defers defibrate defibrates defibrillate defibrillates defibrinate defibrinates defilades define defines defining definitize definitizes deflagrate deflagrates deflate deflates deflect deflects deflocculate deflocculates deflower deflowers defocus defocuses defog defoggers defogs defoliate defoliates deforest deforests deform deformalize deformalizes deforms defrag defragment defragments defrags defraud defrauds defray defrays defriend defriends defrizz defrizzes defrock defrocks defrost defrosts defund defunds defuse defuses defuzes degas degasses degauss degausses degazette degerm degerms deghettoize deghettoizes deglaciate deglaciates deglamorize deglamorizes deglaze deglazes deglobalise deglobalises deglobalize deglobalizes deglottalize deglottalizes deglove deglycosylate deglycosylates degrade degrades degranulate degranulates degrease degreases degum degums degunk degunks degust degustate degustates dehire dehires dehisce dehisces dehistoricize dehistoricizes dehook dehorn dehorns dehort dehorts dehull dehulls dehumanise dehumanises dehumanize dehumanizes dehumidifies dehumidify dehydrate dehydrates dehydrogenate dehydrogenise dehydrogenises dehydrogenize dehydrogenizes dehypnotise dehypnotises dehypnotize dehypnotizes deice deices deifies deify deign deigns dein deindex deindexes deindustrialise deindustrialises deindustrialize deindustrializes deinitialize deinitializes deink deinks deinstall deinstitutionalise deinstitutionalises deinstitutionalize deinstitutionalizes deinterlace deinterlaces deionise deionises deionize deionizes deject dejects dejunk dejunks delabialize delabializes delaminate delaminates delegalize delegalizes delegitimate delegitimates delegitimatise delegitimatises delegitimatize delegitimatizes delegitimise delegitimises delegitimize delegitimizes delevel delevels deleverage deleverages deliberates delicense delimb delimbs deliminate delimit delimitate delimitates delimits delineate delineates delink delinks delint delints deliquesce deliquesces delist delists deliver delivers delocalize delocalizes deloft delofts delouse delouses delude deludes deluster delustre delves demagnetise demagnetises demagnetize demagnetizes demanufactures demarcate demarcates demark demarket demarkets demarks demassify demast dematerialise dematerialises dematerialize dematerializes demaunds demeans demerge demerges demetallize demetallizes demethylate demethylates demilitarise demilitarises demilitarize demilitarizes demine demineralise demineralises demineralize demines demist demists demit demits demix demixes demob demobilise demobilises demobilize demobilizes demobs democratise democratises democratize democratizes demodulate demodulates demolish demolishes demonetise demonetises demonetize demonetizes demonise demonises demonize demonizes demonopolize demonstrate demonstrates demoralise demoralises demoralize demoralizes demosaic demosaiced demosaics demoss demosses demote demotes demotivate demotivates demulsifies demulsify demultiplex demultiplexes demutualise demutualises demyelinate demyelinates demystifies demystify demythologise demythologize demythologizes denasalize denasalizes denationalise denationalises denationalize denationalizes denaturalise denaturalize denaturalizes denature denatures denaturize denervate denib denibs denies denigrate denigrates denitrified denitrifies denitrify denitrogenate denitrogenates denominate denominates denormalise denormalises denormalize denormalizes denote denotes denounce denounces densifies densify denuclearise denuclearises denuclearize denuclearizes denude denudes deny deodorise deodorises deodorize deodorizes deodourise deodourises deoil deoils deop deops deoptimize deoptimizes deorbit deorbits deoxidise deoxidises deoxidize deoxidizes deoxygenate deoxygenates depacketize depacketizes depaint depaints depalletize depalletizes depanelize depanelizes depants depantses depart departmentalise departmentalises departmentalize departmentalizes departs depasture depastures depatriarchalize depatriarchalizes depauperates depave depaves depend depending depends depersonalise depersonalises depersonalize depersonalizes depetal depetals dephase dephases dephlogisticate dephlogisticates dephosphorylate dephosphorylates dephysicalize dephysicalizes depict depicts depigment depigments depilate depilates deplane deplanes deplete depletes deplore deplores deploy deploys depolarise depolarises depolarize depolarizes depolish depolishes depoliticalize depoliticise depoliticises depoliticize depoliticizes depolymerised depolymerize depolymerizes depone depopulate depopulates deport deports depose deposes deprave deprecate deprecates depreciate depreciates depredate depredates depress depresses depressure depressures depressurise depressurises depressurize depressurizes deprioritise deprioritises deprioritize deprioritizes deprivatize deprivatizes deprive deprives deprogram deprogramme deprograms deproject deprojects deprotect deprotects deproteinize deproteinizes deprotonate deprotonates depublish depucelates depurate depurates depute deputes deputise deputises deputize deputizes dequantize deracemize deracemizes deracinate deracinates deradicalise deradicalises deradicalize deradicalizes deraign deraigns derails derains derandomise derandomises derandomize derandomizes derange deranges derat derate derates derats derecognise derecognises derecognize derecognizes dereference dereferences deregister deregisters deregulate deregulates dereligionise dereligionises dereligionize dereligionizes derepress derepresses derequisition derequisitions deres derestrict derez derezz derezzes deride derides derivatize derive derives derogate derogates derograte derogrates deromanticise deromanticises deromanticize deromanticizes desacralize desacralizes desalinate desalinates desalinize desalinizes desalivate desalt desalts desand desands desat desats desaturate desaturates descale descales descend descends deschool descope descopes descramble descreen descreens describe describes describing descries descry deseasonalize deseasonalizes desecrate desecrates deseed deseeds desegregate desegregates deselect deselects desensationalize desensationalizes desensitise desensitises desensitize desensitizes deserialise deserialises deserialize deserializes desertify deserve deserves desex desexes desexualise desexualises desexualize desexualizes deshuffle deshuffles desiccate desiccates desiderate desiderates desilver desilvers desilylate desist desists deskew deskews deskill deskills desocialise desocialises desocialize desocializes desolates desolder desorb desorbs desoul despairs desparple desparples despeckle despeckles despise despises despoil despoils despond desponds desponsate desponsates desport desports desquamate desquamates dessay destabilise destabilises destabilize destabilizes destandardize destandardizes destem destems destigmatise destigmatises destigmatize destigmatizes destimulate destimulates destine destines destock destress destroy destroys destruct destructs destructure destructures desugar desugars desulfur desulfurise desulfurises desulfurize desulfurizes desulfurs desulphur desulphurise desulphurize desulphurizes desymmetrize desynchronize desynchronizes detach detaches detain detains detangle detangles detartrate detartrates detassel detassels detect detects deter deterge deteriorate deteriorates determine determines determinize determinizes deters detest detests detext dethatch dethatches dethaw dethaws dethrone dethrones detin detins detonate detonates detort detorts detoxifies detoxify detract detracts detraditionalise detraditionalize detraditionalizes detrain detrains detrend detrends detribalize detumesce detune detunes deubiquitinate deubiquitinates deubiquitylate deunionise deunionises deuterate devalorize devalorizes devaluate devaluates devalue devalues devastate devastates devein deveins develop developes develops deverbalise deverbalises deverbalize deverbalizes deviled devilize devilizes devitalize devitalizes devitrifies devitrify devive devives devoice devoices devolve devolves devote devotes devour devours dewater dewaters dewax dewet dewets dewikifies dewikify dewire dewires deworm deworms diabolizes diagnose diagonalise diagonalises diagonalize diagonalizes dialyse dialyze dialyzes diarise diarises diarize diarizes diazotise diazotises diazotize diazotizes dib dichotomise dichotomises dichotomize dichotomizes did didder diddles diecast diecasts dieselise dieselize differ differentiate differentiates differs diffract diffracts diffuses digitalise digitalises digitalize digitalizes digitise digitises digitize digitizes dignifies dignify digress digresses dilacerate dilacerates dilapidate dilapidates dilatates dilate dillydallies dillydally dilutes dimensionalise dimensionalises dimensionalize dimensionalizes dimerise dimerises dimerize dimerizes diminish diminishes dims dine dines diphthongise diphthongises diphthongize diphthongizes directs dirempt dirempts dirties disable disables disabuse disabuses disaccustom disacknowledge disacknowledges disaffect disaffects disaffiliate disaffiliates disaffirm disafforest disafforests disaggregates disagree disagrees disallow disallows disambiguate disambiguates disannex disannexes disannul disannuls disapparate disapparates disappear disappears disapply disappoint disappoints disappropriate disappropriates disapprove disapproves disarm disarms disarrange disarranges disarticulate disassemble disassembles disassociate disassociates disavail disavails disavow disavows disband disbands disbar disbars disbelieve disbelieves disbowel disbowels disbud disbuds disburden disburdens disburse disburses discern discerns discides disclaim disclaims disclose discloses disclude discludes discolor discolors discolour discolours discombobulate discombobulates discomfit discomfits discommend discommends discommode discommodes discompose discomposes disconcert disconcerts disconfirm disconfirms discontinue discontinues discountenance discountenances discounts discourage discourages discover discovers discredit discredits discretise discretises discretize discretizes discriminate discriminates discrown discrowns discuss discusses disdains disembark disembarks disembarrass disembodies disembody disembogue disembogues disembowel disembowels disembroil disembroils disemburden disemburdens disemploy disemploys disempower disempowers disemvowel disemvowels disenchant disenchants disencumber disencumbers disenfranchise disenfranchises disennoble disennobles disenrol disenroll disenrolls disenrols disentangle disentangles disenthral disenthrall disenthralls disenthrals disenthrone disenthrones disentitle disentomb disentombs disentrance disentrances disequalize disestablish disestablishes disesteem disesteems disfellowship disfellowshiped disfellowships disfigure disfigures disforest disfranchise disfranchises disfrock disfrocks disgorge disgorges disgruntle disgruntles disgusts dishabituate dishabituates disharmonize disharmonizes dishearten disheartens dishevel dishevels dishonorest dishonoreth dishonors dishonours disillusionise disillusionises disillusionize disillusionizes disimprove disincarcerates disincarnates disincentivise disincentivize disincline disinclines disincorporate disincorporates disinfect disinfects disinfest disinfests disinform disinforms disinherit disinherits disinhibit disinhibits disintegrate disintegrates disinter disinterests disintermediate disintermediates disinters disinthral disinthrals disinvent disinvest disinvests disinvite disinvites disjoin disjoins disjoints disleaf disleafs disleave disleaves dislimb dislimbs dislocate dislocates dislodge dislodges dismantle dismantles dismask dismasks dismast dismasts dismays dismember dismembers dismiss dismisses disneyfies disneyfy disobey disobeys disoblige disobliges disordain disorganise disorganises disorganize disorganizes disorient disorientate disorientates disorients disown disowns disparages disparks dispart dispel dispels dispends dispense dispenses dispeople dispeoples disperse disperses dispirit dispirits dispises displace displaces displant displants displease displeases displume displumes dispone disport disports dispose disposes dispossess dispossesses dispraise dispraises dispreads disprefer disproportionates disprove disproves disqualifies disqualify disquantities disquiets disrate disrates disrecommend disrecommends disregards disrelishes disremember disrespects disrobe disrobes disrupt disrupting disrupts dissatisfies dissatisfy dissave dissaves dissect dissects dissemble dissembles disseminate disseminates disserve disserves dissever dissevers dissimilate dissimilates dissimulate dissimulates dissipate dissipates dissociate dissociates dissonate dissonates disspirit disspirits dissuade dissuades distain distantiate distastes distempers distend distends disthronizes distil distill distills distils distinguish distinguishes distort distorts distract distracts distrain distrains distresses distribute distributes distrusts disturb disturbs disunifies disunify disunite disunites dither dithers divagate divaricate divaricates divellicate diverge diverges diversifies diversify divert diverts divest divests divides divines divinise divinize divisionalize divulge divulges diys diz dizzies dmca dobs dodders doesna doesnae doff doffs dogfought dogmatize dognap dogsit dogsits dolbyize doles domiciliate domiciliates dominates domineer domineers donate donates dook doomsaid doomsay doomsays doot dorkifies dorkify dorsiflex dosses doublecheck doublechecks doubletrack doubletracks douse douses dout douts dow dowdifies dowdify downcasts downclimb downclimbs downcycle downcycles downface downlist downlists downmodulate downplay downplays downpress downpresses downrate downrates downregulate downregulates downscales downselect downselects downshift downshifts downsize downsizes downstroy downstroys downvotes downzone downzones dows doxes draggle drait dramatise dramatises dramatize dramatizes drank drat drate drats dreamt dreap dreaps dreep drees drenches dret dreve drew drf drite drites drivels droops drown drownd drowns drowses drub drubs druv drycleaners drycleans dryfire dryfires drygulch drygulches dryte drytt drywalls dualise dualises dualize dualizes duckwalk duckwalks duffs dulcify dulls dumbfound dumbfounds dumbs dumbsize dumfound dumfounds dunches dunchin dunsh dunshes dunshin dup dutchifies dutchify dwells dwelt dwindle dwindles dwine dynamise dynamises dynamites dynamize dynamizes dysphemize dysphemizes dysregulate dysregulates ean earmarks earn earns earnt earths eases easternise easternises easternize easternizes eat ebay ebays ebonize ebonizes eccentricate eche eches echolocate echolocates echoplex eclecticise eclecticises eclose economise economises economize economizes ecycle ecycles edifies edify editionalise editionalises editorialise editorialises editorialize editorializes educamate educamates educate educates educationalize educationalizes educe educes edulcorate edulcorates edumacate edumacates edutain edutains eff efface effaces effectuate effectuates effeminates effervesce effervesces effloresce effloresces effs effulge effuses egest egests egosurf egosurfs egresses ejaculates ejects ekes elaborates elapse elapses elasticate elasticates elasticise elasticises elasticize elasticizes elates eld eldens electioneer electioneers electrifies electrify electrocauterize electrocauterizes electrocute electrocutes electrolyse electrolyses electrolyze electrolyzes electrophorese electroshocks elects elegise elegize elegizes elevate elevates elicit elicits elide elides eliminate eliminates elix ellipt eloign eloigns elongates elope elopes elucidate elucidates elucubrate elucubrates elude eludes elute elutes elutriate emaciate emaciates emanate emanates emancipates emasculates embalm embalms embank embanks embark embarks embarrass embarrasses embattle embattles embay embays embed embeds embellish embellishes embetter embezzle embezzles embiggen embiggens embillow embitter embitters emblaze emblazes emblazon emblazons emblematize emblematizes embloom emblossom embodies embody embogues embolden emboldens embosom embosoms emboss embosses embowel embower embowers embrangle embrangles embraves embrighten embrightens embrittle embrittles embroider embroiders embroil embroils embrothel embrown embrowns embrue embrues embugger embuggers embus embuss embusy emend emends emerge emerges emigrate emigrates emit emits emote emotes emotionalise emotionalises emotionalize emotionalizes empanel empanels empathise empathises empathize empathizes emphasise emphasises emphasize emphasizes emphasizing empierce empierces emplace emplaces emplane emplores employs empoisons empolder empoverishes empower empowers emprises empurple empurples emulate emulates emulsified emulsifies emulsify emvowel emvowels enable enables enact enacts enamor enamors enamour enamours enantioenrich enblow encage encages encamp encamps encapsulate encapsulates encapture encaptures encase encases encash encashes encave encaves enchain enchains enchant enchants enchase enchases enchasten enchastens encipher enciphers encircle encircles enclasp enclasps enclines enclose encloses enclothe encode encodes encoffin encoffins encolden encoldens encompass encompasses encourage encourages encreases encrimson encrimsons encroaches encrust encrusts encrypt encrypts enculturate enculturates encumber encumbers encunt encunts encyst encysts endamages endanger endangers endarken endarkens endarks endear endears endocytose endocytoses endogenise endogenises endogenize endogenizes endolour endorse endorses endow endue enduers endues endure endures energise energises energize energizes enervates enfasten enfastens enfeeble enfeebles enfeoff enfeoffs enfever enfevers enflame enflames enfold enfolds enforce enforces enfranchise enfranchises engage engages engaol engaols engender engenders engird engirdle engirdles engladden engladdens englobe engloom englooms englut engluts engolden engoldens engorge engorges engrafts engrain engrains engrave engravens engraves engreatens engrieves engross engrosses engulf engulfs enhalo enhalos enhance enhances enharden enhardens enhearten enheartens enisle enjail enjails enjoin enjoins enjoy enjoys enkindle enkindles enlace enlaces enlarge enlargen enlarges enleague enlengthen enlengthens enlessens enlighten enlightens enlist enlists enliven enlivens enlock enmesh enmeshes enmildens ennoble ennobles enounce enounces enplane enplanes enqueue enqueues enquicken enquickens enquire enrage enrages enrapture enraptures enravish enravishes enregister enregisters enrich enrichen enrichens enriches enridge enridges enrings enripens enrobe enrobes enrol enroll enrolls enrols enroot enroots ensanguine ensanguines enscale enscales ensconce ensconces enseals enseams ensepulcher ensepulchers ensheath ensheathe ensheathes enshields enshrine enshrines enshroud enshrouds ensile enskies ensky enslave enslaves ensmallen ensmallens ensnare ensnares ensnarl ensnarls ensonify ensorcel ensorcell ensorcells ensorcels ensoul ensouls enstraiten enstraitens enstrengthens ensue ensues ensure ensures enswathe enswathes ensweeten ensweetens entangle entangles entering enterprises enters entertain entertains enthral enthrall enthralls enthrals enthrone enthrones enthronise enthuse enthuses entice entices entitize entitizes entitle entitles entituled entomb entombs entrain entrains entrammel entrammels entrap entraps entrench entrenches entres entrust entrusts enturbulate enturbulates entwine entwines entwist enumerate enumerates enunciate enunciates enure enures envelop envelops envenom envenomate envenomates envenoms envigorate envigorates environ envisage envisages envision envisions enwheel enwiden enwidens enwisen enwisens enwomb enwrap enwraps enwreathe enwreathes enwrite enzone enzones epilate epilates epimerize epithelialize epitomise epitomises epitomize epitomizes eponymize epoxidize equalise equalises equalize equalizes equate equates equidistribute equidistributes equilibrate equilibrates equip equipoises equiponderate equiponderates equips equivalate equivalates equivalise equivocate equivocates eradicate eradicates erase erases erects erize erme erode erodes eroticise eroticises eroticize eroticizes erotise erotises erotize erotizes err errs ers eruct eructs erupt erupts escalate escalates eschew eschews espies espouse espouses espy essentialize essentializes establish establishes esteems esterifies esterify estheticise estheticises estheticize estheticizes estivate estivates estop estops estrange estranges etch etches eternize etherealise etherealises etherealize etherealizes etherifies etherify etherise etherises ethifies ethify ethylate ethylates etiolate etiolates etymologise etymologises etymologize etymologizes euhemerize euhemerizes eulogise eulogises eulogize eulogizes euphemise euphemises euphemize euphemizes euroize europeanize europeanized europeanizes euthanase euthanasiate euthanatise euthanatises euthanatize euthanatizes euthanaze euthanise euthanised euthanises euthanize euthanizes eutrophicate evacuate evacuates evade evades evaginate evaluate evaluates evanesce evanesces evangelise evangelises evangelize evangelizes evaporate evaporates eventifies eventify eventuate eventuates evert everts evict evicts evince evinces evirate evirates eviscerate eviscerates evite evocate evoke evokes evolve evolves exacerbate exacerbates exacts exaggerate exaggerates exalts examine examines exasperate exasperates excarnates excavate excavates excede excedes exceed exceeds excel excels excepts excite excites exclaim exclude excludes excogitate excoriate excoriates excrete excretes excruciate excruciates exculpate exculpates excur excuss execrate execrates execute executes exeleutherostomize exemplifies exemplify exenterate exenterates exert exerts exeunts exfoliate exfoliates exhalate exhale exhales exhilarate exhilarates exhort exhorts exhume exhumes exiles exist exists exoculate exoculates exocytose exonerate exonerates exorcise exorcises exorcize exorcizes exoticise exoticises exoticize exoticizes expand expands expatiate expatiates expect expectorate expectorates expects expediate expediates expedite expedites expel expels expend expends expertize expiate expiates expire expires explain explains explicate explicates explode explodes explore explores exponentiate exponentiates exports exposit exposits expostulate expostulates expound expounds exprobates exprobrate exprobrates expropriate expropriates expugns expulse expunge expunges expurgate expurgates exsanguinate exsanguinates exscind exscinds exsiccate exsiccates exsolve exsolves extemporise extemporises extemporize extemporizes extend extends extenuate extenuates exteriorize exteriorizes exterminate exterminates externalise externalises externalize externalizes extinguish extinguishes extirpate extirpates extol extoll extolls extols extort extorts extradite extrapolate extrapolates extravasates extricate extricates extrude extrudes extubate exude exudes exult exults exuviate exuviates fabricate fabricates facepalms facilitate facilitates facks factifies factify factionalise factionalize factionalizes factorise factorises factorize factorizes faff faffs fails fainaigue fainaigues fains fak falsifies falsify falters familiarise familiarises familiarize familiarizes famish famishes fanaticise fanaticises fanaticize fanaticizes fand fangles fankle fantasise fantasises fantasize fantasizes faps fark farks farnesylate farnesylates farsee farspeaks farspoke fasciate fasciates fascinate fascinates fashin fasten fastens fatten fattens faze fazes feague feagues feal feaze februate februates feceate fecundate fecundates federalise federalises federalize federalizes federates fedex fedexes feebles feign feigns felch felches felicitate felicitates fellate fellates fellowfeel felts femininize femininizes feminise feminises feminize feminizes fends fenowed fergit fermionize fertilise fertilises fertilize fertilizes fester festers festinates fetched fetches fetishise fetishises fetishize fetishizes feudalise feudalises feudalize feudalizes fianchettos fiberize fiberizes fibrillate fibrillated fibrillates fictionalise fictionalises fictionalize fictionalizes fictionise fictionises fictionize fiddlefart fiddlefarts fiddlefuck fidges fieldstrip fieldstrips filch filches filks filmize filmizes filtrates finagle finagles finalise finalises finalize finalizes financialise financialises find finds finesses finetune finetunes finick finna finnicise finnicises finnicize finnicizes fireform fireproofs firtle fishifies fishify fisk fistfought fixate fixates fiz fizzles flabagast flabagasts flabaghasts flabbergasters flabberghasts flabergasts flabrigast flabrigasts flacker flagellates flameproofs flanks flappergast flappergasts flatlines flatten flattens flatulate flatulates flaunt flaunts flavors flay flays fledge fledges flee fleeces fleech fleeches fleer fleers flees flehm flehms flense flenses fleshes flew fley fleys flicks flighten flinches flitter flitters flobbergrast flobbergrasts flobs floccinaucinihilipilificate floccinaucinihilipilificates flocculate flocculates flog flogs floodproofs flote flounces flounders flours flout flouts floxes flubs fluctuate fluctuates fluidifies fluidify fluidize fluidizes flummox flummoxes flunk flunks fluoresce fluoresces fluoridate fluoridates fluorinate fluorinates fluster flusters fluxes flypost flyposts flyte foams focalise focalises focalize focalizes focusses foils foins foists folden foliates foller follers follow follows foment foments fondle fondles fook fooks fooster footles foots forbad forbade forbar forbid forbids forbise forbite forbodes forbore forbroke forbuy forclose forcloses forcover forcut fordid fordoes fordrive forebode forebodes forebore forecall forecheck forechecks forechoose foreclose forecloses foreconceive foredeclare foredeem foredesign foredestine foredetermine foredid foredo foredoes foredooms forefeel forefend forefends foregather foregathers forego foregoes foregoing foreheard forehears forehew foreignise foreignize foreignizes forejudges foreknew foreknow foreknows forelay forelifts foreordain foreordains foreran forerun foresaw foresee foresees foreshadow foreshadows foreshame foreshorten foreshortens foreshow foreshown foreslack forespend forestall forestalls forestals foreswear foreswears foreswore foresworn foretake foretaught foreteach foretell foretells forethink forethinks forewarn forewarns forewaste foreweigh forewent forewish forfare forfend forfends forgather forgathers forgave forget forgets forgit forgive forgives forgo forgoes forgot forgrow forhale forhold forhow forirk forlat forlay forleet forlend forlese forleses forlet forlets forlie forlighten forlive forlore formalise formalises formalize formalizes formates formicate formicates formularise formularize formulate formulates formylate forncast fornicates fornim forpamper forpass forpine forsaid forsake forsakes forsay forsays forsee forset forshake forshame forshape forshorten forshrink forslack forslip forslow forslowth forslug forsook forspare forspeak forspend forsta forstand forswallow forswear forswears forswelt forswink forswore fortake fortatter fortax forthcome forthdraw forthglide forthgo forthink forthlead forthlook forthnim forthpass forthspeak fortifies fortify fortravel fortread forwake forwalk forwander forwaste forwean forwear forweary forwelk forwent forwither forwound forwrap foryield fossick fossicks fossilate fossilates fossilifies fossilify fossilise fossilize fossilizes fotch fought found founds frack fractalize fractalizes fractionalize fractionalizes fractionate fractionated fractionates frain frains fraise fraist frak frap fraternalise fraternalises fraternalize fraternalizes fraternise fraternises fraternize fraternizes fraughts frazzle frazzles freeball freefallen freefalls freefell freeload freeloads freep freeps freestyles freet freezeproofs freights frenches frenchifies frenchify frequents freshen freshens fress fresses fretten friggle frighten frightens frisks frizzes frizzle frizzles frore froshes frostbit frosts froths frots froust frousts frover froze fructifies fructify frush frushes frustrates ftps fub fuckest fucketh fuddles fuggedaboudit fuggedaboutit fugued fuhgeddaboud fulfil fulfill fulfills fulfils fulgurate fulgurates fulls fumigate fumigates funambulate funambulates functionalize functionalizes fundraise fundraises funeralize funeralizes fungate funs furbish furbishes furcates furl furls furnishes furthers fustigate fustigates futter futters futureproofs futurise futurises futurize futurizes futzes fuzzes fuzzifies fuzzify gabble gabbles gack gacks gafiate gafiates gaincope gaingive gainsaid gainsay gainsays gainstand gainstands gainstood gallicise gallicises gallicize gallicizes gallivant gallivants galls galumph galumphs galvanise galvanises galvanize galvanizes gamahauchs gan gangle gangles gangst gank ganks gannin gans gapes garbages garble garbles gart gasface gasifies gasify gastrulate gastrulates gasts gatecrash gatecrashes gatekeeps gatekept gaup gauppin gaups gavages gave gawks gawp gawps gazinta gazump gazumps gedges geg gelatinise gelatinises gelatinize gelatinizes geminates genderize genderizes generalise generalises generalize generalizes generate generates genericise genericises genericize genericizes genlocks gentles gentrifies gentrify genuflect genuflects geocode geocodes geologize geologizes geometrize geometrizes geotag geotags germanize germanizes germinate germinated germinates gestate gestates gesticulate gesticulates get gets gezumph ghettoise ghettoises ghettoize ghettoizes ghostwrite ghostwrites ghostwrote gibbers gibes gild gilds girlcott girlcotts girlifies girlify girn girns gittin give gives giving glaciate glaciates gladden gladdens gladhand glamorise glamorises glamorize glamorizes glark glarks glassify glean gleans glid glidden glides glistens glitters globalise globalises globalize globalizes globetrot glom glomps gloms glope gloppen glore glorifies glorify glottalise glottalises glottalize glottalizes glowers glows gluck gmail gmails gnash gnashes gnaw gnaws gnosticise gnosticises goaltend goaltends gobble gobbles goffer goffers goin golfs gongoozle gongoozles gonno goofs googlebomb googlebombs gorgonize gorgonizes gormandize gormandizes gospelize gothicise gothicises gothicize gothicizes gots gourmandise gourmandize gourmandizes gove govern governing governmentalize governmentalizes governs gowls grabble grabbles gradate gradates graffitis grafts grammaticalise grammaticalises grammaticalize grammaticalizes grangerise grangerises grangerize grangerizes grants granularise granularises granularize granularizes granulate granulates graphitize grasscycle graticulate gratifies gratify gratinate gratinates graunch graunches gravels gravitate gravitates greaseproofs greases greatens greenify greenlight greenlights greenlit greenwashes greet gregarize grep greps grew gride grides grimes grok groks groundfishes grouts grovel grovels grow growes grows groze grozes grues grypes guddle guffs guiles guilts gunges guttle guttles gutturalize guzzles gwine gyrates gzip gzips haad habilitate habilitates habituate habituates hadna hadnae hadronise hadronises hadronize haesitates haet haets hafta haggle haggles hagride hagrides hagrode hails hakes hales hallucinate hallucinates halogenate halogenates halve hamshackle handfasts handpick handpicked handpicks handsels handsomes handwaved handwaves handwrite handwrites handwrote hangs hanker hankers happen happens happifies happify happroach haptenization haptenize haptenizes harass harasses harbors hardcode harden hardens hardwire hardwires hark harken harkens harks harmonise harmonize harmonizes harrass harries harry harshen harshes hasten hastens hastes hauls havens havocs headbang headbangs headdesk headdesks headhunt headhunts headquarter heal heals hear heard hearken hearkens hears hearten heartens heatproofs heats hebraize hebraizes heckle heckles hector hectors hedgehop hedgehops heerd heeze hegemonise hegemonises hegemonize hegemonizes heighten heightens held helicopt heliski heliskis hellenise hellenises hellenize hellenizes hemorrhages henches henpeck henpecks heparinise heparinises heparinize heparinizes hepps herborize herborizes hermitize hermitizes herniate herniates heroised heroize heroizes herry hesitate hesitates heterodimerize heterodimerizes heterodynes heteronormalize heteronormalizes hew hews hez hibernate hibernates hibernicize hibernicizes hid hidate hierarchize hierarchizes hies higgles highlit hightail hightails hinders hires hirple hirples hispanicize hispanicizes historicize historicizes hitchhike hitchhikes hivernate hivernates hmm hmms hoarsen hoarsens hobday hobnobs hochnehmen hockles hocklin hocus hogtie hogties hoick hoicks hoid hoida hoise holds holla hollers hollywoodize hollywoodizes homeschools homodimerize homodimerizes homodynes homogenise homogenises homogenize homogenizes homologate homologates homologize homologizes homopolymerize homosexualise homosexualises homosexualize homosexualizes homotope homotopes hondel hoodwink hoodwinks hopscotches horizontalize horizontalizes hork horks hornifies hornify hornswoggle hornswoggles horrifies horrify horseplays horsetrade hospitalise hospitalises hospitalize hospitalizes hotpress hotpresses hotwire hotwires housebreak housebreaks housebroke houseclean housecleans housekeep housekeeps housekept housel housesat housesit housesits housetrain housetrains hove hoved hoven hover hovers hoyin humanifies humanify humanise humanises humanize humanized humanizes humbles humectates humidify humify humiliate humiliates humorise humorises humorize humorizes humors humourise humourises humourize humourizes hunchs hurkle hurls hurray hurrays hurtles hurts hushes hybridise hybridises hybridize hybridizes hydrocrack hydrocracks hydrodesulfurize hydrodesulfurizes hydroentangle hydrogenate hydrogenates hydrogenise hydrogenises hydrogenize hydrogenizes hydroisomerize hydroisomerizes hydrolyse hydrolyze hydrolyzes hydrotreat hydrotreats hydroxylate hydroxylates hyperacetylate hyperbolize hyperbolizes hypercompute hypercorrects hyperextend hyperextends hypermutate hypermutates hyperpolarise hyperpolarises hyperpolarize hyperpolarizes hyperregulate hyperregulates hypersexualise hypersexualises hypersexualize hypersexualizes hyperstimulate hyperstimulates hypertextualize hypertextualizes hyperventilate hyperventilates hyphenates hypnotise hypnotises hypnotize hypnotizes hypostatize hypothecate hypothecates hypothesise hypothesises hypothesize hypothesizes iconifies iconify iconize iconizes idealise idealises idealize idealizes ideate ideates identifies identify ideologise ideologises idles idolise idolises idolize idolizes igg iggies iggy ignite ignites ignore ignores illegalise illegalises illegalize illegalizes illtreat illtreats illude illumes illumine illumines illustrate illustrates imagine imbed imbeds imbibe imbibes imbitter imbosks imbosom imbosoms imbreathe imbreed imbrews imbricates imbrue imbrues imbrute imbue imbues imitate imitates immanentise immanentises immanentize immanentizes immerse immerses immesh immeshes immew immigrate immigrates immiserate immiserates immix immobilise immobilises immobilize immobilizes immolate immolates immortalise immortalises immortalize immortalizes immunise immunises immunize immunizes immunolabel immunolabels immunolocalize immunolocalizes immure immures impair impairs impale impales impanel impanels impark impart imparts impassion impawn impawns impeach impeaches impede impedes impel impels impend impends imperialize imperializes imperil imperilled imperils impermeabilize impersonalize impersonalizes impersonate impersonates impetrate impetrates impinge impinges impleach implead impleads implicate implicates implies implode implodes implore implores imploys imply impolder importune importunes impose imposes impound impounds impoverish impoverishes imprecate imprecates impregnate impregnates imprison imprisons impropriate impropriates improve improves improvise improvises impugn impugns impures impurifies impurify impurple impurples impute imputes inactivate inactivates inaugurate inaugurates inbind inbland inbreaks inbreathe inbreed inbreeds inburn incage incages incandesce incandesces incant incants incapacitate incapacitates incarcerate incarcerates incardinate incardinates incarn incarnadines incarnates incases incenses incent incentivise incentivises incentivize incentivizes incents incept incepts incinerate incinerates incise incises incite incites inclose incloses include includes incommode incommodes incoop incorporate incorporates incrassate incriminate incriminated incriminates incrust incrusts incubate incubates inculcate inculcates inculpates incur incurs incurve indagate indelve indemnifies indemnify independentize indevours indianise indianises indianize indianizes indicate indicates indicating indict indicts indigenize indigitates indites individualise individualises individualize individualizes individuate individuates indoctrinate indoctrinates indorse indorses induce induces induct inducts indue indues indulge indulges indurates industrialise industrialises industrialize industrializes indwell indwells inearth infantilise infantilises infantilize infantilizes infantize infantizes infatuate infatuates infect infects infefts infer infers infest infests infeudate infeudates infibulate infiltrate infiltrates infirms inflame inflames inflate inflates inflect inflects inflict inflicts infold infolds inforces inform informalize informalizes informs infract infringe infringes infulminate infuriate infuriates infuse infuses ingather ingeminates ingenders ingest ingests ingirts ingraft ingrafts ingrain ingrains ingratiate ingratiates ingrow ingulfs ingurgitate ingurgitates inhabit inhabits inhale inhales inheld inhere inheres inherit inherits inhibit inhibits inhold inhoop inhume inhumes init initialise initialised initialises initialize initialized initializes inits inject injects injunct injuncts injure injures inlarges inleague inlighten inlines inlive inlock inmesh inmew innates innerduce innerduces innervate innervates innoculate innovate innovates inoculate inoculates inorganize inorganizes inquinate inquire inquires inrages inregisters insconce inscribe inscribes insee inseminate inseminates insend insinuate insinuates insist insists insnare insnares insonate insonicate insonify insource inspan inspect inspects inspire inspires inspirit inspirits inspissate inspissates installs instanciate instanciates instantiate instantiates instate instates insteep instigate instigates instil instill instills instils institutionalise institutionalises institutionalize institutionalizes instop instrew instruct instrumentalise instrumentalises instrumentalize instrumentalizes insufflate insufflates insulate insulates insure insures integrate integrates intellectualise intellectualises intellectualize intellectualizes intend intends intenerate intensifies intensify inter interacts interbed interbeds interbreed interbreeds intercalate intercalates intercede intercedes intercoil intercoils intercommunicate intercommunicates intercompare intercompares interconnect interconnects interconvert interconverts intercorrelate intercorrelates interculturalize interculturalizes intercut intercuts interdigitate interdigitates interdine interdines interesses interesterifies interesterify interfere interferes interfile interfiles interfuse intergrade intergrades interiorize interiorizes interject interjects interknot interknots interlaces interlard interlards interlay interleafs interleave interleaves interlinks interlope interloped interlopes intermarries intermarry intermeddle intermeddles intermesh intermeshes intermingle intermingles intermit intermits internalise internalises internalize internalizes internationalise internationalises internationalize internationalizes interoffices interoperate interoperates interpel interpellate interpellates interpenetrate interpenetrates interplants interpolate interpolates interpolating interpose interposes interpret interprets interrail interreact interreacts interrelate interrelates interrogate interrogates inters intersect intersects intersperse intersperses intersubstitute intertwine intertwines intertwingle intertwingles intertwist intertwists intervene intervenes intervise intervises intervolve intervolves interweave interweaves interwork interwove intices intimidate intimidates intitle intitles intonate intonates intone intones intoxicate intoxicates intreasure intreasures intreat intreats intricates introduce introduces introgress introgresses introject introjects introspect introspects intrude intrudes intrust intrusts intubate intubates intuit intuits intumesce intwines inundate inundates inure inures inurn inurns invacuate invacuates invade invades invaginate invaginates invalidate invalidates inveigh inveighs inveigle inveigles inveil inveils invent inventorize inventorizes invents investigate investigates invests inveterates invigilate invigilates invigorate invigorates invoke invokes involve involves involving inwone inwrap inwreathe inwreathes inwrit inwrite iodinate iodinates iodise iodises iodize iodizes ionise ionises ionize ionizes iotize iotizes ipsatize ipsatizes ircs ires iridesce iridesces irk irks ironise ironises ironize ironizes irradiates irrigate irrigates irritate irritates irrumate irrumates irrupt irrupts islamize islamizes isomerise isomerize isomerizes isotropize italianise italianises italianize italianizes italicise italicises italicize italicizes itemise itemises itemize itemizes itinerate itinerates jabbers jackknifes jaculate jaculates jailbroke jalouse jalouses jamp jampack jampacks jangled jangles japanise japanize japanizes japans jark jarp jarps jasperize jasperizes jaunce jaundices jawblock jaywalk jaywalks jazzifies jazzify jee jees jeff jellifies jellify jeopard jeopardise jeopardises jeopardize jeopardizes jeopards jerrybuild jest jetwash jews jigget jiggles jills jits jizzes jobe jobes jodel jodels joggle joggles joists jooks joshes jounces journalize jousts joyrode jubilate jubilates judicialize judicializes jugulate jugulates jumboize jumboizes justifies justify justle justles juvenilize juxtapose juxtaposes kanoodle kanoodles kaolinise kaolinises kaolinize kaolinizes keak keelhaul keelhauls kent kept keratinize keratinizes kerblam kibbitz kibbitzes kibitz kibitzes kiboze kibozes kickban kickbans kidnaps kife kindle kitesurf kitesurfs kittles kleptoparasitize kleptoparasitizes kline kludged knaa knaps knaw knaws knawvshawl knawvshawls knead kneads kneel kneels knelt knew knit knits knobbed knows konk kosherize kosherizes koshers krige kumbayah kvell kvells kyanise kyanize labefies labialize lacerate lacerates lade lades ladyfies ladyfy laevigates laicise laicises laicize laicizes laid lallygags lambast lambaste lambastes lambasts laminarize lampworks lanches lancinate lancinated lancinates languish languishes lankens lanks lants lapidate lapidates lards larks larn larnin larns larnt larrups lase lases lateralize lateralizes lathers latinise latinises latinize latinizes lavishes layn lazarus lazaruses laze lazed lazes leans leant leapt learn learns leases leaving leches legalise legalises legalize legalizes legislate legislates legitimates legitimatize legitimatizes legitimise legitimises legitimize legitimizes leint leints lemmatise lemmatises lemmatize lemmatizes lemme lemonize lemonizes lend lends lengthen lengthens lenite lenites lent lesbianize lesbianizes lessen lessens lettest leverages levigate levitate levitates lex lexes lexicalise lexicalises lexicalize lexicalizes liaise liaises liberalise liberalises liberalize liberalizes liberate liberates librate lifelog lig ligate ligates lighten lightens lignify likee liken likens limehouse limn limns linearise linearize linearizes linger lingers linish linishes linkifies linkify lionise lionises lionize lionizes liposuck liposucks lippen lipread lipreads lipsynch liquefies liquefy liquidate liquidates liquidise liquidises liquidize liquidizes liquifies liquify listen listens literalize literalizes lithifies lithify litigate litigates lits liven livens lixiviate lixiviates ljbf loathe loathes lobotomize lobotomizes localise localises localize localizes locate locates lockpicked locomote locomotes logarithmize logroll loiter loiters lojbanize lojbanizes lol loll lollop lollops lolls lollygags lols londonize looky loosen loosens looses loots loppers lose loses louk loun lour lowercasifies lowercasify lowers loyalize loyalizes lubes lubricate lubricates lucks lucubrate lucubrates lumbers luminesce luminesces lurks lusts luteinize luteinizes luvd luxate luxates luxuriate luxuriates lynch lynches lyophilise lyophilises lyophilize lyophilizes lyse lyses maa mabble macadamize macadamizes macarize macarizes macgyver macgyvers machicolate machicolates machinate machinates macromanage macromanages mactate mactates maculates madden maddens made madefies madefy maderize maderizes mads maffick mafficks maffle magics magnetify magnetise magnetises magnetize magnetizes magnificate magnifies magnify mahoganize mahoganizes maim maims mainlines mainstreams maintain maintains majestifies majestify mak make makes maks malax malaxate malaxates malaxes maledicts maligns malinger malingers malinvest malinvests malleate maltreat maltreats malveuille malveuilles mamaguy mamaguys mammer mammonize manages manhandle manhandles manipulate manipulates manualize manualizes manumises manumit manumits manures manuscribes maraud marauds marbelize marbelizes marbleize marbleizes mard mards marginalise marginalises marginalize marginalizes marinate marinates marketise marketises marketize marketizes marls marmalise marmalises marmalize marmalizes marries marry mars martemper martempers martialize martializes martinize martyrize masculinise masculinises masculinize masculinizes mase mashes massifies massify masticate masticates mastuprate masturbate masturbates matchmade matchmake matchmakes materialise materialises materialize materializes maternalise maternalises maternalize maternalizes mathematicise mathematicises mathematicize mathematicizes mathematise mathematises mathematize mathematizes matriculate matriculates mattify maturate maturates matures maunder maunders maxes maximalize maximalizes maximise maximises maximize maximizes mayest mayst mcdonaldize mcdonaldizes meaning meant mechanise mechanised mechanises mechanize mechanizes meddle meddles mediates mediatise mediatises mediatize mediatizes medicalise medicalises medicalize medicalizes medicate medicates medievalize meditate meditates mediterraneanise mediterraneanises mediterraneanize mediterraneanizes meeken meekens meeks meep mekin melds meliorate meliorates mell mellify mellows mells melodise melodises melodize melodizes melodramatise melodramatises melodramatize melodramatizes melts memoise memoises memoize memoizes memorialise memorialises memorialize memorializes memorise memorises memorize memorizes mendelize meng menstruate menstruates mensurate mensurates mentalize mentalizes mentioning mentions mercerise mercerises mercerize mercerized mercerizes merchandises merchandizes mesmerise mesmerised mesmerises mesmerize mesmerizes metabolise metabolises metabolize metabolizes metalise metalises metalize metalizes metallicize metallise metallises metallize metallizes metamorphize metamorphizes metamorphose metamorphosise metamorphosises metamorphosize metamorphosizes metaphorise metaphorize metastasise metastasises metastasize metastasizes metastisizes metathesize metathesizes methodize metricate metricates metricize metricizes mewl mewls microchunk microchunks microencapsulate microencapsulates microfabricate microfabricates microinject microinjects micromanage micromanages microminiaturize microminiaturizes micronise micronises micronize micronizes microprogrammed microsoftifies microsoftify microtitrate micturate micturates midwifes mighta migrate migrates milden mildens mildews militarise militarises militarize militarizes militate militates militation militations millesimate mindwipes mineralize mineralizes mingle mingles mings miniaturise miniaturises miniaturize miniaturizes minifies minify minimalise minimalize minimise minimises minimize minimizes minishes minoritise minoritises minoritize minoritizes minse miranda mirandas mirandize mirandizes mires mirv misaddress misaddresses misadvise misadvises misaim misaims misalign misaligns misallocate misallocates misally misanalyze misanalyzes misapplies misapply misapprehend misapprehends misappropriate misappropriates misassociate misassociates misattribute misattributes misbecame misbecome misbecomes misbefall misbefallen misbefalls misbefell misbehave misbehaves misbelieve misbelieves misbind misbinds misbound misbrand misbrands miscalculate miscalculates miscalibrate miscalibrates miscall miscalls miscapitalise miscapitalises miscapitalize miscapitalizes miscarries miscarry miscasts miscategorise miscategorises miscategorize miscategorizes miscegenate miscegenates mischaracterise mischaracterises mischaracterize mischaracterizes mischarge mischarges mischieve misclassifies misclassify miscommunicate miscommunicates miscomprehend miscomprehends misconceive misconceives misconfigure misconfigures misconstrue misconstrues miscorrect miscorrects miscount miscounts miscreate miscreates miscued misdates misdealt misdeem misdeems misdescribe misdescribes misdiagnose misdial misdials misdid misdirect misdirects misdo misdoes misdoom misdoubt misdoubts miseducate miseducates misemploy misemploys misencode misencodes misevaluate misevaluates misexpress misexpresses misfeed misfeeds misfile misfiled misfiles misfold misfolds misformat misformats misfunction misfunctions misgauge misgauges misgave misgive misgives misgo misgoes misgovern misgoverned misgoverns misgrade misgrades misguess misguesses misguide misguides mishandle mishandled mishandles mishappen mishear misheard mishears misidentifies misidentify misimplement misimplements misinform misinforms misinterpret misinterprets misjudge misjudges miskeep miskeeps misken miskey mislabel mislabels mislaid mislay mislays mislead misleads mislike mislikes mislink mislinks mislocalize mislocalizes mislocate mislocates mismanage mismanaged mismanages mismap mismaps mismark mismarks mismeasure mismeasures misname misnamed misnames misogynise misoperate misoperates mispaint mispaints mispair mispairs misparaphrase misparaphrases misparses misperceive misperceives misphrase misphrases misplace misplaces misplay misplayed misplays misportray misportrays mispredict mispredicts misprescribe misprescribes misprice misprices misprise misprize misprizes misprocess misprocesses misproduces mispronounce mispronounces misquote misquoted misquotes misread misreads misreckon misreckons misrecognize misrecognizes misrecollect misrecollects misremember misremembers misreport misreported misreports misrepresent misrepresents misroute misroutes missaw missee missees missend missends missent misshape misshaped misshapes misshelve misshelves missionise missionises missionize missionizes missold missound missounds misspeak misspeaks misspell misspells misspelt misspend misspends misspoke misspoken misstate misstated misstates missteps mistag mistags mistaught misteach misteaches misthrew mistifies mistify mistime mistimes mistitle mistitles mistold mistook mistranscribe mistranscribes mistranslate mistranslated mistranslates mistransliterate mistransliterates mistreat mistreats mistrusts mistype mistyped mistypes misunderestimate misunderestimates misunderstand misunderstands misunderstood misvalue misvalues misvote miswant miswants miswent misword miswords miswrite miswrites miswrote mitch mitches miters mithridatize mitigate mitigates mizzles mobilise mobilises mobilize mobilizes moble mobles modalise modalises modernise modernises modernize modernizes modifies modify modularise modularises modularize modularizes modulate modulates mohammedanize moider moiders moisten moistens moistureproofs moisturise moisturises moisturize moisturizes moither moithers molest molests mollifies mollify monarchize monarchizes mondayize monetise monetises monetize monetizes mongrelise mongrelises mongrelize mongrelizes monochromatize monochromatizes monodisperses monologise monologises monologize monologizes monomerize monophthongise monophthongises monophthongize monophthongizes monopolise monopolises monopolize monopolizes monospaces monoubiquitinate monoubiquitylate monoubiquitylates monumentalize monumentalizes mooches moodle moodles moonlights mopes mopies moralise moralises moralize moralized moralizes morcellate morcels mormonise mormonises mormonize mormonizes mortifies mortify mosey moseys mosh moshes mosies moslemise moslemize mosy mothproofs motivate motivates motorise motorises motorize motorizes mottles mought moulders moults mourns moves mrb muckle muckles muckrake muckraked muckrakes mucks muddies mudpuddle muggled muleses multiplies multipost multiposts multitask multitasks mummifies mummify mump mun munge munges municipalize murks murl muscularize muscularizes musicalise musicalises musicalize musicalizes muslimise muslimize muslimizes musses mussitate mussitates mutagenize mutate mutates mutilate mutilates mutualise mutualises mutualize mutualizes myek myekin myeks myelinates mysticise mysticises mysticize mysticizes mystifies mystify myther mythicize mythicizes mythologise mythologises mythologize mythologizes naa naai nab nabbed nabs nack nacks nake namecheck namechecks namedrop namedrops nanofabricate nantle napalms narcoticize narcoticizes narcotise narcotize narcotizes narrate narrates narrativise narrativises narrativize narrativizes nasalise nasalised nasalises nasalize nasalizes nationalise nationalises nationalize nationalizes naturalise naturalises naturalize naturalizes nauseate nauseates navigate naysay nazifies nazify nears neaten neatens nebulise nebulises nebulize nebulizes necessitate necessitates necropost necroposts necrose necrotise necrotises necrotize necrotizes neg negate negates negativize negativizes neglects negotiate negotiates negs nemmine neologise neologize neologizes neoterise neoterize nephrectomize nerf nerfs nestle nestles neutralise neutralises neutralize neutralizes newcreate newgroup newgroups newmodel nicen nicens nickers nictate nictates nictitate nictitates nidificate nidificates nidify nifong nifongs niggerize niggerizes nihilate nihilates nill nipponize nipponizes nitpick nitpicks nitrify nitrogenate nitrogenates nitrogenise nitrogenize nitrosate nitrosylate nitrosylates nixes nobble nobbles nocks nods nodulate nodulates nominalize nominalizes nominate nominates nonpluses nonplusses nonsensify normalise normalises normalize normalizes nostalgize nostalgizes nostrificate nostrificates nostrifies nostrify nota notarise notarises notarize notarizes notate notates noticing notifies notify noting nourish novate novates novelise novelises novelize novelizes nuclearise nuclearises nuclearize nuclearizes nudges nullifies nullify numbs numerates numericize numericizes nuncupate nursle nutate nutshot nutshots nuzzle nuzzles nymshift obambulate obelise obelize obelizes obey obeys obfuscate obfuscates objectifies objectify objectivize objurgate objurgates obligates oblige obliges obliterate obliterates obliviate obliviates obrogate obrogates obscures obsecrate obsecrates observe observes obsess obsesses obsolesce obsolesces obsoletes obstipate obstruct obstructs obtain obtains obtest obtests obtrude obtrudes obtund obtunds obvert obviate obviates occasionate occasionates occlude occludes occults occupies occupy occur occurring occurs ocr octaviate odorise odorises odorize odorizes oestruate oestruates offbear offcap offend offends offhold officialise officialize officializes officiate officiates offs offsaddle offshores offstood oldens oligomerize oligomerizes omit omits onforward onomatopoeias onpass onsell onsells onsend onsold ooh oohs oompahs opacifies opacify opalise opalises opalize opalizes opaques operate operates operationalise operationalises operationalize operationalizes opes opine opines opinionate opinionates opinionize opinionizes oppilate oppilates oppose opposes oppress oppresses oppugn oppugns opsonise opsonises opsonize opsonizes opt optimise optimised optimises optimize optimizes opts orate orates orchestrate orchestrates ordain ordains organise organises organize organizes orient orientate orientates orients originate originates ork orthonormalize orthorectifies orthorectify oscillate oscillates osculate osculates osmoregulate osmoregulates osmose osseointegrate osseointegrates ossifies ossify ostracise ostracises ostracize ostracizes ouse ouses oust ousts outact outargue outask outate outbalance outbalances outbattle outbattles outbear outbid outbids outboast outboasts outbought outboxed outboxes outbrave outbreathe outbreed outbreeds outbuild outbuilds outbuilt outburn outburp outbuy outbuys outcampaign outcheer outclass outclasses outclimb outclimbs outcoach outcoaches outcompete outcompetes outcouple outcreep outdance outdances outdare outdares outdates outdazzle outdazzles outdid outdistance outdistances outdo outdoes outdrank outdraw outdraws outdress outdresses outdrew outdrink outdrive outdrives outdrove outduel outduels outdwell outearn outearns outeat outeaten outeats outens outexecute outexecutes outface outfaces outfart outfence outfences outfight outfights outfinesse outfinesses outfires outfish outflank outflanks outflew outflies outfly outfool outfools outfought outfox outfoxes outfrown outfrowns outfuck outgain outgains outgallop outgallops outgas outgases outgeneral outgenerals outglow outglows outgoes outgone outgreen outgreens outgrew outgross outgrosses outgrow outgrows outguess outguesses outgun outguns outhandle outhandles outheld outhit outhits outhold outholds outhustle outhustles outjest outjests outjump outjumps outken outkick outkicks outlaid outlast outlasts outlaugh outlaughs outlays outlead outleads outleaps outleapt outlick outlie outlies outlift outlitigate outlitigates outlive outlives outman outmanage outmanages outmaneuver outmaneuvers outmanoeuvre outmanoeuvres outmans outmatch outmatches outmeasure outmuscle outmuscles outnice outnim outnumber outnumbers outorganize outorganizes outpace outpaces outpass outpasses outperform outperforms outpiss outpitch outpitches outplace outplaces outplay outplays outpoint outpoints outpoll outpolls outpray outproduce outproduces outpsych outpunch outpunches outputt outputts outrace outraces outraise outraises outran outrange outranges outrank outranks outrate outrates outreachs outrebound outrebounds outreport outrights outrival outrivals outroar outroars outrode outrun outruns outrush outrushes outsail outsails outsang outsave outsaves outscold outscolds outscore outscored outscores outscorn outseek outsell outsells outserve outserves outshine outshines outshone outshoot outshoots outshop outshot outshout outshouts outsings outskate outskates outskip outsleep outsleeps outslept outslug outslugs outsmart outsmarts outsold outsound outsounds outsource outsources outspeak outspeaks outspeed outspell outspells outspend outspends outspent outspin outspoke outsprang outsprings outsprint outsprints outsprung outstable outstables outstand outstare outstares outstay outstays outstep outstrategize outstretch outstretches outstrip outstrips outswear outswears outswore outtalk outtalks outthink outthinks outthought outtrade outtrades outvalue outvie outvies outvote outvotes outwait outwaits outwalk outwalks outwatch outwear outwears outweep outweeps outweigh outweighs outwent outwept outwinter outwinters outwit outwits outwoo outwore outwrest outwrestle outwrestles outwrite outwrites outwrote outyell outyells ovariectomize ovariectomizes overaccommodate overaccommodates overachieve overachieves overact overacts overadvertise overadvertises overamplifies overamplify overanalyse overanalyses overanalyze overanalyzes overanesthetize overapplies overapply overapproximate overapproximates overarch overarched overarches overate overattribute overattributes overawe overawes overbake overbakes overbalance overbalances overbear overbears overbeat overbeats overbide overbids overbill overbills overbind overbinds overblew overblow overblows overboil overboils overbook overbooks overborne overborrow overborrows overbrand overbreed overbreeds overbrowse overbrowses overbubble overbubbles overbuild overbuilds overbuy overbuys overcalculate overcalculates overcame overcanopies overcanopy overcapitalize overcapitalizes overcark overcarve overcategorize overcategorizes overcharge overcharged overcharges overchill overchoreograph overclean overcleans overclock overclocks overcloud overclouds overcoach overcoaches overcoddle overcoddles overcollateralize overcollateralizes overcome overcomes overcommercialize overcommercializes overcommits overcompensate overcompensates overcomplicate overcomplicates overconstrain overconsume overconsumes overcontrol overcontrols overcook overcooks overcorrect overcorrects overcount overcounts overcover overcovers overcriticize overcriticizes overcrop overcrops overcrowd overcrowds overdamp overdamps overdecorate overdecorates overdesigns overdetermine overdetermines overdevelop overdevelops overdiagnose overdiagnoses overdid overdilute overdilutes overdo overdoes overdramatise overdramatises overdramatize overdramatizes overdrank overdraws overdreep overdress overdresses overdrew overdribble overdribbles overdrink overdrinks overdrunk overdye overdyes overeat overeats overegg overeggs overembellish overembellishes overemote overemotes overemphasise overemphasises overemphasize overemphasizes overengineer overengineers overenjoy overenjoys overequip overestimate overestimates overexaggerate overexaggerates overexcite overexcites overexercise overexercises overexert overexerts overexpand overexplain overexplains overexploit overexploits overexpose overexposes overexpress overexpresses overextend overextends overeye overfallen overfeed overfeeds overfell overfertilize overfills overfinance overfinances overfish overfishes overfit overflew overflies overfly overfuck overfulfil overfulfill overfund overfunds overgang overgeneralize overgeneralizes overgenerate overget overgild overgive overgoes overgraze overgrazes overgrew overgroom overgrooms overgrow overgrows overhandle overhandles overharvest overharvests overhear overheard overhears overheat overheats overheave overheld overheles overhend overhip overhire overhires overhit overhits overhung overhype overhypes overidealize overidealizes overidentifies overidentify overindulge overindulges overinflate overinflates overinsure overinsures overintellectualise overintellectualises overintellectualize overintellectualizes overinterpret overinvest overinvests overjoy overjoys overjustifies overjustify overkills overlaid overleap overleaps overleapt overlearn overlearns overlearnt overlegislate overlegislates overleverages overlie overlies overlight overlights overlined overlit overlive overlives overlook overlooks overlubricate overlubricates overmanipulate overmanipulates overmans overmarket overmarkets overmast overmaster overmasters overmasts overmedicalize overmedicalizes overmedicate overmedicates overmike overmilitarizes overmilk overmilks overmix overmixes overmodulate overmodulates overpack overpackage overpackages overpacks overpaid overpaint overpaints overparameterize overparameterizes overpay overpays overpedal overpedals overperform overperforms overpersuade overpersuades overpitch overpitches overplay overplays overplough overploughs overplow overplows overpluck overplucks overpopulate overpopulates overpour overpours overpower overpowers overpraise overpraises overpredict overpredicts overprepare overprepares overprescribe overprescribes overpressurize overpressurizes overprice overprices overprime overprocess overprocesses overproduce overproduces overpromise overpromises overpronate overpronates overproportion overproportions overprotect overprotects overpsychologize overpsychologizes overpunch overpunches overpursue overpursues overquantify overran overrate overrates overreact overreacts overread overreads overrefine overrefines overregulate overregulates overreport overreports overrepresent overrepresents overrestore overripen overripens overroast overroasts overrode overromanticize overromanticizes overrule overrules overruns oversalt oversalts oversang oversaturate oversaturates oversauce oversauces oversaw overschedule overschedules overscreen overscreens overseason overseasons oversedate oversedates oversee overseed overseeds oversees oversell oversells oversend overserve overserves overservice overservices overset oversets oversew oversexualize oversexualizes overshade overshadow overshadows overshare overshares overshoots overshop overshops overshorten overshortens oversimplifies oversimplify oversings overskate overskates oversleep oversleeps overslept oversoften oversoftens overspecialise overspecialises overspecialize overspecializes overspecifies overspecify overspend overspends overspent overspread overspreads oversprinkle overstaff overstaffs overstate overstates overstay overstays overstep oversteps overstimulate overstimulates overstrain overstrains overstress overstresses overstretch overstretches overstride overstrides overstrode overstudy overstuff overstuffs oversubscribe oversubscribes oversung oversway oversweeten oversweetens overswung oversystematise oversystematises oversystematize oversystematizes overtake overtakes overtan overtans overtask overtasks overtaught overtax overtaxes overteach overteaches overtest overtests overtheorize overtheorizes overthink overthinks overthought overthrew overtip overtips overtire overtires overtook overtop overtops overtout overtouts overtrain overtrains overtreat overtreats overtrump overtrumps overturn overturns overtwist overtypes overuses overutilize overutilizes overvalue overvalues overwash overwashes overwatches overwaters overwears overweights overwent overwet overwets overwhelm overwhelms overwhip overwind overwinds overwinter overwinters overworks overwrite overwrites overwrote oviposit oviposits ovulate ovulates owe owes owns oxidise oxidises oxidize oxidizes oxygenate oxygenates oxygenise oxygenises oxygenize oxygenizes ozonise ozonises ozonize ozonizes pabble paceth pacifies pacify packetize packetizes packup packups paganise paganises paganize paganizes paginate paginates paid palatalise palatalises palatalize palatalizes palavers palettise palettize palettizes palletise palletises palletize palletizes palliate palliates palmitoylate palmitoylates palpates palpitate palpitates palter palters pamper pampers pandiculate pandiculates panegyrise panegyrises panegyrize panegyrizes pantheonise pantheonises pantheonize pantheonizes pantses paraglide paraglides paralleled parallelize parallelizes paralyse paralyze paralyzes parameterise parameterises parameterize parameterizes parametrise parametrises parametrize parametrizes parasitise parasitises parasitize parasitizes parbake parbakes parboil parboils parcellate parcellates parch parches pare parenthesise parenthesises parenthesize parenthesizes pares parleyvoos parquets parses partake partakes participate participates particularise particularises particularize particularizes partook passivate passivates passivise passivises passivize passivizes pasteurise pasteurize pasteurizes paternalise paternalises paternalize paternalizes pathologise pathologises pathologize pathologizes patinates patine patines patriate patriates patronise patronises patronize patronizes paunchs pauperise pauperises pauperize pauperizes paves pavilions pays peacifies peacify peculate peculates peddle peddles pedestrianise pedestrianised pedestrianises pedestrianize pedestrianizes pedgill pedgills peek peeks peercast pegylate pegylates pejorate pelletize pelletizes pelts penalise penalises penalize penalizes pends penectomize penetrate penetrates peninsulate peninsulates perambulate perambulates perceive perceives perceptualize perceptualizes perchlorinate perchlorinates percuss percusses perdeuterate perdure peregrinates perempt perempts perendinate perennate perennialize perennializes perfects perflate perflates perforates perform performs perfuse perfuses periclitates perish perishes perjure perjures perlustrate perlustrates permanentize permanentizes permeabilize permeabilizes permeablise permeablises permeate permeates permutate permute permutes perorate perorates peroxidise peroxidises peroxidize peroxidizes perpetrate perpetrates perpetuate perpetuates perplex perplexes perscopates persecute persecutes perservere perseverate perseverates persevere perseveres persist persists personalise personalises personalize personalizes personate personates personifies personify perspire perspires perstringe persuade persuades pertain pertains perturb perturbate perturbates perturbs peruses pervade pervades pervaporate pervaporates pester pesters petrifies petrify petsit pettifog pettifogs pfaff pfaffs phagocytise phagocytises phagocytize phagocytizes phagocytose phantasize phantasizes pharyngealize pharyngealizes philosophate philosophates philosophise philosophises philosophize philosophized philosophizes phlebotomize phlegmatize phlegmatizes phonemicize phonemicizes phonologize phosphatize phosphatizes phosphorate phosphoresce phosphoresces phosphorise phosphorize phosphorizes phosphorylate phosphorylates phot photobleach photocleave photocleaves photocompose photocomposes photoconvert photoconverts photodisintegrate photodissociate photodissociates photodope photoengrave photoengraves photoexcite photoexcites photoinject photoionize photoionizes photoisomerize photoisomerizes photoluminesce photolyse photolyze photosensitise photosensitises photosensitize photosensitizes photoshop photoshops photostabilize photosynthesise photosynthesises photosynthesize photosynthesizes phots phrensied phrensies physicalize physicalizes piecen pieface pierce pierces piffles pigged piggybacks pigmentate pigmentates pilfer pilfers pillages pillarize pinocytose pinocytoses pipelay pisses pitchpole pitchpoles piths pities pittles pixelate pixelates pixellate pixellates placate placates placifies placify plagiarise plagiarises plagiarize plagiarizes planarize planarizes planish planished planishes plantarflex plantarflexes plapper plappers plashed plashes plasmolyse plasticise plasticises plasticize plasticizes plateaus platinise platinises platinize platinizes platted playact playacts playfought plays playtest playtests pleach plead pleads pleases plenish plenishes plims plodge plodges plodgin plods ploidize plotz plotzes ploughs plounce plounces plucks plumps plunders plunges plunk plunks pluralise pluralises pluralize pluralizes pluto plutos pmses poach poaches podzolize podzolizes poeticise poeticises poeticize poeticizes poetize poetizes pointing poises polari polarise polarises polarize polarizes polemicize polemicizes polices politicise politicised politicises politicize politicizes politick pollenize pollenizes pollicates pollinates pollutes polonise polonises polonize polonizes polycondense polycondenses polygamise polygamises polygamize polygamizes polygonize polygonizes polymerise polymerises polymerize polymerizes polyubiquitinate polyubiquitinates polyubiquitinylate polyubiquitinylates polyubiquitylate polyubiquitylates ponced ponder ponders pontifies pontify poopoo poopoos poormouth poormouths popularise popularises popularize popularizes populate populates porks porrects portend portends portray portrays possess possesses postdate postdates posterise posterises posterize posterizes postmodernise postmodernises postmodernize postmodernizes postmodify postpone postpones postpose potch potchky pote potentialize potentiate potentiates pounces pours powerbock powerbocks practise practises praecedes praedicts praefers praepares praescribes praescribeth praesenteth praesumes praetends pratfallen pratfell prattles praught praunces prays preach preaches preachify preallocate preambulate preambulates preannounce preannounces preapprove preapproves prearrange prearranges preassemble preassembles preassociate preassociates prebakes prebatch preboard preboards prebook prebooks prebought prebuffer prebuffers prebuild prebuilds prebuy prebuys precache precaches precalculate precalculates precede precedes precertifies precertify precess precesses prechew prechews precises preclude precludes precoat precompile precompiles precompress precompresses precompute precomputes preconceive preconceives preconfigure preconfigures preconize precook precooks precool precools precounsel precurse precurses precut precuts precycle precycles predefine predefines predesignate predesignates predestine predestines predetermine predetermines predict predicts predigest predigests predispose predisposes predominates predoom predoses preempt preempts preen preens preexist preexists prefabricate prefabricates prefer prefers prefetch prefetches prefigure prefigures prefill prefork preforks preformat preformats pregelatinize pregelatinizes pregrease pregreases pregrill pregrind pregrinds preharden prehardens preheat preheats prehydrate prehydrates preinstall preinstalls preionize prejudge prejudges prelight prelights prelit preload preloads preludes premade premake premakes premaster premeditate premeditates premodify premultiply prenasalize prenasalizes prenominate prentices preoccupies preoccupy preoptimize preoptimizes preordain preordains prepackage prepackages prepaint prepaints prepare prepares preparse preparses prepay prepays prepend prepends prepenses preplan preponderate prepone prepones prepopulate prepopulates prepose preposes prepossess prepossesses preprepare preprocess preprocesses preprogram preprograms preprovide prequalifies prerecord prerecords preregister preregisters prerender prerenders prerequire preresolve prescan prescans preschedule preschedules prescind prescore prescores prescreen prescreens prescribe prescribes preselect preselects presell presells presets preshows preshrank preshrink preshrinks preside presides presift presold presort presorts presses pressurise pressurises pressurize pressurizes prestidigitate prestidigitates prestress prestresses prestretch presume presumes presuppose presupposes pretape pretapes pretend pretends pretermit pretermits pretreat pretreats prettifies prettify prevail prevails prevalidate prevalidates prevaricate prevaricates prevent prevents previse preweight preweights prewire prewrites prewrote preys pries primp primps prinks prioritise prioritises prioritize prioritizes prise privatise privatised privatises privatize privatizes proact proacts problematize problematizes proceed proclaim proclaims procrastinate procrastinates procreate procreates procure procures produces productize productizes profanes profer profers profess professes professionalise professionalises professionalize professionalizes profounds prognosticate prognosticates programed progresses prohibit prohibits proletarianise proletarianize proliferate proliferates prolong prolongate prolongs promogulate promogulates promote promotes promulgate promulgates pronate pronates pronks pronounce pronounces pronounciate proofread proofreads proove prooves propagandize propagandizes propagate propagates propel propels propend prophecise prophecises prophecize prophecizes prophesies prophesize prophesizes prophesy prophetize prophetizes propitiate propitiates propone proport proportionates propose proposes propound propounds prorate prorates prorogue prorogues proscribe proscribes prosecute prosecutes proselytise proselytises proselytize proselytizes prosper prospers prostrates protect protects proteolyze proteolyzes protists protocolize protocolizes protonate protonates protract protracts protrude protrudes protuberate prove proves provide provides provincialise provincialises provincialize provincializes provoke provokes prowl prowls psych psychoanalyse psychoanalyses psychoanalyze psychoanalyzes psychologize psychologizes psychs ptyalize publicate publicise publicises publicize publicizes publish publishes publishing puffs puggles pulchrifies pulchrify pullulate pullulates pulsate pulsates pultrude pulverise pulverises pulverize pulverizes pumices pummel pummels pumpjacks punctuate punctuates punctulates pungle pungles punish punishes pupate pupates pupu purifies purify purloin purloins purports pursue pursues purvey purveys pussifies pussify pussyfoot pussyfoots pussywhip pussywhips putrefies putrefy putrifies putrify puts pwnd pwns pwnt pyramidalize pyritize pyrolyse pyrolysize pyrolyze pyrolyzes pyrosequence pyrosequences pythagorize pythagorizes quackle quadfurcate quadrates quadrisect quadrisects quadruples quaestions qualifies qualify quantifies quantify quantise quantises quantitate quantitates quantize quantizes quartersaw quartersaws quash quashes quat quave queem quenches quetch quethes quickens quicksilvers quicksteps quiddle quiddles quiesce quiesces quieten quietens quininizes quisle quit quitclaims quob quobs quonks quop quopped quops rabbitts racemize racemizes racewalk racewalks racialise racialises racialize racializes radars radgin radiates radicalise radicalises radicalize radicalizes radioactivate radioactivates radiosensitise radiosensitize ragequit ragequits raim rainproofs raises ralph ralphs rame ramifies ramify rampages ran rancidifies rancidify randomise randomises randomize randomizes rang ranging rankle rankles ransack ransacks ransoms rarefies rarefy rares rarifies rarify rassle rassles rasterise rasterises rasterize rasterizes rathel ratifies ratify ratiocinate ratiocinates rationalise rationalises rationalize rationalizes rattoon rattoons ravel ravels ravish ravishes rax raxes raxle raze razes razzes razzle razzles reabsorb reabsorbs reaccelerate reaccelerates reaccentuate reaccentuates reaccept reaccepts reacclimate reacclimates reaccumulate reaccustom reaccustoms reacidifies reacidify reacknowledge reacknowledges reacquaint reacquaints reacquire reacquires react reactivate reactivated reactivates reacts readapt readapts readd readdress readdresses readds readjust readjusts readminister readministers readmit readmits readopt readopts reads readvertise readvertises reaffirm reaffirms reaffix reaffixes reafforest reafforests realign realigns realise realises realize realizes reallocate reallocated reallocates reallot reallow reallows reamplify reanalyse reanalyze reanalyzed reanalyzes reanimates reanneal reanneals reannex reannexes reannotate reannotates reannounce reannounces reanoint reanoints reanswer reanswers reappear reappears reapplied reapplies reapply reappoint reappoints reapportion reapportions reappraise reappraised reappraises reapproach reapproaches reappropriate reappropriates reapprove reapproves reaps rearchitect rearchitects reargue reargues rearm rearms rearomatize rearomatizes rearrange rearranges rearrest rearrests rearticulate rearticulates reascend reascends reassault reassemble reassembled reassembles reassert reasserts reassess reassesses reassign reassigns reassociate reassociates reassume reassumes reassure reassures reattach reattachs reattain reattains reattract reattracts reattributes reaudition reauditions reauthorise reauthorize reauthorizes reaves reawake reawaken reawakens reawakes reawoke rebadge rebadges rebag rebags rebakes rebalance rebalances rebandage rebandages rebaptize rebaptizes rebase rebaseline rebaselines rebear rebears rebegan rebegin rebegins rebelieve rebelieves rebend rebends rebent rebid rebids rebill rebills rebind rebinds rebleeds reblock reblocks reblog reblogs rebloom reblooms reblossom reblossoms reboard reboards reboil reboils rebond rebonds rebook rebooks rebore rebores reborrow reborrows rebottle rebottles rebought rebreathe rebribe rebribes rebrick rebricks rebroadcast rebroadcasts rebuilds rebuilt rebulb rebulbs reburied reburies rebury rebut rebuts recache recaches recalculate recalculated recalculates recalibrate recalibrates recalk recalks recan recanalise recanalises recanalize recanalizes recans recant recants recapitalise recapitalised recapitalises recapitalize recapitalizes recapitulate recapitulates recaptions recarve recarves recatch recatches recategorise recategorises recategorize recategorizes recaught recaulk recaulks recede recedes receive receives recenter recenters recentralize recentralizes recentre recentres recertifies recertify rechalk rechalks rechallenges rechange rechanges rechannel rechannels recharacterize recharacterizes recharges rechart rechew rechews rechill rechills rechime rechoose rechooses rechoreograph rechoreographs rechose rechristen rechristens recidivate recidivates reciprocate reciprocates recircuit recircuits recirculate recirculates recite recites reck reckon reckons recks reclad reclads reclaims reclassifies reclassify reclean recleans reclimb reclimbs recline reclines recloak recloaks reclog reclogs reclone reclones reclose recloses reclothe reclothes reclude recludes recluster reclusters recock recocks recode recodes recognise recognises recognize recognizes recohere recoheres recoin recollapse recollapses recollar recollect recollects recollide recollides recolonises recolonize recolonizes recolor recolors recolour recolours recombine recombines recomfort recomforts recommence recommences recommend recommends recommission recommissions recommit recommits recommitted recompenses recompete recompile recompiles recomplicate recomplicates recompose recomposes recompress recompresses recompute recomputed recomputes reconceives reconceptualise reconceptualises reconceptualize reconceptualizes reconcile reconciles recondense recondenses recondition reconditions reconductor reconductors reconfigure reconfigures reconfirm reconfirms recongregate recongregates reconjure reconjures reconnect reconnects reconnoitres reconquer reconquers reconsecrate reconsecrated reconsecrates reconsider reconsign reconsigned reconsigns reconsolidate reconsolidates reconstitute reconstitutes reconstrict reconstricts reconstruct reconstructs reconsult reconsults recontact recontacted recontacts recontaminate recontaminated recontaminates recontextualise recontextualises recontextualize recontextualizes recontour recontours reconvene reconvenes reconverge reconverges reconvert reconverts reconvict recook recooks recool recooper recopied recopies recopy recopyright recopyrights recork recorks recorrect recorrects recoup recouple recouples recoups recovers recraft recrafts recreate recreates recriminate recriminates recrown recrowns recrudesce recrumple recrystallise recrystallises recrystallize recrystallizes rectifies rectify recultivate recultivates recuperate recuperates recur recurs recurse recurses recurve recurves recuse recuses recut recuts recycle recycles recyclize recyclizes redact redacts redaguerreotype redargue redargues redate redates redbaits redden reddens reddles redeal redeals redealt redecide redecides redeck redeconvolve redecorate redecorates rededicate rededicated rededicates redeem redeems redefine redefines redelete redeliver redelivers redemand redemands redemonstrate redemonstrates redenominate redenominates redeploy redeploys redeposit redeposits rederive rederives redescribe redescribes redesignate redesignates redetect redetects redetermine redetermines redevelop redevelops rediagonalize rediagonalizes redials redid redifferentiate redifferentiates redigest redigests redimension redimensions rediscover rediscovers rediscuss rediscusses redisplay redisplays redispose redissolve redissolved redissolves redistill redistills redistribute redistributes redistrict redistricted redistricts redivert redivide redivides redoes redouble redoubles redound redounds redownload redownloads redraws redrew redries redrill redrills redry redshirts redubbed reduce reduces reduplicates redye redyes reeducate reeducates reeks reelect reelects reembark reembarks reembodied reembodies reembody reemerge reemerges reemit reemits reemphasise reemphasises reemphasize reemphasized reemphasizes reemploy reemploys reenable reenables reenact reenacts reencode reencodes reencountered reenergize reenergizes reenforce reengage reengages reengineer reengineers reenlist reenlists reenter reenters reenvision reenvisions reequip reequips reestablish reestablishes reesterify reevaluate reevaluates reevaporate reevolve reexamine reexamines reexplain reexport reexports reexpose reexposes reexpress reexpresses reextend reextends refabricate refabricates reface refaces refactor refactors refall refalls refamiliarise refamiliarises refamiliarize refamiliarizes refashion refashions refasten refastens refatten refattens refax refaxes refeed refeeds refell refelt refelts refer referment referments refers refight refights refigure refile refiles refinance refinances refind refinds refine refines refinish refinishes refix refixes reflag reflags reflash reflashes reflate reflates reflect reflectorize reflectorizes reflects reflip reflips refloat refloats reflood refloods refloor reflow reflower reflowers reflows refly refocillates refocus refocuses refocusses refold refolds refool refools reforest reforests reforge reforged reforges reformat reformats reformulate reformulated reformulates refortified refortifies refortify reforward reforwards refought refound refounds refract refracts reframe reframes refreeze refreezes refreshes refries refrigerate refrigerates refroze refry reft refuck refudiate refudiates refuel refuels refunnel refurbish refurbishes refurl refurls refurnish refurnished refurnishes refuses refute refutes regain regains regales regases regasifies regasify regasses regather regathers regave regelate regender regenders regenerate regenerates regentrify regild regilds regionalise regionalises regionalize regionalizes regive regives reglaze reglazes regloss reglosses reglucosylate reglucosylates regorge regorges regrade regraded regrades regraze regrazes regrease regreases regreen regreens regresses regrew regrind regrinds regrip regrips regroove regrooves reground regroup regroups regrout regrouts regrow regrows regularise regularises regularize regularized regularizes regulate regulates regurgitate regurgitates rehabilitate rehabilitates rehammer rehammers rehang rehangs rehappen rehappens reharmonize reharmonizes rehat rehats reheal reheals rehear rehears rehearse rehearses reheel rehid rehide rehides rehinge rehinges rehire rehired rehires rehome rehomed rehomes rehone rehones rehospitalise rehospitalises rehospitalize rehospitalizes rehouse rehoused rehouses rehumanize rehumanizes rehung rehydrate rehydrates rehyphenate rehyphenates rehypnotize rehypnotizes reidentifies reidentify reifies reify reignite reignited reignites reilluminate reilluminates reillumine reillumines reimage reimages reimagine reimagines reimburse reimburses reimmerse reimmerses reimplant reimplants reimplement reimplements reimpose reimposed reimposes reimpress reimpresses reimprison reimprisons reinaugurate reinaugurates reincarcerate reincarcerates reincarnate reincarnates reinclude reincludes reincorporate reincorporates reindict reindicts reinduce reinduces reindustrialise reindustrialises reindustrialize reindustrializes reinfect reinfects reinfiltrate reinfiltrates reinflame reinflames reinflate reinflates reinforce reinforces reinform reinforms reinhabit reinhabits reinitialise reinitialises reinitialize reinitializes reinitiate reinitiates reinject reinjects reinjure reinjures reinnervate reinnervates reinoculate reinoculated reinoculates reinput reinscribe reinscribes reinsert reinserts reinspect reinspects reinspire reinstall reinstalls reinstate reinstates reinstigate reinstigates reinstill reinstills reinstitute reinstitutes reinstitutionalise reinstitutionalises reinstitutionalize reinstitutionalizes reinstruct reinstructs reinsulate reinsulates reinsure reinsures reintegrate reintegrates reinter reinterest reinterests reinterpret reinterprets reinters reinterview reinterviews reintroduce reintroduces reinvade reinvades reinvent reinvents reinvest reinvestigate reinvestigates reinvests reinvigorate reinvigorates reinvoice reinvolve reinvolves reionise reionises reionize reionizes reisolate reisolates reiterates reives rejail rejails rejig rejigger rejiggers rejiggle rejigs rejoice rejoices rejoin rejoins rejoint rejoyces rejudge rejudged rejudges rejustifies rejustify rejuvenate rejuvenates rekey rekeyboard rekeyboards rekeys rekindle rekindles reknit reknits relabel relabels relace relaces relaid relaminarize relaminarizes relapses relate relates relating relativise relativises relativize relativizes relaunches relax relaxes relead releads relearn relearns relearnt relegates relevate relevel relevels relexify relicense relicenses relies relieve relieves religate relight relights reline relines relink relinks relinquish relinquishes reliquefies reliquefy reliquifies reliquify relist relisten relistens relists relit relitigate relitigates relive relives reload reloads relocalize relocalizes relocate relocates relock relocks relubricate relubricates reluct relucts relume relumes rely remade remagnetize remagnetizes remains reman remands remanufacture remanufactures remap remaps remarket remarkets remarking remarries remarry remaster remasters remate rematerialize rematerializes remeasure remeasures remediates remeet remeets remelt remelts remember remembers rememorate rememorates remerchandise remerchandises remercy remet remethylate remigrate remigrated remigrates remilitarize remilitarizes remind reminds remineralise remineralises remineralize remineralizes reminisce reminisces remint remints remixed remixes remobilise remobilises remobilize remobilizes remodel remodels remodify remold remolds remonetize remonetizes remonstrate remonstrates remotivate remotivates remould remoulds remound remuddle remuddles remunerate remunerates remunerations remystifies remystify renail renails rename renames renationalise renationalises renationalize renationalizes renature renatures rend rendezvouses rends renege reneges renegotiate renegotiated renegotiates renest renests renew renews renig renominate renominated renominates renormalise renormalises renormalize renormalizes renourish renourishes renovate renovates renumber renumbers renumerates reobtain reobtains reoccupies reoccupy reoccur reoccurs reoffend reoffends reop reopen reopens reops reoptimize reoptimizes reorchestrate reordain reordains reorder reorders reorganises reorganize reorganizes reorient reorients reoxidize reoxidizes reoxygenate reoxygenates repack repackage repackages repacketize repacketizes repacks repaginate repaginates repaid repaints repalletize repalletizes repaper repapers reparates reparse reparses repass repaste repatch repatches repatriates repave repaved repaves repay repays repeddle repel repels repent repents repeople repeoples reperceive reperceives reperform reperforms rephase rephases rephotograph rephotographs rephrase rephrases repin repine repines repins repitch repitches repivot repivots replace replaces replait replaits replan replant replants replaster replasters replate replates replenish replenishes replevy replicate replicates replot replots replough reploughs replow replows replug replugs repoint repoints repolarise repolarize repolarizes repolish repolishes repopularise repopularises repopularize repopularizes repopulate repopulated repopulates reposition repositions repossess repossesses repost reposts repot repots repour reprehend reprehends reprepare represent representing represents represses repressure repressures repressurise repressurises repressurize repressurizes reprice repriced reprices reprioritise reprioritises reprioritize reprioritizes repristinate repristinates reprivatise reprivatize reprivatizes repro reprobe reprocess reprocessed reprocesses reproduce reproduces reprofessionalize reprofessionalizes reprofile reprofiles reprogram reprogramme reprograms reproliferate reproliferates repromote repromotes repropagate repropagates reprove republish republishes repudiate repudiates repugns repunctuate repunctuates repunish repunishes repurchases repurify repurpose repurposes reputes repyne requalifies requalify requeen requeens requestion requestions require requires requite requites requote requotes reradiate reradiates reran rerandomize rerandomizes rerape rerapes rerate rerates rerattle reread rereads rerecords rerefer rerefers reregister reregisters reregulate reregulates rerender rerenders rerent rerents rereport rereports rerig rerigs reroll rerolls reroof reroofs reroute reroutes resacralize resacralizes resaddle resaid resail resalute resample resamples resand resands resanitize resat resave resaw resaws resay resays rescale rescales rescan rescans rescatter rescatters reschedule reschedules rescind rescinds rescope rescopes rescore rescores rescramble rescrambles rescreen rescreens resculpt resculpts resculpture resculptures reseal reseals reseason reseat reseats resect resects resecure resecures resediment reseed reseeds resegregate resegregates resegregrate resegregrates reseize reseizes reselect resell resells resemble resembles resend resends resensitize resent resentence resentences resents resequence resettle resettled resettles resew resews reshake reshakes reshape reshapes resharpen resharpens reshave resheath resheathe resheathed resheathes resheaths reshelve reshelves reshim reshims reshingle reshingles reship reships reshook reshot reshow reshows reside resides resift resifts resight resights resign resignal resigns resile resiles resinate resinates resinified resinifies resinify resituate resituates resize resizes reskill reskills reskin reskins resmelt resmelts resod resods resold resolder resolders resole resoles resolidifies resolidify resolves resonate resonates resorb resorbs resound resounds resow resowed resows respawn respawns respec respecifies respecify respecs respect respectabilize respectabilizes respell respells respelt respend respent respider respiders respin respirate respire resplend resplends respot respots resprout resprouts restabilise restabilises restabilize restabilizes restack restacks restaff restaffs restage restages restain restains restaple restaples restate restates restation restations resterilize resterilizes restick resticks restimulate restimulates restitch restitched restitches restitute restitutes restock restocks restone restopper restore restores restrain restrains restrengthen restrengthens restretch restretches restrict restricts restrings restripe restripes restructure restructured restuck restudied restudies restudy restump restyle restyles resubject resubmerge resubmerges resubmit resubmits resubscribe resubscribed resubscribes resulting results resummon resummons resupplies resurface resurfaces resurge resurges resurrect resurrects resurvey resurveys resuscitate resuscitates resuspend resuspends reswear reswears reswore resyllabifies resyllabify resynchronize resynthesize ret retag retags retailor retails retain retains retaliate retaliates retally retape retapes retarget retargets retaught retch retches reteach reteaches reteam reteams retear retears retee retees retelecast retelecasts retell retells retender retexture retextures rethatch rethatched rethatches rethaw retheme rethemes rethink rethinks rethought rethread rethreads rethrew rethrow rethrows reticket retickets reticulates retie reties retighten retightens retile retiles retime retimes retires retitle retitles retold retook retool retools retore retoss retraces retract retracts retrain retrains retranslate retranslates retransliterate retransliterates retransmit retransmits retransplant retransplants retraumatize retraumatizes retravel retravels retrench retrenches retrieves retrig retrigger retriggers retrigs retrocede retrodict retrodicts retrodisplace retroflect retroflects retrogreen retrogress retrogresses retromod retromoderate retromoderates retrotranspose retrotransposes retube retubes retune retunes returf returfs returns retweet retweets retwist retwists retype retypes reunified reunifies reunify reunite reunites reupholster reupholsters reupload reuploads reutilise reutilises reutilize reutilizes revaccinate revaccinates revalidate revalidates revalorise revalorize revaluate revalue revalued revalues revamp revamps revarnish revarnishes reveals revegetate reverberate reverberates reverences reveres revest revests revet revictual revictuals revile reviles revindicate revindicates revitalise revitalises revitalize revitalizes revive revives revivifies revivify revoice revoices revolutes revolutionalise revolutionalised revolutionalises revolutionise revolutionises revolutionize revolutionizes revolve revolves rewalk rewalks rewarehouse rewarm rewarms rewashed rewashes rewatch rewatches rewater rewax rewaxes reweave reweaves rewed reweds reweigh reweighs reweight reweights rewicker rewild rewilds rewinded rewire rewires reword rewords reworks rewound rewove rewrap rewraps rewrote rezone rezoned rezones rhapsodise rhapsodises rhapsodize rhapsodizes rhotacise rhotacises rhotacize rhotacizes ribosylate ribosylates richen richens rickroll rickrolls ridicules rids righten rightens rightsize rightsized rightsizes rigidifies rigidify rigorize rigorized rigorizes rike rile riles ringbark ringbarks ringfence ringfences ripen ripens rises risp risps ritualise ritualises ritualize ritualizes rivel rivetted riz rize roam roams roaves rob robotise robotize robotizes robs robustify roger rogers roil roils roister roisters roleplays rolf rolfs rollick rollicks romanise romanises romanize romanizes romanticise romanticises romanticize romanticizes rootle rootles rotate rotates rotavate rotoscopes rototill rototills rotovate rotovates rotproofs roughen roughens roughhouses roust rousts routinise routinises routinize routinizes rove roves rox royalize royalizes roysters rsvp rubberise rubberises rubberize rubberizes rubbernecks rubberstamp rubberstamps rubbishes rubifies rubify rubricate ruckle ruckles rucks ruddles ruggedise ruggedize ruggedizes ruinate ruinates ruminate rummages rumors rumours rumple rumples ruralise ruralises ruralize ruralizes russifies russify rusticate rusticates rustproofs rusts sab sabbatize sabotages saccharify sacerdotalize sacralize sacralizes sacramentize sacredize sacredizes sadden saddens sadducize sagaciate sagaciates saginates sailboards sain sains salicylize salify salinate salinise salinised salinises salinize salinizes salivate salivates salutes sanctifies sanctify sanctuarize sanctuarizes sandblast sandblasts sang sanitate sanitates sanitise sanitises sanitize sanitizes sank santer santers saponifies saponify sarcase sasses satanize satiates satirise satirises satirize satirizes satisfice satisfices satisfies satisfy satisfying saturate saturates saute sautes savvies says scabbed scabble scaffolds scagged scalarize scalarizes scald scalds scampers scandalise scandalises scandalize scandalizes scanlate scarifies scarify scarper scarpers scathes scats scatted scatter scatters scavenge scavenges schappe schematize schematizes schlepps scintillate scintillates sclerose sclerotise sclerotises sclerotize sclerotizes scold scooch scooches scootch scootches scorify scorns scour scrabble scrabbles scraight scrams scrapbooked screak screaks screenscrape screenscrapes screwtape screwtapes scries scriggle scrimple scrimshanders scrimshank scrimshanks scrimshaws scritch scritches scrooch scrooches scroop scroops scrootch scrootches scrouges scrump scrumple scrumples scrumps scrunched scrunches scrutinise scrutinises scrutinize scrutinizes scruze scry scuffs sculk sculpt sculpts scumbles scurries scurry sears secede secedes secern seclude secludes secrete secretes secuers secularise secularises secularize secularizes secures securitise securitises securitize securitizes sedates sedentarise sedentarises sedentarize sedentarizes seduce seduces seek seeks seels seem seems seesaws seethe seethes segregates segued seise seises seize seizes semiautomate semiautomates semiforces send sends senesce senesces sensationalise sensationalises sensationalize sensationalizes sensitise sensitises sensitize sensitizes sentimentalise sentimentalises sentimentalize sentimentalizes seponate septembrise septembrises septembrize septembrizes septuples sepulchers sequester sequesters sequestrates serialise serialises serialize serializes sermonise sermonises sermonize sermonized sermonizes seroconvert serpentinize sesquioxidize sesquioxidizes settles sever severs sew sews sexifies sexify sexile sexiles sexualise sexualises sexualize sexualizes sez shaddup shamble shames shanghais shapen shapeshift shapeshifts sharecrop sharecrops sharpen sharpens sharpshoot shat shatter shatters sheathe sheathes shebop sheens sheetrocks shent shet shew shid shimmied shimmies shines shink shinnies shirks shirr shirrs shivved shmooze shmoozes shockproofs shoegazes shone shoo shood shoogle shoos shopgrift shopgrifts shoplift shoplifts shorn shortchange shortchanged shortchanges shorten shortens shortlist shortlists shortsheet shortsheets shoulda shouldest shouldna shouldst showing showrun shows shright shrills shrimps shrinkwraps shrive shrivel shrivels shrives shrove shrunk shtums shtup shtups shud shuddup shun shunpike shunpikes shuns shush shushes shuttles shutup sibilate sicken sickens sickled sicks sics siddown sidefoot sidefoots sidetracks sidewind sier sift sifts sightread sightsaw sightsee sightsees signalise signalises signalize signalizes signifies signify silanate silanates silicify siliconise siliconize siliconizes silts silylate simmered simmers simonise simonises simonize simonizes simplicate simplifies simplify simulate simulates sinicise sinicize sinicizes sinuates sissifies sissify situates skalls skedaddle skedaddles skeets skeeve skeletonise skeletonises skeletonize skeletonizes skelps sken skens skews skijor skijors skimps skims skinch skinnydip skirl skirls skitch skitches skite skites skitters skrikes skronk skud skudded skuddin skuds skulks skullfuck skyjack skyjacks skype skypes skyrockets skywatch skywatches slacken slackens slake slakes slaloms slambangs slams slangs slashdot slashdots slaughters slay slays sleeks sleepswalk sleepswalks sleeptalk sleeptalks sleepwalk sleepwalks sleets slenderize slept sleptwalk slews slicken slickens slid slidder slims slingshoot slingshoots slink slinks slite slites slither slithers slobbers slocken slockens sloom slooms sloshes slove slows sluff sluffs slung sluther sluthers smallcap smarten smartens smartmouth smartmouths smatter smatters smears smirch smite smites smogs smokum smolder smolders smoodge smoosh smooshes smoothe smoothen smoothens smote smoulder smoulders smuggle smuggles smushes snarf snarfle snarfles snarfs snavel sneap sneaps sneb sneers snerk snerks snew snews snig sniggers sniggle snirts snivels snoozle snoozled snoozles snopes snortle snortles snowplows snowproofs snoze snozen snuck snuffles snuffs sobers soccers socialise socialises socialize socializes sociologize sociologizes soddens sodomise sodomises sodomize sodomizes soften softens sog solarise solarises solarize solarizes sold solemnifies solemnify solemnise solemnises solemnize solemnizes solicit solicits solidifies solidify soliloquize soliloquizes soloes solubilise solubilises solubilize solubilizes solve solves somatise somatize somatizes somnabulate somnabulates somnambulate somnambulates sonicate sonicates sonorize sonorizes soodle soogees soothe soothes sophonsify sophronize sorcerise sorcerises sorcerize sorcerizes sorn sorns soughs sought soundproofs souses sowth spackles spae spamvertise spamvertises spamvertize spanghew spanghews sparble sparge sparges sparsify spatialize spatializes spatter spatters spatulates spawns spays speaks specialise specialises specialize specializes speciate speciates specifies specify spectate spectates speculate speculates speechifies speechify speedcube speedcubes speedran spellbind spellbinds spelunk spelunks spews spherize spherizes spifflicate spifflicates spiflicate spiflicates spirantize spirantizes spiritualize spiritualizes spirts spites splain splains splendish splenectomize splenectomizes splodged splosh splurt splurts splutter splutters spoliate spoliates spoonfeed spoonfeeds spoors sportfish sporulate sporulates spose sposes spotlit sprang sprawls spraypaint spraypaints spreadeagle spreadeagles sproings spruik spruiks spuddles spumes spun spunks spurlges sputters squander squanders squeaks squinny squirms squoosh squooshed squooshes squoze sqush squshes stabilise stabilises stabilitate stabilize stabilizes stablishes stagnate stagnates stanch stanches standardise standardises standardize standardizes stang starbursts stargaze stargazes starks starve starves stating staunches steadies steamroll steamrolls steams steepen steepens steeps steeves steg stellenbosch stellify stenographs stereomutate sterilise sterilises sterilize sterilizes sternutate sternutates stets steups stevened stickhandle stickhandles stickle stickles stiffen stiffens stigmatise stigmatises stigmatize stigmatizes stimulate stimulates stipples stipulates stob stog stokes stonifies stonify stood stots stott stottin stotts stow stows straddled straggle straggles straighten straightens straiten straitens strangle strangles strangulate strangulates strategise strategises strategize strategizes stratifies stratify straught stravaig stravaige stravaiges stravaigs strengthen strengthens strew strews striates striddle stridulate stridulates strikesthrough strikingthrough strim stringifies stringify strinkle strive strives strobilate strobilates strongarms strove struck struckthrough structuralise structuralises structuralize structuralizes structurize strums strung studies stuffs stultifies stultify stun stung stuns stupefies stupefy stylise stylised stylises stylize stylizes subcategorise subcategorises subcategorize subcategorizes subclassifies subclassify subcontract subcontracts subdivide subdivides subduct subducts subdue subdues subedit subedits subitise subitises subitize subitizes subjectivize subjectivizes subjoin subjoins subjugate subjugates sublate sublates sublimate sublimates submerge submerges submerse submerses subministers submit submits submodify suborn suborns subrogate subrogates subscribe subscribes subserve subserves subserviate subside subsides subsidise subsidises subsidize subsidizes subsist subsists subspecialise subspecialize subspecializes substantialize substantializes substantiate substantiates substantivise substantivises substantivize substantivizes substract substracts subsume subsumes subtend subtends subtilise subtilises subtilize subtilizes subtract subtracts suburbanize suburbanizes subvene subvent subvents subvocalize succeed succeeds succors succours succumb succumbs succuss succusses suckle suckles suctions sudate sue sues suffer suffice suffices sufflaminates sufflates suffocate suffocates suffonsify suffumigate suffumigates suffuse suffuses sugarcoat sugarcoats suggest suggests sulfurate sulfuret sulfurise sulfurises sulfurize sulfurizes sull sullies sulls sully sulphurate sulphurise sulphurize summarise summarises summarize summarizes summon sumoylate sumoylates sunbake sunbakes sunbathe sunbathes sunders sunscalds superabound superabounds superadd superadds superannuate superannuates superate supercalenders supercedes supercharge supercharges supercompress supercompresses superconduct superconducts supercool supercools supererogate supererogates superficialise superficialises superficialize superficializes superheat superheats superhumanise superhumanize superhumanizes superimpose superimposes superinduce superinduces superinfect superinfects superintend superintends superlie superlies supernaturalise supernaturalises supernaturalize supernaturalizes superovulate superovulates superpose superposes superpraise supersample supersamples supersaturate supersaturates superscribe superscribes supersedes supersize supersizes supervene supervenes supervise supervises supinate supinates supplant supplants supplicate supplicates suppose supposes suppress suppresses suppurate suppurates supremes surceases surcharges surfcast surfs surmount surmounts surpass surpasses surrejoin surveil surveils survive survives suspend suspends suspire susurrate swaddle swaddles swam swanks swarts swashes swattle sweal swedge sweeten sweetens swelt swelts swept swerve swerves swiftboat swiftboats swiggle swipes swither swithers swives swonk swoons swore swung swyve swyves syllabicate syllabicates syllabificate syllabifies syllabify syllabize syllabizes syllogize symbolise symbolises symbolize symbolizes symmetrize symmetrizes sympathise sympathises sympathize sympathizes symptomatize symptomatizes symptomize symptomizes synchronise synchronises synchronize synchronizes syncopate syncopates syncretise syncretize syncronises syncronize syncronizes synergise synergises synergize synergizes synopsize synopsizes synthesise synthesises synthesize synthesizes synthetize synthetizes syntonize systematise systematises systematize systematizes systemize tabloidize tabloidizes tabulate tabulates tacet takes talebear talibanize tallage tallages tames tamp tampers tamps tantalise tantalises tantalize tantalizes targetted tarnishes tase tattles taught taughtens tauten tautens tautomerize tautomerizes tawk tawks taxidermize taxonomise taxonomize taxonomizes teach teaches teargasses teaze teem teems teends teeter teeters teethe teethes teld telecommunicate telecommunicates telecommute telecommutes telefrag telefrags telegraphs telemarket telemarkets teleoperate teleoperates telepathise telepathises telepathize telepathizes teleport teleports televise televises teleworks tells telnets telt templatize templatizes temporise temporises temporize temporizes tempt tempts tend tenderise tenderises tenderize tenderizes tends tepefy tergiversate tergiversates terminates terraform terraforms terrifies terrify terrorise terrorises terrorize terrorizes tertiate tertiates tesselate tesselates tessellate tessellates testfire testfires testifies testify textualise textualises textualize textualizes texturise texturises texturize texturizes thaifies thaify thank thanks thatcherise thatcherises thatcherize thatcherizes thawt thay theatricalise theatricalises theatricalize theatricalizes thees thematise thematises thematize thematizes theologise theologises theologize theorise theorises theorize theorizes therapize therapizes thermalise thermalises thermalize thermalizes thermoform thermoforms thermoregulate thicken thickens thieve thirl thizzin thoil thoriate thoriates thoroughgo thous thrang thrashes threaten threatens thresh threshes threw thrive thrives thrombose throve thumbshots thunders thwock thwocks tidies tidivate tidivates tighten tightens timeses timonise timonises timonize timonizes tink tinks tinsels tintinnabulate tintinnabulates tiptoes titillate titillates titivate titivates titrate titrates tittivate tittivates titubate titubates tivo tlk toat toats tobrest toburst tocleave toddle toddles todraw tokenise tokenises tokenize tokenizes tolash told tolerate tolerates tolerize tonitruate tonitruates took tooken tootle tootles topdress topdresses topes topicalise topicalises topicalize topicalizes topple topples toquake toquash torace torat toreave torend torfel torit torive torob torques torrefies torrefy toruffle tose toshiver toslive tosliver tosunder toswap toswink totalize totalizes totorve totread toughen toughens tould touristifies touristify tousle tousles touzle touzles towind toxicate traduce traduces traffick trafficks traffics tragedize tragedizes tranch tranduce tranquilise tranquilises tranquilize tranquilizes tranquillize tranquillizes transact transactivate transactivates transacts transaminate transaminates transceive transceives transcend transcendentalize transcendentalizes transcends transclude transcludes transcode transcodes transcreate transcreates transcribe transcribes transdifferentiate transdifferentiates transduce transduces transesterifies transesterify transfect transfects transfenestrate transfenestrates transfigurate transfigurates transfigure transfigures transfreights transfrete transfund transfunds transfuse transfuses transgress transgresses transhape transhapes tranship tranships transhumanize transilluminate transistorize transistorizes transliterate transliterates translocate translocates transmetallate transmetallates transmigrate transmigrates transmit transmits transmogrifies transmogrify transmute transmutes transpierce transpierces transpire transpires transplace transshape transship transships transubstantiate transubstantiates transude transudes transumes transvalue transvest trant trants trape trashes traumatise traumatises traumatize traumatizes trawls treeifies treeify trendify triages triangulate triangulates triculate trifurcates trimerise trimerises trimerize trimerizes trimethylate trimethylates trinkle triphthongize triphthongizes trisect trisects triturate triturates trivialise trivialises trivialize trivializes troak troaks trod trods tromp tromps tropicalize tropicalizes trosh troubleshoot troubleshoots troubleshot trounce trounces trudges trues truncates trypsinise trypsinises trypsinize trypsinizes tsk tsks tsktsk tsktsks tszuj tszujes tubthump tubthumps tumbles tumefies tumefy tupe turbanize turbocharge turbocharges tutoy tutoyer tutoyers tuts twattles tweedle tweeze tweezes twiddle twiddles twifallow twocs tyek tyeken tyekin tyeks typecast typecasts typesets typewrite typewrites typifies typify tyrannise tyrannises tyrannize tyrannizes ubiquitinate ubiquitinates ubiquitinylate ubiquitinylates ubiquitylate ubiquitylates uglifies uglify ukrainianize ulcerates ultrasimplifies ultrasimplify ululate ululates umbecast umbedraw umbego umbelap umbethink umbrages umbraid umount umounts unaffiliate unaffiliates unalter unanchor unanchors unarchive unarchives unarm unarms unassemble unassembles unbag unbags unbalance unbalances unban unbandage unbandages unbans unbar unbars unbefool unbelt unbelts unbend unbends unbeseems unbewitch unbewitches unbind unbinds unbless unblesses unblind unblindfold unblindfolds unblinds unblock unblocks unblouse unblouses unblur unblurs unbolt unbolts unbook unbooks unbore unbosoms unbottle unbottles unbox unboxes unbrace unbraces unbraid unbraids unbreak unbreaks unbrick unbricks unbridle unbridles unbroke unbuckle unbuckles unbuild unbuilds unbundle unbundles unbung unburden unburdens unburies unburthens unbury unbutton unbuttons uncage uncages uncap uncape uncapes uncaps unchain unchains unchamber unchambers uncheck unchecks unchilds unchoke unchokes unchurch unchurches unciphers unclasp unclasps unclench unclenches unclip unclips uncloak uncloaks unclog unclogged unclogs unclose uncloses unclothe unclothes unclutter unclutters uncock uncocks uncoil uncoils uncollar uncollars uncomment uncomments uncomplicate uncomplicates uncompress uncompresses unconfigure unconfigures uncook uncooks uncoop uncoops uncork uncorks uncouple uncouples uncover uncovers uncrate uncrates uncreate uncreates uncrinkle uncrinkles uncrook uncrooks uncross uncrosses uncrown uncrumple uncrumpled uncrumples uncrunch uncrunches uncrystallize uncrystallizes unct uncts uncuff uncuffs uncunt uncunts uncurl uncurls uncurse uncurses undam undams undeceive undeceives undeclare undeclares undefine undelete undeletes undemocratise undemocratises undemocratize undemocratizes underachieve underachieves underact underacts underapplies underapply underappreciate underappreciates underapproximate underapproximates underbake underbakes underbear underbids underbill underbills underbind underboil underboils underbook underbought underbuild underbuilt underburn underburns underburnt underbuy underbuys undercalculate undercalculates undercapitalize undercharge undercharged undercharges underclaim underclaims underclock underclocks undercome undercook undercooks undercool undercount undercounts undercrank undercranks undercreep undercry underdeliver underdelivers underdelve underdetermine underdevelop underdevelops underdid underdo underdoes underdope underdopes underdraw underdraws underdress underdresses underdrew underearn undereat undereats underemphasize underemphasizes underexaggerate underexaggerates underexplain underexplains underexpose underexposes underfang underfeed underfeeds underfinance underfinances underfit underfund underfunds underget undergird undergirds undergo undergoes underguess underguesses underheat underheats underhole underinflate underinflates underinsulate underinsulates underinsure underinsures underinvest underinvests underlaid underlet underlets underlie underlies underlooks undermaintain undermaintains undermine undermines undernim undernourish undernourishes underpay underpays underperform underperforms underpin underpins underplants underplays underpower underpowers underpraise underpraises underpredict underpredicts underprescribe underprescribes underprice underprices underprocess underprocesses underproduce underpromise underpromises underquote underquotes underrates underreach underreaches underrecognize underrecognizes underrecruit underrecruits underregulate underregulates underreport underreports underrepresent underrepresents underrotate underrotates undersalt undersample undersamples undersave undersaves undersee undersell undersells underserve underserves undershoot undershoots undersign undersigns undersleep undersleeps underslept undersow underspecifies underspecify underspends underspent understaff understaffs understand understands understate understates understimulate understimulates undersupplies undersupply undersupport undersupports undertake undertakes underthink underthrew underthrow underthrows underthrust underthrusts undertip undertips undertook undertreat undertreats undertrump undertrumps underturn underuses underutilize underutilizes undervalue undervalues underween underweights underwent underwhelm underwhelms underworks underwrite underwrites underwrote undid undignify undislocate undislocates undo undock undocks undoes undraw undraws undream undreamed undreams undresses undrew undulates unearth unearths unelect unembed unencode unencodes unencumber unencumbers unentangle unentangles unequip unequips unerase unerases unescape unescapes unexecute unfang unfangs unfasten unfastens unfetter unfetters unfills unfist unfists unfits unfix unfixes unflag unflags unfocus unfocuses unfold unfolds unfollow unfollows unfool unformat unfreeze unfreezes unfriends unfrock unfrocks unfroze unfuck unfurl unfurls ungag ungags ungarble ungarbles unglue unglues ungod ungods ungrease ungreases ungrounds unhair unhand unhandcuff unhandcuffs unhands unhang unhappen unhappens unharness unharnesses unhem unhems unhid unhidden unhide unhides unhills unhinge unhinges unhitch unhitches unhobble unhobbles unhold unholds unholster unholsters unhood unhoods unhook unhooks unhorse unhorses unhouse unhouses unhug unhusk unhusks unhyphenate unhyphenates unifies uniformise uniformises uniformize uniformizes unify unimagine unimagines unimpale unimpales unindent unindents uninstall uninstalls uninvite uninvites unionise unionises unionize unionizes uniquifies uniquify unite unites unitise unitize unitizes universalise universalises universalize universalizes unjam unjams unjinx unjoin unjoins unjoint unkennel unkennels unkill unkink unkinks unkisses unknew unknit unknits unknow unknows unlace unlaces unlade unladed unlades unlash unlashes unlatch unlatches unlay unleaf unleafs unlearn unlearns unleash unleashes unleave unleaves unlikes unlimber unlink unlinks unlist unlists unlive unlives unload unloads unlock unlocks unloop unloops unloose unloosen unloosens unlooses unlove unloves unmake unmakes unman unmanacle unmanacles unmans unmarries unmarry unmarshal unmarshals unmask unmasks unmast unmatch unmatches unmerge unmerges unmix unmixes unmold unmolds unmoor unmoors unmortgage unmortgages unmount unmounts unmute unmutes unmuzzle unmuzzled unmuzzles unnatures unnerstand unnerstands unnerstood unnerve unnerves unown unowns unpack unpacks unpadlock unpadlocks unpaint unpaints unpark unparks unpaunch unpause unpauses unpeel unpeels unpeg unpegs unpick unpickle unpickles unpicks unpiece unpin unpins unplait unplaits unplug unplugs unpot unpots unprofessionalise unprofessionalize unprotect unprotects unpunctuate unpunctuates unpurse unpurses unpuzzle unpuzzles unquench unquenches unrar unrars unrate unrates unravel unravels unrecognize unrecognizes unrecommend unrecord unrecords unreel unreels unregister unregisters unretire unretires unriddle unriddles unrig unrings unrip unrips unrobe unrobes unroll unrolls unroof unroofs unroot unroots unrope unropes unruffle unruffles unrung unsaddle unsaddles unsanctifies unsanctify unsaw unsay unsays unscramble unscrambles unscrew unscrews unscroll unseal unseals unseam unseams unseat unseats unsee unsees unselect unselects unsell unsells unserialize unserializes unsets unsettle unsettles unsex unsexes unshackle unshackles unshape unshare unshares unsheath unsheathe unsheathed unsheathes unsheaths unshift unshifts unship unships unshoe unshoes unshut unshuts unslings unslung unsnag unsnags unsnap unsnaps unsnarl unsnarls unsolder unsolders unsolve unsolves unspeak unspeaks unsphere unspheres unspoil unspoke unspool unspools unsqueeze unsqueezes unstack unstacks unstaple unstar unstars unsteadies unstep unsteps unstick unsticks unstitch unstitches unstop unstops unstrap unstraps unstrings unstrung unstuck unstuff unstuffs unsubscribe unsubscribes unsullies unsully unswaddle unswaddles unswathe unswathes unsweeten unsweetens unswirl unswizzle unswizzles untack untacks untangle untangles untar untars unteach unteaches untether untethers unthaw unthaws unthink unthinks unthought unthread unthreads unthrone unthrones untick unticks untie unties untighten untightens untrain untrains untrammel untrammels untreasure untreasures untruss untrusses untuck untucks untwine untwist untwists unvails unveil unveils unvessel unvessels unvicar unvicars unvisards unvizard unvizards unwads unwatch unwatches unweave unweaves unweight unweights unwind unwinds unwire unwires unwish unwound unwove unwrap unwraps unwriggle unwrinkle unwrinkles unwrite unwrites unwrote unyoke unyokes unzip unzipped unzipper unzippers unzips upbar upbear upbears upbind upblow upbore upbraid upbraids upbreaks upbreed upbreeds upbroke upbroken upbrought upbuild upbuilds upbuilt upcheer upcheers upchucks upcoil upcoils upcurl upcurls upcycle upcycles updive updraw updraws updrew upend upends upfills upflow upflows upgathers upgave upgive upgives upgrew upgrows uphang uphaul upheap upheave upheaves upheld uphelm uphilt uphilts uphoard uphoards uphold upholds upholster upholsters uphurl upkeeps uplay uplead uplean upleap upleaps uppluck upraises uprear upregulate upregulates uprisen uprises uproll uproot uproots uprose uprouse uprun upscales upseek upsell upsells upsize upsizes upskill upskills upsnatch upsold upsolve upsot upsprang upsprung upstages upstare upstartle upstarts upstay upsway uptalk uptear uptears upthrew upthrows uptie upties uptore upvotes upwell upwells upzone upzones urbanise urbanises urbanize urbanizes urgings urinate urinates urticate urticates ush ushes usurp usurps utfse utilise utilises utilize utilizes utilizing utters uuencode uuencodes vacate vacates vaccinate vaccinates vacillate vacillates vacuate vail vajazzle validate validates validifies validify valorise valorises valorize valorizes valuate valuates vamoose vamooses vandalise vandalize vandalizes vanish vanishes vanitize vanitizes vanquish vanquishes vant vaporise vaporises vaporize vaporizes vapourises vapulates variegates varies vary vascularize vascularizes vasectomize vasectomizes vasodilate vasodilates vaticinate vectorise vectorises vectorize vectorizes veels vegetate vegetates vegetize velarize velarizes velcros vellicate vellicates vend vends venerate venerates ventilate ventilates ventralize ventralizes ventriloquize ventriloquizes verbalise verbalises verbalize verbalizes verbifies verbify verbize verifies verify verlanize vermiculates verminate verminates vernalize vernalizes versifies versify verticalize verticalizes vesicate vex vexes vibrates victimise victimises victimize victimizes vide videoes vides videte vie vies vilifies vilify vilipend vilipends villainise villainize villainizes vindicate vindicates vinify violate violates virialise virialises virialize virializes virilize virilizes virtualise virtualises virtualize virtualizes visualise visualises visualize visualizes vitalise vitalises vitalize vitalizes vitaminize vitaminizes vitamise vitiate vitiates vitrifies vitrify vittle vituperate vituperates vivifies vivify vivisect vivisects vocalises vocalize vocalizes vociferate vociferates volatilize volatilizes volcanize volumise volumises volumize volumizes voluntell vomits voodoos vouchsafe vouchsafes vould voxelate voxelates vroom vrooms vulcanise vulcanises vulcanize vulcanizes vulgarise vulgarises vulgarize vulgarizes vulnerate vum vurps wabble wabbles wackyparse wackyparses wafts waitasec waive waken wakens wantonize wants wanze wanzes warchalk warchalks wardriven wardrove warishes warms warn warns warps warsh waterbomb waterbombs waterlog waterlogs waterproofs waul waulk waulks wauls wawl wawls wayfare wayfares waylaid waylay waylays wayments weaken weakens weans weaponise weaponises weaponize weaponizes wearies weatherise weatherises weatherize weatherizes weatherproofs weathers webifies webify wed weele ween weens weep weeps wees weets weigh weighs welk welshes wench wept westernise westernises westernize westernizes whang whangs wheech wheedle wheedles whelm whelms whet whets whiles whirls whitelists whiten whitens whittles whomp whomps whoomp whoomps whopped whup whups wibbles widdles widen widens wield wields wikifies wikify windsurf windsurfs winge winges winsorize winsorizes winterfeeds winterise winterises winterize winterizes winterproofs wintle wiredraw wiredraws wisen wisens wishes wist wists wite wites withdraw withdraws withdrew wither withgo withhold withholds withsafe withsaid withsay withsays withset withsit withspeak withspeaks withspoke withstand withstands withstood witter witters wive wizens woebetide woke wolfs wolve womanise womanises womanize womanizes wons wonts woo woobiefies woodchop woodchops woofs woolgather woolgathers worsen worsens worsts worths wos wot wots wouldest wouldst wove wows woz wrassle wrassles wrays wreak wreaks wreathe wreathes wrest wrests wries wrings write writes writh wrixle wrongfoot wrongfoots wrote wrung wtfpwn wtfpwns wunt wuther wuthers wuvd wuvs wuvz wuz wytes xeroxes xxxs yabber yabbers yammers yark yarks yarr yawns ycladd ycleped yean yeans yearn yearns yelloch yellochs yerks yesk yete yex yexes yoink yoinks yoohoo york yorks yot youngs youthen youthens yuk yuppifies yuppify zams zay zerg zergs zeroise zeroises zeroize zeroizes zhooshed zhooshes zincifies zincify zincs zombifies zombify zonks zooms zots zouks zoutch 635 a able above acad acm acm_siam acs acta addit adhes adsorpt adv agric aij akad alamos alche algor all allg am amer ames an angew anlagen ann annu anorg another antibiot antimicrob any anybody anyone anything anytime anywhere aoac app appita appl april aquat are aromat artif arzneim asoc assoc astm astron astrophys atmos august aust autom aux available axs bacteriol be because been before behav being belg bij bioact biocatal biochem biochim biodegrad biodeterior bioelectrochem bioelectron bioenerg bioeng biogeochem biol biolumin biomater biomed biometrika biomol bioorg bioph biopharm biophys biorem bioresour biosci biosens biotechnol biotransform bmc both brennst buenos calorim calphad can can't cannot carbohydr carcinog cardiovasc catal cellul ceram charact chem chemilumin chemischen chemom chemother chern chil chim chimica chromatogr cienc ciencia cient cients cij cimento clin cm_1 comm commun compat compd compos compr comput concr condens contam contrib convers coord corros cosmochim could cryog cryst crystallog crystallogr cytochem de december degrad della delle delos departamento der des diffr dipartimento discov dispos dm_3 do does doesn't doing dokl don't done dosim e_mail each ecol econ ecotoxicol educ eine either electroact electroanal electroceram electrochem electrochim elem embo en endocrinol energ eng engl enzym enzymol epidemiol eq eqs equilib erdgas erdol essent ethnopharmacol eur europ europhys eval every evol exch explor extr f'unct facil facultad faseb fax february febs ferroelectr fett filtr fluoresc foly forsch fract francisco fresenius funct fundam g_1 galvanotechnik gazz gefahrstoffe geochem geochim geofiz geol geomicrobiol geophys geosyst gf gmbh go goes going h_1 had handb has have haven't having he heiv her here's heteroat heterocycl heterogen his histochem holz hoppe how hydrob hydroch hydrol hypertens i'd i'll i2 ieee if iff immunol immunopharmacol important inc indica indus informatica inhib inorg inst instrum int'l integr intell intermed ionics is isbn isij isot it it's its itself j_1 january jersey jmaa jsme jth july june kautsch kg_1 khim khoz kinet kohle kolloidn kong koord kovove kraft kristallogr kth kunstst l_1 la las le left_hand leipzig les let's lett liebigs lim liminf limsup los ltd lubr luft lumin macromol magn magnetobiol magy makromol manuf many march materialwiss math mathematiques may me meas med membr mendeleev metab metailkd metall metalloved microanal microb microbiol microchem microcolumn microelectromech microelectron microsc microstruct might mikrochim min_1 ministerio minx modell mol_1 monatsh monit monogr must my myself nachr nanopart nanostruct nat natl nato naturforsch nauk naunyn neft neither neorg neuroanat neurochem neurosci new nondestr nothing novel november nucl numer nuovo obrab obshch october ocul ofa ofatoms ofs ofsciences ofthe ofthis ofx oncol oper opin organomet other ought our ourselves oxid pathol pept perkin perspect pestic petrochem pharmacal pharmacol pharmacool philos photobiol photochem photopolym photosensit photosynth phycol phys physica physiol phytochem phytorem plast pnas pollut polym polytech prakt prepr prikl prob proc proced procesowa prof progr propag propul prot przem publ purif quimica radiat radioact radioanal radiochim radiopharm rapra recl recognit recycl ref refs regul reinf reinhalt relat reprod resolut reson resour respir rev rheol right_hand rome roum russ s_1 same sampe san santa santos scand schmiedeberg sci scripta see semicond sens september seyler shall she should siam silic silik simul soc softw solut some something sonochem spect spectro spectrochim spectrom spectros spectrosc spektrosk stat struct studi substitues such supercond supercrit supp supramol symp synop syst tappi tech technol terre that that's the their theirs them themselves then theochem theor ther thermochim thermodyn thermophys thermoplast these they this thorough those thus tion toxicol trac trav tsvetn two's ultrason und univ unserer us using usual v_1 van various verfahren virol vol von warme warsaw was we we'll were werkst werkstofftech what when where whereas whether which while who whom whose why wij will wish won't would xl you you'll you're your yours yourself zeit zool zur zvesti α11 α12 α_1 α_invex α_level α_limit β_iii γpnas δ11 δ22 δij εij θij μm_1 Ï€00�����������������������������������������������������������������cb2bib-1.9.7/data/PaxHeaders.3194/abbreviations.txt�������������������������������������������������0000644�0000000�0000000�00000000074�13124510115�016630� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.003254785 30 ctime=1498583182.611258424 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/data/abbreviations.txt�����������������������������������������������������������������0000644�0001750�0000144�00000235501�13124510115�020223� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AA|Adhes. Age|Adhesives Age AA|Astron. Astrophys.|Astronomy and Astrophysics AAC|Antimicrob. Agents Chemother.|Antimicrobial Agents and Chemotherapy AAM|Adv. Appl. Math.|Advances in Applied Mathematics AAM|Adv. Appl. Microbiol.|Advances in Applied Microbiology AAMOP|Adv. At. Mol. Opt. Phys.|Advances in Atomic, Molecular, and Optical Physics AAQA|An. Asoc. Quim. Argent.|Anales de la Asociacion Quimica Argentina AB|Acta Biotechnol.|Acta Biotechnologica AB|Anal. Biochem.|Analytical Biochemistry ABB|Appl. Biochem. Biotechnol.|Applied Biochemistry and Biotechnology ABB|Arch. Biochem. Biophys.|Archives of Biochemistry and Biophysics ABEB|Adv. Biochem. Eng./Biotechnol.|Advances in Biochemical Engineering / Biotechnology ABP|Acta Biochim. Pol.|Acta Biochimica Polonica ACA|Anal. Chim. Acta|Analytica Chimica Acta ACA|Appl. Catal., A|Applied Catalysis A AC|Adv. Chromatogr.|Advances in Chromatography AC|Anal. Chem.|Analytical Chemistry AC|Anal. Chim.|Annali di Chimica AC|Anal. Commun.|Analytical Communications ACAP|Anal. Chem. A-Pages|Analytical Chemistry A-Pages ACB|Ann. Clin. Biochem.|Annals of Clinical Biochemistry ACB|Appl. Catal., B|Applied Catalysis B ACBSIB|Artif. Cells, Blood Substitues, Immobilization Biotechnol.|Artificial Cells Blood Substitutes and Immobilization Biotechnology ACC|Antiviral Chem. Chemother.|Antiviral Chemistry and Chemotherapy ACCB|Adv. Carbohydr. Chem. Biochem.|Advances in Carbohydrate Chemistry and Biochemistry ACDD|Anti-Cancer Drug Des.|Anti-Cancer Drug Design ACE|Adv. Cryog. Eng.|Advances in Cryogenic Engineering ACEJ|AlChE J.|AIChE Journal ACESS|AlChE Symp. Ser.|AIChE Symposium Series ACHMC|ACH - Models Chem.|ACH - Models in Chemistry ACIC|Acta Cienc. Indica, Chem.|Acta Cienceia Indica Chemistry ACIE|Angew. Chem. Int. Ed.|Angewandte Chemie International Edition ACIEE|Angew. Chem. Int. Ed. Engl.|Angewandte Chemie International Edition in English ACIMJ|ACI Mater. J.|ACI Materials Journal ACIP|Acta Cienc. Indica, Phys.|Acta Ciencia Indica Phyics ACIS|Adv. Colloid Interface Sci.|Advances in Colloid and Interface Science ACM|Adv. Compos. Mater|Advanced Composite Materials ACM|Appl. Compos. Mater.|Applied Composite Materials ACMTMS|ACM Trans. Math. Softw.|ACM Transactions on Mathematical Software ACP|Adv. Chem. Phys.|Advances in Chemical Physics ACR|Acc. Chem. Res.|Accounts of Chemical Research ACR|Ann. Chim. (Rome)|Annali di Chimica ACS|Acta Chem. Scand.|Acta Chemica Scandinavica ACS|Acta Chim. Sinica|Acta Chimica Sinica ACS|Adv. Chem. Ser.|Advances in Chemistry Series ACAFC|Acta Crystallogr. A Found. Crystallogr.|Acta Crystallographica Section A: Foundations of Crystallography ACSAMI|ACS Appl. Mater. Interfaces|ACS Applied Materials and Interfaces ACSB|Am. Ceram. Soc. Bull.|American Ceramic Society Bulletin ACBSS|Acta Crystallogr. B|Acta Crystallographica Section B: Structural Science ACCCSC|Acta Crystallogr. C Cryst. Struct. Commun.|Acta Crystallographica Section C: Crystal Structure Communications ACDBC|Acta Crystallogr. D Biol. Crystallogr.|Acta Crystallographica Section D: Biological Crystallography ACSESRO|Acta Crystallogr. Sect. E: Struct. Rep. Online|Acta Crystallographica Section E: Structure Reports Online ACSM|Ann. Chim. - Sci. Mat.|Annales de Chimie - Science des Materiaux ACSSS|ACS Symp. Ser.|ACS Symposium Series ADNDT|At. Data Nucl. Data Tables|Atomic Data and Nuclear Data Tables ADRTR|Adverse Drug React. Toxicol. Rev.|Adverse Drug Reactions and Toxicological Reviews AE|At. Energ.|Atomic Energy AE|Atmos. Environ.|Atmospheric Environment AECT|Arch. Environ. Contam. Toxicol.|Archives of Environment Contamination and Toxicology AEH|Arch. Environ. Health|Archives of Environment Health AEM|Adv. Eng. Mater.|Advanced Engineering Materials AEM|Appl. Environ. Microbiol.|Applied and Environment Microbiology AER|Adv. Enzyme Regul.|Advances in Enzyme Regulation AERAMB|Adv. Enzymol. Relat. Areas Mol. Biol.|Advances in Enzymology and Related Areas of Molecular Biology AF|Arzneim.-Forsch.|Arzneimittel-Forschung/Drug Research AFM|Adv. Funct. Mater.|Advanced Functional Materials AFST|Adv. Filtr. Sep. Technol.|Advances in Filtration and Separation Technology AG|Appl. Geochem.|Applied Geochemistry AHC|Adv. Heterocycl. Chem.|Advances in Heterocyclic Chemistry AHH|Acta Hydroch. Hydrob.|Acta Hydrochimica et Hydrobiologica AIBP|Arch. Insect Biochem. Physiol.|Archives of Insect Biochemistry and Physiology AIC|Adv. Inorg. Chem.|Advances in Inorganic Chemistry AIHAJ|Am. Ind. Hyg. Assoc. J.|American Industrial Hygiene Association Journal AJ|Appita J.|Appita Journal AJ|Astron. J.|Astronomy Journal AJ|Astrophys J.|Astrophysics Journal AJC|Asian J. Chem.|Asian Journal of Chemistry AJC|Aust. J. Chem.|Australian Journal of Chemistry AJRCMB|Am. J. Respir. Cell Mol. Biol.|American Journal of Respiratory Cell and Molecular Biology AJS|Asian J. Spectro.|Asian Journal of Spectroscopy AL|Am. Lab.|American Laboratory AL|Anal. Lett.|Analytical Letters AM|Acta Mater.|Acta Materialia AM|Acta Metall.|Acta Metallurgica AM|Adv. Mater.|Advanced Materials AM|Am. Mineral.|American Mineralogist AM|Arch. Microbiol.|Archives of Microbiology AMB|Appl. Microbiol. Biotechnol.|Applied Microbiology and Biotechnology AMC|Angew. Makromol. Chem.|Angewandte Makromolekulare Chemie AMC|Appl. Math. Comput.|Applied Mathematics and Computation AMOE|Adv. Mater. Opt. Electron.|Advanced Materials for Optics and Electronics AMP|Adv. Mater. Processes|Advanced Materials and Processes AMR|Adv. Mater. Res.|Advances in Materials Research AMR|Appl. Magn. Reson.|Applied Magnetic Resonance AMS|Adv. Mass Spectrom.|Advances in Mass Spectrometry ANADD|Antisense Nucleic Acid Drug Dev.|Antisense and Nucleic Acid Drug Development ANYAS|Ann. N.Y. Acad. Sci.|Annals of the New York Academy of Sciences AO|Appl. Opt.|Applied Optics AOC|Adv. Organomet. Chem.|Advances in Organometallic Chemistry AOC|Appl. Organomet. Chem.|Applied Organometallic Chemistry APA|Appl. Phys. A|Applied Physics A AP|Acta Polym.|Acta Polymerica AP|Arch. Pharm.|Archiv der Pharmazie APB|Appl. Phys. B|Applied Physics B APB|Arch. Physiol. Biochem.|Archives of Physiology and Biochemistry APC|Adv. Protein Chem.|Advances in Protein Chemistry APL|Appl. Phys. Lett.|Applied Physics Letters APMPM|Adv. Powder. Metall. Part. Mater.|Advances in Powder Metallurgy and Particulate Materials APOC|Adv. Phys. Org. Chem.|Advances in Physical Organic Chemistry APPA|Acta Phys. Pol., A|Acta Physica Polonica A APPB|Acta Phys. Pol., B|Acta Physica Polonica B APR|Arch. Pharmacal Res.|Archives of Pharmacal Research APS|Adv. Polym. Sci.|Advances in Polymer Science APSCTS|Acta Polytech. Scand., Chem. Technol. Ser|Acta Polytechnica Scandinavica - Chemical Technology Series APSRF|Ammonia Plant Saf. Relat. Facil|Ammonia Plant Safety and Related Facilities APT|Adv. Polym. Tech.|Advances in Polymer Technology APT|Adv. Powder Technol.|Advanced Powder Technology AQ|An. Quim.|Anales de Quimica AQC|Adv. Quantum Chem.|Advances in Quantum Chemistry AR|Anticancer Res.|Anticancer Research ARB|Annu. Rev. Biochem|Annual Review of Biochemistry ARBBS|Annu. Rev. Biophys. Biomol. Struct.|Annual Review of Biophysics and Biomolecular Structure ARCDB|Annu. Rev. Cell Dev. Biol.|Annual Review of Cell and Developmental Biology AREE|Annu. Rev. Energy Env.|Annual Review of Energy and the Environment ARI|Appl. Radiat. Isot.|Applied Radiation and Isotopes ARMC|Annu. Rep. Med. Chem.|Annual Reports in Medicinal Chemistry ARMS|Annu. Rev. Mater. Sci.|Annual Review of Materials Science ARPC|Annu. Rev. Phys. Chem.|Annual Review of Physical Chemistry ARPCSAIC|Annu. Rep. Prog. Chem. Sect. A: Inorg. Chem.|Annual Reports on the Progress of Chemistry, Section A: Inorganic Chemistry ARPCSBOC|Annu. Rep. Prog. Chem. Sect. B: Org. Chem.|Annual Reports on the Progress of Chemistry, Section B: Organic Chemistry ARPCSCPC|Annu. Rep. Prog. Chem. Sect. C: Phys. Chem.|Annual Reports on the Progress of Chemistry, Section C: Physical Chemistry ARPT|Annu. Rev. Pharmacool. Toxicol.|Annual Review of Pharmacology and Toxicology AS|Anal. Sci.|Analytical Sciences AS|Appl. Spectrosc.|Applied Spectroscopy AS|Appl. Supercond.|Applied Superconductivity AS|Atomization Sprays|Atomization and Sprays AS|At. Spectrosc.|Atomic Spectroscopy ASC|Adv. Synth. Catal.|Advanced Synthesis and Catalysis ASMPR|Adv. Second Messenger Phosphoprotein Res.|Advances in Second Messenger and Phosphoprotein Research ASR|Adv. Space Res.|Advances in Space Research ASR|Appl. Sci. Res.|Applied Scientific Research ASS|Appl. Surf. Sci.|Applied Surface Science AST|Adsorpt. Sci. Technol.|Adsorption Science and Technology AST|Aerosol Sci. Technol.|Aerosol Science and Technology ASTMSTP|ASTM Spec. Tech. Publ.|ASTM Specical Technical Publication AT|Aquat. Toxicol.|Aquatic Toxicology AT|Arch. Toxicol.|Archives of Toxicology ATE|Appl. Therm. Eng.|Applied Thermal Engineering AV|Arch. Virol|Archives of Virology AXRA|Adv. X-Ray Anal.|Advances in X-Ray Analysis BAB|Biotechnol. Appl. Biochem.|Biotechnology and Applied Biochemistry BA|Biochem. Arch.|Biochemical Archives BA|Biog. Amines|Biogenic Amines BA|Biotechnol. Adv.|Biotechnology Advances BBA|Biochim. Biophys. Acta|Biochimica et Biophysica Acta BBB|Biosci., Biotechnol., Biochem.|Bioscience Biotechnology and Biochemistry BB|Biocatal. Biotransform.|Biocatalysis and Biotransformation BB|Bioelectrochem. Bioenerg.|Bioelectrochemistry and Bioenergetics BB|Biomass Bioenergy|Biomass and Bioenergy BB|Biosens. Bioelectron.|Biosensors and Bioelectronics BB|Biotechnol. Bioeng.|Biotechnology and Bioengineering BBE|Biotechnol. Biotechnol. Equip.|Biotechnology and Biotechnological Equipment BBGPC|Ber. Bunsen-Ges. Phys. Chem.|Berichte der Bunsen-Gesellschaft für Physikalische Chemie B|Biochemistry|Biochemistry B|Bioinformatics|Bioinformatics B|Biomacromolecules|Biomacromolecules B|Biometrika|Biometrika BBRC|Biochem. Biophys. Res. Commun.|Biochemical and Biophysical Research Communications BCB|Biochem. Cell Biol.|Biochemistry and Cell Biology-Biochimie et Biologie Cellulaire BC|Bioconjugate Chem.|Bioconjugate Chemistry BC|Biol. Chem.|Biological Chemistry BC|Biomed. Chromatogr.|Biomedical Chromatography BC|Bioorg. Chem.|Bioorganic Chemistry BC|Biophys. Chem.|Biophysical Chemistry BCHS|Biol. Chem. Hoppe-Seyler|Biological Chemistry Hoppe-Seyler BCJ|Br. Corros. J.|British Corrosion Journal BCSJ|Bull. Chem. Soc. Jpn.|Bulletin of the Chemical Society of Japan BCT|Br. Ceram. Trans.|British Ceramic Transactions BDD|Biopharm. Drug Dispos.|Biopharmaceutics and Drug Disposition BE|Biomol. Eng|Biomolecular Engineering BE|Bioprocess. Eng.|Bioprocess Engineering BEBM|Bull. Exp. Biol. Med.|Bulletin of Experimental Biology and Medicine BE|Bull. Electrochem.|Bulletin of Electrochemistry BECT|Bull. Environ. Contam. Toxicol.|Bulletin of Environment Contamination and Toxicology BEJ|Biochem. Eng. J.|Biochemical Engineering Journal BG|Biochem. Genet.|Biochemical Genetics BH|Biotech. Histochem.|Biotechnic and Histochemistry BHC|Bull. Hist. Chem.|Bulletin for the History of Chemistry BJ|Biochem. J|Biochemical Journal BJ|Biophys. J.|Biophysical Journal BJ|Biorem. J.|Bioremediation Journal BJP|Br. J. Pharmacol.|British Jornal of Pharmacology BK|Bioorg. Khim|Bioorganicheskaya Khimiya (Russian Journal of Bioorganic Chemistry) BKCS|Bull. Korean Chem. Soc.|Bulletin of the Korean Chemical Society BL|Biotechnol. Lett|Biotechnology Letters BMBI|Biochem. Mol. Biol. Int.|Biochemistry and Molecular Biology International BM|Biol. Membr.|Biological Membranes BM|Biomed. Microdevices|Biomedical Microdevices BMC|Bioorg. Med. Chem.|Bioorganic and Medicinal Chemistry BMCB|BMC Bioinformatics|BioMed Central Bioinformatics BMCL|Bioorg. Med. Chem. Lett.|Bioorganic and Medicinal Chemistry Letters BMMB|Biochem. Med. Metab. Biol.|Biochemical Medicine and Metabolic Biology BMM|Biochem. Mol. Med.|Biochemical and Molecular Medicine BMME|Bio-Med. Mater. Eng.|Bio-Medical Materials and Engineering BMS|Bull. Mater. Sci.|Bulletin of Materials Science BPASC|Bull. Pol. Acad. Sci., Chem.|Bulletin of the Polish Academy of Sciences Chemistry BPB|Biol. Pharm. Bull.|Biological and Pharmaceutical Bulletin BP|Behav. Pharmacol.|Behavioural Pharmacology BP|Biochem. Pharmacol.|Biochemical Pharmacology BP|Biotechnol. Prog.|Biotechnology Progress BP|Biotechnol. Progr.|Biotechnology Progress BR|Biosci. Rep.|Bioscience Reports BSCB|Bull. Soc. Chim. Belg.|Bulletin des Societes Chimiques Belges BSCF|Bull. Soc. Chim. Fr.|Bulletin de la Societe Chimique de France BSCQ|Bol. Soc. Chil. Quim.|Boletin de la Sociedad Chilena de Quimica BSE|Biochem. Syst. Ecol.|Biochemical Systematics and Ecology BSS|Biochem. Soc. Symp.|Biochemical Society Symposium BST|Biochem. Soc. Trans.|Biochemical Society Transactions BT|Bioresour. Technol.|Bioresource Technology BT|Biotechnol. Tech.|Biotechnology Techniques BTER|Biol. Trace Elem. Res.|Biological Trace Element Research BWK|Brennst.-Warme-Kraft|Brennstoff-Warme-Kraft CA|Chem. Aust.|Chemistry in Australia CAD|Computer Aided Des.|Computer-Aided Design CAV|Chem. -Anlagen Verfahren|Chemie Anlagen und Verfahren CAW|Chem. Anal. (Warsaw)|Chemia Analityczna CBC|Comput. Biol. Chem.|Computational Biology and Chemistry CB|Chem. Ber.|Chemische Berichte CB|Chem. Br.|Chemistry in Britain CB|Clin. Biochem.|Clinical Biochemistry CBEQ|Chem. Biochem. Eng. Q.|Chemical and Biochemical Engineering Quarterly CBF|Cell Biochem. Funct.|Cell Biochemistry and Function CBI|Chem. Biol. Interact.|Chemico-Biological Interactions CBPAP|Comp. Biochem. Physiol. A: Physiol.|Comparative Biochemistry and Physiology A: Physiology CBPBBMB|Comp. Biochem. Physiol. B: Biochem. Mol. Biol.|Comparative Biochemistry and Physiology B: Biochemistry and Molecular Biology CBPCPT|Comp. Biochem. Physiol. C: Pharmacol. Toxicol.|Comparative Biochemistry and Physiology C: Pharmacology Toxicology and Endocrinology CBR|Chem. Ber. Recl.|Chemische Berichte-Recueil CCA|Clin. Chim. Acta|Clinica Chimica Acta CCA|Croat. Chem. Acta|Croatica Chemica Acta C|Calphad|Calphad - Computer Coupling of Phase Diagrams and Thermochemistry CC|Carbohydr. Chem.|Carbohydrate Chemistry CC|Catal. Commun.|Catalysis Communications CCCC|Collect. Czech. Chem. Commun.|Collection of Czechoslovak Chemical Communications CCC|Cem. Concr. Compos.|Cement and Concrete Composites CC|Cereal Chem.|Cereal Chemistry CC|Chem. Commun.|Chemical Communications CC|Clin. Chem.|Clinical Chemistry CC|Comput. Chem.|Computers and Chemistry CCE|Comput. Chem. Eng.|Computers and Chemical Engineering CCHTS|Comb. Chem. High Throughput Screening|Combinatorial Chemistry and High Throughput Screening CCL|Chin. Chem. Lett.|Chinese Chemical Letters CCM|Clays Clay Miner.|Clays and Clay Minerals CCO|Comput. Chem. (Oxford)|Computers and Chemistry CCQ|Can. Ceram. Q.|Canadian Ceramics Quarterly CCR|Cem. Concr. Res.|Cement and Concrete Research CCR|Coord. Chem. Rev.|Coordination Chemistry Reviews CCT|Cellul. Chem. Technol.|Cellulose Chemistry and Technology CEC|Chem. Eng. Commun.|Chemical Engineering Communications CE|Chem. Express|Chemistry Express CE|Compos. Eng.|Composites Engineering CE|Cryst. Eng.|Crystal Engineering CEI|Concr. Eng. Int.|Concrete Engineering International CEJ|Chem. Eng. J.|Chemical Engineering Journal CEJ|Chem. Eur. J.|Chemistry A European Journal CEJ|Chem. Eur. J.|Chemistry- A European Journal CEL|Chem. Eng. (London)|Chemical Engineer (London) CEN|Chem. Eng. News|Chemical and Engineering News CENY|Chem. Eng. (New York)|Chemical Engineering (New York) CEP|Chem. Eng. Process.|Chemical Engineering and Processing CEP|Chem. Eng. Prog.|Chemical Engineering Progress CERD|Chem. Eng. Res. Des.|Chemical Engineering Research and Design CES|Chem. Eng. Sci.|Chemical Engineering Science CET|Chem. Eng. Technol.|Chemical Engineering and Technology CF|Combust. Flame|Combustion and Flame CFI|Chem. Fibers Int.|Chemical Fibers International CG|Chem. Geol.|Chemical Geology CGD|Cryst. Growth Des.|Crystal Growth and Design CHC|Chem. Heterocycl. Compd.|Chemistry of Heterocyclic Compounds CIC|Comments Inorg. Chem.|Comments on Inorganic Chemistry CI|Ceram. Int.|Ceramics International CI|Chem. Ind. (London)|Chemistry and Industry CI|Compos. Interfaces|Composite Interfaces CI|Concr. Int.|Concrete International CILS|Chemom. Intell. Lab. Syst.|Chemometrics and Intelligent Laboratory Systems CIMB|CIM Bull.|CIM Bulletin CIT|Chem. Ing. Tech.|Chemie Ingenieur Technik CITRM|Cah. Inf. Tech./Rev Metall|Cahiers d'Informations Techniques / Revue de Metallurgie CJASS|Can. J. Anal. Sci. Spectros.|Canadian Journal of Analytical Sciences and Spectroscopy CJB|Can. J. Biochem.|Canadian Journal of Biochemistry CJC|Can. J. Chem.|Canadian Journal of Chemistry CJC|Chin. J. Chem .|Chinese Journal of Chemistry CJCE|Can. J. Chem. Eng.|Canadian Journal of Chemical Engineering CJCE|Chin. J. Chem. Eng.|Chinese Journal of Chemical Engineering CJ|Colloid J.|Colloid Journal CJM|Can. J. Microbiol.|Canadian Journal of Microbiology CJNP|Chin. J. Nucl. Phys.|Chinese Journal of Nuclear Physics CJP|Can. J. Phys.|Canadian Journal of Physics CJPP|Can. J. Physiol. Pharmacol.|Canadian Journal of Physiology and Pharmacology CJPS|Chin. J. Polym. Sci.|Chinese Journal of Polymer Science CL|Carbohydr. Lett.|Carbohydrate Letters CL|Catal. Lett.|Catalysis Letters CL|Chem. Lett.|Chemistry Letters CL|Chem. Listy|Chemicke Listy CM|Can. Mineral.|Canadian Mineralogist CM|Chem. Mater.|Chemistry of Materials CMJ|Can. Min. J.|Canadian Mining Journal CMP|Condens. Matter Phys.|Condensed Matter Physics CMP|Contrib. Mineral. Petrol.|Contributions to Mineralogy and Petrology CMQ|Can. Metall. Q.|Canadian Metallurgical Quarterly CMR|Concepts Magn. Reson.|Concepts in Magenetic Resonance CMS|Comput. Mater. Sci.|Computation Materials Science CMT|Condens. Matter Theor.|Condensed Matter Theories CMT|Continuum Mech. Thermodyn.|Continuum Mechanics and Thermodynamics CNC|Chem. Nat. Compd.|Chemistry of Natural Compounds COB|Curr. Opin. Biotechnol.|Current Opinion in Biotechnology COCB|Curr. Opin. Chem. Biol.|Current Opinion in Chemical Biology COC|Curr. Org. Chem.|Current Organic Chemistry COCIS|Curr. Opin. Colloid Interface Sci.|Current Opinion in Colloid and Interface Science COP|Curr. Opin. Pharmacol.|Current Opinion in Pharmacology COSB|Curr. Opin. Struct. Biol.|Current Opinion in Structural Biology COSSMS|Curr. Opin. Solid State Mater. Sci.|Current Opinion in Solid State and Materials Science CPA|Composites Part A|Composites Part A Applied Science and Manufacturing CPB|Cell. Physiol. Biochem.|Cellular Physiology and Biochemistry CPB|Chem. Pharm. Bull.|Chemical and Pharmaceutical Bulletin CPB|Composites Part B|Composites Part B Engineering CP|Carbohydr. Polym.|Carbohydrate Polymers CPC|Chem. Phys. Carbon|Chemistry and Physics of Carbon CPC|Comput. Phys. Commun.|Computer Physics Communications CP|Cell. Polym.|Cellular Polymers CP|Chem. Phys.|Chemical Physics CP|Chem. Process.|Chemical Processing CPCZ|Chem. Pap. - Chem. Zvesti|Chemical Papers - Chemicke Zvesti CPL|Chem. Phys. Lett.|Chemical Physics Letters CPL|Chem. Phys. Lipids|Chemistry and Physics of Lipids CPPCPP|CPP Chem. Plants and Process.|CPP Chemical Plants and Processing CPSBA|Curr. Plant Sci. Biotechnol. Agric.|Current Plant Science in Biotechnology and Agriculture CPS|Colloid. Polym. Sci.|Colloid and Polymer Science CRAC|Crit. Rev. Anal. Chem.|Critical Reviews in Analytical Chemistry CRASSIIC|C.R. Acad. Sci., Ser. IIc: Chim.|Comptes Rendus de l' Academie des Sciences Serie IIc:Chemie CRASSIII|C.R. Acad. Sci., Ser. III|Comptes Rendus de l' Academie des Sciences Serie III: Sciences de la Vie CRASSIIMPCA|C.R. Acad. Sci., Ser. IIb: Mec., Phys., Chim., Astron.|Comptes Rendus de l' Academie des Sciences Serie IIb:Mecanique Physique Chimie Astronomie CRASSIISTP|C.R. Acad. Sci., Ser. IIa: Sci. Terre Planets|Comptes Rendus de l' Academie des Sciences Serie IIa:Sciences de la Terre et des Planets CRB|Crit. Rev. Biotechnol.|Critical Reviews in Biotechnology CRBMB|Crit. Rev. Biochem. Mol. Biol.|Critical Reviews in Biochemistry and Molecular Biology CR|Carbohydr. Res.|Carbohydrate Research CR|Chem. Rev.|Chemical Reviews CR|Corros. Rev.|Corrosion Reviews CREST|Crit. Rev. Env. Sci. Technol.|Critical Reviews in Environment Science and Technology CRSE|Cat. Rev. - Sci. Eng.|Catalysis Reviews - Science and Engineering CRSSMS|Crit. Rev. Solid State Mater. Sci.|Critical Reviews in Solid State and Materials Sciences CRT|Chem. Res. Toxicol.|Chemical Research in Toxicology CRT|Crit. Rev. Toxicol.|Critical Reviews in Toxicology CRT|Cryst. Res. Technol.|Crystal Research and Technology CSA|Colloids Surf., A|Colloids and Surfaces A CSB|Chem. Speciation Bioavailability|Chemical Speciation and Bioavailability CSB|Chin. Sci. Bull.|Chinese Science Bulletin CSB|Colloids Surf., B|Colloids and Surfaces B CS|Ceram. Silik.|Ceramics - Silikaty CS|Chem. Senses|Chemical Senses CS|Compos. Struct.|Composite Structures CS|Corros. Sci.|Corrosion Science CSDA|Comput. Statist. Data Anal.|Computational Statistics and Data Analysis CSE|Concr. Sci. Eng.|Concrete Science and Engineering CSR|Chem. Soc. Rev.|Chemical Society Reviews CSS|Chromatogr. Sci. Ser.|Chromatographic Science Series CST|Combust. Sci. Technol.|Combustion Science and Technology CST|Compos. Sci. Technol.|Composites Science and Technology CT|Catal. Today|Catalysis Today CT|Ceram. Trans.|Ceramic Transactions CT|Chem. Tech.|ChemTech CTFO|Chem. Technol. Fuels Oils|Chemistry and Technology of Fuels and Oils CTL|Chem. Tech. (Leipzig)|Chemische Technik CTMC|Curr. Top. Med. Chem.|Current Topics in Medicinal Chemistry CTM|Curr. Top. Membr.|Current Topics in Membranes CTPS|Comput. Theor. Polym. Sci.|Computational and Theoretical Polymer Science CVD|Chem. Vap. Deposition|Chemical Vapor Deposition CW|Chem. Week|Chemical Week CZ|Chem. unserer Zeit|Chemie in unserer Zeit DAN|Dokl. Akad. Nauk|Doklady Akademii Nauk DCT|Drug Chem. Toxicol.|Drug and Chemical Toxicology DDIP|Drug Dev. Ind. Pharm.|Drug Development and Industrial Pharmacy DDR|Drug Dev. Res.|Drug Development Research DDT|Drug Discovery Today|Drug Discovery Today DFT|Diamond Films Technol.|Diamond Films and Technology DM|Dent. Mater.|Dental Materials DRM|Diamond Relat. Mater.|Diamond and Related Materials DT|Drying Technol.|Drying Technology EA|Electrochim. Acta|Electrochimica Acta EC|Educ. Chem.|Education in Chemistry EC|Electrochem. Commun.|Electrochemistry Communications ECER|Environ. Carcinog. Ecotoxicol. Rev.|Environment Carcinogenesis and Ecotoxicology Reviews ECM|Energy Convers. Manage.|Energy Conversion and Management EE|Ecol. Eng.|Ecological Engineering EES|Ecotoxicol. Environ. Saf.|Ecotoxicology and Environment Safety EF|Energy Fuels|Energy and Fuels EF|Exp. Fluids|Experiments in Fluids EG|Econ. Geol.|Economic Geology and the Bulletin of the Society of Economic Geologists EG|Environ. Geol.|Environmental Geology EGH|Environ. Geochem. Health|Environmental Geochemistry and Health EHP|Environ. Health Perspect.|Environmental Health Perspectives EJB|Eur. J. Biochem.|European Journal of Biochemistry EJCCCB|Eur. J. Clin. Chem. Clin. Biochem.|European Journal of Clinical Chemistry and Clinical Biochemistry EJIC|Eur. J. Inorg. Chem.|European Journal of Inorganic Chemistry EJLST|Eur. J. Lipid Sci. Technol.|European Journal of Lipid Science and Technology EJMC|Eur. J. Med. Chem.|European Journal of Medical Chemistry EJM|Eur. J. Mineral.|European Journal of Mineralogy EJMS|Eur. J. Mass Spectrom.|European Journal of Mass Spectrometry EJOC|Eur. J. Org. Chem.|European Journal of Organic Chemistry EJP|Eur. J. Pharmacol.|European Journal of Pharmacology EJSSIC|Eur. J. Solid State Inorg. Chem.|European Journal of Solid State and Inorganic Chemistry EKEP|Erdol and Kohle Erdgas, Petrochem.|Erdol and Kohle Erdgas, Petrochemie EL|Electron. Lett|Electronics Letters EL|Europhys. Lett.|Europhysics Letters EMA|Environ. Monit. Assess.|Environmental Monitoring and Assessment EMBOJ|EMBO J.|EMBO Journal EM|Electro- Magnetobiol.|Electro- and Magnetobiology EM|Environ. Microbiol.|Environmental Microbiology EMG|Explor. Min. Geol.|Exploration and Mining Geology EMJ|Eng. Min. J.|Engineering and Mining Journal EMS|Eur. Mass Spectrom.|European Mass Spectrometry EMT|Enzyme Microb. Technol.|Enzyme and Microbial Technology EP|Environ. Pollut.|Environmental Pollution EP|Environ. Prog.|Environmental Progress EP|Enzyme Protein|Enzyme and Protein EPJ|Eur. Polym. J.|European Polymer Journal EPSL|Earth. Planet. Sci. Lett.|Earth and Planetary Science Letters ER|Environ. Res.|Environmental Research ESI|Electrochem. Soc. Interface|Electrochemical Society Interface ESSL|Electrochem. Solid-State Lett.|Electrochemical and Solid-State Letters ESTAP|Environ. Sci. Technol. A-Pages|Environmental Science and Technology A-Pages EST|Environ. Sci. Technol.|Environmental Science and Technology ETC|Environ. Toxicol. Chem.|Environmental Toxicology and Chemistry ET|Electron Technol.|Electronic Technology ET|Environ. Technol.|Environmental Technology ETFS|Exp. Therm Fluid Sci.|Experimental Thermal and Fluid Science ETP|Environ. Toxicol. Pharmacol.|Environmental Toxicology and Pharmacology ETWQ|Environ. Toxicol. Water Qual.|Environmental Toxicology and Water Quality FAC|Food Addit. Contam.|Food Additives and Contaminants FACT|Field Anal. Chem. Technol.|Field Analytical Chemistry and Technology. FASEBJ|FASEB J.|FASEB Journal FAT|Fundam. Appl. Toxicol.|Fundamental and Applied Toxicology FB|Food Biotechnol.|Food Biotechnology FC|Food Chem.|Food Chemistry FCT|Food Chem. Toxicol.|Food and Chemical Toxicology FD|Faraday Discuss.|Faraday Discussions FD|Fold Des.|Folding and Design FEB|Fresenius Environ. Bull.|Fresenius Environment bulletin FEBSL|FEBS Lett.|FEBS Letters FED|Fusion Eng. Des.|Fusion Engineering and Design FEMSIMM|FEMS Immunol. Med. Microbiol.|FEMS Immunology And Medical Microbiology FEMSME|FEMS Microbiol. Ecol.|FEMS Microbiology Ecology FEMSML|FEMS Microbiol. Lett.|FEMS Microbiology Letters FEMSMR|FEMS Microbiol. Rev.|FEMS Microbiology Review FFEMS|Fatigue Fract. Eng. Mater. Struct.|Fatigue and Fracture of Engineering Materials and Structures FIG|Funct. Integr. Genomics|Functional and Integrative Genomics FIO|Fiber Integr. Opt.|Fiber and Integrated Optics FJAC|Fresenius J. Anal. Chem.|Fresenius Journal of Analytical Chemistry FL|Ferroelectr. Lett.|Ferroelectrics Letters FL|Fett - Lipid|Fett - Lipid FMM|Fiz. Met. Metalloved.|Fizika Metallov i Metallovedenie FPE|Fluid Phase Equilib.|Fluid Phase Equilibria FPSJ|Fluid/Part. Sep. J.|Fluid/Particle Separation Journal FPT|Fuel Process. Technol.|Fuel Processing Technology FRBM|Free Radical Biol. Med.|Free Radical Biology and Medicine FR|Ferroelectr. Rev.|Ferroelectrics Review FRR|Free Radical Res.|Free Radical Research FS|Filtr. Sep.|Filtration and Separation FSS|Front Sci. Ser.|Frontier Science Series FST|Fullerene Sci. Technol.|Fullerene Science and Technology FSTI|Food Sci. Technol. Int.|Food Science and Technology International FSTI|Fuel Sci. Technol. Int.|Fuel Science and Technology International FT|Fusion Technol.|Fusion Technology GABE|Genet. Anal. - Biomol. Eng.|Genetic Analysis - Biomolecular Engineering GBC|Global Biogeochem. Cycles|Global Biogeochemical Cycles GCA|Geochim. Cosmochim. Acta|Geochimica et Cosmochimica Acta GC|Glass Ceram.|Glass and Ceramics GC|Green Chem.|Greem Chemistry GCI|Gazz. Chim. Ital.|Gazzetta Chimica Italiana GEEA|Geochem.: Explor. Environ., Anal.|Geochemistry: Exploration, Environment, Analysis G|Galvanotechnik|Galvanotechnik GG|Geol Geofiz|Geologiya i Geofizika GGG|Geochem. Geophys. Geosyst.|Geochemistry, Geophysics, Geosystems GJ|Geochem. J.|Geochemical Journal GJ|Geomicrobiol. J.|Geomicrobiology Journal GJ|Glycoconjugate J.|Glycoconjugate Journal GJPAS|Global J. Pure Appl. Sci.|Global Journal of Pure and Applied Sciences GPC|Glass Phys. Chem|Glass Physics and Chemistry GR|Glass Res.|Glass Research GRL|Gefahrstoffe - Reinhalt. Luft|Gefahrstoffe Reinhaltung der Luft GSP|Gas Sep. Purif.|Gas Separation and Purification GST|Glass Sci. Technol.|Glass Science and Technology GT|Geochem. Trans.|Geochemical Transactions GT|Glass Technol.|Glass Technology GWMR|Ground Water Monit. Rem.|Ground Water Monitoring and Remediation HC|Heteroat. Chem|Heteroatom Chemistry HC|Heterocycl. Commun.|Heterocyclic Communications HCR|Heterogen. Chem. Rev.|Heterogeneous Chemistry Reviews HEC|High Energ. Chem.|High Energy Chemistry HEP|Handb. Exp. Pharmacol.|Handbook of Experimental Pharmacology HICA|HeIv. Chim. Acta|HeIvetica Chimica Acta HI|Hyperfine Interact.|Hyperfine Interactions HJIC|Hung. J. Ind. Chem.|Hungarian Journal of Industrial Chemistry HMT|Heat Mass Transfer.|Heat and Mass Transfer HP|Health Phys.|Health Physics HPIE|Hydrocarbon Process., Int. Ed.|Hydrocarbon Processing, International Edition HPP|High Perform. Polym.|High Performance Polymers HRCJHRC|HRC J. High Resolut. Chromatogr.|HRC Journal of High Resolution Chromatography HRW|Holz Roh Werkst.|Holz als Roh und Werkstoff HSZPC|Hoppe-Seyler's Z. Physiol. Chem.|Hoppe-Seyler's Zeitschrift fur Physiologische Chemie HTM|Heat Treat. Met.|Heat Treatment of Metals HTMPL|High Temp. Mater. Processes (London)|High Temperature Materials and Processes HTMPNY|High Temp. Mater. Processes (New York)|High Temperature Material Processes HWHM|Hazard. Waste Hazard. Mater.|Hazardous Waste and Hazardous Materials IBB|Int. Biodeterior. Biodegrad.|International Biodeterioration and Biodegradation IBMB|Insect Biochem. Mol. Biol.|Insect Biochemisry and Molecular Biology ICA|Inorg. Chim. Acta|Inorganica Chimica Acta ICC|Inorg. Chem. Commun.|Inorganic Chemistry Communications IC|Inorg. Chem.|Inorganic Chemistry ICP|Inz. Chem. Procesowa|Inzynieria Chemiczna i Procesowa IDATASSDMSA|Int. DATA Ser., Sel. Data Mixtures, Ser. A|International DATA Series, Selected Data on Mixtures, Series A IDR|Ind. Diamond Rev.|Industrial Diamond Review IECF|Ind. Eng. Chem. Fundam.|Industrial and Engineering Chemistry Research Fundamentals IEC|Ind. Eng. Chem.|Industrial and Engineering Chemistry IECR|Ind. Eng. Chem. Res.|Industrial and Engineering Chemistry Research IEEESJ|IEEE Sens. J.|IEEE Sensors Journal IJAA|Int. J. Adhes. Adhes.|International Journal of Adhesion and Adhesives IJBB|Indian J. Biochem. Biophys.|Indian Journal of Biochemistry and Biophysics IJBCB|Int. J. Biochem. Cell Biol.|International Journal of Biochemistry and Cell Biology IJBC|Int. J. Bio-Chromatogr.|International Journal of Biochromatography IJB|Int. J. Biochem.|International Journal of Biochemistry IJBM|Int. J. Biol. Macromol.|International Journal of Biological Macromolecules IJC|Internet J. Chem.|Internet Journal of Chemistry IJC|Isr. J. Chem.|Israel Journal of Chemistry IJCK|Int. J. Chem. Kinet.|International Journal of Chemical Kinetics IJCMR|Int. J. Cast Met. Res.|International Journal of Cast Metals Research IJCSA|Indian J. Chem., Sect A|Indian Journal of Chemistry Section A: Inorganic, Bio-inorganic, Physical, Theoretical and Analytical Chemistry IJCSB|Indian J. Chem., Sect B|Indian Journal of Chemistry Section B: Organic Chemistry including Medicinal Chemistry IJCT|Indian J. Chem. Technol.|Indian Journal of Chemical Technology IJEAC|Int. J. Environ. Anal. Chem.|International Journal of Environment Analytical Chemistry IJEMS|Indian J. Eng. Mater. Sci.|Indian Journal of Engineering and Materials Science IJF|Int. J. Fatigue|International Journal of Fatigue IJHC|Indian J. Heterocycl. Chem.|Indian Journal of Heterocyclic Chemistry IJHE|Int. J. Hydrogen Energy|International Journal of Hydrogen Energy IJHFF|Int. J. Heat Fluid Flow|International Journal of heat and fluid flow IJHMT|Int. J. Heat Mass Transfer|International Journal of Heat and Mass Transfer IJI|Int. J. Immunopharmacol|International Journal of Immunopharmacology IJIM|Int. J. Inorg. Mater.|International Journal of Inorganic Materials IJMF|Int. J. Multiphase Flow|International Journal of Multiphase Flow IJM|Int. J. Mass Spectrom.|International Journal of Mass Spectrometry IJMPB|Int. J. Mod Phys B|International Journal of Modern Physics B IJMP|Int. J. Miner. Process.|International Journal of Mineral Processing IJMSIP|Int. J. Mass Spectrom. Ion Processes|International Journal of Mass Spectrometry and Ion Processes IJNMF|Int. J. Numer. Methods Fluids|International Journal for Numerical Methods in Fluids IJO|Int. J. Oncol.|International Journal of Oncology IJPAC|Int. J. Polym. Anal. Charact.|International Journal of Polymer Analysis and Characterization IJPAP|Indian J. Pure Appl. Phys.|Indian Journal of Pure and Applied Physics IJP|Int. J. Pharm.|International Journal of Pharmaceutics IJP|Int. J. Phytorem.|International Journal of Phytoremediation IJP|Int. J. Plast.|International Journal of Plasticity IJPM|Int. J. Polymer. Mater.|International Journal of Polymeric Materials IJPM|Int. J. Powder Metall.|International Journal of Powder Metallurgy IJPPR|Int. J. Pept. Protein Res.|International Journal of Peptide and Protein Research IJQC|Int. J. Quantum Chem.|International Journal of Quantum Chemistry IJRB|Int. J. Radiat Biol.|International Journal of Radiation Biology IJRMHM|Int. J. Refract. Met. Hard Mater.|International Journal of Refractory Metals and Hard Materials IJSPHTS|Int. J. Self-Propag. High-Temp Synth.|International Journal of Self-Propagating High-Temperature Synthesis IJT|Indian J. Technol.|Indian Journal of Technology IJT|Int. J. Thermophys.|International Journal of Thermophysics IJVS|Internet J. Vib. Spectro.|Internet Journal of Vibrational Spectroscopy IM|Inorg. Mater.|Inorganic Materials IMR|Int. Mater. Rev.|International Materials Reviews IPP|Int. Polym. Proc.|International Polymer Processing IPT|Infrared Phys. Technol.|Infrared Physics and Technology IQ|Ing. Quim.|Ingeniera Quimica (Madrid) IRM|Inorg. React. Mech.|Inorganic Reaction Mechanisms IRPC|Int. Rev. Phys. Chem.|International Reviews in Physical Chemistry ISIJI|ISIJ Int.|ISIJ International IS|Inorg. Synth.|Inorganic Syntheses IS|Interface Sci.|Interface Science IS|Ironmaking Steelmaking|Ironmaking and Steelmaking IST|Instrum Sci. Technol.|Instrumentation Science and Technology JAAP|J. Anal. Appl. Pyrolysis|Journal of Analytical and Applied Pyrolysis JAAS|J. Anal. At. Spectrom.|Journal of Analytical Atomic Spectrometry JAB|J. Appl. Bacteriol.|Journal of Applied Bacteriology JAB|J. Appl. Biomater.|Journal of Applied Biomaterials JAC|J. Alloys Compd.|Journal of Alloys and Compounds JAC|J. Anal. Chem.|Journal of Analytical Chemistry JAC|J. Antimicrob. Chemother.|Journal of Antimicrobial Chemotherapy JAC|J. Appl. Crystallogr.|Journal of Applied Crystallography JAC|J. Autom. Chem.|Journal of Automatic Chemistry JACS0|J. Am. Ceram. Soc.|Journal of the American Ceramic Society JACS|J. Am. Chem. Soc.|Journal of the American Chemical Society JACS1|J. Amer. Chem. Soc.|Journal of the American Chemical Society JAE|J. Appl. Electrochem.|Journal of Applied Electrochemistry JAFC|J. Agric. Food. Chem.|Journal of Agricultural and Food Chemistry JA|J. Adhes.|Journal of Adhesion JA|J. Antibiot.|Journal of Antibiotics JAM|J. Adv. Mater.|Journal of Advanced Materials JAMMC|J. Autom. Methods Manage. Chem.|Journal of Automated Methods and Management in Chemistry JANPR|J. Asian Nat. Prod. Res.|Journal of Asian Natural Products Research JAOACI|J. AOAC Int.|Journal of AOAC International JAOCS|J. Am. Oil Chem. Soc.|Journal of the American Oil Chemists Society JAP|J. Appl. Phycol.|Journal of Applied Phycology JAP|J. Appl. Phys.|Journal of Applied Physics JAPS|J. Appl. Polym. Sci.|Journal of Applied Polymer Science JASBC|J. Am. Soc. Brew. Chem.|Journal of the American Society of Brewing Chemists JAS|J. Aerosol Sci|Journal of Aerosol Science JAS|J. Appl. Spectrosc.|Journal of Applied Spectroscopy JASMS|J. Am. Soc. Mass. Spectrom.|Journal of the American Society for Mass Spectrometry JAST|J. Adhes. Sci. Technol.|Journal of Adhesion Science and Technology JAT|J. Anal. Toxicol.|Journal of Analytical Toxicology JAT|J. Appl. Toxicol.|Journal of Applied Toxicology JAWMA|J. Air Waste Manage. Assoc.|Journal of the Air and Waste Management Association JBA|J. Biomater. Appl.|Journal of Biomaterials Applications JBBM|J. Biochem. Bioph. Methods|Journal of Biochemical and Biophysical Methods JBC|J. Biol. Chem.|Journal of Biological Chemistry JBC|J. Biolumin. Chemilumin.|Journal of Bioluminescence and Chemiluminescence JBCP|J. Bioact. Compat. Polym.|Journal of Bioactive and Bompatible Polymers JBIC|J. Biol. Inorg. Chem.|Journal of Biological Inorganic Chemistry JB|J. Bacteriol.|Journal of Bacteriology JB|J. Biochem.|Journal of Biochemistry JB|J. Biotechnol.|Journal of Biotechnology JBMR|J. Biomed. Mater. Res.|Journal of Biomedial Materials Research JBNMR|J. Biomol. NMR|Journal of Biomolecular NMR JBSD|J. Biomol. Struct. Dyn.|Journal of Biomolecular Structure and Dynamics JBSPE|J. Biomater. Sci., Polym. Ed.|Journal of Biomaterials Science Polymer Edition JCA|J. Chromatogr. A|Journal of Chromatography A JCAMD|J. Comput. Aided Mater. Des.|Journal of Computer-Aided Materials Design JCAMD|J. Comput. Aided Mol. Des.|Journal of Computer-Aided Molecular Design JCB|J. Cell. Biochem.|Journal of Cellular Biochemistry JCB|J. Cell Biol.|Journal of Cell Biology JCB|J. Chromatogr. B|Journal of Chromatography B JCC|J. Carbohydr. Chem.|Journal of Carbohydrate Chemistry JCC|J. Chem. Crystallogr.|Journal of Chemical Crystallography JCC|J. Comb. Chem.|Journal of Combinatorial Chemistry JCC|J. Comput. Chem.|Journal of Computational Chemistry JCC|J. Coord. Chem.|Journal of Coordination Chemistry JCCS|J. Chin. Chem. Soc.|Journal of the Chinese Chemical Society JCED|J. Chem. Eng. Data|Journal of Chemical and Engineering Data JCE|J. Chem. Ecol.|Journal of Chemical Ecology JCE|J. Chem. Educ.|Journal of Chemical Education JCEJ|J. Chem. Eng. Jpn.|Journal of Chemical Engineering of Japan JCEM|J. Clin. Endocrinol. Metab.|Journal of Clinical Endocrinology and Metabolism JCG|J. Cryst. Growth|Journal of Crystal Growth JCH|J. Contam. Hydrol.|Journal of Contaminant Hydrology JCICE|J. Chin. Inst. Chem. Eng,|Journal of the Chinese Institute of Chemical Engineers JCICS|J. Chem. Inf. Comput. Sci.|Journal of Chemical Information and Computer Sciences JCIM|J. Chem. Inf. Model.|Journal of Chemical Information and Modeling JCIS|J. Colloid Interface Sci.|Journal of Colloid and Interface Science JC|J. Catal.|Journal of Catalysis JC|J. Chemom.|Journal of Chemometrics JC|J. Chromatogr.|Journal of Chromatography JCM|J. Clin. Microbiol.|Journal of Clinical Microbiology JCM|J. Compos. Mater.|Journal of Composite Materials JCN|J. Chem. Neuroanat.|Journal of Chemical Neuroanatomy JCP|J. Cardiovasc. Pharmacol.|Journal of Cardiovascular Pharmacology JCP|J. Cell. Physiol.|Journal of Cellular Physiology JCP|J. Chem. Phys.|The Journal of Chemical Physics JCP|J. Chem. Phys.|Journal of Chemical Physics JCP|J. Comput. Phys.|Journal of Computational Physics JCPPCB|J. Chim. Phys. Phys.- Chim. Biol.|Journal de Chimie Physique et de Physico-Chimie Biologique JCPT|J. Can. Pet. Technol.|Journal of Canadian Petroleum Technology JCR|J. Controlled Release|Journal of Controlled Release JCRS|J. Chem. Res., Synop .|Journal of Chemical Research Synopsis JCSCC|J. Chem. Soc., Chem. Commun.|Journal of the Chemical Society, Chemical Communications JCSDT|J. Chem. Soc., Dalton Trans.|Journal of the Chemical Society, Dalton Transactions JCSFT|J. Chem. Soc., Faraday Trans.|Journal of the Chemical Society, Faraday Transactions JCS|J. Cell Sci.|Journal of Cell Science JCS|J. Chem. Soc.|Journal of the Chemical Society JCS|J. Chromatogr. Sci.|Journal of Chromatographic Science JCS|J. Cluster Sci.|Journal of Cluster Science JCSJ|J. Ceram. Soc. Jpn.|Journal of the Ceramic Society of Japan JCSP|J. Chem. Soc. Pak.|Journal of the Chemical Society of Pakistan JCSPT|J. Chem. Soc., Perkin Trans. 1|Journal of the Chemical Society, Perkin Transactions 1 JCSPT|J. Chem. Soc., Perkin Trans. 2|Journal of the Chemical Society, Perkin Transactions 2 JCTB|J. Chem. Technol. Biotechnol.|Journal of Chemical Technology and Biotechnology JCTC|J. Chem. Theory Comput.|Journal of Chemical Theory and Computation JCT|J. Chem. Thermodyn.|Journal of Chemical Thermodynamics JCT|J. Coat. Technol.|Journal of Coatings Technology JCTR|J. Compos. Tech. Res.|Journal of Composites Technology and Research JDS|J. Dairy Sci.|Journal of Dairy Science JDST|J. Dispersion Sci. Technol.|Journal of Dispersion Science and Technology JEAEE|J. Exposure Anal. Environ. Epidemiol.|Journal of Exposure Analysis and Environment Epidemiology JEB|J. Environ. Biol.|Journal of Environment biology JEB|J. Exp. Biol.|Journal of Experimental Biology JEB|J. Exp. Bot.|Journal of Experimental Botany JEC|J. Electroanal. Chem.|Journal of Electroanalytical Chemistry JECS|J. Eur. Ceram. Soc.|Journal of the European Ceramic Society JEE|J. Environ. Eng.|Journal of Environment Engineering JEH|J. Environ. Health|Journal of Environment Health JEI|J. Enzym Inhib.|Journal of Enzyme Inhibition JE|J. Electroceram.|Journal of Electroceramics JE|J. Endocrinol.|Journal of Endocrinology JE|J. Ethnopharmacol.|Journal of Ethnopharmacology JEM|J. Electron. Mater.|Journal of Electronic Materials JEM|J. Electron Microsc.|Journal of Electron Microscopy JEM|J. Environ. Manage.|Journal of Environment Management JEM|J. Environ. Monit.|Journal of Environmental Monitoring JEMT|J. Eng. Mater. Technol.|Journal of Engineering Materials and Technology JEOR|J. Essent. Oil Res.|Journal of Essential Oil Research JEP|J. Elastomers Plast.|Journal of Elastomers and Plastics JEQ|J. Environ. Qual.|Journal of Environment Quality JER|J. Endotoxin Res.|Journal of Endotoxin Research JER|J. Environ. Radioact.|Journal of Environment Radioactivity JESHPA|J. Environ. Sci. Health., Part A|Journal of Environment Science and Health, Part A Environmental Science JESHPB|J. Environ. Sci. Health., Part B|Journal of Environment Science and Health, Part B Pesticides JES|J. Electrochem. Soc.|Journal of the Electrochemical Society JESRP|J. Electron. Spectrosc. Relat. Phenom.|Journal of Electron Spectroscopy and Related Phenomena JFB|J. Ferment. Bioeng.|Journal of Fermentation and Bioengineering JFB|J. Food Biochem.|Journal of Food Biochemistry JFC|J. Fluorine Chem.|Journal of Fluorine Chemistry JFE|J. Fluids Eng.|Journal of Fluids Engineering JFE|J. Food Eng.|Journal of Food Engineering JFL|J. Food Lipids|Journal of Food Lipids JFM|J. Fluid Mech.|Journal of Fluid Mechanics JFP|J. Food Prot.|Journal of Food Protection JFS|J. Fire Sci.|Journal of Fire Sciences JFS|J. Food Sci.|Journal of Food Science JGAM|J. Gen. Appl. Microbiol.|Journal of General and Applied Microbiology JGM|J. Gen. Microbiol.|Journal of General Microbiology JHC|J. Heterocycl. Chem.|Journal of Heterocyclic Chemistry JHC|J. Histochem. Cytochem.|Journal of Histochemistry and Cytochemistry JH|J. Hypertens.|Journal of Hypertension JHM|J. Hazard. Mater.|Journal of Hazardous materials JHRC|J. High. Resolut. Chromatogr.|Journal of High Resolution Chromatography JHT|J. Heat Transfer|Journal of Heat Transfer JIB|J. Inorg. Biochem.|Journal of Inorganic Biochemistry JIC|J. Inst. Chem.|Journal of Institute of Chemists (India) JICR|J. Interferon Cytokine Res.|Journal of Interferon and Cytokine Research JICS|J. Indian Chem. Soc.|Journal of the Indian Chemical Society JIES|J. Inst. Environ. Sci.|Journal of the Institute of Environment Sciences JIMB|J. Ind. Microbiol. Biotechnol.|Journal of Industrial Microbiology and Biotechnology JIM|J. Ind. Microbiol.|Journal of Industrial Microbiology JIMSS|J. Intell. Mater. Syst. Struct.|Journal of Intelligent Material Systems and Structures JINC|J. Inorg. Nucl. Chem.|Journal of Inorganic and Nuclear Chemistry JIOP|J. Inorg. Organomet. Polym.|Journal of Inorganic and Organometallic Polymers JIPMRC|J. Inclusion Phenom. Mol. Recognit. Chem.|Journal of Inclusion Phenomena and Molecular Recognition in Chemistry JIR|J. Interferon Res.|Journal of Interferon Research JIST|J. Imaging Sci. Technol.|Journal of Imaging Science and Technology JIWEM|J. Inst. Water Environ. Manage.|Journal of the Institution of Water and Environment Management JJAPP|Jpn. J. Appl. Phys., Part 1|Japanese Journal of Applied Physics Part 1 JJAPP|Jpn. J. Appl. Phys., Part 2|Japanese Journal of Applied Physics Part 2 JJCR|Jpn. J. Cancer Res.|Japanese Journal of Cancer Research JJIM|J. Jpn. Inst. Met.|Journal of the Japan Institute of Metals JJP|Jpn. J. Pharmacol.|Japanese Journal of Pharmacology JJTEH|Jpn. J. Toxicol. Environ. Health|Japanese Journal of toxicology and Environment health JKCS|J. Korean Chem. Soc.|Journal of the Korean Chemical Society JLC|J. Liq. Chromatogr.|Journal of Liquid Chromatography JLCR|J. Labelled Compd. Radiopharm.|Journal of Labelled Compounds and Radiopharmaceuticals JLCRT|J. Liq. Chromatogr. Related Technol.|Journal of Liquid Chromatography and Related Technologies JL|J. Lumin.|Journal of Luminescence JLMCS|J. Lipid Mediators Cell Signalling|Journal of Lipid Mediators and Cell Signalling JLM|J. Lipid Mediators|Journal of Lipid Mediators JLR|J. Lipid Res.|Journal of Lipid Research JLTP|J. Low Temp. Phys.|Journal of Low Temperature Physics JMB|J. Membr. Biol.|Journal of Membrane Biology JMB|J. Microbiol. Biotechnol.|Journal of Microbiology and Biotechnology JMB|J. Mol. Biol.|Journal of Molecular Biology JMCAC|J. Mol. Catal. A: Chem.|Journal of Molecular Catalysis A: Chemical JMCBE|J. Mol. Catal. B: Enzym.|Journal of Molecular Catalysis B: Enzymatic JMCE|J. Mater. Civ. Eng.|Journal of Materials in Civil Engineering JMC|J. Mater. Chem.|Journal of Materials Chemistry JMC|J. Math. Chem.|Journal of Mathematical Chemistry JMC|J. Med. Chem.|Journal of Medicinal Chemistry JMC|J. Mol. Catal.|Journal of Molecular Catalysis JMCWM|J. Mater. Cycles Waste Manage.|Journal of Material Cycles and Waste Management JMEP|J. Mater. Eng. Perform.|Journal of Materials Engineering and Performance JMAP|J. Math. Anal. Appl.|Journal of Mathematical Analysis and Applications JMGM|J. Mol. Graphics Modell.|Journal of Molecular Graphics and Modelling JM|J. Microencapsulation|Journal of Microencapsulation JML|J. Mol. Liq.|Journal of Molecular Liquids JMMB|J. Mol. Microbiol. Biotechnol.|Journal of Molecular Microbiology and Biotechnology JMM|J. Microbiol. Methods|Journal of Microbiological Methods JMM|J. Mol. Model.|Journal of Molecular Modeling JMMM|J. Magn. Magn. Mater.|Journal of Magnetism and Magnetic Materials JMP|J. Math. Phys.|Journal of Mathematical Physics JMPMS|J. Mater. Process. Manuf. Sci.|Journal of Materials Processing and Manufacturing Science JMPT|J. Mater. Process. Technol.|Journal of Materials Processing Technology JMR|J. Mater. Res.|Journal of Materials Research JMRSA|J. Magn. Reson., Ser A|Journal of Magnetic Resonance Series A JMRSB|J. Magn. Reson., Ser B|Journal of Magnetic Resonance Series B JMS|J. Mass Spectrom.|Journal of Mass Spectrometry JMS|J. Membr. Sci.|Journal of Membrance Science JMS|J. Microcolumn Sep.|Journal of Microcolumn Separations JMS|J. Microelectromech. Syst.|Journal of Microelectronic Systems JMS|J. Mol. Spectrosc.|Journal of Molecular Spectroscopy JMS|J. Mol. Struct.|Journal of Molecular Structure JMSL|J. Mater. Sci. Lett.|Journal of Materials Science Letters JMSME|J. Mater. Sci. - Mater. Electron.|Journal of Materials Science - Materials in Electronics JMSMM|J. Mater. Sci. - Mater. Med.|Journal of Materials Science Materials in Medicine JMSPAC|J. Macromol. Sci., Pure Appl. Chem.|Journal of Macromolecular Science Pure and Applied Chemistry JMSP|J. Macromol. Sci., Phys.|Journal of Macromolecular Science - Physics JMSP|J. Mater. Synth. Process.|Journal of Materials Synthesis and Processing JMSPR|J. Macromol. Sci., Polym. Rev.|Journal of Macromolecular Science Polymer Reviews JMSRMCP|J. Macromol. Sci., Rev. Macromol. Chem. Phys.|Journal of Macromolecular Science - Reviews in Macromolecular Chemistry and Physics JMST|J. Mater. Sci. Technol.|Journal of Materials Science and Technology JMST|J. Mol. Struct. (Theochem)|Journal of Molecular Structure: THEOCHEM JNCS|J. Non-Cryst. Solids|Journal of Non-Crystalline Solids JNET|J. Non-Equilib. Thermodyn.|Journal of Non-Equilibrium Thermodynamics JNIS|J. Near Infrared Spectrosc.|Journal of Near Infrared Spectroscopy JN|J. Neurochem.|Journal of Neurochemistry JN|J. Neurosci.|Journal of Neuroscience JNMES|J. New Mater. Electrochem. Syst.|Journal of New Materials for Electrochemical Systems JNM|J. Nucl. Mater.|Journal of Nuclear Materials JNP|J. Nat. Prod.|Journal of Natural Products JNR|J. Nanopart. Res.|Journal of Nanoparticle Research JNR|J. Neurosci. Res.|Journal of Neuroscience Research JNST|J. Nucl. Sci. Technol.|Journal of Nuclear Science and Technology JOC|J. Organomet. Chem.|Journal of Organometallic Chemistry JOC|J. Org. Chem.|Journal of Organic Chemistry JOSABOP|J. Opt. Soc. Am. B: Opt. Phys.|Journal of the Optical Society of America B: Optical Physics JPAMG|J. Phys. A: Math. Gen.|Journal of Physics A: Mathematical and General JPBA|J. Pharm. Biomed. Anal.|Journal of Pharmaceutical and Biomedical Analysis JPBAMOP|J. Phys. B: At. Mol. Opt. Phys.|Journal of Physics B: Atomic, Molecular and Optical Physics JPBB|J. Plant Biochem. Biotechnol.|Journal of Plant Biochemistry and Biotechnology JPCA|J. Phys. Chem. A|The Journal of Physical Chemistry A JPCB|J. Phys. Chem. B|The Journal of Physical Chemistry B JPCC|J. Phys. Chem. C|The Journal of Physical Chemistry C JPCCZ|J. Prakt. Chem. /Chem-Ztg|Journal fur Praktische Chemie - Chemiker Zeitung JPCJPCMTLC|JPC J. Planar Chromatogr. - Mod. TLC|JPC Journal of Planar Chromatography Modern TLC JPC|J. Phys. Chem.|Journal of Physical Chemistry JPC|J. Protein Chem.|Journal of Protein Chemistry JPCM|J. Phys.: Condens. Matter|Journal of Physics: Condensed Matter JPCMTLC|J. Planar. Chromatogr. - Mod. TLC|Journal of Planar Chromatography - Modern TLC JPCRD|J. Phys. Chem. Ref. Data|Journal of Physical and Chemical Reference Data JPCS|J. Phys. Chem. Solids|Journal of Physics and Chemistry of Solids JPDAP|J. Phys. D: Appl. Phys.|Journal of Physics D: Applied Physics JPE|J. Phase Equilib.|Journal of Phase Equilibrium JPE|J. Polym. Eng.|Journal of Polymer Engineering JPE|J. Polym. Environ.|Journal of Polymers and the Environment JPET|J. Pharmacol. Exp. Ther.|Journal of Pharmacology and Experimental Therapeutics JPGNPP|J. Phys. G: Nucl. Part. Phys.|Journal of Physics G: Nuclear and Particle Physics JPIII|J. Phys. III|Journal de Physique III JPII|J. Phys. II|Journal de Physique II JPI|J. Phys. I|Journal de Physique I JPIV|J. Phys. IV|Journal de Physique IV JPM|J. Polym. Mater.|Journal of Polymer Materials JPM|J. Porous Mater.|Journal of Porous Materials JPOC|J. Phys. Org. Chem.|Journal of Physical Organic Chemistry JPPA|J. Photochem. Photobiol., A|Journal of Photochemistry and Photobiology A JPPB|J. Photochem. Photobiol., B|Journal of Photochemistry and Photobiology B JPP|J. Pharm. Pharmacol.|Journal of Pharmacy and Pharmacology JPP|J. Porphyrins Phthalocyanines|Journal of Porphyrins and Phthalocyanines JPP|J. Propul. Power|Journal of Propulsion and Power JPPS|J. Pulp Pap. Sci.|Journal of Pulp and Paper Science JPR|J. Proteome Res.|Journal of Proteome Research JPSJ|J. Phys. Soc. Jpn.|Journal of the Physical Society of Japan JPS|J. Pharm. Sci.|Journal of Pharmaceutical Sciences JPS|J. Power Sources|Journal of Power Sources JPSPAPC|J. Polym. Sci., Part A: Polym. Chem.|Journal of Polymer Science Part A: Polymer Chemistry JPSPBPP|J. Polym. Sci., Part B: Polym. Phys.|Journal of Polymer Science Part B: Polymer Physics JPST|J. Pet. Sci. Technol.|Journal of Petroleum Science and Technology JPST|J. Photopolym. Sci. Technol.|Journal of Photopolymer Science and Technology JPTM|J. Pharmacol. Toxicol. Methods|Journal of Pharmacological and Toxicological Methods JQSRT|J. Quant. Spectrosc. Radiat. Transfer|Journal of Quantitative Spectroscopy and Radiative Transfer JR|J. Rheol.|Journal of Rheology JRMAM|J. Rapid Methods Autom. Microbiol.|Journal of Rapid Methods and Automation in Microbiology JRNCA|J. Radioanal. Nucl. Chem. Art.|Journal of Radioanalytical and Nuclear Chemistry Articles JRNC|J. Radioanal. Nucl. Chem.|Journal of Radioanalytical and Nuclear Chemistry JRNCL|J. Radioanal. Nucl. Chem. Lett.|Journal of Radioanalytical and Nuclear Chemistry Letters JRPC|J. Reinf. Plast. Compos.|Journal of Reinforced Plastics and Composites JRS|J. Raman Spectrosc.|Journal of Raman Specroscopy JSAED|J. Strain Anal. Eng. Des.|Journal of Strain Analysis for Engineering Design JSAIMM|J. S. Afr. Inst. Min. Metall.|Journal of the South African Institute of Mining and Metallurgy JSBMB|J. Steroid Biochem. Mol. Biol.|Journal of Steroid Biochemistry and Molecular Biology JSC|J. Solution Chem.|Journal of Solution Chemistry JSC|J. Struct. Chem.|Journal of Structural Chemistry JSCS|J. Serb. Chem. Soc.|Journal of the Serbian Chemical Society JSFA|J. Sci. Food Agric.|Journal of the Science of Food and Agriculture JSF|J. Supercrit. Fluids|Journal of Supercritical Fluids JSGST|J. Sol-Gel Sci. Technol.|Journal of Sol-Gel Science and Technology JSIR|J. Sci. Ind. Res.|Journal of Scientific and Industrial Research JSMEIJSA|JSME Int J., Ser. A|JSME International Journal Series A: Mechanics and Material Engineering JSMEIJSB|JSME Int J., Ser. B|JSME International Journal Series B: Fluids and Thermal Engineering JSMEIJSC|JSME Int J., Ser. C|JSME International Journal Series C: Mechanical Systems Machine Elements and Manufacturing JSOCJ|J. Synth. Org. Chem Jpn.|Journal of Synthetic Organic Chemistry, Japan JSSC|J. Solid State Chem.|Journal of Solid State Chemistry JSSE|J. Solid State Electrochem.|Journal of Solid State Electrochemistry JSS|J. Sep. Sci.|Journal of Separation Science JTAC|J. Therm. Anal. Calorim.|Journal of Thermal Analysis and Calorimetry JTA|J. Therm. Anal.|Journal of Thermal Analysis JTCC|J. Theor. Comput. Chem.|Journal of Theoretical and Computational Chemistry JTCM|J. Thermoplast. Compos. Mater.|Journal of Thermoplastic Composite Materials JTCOT|J. Toxicol., Cutaneous Ocul. Toxicol.|Journal of Toxicology - Cutaneous and Ocular Toxicology JTCT|J. Toxicol., Clin. Toxicol.|Journal of Toxicology - Clinical Toxicology JTEEM|J. Trace Elem. Exp. Med.|Journal of Trace Elements in Experimental Medicine JTEH|J. Toxicol. Environ. Health|Journal of Toxicology and Environment Health JTE|J. Test. Eval.|Journal of Testing and Evaluation JTEMB|J. Trace Elem. Med Biol.|Journal of Trace Elements in Medicine and Biology JTHT|J. Thermophys Heat Transfer|Journal of Thermophysics and Heat Transfer JTMT|J. Trace Microprobe Tech.|Journal of Trace and Microprobe Techniques JTST|J. Therm. Spray Technol.|Journal of Thermal Spray Technology JTTR|J. Toxicol., Toxin Rev.|Journal of Toxicology - Toxin Reviews JVSTA|J. Vac. Sci. Technol., A|Journal of Vacuum Science and Technology A JVSTB|J. Vac. Sci. Technol., B|Journal of Vacuum Science and Technology B JWCT|J. Wood Chem. Technol.|Journal of Wood Chemistry and Technology KC|Kinet. Catal.|Kinetics and Catalysis KEM|Key Eng. Mater.|Key Engineering Materials KF|Khim. Fiz.|Khimicheskaya Fizika KGK|Kautsch. Gummi Kunstst.|Kautschuk Gummi Kunststoffe KJCE|Korean J. Chem. Eng.|Korean Journal of Chemical Engineering KK|Kinet. Katal.|Kinetika i Kataliz KK|Koord. Khim.|Koordinatsionnaya Khimiya (Russian Journal of Coordination Chemistry) KM|Kovove Mater.|Kovove Materialy Metallic Materials KZ|Kolloidn Zh|Kolloidn Zhurnal LAC|Liebigs Ann. Chem.|Liebigs Annalen der Chemie LAIM|Lab. Autom. Inf. Manage.|Laboratory Automation and Information Management LAM|Lett. Appl. Microbiol.|Letters in Applied Microbiology LAR|Liebigs Ann. Recl.|Liebigs Annalen - Recueil LCGC|LC-GC|LC-GC The Magazine of Separation Science LC|Laser Chem.|Laser Chemistry LC|Liq. Cryst.|Liquid Crystals LE|Lubr. Eng.|Lubrication Engineering LI|Lab. Invest.|Laboratory Investigation L|Langmuir|Langmuir LPS|Lett. Pept. Sci.|Letters in Peptide Science LRA|Lab. Rob. Autom.|Laboratory Robotics and Automation LS|Life Sci.|Life Sciences LS|Lubr. Sci.|Lubrication Science MA|Mikrochim. Acta|Mikrochimica Acta MBA|Methods Biochem. Anal.|Methods of Biochemical Analysis MBD|Met.-Based Drugs|Metal-Based Drugs MB|Mar. Biol.|Marine Biology MB|Mar. Biotechnol.|Marine Biotechnology MB|Matrix Biol.|Matrix Biology MCB|Mol. Cell. Biochem.|Molecular and Cellular Biochemistry MCG|Microb. Comp. Genomics|Microbial and Comparative Genomics MCLCSTSA|Mol. Cryst. Liq. Cryst. Sci. Technol., Sect. A|Molecular Crystals and Liquid Crystals Science and Technology Section A MCLCSTSC|Mol. Cryst. Liq. Cryst. Sci. Technol., Sect. C|Molecular Crystals and Liquid Crystals Science and Technology Section C MC|Manuf. Chem.|Manufacturing Chemist MC|Mar. Chem.|Marine Chemistry MC|Mater. Charact.|Materials Characterization MC|Mater. Corros.|Materials and Corrosion MC|Mendeleev Commun.|Mendeleev Communications MCM|Mech. Compos. Mater.|Mechanics of Composite Materials MC|Monatsh. Chem.|Monatshefte fur Chemie MCMS|Mech. Compos. Mater. Struct.|Mechanics of Composite Materials and Structures MCP|Macromol. Chem. Phys.|Macromolecular Chemistry and Physics MCP|Mater. Chem. Phys.|Materials Chemistry and Physics MCR|Med. Chem. Res.|Medicinal Chemistry Research MDD|Mod. Drug Discovery|Modern Drug Discovery MD|Mater. Des.|Materials and Design ME|Mater. Eval.|Materials Evaluation ME|Metab. Eng.|Metabolic Engineering ME|Methods Enzymol.|Methods in Enzymology ME|Microelectron. Eng.|Microelectronic Engineering ME|Miner. Eng.|Minerals Engineering MER|Mar. Environ. Res.|Marine Environment Research MF|Mater. Forum|Materials Forum MGC|Main Group Chem.|Main Group Chemistry MGMC|Main Group Met. Chem.|Main Group Metal Chemistry MHT|Mater. High Temp.|Materials at High Temperatures MIBS|Met. Ions Biol. Syst.|Metal Ions in Biological Systems MI|Mol. Interventions|Molecular Interventions MJ|Microchem. J.|Microchemical Journal MJ|Microelectron. J.|Microelectronics Journal MKF|Magy. Kem. Foly.|Magyar Kemiai Folyoirat ML|Mater. Lett.|Materials Letters M|Macromolecules|Macromolecules MMBB|Mol. Mar. Biol. Biotech,|Molecular Marine Biology and Biotechnology MM|Mech. Mater.|Mechanics of Materials MM|Microporous Mater.|Microporous Materials MM|Microsc. Microanal.|Microscopy and Microanalysis MMM|Microporous Mesoporous Mater.|Microporous and Mesoporous Materials MM|Mol. Microbiol.|Molecular Microbiology MMP|Mater. Manuf. Processes|Materials and Manufacturing Processes MMP|Miner. Metall. Process|Minerals and Metallurgical Processing MMTA|Metall. Mater. Trans. A|Metallurgical and Materials Transactions A: Physical Metallurgy and Materials Science MMTB|Metall. Mater. Trans. B|Metallurgical and Materials Transactions B: Process Metallurgy and Materials Processing Science MNRAS|Mon. Not. R. Astron. Soc.|Monthy Notices of the Royal Astronomical Society MO|Mater. Org.|Materials and Organisms MPB|Mar. Pollut. Bull.|Marine Pollutution Bulletin MPEMR|Miner. Process. Extr. Metall. Rev.|Mineral Processing and Extractive Metallurgy Review MPLA|Mod. Phys. Lett. A|Modern Physics Letters A MPLB|Mod. Phys. Lett. B|Modern Physics Letters B MP|Mater. Performance|Materials Performance MP|Mol. Pharmacol.|Molecular Pharmacology MP|Mol. Phys.|Molecular Physics MRB|Mater. Res. Bull.|Materials Research Bulletin MRC|Macromol. Rapid Commun.|Macromolecular Rapid Communications MRC|Magn. Reson. Chem.|Magnetic Resonance in Chemistry MRD|Mol. Reprod. Dev|Molecular Reproduction and Development MRI|Mater. Res. Innovations|Materials Research Innovations MRMC|Mini-Rev. Med. Chem.|Mini - Reviews in Medicinal Chemistry MR|Microbiol. Res.|Microbiological Research MRMPBM|Magn. Reson. Mater. Phys., Biol. Med.|Magnetic Resonance Materials in Physics, Biology and Medicine MRSB|MRS Bull.|MRS Bulletin MRSIJNSR|MRS Internet J. Nitride Semicond. Res.|MRS Internet Journal of Nitride Semiconductor Research MRT|Microsc. Res. Tech.|Microscopy Research and Technique MSEA|Mater. Sci. Eng., A|Materials Science and Engineering A MSEB|Mater. Sci. Eng., B|Materials Science and Engineering B MSEC|Mater. Sci. Eng., C|Materials Science and Engineering C MSER|Mater. Sci. Eng., R|Materials Science and Engineering Reports MSF|Mater. Sci. Forum|Materials Science Forum MSHT|Met. Sci. Heat Treat.|Metal Science and Heat Treatment MS|Macromol. Symp.|Macromolecular Symposium MS|Mater. Sci.|Materials Science MS|Mater. Struct.|Materials and Structures MSMSE|Modell. Simul. Mater. Sci. Eng.|Modelling and Simulation in Materials Science and Engineering MSP|Mol. Supramol. Photochem.|Molecular and Supramolecular Photochemistry MSRI|Mater. Sci. Res. Int.|Materials Science Research International MSR|Mass Spectrom. Rev.|Mass Spectrometry Reviews MSSP|Mater. Sci. Semicond. Process.|Materials Science in Semiconductor Processing MST|Mater. Sci. Technol.|Materials Science and Technology MST|Meas. Sci. Technol.|Measurement Science and Technology MTA|Metall. Trans. A|Metallurgical Transactions A MTB|Metall. Trans. B|Metallurgical Transactions B MTDM|Mech. Time-Depend. Mater.|Mechanics of Time Dependent Materials MTE|Microscale Thermophys. Eng.|Microscale Thermophysical Engineering MTJIM|Mater. Trans., JIM|Materials Transactions, JIM MT|Mater. Today|Materials Today MTOM|Metalloved. Term. Obrab. Met.|Metallovedenie i Termicheskaya Obrabotka Metallov MTS|Macromol. Theory Simul.|Macromolecular Theory and Simulations MWE|Mine Water Environ.|Mine Water and the Environment MW|Materialwiss. Werkstofftech.|Materialwissenschaft und Werkstofftechnik NA|Numer. Algor.|Numerical Algorithms NAR|Nucleic Acids Res.|Nucleic Acids Research NATOASISSA|NATO ASI Ser., Ser. A|NATO ASI Series, Series A Life Sciences NATOASISSB|NATO ASI Ser., Ser. B|NATO ASI Series, Series B Physics NATOASISSC|NATO ASI Ser., Ser. C|NATO ASI Series, Series C Mathematical and Physical Sciences NATOASISSE|NATO ASI Ser., Ser. E|NATO ASI Series, Series E Applied Physics NATOASISSG|NATO ASI Ser., Ser. G|NATO ASI Series, Series G Ecological Sciences NATOASISSH|NATO ASI Ser., Ser. H|NATO ASI Series, Series H Cell Biology NB|Nat. Biotechnol.|Nature Biotechnology NCB|New Compr. Biochem.|New Comprehensive Biochemistry NCSIFA|Nuovo Cimento Soc. Ital. Fis., A|Nuovo Cimento della Societa Italiana di Fisica A NCSIFB|Nuovo Cimento Soc. Ital. Fis., B|Nuovo Cimento della Societa Italiana di Fisica B NCSIFC|Nuovo Cimento Soc. Ital. Fis., C|Nuovo Cimento della Societa Italiana di Fisica C NCSIFD|Nuovo Cimento Soc. Ital. Fis., D|Nuovo Cimento della Societa Italiana di Fisica D NCTL|Nachr. Chem. Tech. Lab.|Nachrichten aus Chemie Technik und Laboratorium NDFCT|New Diamond Front. Carbon Technol.|New Diamond and Frontier Carbon Technology NDTEI|NDT and E Int.|NDT and E International NED|Nucl. Eng. Des.|Nuclear Engineering and Design NF|Nucl. Fusion|Nuclear Fusion NHTPA|Numer. Heat Transfer, Part A|Numerical Heat Transfer Part A NHTPB|Numer. Heat Transfer, Part B|Numerical Heat Transfer Part B NIMPRSA|Nucl. Instrum. Methods Phys. Res., Sect. A|Nuclear Instruments and Methods in Physical Research Section A NIMPRSB|Nucl. Instrum. Methods Phys. Res., Sect. B|Nuclear Instruments and Methods in Physical Research Section B NI|Neurochem. Int.|Neurochemistry International NJC|New J. Chem.|New Journal of Chemistry NK|Neft. Khoz.|Neftyanoe Khozyaistvo (Petroleum Industry) NL|Nano Lett.|Nano Letters NM|Nanostruct. Mater.|Nanostructured Materials NM|Neorg. Mater.|Neorganicheskie Materialy NMRB|NMR Biomed.|NMR in Biomedicine N|Nature|Nature NPA|Nucl. Phys. A|Nuclear Physics A NPB|Nucl. Phys. B|Nuclear Physics B NPL|Nat. Prod. Lett.|Natural Products Letters NPM|New Polym. Mat.|New Polymeric Materials NPR|Nat. Prod. Rep.|Natural Products Reports NPS|Nat. Prod. Sci.|Natural Product Sciences NR|Neurochem. Res.|Neurochemical Research NSAP|Naunyn-Schmiedeberg's Arch. Pharmacol.|Naunyn-Schmiedeberg's Archives of Pharmacology NSB|Nat. Struct. Biol.|Natural Structural Biology NT|Nat. Toxins|Natural Toxins NT|Nucl. Technol.|Nuclear Technology OC|Opt. Commun.|Optics Communication OC|Organohalogen Compd.|Organohalogen Compounds OC|Organomet. Chem.|Organometallic Chemistry OE|Opt. Express|Optics Express OE|Org. Electron.|Organic Electronics OGJ|Oil Gas J.|Oil and Gas Journal OG|Org. Geochem.|Organic Geochemistry OLEB|Origins Life Evol. Biosphere|Origins of Life and Evolution of the Biosphere OL|Opt. Lett.|Optics Letters OL|Org. Lett.|Organic Letters OM|Opt. Mater.|Optical Materials OM|Oxid. Met.|Oxidation of Metals OMS|Org. Mass Spectrom.|Organic Mass Spectrometry O|Organometallics|Organometallics OPPI|Org. Prep. Proced. Int.|Organic Preparations and Procedures International OPRD|Org. Process Res. Dev.|Organic Process Research and Development ORM|Org. React. Mech.|Organic Reaction Mechanics OSE|Ozone Sci. Eng.|Ozone Science and Engineering OS|Opt. Spectrosc.|Optics and Spectroscopy OS|Opt. Spektrosk.|Optika i Spektroskopiya OZ|Opt. Zh.|Opticheskii Zhurnal P|Peptides|Peptides PAC|Polycyclic Aromat. Compd.|Polycyclic Aromatic Compounds PAC|Pure Appl. Chem.|Pure and Applied Chemistry PACSDPC|Prepr. - Am. Chem. Soc., Div. Pet. Chem.|Preprints - American Chemical Society, Division of Petroleum Chemistry PAMS|Proc. Amer. Math. Soc.|Proceedings of the American Mathematical Society PA|Physica A|Physica A PA|Phytochem. Anal|Phytochemical Analysis PAT|Polym. Adv. Technol.|Polymers for Advanced Technologies PBB|Prep. Biochem. Biotechnol.|Preparative Biochemistry and Biotechnology PBMB|Prog. Biophys. Mol. Biol.|Progress in Biophysics and Molecular biology PB|Physica B|Physica B PB|Polym. Bull.|Polymer Bulletin PBP|Pestic. Biochem. Physiol.|Pesticide Biochemistry and Physiology PB|Process Biochem.|Process Biochemistry PB|Prog. Biotechnol.|Progress in Biotechnology PBZ|Physiol. Biochem. Zool.|Physiological and Biochemical Zoology PCCP|Phys. Chem. Chem. Phys.|Physical Chemistry Chemical Physics PCGCM|Prog. Cryst. Growth Charact. Mater.|Progress in Crystal Growth and Characterization of Materials PCG|Phys. Chem. Glasses|Physics and Chemistry of Glasses PCJ|Pharm. Chem. J.|Pharmaceutical Chemistry Journal PCL|Phys. Chem. Liq.|Physics and Chemistry of Liquids PCM|Phys. Chem. Miner.|Physics and Chemistry of Minerals PCONP|Prog. Chem. Org. Nat. Prod.|Progress in the Chemistry of Organic Natural Products PC|Physica C|Physica C PCPMNMR|Physiol. Chem. Phys. Med. NMR|Physiological Chemistry and Physics and Medical NMR PC|Polym. Compos.|Polymer Composites PCPP|Plasma Chem. Plasma Process.|Plasma Chemistry and Plasma Processing PC|Przem. Chem.|Przemysl Chemiczny PCPS|Prog. Colloid Polym. Sci.|Progress in Colloid and Polymer Science PCQ|Process Control Qual.|Process Control and Quality PDDD|Perspect. Drug Discovery Des.|Perspectives in Drug Discovery and Design PD|Physica D|Physica D PD|Powder Diffr.|Powder Diffraction PDS|Polym. Degrad. Stab.|Polymer Degradation and Stability PECS|Prog. Energy Combust. Sci.|Progress in Energy and Combustion Science PE|Physica E|Physica E PE|Plast. Eng.|Plastics Engineering PE|Protein Eng.|Protein Engineering PES|Polym. Eng. Sci.|Polymer Engineering and Science PFA|Phys. Fluids A|Physics of Fluids A PFB|Phys. Fluids B|Physics of Fluids B PGN|Polym. Gels Networks|Polymer Gels and Networks PHC|Prog. Heterocycl. Chem.|Progress in Heterocyclic Chemistry PIC|Prog. Inorg. Chem.|Progress in Inorganic Chemistry PIM|Prog. Ind. Microbiol.|Progress in Industrial Microbiology PI|Polym. Int.|Polymer International PJC|Pol. J. Chem.|Polish Journal of chemistry PJ|Polym. J.|Polymer Journal PLA|Phys. Lett. A|Physics Letters A PLB|Phys. Lett. B|Physics Letters B PLR|Prog. Lipid Res.|Progress in Lipid Research PMA|Philos. Mag. A|Philosophical Magazine A PMB|Philos. Mag. B|Philosophical Magazine B PML|Philos. Mag. Lett.|Philosophical Magazine Letters PMMC|Powder Metall. Met. Ceram.|Powder Metallurgy and Metal Ceramics PM|Planta Med.|Planta Medica PM|Powder Metall.|Powder Metallurgy PM|Prot. Met|Protection of Metals PMR|Platinum Met. Rev.|Platinum Metals Review PMSE|Polym. Mater. Sci. Eng.|Polymeric Materials Science and Engineering PMS|Prog. Mater Sci.|Progress in Materials Science PNASUSA|Proc. Natl. Acad. Sci. USA|Proceedings of the National Academy of Sciences of the United States of America PNAS|Proc. Natl. Acad. Sci. USA|Proceedings of the National Academy of Sciences PNB|Polym. Networks Blends|Polymer Networks and Blends PNMRS|Prog. Nucl. Magn. Reson. Spectrosc.|Progress in Nuclear Magnetic Resonance Spectroscopy POC|Prog. Org. Coat.|Progress in Organic Coatings PO|Pestic. Outlook|Pesticide Outlook PPACSDFC|Prepr. Pap. - Am. Chem. Soc., Div. Fuel Chem.|Preprint Papers - American Chemical Society, Division of Fuel Chemistry PPACSDPC|Polym. Prepr. (Am. Chem. Soc., Div. Polym. Chem.)|Polymeric Preprints (American Chemical Society, Division of Polymer Chemistry) PPB|Plant Physiol. Biochem.|Plant Physiology and Biochemistry PPCF|Plasma Phys. Controlled Fusion|Plasma Physics and Controlled Fusion PPC|Pharm. Pharmacol. Commun.|Pharmacy and Pharmacology Communications PPC|Polym. Polym. Compos.|Polymers and Polymer Composites PPL|Pharm. Pharmacol. Lett.|Pharmaceutical and Pharmacological Letters PP|Photochem. Photobiol.|Photochemistry and Photobiology PP|Physiol. Plant.|Physiologia Plantarum PP|Plasmas Polym.|Plasmas and Polymers PPR|Prog. Pap. Recycl.|Progress in Paper Recycling PPSC|Part. Part. Syst. Char.|Particle and Particle Systems Characterization PPS|Prog. Polym. Sci.|Progress in Polymer Science PPTE|Polym. Plast. Technol. Eng.|Polymer - Plastics Technology and Engineering PRAAMOP|Phys. Rev. A: At. Mol. Opt. Phys.|Physical Review A: Atomic, Molecular, and Optical Physics PRBCM|Phys. Rev. B: Condens. Matter|Physical Review B: Condensed Matter PRCNP|Phys. Rev. C: Nucl. Phys.|Physical Review C: Nuclear Physics PRCPA|Plast. Rubber Compos. Process. Appl.|Plastics Rubber and Composites Processing and Applications PRDPF|Phys. Rev. D: Part. Fields|Physical Review D: Particles and Fields PRE|Polym. React. Eng.|Polymer Reaction Engineering PRESPPF|Phys. Rev. E: Stat. Phys., Plasmas, Fluids,|Physical Review E: Statistical Physics, Plasmas, Fluids, and Related Interdisciplinary Topics PRK|Prog. React. Kinet.|Progress in Reaction Kinetics PRL|Phys. Rev. Lett.|Physical Review Letters PR|Pharmacol. Res.|Pharmacological Research PR|Pharm. Res.|Pharmaceutical Research PR|Photosynth. Res.|Photosynthesis Research PR|Phys. Rev.|Physical Review PR|Polym. Recycl.|Polymer Recycling PRSLSA|Proc. R. Soc. London, Ser. A|Proceedings of the Royal Society of London Series A PRSLSB|Proc. R. Soc. London, Ser. B|Proceedings of the Royal Society of London Series B PSEP|Process Saf. Environ. Prot.|Process Safety and Environment Protection PSFB|Proteins|Proteins: Structure, Function, and Bioinformatics PSFG|Protein-Struct. Funct. Genet.|Proteins: Structure, Function, and Genetics PSF|Plat. Surf. Finish.|Plating and Surface Finishing PS|Phys. Scr.|Physica Scripta PSP|Process Saf. Prog.|Process Safety Progress PS|Protein Sci.|Protein Science PSSA|Phys. Status Solidi A|Physical Status Solidi A PSSB|Phys. Status Solidi B|Physical Status Solidi B PSSC|Prog. Solid State Chem.|Progress in Solid State Chemistry PSS|Prog. Surf. Sci.|Progress in Surface Science PSSRE|Phosphorus, Sulfur Silicon Relat. Elem.|Phosphorus Sulfur Silicon and the Related Elements PSST|Plasma Sources Sci. Technol.|Plasma Sources Science and Technology PST|Part. Sci. Technol.|Particulate Science and Technology PST|Pet. Sci. Technol.|Petroleum Science and Technology PT|Pharm. Technol.|Pharmaceutical Technology PT|Phase Transitions|Phase Transitions PT|Polym. Test.|Polymer testing PT|Powder Technol.|Powder Technology PTRSLSA|Philos. Trans. R. Soc. London, Ser. A|Philosophical Transactions of the Royal Society of London, Series A PTRSLSB|Philos. Trans. R. Soc. London, Ser. B|Philosophical Transactions of the Royal Society of London, Series B QAB|Quim. Anal. (Barcelona)|Quimica Analitica QN|Quim. Nova|Quimica Nova QSAR|Quant. Struct.-Act. Relat.|Quantitative Structure-Activity Relationships RAC|Rev. Anal. Chem|Reviews in Analytical Chemistry RA|Radiochim. Acta|Radiochima Acta RA|Rheol. Acta|Rheologica Acta RCB|Russ. Chem. Bull.|Russian Chemical Bulletin RCC|Rev. Comput. Chem.|Reviews in Computational Chemistry RCE|Rev. Chem. Eng.|Reviews in Chemical Engineering RCI|Res. Chem. Intermed.|Research on Chemical Intermediates RCMPP|Res. Commun. Mol. Pathol. Pharmacol.|Research Communications in Molecular Pathology and Pharmacology RCMS|Rapid Commun. Mass Spectrom.|Rapid Communications in Mass Spectrometry RC|Rev. Chim.|Revista de Chimie RCT|Rubber Chem. Technol.|Rubber Chemistry and Technology RECT|Rev. Environ. Contam. Toxicol.|Reviews of Environment Contamination and Toxicology REDS|Radiat Eff. Defects Solids|Radiation Effects and Defects in Solids RFP|React. Funct. Polym.|Reactive and Functional Polymers RGT|Rev. Gen. Therm.|Revue Generale de Thermique RIC|Refract. Ind. Ceram|Refractories and Industrial Ceramics RJAC|Russ. J. Appl. Chem.|Russian Journal of Applied Chemistry RJBC|Russ. J. Bioorg. Chem.|Russian Journal of Bioorganic Chemistry RJCC|Russ. J. Coord. Chem.|Russion Journal of Coordination Chemistry RJE|Russ. J. Electrochem.|Russian Journal of Electrochemistry RJGC|Russ. J. Gen. Chem.|Russian Journal of General Chemistry RJNT|Russ. J. Nondestr. Test.|Russian Journal of Nondestructive Testing RJOC|Russ. J. Org. Chem.|Russian Journal of Organic Chemistry RKCL|React. Kinet. Catal. Lett.|Reaction Kinetics and Catalysis Letters RMCIT|Rev. Metall. / Cah. Inf. Tech.|Revue de Metallurgie / Cahiers d'Informations Techniques RM|Res. Microbiol.|Research in Microbiology RM|Russ. Metall.|Russian Metallurgy RPBP|Rev. Physiol., Biochem. Pharmacol.|Reviews of Physiology Biochemistry and Pharmacology RPC|Radiat. Phys. Chem.|Radiation Physics and Chemistry RPD|Radiat. Prot. Dosim.|Radiation Protection Dosimetry RPP|Rep. Prog. Phys.|Reports on Progress in Physics RRC|Rev. Roum. Chim.|Revue Roumaine de Chimie RR|Radiat. Res.|Radiation Research RRR|Rapra Rev. Rep.|RAPRA Review Reports RSI|Rev. Sci. Instrum.|Review of Scientific Instruments RTCPB|Recl. Trav. Chim. Pays-Bas|Recueil des Travaux Chimiques des Pays-Bas Journal of the Royal Netherlands Chemical Society RTP|Regul. Toxicol. Pharm.|Regulatory Toxicology and Pharmacology SAA|Sens. Actuators, A|Sensors and Actuators, A SAB|Sens. Actuators, B|Sensors and Actuators, B SAJC|S. Afr. J. Chem.|South African Journal of Chemistry SAMPEJ|SAMPE J.|SAMPE Journal SAPA|Spectrochim. Acta, Part A|Spectrochimica Acta, Part A SAPB|Spectrochim. Acta, Part B|Spectrochimica Acta, Part B SA|Spectrochim. Acta|Spectrochimica Acta SBB|Soil Biol. Biochem.|Soil Biology and Biochemistry SB|Struct. Bond.|Structure and Bonding SCI|Surf. Coat. Int.|Surface Coatings International SCSB|Sci. China, Ser. B|Science in China, Series B Chemistry SCSE|Sci. China, Ser. E|Science in China, Series E Technological Sciences SC|Struct. Chem.|Structural Chemistry SC|Supramol. Chem.|Supramolecular Chemistry SC|Synth. Commun.|Synthetic Communications SCT|Surf. Coat. Technol.|Surface and Coatings Technology SEIE|Solvent Extr. Ion Exch.|Solvent Extraction and Ion Exchange SEMSC|Sol. Energy Mater. Sol. Cells|Solar Energy Materials and Solar Cells SE|Spectrosc. Eur.|Spectroscopy Europe SE|Surf. Eng.|Surface Engineering SIA|Surf. Interface Anal.|Surface and Interface Analysis SISC|SIAM J. Sci. Comp.|SIAM Journal on Scientific Computing SI|Silic. Indus.|Silicates Industriels SJM|Scand. J. Metall.|Scandinavian Journal of Metallurgy SL|Spectrosc. Lett.|Spectroscopy Letters SM|Scripta Mater.|Scripta Materialia SMS|Smart Mater. Struct.|Smart Materials and Structures SM|Superlattices Microstruct.|Superlattices and Microstructures SM|Synth. Met.|Synthetic Metals SNPC|Stud. Nat. Prod. Chem.|Studies in Natural Products Chemistry SPEM|Supramol. Photosensit. Electroact. Mater.|Supramolecular Photosensitive and Electroactive Materials SPIOC|Spectrosc. Prop. Inorg. Organomet. Compd.|Spectroscopic Properties of Inorganic and Organometallic Compounds SPM|Sep. Purif. Methods|Separation and Purification Methods SP|Sci. Prog.|Science Progress SPT|Sep. Purif. Technol.|Separation and Purification Technology SRIMOC|Synth. React. Inorg. Met.-Org. Chem.|Synthesis and Reactivity in Inorganic and Metal-Organic Chemistry SRL|Surf. Rev. Lett.|Surface Review and Letters S|Science|Science SSCP|Springer Ser. Chem. Phys.|Springer Series in Chemical Physics SSC|Solid State Commun.|Solid State Communications SSE|Solid-State Electron.|Solid State Electronics SSI|Solid State Ionics|Solid State Ionics SSNMR|Solid State Nucl. Magn. Reson.|Solid State Nuclear Magnetic Resonance SSR|Surf. Sci. Rep.|Surface Science Reports SSSC|Stud. Surf. Sci. Catal.|Studies in Surface Science and Catalysis SSSSS|Springer Ser. Solid-State Sci.|Springer Series in Solid-State Sciences SSS|Surf. Sci. Spectra|Surface Science Spectra SS|Supramol. Sci.|Supramolecular Science SS|Surf. Sci.|Surface Science SSTB|Spill Sci. Technol. Bull.|Spill Science and Technology Bulletin SST|Semicond. Sci. Technol.|Semiconductor Science and Technology SST|Sep. Sci. Technol.|Separation Science and Technology SST|Speculations Sci. Technol.|Speculations in Science and Technology SST|Supercond. Sci. Technol.|Superconductor Science and Technology STE|Sci. Total Environ.|Science of the Total Environment STWJ|Sci. Technol. Weld. Joining|Science and Technology of Welding and Joining /font> TACTAC|TrAC, Trends Anal. Chem.|TRAC Trends in Analytical Chemistry TAP|Top. Appl. Phys.|Topics in Applied Physics TAP|Toxicol. Appl. Pharmacol.|Toxicology and Applied Pharmacology TA|Tetrahedron: Asymmetry|Tetrahedron: Asymmetry TA|Thermochim. Acta|Thermochimica Acta TBIC|Top. Biol. Inorg. Chem.|Topics in Biological and Inorganic Chemistry TBS|Trends Biochem. Sci.|Trends in Biochemical Sciences TB|Trends Biotechnol.|Trends in Biotechnology TCA|Theor. Chem. Acc.|Theoretical Chemistry Accounts TCC|Top. Curr. Chem.|Topics in Current Chemistry TC|Top. Catal.|Topics in Catalysis TEC|Theor. Exp. Chem.|Theoretical and Experimental Chemistry TEC|Toxicol. Environ. Chem.|Toxicological and Environmental Chemistry TEE|Trace Elem. Electrolytes|Trace Elements and Electrolytes TE|Tissue Eng.|Tissue Engineering TFCE|Theor. Found. Chem. Eng.|Theoretical Foundations of Chemical Engineering TFS|Top. Fluoresc. Spectrosc.|Topics in Fluorescence Spectroscopy TIC|Top. Inorg. Chem.|Topics in Inorganic Chemistry TIMF|Trans. Inst. Met. Finish.|Transactions of the Institution of Metal Finishing TIMMSA|Trans. Inst. Min. Metall., Sect. A|Transactions of the Institution of Mining and Metallurgy Section A TIMMSB|Trans. Inst. Min. Metall., Sect. B|Transactions of the Institution of Mining and Metallurgy Section B TIMMSC|Trans. Inst. Min. Metall., Sect. C|Transactions of the Institution of Mining and Metallurgy Section C TJ|Tappi J.|Tappi Journal TL|Tetrahedron Lett.|Tetrahedron Letters TL|Toxicol. Lett.|Toxicology Letters TMC|Transition Met. Chem.|Transition Metal Chemistry TMM|Tsvetn. Met. (Moscow)|Tsvetnaya Metally TSF|Thin Solid Films|Thin Solid Films TS|Toxicol. Sci.|Toxicological Sciences UFZ|Ukr. Fiz. Zh.|Ukrainskii Fizicheskii Zhurnal UK|Usp. Khim.|Uspekhi Khimii UKZ|Ukr. Khim. Zh.|Ukrainskii Khimicheskii Zhurnal US|Ultrason. Sonochem.|Ultrasonics Sonochemistry VS|Vib. Spectrosc|Vibrational Spectroscopy WASP|Water, Air, Soil Pollut.|Water, Air, and Soil Pollution WER|Water Environ. Res|Water Environment Research WJMB|World J. Microbiol. Biotechnol.|World Journal of Microbiology and Biotechnology WMO|Waste Manage. (Oxford)|Waste Management WMR|Waste Manage. Res.|Waste Management and Research WRR|Water Resour. Res.|Water Resources Research WR|Water Res.|Water Research WST|Water Sci. Technol.|Water Science and Technology XRS|X-Ray Spectrom.|X-Ray Spectrometry ZAAC|Z. Anorg. Allg. Chem.|Zeitschrift fur Anorganische und Allgemeine Chemie ZFK|Zh. Fiz. Khim.|Zhurnal Fizicheskoi Khimii ZKNCS|Z. Kristallogr. - New Cryst. Struct.|Zeitschrift fur Kristallograhie - New Crystral Stuctures ZK|Z. Kristallogr.|Zeitschrift fur Kristallograhie ZMI|Z. MetaIlkd.|Zeitschrift fur MetaIlkunde ZNAPS|Z. Naturforsch., A: Phys. Sci.|Zeitschrift fur Naturforschung A: Journal of Physical Sciences ZNBCS|Z. Naturforsch., B: Chem. Sci.|Zeitschrift fur Naturforschung B: Journal of Chemical Sciences ZNCB|Z. Naturforsch., C: Biosci.|Zeitschrift fur Naturforschung C: Journal of Biosciences ZNK|Zh. Neorg. Khim.|Zhurnal Neorganicheskoi Khimii ZOK|Zh. Obshch. Khim.|Zhurnal Obshchei Khimii ZOK|Zh. Org. Khim.|Zhurnal Organicheskoi Khimii ZPAHN|Z. Phys. A: Hadrons Nucl.|Zeitschrift fur Physik A: Hadrons and Nuclei ZPBCM|Z. Phys. B: Condens. Matter|Zeitschrift fur Physik B: Condensed Matter ZPCPF|Z. Phys. C: Part. Fields|Zeitschrift fur Physik C: Particle Fields ZPC|Z. Phys. Chem.|Zeitschrift fur Physikalische Chemie ZPDAMC|Z. Phys. D: At., Mol. Clusters|Zeitschrift fur Physik D: Atoms, Molecules and Clusters ZPK|Zh. Prikl. Khim.|Zhurnal Prikladnoi Khimi �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/data/PaxHeaders.3194/contributed_re.txt������������������������������������������������0000644�0000000�0000000�00000000074�13124510115�017010� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.003254785 30 ctime=1498583182.611258424 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/data/contributed_re.txt����������������������������������������������������������������0000644�0001750�0000144�00000017531�13124510115�020404� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-------------------------------------- cb2Bib Contributed Regular Expressions -------------------------------------- cb2Bib usefulness increases when having a set of reliable regular expressions. It can therefore be interesting to share one's favorite regexps among cb2Bib users. If you have a working -which does not mean perfect- regexp that could benefit other users, please take a moment and fill out the RegExp Submission Form. These regexp will be included into the cb2Bib distribution, as received, without any additional editing. Interested users could then copy/paste needed cb2Bib regexps into their own regexp file. In this way, no much of anybody's time and effort should be needed. To use any of the following regular expressions: - Launch cb2Bib - Edit your Regular Expressions file, Alt+E - Copy and paste the desired regular expressions - Save the Regular Expressions file ===================================================================================================== NOTES: browser [[pdftotxt]] comments [[Regular expession to extract from PDF articles]] Submitted [[L. A. C. Silva]] ----------------------------------------------------------------------------------------------------- # cb2Bib 0.9.2 Pattern: GJI (Preprint) [Geophysical Journal International] article year journal doi title author abstract keywords ^.+, (\d\d\d\d)<NewLine1><NewLine2>.+<NewLine3><NewLine4>(Geophysical Journal International)<NewLine5><NewLine6>.*<NewLine7><NewLine8>.*<NewLine9><NewLine10>doi: (.+)<NewLine11><NewLine12>(.+)<NewLine13>(.+)<NewLine14>.*<NewLine19><NewLine20>SUMMARY (.+)Key words: (.+)<NewLine21>.*$ # cb2Bib 0.9.2 Pattern: GJI [Geophysical Journal International] article journal year volume pages doi title author abstract keywords ^(.*) .(\d\d\d\d). (\d{1,3}), (\d{1,3}.\d{0,3})<NewLine1><NewLine2>doi: (.+)<NewLine3><NewLine4>(.+)<NewLine5>(.+)<NewLine6>.*SUMMARY (.+)Key words: (.+)<NewLine1.>.*$ # cb2Bib 0.6.0 Pattern: PEPI Old [Physics of The Earth and Planetary Interiors] article journal volume year pages title author abstract keywords ^(.+) (\d{1,3}) .(\d\d\d\d). (\d{1,3}.\d{0,3}).*<NewLine1><NewLine2>(.+)<NewLine3>(.+)<NewLine4>.+<NewLine6>Abstract (.+) . \d\d\d\d Elsevier .+<NewLine7>Keywords: (.+)<NewLine8>.*$ # cb2Bib 0.6.0 Pattern: PEPI New [Physics of The Earth and Planetary Interiors] article journal volume year pages title author abstract keywords ^.*<NewLine1><NewLine2>(.+) (\d{1,3}) .(\d\d\d\d). (\d{1,3}.\d{0,3})<NewLine3><NewLine4>(.+)<NewLine5>(.+)<NewLine6>.*Abstract (.+) . \d\d\d\d Elsevier.+<NewLine11>Keywords: (.+)<NewLine12>.*$ # cb2Bib 0.6.0 Pattern: EPSL [Earth and Planetary Science Letters] article journal volume year pages title author abstract keywords ^.*<NewLine3>(.+) (\d{1,4}) .(\d\d\d\d). (\d{1,3}.\d{0,3}).*<NewLine4><NewLine5>(.+)<NewLine6>(.+)<NewLine7>.*<NewLine13>Abstract (.+) . \d\d\d\d Elsevier Science B.V. All rights reserved.<NewLine..>Keywords: (.+)<NewLine15>.*$ To use any of the following regular expressions: - Launch cb2Bib - Check 'View Tagged Clipboard Data' at the context menu - Go to 'Insert Regular Expressions', Alt+I, at the context menu - Copy the 3 lines of/to the 'Search RegExp Pattern' - Enter 'Search Pattern Name' - 'Add RegExp' - Copy the line 'Test example from cb2Bib clipboard panel' for testing ===================================================================================================== NOTES: browser [[Mozilla]] description [[Physical Review archive - PROLA]] comments [[Bibtex code is available for _new_ Physical Review articles (publish.aps.org) but not for the PROLA archive (prola.aps.org). This is for PROLA...]] Submitted [[martint on a server called phys.au.dk]] ----------------------------------------------------------------------------------------------------- 'Search RegExp Name' Physical Review (PROLA) 'Search RegExp Pattern' article journal volume pages year number title author abstract publisher url doi ^(.+)\s+(\d+),\s*([^\s]+)\s*\((\d\d\d\d)\)\s*<NewLine1>.*Issue\s*(\d+).*<NewLine2>.+<NewLine3>.+<NewLine4>\s*(.+)\s*<NewLine5>\s*(.+)\s*<NewLine6>.*Received.*<NewLine\d+>\s*(.+)\s*<NewLine\d+>\s*.\d\d\d\d\s*(.+)<NewLine\d+>\s*URL.\s*(.+)\s*<NewLine\d+>\s*[Dd][Oo][Ii].\s*([^\s]+)\s*<NewLine\d+>\s*.*$ 'Test example from cb2Bib clipboard panel' Phys. Rev. C 49, R1737–R1741 (1994)<NewLine1>[Issue 4 – April 1994 ]<NewLine2>[ Previous article | Next article | Issue 4 contents ]<NewLine3>Add to article collection View Page Images, PDF (882 kB), or Buy this Article<NewLine4>Excitation energy deposition in central collisions of 40A MeV 40Ar with 232Th<NewLine5> D. Utley, R. Wada, K. Hagel, J. Li, X. Bin, M. Gui, Y. Lou, R. Tezkratt, J. B. Natowitz, and M. Gonin<NewLine6> Cyclotron Institute, Texas A&M University, College Station, Texas 77843<NewLine7>Received 8 December 1993<NewLine8>Excitation energy depositions in the reactions of 40A MeV 40Ar with 232Th have been determined from measurements of neutron multiplicities in coincidence with mass identified heavy reaction products. For the most central collisions the derived excitation energies of 880 MeV are 200–300 MeV above previous estimates and in excellent agreement with momentum transfer systematics. Heavy evaporation residues are observed for these collisions indicating apparent dynamic delays in the fission channel of (1–5)×10-20 s. While a massive-transfer simulation incorporating preequilibrium emission is in generally good agreement with the experimental results evidence is also found for strongly damped collisions.<NewLine9>©1994 The American Physical Society<NewLine10>URL: http://link.aps.org/abstract/PRC/v49/pR1737<NewLine11>DOI: 10.1103/PhysRevC.49.R1737<NewLine12>PACS: 25.70.Jj, 25.70.Lm, 25.85.Ge ===================================================================================================== NOTES: browser [[Konqueror]] description [[Siam Journals Online]] comments [[Thanks for this great tool! I am using it since a year, and it works great. The example above is from http://epubs.siam.org/SISC/volume-24/art_38257.html, and in addition I have the following entry in abbreviations.txt: SISC|SIAM J. Sci. Comp.|SIAM Journal on Scientific Computing]] Submitted [[gb at ithe.rwth]] ----------------------------------------------------------------------------------------------------- 'Search RegExp Name' Siam Journals Online 'Search RegExp Pattern' article journal volume number pages year publisher title author abstract keywords doi ^(.+),\s*Volume\s*(\d+)\s*Issue\s*(\d+)\s*<NewLine1>pages.*([^\s,]+),\s*.\s*(\d\d\d\d)\s+(.+)<NewLine2>\s*(.+)\s*<NewLine3>\s*(.+)\s*<NewLine4>Abstract\.\s*(.+)\s*<NewLine5>Key words\.\s*(.+)\s*<NewLine6>.+<NewLine7>DOI\.\s*(10.[\d\.]+/\S+)$ 'Test example from cb2Bib clipboard panel' SISC, Volume 24 Issue 1<NewLine1>pages 312–334, © 2002 Society for Industrial and Applied Mathematics<NewLine2>An Inverse Free Preconditioned Krylov Subspace Method for Symmetric Generalized Eigenvalue Problems<NewLine3> Gene H. Golub, Qiang Ye <NewLine4>Abstract. In this paper, we present an inverse free Krylov subspace method for finding some extreme eigenvalues of the symmetric definite generalized eigenvalue problem $Ax = \lambda B x$. The basic method takes a form of inner-outer iterations and involves no inversion of B or any shift-and-invert matrix $A-\lambda_0 B$. A convergence analysis is presented that leads to a preconditioning scheme for accelerating convergence through some equivalent transformations of the eigenvalue problem. Numerical examples are given to illustrate the convergence properties and to demonstrate the competitiveness of the method. <NewLine5>Key words. Krylov subspace, preconditioning, eigenvalue problems <NewLine6>AMS Subject Classifications. 65F15 <NewLine7>DOI. 10.1137/S1064827500382579 ===================================================================================================== �����������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/PaxHeaders.3194/cb2bib.rc��������������������������������������������������������������0000644�0000000�0000000�00000000074�13124510115�013777� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.003254785 30 ctime=1498583182.607258461 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/cb2bib.rc������������������������������������������������������������������������������0000644�0001750�0000144�00000000107�13124510115�015362� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������IDI_ICON1 ICON DISCARDABLE "src/icons/cb2bib.ico" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/PaxHeaders.3194/CHANGELOG��������������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�013535� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.683257756 30 atime=1498583183.003254785 30 ctime=1498583182.683257756 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/CHANGELOG������������������������������������������������������������������������������0000644�0001750�0000144�00000110431�13124510216�015127� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������2017-06-28 RELEASE OF VERSION 1.9.7 2017-06-27 Set MathJax default local for increased security (Thanks to F. Rusconi) 2017-06-27 Fixed broken Cross Ref link 2017-01-14 Added missing Qt dll to Windows installer (Thanks to M. Ivanovski) 2017-01-07 RELEASE OF VERSION 1.9.6 2017-01-07 Fixed regression when invoking internal editor for Annote 2017-01-07 Fixed MacOSX build (Thanks to G. V. Wyngaerd) 2016-07-16 RELEASE OF VERSION 1.9.5 2016-07-16 Fixed main panel tab order regression 2016-05-20 RELEASE OF VERSION 1.9.4 2016-05-18 Set internal editor for Annote 2016-05-18 Updated jsMath interface to MathJax 2016-05-18 Deprecated clipboard poll, removed Qt5X11Extras dependency 2016-05-18 Removed unused What's This button from dialogues 2016-05-15 Set QRegularExpression/PCRE to in-document searches 2016-05-15 Fixed c2bReferenceList QUrl encoding 2016-05-15 Fixed output in c2bconsole 2016-05-15 Updated build scripts for Windows 2016-05-14 Included upcoming QtWebEngine together with QtWebKit 2016-05-13 RELEASE OF VERSION 1.9.3 2016-05-12 Updated and cleaned building scripts 2015-08-10 RELEASE OF VERSION 1.9.2 2015-08-09 Code cleanup through cppcheck 2015-08-09 Removed old modified QRegExp 2015-08-08 Updated indexing 2015-07-24 RELEASE OF VERSION 1.9.1 2015-07-24 Set QRegularExpression/PCRE for full search indexing 2015-07-20 Fixed Qt 5.5.0 compilation 2015-07-18 RELEASE OF VERSION 1.9.0 2015-07-18 Ported to Qt5 2014-12-20 RELEASE OF VERSION 1.5.0 2014-12-18 Fixed document indexing when conversion to text fails 2014-12-17 Improved keyword sentence extraction 2014-12-17 Added modified XPDF code to separate superscripts 2014-12-10 Improved PDF to text postprocessing, code checking and de-hyphenation 2014-08-18 Fix missing keywords for two c2bscripts/*.desktop files (Thanks to F. Rusconi) 2012-12-23 Updated netqinf.txt for PubMed (Thanks to S. Kreisel) 2012-11-05 RELEASE OF VERSION 1.4.9 2012-11-04 Minor improvements in keyword extraction 2012-11-03 Code cleanup and micro optimizations through cppcheck 2012-10-23 Assure tmp path is writable when operating remotely (Thanks to A. Norton) 2012-08-02 Disable Open button when Postprocess does not produce a file (Thanks to J. Welford) 2012-05-15 RELEASE OF VERSION 1.4.8 2012-05-13 Fixed gcc 4.7 compilation, Debian bug 667129 (Thanks to M. Klose and F. Rusconi) 2012-02-17 Added a warning whenever external document to text conversion fails while indexing 2012-01-15 Minor improvements in keyword extraction 2011-12-20 RELEASE OF VERSION 1.4.7 2011-12-17 Added keyword excerpt view 2011-12-13 Optimized keyword extraction citer cleanup 2011-12-05 Propagated --conf flags to child processes 2011-11-18 Improved citer navigation 2011-09-18 Added document similarity view 2011-09-18 Added POS tagger and keyword patterns 2011-08-14 Added automatic keyword extraction from documents 2011-08-03 RELEASE OF VERSION 1.4.6 2011-08-02 Set minor improvements in volume, number, page recognition 2011-08-01 Made shortcuts customizable 2011-06-29 Added XCode ./qmake/cb2bib-osx.pro file (Thanks to J. Ralls) 2011-06-29 Updated netqinf.txt for PubMed 2011-03-21 RELEASE OF VERSION 1.4.5 2011-03-21 Fixed build error, set explicit X11 (Thanks to F. Rusconi, J. Corneli, and A. Wintcher) 2011-01-23 RELEASE OF VERSION 1.4.4 2011-01-23 Consider import multi keywords BibTeX entries (Thanks to C. Dri) 2010-12-17 Added Cyrillic to ASCI transliteration (Thanks to V. Koval) 2010-12-06 Updated bookmark's file netqinf.txt 2010-11-24 Documented comma separated value CSV to BibTeX procedure (Thanks to G. Ranger) 2010-11-05 Fixed three bashisms in file c2btools/bib2pdf (Thanks to F. Rusconi) 2010-10-19 Set executable inside cmake build tree (Thanks to F. Rusconi) 2010-10-11 RELEASE OF VERSION 1.4.3 2010-10-11 Fixed two-letter initial, 'Yu. Last' author parsing 2010-10-10 Fixed trimming leading spaces in Annote verbatim sections 2010-10-10 Removed hard-coded monospace font in Annote's CSS file 2010-10-10 Fixed opened files seen as modified in when using Qt 4.7.0 2010-09-11 RELEASE OF VERSION 1.4.2 2010-08-31 Added initial cmake configure/build/install 2010-08-31 Set fixes and testing cmake configure/build on MacOSX (Thanks to D. Swain) 2010-08-30 Set calling external tools path independent on MacOSX (Thanks to C. Szepesvari) 2010-08-22 Minor code cleanup 2010-08-21 Fixed wrong author parsing if ForeName is missing in XML PubMed (Thanks to F. Rusconi) 2010-05-24 RELEASE OF VERSION 1.4.1 2010-05-23 Improved journal recognition 2010-05-22 Updated bookmark's file netqinf.txt 2010-05-22 Skip saving void documents when "Download document if available" is checked 2010-05-22 Check for document existence and mimetype prior to downloading 2010-05-22 Refactored network classes 2010-04-24 RELEASE OF VERSION 1.4.0 2010-04-23 Set c2bCiter to remember display format 2010-04-22 Set clipboard connected mode default in c2bCiter 2010-04-22 Remember last current citation in c2bCiter 2010-04-22 Updated several icons in editor 2010-03-21 Set workaround for cleared line edits showing cursor (QTBUG-7866) 2010-03-21 Postprocess DOI to clear URL formatting 2010-03-21 Added chronological view in c2bCiter 2010-02-22 RELEASE OF VERSION 1.3.7 2010-02-21 Validate author in PubMed XML parser 2010-02-21 Avoid stopping network queries when one fails 2010-02-21 Set minor improvements in year, volume, page recognition 2010-02-21 Updated style sheet for reference browsing 2010-02-20 Fallback title to booktitle to file name in views 2010-02-20 Set --sloppy to accept all files 2010-02-20 Consider shortcut to write/update source document's metadata (Thanks to S. Kreisel) 2010-02-20 Consider c2bCiter's filter to be connected to clipboard (Thanks to H. Seifzadeh) 2010-02-20 Fixed Medline parsing in some cases with uppercased hyphenated words (Thanks to F. Rusconi) 2010-01-05 RELEASE OF VERSION 1.3.6 2010-01-04 Added 'Fore IJ Last' formatted author recognition 2010-01-02 Minor improvements in journal recognition 2009-12-28 Minor improvements in PubMed XML parser for journal pages and year 2009-12-26 Fixed two cases of author capitalization which conflicted with suffixes and two-letter initials 2009-12-21 Minor improvements in abstract and keywords recognition 2009-12-15 Adapted configure script to Gentoo build descriptions (Thanks to H. Mildenberger and A. K. Huettel) 2009-10-26 RELEASE OF VERSION 1.3.5 2009-10-25 Fixed a regression in single word approximate strings not working for documents 2009-10-21 Fixed wrong automatic extraction for DOIs followed by commas (Thanks to X. Helluy) 2009-10-21 Set reference field shortcuts in manual extraction 2009-10-21 Consider setting manual extraction selection keyboard aware (Thanks to H. Seifzadeh) 2009-10-15 Consider fallback journal to booktitle for inproceedings in views (Thanks to H. Seifzadeh) 2009-10-13 RELEASE OF VERSION 1.3.4 2009-10-12 Skip copy/move document on save if BibTeX file is not writable 2009-10-11 Updated bookmark's file netqinf.txt (Thanks to H. Seifzadeh) 2009-10-09 Added minor improvements in author, pages and volume recognition 2009-10-09 Included citeid in check repeated 2009-09-19 Fixed a typo, --tempdir must be --tmpdir, in bib2pdf (Thanks to F. Rusconi) 2009-09-11 Protected all shell variables against spaces in configure (Thanks to F. Rusconi) 2009-09-10 RELEASE OF VERSION 1.3.3 2009-09-06 Added 'fix string: context' search type 2009-08-26 Optimized search in files, and implemented fast matching for approximate strings 2009-08-26 Fixed compiler -Werror=format-security errors in qDebug calls 2009-08-18 Added --sloppy switch for --doc2bib and --txt2bib actions 2009-08-11 Fixed export entries from search browser 2009-08-06 Added relevant Prism metadata recognition 2009-08-03 Fixed possible separator duplication in keywords 2009-08-03 Wrote a more clarifying documentation for automatic extractions 2009-08-01 Fixed a regression not converting '2nd' and '3rd' PubMed author suffixes 2009-07-27 RELEASE OF VERSION 1.3.2 2009-07-27 Do not ask if document should be saved when closing search results browser 2009-07-27 Added <<citeid>> document ID placeholder that keeps both IDs syncronized 2009-07-26 Set not to expand pathless filenames in USB mode permitting to use host PATH tools 2009-07-26 Improved check repeated and added check repeated on save 2009-07-25 Consider <<title>> ID placeholder and set cite and document separate IDs (Thanks to O. Sluciak) 2009-07-23 Fixed wrong file name in missing converter message 2009-07-23 Updated build scrips to not require external tools dependence 2009-07-23 Set calling external tools path independent 2009-07-10 Added <<author_all_abbreviated>> cite ID placeholder (Thanks to D. Huang) 2009-07-05 Improved configure and tool scripts (Thanks to F. Rusconi and L. Mamane) 2009-06-29 RELEASE OF VERSION 1.3.1 2009-06-27 Added Check Repeated functionality for current reference 2009-06-27 Fixed parser not processing last field in inverted comma style BibTeX 2009-06-27 Set netqinf.txt to use internal XML parser for PubMed 2009-06-27 Fixed packaging, double copying scripts and initial external tool setting 2009-06-01 Fixed c2bciter script not passing all arguments (Thanks to F. Rusconi) 2009-06-01 RELEASE OF VERSION 1.3.0 2009-05-30 Updated configure script (Thanks to F. Rusconi) 2009-05-23 Added module c2bCiter and command line action --citer 2009-05-23 Set cb2Bib not to process clipboard updates if main panel is closed 2009-05-23 Set standard shortcuts to conform to user's desktop 2009-05-23 Improved to ASCII conversion and collation algorithm 2009-05-20 Added example query using HTML to text conversion in netqinf.txt 2009-05-20 Added pre-process script med2bib (Thanks to F. Rusconi) 2009-05-20 Pre and post process scripts cleanup (Thanks to F. Rusconi) 2009-05-17 Fixed wrong display of proper names for BibTeX files written in reverse order 2009-05-17 Improved abstract and keywords heuristics (Thanks to J. P. Eckmann) 2009-05-17 Cleanup command line messages, fixed wrong mention on temporary files deletion 2009-05-17 Convenience script dl_cb2bib renamed to c2bimport 2009-05-10 Improved document to text conversions, removal of non-textual symbols 2009-05-10 Fixed set initial references.bib to user's home directory 2009-05-10 Made temporary file names dependent on cb2Bib session 2009-05-10 Fixed a regression on Windows uninstaller not deleting install directories 2009-05-10 Added convenience shell wrapper c2bconsole on Windows 2009-05-07 RELEASE OF VERSION 1.2.3 2009-05-07 Fixed a regression when setting unsupervised processing 2009-05-07 Renamed settings key for metadata writer 2009-05-06 Improved journal name recognition 2009-05-06 Added conversion htm2txt_query and htm2txt_referenceurl actions in netqinf.txt 2009-05-04 Added --configure command line functionality 2009-05-04 Added --txt2bib and --doc2bib command line functionality 2009-04-05 RELEASE OF VERSION 1.2.2 2009-04-05 Set reference list sorting case and diacritic insensitive 2009-04-05 Improved author string parsing 2009-03-31 Consider parsing reverse order and comma separated author strings (Thanks to D. Comtois) 2009-03-27 Added network access through a proxy host (Thanks to T. Deneux) 2009-03-25 RELEASE OF VERSION 1.2.1 2009-03-25 Improved the pattern/regular expression editor 2009-03-24 Fixed a potential crash if expected and actual captures in user's patterns mismatch 2009-03-15 Improved/optimized journal names lookup 2009-03-07 Added line numbers in embedded editor 2009-03-03 RELEASE OF VERSION 1.2.0 2009-03-01 Moved Qt requirement to version 4.4.0 or later 2009-03-01 Use plain text optimized class QPlainTextEdit for text editing 2009-03-01 Updated bookmark's file netqinf.txt 2009-02-27 Improved built-in network capabilities, including redirections and cookies 2009-02-27 Added author to network query excerpts 2009-02-27 Code cleanup through cppcheck 2009-02-22 Updated build dependencies for Debian 5.0 2009-02-05 RELEASE OF VERSION 1.1.1 2009-01-17 Added heuristic recognition for authors (single and multiple blocks, natural order) 2009-01-10 Revert Latin ligatures in document to plain text conversions 2009-01-10 Improved author string processing 2008-12-27 Improved pages, volume and number recognition 2008-12-23 Convert ' & ' to ' and ' in journal before submitting a network query 2008-12-23 Fixed a regression on month, editor and cite ID fields 2008-12-21 Updated to Qt 4.5.0 QRegExp/QString semantic changes 2008-12-21 Fixed spec file for openSuSE 11.1 build (Thanks to M. Hüwe) 2008-12-17 RELEASE OF VERSION 1.1.0 2008-12-07 Added cb2Bib's Annote viewer 2008-12-07 Added --html-annote and --view-annote command line functionality 2008-12-07 Fixed some issues regarding command line filenames and filedialogs in Windows 2008-12-07 Synchronized BibTeX browser panel with reference line editors 2008-11-30 Code cleanup and refactoring 2008-11-30 Removed no longer needed external client for opening files 2008-11-21 Fixed an issue with percent encoding/tag substitution custom bookmarks 2008-11-21 Updated bookmark's file netqinf.txt for new ACS journals and Science URLs 2008-10-22 RELEASE OF VERSION 1.0.4 2008-10-21 Added 'any word/all words' type searches 2008-10-20 Fixed buttons enabled/disabled in search dialog on Qt > 4.4.0 2008-10-20 Fixed 'About panel' bookmarks not displaying dynamic links on Qt > 4.4.0 2008-10-20 Improved pages, volume and number recognition 2008-09-19 RELEASE OF VERSION 1.0.3 2008-09-18 Recognize and process page format '123-3pp' 2008-09-18 Set arXiv ID as BibTeX URL field 2008-09-18 Fixed a bug when scrolling to 'Edit reference' in search if multiple edits were done 2008-09-17 Force USB mode 'cb2Bib --conf' to use relative to BibTeX document filenames 2008-09-17 Improved managing of relative document filenames 2008-09-17 Added 'Export Entries' to export selected citations in BibTeX editor (Thanks to to A. M. Elena) 2008-07-21 RELEASE OF VERSION 1.0.2 2008-07-20 Added 'Edit reference' in search results 2008-07-20 Fixed a regression for LaTeX-Unicode conversion for letters Å and Æ 2008-07-20 Set LyXPipe in Windows 2008-07-20 Updated PNAS Url 2008-07-10 Optimized approximate string when searching linked documents 2008-07-10 Use Qt::AA_NativeWindows to avoid flickering on Qt 4.4.0 2008-06-17 RELEASE OF VERSION 1.0.1 2008-06-17 Fixed a bug that could result in computing negative word stretch in approximate strings 2008-06-15 Fixed a bug sometimes blocking the reference list filter in BibTeX browser 2008-06-15 Arranged BibTeX browser menus, made context and selection sensitive 2008-06-15 Fixed a regression in BibTeX browser actions not properly showing in menus 2008-06-15 Set sub and superscript conversions from HTML alt tags and [sub/p .] tags 2008-06-15 Fixed BibTeX parser failing in some cases with nested braces 2008-06-15 Added 'Update Documents Metadata' in BibTeX editor 2008-06-10 Set BibTeX to Unicode letter conversions for \LaTeX{} syntax 2008-06-10 Fixed a regression in clipboard's panel multiple line syntax highlighting 2008-06-10 Added tag <<title>> for automatic queries, updated netqinf.txt 2008-06-10 Set better flags for calling ExifTool (Thanks to P. Harvey) 2008-06-07 RELEASE OF VERSION 1.0.0.1 2008-06-07 Fixed an error in inserted metadata from PDFImport and multiple files 2008-06-07 Fixed a regression preventing from setting correct djvu extension 2008-06-07 RELEASE OF VERSION 1.0.0 2008-06-07 Updated cb2Bib's license to GPL version 3 2008-06-07 Added metadata writing through ExifTool 2008-06-05 Set double braces to be seen only BibTeX preview and save 2008-06-05 Removed BibTeX separator for author queries 2008-06-05 Updated configuration dialog 2008-06-05 Only set pdf extension in 'file' when none is given 2008-06-05 Set Utf8 as default codec for files on Windows 2008-06-05 Fixed minor bug in suggested regular expression for page 2008-05-31 Added metadata reading and parsing 2008-05-25 Fixed 'Postprocess month' not following settings 2008-05-25 Added Select File in File context menu 2008-05-25 Added clear functionality to combo boxes 2008-05-07 RELEASE OF VERSION 0.9.5 2008-05-07 Set LyX pipe selection for Qt 4.4.0 filedialogs 2008-05-07 Fixed 'Search in files' headers and browser 'Select' icon display for Qt 4.4.0 2008-04-15 Fixed missing HTML special character encoding when searching by field 2008-04-08 Contributed regexps for Earth Planet Sci Lett, 2008-04-08 Phys Earth Planet Inter, Geophys J Int (Thanks to L. A. C. Silva) 2008-04-07 RELEASE OF VERSION 0.9.4 2008-04-07 Updated bookmark netqinf.txt file 2008-04-05 Set optionally file entries relative to current BibTeX file (Thanks to A. M. Elena) 2008-04-03 Added tag <<selection>> to dynamic bookmarks 2008-04-03 Added dynamic bookmarks to cb2Bib context menu 2008-03-31 Moved basic edit actions to 'Edit' context submenu 2008-03-05 Added cb2Bib browser context action 'Open Document Url' 2008-03-05 Set cb2Bib browser link preference to local article file, to URL, and to DOI 2008-03-05 Set PubMed ID as BibTeX URL field in PubMed extractions (Thanks to S. Tabibzadeh) 2008-02-01 RELEASE OF VERSION 0.9.3 2008-01-31 Added bookmark menu in the embedded editor 2008-01-30 Fixed/Improved PubMed IDs extraction (update netqinf.txt) 2008-01-30 Fixed ISBN recognition for cases 'ISBN 0: 0-0000-0000-0' 2008-01-30 Fixed an issue when parsing bib keys formatted by KBibTeX (Thanks to D. Car) 2007-12-07 RELEASE OF VERSION 0.9.2 2007-12-07 Fixes/workarounds for filedialog and Qt<4.3.3. Added exec icon for X11. 2007-12-05 Optimized BibTeX parser, searches and composite searches 2007-12-04 Fixed merging of contiguous search excerpts 2007-12-04 Fixed a bug when deleting search patterns, avoid accepting empty patterns 2007-11-25 RELEASE OF VERSION 0.9.1 2007-11-25 Fixed ISBN recognition for cases 'ISBN-0: 0-0000-0000-0' 2007-11-25 Added filter mode selection to browser/editor reference list 2007-11-25 Set filedialog to remember last size 2007-11-25 Fixed compilation issue on Debian 4.1.1-21 (Thanks to A. Matuszak) 2007-10-31 RELEASE OF VERSION 0.9.0 2007-10-30 Show 'search in files' output in text mode if no hits but search errors 2007-10-30 Consider 'editor' if 'author' is empty for cite IDs 2007-10-30 Customizable page number separator (Thanks to C. Ullrich) 2007-10-30 Consistent update of shortcuts: Use standard ones, and Alt modifier in other cases 2007-10-30 Updated Editor/Browser menu 2007-10-28 Added 'Search In Files' for selected text 2007-10-28 Code refactoring: Added resource class c2b 2007-10-27 Remove patterns '(Editor)', '(Ed)', ..., prior to processing an editors string 2007-10-27 Improved heuristic guess for ISBN 2007-10-27 Improved heuristic guess for abstract, considers tag 'summary' 2007-10-26 Updated message dialogs for better desktop integration 2007-10-26 Fixed shortcut for 'Deletes temporary BibTeX output file' 2007-10-26 Set c2bUtils into namespace, some inlining of utilities 2007-09-17 Fixed wrong renaming of non '.pdf' files when original filename has several '.' 2007-09-05 RELEASE OF VERSION 0.8.4 2007-09-05 Setting relative file paths and temporaries when launched with --conf option 2007-09-05 Minor code cleanup 2007-08-02 Updated netqinf.txt file 2007-08-02 Updated PubMed/Medline parser 2007-07-05 RELEASE OF VERSION 0.8.3.1 2007-07-05 Fixed a regression while parsing command line 2007-07-05 RELEASE OF VERSION 0.8.3 2007-07-04 Fixed memory leak from cb2Bib not freeing c2bSearchInFiles 2007-07-03 Fixed file dialog captions when using Qt 4.3.0 2007-07-03 Do not show cb2Bib's main panel when launched with '--bibedit filename.bib' 2007-07-03 Reorganized settings and updated windows installer 2007-07-03 Considered user configuration files, --conf flag (Thanks to S. Oom) 2007-07-03 Fixed Debian/Ubuntu packaging script (Thanks to L. Eraly) 2007-07-02 Updated configure script 2007-06-07 Fixed some dialogs not showing when using Qt 4.3.0 2007-05-07 RELEASE OF VERSION 0.8.2 2007-05-07 Fixed 'Unknown Error' when copying/moving files from PDFImport on Windows 2007-05-07 Scape < and > symbols in browser 2007-05-01 Fixed regression 'Copy instead of moving non-local files' for external clients 2007-04-23 Added approximate string search 2007-04-08 Added search highlight for abstracts 2007-04-08 Added PDF search excerpts 2007-04-08 Added cache for PDF search 2007-04-08 Remember Browser font size 2007-04-01 RELEASE OF VERSION 0.8.1 2007-04-01 Copy instead of moving non-local files 2007-04-01 Improved/optimized Search in Files functionality for composite patterns 2007-04-01 Syncornized BibTeX Editor and Browser navigation 2007-03-24 Set raw mode view as default, instead of tagged mode view 2007-03-24 Set unique BibTeX parsing. Fixes parsing in Editor and Search in Files 2007-03-24 Improved BibTeX recognition and parsing 2007-03-24 Improved PDFImport functionality (Thanks to E. Gaubitzer) 2007-03-18 Updated netqinf.txt and regexps.txt files 2007-03-18 Added <<excerpt>> tag for queries 2007-03-18 Improved journal and pages recognition 2007-03-18 Cleanup and reorganization of settings management 2007-03-16 Remove from PDFImport file list unsuccessfully converted files 2007-03-16 Remember last directory/file in PDFImport filedialog (Thanks to E. Gaubitzer) 2007-03-13 RELEASE OF VERSION 0.8.0 2007-03-11 Added HTML browser view to BibTeX editor 2007-03-10 Added 'Search references in files' functionality 2007-03-10 Avoided cb2Bib's tags from interfering with heuristic recognition 2007-03-10 Improved heuristic guess for volume, pages, and number 2007-03-10 Added clear functionality to line editors 2007-03-10 Updated all dialogs to make them consistent and desktop aware 2007-03-10 Fixed preparser 2007-03-10 Improved Find in Text dialog 2007-03-09 Fixed Reference List not displaying booktitle 2007-03-06 Fixed a rare wrong passing of optional arguments to external tools 2007-03-06 Fixed history in filedialogs 2007-03-06 Removed wrong slash in filedialog filenames when file did not exist 2007-03-06 Fixed wrong editor exit when document is modified and cancel is pressed 2007-02-18 RELEASE OF VERSION 0.7.3 2007-02-17 Removed duplicated blank lines in external process logs 2007-02-17 Convert HTML character encodings in PubMed reference import 2007-02-17 Fixed URL encoding for opening files through internal desktop service 2007-02-17 Remove braces in <<title>> replacement for Bookmarks 2007-02-17 Fixed <<pages>> replacement for Bookmarks (fixes CR bookmark) 2007-02-17 Remember word un/wrap mode in editors 2007-02-17 Check if DOI is a web address in BibTeX editor before being opened 2007-02-17 Added web search customization in BibTeX editor 2007-02-16 Fixed/improved uppercased 'title' capitalization 2006-12-06 RELEASE OF VERSION 0.7.2 2006-12-06 Added choice to write 'title' in double braces 2006-12-06 Fixed pasting of formatted text to BibTeX editor 2006-12-06 Fixed CR regexp in netqinf.txt to not to read HTML-encoded DOI 2006-12-06 Fixed a subtle bug preventing viewers from updating if text was selected 2006-12-06 Added raw, non-preprocessed clipboard view mode (Thanks to M. Wegmann) 2006-12-05 Updated configure and install doc for MacOSX (Thanks to Konstantin and P. Koshevoy) 2006-12-04 Added "Download Reference to cb2Bib" functionality 2006-12-04 Updated cb2Bib command line syntax 2006-12-03 Added Mac OS X cb2bib.icns icon file (Thanks to Konstantin) 2006-12-03 Added missing mingwm10.dll file on Windows package 2006-10-30 RELEASE OF VERSION 0.7.1 2006-10-30 Set default configure prefix to /usr (Thanks to T. Fischer) 2006-10-30 Fixed configure to use -prefix path 2006-10-30 Fixed LyX pipe not shown at file dialogs 2006-10-30 Revert to internal file management if file copy/move/open client is empty 2006-10-19 Fixed local file open on Windows 2006-10-16 RELEASE OF VERSION 0.7.0 2006-10-16 Fixed a regression when setting line/column in Editor 2006-10-16 Improved BibTeX file selection through combo filename list 2006-10-16 Added Editor's modified flag 2006-10-16 Set KDE consistent 'Save'/'Save As' icons in BibTeX Editor 2006-10-16 BibTeX Editor remembers Reference List position 2006-10-16 Set consistent labeling in file dialogs 2006-10-16 Added file history in file dialogs 2006-10-16 Fixed a regression related to wrong file dialog messages 2006-10-16 Consider integrated desktop service for URL opening 2006-10-16 Use QFontComboBox for font selection 2006-10-04 Fixed a regression when copying/moving files from PDFImport 2006-08-31 Fixed a regression when selecting fields in cb2Bib panel 2006-08-30 RELEASE OF PREVIEW 0.6.91 2006-08-30 Fixed a regression in droped files encoding in PDFImport 2006-08-29 Added queries by DOI (Thanks to T. Geissmann) 2006-08-29 Updated netqinf.txt information file 2006-08-29 Fixed a regression in the network functionality 2006-08-29 Fixed a compilation issue on Mac OS (Thanks to M. Bongard) 2006-08-25 RELEASE OF PREVIEW 0.6.90 2006-08-25 Ported to Qt4 2006-05-15 Updated netqinf.txt for NAR 2006-04-24 RELEASE OF VERSION 0.6.1 2006-04-24 Updated netqinf.txt for PNAS 2006-04-24 Keep 'File' synchronized with 'CITEID' 2006-04-24 Concatenate multiple 'title' in regexps, as 'Title: Subtitle' (Thanks to McKay Euan) 2006-04-23 Added tooltip to 'File' with origen file name 2006-04-23 Cleaned and updated network related classes 2006-04-23 Schedule dropped or PDFImport file copying/moving until Bib item is saved 2006-04-23 PDFImport rewritten, fixed several bugs (Thanks to M. Wegmann) 2006-04-02 RELEASE OF VERSION 0.6.0 2006-04-02 Added highlight for 'author|issue|title|volume' in clipboard 2006-04-02 Added contributed regexp for PROLA (Thanks to Martint) 2006-04-02 Added unified, platform independent new line recognition 2006-04-02 Fixed missing '<<NewLine>>' on OSX (Thanks to McKay Euan) 2006-03-28 Fixed ScienceDirect regexp 2006-03-28 Updated Wiley InterScience Example 2006-03-22 Updated cb2Bib's icon 2006-03-22 Added JTCC journal 2006-03-18 Fixed 'Copy/Rename: Keep .djvu, .dvi, .ps, .ps.gz, .tex, .txt extensions' on Windows 2006-03-18 Fixed RC_FILE (Windows and OSX) 2006-02-21 RELEASE OF VERSION 0.5.3 2006-02-21 Added SISC journal, and added contributed_re.txt (Thanks to G. B. @ RWTH) 2006-02-20 Added 'Insert/Overwrite' flag to editor 2006-02-20 Added 'File Save As' functionality to editor 2006-02-20 Copy/Rename: Keep .djvu, .dvi, .ps, .ps.gz, .tex, .txt extensions 2006-02-20 Added preparser scripts isi2bib and ris2bib 2006-02-20 Added external preparser functionality 2006-01-23 RELEASE OF VERSION 0.5.2 2006-01-22 Fixed BibTeX parser for ending non-bracket cases (eg. 'year = 2000}') 2006-01-22 Added Title and ISBN automatic guess 2006-01-22 Fixed Abstract automatic guess 2006-01-21 Added custom syntax colors 2006-01-20 Fixed referencelist.cpp for icc/64 compiler 2006-01-15 Get default font color from the Window Manager 2005-12-12 RELEASE OF VERSION 0.5.1 2005-12-12 Added 'Set active LyX pipe' in BibTeX edit menu 2005-12-12 Added edit menu in BibTeX editor 2005-12-12 BibTeX parser considers non-bracket cases (eg. 'year = 2000,') 2005-12-11 Fixed syntax highlighter for commented lines 2005-11-17 Added http POST command 2005-11-16 Updated netqinf.txt for CR 2005-11-14 Updated netqinf.txt for ACS 2005-10-26 RELEASE OF VERSION 0.5.0 2005-10-08 Proper capitalization: FIRST MID LAST -> First Mid Last 2005-10-08 Added JSTOR regexp (Thanks to B. Goodrich) 2005-10-08 Added citeID customization (Thanks S. Oom for suggestions) 2005-10-07 Set default path /usr/local/bin/pdftotext on Mac OS X 2005-08-20 RELEASE OF VERSION 0.4.6 2005-08-20 Fixed: Set current file when 'cb2bib --bibedit fn.bib' 2005-08-20 Extended Unicode to LaTeX to all entries 2005-08-20 Added equivalent processing for author and editor strings 2005-08-20 Added 'Full Author and Editor Name' option 2005-08-20 (Thanks to J. Schelp and B. Goodrich for suggestions) 2005-08-12 'cb2bib --bibedit', show main maximized if no files are given 2005-08-12 RELEASE OF VERSION 0.4.5 2005-08-12 Fixed memory leak from c2bEditor 2005-08-11 Added web search also in Editor's Reference List 2005-08-11 Menu improvements 2005-08-11 Unicode <-> LaTeX for infinity symbol 2005-08-11 Fixed viewCb2Bib button behavior in BibTeX editor 2005-08-11 BibTeX editor button functionality: edit/set editor on top 2005-08-11 Allow for multiple BibTeX editors 2005-07-06 RELEASE OF VERSION 0.4.4 2005-07-06 Fixed bookmark and regexp editor: save before execute 2005-07-06 Fixed netqinf.txt for PubMed 2005-07-06 Fixed cb2Bib idle in multiple queries + debug file option 2005-07-06 Alternate Journal Name no longer stored in 'annote' field 2005-07-06 Added 'Journals to Full/Abbreviated Name' in editor 2005-07-06 'configure' adapted to knoppix 3.6 (Thanks to cognite) 2005-07-02 Removed 'install' checking in 'configure' script 2005-07-02 ClipboardPoll disabled as default for Mac OS X 2005-06-16 RELEASE OF VERSION 0.4.3 2005-06-15 Set Postprocess widget to modeless 2005-06-15 Added menu entries 2005-06-15 Added heuristic recognition 2005-06-01 Added line number indicator in editor 2005-06-01 Fixed translating '&' to LaTeX multiple times 2005-05-29 Do not reload current BibEditor if ref added to a different file 2005-05-29 Code rearrangement and cleaning: c2bBibParser 2005-05-11 RELEASE OF VERSION 0.4.2 2005-05-11 Added reference navigation in BibTeX editor 2005-05-09 Improved search capabilities in BibTeX editor 2005-05-09 Added LyX pipe citation procedure: 2005-05-09 adapted from R. Stephenson's Tellico 2005-05-09 Added Reference List in BibTeX editor 2005-05-06 Added desktop file 2005-05-04 Uppercase greeks, also in "PNAS-style" {}, (), or [] delimiters 2005-05-04 Added automatic conversion for "PNAS-style" {middle dot} 2005-04-23 RELEASE OF VERSION 0.4.1 2005-04-23 Added scripts bib2pdf and bib2end.bat 2005-04-23 Added Postprocessing of current BibTeX file 2005-04-23 (Thanks to J. Tan for suggestions) 2005-04-19 Added command line 'cb2bib [[--bibedit] filename.bib]' 2005-04-19 Added 'author' to 'Convert string to LaTeX' config 2005-04-19 Added 'Selection to Unicode' in BibTeX editor 2005-04-19 Added 'Selection to LaTeX' in BibTeX editor 2005-04-18 Fixed Clipboard change notifications 2005-04-18 (Thanks to L. Lunak for help and ClipboardPoll code) 2005-04-07 RELEASE OF VERSION 0.4.0 2005-04-06 Added customizable input preprocessing 2005-04-06 Rearrange main window buttons 2005-04-06 Added Editor Search capability 2005-04-06 Fix Modified Editor and Exit main window 2005-04-04 Initialize 'view BibTeX' Scroll Bar position 2005-04-04 Remember 'About' Scroll Bar position 2005-04-04 Added Contextual Help 2005-04-04 Added convenience BibTeX File editor 2005-03-17 RELEASE OF VERSION 0.3.6 2005-03-16 Added ~ 10 more Unicode <-> LaTeX translations 2005-03-16 Improved 'pages' postprocessing 2005-03-16 Consider inverted commas as BibTeX delimiter 2005-02-17 Remove start and end blank in BibTeX field string 2005-02-09 RELEASE OF VERSION 0.3.5 2005-02-09 Parse whole netqinf.txt if 'No article found' 2005-02-07 Remember Config page 2005-02-07 Rearrange About/View BibTeX buttons behavior 2005-01-21 RELEASE OF VERSION 0.3.4 2005-01-20 Add 'Make Network Query' button 2005-01-20 DOI automatic extraction 2005-01-19 'PubMed Search' import (J.Name. year month;vol(n):pp.) 2005-01-19 Add significative error messages for missing filenames 2005-01-19 RegExp/Bookmarks Editor arrangement 2005-01-19 Added convenience bookmarks 2005-01-18 Consider author suffixes in Medline extraction 2005-01-18 Consider Medline AU if FAU isn't available 2005-01-15 Include DOI in Medline extraction 2005-01-14 RELEASE OF VERSION 0.3.3 2005-01-14 Added 'PubMed - Medline Journal' recognition 2005-01-13 Introduced simple Journal-Volume-Page queries 2005-01-10 (Thanks S. Vega and probono for suggestions) 2005-01-08 Added last name prefix 'vande' 2005-01-07 Added complete ACS journal list 2005-01-04 Arrangement copy/move/open for local/network files 2004-12-29 RELEASE OF VERSION 0.3.2 2004-12-29 Previous add conflicted 'van der Wal, Jan and Lieb, Jely A.' 2004-12-28 RELEASE OF VERSION 0.3.1 2004-12-27 'Abcd, E., F. Ghij, ...' citation style (Thanks P. Magwene) 2004-12-27 Fix slow highlighting 2004-12-21 RELEASE OF VERSION 0.3.0 2004-12-20 Consider interlaced authors-affiliations, removed <<moreauthors>> 2004-12-20 Regexps deposition note (Thanks J. Vertrees) 2004-12-20 Enable/Disable 'Add BibTeX to file' button 2004-12-20 Added convenience RegExp File editor 2004-12-20 Render disabled icons in grayscale 2004-12-14 Valgrind memory leak debugging 2004-12-08 RELEASE OF VERSION 0.2.8 2004-12-08 Fix a wrong enable/disable behavior in PDFImport button 2004-12-07 Convert to lower case titles completely uppercase 2004-12-07 Fix: PDF renaming consistently managed by cb2Bib instead of kfmclient 2004-12-07 Added error description for file related warnings 2004-12-01 Added 'IOP Electronic Journals' import 2004-10-22 Add abstract|introduction|keywords|key words highlight 2004-10-19 RELEASE OF VERSION 0.2.7 2004-10-19 PDFImport via pdftotext (Thanks F. C. Coelho for suggestions) 2004-09-19 RELEASE OF VERSION 0.2.6 2004-09-19 TeX <-> Unicode translations for Greek letters 2004-09-19 Choice for title Unicode -> LaTeX conversion 2004-09-18 Added some few journal abbreviations 2004-09-18 Fix wrong recognition 'First S.P.'(Thanks S. Oom) 2004-09-18 Fix 'Last, DE' - conflicting First and initials with suffixes 2004-09-18 Added author prefix 'da' and suffix 'Jr' 2004-09-08 RELEASE OF VERSION 0.2.5 2004-09-08 Choice for short/long journal names 2004-09-08 'month' postprocessing (Thanks F. Hedman) 2004-09-08 Added 'Alt D' to delete temporary BibTeX output (Thanks S. Oom) 2004-09-07 Added 'Alt R' accelerator to start automatic recognition 2004-09-07 Proper recognition for 'First I Second, ' 2004-09-02 RELEASE OF VERSION 0.2.4 2004-09-02 Previous fix conflicted with 'First I. Second, ' 2004-08-31 Fix message pointing to wrong file (Thanks G. Palfinger) 2004-08-30 RELEASE OF VERSION 0.2.3 2004-08-30 Fix wrong recognition 'First SP, Second WE, '(Thanks S. Oom) 2004-08-30 RELEASE OF VERSION 0.2.2 2004-08-29 Experimental: kfmclient to retrieve pdf files 2004-08-29 Thanks F. Hedman: 2004-08-28 Improved automatic URL recognition 2004-08-28 Added BibTeX fields 'eprint' and 'doi' 2004-08-22 RELEASE OF VERSION 0.2.1 2004-08-22 Workaround for acrobat, mozilla, qt 3.3.3 issues 2004-08-17 Fixed 'file' - 'eprint' duplication in BibTeX output 2004-08-13 Set 'article' as default type 2004-07-30 RELEASE OF VERSION 0.2.0 2004-07-30 Improved visual input/output presentation 2004-07-29 RegExp format changes: Added extra line for reference types 2004-07-29 RegExp format changes: 'authors' -> 'author' 2004-07-29 Extend reference fields list 2004-07-28 Input reference type list 2004-07-12 RELEASE OF VERSION 0.1.4 2004-07-12 Fix "F.-S. Last" author name processing 2004-07-12 Fix to compile against Qt 3.1.0 or later 2004-07-11 RELEASE OF VERSION 0.1.3 2004-07-09 Improved 'ScienceDirect' import 2004-07-09 Improved TeX <-> Unicode translations 2004-07-09 Added 'Nature from Fisrt Paragraph' import 2004-07-08 Added 'DBLP article' import (thanks to P. Woelfel) 2004-07-08 Consider also '&' as a separator in author automatic recognition 2004-07-08 Fixing 'empty-field {}' error in BibTeX recognition 2004-07-07 Improved MakeCiteID for composite names 2004-07-07 Consider composing sufix 'III' 2004-07-07 Added LastName prefix 'dos' and 'del' 2004-07-07 Corrected JCICS extended journal name 2004-07-05 RELEASE OF VERSION 0.1.2 2004-07-05 Added 'ISI Web of Knowledge Table of Contents Alert' import. 2004-07-05 Fixing: 'Last, FST' -> 'F. S. T. Last' (but not 'LAST, FIRST') 2004-07-05 Proper last name capitalization ('LAST-NAME' -> 'Last-Name') 2004-07-04 Escaping math characters '∂' and '−' 2004-07-03 RELEASE OF VERSION 0.1.1 2004-07-01 Escaping accented characters (MakeCiteID and authors and title in MakeBib) 2004-06-29 RELEASE OF VERSION 0.1.0 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/PaxHeaders.3194/src��������������������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�013035� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.879255936 30 atime=1498583183.003254785 30 ctime=1498583182.879255936 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/�����������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�13124510216�014504� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bRLWebSearchSettings.ui������������������������������������������0000644�0000000�0000000�00000000073�13124510115�017664� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.003254785 29 ctime=1498583182.64725809 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bRLWebSearchSettings.ui����������������������������������������������������������0000644�0001750�0000144�00000007600�13124510115�021255� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<ui version="4.0" > <author>Pere Constans</author> <class>c2bRLWebSearchSettings</class> <widget class="QDialog" name="c2bRLWebSearchSettings" > <property name="geometry" > <rect> <x>0</x> <y>0</y> <width>466</width> <height>152</height> </rect> </property> <property name="windowTitle" > <string>Web Search Settings - cb2Bib</string> </property> <property name="sizeGripEnabled" > <bool>false</bool> </property> <layout class="QGridLayout" > <property name="margin" > <number>6</number> </property> <property name="spacing" > <number>3</number> </property> <item row="3" column="0" colspan="3" > <widget class="QCheckBox" name="addQuotes" > <property name="text" > <string>&Add quotes to query</string> </property> </widget> </item> <item row="4" column="1" > <spacer> <property name="orientation" > <enum>Qt::Vertical</enum> </property> <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>20</height> </size> </property> </spacer> </item> <item row="5" column="0" colspan="3" > <widget class="Line" name="line" > <property name="orientation" > <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="6" column="2" > <widget class="QDialogButtonBox" name="buttonBox" > <property name="layoutDirection" > <enum>Qt::LeftToRight</enum> </property> <property name="autoFillBackground" > <bool>true</bool> </property> <property name="orientation" > <enum>Qt::Horizontal</enum> </property> <property name="standardButtons" > <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> </property> <property name="centerButtons" > <bool>false</bool> </property> </widget> </item> <item row="6" column="0" > <spacer> <property name="orientation" > <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0" > <size> <width>121</width> <height>20</height> </size> </property> </spacer> </item> <item row="0" column="0" colspan="3" > <widget class="QLabel" name="label" > <property name="text" > <string>Search Engine:</string> </property> </widget> </item> <item row="1" column="0" colspan="3" > <widget class="c2bComboBox" name="searchEngine" > <property name="editable" > <bool>true</bool> </property> <property name="insertPolicy" > <enum>QComboBox::NoInsert</enum> </property> </widget> </item> <item row="2" column="0" colspan="3" > <widget class="Line" name="line_2" > <property name="orientation" > <enum>Qt::Horizontal</enum> </property> </widget> </item> </layout> </widget> <customwidgets> <customwidget> <class>c2bComboBox</class> <extends>QComboBox</extends> <header>c2bComboBox.h</header> </customwidget> </customwidgets> <tabstops> <tabstop>addQuotes</tabstop> <tabstop>buttonBox</tabstop> </tabstops> <resources/> <connections> <connection> <sender>buttonBox</sender> <signal>accepted()</signal> <receiver>c2bRLWebSearchSettings</receiver> <slot>accept()</slot> <hints> <hint type="sourcelabel" > <x>455</x> <y>140</y> </hint> <hint type="destinationlabel" > <x>157</x> <y>161</y> </hint> </hints> </connection> <connection> <sender>buttonBox</sender> <signal>rejected()</signal> <receiver>c2bRLWebSearchSettings</receiver> <slot>reject()</slot> <hints> <hint type="sourcelabel" > <x>455</x> <y>146</y> </hint> <hint type="destinationlabel" > <x>286</x> <y>161</y> </hint> </hints> </connection> </connections> </ui> ��������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bNetworkQuery.cpp������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016664� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.763257013 30 atime=1498583183.003254785 30 ctime=1498583182.767256976 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bNetworkQuery.cpp����������������������������������������������������������������0000644�0001750�0000144�00000003204�13124510216�020255� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bNetworkQuery.h" #include "c2b.h" #include <QMessageBox> c2bNetworkQuery::c2bNetworkQuery(bibParser* bp, QObject* parento) : networkQuery(bp, parento) {} c2bNetworkQuery::c2bNetworkQuery(bibParser* bp, network* net, QObject* parento) : networkQuery(bp, net, parento) {} c2bNetworkQuery::~c2bNetworkQuery() {} bool c2bNetworkQuery::checkQueryFile(const QString& fn) const { if (fn.isEmpty()) { QMessageBox::information(c2b::mainWidget(), tr("Information - cb2Bib"), tr("No Network Query file has been specified.\n\n" "Note: Network Query files are specified through the cb2Bib Configure dialog."), QMessageBox::Ok); return false; } QFile file(fn); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { QMessageBox::warning(c2b::mainWidget(), tr("Warning - cb2Bib"), tr("Unable to open the Network Query file %1 for reading.\nError: '%2'.\n\n" "Note: Network Query files are specified through the cb2Bib Configure dialog.") .arg(fn).arg(file.errorString()), QMessageBox::Ok); return false; } return true; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bComboBox.h������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�015362� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.827256419 30 atime=1498583183.003254785 30 ctime=1498583182.831256381 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bComboBox.h����������������������������������������������������������������������0000644�0001750�0000144�00000001173�13124510216�016756� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCOMBOBOX_H #define C2BCOMBOBOX_H #include <QComboBox> class c2bComboBox : public QComboBox { Q_OBJECT public: explicit c2bComboBox(QWidget* parentw = 0); ~c2bComboBox(); protected: virtual void contextMenuEvent(QContextMenuEvent* e); }; #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bSettings.cpp����������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016005� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.783256826 30 atime=1498583183.003254785 30 ctime=1498583182.783256826 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bSettings.cpp��������������������������������������������������������������������0000644�0001750�0000144�00000027474�13124510216�017415� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bSettings.h" #include "c2bUtils.h" #include <QApplication> #include <QClipboard> #include <QMessageBox> #include <QProgressBar> #include <QShortcut> #include <QTimer> /** Global settings for the cb2Bib */ c2bSettings::c2bSettings(const QString& organization, const QString& application, QObject* parento) : settings(organization, application, parento) {} c2bSettings::c2bSettings(const QString& fn, QObject* parento) : settings(fn, parento) {} c2bSettings::~c2bSettings() { delete _progress_bar; } c2bSettings* c2bSettings::initSettings() { c2bSettings* s; if (c2bSettings::isConfiguredMode()) s = new c2bSettings(c2bSettings::configuredFilename()); else s = new c2bSettings(qApp->organizationName(), qApp->applicationName()); s->init(); return s; } void c2bSettings::init() { settings::init(); _progress_bar = 0; if (cl_console_mode) return; setDefaults(); if (cl_import) // Process cl_import_filename and update cl_cb2bib_import_mode processReferenceFile(); if (cl_cb2bib_mode && !cl_cb2bib_import_mode) { setValue("cb2Bib/isRunning", true); sync(); connect(qApp, SIGNAL(lastWindowClosed()), this, SLOT(guiExits())); } } void c2bSettings::notify() { update(); emit newSettings(); } void c2bSettings::update() { // Values for very general GUI settings c2bMonoFont = value("cb2Bib/MonoFont").value<QFont>(); colors.loadColors(this); } void c2bSettings::setDefaults() { QHash<QString, QVariant> defaults; defaults["cb2Bib/MonoFont"] = QFont("Courier"); const QStringList keys(defaults.keys()); for (int i = 0; i < keys.count(); ++i) setValue(keys.at(i), value(keys.at(i), defaults.value(keys.at(i)))); // Shortcuts _default_keysequences.clear(); _default_keysequences["Shortcuts/cb2Bib/Button About and Bookmarks"] = QKeySequence(Qt::CTRL + Qt::Key_Tab); _default_keysequences["Shortcuts/cb2Bib/Button Configure"] = QKeySequence(); _default_keysequences["Shortcuts/cb2Bib/Button Network Query"] = QKeySequence(Qt::ALT + Qt::Key_N); _default_keysequences["Shortcuts/cb2Bib/Button Start PDFImport"] = QKeySequence(); _default_keysequences["Shortcuts/cb2Bib/Button Toggle Connection"] = QKeySequence(); _default_keysequences["Shortcuts/cb2Bib/Button View BibTeX"] = QKeySequence(Qt::ALT + Qt::Key_V); _default_keysequences["Shortcuts/cb2Bib/Check Repeated"] = QKeySequence(Qt::ALT + Qt::Key_X); _default_keysequences["Shortcuts/cb2Bib/Clear All Fields"] = QKeySequence(); _default_keysequences["Shortcuts/cb2Bib/Delete Temporary BibTeX File"] = QKeySequence(Qt::ALT + Qt::Key_D); _default_keysequences["Shortcuts/cb2Bib/Edit Bookmarks"] = QKeySequence(Qt::ALT + Qt::Key_B); _default_keysequences["Shortcuts/cb2Bib/Edit Journal Abbreviations"] = QKeySequence(Qt::ALT + Qt::Key_J); _default_keysequences["Shortcuts/cb2Bib/Edit Regular Expressions"] = QKeySequence(Qt::ALT + Qt::Key_E); _default_keysequences["Shortcuts/cb2Bib/Guess Bibliographic Fields"] = QKeySequence(Qt::ALT + Qt::Key_G); _default_keysequences["Shortcuts/cb2Bib/Insert Regular Expression"] = QKeySequence(Qt::ALT + Qt::Key_I); _default_keysequences["Shortcuts/cb2Bib/Open Document"] = QKeySequence(Qt::ALT + Qt::Key_O); _default_keysequences["Shortcuts/cb2Bib/Postprocess BibTeX"] = QKeySequence(Qt::ALT + Qt::Key_P); _default_keysequences["Shortcuts/cb2Bib/Preparse Clipboard"] = QKeySequence(Qt::ALT + Qt::Key_C); _default_keysequences["Shortcuts/cb2Bib/Restart Recognition"] = QKeySequence(Qt::ALT + Qt::Key_R); _default_keysequences["Shortcuts/cb2Bib/Select BibTeX File"] = QKeySequence(Qt::ALT + Qt::Key_S); _default_keysequences["Shortcuts/cb2Bib/Select Document File"] = QKeySequence(Qt::ALT + Qt::Key_F); _default_keysequences["Shortcuts/cb2Bib/Annote Editor"] = QKeySequence(Qt::ALT + Qt::Key_A); _default_keysequences["Shortcuts/cb2Bib/Toggle Reference Tabs"] = QKeySequence(Qt::Key_F4); _default_keysequences["Shortcuts/cb2Bib/View Tagged Clipboard Data"] = QKeySequence(); _default_keysequences["Shortcuts/cb2Bib/Write Metadata to Document"] = QKeySequence(Qt::ALT + Qt::Key_W); _default_keysequences["Shortcuts/Editor/Browse Reference by DOI"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Cite Selected Entries"] = QKeySequence(Qt::ALT + Qt::Key_C); _default_keysequences["Shortcuts/Editor/Clear Entry Selection"] = QKeySequence(Qt::Key_Delete); _default_keysequences["Shortcuts/Editor/Export Entries"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Local Search for Selected Text"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Open Document File"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Open Document URL"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Paste Current BibTeX"] = QKeySequence(Qt::SHIFT + Qt::Key_Insert); _default_keysequences["Shortcuts/Editor/Restart Network Query"] = QKeySequence(Qt::ALT + Qt::Key_N); _default_keysequences["Shortcuts/Editor/Restart Recognition"] = QKeySequence(Qt::ALT + Qt::Key_R); _default_keysequences["Shortcuts/Editor/Save and Postprocess"] = QKeySequence(Qt::ALT + Qt::Key_P); _default_keysequences["Shortcuts/Editor/Selection to LaTeX"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Selection to Unicode"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Set Journals to Abbreviated Name"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Set Journals to Full Name"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Set LyX Pipe"] = QKeySequence(Qt::ALT + Qt::Key_L); _default_keysequences["Shortcuts/Editor/Toggle Editing and Browsing"] = QKeySequence(Qt::CTRL + Qt::Key_Tab); _default_keysequences["Shortcuts/Editor/Toggle Word Wrapping"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Update Documents Metadata"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/View Note in External Browser"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Web Search Settings"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Web Search by Author"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Web Search by Title"] = QKeySequence(); _default_keysequences["Shortcuts/Editor/Web Search for Selected Text"] = QKeySequence(); const QStringList sc(_default_keysequences.keys()); for (int i = 0; i < sc.count(); ++i) setValue(sc.at(i), value(sc.at(i), _default_keysequences.value(sc.at(i)))); update(); } void c2bSettings::setKeysequences(const QHash<QString, QKeySequence>& keysequences) { if (keysequences.size() == 0) return; QHash<QString, QKeySequence>::const_iterator it(keysequences.constBegin()); while (it != keysequences.constEnd()) { setValue(it.key(), it.value()); ++it; } // Set keysequences to created objects const QString sctag("Shortcuts/"); foreach(QWidget * w, QApplication::topLevelWidgets()) { const QList<QAction*> alist(w->findChildren<QAction*>()); for (int i = 0; i < alist.count(); ++i) { const QString fullname(alist.at(i)->data().toString()); if (fullname.startsWith(sctag)) alist.at(i)->setShortcut(keysequence(fullname)); } const QList<QShortcut*> sclist(w->findChildren<QShortcut*>()); for (int i = 0; i < sclist.count(); ++i) { const QString fullname(sclist.at(i)->objectName()); if (fullname.startsWith(sctag)) sclist.at(i)->setKey(keysequence(fullname)); } } } void c2bSettings::setKeysequence(const QString& path, QAction* action) { if (!action) return; const QString fullname(path + action->text()); if (_default_keysequences.contains(fullname)) { action->setShortcut(keysequence(fullname)); action->setData(fullname); } else c2bUtils::warn(tr("Action '%1' is not registered in default keysequence list").arg(fullname)); } void c2bSettings::setKeysequence(const QString& fullname, QShortcut* shortcut) { if (!shortcut) return; if (_default_keysequences.contains(fullname)) { shortcut->setObjectName(fullname); shortcut->setKey(keysequence(fullname)); } else c2bUtils::warn(tr("Shortcut '%1' is not registered in default keysequence list").arg(fullname)); } #ifdef Q_OS_WIN #include <QFileDialog> QString c2bSettings::decodeFilename(const QString& fn) const { // This function is meant for fn given by the command shell and that will end up being visible const QString dfn(settings::decodeFilename(fn)); QFileDialog fd(0, QString(), dfn); const QStringList fns(fd.selectedFiles()); if (fns.count() == 0) return dfn; const QString wdfn(fns.first()); if (QFileInfo(wdfn).exists()) return QDir::toNativeSeparators(wdfn); else return dfn; } #endif /*************************************************************************** * Downloaded reference extraction ***************************************************************************/ void c2bSettings::processReferenceFile() { // The "Download reference to reference manager" functionality to cb2Bib is implemented as follows: // - Put downloaded reference into the clipboard // - If no cb2Bib instance is running, launch cb2Bib GUI, otherwise exit // This is simple, enough, and consistent with a 'clipboard to BibTeX' program. // The 'single instance' implementation is naive, but it is sufficient for cb2Bib, and does not prevent // from having multiple cb2Bib instances in its usual deployment, if so desired. // Aware of QClipboard X11 note: "You should not store or retrieve the clipboard contents in response // to timer or non-user-input events". Functions processReferenceFile() and processprocessReferenceFileEvent() // do not follow it. It seems to work smooth, for all platforms, and, overall, it is a feasible solution // in this particular case. QFile file(cl_import_filename); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { cl_cb2bib_import_mode = true; QMessageBox::warning(0, tr("Warning - cb2Bib"), tr("Unable to open the reference file %1 for reading.\nError: '%2'."). arg(cl_import_filename).arg(file.errorString()), QMessageBox::Ok); QTimer::singleShot(500, qApp, SLOT(quit())); } else { if (value("cb2Bib/isRunning", false).toBool()) { cl_cb2bib_import_mode = true; if (!_progress_bar) _progress_bar = new QProgressBar; _progress_bar->setRange(0, 100); _progress_bar->setWindowTitle(QObject::tr("Importing...")); _progress_bar->setWindowIcon(QIcon(QString::fromUtf8(":/icons/icons/cb2bib.png"))); _progress_bar->show(); _progress_bar->setValue(50); } QTimer::singleShot(500, this, SLOT(processReferenceFileEvent())); } } void c2bSettings::processReferenceFileEvent() { const QString reference(c2bUtils::fileToString(cl_import_filename).trimmed()); QClipboard* cb = qApp->clipboard(); cb->setText(reference, QClipboard::Clipboard); if (cl_cb2bib_import_mode) { if (_progress_bar) _progress_bar->setValue(100); QTimer::singleShot(500, qApp, SLOT(quit())); } } void c2bSettings::guiExits() { setValue("cb2Bib/isRunning", false); sync(); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bREHighlighter.h�������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016337� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.855256159 30 atime=1498583183.003254785 30 ctime=1498583182.855256159 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bREHighlighter.h�����������������������������������������������������������������0000644�0001750�0000144�00000001577�13124510216�017743� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BREHIGHLIGHTER_H #define C2BREHIGHLIGHTER_H #include <QSyntaxHighlighter> /** RegExp SyntaxHighLighter @author Pere Constans */ class c2bColors; class c2bREHighlighter : public QSyntaxHighlighter { public: explicit c2bREHighlighter(QTextDocument* doc); ~c2bREHighlighter(); protected: virtual void highlightBlock(const QString& text); private: QColor text_color; QRegExp rx0; QRegExp rx1; QRegExp rx2; QRegExp rx3; QRegExp rx4; QRegExp rx5; c2bColors* c; }; #endif ���������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bHighlighter.cpp�������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016443� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.759257049 30 atime=1498583183.003254785 30 ctime=1498583182.759257049 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bHighlighter.cpp�����������������������������������������������������������������0000644�0001750�0000144�00000011627�13124510216�020044� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bHighlighter.h" #include "c2bSettings.h" #include <QPalette> #include <QTextDocument> c2bHighlighter::c2bHighlighter(QTextDocument* doc) : QSyntaxHighlighter(doc) { QPalette p; text_color = p.text().color(); c2bSettings* settings(c2bSettingsP); c = &settings->colors; connect(settings, SIGNAL(newSettings()), this, SLOT(rehighlight())); rx0 = QRegExp("\\d+"); rx0.setMinimal(true); rx1 = QRegExp("[^\\w\\d]+"); rx1.setMinimal(true); rx2 = QRegExp("<(?:NewLine|Tab)\\d+>"); rx2.setMinimal(true); rx3 = QRegExp("\\b(?:19|20)\\d\\d\\b"); rx3.setMinimal(true); rx4 = QRegExp("\\b(?:abstract|authors{0,1}|introduction|issue|keywords|key words|title|volume|vol)\\b", Qt::CaseInsensitive); rx4.setMinimal(true); rx5 = QRegExp("<<(?:abstract|address|annote|author|booktitle|chapter|" "doi|edition|editor|eprint|file|institution|isbn|issn|journal|" "keywords|month|note|number|organization|pages|publisher|" "school|series|title|url|volume|year)>>"); rx5.setMinimal(true); rx6 = QRegExp("<AnyPattern>"); rx6.setMinimal(true); rx_extracted_starts = QRegExp("\\[\\["); rx_extracted_ends = QRegExp("\\]\\]"); rx_metadata_starts = QRegExp("\\[Bibliographic Metadata"); rx_metadata_ends = QRegExp("/Bibliographic Metadata\\]"); } c2bHighlighter::~c2bHighlighter() {} void c2bHighlighter::highlightBlock(const QString& text) { const int len(text.length()); setFormat(0, len - 1, text_color); int pos(0); while (pos >= 0) { pos = rx0.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx0.matchedLength(), c->cb2bib_digit_color); pos += rx0.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx1.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx1.matchedLength(), c->cb2bib_unrelevant_color); pos += rx1.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx2.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx2.matchedLength(), c->cb2bib_unrelevant_color); pos += rx2.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx3.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx3.matchedLength(), c->cb2bib_relevant_color); pos += rx3.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx4.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx4.matchedLength(), c->cb2bib_highly_relevant_color); pos += rx4.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx5.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx5.matchedLength(), c->cb2bib_tag_color); pos += rx5.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx6.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx6.matchedLength(), c->cb2bib_unrelevant_color); pos += rx6.matchedLength(); } } setCurrentBlockState(0); int startIndexMD(0); if (previousBlockState() != 1) startIndexMD = rx_metadata_starts.indexIn(text); while (startIndexMD >= 0) { const int endIndex(rx_metadata_ends.indexIn(text, startIndexMD)); int extractedLength; if (endIndex == -1) { setCurrentBlockState(1); extractedLength = text.length() - startIndexMD; } else extractedLength = endIndex - startIndexMD + rx_metadata_ends.matchedLength(); setFormat(startIndexMD, extractedLength, c->cb2bib_metadata_color); startIndexMD = rx_metadata_starts.indexIn(text, startIndexMD + extractedLength); } int startIndexEx(0); if (previousBlockState() != 2) startIndexEx = rx_extracted_starts.indexIn(text); while (startIndexEx >= 0) { const int endIndex(rx_extracted_ends.indexIn(text, startIndexEx)); int extractedLength; if (endIndex == -1) { setCurrentBlockState(2); extractedLength = text.length() - startIndexEx; } else extractedLength = endIndex - startIndexEx + rx_extracted_ends.matchedLength(); setFormat(startIndexEx, extractedLength, c->cb2bib_unrelevant_color); startIndexEx = rx_extracted_starts.indexIn(text, startIndexEx + extractedLength); } } ���������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bRLWebSearchSettings.h�������������������������������������������0000644�0000000�0000000�00000000132�13124510216�017474� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.855256159 30 atime=1498583183.003254785 30 ctime=1498583182.859256122 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bRLWebSearchSettings.h�����������������������������������������������������������0000644�0001750�0000144�00000001343�13124510216�021067� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BRLWEBSEARCHSETTINGS_H #define C2BRLWEBSEARCHSETTINGS_H #include "ui_c2bRLWebSearchSettings.h" #include <QDialog> class c2bRLWebSearchSettings : public QDialog { Q_OBJECT public: explicit c2bRLWebSearchSettings(QWidget* parentw = 0); ~c2bRLWebSearchSettings(); private: Ui::c2bRLWebSearchSettings ui; protected slots: void accept(); }; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bCollectionIndex.h�����������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016735� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.827256419 30 atime=1498583183.003254785 30 ctime=1498583182.827256419 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bCollectionIndex.h���������������������������������������������������������������0000644�0001750�0000144�00000001706�13124510216�020333� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCOLLECTIONINDEX_H #define C2BCOLLECTIONINDEX_H #include "ui_c2bLogWidget.h" #include <QDialog> #include <QProcess> class c2bCollectionIndex : public QDialog { Q_OBJECT public: explicit c2bCollectionIndex(QWidget* parentw = 0); ~c2bCollectionIndex(); void index(); private slots: void aborted(); void addToLog(); void help(); void indexingEnded(int exit_code, QProcess::ExitStatus exit_status); void reject(); private: QProcess* _indexerP; QPushButton* _buttonAbort; Ui::c2bLogWidget ui; void closeEvent(QCloseEvent* qevent); }; #endif ����������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/cb2Bib.h�����������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�014346� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.875255973 30 atime=1498583183.003254785 30 ctime=1498583182.875255973 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/cb2Bib.h���������������������������������������������������������������������������0000644�0001750�0000144�00000007740�13124510216�015750� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef CB2BIB_H #define CB2BIB_H #include "ui_cb2Bib.h" #include <QHash> #include <QMainWindow> #include <QPointer> class bibSearcher; class c2bBibMenu; class c2bBibParser; class c2bCiterWidget; class c2bClipEdit; class c2bEditor; class c2bNetworkQuery; class c2bPdfImport; class c2bSearchInFiles; class c2bSettings; class c2bTextBrowser; class cb2Bib : public QMainWindow { Q_OBJECT public: explicit cb2Bib(QWidget* parentw = 0); ~cb2Bib(); public slots: void show(); signals: void addedBibToFile(const QString&); void endedProcessing(bool status); private: QHash<QString, c2bEditor*> _openDocuments; QPointer<c2bPdfImport> _pdfImportP; QPointer<c2bSearchInFiles> _searchInFilesP; QString _dropped_document_file; QString _raw_input_data; QString _target_document_file; QString buttonStatusTip(const QString& ms, const QKeySequence& ks) const; Ui::cb2Bib ui; bool _connected; bool _is_check_repeated_done; bool _modified; bool _taggedViewMode; bool isReferenceRepeated(); c2bBibMenu* _bib_menu; c2bBibParser* _bpP; c2bCiterWidget* _citerP; c2bClipEdit* BibBrowser; c2bClipEdit* ClipEdit; c2bNetworkQuery* _netQP; c2bSettings* _settingsP; c2bTextBrowser* AboutBrowser; void annoteEditor(const QString& annotefile); void c2bParse(const QString& text); void c2bPreparse(const QString& text); void closeEvent(QCloseEvent* qevent); void dragEnterEvent(QDragEnterEvent* qevent); void dropEvent(QDropEvent* qevent); void fileDroppedByUser(const QString& fn); void initAsBibTeXEditor(); void processingEnded(); void setBibMenu(); void setWidgetMapping(); void updateBibfile(const QString& fn); void updateViewButtons(); private slots: void abbreviationsEditor(); void addAuthors(); void addEditors(); void addMetadata(); void addToFile(bool ready); void anyPattern(); void bibEditor(const QString& bibtexfile, bibSearcher* searcher = 0); void bibModified(bool modified); void bookmarksEditor(); void c2bInit(); void checkRepeated(); void dataChanged(const QString& str); void deleteTmpBib(); void doSearchInFiles(const QString& string = QString(), const QString& fn = QString()); void fileDropped(const QString& fn); void forceDataChange(const QString& str); void guessFields(); void insertRegExp(); void linkClicked(const QUrl& ln); void loadSettings(); void makeNetQuery(); void netQueryEnded(bool succeeded, const QString& targetPDF, const QString& targetBib); void on_AddBibB_clicked(); void on_BibTeXDir_clicked(); void on_ConfigureB_clicked(); void on_ConnectB_clicked(); void on_EditBibTeXB_clicked(); void on_ExitB_clicked(); void on_MakeNetworkQueryB_clicked(); void on_PdfImportB_clicked(); void on_SearchInFilesB_clicked(); void on_ViewAboutB_clicked(); void on_ViewBibB_clicked(); void openAnnote(); void openFileDocument(); void postprocessBibTeX(); void preparseClipboard(); void readField(const QPoint& position); void regExpsEditor(); void restartEngine(); void savePattern(const QString& rx, const QString& rxname); void selectFile(); void setDocumentFilename(); void setTaggedClipEditMode(bool tagged); void setWindowTitle(const QString& title = QString()); void showLink(const QString& ln); void showMessage(const QString& ms); void toggleReferenceTabs(); void updateCheckRepeatedAction(); void updateOpenDocuments(QObject* obj); void updateOpenDocuments(const QString& old_name, const QString& new_name); }; #endif ��������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bBibPreparserLog.cpp���������������������������������������������0000644�0000000�0000000�00000000132�13124510216�017227� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.727257347 30 atime=1498583183.003254785 30 ctime=1498583182.731257309 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bBibPreparserLog.cpp�������������������������������������������������������������0000644�0001750�0000144�00000003672�13124510216�020631� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bBibPreparserLog.h" #include "c2b.h" #include "c2bSettings.h" #include "c2bUtils.h" #include <QCheckBox> #include <QPushButton> c2bBibPreparserLog::c2bBibPreparserLog(QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowTitle(tr("Clipboard Preparsing Log - cb2Bib")); PreparserShowLog = new QCheckBox(); PreparserShowLog->setObjectName(QString::fromUtf8("PreparserShowLog")); PreparserShowLog->setLayoutDirection(Qt::RightToLeft); PreparserShowLog->setText(QApplication::translate("c2bBibPreparserLog", "Do not show log", 0)); ui.buttonBox->addButton(PreparserShowLog, QDialogButtonBox::ActionRole); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); connect(this, SIGNAL(finished(int)), this, SLOT(close())); } c2bBibPreparserLog::~c2bBibPreparserLog() {} void c2bBibPreparserLog::append(const QString& ms) { ui.Log->appendPlainText(ms); } void c2bBibPreparserLog::show() { resize(c2bSettingsP->value("c2bLogWidget/size", size()).toSize()); ui.buttonBox->button(QDialogButtonBox::Close)->setFocus(); QDialog::show(); } void c2bBibPreparserLog::closeEvent(QCloseEvent* qevent) { ui.Log->clear(); if (PreparserShowLog->isChecked()) c2bSettingsP->setValue("cb2Bib/PreparserShowLog", false); PreparserShowLog->setChecked(false); c2bSettingsP->setValue("c2bLogWidget/size", size()); qevent->accept(); } void c2bBibPreparserLog::help() { c2bUtils::displayHelp("http://www.molspaces.com/d_cb2bib-overview.php#keyboard"); } ����������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2b.h��������������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�013731� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.803256641 30 atime=1498583183.003254785 30 ctime=1498583182.803256641 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b.h������������������������������������������������������������������������������0000644�0001750�0000144�00000005625�13124510216�015333� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2B_H #define C2B_H #include "c2bBibParser.h" #include "c2bNetworkQueryInfo.h" #include <metadataParser.h> #include <network.h> #include <QObject> class c2bClipboard; class QProgressDialog; class QWidget; class c2b : public QObject { Q_OBJECT public: c2b(QWidget* main, QObject* parento = 0); ~c2b(); // Actions inline static const QString documentMetadata(const QString& fn) { return metaParser()->metadata(fn); } inline static const QString encodeLink(const QString& ln) { return netqinf()->encodeLink(ln); } inline static void showMessage(const QString& message) { instance()->emitMessage(message); } inline static void doSearchInFiles(const QString& string, const QString& fn) { instance()->emitSearchInFiles(string, fn); } // Pointers inline static c2b* instance() { Q_ASSERT_X(_c2b_single_instance, "c2b", "cb2Bib resources were not instantiated"); return _c2b_single_instance; } inline static QWidget* mainWidget() { return instance()->_c2b_main; } inline static c2bClipboard* clipboard() { return instance()->_c2b_clipboard; } inline static network* net() { return instance()->_c2b_network; } inline static c2bNetworkQueryInfo* netqinf() { return instance()->_c2b_netqinf; } inline static c2bBibParser* bibParser() { return instance()->_c2b_bibparser; } inline static metadataParser* metaParser() { return instance()->_c2b_metadataparser; } public slots: static void configure(int index = -1); void exitRequested(); signals: void searchInFiles(const QString& string, const QString& fn); void statusMessage(const QString& message); private: QProgressDialog* _download_progress; QWidget* _c2b_main; c2bBibParser* _c2b_bibparser; c2bClipboard* _c2b_clipboard; c2bNetworkQueryInfo* _c2b_netqinf; metadataParser* _c2b_metadataparser; network* _c2b_network; static c2b* _c2b_single_instance; inline void emitMessage(const QString& message) { emit statusMessage(message); } inline void emitSearchInFiles(const QString& string, const QString& fn) { emit searchInFiles(string, fn); } private slots: void proxyAuthenticationRequired(const QNetworkProxy& proxy, QAuthenticator* auth); void showMessage(const QString& title, const QString& ms); void updateDownloadProgress(qint64 bytesReceived, qint64 bytesTotal); }; #endif �����������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bReferenceList.ui������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�016574� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.003254785 29 ctime=1498583182.64725809 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bReferenceList.ui����������������������������������������������������������������0000644�0001750�0000144�00000010725�13124510115�020167� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <author>Pere Constans</author> <class>c2bReferenceList</class> <widget class="QWidget" name="c2bReferenceList"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>738</width> <height>153</height> </rect> </property> <property name="sizePolicy"> <sizepolicy hsizetype="Ignored" vsizetype="Preferred"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="windowTitle"> <string>References</string> </property> <layout class="QGridLayout"> <property name="margin"> <number>0</number> </property> <property name="spacing"> <number>2</number> </property> <item row="2" column="2"> <widget class="QToolButton" name="clearB"> <property name="toolTip"> <string/> </property> <property name="statusTip"> <string>Clear filter</string> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/clear_left.png</normaloff>:/icons/icons/clear_left.png</iconset> </property> </widget> </item> <item row="2" column="0"> <widget class="QToolButton" name="filterB"> <property name="statusTip"> <string>Filter Author and Title</string> </property> <property name="text"> <string>...</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/filter.png</normaloff>:/icons/icons/filter.png</iconset> </property> <property name="popupMode"> <enum>QToolButton::InstantPopup</enum> </property> </widget> </item> <item row="1" column="0" colspan="3"> <widget class="Line" name="line"> <property name="frameShape"> <enum>QFrame::HLine</enum> </property> <property name="frameShadow"> <enum>QFrame::Sunken</enum> </property> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="0" column="0" colspan="3"> <widget class="QTreeWidget" name="listView"> <property name="mouseTracking"> <bool>true</bool> </property> <property name="frameShadow"> <enum>QFrame::Raised</enum> </property> <property name="tabKeyNavigation"> <bool>true</bool> </property> <property name="selectionMode"> <enum>QAbstractItemView::ExtendedSelection</enum> </property> <property name="rootIsDecorated"> <bool>false</bool> </property> <property name="sortingEnabled"> <bool>true</bool> </property> <property name="columnCount"> <number>6</number> </property> <column> <property name="text"> <string>0</string> </property> </column> <column> <property name="text"> <string>1</string> </property> </column> <column> <property name="text"> <string>2</string> </property> </column> <column> <property name="text"> <string>3</string> </property> </column> <column> <property name="text"> <string>4</string> </property> </column> <column> <property name="text"> <string>5</string> </property> </column> </widget> </item> <item row="2" column="1"> <widget class="c2bComboBox" name="comboFilter"> <property name="sizePolicy"> <sizepolicy hsizetype="Ignored" vsizetype="Ignored"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="editable"> <bool>true</bool> </property> <property name="duplicatesEnabled"> <bool>false</bool> </property> </widget> </item> </layout> </widget> <layoutdefault spacing="6" margin="11"/> <customwidgets> <customwidget> <class>c2bComboBox</class> <extends>QComboBox</extends> <header>c2bComboBox.h</header> </customwidget> </customwidgets> <resources> <include location="cb2bib.qrc"/> </resources> <connections> <connection> <sender>clearB</sender> <signal>clicked()</signal> <receiver>comboFilter</receiver> <slot>clearEditText()</slot> <hints> <hint type="sourcelabel"> <x>735</x> <y>152</y> </hint> <hint type="destinationlabel"> <x>548</x> <y>151</y> </hint> </hints> </connection> </connections> </ui> �������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/cb2Bib.ui����������������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�014536� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.003254785 29 ctime=1498583182.64725809 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/cb2Bib.ui��������������������������������������������������������������������������0000644�0001750�0000144�00000072157�13124510115�016140� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <author>Pere Constans</author> <class>cb2Bib</class> <widget class="QMainWindow" name="cb2Bib"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>1432</width> <height>820</height> </rect> </property> <property name="windowTitle"> <string>cb2Bib</string> </property> <property name="windowIcon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/cb2bib.png</normaloff>:/icons/icons/cb2bib.png</iconset> </property> <widget class="QWidget" name="centralwidget"> <layout class="QGridLayout"> <property name="leftMargin"> <number>6</number> </property> <property name="topMargin"> <number>6</number> </property> <property name="rightMargin"> <number>6</number> </property> <property name="bottomMargin"> <number>6</number> </property> <property name="spacing"> <number>6</number> </property> <item row="5" column="0" colspan="3"> <layout class="QHBoxLayout"> <property name="spacing"> <number>6</number> </property> <property name="leftMargin"> <number>0</number> </property> <property name="topMargin"> <number>0</number> </property> <property name="rightMargin"> <number>0</number> </property> <property name="bottomMargin"> <number>0</number> </property> <item> <widget class="QPushButton" name="ViewAboutB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/cb2bib.png</normaloff>:/icons/icons/cb2bib.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <widget class="QPushButton" name="ConfigureB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/configure.png</normaloff>:/icons/icons/configure.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <widget class="QPushButton" name="SearchInFilesB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/tex.png</normaloff>:/icons/icons/tex.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <widget class="QPushButton" name="PdfImportB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/pdf.png</normaloff>:/icons/icons/pdf.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <spacer> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeType"> <enum>QSizePolicy::Fixed</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>20</height> </size> </property> </spacer> </item> <item> <widget class="QPushButton" name="ExitB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/exit.png</normaloff>:/icons/icons/exit.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <spacer> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeType"> <enum>QSizePolicy::Expanding</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>205</width> <height>20</height> </size> </property> </spacer> </item> <item> <widget class="QPushButton" name="ConnectB"> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/connect_established.png</normaloff>:/icons/icons/connect_established.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <widget class="QPushButton" name="MakeNetworkQueryB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/package_network.png</normaloff>:/icons/icons/package_network.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <widget class="QPushButton" name="ViewBibB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/viewbib.png</normaloff>:/icons/icons/viewbib.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <widget class="QPushButton" name="AddBibB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/filesaveas.png</normaloff>:/icons/icons/filesaveas.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> <item> <widget class="QPushButton" name="EditBibTeXB"> <property name="toolTip"> <string/> </property> <property name="text"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/edit.png</normaloff>:/icons/icons/edit.png</iconset> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> </widget> </item> </layout> </item> <item row="1" column="0" colspan="3"> <widget class="QStackedWidget" name="stackedWidget"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <widget class="QWidget" name="widget"/> </widget> </item> <item row="3" column="2"> <widget class="QToolButton" name="BibTeXDir"> <property name="toolTip"> <string/> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> <item row="3" column="1"> <widget class="c2bComboBox" name="bibtexfile"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="editable"> <bool>true</bool> </property> <property name="frame"> <bool>true</bool> </property> </widget> </item> <item row="3" column="0"> <widget class="QLabel" name="TextLabel31"> <property name="text"> <string>Add to:</string> </property> </widget> </item> <item row="2" column="0" colspan="3"> <widget class="Line" name="line_2"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="4" column="0" colspan="3"> <widget class="Line" name="line"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="0" column="0" colspan="3"> <widget class="QTabWidget" name="tabWidget"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Minimum"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="tabPosition"> <enum>QTabWidget::South</enum> </property> <property name="tabShape"> <enum>QTabWidget::Rounded</enum> </property> <property name="currentIndex"> <number>0</number> </property> <widget class="QWidget" name="tab"> <attribute name="title"> <string>Main</string> </attribute> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="6" column="0"> <widget class="QLabel" name="textLabel1"> <property name="text"> <string>Keywords</string> </property> </widget> </item> <item row="7" column="0"> <widget class="QLabel" name="textLabel2"> <property name="text"> <string>File</string> </property> </widget> </item> <item row="0" column="5" colspan="3"> <widget class="c2bComboBox" name="typecombo"> <property name="sizePolicy"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="editable"> <bool>true</bool> </property> <property name="autoCompletion"> <bool>true</bool> </property> <property name="duplicatesEnabled"> <bool>false</bool> </property> </widget> </item> <item row="0" column="4"> <widget class="QLabel" name="textLabel3"> <property name="text"> <string>Type</string> </property> </widget> </item> <item row="4" column="6"> <widget class="QLabel" name="textLabel4"> <property name="text"> <string>Year</string> </property> </widget> </item> <item row="4" column="4"> <widget class="QLabel" name="textLabel5"> <property name="text"> <string>Number</string> </property> </widget> </item> <item row="4" column="2"> <widget class="QLabel" name="textLabel6"> <property name="text"> <string>Volume</string> </property> </widget> </item> <item row="5" column="0"> <widget class="QLabel" name="textLabel7"> <property name="text"> <string>Abstract</string> </property> </widget> </item> <item row="4" column="0"> <widget class="QLabel" name="textLabel8"> <property name="text"> <string>Pages</string> </property> </widget> </item> <item row="3" column="0"> <widget class="QLabel" name="textLabel9"> <property name="text"> <string>Journal</string> </property> </widget> </item> <item row="2" column="0"> <widget class="QLabel" name="textLabel10"> <property name="text"> <string>Author</string> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="textLabel11"> <property name="text"> <string>Title</string> </property> </widget> </item> <item row="0" column="0"> <widget class="QLabel" name="textLabel12"> <property name="text"> <string>CITEID</string> </property> </widget> </item> <item row="0" column="1" colspan="3"> <widget class="c2bLineEdit" name="id"> <property name="sizePolicy"> <sizepolicy hsizetype="Ignored" vsizetype="Ignored"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="1" column="1" colspan="7"> <widget class="c2bLineEdit" name="title"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="2" column="1" colspan="7"> <widget class="c2bLineEdit" name="author"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="3" column="1" colspan="7"> <widget class="c2bLineEdit" name="journal"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="4" column="1"> <widget class="c2bLineEdit" name="pages"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="4" column="3"> <widget class="c2bLineEdit" name="volume"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="4" column="5"> <widget class="c2bLineEdit" name="number"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="4" column="7"> <widget class="c2bLineEdit" name="year"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="5" column="1" colspan="7"> <widget class="c2bLineEdit" name="abstract"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="6" column="1" colspan="7"> <widget class="c2bLineEdit" name="keywords"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="7" column="1" colspan="7"> <widget class="c2bLineEdit" name="file"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> </layout> </widget> <widget class="QWidget" name="tab_2"> <attribute name="title"> <string>Other Fields</string> </attribute> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="0"> <widget class="QLabel" name="textLabel13"> <property name="text"> <string>Book Title</string> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="textLabel14"> <property name="text"> <string>Annote</string> </property> </widget> </item> <item row="2" column="4"> <widget class="QLabel" name="textLabel15"> <property name="text"> <string>DOI</string> </property> </widget> </item> <item row="2" column="2"> <widget class="QLabel" name="textLabel16"> <property name="text"> <string>Chapter</string> </property> </widget> </item> <item row="2" column="0"> <widget class="QLabel" name="textLabel17"> <property name="text"> <string>Address</string> </property> </widget> </item> <item row="3" column="4"> <widget class="QLabel" name="textLabel18"> <property name="text"> <string>Eprint</string> </property> </widget> </item> <item row="3" column="2"> <widget class="QLabel" name="textLabel19"> <property name="text"> <string>Editor</string> </property> </widget> </item> <item row="3" column="0"> <widget class="QLabel" name="textLabel20"> <property name="text"> <string>Edition</string> </property> </widget> </item> <item row="4" column="4"> <widget class="QLabel" name="textLabel21"> <property name="text"> <string>ISSN</string> </property> </widget> </item> <item row="4" column="2"> <widget class="QLabel" name="textLabel22"> <property name="text"> <string>ISBN</string> </property> </widget> </item> <item row="4" column="0"> <widget class="QLabel" name="textLabel23"> <property name="text"> <string>Institution</string> </property> </widget> </item> <item row="5" column="4"> <widget class="QLabel" name="textLabel24"> <property name="text"> <string>Organization</string> </property> </widget> </item> <item row="5" column="2"> <widget class="QLabel" name="textLabel25"> <property name="text"> <string>Note</string> </property> </widget> </item> <item row="5" column="0"> <widget class="QLabel" name="textLabel26"> <property name="text"> <string>Month</string> </property> </widget> </item> <item row="6" column="4"> <widget class="QLabel" name="textLabel27"> <property name="text"> <string>Series</string> </property> </widget> </item> <item row="6" column="2"> <widget class="QLabel" name="textLabel28"> <property name="text"> <string>School</string> </property> </widget> </item> <item row="6" column="0"> <widget class="QLabel" name="textLabel29"> <property name="text"> <string>Publisher</string> </property> </widget> </item> <item row="7" column="0"> <widget class="QLabel" name="textLabel30"> <property name="text"> <string>URL</string> </property> </widget> </item> <item row="0" column="1" colspan="5"> <widget class="c2bLineEdit" name="booktitle"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="1" column="1" colspan="5"> <widget class="c2bLineEdit" name="annote"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="2" column="1"> <widget class="c2bLineEdit" name="address"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="3" column="1"> <widget class="c2bLineEdit" name="edition"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="4" column="1"> <widget class="c2bLineEdit" name="institution"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="5" column="1"> <widget class="c2bLineEdit" name="month"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="6" column="1"> <widget class="c2bLineEdit" name="publisher"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="2" column="3"> <widget class="c2bLineEdit" name="chapter"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="3" column="3"> <widget class="c2bLineEdit" name="editor"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="4" column="3"> <widget class="c2bLineEdit" name="isbn"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="5" column="3"> <widget class="c2bLineEdit" name="note"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="6" column="3"> <widget class="c2bLineEdit" name="school"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="2" column="5"> <widget class="c2bLineEdit" name="doi"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="3" column="5"> <widget class="c2bLineEdit" name="eprint"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="4" column="5"> <widget class="c2bLineEdit" name="issn"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="5" column="5"> <widget class="c2bLineEdit" name="organization"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="6" column="5"> <widget class="c2bLineEdit" name="series"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> <item row="7" column="1" colspan="5"> <widget class="c2bLineEdit" name="url"> <property name="acceptDrops"> <bool>false</bool> </property> </widget> </item> </layout> </widget> </widget> </item> </layout> </widget> <widget class="QStatusBar" name="statusbar"/> <action name="clearFieldsAction"> <property name="text"> <string>Clear All Fields</string> </property> </action> <action name="insertRegExpAction"> <property name="text"> <string>Insert Regular Expression</string> </property> <property name="toolTip"> <string>Insert regular expression</string> </property> </action> <action name="editBookmarksAction"> <property name="text"> <string>Edit Bookmarks</string> </property> <property name="toolTip"> <string>Edit bookmarks</string> </property> </action> <action name="editRegExpsAction"> <property name="text"> <string>Edit Regular Expressions</string> </property> <property name="toolTip"> <string>Edit regular expressions</string> </property> </action> <action name="guessFieldsAction"> <property name="text"> <string>Guess Bibliographic Fields</string> </property> <property name="toolTip"> <string>Guess bibliographic fields</string> </property> </action> <action name="postprocessBibTeXAction"> <property name="text"> <string>Postprocess BibTeX</string> </property> </action> <action name="preparseClipboardAction"> <property name="text"> <string>Preparse Clipboard</string> </property> <property name="toolTip"> <string>Preparse clipboard</string> </property> </action> <action name="startEngineAction"> <property name="text"> <string>Restart Recognition</string> </property> </action> <action name="viewTaggedClipEditAction"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>View Tagged Clipboard Data</string> </property> <property name="iconText"> <string>View Tagged Clipboard Data</string> </property> <property name="toolTip"> <string>View tagged clipboard data</string> </property> </action> <action name="openFileDocumentAction"> <property name="text"> <string>Open Document</string> </property> <property name="toolTip"> <string>Open document</string> </property> </action> <action name="editAbbreviationsAction"> <property name="text"> <string>Edit Journal Abbreviations</string> </property> <property name="toolTip"> <string>Edit journal abbreviations</string> </property> </action> <action name="selectFileAction"> <property name="text"> <string>Select Document File</string> </property> <property name="toolTip"> <string>Select document file</string> </property> </action> <action name="openAnnoteAction"> <property name="text"> <string>Annote Editor</string> </property> <property name="toolTip"> <string>Annote Editor</string> </property> </action> <action name="checkRepeatedAction"> <property name="text"> <string>Check Repeated</string> </property> <property name="toolTip"> <string>Check repeated</string> </property> </action> </widget> <customwidgets> <customwidget> <class>c2bLineEdit</class> <extends>QLineEdit</extends> <header>c2bLineEdit.h</header> </customwidget> <customwidget> <class>c2bComboBox</class> <extends>QComboBox</extends> <header>c2bComboBox.h</header> </customwidget> </customwidgets> <tabstops> <tabstop>tabWidget</tabstop> <tabstop>id</tabstop> <tabstop>typecombo</tabstop> <tabstop>title</tabstop> <tabstop>author</tabstop> <tabstop>journal</tabstop> <tabstop>pages</tabstop> <tabstop>volume</tabstop> <tabstop>number</tabstop> <tabstop>year</tabstop> <tabstop>abstract</tabstop> <tabstop>keywords</tabstop> <tabstop>file</tabstop> <tabstop>bibtexfile</tabstop> <tabstop>BibTeXDir</tabstop> <tabstop>ViewAboutB</tabstop> <tabstop>ConfigureB</tabstop> <tabstop>SearchInFilesB</tabstop> <tabstop>PdfImportB</tabstop> <tabstop>ExitB</tabstop> <tabstop>ConnectB</tabstop> <tabstop>MakeNetworkQueryB</tabstop> <tabstop>ViewBibB</tabstop> <tabstop>AddBibB</tabstop> <tabstop>EditBibTeXB</tabstop> <tabstop>booktitle</tabstop> <tabstop>annote</tabstop> <tabstop>address</tabstop> <tabstop>edition</tabstop> <tabstop>institution</tabstop> <tabstop>month</tabstop> <tabstop>publisher</tabstop> <tabstop>url</tabstop> <tabstop>chapter</tabstop> <tabstop>editor</tabstop> <tabstop>isbn</tabstop> <tabstop>note</tabstop> <tabstop>school</tabstop> <tabstop>doi</tabstop> <tabstop>eprint</tabstop> <tabstop>issn</tabstop> <tabstop>organization</tabstop> <tabstop>series</tabstop> </tabstops> <resources> <include location="cb2bib.qrc"/> </resources> <connections/> </ui> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bCiterView.h�����������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�015553� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.819256493 30 atime=1498583183.003254785 30 ctime=1498583182.823256456 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bCiterView.h���������������������������������������������������������������������0000644�0001750�0000144�00000003357�13124510216�017155� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCITERVIEW_H #define C2BCITERVIEW_H #include "c2bCiterModel.h" #include <QTableView> class c2bCiterView : public QTableView { Q_OBJECT public: explicit c2bCiterView(QWidget* parentw = 0); inline ~c2bCiterView() {} c2bCiter::State currentState() const; void reloadModel(QAbstractItemModel* citations, const QStringList& bibtex_files, const c2bCiter::State& s); void setPatternFilter(const QString& pattern); signals: void citeReferences(); void editReference(); void hideCiter(); void openAnnote(); void openFile(); void openUrl(); void patternFilterChanged(const bool mode, const QString& pattern); void statusMessage(const QString& message); protected: void keyPressEvent(QKeyEvent* qevent); void keyboardSearch(const QString& search); void resizeEvent(QResizeEvent* qevent); public slots: void updatePatternFilter(const QString& pattern); private: void clearCurrentFilter(); void keywordDocumentSearch(); void setRelatedFilter(); void showNextState(); void showPreviousState(); void toggleGlossaryView(); void toggleKeywordView(); void toggleSelectedFilter(); void updateCurrentIndex(const QModelIndex& i); void updateFormat(const c2bCiter::Format& format); void updateViewport(); QString _filter_string; bool _filter_mode; c2bCiterModel* _citationsP; }; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bCiterHistory.h��������������������������������������������������0000644�0000000�0000000�00000000131�13124510216�016301� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 mtime=1498583182.81525653 30 atime=1498583183.003254785 30 ctime=1498583182.819256493 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bCiterHistory.h������������������������������������������������������������������0000644�0001750�0000144�00000006035�13124510216�017700� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCITERHISTORY_H #define C2BCITERHISTORY_H #include "c2bCiter.h" #include <QModelIndex> #include <QVarLengthArray> class c2bCiterHistory { public: c2bCiterHistory(); inline ~c2bCiterHistory() {} void clear(); void saveCurrentState(const c2bCiter::Format format, const c2bCiter::Filter filter, const int iindex, const int vindex, const QString fstring); inline void saveCurrentState(const c2bCiter::Format format, const c2bCiter::Filter filter, const int iindex, const QModelIndex* const index, const QString fstring) { if (index) saveCurrentState(format, filter, iindex, index->row(), fstring); } inline void saveCurrentItemIndex(const c2bCiter::Format format, const c2bCiter::Filter filter, const int iindex) { if (format == c2bCiter::K) _last_keyword = iindex; else if (filter == c2bCiter::Selected) _last_selection_citation = iindex; else _last_citation = iindex; } inline const c2bCiter::State& lastState() const { return _states[_index[_nstates]]; } inline const c2bCiter::State& previousState() { if (_cstate == -1) _cstate = _nstates; else if (_cstate == 0) _cstate = 1; return _states[_index[--_cstate]]; } inline const c2bCiter::State& nextState() { if (_cstate == _nstates) _cstate = _nstates - 1; return _states[_index[++_cstate]]; } inline int currentState() const { return _cstate; } inline const c2bCiter::State& lastNonKeywordState() const { return _last_nonkeyword_state; } inline const c2bCiter::State& lastNonSelectedState() const { return _last_nonselected_state; } inline void saveCurrentCitationFormat(const c2bCiter::Format format) { _last_citation_format = (format == c2bCiter::R || format == c2bCiter::K) ? _last_citation_format : format; } inline c2bCiter::Format lastCitationFormat() const { return _last_citation_format; } inline int lastCitation() const { return _last_citation; } inline int lastSelectionCitation() const { return _last_selection_citation; } inline int lastKeyword() const { return _last_keyword; } private: c2bCiter::Format _last_citation_format; int _cstate; int _last_citation; int _last_keyword; int _last_selection_citation; int _nstates; c2bCiter::State _last_nonkeyword_state; c2bCiter::State _last_nonselected_state; QVarLengthArray<c2bCiter::State> _states; QVarLengthArray<int> _index; }; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bPdfImport.cpp���������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016111� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.767256976 30 atime=1498583183.003254785 30 ctime=1498583182.771256939 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bPdfImport.cpp�������������������������������������������������������������������0000644�0001750�0000144�00000051747�13124510216�017521� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bPdfImport.h" #include "c2b.h" #include "c2bFileDialog.h" #include "c2bSettings.h" #include "c2bUtils.h" #include <document.h> #include <QDropEvent> #include <QMimeData> #include <QPushButton> #include <QTimer> #include <QUrl> /** \page c2bpdfimport PDF Reference Import Articles in PDF or other formats that can be converted to plain text can be processed and indexed by the cb2Bib. Files can be selected using the Select Files button, or dragging them from the desktop or the file manager to the PDFImport dialog panel. Files are converted to plain text by using any external translation tool or script. This tool, and optionally its parameters, are set in the cb2Bib configure dialog. See the \ref c2bconf_utilities section for details. Once the file is converted, the text, and optionally, the preparsed metadata, is sent to the cb2Bib for reference recognition. This is the usual, two step process. First, text is optionally preprocessed, using a simple set of rules and/or any external script.or tool. See \ref c2bconf_clipboard. Second, text is processed for reference extraction. The cb2Bib so far uses two methods. One considers the text as a full pattern, which is checked against the user's set of regular expressions. The better designed are these rules, the best and most reliable will be the extraction. The second method, used when no regular expression matches the text, considers instead a set of predefined subpatterns. See \ref heuristicguess. At this point users can interact and supervise their references, right before saving them. Allowing user intervention is and has been a design goal in the cb2Bib. Thus, at this point, the cb2Bib invites users to check their references. Poorly translated characters, accented letters, 'forgotten' words, or some minor formatting in the titles might be worth considering. See \htmlonly <a href="http://www.glyphandcog.com/textext.html" target="_blank">Text Extraction</a> \endhtmlonly for a description on the intricacies of PDF to text conversions. In addition, if too few fields were extracted, one might perform a network query. Say, only the DOI was catch, then there are chances that such a query will fill the remaining fields. The references are saved from the cb2Bib main panel. Once Save is pressed, and depending on the configuration, see \ref c2bconf_documents, the document file will be either renamed, copied, moved or simply linked onto the <tt>file</tt> field of the reference. If <b>Insert BibTeX metadata to document files</b> is checked, the current reference will also be inserted into the document itself. When several files are going to be indexed, the sequence can be as follows: - <b>Process next after saving</b>\n Once files are load and Process is pressed, the PDFImport dialog can be minimized (but not closed) for convenience. All required operations to completely fill the desired fields (e.g. dynamic bookmarks, open DOI, etc, which might be required if the data in document is not complete) are at this point accessible from the main panel. The link in the <b><tt>file</tt> field will be permanent</b>, without regard to which operations (e.g. clipboard copying) are needed, until the reference is saved. The source file can be open at any time by right clicking the <tt>file</tt> line edit. Once the reference is saved, the next file will be automatically processed. To skip a given document file from saving its reference, press the Process button. - <b>Unsupervised processing</b>\n In this operation mode, all files will be sequentially processed, following the chosen steps and rules. <b>If the processes is successful</b>, the reference is automatically saved, and the next file is processed. <b>If it is not</b>, the file is skipped and no reference is saved. While processing, the clipboard is disabled for safety. Once finished, this box is unchecked, to avoid a possible accidental saving of a void reference. Network queries that require intervention, i.e., whose result is launching a given page, are skipped. The processes follows until all files are processed. However, it will stop to avoid a file being overwritten, as a result of a repeated key. In this case, it will resume after manual renaming and saving. See also \ref commandline, commands '--txt2bib' and '--doc2bib'. <p> </p> \section faq_automatic_extraction Automatic Extraction: Questions and Answers - <b>When does cb2Bib do automatic extractions?</b> The cb2Bib is conceived as a lightweight tool to extract references and manage bibliographies in a simple, fast, and accurate way. Accuracy is better achieved in semi-automatic extractions. Such extractions are handy, and allow user intervention and verification. However, in cases where one has accumulated a large number of unindexed documents, automatic processing can be convenient. The cb2Bib does automatic extraction when, in PDFImport mode, 'Unsupervised processing' is checked, or, in command line mode, when typing <tt>cb2bib --doc2bib *.pdf tmp_references.bib</tt>, or, on Windows, <tt>c2bconsole.exe</tt> instead of <tt>cb2bib</tt>. - <b>Are PDFImport and command line modes equivalent?</b> Yes. There are, however, two minor differences. First, PDFImport adds each reference to the current BibTeX file, as this behavior is the normal one in cb2Bib. On the other hand, command line mode will, instead, overwrite <tt>tmp_references.bib</tt> if it exists, as this is the expected behavior for almost all command line tools. Second, as for now, command line mode does not follow the configuration option 'Check Repeated On Save'. - <b>How do I do automatic extraction?</b> To test and learn about automatic extractions, the cb2Bib distribution includes a set of four PDF files that mimic a paper title page. For these files, distribution also includes a regular expression, in file <tt>regexps.txt</tt>, capable of extracting the reference fields, provided the <tt>pdftotex</tt> flags are set to their default values. Processing these files, should, therefore, be automatic, and four messages stating <tt>Processed as 'PDF Import Example'</tt> should be seen in the logs. Note that extractions are configurable. A reading of \ref c2bconf will provide additional, useful information. - <b>Why some entries are not saved and files not renamed?</b> Once you move from the fabricated examples to real cases, you will realize that some of the files, while being processed, are not renamed and their corresponding BibTeX data is not written. For each document file, cb2Bib converts its first page to text, and from this text it attempts to extract the bibliographic reference. By design, when extraction fails, cb2Bib does nothing: no file is moved, no BibTeX is written. This way, you know that the remaining files in the origin directory need special, manual attention. <b>Extractions are always seen as failed, unless reliable data is found in the text</b>. - <b>What is <em>reliable data</em>?</b> Note that computer processing of natural texts, as extracting the bibliographic data from a title page, is nowadays an approximated procedure. The cb2Bib tries several strategies: <b>1)</b> allow for including user regular expressions very specific to the extraction at hand, <b>2)</b> use metadata if available, <b>3)</b> guess what is reasonable, and, based on this, make customized queries. Then, cb2Bib considers extracted <b>data is reliable if i)</b> data comes from a match to an user supplied regular expression <b>ii)</b> document contains BibTeX metadata, or <b>iii)</b> a guess is transformed through a query to formatted bibliographic data. As formatted bibliographic data, cb2Bib only understands BibTeX, and, as an exception, PubMed XML data. However, it allows external processing if needed. Any other data, metadata, guesses, and guesses on query results are considered unreliable data. - <b>Is metadata reliable data?</b> No. Only author, title, and keywords in standard PDF metadata can be mapped to their corresponding bibliographic fields. Furthermore, publishers most often misuse these three keys, placing, for instance, DOI in title, or setting author to, perhaps, the document typesetter. Only BibTeX XMP metadata is considered reliable, and only documents already processed with cb2Bib or JabRef will have it. If you consider that a set of PDF files does contain reliable data, you may force to accept it using the command line switch <tt>--sloppy</tt> together with <tt>--doc2bib</tt>. - <b>How successful is automatic extraction?</b> As it follows from the given definition of reliable data, running automatic extractions without adhoc <tt>regexps.txt</tt> and <tt>netqinf.txt</tt> files will certainly give a zero success ratio. In practice, scenario 3) often applies: cb2Bib guesses several fields, and, based on the out-of-the-box <tt>netqinf.txt</tt> file, it obtains from the web either BibTeX or PubMed XML data. Thus, biologists, for instance, usually have success ratios close to 100%, since PubMed is almost complete for them, and its data is extremely accurate. - <b>What can I do to increase success ratio?</b> First, set your favorite journals in file <tt>abbreviations.txt</tt>. Besides increasing the chances of journal name recognition, it will provide consistency across your BibTeX database. In general, do not write regular expressions to extract directly from the PDF text. Conversion is often poor. Special characters often break lines, thus breaking your regular expressions too. Write customized queries. For instance, if your PDFs have DOI in title page, set the simple query \verbatim journal=The Journal of Everything| query=http://dx.doi.org/<<doi>> capture_from_query= referenceurl_prefix= referenceurl_sufix= pdfurl_prefix= pdfurl_sufix= action=htm2txt_query \endverbatim then, if it is feasible to extract the reference from the document's web page using a regular expression, include it in file <tt>regexps.txt</tt>. Note that querying in cb2Bib had been designed having in mind minority fields of research, for which, established databases might not be available. If cb2Bib failed to make reasonable guesses, then, you might consider writing very simple regular expressions to extract directly from the PDF text. For instance, obtain title only. Then, the posterior query step can provide the remaining information. Note also, especially for old documents, journal name is often missing from the paper title page. If in need of processing a series of those papers, consider using a simple script, that, in the cb2Bib preprocessing step, adds this missing information. - <b>Does successful extraction mean accurate extraction?</b> No. An extraction is successful if reliable data, as defined above, is found in the text, in the metadata, or in the text returned by a query. Reference accuracy relies on whether or not user regular expressions are robust, BibTeX metadata is correct, a guess is appropriate, a set of queries can correct a partially incorrect guess, and the text returned by a query is accurate. In general, well designed sets of regular expressions are accurate. Publisher's abstract pages and PubMed are accurate. But, some publishers are still using images for non-ASCII characters, and PubMed algorithms may drop author middle names if a given author has 'too many names'. Expect convenience over accuracy on other sources. - <b>Can I use cb2Bib to extract comma separated value CSV references?</b> Yes. To automatically import multiple CSV references you will need one regular expression. If you can control CSV export, choose | as separator, since comma might be used, for instance, in titles. The regular expression for \verbatim AuthName1, AuthName2 | Title | 2010 \endverbatim will simply be \verbatim author title year ^([^|]*)\|([^|]*)\|([^|]*)$ \endverbatim The reference file <tt>references.csv</tt> can then be split to single-line files typing \verbatim split -l 1 references.csv slineref \endverbatim and the command \verbatim cb2bib --txt2bib slineref* references.bib rm -f slineref* \endverbatim will convert <tt>references.csv</tt> to BibTeX file <tt>references.bib</tt> <p> </p> */ c2bPdfImport::c2bPdfImport(QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); settings = c2bSettingsP; loadSettings(); buttonSelectFiles = new QPushButton(tr("&Select Files")); buttonSelectFiles->setStatusTip(tr("Select PDF files. Hint: Files can also be dragged and dropped to this window")); buttonSelectFiles->setMouseTracking(true); ui.buttonBox->addButton(buttonSelectFiles, QDialogButtonBox::ActionRole); buttonProcess = new QPushButton(tr("&Process")); ui.buttonBox->addButton(buttonProcess, QDialogButtonBox::ActionRole); ui.buttonBox->button(QDialogButtonBox::Help)->setAutoDefault(false); buttonProcess->setAutoDefault(true); buttonProcess->setDefault(true); buttonProcess->setEnabled(false); buttonSelectFiles->setAutoDefault(true); buttonSelectFiles->setDefault(true); buttonSelectFiles->setFocus(); ui.buttonBox->button(QDialogButtonBox::Abort)->setAutoDefault(false); ui.buttonBox->button(QDialogButtonBox::Abort)->setEnabled(false); m_aborted = false; connect(ui.buttonBox->button(QDialogButtonBox::Abort), SIGNAL(clicked()), this, SLOT(abort())); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); connect(buttonSelectFiles, SIGNAL(clicked()), this, SLOT(selectFiles())); connect(buttonProcess, SIGNAL(clicked()), this, SLOT(processOneFile())); connect(ui.DoAll, SIGNAL(toggled(bool)), this, SIGNAL(setClipboardDisabled(bool))); connect(c2b::instance(), SIGNAL(statusMessage(const QString&)), this, SLOT(showMessage(const QString&))); ui.Log->appendPlainText(tr("PDF to Text converter: %1\nArguments: %2\n"). arg(settings->fileName("c2bPdfImport/Pdf2TextBin")). arg(settings->value("c2bPdfImport/Pdf2TextArg").toString())); showMessage(tr("See cb2Bib install directory for demo c2bPdfImport files.")); } c2bPdfImport::~c2bPdfImport() { emit setClipboardDisabled(false); saveSettings(); } void c2bPdfImport::processOneFile() { // Converting PDF to Text buttonProcess->setEnabled(false); m_aborted = false; ui.buttonBox->button(QDialogButtonBox::Abort)->setEnabled(ui.DoAll->isChecked()); settings->setValue("networkQuery/isSupervised", !ui.DoAll->isChecked()); settings->setValue("cb2Bib/AutomaticQuery", ui.AutomaticQuery->isChecked()); if (ui.PDFlist->currentItem() == 0) return; processedFile = ui.PDFlist->currentItem()->text(); if (ui.OpenFiles->isChecked()) c2bUtils::openFile(processedFile, this); QCoreApplication::processEvents(); processDocument(); } void c2bPdfImport::processNext() { processedFile.clear(); if (m_aborted) { m_aborted = false; return; } if (ui.PDFlist->currentItem() == 0) return; if (ui.DoNextAfterSaving->isChecked() || ui.DoAll->isChecked()) processOneFile(); } void c2bPdfImport::processDocument() { document doc(processedFile, document::FirstPage); QString text(doc.toString()); const QString log(doc.logString()); if (!log.isEmpty()) ui.Log->appendPlainText(log); const QString error(doc.errorString()); if (!error.isEmpty()) ui.Log->appendPlainText(tr("[cb2bib] %1.").arg(error)); QListWidgetItem* item = ui.PDFlist->currentItem(); delete item; if (ui.PDFlist->currentItem() == 0) { buttonProcess->setEnabled(false); ui.buttonBox->button(QDialogButtonBox::Close)->setFocus(); } else { buttonProcess->setEnabled(true); buttonProcess->setFocus(); } QString metadata; if (settings->value("cb2Bib/AddMetadata").toBool()) metadata = c2b::documentMetadata(processedFile); if (text.isEmpty() && metadata.isEmpty()) { if (ui.DoAll->isChecked()) QTimer::singleShot(500, this, SLOT(processNext())); } else { if (settings->value("cb2Bib/PreAppendMetadata").toString() == "prepend") text = metadata + text; else text = text + '\n' + metadata; ui.Log->appendPlainText(tr("[cb2bib] Conversion completed for file %1.").arg(processedFile)); emit textProcessed(text); emit fileProcessed(processedFile); } } void c2bPdfImport::referenceExtacted(bool status) { if (!ui.DoAll->isChecked()) return; if (ui.PDFlist->currentItem() == 0) { ui.DoAll->setChecked(false); ui.buttonBox->button(QDialogButtonBox::Abort)->setEnabled(false); } // Delay request to make sure fileProcessed has finished if (status) QTimer::singleShot(500, this, SIGNAL(saveReferenceRequest())); else QTimer::singleShot(500, this, SLOT(processNext())); } void c2bPdfImport::dropEvent(QDropEvent* qevent) { QList<QUrl> fns(qevent->mimeData()->urls()); for (int i = 0; i < fns.count(); i++) { QString scheme(fns.at(i).scheme()); QString fn; if (scheme == "file") fn = fns.at(i).toLocalFile(); if (!fn.isEmpty()) { QListWidgetItem* item = new QListWidgetItem(fn, ui.PDFlist); if (ui.PDFlist->currentItem() == 0) ui.PDFlist->setCurrentItem(item); } } qevent->acceptProposedAction(); c2bUtils::setWidgetOnTop(this); buttonProcess->setEnabled(true); buttonProcess->setFocus(); showMessage(tr("%1 files selected.").arg(ui.PDFlist->count())); } void c2bPdfImport::dragEnterEvent(QDragEnterEvent* qevent) { if (qevent->mimeData()->hasUrls()) qevent->acceptProposedAction(); } bool c2bPdfImport::event(QEvent* qevent) { if (qevent->type() == QEvent::StatusTip) { ui.statusBar->showMessage(static_cast<QStatusTipEvent*>(qevent)->tip()); return true; } else return QWidget::event(qevent); } void c2bPdfImport::selectFiles() { QStringList fns(c2bFileDialog::getOpenFilenames(this, QString(), settings->fileName("c2bPdfImport/LastFile"), tr("Portable Document Format (*.pdf);;All (*)"))); if (fns.isEmpty()) return; settings->setFilename("c2bPdfImport/LastFile", fns.last()); QStringList::Iterator it = fns.begin(); while (it != fns.end()) { QListWidgetItem* item = new QListWidgetItem(*it, ui.PDFlist); if (ui.PDFlist->currentItem() == 0) ui.PDFlist->setCurrentItem(item); ++it; } buttonProcess->setEnabled(true); buttonProcess->setFocus(); showMessage(tr("%1 files selected.").arg(ui.PDFlist->count())); } void c2bPdfImport::show() { c2bUtils::setWidgetOnTop(this); if (buttonProcess->isEnabled()) buttonProcess->setFocus(); else buttonSelectFiles->setFocus(); QDialog::show(); } void c2bPdfImport::showMessage(const QString& ms) { ui.statusBar->showMessage(ms, C2B_MESSAGE_TIME); if (ms.startsWith(tr("Processed as")) || ms.startsWith(tr("Unable"))) ui.Log->appendPlainText("[cb2bib] " + ms); } void c2bPdfImport::loadSettings() { c2bAutomaticQuery = settings->value("cb2Bib/AutomaticQuery").toBool(); ui.AutomaticQuery->setChecked(settings->value("c2bPdfImport/AutomaticQuery").toBool()); ui.DoNextAfterSaving->setChecked(settings->value("c2bPdfImport/DoNextAfterSaving", true).toBool()); ui.OpenFiles->setChecked(settings->value("c2bPdfImport/OpenFiles", false).toBool()); } void c2bPdfImport::saveSettings() { settings->setValue("c2bPdfImport/AutomaticQuery", ui.AutomaticQuery->isChecked()); settings->setValue("c2bPdfImport/DoNextAfterSaving", ui.DoNextAfterSaving->isChecked()); settings->setValue("c2bPdfImport/OpenFiles", ui.OpenFiles->isChecked()); settings->setValue("cb2Bib/AutomaticQuery", c2bAutomaticQuery); settings->setValue("networkQuery/isSupervised", true); } void c2bPdfImport::abort() { m_aborted = true; ui.DoAll->setChecked(false); ui.buttonBox->button(QDialogButtonBox::Abort)->setEnabled(false); } void c2bPdfImport::help() { c2bUtils::displayHelp("http://www.molspaces.com/d_cb2bib-c2bpdfimport.php"); } �������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bSaveRegExp.h����������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�015663� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.859256122 30 atime=1498583183.003254785 30 ctime=1498583182.859256122 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bSaveRegExp.h��������������������������������������������������������������������0000644�0001750�0000144�00000002024�13124510216�017253� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BSAVEREGEXP_H #define C2BSAVEREGEXP_H #include "ui_c2bSaveRegExp.h" #include <QDialog> class c2bSaveREHighlighter; class c2bSaveRegExp : public QDialog { Q_OBJECT public: c2bSaveRegExp(const QStringList& pattern, const QString& input, QWidget* parentw = 0); ~c2bSaveRegExp(); signals: void savePatternInfo(const QString& rx, const QString& rxname); public slots: void accept(); void help(); void updateInput(const QString& text); private: QRegExp _pattern_rx; QString _input_text; Ui::c2bSaveRegExp ui; c2bSaveREHighlighter* _sreS; private slots: void inputMightHaveChanged(); void setInformation(); }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bClipboard.cpp���������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016104� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.739257236 30 atime=1498583183.003254785 30 ctime=1498583182.739257236 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bClipboard.cpp�������������������������������������������������������������������0000644�0001750�0000144�00000005623�13124510216�017504� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bClipboard.h" #ifdef C2B_USE_CBPOLL #include "clipboardPoll.h" #endif #include <QApplication> c2bClipboard::c2bClipboard(QObject* parento) : QObject(parento) { // Connecting clipboard _cb = QApplication::clipboard(); _supports_selection = _cb->supportsSelection(); _is_connected = false; _cb_text = _cb->text(QClipboard::Clipboard); if (_supports_selection) _cbs_text = _cb->text(QClipboard::Selection); // Set polling _interval = 1000; #ifdef C2B_USE_CBPOLL _poll = new clipboardPoll(); connect(_poll, SIGNAL(clipboardChanged(bool)), this, SLOT(newClipboardData(bool))); #else _timer = new QTimer(this); connect(_timer, SIGNAL(timeout()), this, SLOT(checkData())); #endif } c2bClipboard::~c2bClipboard() { #ifdef C2B_USE_CBPOLL delete _poll; #endif } void c2bClipboard::checkData() { if (_cb_text != _cb->text(QClipboard::Clipboard)) { _cb_text = _cb->text(QClipboard::Clipboard); emit cbDataChanged(_cb_text); } if (_supports_selection && _cbs_text != _cb->text(QClipboard::Selection)) { _cbs_text = _cb->text(QClipboard::Selection); emit cbDataChanged(_cbs_text); } } void c2bClipboard::dataChanged() { if (_cb_text != _cb->text(QClipboard::Clipboard)) { _cb_text = _cb->text(QClipboard::Clipboard); emit cbDataChanged(_cb_text); } } void c2bClipboard::selectionChanged() { if (_supports_selection && _cbs_text != _cb->text(QClipboard::Selection)) { _cbs_text = _cb->text(QClipboard::Selection); emit cbDataChanged(_cbs_text); } } void c2bClipboard::setConnected(bool zconn) { _is_connected = zconn; if (_is_connected) { _cb_text = _cb->text(QClipboard::Clipboard); connect(_cb, SIGNAL(dataChanged()), this, SLOT(dataChanged())); if (_supports_selection) { _cbs_text = _cb->text(QClipboard::Selection); connect(_cb, SIGNAL(selectionChanged()), this, SLOT(selectionChanged())); } #ifdef C2B_USE_CBPOLL _poll->startT(_interval); #else _timer->start(_interval); #endif } else { #ifdef C2B_USE_CBPOLL _poll->stopT(); #else _timer->stop(); #endif disconnect(_cb, SIGNAL(dataChanged()), this, SLOT(dataChanged())); if (_supports_selection) disconnect(_cb, SIGNAL(selectionChanged()), this, SLOT(selectionChanged())); } } void c2bClipboard::newClipboardData(bool selectionMode) { if (selectionMode) selectionChanged(); else dataChanged(); } �������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bHighlighter.h���������������������������������������������������0000644�0000000�0000000�00000000130�13124510216�016106� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 mtime=1498583182.84325627 30 atime=1498583183.003254785 29 ctime=1498583182.84325627 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bHighlighter.h�������������������������������������������������������������������0000644�0001750�0000144�00000002007�13124510216�017501� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BHIGHLIGHTER_H #define C2BHIGHLIGHTER_H #include <QSyntaxHighlighter> /** clipboard SyntaxHighLighter @author Pere Constans */ class c2bColors; class c2bHighlighter : public QSyntaxHighlighter { public: explicit c2bHighlighter(QTextDocument* doc); ~c2bHighlighter(); protected: virtual void highlightBlock(const QString& text); private: QColor text_color; QRegExp rx0; QRegExp rx1; QRegExp rx2; QRegExp rx3; QRegExp rx4; QRegExp rx5; QRegExp rx6; QRegExp rx_extracted_ends; QRegExp rx_extracted_starts; QRegExp rx_metadata_ends; QRegExp rx_metadata_starts; c2bColors* c; }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bUpdateMetadata.h������������������������������������������������0000644�0000000�0000000�00000000131�13124510216�016534� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 mtime=1498583182.87125601 30 atime=1498583183.003254785 30 ctime=1498583182.875255973 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bUpdateMetadata.h����������������������������������������������������������������0000644�0001750�0000144�00000002111�13124510216�020122� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BUPDATEMETADATA_H #define C2BUPDATEMETADATA_H #include "ui_c2bLogWidget.h" #include <QDialog> class bibReference; class c2bBibParser; class c2bUpdateMetadata : public QDialog { Q_OBJECT public: explicit c2bUpdateMetadata(QWidget* parentw = 0); ~c2bUpdateMetadata(); void update(const QString& fn, const QString& bibtex); private slots: void aborted(); void help(); void update(); private: QPushButton* _buttonAbort; QString _bibtex; QString _fn; Ui::c2bLogWidget ui; bool _aborted; bool needsUpdating(const bibReference& ref, const bibReference& mref); c2bBibParser* _bpP; void writeDifferences(const bibReference& ref, const bibReference& mref); }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bFileDialog.cpp��������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016204� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.755257087 30 atime=1498583183.003254785 30 ctime=1498583182.755257087 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bFileDialog.cpp������������������������������������������������������������������0000644�0001750�0000144�00000016543�13124510216�017607� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bFileDialog.h" #include "c2bSettings.h" #include <QDialogButtonBox> #include <QLineEdit> #include <QPushButton> #include <QTimer> c2bFileDialog::c2bFileDialog(QWidget* parentw, const QString& caption, const QString& fpath, const QString& ffilter) : QFileDialog(parentw, caption, fpath, ffilter) { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setOptions(QFileDialog::DontUseNativeDialog); setModal(true); settings = c2bSettingsP; #ifdef Q_OS_UNIX // Distinguish executable files fip = new fileIconProvider(); setIconProvider(fip); #endif } c2bFileDialog::~c2bFileDialog() { #ifdef Q_OS_UNIX delete fip; #endif } QString c2bFileDialog::getFilename(QWidget* parentw, const QString& caption, const QString& path, const QString& filter) { c2bFileDialog* dlg = new c2bFileDialog(parentw, _caption(tr("Select a filename"), caption), _path(path), filter); dlg->setConfirmOverwrite(false); dlg->setFileMode(AnyFile); dlg->setAcceptMode(AcceptSave); dlg->setLabelText(QFileDialog::Accept, "Select"); const QString fn(dlg->fileName(path)); delete dlg; return fn; } QString c2bFileDialog::getOpenFilename(QWidget* parentw, const QString& caption, const QString& path, const QString& filter) { c2bFileDialog* dlg = new c2bFileDialog(parentw, _caption(tr("Select a filename"), caption), _path(path), filter); dlg->setFileMode(ExistingFile); dlg->setLabelText(QFileDialog::Accept, "Select"); const QString fn(dlg->fileName(path)); delete dlg; return fn; } QStringList c2bFileDialog::getOpenFilenames(QWidget* parentw, const QString& caption, const QString& path, const QString& filter) { c2bFileDialog* dlg = new c2bFileDialog(parentw, _caption(tr("Select filenames"), caption), _path(path), filter); dlg->setFileMode(ExistingFiles); dlg->setLabelText(QFileDialog::Accept, "Select"); const QString fn(dlg->fileName(path)); QStringList fns; if (!fn.isEmpty()) fns = dlg->selectedFiles(); delete dlg; return fns; } QString c2bFileDialog::getSaveFilename(QWidget* parentw, const QString& caption, const QString& path, const QString& filter) { c2bFileDialog* dlg = new c2bFileDialog(parentw, _caption(tr("Save As"), caption), _path(path), filter); dlg->setFileMode(AnyFile); dlg->setAcceptMode(AcceptSave); const QString fn(dlg->fileName(path)); delete dlg; return fn; } QString c2bFileDialog::getExistingDirectory(QWidget* parentw, const QString& caption, const QString& path) { c2bFileDialog* dlg = new c2bFileDialog(parentw, _caption("Select directory", caption), _dirpath(path), QString()); dlg->setFileMode(DirectoryOnly); dlg->setLabelText(QFileDialog::Accept, "Select"); const QString fn(dlg->fileName(QString())); delete dlg; return fn; } QString c2bFileDialog::getSystemFilename(QWidget* parentw, const QString& caption, const QString& path, const QString& filter) { c2bFileDialog* dlg = new c2bFileDialog(parentw, _caption(tr("Select a filename"), caption), _path(path), filter); dlg->setFileMode(AnyFile); dlg->setLabelText(QFileDialog::Accept, "Select"); dlg->setFilter(QDir::Drives | QDir::AllDirs | QDir::NoDotAndDotDot | QDir::System); dlg->setNameFilterDetailsVisible(false); const QString fn(dlg->fileName(path)); delete dlg; return fn; } QString c2bFileDialog::fileName(const QString& path) { readSettings(); _current_file = path; const QStringList fnf(nameFilters().filter(QFileInfo(path).completeSuffix() + ')', Qt::CaseInsensitive)); if (fnf.count() > 0) selectNameFilter(fnf.at(0)); QTimer::singleShot(250, this, SLOT(selectCurrentFile())); QString sfn; if (QFileDialog::exec() == QDialog::Accepted) { const QStringList selected(selectedFiles()); if (selected.count() > 0) sfn = selected.first(); } writeSettings(); return QDir::toNativeSeparators(QDir::cleanPath(sfn)); } void c2bFileDialog::accept() { // Set suffix for getSaveFilename dialog if (acceptMode() == AcceptSave) { QString suffix(selectedNameFilter()); QRegExp sre("\\*\\.([\\w\\.]+)"); if (sre.indexIn(suffix) != -1) { suffix = sre.cap(1); setDefaultSuffix(suffix); } } QFileDialog::accept(); } void c2bFileDialog::selectCurrentFile() { // Bug fix for Qt 4.4 not giving correct selection const QString fn(_filename(_current_file)); QLineEdit* le = findChild<QLineEdit*>(); if (le) { le->setText(fn); le->selectAll(); } } void c2bFileDialog::readSettings() { // Size resize(settings->value("c2bFileDialog/size", sizeHint()).toSize()); // History QStringList _history(settings->value("c2bFileDialog/history").toStringList()); _history.removeAll(directory().absolutePath()); qSort(_history); setHistory(_history); } void c2bFileDialog::writeSettings() { // Size settings->setValue("c2bFileDialog/size", size()); // History if (result() == QDialog::Accepted) { // Unique paths, keeping the newest history entries QStringList _history(history()); _history.append(directory().absolutePath()); _history.removeAll(QDir::homePath()); _history.removeAll(QDir::rootPath()); QStringList chronological(settings->value("c2bFileDialog/history").toStringList()); chronological.append(_history.last()); // Discard repeated _history.clear(); for (int i = chronological.count() - 1; i > -1; --i) if (!_history.contains(chronological.at(i))) { _history.prepend(chronological.at(i)); if (_history.count() > 10) break; } settings->setValue("c2bFileDialog/history", _history); } } QString c2bFileDialog::_caption(const QString& generic, const QString& caption) { if (caption.isEmpty()) return generic + " - cb2Bib"; else return caption + " - cb2Bib"; } QString c2bFileDialog::_filename(const QString& path) { if (path.isEmpty()) return path; else return QFileInfo(path).fileName(); } QString c2bFileDialog::_path(const QString& path) { if (path.isEmpty()) return QDir::homePath(); else return QFileInfo(path).absolutePath(); } QString c2bFileDialog::_dirpath(const QString& path) { if (path.isEmpty()) return QDir::homePath(); else return QFileInfo(path + '/').absolutePath(); } /*************************************************************************** Class fileIconProvider ***************************************************************************/ fileIconProvider::fileIconProvider() : QFileIconProvider() { _exec_icon = QIcon(":/icons/icons/application-x-executable.png"); } fileIconProvider::~fileIconProvider() {} QIcon fileIconProvider::icon(const QFileInfo& info) const { if (info.isExecutable() && !info.isDir()) return _exec_icon; else return QFileIconProvider::icon(info); } �������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/clipboardPoll.h����������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016051� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.875255973 30 atime=1498583183.003254785 30 ctime=1498583182.879255936 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/clipboardPoll.h��������������������������������������������������������������������0000644�0001750�0000144�00000004771�13124510216�017454� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * clipboardPoll, modified by Pere Constans for the cb2Bib, 2005 * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * * * Author and Copyright (C) 2003 by Lubos Lunak <l.lunak@kde.org> * Distributed under the GNU General Public License * * * This file is part of the KDE project * Copyright (C) 2003 by Lubos Lunak <l.lunak@kde.org> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. ***************************************************************************/ #ifndef CLIPBOARDPOLL_H #define CLIPBOARDPOLL_H #include <QApplication> #include <QWidget> #include <QTimer> #include <X11/Xlib.h> #undef Bool // Workaround for unqualified-id before 'int' for bool signal and slot /** @author Lubos Lunak */ class clipboardPoll : public QWidget { Q_OBJECT public: explicit clipboardPoll(QWidget* parentw = 0); ~clipboardPoll(); inline void startT(uint interval) { timer->start(interval); } inline void stopT() { timer->stop(); } signals: void clipboardChanged(bool selectionMode); protected: virtual bool x11Event(XEvent*); private slots: void timeout(); private: struct SelectionData { Atom atom; Atom sentinel_atom; Atom timestamp_atom; Window last_owner; bool owner_is_qt; Time last_change; bool waiting_for_timestamp; Time waiting_x_time; }; Atom xa_clipboard; Atom xa_timestamp; bool changedTimestamp(SelectionData& sData, const XEvent& ev); bool checkTimestamp(SelectionData& sData); QTimer* timer; SelectionData clipboard; SelectionData selection; void updateQtOwnership(SelectionData& sData); }; #endif �������cb2bib-1.9.7/src/PaxHeaders.3194/c2bFileSystemWatcher.cpp�������������������������������������������0000644�0000000�0000000�00000000132�13124510216�017607� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.755257087 30 atime=1498583183.003254785 30 ctime=1498583182.759257049 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bFileSystemWatcher.cpp�����������������������������������������������������������0000644�0001750�0000144�00000001605�13124510216�021203� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bFileSystemWatcher.h" #include <QTimer> /** Workaround to avoid reading a file when external writing has not yet finished */ c2bFileSystemWatcher::c2bFileSystemWatcher(QObject* parento) : QObject(parento) { connect(&_filewatcher, SIGNAL(fileChanged(const QString&)), this, SLOT(waitForSaved(const QString&))); } void c2bFileSystemWatcher::waitForSaved(const QString& path) { _path = path; QTimer::singleShot(500, this, SLOT(fileSaved())); } void c2bFileSystemWatcher::fileSaved() { emit fileChanged(_path); } ���������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bCiterModel.h����������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�015701� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.819256493 30 atime=1498583183.003254785 30 ctime=1498583182.819256493 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bCiterModel.h��������������������������������������������������������������������0000644�0001750�0000144�00000016642�13124510216�017304� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCITERMODEL_H #define C2BCITERMODEL_H #include "c2bCiter.h" #include "c2bCiterHistory.h" #include <collectionAnalyzer.h> #include <QAbstractTableModel> #include <QColor> #include <QHash> #include <QStringList> #include <QVector> class c2bCiterModel : public QAbstractTableModel { Q_OBJECT public: explicit c2bCiterModel(QObject* parento = 0); inline ~c2bCiterModel() {} QList<int> sizeHintForColumns() const; QStringList dataSelectedCiteIds() const; QVariant data(const QModelIndex& i, int role = Qt::DisplayRole) const; c2bCiter::State currentState(const QModelIndex& current_index) const; void clearCurrentFilter(QModelIndex* current_index); void clearSelection(); void loadCitations(const QString& fn); void loadCitations(const QStringList& fns); void reloadCitations(const QStringList& fns, const c2bCiter::State& state, QModelIndex* current_index); void restoreNextState(QModelIndex* current_index); void restorePreviousState(QModelIndex* current_index); void restoreState(const c2bCiter::State& s, QModelIndex* current_index); void setDocumentFilter(const QString& documentfn, QModelIndex* current_index); void setGlossaryView(QModelIndex* current_index); void setKeywordFilter(const QString& keyword, QModelIndex* current_index); void setPatternFilter(const QString& pattern, QModelIndex* current_index, const c2bCiter::Format format); void setRelatedFilter(const QString& documentfn, QModelIndex* current_index, const c2bCiter::Format format = c2bCiter::R); void setSelectedFilter(QModelIndex* current_index); void updateFormat(const c2bCiter::Format format, QModelIndex* current_index); inline QString dataBibTeXPosition(const QModelIndex& i) const { if (_is_index_valid(i)) return _bibtex_position.at(_offset(i.row())); else return QString(); } inline QString dataBibTeXFile(const QModelIndex& i) const { return dataBibTeXPosition(i).remove(QRegExp(":(\\d+)$")); } inline QString dataFile(const QModelIndex& i) const { if (_is_index_valid(i)) return _file.key(_offset(i.row())); else return QString(); } inline QString dataUrl(const QModelIndex& i) const { if (_is_index_valid(i)) return _url.at(_offset(i.row())); else return QString(); } inline QString dataKeyword(const QModelIndex& i) const { if (_format == c2bCiter::K && _is_index_valid(i)) return _analyzer.sentence(_offset(i.row())); else return QString(); } inline c2bCiter::KeywordData keywordData(const QModelIndex& i) const { c2bCiter::KeywordData kd; if (_filter == c2bCiter::Document && _format == c2bCiter::K) { kd.bibtexfn = QString(_bibtex_position.at(_file.value(_fstring))).remove(QRegExp(":(\\d+)$")); kd.documentfn = _fstring; kd.keyword = dataKeyword(i); } else if (_filter == c2bCiter::Keyword) { kd.bibtexfn = dataBibTeXFile(i); kd.documentfn = dataFile(i); kd.keyword = _fstring; } kd.valid = !kd.bibtexfn.isEmpty() && !kd.documentfn.isEmpty() && !kd.keyword.isEmpty(); return kd; } inline bool isKeywordView() const { return _format == c2bCiter::K; } inline Qt::ItemFlags flags(const QModelIndex& /* i */) const { return Qt::ItemIsSelectable | Qt::ItemIsEnabled; } inline int count() const { return _row_count; } inline int rowCount(const QModelIndex& /* parent */ = QModelIndex()) const { return _row_count; } inline int columnCount(const QModelIndex& /* parent */ = QModelIndex()) const { return _column_count; } inline c2bCiter::Filter currentFilter() const { return _filter; } inline c2bCiter::Format currentFormat() const { return _format; } inline c2bCiter::Format lastCitationFormat() const { return _history.lastCitationFormat(); } inline void restoreLastNonKeywordState(QModelIndex* current_index) { restoreState(_history.lastNonKeywordState(), current_index); } inline void restoreLastNonSelectedState(QModelIndex* current_index) { restoreState(_history.lastNonSelectedState(), current_index); } public slots: void selectCitation(const QModelIndex& i); signals: void patternFilterChanged(const QString& pattern); void statusLabel(const QString& label); void statusMessage(const QString& message); private: Q_DISABLE_COPY(c2bCiterModel) QColor _first_column_color; QString _display_ajyt(const int row, const int column) const; QString _display_it(const int row, const int column) const; QString _display_jya(const int row, const int column) const; QString _display_k(const int row, const int column) const; QString _display_r(const int row, const int column) const; QString _display_t(const int row, const int column) const; QString _display_yajt(const int row, const int column) const; QString(c2bCiterModel::*_display_ptr)(const int row, const int column) const; int _current_item(const QString& index_data) const; int _offset(const int i) const; void _add_citations(const QString& fn); void _clear(); void _set_mapping(); void _set_sort_indices(); void _set_table_data(); void _update_current_index(const int current_item, QModelIndex* current_index) const; void _update_format(const c2bCiter::Format format = c2bCiter::AJYT); inline bool _is_index_valid(const QModelIndex& i) const { const int r(i.row()); return _row_count > 0 && r >= 0 && r < _row_count; } inline int _current_item(const QModelIndex& current_index) const { return _is_index_valid(current_index) ? _offset(current_index.row()) : -1; } inline int _current_item(const QModelIndex* const current_index) const { return current_index ? _current_item(*current_index) : -1; } // Collection analyzer helper collectionAnalyzer _analyzer; // History helper QString _fstring; c2bCiter::Filter _filter; c2bCiter::Format _format; c2bCiterHistory _history; // Model data QHash<QString, int> _file; QList<uint> _included_date; QStringList _author_string; QStringList _bibtex_position; QStringList _citeId; QStringList _journal; QStringList _title; QStringList _url; QStringList _year; QVector<QString> _author; QVector<QString> _search_string; QVector<bool> _is_selected; QVector<bool> _matches_filter; QVector<int> _map_ajyt; QVector<int> _map_author; QVector<int> _map_filter; QVector<int> _map_it; QVector<int> _map_jya; QVector<int> _map_t; QVector<int> _map_yajt; QVector<int>* _mapping; int _author_count; int _author_max_length; int _citation_count; int _column_count; int _journal_max_length; int _keyword_count; int _related_count; int _row_count; }; #endif ����������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/win����������������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�013632� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.995254858 30 atime=1498583183.003254785 30 ctime=1498583182.995254858 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/win/�������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�13124510216�015301� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/win/PaxHeaders.3194/main.cpp�������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�015337� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.991254896 30 atime=1498583183.003254785 30 ctime=1498583182.991254896 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/win/main.cpp�����������������������������������������������������������������������0000644�0001750�0000144�00000001445�13124510216�016735� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "WinConsole.h" #include <QCoreApplication> #include <QFileInfo> int main(int argc, char* argv[]) { if (argc < 1) return 1; QFileInfo fi(argv[0]); const QString exe(fi.absolutePath() + "/cb2bib.exe"); QStringList arguments; for (int i = 1; i < argc; ++i) arguments.append(argv[i]); QCoreApplication a(argc, argv); WinConsole wc; const int code(wc.execute(exe, arguments)); return code; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/win/PaxHeaders.3194/WinConsole.h���������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016140� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.991254896 30 atime=1498583183.003254785 30 ctime=1498583182.995254858 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/win/WinConsole.h�������������������������������������������������������������������0000644�0001750�0000144�00000001274�13124510216�017536� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef WINCONSOLE_H #define WINCONSOLE_H #include <QProcess> class WinConsole : public QObject { Q_OBJECT public: explicit WinConsole(QObject* parento = 0); ~WinConsole(); int execute(const QString& program, const QStringList& arguments); private slots: void output(); private: QProcess _process; }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/win/PaxHeaders.3194/WinConsole.cpp�������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016473� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.991254896 30 atime=1498583183.003254785 30 ctime=1498583182.991254896 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/win/WinConsole.cpp�����������������������������������������������������������������0000644�0001750�0000144�00000002371�13124510216�020070� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "WinConsole.h" #include <QEventLoop> #include <fcntl.h> #include <io.h> #include <iostream> WinConsole::WinConsole(QObject* parento) : QObject(parento) { _setmode(_fileno(stdout), _O_U16TEXT); } WinConsole::~WinConsole() {} int WinConsole::execute(const QString& program, const QStringList& arguments) { QEventLoop eventloop(this); _process.setProcessChannelMode(QProcess::MergedChannels); connect(&_process, SIGNAL(readyReadStandardOutput()), this, SLOT(output())); connect(&_process, SIGNAL(finished(int, QProcess::ExitStatus)), &eventloop, SLOT(quit())); _process.start(program, arguments); if (_process.waitForStarted()) eventloop.exec(); output(); std::wcout << std::endl; return _process.exitCode(); } void WinConsole::output() { while (_process.canReadLine()) std::wcout << QString::fromUtf8(_process.readLine()).toStdWString(); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/win/PaxHeaders.3194/win.pro��������������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�015230� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.003254785 29 ctime=1498583182.67525783 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/win/win.pro������������������������������������������������������������������������0000644�0001750�0000144�00000000175�13124510115�016621� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������QT = core CONFIG += console TEMPLATE = app TARGET = ../c2bconsole HEADERS += WinConsole.h SOURCES += WinConsole.cpp main.cpp ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/main.cpp�����������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�014542� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.799256679 30 atime=1498583183.003254785 30 ctime=1498583182.799256679 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/main.cpp���������������������������������������������������������������������������0000644�0001750�0000144�00000006610�13124510216�016137� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "qtsingleapplication/src/qtsingleapplication.h" #include "qtsingleapplication/src/qtsinglecoreapplication.h" #include "c2bConfigure.h" #include "c2bConsole.h" #include "c2bSettings.h" #include "cb2Bib.h" #ifdef C2B_USE_QWEB #include "c2bAnnote.h" #endif int main(int argc, char* argv[]) { Q_INIT_RESOURCE(cb2bib); Q_INIT_RESOURCE(c2blib); c2bSettings* c2b_settings; // Delete before app, this avoids QVariant::save: unable to save type 67/64 int code(0); if (c2bSettings::isConsoleMode(argc, argv)) { // Cannot use QCoreApplication, QTextDocument is required by c2bUtils::fromHtmlString // Needs also workaround c2bSettings::decodeFilename() QApplication app(argc, argv); app.setOrganizationName(C2B_ORGANIZATION); app.setApplicationName(C2B_APPLICATION); c2b_settings = c2bSettings::initSettings(); if (c2b_settings->loaded()) { c2bConsole c2B; c2B.load(); code = app.exec(); } delete c2b_settings; } else if (c2bSettings::isSingleApplicationMode(argc, argv)) { // Avoid connecting to the graphic server. On Windows it would create a void window. { QtSingleCoreApplication* capp = new QtSingleCoreApplication(argc, argv); const bool is_running = capp->sendMessage(QString()); delete capp; if (is_running) return code; } QtSingleApplication app(argc, argv); if (app.isRunning()) // Activate local peer return code; app.setQuitOnLastWindowClosed(false); app.setOrganizationName(C2B_ORGANIZATION); app.setApplicationName(C2B_APPLICATION); c2b_settings = c2bSettings::initSettings(); if (c2b_settings->loaded()) { cb2Bib c2B; c2B.show(); QObject::connect(&app, SIGNAL(messageReceived(const QString&)), &c2B, SLOT(show())); code = app.exec(); } delete c2b_settings; } else { QApplication app(argc, argv); app.setOrganizationName(C2B_ORGANIZATION); app.setApplicationName(C2B_APPLICATION); c2b_settings = c2bSettings::initSettings(); if (c2b_settings->loaded()) { if (c2b_settings->cl_cb2bib_import_mode) code = app.exec(); else if (c2b_settings->cl_configure) { c2bConfigure c2B; c2B.show(); code = app.exec(); } else if (c2b_settings->cl_view_annote) { #ifdef C2B_USE_QWEB c2bAnnote c2B; if (c2B.show()) code = app.exec(); #else fprintf(stdout, "The cb2Bib Annote is disabled. Recompile using QtWebKit or QtWebEngine library.\n"); #endif } else { cb2Bib c2B; c2B.show(); code = app.exec(); } } delete c2b_settings; } return code; } ������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bCiterExcerptView.cpp��������������������������������������������0000644�0000000�0000000�00000000132�13124510216�017441� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.731257309 30 atime=1498583183.003254785 30 ctime=1498583182.731257309 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bCiterExcerptView.cpp������������������������������������������������������������0000644�0001750�0000144�00000004513�13124510216�021036� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bCiterExcerptView.h" #include "c2bSettings.h" #include "c2bTextBrowser.h" #include "c2bUtils.h" #include <QGridLayout> c2bCiterExcerptView::c2bCiterExcerptView(const QString& html, QWidget* parentw) : QDialog(parentw) { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowTitle(tr("Document Excerpt - cb2Bib")); QGridLayout* gl; gl = new QGridLayout(this); gl->setContentsMargins(0, 0, 0, 0); _browserP = new c2bTextBrowser(this); gl->addWidget(_browserP, 0, 0, 1, 1); c2bSettings* settings(c2bSettingsP); resize(settings->value("c2bCiterExcerptView/size", QSize(500, 500)).toSize()); move(settings->value("c2bCiterExcerptView/position", pos()).toPoint()); _browserP->setFont(QFont(QFont().family(), settings->value("c2bCiterExcerptView/BrowserFontPointSize", QFont().pointSize()).toInt())); QString css(c2bUtils::fileToString(settings->fileName("cb2Bib/BrowserCssFile"))); if (css.isEmpty()) css = c2bUtils::fileToString(":/htm/htm/references.css"); _browserP->document()->setDefaultStyleSheet(css); QAction* c(new QAction(this)); c->setShortcut(QKeySequence(Qt::Key_Left)); addAction(c); connect(c, SIGNAL(triggered()), this, SLOT(close())); QAction* vzi(new QAction(this)); vzi->setShortcut(QKeySequence(QKeySequence::ZoomIn)); addAction(vzi); connect(vzi, SIGNAL(triggered()), _browserP, SLOT(zoomIn())); QAction* vzo(new QAction(this)); vzo->setShortcut(QKeySequence(QKeySequence::ZoomOut)); addAction(vzo); connect(vzo, SIGNAL(triggered()), _browserP, SLOT(zoomOut())); _browserP->updateHtml(html); } c2bCiterExcerptView::~c2bCiterExcerptView() { c2bSettings* settings(c2bSettingsP); if (!isFullScreen()) { settings->setValue("c2bCiterExcerptView/position", pos()); settings->setValue("c2bCiterExcerptView/size", size()); } settings->setValue("c2bCiterExcerptView/BrowserFontPointSize", _browserP->font().pointSize()); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bSearchInFilesPattern.ui�����������������������������������������0000644�0000000�0000000�00000000073�13124510115�020057� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.003254785 29 ctime=1498583182.64725809 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bSearchInFilesPattern.ui���������������������������������������������������������0000644�0001750�0000144�00000011060�13124510115�021443� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <author>Pere Constans</author> <class>c2bSearchInFilesPattern</class> <widget class="QWidget" name="c2bSearchInFilesPattern"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>687</width> <height>83</height> </rect> </property> <property name="windowTitle"> <string>Pattern</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>0</number> </property> <property name="topMargin"> <number>0</number> </property> <property name="rightMargin"> <number>0</number> </property> <property name="bottomMargin"> <number>0</number> </property> <property name="spacing"> <number>6</number> </property> <item row="1" column="0" colspan="8"> <widget class="Line" name="line"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="0" column="0" colspan="8"> <layout class="QHBoxLayout"> <property name="spacing"> <number>6</number> </property> <property name="leftMargin"> <number>0</number> </property> <property name="topMargin"> <number>0</number> </property> <property name="rightMargin"> <number>0</number> </property> <property name="bottomMargin"> <number>0</number> </property> <item> <widget class="c2bLineEdit" name="inputPattern"/> </item> <item> <widget class="QToolButton" name="clearB"> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/clear_left.png</normaloff>:/icons/icons/clear_left.png</iconset> </property> </widget> </item> </layout> </item> <item row="2" column="7"> <spacer> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>16</width> <height>20</height> </size> </property> </spacer> </item> <item row="2" column="2"> <widget class="QLabel" name="label"> <property name="text"> <string>Type:</string> </property> </widget> </item> <item row="2" column="0"> <widget class="QCheckBox" name="NOT"> <property name="text"> <string>&NOT</string> </property> </widget> </item> <item row="2" column="4"> <widget class="QLabel" name="label_2"> <property name="text"> <string>Scope:</string> </property> </widget> </item> <item row="2" column="3"> <widget class="QComboBox" name="patternType"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> </widget> </item> <item row="2" column="1"> <widget class="QCheckBox" name="caseSensitive"> <property name="text"> <string>&Case sensitive</string> </property> </widget> </item> <item row="2" column="6"> <widget class="QComboBox" name="yearScope"> <item> <property name="text"> <string>Exact</string> </property> </item> <item> <property name="text"> <string>Newer</string> </property> </item> <item> <property name="text"> <string>Older</string> </property> </item> </widget> </item> <item row="2" column="5"> <widget class="QComboBox" name="patternScope"> <item> <property name="text"> <string>all</string> </property> </item> </widget> </item> </layout> </widget> <customwidgets> <customwidget> <class>c2bLineEdit</class> <extends>QLineEdit</extends> <header>c2bLineEdit.h</header> </customwidget> </customwidgets> <resources> <include location="cb2bib.qrc"/> </resources> <connections> <connection> <sender>clearB</sender> <signal>clicked()</signal> <receiver>inputPattern</receiver> <slot>clear()</slot> <hints> <hint type="sourcelabel"> <x>639</x> <y>19</y> </hint> <hint type="destinationlabel"> <x>402</x> <y>9</y> </hint> </hints> </connection> <connection> <sender>clearB</sender> <signal>clicked()</signal> <receiver>inputPattern</receiver> <slot>setFocus()</slot> <hints> <hint type="sourcelabel"> <x>629</x> <y>27</y> </hint> <hint type="destinationlabel"> <x>477</x> <y>24</y> </hint> </hints> </connection> </connections> </ui> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bCollectionIndex.cpp���������������������������������������������0000644�0000000�0000000�00000000132�13124510216�017270� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.739257236 30 atime=1498583183.003254785 30 ctime=1498583182.739257236 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bCollectionIndex.cpp�������������������������������������������������������������0000644�0001750�0000144�00000006707�13124510216�020674� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bCollectionIndex.h" #include "c2bSettings.h" #include "c2bUtils.h" #include <QPushButton> c2bCollectionIndex::c2bCollectionIndex(QWidget* parentw) : QDialog(parentw), _indexerP(0) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowTitle(tr("Documents Indexing Log - cb2Bib")); ui.Log->setFont(c2bSettingsP->c2bMonoFont); ui.Log->setLineWrapMode(QPlainTextEdit::NoWrap); _buttonAbort = new QPushButton(tr("Abort")); ui.buttonBox->addButton(_buttonAbort, QDialogButtonBox::ActionRole); connect(_buttonAbort, SIGNAL(clicked()), this, SLOT(aborted())); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); resize(c2bSettingsP->value("c2bLogWidget/size", size()).toSize()); } c2bCollectionIndex::~c2bCollectionIndex() { c2bSettingsP->setValue("c2bLogWidget/size", size()); } void c2bCollectionIndex::index() { ui.Log->clear(); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(false); _indexerP = new QProcess(this); _indexerP->setProcessChannelMode(QProcess::MergedChannels); connect(_indexerP, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(indexingEnded(int, QProcess::ExitStatus))); connect(_indexerP, SIGNAL(readyReadStandardOutput()), this, SLOT(addToLog())); const QStringList flags(QStringList() << "--index" << c2bSettingsP->confCommandFlags()); _indexerP->start(QCoreApplication::applicationFilePath(), flags); if (!_indexerP->waitForStarted()) { ui.Log->appendPlainText(tr("Failed to call %1.").arg(QCoreApplication::applicationFilePath())); _buttonAbort->setEnabled(false); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(true); ui.buttonBox->button(QDialogButtonBox::Close)->setFocus(); delete _indexerP; _indexerP = 0; } } void c2bCollectionIndex::addToLog() { const QString log(QString::fromUtf8(_indexerP->readAllStandardOutput().trimmed())); if (log.isEmpty()) return; ui.Log->appendPlainText(log); } void c2bCollectionIndex::indexingEnded(int exit_code, QProcess::ExitStatus exit_status) { _buttonAbort->setEnabled(false); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(true); ui.buttonBox->button(QDialogButtonBox::Close)->setFocus(); if (exit_code == 0 && exit_status == QProcess::NormalExit) ui.Log->appendPlainText(tr("\nIndexing ended\nRefresh cb2Bib Citer")); else ui.Log->appendPlainText(tr("\nAbnormal termination")); delete _indexerP; _indexerP = 0; } void c2bCollectionIndex::aborted() { if (_indexerP) _indexerP->kill(); ui.Log->appendPlainText(tr("Aborting...")); } void c2bCollectionIndex::closeEvent(QCloseEvent* qevent) { if (!_indexerP || _indexerP->state() == QProcess::NotRunning) QDialog::closeEvent(qevent); else qevent->ignore(); } void c2bCollectionIndex::reject() { if (!_indexerP || _indexerP->state() == QProcess::NotRunning) QDialog::reject(); } void c2bCollectionIndex::help() { c2bUtils::displayHelp("http://www.molspaces.com/d_cb2bib-c2bciter.php"); } ���������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bTests.h���������������������������������������������������������0000644�0000000�0000000�00000000131�13124510216�014753� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.867256048 30 atime=1498583183.003254785 29 ctime=1498583182.87125601 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bTests.h�������������������������������������������������������������������������0000644�0001750�0000144�00000002537�13124510216�016355� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BTESTS_H #define C2BTESTS_H #include <QString> class QTextStream; class bibParser; class bibReference; /** Test cb2Bib functionality */ class c2bTests { public: c2bTests(); ~c2bTests(); int allTests(); private: QString _bibliographic_dir; QString decomposition(const QChar& c); QTextStream& cout; int _failed_test_count; int _test_count; void author_parser(); void check_test(const bool passed, const QString& input, const QString& output); void compression_check(); void heuristic(bibParser& bp, const bibReference& reference, const QString& text); void heuristic_author(); void heuristic_check_patterns(); void heuristic_journal(); void heuristic_misc(); void heuristic_pvny(); void write(const bibParser& bp, const bibReference& reference); void write_information(); inline const char* boolToStr(bool b) { if (b) return "passed"; else return "failed"; } }; #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bTests.cpp�������������������������������������������������������0000644�0000000�0000000�00000000130�13124510216�015305� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 mtime=1498583182.78725679 30 atime=1498583183.003254785 29 ctime=1498583182.78725679 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bTests.cpp�����������������������������������������������������������������������0000644�0001750�0000144�00000123247�13124510216�016712� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #define C2B_CHECK_CAPITALIZATION 0 #define C2B_CHECK_CODE_DECOMPOSITION 0 #define C2B_CHECK_JOURNALS 0 #define C2B_CHECK_PATTERNS 0 #define C2B_CHECK_PDF_CODES 0 #include "c2bTests.h" #include <authorString.h> #include <bibParser.h> #include <document.h> #include <settings.h> #include <QCoreApplication> #include <QDataStream> #include <QTextStream> c2bTests::c2bTests() : cout(*(new QTextStream(stdout))) { cout.setCodec("UTF-8"); cout << "============" << endl; cout << "cb2Bib tests" << endl; cout << "============" << endl; _bibliographic_dir = QFileInfo(settings::instance()->fileName("cb2Bib/BibTeXFile")).absolutePath(); } c2bTests::~c2bTests() { cout << endl; cout << "=================" << endl; cout << "cb2Bib tests done" << endl; cout << "=================" << endl << endl; delete &cout; } int c2bTests::allTests() { _test_count = 0; _failed_test_count = 0; #if C2B_CHECK_PATTERNS heuristic_check_patterns(); return 0; #endif #if C2B_CHECK_JOURNALS heuristic_journal(); #else author_parser(); heuristic_pvny(); heuristic_misc(); heuristic_author(); heuristic_check_patterns(); compression_check(); write_information(); #endif cout << endl << endl; cout << "Tests done. Tests: " << _test_count << " Failed: " << _failed_test_count << endl; return 0; } void c2bTests::compression_check() { QString test; test += QChar(100); test += QChar(200); test += QChar(8700); test += QChar(56200); test += QChar(57000); test += QChar(10); test += QChar(100); test += QChar(200); test += QChar(8700); test += QChar(56200); test += QChar(57000); test += QChar(10); QByteArray ba = test.toUtf8(); bool passed(c2bUtils::fromUtf8(ba) == QString::fromUtf8(ba)); cout << endl; if (passed) { cout << "-------------------------" << endl; cout << "Check for c2b utf8 passed" << endl; } else { cout << "-------------------------------------------------------------" << endl; cout << "WARNING: Check for c2b utf8 FAILED! Please report it as a bug" << endl; ++_failed_test_count; } ++_test_count; ba += "--------------------------------------"; QByteArray cba(c2bUtils::compress(ba)); QByteArray uba(c2bUtils::uncompress(cba)); passed = ba == uba && ba.length() > cba.length(); if (passed) { cout << "Check for zlib/lzo passed" << endl; cout << "-------------------------" << endl; } else { cout << "WARNING: Check for zlib/lzo FAILED! Please report it as a bug" << endl; cout << "-------------------------------------------------------------" << endl; ++_failed_test_count; } ++_test_count; } void c2bTests::write_information() { cout << endl; cout << "-------------------------" << endl; cout << "Miscellaneous information" << endl; cout << "-------------------------" << endl; cout << endl; cout << "Version: cb2bib " << C2B_VERSION << endl; #ifdef C2B_USE_LZO cout << "Compression: lzo2" << endl; #else cout << "Compression: zlib" << endl; #endif #if QT_VERSION >= 0x050400 cout << "Optimized PCRE: yes" << endl; #else cout << "Optimized PCRE: no" << endl; #endif #ifdef C2B_USE_QWEBKIT cout << "Compiled against QtWebKit: yes" << endl; #else cout << "Compiled against QtWebKit: no" << endl; #endif #ifdef C2B_USE_QWEBENGINE cout << "Compiled against QtWebEngine: yes" << endl; #else cout << "Compiled against QtWebEngine: no" << endl; #endif #ifdef C2B_USE_CBPOLL cout << "Clipboard polling: yes" << endl; #else cout << "Clipboard polling: no" << endl; #endif cout << "Application binary path: " << QCoreApplication::instance()->applicationDirPath() << endl; cout << "Application hardcoded data path: " << C2B_DATA_DIR << endl; #ifdef Q_OS_MACOS QString C2B_DATA_DIR_MAC(C2B_DATA_DIR); if (QDir(C2B_DATA_DIR + "/data/").exists()) C2B_DATA_DIR_MAC = QDir::cleanPath(C2B_DATA_DIR + '/'); else if (QDir(QCoreApplication::instance()->applicationDirPath() + "/../Resources/data/").exists()) C2B_DATA_DIR_MAC = QDir::cleanPath(QCoreApplication::instance()->applicationDirPath() + "/../Resources/"); cout << "Application macosx data path: " << C2B_DATA_DIR_MAC << endl; #endif cout << endl; } void c2bTests::heuristic_author() { cout << endl; cout << "---------------------------------" << endl; cout << "Test heuristic author recognition" << endl; cout << "---------------------------------" << endl; QFileInfoList flist = QDir(_bibliographic_dir).entryInfoList(QStringList() << "*.bib"); bibParser bp; bibReference reference; QStringList fields; fields.append("author"); fields.append("editor"); bp.initReferenceParsing(_bibliographic_dir, fields, &reference); #if C2B_CHECK_CAPITALIZATION for (int f = 0; f < flist.count(); ++f) { const QString bib_file(flist.at(f).absoluteFilePath()); bp.initReferenceParsing(_bibliographic_dir, fields, &reference); cout << "File: " << bib_file << endl; while (bp.referencesIn(c2bUtils::fileToString(bib_file), &reference)) { const QString author(reference.value("author")); if (author.isEmpty()) continue; bp.clearCurrentReference(); bp.guessFields(author); const QString guess(bp.currentReference().value("author")); const bool passed(guess == author); ++_test_count; if (!passed) ++_failed_test_count; cout << QString("[%1]\t'%2'\n").arg(boolToStr(passed)).arg(author); if (!passed) cout << QString("\t'%1'\n").arg(guess); } } return; #endif #if C2B_CHECK_CODE_DECOMPOSITION for (int u = 1; u < 78790; ++u) { const QChar c(u); if (!c.isLetter()) continue; if (c.decompositionTag() == QChar::NoDecomposition) continue; const QString dc(c.decomposition()); if (dc.length() != 2) continue; if (dc.at(0).isLetter() && dc.at(1).isLetter()) cout << '[' << c << ']' << " u: " << u << " decompose: " << decomposition(c) << " category: " << c.category() << endl; } return; #endif #if C2B_CHECK_PDF_CODES QMap<QChar, long long> charfreq; long long char_count = 0; for (int f = 0; f < flist.count(); ++f) { const QString bib_file(flist.at(f).absoluteFilePath()); fields.append("file"); bp.initReferenceParsing(_bibliographic_dir, fields, &reference); cout << "File: " << bib_file << endl; while (bp.referencesIn(c2bUtils::fileToString(bib_file), &reference)) { const QString file(reference.value("file")); document d(file, document::Raw); const QString doc(d.toString()); for (int i = 0; i < doc.length(); ++i) { if (doc.at(i).unicode() > 800 && doc.at(i).unicode() < 900) { cout << "At file: " << file << endl; cout << '[' << doc.at(i) << "] " << doc.mid(i - 10, 20) << endl; } charfreq.insert(doc.at(i), 1 + charfreq.value(doc.at(i), 0)); } char_count += doc.length(); } } QList<QChar> cl = charfreq.keys(); for (int i = 0; i < cl.count(); ++i) cout << '[' << cl.at(i) << ']' << " u: " << cl.at(i).unicode() << " letter: " << cl.at(i).isLetter() << " decompose: " << decomposition(cl.at(i)) << " category: " << cl.at(i).category() << " f: " << charfreq.value(cl.at(i)) << endl; cout << "\nTotal characters: " << char_count << endl; return; #endif cout << endl; cout << "----------------------------------------" << endl; cout << "Test heuristic author recognition on PDF" << endl; cout << "----------------------------------------" << endl; cout << endl; cout << "Checking files at: " << _bibliographic_dir << endl; const QStringList excluded(c2bUtils::fileToString(_bibliographic_dir + "/c2b_test_exclude.txt") .split(QRegExp("[\\n\\r]"), QString::SkipEmptyParts)); QHash<QString, QString> doc_cache; const QString doc_cache_fn(_bibliographic_dir + "/c2b_test.cache"); if (QFileInfo(doc_cache_fn).exists()) { cout << "Reading from cache" << endl; QFile file(doc_cache_fn); file.open(QIODevice::ReadOnly); QDataStream ds(&file); ds >> doc_cache; } else { for (int f = 0; f < flist.count(); ++f) { const QString bib_file(flist.at(f).absoluteFilePath()); fields.append("file"); bp.initReferenceParsing(_bibliographic_dir, fields, &reference); cout << "File: " << bib_file << endl; while (bp.referencesIn(c2bUtils::fileToString(bib_file), &reference)) { const QString file(reference.value("file")); if (excluded.contains(file) || file.contains("/stacks/")) continue; document d(file, document::FirstPage); const QString doc(d.toString()); doc_cache.insert(reference.value("file"), doc); } } if (doc_cache.size() > 0) { QFile file(doc_cache_fn); file.open(QIODevice::WriteOnly); QDataStream ds(&file); ds << doc_cache; cout << "Writing cache " << doc_cache_fn << endl; cout << "Delete cache when done" << endl; } } cout << "Check authors" << endl; int n_pdf(0); int n_failed_pdf(0); for (int f = 0; f < flist.count(); ++f) { const QString bib_file(flist.at(f).absoluteFilePath()); fields.append("file"); bp.initReferenceParsing(_bibliographic_dir, fields, &reference); cout << "File: " << bib_file << endl; while (bp.referencesIn(c2bUtils::fileToString(bib_file), &reference)) { const QString file(reference.value("file")); if (file.isEmpty()) continue; if (excluded.contains(file) || file.contains("/stacks/")) continue; const QString doc(doc_cache.value(reference.value("file"))); QString check_doc(doc); check_doc.remove(c2bUtils::nonAsciiLetter); if (check_doc.isEmpty()) continue; const QString author(reference.value("author")); bp.clearCurrentReference(); bp.guessFields(doc); const QString guess(bp.currentReference().value("author")); bool passed(guess == author); if (!passed) { QString author_ascii(c2bUtils::toAscii(author, c2bUtils::Cleanup)); QString guess_ascii(c2bUtils::toAscii(guess, c2bUtils::Cleanup)); passed = guess_ascii == author_ascii; if (passed) cout << QString("[%1*] '%2'\n").arg(boolToStr(passed)).arg(author); else cout << QString("[%1] '%2'\n").arg(boolToStr(passed)).arg(author); if (!passed) { qDebug() << author; qDebug() << guess; qDebug() << reference.value("file"); qDebug() << "DOCUMENT: \n" << doc << endl << endl; // for (int i = 0; i < doc.count(); ++i) // cout << '[' << doc.at(i) << ']' << " u: " << doc.at(i).unicode() << " letter: " << // doc.at(i).isLetter() << endl; } cout << QString(" '%1'\n").arg(guess); } else cout << QString("[%1] '%2'\n").arg(boolToStr(passed)).arg(author); ++n_pdf; if (!passed) ++n_failed_pdf; } } cout << "PDF Tests: " << n_pdf << endl; cout << "Succeded: " << n_pdf - n_failed_pdf << endl; _test_count += n_pdf; _failed_test_count += n_failed_pdf; } void c2bTests::heuristic_journal() { #if C2B_CHECK_JOURNALS cout << endl; cout << "-----------------------------------------" << endl; cout << "Test heuristic journal recognition on PDF" << endl; cout << "-----------------------------------------" << endl; cout << endl; cout << "Checking files at: " << _bibliographic_dir << endl; QFileInfoList flist = QDir(_bibliographic_dir).entryInfoList(QStringList() << "*.bib"); bibParser bp; bibReference reference; QStringList fields; fields.append("journal"); fields.append("file"); const QStringList excluded(c2bUtils::fileToString(_bibliographic_dir + "/c2b_test_exclude.txt") .split(QRegExp("[\\n\\r]"), QString::SkipEmptyParts)); QHash<QString, QString> doc_cache; const QString doc_cache_fn(_bibliographic_dir + "/c2b_test.cache"); if (QFileInfo(doc_cache_fn).exists()) { cout << "Reading from cache" << endl; QFile file(doc_cache_fn); file.open(QIODevice::ReadOnly); QDataStream ds(&file); ds >> doc_cache; } else { cout << "No cache. Return" << doc_cache_fn << endl; return; } cout << "Check journals" << endl; int n_pdf(0); int n_failed_pdf(0); for (int f = 0; f < flist.count(); ++f) { const QString bib_file(flist.at(f).absoluteFilePath()); bp.initReferenceParsing(_bibliographic_dir, fields, &reference); cout << "File: " << bib_file << endl; while (bp.referencesIn(c2bUtils::fileToString(bib_file), &reference)) { const QString file(reference.value("file")); if (file.isEmpty()) continue; if (excluded.contains(file) || file.contains("/stacks/")) continue; const QString doc(doc_cache.value(file)); QString check_doc(doc); check_doc.remove(c2bUtils::nonAsciiLetter); if (check_doc.isEmpty()) continue; const QString journal(bp.abbreviatedJournal(reference.value("journal"))); if (journal.isEmpty()) continue; if (journal == bp.fullJournal(journal) && (journal.count('.') > 0 || journal.count(' ') > 0)) { qDebug() << "not in db:" << journal; continue; } bp.clearCurrentReference(); bp.guessFields(doc); const QString guess(bp.abbreviatedJournal(bp.currentReference().value("journal"))); if (guess.isEmpty()) continue; bool passed(guess == journal); if (!passed) { cout << QString("[%1] '%2'\n").arg(boolToStr(passed)).arg(journal); cout << QString(" '%1'\n").arg(guess); qDebug() << "jn:" << journal; qDebug() << "gn:" << guess; qDebug() << reference.value("file"); qDebug() << "DOCUMENT: \n" << doc << endl << endl; } else cout << QString("[%1] '%2'\n").arg(boolToStr(passed)).arg(journal); ++n_pdf; if (!passed) ++n_failed_pdf; } } cout << "PDF Tests: " << n_pdf << endl; cout << "Succeded: " << n_pdf - n_failed_pdf << endl; _test_count += n_pdf; _failed_test_count += n_failed_pdf; #endif } void c2bTests::author_parser() { cout << endl; cout << "------------------" << endl; cout << "Test author parser" << endl; cout << "------------------" << endl; bibParser bp; QString author; QString input; author = "J.-L. Smith and R. Jones and K. McGibbons"; input = "SMITH, J.-L., R. JONES, AND K. MCGIBBONS"; check_test(author == bp.parse("author", input), input, author); input = "Smith, J.-L., Jones, R., and McGibbons, K."; check_test(author == bp.parse("author", input), input, author); input = "Smith, J.-L., Jones, R., McGibbons, K."; check_test(author == bp.parse("author", input), input, author); author = "J. L. Brooks Jr"; input = "Brooks Jr, John L"; check_test(author == bp.parse("author", input), input, author); author = "E. B. Melissa and W. F. Tohnson Jr and C. Z. Ortiz and S. J. van der Burgh"; input = "Melissa, Elizabeth Baines; Tohnson, Walter F., Jr.; Zapa Ortiz, Carlos; van der Burgh, S. J."; check_test(author == bp.parse("author", input), input, author); input = "Melissa, E.B., Tohnson Jr, Walter F., Zapa Ortiz, C., van der Burgh, S. J."; check_test(author == bp.parse("author", input), input, author); input = "Melissa, E.B., Tohnson Jr, Walter F., Zapa Ortiz, C., and van der Burgh, S. J."; check_test(author == bp.parse("author", input), input, author); author = "B. B. Aaaaaaa"; input = "Aaaaaaa, BB"; check_test(author == bp.parse("author", input), input, author); author = "J. R. Aaaaaaa"; // input = "Aaaaaaa, JR"; // Gives wrong processing of the initials JR // check_test(author == bp.parse("author", input), input, author); author = "J. Pi"; input = "Joan Pi"; check_test(author == bp.parse("author", input), input, author); input = "JOAN PI"; check_test(author == bp.parse("author", input), input, author); author = "P. I. Joan"; input = "Joan PI"; check_test(author == bp.parse("author", input), input, author); author = "C. V. Pi"; input = "Carles Vidal Pi"; check_test(author == bp.parse("author", input), input, author); input = "Carles VIDAL PI"; check_test(author == bp.parse("author", input), input, author); input = "Vidal Pi, Carles"; check_test(author == bp.parse("author", input), input, author); input = "Pi, Carles Vidal"; check_test(author == bp.parse("author", input), input, author); input = "PI, CARLES VIDAL"; check_test(author == bp.parse("author", input), input, author); author = "C. V. Pi and M. R. Catala"; input = "Carles Vidal Pi, Maria Rosa Catala"; check_test(author == bp.parse("author", input), input, author); input = "Vidal Pi, Carles and Catala, Maria Rosa"; check_test(author == bp.parse("author", input), input, author); input = "Vidal Pi, Carles and Catala, MR"; check_test(author == bp.parse("author", input), input, author); input = "VIDAL PI, Carles and CATALA, MR"; check_test(author == bp.parse("author", input), input, author); input = "Vidal Pi, Carles and Catala, M.R."; check_test(author == bp.parse("author", input), input, author); author = "C. V. Pi and M. R. Catala"; input = "Carles Vidal Pi, Maria Ros Catala"; check_test(author == bp.parse("author", input), input, author); input = "Carles VIDAL PI, Maria ROS CATALA"; check_test(author == bp.parse("author", input), input, author); input = "Vidal Pi, Carles and Ros Catala, Maria"; check_test(author == bp.parse("author", input), input, author); author = "M. R. R. Catala"; input = "Maria Rosa Ros Catala"; check_test(author == bp.parse("author", input), input, author); input = "Ros Catala, MR"; check_test(author == bp.parse("author", input), input, author); input = "Ros Catala, M R"; check_test(author == bp.parse("author", input), input, author); input = "Ros Catala, M. R."; check_test(author == bp.parse("author", input), input, author); author = "M. d'Errico"; input = "Monica d'Errico"; check_test(author == bp.parse("author", input), input, author); author = "J. V. Mael Jr"; input = "JAMES V. MAEL, Jr."; check_test(author == bp.parse("author", input), input, author); author = "J. V. Mael III"; input = "JAMES V. MAEL, III"; check_test(author == bp.parse("author", input), input, author); author = "V. Yu. Dmitri and A. Karpoff"; input = "VICTOR Yu. DMITRI,3 ANDRIY KARPOFF"; check_test(author == bp.parse("author", input), input, author); author = "Yu. Dmitri and A. Karpoff"; input = "Yu. Dmitri,3 Andriy Karpoff"; check_test(author == bp.parse("author", input), input, author); input = "Yu. DMITRI,3 ANDRIY KARPOFF"; check_test(author == bp.parse("author", input), input, author); input = "YU. DMITRI,3 ANDRIY KARPOFF"; check_test(author == bp.parse("author", input), input, author); cout << "From medline:" << endl; author = "C. L. Maggi III"; input = "Maggi, Carla L., III"; check_test(author == bp.parse("author", input), input, author); input = "Maggi III CL"; check_test(author == bp.parse("author", input), input, author); check_test(author == bp.parse("author", author::fromMedline(input)), input, author); input = "Maggi, Carla L 3rd"; check_test(author == bp.parse("author", author::fromMedline(input)), input, author); input = "Maggi CL 3rd"; check_test(author == bp.parse("author", author::fromMedline(input)), input, author); author = "A. M. C. Lourtau"; input = "Carr Lourtau, A M"; check_test(author == bp.parse("author", input), input, author); check_test(author == bp.parse("author", author::fromMedline(input)), input, author); input = "Carr Lourtau, AM"; check_test(author == bp.parse("author", input), input, author); input = "Carr Lourtau AM"; // Gives 'L. A. Carr' (rare AU formatting) // check_test(author == bp.parse("author", author::fromMedline(input)), input, author); author = "B. de Rivas"; input = "de Rivas, Beatriz"; check_test(author == bp.parse("author", author::fromMedline(input)), input, author); input = "de Rivas B"; check_test(author == bp.parse("author", author::fromMedline(input)), input, author); author = "B. De Baets"; input = " De Baets, B "; check_test(author == bp.parse("author", author::fromMedline(input)), input, author); } void c2bTests::heuristic_pvny() { cout << endl; cout << "---------------------------------------------------------" << endl; cout << "Test heuristic pages - volume - number - year recognition" << endl; cout << "---------------------------------------------------------" << endl; bibParser bp; bibReference reference; /**************************************************************** journal-pages-volume ****************************************************************/ reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "927")); reference.insert("volume", bp.parse("volume", "120")); write(bp, reference); heuristic(bp, reference, "Science. 120: 927"); heuristic(bp, reference, "Science. 120, 927"); heuristic(bp, reference, "Science 120, 927"); heuristic(bp, reference, "Science 120, pp. 927"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "927 - 993")); reference.insert("volume", bp.parse("volume", "120")); write(bp, reference); heuristic(bp, reference, "Science. 120: 927 - 993"); heuristic(bp, reference, "Science. 120, 927 - 93"); heuristic(bp, reference, "Science 120, 927 - 993"); heuristic(bp, reference, "Science 120, pp. 927 - 993"); /**************************************************************** journal-pages-volume-number ****************************************************************/ reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "927")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1 - 3")); write(bp, reference); heuristic(bp, reference, "Science 120(1 - 3), 927"); heuristic(bp, reference, "Science 120(1 - 3), pp. 927"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "927 - 993")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1 - 3")); write(bp, reference); heuristic(bp, reference, "Science 120(1 - 3), 927 - 993"); heuristic(bp, reference, "Science 120(1 - 3), pp. 927 - 993"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "927 - 993")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1")); write(bp, reference); heuristic(bp, reference, "Science, Volume 120, Number 1, 927 - 993"); /**************************************************************** journal-pages-volume-year ****************************************************************/ reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "1922")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "Science 2007, 120, 1922"); heuristic(bp, reference, "Science 2007 120: 1922"); heuristic(bp, reference, "Science. 120: 1922, 2007"); heuristic(bp, reference, "(2007) Science 120: 1922"); heuristic(bp, reference, "Science 120, 1922 2007"); heuristic(bp, reference, "Science 120, 1922(2007)"); heuristic(bp, reference, "Science 120(2007) 1922"); heuristic(bp, reference, "Science 2007;120:1922."); heuristic(bp, reference, "Science 2007 May 2;120:1922"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "22")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "Science 2007, 120, 22"); heuristic(bp, reference, "Science 2007 120: 22"); heuristic(bp, reference, "Science 2007 May 2, 120: 22"); heuristic(bp, reference, "Science. 120: 22, 2007"); heuristic(bp, reference, "(2007) Science 120: 22"); heuristic(bp, reference, "Science 120, 22 2007"); heuristic(bp, reference, "Science 120, 22(2007)"); heuristic(bp, reference, "Science 120(2007) 22"); // Usual pages reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "3 - 7")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "Science. 120, 3 - 7(2007)"); heuristic(bp, reference, "Science. 120: 3 - 7, 2007"); heuristic(bp, reference, "Science, 120(2007), pp. 3 - 7"); heuristic(bp, reference, "Science 120(2007) 3 - 7"); heuristic(bp, reference, "2007 Science 120 3 - 7"); heuristic(bp, reference, "Science. 2007, 120, 3 - 7"); heuristic(bp, reference, "Science. 2007 120: 3 - 7"); heuristic(bp, reference, "Science. 2007 May 2, 120: 3 - 7"); heuristic(bp, reference, "Science. 2007, 120, 3 - 5pp"); heuristic(bp, reference, "Science 2007;120: 3 - 7"); // Pages susceptible to be confused by years reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "1997 - 2001")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "Science. 120, 1997 - 2001(2007)"); heuristic(bp, reference, "Science. 120, 1997 - 2001, 2007"); heuristic(bp, reference, "Science. 120: 1997 - 2001, 2007"); heuristic(bp, reference, "Science, 120(2007), pp. 1997 - 2001"); heuristic(bp, reference, "Science 120(2007) 1997 - 2001"); heuristic(bp, reference, "2007 Science 120 1997 - 2001"); heuristic(bp, reference, "Science. 2007, 120, 1997 - 2001"); heuristic(bp, reference, "Science. 2007 May 2, 120, 1997 - 2001"); heuristic(bp, reference, "Science. 2007 120: 1997 - 2001"); heuristic(bp, reference, "Science. 2007, 120, 1997 - 5pp"); heuristic(bp, reference, "Science 2007;120: 1997 - 2001"); // Pages starting by zero reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "044103 - 044110")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "Science. 120, 044103 - 044110(2007)"); heuristic(bp, reference, "Science. 120: 044103 - 044110, 2007"); heuristic(bp, reference, "Science, 120(2007), pp. 044103 - 044110"); heuristic(bp, reference, "Science 120(2007) 044103 - 044110"); heuristic(bp, reference, "2007 Science 120 044103 - 044110"); heuristic(bp, reference, "Science. 2007, 120, 044103 - 044110"); heuristic(bp, reference, "Science. 2007 May 2; 120, 044103 - 044110"); heuristic(bp, reference, "Science. 2007 120: 044103 - 044110"); heuristic(bp, reference, "Science 2007;120: 044103 - 044110"); /**************************************************************** journal-pages-volume-number-year ****************************************************************/ // Usual pages reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "117")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "Science 120(1), 117(2007)"); heuristic(bp, reference, "Science 120(1), 117(2007)"); heuristic(bp, reference, "Science 120(1): 117, 2007"); heuristic(bp, reference, "Science 2007, 120(1): 117"); heuristic(bp, reference, "Science 2007 120(1): 117"); heuristic(bp, reference, "Science 2007, 120(1), 117"); heuristic(bp, reference, "Science, 2007, 120 (1), p 117"); heuristic(bp, reference, "Science 2007 January 25; 120(1), 117"); heuristic(bp, reference, "Science 2007 January 25 120(1), 117"); heuristic(bp, reference, "Science 2007 May 25 120(1), 117"); heuristic(bp, reference, "Science (2007), 120, 1, 117"); heuristic(bp, reference, "Science, Vol. 120, No. 1 (2007) 117"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "10 - 17")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "Science 120(1), 10 - 17(2007)"); heuristic(bp, reference, "Science 120(1), 10 - 17(2007)"); heuristic(bp, reference, "Science 120(1): 10 - 17, 2007"); heuristic(bp, reference, "Science 2007, 120(1): 10 - 17"); heuristic(bp, reference, "Science. 2007, 120(1): 10 - 7"); heuristic(bp, reference, "Science. 2007 120(1): 10 - 7"); heuristic(bp, reference, "Science. 2007, 120(1): 10 8pp"); heuristic(bp, reference, "Science. 2007, 120(1), 10 - 17"); heuristic(bp, reference, "Science. 2007, 120(1), pp 10 - 17"); heuristic(bp, reference, "Science. 2007 January 25, 120(1), pp 10 - 17"); heuristic(bp, reference, "Science (2007), 120, 1, pp. 10-17"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "117")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1 - 6")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "Science 120(1 - 6), 117(2007)"); heuristic(bp, reference, "Science 120(1 - 6), 117(2007)"); heuristic(bp, reference, "Science 120(1 - 6): 117, 2007"); heuristic(bp, reference, "Science 2007, 120(1 - 6): 117"); heuristic(bp, reference, "Science 2007 120(1 - 6): 117"); heuristic(bp, reference, "Science 2007 May 25 120(1 - 6): 117"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "10 - 17")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1 - 6")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "Science 120(1 - 6), 10 - 17(2007)"); heuristic(bp, reference, "Science 120(1 - 6), 10 - 17(2007)"); heuristic(bp, reference, "Science 120(1 - 6): 10 - 17, 2007"); heuristic(bp, reference, "Science 2007, 120(1 - 6): 10 - 17"); heuristic(bp, reference, "Science. 2007, 120(1 - 6): 10 - 7"); heuristic(bp, reference, "Science. 2007, 120(1 - 6): 10 8pp"); heuristic(bp, reference, "Science 2007 120(1 - 6): 10 8pp"); heuristic(bp, reference, "Science 2007 May 25 120(1 - 6): 10 8pp"); // Pages susceptible to be confused by years reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "1922")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "Science 120(1), 1922(2007)"); heuristic(bp, reference, "Science 120(1), 1922(2007)"); heuristic(bp, reference, "Science 120(1): 1922, 2007"); heuristic(bp, reference, "Science 2007, 120(1): 1922"); heuristic(bp, reference, "Science 2007, 120(1), 1922"); heuristic(bp, reference, "Science 2007 120(1): 1922"); heuristic(bp, reference, "Science 2007 May 25 120(1): 1922"); heuristic(bp, reference, "Science, Vol. 120, No. 1 (2007) 1922"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "1922 - 1927")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "Science 120(1), 1922 - 1927(2007)"); heuristic(bp, reference, "Science 120(1), 1922 - 1927(2007)"); heuristic(bp, reference, "Science 120(1): 1922 - 1927, 2007"); heuristic(bp, reference, "Science 2007, 120(1): 1922 - 1927"); heuristic(bp, reference, "Science. 2007, 120(1): 1922 - 1927"); heuristic(bp, reference, "Science. 2007, 120(1): 1922 6pp"); heuristic(bp, reference, "Science. 2007 120(1): 1922 6pp"); heuristic(bp, reference, "Science. 2007, 120(1), 1922 - 1927"); heuristic(bp, reference, "Science. 2007, 120(1), pp 1922 - 1927"); heuristic(bp, reference, "Science. 2007 May 25, 120(1), pp 1922 - 1927"); heuristic(bp, reference, "Science (2007), 120, 1, pp. 1922-1927"); heuristic(bp, reference, "Science, Vol. 120, No. 1 (2007) 1922 - 1927"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "1922")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1 - 6")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "Science 120(1 - 6), 1922(2007)"); heuristic(bp, reference, "Science 120(1 - 6), 1922(2007)"); heuristic(bp, reference, "Science 120(1 - 6): 1922, 2007"); heuristic(bp, reference, "Science 2007, 120(1 - 6): 1922"); heuristic(bp, reference, "Science 2007 120(1 - 6): 1922"); heuristic(bp, reference, "Science 2007 May 25 120(1 - 6): 1922"); reference.clearReference(); reference.insert("journal", bp.parse("journal", "Science")); reference.insert("pages", bp.parse("pages", "1922 - 1927")); reference.insert("volume", bp.parse("volume", "120")); reference.insert("number", bp.parse("number", "1 - 6")); reference.insert("year", bp.parse("year", "2007")); write(bp, reference); heuristic(bp, reference, "Science 120(1 - 6), 1922 - 1927(2007)"); heuristic(bp, reference, "Science 120(1 - 6), 1922 - 1927(2007)"); heuristic(bp, reference, "Science 120(1 - 6): 1922 - 1927, 2007"); heuristic(bp, reference, "Science 2007, 120(1 - 6): 1922 - 1927"); heuristic(bp, reference, "Science 2007 120(1 - 6): 1922 - 1927"); heuristic(bp, reference, "Science. 2007, 120(1 - 6): 1922 - 7"); heuristic(bp, reference, "Science. 2007, 120(1 - 6): 1922 6pp"); heuristic(bp, reference, "Science. 2007 May 25, 120(1 - 6): 1922 6pp"); } void c2bTests::heuristic_misc() { cout << endl; cout << "-----------------------------" << endl; cout << "Test miscellaneous heuristics" << endl; cout << "-----------------------------" << endl; bibParser bp; bibReference reference; // abstract reference.clearReference(); reference.insert("abstract", bp.parse("abstract", "Some text.")); write(bp, reference); heuristic(bp, reference, "...\n\nAbstract. Some text.\n"); heuristic(bp, reference, "...\n\nAbstract.\n Some text.\n"); heuristic(bp, reference, "...\n\nAbstract:\n Some text.\n"); heuristic(bp, reference, "...\n\nAbstract\n Some text.\n"); heuristic(bp, reference, "...\n\nSummary. Some text.\n"); heuristic(bp, reference, "...\n\nSummary:\n Some text.\n"); heuristic(bp, reference, "...\n\nSummary\n Some text.\n"); // keywords reference.clearReference(); reference.insert("keywords", bp.parse("keywords", "Some text.")); write(bp, reference); heuristic(bp, reference, "...\n\nKeywords:\n Some text.\n"); heuristic(bp, reference, "...\n\nKeywords. Some text.\n"); // title reference.clearReference(); reference.insert("title", bp.parse("title", "Some text.")); write(bp, reference); heuristic(bp, reference, "...\n\nTitle: Some text.\n"); heuristic(bp, reference, "...\n\nTitle:\n Some text.\n"); } void c2bTests::heuristic(bibParser& bp, const bibReference& reference, const QString& text) { bp.clearCurrentReference(); bp.guessFields(text); const bool passed(bp.toBibTeX() == bp.toBibTeX(reference)); ++_test_count; if (!passed) ++_failed_test_count; cout << QString("[%1]\t'%2'\n").arg(boolToStr(passed)).arg(text); if (!passed) qDebug() << "Guessed:\n" << bp.toBibTeX(); } void c2bTests::check_test(const bool passed, const QString& input, const QString& output) { ++_test_count; if (!passed) ++_failed_test_count; cout << QString("[%1]\t'%2'\n").arg(boolToStr(passed)).arg(input); if (!passed) qDebug() << output; } void c2bTests::write(const bibParser& bp, const bibReference& reference) { cout << endl; const QStringList& bibliographicFields = bp.bibliographicFields(); for (int i = 0; i < bibliographicFields.count(); ++i) { const QString fvalue(reference.value(bibliographicFields.at(i))); if (!fvalue.isEmpty()) { const QString& fd = bibliographicFields.at(i); const QString padding(QString().fill(' ', 12 - fd.length())); cout << (fd + padding + " = {" + fvalue + '}') << endl; } } } #if C2B_CHECK_PATTERNS #include "frequentPatterns.h" #endif void c2bTests::heuristic_check_patterns() { #if C2B_CHECK_PATTERNS frequentPatterns fp; fp.process(); return; #endif cout << endl; cout << "-----------------------------------------------------" << endl; cout << "Check pattern clashes in heuristic author recognition" << endl; cout << "-----------------------------------------------------" << endl; cout << endl; QFileInfoList flist = QDir(_bibliographic_dir).entryInfoList(QStringList() << "*.bib"); bibParser bp; bibReference reference; QStringList fields; fields.append("author"); QHash<QString, int> adictionary; for (int f = 0; f < flist.count(); ++f) { const QString bib_file(flist.at(f).absoluteFilePath()); bp.initReferenceParsing(_bibliographic_dir, fields, &reference); while (bp.referencesIn(c2bUtils::fileToString(bib_file), &reference)) { const QString a(c2bUtils::toAscii(reference.value("author"), c2bUtils::Collation)); const QStringList as(a.split(c2bUtils::nonLetter)); for (int i = 0; i < as.count(); ++i) adictionary.insert(as.at(i), 1 + adictionary.value(as.at(i), 0)); } } QStringList word_prefix_lexicon(c2bUtils::fileToString(":/txt/txt/word_prefix_lexicon.txt").split(c2bUtils::nonLetter, QString::SkipEmptyParts)); for (int i = 0; i < word_prefix_lexicon.count(); ++i) word_prefix_lexicon[i].replace('_', "\\b"); QStringList anames(adictionary.keys()); QRegExp wre; for (int i = 0; i < word_prefix_lexicon.count(); ++i) for (int j = 0; j < anames.count(); ++j) { const QString& wp = word_prefix_lexicon.at(i); const QString& a = anames.at(j); wre.setPattern(wp); if (a.contains(wre)) cout << "LEXICON CLASH: " << wp << ' ' << a << endl; } } QString c2bTests::decomposition(const QChar& c) { // Write char decomposition const QString d(c.decomposition()); QString wd; for (int i = 0; i < d.length(); ++i) wd += '[' + d.at(i) + ']'; return wd; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bUtils.cpp�������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�015305� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.795256716 30 atime=1498583183.003254785 30 ctime=1498583182.795256716 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bUtils.cpp�����������������������������������������������������������������������0000644�0001750�0000144�00000002437�13124510216�016705� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bUtils.h" #include <QDesktopServices> #include <QMessageBox> namespace c2bUtils { bool openFile(const QString& fn, QWidget* w) { // URL fn is decoded always, in the hope of making openFile encoding agnostic const QString decoded(QUrl::fromPercentEncoding(fn.toUtf8())); const QUrl url(stringToUrl(decoded)); if (!url.isValid()) { if (w) QMessageBox::warning(w, QObject::tr("Warning - cb2Bib"), QObject::tr("Unable to open file.\nError: URL '%1' is not valid."). arg(url.toString()), QMessageBox::Ok); return false; } if (!QDesktopServices::openUrl(url)) { if (w) QMessageBox::warning(w, QObject::tr("Warning - cb2Bib"), QObject::tr("Unable to open file '%1'."). arg(fn), QMessageBox::Ok); return false; } return true; } } // namespace c2bUtils ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bPostprocess.cpp�������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016531� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.771256939 30 atime=1498583183.003254785 30 ctime=1498583182.771256939 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bPostprocess.cpp�����������������������������������������������������������������0000644�0001750�0000144�00000011165�13124510216�020127� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bPostprocess.h" #include "c2b.h" #include "c2bSettings.h" #include "c2bUtils.h" #include <QDir> #include <QMessageBox> #include <QProcess> #include <QPushButton> c2bPostprocess::c2bPostprocess(const QString& fn, QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowTitle(tr("BibTeX Postprocessing Log - cb2Bib")); setAttribute(Qt::WA_DeleteOnClose); _buttonOpenFile = new QPushButton(tr("&Open File")); ui.buttonBox->addButton(_buttonOpenFile, QDialogButtonBox::ActionRole); _buttonOpenFile->setAutoDefault(true); _buttonOpenFile->setDefault(true); _buttonOpenFile->setEnabled(false); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(false); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); connect(_buttonOpenFile, SIGNAL(clicked()), this, SLOT(openFile())); c2bSettings* settings(c2bSettingsP); resize(settings->value("c2bLogWidget/size", size()).toSize()); PPBIBTEX_BIN = settings->fileName("cb2Bib/PostprocessBibTeXBin"); PPBIBTEX_ARG = settings->value("cb2Bib/PostprocessBibTeXArg").toString(); PPBIBTEX_EXT = settings->value("cb2Bib/PostprocessBibTeXExt").toString(); QFile f(fn); if (!f.open(QIODevice::ReadOnly | QIODevice::Text)) { QMessageBox::warning(parentw, tr("Warning - cb2Bib"), tr("Unable to open the file %1 for reading.\nError: '%2'."). arg(fn).arg(f.errorString()), QMessageBox::Ok); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(true); ui.buttonBox->button(QDialogButtonBox::Close)->setFocus(); ui.Log->appendPlainText(tr("BibTeX Post Processing: Erroneous termination.\n")); } else { f.close(); _bib = fn; QFileInfo fi(fn); _out = QDir::toNativeSeparators(fi.absolutePath() + '/' + fi.baseName() + '.' + PPBIBTEX_EXT); QString cargs(PPBIBTEX_ARG); cargs.replace("%finput", _bib); cargs.replace("%foutput", _out); ui.Log->appendPlainText(tr("BibTeX Post Processing Command:\n%1 %2\n").arg(PPBIBTEX_BIN).arg(cargs)); PProcessFile(); } } c2bPostprocess::~c2bPostprocess() { c2bSettingsP->setValue("c2bLogWidget/size", size()); } void c2bPostprocess::PProcessFile() { // Postprocessing BibTeX const QStringList arglist(PPBIBTEX_ARG.split(' ', QString::SkipEmptyParts)); QStringList args; for (int i = 0; i < arglist.count(); i++) { if (arglist.at(i) == "%finput") args.append(_bib); else if (arglist.at(i) == "%foutput") args.append(_out); else args.append(arglist.at(i)); } _ppBibTeX = new QProcess(this); connect(_ppBibTeX, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(conversionEnded())); _ppBibTeX->start(PPBIBTEX_BIN, args); if (!_ppBibTeX->waitForStarted()) { ui.Log->appendPlainText(tr("Failed to call %1.").arg(PPBIBTEX_BIN)); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(true); ui.buttonBox->button(QDialogButtonBox::Close)->setFocus(); delete _ppBibTeX; } } void c2bPostprocess::conversionEnded() { addToLog(); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(true); if (QFileInfo(_out).isReadable()) { _buttonOpenFile->setEnabled(true); _buttonOpenFile->setFocus(); } else { ui.buttonBox->button(QDialogButtonBox::Close)->setAutoDefault(true); ui.buttonBox->button(QDialogButtonBox::Close)->setDefault(true); ui.buttonBox->button(QDialogButtonBox::Close)->setFocus(); } ui.Log->appendPlainText(tr("\n\nBibTeX Post Processing Command Ended.")); delete _ppBibTeX; } void c2bPostprocess::addToLog() { QString log(QString::fromUtf8(_ppBibTeX->readAllStandardOutput().trimmed())); if (!log.isEmpty()) ui.Log->appendPlainText(log); log = QString::fromUtf8(_ppBibTeX->readAllStandardError().trimmed()); if (!log.isEmpty()) ui.Log->appendPlainText(log); } void c2bPostprocess::openFile() { c2bUtils::openFile(_out, this); close(); } void c2bPostprocess::help() { c2bUtils::displayHelp("http://www.molspaces.com/d_cb2bib-overview.php#keyboard"); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bCoreCiter.cpp���������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016064� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.751257124 30 atime=1498583183.003254785 30 ctime=1498583182.751257124 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bCoreCiter.cpp�������������������������������������������������������������������0000644�0001750�0000144�00000005405�13124510216�017462� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * * The LyX pipe procedure in citeToLyXPipe has been adapted from Tellico * (Tellico (C) 2003-2005 by Robby Stephenson) ***************************************************************************/ #include "c2bCoreCiter.h" #include "c2bFileDialog.h" #include <settings.h> #include <QApplication> #include <QClipboard> #include <QMessageBox> #include <QTextStream> // fifo to lyx #include <fcntl.h> #include <unistd.h> c2bCoreCiter::c2bCoreCiter(QWidget* parentw) : QObject(parentw) { _parentWP = parentw; _settingsP = settings::instance(); _settingsP->setDefaultValue("c2bCoreCiter/LyXPipe", QDir::cleanPath(QDir::homePath() + QDir::separator() + ".lyx/lyxpipe.in")); _lyxpipe = _settingsP->value("c2bCoreCiter/LyXPipe").toString(); } c2bCoreCiter::~c2bCoreCiter() {} void c2bCoreCiter::cite(const QStringList& keys) const { QByteArray pipe = QFile::encodeName(_lyxpipe); if (QFile::exists(pipe)) citeToLyXPipe(keys); else citeToClipboard(keys); } void c2bCoreCiter::citeToClipboard(const QStringList& keys) const { const QString c("\\cite{" + keys.join(", ").trimmed() + '}'); QClipboard* cb = QApplication::clipboard(); cb->setText(c, QClipboard::Clipboard); } void c2bCoreCiter::citeToLyXPipe(const QStringList& keys) const { // This procedure was adapted from Tellico // Tellico (C) 2003-2005 by Robby Stephenson QByteArray pipe = QFile::encodeName(_lyxpipe); const QString errorStr(tr("Unable to write to the server pipe at '%1'.").arg(QString(pipe))); if (!QFile::exists(pipe)) { QMessageBox::warning(_parentWP, tr("Warning - cb2Bib"), errorStr, QMessageBox::Ok); return; } int pipeFd = ::open(pipe, O_WRONLY); QFile file(QString::fromUtf8(pipe)); if (file.open(pipeFd, QIODevice::WriteOnly)) { // pybliographer uses comma-space, and pyblink expects the space there const QString c(keys.join(", ").trimmed()); QTextStream st(&file); st << QString::fromLatin1("LYXCMD:cb2bib:citation-insert:%1\n").arg(c).toLatin1(); file.flush(); file.close(); } else QMessageBox::warning(_parentWP, tr("Warning - cb2Bib"), errorStr, QMessageBox::Ok); ::close(pipeFd); } void c2bCoreCiter::setLyXPipe() { const QString new_pn(c2bFileDialog::getSystemFilename(_parentWP, "Select LyX pipe", _lyxpipe, "All (*)")); if (!new_pn.isEmpty()) { _lyxpipe = new_pn; _settingsP->setValue("c2bCoreCiter/LyXPipe", _lyxpipe); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bIdLineEdit.h����������������������������������������������������0000644�0000000�0000000�00000000130�13124510216�015622� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 mtime=1498583182.84325627 30 atime=1498583183.003254785 29 ctime=1498583182.84325627 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bIdLineEdit.h��������������������������������������������������������������������0000644�0001750�0000144�00000002763�13124510216�017226� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * * Improvements and modifications: * July 2009 - Added <<author_all_abbreviated>>, (C) 2009 by Dayu Huang ***************************************************************************/ #ifndef C2BIDLINEEDIT_H #define C2BIDLINEEDIT_H #include "c2bLineEdit.h" class QAction; class QMenu; /** @author Pere Constans */ class c2bIdLineEdit : public c2bLineEdit { Q_OBJECT public: explicit c2bIdLineEdit(QWidget* parentw = 0); ~c2bIdLineEdit(); void setDocumentIDEdit(); protected: QAction* a_author_all_abbreviated; QAction* a_author_all_initials; QAction* a_author_first; QAction* a_citeid; QAction* a_journal_initials; QAction* a_pages_first; QAction* a_ppages_first; QAction* a_reset; QAction* a_title; QAction* a_title_underscored; QAction* a_volume; QAction* a_year_abbreviated; QAction* a_year_full; protected slots: void author_all_abbreviated(); void author_all_initials(); void author_first(); void citeid(); void journal_initials(); void pages_first(); void ppages_first(); void reset(); void title(); void title_underscored(); void volume(); void year_abbreviated(); void year_full(); }; #endif �������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bCiterWidget.ui��������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�016254� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.003254785 29 ctime=1498583182.64725809 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bCiterWidget.ui������������������������������������������������������������������0000644�0001750�0000144�00000006735�13124510115�017655� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>c2bCiterWidget</class> <widget class="QWidget" name="c2bCiterWidget"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>901</width> <height>400</height> </rect> </property> <property name="windowTitle"> <string>c2bCiter - cb2Bib</string> </property> <layout class="QGridLayout" name="gridLayout"> <property name="leftMargin"> <number>3</number> </property> <property name="topMargin"> <number>6</number> </property> <property name="rightMargin"> <number>3</number> </property> <property name="bottomMargin"> <number>6</number> </property> <item row="0" column="0"> <widget class="Line" name="line1"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="1" column="0"> <widget class="c2bCiterView" name="citationsView"> <property name="frameShape"> <enum>QFrame::NoFrame</enum> </property> <property name="frameShadow"> <enum>QFrame::Plain</enum> </property> <property name="showDropIndicator" stdset="0"> <bool>false</bool> </property> <property name="selectionMode"> <enum>QAbstractItemView::SingleSelection</enum> </property> <property name="selectionBehavior"> <enum>QAbstractItemView::SelectRows</enum> </property> <property name="showGrid"> <bool>false</bool> </property> <property name="gridStyle"> <enum>Qt::NoPen</enum> </property> <property name="wordWrap"> <bool>false</bool> </property> <property name="cornerButtonEnabled"> <bool>false</bool> </property> </widget> </item> <item row="2" column="0"> <widget class="Line" name="line2"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="3" column="0"> <layout class="QHBoxLayout" name="horizontalLayout"> <property name="rightMargin"> <number>7</number> </property> <item> <widget class="QStatusBar" name="statusBar"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="sizeGripEnabled"> <bool>false</bool> </property> </widget> </item> <item> <widget class="QLabel" name="filterIcon"> <property name="text"> <string/> </property> <property name="pixmap"> <pixmap resource="cb2bib.qrc">:/icons/icons/filter.png</pixmap> </property> </widget> </item> <item> <widget class="QLabel" name="clipboardIcon"> <property name="text"> <string/> </property> <property name="pixmap"> <pixmap resource="cb2bib.qrc">:/icons/icons/clipboard.png</pixmap> </property> </widget> </item> </layout> </item> <item row="4" column="0"> <widget class="Line" name="line3"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> </layout> </widget> <customwidgets> <customwidget> <class>c2bCiterView</class> <extends>QTableView</extends> <header>c2bCiterView.h</header> </customwidget> </customwidgets> <resources> <include location="cb2bib.qrc"/> </resources> <connections/> </ui> �����������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bNetworkQueryInfo.cpp��������������������������������������������0000644�0000000�0000000�00000000132�13124510216�017500� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.767256976 30 atime=1498583183.003254785 30 ctime=1498583182.767256976 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bNetworkQueryInfo.cpp������������������������������������������������������������0000644�0001750�0000144�00000014725�13124510216�021103� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bNetworkQueryInfo.h" #include "c2b.h" #include "c2bBibParser.h" #include "c2bFileSystemWatcher.h" #include "c2bSettings.h" #include "c2bUtils.h" #include <QAction> #include <QTextStream> #include <QUrl> c2bNetworkQueryInfo::c2bNetworkQueryInfo(QObject* parento) : QObject(parento) { _bpP = c2b::instance()->bibParser(); connect(c2bSettingsP, SIGNAL(newSettings()), this, SLOT(loadSettings())); _fsw = new c2bFileSystemWatcher(this); connect(_fsw, SIGNAL(fileChanged(const QString&)), this, SLOT(parseBookmarks())); loadSettings(); } c2bNetworkQueryInfo::~c2bNetworkQueryInfo() {} void c2bNetworkQueryInfo::loadSettings() { const QString nfn(c2bSettingsP->fileName("cb2Bib/NetworkFile")); if (nfn == NetworkFile) return; if (QFileInfo(nfn).exists()) { if (!NetworkFile.isEmpty()) _fsw->removePath(NetworkFile); NetworkFile = nfn; _fsw->addPath(NetworkFile); } parseBookmarks(); } void c2bNetworkQueryInfo::parseBookmarks() { BookmarkList.clear(); if (NetworkFile.isEmpty()) return; QFile file(NetworkFile); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QRegExp _bookmark("^bookmark="); QString line; QTextStream stream(&file); stream.setCodec("UTF-8"); stream.setAutoDetectUnicode(true); while (!stream.atEnd()) { line = stream.readLine(); if (line.contains(_bookmark)) { line.remove(_bookmark); if (line.count('|') == 0) c2bUtils::warn(tr("c2bNetworkQueryInfo::parseBookmarks: Syntax error at '%1'").arg(line)); else BookmarkList.append(line); } } file.close(); while (!BookmarkActionList.isEmpty()) delete BookmarkActionList.takeFirst(); const QRegExp rx("<<.+>>"); for (int i = 0; i < BookmarkList.count(); ++i) if (BookmarkList.at(i).contains(rx)) { const QStringList bm_parts(BookmarkList.at(i).split('|')); if (bm_parts.count() > 1) { QAction* act = new QAction(bm_parts.at(0), this); act->setData(bm_parts.at(1)); act->setStatusTip(QString("%1 [%2]").arg(bm_parts.at(0)).arg(bm_parts.at(1))); connect(act, SIGNAL(triggered()), this, SLOT(openBookmark())); BookmarkActionList.append(act); } } } QList<QAction*> c2bNetworkQueryInfo::bookmarkActions(const QString& selection) { _current_selection = selection; for (int i = 0; i < BookmarkActionList.count(); ++i) BookmarkActionList[i]->setVisible(false); const QRegExp rx("<<.+>>"); for (int i = 0; i < BookmarkActionList.count(); ++i) { QString bmd(BookmarkActionList.at(i)->data().toString()); const QStringList& bibliographicFields = _bpP->bibliographicFields(); for (int j = 0; j < bibliographicFields.count(); ++j) { const QString& name = bibliographicFields.at(j); const QString tag(QString("<<%1>>").arg(name)); if (bmd.contains(tag)) if (!_bpP->field(name).isEmpty()) bmd.remove(tag); } if (bmd.contains("<<selection>>")) if (!_current_selection.isEmpty()) bmd.remove("<<selection>>"); BookmarkActionList[i]->setVisible(!bmd.contains(rx)); } return BookmarkActionList; } void c2bNetworkQueryInfo::openBookmark() { QAction* act = static_cast<QAction*>(sender()); if (act) { const QString link(act->data().toString()); c2bUtils::openFile(encodeLink(link), c2b::mainWidget()); } } const QString c2bNetworkQueryInfo::encodeLink(const QString& ln) const { QString eln(ln); // See comment in c2bNetworkQueryInfo::bookmarksToHtml eln.replace("[[[", "<<"); eln.replace("]]]", ">>"); const QRegExp rx("<<.+>>"); if (eln.contains(rx)) { const QStringList& bibliographicFields = _bpP->bibliographicFields(); for (int j = 0; j < bibliographicFields.count(); ++j) { const QString& name = bibliographicFields.at(j); const QString tag(QString("<<%1>>").arg(name)); if (eln.contains(tag)) { QString fld; if (name == "pages") fld = _bpP->field(name).replace(QRegExp("-.+$"), QString()); else if (name == "author") { fld = _bpP->field(name); fld.replace(" and ", " "); } else if (name == "title") { fld = _bpP->field(name); fld = fld.remove('{'); fld = fld.remove('}'); } else fld = _bpP->field(name); fld = QUrl::toPercentEncoding(fld); eln.replace(tag, fld); if (!eln.contains(rx)) return eln; } } eln.replace("<<selection>>", _current_selection); } return eln; } const QString c2bNetworkQueryInfo::bookmarksToHtml() const { if (BookmarkList.count() == 0) return QString(); QString html("<p align=\"center\">Bookmarks:<br /><p align=\"center\"><em>"); for (int i = 0; i < BookmarkList.count(); ++i) { int separator(BookmarkList.at(i).indexOf('|')); if (separator == -1) continue; QString url_name(BookmarkList.at(i).mid(0, separator)); QString url(BookmarkList.at(i).mid(separator + 1)); // Tags <<.>> conflict with the Qt > 4.4.x HTML parser, even being them inside a // literal, quoted string. The substitution below works as a workaround to prevent // cb2Bib tags from clashing with the parser. // See c2bNetworkQueryInfo::encodeLink. A similar issue was resolved in // fromQtXmlString/toQtXmlString. url.replace("<<", "[[["); url.replace(">>", "]]]"); url = "<a href=\"" + url + "\">" + url_name + "</a>"; html += url + " <br />"; } html += "</em></p><br />"; return html; } �������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/findDialog.h�������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�015323� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.879255936 30 atime=1498583183.003254785 30 ctime=1498583182.879255936 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/findDialog.h�����������������������������������������������������������������������0000644�0001750�0000144�00000002513�13124510216�016716� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * findDialog is adapted from Qt Designer * Copyright (C) 2001 Trolltech AS. All rights reserved. ***************************************************************************/ #ifndef FINDDIALOG_H #define FINDDIALOG_H #include "ui_findDialog.h" #include <QDialog> #include <QPointer> class QPlainTextEdit; class QTextEdit; class findDialog : public QDialog { Q_OBJECT public: explicit findDialog(QWidget* parentw = 0); ~findDialog(); QAction* findAction; QAction* findNextAction; QAction* findPreviousAction; public slots: int exec(); void findNext(); void findPrevious(); void findText(); void setEditor(QPlainTextEdit* editor); void setEditor(QTextEdit* editor); void show(); private slots: void accept(); private: QPointer<QWidget> _editor; QString m_find_pattern; Ui::findDialog ui; bool findText(const QString& pattern, bool do_forward = true, bool do_case_sensitive = false, bool do_whole_words = false); bool m_find_case; bool m_find_words; void init(); }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bEditor.cpp������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�015433� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.751257124 30 atime=1498583183.003254785 30 ctime=1498583182.751257124 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bEditor.cpp����������������������������������������������������������������������0000644�0001750�0000144�00000075775�13124510216�017052� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bEditor.h" #include "bookmarkPlugin.h" #include "c2b.h" #include "c2bBibHighlighter.h" #include "c2bBibParser.h" #include "c2bExportDialog.h" #include "c2bFileDialog.h" #include "c2bPostprocess.h" #include "c2bREHighlighter.h" #include "c2bReferenceList.h" #include "c2bSettings.h" #include "c2bTextBrowser.h" #include "c2bTextEdit.h" #include "c2bUpdateMetadata.h" #include "c2bUtils.h" #include "findDialog.h" #include <bibSearcher.h> #include <texToHtml.h> #include <QCloseEvent> #include <QDir> #include <QDockWidget> #include <QLabel> #include <QMessageBox> #include <QStackedWidget> #include <QTextCursor> #include <QTextStream> /** \page c2beditor Embedded File Editor The cb2Bib contains a practical editor suitable to manipulate the files related to a cb2Bib session. Abbreviations, bookmarks, regular expressions, and BibTeX are readily available. On BibTeX mode, the editor contains a Reference List to ease file navigation, and to extend the editor functionality. The BibTeX editor can optionally be turned to a reference browser. - \ref bookmarks - \ref update_metadata - \ref export_entries - \ref c2beditor_menu - \ref references_menu - \ref browser_menu - \ref c2beditor_qt \section bookmarks Bookmarks Bookmarks pointing to local or network files are available at the editor menu bar. They provide a fast access to external resources. Concretely, they are suitable for retrieving working documents, writing notes, or for accessing internet databases. The editor bookmark functionality had been introduced in the cb2Bib version 0.9.3. Currently, bookmarks are set manually in the <tt>netqinf.txt</tt> file, see \ref c2bconf_files. Each bookmark is an entry line with the form \htmlonly <pre style="color : #005600; background : #d5d5d5; border : #6D8CC3 solid 1px;"> editorbookmark=Description|Target file name|Shortcut|Icon file name </pre> having four fields, description, target file name, shortcut, and icon file name, separated with three (required) vertical bars |. <pre style="color : #005600; background : #d5d5d5; border : #6D8CC3 solid 1px;"> # Bookmark Examples: # - A URL: editorbookmark=URL Description|http://www.molspaces.com/d_cb2bib-c2beditor.php#bookmarks|| # - A separator, which is a blank line: editorbookmark= # - A TeX document, which will be opened with its default application: editorbookmark=Document Description|/home/doc/chapter1.tex|| # - An application, specifying a shortcut and an icon: editorbookmark=Application Description|/opt/kde3/bin/kile|Alt+K|/usr/share/icons/kile.png </pre> \endhtmlonly <p> </p> \section update_metadata Update Documents Metadata The Update Documents Metadata functionality is available at the Edit and context menus on the BibTeX editor mode. Documents referred in the BibTeX file tags are scanned for metadata. If the BibTeX reference does not coincide with the bibliographic metadata, the document metadata is updated. In this way, metadata is synchronized with the BibTeX file contents. A log window appears, and possible errors are reported. Reported errors are, non-existence of a document file, read-only files, mismatches between BibTeX references and the actual metadata (often due to HTML tags or other illegal characters in BibTeX), or that the writing to the document format is not implemented. Note that this process will update all documents referenced in the BibTeX file. <b>While this process is safe, it implies writing into the documents.</b> Therefore take the usual measures and backup your data. See also \ref metadata_write. <p> </p> \section export_entries Export Selected Entries Selected entries can be exported to a separate BibTeX document. Click on 'File->Export Entries' menu option, and provide an export filename at the Export Dialog. Optionally, export will copy the document files attached to the citation. The copy of documents is similar to the cb2Bib 'rename/copy/move' general procedure. See \ref c2bconf_documents, on <b>Set directory relative to the BibTeX File Directory</b>, for copying options. Documents will not be overwritten: copying of existing documents is skipped. Possible issues are reported in the new document, as LaTeX comments. <p> </p> \section c2beditor_menu Right-Click Menu Functionality \htmlonly <center><table cellpadding="4" cellspacing="2" border="1" summary="Summary table of Right-Click Menu Functionality"> <tr> <th valign="top">Keys</th> <th valign="top">Action</th></tr> <tr> <td valign="top">Ctrl+F</td> <td valign="top">Find in text</td></tr> <tr> <td valign="top"></td> <td valign="top">Toggle word wrapping</td></tr> <tr> <td valign="top"></td> <td valign="top">Selection to LaTeX</td></tr> <tr> <td valign="top"></td> <td valign="top">Selection to Unicode</td></tr> <tr> <td valign="top"></td> <td valign="top">Journals to full name</td></tr> <tr> <td valign="top"></td> <td valign="top">Journals to abbreviated name</td></tr> <tr> <td valign="top"></td> <td valign="top">Update documents metadata</td></tr> <tr> <td valign="top">Shift+Ins</td> <td valign="top">Paste current BibTeX</td></tr> <tr> <td valign="top">Alt+P</td> <td valign="top">Save and postprocess BibTeX file</td></tr> </table></center> \endhtmlonly <p> </p> \section references_menu Reference List Right-Click Menu Functionality \htmlonly <center><table cellpadding="4" cellspacing="2" border="1" summary="Summary table of References Right-Click Menu Functionality"> <tr> <th valign="top">Keys</th> <th valign="top">Action</th></tr> <tr> <td valign="top">Alt+C</td> <td valign="top">Cite selected entries</td></tr> <tr> <td valign="top"></td> <td valign="top">Open document file</td></tr> <tr> <td valign="top"></td> <td valign="top">Browse by DOI</td></tr> <tr> <td valign="top"></td> <td valign="top">Web search by Author</td></tr> <tr> <td valign="top"></td> <td valign="top">Web search by Title</td></tr> <tr> <td valign="top"></td> <td valign="top">Web search settings</td></tr> <tr> <td valign="top"></td> <td valign="top">Clear entry selection</td></tr> <tr> <td valign="top"></td> <td valign="top">Refresh list and browser</td></tr> </table></center> \endhtmlonly <p> </p> \section browser_menu BibTeX Browser Right-Click Menu Functionality \htmlonly <center><table cellpadding="4" cellspacing="2" border="1" summary="Summary table of Browser Right-Click Menu Functionality"> <tr> <th valign="top">Keys</th> <th valign="top">Action</th></tr> <tr> <td valign="top">Alt+C</td> <td valign="top">Cite selected entries</td></tr> <tr> <td valign="top"></td> <td valign="top">Local search for selected text</td></tr> <tr> <td valign="top"></td> <td valign="top">Web search for selected text</td></tr> <tr> <td valign="top"></td> <td valign="top">Web search settings</td></tr> <tr> <td valign="top"></td> <td valign="top">Clear entry selection</td></tr> <tr> <td valign="top"></td> <td valign="top">Refresh list and browser</td></tr> </table></center> \endhtmlonly <p> </p> \section c2beditor_qt Additional Functionality \htmlonly <center><table cellpadding="4" cellspacing="2" border="1" summary="Summary table of Additional Functionality"> <tr> <td valign="top">Backspace</td> <td valign="top">Deletes the character to the left of the cursor</td></tr> <tr> <td valign="top">Delete</td> <td valign="top">Deletes the character to the right of the cursor</td></tr> <tr> <td valign="top">Ctrl+A</td> <td valign="top">Selects all text</td></tr> <tr> <td valign="top">Ctrl+C</td> <td valign="top">Copy the selected text to the clipboard</td></tr> <tr> <td valign="top">Ctrl+Insert</td> <td valign="top">Copy the selected text to the clipboard</td></tr> <tr> <td valign="top">Ctrl+K</td> <td valign="top">Deletes to the end of the line</td></tr> <tr> <td valign="top">Ctrl+V</td> <td valign="top">Pastes the clipboard text into text edit</td></tr> <tr> <td valign="top">Shift+Insert</td> <td valign="top">Pastes the clipboard text into text edit</td></tr> <tr> <td valign="top">Ctrl+X</td> <td valign="top">Deletes the selected text and copies it to the clipboard</td></tr> <tr> <td valign="top">Shift+Delete</td> <td valign="top">Deletes the selected text and copies it to the clipboard</td></tr> <tr> <td valign="top">Ctrl+Z</td> <td valign="top">Undoes the last operation</td></tr> <tr> <td valign="top">Ctrl+Y</td> <td valign="top">Redoes the last operation</td></tr> <tr> <td valign="top">LeftArrow</td> <td valign="top">Moves the cursor one character to the left</td></tr> <tr> <td valign="top">Ctrl+LeftArrow</td> <td valign="top">Moves the cursor one word to the left</td></tr> <tr> <td valign="top">RightArrow</td> <td valign="top">Moves the cursor one character to the right</td></tr> <tr> <td valign="top">Ctrl+RightArrow</td> <td valign="top">Moves the cursor one word to the right</td></tr> <tr> <td valign="top">UpArrow</td> <td valign="top">Moves the cursor one line up</td></tr> <tr> <td valign="top">Ctrl+UpArrow</td> <td valign="top">Moves the cursor one word up</td></tr> <tr> <td valign="top">DownArrow</td> <td valign="top">Moves the cursor one line down</td></tr> <tr> <td valign="top">Ctrl+Down Arrow</td> <td valign="top">Moves the cursor one word down</td></tr> <tr> <td valign="top">PageUp</td> <td valign="top">Moves the cursor one page up</td></tr> <tr> <td valign="top">PageDown</td> <td valign="top">Moves the cursor one page down</td></tr> <tr> <td valign="top">Home</td> <td valign="top">Moves the cursor to the beginning of the line</td></tr> <tr> <td valign="top">Ctrl+Home</td> <td valign="top">Moves the cursor to the beginning of the text</td></tr> <tr> <td valign="top">End</td> <td valign="top">Moves the cursor to the end of the line</td></tr> <tr> <td valign="top">Ctrl+End</td> <td valign="top">Moves the cursor to the end of the text</td></tr> <tr> <td valign="top">Alt+Wheel</td> <td valign="top">Scrolls the page horizontally</td></tr> <tr> <td valign="top">Ctrl+Wheel</td> <td valign="top">Zooms the text</td></tr> </table></center> \endhtmlonly <p> </p> */ c2bEditor::c2bEditor(const QString& file, const Mode mode, QWidget* main, QWidget* parentw) : QMainWindow(parentw) { _editor_fn = QDir::toNativeSeparators(file); _editor_mode = mode; _c2b_mainP = main; _searcherP = 0; initEditor(); } c2bEditor::c2bEditor(const QString& file, bibSearcher* searcher, QWidget* main, QWidget* parentw) : QMainWindow(parentw) { _editor_fn = QDir::toNativeSeparators(file); _editor_mode = BibTeX; _c2b_mainP = main; _searcherP = searcher; initEditor(); } c2bEditor::~c2bEditor() { if (_browserP) _settingsP->setValue("c2bEditor/BrowserFontPointSize", _browserP->font().pointSize()); } void c2bEditor::initEditor() { ui.setupUi(this); setAttribute(Qt::WA_DeleteOnClose); _settingsP = c2bSettingsP; if (_editor_mode == BibTeX) _bpP = c2b::bibParser(); else _bpP = 0; _browserP = 0; _editorP = new c2bTextEdit(this); _referencesP = 0; _stackedWidgetP = new QStackedWidget(this); setCentralWidget(_stackedWidgetP); _stackedWidgetP->addWidget(_editorP); _textFinderP = new findDialog(this); _lineLabelP = new QLabel(); _lineLabelP->setText(tr(" Line: 1 Col: 1 ")); _lineLabelP->setAlignment(Qt::AlignVCenter | Qt::AlignRight); _lineLabelP->setFrameStyle(QFrame::NoFrame); _lineLabelP->setLineWidth(1); _lineLabelP->setFixedHeight(_lineLabelP->fontMetrics().height()); statusBar()->addWidget(_lineLabelP, 1); connect(_editorP, SIGNAL(cursorPositionChanged()), this, SLOT(cursorPositionChanged())); _overwriteLabelP = new QLabel(); _overwriteLabelP->setText(tr(" INS ")); _overwriteLabelP->setAlignment(Qt::AlignVCenter | Qt::AlignRight); _overwriteLabelP->setFrameStyle(QFrame::NoFrame); _overwriteLabelP->setLineWidth(1); _overwriteLabelP->setFixedHeight(_overwriteLabelP->fontMetrics().height()); statusBar()->addWidget(_overwriteLabelP); _editorP->setOverwriteMode(false); connect(_editorP, SIGNAL(overwriteModeChanged()), this, SLOT(overwriteModeChanged())); connect(ui.fileCloseAction, SIGNAL(triggered()), this, SLOT(close())); connect(ui.fileExecAction, SIGNAL(triggered()), this, SLOT(saveAndExecute())); connect(ui.fileExitAction, SIGNAL(triggered()), c2b::instance(), SLOT(exitRequested())); connect(ui.fileSaveAction, SIGNAL(triggered()), this, SLOT(fileSave())); connect(ui.fileSaveAsAction, SIGNAL(triggered()), this, SLOT(fileSaveAs())); connect(ui.helpEditorAction, SIGNAL(triggered()), this, SLOT(helpEditor())); connect(ui.helpCb2BibAction, SIGNAL(triggered()), this, SLOT(helpCb2Bib())); connect(ui.viewCb2BibAction, SIGNAL(triggered()), this, SLOT(viewCb2Bib())); // Standard shortcuts ui.fileCloseAction->setShortcut(QKeySequence(QKeySequence::Close)); ui.fileOpenAction->setShortcut(QKeySequence(QKeySequence::Open)); ui.fileSaveAction->setShortcut(QKeySequence(QKeySequence::Save)); ui.helpEditorAction->setShortcut(QKeySequence(QKeySequence::HelpContents)); ui.viewZoomInAction->setShortcut(QKeySequence(QKeySequence::ZoomIn)); ui.viewZoomOutAction->setShortcut(QKeySequence(QKeySequence::ZoomOut)); ui.fileExitAction->setShortcut(QKeySequence(QKeySequence::Quit)); ui.fileSaveAsAction->setShortcut(QKeySequence(QKeySequence::SaveAs)); // Editor Settings resize(_settingsP->value("c2bEditor/size", size()).toSize()); ui.menuView->addAction(ui.toolBar->toggleViewAction()); ui.setLyXPipeAction->setVisible(false); _editorP->setFont(_settingsP->c2bMonoFont); connect(ui.settingsCb2BibAction, SIGNAL(triggered()), c2b::instance(), SLOT(configure())); // Bookmarks bookmarkPlugin* bookmarks = new bookmarkPlugin(this); menuBar()->insertMenu(ui.menuSettings->menuAction(), bookmarks); connect(bookmarks, SIGNAL(openFile(const QString&)), this, SIGNAL(openFile(const QString&))); connect(bookmarks, SIGNAL(editBookmarks()), this, SIGNAL(openBookmarks())); load(); setEditorMode(); importActions(); QApplication::processEvents(); // Qt 4.7.0 emits contentsChange with position inconsistently defined, make sure it is not captured connect(_editorP->document(), SIGNAL(contentsChange(int, int, int)), this, SLOT(isModified(int, int, int))); connect(c2b::instance(), SIGNAL(statusMessage(const QString&)), this, SLOT(showMessage(const QString&))); } void c2bEditor::setEditorMode() { if (_editor_mode == RegExp) { _shP = new c2bREHighlighter(_editorP->document()); ui.fileExecAction->setText(tr("Restart Recognition")); ui.fileExecAction->setStatusTip(tr("Restart recognition")); _settingsP->setKeysequence("Shortcuts/Editor/", ui.fileExecAction); connect(this, SIGNAL(execute()), this, SIGNAL(restartEngine())); ui.toolBar->setVisible(_settingsP->value("c2bEditor/ToolBar", true).toBool()); setViewMode(true); } else if (_editor_mode == NetQInfo) { _shP = new c2bREHighlighter(_editorP->document()); ui.fileExecAction->setText(tr("Restart Network Query")); ui.fileExecAction->setStatusTip(tr("Restart network query")); _settingsP->setKeysequence("Shortcuts/Editor/", ui.fileExecAction); connect(this, SIGNAL(execute()), this, SIGNAL(restartQuery())); ui.toolBar->setVisible(_settingsP->value("c2bEditor/ToolBar", true).toBool()); setViewMode(true); } else if (_editor_mode == JAbbrev) { ui.fileExecAction->setVisible(false); ui.toolBar->setVisible(_settingsP->value("c2bEditor/ToolBar", true).toBool()); setViewMode(true); } else if (_editor_mode == Annote) { _shP = new c2bBibHighlighter(_editorP->document()); ui.fileExecAction->setText(tr("View Note in External Browser")); ui.fileExecAction->setStatusTip(tr("View Note in External Browser")); _settingsP->setKeysequence("Shortcuts/Editor/", ui.fileExecAction); _editorP->setLaTeXActions(); connect(this, SIGNAL(execute()), this, SLOT(htmlView())); ui.toolBar->setVisible(_settingsP->value("c2bEditor/ToolBar", true).toBool()); setViewMode(true); } else if (_editor_mode == BibTeX) { // Editor _shP = new c2bBibHighlighter(_editorP->document()); ui.fileOpenAction->setVisible(true); connect(ui.fileOpenAction, SIGNAL(triggered()), this, SLOT(fileOpen())); _editorP->setBibTeXActions(); connect(_editorP->pasteCurrentBibTeXAction, SIGNAL(triggered()), this, SLOT(pasteCurrentBibTeX())); connect(_editorP->journalsToFullAction, SIGNAL(triggered()), this, SLOT(journalsToFull())); connect(_editorP->journalsToAbbreviatedAction, SIGNAL(triggered()), this, SLOT(journalsToAbbreviated())); connect(_editorP->updateMetadataAction, SIGNAL(triggered()), this, SLOT(updateMetadata())); connect(_c2b_mainP, SIGNAL(addedBibToFile(const QString&)), this, SLOT(reload(const QString&))); ui.fileExecAction->setText(tr("Save and Postprocess")); ui.fileExecAction->setStatusTip(tr("Save and postprocess")); _settingsP->setKeysequence("Shortcuts/Editor/", ui.fileExecAction); connect(this, SIGNAL(execute()), this, SLOT(postProcess())); // Browser _browserP = new c2bTextBrowser(this); _browserP->setFont(QFont(QFont().family(), _settingsP->value("c2bEditor/BrowserFontPointSize", QFont().pointSize()).toInt())); _stackedWidgetP->addWidget(_browserP); ui.viewEditorModeAction->setVisible(true); _settingsP->setKeysequence("Shortcuts/Editor/", ui.viewEditorModeAction); connect(ui.viewEditorModeAction, SIGNAL(triggered(bool)), this, SLOT(setViewMode(bool))); connect(ui.viewZoomInAction, SIGNAL(triggered()), _browserP, SLOT(zoomIn())); connect(ui.viewZoomOutAction, SIGNAL(triggered()), _browserP, SLOT(zoomOut())); // Reference List createReferenceList(); _referencesP->loadList(_editorP->toPlainText(), _searcherP); bool edit_mode(false); if (_searcherP) { edit_mode = (_searcherP->hitsCount() == 0 && _searcherP->errorsCount() > 0); connect(_referencesP, SIGNAL(openFile(const QString&)), this, SIGNAL(openFile(const QString&))); } if (!_edit_reference_at_position.isEmpty()) { edit_mode = true; _referencesP->goToReference(_edit_reference_at_position.toInt()); } ui.viewEditorModeAction->setChecked(edit_mode); setViewMode(edit_mode); ui.setLyXPipeAction->setVisible(true); _settingsP->setKeysequence("Shortcuts/Editor/", ui.setLyXPipeAction); // Export entries ui.fileExportEntriesAction->setVisible(true); _settingsP->setKeysequence("Shortcuts/Editor/", ui.fileExportEntriesAction); connect(ui.fileExportEntriesAction, SIGNAL(triggered()), this, SLOT(exportEntries())); connect(_referencesP, SIGNAL(hasSelectedItems(bool)), ui.fileExportEntriesAction, SLOT(setEnabled(bool))); } else c2bUtils::debug(tr("c2bEditor::setEditorMode: '%1' invalid Editor Mode.").arg(_editor_mode)); } void c2bEditor::importActions() { QList<QAction*> acts = _textFinderP->actions(); for (int i = 0; i < acts.count(); ++i) ui.menuEdit->addAction(acts.at(i)); acts = _editorP->actions(); for (int i = 0; i < acts.count(); ++i) ui.menuEdit->addAction(acts.at(i)); if (_browserP) { ui.menuEdit->addSeparator(); acts = _browserP->actions(); for (int i = 0; i < acts.count(); ++i) ui.menuEdit->addAction(acts.at(i)); } } void c2bEditor::createReferenceList() { _dockWidgetP = new QDockWidget(this); _dockWidgetP->setObjectName("dwRList"); _referencesP = new c2bReferenceList(_editorP, _browserP, _dockWidgetP); addDockWidget(Qt::BottomDockWidgetArea, _dockWidgetP); _dockWidgetP->setWidget(_referencesP); _dockWidgetP->setWindowTitle("Reference List"); QByteArray state = _settingsP->value("c2bEditor/state").toByteArray(); restoreState(state); ui.menuView->addAction(_dockWidgetP->toggleViewAction()); // State contains toolBar info, too, but it can be changed from non BibTeX editors // State can not be used for non BibTeX editors. They don't have referenceList. ui.toolBar->setVisible(_settingsP->value("c2bEditor/ToolBar", true).toBool()); connect(ui.setLyXPipeAction, SIGNAL(triggered()), _referencesP, SLOT(setLyXPipe())); } void c2bEditor::closeEvent(QCloseEvent* qevent) { if (closeEditor()) qevent->accept(); else qevent->ignore(); } bool c2bEditor::closeEditor() { // Use _is_modified_by_user to check if closing is possible. This way, // no question is asked to exit browsing of search results. Do not use // here ui.fileSaveAction->isEnabled(). if (_is_modified_by_user) { const int button(QMessageBox::information(this, tr("Information - cb2Bib"), tr("The document has been modified.\nDo you want to save the changes?"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Save)); if (button == QMessageBox::Save) { if (!fileSave()) return false; } else if (button == QMessageBox::Cancel) return false; } _settingsP->setValue("c2bEditor/size", size()); if (_editor_mode == BibTeX) _settingsP->setValue("c2bEditor/state", saveState()); _settingsP->setValue("c2bEditor/ToolBar", !ui.toolBar->isHidden()); return true; } void c2bEditor::isModified(int position, int charsRemoved, int charsAdded) { if (position == 0 && charsAdded == charsRemoved) return; ui.fileSaveAction->setEnabled(true); setWindowModified(true); _is_modified_by_user = true; } void c2bEditor::fileOpen() { if (_editor_mode == BibTeX) { const QString filename(c2bFileDialog::getOpenFilename(this, "Select a BibTeX filename", _editor_fn, "BibTeX (*.bib)")); if (!filename.isEmpty()) emit openFile(filename); } } bool c2bEditor::fileSave() { if (_editor_fn.contains("unnamed_")) return fileSaveAs(); QFile file(_editor_fn); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::warning(this, tr("Warning - cb2Bib"), tr("Unable to open the file %1 for writing.\nError: '%2'."). arg(_editor_fn).arg(file.errorString()), QMessageBox::Ok); return false; } QTextStream stream(&file); stream.setCodec("UTF-8"); stream.setAutoDetectUnicode(true); stream << _editorP->toPlainText(); ui.fileSaveAction->setEnabled(false); _editorP->document()->setModified(false); setWindowModified(false); _is_modified_by_user = false; return true; } bool c2bEditor::fileSaveAs() { QString filename; if (_editor_mode == BibTeX) filename = c2bFileDialog::getSaveFilename(this, QString(), _editor_fn, "BibTeX (*.bib);;All (*)"); else if (_editor_mode == Annote) filename = c2bFileDialog::getSaveFilename(this, QString(), _editor_fn, "LaTeX (*.tex);;All (*)"); else filename = c2bFileDialog::getSaveFilename(this, QString(), _editor_fn, "Text (*.txt);;All (*)"); if (filename.isEmpty() || filename.contains("unnamed_")) return false; const QString old_name(_editor_fn); _editor_fn = filename; setWindowTitle(tr("%1[*] - cb2Bib").arg(_editor_fn)); _editorP->setEditorFilename(_editor_fn); emit editFileRenamed(old_name, _editor_fn); return fileSave(); } void c2bEditor::saveAndExecute() { // Use ui.fileSaveAction->isEnabled() instead of _is_modified_by_user. // If browsing search results there is no file on disk. if (ui.fileSaveAction->isEnabled()) { if (fileSave()) emit execute(); } else emit execute(); } void c2bEditor::load() { bool modified_flag(false); QFileInfo fi(_editor_fn); if (_editor_fn.isEmpty() || fi.isDir()) // Set an appropriate working name { QStringList unamedList; foreach(QWidget * widget, QApplication::topLevelWidgets()) { if (widget->inherits("c2bEditor")) unamedList.append(widget->objectName()); } int i(1); while (unamedList.indexOf(QRegExp(QString(".*unnamed_%1.bib").arg(i))) > -1) ++i; _editor_fn = QDir::toNativeSeparators(QDir::cleanPath(_editor_fn + QDir::separator() + QString("unnamed_%1.bib").arg(i))); if (_searcherP) { _editorP->setPlainText(_searcherP->logString() + _searcherP->hitsString()); modified_flag = true; } } else { QRegExp edit_ref_id(":(\\d+)$"); if (edit_ref_id.indexIn(_editor_fn) > -1) { _edit_reference_at_position = edit_ref_id.cap(1); _editor_fn.remove(edit_ref_id); } QFile file(_editor_fn); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { QMessageBox::warning(_c2b_mainP, tr("Warning - cb2Bib"), tr("Unable to open the file %1 for reading.\nError: '%2'."). arg(_editor_fn).arg(file.errorString()), QMessageBox::Ok); } else { QTextStream stream(&file); stream.setCodec("UTF-8"); stream.setAutoDetectUnicode(true); _editorP->setPlainText(stream.readAll()); } } setWindowTitle(tr("%1[*] - cb2Bib").arg(_editor_fn)); _editorP->setEditorFilename(_editor_fn); ui.fileSaveAction->setEnabled(modified_flag); _editorP->document()->setModified(modified_flag); setWindowModified(modified_flag); _is_modified_by_user = false; } void c2bEditor::reload(const QString& fn) { // This function must be called ONLY in BibTeX mode // Pointers are undefined otherwise if (_editor_mode != BibTeX || _editor_fn != fn) return; if (ui.fileSaveAction->isEnabled()) { QMessageBox msgBox(this); msgBox.addButton(tr("Discard and Reload"), QMessageBox::AcceptRole); msgBox.addButton(QMessageBox::Cancel); msgBox.setDefaultButton(msgBox.addButton(QMessageBox::Save)); msgBox.setWindowTitle(tr("Information - cb2Bib")); msgBox.setText(tr("The document has been modified on disk when the reference was inserted. " "No automatic reloading is done because it also has local changes. " "To preserve local changes press Save and insert again the last reference.\n\n" "Do you want to save the changes?")); msgBox.setIcon(QMessageBox::Information); const int button(msgBox.exec()); if (button == QMessageBox::Save) { fileSave(); _referencesP->refreshList(); return; } else if (button == QMessageBox::Cancel) return; } load(); _referencesP->refreshList(); QTextCursor cur = _editorP->textCursor(); cur.movePosition(QTextCursor::End, QTextCursor::MoveAnchor); _editorP->setTextCursor(cur); _editorP->ensureCursorVisible(); } void c2bEditor::exportEntries() { const QStringList keys(_referencesP->selectedKeys()); if (keys.count() == 0) return; c2bExportDialog ed(_editor_fn, _editorP->toPlainText(), keys, this); if (ed.exec()) emit openFile(ed.exportFilename()); } void c2bEditor::pasteCurrentBibTeX() { _editorP->insertPlainText(_bpP->toBibTeX(false)); } void c2bEditor::journalsToFull() { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); const QString text(_bpP->setJournalsToFull(_editorP->toPlainText())); _editorP->updatePlainText(text); QApplication::restoreOverrideCursor(); } void c2bEditor::journalsToAbbreviated() { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); const QString text(_bpP->setJournalsToAbbreviated(_editorP->toPlainText())); _editorP->updatePlainText(text); QApplication::restoreOverrideCursor(); } void c2bEditor::updateMetadata() { c2bUpdateMetadata um(this); um.update(_editor_fn, _editorP->toPlainText()); } void c2bEditor::htmlView() { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); const QString html_filename(_editor_fn + ".html"); texToHtml t2h; t2h.toHtml(c2bUtils::fileToString(_editor_fn), html_filename); c2bUtils::openFile(html_filename); QApplication::restoreOverrideCursor(); } void c2bEditor::postProcess() { c2bPostprocess* ppBib = new c2bPostprocess(_editor_fn, this); ppBib->show(); } void c2bEditor::helpEditor() { c2bUtils::displayHelp("http://www.molspaces.com/d_cb2bib-c2beditor.php"); } void c2bEditor::helpCb2Bib() { c2bUtils::displayHelp("http://www.molspaces.com/cb2bib/index.html"); } void c2bEditor::viewCb2Bib() { c2bUtils::setWidgetOnTop(_c2b_mainP); } void c2bEditor::setViewMode(bool edit_mode) { QList<QAction*> acts; if (edit_mode) { _textFinderP->setEditor(_editorP); if (_browserP) { acts = _browserP->actions(); for (int i = 0; i < acts.count(); ++i) acts.at(i)->setVisible(false); ui.viewZoomInAction->setVisible(false); ui.viewZoomOutAction->setVisible(false); } acts = _editorP->actions(); for (int i = 0; i < acts.count(); ++i) acts.at(i)->setVisible(true); _stackedWidgetP->setCurrentWidget(_editorP); } else { // Browser defined _textFinderP->setEditor(_browserP); acts = _editorP->actions(); for (int i = 0; i < acts.count(); ++i) acts.at(i)->setVisible(false); acts = _browserP->actions(); for (int i = 0; i < acts.count(); ++i) acts.at(i)->setVisible(true); ui.viewZoomInAction->setVisible(true); ui.viewZoomOutAction->setVisible(true); _stackedWidgetP->setCurrentWidget(_browserP); } } void c2bEditor::showMessage(const QString& ms) { statusBar()->showMessage(ms, C2B_MESSAGE_TIME); } void c2bEditor::cursorPositionChanged() { int lineNumber(0); QTextBlock current = _editorP->textCursor().block(); QTextBlock b; for (b = _editorP->document()->begin(); b.isValid(); b = b.next()) { ++lineNumber; if (b == current) break; } int linePosition(_editorP->textCursor().position() - current.position() + 1); _lineLabelP->setText(tr(" Line: %1 Col: %2 ").arg(lineNumber).arg(linePosition)); } void c2bEditor::overwriteModeChanged() { if (_editorP->overwriteMode()) _overwriteLabelP->setText(tr(" OVR ")); else _overwriteLabelP->setText(tr(" INS ")); } ���cb2bib-1.9.7/src/PaxHeaders.3194/c2bExportDialog.ui�������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�016443� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.003254785 29 ctime=1498583182.64725809 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bExportDialog.ui�����������������������������������������������������������������0000644�0001750�0000144�00000012546�13124510115�020041� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>c2bExportDialog</class> <widget class="QDialog" name="c2bExportDialog"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>563</width> <height>308</height> </rect> </property> <property name="windowTitle"> <string>Dialog</string> </property> <layout class="QGridLayout"> <item row="0" column="0"> <widget class="QGroupBox" name="groupBox2"> <property name="title"> <string/> </property> <layout class="QGridLayout"> <item row="0" column="0"> <widget class="QLabel" name="label"> <property name="text"> <string>BibTeX File:</string> </property> </widget> </item> <item row="0" column="1"> <layout class="QHBoxLayout"> <property name="spacing"> <number>6</number> </property> <property name="margin"> <number>0</number> </property> <item> <widget class="c2bLineEdit" name="ExportFile"> <property name="text"> <string/> </property> </widget> </item> <item> <widget class="QToolButton" name="ExportFileDir"> <property name="statusTip"> <string>Select BibTeX directory</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> </layout> </item> </layout> </widget> </item> <item row="1" column="0"> <widget class="Line" name="line_2"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="2" column="0"> <widget class="QGroupBox" name="groupBox"> <property name="title"> <string/> </property> <layout class="QGridLayout"> <item row="0" column="0"> <widget class="QCheckBox" name="CopyDocuments"> <property name="text"> <string>Copy Documents</string> </property> <property name="shortcut"> <string/> </property> </widget> </item> </layout> </widget> </item> <item row="3" column="0"> <widget class="QGroupBox" name="DocumentsDirectoryBox"> <property name="title"> <string>Documents Directory</string> </property> <layout class="QGridLayout"> <item row="0" column="0"> <layout class="QHBoxLayout"> <property name="spacing"> <number>6</number> </property> <property name="margin"> <number>0</number> </property> <item> <widget class="c2bLineEdit" name="DocumentsDirectory"> <property name="text"> <string/> </property> </widget> </item> <item> <widget class="QToolButton" name="DocumentsDirectoryDir"> <property name="statusTip"> <string>Select PDF directory</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> </layout> </item> <item row="1" column="0"> <widget class="QCheckBox" name="RelativeDocumentDirectory"> <property name="text"> <string>Set directory relative to the BibTeX File Directory</string> </property> </widget> </item> </layout> </widget> </item> <item row="4" column="0"> <spacer> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>20</height> </size> </property> </spacer> </item> <item row="5" column="0"> <widget class="Line" name="line"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="6" column="0"> <widget class="QDialogButtonBox" name="buttonBox"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="standardButtons"> <set>QDialogButtonBox::Cancel|QDialogButtonBox::Help</set> </property> </widget> </item> </layout> </widget> <customwidgets> <customwidget> <class>c2bLineEdit</class> <extends>QLineEdit</extends> <header>c2bLineEdit.h</header> </customwidget> </customwidgets> <resources> <include location="cb2bib.qrc"/> </resources> <connections> <connection> <sender>buttonBox</sender> <signal>rejected()</signal> <receiver>c2bExportDialog</receiver> <slot>reject()</slot> <hints> <hint type="sourcelabel"> <x>603</x> <y>259</y> </hint> <hint type="destinationlabel"> <x>630</x> <y>156</y> </hint> </hints> </connection> <connection> <sender>CopyDocuments</sender> <signal>clicked(bool)</signal> <receiver>DocumentsDirectoryBox</receiver> <slot>setEnabled(bool)</slot> <hints> <hint type="sourcelabel"> <x>23</x> <y>80</y> </hint> <hint type="destinationlabel"> <x>154</x> <y>134</y> </hint> </hints> </connection> </connections> </ui> ����������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bNetworkQueryInfo.h����������������������������������������������0000644�0000000�0000000�00000000132�13124510216�017145� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.847256233 30 atime=1498583183.003254785 30 ctime=1498583182.851256196 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bNetworkQueryInfo.h��������������������������������������������������������������0000644�0001750�0000144�00000002244�13124510216�020541� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BNETWORKQUERYINFO_H #define C2BNETWORKQUERYINFO_H #include <QObject> #include <QStringList> class QAction; class c2bBibParser; class c2bFileSystemWatcher; /** Manage Network Query Information */ class c2bNetworkQueryInfo : public QObject { Q_OBJECT public: explicit c2bNetworkQueryInfo(QObject* parento = 0); ~c2bNetworkQueryInfo(); QList<QAction*> bookmarkActions(const QString& selection); const QString bookmarksToHtml() const; const QString encodeLink(const QString& ln) const; private: QList<QAction*> BookmarkActionList; QString NetworkFile; QString _current_selection; QStringList BookmarkList; c2bFileSystemWatcher* _fsw; const c2bBibParser* _bpP; private slots: void loadSettings(); void openBookmark(); void parseBookmarks(); }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bConfigureFR.ui��������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�016213� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.003254785 29 ctime=1498583182.64725809 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bConfigureFR.ui������������������������������������������������������������������0000644�0001750�0000144�00000010270�13124510115�017601� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<ui version="4.0" > <author>Pere Constans</author> <class>c2bConfigureFR</class> <widget class="QDialog" name="c2bConfigureFR" > <property name="geometry" > <rect> <x>0</x> <y>0</y> <width>666</width> <height>151</height> </rect> </property> <property name="sizePolicy" > <sizepolicy vsizetype="Preferred" hsizetype="Preferred" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="windowTitle" > <string>Edit Find-Replace - cb2Bib</string> </property> <layout class="QGridLayout" > <property name="margin" > <number>6</number> </property> <property name="spacing" > <number>6</number> </property> <item row="2" column="1" > <widget class="QDialogButtonBox" name="buttonBox" > <property name="layoutDirection" > <enum>Qt::LeftToRight</enum> </property> <property name="autoFillBackground" > <bool>true</bool> </property> <property name="orientation" > <enum>Qt::Horizontal</enum> </property> <property name="standardButtons" > <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> </property> <property name="centerButtons" > <bool>false</bool> </property> </widget> </item> <item row="2" column="0" > <spacer> <property name="orientation" > <enum>Qt::Horizontal</enum> </property> <property name="sizeType" > <enum>QSizePolicy::Expanding</enum> </property> <property name="sizeHint" stdset="0" > <size> <width>271</width> <height>20</height> </size> </property> </spacer> </item> <item row="1" column="0" colspan="2" > <widget class="Line" name="line2" > <property name="frameShape" > <enum>QFrame::HLine</enum> </property> <property name="frameShadow" > <enum>QFrame::Sunken</enum> </property> <property name="orientation" > <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="0" column="0" colspan="2" > <layout class="QGridLayout" > <property name="margin" > <number>0</number> </property> <property name="spacing" > <number>6</number> </property> <item row="2" column="0" > <widget class="QLabel" name="textLabel3" > <property name="text" > <string>Description:</string> </property> </widget> </item> <item row="0" column="0" > <widget class="QLabel" name="textLabel1" > <property name="text" > <string>Find:</string> </property> </widget> </item> <item row="1" column="0" > <widget class="QLabel" name="textLabel2" > <property name="text" > <string>Replace:</string> </property> </widget> </item> <item row="0" column="1" > <widget class="c2bLineEdit" name="lineEditFind" /> </item> <item row="1" column="1" > <widget class="c2bLineEdit" name="lineEditReplace" /> </item> <item row="2" column="1" > <widget class="c2bLineEdit" name="lineEditDescription" /> </item> </layout> </item> </layout> </widget> <layoutdefault spacing="6" margin="11" /> <customwidgets> <customwidget> <class>c2bLineEdit</class> <extends>QLineEdit</extends> <header>c2bLineEdit.h</header> </customwidget> </customwidgets> <tabstops> <tabstop>lineEditFind</tabstop> <tabstop>lineEditReplace</tabstop> <tabstop>lineEditDescription</tabstop> </tabstops> <resources/> <connections> <connection> <sender>buttonBox</sender> <signal>rejected()</signal> <receiver>c2bConfigureFR</receiver> <slot>reject()</slot> <hints> <hint type="sourcelabel" > <x>637</x> <y>119</y> </hint> <hint type="destinationlabel" > <x>104</x> <y>117</y> </hint> </hints> </connection> <connection> <sender>buttonBox</sender> <signal>accepted()</signal> <receiver>c2bConfigureFR</receiver> <slot>accept()</slot> <hints> <hint type="sourcelabel" > <x>558</x> <y>122</y> </hint> <hint type="destinationlabel" > <x>24</x> <y>118</y> </hint> </hints> </connection> </connections> </ui> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2b����������������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�013503� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.991254896 30 atime=1498583183.003254785 30 ctime=1498583182.991254896 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/�������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�13124510216�015152� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/cb2bib_utilities.cpp�������������������������������������������0000644�0000000�0000000�00000000132�13124510216�017502� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.891255824 30 atime=1498583183.003254785 30 ctime=1498583182.895255788 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/cb2bib_utilities.cpp�����������������������������������������������������������0000644�0001750�0000144�00000063520�13124510216�021102� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "cb2bib_utilities.h" #include <QRegularExpressionMatchIterator> #ifdef C2B_USE_LZO #include <lzo/lzoconf.h> #include <lzo/lzo1x.h> #endif namespace c2bUtils { QString setCapitalization(const QString& str) { QString cap_string(str); if (isUpperCaseString(str)) cap_string = cap_string.toLower(); bool do_upper(true); for (int i = 0; i < cap_string.length(); i++) if (cap_string.at(i).isLetter()) { if (do_upper) cap_string[i] = cap_string.at(i).toUpper(); do_upper = false; } else if (cap_string.at(i) == '.' || cap_string.at(i) == ':') do_upper = true; return (cap_string); } QString& simplifyString(QString& str) { if (str.length() == 0) return str; const ushort space(32); ushort* const c0 = (ushort*)str.data(); ushort* const cn = c0 + str.length(); ushort* c = c0; ushort* o = c0; while (c < cn) { const ushort ch = *c; if ((ch > 32 && ch < 160) || !(ch == space || QChar(ch).isSpace())) *o++ = ch; else if (o > c0 && *(o - 1) != space) *o++ = space; ++c; } if (o > c0 && *(o - 1) == space) --o; str.truncate(int(o - c0)); return str; } QString& fillString(QString& str, const QStringMatcher& pattern, const QChar& ch) { if (str.length() == 0) return str; const int pl(pattern.pattern().length()); const ushort uch(ch.unicode()); ushort* const c0((ushort*)str.data()); int p(0); while (p >= 0) { p = pattern.indexIn(str, p); if (p > -1) { ushort* c(c0 + p); const ushort* const cpl(c + pl); while (c < cpl) *c++ = uch; p += pl; } } return str; } QString& fillString(QString& str, const QString& pattern, const QChar& ch) { return fillString(str, QStringMatcher(pattern, Qt::CaseSensitive), ch); } QString& fillString(QString& str, const QRegExp& pattern, const QChar& ch) { if (str.length() == 0) return str; const ushort uch(ch.unicode()); ushort* const c0((ushort*)str.data()); int p(0); while (p >= 0) { p = pattern.indexIn(str, p); if (p > -1) { const int pl(pattern.matchedLength()); ushort* c(c0 + p); const ushort* const cpl(c + pl); while (c < cpl) *c++ = uch; p += pl; } } return str; } QString& fillString(QString& str, const QRegularExpression& pattern, const QChar& ch) { if (str.length() == 0) return str; const ushort uch(ch.unicode()); ushort* const c0((ushort*)str.data()); QRegularExpressionMatchIterator it(pattern.globalMatch(str)); while (it.hasNext()) { const QRegularExpressionMatch match(it.next()); ushort* c(c0 + match.capturedStart()); const ushort* const cpl(c + match.capturedLength()); while (c < cpl) *c++ = uch; } return str; } static const unsigned short _cyrillic_to_ascii[] = { // Code points 1024 to 1309 // See http://en.wikipedia.org/wiki/ISO_9 69, 69, 68, 71, 69, 90, 73, 73, 74, 76, 78, 67, 75, 73, 85, 68, 65, 66, 86, 71, 68, 69, 90, 90, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 84, 85, 70, 72, 67, 67, 83, 83, 698, 89, 697, 69, 85, 65, 97, 98, 118, 103, 100, 101, 122, 122, 105, 106, 107, 108, 109, 110, 111, 112, 114, 115, 116, 117, 102, 104, 99, 99, 115, 115, 698, 121, 697, 101, 117, 97, 101, 101, 100, 103, 101, 122, 105, 105, 106, 108, 110, 99, 107, 105, 117, 100, 1120, 1121, 69, 101, 1124, 1125, 1126, 1127, 1128, 1129, 65, 97, 1132, 1133, 1134, 1135, 1136, 1137, 70, 102, 89, 121, 89, 121, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 71, 103, 71, 103, 71, 103, 90, 122, 1176, 1177, 75, 107, 75, 107, 75, 107, 75, 107, 78, 110, 78, 110, 80, 112, 79, 111, 83, 115, 84, 116, 85, 117, 85, 117, 72, 104, 67, 99, 67, 99, 67, 99, 72, 104, 67, 99, 67, 99, 1216, 90, 122, 75, 107, 76, 108, 78, 110, 78, 110, 67, 99, 1229, 1230, 1231, 65, 97, 65, 97, 1236, 1237, 69, 101, 65, 97, 65, 97, 90, 122, 90, 122, 90, 122, 73, 105, 73, 105, 79, 111, 79, 111, 79, 111, 69, 101, 85, 117, 85, 117, 85, 117, 67, 99, 1270, 1271, 89, 121, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 78, 110, 1292, 1293, 84, 116, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 81, 113, 87, 119 }; static inline QString& _to_ascii_transliterate(QString& str) { // Strip diacritics, undo ligatures, transliterate if (str.length() == 0) return str; ushort* const c0 = (ushort*)str.data(); ushort* const cn = c0 + str.length(); ushort* c = c0 - 1; bool do_ligatures_198(false); bool do_ligatures_223(false); bool do_ligatures_230(false); bool do_ligatures_338(false); bool do_ligatures_339(false); while (c < cn) { ++c; if (*c < 128) continue; if (*c > 1023 && *c < 1310) { *c = _cyrillic_to_ascii[*c-1024]; if (*c == 1236) { *c = 198; do_ligatures_198 = true; } if (*c == 1237) { *c = 230; do_ligatures_230 = true; } continue; } QChar qc(*c); if (!qc.isLetter()) continue; switch (*c) { case 216: *c = QChar('O').unicode(); break; case 248: *c = QChar('o').unicode(); break; case 272: *c = QChar('D').unicode(); break; case 273: *c = QChar('d').unicode(); break; case 321: *c = QChar('L').unicode(); break; case 322: *c = QChar('l').unicode(); break; case 198: do_ligatures_198 = true; break; case 223: do_ligatures_223 = true; break; case 230: do_ligatures_230 = true; break; case 338: do_ligatures_338 = true; break; case 339: do_ligatures_339 = true; break; } if (qc.decompositionTag() == QChar::NoDecomposition) continue; qc = qc.decomposition().at(0); *c = qc.unicode(); if (qc.decompositionTag() == QChar::NoDecomposition) continue; qc = qc.decomposition().at(0); *c = qc.unicode(); } if (do_ligatures_198) str.replace(QChar(198), "AE", Qt::CaseSensitive); if (do_ligatures_223) str.replace(QChar(223), "ss", Qt::CaseSensitive); if (do_ligatures_230) str.replace(QChar(230), "ae", Qt::CaseSensitive); if (do_ligatures_338) str.replace(QChar(338), "OE", Qt::CaseSensitive); if (do_ligatures_339) str.replace(QChar(339), "oe", Qt::CaseSensitive); return str; } static inline QString& _to_ascii_keep_words(QString& str) { // Do: // const QRegExp nonAsciiWords("[^A-Za-z0-9\\+\\- ]"); // str.replace(nonAsciiWords, " "); // str = str.simplified(); if (str.length() == 0) return str; const ushort dash(QChar('-').unicode()); const ushort la(QChar('a').unicode()); const ushort lz(QChar('z').unicode()); const ushort n0(QChar('0').unicode()); const ushort n9(QChar('9').unicode()); const ushort plus(QChar('+').unicode()); const ushort space(QChar(' ').unicode()); const ushort ua(QChar('A').unicode()); const ushort uz(QChar('Z').unicode()); ushort* const c0 = (ushort*)str.data(); ushort* const cn = c0 + str.length(); ushort* c = c0; ushort* o = c0; while (c < cn) { const ushort ch = *c; if ((ch >= la && ch <= lz) || (ch >= ua && ch <= uz) || (ch >= n0 && ch <= n9) || ch == dash || ch == plus) *o++ = ch; else if (o > c0 && *(o - 1) != space) *o++ = space; ++c; } if (o > c0 && *(o - 1) == space) --o; str.truncate(int(o - c0)); return str; } QString toAscii(const QString& str, const AsciiConversion type) { QString ascii(str); if (type == FromBibTeX) cleanEquations(ascii); _to_ascii_transliterate(ascii); if (type == Collation) { for (int i = 0; i < ascii.length(); ++i) if (ascii.at(i).category() == QChar::Punctuation_Dash) ascii[i] = ' '; return ascii.toCaseFolded(); } if (type == KeepWords || type == FromBibTeX) _to_ascii_keep_words(ascii); else if (type == Cleanup) ascii.remove(nonAsciiLetter); return ascii; } QString& stripDiacritics(QString& str) { _to_ascii_transliterate(str); return str; } QString& c2bToBib(QString& str) { // Escape common Extended Latin Characters str.replace(" &", " \\&"); str.replace(QChar(183), "$\\cdot$"); str.replace(QChar(192), "{\\`A}"); str.replace(QChar(193), "{\\'A}"); str.replace(QChar(194), "{\\^A}"); str.replace(QChar(195), "{\\~A}"); str.replace(QChar(196), "{\\\"A}"); str.replace(QChar(197), "{\\AA{}}"); str.replace(QChar(198), "{\\AE{}}"); str.replace(QChar(199), "{\\c{C}}"); str.replace(QChar(200), "{\\`E}"); str.replace(QChar(201), "{\\'E}"); str.replace(QChar(202), "{\\^E}"); str.replace(QChar(203), "{\\\"E}"); str.replace(QChar(204), "{\\`I}"); str.replace(QChar(205), "{\\'I}"); str.replace(QChar(206), "{\\^I}"); str.replace(QChar(207), "{\\\"I}"); str.replace(QChar(209), "{\\~N}"); str.replace(QChar(210), "{\\`O}"); str.replace(QChar(211), "{\\'O}"); str.replace(QChar(212), "{\\^O}"); str.replace(QChar(213), "{\\~O}"); str.replace(QChar(214), "{\\\"O}"); str.replace(QChar(216), "{\\O}"); str.replace(QChar(217), "{\\`U}"); str.replace(QChar(218), "{\\'U}"); str.replace(QChar(219), "{\\^U}"); str.replace(QChar(220), "{\\\"U}"); str.replace(QChar(221), "{\\'Y}"); str.replace(QChar(223), "{\\ss}"); str.replace(QChar(224), "{\\`a}"); str.replace(QChar(225), "{\\'a}"); str.replace(QChar(226), "{\\^a}"); str.replace(QChar(227), "{\\~a}"); str.replace(QChar(228), "{\\\"a}"); str.replace(QChar(229), "{\\aa{}}"); str.replace(QChar(230), "{\\ae{}}"); str.replace(QChar(231), "{\\c{c}}"); str.replace(QChar(232), "{\\`e}"); str.replace(QChar(233), "{\\'e}"); str.replace(QChar(234), "{\\^e}"); str.replace(QChar(235), "{\\\"e}"); str.replace(QChar(236), "{\\`i}"); str.replace(QChar(237), "{\\'i}"); str.replace(QChar(238), "{\\^i}"); str.replace(QChar(239), "{\\\"i}"); str.replace(QChar(241), "{\\~n}"); str.replace(QChar(242), "{\\`o}"); str.replace(QChar(243), "{\\'o}"); str.replace(QChar(244), "{\\^o}"); str.replace(QChar(245), "{\\~o}"); str.replace(QChar(246), "{\\\"o}"); str.replace(QChar(248), "{\\o}"); str.replace(QChar(249), "{\\`u}"); str.replace(QChar(250), "{\\'u}"); str.replace(QChar(251), "{\\^u}"); str.replace(QChar(252), "{\\\"u}"); str.replace(QChar(253), "{\\'y}"); str.replace(QChar(255), "{\\\"y}"); str.replace(QChar(263), "{\\'c}"); str.replace(QChar(268), "{\\v{C}}"); str.replace(QChar(269), "{\\v{c}}"); str.replace(QChar(272), "{\\DJ}"); str.replace(QChar(273), "{\\dj}"); str.replace(QChar(321), "{\\L}"); str.replace(QChar(322), "{\\l}"); str.replace(QChar(323), "{\\'N}"); str.replace(QChar(324), "{\\'n}"); str.replace(QChar(338), "{\\OE}"); str.replace(QChar(339), "{\\oe}"); str.replace(QChar(352), "{\\v{S}}"); str.replace(QChar(353), "{\\v{s}}"); str.replace(QChar(376), "{\\\"Y"); str.replace(QChar(381), "{\\v{Z}}"); str.replace(QChar(382), "{\\v{z}}"); // Escape common Greek and math str.replace(QChar(913), "$\\Alpha$"); // Some uppercases might require engrec package str.replace(QChar(914), "$\\Beta$"); str.replace(QChar(915), "$\\Gamma$"); str.replace(QChar(916), "$\\Delta$"); str.replace(QChar(917), "$\\Epsilon$"); str.replace(QChar(918), "$\\Zeta$"); str.replace(QChar(919), "$\\Eta$"); str.replace(QChar(920), "$\\Theta$"); str.replace(QChar(921), "$\\Iota$"); str.replace(QChar(922), "$\\Kappa$"); str.replace(QChar(923), "$\\Lambda$"); str.replace(QChar(924), "$\\Mu$"); str.replace(QChar(925), "$\\Nu$"); str.replace(QChar(926), "$\\Xi$"); str.replace(QChar(927), "$\\Omicron$"); str.replace(QChar(928), "$\\Pi$"); str.replace(QChar(929), "$\\Rho$"); str.replace(QChar(931), "$\\Sigma$"); str.replace(QChar(932), "$\\Tau$"); str.replace(QChar(933), "$\\Upsilon$"); str.replace(QChar(934), "$\\Phi$"); str.replace(QChar(935), "$\\Chi$"); str.replace(QChar(936), "$\\Psi$"); str.replace(QChar(937), "$\\Omega$"); str.replace(QChar(945), "$\\alpha$"); str.replace(QChar(946), "$\\beta$"); str.replace(QChar(947), "$\\gamma$"); str.replace(QChar(948), "$\\delta$"); str.replace(QChar(949), "$\\varepsilon$"); str.replace(QChar(950), "$\\zeta$"); str.replace(QChar(951), "$\\eta$"); str.replace(QChar(952), "$\\theta$"); str.replace(QChar(953), "$\\iota$"); str.replace(QChar(954), "$\\kappa$"); str.replace(QChar(955), "$\\lambda$"); str.replace(QChar(956), "$\\mu$"); str.replace(QChar(957), "$\\nu$"); str.replace(QChar(958), "$\\xi$"); str.replace(QChar(959), "$\\omicron$"); str.replace(QChar(960), "$\\pi$"); str.replace(QChar(961), "$\\rho$"); str.replace(QChar(962), "$\\varsigma$"); str.replace(QChar(963), "$\\sigma$"); str.replace(QChar(964), "$\\tau$"); str.replace(QChar(965), "$\\upsilon$"); str.replace(QChar(966), "$\\phi$"); str.replace(QChar(967), "$\\chi$"); str.replace(QChar(968), "$\\psi$"); str.replace(QChar(969), "$\\omega$"); str.replace(QChar(977), "$\\vartheta$"); str.replace(QChar(981), "$\\varphi$"); str.replace(QChar(982), "$\\varpi$"); str.replace(QChar(989), "$\\digamma$"); str.replace(QChar(1008), "$\\varkappa$"); str.replace(QChar(1009), "$\\varrho$"); str.replace(QChar(1013), "$\\epsilon$"); str.replace(QChar(8706), "$\\partial$"); str.replace(QChar(8722), '-'); str.replace(QChar(8734), "$\\infty$"); return str; } QString& bibToC2b(QString& str) { // Escape TeX special characters to Unicode str.replace("\\&", "&"); // From \LaTeX{} syntax to {\LaTeX} for the implemented subset str.replace(QRegExp("\\\\(.{1,2})\\{(.{0,2})\\}"), "{\\\\1\\2}"); if (hasLatexDiacritic.indexIn(str) >= 0) { str.replace("{\\`A}", QChar(192)); str.replace("{\\'A}", QChar(193)); str.replace("{\\^A}", QChar(194)); str.replace("{\\~A}", QChar(195)); str.replace("{\\\"A}", QChar(196)); str.replace("{{\\AA}}", QChar(197)); str.replace("{{\\AE}}", QChar(198)); str.replace("{\\AA}", QChar(197)); // {\\AA{}} str.replace("{\\AE}", QChar(198)); // {\\AE{}} str.replace("{{\\cC}}", QChar(199)); // {\\c{C}} str.replace("{\\cC}", QChar(199)); // {\\c{C}} str.replace("{\\`E}", QChar(200)); str.replace("{\\'E}", QChar(201)); str.replace("{\\^E}", QChar(202)); str.replace("{\\\"E}", QChar(203)); str.replace("{\\`I}", QChar(204)); str.replace("{\\'I}", QChar(205)); str.replace("{\\^I}", QChar(206)); str.replace("{\\\"I}", QChar(207)); str.replace("{\\~N}", QChar(209)); str.replace("{\\`O}", QChar(210)); str.replace("{\\'O}", QChar(211)); str.replace("{\\^O}", QChar(212)); str.replace("{\\~O}", QChar(213)); str.replace("{\\\"O}", QChar(214)); str.replace("{\\O}", QChar(216)); str.replace("{\\`U}", QChar(217)); str.replace("{\\'U}", QChar(218)); str.replace("{\\^U}", QChar(219)); str.replace("{\\\"U}", QChar(220)); str.replace("{\\'Y}", QChar(221)); str.replace("{\\ss}", QChar(223)); str.replace("{\\`a}", QChar(224)); str.replace("{\\'a}", QChar(225)); str.replace("{\\^a}", QChar(226)); str.replace("{\\~a}", QChar(227)); str.replace("{\\\"a}", QChar(228)); str.replace("{{\\aa}}", QChar(229)); str.replace("{{\\ae}}", QChar(230)); str.replace("{\\aa}", QChar(229)); // {\\aa{}} str.replace("{\\ae}", QChar(230)); // {\\ae{}} str.replace("{{\\cc}}", QChar(231)); // {\\c{c}} str.replace("{\\cc}", QChar(231)); // {\\c{c}} str.replace("{\\`e}", QChar(232)); str.replace("{\\'e}", QChar(233)); str.replace("{\\^e}", QChar(234)); str.replace("{\\\"e}", QChar(235)); str.replace("{\\`i}", QChar(236)); str.replace("{\\'i}", QChar(237)); str.replace("{\\^i}", QChar(238)); str.replace("{\\\"i}", QChar(239)); str.replace("{\\`\\i}", QChar(236)); str.replace("{\\'\\i}", QChar(237)); str.replace("{\\^\\i}", QChar(238)); str.replace("{\\\"\\i}", QChar(239)); str.replace("{\\~n}", QChar(241)); str.replace("{\\`o}", QChar(242)); str.replace("{\\'o}", QChar(243)); str.replace("{\\^o}", QChar(244)); str.replace("{\\~o}", QChar(245)); str.replace("{\\\"o}", QChar(246)); str.replace("{\\o}", QChar(248)); str.replace("{\\`u}", QChar(249)); str.replace("{\\'u}", QChar(250)); str.replace("{\\^u}", QChar(251)); str.replace("{\\\"u}", QChar(252)); str.replace("{\\'y}", QChar(253)); str.replace("{\\\"y}", QChar(255)); str.replace("{\\'c}", QChar(263)); str.replace("{{\\vC}}", QChar(268)); // {\\v{C}} str.replace("{\\vC}", QChar(268)); str.replace("{{\\vc}}", QChar(269)); // {\\v{c} str.replace("{\\vc}", QChar(269)); str.replace("{\\DJ}", QChar(272)); str.replace("{\\dj}", QChar(273)); str.replace("{\\L}", QChar(321)); str.replace("{\\l}", QChar(322)); str.replace("{\\'N}", QChar(323)); str.replace("{\\'n}", QChar(324)); str.replace("{\\OE}", QChar(338)); str.replace("{\\oe}", QChar(339)); str.replace("{{\\vS}}", QChar(352)); // {\\v{S}} str.replace("{\\vS}", QChar(352)); str.replace("{{\\vs}}", QChar(353)); // {\\v{s}} str.replace("{\\vs}", QChar(353)); str.replace("{\\\"Y}", QChar(376)); str.replace("{{\\vZ}}", QChar(381)); // {\\v{Z}} str.replace("{\\vZ}", QChar(381)); str.replace("{{\\vz}}", QChar(382)); // {\\v{Z}} str.replace("{\\vz}", QChar(382)); } if (hasLatexSymbol.indexIn(str) >= 0) { str.replace("$\\cdot$", QChar(183)); str.replace("$\\Alpha$", QChar(913)); str.replace("$\\Beta$", QChar(914)); str.replace("$\\Gamma$", QChar(915)); str.replace("$\\Delta$", QChar(916)); str.replace("$\\Epsilon$", QChar(917)); str.replace("$\\Zeta$", QChar(918)); str.replace("$\\Eta$", QChar(919)); str.replace("$\\Theta$", QChar(920)); str.replace("$\\Iota$", QChar(921)); str.replace("$\\Kappa$", QChar(922)); str.replace("$\\Lambda$", QChar(923)); str.replace("$\\Mu$", QChar(924)); str.replace("$\\Nu$", QChar(925)); str.replace("$\\Xi$", QChar(926)); str.replace("$\\Omicron$", QChar(927)); str.replace("$\\Pi$", QChar(928)); str.replace("$\\Rho$", QChar(929)); str.replace("$\\Sigma$", QChar(931)); str.replace("$\\Tau$", QChar(932)); str.replace("$\\Upsilon$", QChar(933)); str.replace("$\\Phi$", QChar(934)); str.replace("$\\Chi$", QChar(935)); str.replace("$\\Psi$", QChar(936)); str.replace("$\\Omega$", QChar(937)); str.replace("$\\alpha$", QChar(945)); str.replace("$\\beta$", QChar(946)); str.replace("$\\gamma$", QChar(947)); str.replace("$\\delta$", QChar(948)); str.replace("$\\varepsilon$", QChar(949)); str.replace("$\\zeta$", QChar(950)); str.replace("$\\eta$", QChar(951)); str.replace("$\\theta$", QChar(952)); str.replace("$\\iota$", QChar(953)); str.replace("$\\kappa$", QChar(954)); str.replace("$\\lambda$", QChar(955)); str.replace("$\\mu$", QChar(956)); str.replace("$\\nu$", QChar(957)); str.replace("$\\xi$", QChar(958)); str.replace("$\\omicron$", QChar(959)); str.replace("$\\pi$", QChar(960)); str.replace("$\\rho$", QChar(961)); str.replace("$\\sigmaf$", QChar(962)); str.replace("$\\varsigma$", QChar(962)); // Equal to \sigmaf str.replace("$\\sigma$", QChar(963)); str.replace("$\\tau$", QChar(964)); str.replace("$\\upsilon$", QChar(965)); str.replace("$\\phi$", QChar(966)); str.replace("$\\chi$", QChar(967)); str.replace("$\\psi$", QChar(968)); str.replace("$\\omega$", QChar(969)); str.replace("$\\vartheta$", QChar(977)); str.replace("$\\varphi$", QChar(981)); str.replace("$\\varpi$", QChar(982)); str.replace("$\\digamma$", QChar(989)); str.replace("$\\varkappa$", QChar(1008)); str.replace("$\\varrho$", QChar(1009)); str.replace("$\\epsilon$", QChar(1013)); str.replace("$\\partial$", QChar(8706)); str.replace("$\\infty$", QChar(8734)); } return str; } const QString fromUtf8(const QByteArray& ba) { // Based on Qt's QString::fromUtf8 function. Input ba must be an UTF-8 // encoded array produced by QString::toUtf8. Encoding correctness is // assumed and checking omitted. It performs a 20% faster compared to // Qt 4.5, and expected more compared to Qt 4.6. const char* b = ba.constData(); const char* const bn = b + ba.length(); QString output; output.resize(ba.length()); ushort* o = (ushort*)output.unicode(); uint c; while (b < bn) { c = uint(*b); if (c & 0x80) { if ((c & 0xe0) == 0xc0) { c &= 0x1f; c = (uint)((c << 6) | (*++b & 0x3f)); } else if ((c & 0xf0) == 0xe0) { c &= 0x0f; c = (uint)((c << 6) | (b[1] & 0x3f)); c = (uint)((c << 6) | (b[2] & 0x3f)); b += 2; } else if ((c & 0xf8) == 0xf0) { c &= 0x07; c = (uint)((c << 6) | (b[1] & 0x3f)); c = (uint)((c << 6) | (b[2] & 0x3f)); c = (uint)((c << 6) | (b[3] & 0x3f)); *o++ = QChar::highSurrogate(c); c = QChar::lowSurrogate(c); b += 3; } else c = QChar::ReplacementCharacter; } *o++ = ushort(c); ++b; } output.truncate(int(o - (ushort*)output.unicode())); // QString check = QString::fromUtf8(ba); // qDebug() << (check == output); return output; } #ifdef C2B_USE_LZO const QByteArray lzo::compress(const QByteArray& data) { const lzo_uint src_s(data.size()); if (src_s == 0) return QByteArray(); if (lzo_init() != LZO_E_OK) { warn("compress: lzo: internal error - initialization failed"); return QByteArray(); } const lzo_bytep src_p = reinterpret_cast<const lzo_bytep>(data.constData()); QByteArray compressed; const lzo_uint dest_s = HEADER_LENGTH + (src_s + src_s / 16 + 64 + 3); compressed.resize((int)dest_s); lzo_bytep compressed_p = reinterpret_cast<lzo_bytep>(compressed.data()); lzo_bytep dest_p = compressed_p + HEADER_LENGTH; lzo_uint enc_dest_s = dest_s - HEADER_LENGTH; QByteArray wrkmem; wrkmem.resize(LZO1X_999_MEM_COMPRESS); lzo_bytep wrkmem_p = reinterpret_cast<lzo_bytep>(wrkmem.data()); if (lzo1x_999_compress(src_p, src_s, dest_p, &enc_dest_s, wrkmem_p) == LZO_E_OK) { compressed.resize((int)enc_dest_s + HEADER_LENGTH); QByteArray header(QByteArray::number((qulonglong)src_s)); for (int i = 0; i < qMin(header.length(), HEADER_LENGTH); ++i) compressed[i] = header[i]; for (int i = qMin(header.length(), HEADER_LENGTH); i < HEADER_LENGTH; ++i) compressed[i] = ' '; return compressed; } else { warn("compress: lzo: internal error - compression failed"); return QByteArray(); } } const QByteArray lzo::uncompress(const QByteArray& data) { const lzo_uint data_s(data.size()); if (data_s <= (unsigned int)HEADER_LENGTH) return QByteArray(); if (lzo_init() != LZO_E_OK) { warn("uncompress: lzo: internal error - initialization failed"); return QByteArray(); } const lzo_bytep data_p = reinterpret_cast<const lzo_bytep>(data.constData()); const lzo_bytep src_p = data_p + HEADER_LENGTH; const lzo_uint src_s = data_s - HEADER_LENGTH; QByteArray uncompressed; const ulong expected_dest_s = data.left(HEADER_LENGTH).trimmed().toULong(); lzo_uint dest_s = qMax(expected_dest_s, lzo_uint(1)); uncompressed.resize((int)dest_s); lzo_bytep dest_p = reinterpret_cast<lzo_bytep>(uncompressed.data()); if (lzo1x_decompress(src_p, src_s, dest_p, &dest_s, NULL) == LZO_E_OK && (ulong)dest_s == expected_dest_s) return uncompressed; else { warn("uncompress: lzo: internal error - uncompression failed"); return QByteArray(); } } #endif } // namespace c2bUtils ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/wordPattern.h��������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016242� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.987254933 30 atime=1498583183.003254785 30 ctime=1498583182.991254896 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/wordPattern.h������������������������������������������������������������������0000644�0001750�0000144�00000004222�13124510216�017634� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef WORDPATTERN_H #define WORDPATTERN_H #include "compositePattern.h" #include <QStringMatcher> class wordPattern : public compositePattern { public: enum Type {AllWords, AnyWord}; wordPattern(); wordPattern(const QString& pattern, const Type type, const Qt::CaseSensitivity cs); inline ~wordPattern() {} void setPattern(const QString& pattern, const Type type, const Qt::CaseSensitivity cs = Qt::CaseSensitive); inline bool matches(const QString& str) const { _matched_length = -1; if (str.length() == 0) return false; if (_type == AllWords) { for (int i = _subpattern_count - 1; i >= 0; --i) if (_submatchers.at(i).indexIn(str) == -1) return false; return true; } else { for (int i = 0; i < _subpattern_count; ++i) if (_submatchers.at(i).indexIn(str) != -1) return true; return false; } } inline int indexIn(const QString& str, const int from = 0) const { // Do not match. Get index for (w1|w2|...). _matched_length = -1; if (str.length() == 0) return -1; int index(str.length()); for (int i = 0; i < _subpattern_count; ++i) { const int p(_submatchers.at(i).indexIn(str, from)); if (p != -1 && p < index) { index = p; _matched_length = _substrings.at(i).length(); } } if (index == str.length()) index = -1; return index; } inline const QVector<QStringMatcher>& submatchers() const { return _submatchers; } private: QVector<QStringMatcher> _submatchers; Type _type; }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/metadataParser.h�����������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016666� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.967255119 30 atime=1498583183.003254785 30 ctime=1498583182.967255119 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/metadataParser.h���������������������������������������������������������������0000644�0001750�0000144�00000004030�13124510216�020255� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef METADATAPARSER_H #define METADATAPARSER_H #include <bibReference.h> #include <QObject> class coreBibParser; class settings; class metadataParser : public QObject { Q_OBJECT public: explicit metadataParser(QObject* parento = 0); metadataParser(coreBibParser* cbp, QObject* parento = 0); inline ~metadataParser() {} bool insertMetadata(const bibReference& ref, const QString& fn, QString* error = 0) const; bool metadata(const QString& fn, bibReference* ref); const QString metadata(const QString& fn); signals: void showMessage(const QString& title, const QString& ms) const; private: QHash<QString, QString> _bibtex_key; QRegExp _bibtex_fields; QRegExp _fields; bibReference _ref; bool _has_bibtex; bool _has_cb2bib; bool _has_prism; bool _metadata(const QString& fn); const QString _pdfDictionary(const QByteArray& rawpdf); coreBibParser* _cbpP; settings* _settingsP; void _fuzzyParser(const QString& data); void _metadataXmp(const QString& fn, const QByteArray& raw_contents, QStringList* xmls); void _metadataXmpExifTool(const QString& fn, QStringList* xmls); void _miscellaneousData(const QString& fn, const QByteArray& raw_contents); void init(); inline QString formattedAuthor(const QString& author) const { const QStringList alist(author.split(" and ", QString::SkipEmptyParts)); int na(alist.count()); if (na <= 2) return author; QString formatted(alist.first()); for (int i = 1; i < na - 1; ++i) formatted += ", " + alist.at(i); formatted += ", and " + alist.last(); return formatted; } }; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/wordMatcher.h��������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016210� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.987254933 30 atime=1498583183.003254785 30 ctime=1498583182.987254933 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/wordMatcher.h������������������������������������������������������������������0000644�0001750�0000144�00000004441�13124510216�017605� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef WORDMATCHER_H #define WORDMATCHER_H #include <QStringMatcher> #include <QVector> class wordMatcher { public: wordMatcher(); wordMatcher(const QString& pattern, const Qt::CaseSensitivity cs = Qt::CaseSensitive); inline ~wordMatcher() {} int indexIn(const QString& str, const int from = 0) const; void setPattern(const QString& pattern, const Qt::CaseSensitivity cs); inline int matchedLength() const { return _matched_length; } private: inline int _index_in(const int& s, const QString& str, const int& p0) const { return _substrings.at(s).indexIn(str, p0); } inline int _index_in(const int& s, const QString& str, const int& p0, const int& pn) const { if (p0 >= pn) return -1; return _substrings.at(s).indexIn(str.unicode(), std::min(_pn, pn), p0); } inline int _index_around(const QString& str, const int phook) const { _sp0.fill(-1); _sp0[_hook] = phook; const int bp0 = std::max(_p0, phook - _stretch); const int bpn = std::min(_pn, phook + _stretch); for (int i = 0; i < _substring_count; ++i) if (_sp0.at(i) == -1) { const int p0(_index_in(i, str, bp0, bpn)); if (p0 == -1) return -1; _sp0[i] = p0; } int bp(_pn); int fp(_p0); for (int i = 0; i < _substring_count; ++i) { const int p0 = _sp0.at(i); if (bp > p0) bp = p0; const int pn = p0 + _lengths.at(i); if (fp < pn) fp = pn; } _matched_length = fp - bp; return bp; } QVector<QStringMatcher> _substrings; QVector<int> _lengths; int _stretch; int _hook; int _substring_count; mutable QVector<int> _sp0; mutable int _matched_length; mutable int _p0; mutable int _pn; }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/settings.cpp���������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016124� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.923255528 30 atime=1498583183.003254785 30 ctime=1498583182.923255528 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/settings.cpp�������������������������������������������������������������������0000644�0001750�0000144�00000063306�13124510216�017526� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "settings.h" #include "cb2bib_utilities.h" #include <QCoreApplication> #include <QDir> /** Global settings for the cb2Bib */ settings::settings(const QString& organization, const QString& application, QObject* parento) : QSettings(organization, application, parento) { _init(); } settings::settings(const QString& fn, QObject* parento) : QSettings(fn, QSettings::IniFormat, parento) { _init(); } settings::settings(QObject* parento) : QSettings(C2B_ORGANIZATION, C2B_APPLICATION, parento) { _init(); init(false); } settings::~settings() { _c2b_global_settings = 0; } void settings::init(bool command_line) { if (command_line) readCommandLine(); if (cl_user_configured) _is_usb_configured_mode = QDir::toNativeSeparators(QDir::cleanPath(QSettings::fileName())) == QDir::toNativeSeparators(QDir::cleanPath(_c2bApp->applicationDirPath() + '/' + "cb2bib.conf")); else _is_usb_configured_mode = false; if (_is_usb_configured_mode) { _c2bAppDir = QDir(_c2bApp->applicationDirPath()); _tmp_dir_path = _c2bApp->applicationDirPath(); } else { // Use user's home as tmp_dir since tmp files are more accessible if they are needed, // for instance, for debugging netqinf // Using cb2bib remotely causes tmp_dir not being writable, fallback to machine's tmp const QFileInfo hpi(QDir::homePath()); if (hpi.exists() && hpi.isWritable()) _tmp_dir_path = QDir::homePath(); else _tmp_dir_path = QDir::tempPath(); } setDefaults(); // Set relative to BibTeX file in USB mode, overriding defaults. if (_is_usb_configured_mode) setValue("cb2Bib/RelativePdfDirectory", true); } void settings::_init() { _c2bApp = QCoreApplication::instance(); Q_ASSERT_X(_c2bApp, "settings", "application was not instantiated"); Q_ASSERT_X(!_c2b_global_settings, "settings", "settings already instantiated"); settings::_c2b_global_settings = this; _application_pid = QString::number(_c2bApp->applicationPid()); _is_loaded = true; cl_bibedit = false; cl_cb2bib_import_mode = false; cl_cb2bib_tests = false; cl_citer = false; cl_configure = false; cl_doc2bib = false; cl_html_annote = false; cl_import = false; cl_index = false; cl_sloppy = false; cl_txt2bib = false; cl_user_configured = false; cl_view_annote = false; } void settings::setDefaultValue(const QString& key, const QVariant& defaulValue) { // Makes sure a key is initialized setValue(key, value(key, defaulValue)); } void settings::setDefaults() { QHash<QString, QVariant> defaults; const QString dsep(QDir::separator()); // Files defaults["cb2Bib/BibTeXFile"] = QDir::cleanPath(QDir::homePath() + dsep + "references.bib"); defaults["cb2Bib/CacheDirectory"] = QDir::cleanPath(QDir::homePath() + dsep + "PdfDocuments" + dsep + "c2b.tmp"); defaults["cb2Bib/PdfDirectory"] = QDir::cleanPath(QDir::homePath() + dsep + "PdfDocuments"); #if defined(Q_OS_WIN) const QString C2B_APP_DIR(_c2bApp->applicationDirPath() + dsep); defaults["c2bAnnote/AnnoteCssFile"] = C2B_APP_DIR + "data\\tex2html.css"; defaults["c2bAnnote/MathJaxHeaderFile"] = C2B_APP_DIR + "data\\tex2html_mathjax_header.html"; defaults["c2bBibSearcher/Pdf2TextBin"] = C2B_APP_DIR + "externtools\\xpdf\\pdf2cb.exe"; defaults["c2bPdfImport/LastFile"] = C2B_APP_DIR + "testPDFImport\\nomeaning1.pdf"; defaults["c2bPdfImport/Pdf2TextBin"] = C2B_APP_DIR + "externtools\\xpdf\\pdf2cb.exe"; defaults["cb2Bib/BrowserCssFile"] = C2B_APP_DIR + "data\\references.css"; defaults["cb2Bib/JournalFile"] = C2B_APP_DIR + "data\\abbreviations.txt"; defaults["cb2Bib/NetworkFile"] = C2B_APP_DIR + "data\\netqinf.txt"; defaults["cb2Bib/PosLexiconFile"] = C2B_APP_DIR + "data\\lexicon.pos"; defaults["cb2Bib/PostprocessBibTeXBin"] = C2B_APP_DIR + C2B_POSTPROCESS_BIBTEX_BIN; defaults["cb2Bib/PreparserBin"] = C2B_APP_DIR + "c2btools\\ris2bib.bat"; defaults["cb2Bib/RegularExpressionFile"] = C2B_APP_DIR + "data\\regexps.txt"; #elif defined(Q_OS_MACOS) QString C2B_DATA_DIR_MAC(C2B_DATA_DIR); if (QDir(C2B_DATA_DIR + "/data/").exists()) C2B_DATA_DIR_MAC = QDir::cleanPath(C2B_DATA_DIR + '/'); else if (QDir(_c2bApp->applicationDirPath() + "/../Resources/data/").exists()) C2B_DATA_DIR_MAC = QDir::cleanPath(_c2bApp->applicationDirPath() + "/../Resources/"); defaults["c2bAnnote/AnnoteCssFile"] = QDir::cleanPath(C2B_DATA_DIR_MAC + "/data/tex2html.css"); defaults["c2bAnnote/MathJaxHeaderFile"] = QDir::cleanPath(C2B_DATA_DIR_MAC + "/data/tex2html_local_mathjax_header.html"); defaults["c2bBibSearcher/Pdf2TextBin"] = QDir::cleanPath(C2B_BIBSEARCHER_PDF2TXT_BIN); defaults["c2bPdfImport/LastFile"] = QDir::cleanPath(C2B_DATA_DIR_MAC + "/testPDFImport/nomeaning1.pdf"); defaults["c2bPdfImport/Pdf2TextBin"] = QDir::cleanPath(C2B_PDFIMPORT_PDF2TXT_BIN); defaults["cb2Bib/BrowserCssFile"] = QDir::cleanPath(C2B_DATA_DIR_MAC + "/data/references.css"); defaults["cb2Bib/ExifToolBin"] = QDir::cleanPath(C2B_METADATAPARSER_EXIFTOOL_BIN); defaults["cb2Bib/JournalFile"] = QDir::cleanPath(C2B_DATA_DIR_MAC + "/data/abbreviations.txt"); defaults["cb2Bib/NetworkFile"] = QDir::cleanPath(C2B_DATA_DIR_MAC + "/data/netqinf.txt"); defaults["cb2Bib/PosLexiconFile"] = QDir::cleanPath(C2B_DATA_DIR_MAC + dsep + "data/lexicon.pos"); defaults["cb2Bib/PostprocessBibTeXBin"] = QDir::cleanPath(C2B_DATA_DIR_MAC + C2B_POSTPROCESS_BIBTEX_BIN); defaults["cb2Bib/PreparserBin"] = QDir::cleanPath(C2B_DATA_DIR_MAC + "/c2btools/ris2bib"); defaults["cb2Bib/RegularExpressionFile"] = QDir::cleanPath(C2B_DATA_DIR_MAC + "/data/regexps.txt"); #else // Q_OS_UNIX defaults["c2bAnnote/AnnoteCssFile"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "data/tex2html.css"); defaults["c2bAnnote/MathJaxHeaderFile"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "data/tex2html_local_mathjax_header.html"); defaults["c2bBibSearcher/Pdf2TextBin"] = QDir::cleanPath(C2B_BIBSEARCHER_PDF2TXT_BIN); defaults["c2bPdfImport/LastFile"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "testPDFImport/nomeaning1.pdf"); defaults["c2bPdfImport/Pdf2TextBin"] = QDir::cleanPath(C2B_PDFIMPORT_PDF2TXT_BIN); defaults["cb2Bib/BrowserCssFile"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "data/references.css"); defaults["cb2Bib/ExifToolBin"] = QDir::cleanPath(C2B_METADATAPARSER_EXIFTOOL_BIN); defaults["cb2Bib/JournalFile"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "data/abbreviations.txt"); defaults["cb2Bib/NetworkFile"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "data/netqinf.txt"); defaults["cb2Bib/PosLexiconFile"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "data/lexicon.pos"); defaults["cb2Bib/PostprocessBibTeXBin"] = QDir::cleanPath(C2B_DATA_DIR + dsep + C2B_POSTPROCESS_BIBTEX_BIN); defaults["cb2Bib/PreparserBin"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "c2btools/ris2bib"); defaults["cb2Bib/RegularExpressionFile"] = QDir::cleanPath(C2B_DATA_DIR + dsep + "data/regexps.txt"); #endif // External file manager defaults["cb2Bib/FmClient"] = false; defaults["cb2Bib/FmClientCopyArg"] = C2B_FM_CLIENT_COPY_ARG; defaults["cb2Bib/FmClientCopyBin"] = QDir::cleanPath(C2B_FM_CLIENT_COPY_BIN); defaults["cb2Bib/FmClientMoveArg"] = C2B_FM_CLIENT_MOVE_ARG; defaults["cb2Bib/FmClientMoveBin"] = QDir::cleanPath(C2B_FM_CLIENT_MOVE_BIN); // Proxy defaults["cb2Bib/UseProxy"] = false; defaults["cb2Bib/ProxyPort"] = 8080; defaults["cb2Bib/ProxyType"] = 0; // Postprocess BibTeX defaults["cb2Bib/PostprocessBibTeXArg"] = C2B_POSTPROCESS_BIBTEX_ARG; defaults["cb2Bib/PostprocessBibTeXExt"] = C2B_POSTPROCESS_BIBTEX_EXT; // Misc defaults["c2bAnnote/IncludeCSS"] = true; defaults["c2bAnnote/UseRelativeLinks"] = false; defaults["cb2Bib/AddMetadata"] = true; defaults["cb2Bib/AutomaticPdfDownload"] = false; defaults["cb2Bib/AutomaticQuery"] = false; defaults["cb2Bib/CheckRepeatedOnSave"] = false; defaults["cb2Bib/CiteIdPattern"] = C2B_CITE_ID_PATTERN; defaults["cb2Bib/ConvertReferenceToLaTeX"] = true; defaults["cb2Bib/CopyMovePdf"] = "copy"; defaults["cb2Bib/DoHeuristicGuess"] = true; defaults["cb2Bib/DocumentIdPattern"] = C2B_DOCUMENT_ID_PATTERN; defaults["cb2Bib/FindReplaceInput"] = true; defaults["cb2Bib/FindReplaceInputList"] = C2B_FIND_REPLACE_LIST.split("^e"); defaults["cb2Bib/InsertMetadata"] = false; defaults["cb2Bib/KeepTmpNQFiles"] = false; defaults["cb2Bib/MovePdf"] = false; defaults["cb2Bib/PageNumberSeparator"] = " - "; defaults["cb2Bib/PostprocessMonth"] = false; defaults["cb2Bib/PreAppendMetadata"] = "prepend"; defaults["cb2Bib/PreparserAutomatic"] = false; defaults["cb2Bib/PreparserShowLog"] = true; defaults["cb2Bib/RelativePdfDirectory"] = false; defaults["cb2Bib/SetJournalsToFullname"] = false; defaults["cb2Bib/UseDoubleBraces"] = true; defaults["cb2Bib/UseFullNames"] = false; // Pdf2Text arguments defaults["c2bBibSearcher/Pdf2TextArg"] = "-q"; defaults["c2bPdfImport/Pdf2TextArg"] = "-q -f 1 -l 1"; // Construct current settings const QStringList keys(defaults.keys()); for (int i = 0; i < keys.count(); ++i) setValue(keys.at(i), value(keys.at(i), defaults.value(keys.at(i)))); } settings* settings::_c2b_global_settings = 0; /*************************************************************************** * Command line processing ***************************************************************************/ /** \page commandline The cb2Bib Command Line \verbatim Usage: cb2bib cb2bib [action] [filename1 [filename2 ... ]] [--conf [filename.conf]] Actions: --configure [filename.conf] Edit configuration --bibedit [filename1.bib [filename2.bib ... ]] Edit/browse BibTeX files --citer [filename1.bib [filename2.bib ... ]] Start cb2Bib citer --import tmp_reference_filename Import reference, usually from ad hoc websites --doc2bib fn1.doc [fn2.doc ... ] reference.bib Extract reference from document file --txt2bib fn1.txt [fn2.txt ... ] reference.bib Extract reference from text file --index [bibdirname] Extract keywords from document files --html-annote filename.tex Convert annote file to HTML --view-annote filename.tex Convert and visualize annote file --view-annote filename.tex.html Visualize annote file Switches: --conf [filename.conf] Use configuration file --sloppy Accept guesses in automatic reference extraction Examples: cb2bib Start cb2Bib extraction panel cb2bib --import tmp_reference_filename Import reference cb2bib --bibedit filename.bib Edit BibTeX filename.bib cb2bib --conf Start cb2Bib in USB mode cb2bib --doc2bib *.pdf references.bib Extract references from PDF title pages Notes: -Use switch --conf to particularize specific settings for specific actions. -The file cb2bib.conf must be readable and writable. If it does not exist, the cb2Bib will create one based on predefined defaults. -If starting the cb2Bib from a removable media, use the command 'cb2bib --conf' without configuration filename. Settings will be read from and written to /cb2bib/full/path/cb2bib.conf, being therefore independent of the mounting address that the host computer will provide. -To import references from a browser select when asked c2bimport, which expands to 'cb2bib --import %f'. The browser will provide the temporary reference filename. -A number of factors influence the reliability of automatic extractions. Consider writing customized regular expressions and network queries, and use metadata when available. Important: -The commands --doc2bib and --txt2bib do not append the references to the references.bib. They create a new file, or silently overwrite it if already exists. \endverbatim - <b>Note:</b> On Windows use <tt>c2bconsole</tt> instead of <tt>cb2bib</tt>. See \ref relnotes130. - <b>Note:</b> If using reference extraction command, see \ref faq_automatic_extraction. */ bool settings::isConsoleMode(int& argc, char** argv) { for (int i = 0; i < argc; ++i) if ( strcmp(argv[i], "--html-annote") == 0 || strcmp(argv[i], "--doc2bib") == 0 || strcmp(argv[i], "--txt2bib") == 0 || strcmp(argv[i], "--index") == 0 || strcmp(argv[i], "--test") == 0) return true; return false; } bool settings::isSingleApplicationMode(int& argc, char** argv) { for (int i = 0; i < argc; ++i) if (strcmp(argv[i], "--citer") == 0) return true; return false; } bool settings::isConfiguredMode() { const QCoreApplication* capp = QCoreApplication::instance(); const QStringList argv(capp->arguments()); const int argc(argv.count()); if (argc > 1) { for (int i = 1; i < argc; ++i) if (argv.at(i) == "--conf") return true; for (int i = 1; i < argc; ++i) if (argv.at(i) == "--configure") { const int j(i + 1); if (j < argc) if (!argv.at(j).startsWith('-')) return true; return false; } } return false; } const QString settings::configuredFilename() { const QCoreApplication* capp = QCoreApplication::instance(); QStringList arguments(capp->arguments()); arguments.removeAll(QString()); const int argc(arguments.count()); QString filename; for (int i = 1; i < argc - 1; ++i) if (arguments.at(i) == "--conf" || arguments.at(i) == "--configure") { const int j(i + 1); if (!arguments.at(j).startsWith('-')) filename = QFile::decodeName(arguments.at(j).toLocal8Bit()); break; } if (filename.isEmpty()) filename = capp->applicationDirPath() + QDir::separator() + "cb2bib.conf"; QFileInfo fi(filename); if (fi.isDir()) { c2bUtils::warn(QObject::tr("Error: Could not open %1 configuration file for reading/writing").arg(filename)); c2bUtils::warn(QObject::tr("Error: Filename is a directory")); exit(1); } QFile file(filename); if (!file.open(QIODevice::ReadWrite | QIODevice::Text)) { c2bUtils::warn(QObject::tr("Error: Could not open %1 configuration file for reading/writing").arg(filename)); c2bUtils::warn(QObject::tr("Error: %1.").arg(file.errorString())); exit(1); } return filename; } void settings::readCommandLine() { QStringList arguments(_c2bApp->arguments()); arguments.removeAll(QString()); int actions(0); for (int i = 1; i < arguments.count(); ++i) if (arguments.at(i).startsWith('-')) { // switches if (arguments.at(i) == "--conf") { checkCommand(&cl_user_configured, &actions); _conf_command_flags.append("--conf"); const int j(i + 1); if (j < arguments.count() && !arguments.at(j).startsWith('-')) _conf_command_flags.append(arguments.at(j)); --actions; } else if (arguments.at(i) == "--sloppy") { checkCommand(&cl_sloppy, &actions); --actions; } // actions else if (arguments.at(i) == "--configure") checkCommand(&cl_configure, &actions); else if (arguments.at(i) == "--bibedit") checkCommand(&cl_bibedit, &actions); else if (arguments.at(i) == "--citer") checkCommand(&cl_citer, &actions); else if (arguments.at(i) == "--import") checkCommand(&cl_import, &actions); else if (arguments.at(i) == "--html-annote") checkCommand(&cl_html_annote, &actions); else if (arguments.at(i) == "--view-annote") checkCommand(&cl_view_annote, &actions); else if (arguments.at(i) == "--doc2bib") checkCommand(&cl_doc2bib, &actions); else if (arguments.at(i) == "--txt2bib") checkCommand(&cl_txt2bib, &actions); else if (arguments.at(i) == "--index") checkCommand(&cl_index, &actions); else if (arguments.at(i).startsWith("--test")) cl_cb2bib_tests = true; else _is_loaded = false; } if (actions > 1) _is_loaded = false; if (cl_user_configured && cl_configure) _is_loaded = false; if (cl_sloppy && !(cl_doc2bib || cl_txt2bib)) _is_loaded = false; if (cl_index && (cl_bibedit || cl_citer || cl_import || cl_html_annote || cl_view_annote || cl_doc2bib || cl_txt2bib)) _is_loaded = false; if (!_is_loaded) { printUsage(); return; } cl_console_mode = cl_html_annote || cl_cb2bib_tests || cl_doc2bib || cl_txt2bib || cl_index; cl_cb2bib_mode = !(cl_console_mode || cl_configure || cl_view_annote); // Check for cl_user_configured if (cl_configure) for (int i = 1; i < arguments.count() - 1; ++i) if (arguments.at(i) == "--configure") { if (!arguments.at(i + 1).startsWith('-')) cl_user_configured = true; break; } // Check for --bibedit files if (cl_bibedit) { for (int i = 1; i < arguments.count(); ++i) if (arguments.at(i) == "--bibedit") { for (int j = i + 1; j < arguments.count(); ++j) if (arguments.at(j).startsWith('-')) break; else cl_bibedit_filenames.append(decodeFilename(arguments.at(j))); break; } if (cl_bibedit_filenames.count() == 0) cl_bibedit = false; else setValue("cb2Bib/BibTeXFile", cl_bibedit_filenames.first()); } // Check for --citer files else if (cl_citer) { for (int i = 1; i < arguments.count(); ++i) if (arguments.at(i) == "--citer") { for (int j = i + 1; j < arguments.count(); ++j) if (arguments.at(j).startsWith('-')) break; else cl_citer_filenames.append(decodeFilename(arguments.at(j))); break; } } // Check for --index BibTeX dirname else if (cl_index) { for (int i = 1; i < arguments.count(); ++i) if (arguments.at(i) == "--index") { const int j(i + 1); if (j < arguments.count() && !arguments.at(j).startsWith('-')) cl_index_dirname.append(decodeFilename(arguments.at(j))); break; } } // Check for annote file else if (cl_html_annote || cl_view_annote) { for (int i = 1; i < arguments.count(); ++i) if (arguments.at(i) == "--html-annote" || arguments.at(i) == "--view-annote") { const int j(i + 1); if (j < arguments.count()) if (!arguments.at(j).startsWith('-')) cl_annote_filename = decodeFilename(arguments.at(j)); if (cl_annote_filename.isEmpty()) _is_loaded = false; } } // Check for extraction files else if (cl_doc2bib || cl_txt2bib) { for (int i = 1; i < arguments.count(); ++i) if (arguments.at(i) == "--doc2bib" || arguments.at(i) == "--txt2bib") { for (int j = i + 1; j < arguments.count(); ++j) if (arguments.at(j).startsWith('-')) break; else cl_extract_input_filenames.append(decodeFilename(arguments.at(j))); break; } if (cl_extract_input_filenames.count() < 2) _is_loaded = false; else cl_extract_output_filename = cl_extract_input_filenames.takeLast(); } // Check for import reference file else if (cl_import) { if (arguments.count() > 2) if (!arguments.at(2).startsWith('-')) { cl_import_filename = QFileInfo(QFile::decodeName(arguments.at(2).toLocal8Bit())).absoluteFilePath(); return; } cl_import = false; _is_loaded = false; } // Accept also 'cb2bib filename' as '--import' to ease import on Windows else if (arguments.count() > 1) if (!arguments.at(1).startsWith('-')) { cl_import_filename = QFileInfo(QFile::decodeName(arguments.at(1).toLocal8Bit())).absoluteFilePath(); cl_import = true; return; } if (!_is_loaded) printUsage(); } void settings::checkCommand(bool* action, int* actions) { if (*action) _is_loaded = false; *action = true; *actions += 1; } QString settings::decodeFilename(const QString& fn) const { // This function is meant for fn given by the command shell and that will end up being visible return QDir::toNativeSeparators(QFileInfo(QFile::decodeName(fn.toLocal8Bit())).absoluteFilePath()); } void settings::printUsage() { fprintf(stdout, "Usage: cb2bib\n"); fprintf(stdout, " cb2bib [action] [filename1 [filename2 ... ]] [--conf [filename.conf]]\n"); fprintf(stdout, "\n"); fprintf(stdout, "Actions:\n"); fprintf(stdout, " --configure [filename.conf] Edit configuration\n"); fprintf(stdout, "\n"); fprintf(stdout, " --bibedit [filename1.bib [filename2.bib ... ]] Edit/browse BibTeX files\n"); fprintf(stdout, " --citer [filename1.bib [filename2.bib ... ]] Start cb2Bib citer\n"); fprintf(stdout, " --import tmp_reference_filename Import reference, usually from ad hoc websites\n"); fprintf(stdout, "\n"); fprintf(stdout, " --doc2bib fn1.doc [fn2.doc ... ] reference.bib Extract reference from document file\n"); fprintf(stdout, " --txt2bib fn1.txt [fn2.txt ... ] reference.bib Extract reference from text file\n"); fprintf(stdout, "\n"); fprintf(stdout, " --index [bibdirname] Extract keywords from document files\n"); fprintf(stdout, "\n"); fprintf(stdout, " --html-annote filename.tex Convert annote file to HTML\n"); fprintf(stdout, " --view-annote filename.tex Convert and visualize annote file\n"); fprintf(stdout, " --view-annote filename.tex.html Visualize annote file\n"); fprintf(stdout, "\n"); fprintf(stdout, "Switches:\n"); fprintf(stdout, " --conf [filename.conf] Use configuration file\n"); fprintf(stdout, " --sloppy Accept guesses in automatic reference extraction\n"); fprintf(stdout, "\n"); fprintf(stdout, "Examples:\n"); fprintf(stdout, " cb2bib Start cb2Bib extraction panel\n"); fprintf(stdout, " cb2bib --import tmp_reference_filename Import reference\n"); fprintf(stdout, " cb2bib --bibedit filename.bib Edit BibTeX filename.bib\n"); fprintf(stdout, " cb2bib --conf Start cb2Bib in USB mode\n"); fprintf(stdout, " cb2bib --doc2bib *.pdf references.bib Extract references from PDF title pages\n"); fprintf(stdout, "\n"); fprintf(stdout, "Notes:\n"); fprintf(stdout, " -Use switch --conf to particularize specific settings for specific actions.\n"); fprintf(stdout, " -The file cb2bib.conf must be readable and writable. If it does not exist, the cb2Bib will create one\n"); fprintf(stdout, " based on predefined defaults.\n"); fprintf(stdout, " -If starting the cb2Bib from a removable media use, the command 'cb2bib --conf' without configuration\n"); fprintf(stdout, " filename. Settings will be read from and written to /cb2bib/full/path/cb2bib.conf, being therefore\n"); fprintf(stdout, " independent of the mounting address that the host computer will provide.\n"); fprintf(stdout, " -To import references from a browser select when asked c2bimport, which expands to 'cb2bib --import %%f'.\n"); fprintf(stdout, " The browser will provide the temporary reference filename.\n"); fprintf(stdout, " -A number of factors influence the reliability of automatic extractions. Consider writing customized\n"); fprintf(stdout, " regular expressions and network queries, and use metadata when available.\n"); fprintf(stdout, "\n"); fprintf(stdout, "Important:\n"); fprintf(stdout, " -The commands --doc2bib and --txt2bib do not append the references to the references.bib. They create\n"); fprintf(stdout, " a new file, or silently overwrite it if already exists.\n"); fprintf(stdout, "\n"); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/cb2bib_parameters.h��������������������������������������������0000644�0000000�0000000�00000000132�13124510216�017277� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.947255305 30 atime=1498583183.003254785 30 ctime=1498583182.947255305 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/cb2bib_parameters.h������������������������������������������������������������0000644�0001750�0000144�00000006521�13124510216�020675� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef CB2BIB_PARAMETERS_H #define CB2BIB_PARAMETERS_H #include <QString> const QString C2B_DATA_DIR("/usr/share/cb2bib"); const int C2B_MESSAGE_TIME(6000); const QString C2B_APPLICATION("cb2Bib"); const QString C2B_CITE_ID_PATTERN("<<author_first>><<year_abbreviated>><<ppages_first>>"); const QString C2B_DOCUMENT_ID_PATTERN("<<citeid>>"); const QString C2B_FIND_REPLACE_LIST( "Corresponding Author Contact Information||ScienceDirect alt tag^e" "E-mail The Corresponding Author||ScienceDirect alt tag^e" "small pi, Greek|$\\pi$|ScienceDirect alt tag^e" "{sect}||PNAS - Author String^e" "{dagger}||PNAS - Author String"); const QString C2B_ICON_ABOUT_B_BACK("back_cb2bib_32.png"); const QString C2B_ICON_ABOUT_B("cb2bib.png"); const QString C2B_ICON_CONNECT_B("connect_established.png"); const QString C2B_ICON_DIR(":/icons/icons/"); const QString C2B_ICON_DISCONNECT_B("connect_no.png"); const QString C2B_ICON_VIEWBIB_B("viewbib.png"); const QString C2B_ICON_VIEWC2B_B("viewcb.png"); const QString C2B_ORGANIZATION("MOLspaces"); const QString C2B_VERSION("1.9.7"); // File Manager Client #if defined(Q_OS_WIN) const QString C2B_FM_CLIENT_COPY_ARG(""); const QString C2B_FM_CLIENT_COPY_BIN(""); const QString C2B_FM_CLIENT_MOVE_ARG(""); const QString C2B_FM_CLIENT_MOVE_BIN(""); #elif defined(Q_OS_MACOS) const QString C2B_FM_CLIENT_COPY_ARG(""); const QString C2B_FM_CLIENT_COPY_BIN(""); const QString C2B_FM_CLIENT_MOVE_ARG(""); const QString C2B_FM_CLIENT_MOVE_BIN(""); #else // Q_OS_UNIX const QString C2B_FM_CLIENT_COPY_ARG("copy"); const QString C2B_FM_CLIENT_COPY_BIN("kfmclient"); const QString C2B_FM_CLIENT_MOVE_ARG("move"); const QString C2B_FM_CLIENT_MOVE_BIN("kfmclient"); #endif // To text converter #if defined(Q_OS_WIN) const QString C2B_METADATAPARSER_EXIFTOOL_BIN("C:\\Windows\\exiftool.exe"); const QString C2B_PDFIMPORT_PDF2TXT_BIN("C:\\Program Files\\xpdf-3.04-win32\\pdf2cb.exe"); const QString C2B_BIBSEARCHER_PDF2TXT_BIN("C:\\Program Files\\xpdf-3.04-win32\\pdf2cb.exe"); #elif defined(Q_OS_MACOS) const QString C2B_METADATAPARSER_EXIFTOOL_BIN("exiftool"); const QString C2B_BIBSEARCHER_PDF2TXT_BIN("pdftotext"); const QString C2B_PDFIMPORT_PDF2TXT_BIN("pdftotext"); #else // Q_OS_UNIX const QString C2B_METADATAPARSER_EXIFTOOL_BIN("exiftool"); const QString C2B_BIBSEARCHER_PDF2TXT_BIN("pdftotext"); const QString C2B_PDFIMPORT_PDF2TXT_BIN("pdftotext"); #endif // BibTeX postprocessing #if defined(Q_OS_WIN) const QString C2B_POSTPROCESS_BIBTEX_BIN("c2btools\\bib2end.bat"); const QString C2B_POSTPROCESS_BIBTEX_ARG("%finput %foutput"); const QString C2B_POSTPROCESS_BIBTEX_EXT("end"); #elif defined(Q_OS_MACOS) const QString C2B_POSTPROCESS_BIBTEX_BIN("c2btools/bib2pdf"); const QString C2B_POSTPROCESS_BIBTEX_ARG("%finput %foutput"); const QString C2B_POSTPROCESS_BIBTEX_EXT("bib.pdf"); #else // Q_OS_UNIX const QString C2B_POSTPROCESS_BIBTEX_BIN("c2btools/bib2pdf"); const QString C2B_POSTPROCESS_BIBTEX_ARG("%finput %foutput"); const QString C2B_POSTPROCESS_BIBTEX_EXT("bib.pdf"); #endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/networkQuery.cpp�����������������������������������������������0000644�0000000�0000000�00000000132�13124510216�017003� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.915255601 30 atime=1498583183.003254785 30 ctime=1498583182.919255565 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/networkQuery.cpp���������������������������������������������������������������0000644�0001750�0000144�00000034640�13124510216�020404� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "networkQuery.h" #include "bibParser.h" #include "cb2bib_utilities.h" #include "network.h" #include "settings.h" #include <QTimer> networkQuery::networkQuery(bibParser* bp, QObject* parento) : QObject(parento), _bpP(bp) { Q_ASSERT_X(_bpP, "networkQuery", "bibParser was not instantiated"); _networkP = new network(this); init(); } networkQuery::networkQuery(bibParser* bp, network* net, QObject* parento) : QObject(parento), _bpP(bp), _networkP(net) { Q_ASSERT_X(_bpP, "networkQuery", "bibParser was not instantiated"); Q_ASSERT_X(_networkP, "networkQuery", "network was not instantiated"); init(); } void networkQuery::init() { _settingsP = settings::instance(); _settingsP->setValue("networkQuery/isSupervised", true); _networkquery_tmp_fn1 = _settingsP->tempPath() + "/cb2bib_query_tmp_html1_" + _settingsP->applicationPid(); _networkquery_tmp_fn2 = _settingsP->tempPath() + "/cb2bib_query_tmp_html2_" + _settingsP->applicationPid(); } void networkQuery::submitQuery(const bibReference& reference, const QString& raw_reference, const bool check_document) { // Submission Initialization _error_string.clear(); _query_parameter_count.clear(); _is_end_of_file = false; _check_document = check_document && _settingsP->value("cb2Bib/AutomaticPdfDownload").toBool(); // Query data _Qtitle = reference.value("title"); _Qjournal = _bpP->fullJournal(reference.value("journal")); _Qvolume = reference.value("volume"); _Qpage = c2bUtils::firstPage(reference.value("pages")); _Qdoi = reference.value("doi").trimmed(); if (!_Qdoi.isEmpty() && !_Qdoi.contains(QRegExp("^10\\.[\\d\\.]+/\\S+$"))) { _Qdoi.clear(); c2bUtils::warn(tr("Warning: DOI skipped: '%1' is not a valid DOI").arg(_Qdoi)); } _Qauthor = reference.value("author"); _Qauthor.replace(QRegExp("(?:\\b\\w\\b|\\band\\b|\\W)"), " "); _Qauthor = c2bUtils::simplifyString(_Qauthor); _Qexcerpt = _bpP->excerpt(raw_reference, QStringList() << _Qdoi << _Qauthor << _Qtitle); submitQuery1(); } void networkQuery::submitQuery1() { // Submission, first step, setting journal codes if (!setQueryParameters()) { _error_string = tr("No data for query."); emit queryEnded(false, _targetQ, _networkquery_tmp_fn1); return; } if (_is_end_of_file) { if (_networkP->errorString().isEmpty()) _error_string = tr("Performed %1 queries: No reference found.").arg(_query_parameter_count.count()); else _error_string = tr("Performed %1 queries: No reference found. %2").arg(_query_parameter_count.count()).arg(_networkP->errorString()); emit queryEnded(false, _targetQ, _networkquery_tmp_fn1); return; } c2bUtils::debug(tr("Query Number = %1").arg(_query_parameter_count.count())); c2bUtils::debug(tr("targetQ[%1]").arg(_targetQ)); c2bUtils::debug(tr("captionQ[%1]").arg(_captionQ)); c2bUtils::debug(tr("referenceurl_prefix[%1]").arg(_referenceurl_prefix)); c2bUtils::debug(tr("referenceurl_sufix[%1]").arg(_referenceurl_sufix)); c2bUtils::debug(tr("pdfurl_prefix[%1]").arg(_pdfurl_prefix)); c2bUtils::debug(tr("pdfurl_sufix[%1]").arg(_pdfurl_sufix)); c2bUtils::debug(tr("action[%1]").arg(_action)); c2bUtils::debug(tr("POST1[%1]").arg(_targetQ)); if (_action == "browse_query") { if (openFile(encodeUrl(_targetQ))) { _error_string = tr("Browsing query."); emit queryEnded(true, QString(), QString()); } else { _error_string = tr("Could not open URL '%1'.").arg(encodeUrl(_targetQ)); emit queryEnded(false, QString(), QString()); } return; } if (_action == "htm2txt_query") emit statusMessage(tr("Importing: %1.").arg(_targetQ)); else emit statusMessage(tr("Query: %1.").arg(_targetQ)); _networkP->getFile(_targetQ, _networkquery_tmp_fn1, network::Copy, this, SLOT(submitQuery2(bool)), !_settingsP->value("cb2Bib/KeepTmpNQFiles").toBool()); } void networkQuery::submitQuery2(bool succeeded) { // Submission, second part: check query replay and PDF existence if (!succeeded) { _error_string = _networkP->errorString(); emit statusMessage(tr("Query failed with %1.").arg(_error_string)); QTimer::singleShot(10, this, SLOT(submitQuery1())); return; } QString lines(c2bUtils::fileToString(_networkquery_tmp_fn1, !_settingsP->value("cb2Bib/KeepTmpNQFiles").toBool())); if (_action == "htm2txt_query") { _error_string = tr("Importing query URL."); emit queryEnded(true, QString(), fromHtmlString(lines, true)); return; } QRegExp rx(_captionQ); rx.setMinimal(true); if (!rx.isValid()) c2bUtils::warn(tr("Warning: RegExp '%1' is not valid").arg(_captionQ)); const int ncap(rx.indexIn(lines)); if (ncap > -1) lines = fromHtmlString(rx.cap(1)); else { QTimer::singleShot(10, this, SLOT(submitQuery1())); return; } c2bUtils::debug(tr("CAPTURED[%1]").arg(lines)); _targetBib = _referenceurl_prefix + lines + _referenceurl_sufix; if (_check_document && !_pdfurl_prefix.isEmpty()) { _targetPDF = _pdfurl_prefix + lines + _pdfurl_sufix; emit statusMessage(tr("Checking: %1.").arg(_targetPDF)); _networkP->headFile(_targetPDF, this, SLOT(submitQuery3(bool))); } else submitQuery3(false); } void networkQuery::submitQuery3(bool succeeded) { // Submission, third part: extracting reference location if (!succeeded || !_networkP->mimetypeString().contains(QRegExp("\\b(chm|djvu|pdf|ps)\\b"))) _targetPDF.clear(); else _targetPDF = _networkP->sourceFilename(); c2bUtils::debug(tr("POST2[%1]").arg(_targetBib)); c2bUtils::debug(tr("POST3[%1]").arg(_targetPDF)); if (_action == "browse_referenceurl") { if (openFile(encodeUrl(_targetBib))) { _error_string = tr("Browsing reference."); emit queryEnded(true, QString(), QString()); } else { _error_string = tr("Could not open URL '%1'.").arg(encodeUrl(_targetBib)); emit queryEnded(false, QString(), QString()); } return; } if (_action == "htm2txt_referenceurl") emit statusMessage(tr("Importing: %1.").arg(_targetBib)); else emit statusMessage(tr("Retrieving: %1.").arg(_targetBib)); _networkP->getFile(_targetBib, _networkquery_tmp_fn2, network::Copy, this, SLOT(queryDone(bool)), !_settingsP->value("cb2Bib/KeepTmpNQFiles").toBool()); } void networkQuery::queryDone(bool succeeded) { // Submission Done if (!succeeded) { _error_string = _networkP->errorString(); emit queryEnded(false, _targetBib, _networkquery_tmp_fn2); return; } QString lines(c2bUtils::fileToString(_networkquery_tmp_fn2, !_settingsP->value("cb2Bib/KeepTmpNQFiles").toBool())); if (_action == "htm2txt_referenceurl") { _error_string = tr("Importing reference URL."); emit queryEnded(true, _targetPDF, fromHtmlString(lines, true)); return; } if (_targetBib.contains("MEDLINE")) { QRegExp med_rx; med_rx.setMinimal(true); med_rx.setPattern("^.+\"pre_replace\">(.+)</table><.+$"); lines.replace(med_rx, "\\1"); lines.replace("</tr>", "_NEW_LINE_"); med_rx.setPattern("<.+>"); lines.replace(med_rx, " "); lines = fromHtmlString(lines); // Convert to unicode the text-related HTML tags in Pubmed, keep lines lines.replace("_NEW_LINE_", "\n"); } _targetBib = lines.trimmed(); emit queryEnded(true, _targetPDF, _targetBib); } bool networkQuery::setQueryParameters() { if (!checkQueryFile(_settingsP->fileName("cb2Bib/NetworkFile"))) return false; QFile file(_settingsP->fileName("cb2Bib/NetworkFile")); file.open(QIODevice::ReadOnly | QIODevice::Text); QTextStream stream(&file); stream.setCodec("UTF-8"); stream.setAutoDetectUnicode(true); QRegExp Journal("journal=" + _Qjournal + "\\|"); QRegExp AnyJournal("journal=\\s*$"); uint readQueryParams(0); _is_end_of_file = false; QString line; while (!stream.atEnd()) { line = stream.readLine(); // Skip comments and blanks if (!(line.isEmpty() || line.contains(QRegExp("^#")))) { if (line.contains(Journal)) { const QStringList lc(line.split('|')); if (lc.count() > 1) _QjournalCode = lc.at(1); else _QjournalCode.clear(); } else if (line.contains(AnyJournal)) _QjournalCode = _Qjournal; // Get appropiate parameters for Journal or AnyJournal if (line.contains(Journal) || line.contains(AnyJournal)) { // Skip if already performed if (!_query_parameter_count.contains(++readQueryParams)) { while (line.contains(QRegExp("^journal="))) line = stream.readLine(); _targetQ = line.remove(QRegExp("^query=")); line = stream.readLine(); _captionQ = line.remove(QRegExp("^capture_from_query=")); line = stream.readLine(); _referenceurl_prefix = line.remove(QRegExp("^referenceurl_prefix=")); line = stream.readLine(); _referenceurl_sufix = line.remove(QRegExp("^referenceurl_sufix=")); line = stream.readLine(); _pdfurl_prefix = line.remove(QRegExp("^pdfurl_prefix=")); line = stream.readLine(); _pdfurl_sufix = line.remove(QRegExp("^pdfurl_sufix=")); line = stream.readLine(); _action = line.remove(QRegExp("^action=")); // Setting Query Parameters updateQueryPlaceholders(); // Finally, check for unresolved cb2Bib tags if (areQueryParametersValid()) { _query_parameter_count.append(readQueryParams); return true; } } } } } file.close(); _is_end_of_file = true; return (!_query_parameter_count.isEmpty()); } void networkQuery::updateQueryPlaceholders() { if (!_Qtitle.isEmpty()) { _targetQ.replace("<<title>>", _Qtitle); _captionQ.replace("<<title>>", _Qtitle); _referenceurl_prefix.replace("<<title>>", _Qtitle); _referenceurl_sufix.replace("<<title>>", _Qtitle); _pdfurl_prefix.replace("<<title>>", _Qtitle); _pdfurl_sufix.replace("<<title>>", _Qtitle); } if (!_QjournalCode.isEmpty()) { _QjournalCode.replace(" & ", " and "); // Avoid sending '&' to confuse the URL _targetQ.replace("<<journal>>", _QjournalCode); _captionQ.replace("<<journal>>", _QjournalCode); _referenceurl_prefix.replace("<<journal>>", _QjournalCode); _referenceurl_sufix.replace("<<journal>>", _QjournalCode); _pdfurl_prefix.replace("<<journal>>", _QjournalCode); _pdfurl_sufix.replace("<<journal>>", _QjournalCode); } if (!_Qpage.isEmpty()) { _targetQ.replace("<<pages>>", _Qpage); _captionQ.replace("<<pages>>", _Qpage); _referenceurl_prefix.replace("<<pages>>", _Qpage); _referenceurl_sufix.replace("<<pages>>", _Qpage); _pdfurl_prefix.replace("<<pages>>", _Qpage); _pdfurl_sufix.replace("<<pages>>", _Qpage); } if (!_Qvolume.isEmpty()) { _targetQ.replace("<<volume>>", _Qvolume); _captionQ.replace("<<volume>>", _Qvolume); _referenceurl_prefix.replace("<<volume>>", _Qvolume); _referenceurl_sufix.replace("<<volume>>", _Qvolume); _pdfurl_prefix.replace("<<volume>>", _Qvolume); _pdfurl_sufix.replace("<<volume>>", _Qvolume); } if (!_Qdoi.isEmpty()) { _targetQ.replace("<<doi>>", _Qdoi); _captionQ.replace("<<doi>>", _Qdoi); _referenceurl_prefix.replace("<<doi>>", _Qdoi); _referenceurl_sufix.replace("<<doi>>", _Qdoi); _pdfurl_prefix.replace("<<doi>>", _Qdoi); _pdfurl_sufix.replace("<<doi>>", _Qdoi); } if (!_Qexcerpt.isEmpty()) { _targetQ.replace("<<excerpt>>", _Qexcerpt); _captionQ.replace("<<excerpt>>", _Qexcerpt); _referenceurl_prefix.replace("<<excerpt>>", _Qexcerpt); _referenceurl_sufix.replace("<<excerpt>>", _Qexcerpt); _pdfurl_prefix.replace("<<excerpt>>", _Qexcerpt); _pdfurl_sufix.replace("<<excerpt>>", _Qexcerpt); } } bool networkQuery::areQueryParametersValid() { if (!_action.isEmpty()) { if (_action == "browse_query" || _action == "browse_referenceurl") { if (!_settingsP->value("networkQuery/isSupervised").toBool()) return false; } else if (!(_action == "htm2txt_query" || _action == "htm2txt_referenceurl")) return false; } const QString allParams(_targetQ + _captionQ + _referenceurl_prefix + _referenceurl_sufix + _pdfurl_prefix + _pdfurl_sufix); return !(allParams.contains(QRegExp("(?:<<title>>|<<journal>>|<<pages>>|<<volume>>|<<doi>>|<<excerpt>>)"))); } const QString networkQuery::encodeUrl(const QString& url) const { // Removes <<post>> tag if present and encodes URL to percent encoding QString encoded_url(url); encoded_url.remove(QRegExp("^<<post>>")); encoded_url = QUrl::toPercentEncoding(encoded_url, "+:/?=&\\"); return encoded_url; } bool networkQuery::checkQueryFile(const QString& fn) const { if (fn.isEmpty()) { c2bUtils::warn(tr("No network query file especified")); return false; } QFileInfo fi(fn); if (!fi.exists() || !fi.isReadable()) { c2bUtils::warn(tr("Could not open network query file %1 for reading").arg(fn)); return false; } return true; } ������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/idMaker.cpp����������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�015640� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.907255676 30 atime=1498583183.003254785 30 ctime=1498583182.911255639 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/idMaker.cpp��������������������������������������������������������������������0000644�0001750�0000144�00000016353�13124510216�017242� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * * Improvements and modifications: * July 2009 - Added <<author_all_abbreviated>>, (C) 2009 by Dayu Huang ***************************************************************************/ #include "idMaker.h" #include "cb2bib_utilities.h" #include "settings.h" idMaker::idMaker(const QString& patternKey, QObject* parento) : QObject(parento), _pattern_key(patternKey) { loadSettings(); connect(settings::instance(), SIGNAL(newSettings()), this, SLOT(loadSettings())); } /** \page idplaceholders Predefined cite and document ID placeholders - <tt><<author_all_abbreviated>></tt> Takes first three letters of the last word of all authors's last name in cite, and converts to lowercase. - <tt><<author_all_initials>></tt> Takes capitalized initials of all authors in cite. - <tt><<author_first>></tt> Takes first author last name/s. - <tt><<citeid>></tt> This placeholder is meant to be used <b>alone, and only for document IDs</b>. It takes the pattern defined for the cite ID. If the cite ID is modified manually, the document ID is synchronized automatically. - <tt><<journal_initials>></tt> Takes capitalized initials of journal name. - <tt><<pages_first>></tt> First page. - <tt><<ppages_first>></tt> First page, written as, e. g., 'p125'. - <tt><<title>></tt> Title. To truncate titles exceeding a maximum length <tt>l</tt> use <<title_l>>, where <tt>l</tt> stands for an integer value. - <tt><<title_underscored>></tt> Title with blanks set to underscores. To truncate title to <tt>l</tt> characters use <<title_underscored_l>>. - <tt><<volume>></tt> Volume number. - <tt><<year_abbreviated>></tt> Last two digits from year. - <tt><<year_full>></tt> All digits from year. <b>Note:</b> If <tt>author</tt> is empty, <tt>editor</tt> will be considered instead. On conference proceedings or monographs this situation is usual. Similarly, if <tt>title</tt> is empty, <tt>booktitle</tt> is considered. <b>Note:</b> Only one placeholder of a given field, e. g. <<author_first>> or <<author_all_initials>>, should be used to compose the ID patterns. The cb2Bib only performs one substitution per field placeholder. <b>Note:</b> The cb2Bib performs a series of string manipulations, such as stripping diacritics and ligatures, aimed to provide ID values suitable for BibTeX keys and platform independent filenames. Currently only ASCII characters are considered. */ QString idMaker::makeID(const bibReference& reference) { if (_id_pattern.isEmpty()) return QString(); if (_id_pattern.contains("<<citeid>>")) return reference.citeidName; // Initialize fields _author = reference.anyAuthor(); _journal = reference.value("journal"); _pages = reference.value("pages"); _title = reference.anyTitle(); _volume = reference.value("volume"); _year = reference.value("year"); // Set cite ID QString id(_id_pattern); if (_id_pattern.contains("<<author_first>>")) make_author_first(&id); else if (_id_pattern.contains("<<author_all_abbreviated>>")) make_author_all_abbreviated(&id); else if (_id_pattern.contains("<<author_all_initials>>")) make_author_all_initials(&id); if (_id_pattern.contains("<<journal_initials>>")) make_journal_initials(&id); if (_id_pattern.contains("<<pages_first>>")) make_pages_first(&id); else if (_id_pattern.contains("<<ppages_first>>")) make_ppages_first(&id); if (!_title_pattern.isEmpty()) if (_id_pattern.contains(_title_pattern)) make_title(&id); if (_id_pattern.contains("<<volume>>")) make_volume(&id); if (_id_pattern.contains("<<year_abbreviated>>")) make_year_abbreviated(&id); else if (_id_pattern.contains("<<year_full>>")) make_year_full(&id); return id; } void idMaker::make_author_first(QString* id) { QRegExp rx("([-'\\s\\w]+)(?:\\sand|$)"); rx.setMinimal(true); rx.indexIn(_author); _author = rx.cap(1); if (_author.contains(c2bUtils::nonAsciiLetter)) _author = c2bUtils::toAscii(_author, c2bUtils::Cleanup); id->replace("<<author_first>>", _author); } void idMaker::make_author_all_abbreviated(QString* id) { // If there is less than 3 letters in their last name's last word, // then use all the letters in the last name's last word QString temp_author; QRegExp rx("([-'\\w]{1,3})(?:[-'\\w]*)(?:\\sand|$)"); rx.setMinimal(true); rx.indexIn(_author); int pos(0); while ((pos = rx.indexIn(_author, pos)) != -1) { temp_author += rx.cap(1); pos += rx.matchedLength(); } _author = temp_author.toLower(); if (_author.contains(c2bUtils::nonAsciiLetter)) _author = c2bUtils::toAscii(_author, c2bUtils::Cleanup); id->replace("<<author_all_abbreviated>>", _author); } void idMaker::make_author_all_initials(QString* id) { _author.remove(QRegExp("\\b\\w\\b")); _author.remove(" and "); if (_author.contains(c2bUtils::nonAsciiLetter)) _author = c2bUtils::toAscii(_author, c2bUtils::Cleanup); _author.remove(QRegExp("[a-z]")); id->replace("<<author_all_initials>>", _author); } void idMaker::make_journal_initials(QString* id) { _journal.remove(QRegExp("[^A-Z]")); id->replace("<<journal_initials>>", _journal); } void idMaker::make_pages_first(QString* id) { _pages = c2bUtils::firstPage(_pages); id->replace("<<pages_first>>", _pages); } void idMaker::make_ppages_first(QString* id) { _pages = c2bUtils::firstPage(_pages); if (!_pages.isEmpty()) if (_pages.at(0).isDigit()) _pages = 'p' + _pages; id->replace("<<ppages_first>>", _pages); } void idMaker::make_title(QString* id) { if (_title.contains(c2bUtils::nonAsciiLetter)) _title = c2bUtils::toAscii(_title, c2bUtils::FromBibTeX); _title = _title.left(_title_max_length).trimmed(); // Avoid possible trailing blank if (_is_title_underscored) _title.replace(' ', '_'); id->replace(_title_pattern, _title); } void idMaker::make_volume(QString* id) { _volume.remove(' '); id->replace("<<volume>>", _volume); } void idMaker::make_year_abbreviated(QString* id) { _year = _year.right(2); id->replace("<<year_abbreviated>>", _year); } void idMaker::make_year_full(QString* id) { id->replace("<<year_full>>", _year); } void idMaker::loadSettings() { _id_pattern = settings::instance()->value(_pattern_key).toString(); QRegExp title_pattern("(<<title(?:_underscored)?(?:_\\d+)?>>)"); if (title_pattern.indexIn(_id_pattern) > -1) { _title_pattern = title_pattern.cap(1); _title_pattern.remove(QRegExp("\\D")); _title_max_length = _title_pattern.toInt(); if (_title_max_length == 0) _title_max_length = -1; _title_pattern = title_pattern.cap(1); _is_title_underscored = _title_pattern.contains(QRegExp("_underscored(?:_\\d+)?>>")); } else _title_pattern.clear(); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/bibPreparser.h�������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016351� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.943255341 30 atime=1498583183.003254785 30 ctime=1498583182.943255341 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/bibPreparser.h�����������������������������������������������������������������0000644�0001750�0000144�00000001633�13124510216�017746� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef BIBPREPARSER_H #define BIBPREPARSER_H #include <QObject> /** This class handles external processing of bibliographic items. It's formally an extension of the bibParser. */ class bibPreparser : public QObject { Q_OBJECT public: explicit bibPreparser(QObject* parento = 0); inline ~bibPreparser() {} void preparse(const QString& text, QString* out_text); signals: void preparserLogAvailable(const QString& log); void statusMessage(const QString& ms); private: QString m_inp_file; QString m_out_file; }; #endif �����������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/wordMatcher.cpp������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016543� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.931255453 30 atime=1498583183.003254785 30 ctime=1498583182.931255453 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/wordMatcher.cpp����������������������������������������������������������������0000644�0001750�0000144�00000004221�13124510216�020134� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "wordMatcher.h" #include "triads.h" #include "cb2bib_utilities.h" wordMatcher::wordMatcher() : _stretch(0), _hook(-1), _substring_count(0), _matched_length(-1), _p0(0), _pn(0) {} wordMatcher::wordMatcher(const QString& pattern, const Qt::CaseSensitivity cs) : _p0(0), _pn(0) { setPattern(pattern, cs); } void wordMatcher::setPattern(const QString& pattern, const Qt::CaseSensitivity cs) { _hook = -1; _matched_length = -1; const QStringList substrings(pattern.split(c2bUtils::nonLetter, QString::SkipEmptyParts)); if (substrings.count() == 0) return; _substring_count = substrings.count(); _substrings.resize(_substring_count); _lengths.resize(_substring_count); _sp0.resize(_substring_count); _stretch = 0; for (int i = 0; i < _substring_count; ++i) { _substrings[i] = QStringMatcher(substrings.at(i), cs); _lengths[i] = substrings.at(i).length(); if (_lengths.at(i) > 4) _stretch += 50; else _stretch += 10; } int lf(10000); for (int i = 0; i < _substring_count; ++i) { const int f(triads::textFrequency(substrings.at(i))); if (f < lf) { lf = f; _hook = i; } } } int wordMatcher::indexIn(const QString& str, const int from) const { _matched_length = -1; if (_hook == -1) { c2bUtils::warn(QObject::tr("Warning: Uninitialized wordMatcher")); return -1; } _p0 = from; if (_p0 < 0) _p0 = 0; _pn = str.length(); if (_pn == 0) return -1; int hp(_p0); int p(-1); while (p == -1) { hp = _index_in(_hook, str, hp); if (hp == -1) return -1; p = _index_around(str, hp); hp += _lengths.at(_hook); } return p; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/authorString.cpp�����������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016755� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.883255899 30 atime=1498583183.003254785 30 ctime=1498583182.883255899 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/authorString.cpp���������������������������������������������������������������0000644�0001750�0000144�00000056164�13124510216�020363� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "authorString.h" /** \page authorproc Processing of author's names The cb2Bib automatically processes the author names string. It uses a set of heuristic rules. First, the authors separator is identified. And second, it is decided whether or not author names are in natural or reverse order, or in the 'Abcd, E., F. Ghij, ...' mixed order. */ authorString::authorString() : _full_form(false) {} /** \page authorproc Cleanup author string: - Escape BibTeX to Unicode - Remove digits from authors string - Remove any character except <tt>-',;&\\.\\s\\w</tt> - Simplify White Spaces - Consider composing prefixes <tt>(da|de|dal|del|der|di|do|du|dos|la|le|van|vande|von)</tt> - Consider composing suffixes <tt>(II|III|IV|Jr)</tt> - Some publishers use superscripts to refer to multiple author affiliations. Text clipboard copying loses superscript formatting. Author strings are clean from 'orphan' lowcase, single letters in a preprocessing step. Everything following the pattern <b>[a-z]</b> is removed. Fortunately, abbreviated initials are most normally input as uppercase letters, thus permitting a correct superscript clean up. \n <em>Caution:</em> Lowcase, single, a to z letters are removed from author's string.\n <em>Caution:</em> Supperscripts <b>will be added to author Last Name</b> if no separation is provided. Users should care about it and correct these cases. Rules to identify separators: - Contains comma and semicolon -> ';' - Contains pattern <tt>'^Abcd, E.-F.,'</tt> -> ',' - Contains pattern <tt>'^Abcd,'</tt> -> 'and' - Contains comma -> ',' - Contains semicolon -> ';' - Any other -> 'and' */ QString authorString::toBibTeX(const QString& author, bool full_form) { _full_form = full_form; _author_string = author; author::simplifyString(_author_string, true); as_unifier.unifyNames(_author_string); const bool has_comma(_author_string.contains(',')); const bool has_semicolon(_author_string.contains(';')); const bool has_ands(_author_string.count(" and ") > 1); const bool is_first_reversed(_author_string.contains(author::reversed_name_rx)); const bool is_special_case(_author_string.contains(author::reversed_romance_name_rx)); bool is_string_reversed((has_comma && has_semicolon) || (has_comma && has_ands) || is_special_case); QString separator; if (is_special_case) separator = " and "; else if (has_comma && has_semicolon) separator = ';'; // Multiple Authors, separated by semicolon, reversed naming else if (has_comma) { if (is_first_reversed) { if (_author_string.contains(QRegExp('^' + author::name + ",(?:\\s*-{0,1}\\b\\w\\b\\.){1,3},\\s*" + author::name))) { _author_string.replace(QRegExp("\\bJr.", Qt::CaseSensitive), "Jr"); _author_string.replace(".,", ".;"); separator = ';'; // Reversed, comma separated 'Abrahamsson, A.-L., Springett, J., Karlsson, L., Ottosson, T.' is_string_reversed = true; } else if (_author_string.contains(QRegExp('^' + author::name + ',' + author::initials + ','))) { _author_string.replace(QRegExp("^([-'\\w]+),"), "\\1 "); separator = ','; // Mixed naming 'Smith, J.-L., R. Jones, and K. Gibbons' } else separator = " and "; // Reversed naming } else if (has_ands) separator = " and "; else // Natural naming separator = ','; } else if (has_semicolon) separator = ';'; // Multiple Authors, separated by semicolon else separator = " and "; c2bUtils::debug(QObject::tr("Separator: |%1|").arg(separator)); c2bUtils::debug("1--|" + _author_string + '|'); _author_string.replace(QRegExp("\\band\\b", Qt::CaseInsensitive), separator); _author_string.replace(QRegExp("\\s&\\s", Qt::CaseInsensitive), separator); c2bUtils::debug("2--|" + _author_string + '|'); _author_string.remove(QRegExp("[^\\w\\.]+$")); // Removing of duplicate commas and semicolons _author_string.replace(QRegExp(",\\s*"), ","); c2bUtils::debug("3--|" + _author_string + '|'); _author_string.replace(QRegExp(",+"), ","); _author_string.replace(QRegExp(";\\s*"), ";"); _author_string.replace(QRegExp(";+"), ";"); c2bUtils::debug("4--|" + _author_string + '|'); const bool are_authors_in_uppercase(containUpperCaseLetter(_author_string) && !containLowerCaseLetter(_author_string)); if (are_authors_in_uppercase) c2bUtils::debug("Input Authors in Uppercase"); QStringList authors; if (separator == " and ") authors = _author_string.split(QRegExp("\\band\\b")); else authors = _author_string.split(separator); // Setting author ordering const QString first_author(authors.first().trimmed()); bool is_current_reversed(is_string_reversed || is_first_reversed || isReverseOrder(first_author)); const QString last_author(authors.last().trimmed()); const bool is_last_reversed(is_string_reversed || last_author.contains(author::reversed_name_rx) || isReverseOrder(last_author)); const bool is_string_mixed(is_current_reversed && !is_last_reversed); if (is_string_mixed) // Mixed naming 'Smith, J., R. Jones' c2bUtils::debug("Mixed order"); // Process each author name for (int ai = 0; ai < authors.count(); ++ai) { QString author_i(authors.at(ai)); c2bUtils::debug(author_i); author_i.replace(QRegExp("\\.{0,1}\\s{0,1}-"), "-"); // Abbreviated cases, eg M.-H. Something author_i.replace(QRegExp("[^-'\\w,]"), " "); // Only these characters compose a name; keep commas author_i = c2bUtils::simplifyString(author_i); // Split author name QStringList fore_name_parts; QString last_name; if (is_current_reversed) { const QStringList parts(author_i.split(',', QString::SkipEmptyParts)); const int nparts(parts.count()); if (nparts == 2) { QStringList p(parts.first().split(' ', QString::SkipEmptyParts)); if (p.count() > 0) last_name = p.takeLast(); fore_name_parts = parts.last().split(' ', QString::SkipEmptyParts) + p; } else if (nparts == 3) { QStringList p(parts.first().split(' ', QString::SkipEmptyParts)); if (p.count() > 0) last_name = p.takeLast(); fore_name_parts = parts.at(1).split(' ', QString::SkipEmptyParts) + p; if (parts.last().contains(QRegExp("^(?:Jr|II|III|IV)$"))) // If otherwise, ignore it last_name += '_' + parts.last(); } else { fore_name_parts = author_i.split(' ', QString::SkipEmptyParts); if (fore_name_parts.count() > 0) last_name = fore_name_parts.takeFirst(); } c2bUtils::debug("Reversed order"); } else { fore_name_parts = author_i.split(' ', QString::SkipEmptyParts); if (fore_name_parts.count() > 0) last_name = fore_name_parts.takeLast(); c2bUtils::debug("Natural order"); } // Process first and middle names QString author_name; for (int i = 0; i < fore_name_parts.count(); ++i) { c2bUtils::debug("First and Midle: " + fore_name_parts.at(i)); if (fore_name_parts.at(i).contains('-')) // Composite names { const QStringList fnpi(fore_name_parts.at(i).split('-')); if (fnpi.count() > 1) { author_name += processFirstMiddle(fnpi.at(0)) + '-'; author_name += processFirstMiddle(fnpi.at(1)) + ' '; // Shouldn't be more than 2 parts... } } else // Regular names { QString fore_name(fore_name_parts.at(i)); const int fore_length(fore_name.length()); const bool is_uppercase(!containLowerCaseLetter(fore_name)); if (fore_name_parts.count() == 1 && fore_length > 1 && !fore_name.contains(QRegExp("\\b" + author::double_initials + '_', Qt::CaseInsensitive)) && !are_authors_in_uppercase && is_uppercase) { // Cases 'Last, FST': Always abbreviated, no call to processFirstMiddle for (int l = 0; l < fore_length; ++l) author_name += fore_name[l] + ". "; } else if (fore_name_parts.count() == 2 && fore_length > 1 && fore_length < 3 && is_current_reversed && !are_authors_in_uppercase && is_uppercase) { // Cases 'Last1 Last2, FST': Always abbreviated, no call to processFirstMiddle for (int l = 0; l < fore_length; ++l) author_name += fore_name[l] + ". "; } else if (i == 1 && fore_name_parts.count() == 2 && fore_length > 1 && fore_length < 3 && !is_current_reversed && !are_authors_in_uppercase && is_uppercase) { // Cases 'Fore IJ Last': Process initials for (int l = 0; l < fore_length; ++l) author_name += fore_name[l] + ". "; } else author_name += processFirstMiddle(fore_name) + ' '; } } // Add last name author_name += capitalize(last_name); authors[ai] = author_name; c2bUtils::debug(author_name); if (is_string_mixed) // Mixed naming 'Smith, J., R. Jones' is_current_reversed = false; } authors.removeAll(QString()); _author_string = authors.join(" and "); // Restore Composite Names white spaces _author_string.replace("_i_", " i "); _author_string.replace(QRegExp("_II\\b", Qt::CaseInsensitive), " II"); // Suffix can be lower case here _author_string.replace(QRegExp("_III\\b", Qt::CaseInsensitive), " III"); _author_string.replace(QRegExp("_IV\\b", Qt::CaseInsensitive), " IV"); _author_string.replace(QRegExp("_JR\\b", Qt::CaseInsensitive), " Jr"); _author_string.replace(QRegExp(author::prefixes + '_', Qt::CaseInsensitive), "\\1 "); _author_string.replace(QRegExp("\\b" + author::double_initials + '_', Qt::CaseInsensitive), "\\1."); _author_string = c2bUtils::simplifyString(_author_string); return _author_string; } QString authorString::processFirstMiddle(const QString& first_middle) const { // Process First and Middle parts // Abbreviates if required // Takes care of abbreviation periods QString proc_fm; if (_full_form) { if (first_middle.length() > 1) proc_fm = capitalize(first_middle); else proc_fm = first_middle + '.'; } else { if (first_middle.contains('_')) // Composite names should not be abbreviated { proc_fm = capitalize(first_middle); if (first_middle.length() - first_middle.indexOf('_') == 2) proc_fm += '.'; } else proc_fm = first_middle.left(1) + '.'; } return proc_fm; } QString authorString::capitalize(const QString& name) { // Capitalizes author's name if (name.isEmpty()) return QString(); QString proc_name(name); int ii(0); const int prefixes(proc_name.count(QRegExp(author::prefixes + "_(?!(?:Jr|II|III|IV)\\b)", Qt::CaseInsensitive))); for (int p = 0; p < prefixes; ++p) { const int iin(proc_name.indexOf('_', ii)); if (c2bUtils::isUpperCaseString(proc_name, ii, iin)) for (int i = 0; i < iin; ++i) proc_name[i] = proc_name.at(i).toLower(); ii = qMin(iin + 1, proc_name.length() - 1); } if (c2bUtils::isUpperCaseString(proc_name, ii)) { proc_name[ii] = proc_name.at(ii).toUpper(); for (int i = ++ii; i < proc_name.length(); ++i) proc_name[i] = proc_name.at(i).toLower(); ii = proc_name.indexOf(QRegExp("[\\s-']")); // As before, assume just one part if (ii++ > 0) if (ii < proc_name.length()) proc_name[ii] = proc_name.at(ii).toUpper(); if (proc_name.startsWith("Mc")) if (proc_name.length() > 4) proc_name[2] = proc_name.at(2).toUpper(); } return proc_name; } /** \page authorproc Rules to identify ordering: - Contains comma and semicolon -> Reverse - Pattern <tt>'^Abcd,'</tt> -> Reverse - Pattern <tt>'^Abcd EF Ghi'</tt> -> Natural - Pattern <tt>'^Abcd EF'</tt> -> Reverse - Pattern <tt>'^Abcd E.F.'</tt> -> Reverse - Any other pattern -> Natural */ bool authorString::isReverseOrder(const QString& author) { // Returns true if Author Name is in reversed order as "Him DF, Her SR, " // ISI doesn't contain point - return for safety // Consider "Him DF Last" const QString author_line(author.simplified()); QRegExp rRevNISI("^([-'\\w]+) ((\\w\\.\\s*)+)$"); rRevNISI.setMinimal(false); if (rRevNISI.indexIn(author_line) > -1) { const QString Last(rRevNISI.cap(3)); if (Last != "and") return true; } if (author_line.contains('.')) return false; rRevNISI = QRegExp("^([-'\\w]+) ([-'\\w]+) ([-'\\w]+)"); rRevNISI.setMinimal(false); if (rRevNISI.indexIn(author_line) > -1) { const QString Last(rRevNISI.cap(3)); if (Last != "and") return false; } rRevNISI = QRegExp("^([-'\\w]+) ([-\\w]{1,3})$"); // Consider only 1 to 3 initials rRevNISI.setMinimal(false); if (rRevNISI.indexIn(author_line) > -1) { const QString Last(rRevNISI.cap(1)); const QString First(rRevNISI.cap(2)); c2bUtils::debug(QObject::tr("ISI: |%1| |%2|").arg(Last).arg(First)); if (containLowerCaseLetter(First)) return false; if (!containLowerCaseLetter(Last)) return false; return true; } return false; } bool authorString::containLowerCaseLetter(const QString& author) { QString author_line(author); author_line.remove(QRegExp("\\band\\b")); // Remove possible 'and' separator author_line.remove(QRegExp(author::prefixes + '_', Qt::CaseInsensitive)); // Remove possible prefixes author_line.remove(QRegExp(author::double_initials + '_', Qt::CaseSensitive)); // Remove possible two-letter initials for (int i = 0; i < author_line.length(); i++) { if (author_line.at(i).isLetter()) if (author_line.at(i).category() == QChar::Letter_Lowercase) return true; } return false; } bool authorString::containUpperCaseLetter(const QString& author) { for (int i = 0; i < author.length(); i++) { if (author.at(i).isLetter()) if (author.at(i).category() == QChar::Letter_Uppercase) return true; } return false; } namespace author { unifier::unifier() { unifier_rx1 = QRegExp("(\\w\\w)\\si\\s(\\w\\w)(?!d\\b)", Qt::CaseSensitive); unifier_rx2 = QRegExp("\\b" + prefixes + "\\s(?!(?:,|and\\b))", Qt::CaseInsensitive); unifier_rx3 = QRegExp("\\b" + double_initials + "\\.", Qt::CaseInsensitive); unifier_rx4 = QRegExp("\\b(\\w[-'\\w]{2,})\\W+Jr\\.", Qt::CaseInsensitive); unifier_rx5 = QRegExp("\\b(\\w[-'\\w]{2,})\\W+Jr\\b", Qt::CaseInsensitive); unifier_rx6 = QRegExp("(\\w),{0,1}\\s(II|III|IV)\\b", Qt::CaseSensitive); unifier_rx7 = QRegExp("([^\\w-])[a-z](?=[^\\w'])"); } QString& unifier::unifyNames(QString& author) { // Composite Names temporary unified author.replace(unifier_rx1, "\\1+i+\\2"); author.replace(unifier_rx2, "\\1+"); author.replace("Da+", "Da ", Qt::CaseSensitive); author.replace(unifier_rx3, "\\1+ "); if (author.contains("Jr", Qt::CaseInsensitive)) { // Remove period and first comma if there author.replace(unifier_rx4, "\\1+JR"); author.replace(unifier_rx5, "\\1+JR"); } if (author.contains('I', Qt::CaseSensitive)) author.replace(unifier_rx6, "\\1+\\2"); author.replace('+', '_'); author.replace(unifier_rx7, "\\1 "); // Cleaning affiliation 'superscripts'. Avoid cleaning 'M.-m. Lin' return author; } QString fromMedline(const QString& author) { // Preprocess Author from Medline 'AAAAAAA BB' to Aaaaaaa, BB' // which can be unambiguously translated to 'B. B. Aaaaaaa' // Takes care of cb2Bib included prefixes and suffixes // FAU - Foa, Edna B // AU - Foa EB // FAU - Steketee, Gail S // AU - Steketee GS QString FullN(author.simplified()); FullN.replace(QRegExp("\\b" + prefixes + "\\s", Qt::CaseInsensitive), "\\1+"); FullN.replace('+', '_'); QStringList parts; QString LastN; if (FullN.contains(',')) // Some FAU are 'Last1 Last2, First' { parts = FullN.split(',', QString::SkipEmptyParts); if (parts.count() > 1) LastN = parts.takeFirst(); } else { parts = FullN.split(' ', QString::SkipEmptyParts); if (parts.count() > 1) LastN = parts.takeFirst(); } FullN = parts.join(" "); parts = FullN.split(' ', QString::SkipEmptyParts); if (!LastN.isEmpty()) if (c2bUtils::isUpperCaseString(LastN)) { LastN = LastN.toLower(); LastN[0] = LastN.at(0).toUpper(); int ii(LastN.indexOf(QRegExp("[-']"))); if (ii++ > 0) LastN[ii] = LastN.at(ii).toUpper(); } QString FirstN; for (int i = 0; i < parts.count(); ++i) FirstN += ' ' + parts.at(i); QString isSuffix; if (parts.count() > 0) isSuffix = parts.last(); if (isSuffix.contains(QRegExp("\\b(?:2nd|3rd|Jr|II|III)\\b"))) { isSuffix.replace(QRegExp("\\b2nd\\b"), "II"); isSuffix.replace(QRegExp("\\b3rd\\b"), "III"); LastN += ' ' + isSuffix; FirstN.remove(QRegExp("\\b(?:2nd|3rd|Jr|II|III)\\b")); } LastN.replace(QRegExp(prefixes + '_', Qt::CaseInsensitive), "\\1 "); FullN = LastN + ',' + FirstN; return FullN; } /** Implementation of author field extraction P. Constans. A Simple Extraction Procedure for Bibliographical Author Field. arXiv:0902.0755v1, 2009. */ void encoder::encode(const QString& raw) { clear(); QString str(raw); as_unifier.unifyNames(str); int position(0); int length(0); for (int i = 0; i < str.length(); ++i) { const QChar& si = str[i]; if (si.isLetter()) ++length; else if (si == '_') ++length; else if (si == '-') ++length; else if (si == '\'') ++length; else { if (length > 0) fragments.append(str.mid(position, length)); position = i + 1; length = 0; if (si != ' ') fragments.append(str.at(i)); } } if (length > 0) fragments.append(str.mid(position, length)); for (int i = 0; i < fragments.count(); ++i) { const QString& w = fragments.at(i); if (isSeparator(w)) code += '&'; else if (isAdparticle(w)) code += 'a'; else if (isInitial(w)) code += 'I'; else if (isPlainWord(w)) code += 'w'; else if (isName(w)) { if (isCapitalName(w)) code += 'N'; else code += 'n'; } else if (w.at(0) == '.') code += 'p'; else if (w.at(0) == ',') code += ','; else if (w.at(0) == ';') code += ';'; else if (w.at(0) == ':') code += ':'; else if (w.at(0) == '|') code += 'L'; else code += 'o'; } scapePattern("aL+[nN]{1,2}"); scapePattern("a[nNw]&L+[nN]{1,2}"); // in Linear and / Sublinear Time scapePattern(":L+[InN]{1,2}"); // ... Structure Classification: / A Survey scapePattern("[nN]*&L[nN]L"); // Not an & for author } QString encoder::decoded(const int position, const int length) const { if (position < 0) return QString(); if (length < 1 || position + length > fragments.count()) return QString(); QString d(fragments.at(position)); for (int i = 1; i < length; ++i) d += ' ' + fragments.at(position + i); // Above extra spaces are fine, except in these cases d.replace(" . -", ".-"); d.replace(" ,", ","); return d; } bool encoder::isPlainWord(const QString& w) { if (w.length() > 1) { if (w.contains('_') || w.contains('-')) return c2bUtils::isLowerCaseString(w); if (w.at(0).isLetter()) if (w.at(0).category() == QChar::Letter_Lowercase) return true; } return false; } bool encoder::isInitial(const QString& w) { if (w.length() == 1) if (w.at(0).isLetter()) return w.at(0).isUpper(); if (w.length() == 2) if (w.at(0) == '-') if (w.at(1).isLetter()) return true; // Chinese composite might(?) be lower return false; } bool encoder::isName(const QString& w) { if (w.length() < 2) return false; if (w.at(0).isUpper()) return true; if (w.contains('_')) return hasUpper(w); return false; } bool encoder::isAdparticle(const QString& w) { const int ws(w.size()); if (ws < 2) return false; if (ws > 6) return false; const QByteArray ba(w.toLatin1()); const char* s = ba.data(); const int ss(ws * int(sizeof(char))); if (ws == 2) { if (memcmp("of", s, ss) == 0) return true; if (memcmp("on", s, ss) == 0) return true; if (memcmp("to", s, ss) == 0) return true; if (memcmp("in", s, ss) == 0) return true; if (memcmp("as", s, ss) == 0) return true; if (memcmp("vs", s, ss) == 0) return true; if (memcmp("at", s, ss) == 0) return true; if (memcmp("is", s, ss) == 0) return true; if (memcmp("an", s, ss) == 0) return true; } if (ws == 3) { if (memcmp("for", s, ss) == 0) return true; if (memcmp("but", s, ss) == 0) return true; if (memcmp("are", s, ss) == 0) return true; if (memcmp("its", s, ss) == 0) return true; if (memcmp("the", s, ss) == 0) return true; } if (ws == 4) { if (memcmp("from", s, ss) == 0) return true; if (memcmp("with", s, ss) == 0) return true; if (memcmp("into", s, ss) == 0) return true; } if (ws == 6) { if (memcmp("within", s, ss) == 0) return true; } return false; } } // namespace author ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/posTagger.cpp��������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016217� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.919255565 30 atime=1498583183.003254785 30 ctime=1498583182.919255565 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/posTagger.cpp������������������������������������������������������������������0000644�0001750�0000144�00000007123�13124510216�017614� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "posTagger.h" #include "cb2bib_utilities.h" #include "settings.h" posTagger::posTagger() : _period('.'), _space(' '), _pos_a("A"), _pos_g("G"), _pos_n("N"), _pos_o("O"), _pos_r("R"), _pos_s("S"), _suffix_able("able"), _suffix_ae("ae"), _suffix_al("al"), _suffix_apostrophes("'s"), _suffix_ar("ar"), _suffix_ed("ed"), _suffix_ful("ful"), _suffix_ic("ic"), _suffix_ics("ics"), _suffix_ing("ing"), _suffix_is("is"), _suffix_ive("ive"), _suffix_lent("lent"), _suffix_less("less"), _suffix_like("like"), _suffix_ly("ly"), _suffix_ous("ous"), _suffix_s("s"), _suffix_ss("ss"), _suffix_us("us") {} bool posTagger::loadLexicon() { const QString lexfn(settings::instance()->fileName("cb2Bib/PosLexiconFile")); QFile lexf(lexfn); if (!lexf.open(QIODevice::ReadOnly | QIODevice::Text)) { c2bUtils::warn(QObject::tr("Could not open POS lexicon file %1 for reading").arg(lexfn)); return false; } QTextStream lex(&lexf); lex.setCodec("UTF-8"); lex.setAutoDetectUnicode(true); const QChar comment('#'); QString line; while (!lex.atEnd()) { line = lex.readLine(); if (line.isEmpty() || line.startsWith(comment)) continue; const int n(line.toInt()); for (int i = 0; i < n; ++i) _sentence_patterns.insert(lex.readLine(), QString()); break; } while (!lex.atEnd()) { line = lex.readLine(); if (line.isEmpty() || line.startsWith(comment)) continue; const int n(line.toInt()); const QString tag(lex.readLine()); for (int i = 0; i < n; ++i) _lexicon.insert(lex.readLine(), tag); } lexf.close(); return _sentence_patterns.size() > 0 && _lexicon.size() > 0; } QString posTagger::tagged(const QString& text) const { const QStringList words(text.split(_space, QString::SkipEmptyParts)); const int nw(words.count()); QString t(_period); for (int i = 0; i < nw; ++i) { const QString& w(words.at(i)); if (_lexicon.contains(w)) t += _lexicon.value(w) + _period; else t += ruletag(w) + _period; } return t; } QString posTagger::ruletag(const QString& word) const { if (word.length() < 3) return _pos_s; if (word.endsWith(_suffix_ed) || word.endsWith(_suffix_ar) || word.endsWith(_suffix_ive) || word.endsWith(_suffix_able) || word.endsWith(_suffix_ic) || word.endsWith(_suffix_al) || word.endsWith(_suffix_ous) || word.endsWith(_suffix_lent) || word.endsWith(_suffix_like) || word.endsWith(_suffix_ful) || word.endsWith(_suffix_less)) return _pos_a; if (word.endsWith(_suffix_ing)) return _pos_g; if (word.endsWith(_suffix_ly)) return _pos_r; if (word.endsWith(_suffix_ss) || word.endsWith(_suffix_is) || word.endsWith(_suffix_ics) || word.endsWith(_suffix_apostrophes) || word.endsWith(_suffix_us)) return _pos_n; if (word.endsWith(_suffix_ae)) return _pos_o; if (word.endsWith(_suffix_s)) return _pos_o; return _pos_n; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/documentParser.cpp���������������������������������������������0000644�0000000�0000000�00000000132�13124510216�017257� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.903255713 30 atime=1498583183.003254785 30 ctime=1498583182.907255676 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/documentParser.cpp�������������������������������������������������������������0000644�0001750�0000144�00000005460�13124510216�020656� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "documentParser.h" #include "QtDebug" documentParser::documentParser(const QString& text, const int maximum) : _space(QChar(' ')), _text(text), _maximum_words(maximum), _minimum_words(2), _text_length(text.length()) { _current_nwords = 0; _current_ssentence_length = 0; _current_ssentence_origin = 0; _nwords = 0; _position = 0; if (_text_length > 0) { if (_is_letter(_text[0])) { _ssentence_origin = 0; _all_done = false; } else { _ssentence_origin = nextWord(0); _position = _ssentence_origin; _all_done = (_ssentence_origin == _text_length); } } else _all_done = true; } documentParser::~documentParser() {} bool documentParser::parses() { if (_all_done) return false; // Assumed 0-terminated string, i.e., text[_text_length] = 0 const QChar* const text(_text.constData()); int i(_position); while (i++ < _text_length) { const QChar& c(text[i]); if (_is_letter_or_number(c)) continue; ++_nwords; // Contiguous words within a subsentence if (c == _space && _is_letter(text[i + 1])) { if (_nwords < _minimum_words) continue; if (_nwords < _maximum_words) { _position = i + 1; _current_nwords = _nwords; _current_ssentence_origin = _ssentence_origin; _current_ssentence_length = i - _ssentence_origin; return true; } } // Subsentence terminated at c else if (_nwords < _minimum_words) { // Too few words in subsentence, move forward to next subsentence _ssentence_origin = nextWord(i); i = _ssentence_origin; _nwords = 0; continue; } _position = nextWord(_ssentence_origin); _current_nwords = _nwords; _current_ssentence_origin = _ssentence_origin; _current_ssentence_length = i - _ssentence_origin; _nwords = 0; _ssentence_origin = _position; return true; } _all_done = true; return false; } int documentParser::nextWord(const int pos) const { for (int i = pos + 1; i < _text_length; ++i) if (_is_letter(_text[i]) && !_is_letter_or_number(_text[i - 1])) return i; return _text_length; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/pubmedXml.cpp��������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016221� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.919255565 30 atime=1498583183.003254785 30 ctime=1498583182.923255528 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/pubmedXml.cpp������������������������������������������������������������������0000644�0001750�0000144�00000011304�13124510216�017612� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "pubmedXml.h" #include "cb2bib_utilities.h" pubmedXml::pubmedXml(const QString& xml) : QXmlStreamReader() { // toQtXmlString and fromQtXmlString are workarounds for Qt < 4.5 addData(c2bUtils::toQtXmlString(xml)); _reference.clearReference(); readReference(); QMutableHashIterator<QString, QString> it(_reference); while (it.hasNext()) { it.next(); it.value() = c2bUtils::fromQtXmlString(it.value()); } } void pubmedXml::readReference() { while (reading("PubmedArticle")) if (name() == "Journal") readJournal(); else if (name() == "AuthorList") readAuthors(); else if (name() == "MeshHeadingList") readKeywords(); else if (name() == "ArticleTitle") readField("title"); else if (name() == "AbstractText") readField("abstract"); else if (name() == "MedlinePgn") { readNext(); _reference["pages"] = text().toString().remove(QRegExp("\\,[\\s\\d]+")); // Cases "11-5, 25" } else if (name() == "PMID") { readNext(); _reference["url"] = c2bUtils::pubmedUrl.arg(text().toString()); } else if (name() == "ArticleId") { if (attributes().count() > 0) if (attributes().first().value().toString() == "doi") readField("doi"); } } void pubmedXml::readField(const QString& field) { readNext(); _reference[field] = text().toString(); } void pubmedXml::readAuthors() { QStringList authors; while (reading("AuthorList")) { if (name() == "Author" && attributes().value("ValidYN") != "N") { QString a, i; bool abbreviated(true); while (reading("Author")) if (name() == "LastName") { readNext(); a = a + ' ' + text().toString(); } else if (name() == "ForeName" || name() == "FirstName") { readNext(); a = text().toString() + ' ' + a; abbreviated = false; } else if (name() == "Suffix") { readNext(); if (text() == "2nd") a = a + " II"; else if (text() == "3rd") a = a + " III"; else a = a + ' ' + text().toString(); } else if (name() == "Initials") { readNext(); i = text().toString(); } if (abbreviated) authors.append(i + ' ' + a); else authors.append(a); } } _reference["author"] = authors.join(", "); } void pubmedXml::readJournal() { QString ja, jf, mldate; while (reading("Journal")) if (name() == "ISOAbbreviation") { readNext(); ja = text().toString(); } else if (name() == "Title") { readNext(); jf = text().toString(); } else if (name() == "Volume") readField("volume"); else if (name() == "Issue") readField("number"); else if (name() == "Year") readField("year"); else if (name() == "MedlineDate") { readNext(); mldate = text().toString(); } if (ja.isEmpty()) _reference["journal"] = jf; else _reference["journal"] = ja; if (_reference.value("year").isEmpty()) { mldate.remove(QRegExp("[^\\d\\s-]")); mldate.remove(QRegExp("\\b\\d{1,3}\\b")); _reference["year"] = mldate; } } void pubmedXml::readKeywords() { QStringList k; while (reading("MeshHeadingList")) if (name() == "DescriptorName") { readNext(); k.append(text().toString()); } _reference["keywords"] = k.join(", "); } bool pubmedXml::reading(const QString& tag) { while (!atEnd()) { TokenType t = readNext(); if (t == StartElement) return true; else if (t == EndElement) if (name() == tag) return false; } return false; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/authorString.h�������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016422� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.939255379 30 atime=1498583183.003254785 30 ctime=1498583182.939255379 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/authorString.h�����������������������������������������������������������������0000644�0001750�0000144�00000013106�13124510216�020015� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef AUTHORSTRING_H #define AUTHORSTRING_H #include "cb2bib_utilities.h" #include <QRegExp> #include <QString> #include <QStringList> namespace author { static const QString double_initials("(Al|Ch|Kh|Md|Th|Xh|Ya|Yu|Zs)"); static const QString prefixes("(da|de|dal|del|der|di|do|du|dos|el|la|le|lo|van|vande|von|zur)"); static const QString name("(?:\\w[-'\\w]{1,})"); static const QString initials("(?:\\s*-{0,1}\\b\\w\\b\\.{0,1}){1,3}"); static const QString reversed_romance_name("(?:\\w[-'\\w]{1,})\\s+(?:\\w[-'\\w]{1,}),\\s*(?:\\w[-'\\w]{1,}|" + initials + ')'); static const QRegExp reversed_name_rx('^' + name + ','); // Cases 'n1 n2, n3', 'n1 n2, n3 and n4 n5, n6', 'n1 n2, n3 and n4, n5 n6' are necessarily reverse order static const QRegExp reversed_romance_name_rx("^(?:" + reversed_romance_name + '|' + reversed_romance_name + " and " + reversed_romance_name + '|' + reversed_romance_name + " and (?:\\w[-'\\w]{1,}),\\s*(?:\\w[-'\\w]{1,}|\\w[-'\\w]{1,} \\w[-'\\w]{1,}|" + initials + "))$"); // simplifyString static const QRegExp simplify_string_rx1(QString("%1(?=\\w)").arg(QChar(8217))); static const QRegExp simplify_string_rx2(QRegExp("\'(?!\\w)")); static const QRegExp simplify_string_rx3(QRegExp("\\d\\d+")); static const QRegExp simplify_string_rx4(QRegExp("\\d(?=\\s\\w\\w)")); static const QRegExp simplify_string_rx5(QRegExp("\\d[\\*,;][a-z]\\b")); static const QRegExp simplify_string_rx6(QRegExp("\\d")); static const QRegExp simplify_string_rx7(QRegExp("[^-',;:\\|/&\\.\\s\\w]")); inline QString& simplifyString(QString& author, const bool full = false) { if (full) // Characters | and : are used for the encoder { author.replace('|', ' '); author.replace(':', ' '); } author.replace(simplify_string_rx1, "\'"); // Normalize apostrophe author.remove(simplify_string_rx2); // Remove spurious apostrophes author.replace(simplify_string_rx3, "/"); // Break dates, addresses, etc, but remove from author's foot notes. author.replace(simplify_string_rx4, ","); // Help no-separator designs, and also break zip codes. author.replace(simplify_string_rx5, " "); author.remove(simplify_string_rx6); // Better remove if no conflict. It will help to not confuse with chemical formula. author.replace(simplify_string_rx7, " "); author = c2bUtils::simplifyString(author); return author; } extern QString fromMedline(const QString& author); struct unifier { unifier(); QString& unifyNames(QString& author); QRegExp unifier_rx1; QRegExp unifier_rx2; QRegExp unifier_rx3; QRegExp unifier_rx4; QRegExp unifier_rx5; QRegExp unifier_rx6; QRegExp unifier_rx7; }; /** Implementation of author field extraction P. Constans. A Simple Extraction Procedure for Bibliographical Author Field. arXiv:0902.0755v1, 2009. */ struct encoder { encoder() {} explicit encoder(const QString& str) { encode(str); } QString code; QString decoded(const int position, const int length) const; QStringList fragments; unifier as_unifier; void clear() { code.clear(); fragments.clear(); } void encode(const QString& raw); void scape(const int pos, const int length, const QChar c = QChar(' ')) { const int pos0(qMax(pos, 0)); const int posn(qMin(pos0 + length, code.length())); for (int i = pos0; i < posn; ++i) if (code.at(i) != 'L') code[i] = c; } void scapePattern(const QString& pattern, const QChar c = QChar(' ')) { QRegExp rx(pattern, Qt::CaseSensitive); rx.setMinimal(true); rx.setPatternSyntax(QRegExp::RegExp2); if (!rx.isValid()) exit(6); int pos(0); while (pos > -1) { pos = rx.indexIn(code, pos); if (pos > -1) { scape(pos, rx.matchedLength(), c); pos += rx.matchedLength(); } } } inline static bool hasUpper(const QString& str) { for (int i = 0; i < str.length(); i++) if (str.at(i).isLetter()) if (str.at(i).category() == QChar::Letter_Uppercase) return true; return false; } inline static bool isCapitalName(const QString& w) { return c2bUtils::isUpperCaseString(w, qMax(0, w.lastIndexOf('_', -5))); // Skip prefixes and suffixes } inline static bool isSeparator(const QString& w) { return (w == "and") || (w == "&"); } static bool isAdparticle(const QString& w); static bool isInitial(const QString& w); static bool isName(const QString& w); static bool isPlainWord(const QString& w); }; } // namespace author class authorString { public: authorString(); inline ~authorString() {} QString toBibTeX(const QString& author, bool full_form = false); private: QString processFirstMiddle(const QString& first_middle) const; static QString capitalize(const QString& name); static bool containLowerCaseLetter(const QString& author); static bool containUpperCaseLetter(const QString& author); static bool isReverseOrder(const QString& author); QString _author_string; author::unifier as_unifier; bool _full_form; }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/bibParser.cpp��������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016175� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.887255862 30 atime=1498583183.003254785 30 ctime=1498583182.887255862 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/bibParser.cpp������������������������������������������������������������������0000644�0001750�0000144�00000050547�13124510216�017602� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "bibParser.h" #include "authorString.h" #include "bibPreparser.h" #include "document.h" #include "heuristicBibParser.h" #include "idMaker.h" #include "preprocess.h" #include "pubmedXml.h" #include "settings.h" #include <QCoreApplication> #include <QUrl> bibParser::bibParser(QObject* parento) : coreBibParser(parento) { // Creating journal name database _journal_dbP = new journalDB(_settingsP->fileName("cb2Bib/JournalFile")); // Creating month list _month_dbP = new monthDB(); // Creating cite and document ID makers _cite_idmP = new idMaker("cb2Bib/CiteIdPattern", this); _file_idmP = new idMaker("cb2Bib/DocumentIdPattern", this); // Creating (external) reference preparser _preparserP = new bibPreparser(this); connect(_preparserP, SIGNAL(statusMessage(const QString&)), this, SIGNAL(statusMessage(const QString&))); // Creating stream preprocess object _preprocessP = new preprocess(this); // Creating heuristic bibliographic parser _heuristic_parserP = new heuristicBibParser(this); } bibParser::~bibParser() { delete _journal_dbP; delete _month_dbP; delete _heuristic_parserP; } /** Process each field and set its final format */ QString bibParser::parse(const QString& field, const QString& value, const QString& init_value) { QString v(value); if (field == "file") return v.trimmed(); if (field == "abstract") document::normalize(v, document::Complete); v = removeTags(v); if (v.isEmpty()) return (v); c2bUtils::fullBibToC2b(v); if (field == "author") { c2bUtils::debug(v); v = _authorString.toBibTeX(v, _settingsP->value("cb2Bib/UseFullNames").toBool()); } else if (field == "addauthors") { c2bUtils::debug(v); if (init_value.isEmpty()) v = _authorString.toBibTeX(v, _settingsP->value("cb2Bib/UseFullNames").toBool()); else v = init_value + " and " + _authorString.toBibTeX(v, _settingsP->value("cb2Bib/UseFullNames").toBool()); } else if (field == "editor") { c2bUtils::debug(v); v.remove(QRegExp("\\((Editor|Editors|Ed|Eds)\\.{0,1}\\)", Qt::CaseInsensitive)); v = _authorString.toBibTeX(v, _settingsP->value("cb2Bib/UseFullNames").toBool()); } else if (field == "addeditors") { c2bUtils::debug(v); v.remove(QRegExp("\\((Editor|Editors|Ed|Eds)\\.{0,1}\\)", Qt::CaseInsensitive)); if (init_value.isEmpty()) v = _authorString.toBibTeX(v, _settingsP->value("cb2Bib/UseFullNames").toBool()); else v = init_value + " and " + _authorString.toBibTeX(v, _settingsP->value("cb2Bib/UseFullNames").toBool()); } else if (field == "doi") v.remove(QRegExp("^.+(?=10\\.[\\d\\.]+/\\S+)")); else if (field == "isbn") v.remove(' '); else if (field == "journal") { if (_settingsP->value("cb2Bib/SetJournalsToFullname").toBool()) v = _journal_dbP->retrieveFull(v); else v = _journal_dbP->retrieve(v); } else if (field == "keywords") { v.replace(" - ", ","); QStringList kl(v.split(QRegExp("[^\\w\\s-']"), QString::SkipEmptyParts)); kl.removeAll(" "); kl.removeDuplicates(); v = kl.join(", "); v.replace(QRegExp("\\s+,"), ","); v = v.toLower(); } else if (field == "month") v = _month_dbP->retrieve(v); // Fields edition and note require first letter capitalization else if (field == "edition") v = c2bUtils::setCapitalization(v); else if (field == "note") v = c2bUtils::setCapitalization(v); // Process pages, volume, number, and year to set hyphenation else if (field == "pages") v = adjacentNumbers(v); else if (field == "volume") v = adjacentNumbers(v); else if (field == "number") v = adjacentNumbers(v); else if (field == "year") v = adjacentNumbers(v); else if (field == "title" || field == "booktitle") v = c2bUtils::setCapitalization(v); else if (field == "addtitle") { v = c2bUtils::setCapitalization(v); if (!init_value.isEmpty()) v = init_value + ": " + v; } return c2bUtils::simplifyString(v); } /** Process each field and set its final format for a complete reference */ bibReference& bibParser::parse(bibReference& reference) { QMutableHashIterator<QString, QString> i(reference); while (i.hasNext()) { i.next(); const QString v(parse(i.key(), i.value())); i.setValue(v); } return reference; } QString bibParser::setJournalsToFull(const QString& text) { QString substituted_text(text); QRegExp jnre("\\bjournal\\s*=\\s*[\\{\"](.*)[\\}\"]", Qt::CaseInsensitive); jnre.setMinimal(true); int pos(0); uint nj(0); while (pos >= 0) { pos = jnre.indexIn(substituted_text, pos); if (pos > -1) { QString line(jnre.cap(0)); const QString jn(jnre.cap(1)); line.replace(jn, fullJournal(jn)); substituted_text.replace(pos, jnre.matchedLength(), line); pos += line.length(); nj++; } emit statusMessage(tr("Processed %1 journal names...").arg(nj)); QCoreApplication::processEvents(); } emit statusMessage(tr("Processed %1 journal names.").arg(nj)); return (substituted_text); } QString bibParser::setJournalsToAbbreviated(const QString& text) { QString substituted_text(text); QRegExp jnre("\\bjournal\\s*=\\s*[\\{\"](.*)[\\}\"]", Qt::CaseInsensitive); jnre.setMinimal(true); int pos(0); uint nj(0); while (pos >= 0) { pos = jnre.indexIn(substituted_text, pos); if (pos > -1) { QString line(jnre.cap(0)); const QString jn(jnre.cap(1)); line.replace(jn, abbreviatedJournal(jn)); substituted_text.replace(pos, jnre.matchedLength(), line); pos += line.length(); nj++; } emit statusMessage(tr("Processed %1 journal names...").arg(nj)); QCoreApplication::processEvents(); } emit statusMessage(tr("Processed %1 journal names.").arg(nj)); return (substituted_text); } QString bibParser::excerpt(const QString& text, const QStringList& hints) const { QString txt(removeTags(text)); txt.replace(QRegExp("\\[Bibliographic Metadata.+/Bibliographic Metadata\\]"), " "); txt.replace(QRegExp("(http://|https://|ftp://|www\\.|ftp\\.)(www\\.|ftp\\.){0,1}\\S+"), " "); txt.replace(QRegExp("\\b[A-Z]+\\b"), " "); txt.replace(QRegExp("\\d"), " "); txt.replace(c2bUtils::nonLetter, " "); txt.replace(QRegExp("\\b\\w{1,2}\\b"), " "); txt.replace(QRegExp("\\b(about|and|are|com|for|from|how|into|that|the|their|this|where|with|www)\\b", Qt::CaseInsensitive), " "); txt.replace(QRegExp("\\b(january|february|march|april|may|june|july|august|september|october|november|december)\\b", Qt::CaseInsensitive), " "); txt = hints.join(" ") + ' ' + txt; txt = c2bUtils::simplifyString(txt); const QStringList txtlist(txt.split(' ', QString::SkipEmptyParts)); QStringList txtlistSimp; for (int i = 0; i < qMin(15, txtlist.count()); ++i) txtlistSimp.append(txtlist.at(i)); return txtlistSimp.join(" "); } void bibParser::setField(const QString& name, const QString& value) { _current_reference[name] = parse(name, value); } void bibParser::setReferenceType(const QString& type) { _current_reference.typeName = type; } void bibParser::setCiteID() { _current_reference.citeidName = _cite_idmP->makeID(_current_reference); } QString bibParser::documentFilename(const QString& base_fn, const QString& bibtex_fn) { if (base_fn.isEmpty()) return base_fn; if (!_settingsP->value("cb2Bib/MovePdf").toBool()) { const QUrl u(base_fn); const QString scheme(u.scheme()); if (scheme == "file") return parse("file", u.toLocalFile()); else return parse("file", base_fn); } QString filename(_file_idmP->makeID(_current_reference)); if (filename.isEmpty()) filename = "no_cite_id"; QFileInfo fi(base_fn); QString docExtension('.' + fi.suffix().toLower()); // Possible document extensions if (!docExtension.contains(QRegExp("^\\.\\w{2,4}$"))) docExtension = ".pdf"; // Default if (docExtension == ".gz") if (fi.completeSuffix().toLower() == ".ps.gz") docExtension = ".ps.gz"; // Composite extension filename = c2bUtils::documentFilename(_settingsP->value("cb2Bib/RelativePdfDirectory").toBool(), bibtex_fn, _settingsP->fileName("cb2Bib/PdfDirectory"), filename + docExtension); return parse("file", filename); } /**************************************************************************** AUTOMATIC BIB CAPTION *****************************************************************************/ void bibParser::preparse(const QString& text, QString* out_text) { _preparserP->preparse(text, out_text); } /** \page bibproc Extracting data from the clipboard Clipboard contents is processed according to the following rules: - Perform external, user-defined preparsing on input stream. See \ref c2bconf_clipboard. - Perform user-defined substitutions on input stream. See \ref c2bconf_clipboard. - Check if input stream is already a BibTeX entry. If so, process entry. - Check if input stream is a PubMed XML or Medline entry. If so, process entry. - Preprocess author names: PI JOAN III -> Pi III, J. (care of name prefixes, suffixes, and removal of ambiguities). If otherwise, - Extract DOI \n (DOI, URL and FILE/PDF are preprocessed, performed before the automatic recognition takes place.) - Extract URL - Remove leading and trailing white spaces, TABs and CRs. - "\r\n", "\n" and/or "\r" replaced by the line indicator tag "<NewLineN>". - Replace "\t" and ten or more consecutive "\s" by the tabular tag "<TabN>". - Simplify White Spaces - Start the automatic recognition engine. If the automatic recognition engine fails, optionally, a heuristic guessing will be performed. See also \ref heuristicguess and \ref metadata. */ void bibParser::parse(const QString& text, QString* out_text, QString* out_tagtext) { QString& otext = *out_text; otext = text; QString& ottext = *out_tagtext; ottext.clear(); _preprocessP->preprocessText(out_text); if (hasBibTeX(otext)) { _current_reference = wholeReference(otext); parse(_current_reference); currentReferenceUpdated(); _auto_recognized_string = tr("Processed as 'BibTeX'."); _auto_recognized = true; emit statusMessage(_auto_recognized_string); return; } if (otext.contains("<PubmedArticle>")) { pubmedXml pxml(otext); _current_reference = pxml.reference(); parse(_current_reference); currentReferenceUpdated(); _auto_recognized_string = tr("Processed as 'PubMed XML'."); _auto_recognized = true; emit statusMessage(_auto_recognized_string); return; } if (otext.contains(QRegExp("^\\s*PMID\\s*-"))) { _current_reference.typeName = "article"; otext = ' ' + otext; ottext = otext; // http://www.nlm.nih.gov/bsd/mms/medlineelements.html ottext.replace(QRegExp("[\\n\\r]\\s*([A-Z]{2,4}\\s*-)"), "][\\1"); // Two to four capital letter in field tags ottext = c2bUtils::simplifyString(ottext); if (!ottext.contains(QRegExp("\\[FAU\\s+-"))) ottext.replace(QRegExp("\\[(AU\\s*-\\s*[-'\\w]+)"), "[F\\1 "); QStringList fList(ottext.split("][")); QString kw; QRegExp fld("^([A-Z]{2,4})\\s{0,1}-\\s*(.+)$"); fld.setPatternSyntax(QRegExp::RegExp2); for (QStringList::Iterator it = fList.begin(); it != fList.end(); ++it) { if (fld.indexIn(*it) == -1) continue; const QString tag(fld.cap(1)); QString value(fld.cap(2)); if (tag == "AB") _current_reference["abstract"] = parse("abstract", value); else if (tag == "FAU") _current_reference["author"] = parse("addauthors", author::fromMedline(value), _current_reference.value("author")); else if (tag == "TA") _current_reference["journal"] = parse("journal", value); else if (tag == "IP") _current_reference["number"] = parse("number", value); else if (tag == "PG") _current_reference["pages"] = parse("pages", value); else if (tag == "TI") _current_reference["title"] = parse("title", value); else if (tag == "PMID") _current_reference["url"] = parse("url", c2bUtils::pubmedUrl.arg(value)); else if (tag == "VI") _current_reference["volume"] = parse("volume", value); else if (tag == "AID") { if (value.contains("[doi]")) _current_reference["doi"] = parse("doi", value.remove("[doi]")); } else if (tag == "DP") _current_reference["year"] = parse("year", value.replace(QRegExp("^([\\d\\s]+).*$"), "\\1")); else if (tag == "MH") kw += "; " + value.trimmed(); } if (!kw.isEmpty()) _current_reference["keywords"] = parse("keywords", kw.remove(0, 2)); currentReferenceUpdated(); _auto_recognized_string = tr("Processed as 'PubMed - Medline Journals'."); _auto_recognized = true; emit statusMessage(_auto_recognized_string); return; } _heuristic_parserP->heuristicFields(otext); // Set tags and start regular expression extraction ottext = setTags(otext); QString regular_expression_f(_settingsP->fileName("cb2Bib/RegularExpressionFile")); checkRegExpFile(regular_expression_f); QFile file(regular_expression_f); file.open(QIODevice::ReadOnly | QIODevice::Text); QString ItemX; QString line; QString reftype; QString fieldset; QTextStream stream(&file); stream.setCodec("UTF-8"); stream.setAutoDetectUnicode(true); int nfilters(0); while (!stream.atEnd()) { line = stream.readLine(); if (!(line.isEmpty() || line.contains(QRegExp("^#")))) { reftype = stream.readLine(); fieldset = stream.readLine(); ItemX = stream.readLine(); c2bUtils::debug(tr("The RegExp file contains1: |%1|").arg(line)); c2bUtils::debug(tr("The RegExp file contains2: |%1|").arg(reftype)); c2bUtils::debug(tr("The RegExp file contains3: |%1|").arg(fieldset)); c2bUtils::debug(tr("The RegExp file contains4: |%1|").arg(ItemX)); QRegExp rx(ItemX); rx.setMinimal(true); if (!rx.isValid()) c2bUtils::warn(tr("RegExp |%1| is not valid").arg(ItemX)); const QStringList list(fieldset.split(' ', QString::SkipEmptyParts)); const int efields(list.count()); const int cfields(rx.captureCount()); int npos(rx.indexIn(ottext)); c2bUtils::debug(tr("Expected Fields: |%1|").arg(efields)); c2bUtils::debug(tr("Captured Fields: |%1|").arg(cfields)); c2bUtils::debug(tr("Position: |%1|").arg(npos)); if (efields != cfields) { c2bUtils::warn(tr("RegExp |%1| is not valid. Mismatch between expected and actual captures").arg(ItemX)); npos = -1; } nfilters++; if (npos > -1) { for (int i = 0; i < cfields; i++) { const QString& listi = list.at(i); int ii(i + 1); c2bUtils::debug(QString("Fields in Template %1: |%2|").arg(i).arg(rx.cap(ii))); if (_field_re.indexIn(listi) > -1) { if (listi == "author") // Reminder: "addauthors" requires to init _current_reference["author"] _current_reference[listi] = parse("addauthors", rx.cap(ii), _current_reference.value(listi)); else if (listi == "editor") // Reminder: "addeditors" requires to init _current_reference["editor"] _current_reference[listi] = parse("addeditors", rx.cap(ii), _current_reference.value(listi)); else if (listi == "title") // Reminder: "addtitle" requires to init _current_reference["title"] _current_reference[listi] = parse("addtitle", rx.cap(ii), _current_reference.value(listi)); else _current_reference[listi] = parse(listi, rx.cap(ii)); } } _current_reference.typeName = reftype; currentReferenceUpdated(); _auto_recognized_string = tr("Processed as '%1'.").arg(line); _auto_recognized = true; emit statusMessage(_auto_recognized_string); file.close(); return; } } } file.close(); // Heuristic Bib Parsing if (_settingsP->value("cb2Bib/DoHeuristicGuess").toBool()) { // Sometimes (if user is on tag mode) tag could be on otext. Revert tags here, just in case. const QString clean_text(removeTags(ottext)); _heuristic_parserP->guessFields(clean_text, ottext); currentReferenceUpdated(); _auto_recognized_string = tr("Applied %1 filters: No automatic format detection. %2 fields guessed.") .arg(nfilters).arg(fieldCount()); } else _auto_recognized_string = tr("Applied %1 filters: No automatic format detection.").arg(nfilters); emit statusMessage(_auto_recognized_string); } void bibParser::checkRegExpFile(const QString& fn) { if (fn.isEmpty()) { c2bUtils::warn(tr("No regular expression file especified")); return; } QFileInfo fi(fn); if (!fi.exists() || !fi.isReadable()) { c2bUtils::warn(tr("Could not open regular expression file %1 for reading").arg(fn)); return; } } void bibParser::guessFields(const QString& text) { const QString clean_text(text.simplified()); const QString tagged_text(setTags(text)); _heuristic_parserP->heuristicFields(clean_text); _heuristic_parserP->guessFields(clean_text, tagged_text); currentReferenceUpdated(); _auto_recognized_string = tr("%1 fields guessed.").arg(fieldCount()); emit statusMessage(_auto_recognized_string); } QString bibParser::setTags(const QString& text) const { QString tagged_text(text.trimmed()); tagged_text.replace(QRegExp("\\r\\n"), "<found_new_line>"); // Windows new line tagged_text.replace(QRegExp("\\n"), "<found_new_line>"); // Linux new line, LF tagged_text.replace(QRegExp("\\r"), "<found_new_line>"); // OSX new line, CR QStringList spText(tagged_text.split("<found_new_line>")); int n(spText.count()); tagged_text.clear(); for (int i = 0; i < n - 1; i++) tagged_text += spText.at(i) + QString("<NewLine%1>").arg(i + 1); tagged_text += spText[n-1]; spText = tagged_text.split(QRegExp("(\\s{10,}|\\t)")); n = spText.count(); tagged_text.clear(); for (int i = 0; i < n - 1; i++) tagged_text += spText.at(i) + QString("<Tab%1>").arg(i + 1); tagged_text += spText[n-1]; tagged_text = c2bUtils::simplifyString(tagged_text); return tagged_text; } QString bibParser::removeTags(const QString& text) const { QString clean(text); clean.remove("[["); clean.remove("]]"); clean.replace(QRegExp("<NewLine\\d+>"), " "); clean.replace(QRegExp("<Tab\\d+>"), " "); clean = c2bUtils::simplifyString(clean); return clean; } ���������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/documentParser.h�����������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016724� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.959255193 30 atime=1498583183.003254785 30 ctime=1498583182.963255156 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/documentParser.h���������������������������������������������������������������0000644�0001750�0000144�00000003314�13124510216�020317� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef DOCUMENTPARSER_H #define DOCUMENTPARSER_H #include <QString> class documentParser { public: documentParser(const QString& text, const int maximum); ~documentParser(); bool parses(); inline QStringRef subsentence() const { return _text.midRef(_current_ssentence_origin, _current_ssentence_length); } inline int nlength() const { return _current_ssentence_length; } inline int nwords() const { return _current_nwords; } private: int nextWord(const int pos) const; inline static bool _is_letter(const QChar& c) { const ushort uc(c.unicode()); if ((uc > 96 && uc < 123) || uc == 95 || uc == 39) return true; else return c.isLetter(); } inline static bool _is_letter_or_number(const QChar& c) { const ushort uc(c.unicode()); if ((uc > 96 && uc < 123) || (uc > 47 && uc < 58) || uc == 95 || uc == 39) return true; else return c.isLetterOrNumber(); } bool _all_done; int _current_nwords; int _current_ssentence_length; int _current_ssentence_origin; int _nwords; int _position; int _ssentence_origin; const QChar _space; const QString _text; const int _maximum_words; const int _minimum_words; const int _text_length; }; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/searchPattern.h������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016534� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.975255045 30 atime=1498583183.003254785 30 ctime=1498583182.979255008 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/searchPattern.h����������������������������������������������������������������0000644�0001750�0000144�00000012426�13124510216�020133� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef SEARCHPATTERN_H #define SEARCHPATTERN_H #include "approximatePattern.h" #include "documentContents.h" #include "wordMatcher.h" #include "wordPattern.h" #include <QList> #include <QRegularExpression> class searchPattern { public: searchPattern(const QString& pattern, const QString& patternType); searchPattern(const bool NOT, const bool caseSensitive, const QString& patternType, const QString& scope, const QChar& yearScope, const QString& pattern); inline ~searchPattern() {} enum Type {ApproximateString = 1, FixedStringAllWords = 2, FixedStringAnyWord = 3, FixedStringContext = 4, FixedString = 5, RegularExpression = 6, Wildcard = 7 }; static const QString type(const Type t); static const QStringList types(); struct modifiers { QChar yearScope; QString scope; QString string; bool NOT; }; inline const modifiers& modifier() const { return _modifier; } inline bool matches(const QString& contents) const { return _matcher.match(contents); } inline bool matches(const documentContents& contents) const { return _matcher.match(contents); } inline int indexIn(const QString& contents, const int from) const { return _matcher.index(contents, from); } inline int indexIn(const documentContents& contents, const int from) const { return _matcher.index(contents.text(), from); } inline int matchedLength() const { return _matcher.length; } inline const QString toString() const { return _formatted_string; } inline bool operator< (const searchPattern& p) const { return (_rank < p._rank); } private: struct matcher { matcher(const QString& pattern, const Type t, const Qt::CaseSensitivity cs); QRegularExpression regexp; QString signature; QStringMatcher strexp; QVector<QString> subsignatures; Type type; approximatePattern appexp; mutable QRegularExpressionMatch regexp_match; mutable int length; wordMatcher cwordexp; wordPattern wordexp; bool match(const QString& contents) const; bool match(const documentContents& contents) const; int index(const QString& contents, const int from) const; static QString _wildcard_escaped(const QString& pattern); inline static bool _match_signature(const QString& ps, const QString& cs) { const int pl(ps.length()); // Always pl > 0 const int cl(cs.length()); const ushort* ups = (const ushort*) ps.unicode(); const ushort* p = ups; const ushort* pn = ups + pl; const ushort* ucs = (const ushort*) cs.unicode(); const ushort* c = ucs - 1; const ushort* cn = ucs + cl; while (++c != cn) if (*c == *p) if (++p == pn) return true; return false; } inline static bool _match(const QRegularExpression& submatcher, const QString& psignature, const documentContents& contents) { // Skip signature check for patterns that do not define it if (psignature.length() == 0 || _match_signature(psignature, contents.signature())) return submatcher.match(contents.text()).hasMatch(); else return false; } template <typename T> inline static bool _match(const T& submatcher, const QString& psignature, const documentContents& contents) { // Skip signature check for patterns that do not define it if (psignature.length() == 0 || _match_signature(psignature, contents.signature())) return submatcher.indexIn(contents.text()) != -1; else return false; } template <typename T> inline bool _match_all(const int n, const T& submatchers, const documentContents& contents) const { for (int i = n - 1; i >= 0; --i) if (!_match(submatchers.at(i), subsignatures.at(i), contents)) return false; return true; } template <typename T> inline bool _match_any(const int n, const T& submatchers, const documentContents& contents) const { for (int i = 0; i < n; ++i) if (_match(submatchers.at(i), subsignatures.at(i), contents)) return true; return false; } }; QString _formatted_string; int _rank; matcher _matcher; modifiers _modifier; static const QMap<QString, searchPattern::Type> typemap(); inline static Qt::CaseSensitivity qtcase(bool caseSensitive) { return caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive; } }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/PaxHeaders.3194/heuristicBibParser.cpp�����������������������������������������0000644�0000000�0000000�00000000132�13124510216�020055� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.907255676 30 atime=1498583183.003254785 30 ctime=1498583182.907255676 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b/heuristicBibParser.cpp���������������������������������������������������������0000644�0001750�0000144�00000103422�13124510216�021451� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "heuristicBibParser.h" #include "bibParser.h" #include "journalDB.h" #include <QDate> heuristicBibParser::heuristicBibParser(bibParser* bp) : _bpP(bp), _current_reference(bp->_current_reference), _reliable_number(false), _reliable_pages(false), _reliable_volume(false), _abstract("abstract"), _addauthors("addauthors"), _author("author"), _isbn("isbn"), _keywords("keywords"), _number("number"), _pages("pages"), _title("title"), _volume("volume"), _year("year"), _bibliographic_fields(bp->_bibliographic_fields), _journal_db(*bp->_journal_dbP) { _leading_non_letters = QRegExp("^[^<\\w]+"); // Char 65533 appears many times in pdftotext outputs on windows (seems an encoding error, though) _hyphens = QRegExp("\\s*[-" + QString(QChar(8211)) + QString(QChar(8722)) + QString(QChar(65533)) + "]+\\s*"); _hyphen_nums = "(?:\\d+|\\d+-\\d+)"; _hyphen_pages = "(?:\\d+|\\d+-\\d+p{0,2}|\\d+ \\d+pp)"; _max_year = 3 + QDate::currentDate().year(); // Setup author recognition // Implementation of author field extraction // P. Constans. A Simple Extraction Procedure for Bibliographical Author Field. // arXiv:0902.0755v1, 2009. _word_prefix_lexicon = c2bUtils::fileToString(":/txt/txt/word_prefix_lexicon.txt").split(c2bUtils::nonLetter, QString::SkipEmptyParts); for (int i = 0; i < _word_prefix_lexicon.count(); ++i) { _word_prefix_lexicon[i].replace('_', ' '); _word_prefix_lexicon[i].squeeze(); } const QString author_lc_t("(?:n%1n|n%1%1n|%1n|%1nn|%1%1n|%1%1%1n|n%1nn|nn%1n|%1%1nn|%1n%1n|nn|nnn)"); const QString author_uc_t("(?:[nN]%1N|[nN]%1%1N|%1N|%1[nN]N|%1%1N|%1%1%1N|[nN]%1[nN]N|[nN]N%1N|%1%1[nN]N|%1[nN]%1N|[nN]N|[nN][nN]N)"); const QString author_initial("Ip{0,1}"); const QString author_line("L%1(?:[,;&L]+%1)*(?=L)"); const QString author_lc(author_line.arg(author_lc_t.arg(author_initial))); const QString author_uc(author_line.arg(author_uc_t.arg(author_initial))); const QString author_address("(?:L[^L]*)"); _author_sb = QRegExp(QString("L%1(?:[,;&]+L{0,2}%1)*[,;&L]*L").arg(author_lc_t.arg(author_initial)), Qt::CaseInsensitive, QRegExp::RegExp); _author_sb_lc = QRegExp(QString("L%1(?:[,;&L]+%1)*(?=L)").arg(author_lc_t.arg(author_initial)), Qt::CaseSensitive, QRegExp::RegExp); _author_sb_uc = QRegExp(QString("L%1(?:[,;&L]+%1)*(?=L)").arg(author_uc_t.arg(author_initial)), Qt::CaseSensitive, QRegExp::RegExp); _author_sb.setMinimal(false); _author_sb_lc.setMinimal(false); _author_sb_uc.setMinimal(false); // Note: Syntax must be RegExp and not RegExp2. // If not, in cases as 'LnnL ... Lnn,nn,Lnn,&nnL' it will overextend addresses to include Lnn,nn,L. // This is not related to minimal/greedy. // Note also that Lnn,nn,L will not be taken, unless it is followed by another author line. This is a feature. _author_b2_lc_rx = new QRegExp(QString("(%1)%2{0,7}(%1)").arg(author_lc).arg(author_address), Qt::CaseSensitive, QRegExp::RegExp); _author_b2_uc_rx = new QRegExp(QString("(%1)%2{0,7}(%1)").arg(author_uc).arg(author_address), Qt::CaseSensitive, QRegExp::RegExp); _author_b3_lc_rx = new QRegExp(QString("(%1)%2{0,7}(%1)%2{0,7}(%1)").arg(author_lc).arg(author_address), Qt::CaseSensitive, QRegExp::RegExp); _author_b3_uc_rx = new QRegExp(QString("(%1)%2{0,7}(%1)%2{0,7}(%1)").arg(author_uc).arg(author_address), Qt::CaseSensitive, QRegExp::RegExp); _author_b4_lc_rx = new QRegExp(QString("(%1)%2{0,7}(%1)%2{0,7}(%1)%2{0,7}(%1)").arg(author_lc).arg(author_address), Qt::CaseSensitive, QRegExp::RegExp); _author_b4_uc_rx = new QRegExp(QString("(%1)%2{0,7}(%1)%2{0,7}(%1)%2{0,7}(%1)").arg(author_uc).arg(author_address), Qt::CaseSensitive, QRegExp::RegExp); _author_b5_lc_rx = new QRegExp(QString("(%1)%2{0,7}(%1)%2{0,7}(%1)%2{0,7}(%1)%2{0,7}(%1)").arg(author_lc).arg(author_address), Qt::CaseSensitive, QRegExp::RegExp); _author_b5_uc_rx = new QRegExp(QString("(%1)%2{0,7}(%1)%2{0,7}(%1)%2{0,7}(%1)%2{0,7}(%1)").arg(author_uc).arg(author_address), Qt::CaseSensitive, QRegExp::RegExp); _author_b2_lc_rx->setMinimal(true); _author_b2_uc_rx->setMinimal(true); _author_b3_lc_rx->setMinimal(true); _author_b3_uc_rx->setMinimal(true); _author_b4_lc_rx->setMinimal(true); _author_b4_uc_rx->setMinimal(true); _author_b5_lc_rx->setMinimal(true); _author_b5_uc_rx->setMinimal(true); } heuristicBibParser::~heuristicBibParser() { delete _author_b2_lc_rx; delete _author_b2_uc_rx; delete _author_b3_lc_rx; delete _author_b3_uc_rx; delete _author_b4_lc_rx; delete _author_b4_uc_rx; delete _author_b5_lc_rx; delete _author_b5_uc_rx; } void heuristicBibParser::guessFields(const QString& clean_text, const QString& tagged_text) { QString clean_num(clean_text); clean_num.replace(_hyphens, "-"); // Order is important to increase the chances of a proper recognition guessJournal(clean_text); guessAbstract(tagged_text); guessAuthor(tagged_text); guessKeywords(tagged_text); guessYear(clean_num); _debug_guess("guessYear"); guessVolume(clean_num); _debug_guess("guessVolume"); guessNumber(clean_num); _debug_guess("guessNumber"); guessPages(clean_num); _debug_guess("guessPages"); guessTitle(tagged_text); guessISBN(clean_num); guessVolumeYearPages(clean_num); _debug_guess("guessVolumeYearPages"); guessYearVolumePages(clean_num); _debug_guess("guessYearVolumePages"); guessVolumePagesYear(clean_num); _debug_guess("guessVolumePagesYear"); guessFromMetadata(clean_text); } void heuristicBibParser::heuristicFields(const QString& text) { // Heuristics for reasonably secure extraction QRegExp rxdoi("(10\\.[\\d\\.]+/\\S+)"); if (rxdoi.indexIn(text) > -1) { QString cdoi(rxdoi.cap(1)); // This happens when publishers set doi to title in metadata: <title>doi:10. ... if (cdoi.endsWith("")) cdoi.chop(8); if (cdoi.endsWith(',')) cdoi.chop(1); _current_reference["doi"] = _bpP->parse("doi", cdoi); } QRegExp rxarxiv("arXiv:([\\w\\./-]+)"); if (rxarxiv.indexIn(text) > -1) { _current_reference["journal"] = _bpP->parse("journal", rxarxiv.cap(0)); _current_reference["url"] = _bpP->parse("url", QString("http://arxiv.org/abs/%1").arg(rxarxiv.cap(1))); } QRegExp rxhtml("((http://|https://|ftp://|www\\.|ftp\\.)(www\\.|ftp\\.){0,1}\\S+)"); if (rxhtml.indexIn(text) > -1) _current_reference["url"] = _bpP->parse("url", rxhtml.cap(1)); } /** \page heuristicguess Field Recognition Rules - Abstract - If Abstract\b is found. - If Summary\b is found. */ void heuristicBibParser::guessAbstract(const QString& text) { // Check whether text might come from a web page or from a PDF with new lines // Set line length to 93 // Check first for abstract, check later for summary if (text.contains("Abstract", Qt::CaseInsensitive)) { const QString crl(QChar(169)); // Avoid abstract overextending to copyright line. QRegExp rxH("(?:|)\\s*Abstract[\\s\\.:]*(.+)(?:" + crl + "| -1) if (rxH.cap(1).length() > 93) { const QString val(rxH.cap(1).remove(_leading_non_letters)); _current_reference[_abstract] = _bpP->parse(_abstract, val); return; } rxH = QRegExp("(?:|)\\s*Abstract[\\s\\.:]*(.+)(?:" + crl + "|\\s* -1) { const QString val(rxH.cap(1).remove(_leading_non_letters)); _current_reference[_abstract] = _bpP->parse(_abstract, val); return; } rxH = QRegExp("(?:|)\\s*Abstract\\b(.+)(?:" + crl + "| -1) if (rxH.cap(1).length() > 93) { const QString val(rxH.cap(1).remove(_leading_non_letters)); _current_reference[_abstract] = _bpP->parse(_abstract, val); return; } rxH = QRegExp("(?:|)\\s*Abstract\\b(.+)(?:" + crl + "|\\s* -1) { const QString val(rxH.cap(1).remove(_leading_non_letters)); _current_reference[_abstract] = _bpP->parse(_abstract, val); return; } } if (text.contains("Summary", Qt::CaseInsensitive)) { QRegExp rxH("(?:|)\\s*Summary[\\s\\.:]*(.+)(?: -1) if (rxH.cap(1).length() > 93) { const QString val(rxH.cap(1).remove(_leading_non_letters)); _current_reference[_abstract] = _bpP->parse(_abstract, val); return; } rxH = QRegExp("(?:|)\\s*Summary[\\s\\.:]*(.+)(?:\\s* -1) { const QString val(rxH.cap(1).remove(_leading_non_letters)); _current_reference[_abstract] = _bpP->parse(_abstract, val); return; } rxH = QRegExp("(?:|)\\s*Summary\\b(.+)(?: -1) if (rxH.cap(1).length() > 93) { const QString val(rxH.cap(1).remove(_leading_non_letters)); _current_reference[_abstract] = _bpP->parse(_abstract, val); return; } rxH = QRegExp("(?:|)\\s*Summary\\b(.+)(?:\\s* -1) { const QString val(rxH.cap(1).remove(_leading_non_letters)); _current_reference[_abstract] = _bpP->parse(_abstract, val); return; } } } /** \page heuristicguess Field Recognition Rules - Author - Check capitalization patterns. See \htmlonly A Simple Extraction Procedure for Bibliographical Author Field. \endhtmlonly */ void heuristicBibParser::guessAuthor(const QString& tagged_text) { // Prepare input stream QString simplified_text("| " + tagged_text + " |"); simplified_text.replace('|', ' '); simplified_text = "| " + simplified_text + " |"; simplified_text.replace(QRegExp(""), " | "); simplified_text.replace(QRegExp("(\\w)(\\w)"), "\\1 , \\2"); simplified_text.replace(QRegExp(""), " "); simplified_text.remove(QRegExp("author.{0,3}:{0,1}", Qt::CaseInsensitive)); simplified_text.replace(QRegExp("(\\w{4,10})[a-z]\\)", Qt::CaseSensitive), "\\1 "); // Remove superscript, e. g. LASTNAMEa simplified_text.replace(QRegExp("([A-Z]{2,10})[a-z]\\b", Qt::CaseSensitive), "\\1 "); // Remove superscript, e. g. LASTNAMEa) simplified_text.replace(_hyphens, "-"); simplified_text.replace(QChar(183), ','); // Fancy author separator simplified_text.replace(' ' + QChar(198) + ' ', " , "); // Fancy author separator simplified_text.replace(QChar(8226), ','); // Fancy author separator simplified_text.replace(QChar(178), ' '); // Superscript dagger as sometimes translated by pdftotext author::simplifyString(simplified_text); // Capitalize and encode for (int i = 0; i < _word_prefix_lexicon.count(); ++i) { const QString& wp = _word_prefix_lexicon.at(i); simplified_text.replace(wp, wp, Qt::CaseInsensitive); } simplified_text.replace(" by ", " "); _aencoder.encode(simplified_text); const QString sb_author(guessAuthor_single_block()); const int n_sb_author(authorCount(sb_author)); const QString mb_author(guessAuthor_multi_block()); const int n_mb_author(authorCount(mb_author)); if (n_mb_author > n_sb_author) _current_reference[_author] = mb_author; else _current_reference[_author] = sb_author; } QString heuristicBibParser::guessAuthor_single_block() { QString author; if (_author_sb_lc.indexIn(_aencoder.code) > -1) author = _bpP->parse(_author, _aencoder.decoded(_author_sb_lc.pos(0), _author_sb_lc.matchedLength())); else if (_author_sb_uc.indexIn(_aencoder.code) > -1) author = _bpP->parse(_author, _aencoder.decoded(_author_sb_uc.pos(0), _author_sb_uc.matchedLength())); else if (_author_sb.indexIn(_aencoder.code) > -1) // Few cases are extracted by _author_sb, keep it for cases 'A. Name,', with ',' usually coming // from a faulty plain text conversion. author = _bpP->parse(_author, _aencoder.decoded(_author_sb.pos(0), _author_sb.matchedLength())); return author; } QString heuristicBibParser::guessAuthor_multi_block() { QString author; if (_author_b5_uc_rx->indexIn(_aencoder.code) > -1) for (int i = 1; i < _author_b5_uc_rx->capturedTexts().count(); ++i) author = _bpP->parse(_addauthors, _aencoder.decoded(_author_b5_uc_rx->pos(i), _author_b5_uc_rx->cap(i).length()), author); else if (_author_b5_lc_rx->indexIn(_aencoder.code) > -1) for (int i = 1; i < _author_b5_lc_rx->capturedTexts().count(); ++i) author = _bpP->parse(_addauthors, _aencoder.decoded(_author_b5_lc_rx->pos(i), _author_b5_lc_rx->cap(i).length()), author); else if (_author_b4_uc_rx->indexIn(_aencoder.code) > -1) for (int i = 1; i < _author_b4_uc_rx->capturedTexts().count(); ++i) author = _bpP->parse(_addauthors, _aencoder.decoded(_author_b4_uc_rx->pos(i), _author_b4_uc_rx->cap(i).length()), author); else if (_author_b4_lc_rx->indexIn(_aencoder.code) > -1) for (int i = 1; i < _author_b4_lc_rx->capturedTexts().count(); ++i) author = _bpP->parse(_addauthors, _aencoder.decoded(_author_b4_lc_rx->pos(i), _author_b4_lc_rx->cap(i).length()), author); else if (_author_b3_uc_rx->indexIn(_aencoder.code) > -1) for (int i = 1; i < _author_b3_uc_rx->capturedTexts().count(); ++i) author = _bpP->parse(_addauthors, _aencoder.decoded(_author_b3_uc_rx->pos(i), _author_b3_uc_rx->cap(i).length()), author); else if (_author_b3_lc_rx->indexIn(_aencoder.code) > -1) for (int i = 1; i < _author_b3_lc_rx->capturedTexts().count(); ++i) author = _bpP->parse(_addauthors, _aencoder.decoded(_author_b3_lc_rx->pos(i), _author_b3_lc_rx->cap(i).length()), author); else if (_author_b2_uc_rx->indexIn(_aencoder.code) > -1) for (int i = 1; i < _author_b2_uc_rx->capturedTexts().count(); ++i) author = _bpP->parse(_addauthors, _aencoder.decoded(_author_b2_uc_rx->pos(i), _author_b2_uc_rx->cap(i).length()), author); else if (_author_b2_lc_rx->indexIn(_aencoder.code) > -1) for (int i = 1; i < _author_b2_lc_rx->capturedTexts().count(); ++i) author = _bpP->parse(_addauthors, _aencoder.decoded(_author_b2_lc_rx->pos(i), _author_b2_lc_rx->cap(i).length()), author); return author; } int heuristicBibParser::authorCount(const QString& authors) { if (authors.isEmpty()) return 0; return 1 + authors.count(" and "); } /** \page heuristicguess - Keywords - If Key\\s{0,1}words\b is found. */ void heuristicBibParser::guessKeywords(const QString& text) { QRegExp rxH("<(?:NewLine|Tab)\\d+>\\s*Key\\s{0,1}words[\\s\\.:]*(.+)( -1) { const QString val(rxH.cap(1).remove(_leading_non_letters)); _current_reference[_keywords] = _bpP->parse(_keywords, val); return; } rxH = QRegExp("<(?:NewLine|Tab)\\d+>\\s*Key\\s{0,1}words\\b(.+)( -1) { const QString val(rxH.cap(1).remove(_leading_non_letters)); _current_reference[_keywords] = _bpP->parse(_keywords, val); } } /** \page heuristicguess - Volume - If Volume:{0,1} is found. - If Vol.{0,1} is found. - If \\b(\\d+)[,:]\\s*\\d+\\W+\\d+ is found. - If \\b(\\d+)\\s*\\(\\d+\\) is found. - If \\b(\\d+)[,:]\\s*\\d+\\b is found. */ void heuristicBibParser::guessVolume(const QString& text) { _reliable_volume = true; QRegExp rxH("Volumes{0,1}:{0,1}\\s*(" + _hyphen_nums + ')', Qt::CaseInsensitive); int nH(rxH.indexIn(text)); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); return; } rxH = QRegExp("Vols{0,1}\\.{0,1}\\s*(" + _hyphen_nums + ')', Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); return; } rxH = QRegExp("\\b(\\d+)\\s*\\(" + _hyphen_nums + "\\)[,:]\\s*pp\\.{0,1}\\s*\\d+", Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); return; } rxH = QRegExp("\\b(\\d+)[,:]\\s*pp\\.{0,1}\\s*\\d+", Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); return; } _reliable_volume = false; rxH = QRegExp("(\\d+)\\s*\\(" + _hyphen_nums + "\\)[,:]\\s*\\d+", Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); return; } rxH = QRegExp("\\b(\\d+)\\s*\\(\\d+\\)"); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); return; } rxH = QRegExp("\\b(\\d+)[,:]\\s*" + _hyphen_nums, Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); return; } rxH = QRegExp("\\b(\\d+)[,:]\\s*\\d+\\b"); nH = rxH.indexIn(text); if (nH > -1) _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); } /** \page heuristicguess - Number - If Numbers{0,1}:{0,1}\\s*([\\d-]+) is found. - If No\\.{0,1}\\s*(\\d+) is found. - If Issue\\:{0,1}\\s*(\\d+) is found. - If \\d\\s*\\((\\d+)\\)[^\\.] is found. */ void heuristicBibParser::guessNumber(const QString& text) { _reliable_number = true; QRegExp rxH("Numbers{0,1}\\:{0,1}\\s*(" + _hyphen_nums + ')', Qt::CaseInsensitive); int nH(rxH.indexIn(text)); if (nH > -1) { _current_reference[_number] = _bpP->parse(_number, rxH.cap(1)); return; } rxH = QRegExp("Nos{0,1}\\.{0,1}\\s*(" + _hyphen_nums + ')', Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_number] = _bpP->parse(_number, rxH.cap(1)); return; } rxH = QRegExp("Issues{0,1}\\:{0,1}\\s*(" + _hyphen_nums + ')', Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_number] = _bpP->parse(_number, rxH.cap(1)); return; } _reliable_number = false; rxH = QRegExp("\\d\\s*\\((" + _hyphen_nums + ")\\)[^\\.]"); nH = rxH.indexIn(text); if (nH > -1) if (rxH.cap(1) != _current_reference.value(_year)) // Avoid confusing (number) and (year) _current_reference[_number] = _bpP->parse(_number, rxH.cap(1)); } /** \page heuristicguess - Pages - If \\bPages{0,1}[:\\.]{0,1}([\\d\\s-]+) is found. - If \\bp{1,2}\\.{0,1}\\s+(\\d+) is found. - If \\b(\\d+)\\s*-{1,2}\\s*(\\d+pp)\\b is found. - If \\b(\\d+)\\s*-{1,2}\\s*(\\d+)\\b is found. */ void heuristicBibParser::guessPages(const QString& text) { _reliable_pages = true; QRegExp rxH("\\bPages{0,1}[:\\.]{0,1}\\s*((?!\\()" + _hyphen_nums + "(?!\\)))", Qt::CaseInsensitive); int nH(rxH.indexIn(text)); if (nH > -1) { _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(1)); return; } rxH = QRegExp("(?!\\()(\\d+[\\s-]\\d+pp)(?!\\))", Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(1)); return; } rxH = QRegExp("\\bpp\\.{0,1}\\s+(" + _hyphen_nums + ')', Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(1)); return; } _reliable_pages = false; rxH = QRegExp("\\bp\\.{0,1}\\s+(" + _hyphen_nums + ')'); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(1)); return; } rxH = QRegExp("\\d+\\s*\\(" + _hyphen_nums + "\\),{0,1}\\s*(" + _hyphen_nums + ')'); nH = rxH.indexIn(text); // 120 (1-3), 927 if (nH > -1) { _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(1)); return; } rxH = QRegExp("(?!\\()(\\d+)\\s*-{1,2}\\s*(\\d+)\\b(?!\\))"); nH = 0; while (nH >= 0) { nH = rxH.indexIn(text, nH); if (nH > -1) { if (!rxH.cap(1).startsWith('0')) { const QString pp(_bpP->parse(_pages, QString("%1 %2").arg(rxH.cap(1)).arg(rxH.cap(2)))); const QStringList flpp(pp.split(QRegExp("\\D"), QString::SkipEmptyParts)); if (flpp.count() != 2) continue; const int fp(flpp.first().toInt()); const int lp(flpp.last().toInt()); if (fp < lp && lp - fp < 250) { _current_reference[_pages] = pp; return; } } nH += rxH.matchedLength(); } } } /** \page heuristicguess - Year - If \\b(19|20)(\\d\\d)\\b is found. */ void heuristicBibParser::guessYear(const QString& text) { QRegExp rxH("\\((19|20)(\\d\\d)\\)"); int nH(rxH.indexIn(text)); if (nH > -1) { const QString y(_bpP->parse(_year, rxH.cap(1) + rxH.cap(2))); if (y.toInt() < _max_year) { _current_reference[_year] = y; return; } } rxH = QRegExp("\\d+:" + _hyphen_nums + "[,\\s]+(19|20)(\\d\\d)\\b"); nH = rxH.indexIn(text); // 44:2077 – 2082, 2004. if (nH > -1) { const QString y(_bpP->parse(_year, rxH.cap(1) + rxH.cap(2))); if (y.toInt() < _max_year) { _current_reference[_year] = y; return; } } rxH = QRegExp("\\b(19|20)(\\d\\d)\\b"); nH = rxH.indexIn(text); if (nH > -1) { const QString y(_bpP->parse(_year, rxH.cap(1) + rxH.cap(2))); if (y.toInt() < _max_year) { _current_reference[_year] = y; return; } } } /** \page heuristicguess - Title - If \\bTitle:{0,1} is found. */ void heuristicBibParser::guessTitle(const QString& text) { QRegExp rxH("\\bTitle:{0,1}\\s*(.+)( -1) { QString val(rxH.cap(1).remove(_leading_non_letters)); _current_reference[_title] = _bpP->parse(_title, val); return; } rxH = QRegExp("\\bTitle:{0,1}(.+)( -1) { QString val(rxH.cap(1).remove(_leading_non_letters)); _current_reference[_title] = _bpP->parse(_title, val); } } /** \page heuristicguess - ISBN - If \\bISBN\\b(?:-\\d+){0,1}:{0,1}(?:-\\d+){0,1}\\s*(\\d+-[\\d-]+-\\d+) is found. - If \\bISBN\\b(?:-\\d+){0,1}:{0,1}(?:-\\d+){0,1}\\s*(\\d+) is found. */ void heuristicBibParser::guessISBN(const QString& text) { QRegExp rxH("\\bISBN\\b(?:[ -]\\d+){0,1}:{0,1}(?:-\\d+){0,1}\\s*(\\d+-[\\d-]+-\\d+)", Qt::CaseInsensitive); int nH(rxH.indexIn(text)); if (nH > -1) { _current_reference[_isbn] = _bpP->parse(_isbn, rxH.cap(1)); return; } rxH = QRegExp("\\bISBN\\b(?:[ -]\\d+){0,1}:{0,1}(?:-\\d+){0,1}\\s*(\\d+)", Qt::CaseInsensitive); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_isbn] = _bpP->parse(_isbn, rxH.cap(1)); return; } } /** \page heuristicguess - Journal - Check cb2Bib internal database. */ void heuristicBibParser::guessJournal(const QString& text) { QString stext(text.toLower()); stext.remove(c2bUtils::nonLetter); QString jn; int pos(stext.length() + 1); int jnl(0); QStringMatcher blank(" "); for (int i = 0; i < _journal_db.count(); ++i) if (blank.indexIn(_journal_db.retrieveFull(i)) >= 0) { const int p(stext.indexOf(_journal_db.fullsimplifiedFull(i), 0, Qt::CaseSensitive)); if (p > -1 && p < pos) { pos = p; jnl = _journal_db.fullsimplifiedFull(i).length(); jn = _journal_db.retrieve(i); } else if (p == pos && jn.length() < _journal_db.retrieve(i).length()) // Cases 'Chem Phys' vs 'Chem Phys Lett' jn = _journal_db.retrieve(i); } if (!jn.isEmpty() && (pos < 50 || pos + jnl > stext.length() - 50)) { _current_reference["journal"] = _bpP->parse("journal", jn); return; } QString jheader, jfooter; for (int i = 0; i < _journal_db.count(); ++i) { const int p(stext.indexOf(_journal_db.fullsimplified(i), 0, Qt::CaseSensitive)); if (p > -1) { const QString j(_journal_db.retrieve(i)); const int jl(j.length()); if (jn.length() < jl) jn = j; if (p < 25 && jheader.length() < jl) jheader = j; else if (p + j.length() > stext.length() - 100 && jfooter.length() < jl) jfooter = j; } } if (!jheader.isEmpty()) jn = jheader; else if (!jfooter.isEmpty()) jn = jfooter; if (!jn.isEmpty()) _current_reference["journal"] = _bpP->parse("journal", jn); } void heuristicBibParser::guessFromMetadata(const QString& text) { if (!text.contains("[Bibliographic Metadata")) return; QRegExp bf; bf.setMinimal(true); bf.setCaseSensitivity(Qt::CaseSensitive); QString p("<%1>(.+)"); for (int i = 0; i < _bibliographic_fields.count(); ++i) { bf.setPattern(p.arg(_bibliographic_fields.at(i))); if (bf.indexIn(text) > -1) _current_reference[_bibliographic_fields.at(i)] = _bpP->parse(_bibliographic_fields.at(i), bf.cap(1)); } } void heuristicBibParser::guessVolumePagesYear(const QString& text) { // Does several volume pages year formats if (_reliable_pages && _reliable_volume && _reliable_number) return; // J. Sci., 108 (15), 3206, 2004 // J. Sci., 108 (15), 3206 2004 QRegExp rxH("(\\d+)\\s*\\((" + _hyphen_nums + ")\\)\\s*[,:]\\s*(" + _hyphen_pages + ")[,\\s]+(19|20)(\\d\\d)"); int nH(rxH.indexIn(text)); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_number] = _bpP->parse(_number, rxH.cap(2)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(3)); _current_reference[_year] = _bpP->parse(_year, rxH.cap(4) + rxH.cap(5)); return; } // J. Sci., 108 (15), 3206 (2004) rxH = QRegExp("(\\d+)\\s*\\((" + _hyphen_nums + ")\\)\\s*[,:]\\s*(" + _hyphen_pages + ")[,\\s]*\\((19|20)(\\d\\d)\\)"); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_number] = _bpP->parse(_number, rxH.cap(2)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(3)); _current_reference[_year] = _bpP->parse(_year, rxH.cap(4) + rxH.cap(5)); return; } if (_reliable_pages && _reliable_volume) return; // J. Sci. 124, 204109 2006 // J. Sci. 124, 204109, 2006 rxH = QRegExp("(\\d+)[,:]\\s*(" + _hyphen_pages + ")[,\\s]+(19|20)(\\d\\d)"); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(2)); _current_reference[_year] = _bpP->parse(_year, rxH.cap(3) + rxH.cap(4)); return; } // 120, 8425 - 8433 (2004) // J. Sci. 30, 2745 (1984) rxH = QRegExp("(\\d+)[,:]\\s*(" + _hyphen_pages + ")[,\\s]*\\((19|20)(\\d\\d)\\)"); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(2)); _current_reference[_year] = _bpP->parse(_year, rxH.cap(3) + rxH.cap(4)); return; } } void heuristicBibParser::guessVolumeYearPages(const QString& text) { // Does several volume year pages formats if (_reliable_number && _reliable_volume) return; // J. Sci. 203 (2003) 209. QRegExp rxH("(\\d+)\\s*\\(" + _current_reference.value(_year) + "\\)\\s*(" + _hyphen_pages + ')'); int nH(rxH.indexIn(text)); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(2)); return; } } void heuristicBibParser::guessYearVolumePages(const QString& text) { // Does several year volume pages formats if (_reliable_pages && _reliable_volume && _reliable_number) return; // J. Sci. 1995 January 25; 247(4):536-40. // J. Sci. 1995, 247(4):536-40. QRegExp rxH(_current_reference.value(_year) + "[\\w ]{0,15}[,:; ]\\s*(\\d+)\\s*\\((" + _hyphen_nums + ")\\)\\s*[,:;]\\s*(" + _hyphen_pages + ')'); int nH(rxH.indexIn(text)); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_number] = _bpP->parse(_number, rxH.cap(2)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(3)); _reliable_pages = true; _reliable_volume = true; return; } // J. Sci. (1999), 86, 3, pp. 635-648 rxH = QRegExp("\\(" + _current_reference.value(_year) + "\\)" + "\\s*[,:;]\\s*(\\d+)\\s*[,:;]\\s*(" + _hyphen_nums + ")\\s*[,:;]\\s*(?:pp)?\\.?\\s*(" + _hyphen_pages + ')'); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_number] = _bpP->parse(_number, rxH.cap(2)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(3)); _reliable_pages = true; _reliable_volume = true; return; } if (_reliable_volume) return; // J. Sci. 1995 January 25; 247:536-40. // J. Sci. 2005, 103, 818 // J. Sci. 2002;9:101–106.5. rxH = QRegExp(_current_reference.value(_year) + "\\s*[\\w ]{0,15}[,:;]\\s*(\\d+)\\s*[,:;]\\s*(" + _hyphen_pages + ')'); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(2)); _reliable_pages = true; _reliable_volume = true; return; } // J. Sci. 2005 103:818 rxH = QRegExp(_current_reference.value(_year) + "\\s+(\\d+)\\s*:\\s*(" + _hyphen_pages + ')'); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(2)); return; } // (2006) J. Sci. 39:3047 rxH = QRegExp("\\(" + _current_reference.value(_year) + "\\)\\D{5,30}(\\d+)\\s*[,:;]\\s*(" + _hyphen_pages + ')'); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(2)); return; } // 2006 J. Sci. 39 3047 rxH = QRegExp(_current_reference.value(_year) + "\\D{5,30}(\\d+)\\s*[,:; ]\\s*(" + _hyphen_pages + ')'); nH = rxH.indexIn(text); if (nH > -1) { _current_reference[_volume] = _bpP->parse(_volume, rxH.cap(1)); _current_reference[_pages] = _bpP->parse(_pages, rxH.cap(2)); return; } } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/monthDB.h0000644000000000000000000000013213124510216015264 xustar0030 mtime=1498583182.967255119 30 atime=1498583183.003254785 30 ctime=1498583182.967255119 cb2bib-1.9.7/src/c2b/monthDB.h0000644000175000001440000000154013124510216016656 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef MONTHDB_H #define MONTHDB_H #include #include /** Post processing of tag 'month' @author Pere Constans */ class monthDB { public: monthDB(); inline ~monthDB() {} QString retrieve(const QString& month_query); private: QRegExp _day_rx; QRegExp _month_rx; QString abbreviated(const QString& month) const; QString full(const QString& month) const; const QStringList _month_abbreviated; const QStringList _month_full; }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/searchPattern.cpp0000644000000000000000000000013213124510216017067 xustar0030 mtime=1498583182.923255528 30 atime=1498583183.003254785 30 ctime=1498583182.923255528 cb2bib-1.9.7/src/c2b/searchPattern.cpp0000644000175000001440000002016613124510216020466 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "searchPattern.h" #include "triads.h" #include /** Top level driver for calling cb2Bib search types */ searchPattern::searchPattern(const QString& pattern, const QString& patternType) : _matcher(pattern.simplified(), typemap().value(patternType), Qt::CaseInsensitive) { _modifier.NOT = false; _modifier.string = pattern.simplified(); _rank = 0; } searchPattern::searchPattern(const bool NOT, const bool caseSensitive, const QString& patternType, const QString& scope, const QChar& yearScope, const QString& pattern) : _matcher(pattern.simplified(), typemap().value(patternType), qtcase(caseSensitive)) { _modifier.NOT = NOT; _modifier.string = pattern.simplified(); _modifier.scope = scope; _modifier.yearScope = yearScope; if (_modifier.NOT) _formatted_string += "NOT."; _formatted_string += QString(" [%1][%2|case=%3]").arg(_modifier.string).arg(patternType).arg(caseSensitive); if (_modifier.scope == "year") _formatted_string += QString(" IN [%1(%2)]").arg(_modifier.scope).arg(_modifier.yearScope); else _formatted_string += QString(" IN [%1]").arg(_modifier.scope); // Set an approximate ranking to speed up composite searches _rank = 0; if (_modifier.scope == "file") _rank += 200; else if (_modifier.scope == "all") _rank += 100; else if (_modifier.scope == "year" || _modifier.scope == "volume" || _modifier.scope == "pages") _rank += 50; else _rank += 1; if (!caseSensitive) _rank *= 2; if (_matcher.type == FixedStringAllWords || _matcher.type == FixedStringAnyWord) _rank *= 5; else if (_matcher.type == ApproximateString) _rank *= 10; else if (_matcher.type == RegularExpression) _rank *= 20; } const QStringList searchPattern::types() { return typemap().keys(); } const QString searchPattern::type(const Type t) { return typemap().key(t); } const QMap searchPattern::typemap() { QMap tm; tm.insert(QObject::tr("Approximate string"), ApproximateString); tm.insert(QObject::tr("Fixed string: All Words"), FixedStringAllWords); tm.insert(QObject::tr("Fixed string: Any Word"), FixedStringAnyWord); tm.insert(QObject::tr("Fixed string: Context"), FixedStringContext); tm.insert(QObject::tr("Fixed string"), FixedString); tm.insert(QObject::tr("Regular expression"), RegularExpression); tm.insert(QObject::tr("Wildcard"), Wildcard); return tm; } searchPattern::matcher::matcher(const QString& pattern, const Type t, const Qt::CaseSensitivity cs) : type(t), length(-1) { switch (t) { default: c2bUtils::warn(QObject::tr("Internal Error: Invalid search pattern type. Set to 'Approximate string'")); case ApproximateString: { appexp.setPattern(pattern, cs); if (appexp.isMultipattern()) { signature = triads::textSignature(pattern); subsignatures = triads::textSignature(appexp.substrings()); } else // Skip signatures for regular expression case { regexp = appexp.regexp(); type = RegularExpression; } } break; case FixedStringAnyWord: { wordexp.setPattern(pattern, wordPattern::AnyWord, cs); signature = triads::textSignature(pattern); subsignatures = triads::textSignature(wordexp.substrings()); } break; case FixedStringAllWords: { wordexp.setPattern(pattern, wordPattern::AllWords, cs); signature = triads::textSignature(pattern); subsignatures.fill(signature, wordexp.subpatternCount()); } break; case FixedStringContext: { cwordexp.setPattern(pattern, cs); signature = triads::textSignature(pattern); } break; case FixedString: { strexp.setPattern(pattern); strexp.setCaseSensitivity(cs); signature = triads::textSignature(pattern); } break; case RegularExpression: { #if QT_VERSION >= 0x050400 const QRegularExpression::PatternOptions po( QRegularExpression::DontCaptureOption | QRegularExpression::UseUnicodePropertiesOption | QRegularExpression::OptimizeOnFirstUsageOption); #else const QRegularExpression::PatternOptions po( QRegularExpression::DontCaptureOption | QRegularExpression::UseUnicodePropertiesOption); #endif regexp.setPattern(pattern); regexp.setPatternOptions(cs == Qt::CaseSensitive ? po : po | QRegularExpression::CaseInsensitiveOption); } break; case Wildcard: { #if QT_VERSION >= 0x050400 const QRegularExpression::PatternOptions po( QRegularExpression::InvertedGreedinessOption | QRegularExpression::DontCaptureOption | QRegularExpression::UseUnicodePropertiesOption | QRegularExpression::OptimizeOnFirstUsageOption); #else const QRegularExpression::PatternOptions po( QRegularExpression::InvertedGreedinessOption | QRegularExpression::DontCaptureOption | QRegularExpression::UseUnicodePropertiesOption); #endif regexp.setPattern(_wildcard_escaped(pattern)); regexp.setPatternOptions(cs == Qt::CaseSensitive ? po : po | QRegularExpression::CaseInsensitiveOption); signature = triads::textSignature(pattern); } break; } } bool searchPattern::matcher::match(const QString& contents) const { length = -1; switch (type) { case ApproximateString: return appexp.matches(contents); case FixedStringAnyWord: case FixedStringAllWords: return wordexp.matches(contents); case FixedStringContext: return cwordexp.indexIn(contents) != -1; case FixedString: return strexp.indexIn(contents) != -1; default: return regexp.match(contents).hasMatch(); } } bool searchPattern::matcher::match(const documentContents& contents) const { length = -1; switch (type) { case ApproximateString: return _match_any(appexp.subpatternCount(), appexp.submatchers(), contents); case FixedStringAnyWord: return _match_any(wordexp.subpatternCount(), wordexp.submatchers(), contents); case FixedStringAllWords: return _match_all(wordexp.subpatternCount(), wordexp.submatchers(), contents); case FixedStringContext: return _match(cwordexp, signature, contents); case FixedString: return _match(strexp, signature, contents); default: return _match(regexp, signature, contents); } } int searchPattern::matcher::index(const QString& contents, const int from) const { int i; switch (type) { case ApproximateString: i = appexp.indexIn(contents, from); length = appexp.matchedLength(); return i; case FixedStringAnyWord: case FixedStringAllWords: i = wordexp.indexIn(contents, from); length = wordexp.matchedLength(); return i; case FixedStringContext: i = cwordexp.indexIn(contents, from); length = cwordexp.matchedLength(); return i; case FixedString: i = strexp.indexIn(contents, from); length = strexp.pattern().length(); return i; default: regexp_match = regexp.match(contents, from); i = regexp_match.capturedStart(); length = regexp_match.capturedLength(); return i; } } QString searchPattern::matcher::_wildcard_escaped(const QString& pattern) { QString scaped; for (int i = 0; i < pattern.length(); ++i) if (pattern.at(i) == '*') scaped += ".*"; else if (pattern.at(i) == '?') scaped += '.'; else scaped += QRegularExpression::escape(pattern.at(i)); return scaped; } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/bibParser.h0000644000000000000000000000013213124510216015642 xustar0030 mtime=1498583182.939255379 30 atime=1498583183.003254785 30 ctime=1498583182.943255341 cb2bib-1.9.7/src/c2b/bibParser.h0000644000175000001440000000715713124510216017246 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef BIBPARSER_H #define BIBPARSER_H #include "cb2bib_parameters.h" #include "coreBibParser.h" #include "journalDB.h" #include "monthDB.h" class bibPreparser; class heuristicBibParser; class idMaker; class preprocess; /** Class for bibliographic reference parsing and manipulation @author Pere Constans */ class bibParser : public coreBibParser { Q_OBJECT public: explicit bibParser(QObject* parento = 0); virtual ~bibParser(); QString documentFilename(const QString& base_fn, const QString& bibtex_fn); QString excerpt(const QString& text, const QStringList& hints) const; QString parse(const QString& field, const QString& value, const QString& init_value = QString()); QString setJournalsToAbbreviated(const QString& text); QString setJournalsToFull(const QString& text); QString setTags(const QString& text) const; bibReference& parse(bibReference& reference); virtual void setCiteID(); virtual void setField(const QString& name, const QString& value); virtual void setReferenceType(const QString& type); void guessFields(const QString& text); void parse(const QString& text, QString* out_text, QString* out_tagtext); void preparse(const QString& text, QString* out_text); inline QString abbreviatedJournal(const QString& name) const { return _journal_dbP->retrieve(name); } inline const QStringList& abbreviatedSimplifiedJournalList() const { return _journal_dbP->abbreviatedSimplifiedList(); } inline QString fullJournal(const QString& name) const { return _journal_dbP->retrieveFull(name); } inline bool isAutoRecognized() const { return _auto_recognized; } inline QString autoRecognizedString() const { return _auto_recognized_string; } inline QString toBibTeX(bool sig = true) const { if (sig) return "% cb2Bib " + C2B_VERSION + '\n' + referenceToFomattedBibTeX(_current_reference) + '\n'; else return referenceToFomattedBibTeX(_current_reference); } inline QString toBibTeX(const bibReference& ref, bool sig = true) const { if (sig) return "% cb2Bib " + C2B_VERSION + '\n' + referenceToFomattedBibTeX(ref) + '\n'; else return referenceToFomattedBibTeX(ref); } inline const bibReference& currentReference() const { return _current_reference; } inline void clearCurrentReference() { _current_reference.clearReference(); _auto_recognized = false; _auto_recognized_string.clear(); } inline int fieldCount() const { return coreBibParser::fieldCount(_current_reference); } signals: void statusMessage(const QString& ms); protected: bibPreparser* _preparserP; bibReference _current_reference; idMaker* _cite_idmP; idMaker* _file_idmP; inline virtual void currentReferenceUpdated() {} virtual void checkRegExpFile(const QString& fn); private: QString _auto_recognized_string; QString removeTags(const QString& text) const; bool _auto_recognized; heuristicBibParser* _heuristic_parserP; journalDB* _journal_dbP; monthDB* _month_dbP; preprocess* _preprocessP; friend class heuristicBibParser; }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/bibSearcher.h0000644000000000000000000000013213124510216016142 xustar0030 mtime=1498583182.947255305 30 atime=1498583183.003254785 30 ctime=1498583182.947255305 cb2bib-1.9.7/src/c2b/bibSearcher.h0000644000175000001440000000610413124510216017535 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef BIBSEARCHER_H #define BIBSEARCHER_H #include "documentCache.h" #include "searchPattern.h" #include #include #include class bibParser; class bibReference; class bibSearcher : public QObject { Q_OBJECT public: bibSearcher(bibParser* bp, QObject* parento = 0); bibSearcher(bibParser* bp, const QString& bib_dir, QObject* parento = 0); inline ~bibSearcher() {} static QString searchDocumentKeyword(const QString& bibtexfn, const QString& documentfn, const QString& keyword); const QString highlight(const QString& abstract) const; void addPattern(bool Not, bool caseSensitive, const QString& patternType, const QString& scope, const QChar& yearScope, const QString& pattern); void clear(); void exec(); inline void setBoolean(bool AND) { _boolean_and = AND; } inline void setSearchScope(const QString& file, const QString& dir, bool all, bool documents) { _bibtex_file = file; _bibtex_dir = dir; _all_bibtex_files = all; _include_documents = documents; } inline void setSimplifySource(bool simplify) { _simplify_source = simplify; } inline int errorsCount() const { return _error_counter; } inline int hitsCount() const { return _hits_map.count(); } inline QString hitsString() const { return _hits_string; } inline QString hitValue(const QString& key) const { return _hits_map.value(key); } inline int patternsCount() const { return _patterns.count(); } inline int referencesCount() const { return _reference_counter; } inline QString logString() const { return _log_string; } public slots: void abort(); private: bibSearcher(); QList _patterns; QMap _hits_map; QString _bibtex_dir; QString _bibtex_file; QString _do_search_similar_citeid; QString _hits_string; QString _log_string; QStringList _scopes; bibParser* _bpP; bool _aborted; bool _all_bibtex_files; bool _boolean_and; bool _include_documents; bool _simplify_source; const QString excerpts(const QString& contents) const; const QString location(const QString& fn, const bibReference& ref) const; const bool _do_search_similar; documentCache _documents; int _bibtex_counter; int _document_counter; int _error_counter; int _reference_counter; void search(const QString& bib_file); void searchReference(const QString& bib_file, const bibReference& ref); void searchSimilarReferences(const QString& bib_file, const bibReference& ref); }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/c2blib.qrc0000644000000000000000000000007413124510115015427 xustar0030 atime=1498583183.003254785 30 ctime=1498583182.635258201 cb2bib-1.9.7/src/c2b/c2blib.qrc0000644000175000001440000000074213124510115017017 0ustar00constansusers00000000000000 htm/reference_item.html htm/reference_list.html htm/tex2html.css htm/tex2html.html htm/tex2html_index.html txt/prefixes.txt txt/suffixes.txt txt/triads.txt txt/word_prefix_lexicon.txt cb2bib-1.9.7/src/c2b/PaxHeaders.3194/settings.h0000644000000000000000000000013213124510216015571 xustar0030 mtime=1498583182.979255008 30 atime=1498583183.003254785 30 ctime=1498583182.979255008 cb2bib-1.9.7/src/c2b/settings.h0000644000175000001440000001033113124510216017161 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef SETTINGS_H #define SETTINGS_H #include "cb2bib_parameters.h" #include #include #include class QCoreApplication; class settings : public QSettings { Q_OBJECT public: explicit settings(QObject* parento = 0); virtual ~settings(); // Command line data. (Set public for easiest access. Only settings or derived classes should modify it) QString cl_annote_filename; QString cl_extract_output_filename; QString cl_import_filename; QString cl_index_dirname; QStringList cl_bibedit_filenames; QStringList cl_citer_filenames; QStringList cl_extract_input_filenames; bool cl_bibedit; bool cl_cb2bib_import_mode; bool cl_cb2bib_mode; bool cl_cb2bib_tests; bool cl_citer; bool cl_configure; bool cl_console_mode; bool cl_doc2bib; bool cl_html_annote; bool cl_import; bool cl_index; bool cl_sloppy; bool cl_txt2bib; bool cl_user_configured; bool cl_view_annote; // Get/Set filenames according to settings // PdfDirectory is a particular case. If relative, it is relative to the BibTeX file inline QString fileName(const QString& key) const { if (_is_usb_configured_mode) { const QString v(value(key).toString()); if (key == "cb2Bib/PdfDirectory") if (value("cb2Bib/RelativePdfDirectory").toBool()) return QDir::toNativeSeparators(QDir::cleanPath(v)); if (key.endsWith("Bin")) // Pathless binary to be found on PATH if (!(v.contains('/') || v.contains('\\'))) return v; return QDir::toNativeSeparators(QDir::cleanPath(_c2bAppDir.absoluteFilePath(v))); } else return QDir::toNativeSeparators(QDir::cleanPath(value(key).toString())); } inline void setFilename(const QString& key, const QString& fn) { if (_is_usb_configured_mode) { if (key == "cb2Bib/PdfDirectory") { if (value("cb2Bib/RelativePdfDirectory").toBool()) { setValue(key, fn); return; } } setValue(key, _c2bAppDir.relativeFilePath(fn)); } else setValue(key, fn); } inline bool loaded() const { return _is_loaded; } inline bool isUsbConfiguredMode() const { return _is_usb_configured_mode; } inline QStringList confCommandFlags() const { return _conf_command_flags; } inline QString tempPath() const { return _tmp_dir_path; } inline QString applicationPid() const { return _application_pid; } void setDefaultValue(const QString& key, const QVariant& defaulValue); static bool isConsoleMode(int& argc, char** argv); static bool isSingleApplicationMode(int& argc, char** argv); static settings* instance() { Q_ASSERT_X(_c2b_global_settings, "settings", "settings was not instantiated"); return _c2b_global_settings; } protected: settings(const QString& organization, const QString& application, QObject* parento = 0); settings(const QString& fn, QObject* parento = 0); // init() has a virtual method, keep it out of the constructor void init(bool command_line = true); static bool isConfiguredMode(); static const QString configuredFilename(); virtual QString decodeFilename(const QString& fn) const; private: QCoreApplication* _c2bApp; QDir _c2bAppDir; QString _application_pid; QString _tmp_dir_path; QStringList _conf_command_flags; bool _is_loaded; bool _is_usb_configured_mode; static settings* _c2b_global_settings; void _init(); void checkCommand(bool* action, int* actions); void printUsage(); void readCommandLine(); void setDefaults(); }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/texToHtml.cpp0000644000000000000000000000013013124510216016212 xustar0029 mtime=1498583182.92725549 30 atime=1498583183.003254785 29 ctime=1498583182.92725549 cb2bib-1.9.7/src/c2b/texToHtml.cpp0000644000175000001440000003266613124510216017623 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "texToHtml.h" #include "cb2bib_parameters.h" #include "settings.h" #include texToHtml::texToHtml() : texParser() { _macro_arguments_rx = QRegExp("\\}\\s*\\[\\s*(\\d+)\\s*\\]\\s*\\{"); _named_extern_url_rx = QRegExp("_((?:file|http|https|ftp)://(?:[^\\s\\n\\r\\[]+))\\[([^\\]]*)\\]"); _named_url_rx = QRegExp("\\b((?:file|http|https|ftp)://(?:[^\\s\\n\\r\\[]+))\\[([^\\]]*)\\]"); _extern_url_rx = QRegExp("_((?:file|http|https|ftp)(?!.+\">)://(?:[^\\s\\n\\r\\[]+))(\\.[\\s\\n\\r]){0,1}"); _url_rx = QRegExp("\\b((?:file|http|https|ftp)(?!.+\">)://(?:[^\\s\\n\\r\\[]+))(\\.[\\s\\n\\r]){0,1}"); _close_subsection = false;; _close_subsubsection = false;; _make_index = false;; _use_relative_links = false;; _index_anchors = 0;; _settingsP = settings::instance(); } void texToHtml::toHtml(const QString& tex, const QString& fn) { _html_filename = fn; c2bUtils::stringToFile(toHtml(tex), fn); } QString texToHtml::toHtml(const QString& tex) { _bibtex_directory.clear(); _cites.clear(); _close_subsection = false; _close_subsubsection = false; _html.clear(); _index = "
    \n"; _index_anchors = 0; _make_index = false; _references.clear(); _tex_macro_names_rx.clear(); _tex_macros.clear(); _title.clear(); _use_relative_links = _settingsP->value("c2bAnnote/UseRelativeLinks").toBool(); if (_html_filename.isEmpty()) _use_relative_links = false; else _current_dir = QDir(QFileInfo(_html_filename).absolutePath()); parse(tex); if (_close_subsubsection) _index += "
\n"; if (_close_subsection) _index += "\n"; _index += ""; QString tex2html(c2bUtils::fileToString(":/htm/htm/tex2html.html")); if (_settingsP->value("c2bAnnote/IncludeCSS").toBool()) { QString css(c2bUtils::fileToString(_settingsP->fileName("c2bAnnote/AnnoteCssFile")).trimmed()); if (css.isEmpty()) css = c2bUtils::fileToString(":/htm/htm/tex2html.css"); tex2html.replace("GET_CSS", "\n"); } else { QString cssfn(_settingsP->fileName("c2bAnnote/AnnoteCssFile")); if (cssfn.isEmpty()) tex2html.remove("GET_CSS"); else { if (_use_relative_links) cssfn = _current_dir.relativeFilePath(cssfn); tex2html.replace("GET_CSS", "\n \n"); } } tex2html.replace("GET_TITLE", _title); retrieveReferences(); QString reference_list_html; referencesToHtml(&reference_list_html); tex2html.replace("GET_REFERENCES", reference_list_html); citesToHtml(&_html); QString mathjax_head(c2bUtils::fileToString(_settingsP->fileName("c2bAnnote/MathJaxHeaderFile")).trimmed()); if (mathjax_head.isEmpty()) tex2html.remove("GET_MATHJAX_HEAD"); else tex2html.replace("GET_MATHJAX_HEAD", mathjax_head); if (_make_index && _index_anchors > 1) { _index = c2bUtils::fileToString(":/htm/htm/tex2html_index.html").arg(_index); tex2html.replace("GET_INDEX", _index); } else tex2html.remove("GET_INDEX"); tex2html.replace("GET_HTML", _html); tex2html.replace("GET_CB2BIB_VERSION_NUMBER", C2B_VERSION); _html_filename.clear(); return tex2html; } void texToHtml::parseElement(const QString& p, const QString& e, const QString& v) { if (e == "section") { const QString sv(toHtmlString(v)); ++_index_anchors; _html += QString("\n

%2

\n\n").arg(_index_anchors).arg(sv); if (_close_subsubsection) _index += "\n"; if (_close_subsection) _index += "\n"; _index += QString("
  • %2
  • \n").arg(_index_anchors).arg(sv); _close_subsubsection = false; _close_subsection = false; } else if (e == "subsection") { const QString sv(toHtmlString(v)); ++_index_anchors; _html += QString("\n

    %2

    \n\n").arg(_index_anchors).arg(sv); if (_close_subsubsection) _index += "\n"; if (!_close_subsection) _index += "
    • \n"; _index += QString("
    • %2
    • \n").arg(_index_anchors).arg(sv); _close_subsubsection = false; _close_subsection = true; } else if (e == "subsubsection") { const QString sv(toHtmlString(v)); ++_index_anchors; _html += QString("\n

      %2

      \n\n").arg(_index_anchors).arg(sv); if (!_close_subsubsection) _index += "
      • \n"; _index += QString("
      • %2
      • \n").arg(_index_anchors).arg(sv); _close_subsubsection = true; } else if (e == "title") _title = toHtmlString(v); else if (e == "itemize") { const QStringList items(v.trimmed().split("\\item ", QString::SkipEmptyParts)); for (int i = 0; i < items.count(); ++i) parseTextParagraph("- " + items.at(i).simplified()); } else if (e == "abstract") _html += QString("\n
        \n%1\n


        \n\n").arg(toHtmlString(v.trimmed())); else if (e == "verbatim") _html += QString("\n
        %1
        \n\n").arg(v); // TODO. Possibly extractMacro is not needed since MathJax // else if (e == "newcommand") // extractMacro(v); else _html += QString("\n
        \n%1\n
        \n\n").arg(p); } void texToHtml::parseComment(const QString& p) { if (p.startsWith("%\\c2b_bibtex_directory{")) c2bUtils::inBraces(p.indexOf('{') + 1, p, &_bibtex_directory); else if (p == "%\\c2b_makeindex") _make_index = true; } void texToHtml::parseTextParagraph(const QString& p) { extractCites(p); QString pstr(toHtmlString(p)); urlToHtml(&pstr); if (p.startsWith("- ")) _html += QString("\n
        • %1
        \n\n").arg(pstr.mid(2)); else _html += QString("\n

        %1

        \n\n").arg(pstr); } void texToHtml::extractMacro(const QString& v) { QString name; if (!c2bUtils::inBraces(1, v, &name)) return; // Substitution '\macro' -> '$\macro[args]$'. jsMath will not process macros outside equation environments. _tex_macro_names_rx.append(QRegExp("(\\" + name + "\\S*)")); // To minimize clashes, the replacement must be performed from longest to shortest names. // Sort now, even if this needs multiple sortings. This way, substitutions can be done while parsing. qSort(_tex_macro_names_rx.begin(), _tex_macro_names_rx.end(), c2bUtils::patternLengthMoreThan); QString definition; for (int i = name.length() + 2; i < v.length(); ++i) if (v.at(i) == '{') { if (c2bUtils::inBraces(i + 1, v, &definition)) break; else return; } if (definition.isEmpty()) return; name.remove("\\"); definition.remove("\\ensuremath"); definition.replace("\\", "\\\\"); if (_macro_arguments_rx.indexIn(v) > -1) _tex_macros += QString("\n ") .arg(name).arg(definition).arg(_macro_arguments_rx.cap(1)); else _tex_macros += QString("\n ") .arg(name).arg(definition); } void texToHtml::extractCites(const QString& p) { int pos(p.indexOf("\\cite{", 0)); while (pos >= 0) { QString cites; if (c2bUtils::inBraces(pos + 6, p, &cites)) { const QStringList cite(cites.split(',', QString::SkipEmptyParts)); for (int i = 0; i < cite.count(); ++i) { const QString c(cite.at(i).trimmed()); if (!_cites.contains(c)) _cites.insert(c, -(1 + _cites.count())); } } pos = p.indexOf("\\cite{", pos + 6); } } void texToHtml::citesToHtml(QString* html) { QString key("\\b%1\\b"); QHash::const_iterator i = _references.constBegin(); while (i != _references.constEnd()) { const QString k(i.key()); html->replace(QRegExp(key.arg(k)), QString("%2").arg(k).arg(_cites.value(k))); ++i; } html->replace(QRegExp("\\\\cite\\{([^\\{]+)\\}"), "[\\1]"); } /** Retrieve references from BibTeX files directory */ void texToHtml::retrieveReferences() { if (_bibtex_directory.isEmpty()) _bibtex_directory = QFileInfo(_settingsP->fileName("cb2Bib/BibTeXFile")).path(); const QStringList flist(c2bUtils::filesInDir(_bibtex_directory, QStringList() << "*.bib")); const QStringList keys(_cites.keys()); QStringList fields; fields.append("author"); fields.append("booktitle"); fields.append("doi"); fields.append("editor"); fields.append("file"); fields.append("journal"); fields.append("pages"); fields.append("title"); fields.append("url"); fields.append("volume"); fields.append("year"); bibReference ref; _cbp.initReferenceParsing(_bibtex_directory + '/', fields, &ref); bool done(false); for (int i = 0; i < flist.count(); ++i) { if (done) return; const QString bib_contents(c2bUtils::fileToString(flist.at(i))); done = true; for (int j = 0; j < keys.count(); ++j) { if (_cites.value(keys.at(j)) > 0) continue; done = false; const QString key(keys.at(j)); if (_cbp.referenceAtKey(key, bib_contents, &ref)) { _references.insert(key, ref); _cites[key] = -_cites[key]; } } } } void texToHtml::referencesToHtml(QString* reference_list_html) { reference_list_html->clear(); if (_references.count() == 0) return; QStringList keys(_references.keys()); QMap ordering; for (int i = 0; i < keys.count(); ++i) ordering.insert(_cites.value(keys.at(i)), keys.at(i)); keys = ordering.values(); const QString reference_item_html(c2bUtils::fileToString(":/htm/htm/reference_item.html")); const QRegExp nonletters("[^\\w\\s-]"); QString references; for (int i = 0; i < keys.count(); ++i) { const bibReference& ref = _references.value(keys.at(i)); QString author(ref.anyAuthor()); if (!author.isEmpty()) { author = _cbp.authorFromBibTeX(author); author.remove(nonletters); author.replace(" and ", ", "); c2bUtils::simplifyString(author); author += '.'; } QString title(ref.anyTitle()); c2bUtils::cleanTitle(title, true); // Do not percent encode file (some browsers dont like encoded local files) and url // (it might already be, if needed, decode prior to encode) const QString doi(ref.value("doi")); const QString file(ref.value("file")); const QString url(ref.value("url")); QString link; if (!file.isEmpty()) { if (_use_relative_links) link = QDir::cleanPath(_current_dir.relativeFilePath(file)); else link = QDir::cleanPath(file); } else if (!url.isEmpty()) link = url; else if (!doi.isEmpty()) { if (doi.startsWith("http://")) link = doi; else link = "http://dx.doi.org/" + QUrl::toPercentEncoding(doi); } const QString journal(ref.anyJournal()); const QString volume(ref.value("volume")); QString pages(ref.value("pages")); if (!pages.isEmpty()) { if (!volume.isEmpty()) pages = ", " + pages.remove(' '); else pages = ' ' + pages.remove(' '); } QString year(ref.value("year")); if (!year.isEmpty()) year = '(' + year + ")."; QString item(reference_item_html); item.replace("GET_REFERENCE_ANCHOR_ID", ref.citeidName); item.replace("GET_REFERENCE_ANCHOR_NAME", ref.citeidName); item.replace("GET_REFERENCE_AUTHOR", author); if (link.isEmpty()) item.remove("href=\"GET_REFERENCE_LINK\""); else item.replace("GET_REFERENCE_LINK", link); item.replace("GET_REFERENCE_PAGES", pages); item.replace("GET_REFERENCE_SOURCE", journal); item.replace("GET_REFERENCE_TITLE", c2bUtils::toHtmlString(title)); item.replace("GET_REFERENCE_VOLUME", volume); item.replace("GET_REFERENCE_YEAR", year); references += item; // Update _cites values according to this list _cites[keys.at(i)] = i + 1; } *reference_list_html = c2bUtils::fileToString(":/htm/htm/reference_list.html"); reference_list_html->replace("GET_REFERENCES", references); } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/compositePattern.h0000644000000000000000000000013113124510216017270 xustar0030 mtime=1498583182.951255268 30 atime=1498583183.003254785 29 ctime=1498583182.95525523 cb2bib-1.9.7/src/c2b/compositePattern.h0000644000175000001440000000371513124510216020671 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef COMPOSITEPATTERN_H #define COMPOSITEPATTERN_H #include #include #include class compositePattern { public: compositePattern(); compositePattern(const QString& pattern, const Qt::CaseSensitivity cs); inline virtual ~compositePattern() {} inline const QString strings() const { return _string; } inline const QStringList substrings() const { return _substrings; } inline const QRegularExpression& regexp() const { return _regexp; } inline const QVector& subregexps() const { return _subregexps; } inline Qt::CaseSensitivity caseSensitivity() const { return _case_sensitivity; } inline int subpatternCount() const { return _subpattern_count; } inline int matchedLength() const { return _matched_length; } inline bool isMultipattern() const { return _is_multipattern; } virtual bool matches(const QString& str) const = 0; virtual int indexIn(const QString& str, const int from) const = 0; protected: static QString escape(const QString& str, const Qt::CaseSensitivity cs); void set_sort_index(); QList _ranks; QRegularExpression _regexp; QString _string; QStringList _substrings; QVector _subregexps; QVector _index; Qt::CaseSensitivity _case_sensitivity; bool _is_multipattern; int _subpattern_count; mutable QVector _p0; mutable QVector _pn; mutable int _matched_length; }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/bibReference.h0000644000000000000000000000013213124510216016304 xustar0030 mtime=1498583182.943255341 30 atime=1498583183.003254785 30 ctime=1498583182.943255341 cb2bib-1.9.7/src/c2b/bibReference.h0000644000175000001440000000447213124510216017705 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef BIBREFERENCE_H #define BIBREFERENCE_H #include "cb2bib_utilities.h" #include #include #include typedef QHash::const_iterator bibReferenceIterator; /** Basic class for a bibliographic reference @author Pere Constans */ class bibReference : public QHash { public: inline bibReference() : positionValue(0), pos(0) {} void clearFields() { pos = 0; bib_fieldList.clear(); _bib_fields_nb_re.clear(); _bib_fields_re.clear(); } void clearReference() { positionValue = 0; citeidName.clear(); typeName.clear(); rawReference.clear(); unicodeReference.clear(); QHash::clear(); } /** Fallback for authors */ inline const QString anyAuthor() const { const QString v(value("author")); if (v.isEmpty()) return value("editor"); return v; } /** Fallback for titles */ inline const QString anyTitle() const { const QString v(value("title")); if (v.isEmpty()) { const QString v1(value("booktitle")); if (v1.isEmpty()) return QFileInfo(value("file")).fileName(); return v1; } return v; } /** Fallback for journal */ inline const QString anyJournal() const { QString v(value("journal")); if (v.isEmpty()) if (typeName == "inproceedings") { v = value("booktitle"); c2bUtils::cleanTitle(v, true); } return v; } QString citeidName; QString rawReference; QString typeName; QString unicodeReference; int positionValue; private: QList _bib_fields_nb_re; QList _bib_fields_re; QStringList bib_fieldList; int pos; friend class coreBibParser; }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/collectionAnalyzer.h0000644000000000000000000000013213124510216017572 xustar0030 mtime=1498583182.951255268 30 atime=1498583183.003254785 30 ctime=1498583182.951255268 cb2bib-1.9.7/src/c2b/collectionAnalyzer.h0000644000175000001440000000511213124510216021163 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef COLLECTIONANALYZER_H #define COLLECTIONANALYZER_H #include #include class settings; class collectionAnalyzer { public: collectionAnalyzer(); inline ~collectionAnalyzer() {} void reload(); void setDocumentKeywords(const QString& documentfn); void setKeywordDocuments(const QString& keyword); void setSimilarDocuments(const QString& documentfn); void skipSimilarDocument(const int i); inline int similarCount() const { return _nsimilar; } inline const QString& similar(const int i) const { return _documents[_similar[i]]; } inline const QVarLengthArray& similarity() const { return _similarity; } inline double similarity(const int i) const { return _similarity[i]; } inline int sentenceCount() const { return _sentences.size(); } inline const QString& sentence(const int i) const { return _sentences[i]; } inline int keywordCount() const { return _document_keyword_ids.size(); } inline int keywordid(const int i) const { return _document_keyword_ids.at(i); } inline int documentCount() const { return _sdocuments.size(); } inline const QString& document(const int i) const { return _documents[_sdocuments[i]]; } private: int _document_id(const QString& documentfn) const; int _sentence_id(const QString& keyword) const; void grepDocuments(const QString& documentfn, QVector* dsentences) const; void grepSentences(const QString& keyword, QVarLengthArray* sdocuments) const; QList _document_keyword_ids; QString _document_keyword; QString _documentsif_fn; QString _documentslf_fn; QString _keyword_document_fn; QString _sentencesif_fn; QString _sentenceslf_fn; QString _similar_document_fn; QVarLengthArray _documents; QVarLengthArray _sentences; QVarLengthArray _similarity; QVarLengthArray _sdocuments; QVarLengthArray _similar; QVarLengthArray _document_norms; int _ndocuments; int _nsentences; int _nsimilar; settings* _settingsP; }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/approximatePattern.h0000644000000000000000000000013213124510216017620 xustar0030 mtime=1498583182.935255416 30 atime=1498583183.003254785 30 ctime=1498583182.939255379 cb2bib-1.9.7/src/c2b/approximatePattern.h0000644000175000001440000000551413124510216021217 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * * Class implementation of the approximate search algorithm * P. Constans. Approximate textual retrieval. arXiv:0705.0751v1, 2007. ***************************************************************************/ #ifndef APPROXIMATEPATTERN_H #define APPROXIMATEPATTERN_H #include "compositePattern.h" #include "substringMatcher.h" #define C2B_DEBUG_APPROXIMATEPATTERN 0 class approximatePattern : public compositePattern { public: approximatePattern(); approximatePattern(const QString& pattern, const Qt::CaseSensitivity cs); inline ~approximatePattern() {} void setPattern(const QString& pattern, const Qt::CaseSensitivity cs = Qt::CaseSensitive); inline bool matches(const QString& str) const { _matched_length = -1; if (str.length() == 0) return false; if (_is_multipattern) { for (int i = 0; i < _subpattern_count; ++i) if (_submatchers.at(i).indexIn(str) != -1) return true; return false; } else return _regexp.match(str).hasMatch(); } inline int indexIn(const QString& str, const int from = 0) const { _matched_length = -1; if (str.length() == 0) return -1; int index; if (_is_multipattern) { for (int i = 0; i < _subpattern_count; ++i) { _p0[i] = _submatchers.at(i).indexIn(str, from); _pn[i] = _p0.at(i) + _submatchers.at(i).matchedLength(); } mergeIndices(&index, str); } else { _regexp_match = _regexp.match(str, from); _matched_length = _regexp_match.capturedLength(); index = _regexp_match.capturedStart(); } return index; } inline const QVector& submatchers() const { return _submatchers; } private: const QStringList splitWord(const QString& word) const; int stretch(int piece_i, int piece_j) const; static QString wordPattern(const QString& word, Qt::CaseSensitivity cs); static int wordCount(const QString& str); static void splitPattern(const QString& p, QStringList* w, QList* ws, QList* we); void mergeIndices(int* index_in, const QString& str) const; void splitPattern(); QList _piece_ends; QList _piece_starts; QStringList _prefixes; QStringList _string_pieces; QStringList _suffixes; QVector _submatchers; mutable QRegularExpressionMatch _regexp_match; }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/metadataParser.cpp0000644000000000000000000000013213124510216017221 xustar0030 mtime=1498583182.911255639 30 atime=1498583183.003254785 30 ctime=1498583182.911255639 cb2bib-1.9.7/src/c2b/metadataParser.cpp0000644000175000001440000004727713124510216020634 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "metadataParser.h" #include "coreBibParser.h" #include "settings.h" #include #include #include /** \page metadata Reading and writing bibliographic metadata \section metadata_read Reading metadata Metadata in scientific documents is, unfortunately, rarely appreciated and not widely used. When it comes to bibliographic metadata, the situation is even quite deceiving: there is no accepted format specification, and the reliability of publishers' metadata, if any at all, is questionable in many cases. The cb2Bib reads all XMP (a specific XML standard devised for metadata storage) packets found in the document. It then parses the XML strings looking for nodes and attributes with key names meaningful to bibliographic references. If a given bibliographic field is found in multiple packets, the cb2Bib will take the last one, which most often, and according to the PDF specs, is the most updated one. The fields file, which would be the document itself, and pages, which is usually the actual number of pages, are skipped. The metadata is then summarized in the cb2Bib clipboard panel as, for instance \code [Bibliographic Metadata arXiv:0705.0751v1 [cs.IR] 5 May 2007 /Bibliographic Metadata] \endcode This data, whenever the user considers it to be correct, can be easily imported by the build-in 'Heuristic Guess' capability. On the other hand, if keys are found with the prefix bibtex, the cb2Bib will assume the document does contain bibliographic metadata, and it will only consider the keys having this prefix. Assuming therefore that metadata is bibliographic, the cb2Bib will automatically import the reference. This way, if using PDFImport, BibTeX-aware documents will be processed as successfully recognized, without requiring any user supplied regular expression. See also \ref relnotes100, \ref c2bconf_clipboard, and \ref c2bpdfimport.

         

        \section metadata_write Writing metadata Once an extracted reference is saved and there is a document attached to it, the cb2Bib will optionally insert the bibliographic metadata into the document itself. The cb2Bib writes an XMP packet as, for instance, \code P. Constans arXiv 0705.0751 Approximate textual retrieval article 2007 \endcode which is similar to \htmlonly JabRef, \endhtmlonly but differs on that the cb2Bib strictly sticks to BibTeX and avoids (perhaps unnecessary) syntax specialization in author strings. The BibTeX fields file and id are skip from writing. The former for the reason mentioned above, and the latter because it is easily generated by specialized BibTeX software according to each user preferences. LaTeX escaped characters for non Ascii letters are converted to UTF-8, as XMP already specifies this codec. The actual writing of the packet into the document is performed by ExifTool, an excellent Perl program written by Phil Harvey. See \htmlonly http://www.sno.phy.queensu.ca/~phil/exiftool/. \endhtmlonly ExifTool supports several document formats for writing. The most relevant here are Postscript and PDF. For PDF documents, metadata is written as an incremental update of the document. This exactly preserves the binary structure of the document, and changes can be easily reversed or modified if so desired. Whenever ExifTool is unable to insert metadata, e.g., because the document format is not supported or it has structural errors, the cb2Bib will issue an information message, and the document will remain untouched. See also \ref c2bconf_documents and \ref update_metadata. */ metadataParser::metadataParser(QObject* parento) : QObject(parento) { _cbpP = new coreBibParser(this); init(); } metadataParser::metadataParser(coreBibParser* cbp, QObject* parento) : QObject(parento), _cbpP(cbp) { Q_ASSERT_X(_cbpP, "metadataParser", "coreBibParser was not instantiated"); init(); } void metadataParser::init() { _settingsP = settings::instance(); // Set bibliographic fields // Remove fields file (it is itself) and pages (usually number of pages) from list _fields = QRegExp("\\b(?:abstract|address|annote|author|authors|booktitle|chapter|" "doi|edition|editor|eprint|institution|isbn|issn|journal|" "keyword|keywords|key words|month|note|number|organization|" "pagerange|publicationname|publisher|school|series|title|url|volume|year)\\b"); _fields.setCaseSensitivity(Qt::CaseInsensitive); // Recognition from BibTeX entries _bibtex_fields = QRegExp("\\bbibtex:(?:abstract|address|annote|author|booktitle|chapter|" "doi|edition|editor|eprint|institution|isbn|issn|journal|" "keywords|month|note|number|organization|pages|publisher|" "school|series|title|url|volume|year)\\b"); _bibtex_fields.setCaseSensitivity(Qt::CaseInsensitive); // Set field keys equivalences const QStringList& bibliographicFields = _cbpP->bibliographicFields(); for (int i = 0; i < bibliographicFields.count(); ++i) _bibtex_key.insert(bibliographicFields.at(i), bibliographicFields.at(i)); _bibtex_key.insert("authors", "author"); _bibtex_key.insert("key words", "keywords"); _bibtex_key.insert("keyword", "keywords"); _bibtex_key.insert("pagerange", "pages"); _bibtex_key.insert("publicationname", "journal"); } const QString metadataParser::metadata(const QString& fn) { if (!_metadata(fn)) return QString(); QString data; if (_has_bibtex) data = _cbpP->referenceToBibTeX(_ref); else { const QStringList& bibliographicFields(_cbpP->bibliographicFields()); if (_ref.contains("type")) data += QString("<%1>%2\n").arg("type").arg(_ref.value("type")); for (int i = 0; i < bibliographicFields.count(); ++i) { const QString key(bibliographicFields.at(i)); if (_ref.contains(key)) data += QString("<%1>%2\n").arg(key).arg(_ref.value(key)); } } data = QString("[Bibliographic Metadata\n%1/Bibliographic Metadata]\n").arg(data); return data; } bool metadataParser::metadata(const QString& fn, bibReference* ref) { ref->clearReference(); bool has_reference(_metadata(fn)); has_reference = has_reference && _has_bibtex && _has_cb2bib; if (has_reference) (*ref) = _ref; return has_reference; } bool metadataParser::_metadata(const QString& fn) { QByteArray raw_contents; QFile f(fn); if (f.open(QIODevice::ReadOnly)) { raw_contents = f.readAll(); f.close(); } else return false; _ref.clearReference(); _ref.typeName = "article"; _has_bibtex = false; _has_cb2bib = false; _has_prism = false; QStringList xmls; _metadataXmp(fn, raw_contents, &xmls); // Last in list should be the most updated, parse it last for (int i = 0; i < xmls.count(); ++i) _fuzzyParser(xmls.at(i)); QMutableHashIterator it(_ref); while (it.hasNext()) { it.next(); it.value() = c2bUtils::fromQtXmlString(it.value()); } if (!_has_cb2bib) _miscellaneousData(fn, raw_contents); if (_ref.count() == 0) return false; if (_has_bibtex) if (_ref.contains("type")) _ref.typeName = _ref.value("type"); return true; } void metadataParser::_metadataXmp(const QString& fn, const QByteArray& raw_contents, QStringList* xmls) { xmls->clear(); int pos(0); while (pos > -1) { // Scan all packets, and do not trust "='' " etc, as producers encode differently pos = raw_contents.indexOf(" -1) { int posn(raw_contents.indexOf(" pos) { xmls->append(c2bUtils::toQtXmlString(QString::fromUtf8(raw_contents.mid(pos, posn - pos + 19)))); _has_bibtex = _has_bibtex || xmls->last().contains("bibtex:"); _has_cb2bib = _has_cb2bib || xmls->last().contains("http://www.molspaces.com/cb2bib"); _has_prism = _has_prism || xmls->last().contains("http://prismstandard.org/namespaces/basic/2.0"); pos = posn; } else pos = -1; } } if (xmls->count() == 0) _metadataXmpExifTool(fn, xmls); } void metadataParser::_miscellaneousData(const QString& fn, const QByteArray& raw_contents) { // Get title, author, and keywords from here whenever no cb2Bib BibTeX data is available QString data; QRegExp pdf_author_rx; QRegExp pdf_title_rx; QRegExp pdf_keywords_rx; const QString exiftool_bin(_settingsP->fileName("cb2Bib/ExifToolBin")); bool is_exiftool_available = !exiftool_bin.isEmpty(); if (is_exiftool_available) { QProcess exiftool; QStringList arglist; arglist.append(fn); exiftool.start(exiftool_bin, arglist); if (!exiftool.waitForFinished(90000)) exiftool.kill(); data = QString::fromUtf8(exiftool.readAllStandardOutput()); if (exiftool.error() == QProcess::UnknownError) // No error { pdf_author_rx.setPattern("Author\\s*:\\s+(.*)\\n"); pdf_title_rx.setPattern("Title\\s*:\\s+(.*)\\n"); pdf_keywords_rx.setPattern("Subject\\s*:\\s+(.*)\\n"); } else is_exiftool_available = false; } if (!is_exiftool_available) { if (!raw_contents.startsWith("%PDF")) return; data = _pdfDictionary(raw_contents); pdf_author_rx.setPattern("\\Author\\s*\\((.*)\\)"); pdf_title_rx.setPattern("\\Title\\s*\\((.*)\\)"); } pdf_author_rx.setMinimal(true); pdf_author_rx.setCaseSensitivity(Qt::CaseSensitive); if (pdf_author_rx.indexIn(data) > -1) if (!pdf_author_rx.cap(1).trimmed().isEmpty()) _ref["author"] = pdf_author_rx.cap(1); // Dublin Core Metadata keywords if exiftool is available if (_has_prism && is_exiftool_available) { pdf_keywords_rx.setMinimal(true); pdf_keywords_rx.setCaseSensitivity(Qt::CaseSensitive); if (pdf_keywords_rx.indexIn(data) > -1) if (!pdf_keywords_rx.cap(1).trimmed().isEmpty()) _ref["keywords"] = pdf_keywords_rx.cap(1); } // Done if BibTeX, otherwise try checking dictionary for title if (_has_bibtex) return; pdf_title_rx.setMinimal(true); pdf_title_rx.setCaseSensitivity(Qt::CaseSensitive); if (pdf_title_rx.indexIn(data) > -1) if (!pdf_title_rx.cap(1).trimmed().isEmpty()) _ref["title"] = pdf_title_rx.cap(1); } const QString metadataParser::_pdfDictionary(const QByteArray& rawpdf) { // Heuristic to locate the Pdf dictionary const int pos(rawpdf.lastIndexOf("/Producer")); if (pos > -1) { const int pos0(rawpdf.lastIndexOf("<<", pos)); if (pos0 > -1) { const int posn(rawpdf.indexOf(">>", pos)); if (posn > pos0) return QString::fromLatin1(rawpdf.mid(pos0, posn - pos0 + 2)); } } return QString(); } void metadataParser::_metadataXmpExifTool(const QString& fn, QStringList* xmls) { // Not actually needed, called for not directly visible XMP packages // It's slower than _metadataXmp() full scan. const QString exiftool_bin(_settingsP->fileName("cb2Bib/ExifToolBin")); if (exiftool_bin.isEmpty()) return; QProcess exiftool; QStringList arglist; arglist.append("-xmp"); arglist.append("-b"); arglist.append(fn); exiftool.start(exiftool_bin, arglist); if (!exiftool.waitForFinished(90000)) exiftool.kill(); QString xmp(c2bUtils::toQtXmlString(QString::fromUtf8(exiftool.readAllStandardOutput()))); if (xmp.startsWith("append(xmp); _has_bibtex = _has_bibtex || xmls->last().contains("bibtex:"); _has_cb2bib = _has_cb2bib || xmls->last().contains("http://www.molspaces.com/cb2bib"); _has_prism = _has_prism || xmls->last().contains("http://prismstandard.org/namespaces/basic/2.0"); } } void metadataParser::_fuzzyParser(const QString& data) { if (data.isEmpty()) return; QXmlStreamReader parser; parser.addData(data); QRegExp* fields; if (_has_bibtex) fields = &_bibtex_fields; else fields = &_fields; QString field; QString key; QString value; while (!parser.atEnd()) { parser.readNext(); if (parser.isStartElement()) { // Do attributes (seems poppler xml composing) QXmlStreamAttributes att = parser.attributes(); for (int i = 0; i < att.count(); ++i) { field = att.at(i).qualifiedName().toString(); key = att.at(i).name().toString().toLower(); value = att.at(i).value().toString(); if (value.isEmpty()) continue; if (field.contains(*fields)) _ref[_bibtex_key.value(key)] = value; else if (QString::compare(field, "summary", Qt::CaseInsensitive) == 0 || QString::compare(field, "subject", Qt::CaseInsensitive) == 0) { if (!_ref.contains("abstract")) // Prefer BibTeX field key if exists than synonyms _ref["abstract"] = value; } else if (QString::compare(field, "bibtex:type", Qt::CaseInsensitive) == 0 || QString::compare(field, "bibtex:entrytype", Qt::CaseInsensitive) == 0) _ref["type"] = value.toLower(); } // Do element (exiftool and exempi xml composing) field = parser.qualifiedName().toString(); key = parser.name().toString().toLower(); if (field.contains(*fields)) { parser.readNext(); value = parser.text().toString().trimmed(); if (!value.isEmpty()) _ref[_bibtex_key.value(key)] = value; } else if (!_has_bibtex && QString::compare(field, "prism:coverDate", Qt::CaseSensitive) == 0) { parser.readNext(); value = parser.text().toString().trimmed(); const QDate pdate(QDate::fromString(value, Qt::ISODate)); const QString pyear(pdate.toString("yyyy")); // Prefer BibTeX date over Prism if (!pyear.isEmpty() && !_ref.contains("year")) _ref["year"] = pyear; const QString pmonth(pdate.toString("d MMMM")); if (!pmonth.isEmpty() && !_ref.contains("month")) _ref["month"] = pmonth; } else if (QString::compare(field, "summary", Qt::CaseInsensitive) == 0 || QString::compare(field, "subject", Qt::CaseInsensitive) == 0) { parser.readNext(); value = parser.text().toString().trimmed(); if (!value.isEmpty() && !_ref.contains("abstract")) // Prefer BibTeX field key if exists than synonyms _ref["abstract"] = value; } else if (QString::compare(field, "bibtex:type", Qt::CaseInsensitive) == 0 || QString::compare(field, "bibtex:entrytype", Qt::CaseInsensitive) == 0) { parser.readNext(); value = parser.text().toString().trimmed(); if (!value.isEmpty()) _ref["type"] = value.toLower(); } } } if (parser.hasError()) c2bUtils::debug(tr("metadataParser: Error while parsing XML packets")); } bool metadataParser::insertMetadata(const bibReference& ref, const QString& fn, QString* error) const { if (error) error->clear(); const QString exiftool_bin(_settingsP->fileName("cb2Bib/ExifToolBin")); if (exiftool_bin.isEmpty()) { if (error) *error = tr("Metadata writer: ExifTool location has not been specified."); else emit showMessage(tr("Warning - cb2Bib"), tr("Metadata writer: ExifTool location has not been specified.")); return false; } if (ref.count() == 0) return false; QString bibtags; QString key; QString value; QString entry("%2\n"); bibtags += entry.arg("type").arg(ref.typeName); const QStringList& bibliographicFields = _cbpP->bibliographicFields(); for (int i = 0; i < bibliographicFields.count(); ++i) { key = bibliographicFields.at(i); value = ref.value(key); if (value.isEmpty()) continue; if (key == "file") continue; else if (key == "id") continue; c2bUtils::fullBibToC2b(value); if (key == "title" || key == "booktitle") c2bUtils::cleanTitle(value); bibtags += entry.arg(key).arg(value); } QString bibtags_xmp(c2bUtils::fileToString(":/xml/xml/cb2bib.xmp")); bibtags_xmp.replace("GET_BIBTEX_TAGS", bibtags); bibtags_xmp.replace("GET_FORMATTED_AUTHOR", formattedAuthor(ref.value("author"))); const QString workdir(QFileInfo(fn).absolutePath()); const QString bibtags_file(workdir + "/bibtags.xmp"); c2bUtils::stringToFile(bibtags_xmp, bibtags_file); QProcess exiftool; QStringList arglist; arglist.append("-overwrite_original"); arglist.append("-m"); arglist.append("-TagsFromFile"); arglist.append(bibtags_file); arglist.append("-all:all"); arglist.append("-pdf:all /** This class converts documents to unicode strings */ class document { public: enum Conversion {FirstPage, Complete}; document(const QString& fn, const Conversion mode); inline ~document() {} QString fileToString(const QString& fn); QString toString(); void setConverter(const Conversion mode); inline QString errorString() const { return _error_string.trimmed(); } inline QString logString() const { return _log_string.trimmed(); } static QString& normalize(QString& doc, const Conversion mode); private: Conversion _conversion_mode; QString _converter_arg; QString _converter_bin; QString _converter_output; QString _document_fn; QString _error_string; QString _log_string; void setConverter(const QString& bin, const QString& args); }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/coreBibParser.h0000644000000000000000000000013013124510216016451 xustar0029 mtime=1498583182.95525523 30 atime=1498583183.003254785 29 ctime=1498583182.95525523 cb2bib-1.9.7/src/c2b/coreBibParser.h0000644000175000001440000001600413124510216020046 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef COREBIBPARSER_H #define COREBIBPARSER_H #include "authorString.h" #include "bibReference.h" #include "cb2bib_utilities.h" #include "settings.h" #include #include /** Class for bibliographic reference parsing @author Pere Constans */ class coreBibParser : public QObject { Q_OBJECT public: explicit coreBibParser(QObject* parento = 0); inline virtual ~coreBibParser() {} QString referenceToBibTeX(const bibReference& ref) const; QString referenceToFomattedBibTeX(const bibReference& ref) const; bibReference wholeReference(const QString& str); bool referenceAtKey(const QString& key, const QString& str, bibReference* ref); bool referencesIn(const QString& str, bibReference* ref); void initReferenceParsing(const QString& dir, const QStringList& fields, bibReference* ref); inline const QStringList& bibliographicFields() const { return _bibliographic_fields; } inline const QStringList& sortedBibliographicFields() const { return _sorted_bibliographic_fields; } inline const QStringList& bibliographicTypes() const { return _bibliographic_types; } inline void setReferenceParsingDir(const QString& dir) { // Set base dir for cases of relative 'file' // Terminate dirname with separator to avoid adding it to each reference _bib_file_dir = QDir::toNativeSeparators(QFileInfo(dir).absolutePath() + QDir::separator()); } inline bool hasBibTeX(const QString& str) const { if (_bib_begin0_re.indexIn(str) > -1) return true; else return _bib_begin1_re.indexIn(str) > -1; } inline int fieldCount(const bibReference& ref) const { // Counting Non Empty Fields int n(0); bibReferenceIterator i; for (i = ref.constBegin(); i != ref.constEnd(); ++i) if (!i.value().isEmpty()) ++n; return n; } inline QString& authorFromBibTeX(QString& as) { // Avoid BibTeX reverse names if (as.contains(',')) as = _authorString.toBibTeX(as, _settingsP->value("cb2Bib/UseFullNames").toBool()); return as; } protected: QRegExp _field_re; QString adjacentNumbers(const QString& numbers) const; QStringList _bibliographic_fields; QStringList _bibliographic_types; QStringList _sorted_bibliographic_fields; authorString _authorString; settings* _settingsP; private: QList _bib_fields_nb_re; QList _bib_fields_re; QRegExp _bib_begin0_re; QRegExp _bib_begin1_re; QRegExp _bib_begin_re; QRegExp _bib_key_re; QRegExp _bib_type_re; QString _bib_file_dir; const QChar _close; const QChar _comma; const QChar _open; const QChar _space; void setFields(); void setRegularExpressions(); void setTypes(); inline int referenceStarts(const QString& str, int pos = 0) const { int i; if (pos == 0) { i = _bib_begin0_re.indexIn(str); if (i < 0) i = _bib_begin1_re.indexIn(str, pos); } else i = _bib_begin1_re.indexIn(str, pos); if (i < 0) return i; return _bib_begin_re.indexIn(str, i); } inline int referenceStarts(const QString& key, const QString& str) const { if (!str.contains(key)) return -1; int i(str.indexOf(QRegExp("^\\s*@\\w+\\s*\\{" + key + ','))); if (i < 0) i = str.indexOf(QRegExp("[\\r\\n]\\s*@\\w+\\s*\\{" + key + ',')); if (i < 0) return i; return str.indexOf(QRegExp("@\\w+\\s*\\{" + key + ','), i); } inline int referenceEnds(const QString& str, int pos = 0) const { // If referenceStarts call is successful, we know for sure // that there is an opening { right after pos. // Do not check again here. // Checking for brace closure is the safest way for parsing. // It will fail, though, for references incorrectly written. // Avoid overextending in these cases by checking the // start of the next reference. int ref_length(referenceStarts(str, pos + 2) - 1); if (ref_length < 0) ref_length = str.length(); const int brace_pos(str.indexOf(_open, pos)); int open_braces(1); for (int i = brace_pos + 1; i < ref_length; ++i) { const QChar& si = str.at(i); if (si == _open) open_braces++; else if (si == _close) open_braces--; if (open_braces == 0) return i; } return ref_length - 1; } inline void setReferenceEnd(QString* str, const int& length) const { // Set safer termination: field="..." } -> field="...",} if (str->at(length - 2) == _space) (*str)[length - 2] = _comma; else (*str)[length - 1] = _comma; } inline QString referenceAt(const QString& str, int* pos) const { // String str contains one or multiple references (file contents) const int pos_(referenceEnds(str, *pos) + 1); const QString str_ref(str.mid(*pos, pos_ - (*pos))); *pos = pos_; return str_ref; } inline void referenceContents(const QString& str, bibReference* ref, int pos) { // File parsing for given fields in ref ref->positionValue = pos; QString str_ref(referenceAt(str, &pos)); ref->pos = pos; ref->rawReference = str_ref; c2bUtils::bibToC2b(str_ref); c2bUtils::simplifyString(str_ref); ref->unicodeReference = str_ref; _bib_key_re.indexIn(str_ref); ref->citeidName = _bib_key_re.cap(1); _bib_type_re.indexIn(str_ref); ref->typeName = _bib_type_re.cap(1).toLower(); setReferenceEnd(&str_ref, str_ref.length()); QString fvalue; for (int i = 0; i < ref->_bib_fields_re.count(); ++i) { QRegExp* bf = &ref->_bib_fields_re[i]; pos = bf->indexIn(str_ref); if (pos > 0) { if (c2bUtils::inBraces(pos + bf->matchedLength(), str_ref, &fvalue)) (*ref)[ref->bib_fieldList.at(i)] = fvalue.trimmed(); } else { bf = &ref->_bib_fields_nb_re[i]; if (bf->indexIn(str_ref) > -1) (*ref)[ref->bib_fieldList.at(i)] = bf->cap(1).trimmed(); } } if (ref->contains("file")) if (!QDir::isAbsolutePath(ref->value("file"))) (*ref)["file"] = _bib_file_dir + ref->value("file"); } }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/preprocess.h0000644000000000000000000000013213124510216016116 xustar0030 mtime=1498583182.971255081 30 atime=1498583183.003254785 30 ctime=1498583182.975255045 cb2bib-1.9.7/src/c2b/preprocess.h0000644000175000001440000000142413124510216017511 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef PREPROCESS_H #define PREPROCESS_H #include #include /** @author Pere Constans */ class preprocess : public QObject { Q_OBJECT public: explicit preprocess(QObject* parento = 0); inline ~preprocess() {} public: void preprocessText(QString* text); public slots: void loadSettings(); private: bool FindReplaceInput; QStringList FindReplaceInputList; }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/document.cpp0000644000000000000000000000013113124510216016101 xustar0029 mtime=1498583182.89925575 30 atime=1498583183.003254785 30 ctime=1498583182.903255713 cb2bib-1.9.7/src/c2b/document.cpp0000644000175000001440000004107613124510216017504 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "document.h" #include "cb2bib_utilities.h" #include "settings.h" #include document::document(const QString& fn, const Conversion mode) { _document_fn = fn.trimmed(); settings* settingsP = settings::instance(); _converter_output = settingsP->tempPath() + "/cb2bib_document_conversion_tmp_" + settingsP->applicationPid(); setConverter(mode); } QString document::fileToString(const QString& fn) { _document_fn = fn.trimmed(); return toString(); } QString document::toString() { _error_string.clear(); _log_string.clear(); if (_document_fn.isEmpty()) return QString(); QFileInfo fbin(_converter_bin); if (fbin.isAbsolute()) if (!fbin.exists() || !fbin.isFile()) { _error_string = QObject::tr("Converter %1 does not exist\n").arg(_converter_bin); return QString(); } QFileInfo fi(_document_fn); if (!fi.exists() || !fi.isFile()) { _error_string = QObject::tr("File %1 does not exist\n").arg(_document_fn); return QString(); } QProcess converter; QStringList args(_converter_arg.split(' ', QString::SkipEmptyParts)); args.append(_document_fn); args.append(_converter_output); converter.start(_converter_bin, args); if (!converter.waitForStarted()) { _error_string += QObject::tr("Converter '%1 %2' could not be started. Check file permissions and path\n") .arg(_converter_bin).arg(_converter_arg); return QString(); } if (!converter.waitForFinished(_conversion_mode == Complete ? -1 : 150000)) { converter.kill(); c2bUtils::warn(QObject::tr("Error: Document conversion timeout for file '%1'").arg(_document_fn)); } QString doc(c2bUtils::fileToString(_converter_output, true)); _log_string = QString::fromUtf8(converter.readAllStandardOutput().trimmed()); _log_string += '\n' + QString::fromUtf8(converter.readAllStandardError().trimmed()); if (converter.exitStatus() != QProcess::NormalExit || doc.isEmpty()) { _error_string += QObject::tr("[%1 %2] Conversion failed for file %3\n") .arg(_converter_bin).arg(_converter_arg).arg(_document_fn); c2bUtils::warn(QObject::tr("Warning: Text conversion for file '%1' is empty").arg(_document_fn)); return QString(); } normalize(doc, _conversion_mode); return doc; } QString& document::normalize(QString& doc, const Conversion mode) { if (doc.length() == 0) return doc; const ushort unull(0); const ushort unl(10); const ushort uspace(32); const ushort uhyp(45); bool hgrave(false); bool hdieresis(false); bool haccute(false); bool hcedilla(false); bool hcircumflex(false); bool hcaron(false); bool hring(false); bool htilde(false); bool hreg(false); bool hligatures(false); ushort* const c0((ushort*)doc.data()); const ushort* const cn(c0 + doc.length()); ushort* c(c0 - 1); while (c < cn) { ++c; ushort& uc(*c); if (uc > 96 && uc < 127) continue; if (uc > 31 && uc < 94) continue; const QChar::Category ct(QChar::category(uc)); if (ct == QChar::Mark_NonSpacing) uc = unull; else if (ct == QChar::Mark_SpacingCombining) uc = uspace; else if (ct == QChar::Mark_Enclosing) uc = uspace; else if (ct == QChar::Separator_Space) uc = uspace; else if (ct == QChar::Separator_Paragraph) uc = unl; else if (ct == QChar::Other_Control) { if (uc == 10 || uc == 13) uc = unl; else uc = uspace; } else if (ct == QChar::Other_Format) uc = uc == 173 ? uhyp : unull; else if (ct == QChar::Other_PrivateUse) uc = uspace; else if (ct == QChar::Other_NotAssigned) uc = uspace; else if (uc == QChar::ReplacementCharacter) uc = uspace; else if (uc == 96) hgrave = true; else if (uc == 168) hdieresis = true; else if (uc == 180) haccute = true; else if (uc == 184) hcedilla = true; else if (uc == 710) hcircumflex = true; else if (uc == 711) hcaron = true; else if (uc == 730) hring = true; else if (uc == 732) htilde = true; // Normalize apostrophe else if (uc == 8216 || uc == 8217) uc = 39; // Normalize comma else if (uc == 65292) uc = 44; // Normalize quotation else if (uc == 8220 || uc == 8221 || uc == 65282) uc = 34; // Normalize separator else if ((uc > 8207 && uc < 8213) || uc == 8722) uc = uhyp; // Corrections else if (uc == 174) hreg = true; else if (uc == 305) uc = 105; else if (uc == 1001) uc = 43; else if (uc == 1002 || uc == 1003) uc = 45; else if (uc == 306 || uc == 307 || uc == 455 || uc == 460 || uc == 498 || uc == 64256 || uc == 64257 || uc == 64258 || uc == 64259 || uc == 64260) hligatures = true; } // Diacritics from legacy PDFs are set to text in several manners: // - an orphan diacritic is set either before or after the letter // - an orphan diacritic might be followed by one or more spaces, resulting in broken words // These deficiencies impact on indexing and searching // In the following // - an orphan diacritic is re-set to the most probably accented letters // - extra spaces are removed whenever the risk of joining two independent words is low if (haccute) { const ushort uaccute(180); c = c0 + 1; const ushort* const cm(cn - 2); while (c < cm) { if (*c == uaccute && *(c + 1) == uspace) { const QChar r(*(c - 1)); const QChar s(*(c + 2)); if (r.isLetter()) if ((r.isUpper() && s.isLetter()) || s.category() == QChar::Punctuation_Dash || s.category() == QChar::Punctuation_Other || s.isSpace()) *(c + 1) = unull; } ++c; } } // Revert hyphenation (skip for FirstPage mode to preserve layout) if (mode == Complete) { c = c0 + 1; const ushort* const cm(cn - 2); while (c < cm) { if (*c == uhyp) { const QChar r(*(c - 1)); if (r.isLetter()) { ushort* cs(c); bool h(false); while (cs < cn) if (QChar(*(++cs)).isLetter()) break; else if (*cs == unl) h = true; else if (*cs != uspace) { h = false; break; } if (h && cs < cn) { QString testw; for (ushort* cw = c - 1; cw > c0; --cw) if (QChar(*cw).isLetter()) testw.prepend(QChar(*cw)); else break; testw.append(QChar(uhyp)); for (ushort* cw = cs; cw < cn; ++cw) if (QChar(*cw).isLetter()) testw.append(QChar(*cw)); else break; const QChar s(*cs); // Avoid de-hyphenating 'divide-and-conquer' like cases by checking the word in document if (doc.contains(testw)) ++c; // Avoid de-hyphenating 'Hartree-Fock' like cases; replace hyphen by space else if ((r.isLower() && s.isUpper()) || (r.isUpper() && s.isLower())) *(c++) = uspace; for (ushort* z = c; z < cs; ++z) *z = unull; c = cs + 1; } } } ++c; } } // Clear extra spaces on enclosing marks { c = c0; while (c < cn) { ++c; ushort& uc(*c); if (uc < 40) continue; if (uc > 41 && uc < 91) continue; if (uc > 93 && uc < 123) continue; const QChar::Category ct(QChar::category(uc)); if (ct == QChar::Punctuation_Open) { for (ushort* co = c + 1; co < cn; ++co) if (*co == uspace || *co == unl || *co == unull) *co = unull; else break; } else if (ct == QChar::Punctuation_Close) { for (ushort* cc = c - 1; cc > c0; --cc) if (*cc == uspace || *cc == unl || *cc == unull) *cc = unull; else break; } } } // Remove null characters (djvutxt end of page, and other control characters) doc.remove(QChar(unull)); if (hreg) { // Correct frequent misencoding of "fi" as circle R in PDFs doc.replace(QRegExp(QString("%1([a-z])").arg(QChar(174))), "fi\\1"); } if (hligatures) { // Revert Latin ligatures doc.replace(QChar(306), "IJ"); doc.replace(QChar(307), "ij"); doc.replace(QChar(455), "LJ"); doc.replace(QChar(460), "nj"); doc.replace(QChar(498), "Dz"); doc.replace(QChar(64256), "ff"); doc.replace(QChar(64257), "fi"); doc.replace(QChar(64258), "fl"); doc.replace(QChar(64259), "ffi"); doc.replace(QChar(64260), "ffl"); } if (hgrave) { const QChar grave(96); doc.replace('a' + grave, QChar(224)); doc.replace(grave + 'a', QChar(224)); doc.replace('e' + grave, QChar(232)); doc.replace(grave + 'e', QChar(232)); doc.replace('o' + grave, QChar(242)); doc.replace('u' + grave, QChar(249)); doc.replace('y' + grave, QChar(7923)); doc.replace('A' + grave, QChar(192)); doc.replace('E' + grave, QChar(200)); doc.replace('O' + grave, QChar(210)); } if (hdieresis) { const QChar dieresis(168); doc.replace(QRegExp(dieresis + ' ' + '+'), dieresis); doc.replace(dieresis + ' ', dieresis); doc.replace('a' + dieresis, QChar(228)); doc.replace('e' + dieresis, QChar(235)); doc.replace('i' + dieresis, QChar(239)); doc.replace('o' + dieresis, QChar(246)); doc.replace('u' + dieresis, QChar(252)); doc.replace('A' + dieresis, QChar(196)); doc.replace('E' + dieresis, QChar(203)); doc.replace('I' + dieresis, QChar(207)); doc.replace('O' + dieresis, QChar(214)); doc.replace('U' + dieresis, QChar(220)); doc.replace(dieresis + 'a', QChar(228)); doc.replace(dieresis + 'e', QChar(235)); doc.replace(dieresis + 'i', QChar(239)); doc.replace(dieresis + 'o', QChar(246)); doc.replace(dieresis + 'u', QChar(252)); doc.replace(dieresis + 'A', QChar(196)); doc.replace(dieresis + 'E', QChar(203)); doc.replace(dieresis + 'I', QChar(207)); doc.replace(dieresis + 'O', QChar(214)); doc.replace(dieresis + 'U', QChar(220)); } if (haccute) { const QChar accute(180); doc.replace('e' + accute, QChar(233)); doc.replace(accute + 'e', QChar(233)); doc.replace('A' + accute, QChar(193)); doc.replace(accute + 'A', QChar(193)); doc.replace('a' + accute, QChar(225)); doc.replace(accute + 'a', QChar(225)); doc.replace('o' + accute, QChar(243)); doc.replace(accute + 'o', QChar(243)); doc.replace('i' + accute, QChar(237)); doc.replace(accute + 'i', QChar(237)); doc.replace('E' + accute, QChar(201)); doc.replace(accute + 'E', QChar(201)); doc.replace('u' + accute, QChar(250)); doc.replace(accute + 'u', QChar(250)); doc.replace('O' + accute, QChar(211)); doc.replace(accute + 'O', QChar(211)); doc.replace('I' + accute, QChar(205)); doc.replace(accute + 'I', QChar(205)); doc.replace('U' + accute, QChar(218)); doc.replace(accute + 'U', QChar(218)); doc.replace('c' + accute, QChar(263)); doc.replace('C' + accute, QChar(262)); doc.replace('y' + accute, QChar(253)); doc.replace('Y' + accute, QChar(221)); } if (hcedilla) { const QChar cedilla(184); doc.replace('c' + cedilla, QChar(231)); doc.replace(cedilla + 'c', QChar(231)); doc.replace('C' + cedilla, QChar(199)); doc.replace(cedilla + 'C', QChar(199)); doc.replace('s' + cedilla, QChar(351)); doc.replace(cedilla + 's', QChar(351)); doc.replace('S' + cedilla, QChar(350)); doc.replace(cedilla + 'S', QChar(350)); doc.replace('e' + cedilla, QChar(553)); doc.replace(cedilla + 'e', QChar(553)); doc.replace('E' + cedilla, QChar(552)); doc.replace(cedilla + 'E', QChar(552)); } if (hcircumflex) { const QChar circumflex(710); doc.replace('a' + circumflex, QChar(226)); doc.replace(circumflex + 'a', QChar(226)); doc.replace('e' + circumflex, QChar(234)); doc.replace(circumflex + 'e', QChar(234)); doc.replace('i' + circumflex, QChar(238)); doc.replace(circumflex + 'i', QChar(238)); doc.replace('o' + circumflex, QChar(244)); doc.replace(circumflex + 'o', QChar(244)); } if (hcaron) { const QChar caron(711); doc.replace('c' + caron, QChar(269)); doc.replace(caron + 'c', QChar(269)); doc.replace('C' + caron, QChar(268)); doc.replace(caron + 'C', QChar(268)); doc.replace('z' + caron, QChar(382)); doc.replace(caron + 'z', QChar(382)); doc.replace('Z' + caron, QChar(381)); doc.replace(caron + 'Z', QChar(381)); doc.replace('s' + caron, QChar(353)); doc.replace(caron + 's', QChar(353)); doc.replace('S' + caron, QChar(352)); doc.replace(caron + 'S', QChar(352)); doc.replace('r' + caron, QChar(345)); doc.replace(caron + 'r', QChar(345)); doc.replace('R' + caron, QChar(344)); doc.replace(caron + 'R', QChar(344)); } if (hring) { const QChar ring(730); doc.replace('a' + ring, QChar(229)); doc.replace('A' + ring, QChar(197)); doc.replace(ring + 'a', QChar(229)); doc.replace(ring + 'A', QChar(197)); } if (htilde) { const QChar tilde(732); doc.replace('n' + tilde, QChar(241)); doc.replace('N' + tilde, QChar(209)); doc.replace('a' + tilde, QChar(227)); doc.replace('A' + tilde, QChar(195)); } // Simplify (skip for FirstPage mode to preserve layout) if (mode == Complete) c2bUtils::simplifyString(doc); return doc; } void document::setConverter(const Conversion mode) { _conversion_mode = mode; settings* s(settings::instance()); switch (_conversion_mode) { case Complete: setConverter(s->fileName("c2bBibSearcher/Pdf2TextBin"), s->value("c2bBibSearcher/Pdf2TextArg").toString()); break; case FirstPage: default: setConverter(s->fileName("c2bPdfImport/Pdf2TextBin"), s->value("c2bPdfImport/Pdf2TextArg").toString()); break; } } void document::setConverter(const QString& bin, const QString& args) { _converter_bin = bin.trimmed(); _converter_arg = args.simplified(); } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/htm0000644000000000000000000000007413124510115014276 xustar0030 atime=1498583183.003254785 30 ctime=1498583182.643258127 cb2bib-1.9.7/src/c2b/htm/0000755000175000001440000000000013124510115015740 5ustar00constansusers00000000000000cb2bib-1.9.7/src/c2b/htm/PaxHeaders.3194/tex2html_index.html0000644000000000000000000000007413124510115020177 xustar0030 atime=1498583183.003254785 30 ctime=1498583182.643258127 cb2bib-1.9.7/src/c2b/htm/tex2html_index.html0000644000175000001440000000005713124510115021566 0ustar00constansusers00000000000000
        %1

        cb2bib-1.9.7/src/c2b/htm/PaxHeaders.3194/tex2html.css0000644000000000000000000000007413124510115016634 xustar0030 atime=1498583182.719257421 30 ctime=1498583182.643258127 cb2bib-1.9.7/src/c2b/htm/tex2html.css0000644000175000001440000000553413124510115020230 0ustar00constansusers00000000000000/* cb2Bib Annote CSS */ /* general */ body { background-color: #E7E7E7; border-color: #72726A; border-style: solid; border-width: 1px; color: black; margin: 1px; padding-left: 25px; padding-right: 25px; padding-top: 25px; } h1 { background-color: #010141; border-color: black; border-style: solid; border-width: 1px; color: #E3E3E3; font-family: sans-serif; font-size: 120%; padding-left: 10px; } h2 { color: #010141; font-family: sans-serif; font-size: 110%; padding-left: 10px; } h3 { color: #010141; font-family: sans-serif; font-size: 100%; font-style: italic; padding-left: 10px; } a { color: #293747; font-size: 100%; text-decoration: underline; } p { padding-right: 20px; text-indent: 20px; } pre { background-color: #DBDBDB; border-color: #72726A; border-style: solid; border-width: 1px; font-family: monospace; font-size: 80%; padding: 10px; } ul li { list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAJCAYAAADkZNYtAAAABGdBTUEAANbY1E9YMgAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9gMCBQ5B7ky4rkAAAFHSURBVBjTTcoxasJQAIDhPy8JlfCKGpe+LIUuQhAnN0FEikcodOvSnqCLV+lYEA/QCi4GnERyhE5FsGoCDgZ9oMnr0pZ+8G+/xQ+lVLXVaj31+/378/lsOY5jJpPJaDabvWRZtuMfv9PpjKIoMkmSmDRNzXa7NdPp1LTb7RHgA9iACILgcTAYPFerVbTWaK3Z7XbkeU69Xm/M5/OvLMtiAbjNZvPO8zy01uz3+7+01nieR6PRuANcB3CVUje1Wg0pJa7rYts2eZ5zOp0olUoEQXDzO4skSVa+719JKXPLsizbtjHGACCEEJvNZgUIARSLxWK8Xq+RUtrlcllIKUWlUhFSSrFcLonjeAwUABdA2O12J3Ecm8PhYLTW5ng8miiKTBiGb0AIXFiAAC6VUqHv+w+9Xu/WcZzroig+h8Phe5qmr8AHkH0DzH6Pqv7Vyi4AAAAASUVORK5CYII=); padding-right: 100px; text-indent: 15px; } /* header */ .header { vertical-align: middle; } /* footer */ .footer { color: black; font-family: arial, sans-serif; font-size: 50%; } .footer td { padding: 10px; padding-left: 5px; padding-right: 5px; } .footer a { color: #293747; font-weight: bold; text-decoration: underline; } /* index */ .index { background-color: #DBDBDB; border-color: #72726A; border-style: solid; border-width: 1px; font-family: sans-serif; font-size: 80%; } .index a { color: #293747; font-weight: bold; text-decoration: none; } .index a:hover { color: #010141; font-weight: bold; text-decoration: none; } .index ul li { list-style-image: none; } /* abstract */ #abstract { background-color: #DBDBDB; border-color: #72726A; border-style: solid; border-width: 1px; font-size: 95%; font-style: italic; padding-bottom: 10px; padding-left: 50px; padding-right: 70px; padding-top: 10px; text-indent: 20px; } /* citations */ .citations { font-size: 80%; } .citations a { text-decoration: none; } .citations a:active { color: #010141; text-decoration: none; } /* references */ .references { font-size: 80%; font-family: sans-serif; padding-right: 50px; } .references a { color: black; text-decoration: none; } .references a:link { color: #293747; font-weight: bold; text-decoration: none; } .references a:visited { color: #293747; font-weight: bold; text-decoration: none; }cb2bib-1.9.7/src/c2b/htm/PaxHeaders.3194/reference_list.html0000644000000000000000000000007413124510115020232 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.643258127 cb2bib-1.9.7/src/c2b/htm/reference_list.html0000644000175000001440000000011013124510115021607 0ustar00constansusers00000000000000

          GET_REFERENCES
        cb2bib-1.9.7/src/c2b/htm/PaxHeaders.3194/tex2html.html0000644000000000000000000000007413124510115017010 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.643258127 cb2bib-1.9.7/src/c2b/htm/tex2html.html0000644000175000001440000000215713124510115020402 0ustar00constansusers00000000000000 GET_CSS GET_MATHJAX_HEAD GET_TITLE

        GET_TITLE



        GET_INDEX GET_HTML GET_REFERENCES
        cb2bib-1.9.7/src/c2b/htm/PaxHeaders.3194/reference_item.html0000644000000000000000000000007413124510115020215 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.643258127 cb2bib-1.9.7/src/c2b/htm/reference_item.html0000644000175000001440000000037313124510115021605 0ustar00constansusers00000000000000
      • GET_REFERENCE_AUTHOR GET_REFERENCE_TITLE. GET_REFERENCE_SOURCE GET_REFERENCE_VOLUMEGET_REFERENCE_PAGES GET_REFERENCE_YEAR
      • cb2bib-1.9.7/src/c2b/PaxHeaders.3194/documentCache.h0000644000000000000000000000013213124510216016473 xustar0030 mtime=1498583182.959255193 30 atime=1498583183.007254748 30 ctime=1498583182.959255193 cb2bib-1.9.7/src/c2b/documentCache.h0000644000175000001440000000230313124510216020063 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef DOCUMENTCACHE_H #define DOCUMENTCACHE_H #include "documentContents.h" #include class settings; class documentCache { public: documentCache(); ~documentCache(); bool setCurrent(const QString& fn); bool setCurrent(const QString& fn, int* pdfCounter, QString* logString, int* errorCounter); void load(const QString& fn, const documentContents::Type type); void unload(); inline const documentContents& current() const { return _current; } inline const QHash& cacheData() const { return _cache; } private: QHash _cache; QString _cache_filename; QString _load_filename; documentContents _current; documentContents::Type _content_type; int _cache_load_size; settings* _settingsP; void save(); }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/coreBibParser.cpp0000644000000000000000000000013013124510216017004 xustar0029 mtime=1498583182.89925575 30 atime=1498583183.007254748 29 ctime=1498583182.89925575 cb2bib-1.9.7/src/c2b/coreBibParser.cpp0000644000175000001440000002517313124510216020410 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "coreBibParser.h" coreBibParser::coreBibParser(QObject* parento) : QObject(parento), _close(QChar('}')), _comma(QChar(',')), _open(QChar('{')), _space(QChar(' ')) { _settingsP = settings::instance(); // Setting Bibliographic Types setTypes(); // Setting Bibliographic Fields setFields(); // Setting Regular Expressions setRegularExpressions(); } bool coreBibParser::referencesIn(const QString& str, bibReference* ref) { // File parsing for given fields in ref ref->clearReference(); const int pos(referenceStarts(str, ref->pos)); if (pos < 0) return false; referenceContents(str, ref, pos); return true; } bool coreBibParser::referenceAtKey(const QString& key, const QString& str, bibReference* ref) { // File parsing for given fields in ref ref->clearReference(); const int pos(referenceStarts(key, str)); if (pos < 0) return false; referenceContents(str, ref, pos); return true; } QString coreBibParser::referenceToFomattedBibTeX(const bibReference& ref) const { // Writes a BibTeX string from struct bibReference QString BibString('@' + ref.typeName + '{' + ref.citeidName); const bool ConvertReferenceToLaTeX(_settingsP->value("cb2Bib/ConvertReferenceToLaTeX").toBool()); const bool PostprocessMonth(_settingsP->value("cb2Bib/PostprocessMonth").toBool()); const bool UseDoubleBraces(_settingsP->value("cb2Bib/UseDoubleBraces").toBool()); QStringList::const_iterator it = _bibliographic_fields.begin(); while (it != _bibliographic_fields.end()) { QString fvalue(ref.value(*it)); if (!fvalue.isEmpty()) { if (ConvertReferenceToLaTeX) c2bUtils::c2bToBib(fvalue); const QString fd(*it); const QString padding(QString().fill(' ', 12 - fd.length())); if (fd == "title" || fd == "booktitle") { if (UseDoubleBraces) if (!fvalue.contains(QRegExp("^\\{.+\\}$"))) fvalue = '{' + fvalue + '}'; fvalue = '{' + fvalue + '}'; } else if (fd == "month") { if (!PostprocessMonth) fvalue = '{' + fvalue + '}'; } else fvalue = '{' + fvalue + '}'; BibString += ",\n" + fd + padding + " = " + fvalue; } ++it; } BibString += "\n}\n"; return BibString; } QString coreBibParser::referenceToBibTeX(const bibReference& ref) const { // Writes a BibTeX string from struct bibReference // No special formatting is done here QString BibString('@' + ref.typeName + '{'); QStringList::const_iterator it = _bibliographic_fields.begin(); while (it != _bibliographic_fields.end()) { const QString fvalue(ref.value(*it)); if (!fvalue.isEmpty()) { const QString fd(*it); const QString padding(QString().fill(' ', 12 - fd.length())); BibString += ",\n" + fd + padding + " = {" + fvalue + '}'; } ++it; } BibString += "\n}\n"; return BibString; } QString coreBibParser::adjacentNumbers(const QString& numbers) const { // Originary for pages. However also used for multiple volume, number and year QString pages(numbers); pages.replace(c2bUtils::nonLetter, " "); pages = c2bUtils::simplifyString(pages); pages.replace(' ', '-'); QRegExp rx1("^(\\d+)-(\\d+)-*pp$"); QRegExp rx2("^(\\d+)-(\\d+)$"); if (rx1.indexIn(pages) > -1) { pages = rx1.cap(1); int ilp(rx1.cap(2).toInt() - 1); if (ilp > 0) pages += '-' + QString().setNum(rx1.cap(1).toInt() + ilp); // eg, 123-7pp -> 123 - 129 } else if (rx2.indexIn(pages) > -1) { QString fp(rx2.cap(1)); pages = fp + '-'; QString lp(rx2.cap(2)); uint lfp(fp.length()); uint llp(lp.length()); if (lfp > llp) lp = fp.remove(lfp - llp, llp) + lp; // eg, 123-7 -> 123 - 127 pages += lp; } const QString separator(_settingsP->value("cb2Bib/PageNumberSeparator").toString()); if (separator.isEmpty()) pages.replace('-', " - "); else pages.replace('-', separator); return pages; } void coreBibParser::setFields() { _bibliographic_fields << "title" << "author" << "journal" << "booktitle" << "series" << "chapter" << "pages" << "volume" << "number" << "edition" << "institution" << "organization" << "school" << "address" << "month" << "year" << "editor" << "publisher" << "abstract" << "keywords" << "isbn" << "issn" << "doi" << "eprint" << "file" << "url" << "note" << "annote"; _sorted_bibliographic_fields = _bibliographic_fields; qSort(_sorted_bibliographic_fields); } void coreBibParser::setTypes() { _bibliographic_types << "" << "article" << "book" << "booklet" << "conference" << "inbook" << "incollection" << "inproceedings" << "manual" << "mastersthesis" << "misc" << "periodical" << "phdthesis" << "proceedings" << "techreport" << "unpublished"; } void coreBibParser::setRegularExpressions() { _field_re = QRegExp("\\b(" + _bibliographic_fields.join("|") + ")\\b"); _bib_begin_re = QRegExp("@\\w+\\s*\\{"); _bib_begin0_re = QRegExp("^\\s*@\\w+\\s*\\{"); _bib_begin1_re = QRegExp("[\\r\\n]\\s*@\\w+\\s*\\{"); _bib_key_re = QRegExp("^@\\w+\\s*\\{\\s*([\\w:\\.-]+),"); _bib_type_re = QRegExp("^@(\\w+)\\s*\\{"); // List of regular expressions for extracting bib fields for (int i = 0; i < _bibliographic_fields.count(); ++i) { QRegExp bf("\\b" + _bibliographic_fields.at(i) + "\\s*=\\s*[\\{\"]", Qt::CaseInsensitive); // Consider non-braces case (eg. 'year = 2000,') QRegExp bfNB("\\b" + _bibliographic_fields.at(i) + "\\s*=\\s*(\\w*)\\s*,", Qt::CaseInsensitive); // Exception: Process macros for month, to be able to read cb2Bib writing if (_bibliographic_fields.at(i) == "month") { bf.setPattern("\\b" + _bibliographic_fields.at(i) + "\\s*=\\s*[\\{]"); bfNB.setPattern("\\b" + _bibliographic_fields.at(i) + "\\s*=\\s*([\\w\\s~#\"]*)\\s*,"); } bf.setMinimal(true); _bib_fields_re.append(bf); bfNB.setMinimal(true); _bib_fields_nb_re.append(bfNB); } } void coreBibParser::initReferenceParsing(const QString& dir, const QStringList& fields, bibReference* ref) { setReferenceParsingDir(dir); // Init file parsing for given fields ref->clearFields(); ref->clearReference(); ref->bib_fieldList = fields; for (int i = 0; i < fields.count(); ++i) { QRegExp bf("\\b" + fields.at(i) + "\\s*=\\s*[\\{\"]", Qt::CaseInsensitive); // Consider non-braces case (eg. 'year = 2000,') QRegExp bfNB("\\b" + fields.at(i) + "\\s*=\\s*(\\w*)\\s*,", Qt::CaseInsensitive); // Exception: Process macros for month, to be able to read cb2Bib writing if (fields.at(i) == "month") { bf.setPattern("\\b" + fields.at(i) + "\\s*=\\s*[\\{]"); bfNB.setPattern("\\b" + fields.at(i) + "\\s*=\\s*([\\w\\s~#\"]*)\\s*,"); } bf.setMinimal(true); ref->_bib_fields_re.append(bf); bfNB.setMinimal(true); ref->_bib_fields_nb_re.append(bfNB); } } bibReference coreBibParser::wholeReference(const QString& str) { // Skip citeidName and positionValue as they are not needed here // Skip trimming it is done later in bibParser::parse() bibReference ref; int pos(referenceStarts(str)); if (pos < 0) return ref; QString str_ref(referenceAt(str, &pos)); c2bUtils::fullBibToC2b(str_ref); c2bUtils::simplifyString(str_ref); _bib_type_re.indexIn(str_ref); ref.typeName = _bib_type_re.cap(1).toLower(); setReferenceEnd(&str_ref, str_ref.length()); QString fvalue; const int kwi(_bibliographic_fields.indexOf(QLatin1String("keywords"))); for (int i = 0; i < _bib_fields_re.count(); ++i) { QRegExp* bf = &_bib_fields_re[i]; pos = bf->indexIn(str_ref); if (i == kwi) { QString kwv; if (pos > 0) { while (pos > -1) { if (c2bUtils::inBraces(pos + bf->matchedLength(), str_ref, &fvalue)) kwv += ';' + fvalue; pos = bf->indexIn(str_ref, pos + bf->matchedLength()); } } else { bf = &_bib_fields_nb_re[i]; pos = bf->indexIn(str_ref); while (pos > -1) { kwv += ';' + bf->cap(1); pos = bf->indexIn(str_ref, pos + bf->matchedLength()); } } ref[_bibliographic_fields.at(i)] = kwv; } else { if (pos > 0) { if (c2bUtils::inBraces(pos + bf->matchedLength(), str_ref, &fvalue)) ref[_bibliographic_fields.at(i)] = fvalue; } else { bf = &_bib_fields_nb_re[i]; if (bf->indexIn(str_ref) > -1) ref[_bibliographic_fields.at(i)] = bf->cap(1); } } } return ref; } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/bibPreparser.cpp0000644000000000000000000000013213124510216016704 xustar0030 mtime=1498583182.887255862 30 atime=1498583183.007254748 30 ctime=1498583182.887255862 cb2bib-1.9.7/src/c2b/bibPreparser.cpp0000644000175000001440000000450613124510216020303 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "bibPreparser.h" #include "cb2bib_utilities.h" #include "settings.h" #include bibPreparser::bibPreparser(QObject* parento) : QObject(parento) { settings* settingsP = settings::instance(); m_inp_file = settingsP->tempPath() + "/cb2bib_clipborad_inp.tmp_" + settingsP->applicationPid(); m_out_file = settingsP->tempPath() + "/cb2bib_clipborad_out.tmp_" + settingsP->applicationPid(); } void bibPreparser::preparse(const QString& text, QString* out_text) { out_text->clear(); if (!c2bUtils::stringToFile(text + '\n', m_inp_file)) { emit statusMessage(tr("Unable to open the file %1 for writing.").arg(m_inp_file)); return; } // External preparsing QStringList arguments; arguments.append(m_inp_file); arguments.append(m_out_file); QProcess preparser; preparser.start(settings::instance()->fileName("cb2Bib/PreparserBin"), arguments); if (!preparser.waitForFinished(2000)) { preparser.kill(); QFile ifile(m_inp_file); ifile.remove(); QFile ofile(m_out_file); ofile.remove(); emit statusMessage(tr("Failed to call %1.").arg(settings::instance()->fileName("cb2Bib/PreparserBin"))); return; } QFile ifile(m_inp_file); ifile.remove(); (*out_text) = c2bUtils::fileToString(m_out_file, true); if (out_text->isEmpty()) { emit statusMessage(tr("External Parsing ended. Input string remains unchanged.")); (*out_text) = text; } else emit statusMessage(tr("External Parsing ended.")); if (settings::instance()->value("cb2Bib/PreparserShowLog").toBool()) { QString log_string(QString::fromUtf8(preparser.readAllStandardOutput()) + '\n'); log_string += QString::fromUtf8(preparser.readAllStandardError()) + '\n'; log_string += QString("Input[\n%1\n]\n").arg(text); log_string += QString("Output[\n%1\n]\n").arg(*out_text); emit preparserLogAvailable(log_string); } } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/network.cpp0000644000000000000000000000013213124510216015755 xustar0030 mtime=1498583182.915255601 30 atime=1498583183.007254748 30 ctime=1498583182.915255601 cb2bib-1.9.7/src/c2b/network.cpp0000644000175000001440000003111513124510216017350 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "network.h" #include "cb2bib_utilities.h" #include "settings.h" #include #include #include #include #include network::network(QObject* parento) : QObject(parento), _max_redirections(15) { _is_fetching = false; _fetcher = new QNetworkAccessManager(this); connect(_fetcher, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)), this, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*))); loadSettings(); connect(settings::instance(), SIGNAL(newSettings()), this, SLOT(loadSettings())); // Set predefined cookies QNetworkCookieJar* ncj = _fetcher->cookieJar(); QNetworkCookie nc("GSP", "ID=d093ce1ea042ad2b:IN=54afcd58e3b38df9:HIN=ff7e3a3ab3fbae0a+7e6cc990821af63:CF=4"); ncj->setCookiesFromUrl(QList() << nc, QUrl("https://scholar.google.com")); } /**************************************************************************** PUBLIC PART *****************************************************************************/ void network::getFile(const QString& source, const QString& destination, const Action action, QObject* receiver, const char* callback, const bool overwrite) { if (_is_fetching) { c2bUtils::warn(tr("network::getFile: Requesting network while still fetching previous request. Returned")); return; } setup(source, destination); disconnect(this, SIGNAL(requestFinished(bool)), 0, 0); if (receiver) connect(this, SIGNAL(requestFinished(bool)), receiver, callback); if (overwrite) if (QFileInfo(destination).exists()) QFile::remove(destination); getFilePrivate(action); } void network::headFile(const QString& source, QObject* receiver, const char* callback) { if (_is_fetching) { c2bUtils::warn(tr("network::headFile: Requesting network while still fetching previous request. Returned")); return; } setup(source); disconnect(this, SIGNAL(requestFinished(bool)), 0, 0); if (receiver) connect(this, SIGNAL(requestFinished(bool)), receiver, callback); headFilePrivate(); } void network::cancelDownload() { if (_is_fetching) _current_reply->abort(); } /**************************************************************************** PRIVATE PART *****************************************************************************/ void network::getFilePrivate(const Action action) { if (!checkDestination()) { _emit_request_finished(false); return; } if (_source_filename.startsWith("<>")) // cb2Bib keyword to use post http method { _source_filename.remove(QRegExp("^<>")); _fetch_c2b(action, QNetworkAccessManager::PostOperation); return; } if (FmClient) if ((action == Copy && !FmClientCopyBin.isEmpty()) || (action == Move && !FmClientMoveBin.isEmpty())) { _fetch_client(action); return; } _fetch_c2b(action); } void network::headFilePrivate() { const QUrl u(_source_filename, QUrl::TolerantMode); if (u.scheme() == "file" || QFileInfo(_source_filename).exists()) { // Local File const QString fn(u.scheme() == "file" ? u.toLocalFile() : _source_filename); const bool succeeded(QFileInfo(fn).exists()); if (!succeeded) _request_error_string = tr("File does not exist."); _emit_request_finished(succeeded); } else { // Network File _head(u); } } void network::_emit_request_finished(bool succeeded) { _request_succeeded = succeeded; // Give some time to cleanup events and to return all network functions // before passing the control to the callback routine QTimer::singleShot(50, this, SLOT(_emit_request_finished())); } void network::_emit_request_finished() { _is_fetching = false; // Assumed events are clean, all functions returned, then make the callback emit requestFinished(_request_succeeded); } bool network::checkDestination() { // Checks whether or not writing to destination is safe // Returns false if file exists if (QFileInfo(_destination_filename).exists()) { _request_error_string = tr("Destination file '%1' already exists.").arg(_destination_filename); return false; } else return true; } void network::loadSettings() { settings* s(settings::instance()); FmClient = s->value("cb2Bib/FmClient").toBool(); FmClientCopyBin = s->fileName("cb2Bib/FmClientCopyBin"); FmClientMoveBin = s->fileName("cb2Bib/FmClientMoveBin"); FmClientCopyArg = s->value("cb2Bib/FmClientCopyArg").toString(); FmClientMoveArg = s->value("cb2Bib/FmClientMoveArg").toString(); QNetworkProxy proxy; if (s->value("cb2Bib/UseProxy").toBool()) { const QString hn(s->value("cb2Bib/ProxyHostName", QString()).toString()); if (!hn.isEmpty()) { if (s->value("cb2Bib/ProxyType").toInt() == 0) proxy = QNetworkProxy::HttpProxy; else proxy = QNetworkProxy::Socks5Proxy; proxy.setHostName(hn); proxy.setPort(quint16(s->value("cb2Bib/ProxyPort").toInt())); } } _fetcher->setProxy(proxy); } /**************************************************************************** PRIVATE PART: FILEMANAGER CLIENT *****************************************************************************/ void network::_fetch_client(const Action action) { // Getting NetworkFile through kfmclient Action act(action); // Only move local files QUrl u(_source_filename); if (!(u.scheme() == "file" || QFileInfo(_source_filename).exists())) if (action == Move) act = Copy; // Copy network files QStringList arglist; QString fmclient_bin; if (act == Copy) { fmclient_bin = FmClientCopyBin; arglist = FmClientCopyArg.split(' ', QString::SkipEmptyParts); } else if (act == Move) { fmclient_bin = FmClientMoveBin; arglist = FmClientMoveArg.split(' ', QString::SkipEmptyParts); } arglist.append(_source_filename); arglist.append(_destination_filename); _fetcher_client = new QProcess(this); connect(_fetcher_client, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(_client_finished(int, QProcess::ExitStatus))); _fetcher_client->start(fmclient_bin, arglist); if (!_fetcher_client->waitForStarted()) { delete _fetcher_client; _request_error_string = tr("FM Client '%1' could not be launched.").arg(fmclient_bin); _emit_request_finished(false); } } void network::_client_finished(int exitCode, QProcess::ExitStatus exitStatus) { bool succeeded(false); if (exitStatus == QProcess::CrashExit) _request_error_string = tr("FM Client crashed."); else { if (QFileInfo(_destination_filename).exists()) succeeded = true; else _request_error_string = tr("File '%1' has not been written. Exit code '%2'.").arg(_source_filename).arg(exitCode); } delete _fetcher_client; _emit_request_finished(succeeded); } /**************************************************************************** PRIVATE PART: C2B FETCHER *****************************************************************************/ void network::_head(const QUrl& url) { QNetworkRequest request; request.setUrl(url); request.setRawHeader("User-Agent", QString("cb2Bib/" + C2B_VERSION + " (Bibliographic Browser Tool)").toLatin1()); _current_reply = _fetcher->head(request); connect(_current_reply, SIGNAL(finished()), SLOT(_head_finished())); } void network::_head_finished() { if (_redirection_count++ < _max_redirections) { const QUrl redirection(_current_reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl()); if (redirection.isValid()) { const QUrl ru(_current_reply->url().resolved(redirection)); _source_filename = ru.toString(); _current_reply->deleteLater(); _head(ru); return; } } const bool succeeded(_current_reply->error() == QNetworkReply::NoError); if (succeeded) _file_mimetype_string = _current_reply->header(QNetworkRequest::ContentTypeHeader).toString(); else _request_error_string = _current_reply->errorString() + '.'; _current_reply->deleteLater(); _emit_request_finished(succeeded); } void network::_fetch_c2b(const Action action, const QNetworkAccessManager::Operation operation) { _fetch_operation = operation; _fetch_url_query.clear(); QString url_str; if (_fetch_operation == QNetworkAccessManager::PostOperation) { const int qmark(_source_filename.indexOf('?')); url_str = _source_filename.mid(0, qmark); if (qmark > -1) { url_str += '/'; _fetch_url_query = _source_filename.mid(qmark + 1).toUtf8(); } } else url_str = _source_filename; QUrl u(url_str, QUrl::TolerantMode); if (u.scheme() == "file" || QFileInfo(_source_filename).exists()) { // Local File QFile source(u.scheme() == "file" ? u.toLocalFile() : _source_filename); bool succeeded(false); if (action == Copy) succeeded = source.copy(_destination_filename); else if (action == Move) succeeded = source.rename(_destination_filename); if (!succeeded) _request_error_string = source.errorString(); _emit_request_finished(succeeded); } else { // Network File _fetch(u); } } void network::_fetch(const QUrl& url) { _destination_file.setFileName(_destination_filename); if (!_destination_file.open(QIODevice::WriteOnly)) { _request_error_string = tr("File '%1' cannot be written. %2").arg(_destination_filename).arg(_destination_file.errorString()); _emit_request_finished(false); return; } QNetworkRequest request; request.setUrl(url); request.setRawHeader("User-Agent", QString("cb2Bib/" + C2B_VERSION + " (Bibliographic Browser Tool)").toLatin1()); if (_fetch_operation == QNetworkAccessManager::PostOperation) { request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); _current_reply = _fetcher->post(request, _fetch_url_query); } else _current_reply = _fetcher->get(request); connect(_current_reply, SIGNAL(readyRead()), this, SLOT(_fetch_ready_read())); connect(_current_reply, SIGNAL(finished()), SLOT(_fetch_finished())); connect(_current_reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(logError())); connect(_current_reply, SIGNAL(downloadProgress(qint64, qint64)), this, SIGNAL(downloadProgress(qint64, qint64))); } void network::_fetch_finished() { _destination_file.close(); if (_current_reply->error() == QNetworkReply::OperationCanceledError) _destination_file.remove(); // Delete file else if (_redirection_count++ < _max_redirections) { const QUrl redirection(_current_reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl()); if (redirection.isValid()) { const QUrl ru(_current_reply->url().resolved(redirection)); _source_filename = ru.toString(); const int status(_current_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt()); if ((status >= 301 && status <= 303) || status == 307) _fetch_operation = QNetworkAccessManager::GetOperation; _current_reply->deleteLater(); _fetch(ru); return; } } const bool succeeded(_current_reply->error() == QNetworkReply::NoError); if (succeeded) _file_mimetype_string = _current_reply->header(QNetworkRequest::ContentTypeHeader).toString(); else _request_error_string = _current_reply->errorString() + '.'; _current_reply->deleteLater(); _emit_request_finished(succeeded); } void network::_fetch_ready_read() { _destination_file.write(_current_reply->readAll()); } void network::logError() { c2bUtils::warn(tr("network::QNetworkReply log: %1").arg(_current_reply->errorString())); } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/collectionAnalyzer.cpp0000644000000000000000000000013213124510216020125 xustar0030 mtime=1498583182.895255788 30 atime=1498583183.007254748 30 ctime=1498583182.895255788 cb2bib-1.9.7/src/c2b/collectionAnalyzer.cpp0000644000175000001440000002175613124510216021532 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "collectionAnalyzer.h" #include "settings.h" #include #include #include template class lengthsorting { public: explicit lengthsorting(const T& data) : _data(data) {} inline bool operator()(const int i, const int j) { const int ni(_data[i].length()); const int nj(_data[j].length()); if (ni == nj) return _data[i] < _data[j]; else return ni < nj; } private: const T& _data; }; // Template double_sort was adapted from qSortHelper by Pere Constans. // qSortHelper is copyrighted by: // Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies), // and released under GLP/LGPL license. // http://www.qt.gitorious.org/qt/qt/blobs/4.7/src/corelib/tools/qalgorithms.h template void double_sort(int start, int end, T1* v1, T2* v2) { top: int span = end - start; if (span < 2) return; --end; int low = start; int high = end - 1; int pivot = start + span / 2; if ((*v1)[end] > (*v1)[start]) { qSwap((*v1)[end], (*v1)[start]); qSwap((*v2)[end], (*v2)[start]); } if (span == 2) return; if ((*v1)[pivot] > (*v1)[start]) { qSwap((*v1)[pivot], (*v1)[start]); qSwap((*v2)[pivot], (*v2)[start]); } if ((*v1)[end] > (*v1)[pivot]) { qSwap((*v1)[end], (*v1)[pivot]); qSwap((*v2)[end], (*v2)[pivot]); } if (span == 3) return; qSwap((*v1)[pivot], (*v1)[end]); qSwap((*v2)[pivot], (*v2)[end]); while (low < high) { while (low < high && (*v1)[low] > (*v1)[end]) ++low; while (high > low && (*v1)[end] > (*v1)[high]) --high; if (low < high) { qSwap((*v1)[low], (*v1)[high]); qSwap((*v2)[low], (*v2)[high]); ++low; --high; } else break; } if ((*v1)[low] > (*v1)[end]) ++low; qSwap((*v1)[end], (*v1)[low]); qSwap((*v2)[end], (*v2)[low]); double_sort(start, low, v1, v2); start = low + 1; ++end; goto top; } collectionAnalyzer::collectionAnalyzer() : _ndocuments(0), _nsentences(0), _nsimilar(0), _settingsP(settings::instance()) {} void collectionAnalyzer::reload() { _ndocuments = 0; _nsentences = 0; _nsimilar = 0; _document_keyword.clear(); _keyword_document_fn.clear(); _similar_document_fn.clear(); const QString cache_dir(_settingsP->fileName("cb2Bib/CacheDirectory")); _documentslf_fn = QDir::cleanPath(cache_dir + "/documents.lc2b"); QFile documentslf(_documentslf_fn); if (documentslf.open(QIODevice::ReadOnly)) { QDataStream stream(&documentslf); stream >> _ndocuments; _documents.resize(_ndocuments); for (int i = 0; i < _ndocuments; ++i) stream >> _documents[i]; documentslf.close(); } _similar.resize(_ndocuments); _similarity.resize(_ndocuments); _sentenceslf_fn = QDir::cleanPath(cache_dir + "/sentences.lc2b"); QFile sentenceslf(_sentenceslf_fn); if (sentenceslf.open(QIODevice::ReadOnly)) { QDataStream stream(&sentenceslf); stream >> _nsentences; _sentences.resize(_nsentences); for (int i = 0; i < _nsentences; ++i) stream >> _sentences[i]; sentenceslf.close(); } _documentsif_fn = QDir::cleanPath(cache_dir + "/documents.ic2b"); QFile documentsif(_documentsif_fn); if (documentsif.open(QIODevice::ReadOnly)) { QDataStream stream(&documentsif); _document_norms.resize(_ndocuments); int ns; int ss; for (int d = 0; d < _ndocuments; ++d) { stream >> ns; _document_norms[d] = ns; for (int s = 0; s < ns; ++s) stream >> ss; } documentsif.close(); } _sentencesif_fn = QDir::cleanPath(cache_dir + "/sentences.ic2b"); } void collectionAnalyzer::setDocumentKeywords(const QString& documentfn) { if (documentfn == _keyword_document_fn) return; _keyword_document_fn = documentfn; _document_keyword_ids.clear(); QVector dsentences; grepDocuments(documentfn, &dsentences); const int ndsentences(dsentences.size()); if (ndsentences == 0) return; lengthsorting< QVarLengthArray > ls(_sentences); qSort(dsentences.begin(), dsentences.end(), ls); for (int i = 0; i < ndsentences; ++i) { const QString& si(_sentences[dsentences.at(i)]); bool redundant(false); for (int j = i + 1; j < ndsentences; ++j) if (_sentences[dsentences.at(j)].contains(si)) { redundant = true; break; } if (!redundant) _document_keyword_ids.append(dsentences.at(i)); } qSort(_document_keyword_ids); } void collectionAnalyzer::setKeywordDocuments(const QString& keyword) { if (keyword == _document_keyword) return; _document_keyword = keyword; grepSentences(keyword, &_sdocuments); } void collectionAnalyzer::setSimilarDocuments(const QString& documentfn) { if (documentfn == _similar_document_fn) return; _similar_document_fn = documentfn; _nsimilar = 0; QVector dsentences; grepDocuments(documentfn, &dsentences); const int ndsentences(dsentences.size()); if (ndsentences == 0) return; QVarLengthArray overlaps(_ndocuments); for (int i = 0; i < _ndocuments; ++i) overlaps[i] = 0; QFile sentencesif(_sentencesif_fn); if (sentencesif.open(QIODevice::ReadOnly)) { QDataStream stream(&sentencesif); int nd; int dd; int s0(0); for (int i = 0; i < ndsentences; ++i) { const int sentenceid(dsentences[i]); for (int s = s0; s < sentenceid; ++s) { stream >> nd; for (int d = 0; d < nd; ++d) stream >> dd; } stream >> nd; for (int d = 0; d < nd; ++d) { stream >> dd; overlaps[dd] += 1; } s0 = sentenceid + 1; } sentencesif.close(); } const int documentid(_document_id(documentfn)); for (int i = 0; i < _ndocuments; ++i) { const int o(overlaps[i]); if (o == 0) continue; const double s(double(o) / sqrt(double(_document_norms[documentid] * _document_norms[i]))); if (s < 0.051) continue; _similarity[_nsimilar] = s; _similar[_nsimilar++] = i; } double_sort(0, _nsimilar, &_similarity, &_similar); } void collectionAnalyzer::skipSimilarDocument(const int i) { --_nsimilar; for (int j = i; j < _nsimilar; ++j) _similarity[j] = _similarity[j+1]; for (int j = i; j < _nsimilar; ++j) _similarity[j] = _similarity[j+1]; } void collectionAnalyzer::grepDocuments(const QString& documentfn, QVector* dsentences) const { dsentences->clear(); const int documentid(_document_id(documentfn)); if (documentid == -1) return; QFile documentsif(_documentsif_fn); if (documentsif.open(QIODevice::ReadOnly)) { QDataStream stream(&documentsif); int ns; int ss; for (int d = 0; d < documentid; ++d) { stream >> ns; for (int s = 0; s < ns; ++s) stream >> ss; } stream >> ns; dsentences->resize(ns); for (int s = 0; s < ns; ++s) stream >> (*dsentences)[s]; documentsif.close(); } } void collectionAnalyzer::grepSentences(const QString& keyword, QVarLengthArray* sdocuments) const { sdocuments->clear(); const int sentenceid(_sentence_id(keyword)); if (sentenceid == -1) return; QFile sentencesif(_sentencesif_fn); if (sentencesif.open(QIODevice::ReadOnly)) { QDataStream stream(&sentencesif); int nd; int dd; for (int s = 0; s < sentenceid; ++s) { stream >> nd; for (int d = 0; d < nd; ++d) stream >> dd; } stream >> nd; sdocuments->resize(nd); for (int d = 0; d < nd; ++d) stream >> (*sdocuments)[d]; sentencesif.close(); } } int collectionAnalyzer::_document_id(const QString& documentfn) const { for (int i = 0; i < _ndocuments; ++i) if (_documents[i] == documentfn) return i; return -1; } int collectionAnalyzer::_sentence_id(const QString& keyword) const { for (int i = 0; i < _nsentences; ++i) if (_sentences[i] == keyword) return i; return -1; } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/c2blib.pro0000644000000000000000000000007413124510115015442 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.635258201 cb2bib-1.9.7/src/c2b/c2blib.pro0000644000175000001440000000072513124510115017033 0ustar00constansusers00000000000000LANGUAGE = C++ HEADERS += $$files(*.h) SOURCES += $$files(*.cpp) SOURCES -= $$files(moc_*.cpp) SOURCES -= $$files(qrc_*.cpp) RESOURCES += c2blib.qrc INCLUDEPATH += . QT = core network win32 { TARGET = ../../c2b } else { TARGET = ../c2b } CONFIG -= dll CONFIG += staticlib VERSION = 0.0.0 TEMPLATE = lib QMAKE_CXXFLAGS_DEBUG += -DC2B_DEBUG CONFIG += use_lzo use_lzo { DEFINES += C2B_USE_LZO } disable_lzo { CONFIG -= use_lzo DEFINES -= C2B_USE_LZO } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/documentCache.cpp0000644000000000000000000000013213124510216017026 xustar0030 mtime=1498583182.903255713 30 atime=1498583183.007254748 30 ctime=1498583182.903255713 cb2bib-1.9.7/src/c2b/documentCache.cpp0000644000175000001440000001073713124510216020430 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "documentCache.h" #include "cb2bib_utilities.h" #include "document.h" #include "settings.h" #include "triads.h" #include documentCache::documentCache() : _current(_cache), _content_type(documentContents::Complete), _cache_load_size(0), _settingsP(settings::instance()) {} documentCache::~documentCache() { save(); } void documentCache::load(const QString& fn, const documentContents::Type type) { _content_type = type; if (_load_filename == fn) return; unload(); _load_filename = fn; const QString cache_dir(_settingsP->fileName("cb2Bib/CacheDirectory")); if (QFileInfo(cache_dir).exists() && QFileInfo(cache_dir).isDir()) _cache_filename = QDir::cleanPath(cache_dir + '/' + QFileInfo(_load_filename).fileName() + ".c2b"); else _cache_filename = _load_filename.trimmed() + ".c2b"; if (QFileInfo(_cache_filename).exists()) { QFile file(_cache_filename); if (file.open(QIODevice::ReadOnly)) { QDataStream ds(&file); ds >> _cache; } } #ifdef C2B_USE_LZO if (!_cache.contains("lzo")) { _cache.clear(); _cache.insert("lzo", QByteArray()); } #else if (!_cache.contains("zlib")) { _cache.clear(); _cache.insert("zlib", QByteArray()); } #endif _cache_load_size = _cache.size(); } void documentCache::unload() { // Release cache memory save(); _cache.clear(); _cache_filename.clear(); _cache_load_size = 0; _load_filename.clear(); } bool documentCache::setCurrent(const QString& fn, int* pdfCounter, QString* logString, int* errorCounter) { const QString doc_fn(fn.trimmed()); if (doc_fn.isEmpty()) { _current.clear(); return false; } const QString skey("sign:" + doc_fn); const QString tkey(doc_fn); _current.preload(skey, tkey, _content_type); if (!_cache.contains(tkey)) { document doc(doc_fn, document::Complete); _current._text = doc.toString(); if (!doc.errorString().isEmpty()) { ++(*errorCounter); (*logString) += QObject::tr("% [cb2bib] %1\n").arg(doc.errorString()); return false; } _cache.insert(doc_fn, c2bUtils::compress(_current._text.toUtf8())); if (_content_type == documentContents::Simplified) { _current._text = c2bUtils::toAscii(_current._text, c2bUtils::KeepWords); _current._signature = triads::asciiTextSignature(_current._text); } else _current._signature = triads::textSignature(_current._text); _cache.insert(skey, _current._signature.toUtf8()); _current._is_text_loaded = true; _current._is_signature_loaded = true; } ++(*pdfCounter); return true; } bool documentCache::setCurrent(const QString& fn) { const QString doc_fn(fn.trimmed()); if (doc_fn.isEmpty()) { _current.clear(); return false; } const QString skey("sign:" + doc_fn); const QString tkey(doc_fn); _current.preload(skey, tkey, _content_type); if (!_cache.contains(tkey)) { document doc(doc_fn, document::Complete); _current._text = doc.toString(); if (!doc.errorString().isEmpty()) return false; _cache.insert(doc_fn, c2bUtils::compress(_current._text.toUtf8())); if (_content_type == documentContents::Simplified) { _current._text = c2bUtils::toAscii(_current._text, c2bUtils::KeepWords); _current._signature = triads::asciiTextSignature(_current._text); } else _current._signature = triads::textSignature(_current._text); _cache.insert(skey, _current._signature.toUtf8()); _current._is_text_loaded = true; _current._is_signature_loaded = true; } return true; } void documentCache::save() { if (_cache_load_size != _cache.size() && !_cache_filename.isEmpty()) { QFile file(_cache_filename); if (file.open(QIODevice::WriteOnly)) { QDataStream ds(&file); ds << _cache; } } } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/triads.h0000644000000000000000000000013213124510216015217 xustar0030 mtime=1498583182.983254971 30 atime=1498583183.007254748 30 ctime=1498583182.987254933 cb2bib-1.9.7/src/c2b/triads.h0000644000175000001440000000162513124510216016615 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef TRIADS_H #define TRIADS_H #include class triads { public: static const QString asciiTextSignature(const QString& str); static const QString textSignature(const QString& str); static const QVector textSignature(const QStringList& strs); static const QVector textFrequency(const QStringList& strs); static int textFrequency(const QString& str); private: inline triads() {} inline ~triads() {} static int _rank(const QString& str, const QString& sign, const QString& ranks); }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/triads.cpp0000644000000000000000000000013213124510216015552 xustar0030 mtime=1498583182.931255453 30 atime=1498583183.007254748 30 ctime=1498583182.931255453 cb2bib-1.9.7/src/c2b/triads.cpp0000644000175000001440000000570713124510216017155 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "triads.h" #include "cb2bib_utilities.h" #include const QString triads::textSignature(const QString& str) { if (str.isEmpty()) return QString(); else return asciiTextSignature(c2bUtils::toAscii(str, c2bUtils::KeepWords)); } const QVector triads::textSignature(const QStringList& strs) { QVector s(strs.count()); for (int i = 0; i < strs.count(); ++i) s[i] = textSignature(strs.at(i)); return s; } const QString triads::asciiTextSignature(const QString& str) { QString s(str); s.replace(c2bUtils::nonAsciiLetter, " "); s = s.toLower(); s = c2bUtils::simplifyString(s); const int nletters(26); const int ngram(5); const int slength(s.length()); const int code0(QChar('a').unicode()); QHash triads; for (int i = 0; i <= slength - ngram; ++i) { const QString t(s.mid(i, ngram)); if (t.contains(' ')) continue; int t1 = s.at(i).unicode() - code0; int t2 = s.at(i + 2).unicode() - code0; int t3 = s.at(i + 4).unicode() - code0; int code = code0 + t1 * nletters * nletters + t2 * nletters + t3; if (!triads.contains(code)) triads.insert(code, 1); } QList codes(triads.keys()); qSort(codes); s.clear(); for (int i = 0; i < codes.count(); ++i) s += QChar(codes.at(i)); return s; } int triads::textFrequency(const QString& str) { const QString sign(textSignature(str)); if (sign.length() == 0) return 1000 - str.length(); else return _rank(str, sign, c2bUtils::fileToString(":txt/txt/triads.txt")); } const QVector triads::textFrequency(const QStringList& strs) { if (strs.count() == 0) return QVector(); const QString ranks(c2bUtils::fileToString(":txt/txt/triads.txt")); QVector fr(strs.count()); for (int i = 0; i < strs.count(); ++i) { const QString sign(textSignature(strs.at(i))); if (sign.length() == 0) fr[i] = 1000 - strs.at(i).length(); else fr[i] = _rank(strs.at(i), sign, ranks); } return fr; } int triads::_rank(const QString& str, const QString& sign, const QString& ranks) { const int m(sign.length()); const int n(ranks.length()); int counter(0); int j0(0); for (int i = 0; i < m; ++i) for (int j = j0; j < n; ++j) if (sign[i] == ranks[j]) { ++counter; j0 = j + 1; break; } counter = 100 * (m - counter) + str.length(); return 1000 - counter; } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/idMaker.h0000644000000000000000000000013213124510216015305 xustar0030 mtime=1498583182.963255156 30 atime=1498583183.007254748 30 ctime=1498583182.963255156 cb2bib-1.9.7/src/c2b/idMaker.h0000644000175000001440000000277413124510216016711 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * * Improvements and modifications: * July 2009 - Added <>, (C) 2009 by Dayu Huang ***************************************************************************/ #ifndef IDMAKER_H #define IDMAKER_H #include "bibReference.h" #include /** @author Pere Constans */ class idMaker : public QObject { Q_OBJECT public: idMaker(const QString& patternKey, QObject* parento = 0); inline ~idMaker() {} QString makeID(const bibReference& reference); private: QString _author; QString _id_pattern; QString _journal; QString _pages; QString _title; QString _title_pattern; QString _volume; QString _year; bool _is_title_underscored; const QString _pattern_key; int _title_max_length; void make_author_all_abbreviated(QString* id); void make_author_all_initials(QString* id); void make_author_first(QString* id); void make_journal_initials(QString* id); void make_pages_first(QString* id); void make_ppages_first(QString* id); void make_title(QString* id); void make_volume(QString* id); void make_year_abbreviated(QString* id); void make_year_full(QString* id); private slots: void loadSettings(); }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/documentContents.h0000644000000000000000000000013213124510216017265 xustar0030 mtime=1498583182.959255193 30 atime=1498583183.007254748 30 ctime=1498583182.959255193 cb2bib-1.9.7/src/c2b/documentContents.h0000644000175000001440000000404513124510216020662 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef DOCUMENTCONTENTS_H #define DOCUMENTCONTENTS_H #include "cb2bib_utilities.h" #include #include class documentContents { public: enum Type {Simplified, Complete}; inline const QString& signature() const { if (!_is_signature_loaded) { _signature = QString::fromUtf8(_cache.value(_signature_key)); _is_signature_loaded = true; } return _signature; } inline const QString& text() const { if (!_is_text_loaded) { if (_type == Simplified) _text = c2bUtils::toAscii(c2bUtils::fromUtf8(c2bUtils::uncompress(_cache.value(_text_key))), c2bUtils::KeepWords); else _text = c2bUtils::fromUtf8(c2bUtils::uncompress(_cache.value(_text_key))); _is_text_loaded = true; } return _text; } private: inline explicit documentContents(const QHash& cache) : _cache(cache) {} inline ~documentContents() {} inline void clear() { _is_signature_loaded = false; _is_text_loaded = false; _signature.clear(); _signature_key.clear(); _text.clear(); _text_key.clear(); } inline void preload(const QString& skey, const QString& tkey, const Type type) { clear(); _signature_key = skey; _text_key = tkey; _type = type; } QString _signature_key; QString _text_key; Type _type; const QHash& _cache; mutable QString _signature; mutable QString _text; mutable bool _is_signature_loaded; mutable bool _is_text_loaded; friend class documentCache; }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/collectionIndex.h0000644000000000000000000000013213124510216017054 xustar0030 mtime=1498583182.951255268 30 atime=1498583183.007254748 30 ctime=1498583182.951255268 cb2bib-1.9.7/src/c2b/collectionIndex.h0000644000175000001440000000433313124510216020451 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef COLLECTIONINDEX_H #define COLLECTIONINDEX_H #include #include #include class bibParser; class settings; class QTextStream; class collectionIndex { public: explicit collectionIndex(bibParser* bp); ~collectionIndex(); int index(const QString& dir); private: struct KeysentenceData { inline KeysentenceData() : ndocuments(0) {} inline explicit KeysentenceData(const int document) : ndocuments(1) { documents.append(document); } inline void update(const int document) { ++ndocuments; documents.append(document); } int ndocuments; QList documents; }; inline static bool _last_equals_first(const QString& text) { const ushort* r((const ushort*)text.constData()); const ushort* const cn(r + text.length()); const ushort* s; for (s = cn - 1; s > r; --s) if (*s == 32) break; ++s; while (s < cn) if (*(s++) != *(r++)) return false; return *r == 32; } KeysentenceData* _digest_sentence(KeysentenceData* ksd, KeysentenceData* ksdndmax, int* ndmax) const; QString preprocessedText(const QString& journal, const QString& text) const; QString& replace(QString& str, const QChar& a, const QChar& b) const; bool isValidKeySentence(const QString& text) const; void analyzeKeySentences(); void cleanupKeySentences(); void digestKeySentences(); void setKeySentences(const int documentid, const QString& text); QTextStream& _out; bibParser* _bpP; const QChar _space_char; int _nerrors; settings* _settingsP; QMap _keysentences; QMultiHash _document_sentences; QMultiHash _document_sentenceids; }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/posTagger.h0000644000000000000000000000013213124510216015664 xustar0030 mtime=1498583182.971255081 30 atime=1498583183.007254748 30 ctime=1498583182.971255081 cb2bib-1.9.7/src/c2b/posTagger.h0000644000175000001440000000322213124510216017255 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef POSTAGGER_H #define POSTAGGER_H #include #include class posTagger { public: posTagger(); inline ~posTagger() {} QString ruletag(const QString& word) const; QString tagged(const QString& text) const; bool loadLexicon(); inline bool contains(const QString& sentence) const { return _sentence_patterns.contains(sentence); } private: const QChar _period; const QChar _space; const QString _pos_a; const QString _pos_g; const QString _pos_n; const QString _pos_o; const QString _pos_r; const QString _pos_s; const QString _suffix_able; const QString _suffix_ae; const QString _suffix_al; const QString _suffix_apostrophes; const QString _suffix_ar; const QString _suffix_ed; const QString _suffix_ful; const QString _suffix_ic; const QString _suffix_ics; const QString _suffix_ing; const QString _suffix_is; const QString _suffix_ive; const QString _suffix_lent; const QString _suffix_less; const QString _suffix_like; const QString _suffix_ly; const QString _suffix_ous; const QString _suffix_s; const QString _suffix_ss; const QString _suffix_us; QHash _lexicon; QHash _sentence_patterns; }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/substringMatcher.cpp0000644000000000000000000000013113124510216017607 xustar0030 mtime=1498583182.923255528 30 atime=1498583183.007254748 29 ctime=1498583182.92725549 cb2bib-1.9.7/src/c2b/substringMatcher.cpp0000644000175000001440000000575513124510216021216 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "substringMatcher.h" #include "cb2bib_utilities.h" #include "triads.h" substringMatcher::substringMatcher() : _hook(-1), _substring_count(0), _matched_length(-1), _p0(0), _pn(0) {} substringMatcher::substringMatcher(const QString& pattern, const Qt::CaseSensitivity cs) : _hook(-1), _matched_length(-1), _p0(0), _pn(0) { QRegExp sep("\\.\\{(\\d+),(\\d+)\\}"); QStringList substrings(pattern.split(sep, QString::SkipEmptyParts)); Q_ASSERT_X(substrings.count() >= 2, "substringMatcher", "Expected at least two substrings in pattern"); int s(0); QList stretches; while ((s = sep.indexIn(pattern, s)) != -1) { Q_ASSERT_X(sep.captureCount() == 2, "substringMatcher", "Expected two digits in repetition"); Q_ASSERT_X(sep.cap(1).toInt() == 0, "substringMatcher", "Expected zero in first repetition digit"); stretches.append(sep.cap(2).toInt()); s += sep.matchedLength(); } Q_ASSERT_X(substrings.count() == stretches.count() + 1, "substringMatcher", "Mismatch in pattern"); _substring_count = substrings.count(); _substrings.resize(_substring_count); _lengths.resize(_substring_count); for (int i = 0; i < _substring_count; ++i) { _substrings[i] = QStringMatcher(substrings.at(i), cs); _lengths[i] = substrings.at(i).length(); } _stretches.resize(_substring_count); _stretches[0] = 0; for (int i = 1; i < _substring_count; ++i) _stretches[i] = stretches.at(i - 1); _acc_lengths.fill(0, _substring_count); for (int i = 1; i < _substring_count; ++i) _acc_lengths[i] = _acc_lengths[i-1] + _lengths.at(i - 1); int lf(10000); for (int i = 0; i < _substring_count; ++i) { const int f(triads::textFrequency(substrings.at(i))); if (f < lf) { lf = f; _hook = i; } } #if C2B_DEBUG_SUBSTRINGMATCHER qDebug() << "Pattern:" << pattern; qDebug() << "Hook:" << substrings.at(_hook); #endif } int substringMatcher::indexIn(const QString& str, const int from) const { _matched_length = -1; if (_hook == -1) { c2bUtils::warn(QObject::tr("Warning: Uninitialized substringMatcher")); return -1; } _p0 = from; if (_p0 < 0) _p0 = 0; _pn = str.length(); if (_pn == 0) return -1; int hp(_p0); int p(-1); while (p == -1) { hp = _index_in(_hook, str, hp + _acc_lengths.at(_hook)); #if C2B_DEBUG_SUBSTRINGMATCHER qDebug() << "Hook at" << hp; #endif if (hp == -1) return -1; p = _index_around(str, hp); hp += _lengths.at(_hook); } return p; } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/texParser.cpp0000644000000000000000000000013013124510216016237 xustar0029 mtime=1498583182.92725549 30 atime=1498583183.007254748 29 ctime=1498583182.92725549 cb2bib-1.9.7/src/c2b/texParser.cpp0000644000175000001440000000747413124510216017647 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "texParser.h" #include "cb2bib_utilities.h" void texParser::parse(QString tex) { _stream.setString(&tex, QIODevice::ReadOnly); _paragraph.clear(); _stop_parsing = false; while (!_stream.atEnd() && !_stop_parsing) { readLine(true); if (_line.isEmpty()) { flush(); parseEmptyLine(); } else if (_line.startsWith('%')) { flush(); parseComment(_line); } else if (_line.startsWith('\\')) doElement(); else _paragraph += ' ' + _line; } flush(); } void texParser::doElement() { if (_line.startsWith("\\begin{")) gotoEnd("begin"); else if (_line.startsWith("\\section{")) gotoEndBraces("section"); else if (_line.startsWith("\\subsection{")) gotoEndBraces("subsection"); else if (_line.startsWith("\\subsubsection{")) gotoEndBraces("subsubsection"); else if (_line.startsWith("\\title{")) gotoEndBraces("title"); else if (_line.startsWith("\\author{")) gotoEndBraces("author"); else if (_line.startsWith("\\newcommand{")) gotoEndMacro("newcommand"); else if (_line.startsWith("\\documentclass")) flushLaTeXMarkup("documentclass"); else if (_line.startsWith("\\maketitle")) flushLaTeXMarkup("maketitle"); else if (_line.startsWith("\\end{document}")) flushLaTeXMarkup("document"); else if (_line.startsWith("\\bibliography")) flushLaTeXMarkup("bibliography"); else _paragraph += ' ' + _line; } void texParser::gotoEnd(const QString& e) { QString block_name; QString block_contents; const int pos(e.length() + 2); c2bUtils::inBraces(pos, _line, &block_name); if (block_name == "document") { flushLaTeXMarkup("document"); return; } QRegExp end_block(QString("^\\s*\\\\end\\{%1\\}").arg(block_name)); _element = _line; while (!_stream.atEnd()) { readLine(); if (_line.contains(end_block)) { _element += '\n' + _line.trimmed(); break; } else { _element += '\n' + _line; block_contents += '\n' + _line; } } flushElement(block_name, block_contents); } void texParser::gotoEndBraces(const QString& e) { QString in; const int pos(e.length() + 2); _element = _line; while (!_stream.atEnd() && !c2bUtils::inBraces(pos, _element, &in)) _element += '\n' + readLine(); flushElement(e, c2bUtils::simplifyString(in)); } void texParser::gotoEndMacro(const QString& e) { // Macro syntax: \newcommand{name}[number of arguments]{definition} int line_init_pos(e.length() + 3); int element_init_pos(0); _element = _line; while (!_stream.atEnd()) { // Find the begining of macro definition for (int pos = line_init_pos; pos < _line.length(); ++pos) if (_line.at(pos) == '{') { QString in; while (!_stream.atEnd() && !c2bUtils::inBraces(element_init_pos + pos + 1, _element, &in)) _element += '\n' + readLine(); in = _element; in.remove('\\' + e); flushElement(e, c2bUtils::simplifyString(in)); return; } // Try next line line_init_pos = 0; element_init_pos = _element.length() + 1; _element += '\n' + readLine(); } } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/wordPattern.cpp0000644000000000000000000000013213124510216016575 xustar0030 mtime=1498583182.931255453 30 atime=1498583183.007254748 30 ctime=1498583182.935255416 cb2bib-1.9.7/src/c2b/wordPattern.cpp0000644000175000001440000000413313124510216020170 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "wordPattern.h" #include "cb2bib_utilities.h" #include "triads.h" wordPattern::wordPattern() : compositePattern(), _type(AllWords) {} wordPattern::wordPattern(const QString& pattern, const Type type, const Qt::CaseSensitivity cs) : compositePattern(pattern, cs), _type(type) { setPattern(pattern, type, cs); } void wordPattern::setPattern(const QString& pattern, const Type type, const Qt::CaseSensitivity cs) { _string = pattern.simplified(); _type = type; _case_sensitivity = cs; _is_multipattern = false; _matched_length = -1; const QStringList words(_string.split(c2bUtils::nonLetter, QString::SkipEmptyParts)); _subpattern_count = words.count(); if (_subpattern_count == 0) return; _ranks.clear(); QStringList subpattern; QStringList substring; for (int i = 0; i < words.count(); ++i) { const QString& wi = words.at(i); const QString sp(escape(wi, _case_sensitivity)); subpattern.append(sp); substring.append(wi); _ranks.append(triads::textFrequency(wi)); // Rank according expectation (arXiv:0705.0751v1, Eq. 6) } set_sort_index(); if (_subpattern_count == 1) _regexp.setPattern(escape(_string, _case_sensitivity)); else _regexp.setPattern(QString("(?:%1)").arg(subpattern.join("|"))); _submatchers.resize(_subpattern_count); _subregexps.resize(_subpattern_count); _substrings.clear(); for (int i = 0; i < _subpattern_count; ++i) { const int ii(_index.at(i)); _submatchers[i] = QStringMatcher(substring.at(ii), _case_sensitivity); _subregexps[i].setPattern(subpattern.at(ii)); _substrings.append(substring.at(ii)); } _is_multipattern = _subpattern_count > 1; } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/bibExtractor.h0000644000000000000000000000013213124510216016361 xustar0030 mtime=1498583182.939255379 30 atime=1498583183.007254748 30 ctime=1498583182.939255379 cb2bib-1.9.7/src/c2b/bibExtractor.h0000644000175000001440000000325713124510216017762 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef BIBEXTRACTOR_H #define BIBEXTRACTOR_H #include class bibParser; class metadataParser; class networkQuery; class settings; class QEventLoop; class QTextStream; /** Wrapper class for handling the whole bibliographic extraction/recognition process. */ class bibExtractor : public QObject { Q_OBJECT public: explicit bibExtractor(QObject* parento = 0); bibExtractor(bibParser* bp, metadataParser* mp, networkQuery* nq, QObject* parento = 0); ~bibExtractor(); enum InputType {PlainText, Document}; int extract(const QString& text, QString* bibtex); int extract(const QStringList& input_fns, const QString& output_fn, const InputType& type); private: InputType _input_type; QEventLoop* _event_loop; QString _document_fn; QString documentToString(const QString& fn) const; QTextStream& cout; bibParser* _bpP; bool _is_copymove_ok; bool isReliable() const; metadataParser* _mpP; networkQuery* _networkQP; settings* _settingsP; void _extract(const QString& text); void extract(const QString& text); void init(); private slots: void copyMoveEnded(bool ok); void logMessage(const QString& ms) const; void proxyLogMessage() const; void queryEnded(bool succeeded, const QString& targetPDF, const QString& targetBib); }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/compositePattern.cpp0000644000000000000000000000013013124510216017622 xustar0029 mtime=1498583182.89925575 30 atime=1498583183.007254748 29 ctime=1498583182.89925575 cb2bib-1.9.7/src/c2b/compositePattern.cpp0000644000175000001440000000352613124510216021224 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "compositePattern.h" #include "cb2bib_utilities.h" template class descending { public: explicit descending(const T& data) : _data(data) {} inline bool operator()(const int i, const int j) { return _data.at(i) > _data.at(j); } private: const T& _data; }; compositePattern::compositePattern() : _case_sensitivity(Qt::CaseSensitive), _is_multipattern(false), _subpattern_count(0), _matched_length(-1) {} compositePattern::compositePattern(const QString& pattern, const Qt::CaseSensitivity cs) : _string(pattern.simplified()), _case_sensitivity(cs), _is_multipattern(false), _subpattern_count(0), _matched_length(-1) {} QString compositePattern::escape(const QString& str, const Qt::CaseSensitivity cs) { if (cs == Qt::CaseSensitive) return QRegularExpression::escape(str); QString scaped; for (int i = 0; i < str.length(); ++i) if (str.at(i).isLetter()) scaped += QString("[%1%2]").arg(str.at(i).toUpper()).arg(str.at(i).toLower()); else scaped += QRegularExpression::escape(str.at(i)); return scaped; } void compositePattern::set_sort_index() { Q_ASSERT_X(_ranks.count() == _subpattern_count, "compositePattern", "Mismatch in subexpression initialization"); _index.resize(_subpattern_count); for (int i = 0; i < _subpattern_count; ++i) _index[i] = i; descending< QList > sort(_ranks); qSort(_index.begin(), _index.end(), sort); } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/journalDB.cpp0000644000000000000000000000013213124510216016144 xustar0030 mtime=1498583182.911255639 30 atime=1498583183.007254748 30 ctime=1498583182.911255639 cb2bib-1.9.7/src/c2b/journalDB.cpp0000644000175000001440000001104513124510216017537 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "journalDB.h" #include "cb2bib_utilities.h" #include #include #include journalDB::journalDB(const QString& dbfile) { if (dbfile.isEmpty()) { c2bUtils::warn(QObject::tr("No journal file especified")); return; } _nitems = 0; QFile file(dbfile); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { c2bUtils::warn(QObject::tr("Could not open journal file %1 for reading").arg(dbfile)); return; } QTextStream stream(&file); stream.setCodec("UTF-8"); stream.setAutoDetectUnicode(true); QString line; int line_number(0); while (!stream.atEnd()) { line = stream.readLine(); ++line_number; if (!(line.isEmpty() || line.startsWith('#'))) { const QStringList spLine(line.split('|')); if (spLine.count() != 3) { c2bUtils::warn(QObject::tr("Syntax error in journal file at line %1").arg(line_number)); continue; } _nitems++; JCode += spLine.at(0).toLower(); JAbbrev += spLine.at(1); QString dum(spLine.at(1).toLower()); dum.replace(c2bUtils::nonLetter, " "); // Keeps word structure c2bUtils::simplifyString(dum); JAbbrev_simp_w += dum; dum.remove(' '); // Removes whitespaces also JAbbrev_simp += dum; JExtended += spLine.at(2); dum = spLine.at(2).toLower(); dum.remove(c2bUtils::nonLetter); // Removes whitespaces also JExtended_simp += dum; } } file.close(); } /** \page journalproc Processing of journal names cb2Bib processes journal names according to its editable database, stored at abbreviations.txt. See \ref c2bconf_files and \ref c2bconf_bibtex. Journal names processing is performed in the following situations whenever a string is recognized as 'journal'. Additionally, it is also processed by pressing Intro Key at the journal edit line.

         

        - Retrieves Journal name, abbreviated form, if found. - If Journal name is not found in the database, returns input Journal name. - Search is case insensitive. - Warning: Journal codes can be duplicated. If duplicated, returns input Journal name. */ QString journalDB::retrieve(const QString& JQuery) const { const QString query(JQuery.toLower().remove(c2bUtils::nonLetter)); // Removes whitespaces also int journal_found(0); int journal_found_at(-1); for (int i = 0; i < _nitems; i++) { if (JCode.at(i) == query) { journal_found++; journal_found_at = i; } if (JAbbrev_simp.at(i) == query) if (++journal_found == 1) return(JAbbrev.at(i)); if (JExtended_simp.at(i) == query) if (++journal_found == 1) return(JAbbrev.at(i)); } if (journal_found == 1 && journal_found_at != -1) return(JAbbrev.at(journal_found_at)); else return(JQuery); } /** \page journalproc Processing of journal names

         

        - Retrieves Journal name, full form, if found. - If Journal name is not found in the database, returns input Journal name. - Search is case insensitive. - Warning: Journal codes can be duplicated. If duplicated, returns input Journal name. */ QString journalDB::retrieveFull(const QString& JQuery) const { QString query(JQuery.toLower()); query.remove(c2bUtils::nonLetter); // Removes whitespaces also int journal_found(0); int journal_found_at(-1); for (int i = 0; i < _nitems; i++) { if (JCode.at(i) == query) { journal_found++; journal_found_at = i; } if (JAbbrev_simp.at(i) == query) if (++journal_found == 1) return(JExtended.at(i)); if (JExtended_simp.at(i) == query) if (++journal_found == 1) return(JExtended.at(i)); } if (journal_found == 1 && journal_found_at != -1) return(JExtended.at(journal_found_at)); else return(JQuery); } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/cb2bib_utilities.h0000644000000000000000000000013213124510216017147 xustar0030 mtime=1498583182.947255305 30 atime=1498583183.007254748 30 ctime=1498583182.951255268 cb2bib-1.9.7/src/c2b/cb2bib_utilities.h0000644000175000001440000003050213124510216020541 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef CB2BIB_UTILITIES_H #define CB2BIB_UTILITIES_H #include #include #include #include #include #include #include /** cb2Bib core utilities */ namespace c2bUtils { enum AsciiConversion {Cleanup, Collation, FromBibTeX, KeepWords, Transliterate}; extern QString setCapitalization(const QString& str); extern QString toAscii(const QString& str, const AsciiConversion type); extern QString& bibToC2b(QString& str); extern QString& c2bToBib(QString& str); extern QString& fillString(QString& str, const QRegExp& pattern, const QChar& ch); extern QString& fillString(QString& str, const QRegularExpression& pattern, const QChar& ch); extern QString& fillString(QString& str, const QString& pattern, const QChar& ch); extern QString& fillString(QString& str, const QStringMatcher& pattern, const QChar& ch); extern QString& simplifyString(QString& str); extern QString& stripDiacritics(QString& str); static const QRegExp pnasGreekLetters("[\\{\\[\\(](alpha|beta|gamma|delta|varepsilon|" "zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|" "omicron|pi|rho|sigmaf|varsigma|sigma|tau|" "upsilon|phi|chi|psi|omega|vartheta|varphi|" "varpi|digamma|varkappa|varrho|epsilon)[\\}\\]\\)]", Qt::CaseInsensitive); // Only used in QString::replace which keeps QRegExp const static const QRegExp isBibToC2b("[\\{\\[\\$\\(\\\\<>]"); static const QRegExp nonAsciiLetter("[^A-Za-z]"); static const QRegExp nonLetter("\\W"); static const QStringMatcher hasLatexDiacritic("{\\"); static const QStringMatcher hasLatexSymbol("$\\"); // Link set according to: "Creating a Web Link to the Entrez Databases", // http://www.ncbi.nlm.nih.gov/books/bv.fcgi?rid=helplinks.chapter.linkshelp#linkshelp.Retrieve_PubMed_Cita static const QString pubmedUrl("http://www.ncbi.nlm.nih.gov/pubmed/%1"); inline QString& fullBibToC2b(QString& str) { // Escape TeX and other special characters to Unicode if (!str.contains(isBibToC2b)) return str; // PNAS Style str.replace(pnasGreekLetters, "$\\\\1$"); str.replace("{micro}", "$\\mu$"); str.replace("{middle dot}", "$\\cdot$"); // Sub and superscripts str.replace(QRegExp("([^<]*)"), "$_{\\1}$"); str.replace(QRegExp("([^<]*)"), "$^{\\1}$"); str.replace(QRegExp("\\[sub ([^\\]]*)\\]"), "$_{\\1}$"); str.replace(QRegExp("\\[sup ([^\\]]*)\\]"), "$^{\\1}$"); str.replace(QRegExp("\\}\\$\\$([_\\^])\\{"), "}\\1{"); // merge if both // TeX to Unicode bibToC2b(str); return str; } inline QString& cleanEquations(QString& str) { // Simplify equations const QChar eq('$'); int i(str.indexOf(eq)); if (i == -1) return str; const QChar ob('{'); const QChar cb('}'); const QChar ca('^'); const QChar sl('\\'); const QChar us('_'); const int n(str.length()); int p(i); while (i < n) { if (str.at(i) == eq) { bool has_eq(false); for (int j = i + 1; j < qMin(i + 70, n); ++j) // Set a max equation length if (str.at(j) == eq) { has_eq = true; for (int k = i + 1; k < j; ++k) { const QChar& ck = str.at(k); if (ck != us && ck != ca && ck != sl && ck != ob && ck != cb) str[p++] = str.at(k); } i = j; break; } if (!has_eq) str[p++] = str.at(i); } else str[p++] = str.at(i); ++i; } str.chop(n - p); return str; } inline QString& cleanTitle(QString& title, const bool clean_period = false) { // Remove TeX braces and equation $ cleanEquations(title); title.remove('{'); title.remove('}'); title = title.trimmed(); if (clean_period && title.length() > 0) if (title[title.length() - 1] == '.') title.chop(1); return title; } inline QString toHtmlString(QString str) { // Encode some symbols to HTML for proper browser display str.replace('<', "<"); str.replace('>', ">"); str.replace('%', "%"); str.replace(QRegExp("_\\{([^\\}]*)\\}"), "\\1"); str.replace(QRegExp("\\^\\{([^\\}]*)\\}"), "\\1"); cleanEquations(str); return str; } inline QString firstPage(QString pages) { simplifyString(pages); pages.remove(QRegExp("[\\s\\-].*$")); return pages; } inline bool isLowerCaseString(const QString& str, const int pos0 = 0, int posn = -1) { if (str.isEmpty()) return false; if (posn < 0) posn = str.length(); for (int i = pos0; i < posn; ++i) if (str.at(i).isLetter()) if (str.at(i).category() == QChar::Letter_Uppercase) return false; return true; } inline bool isUpperCaseString(const QString& str, const int pos0 = 0, int posn = -1) { if (str.isEmpty()) return false; if (posn < 0) posn = str.length(); for (int i = pos0; i < posn; ++i) if (str.at(i).isLetter()) if (str.at(i).category() == QChar::Letter_Lowercase) return false; return true; } /** Gives a document absolute, full path-name */ inline QString documentAbsoluteName(const bool bibtexrelative, const QString& bibtexfn, const QString& docdir, const QString& docfn) { QString name; if (bibtexrelative) { // The bibtexfn might be relative in USB mode, calling absolutePath will restore its fullname. QDir ddir(QFileInfo(bibtexfn).absolutePath()); // When bibtexrelative, should only be relative to bibtexfn, (safely) disregard if it is absolute. if (QDir(docdir).isRelative()) name = ddir.absolutePath() + '/' + docdir + '/' + QFileInfo(docfn).fileName(); else name = ddir.absolutePath() + '/' + QFileInfo(docfn).fileName(); } else // The docdir should be absolute here, whether or not working in USB mode. If it was relative, // this will set it with respect the application directory. name = QDir(docdir).absolutePath() + '/' + QFileInfo(docfn).fileName(); return QDir::toNativeSeparators(QDir::cleanPath(name)); } /** Gives a document filename, as it will be written to BibTeX file tag */ inline QString documentFilename(const bool bibtexrelative, const QString& bibtexfn, const QString& docdir, const QString& docfn) { QString name; if (bibtexrelative) { QDir ddir(QFileInfo(bibtexfn).absolutePath()); if (QDir(docdir).isRelative()) name = ddir.absolutePath() + '/' + docdir + '/' + QFileInfo(docfn).fileName(); else name = ddir.absolutePath() + '/' + QFileInfo(docfn).fileName(); name = ddir.relativeFilePath(name); } else name = QDir(docdir).absolutePath() + '/' + QFileInfo(docfn).fileName(); return QDir::toNativeSeparators(QDir::cleanPath(name)); } /** Gives a document path as it will be written to BibTeX file tag */ inline QString documentDirName(const bool bibtexrelative, const QString& bibtexfn, const QString& docdir) { QString name; if (bibtexrelative) { QDir ddir(QFileInfo(bibtexfn).absolutePath()); if (QDir(docdir).isRelative()) name = ddir.absolutePath() + '/' + docdir; else name = docdir + '/'; name = ddir.relativeFilePath(name); } else name = QDir(docdir).absolutePath(); name = QDir::toNativeSeparators(QDir::cleanPath(name)); return name; } inline QString fileToString(const QString& fn, bool delete_on_close = false) { if (fn.isEmpty()) return QString(); QFile f(fn); if (f.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream stream(&f); stream.setCodec("UTF-8"); stream.setAutoDetectUnicode(true); const QString contents(stream.readAll()); if (delete_on_close) f.remove(); else f.close(); return (contents); } else return QString(); } inline bool stringToFile(const QString& str, const QString& fn) { if (fn.isEmpty()) return false; QFile f(fn); if (f.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream stream(&f); stream.setCodec("UTF-8"); stream.setAutoDetectUnicode(true); stream << str; f.close(); return true; } else return false; } inline QStringList filesInDir(const QString& dir, const QStringList& filters) { QStringList files; QFileInfo fi(dir); if (!fi.exists()) return files; if (fi.isDir()) { QDir d(dir); const QFileInfoList dil(d.entryInfoList(filters)); for (int i = 0; i < dil.count(); ++i) files.append(QDir::toNativeSeparators(QDir::cleanPath(dil.at(i).absoluteFilePath()))); } else if (fi.isFile()) files.append(QDir::toNativeSeparators(QDir::cleanPath(fi.absoluteFilePath()))); return files; } inline int nearInteger(double a) { int ia = int(a); a = a - double(ia); if (a >= 0.5) ia++; else if (a <= -0.5) ia--; return ia; } inline bool inBraces(const int pos, const QString& str, QString* in) { if (str.at(pos - 1) == '{') // pos > 0 always { int open_braces(1); const QChar open('{'); const QChar close('}'); QChar si; for (int i = pos; i < str.length(); ++i) { si = str.at(i); if (si == open) open_braces++; else if (si == close) open_braces--; if (open_braces == 0) { *in = str.mid(pos, i - pos); return true; } } } else // in Quotes { const QChar quote('"'); const QChar comma(','); for (int i = pos; i < str.length() - 1; ++i) if (str.at(i) == quote) if (str.at(i + 1) == comma) { *in = str.mid(pos, i - pos); return true; } } return false; } inline bool patternLengthMoreThan(const QRegExp& s1, const QRegExp& s2) { return s1.pattern().length() > s2.pattern().length(); } inline QString fromQtXmlString(QString str) { // Workaround (It will be fixed in Qt 4.5) // Escape toXmlString already done by ExifTool str.replace("%%#39;", "'"); str.replace("%%amp;", "&"); str.replace("%%gt;", ">"); str.replace("%%lt;", "<"); str.replace("%%quot;", "\""); return (str); } inline QString toQtXmlString(QString str) { // Workaround (It will be fixed in Qt 4.5) // Escape toXmlString already done by ExifTool str.replace("'", "%%#39;"); str.replace("&", "%%amp;"); str.replace(">", "%%gt;"); str.replace("<", "%%lt;"); str.replace(""", "%%quot;"); return (str); } inline void warn(const QString& ms) { qWarning("[cb2bib] %s.", (const char*)ms.toLatin1()); } inline void debug(const QString& #ifdef C2B_DEBUG debug_ms #endif ) { #ifdef C2B_DEBUG qDebug() << "[cb2bib] " << debug_ms; #endif } extern const QString fromUtf8(const QByteArray& ba); #ifdef C2B_USE_LZO namespace lzo { static const int HEADER_LENGTH = 10; extern const QByteArray compress(const QByteArray& data); extern const QByteArray uncompress(const QByteArray& data); } // namespace lzo inline const QByteArray compress(const QByteArray& data) { return lzo::compress(data); } inline const QByteArray uncompress(const QByteArray& data) { return lzo::uncompress(data); } #else inline const QByteArray compress(const QByteArray& data) { return qCompress(data); } inline const QByteArray uncompress(const QByteArray& data) { return qUncompress(data); } #endif } // namespace c2bUtils #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/texParser.h0000644000000000000000000000013213124510216015706 xustar0030 mtime=1498583182.983254971 30 atime=1498583183.007254748 30 ctime=1498583182.983254971 cb2bib-1.9.7/src/c2b/texParser.h0000644000175000001440000000367213124510216017310 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef TEXPARSER_H #define TEXPARSER_H #include #include /** Minimalist TeX parser */ class texParser { public: inline texParser() : _stop_parsing(false) {} inline virtual ~texParser() {} protected: virtual void parseComment(const QString& /* p */) {} virtual void parseElement(const QString& /* p */, const QString& /* e */, const QString& /* v */) {} virtual void parseEmptyLine() {} virtual void parseLaTeXMarkup(const QString& /* p */, const QString& /* e */) {} virtual void parseTextParagraph(const QString& /* p */) {} void parse(QString tex); inline void stop() { _stop_parsing = true; } private: QString _element; QString _line; QString _paragraph; QTextStream _stream; bool _stop_parsing; void doElement(); void gotoEnd(const QString& e); void gotoEndBraces(const QString& e); void gotoEndMacro(const QString& e); inline const QString& readLine(const bool trim = false) { if (trim) _line = _stream.readLine().trimmed(); else _line = _stream.readLine(); return _line; } inline void flushElement(const QString& e, const QString& v) { flush(); parseElement(_element, e, v); } inline void flushLaTeXMarkup(const QString& e) { _element = _line; flush(); parseLaTeXMarkup(_element, e); } inline void flush() { if (_paragraph.isEmpty()) return; parseTextParagraph(_paragraph.mid(1)); _paragraph.clear(); } }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/texToHtml.h0000644000000000000000000000013213124510216015661 xustar0030 mtime=1498583182.983254971 30 atime=1498583183.007254748 30 ctime=1498583182.983254971 cb2bib-1.9.7/src/c2b/texToHtml.h0000644000175000001440000000534313124510216017260 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef TEXTOHTML_H #define TEXTOHTML_H #include "texParser.h" #include "coreBibParser.h" /** Minimalist TeX to HTML converter */ class texToHtml : public texParser { public: texToHtml(); inline ~texToHtml() {} QString toHtml(const QString& tex); void toHtml(const QString& tex, const QString& fn); private: QDir _current_dir; QHash _references; QHash _cites; QList _tex_macro_names_rx; QRegExp _extern_url_rx; QRegExp _macro_arguments_rx; QRegExp _named_extern_url_rx; QRegExp _named_url_rx; QRegExp _url_rx; QString _bibtex_directory; QString _html; QString _html_filename; QString _index; QString _tex_macros; QString _title; bool _close_subsection; bool _close_subsubsection; bool _make_index; bool _use_relative_links; coreBibParser _cbp; int _index_anchors; settings* _settingsP; void citesToHtml(QString* html); void extractCites(const QString& p); void extractMacro(const QString& v); void parseComment(const QString& p); void parseElement(const QString& p, const QString& e, const QString& v); void parseTextParagraph(const QString& p); void referencesToHtml(QString* reference_list_html); void retrieveReferences(); inline void urlToHtml(QString* str) { str->replace(_named_url_rx, "\\2"); str->replace(_url_rx, "\\1\\2"); str->replace(_named_extern_url_rx, "\\2"); str->replace(_extern_url_rx, "\\1\\2"); } inline QString toHtmlString(QString str, const bool do_macros = true) { // Move LaTeX to Unicode c2bUtils::bibToC2b(str); // Encode some symbols to HTML for proper browser display str.replace('<', "<"); str.replace('>', ">"); str.replace('%', "%"); // Super/sub scripts: Not clear if jsMath should manage them str.replace(QRegExp("_\\{([^\\}]*)\\}"), "\\1"); str.replace(QRegExp("\\^\\{([^\\}]*)\\}"), "\\1"); // Insert $$ into LaTeX macros if (do_macros) for (int i = 0; i < _tex_macro_names_rx.count(); ++i) str.replace(_tex_macro_names_rx.at(i), "$\\1$"); return str; } }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/txt0000644000000000000000000000007413124510115014325 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.643258127 cb2bib-1.9.7/src/c2b/txt/0000755000175000001440000000000013124510115015767 5ustar00constansusers00000000000000cb2bib-1.9.7/src/c2b/txt/PaxHeaders.3194/prefixes.txt0000644000000000000000000000007413124510115016770 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.643258127 cb2bib-1.9.7/src/c2b/txt/prefixes.txt0000644000175000001440000002216013124510115020356 0ustar00constansusers00000000000000a ab abdomin abs ac acanth acantho acar acet acetab aceto acou acous acouso acr acro actin acu ad add aden adeno adenoid adip adipo adren adreno aemia aer aero aesthesi aesthesio aeti af after ag agri al ala alb albi alg alge algesi algio algo ali aliment alkyl all allo alto alveol am amb ambi ambly ambyl ameb ametr amic amidino amino amm amni amnio amph amphi amphibi ampho amyl an ana ancylo andr andro anemo ang angi angio anis ankyl ankyle ankylo ano anomalo ant ante anter antero anth antho anthra anthro anthrop anthropo anti antr ap aph api apo aqu aqua aqui aquo ar arch archa archaeo arche archi argyr aristo arrhen arsa arshae arter arteri arterio arteriol arth arthr arthro arthron articul articulo as asco aster asthen astr at ate atel ather atm atmo atom atreto atri atrium atto audi aur auri auricul aut auto aux axi axilla aza azido azo azot bacill back bacter bacteri bacterio bactr balan bar barb baro bary basi baso bath be ben bene benzo ber bi bibli biblio bicyclo bin bio bis bisma blast blasto blenn bleph blephar blepharo bon bora brachi brachia brachio brachy brady branchi breph brev brevi brom bronch bronchi bry bryo bucc bucco cac caco caen calc calor cancer cancr canth capill capit caps caput carb carbamimidoyl carbamoyl carbox carboxy carboxylate carboxylato carcin carcino cardi cardio carn carnis carp carpal cary case cat cata cath cato cau caud caul caus cav cel cell cen cente centi centr centri cephal cephalo cer cerat cerebell cerebr cerebro cervic chalc chancr cheil cheir chel chele chem chemi chemico chemio chemo chil chir chlor chloro chloroformyl chol cholangi choledoch chondr chondrio chondro chord chori chrom chroma chromato chrome chromo chron chrono chyle chym cili cilia cine circa circum cirrho cirru cis citra clas clast cleid cleist clin clist co cocc coccyg coel coen col cole coll colo colono colp com con coni contra cor core corp corpus cort cortic cosmo cost cotyl counter crani cranio cresc cret cric crin crur cry cryo crypt cteno cucmul cumul cusp cut cuti cyan cyano cyber cyci cycl cyclo cymbo cyn cyrt cyst cysti cysto cyt cyte cytis cyto da dacrio dacry dacty dactyl dactylo de dea dec deca deci deka deliquesc dem demi demo dendr dent der derm dermato dermis des desm deuter deutero dextr dextro di dia diaza dicta dif differ digit diicosa dilia din dipl diplo dis dodec dodeca doheptaconta dohexaconta doicosa dolich dolicho dont dorm dors drom du duo duoden duodeno dur dy dynam dynamo dys e ec echin eco ect ecto ectro ef eka el ele electr electro elytr em embry emet emnea en encephal encephalo end endo ennea enneaconta ent enter entero ento entom eole ep eph epi episi equi erg ergy erot erythr erythro eso esthesio ethno ethoxy eu eury ev ex exa exo extra extro faci fasci febri femto ferr ferro feto fibr fibro fil fila fis fiss flagell flav flor flu fluct fluor foet foli for fore formyl fract front fus galact galacto gam gamet gangli gastr gastro ge gelat gemin gemm gen gene geni genu geny geo ger germa geront gibi giga giganto glia glob gloss glossa glosso glott glotto gluc gluco glut glyc glyco gn gnath gnatho gon goni gono gony granul graph grav gravid gravis gymno gyn gynae gynaeco gyne gyneco gyno gyr haem haema haemat haemato hal hallux halo halocarbonyl hapl haplo hapto hect hecta hecto hel helc heli helic hem hema hemat hemato hemi hemo hen hendeca hepar hepat hepatico hepato hept hepta heptacta heptadeca heptalia herb heter hetero hex hexa hexacta hexaicosa hexalia hibern hidr hidro hier hipp hist histio histo holo hom homeo homo horm hort hyal hybrid hydr hydro hydroperoxy hydrox hydroxy hygr hyl hymen hyp hyper hyph hypho hypno hypo hyps hypsi hyster hystero iatr ic ichthy icon icosa icosidi icosiocta icositri icter ide idea ideo idi idio ign il ile ileo ili ill im imino immuno in incret incud infero infra infro inguin ini insul inter intra intro intus iodo ir irid irido isch ischi ischio iso ite ithy ixodi jec jejun jug jugu juxta kak kali kaps kary karyo kat kata kel ken ker kerat kerato keraun kibi kilia kilo kin kine kinesi kinesio kino klept koilo kolp koly kon krym kym kyn kyph kypho kysth labi lac lachry lacri lacrim lacrimo lact lacti lacto laevo lal lamina lampro lan lapar lapis laryng laryngo lat later latero lecith lei leio lem lepid lepr lepto leuc leuco leuk leuko levo lex lien liga lign lim lin lingu linguo lio lip lipo liqu lith litho loc log loga logo longus loph loxo luc lue lumb lumi lumin lun lute ly lyc lymph lympho lys lyso lyss macr macro mag magn magna maj makro mal malac malar male malle mamm man mania marg mast masto maxilla maz mc meat mebi mechan mechano mecon med medi meg mega megal megalo meio mel mela melan melano meli men mening meningo menisc ment mer mercura mes mesa meso mesos met meta meteor meter meth metop metr metro micr micro mid migr mill mille milli mini minumus mio mis mit mito mnem mole moll mon mono mont morph morpho mort mot mov muc multi muscul musculo mut my myc mycel mycet myco myel myelo myl myo myria myring myringo myx myxo nano narc naris nas natr ne neco necr necro nem nema nemat neo neph nephr nephro ner nerv nesidi neur neuri neuro neutr niga noci noct nod nodus nomen non nona nonaconta nonacta nonadeca nonalia normo nos not novi nox nuc nucha nutri nyct nymph o oari oate ob oc occipit occlus oct octa octaconta octacta octadeca octaicosa octi octo octodeci ocul oculo odont odonto odyn odyno oedem oesophageal oesophago of oik ole olf olfact olig oligo om omni omphal onc oncho onco one oneir ont onych onycho onyx oo oophor oophoro oothec op ophidia ophthalm ophthalmo opistho ops opt opthal opthalm optic or ora orb orch orchi orchid orchido orchio organ organo ornith orrh orth ortho os osche oscu osm oss osseo ossi ost oste osteo ot oto ous out ov ovari ovario over ovi ovo oxa oxido oxo oxy pachy paed palat paleo pali palin palm palpebra palpit pan pant panto papilla par para part parvi path patho pebi pect pector ped pel pell pelv pelvi pelvo pene pent penta pentacta pentadeca pep per peri permea pero pes peta petal petr phac phaco phaeo phag phage phago phak phalan phall phan phaner phao pharmac pharmaco pharyng pharyngo phas phen pheno pheo pher phil philo phleb phlebo phleg phlogo phob phobo phon phono phor phos phospha phot photo phrag phren phreni phrenico phreno phthi phyc phyl phyll phylo phys physi phyt phyto pi pico picro piez pil pimel pinni pino pituit plan plankto plas plasm plasma plast plat platy pleo pleur pleura pleuro plex plic plumba pluri pne pneum pneuma pneumat pneumato pneumo pod podo poikilo poli polio pollex polples poly pom pon pont por porphyro port post postero prae pre presby presbyo prim primordis pro proct procto pronto pronus proprio pros prosop prot proto prox psamm pselaph pseud pseudo psor psych psyche psycho pter pterido ptoma ptyal pub puer pulm pulmo puls pur purpur py pyel pyelo pyg pyle pylor pyo pyon pyr pyret pyro quad quadr quadra quadri quarter quarti quasi quater quatr quin quinque quint r rachi radi radicul radio rami re rect recto red ren renes reno reptilis ret reticul reticulo retro revo rhabd rhabdo rhachi rhag rhe rhig rhin rhino rhiptid rhiz rhizo rhod rhodo rhyp rost rot roto rub rubr sacchar saccharo sacr salping salpingo sangui sanita sap sapr sapro sapros sarc sarco saturn saur scaph scat scel schis schist schisto schiz schizo sci scia scirrho scler sclero scolec scoli scolio scop scot scribe scrit scyt se sect secund sed selanyl selena selenocarboxy semei semi sens seps sept septa septe septi septic ser sesqui sess set sex sexdeci sexi sial sialo sicc sider sigmoid sigmoido sila sin sinap sinistr sinistro sit sito skia sol solv som soma somat somatico somato some somn son sonus sover spacel spano spasm spasmo spec spectr spectro sperm sperma spermato spermo sphaer sphen spher sphygm spic spin spinth spir spiro splanchn splanchni splanchno splen spleno spod spondyl spondylo spongi spor squam stann stanna staphyl stas stat steap stear steat stell sten steno sterc stere stereo stern steth sthen stheno stiba stom stoma stomat stomato strab strat strati strept stri strict stroph strum styl sub subter suc succ sud suf sug sulfanyl sulfeno sulfido sulfino sulfo sulfonato sum sup super supinus supra sur sursum sy syl sym syn syndesm syring sys system syto tabe tach tachy tact taenia tal talip taph tars tarso taut tax tebi techn tect teg tel tela tele tellanyl tellura telo temp tend tenia teno tenont tension tephr ter tera terat terr terti test tetan tetart tetr tetra tetraconta tetracta tetralia thall thanat thec their thel thelo thely thenar theo therap therm thermo thia thigm thio thiocarboxy thix thorac thoracico thoraco threp thrix thromb thrombo thym thyr thyro tibi toc toco ton tono top topo tors tox toxi toxico toxo tra trache trachel tracheo trachy trans tre tredo tri trich trichi trichia tricho tricta trideca triginta trigon trigono triicosa trilia tris trit trocho trop troph tub turb tuss twi tyman tympan tympano typ typhl tyr ul ula ultra un una undeci under ungu uni untriginta ur uran ureter urethro uri uric urico uro uron uter vagin valvul varic varico vas vascul vasculo vaso vect ven vent venter ventr ventricul verd vermi vertebr vesic vesico vice vig viginti vir viscer vit vita viv vivi volv vor vulv xanth xanthin xantho xen xeno xero xiph xyl yocto yotta zepto zetta zo zoa zoo zyg zygon zym zymo cb2bib-1.9.7/src/c2b/txt/PaxHeaders.3194/word_prefix_lexicon.txt0000644000000000000000000000007413124510115021214 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.643258127 cb2bib-1.9.7/src/c2b/txt/word_prefix_lexicon.txt0000644000175000001440000000670313124510115022607 0ustar00constansusers00000000000000_about_ _abso _abstra _acces _accu _acety _acid _acta _actin _activ _adapt _adso _advanc _afte _agen _alert _algor _align _analys _and_ _anion _antib _antige _applic _appr _arabid _archiv _articl _assemb _asses _assoc _at_ _atom_ _atomic _atp _autom _bacil _bact _based _basis _behav _betw _bibli _bindi _bioc _bioi _biolog _biom _biosy _blood _bound _bovine _but_ _by_ _calci _calcul _campus_ _cataly _catio _ccs _cdn _cell_ _cells _cellul _center_ _centra _cereb _cerev _changes _channe _charac _chem_ _chemi _chlor _chrom _cien _citat _classi _clini _cloni _clust _collect _colleg _communic _compara _comparis _compl _compon _composi _compou _compu _conform _conse _consis _constr _contac _contai _continu _control _conversi _coord _copy _core_ _corpo _correla _couple _crystall _cubat _cult _cyc _cyt _data_ _datab _dehy _densi _depart _depen _deriv _descri _design _deskt _detai _detec _determi _devel _dft _differ _digg_ _digit _dimensi _direc _disea _dissoc _distanc _distr _diverg _divers _dna _doctora _domains _downl _droso _dyna _edite _editi _edito _effec _effi _eigenv _elec _elemen _emai _embry _enco _endot _energ _enh _enzy _epid _epit _equa _errat _escheri _estim _eval _evidenc _evol _exam _exch _exci _experi _expr _extra _facul _false_ _family _featu _federa _fibr _fluo _for_ _formal _format _formu _fract _fragm _from_ _funct _gaussi _generali _generat _geneti _genom _geolo _geom _gluco _gluta _glyc _granul _group _growt _hamiltoni _hepa _heter _highly _hist _homolo _hormon _htm _hybr _hydr _hyper _iden _image _imagi _immu _impl _improv _inc_ _index _indu _infe _infl _info _inhi _init _inst _integ _intera _interf _interm _inters _intro_ _introd _inves _invo _isolat _issu _items _journal _kinase _kinet _labora _lact _librarie _library _licens _ligan _linea _lipid _lipop _localiz _lymph _magnet _mammal _manusc _mappi _matchi _mathem _matric _matrix _measure_ _measurem _mechanis _mediat _medica _membe _membra _metab _metad _method _methy _metri _micr _mitoc _model_ _modeli _models _modif _modu _molec _morph _multi _muscl _mutant _mutati _myco _nanop _nanos _nanot _natu _nerve _netw _neural _neuron _new_ _nitr _nmr _nonp _normal _notes_ _novel_ _nucl _numer _obj _obse _of_ _on_ _onl _oper _optical _optim _orbi _organiz _origi _oxi _oxy _paper_ _papers _parall _paramet _partia _partic _patho _pathw _patients _pattern _pdf _peak_ _pept _perfo _permis _perox _pertur _phas _phos _phot _phylo _phys _plasm _polymer_ _polymera _popu _postin _potent _pract _predict _prepr _presen _primar _principl _probab _probl _proces _produ _profes _profi _progr _promo _prope _proteas _protei _proteo _proton _pseu _pub _purificat _putat _quadra _quantit _quantu _radical _reac _recep _recog _recom _recon _reduc _refere _regio _regr _regulat _relat _repl _report_ _reports _represe _requi _resea _resis _reso _resp _revea _review _ribos _rna _rotat _saccha _scale_ _scalin _scheme_ _school_ _scienc _scient _search _second _secret _segm _selec _sensit _sequen _series _sets_ _shell_ _signa _simila _simula _singu _sites _soft _solut _south_ _space_ _speci _spectr _sph _spin_ _stabili _standard_ _stati _stimu _strep _struct _studies _study _subject _subm _subsp _subst _subun _sulf _surf _syna _synth _syst _technic _techniq _techno _tempera _termina _tetr _the_ _theorem _theoreti _theori _theory _thermo _thesis _three _throu _tissu _to_ _tox _transc _transf _transi _transm _transp _treatm _tumo _type _ultr _unit _univ _usa_ _usi _variab _vesic _vibrat _virtua _visua _vitro _with_ _within _yeas cb2bib-1.9.7/src/c2b/txt/PaxHeaders.3194/suffixes.txt0000644000000000000000000000007413124510115016777 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.643258127 cb2bib-1.9.7/src/c2b/txt/suffixes.txt0000644000175000001440000001573213124510115020374 0ustar00constansusers00000000000000a abilities ability able abled ablely ableness ablenesses ables abling ably ac acea aceae acean acene aceous acousia acoustic acy ad ada addy ade adenia adic adiene adiyne adol ads aemia aesthesia aesthetic against age agnosia agog agogue agra al ales algesia algia aling alis alism alisms alities alitis ality alization alizations alize alized alizer alizers alizes alizing alli allied allies allis ally allying alness als amide amidine amidyl amine aminyl an ana ance ances ancies ancy ane angle ans ant anted anthema anting antness ants ar arch arche archy ard aria arian aries arion arit arity arities arium ary as ase asis ast aster asthenia ata ate ated ateful atefulness ately ateness ates ating atings ation ational ationals ations ative atively ativeness atives ativity ato ator atored atoring ators atory atresia atriene atriyne atrophia atum atus auxe basia bility biosis biotic biotics blast ble bleness blepharia blepsia blepsy bly boom bound bounds brachia bund bus cace caine calities cality cally calness capnia cara carbaldehyde carbonitrile carbonyl carboxamide carboximidamide carboxylate carboxylic carcinoma cardia cardiac carp catharic cele cene centesis centric cephalia cephalus cephaly cera cerca cerebral chesia chezia chirurgia chondria chorea chroia chromasia chromatic chrome chylia cidal cide clasia clasis clasm clast clastic cle cleisis clinous clonia clysm cnemia coccus coele cole comma cracy crania crasia crat cratia crine crotic cular cule culum culus current cusis cy cycle cyst cystic cyte cythemia d dactylia demic dendron dermia dermic desis desma diene diide diium diol dione dipsia diyl diylidene diylylidene dom donita dorsal drome duct dynamia dynamy dynia e eabilities eability eable eableness eables eably eae eal ealed ealing ealism eality ealization ealize ealized ealizing eally ealness eals ecane echia ecin ecine ecoia ectasia ectasis ectasy ectomy ectopia ed edema edly edness ee eement eements een eence eer eered eering eers ees eg egasia ein el ella elle ellum ema eme ement emented emently ementness ements emetic emia empyema en ence enceful encephalia encephaly enchyma ency ene ened ener eness enesses ent entative entatively entativeness entatives entativity ented entful entfulness enting ently entness ents eous eously eousness epane epin epine er erative eratively erativeness ered erful erfulness ergetic ergic ergy eries ering erings erness erotic ers ery es escence escense escent ese esis esp esque ess est esthesia et etane etc ete etene eth etic etidine etine ette etum eus facient faction fast febrile fer ferent ferous fibroma fic fication fid field fields fish fishes flect flex fluent fold food foot form forme found founds fuge ful fullness fully fulness fulnesses fuls fuse fy fying gamy gen gene genesia genesis genia genic gerous geusia geustia gine glossia glycaemia gnathia gnomy gnosia gnosis gon gony gram graph grapher graphia graphy gyne h hale hedron helminth herbicide hood hound hounds hydria hydride i ia iac ial ian iasis iatric iatrician iatry ible iblely ibleness ibles iblies ibly ic ical icalism icalities icality ically icals ice iced ician icing icities icitis icity ics icus id ida idae idan ide idea ides idin idine idines idium ido idyl ie ied ier ies iest iform iforme ify il ile iliac ility illa illus ily imidamide imide imine iminyl in ina inae inane ine ineae iness inesses ing ingly ings ingy ini initio io ion ional ioned ionful ioning ionings ions ior ious irane irene iridine irine iscus ise ised ish ishly ishness ishy ising isk isks ism isms ismus ist istic ists ite ited ites iti itiative itic ities itious itis itium itol ity ium iumyl ive ivelies ively iveness ives ivities ivitis ivity ization izations ize ized izer izers izes izing kijn kin kind kinds kinesia kinesis l labe labial labile lability lable labled lablely lableness lables lably lagnia lagny lalia land lapse lateral lates lating lation lational lations lative latively lativeness lator lators latry le leability leable leableness leal led lemma leness leous lepsy leptic ler lered lering lers les less lesses lessly lessness let lexia like likes lines ling lings lipsis lite lith lithiasis lithotomy lity lobe log logia logical logist logue logy long lucent lunar ly lying lymph lyse lysin lysis lyst lyte lytic lyze ma malacia man mancy mania maniac manic manship mark marks mastia masty mazia megaly melia men ment mentative mentatively mentativeness mented mentia menting mently ments mer mere meria meric merics meter metr metria metric metries metry mimesis mixis mnesia mo moria most motor mrs myelia neonatology nephric ness nessed nesses nessing neural neure neuria neuron nik nitrile node noia noid nom noma nome nomia nomy o oate ocane ocin ocine ock ode odonita oedema of ogen oic oid oidal oidea oin ol ola olane olate ole olene olic olics olidine oline ology ols olum olus oma ome on onane one ones onia onic onin onine onio onite onites onium oniumyl ons ont ope opia opsia opsy opy or orexia organic orial ories orium ors ory os oscopy ose oside osis osmia osteon osteum ostomy ote otia otic otomy ous oused ousing ously ousness oxemia oxia oyl pachy paedic paenia pagus pancreatic para partite path pathetic pathia pathic pathy ped pede penia pennate pepsia peptic pert petal pexia pexis pexy phagia phane phasia phemia phil phile philia philias philic phily phobe phobia phone phones phonia phonic phore phoresis phoria phragm phrasia phrenia phrenic phthongia phyll phyma physical physics physis phyte picrin plakia plania plasia plasm plast plastia plastic plasty plegia plegic plex plexia plexus plexy ploid pnea pnoea pod podia poetic poiesis poo pore post potent pragia praxia praxis privia proctia proof proofs prosopia prost pselaphesia psychic psychosis pterygium ptosis ptysis pubic pulsion pyrexia renal rhachia rhage rhagia rhaphy rhea rhexis rhoea room rooms rrh rrhachia rrhage rrhagia rrhaphy rrhea rrhexis rrhoea ry s scelia schisis sclerosis scope scopy scribe script se sect sector selenal selenoic selenol selone sepsis septic ship sia sion sis site sitia solve soma somatic some someness somenesses somia spasm spermia sphere sphygmia spire spore stabile stage stalsis stasis stat state staxis stenia stenosis ster sthenuria stichia stole stoma stome stomy stone stophy strongyle sts studies style sulfenic sulfinic sulfonate sulfonic sultam sultone surgery sy synthesis t tactic taxia technics technology ted tela tellurol tension tention tetrayl th thecium thelium therapeutic therapy therm thermia thermy thetic thioic thiol thiolate thione thymia thyrea tic tically tics tion tode tome tomic tomy tonia tonic tony topia topy toxin trauma trema tresia tribe trichia triene triide trione tripsis tripsy trix triyl tron trope trophia trophic trophy tropic tropics tropos tropy tude tumescence tuse ty typia uida uide uidyl ula ular ulation ule ulent ulose ulous ulum ulus um ums ura ure urgia urgy uria uris us uses valve venous ventral verge verse vert vertebral ville volute vore vorous ward wards way ways with wood worm y yl ylene ylia ylidene ylidyne ylium yliumyl ylylidene ylylidyne yne zoa zoite zoon zyme cb2bib-1.9.7/src/c2b/txt/PaxHeaders.3194/triads.txt0000644000000000000000000000007413124510115016431 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.643258127 cb2bib-1.9.7/src/c2b/txt/triads.txt0000644000175000001440000000541113124510115020017 0ustar00constansusers00000000000000aeiloty ¦§³»¼ÀÂÉÃÑÛÜÃáþÄÄŽÄÄ£Ä±Ä²ÄµÄ¶Ä·Ä¹Ä¼Ä¾Ä¿ÅƒÅ„Å…Å‰Æ‚ÆÆ‘ƕƦƶǀdžÇǑǓǔǕǟǠǧǫǯǴǵÈȟȲȳȷȹȽÉɃɆɇɈÉɑɓɛɜÉɠɢɤɩɭɻɼ˙̪̒ÍͿ΀΂ϛжџӜӫӳӷӾÔÔֱֶֻּ֭֩֯؈ؙؓؕؖآأؤحٹٽٿÚچڌۋۘۙۚۛ۟ۡ۩۬ۮۯ۵ۻۿ܃܆܉܌܎ÜܘܙܧܳݣݥݧݫݰݱݵÞÞ…Þ‹Þޚޥޱ޵޹޼߄ߜࡑࡕ࡛ࢄࢉà¢à¢“࢔࣓ࣜथà¦à¦’ণধফলৠਉਊਜਡਧਲਵ੉ੌੲ੺૱૵ૹૼ૾૿଀ଃ଄ଅଜଥ଩ଭଷୂୌ୙୛ଡ଼à­à­Ÿà­¡à­¥à­§à­ªà­«à­¬à­±à­µà®„஑ஔச஠பயழஸà¯à¯…ே௉ௌ௎௓௔௕఑జశ఼౎ౖౠౡ౥౷౹౻಄ಅಈಭಯಲಳಶಷಸ಼ಽಾೃೈà³à³’೓ೖ೗೘೟ೡೢೣ೤೧೪೫೬೭೰ೲ೴೷೹೽ഄആഊഌഖഞതറാà·à·—ෛො฀à¸à¸à¸‘โ๭à»à»ªà»ºà½à½“བཛྷརལྠွá€áá‹á“ႳႴ폐ᅾᆋá†á†–ᆜᆩᆴሆቨጹáá—á á§á¨á³á‘á‘ᑡᑧᒙᒛᒜᒥᒳᓨᓬᔮᖅᖉᖌᖓᖔᖙᖟᖹᗇᗉᗑᗜᗞᗦᗩᗭᗱᗺᗻᗼᗾá˜á˜”ᘡᘪᘮᙄᙈᙉᙑᙔᙕᙗᙙᙜᙞᙢᙣᙥᙩᚱᚷᛖᛗᛞᛤᛥᛱᜋáœáœ˜áœšáŒá™á±á²áµá·á¼á½áž€áž‡áž‰ážáž‘បលវឮ឴ᡡ᱂ᵱᵵᵿᶀᶒᶩᶬᶲᶴᷦᷨḋḖṃṈẲẸếểịốỒỡừἫἺὅὉὓ὞ὟὩὬὰήᾚᾶῺ ’‣‥â…ââªâ‚Šâ‚‹â„±â„³â„·â„»â…€â…⅂ⅆ⅖ⅣⅧⅫⅯⅰⅵⅶâ†â†…â†â‡â‡’⇶âˆâˆƒâˆ‡âˆâˆâˆ’∗∙âˆâˆ¡â‰³âŠ®âŠ¸âŠ¹âŠ½â‹‚â‹‰â‹â‹­âŒâŒŸâŒ¡âŒ£âŒ¥âŒªâŒ¬âŒ®âŒ¯âŒ°âŒ²âˆâ¤âŽ…âŽ‰âŽ‹âŽâŽâŽ’âŽ˜âŽ™âŽâ–â¥â¦â«â­â¯â±â¾â‹ââ™â­â³â¶â‘™â‘¯â‘²â‘·â‘ºâ’‚⒇⒣⒥⒦⒧⒰⒱⒴⒵ⒶⒷⒽⓨâ•╡╤╦▀▆▜▞▴▸►â—◅◈◉◎◒◓◔◕◣◬☠☩☭☯☰☱☴☶☻☼♅⚃⚄âšâš”⚜⚞⚤⚫⚭⚯⚽⛉â›â›“â›—â›â›£â›§â›¬â›°â›±â›²âœ“✕✗✛✞✟✥✭✮✰✵✾✿â‡âŠââ“â”â•â¥â©â´âžˆâžŒâŸ—â â ±â µâ ¶â ¹â¡‚â¡©â¡­â¡¶â¡·â£â£â£â£‘⣓⣕⣚⣟⣠â¤â¤Ÿâ¤¨â¤¬â¤®â¥“⥗⥜⥩⥫⥭⥮⥱⥴⥷⥺⥼⥽⦷⦻⦿⧂⧃⧅⧉⧊⧋⧎⧙⧤⧯⧸⧼⧾⩵⪥⪩⪴⬋⬜⭱⭵ⵇⵉⵌâµâµâµ“ⵗⵘⵠⵢⵣ⵲⵼⵽â¶â¶„ⶆⶋâ¶â¶•⶗ⶭ⶯ⶱⶵⶼ⶿ⷀⷘⷡⷥⷮⷯⷴ⸌⸕⸙⸛â¸â¸ â¸¢â¸¦â¸§â¸¨â¸©â¸±â¹¶âº…⺊âºâº™âº›âºœâºŸâº¢âº¥âº©âºµâº¹âº½â»ƒâ»‹â»â»“⻜â»â»©â»­â¼™â¼œâ¼â¼¡â¼¤â¼¦â¼§â¼ªâ¼µâ¼¶â¼·â¼»â¼¿â½€â½â½„⽆â½â½â½‘⽔⽪⽺⾧⿫⿬⿭⿱⿴⿼〇〖ã€ã€¥ã€¨ã€ªãˆã”ã™ã£ã¤ã‚‰ã‚グスタãƒãƒ„テニãƒã„‰ã„‹ã„ㄙㄚㄥㄬㄴㄻㄿㅃㅆㅕㅘㅙã…ㅠㅡㅢㅧㅨㅽㆀã†ã†£ã†¤ã†¥ã†§ã†«ã†°ã†²ã†¶ã‡ã‡¥ã‡©ã‡¬ã‡µã‡¹ãˆ‚㈃㊑㊕㊘㊚㊟㊠㊫㋅㋌㋎㋵㋹㋽ãŒãŒ‚㌆㌇㌈㌩㌺ã¡ã£ã¥ã¯ã°ã±ãŽžã‡ãã—ã˜ãžãŸã£ã§ã­ã±ã¹ã½ã¿ãã‡ã‹ãŒã㑇㑉㑋ã‘㑒㑔㑕㑙㑚㑛㑩㑽㒆㒉ã’㒎㒨㒺ã“㓂㔵㔹㕜㕭ã–㖡㖬㖵㘅㘇㘎㙢㙧㚇㚋㚎㚗㛈㛉㛸㛽㜅ãœãœŸãœ¢ãœ£ãœ¬ãœ­ãœ®ãœ°ã„㠗㣳㣷㤀㤂㥓ã¦ã¦“㦕㦗㦚㧑㫥ã­ã­ã±…㲄㲬ã¶ã¶˜ã¹ ã¹¨ã»©ã¿‰ä‚‘䄌䄵䆻䑡cb2bib-1.9.7/src/c2b/PaxHeaders.3194/bibExtractor.cpp0000644000000000000000000000013213124510216016714 xustar0030 mtime=1498583182.883255899 30 atime=1498583183.007254748 30 ctime=1498583182.887255862 cb2bib-1.9.7/src/c2b/bibExtractor.cpp0000644000175000001440000002057313124510216020315 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "bibExtractor.h" #include "bibParser.h" #include "cb2bib_utilities.h" #include "document.h" #include "metadataParser.h" #include "network.h" #include "networkQuery.h" #include "settings.h" #include bibExtractor::bibExtractor(QObject* parento) : QObject(parento), cout(*(new QTextStream(stdout))) { _settingsP = settings::instance(); _bpP = new bibParser(this); _mpP = new metadataParser(_bpP, this); _networkQP = new networkQuery(_bpP, this); init(); } bibExtractor::bibExtractor(bibParser* bp, metadataParser* mp, networkQuery* nq, QObject* parento) : QObject(parento), cout(*(new QTextStream(stdout))), _bpP(bp), _mpP(mp), _networkQP(nq) { _settingsP = settings::instance(); Q_ASSERT_X(_bpP, "bibExtractor", "bibParser was not instantiated"); Q_ASSERT_X(_networkQP, "bibExtractor", "networkQuery was not instantiated"); init(); } bibExtractor::~bibExtractor() { delete &cout; } void bibExtractor::init() { connect(_networkQP, SIGNAL(queryEnded(bool, const QString&, const QString&)), this, SLOT(queryEnded(bool, const QString&, const QString&)), Qt::QueuedConnection); connect(_networkQP->networkPtr(), SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)), this, SLOT(proxyLogMessage())); _event_loop = new QEventLoop(this); } /** Extracts a bibliographic reference from files input_fns and writes it to the BibTeX file output_fn */ int bibExtractor::extract(const QStringList& input_fns, const QString& output_fn, const InputType& type) { _input_type = type; QString bibtex; for (int i = 0; i < input_fns.count(); ++i) { const QString& input_fn = input_fns.at(i); if (!QFileInfo(input_fn).exists()) { logMessage(tr("Error: File %1 does not exist.").arg(input_fn)); continue; } logMessage(tr("Processing %1...").arg(input_fn)); if (_input_type == Document) { _document_fn = input_fn; const QString text(documentToString(input_fn)); extract(text); } else { _document_fn.clear(); const QString text(c2bUtils::fileToString(input_fn)); extract(text); } if (_settingsP->value("cb2Bib/MovePdf").toBool() && !_document_fn.isEmpty() && isReliable()) { const QString file(_bpP->documentFilename(_document_fn, output_fn)); const QString target_doc_fn(c2bUtils::documentAbsoluteName(_settingsP->value("cb2Bib/RelativePdfDirectory").toBool(), output_fn, _settingsP->fileName("cb2Bib/PdfDirectory"), file)); const QString doc_dirname(QFileInfo(target_doc_fn).absolutePath()); QDir doc_dir(doc_dirname); if (!doc_dir.exists()) if (!doc_dir.mkpath(doc_dirname)) logMessage(tr("Error: Unable to create directory %1.").arg(doc_dirname)); if (doc_dir.exists()) { const network::Action action(network::actionType(_settingsP->value("cb2Bib/CopyMovePdf").toString())); logMessage(tr("Copying/moving to %1...").arg(target_doc_fn)); _networkQP->networkPtr()->getFile(_document_fn, target_doc_fn, action, this, SLOT(copyMoveEnded(bool))); _event_loop->exec(); if (_is_copymove_ok) { if (_settingsP->value("cb2Bib/InsertMetadata").toBool()) { QString mp_error; if (!_mpP->insertMetadata(_bpP->currentReference(), target_doc_fn, &mp_error)) { logMessage(tr("Warning: Unable to insert metadata to file %1.").arg(target_doc_fn)); logMessage(mp_error); } } _document_fn = file; } else { if (_settingsP->cl_sloppy) { logMessage(tr("Warning: Skipping file field %1.").arg(_document_fn)); _document_fn.clear(); } else _bpP->clearCurrentReference(); } } } if (isReliable()) { if (!_document_fn.isEmpty()) _bpP->setField("file", _document_fn); bibtex += _bpP->toBibTeX(); } else logMessage(tr("Warning: Skip writing reference for file %1.").arg(input_fn)); logMessage(QString()); } if (bibtex.isEmpty()) logMessage(tr("Warning: No reference extracted.")); else { logMessage(tr("Writing %1...").arg(output_fn)); if (c2bUtils::stringToFile(bibtex, output_fn)) return 0; else logMessage(tr("Error: Unable to write file %1.").arg(output_fn)); } return 1; } /** Extracts a bibliographic reference from input string text writes it to the output string bibtex */ int bibExtractor::extract(const QString& text, QString* bibtex) { _document_fn.clear(); _input_type = PlainText; extract(text); *bibtex = _bpP->toBibTeX(); if (_bpP->isAutoRecognized()) return 0; else if (_bpP->fieldCount() > 0) return 1; else return 2; } void bibExtractor::extract(const QString& text) { _extract(text); if (_settingsP->value("cb2Bib/AutomaticQuery").toBool()) if (!_bpP->autoRecognizedString().contains("BibTeX") && _bpP->fieldCount() > 0) { logMessage(tr("Submitting query...")); _settingsP->setValue("networkQuery/isSupervised", false); _networkQP->submitQuery(_bpP->currentReference(), text, _input_type == PlainText); _event_loop->exec(); _settingsP->setValue("networkQuery/isSupervised", true); } _bpP->setCiteID(); } void bibExtractor::_extract(const QString& text) { _bpP->clearCurrentReference(); _bpP->setReferenceType("unknown"); if (text.trimmed().isEmpty()) { logMessage(tr("Warning: Empty input string.")); return; } QString out_text, out_tagtext; if (_settingsP->value("cb2Bib/PreparserAutomatic").toBool()) _bpP->preparse(text, &out_text); _bpP->parse(text, &out_text, &out_tagtext); if (_bpP->fieldCount() > 0) _bpP->setReferenceType("article"); logMessage(_bpP->autoRecognizedString()); } void bibExtractor::queryEnded(bool succeeded, const QString& targetPDF, const QString& targetBib) { if (succeeded) { _extract(targetBib); if (_input_type == PlainText && _bpP->isAutoRecognized() && !targetPDF.isEmpty()) _document_fn = targetPDF; } _event_loop->exit(); } void bibExtractor::copyMoveEnded(bool ok) { _is_copymove_ok = ok; if (!_is_copymove_ok) logMessage(tr("Error: Copy/move failed. %1").arg(_networkQP->networkPtr()->errorString())); _event_loop->exit(); } void bibExtractor::proxyLogMessage() const { _networkQP->networkPtr()->cancelDownload(); logMessage(tr("Warning: Proxy authentication dialog is disabled in command line mode.")); } void bibExtractor::logMessage(const QString& ms) const { cout << "[cb2bib] " << ms << endl; } bool bibExtractor::isReliable() const { if (_settingsP->cl_sloppy) return true; else return _bpP->isAutoRecognized(); } QString bibExtractor::documentToString(const QString& fn) const { document doc(fn, document::FirstPage); const QString text(doc.toString()); if (!doc.errorString().isEmpty()) logMessage("Error: " + doc.errorString()); if (_settingsP->value("cb2Bib/AddMetadata").toBool()) { // Add metadata to document text const QString metadata(_mpP->metadata(fn)); if (_settingsP->value("cb2Bib/PreAppendMetadata").toString() == "prepend") return metadata + text; else return text + '\n' + metadata; } else return text; } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/approximatePattern.cpp0000644000000000000000000000013213124510216020153 xustar0030 mtime=1498583182.883255899 30 atime=1498583183.007254748 30 ctime=1498583182.883255899 cb2bib-1.9.7/src/c2b/approximatePattern.cpp0000644000175000001440000002555413124510216021560 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * * Class implementation of the approximate search algorithm * P. Constans. Approximate textual retrieval. arXiv:0705.0751v1, 2007. ***************************************************************************/ #include "approximatePattern.h" #include "cb2bib_utilities.h" #include "triads.h" #if QT_VERSION >= 0x050400 static const QRegularExpression::PatternOptions _qre_pattern_options( QRegularExpression::DontCaptureOption | QRegularExpression::UseUnicodePropertiesOption | QRegularExpression::OptimizeOnFirstUsageOption); #else static const QRegularExpression::PatternOptions _qre_pattern_options( QRegularExpression::DontCaptureOption | QRegularExpression::UseUnicodePropertiesOption); #endif approximatePattern::approximatePattern() : compositePattern() {} approximatePattern::approximatePattern(const QString& pattern, const Qt::CaseSensitivity cs) : compositePattern(pattern, cs) { setPattern(pattern, cs); } void approximatePattern::setPattern(const QString& pattern, const Qt::CaseSensitivity cs) { _string = pattern.simplified(); _case_sensitivity = cs; _is_multipattern = false; _matched_length = -1; _subpattern_count = 0; // Exact match if (_string.length() < 5) { _regexp.setPattern(escape(_string, _case_sensitivity)); _regexp.setPatternOptions(_qre_pattern_options); return; } // Single word: Allow 1 error (1 missing / 3 excess), anywhere if (wordCount(_string) == 1) { _regexp.setPattern(wordPattern(_string, _case_sensitivity)); _regexp.setPatternOptions(_qre_pattern_options); return; } // Multiple words _prefixes = c2bUtils::fileToString(":/txt/txt/prefixes.txt").split(c2bUtils::nonLetter, QString::SkipEmptyParts); _suffixes = c2bUtils::fileToString(":/txt/txt/suffixes.txt").split(c2bUtils::nonLetter, QString::SkipEmptyParts); splitPattern(); if (_string_pieces.count() < 3) // Cases: "qq pp", "qqq pp", etc { _regexp.setPattern(wordPattern(_string, _case_sensitivity)); _regexp.setPatternOptions(_qre_pattern_options); return; } _is_multipattern = true; // Set parameters const double percent_scan(50.); const double scan_factor(100. / percent_scan); const int max_blocks(_string_pieces.count() / 2); const int requested_blocks(c2bUtils::nearInteger(scan_factor)); const int blocks(qMin(max_blocks, 1 + requested_blocks)); int pieces_per_block(_string_pieces.count() / blocks); // Ceiling if ((_string_pieces.count() % blocks) > 0) ++pieces_per_block; #if C2B_DEBUG_APPROXIMATEPATTERN qDebug() << _string_pieces << max_blocks << scan_factor << requested_blocks << pieces_per_block << _string_pieces.count() % blocks; for (int b = 0; b < blocks; ++b) for (int i = 0; i < pieces_per_block; ++i) if (b + (i * blocks) < _string_pieces.count()) qDebug() << "block# " << b << "pick item " << b + (i * blocks) << _string_pieces.at(b + (i * blocks)); #endif _ranks.clear(); QStringList submatcher; QStringList subpattern; QStringList substring; const QString sp_stretch(".{0,%1}%2"); for (int b = 0; b < blocks; ++b) { int ii(b); QString sm(_string_pieces.at(ii)); QString sp(escape(_string_pieces.at(ii), _case_sensitivity)); QString ss(_string_pieces.at(ii)); double stretch_product(1.); for (int j = 1; j < pieces_per_block; ++j) { int jj(b + (j * blocks)); if (jj < _string_pieces.count()) { const int st(stretch(ii, jj)); sm += sp_stretch.arg(st).arg(_string_pieces.at(jj)); sp += sp_stretch.arg(st).arg(escape(_string_pieces.at(jj), _case_sensitivity)); ss += ' ' + _string_pieces.at(jj); stretch_product *= st; ii = jj; } } submatcher.append(sm); subpattern.append(sp); substring.append(ss); _ranks.append(stretch_product * triads::textFrequency(ss)); // Rank according expectation (arXiv:0705.0751v1, Eq. 6) ++_subpattern_count; } set_sort_index(); _regexp.setPattern(QString("(?:%1)").arg(subpattern.join("|"))); _submatchers.resize(_subpattern_count); _subregexps.resize(_subpattern_count); _substrings.clear(); for (int i = 0; i < _subpattern_count; ++i) { const int ii(_index.at(i)); _submatchers[i] = substringMatcher(submatcher.at(ii), _case_sensitivity); _subregexps[i].setPattern(subpattern.at(ii)); _substrings.append(substring.at(ii)); } _p0.resize(_subpattern_count); _pn.resize(_subpattern_count); } void approximatePattern::splitPattern() { if (_string.isEmpty()) return; QStringList wordList; QList wordStarts; QList wordEnds; splitPattern(_string, &wordList, &wordStarts, &wordEnds); for (int i = 0; i < wordList.count(); ++i) { const QStringList pieces(splitWord(wordList.at(i))); const QString prefix(pieces.at(0)); if (prefix.length() > 2) { _string_pieces.append(prefix); _piece_starts.append(wordStarts.at(i)); _piece_ends.append(wordStarts.at(i) + prefix.length()); } const QString suffix(pieces.at(1)); if (suffix.length() > 2) { _string_pieces.append(suffix); _piece_starts.append(wordEnds.at(i) - suffix.length()); _piece_ends.append(wordEnds.at(i)); } } } void approximatePattern::splitPattern(const QString& p, QStringList* w, QList* ws, QList* we) { w->clear(); ws->clear(); we->clear(); QString str(p); str.replace(c2bUtils::nonLetter, " "); str.append(' '); int w_starts(0); int w_ends(0); bool in_word(false); for (int i = 0; i < str.length(); ++i) if (str.at(i) == ' ') { if (in_word) { // Word actually ends at i - 1. However, this convention simplifies things. w_ends = i; w->append(str.mid(w_starts, w_ends - w_starts)); ws->append(w_starts); we->append(w_ends); } in_word = false; } else { if (!in_word) w_starts = i; in_word = true; } } const QStringList approximatePattern::splitWord(const QString& word) const { // Returns the pair "prefix+root root+suffix" const int minimum_length(5); const int wlen(word.length()); if (wlen < minimum_length) return QStringList() << word << word; QString w(word.toLower()); int plen_min(wlen); int slen_min(wlen); int plen_max(0); int slen_max(0); for (int i = 0; i < _prefixes.count(); ++i) if (w.startsWith(_prefixes.at(i))) { const int plen(_prefixes.at(i).length()); if (plen < plen_min) plen_min = plen; if (plen > plen_max) plen_max = plen; } for (int i = 0; i < _suffixes.count(); ++i) if (w.endsWith(_suffixes.at(i))) { const int slen(_suffixes.at(i).length()); if (slen < slen_min) slen_min = slen; if (slen > slen_max) slen_max = slen; } if (plen_min == wlen) plen_min = 0; if (slen_min == wlen) slen_min = 0; w = word; const int wlenMp_min(qMax(plen_min, wlen - slen_min)); const int wlenMs_min(qMax(slen_min, wlen - plen_min)); const int wlenMp_max(qMax(plen_max, wlen - slen_max)); const int wlenMs_max(qMax(slen_max, wlen - plen_max)); #if C2B_DEBUG_APPROXIMATEPATTERN qDebug() << wlenMp_min << wlenMs_min << w.left(wlenMp_min) << w.right(wlenMs_min); qDebug() << wlenMp_max << wlenMs_max << w.left(wlenMp_max) << w.right(wlenMs_max); #endif if (wlenMp_max >= minimum_length && wlenMs_max >= minimum_length) return QStringList() << w.left(wlenMp_max) << w.right(wlenMs_max); else if (wlenMp_min >= minimum_length && wlenMs_min >= minimum_length) return QStringList() << w.left(wlenMp_min) << w.right(wlenMs_min); else return QStringList() << word << word; } QString approximatePattern::wordPattern(const QString& word, Qt::CaseSensitivity cs) { const int len(word.length()); const QString ord(word.right(len - 1)); QStringList possible; possible.append(escape(ord.left(len - 2), cs)); for (int i = 1; i < len - 2; ++i) possible.append(QString("%1.{0,2}%2").arg(escape(ord.left(len - i - 3), cs)).arg(escape(ord.right(i), cs))); #if C2B_DEBUG_APPROXIMATEPATTERN qDebug() << "WordPattern: " << QString("(?:%1(?:%2)|%3)").arg(escape(word.at(0), cs)).arg(possible.join("|")).arg(escape(ord, cs)); #endif return QString("(?:%1(?:%2)|%3)").arg(escape(word.at(0), cs)).arg(possible.join("|")).arg(escape(ord, cs)); } int approximatePattern::wordCount(const QString& str) { const QString tstr(QString(str).replace(c2bUtils::nonLetter, " ").simplified()); return 1 + tstr.count(' '); } int approximatePattern::stretch(int piece_i, int piece_j) const { const int minStretch(3); const int maxStretch(20); if (_string_pieces.at(piece_j).length() > 4) return qMax((maxStretch * (piece_j - piece_i)), minStretch * (_piece_starts.at(piece_j) - _piece_ends.at(piece_i))); else return minStretch * (_piece_starts.at(piece_j) - _piece_ends.at(piece_i)); // Estimated error ratio only } void approximatePattern::mergeIndices(int* index_in, const QString& str) const { int index = str.length(); for (int i = 0; i < _subpattern_count; ++i) if (_p0.at(i) != -1 && _p0.at(i) < index) index = _p0.at(i); if (index == str.length()) index = -1; else { int pn(0); for (int i = 0; i < _subpattern_count; ++i) if (_pn.at(i) > pn && _p0.at(i) == index) pn = _pn.at(i); for (int m = 0; m < _subpattern_count; ++m) for (int i = 0; i < _subpattern_count; ++i) if (_pn.at(i) > pn && _p0.at(i) < pn) pn = _pn.at(i); // Beautify match by including whole words for (int w = index - 1; w > std::max(0, index - 13); --w) if (!str.at(w).isLetter()) { index = w + 1; break; } for (int w = pn; w < std::min(pn + 13, str.length()); ++w) if (!str.at(w).isLetter()) { pn = w; break; } _matched_length = pn - index; } *index_in = index; } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/substringMatcher.h0000644000000000000000000000013213124510216017255 xustar0030 mtime=1498583182.979255008 30 atime=1498583183.007254748 30 ctime=1498583182.983254971 cb2bib-1.9.7/src/c2b/substringMatcher.h0000644000175000001440000000671513124510216020660 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef SUBSTRINGMATCHER_H #define SUBSTRINGMATCHER_H #include #include #define C2B_DEBUG_SUBSTRINGMATCHER 0 class substringMatcher { public: substringMatcher(); substringMatcher(const QString& pattern, const Qt::CaseSensitivity cs = Qt::CaseSensitive); inline ~substringMatcher() {} int indexIn(const QString& str, const int from = 0) const; inline int matchedLength() const { return _matched_length; } private: inline int _index_in(const int& s, const QString& str, const int& p0) const { return _substrings.at(s).indexIn(str, p0); } inline int _index_in(const int& s, const QString& str, const int& p0, const int& pn) const { #if C2B_DEBUG_SUBSTRINGMATCHER qDebug() << "Search for substring:" << _substrings.at(s).pattern() << "in interval" << p0 << pn; int i; if (p0 >= pn) i = -1; else i = _substrings.at(s).indexIn(str.unicode(), std::min(_pn, pn), p0); qDebug() << "Returned index:" << i; return i; #else if (p0 >= pn) return -1; return _substrings.at(s).indexIn(str.unicode(), std::min(_pn, pn), p0); #endif } inline int _p_back(const int s, const int p0) const { return std::max(_p0 + _acc_lengths.at(s), p0 - _stretches.at(s + 1) - _lengths.at(s)); } inline int _p_forth(const int s, const int p0) const { return std::min(_pn, p0 + _stretches.at(s) + _lengths.at(s)); } inline int _index_back(const int s, const QString& str, int p0, const int pn) const { while ((p0 = _index_in(s, str, p0, pn)) != -1) { if (s == 0) return p0; const int i(_index_back(s - 1, str, _p_back(s - 1, p0), p0)); if (i != -1) return i; p0 += _lengths.at(s); } return -1; } inline int _index_forth(const int s, const QString& str, int p0, const int pn) const { while ((p0 = _index_in(s, str, p0, pn)) != -1) { p0 += _lengths.at(s); if (s + 1 == _substring_count) return p0; const int i(_index_forth(s + 1, str, p0, _p_forth(s + 1, p0))); if (i != -1) return i; } return -1; } inline int _index_around(const QString& str, const int phook) const { int bp(phook); if (_hook > 0) { bp = _index_back(_hook - 1, str, _p_back(_hook - 1, bp), bp); if (bp == -1) return -1; } int fp(phook + _lengths.at(_hook)); if (_hook + 1 < _substring_count) { fp = _index_forth(_hook + 1, str, fp, _p_forth(_hook + 1, fp)); if (fp == -1) return -1; } _matched_length = fp - bp; return bp; } QVector _substrings; QVector _acc_lengths; QVector _lengths; QVector _stretches; int _hook; int _substring_count; mutable int _matched_length; mutable int _p0; mutable int _pn; }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/journalDB.h0000644000000000000000000000013213124510216015611 xustar0030 mtime=1498583182.963255156 30 atime=1498583183.007254748 30 ctime=1498583182.967255119 cb2bib-1.9.7/src/c2b/journalDB.h0000644000175000001440000000317113124510216017205 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef JOURNALDB_H #define JOURNALDB_H #include #include /** Database of Journal Names @author Pere Constans */ class journalDB { public: explicit journalDB(const QString& dbfile); inline ~journalDB() {} QString retrieve(const QString& JQuery) const; QString retrieveFull(const QString& JQuery) const; inline int count() const { return _nitems; } inline const QString& retrieve(const int index) const { return JAbbrev.at(index); } inline const QString& retrieveFull(const int index) const { return JExtended.at(index); } inline const QString& simplified(const int index) const { return JAbbrev_simp_w.at(index); } inline const QString& fullsimplified(const int index) const { return JAbbrev_simp.at(index); } inline const QString& fullsimplifiedFull(const int index) const { return JExtended_simp.at(index); } inline const QStringList& abbreviatedSimplifiedList() const { return JAbbrev_simp_w; } private: QStringList JAbbrev; QStringList JAbbrev_simp; QStringList JAbbrev_simp_w; QStringList JCode; QStringList JExtended; QStringList JExtended_simp; int _nitems; }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/heuristicBibParser.h0000644000000000000000000000013213124510216017522 xustar0030 mtime=1498583182.963255156 30 atime=1498583183.007254748 30 ctime=1498583182.963255156 cb2bib-1.9.7/src/c2b/heuristicBibParser.h0000644000175000001440000000624613124510216021124 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef HEURISTICBIBPARSER_H #define HEURISTICBIBPARSER_H #include "authorString.h" #include "bibReference.h" class bibParser; class journalDB; /** bibParser helper class for heuristic recognition @author Pere Constans */ class heuristicBibParser { public: explicit heuristicBibParser(bibParser* bp); ~heuristicBibParser(); void guessFields(const QString& clean_text, const QString& tagged_text); void heuristicFields(const QString& text); private: QRegExp* _author_b2_lc_rx; QRegExp* _author_b2_uc_rx; QRegExp* _author_b3_lc_rx; QRegExp* _author_b3_uc_rx; QRegExp* _author_b4_lc_rx; QRegExp* _author_b4_uc_rx; QRegExp* _author_b5_lc_rx; QRegExp* _author_b5_uc_rx; QRegExp _author_sb; QRegExp _author_sb_lc; QRegExp _author_sb_uc; QRegExp _hyphens; QRegExp _leading_non_letters; QString _hyphen_nums; QString _hyphen_pages; QString guessAuthor_multi_block(); QString guessAuthor_single_block(); QStringList _word_prefix_lexicon; author::encoder _aencoder; bibParser* _bpP; bibReference& _current_reference; bool _reliable_number; bool _reliable_pages; bool _reliable_volume; const QString _abstract; const QString _addauthors; const QString _author; const QString _isbn; const QString _keywords; const QString _number; const QString _pages; const QString _title; const QString _volume; const QString _year; const QStringList& _bibliographic_fields; const journalDB& _journal_db; int _max_year; static int authorCount(const QString& authors); void guessAbstract(const QString& text); void guessAuthor(const QString& tagged_text); void guessFromMetadata(const QString& text); void guessISBN(const QString& text); void guessJournal(const QString& text); void guessKeywords(const QString& text); void guessNumber(const QString& text); void guessPages(const QString& text); void guessTitle(const QString& text); void guessVolume(const QString& text); void guessVolumePagesYear(const QString& text); void guessVolumeYearPages(const QString& text); void guessYear(const QString& text); void guessYearVolumePages(const QString& text); inline void _debug_guess(const QString& #ifdef C2B_DEBUG_HEURISTICBIBPARSER procedure #endif ) const { #ifdef C2B_DEBUG_HEURISTICBIBPARSER qDebug() << "[cb2bib] " << procedure; for (int i = 0; i < _bibliographic_fields.count(); ++i) { if (!_current_reference.value(_bibliographic_fields.at(i)).isEmpty()) qDebug() << QString(" %1: '%2'").arg(_bibliographic_fields.at(i)) .arg(_current_reference.value(_bibliographic_fields.at(i))); } #endif } }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/bibSearcher.cpp0000644000000000000000000000013213124510216016475 xustar0030 mtime=1498583182.891255824 30 atime=1498583183.007254748 30 ctime=1498583182.891255824 cb2bib-1.9.7/src/c2b/bibSearcher.cpp0000644000175000001440000004560613124510216020102 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "bibSearcher.h" #include "bibParser.h" #include "settings.h" #include /** \page c2bsearch Search BibTeX files for references \section descrip Description - Search pattern \n Patterns and composite patterns can be either \htmlonly approximate strings, \endhtmlonly strings, regular expressions, or wildcard filters. Patterns admit Unicode characters. The scope of each pattern can be the reference as a whole or be focused on a particular reference field. The fields year, file, and journal are treated specifically. The field year has the qualifiers Exact, Newer, and Older. The field file can optionally refer to either the filename or the contents of such a file. Finally, for journal, the input pattern is duplicated to the, if available, journal fullname, and they two are checked against the journal actual field contents and, if available, its expanded contents. For example, typing 'ijqc' retrieves all references with journal being 'Int. J. Quantum Chem.'. Or, typing 'chemistry' retrieves any of 'J. Math. Chem.', 'J. Phys. Chem.', etc. This expansion is not performed when the pattern scope is set to all. - Search scope \n By default, searches are performed on the current BibTeX output file. If Scan all BibTeX files is checked the search will extend to all BibTeX files, extension .bib, present in the current directory. It might be therefore convenient to group all reference files in one common directory, or have them linked to that directory. When Scan linked documents is checked, and one or more pattern scope is all or file, the contents of the file in file is converted to text and scanned for that given pattern. See \ref c2bconf_utilities section to configure the external to text converter. - Search modifier \n \htmlonly The cb2Bib converts TeX encoded characters to Unicode when parsing the references. This permits, for instance, for the pattern 'Møller' to retrieve either 'Møller' or 'M{\o}ller', without regard to how the BibTeX reference is written. By checking Simplify source, the reference and the converted PDF files are simplified to plain Ascii. Thus, the pattern '\bMoller\b' will hit any of 'Møller', 'M{\o}ller', or 'Moller'. Additionally, all non-word characters are removed, preserving only the Ascii, word structure of the source. Note that source simplification is only performed for the patterns whose scope is all or file contents, and that and so far, the cb2Bib has only a subset of such conversions. Implemented TeX to Unicode conversions can be easily checked by entering a reference. The Unicode to Ascii letter-only conversion, on the other hand, is the one that the cb2Bib also uses to write the reference IDs and, hence, the renaming of dropped files. The cb2Bib can also understand minor sub and superscript formatting. For instance, the pattern 'H2O' will retrieve 'H2O' from a BibTeX string 'H$_{2}$O'. \endhtmlonly \section notes Notes - The cb2Bib uses an internal cache to speed up the search of linked files. By default data is stored as current_file.bib.c2b. It might be more convenient, however, to setup a temporary directory out of the user data backup directories. See Search In Files Cache Directory in \ref c2bconf_files. When a linked file is processed for the first time, the cb2Bib does several string manipulations, such as removing end of line hyphenations. This process is time consuming for very large files. - The approximate string search is described in reference \htmlonly http://arxiv.org/abs/0705.0751v1. \endhtmlonly It reduces the chance of missing a hit due to transcription and decoding errors in the document files. Approximate string is also a form of serendipitous information retrieval.

         

        */ /** Top level driver for searching BibTeX files */ bibSearcher::bibSearcher(bibParser* bp, QObject* parento) : QObject(parento), _bpP(bp), _do_search_similar(false) { clear(); } /** Top level driver for searching BibTeX files. Specialized constructor for searching repeated or similar references. */ bibSearcher::bibSearcher(bibParser* bp, const QString& bib_dir, QObject* parento) : QObject(parento), _bpP(bp), _do_search_similar(true) { // Retrieve (any_author(approximate) AND any_title(approximate)) OR citeidName(exact) clear(); setSearchScope(bib_dir, bib_dir, true, false); setSimplifySource(false); setBoolean(true); const QString type(searchPattern::type(searchPattern::ApproximateString)); addPattern(false, false, type, "all", QChar(), _bpP->currentReference().anyAuthor()); addPattern(false, false, type, "all", QChar(), _bpP->currentReference().anyTitle()); _do_search_similar_citeid = _bpP->currentReference().citeidName; if (_do_search_similar_citeid.isEmpty()) _do_search_similar_citeid = '@'; } bibSearcher::bibSearcher() : _bpP(0), _do_search_similar(false) { clear(); } void bibSearcher::addPattern(bool Not, bool caseSensitive, const QString& patternType, const QString& scope, const QChar& yearScope, const QString& pattern) { if (pattern.trimmed().isEmpty()) return; _patterns.append(searchPattern(Not, caseSensitive, patternType, scope, yearScope, pattern)); if (!_scopes.contains(scope)) _scopes.append(scope); } void bibSearcher::exec() { if (_patterns.count() == 0 && !_do_search_similar) return; qSort(_patterns); _include_documents = _include_documents && (_scopes.contains("all") || _scopes.contains("file")); if (_include_documents && !_scopes.contains("file")) _scopes.append("file"); _scopes.removeAll("all"); QString and_or; if (_boolean_and) and_or = ".AND."; else and_or = ".OR."; for (int i = 0; i < _patterns.count(); ++i) { const searchPattern& pattern = _patterns.at(i); _log_string += tr("% Pattern%1: %2%3\n").arg(i + 1).arg(and_or).arg(pattern.toString()); } // Search In Files const QStringList flist(_all_bibtex_files ? c2bUtils::filesInDir(_bibtex_dir, QStringList() << "*.bib") : c2bUtils::filesInDir(_bibtex_file, QStringList() << "*.bib")); for (int i = 0; i < flist.count(); ++i) { search(flist.at(i)); if (_aborted) { clear(); _error_counter = -1; return; } } // Search Done _log_string += tr("% Scanned References: %1 BibTeX Files: %2 Linked Files: %3\n"). arg(_reference_counter).arg(_bibtex_counter).arg(_document_counter); if (_include_documents) _documents.unload(); if (_hits_map.count() == 0) return; _hits_string = "\n\n" + QStringList(_hits_map.keys()).join("\n\n") + "\n\n"; _log_string += tr("% Total Unique Hits: %1\n").arg(_hits_map.count()); } QString bibSearcher::searchDocumentKeyword(const QString& bibtexfn, const QString& documentfn, const QString& keyword) { bibSearcher bs; QString exc; bs._documents.load(bibtexfn, documentContents::Complete); if (bs._documents.setCurrent(documentfn)) { QString p(keyword); p.replace(QRegExp("\\W"), ".{0,5}"); p.replace("s", ".?"); p = "\\b" + p + "\\w*\\b"; bs.addPattern(false, false, searchPattern::type(searchPattern::RegularExpression), "all", QChar(), p); QString document(bs._documents.current().text()); c2bUtils::stripDiacritics(document); if (bs._patterns.at(0).matches(document)) { exc = c2bUtils::fileToString(":/htm/htm/excerpts.html"); exc.replace("GET_EXCERPTS_TITLE", keyword); exc.replace("GET_EXCERPTS", bs.excerpts(document).mid(20)); } } bs._documents.unload(); return exc; } void bibSearcher::abort() { _aborted = true; } void bibSearcher::clear() { _aborted = false; _all_bibtex_files = false; _bibtex_counter = 0; _bibtex_dir.clear(); _bibtex_file.clear(); _boolean_and = true; _do_search_similar_citeid.clear(); _document_counter = 0; _error_counter = 0; _hits_map.clear(); _hits_string.clear(); _include_documents = false; _log_string = "% cb2Bib " + C2B_VERSION + " / BibTeX Search Log\n"; _patterns.clear(); _reference_counter = 0; _scopes.clear(); _simplify_source = false; } void bibSearcher::search(const QString& bib_file) { _bibtex_counter++; QString bib_file_contents; QFile file(bib_file); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { _error_counter++; _log_string += tr("% [cb2bib] Unable to open the file %1 for reading. Error: '%2'.\n").arg(bib_file).arg(file.errorString()); return; } QTextStream stream(&file); stream.setCodec("UTF-8"); stream.setAutoDetectUnicode(true); bib_file_contents = stream.readAll(); _log_string += tr("% Scanning file %1\n").arg(bib_file.trimmed()); if (_include_documents) { if (_simplify_source) _documents.load(bib_file, documentContents::Simplified); else _documents.load(bib_file, documentContents::Complete); } const int hits(_hits_map.count()); bibReference ref; _bpP->initReferenceParsing(bib_file, _scopes, &ref); while (_bpP->referencesIn(bib_file_contents, &ref)) { _reference_counter++; if (_do_search_similar) searchSimilarReferences(bib_file, ref); else searchReference(bib_file, ref); QCoreApplication::processEvents(); if (_aborted) return; } _log_string += tr("% File %1. Hits: %2\n").arg(bib_file.trimmed()).arg(_hits_map.count() - hits); } void bibSearcher::searchReference(const QString& bib_file, const bibReference& ref) { const bool include_document(_include_documents && _documents.setCurrent(ref.value("file"), &_document_counter, &_log_string, &_error_counter)); // Initialize composite search bool hit(_boolean_and); // Composite search for (int i = 0; i < _patterns.count(); ++i) { const searchPattern& pattern = _patterns.at(i); const searchPattern::modifiers& modifier = pattern.modifier(); bool ihit(false); if (modifier.scope == "year") { int istr(ref.value(modifier.scope).toInt()); int jstr(modifier.string.toInt()); if (modifier.yearScope == '=') ihit = istr == jstr; else if (modifier.yearScope == '>') ihit = istr >= jstr; else if (modifier.yearScope == '<') ihit = istr <= jstr; } else if (modifier.scope == "all") { if (_simplify_source) ihit = pattern.matches(c2bUtils::toAscii(ref.unicodeReference, c2bUtils::FromBibTeX)); else ihit = pattern.matches(ref.unicodeReference); if (!ihit) if (include_document) ihit = pattern.matches(_documents.current()); } else if (modifier.scope == "journal") { const QString pattern_full(_bpP->fullJournal(modifier.string)); const QString j_orig(ref.value(modifier.scope)); const QString j_full(_bpP->fullJournal(j_orig)); ihit = j_full == pattern_full || pattern.matches(j_orig) || pattern.matches(j_full); } else if (modifier.scope == "file" && include_document) ihit = pattern.matches(_documents.current()); else ihit = pattern.matches(ref.value(modifier.scope)); if (modifier.NOT) ihit = !ihit; if (_boolean_and) { hit = hit && ihit; if (!hit) break; } else { hit = hit || ihit; if (hit) break; } } if (hit) if (!_hits_map.contains(ref.rawReference)) { if (include_document) _hits_map.insert(ref.rawReference, location(bib_file, ref) + excerpts(_documents.current().text())); else _hits_map.insert(ref.rawReference, location(bib_file, ref)); } } void bibSearcher::searchSimilarReferences(const QString& bib_file, const bibReference& ref) { if (ref.citeidName == _do_search_similar_citeid) { if (!_hits_map.contains(ref.rawReference)) _hits_map.insert(ref.rawReference, location(bib_file, ref)); return; } if (_patterns.count() == 0) return; // Initialize composite search bool hit(_boolean_and); // Composite search for (int i = 0; i < _patterns.count(); ++i) { const searchPattern& pattern = _patterns.at(i); hit = hit && pattern.matches(ref.unicodeReference); if (!hit) break; } if (hit) if (!_hits_map.contains(ref.rawReference)) _hits_map.insert(ref.rawReference, location(bib_file, ref)); } const QString bibSearcher::excerpts(const QString& contents) const { const int max_excerpts(25); const int max_unmerged_excerpts(max_excerpts + 10); QMap exc_endpos; for (int i = 0; i < _patterns.count(); ++i) { const searchPattern& pattern(_patterns.at(i)); const searchPattern::modifiers& modifier(pattern.modifier()); if (modifier.NOT) continue; if (modifier.scope != "all" && modifier.scope != "file") continue; int n_excerpts(0); int pos(0); while (pos >= 0) { pos = pattern.indexIn(contents, pos); if (pos > -1) { if (++n_excerpts > max_unmerged_excerpts) break; exc_endpos.insert(pos, qMax(pos + pattern.matchedLength(), exc_endpos.value(pos))); pos += pattern.matchedLength(); } } } if (exc_endpos.isEmpty()) return QString(); // Merge QList i_pos = exc_endpos.keys(); int pos0(i_pos.at(0)); for (int i = 1; i < i_pos.count(); ++i) { const int posi(i_pos.at(i)); if (exc_endpos.value(pos0) < posi) pos0 = posi; else { const int endposi(exc_endpos.value(posi)); exc_endpos.remove(posi); exc_endpos.insert(pos0, endposi); } } i_pos = exc_endpos.keys(); const int context_length(75); QString exc; QRegExp lead_truncated_words("^.*\\s(?=\\w)"); lead_truncated_words.setMinimal(true); QRegExp tail_truncated_words("\\W+\\w+\\W*$"); tail_truncated_words.setMinimal(true); bool item_begins(true); bool item_complete; const int items(qMin(i_pos.count(), max_excerpts)); for (int i = 0; i < items; ++i) { const int pos(i_pos.at(i)); const int length(exc_endpos.value(pos) - pos); const QString match("" + c2bUtils::toHtmlString(contents.mid(pos, length)) + ""); if (item_begins) { QString pre_match(contents.mid(pos - context_length, context_length)); pre_match.remove(lead_truncated_words); pre_match = c2bUtils::toHtmlString(pre_match); exc += "• ..." + pre_match + match; } else exc += match; if (i + 1 == items) item_complete = true; else item_complete = exc_endpos.value(pos) + (2 * context_length) < i_pos.at(i + 1); if (item_complete) { QString post_match(contents.mid(pos + length, context_length)); post_match.remove(tail_truncated_words); post_match = c2bUtils::toHtmlString(post_match); exc += post_match + "... "; item_begins = true; } else { exc += contents.mid(pos + length, i_pos.at(i + 1) - pos - length); item_begins = false; } } exc = "

        " + exc; if (i_pos.count() >= max_excerpts) exc += tr("

        Found more than %1 occurrences.").arg(max_excerpts); return exc; } const QString bibSearcher::highlight(const QString& abstract) const { if (abstract.isEmpty()) return abstract; QMap endpos; for (int i = 0; i < _patterns.count(); ++i) { const searchPattern& pattern = _patterns.at(i); const searchPattern::modifiers& modifier = pattern.modifier(); if (modifier.NOT) continue; if (modifier.scope != "all" && modifier.scope != "abstract") continue; int pos(0); while (pos >= 0) { pos = pattern.indexIn(abstract, pos); if (pos > -1) { endpos.insert(pos, qMax(pos + pattern.matchedLength(), endpos.value(pos))); pos += pattern.matchedLength(); } } } if (endpos.isEmpty()) return c2bUtils::toHtmlString(abstract); // Merge QList i_pos = endpos.keys(); int pos0(i_pos.at(0)); for (int i = 1; i < i_pos.count(); ++i) { const int posi(i_pos.at(i)); if (endpos.value(pos0) < posi) pos0 = posi; else { const int endposi(endpos.value(posi)); endpos.remove(posi); endpos.insert(pos0, endposi); } } i_pos = endpos.keys(); QString hla; int npos(0); for (int i = 0; i < i_pos.count(); ++i) { const int pos(i_pos.at(i)); const int length(endpos.value(pos) - pos); hla += c2bUtils::toHtmlString(abstract.mid(npos, pos - npos)) + "" + c2bUtils::toHtmlString(abstract.mid(pos, length)) + ""; npos = endpos.value(pos); } hla += c2bUtils::toHtmlString(abstract.mid(npos, abstract.length() - npos)); return hla; } const QString bibSearcher::location(const QString& fn, const bibReference& ref) const { const QString at("" "\"action\""); return at.arg(QDir::cleanPath(fn)).arg(ref.positionValue); } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/network.h0000644000000000000000000000013213124510216015422 xustar0030 mtime=1498583182.967255119 30 atime=1498583183.007254748 30 ctime=1498583182.971255081 cb2bib-1.9.7/src/c2b/network.h0000644000175000001440000000644613124510216017026 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef NETWORK_H #define NETWORK_H #include #include #include #include #include /** cb2Bib Network file copy/move @author Pere Constans */ class network : public QObject { Q_OBJECT public: explicit network(QObject* parento = 0); inline ~network() {} enum Action {Copy, Move}; void getFile(const QString& source, const QString& destination, const Action action = Copy, QObject* receiver = 0, const char* callback = 0, const bool overwrite = false); void headFile(const QString& source, QObject* receiver = 0, const char* callback = 0); inline const QString destinationFilename() const { return _destination_filename; } inline const QString sourceFilename() const { return _source_filename; } inline const QString errorString() const { return _request_error_string; } inline const QString mimetypeString() const { return _file_mimetype_string; } inline static Action actionType(const QString& action) { return action == "move" ? Move : Copy; } signals: void downloadProgress(qint64 bytesReceived, qint64 bytesTotal); void proxyAuthenticationRequired(const QNetworkProxy& proxy, QAuthenticator* auth); void requestFinished(bool succeeded); public slots: void cancelDownload(); private: QByteArray _fetch_url_query; QFile _destination_file; QNetworkAccessManager* _fetcher; QNetworkAccessManager::Operation _fetch_operation; QNetworkReply* _current_reply; QProcess* _fetcher_client; QString FmClientCopyArg; QString FmClientCopyBin; QString FmClientMoveArg; QString FmClientMoveBin; QString _destination_filename; QString _file_mimetype_string; QString _request_error_string; QString _source_filename; bool FmClient; bool _is_fetching; bool _request_succeeded; bool checkDestination(); const int _max_redirections; int _redirection_count; void _emit_request_finished(bool succeeded); void _fetch(const QUrl& url); void _fetch_c2b(const Action action, const QNetworkAccessManager::Operation operation = QNetworkAccessManager::GetOperation); void _fetch_client(const Action action); void _head(const QUrl& url); void getFilePrivate(const Action action); void headFilePrivate(); inline void setup(const QString& source, const QString& destination = QString()) { _destination_filename = destination; _source_filename = source; _file_mimetype_string.clear(); _request_error_string.clear(); _is_fetching = true; _redirection_count = 0; } private slots: void _client_finished(int exitCode, QProcess::ExitStatus exitStatus); void _emit_request_finished(); void _fetch_finished(); void _fetch_ready_read(); void _head_finished(); void loadSettings(); void logError(); }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/pubmedXml.h0000644000000000000000000000013213124510216015666 xustar0030 mtime=1498583182.975255045 30 atime=1498583183.007254748 30 ctime=1498583182.975255045 cb2bib-1.9.7/src/c2b/pubmedXml.h0000644000175000001440000000157213124510216017265 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef PUBMEDXML_H #define PUBMEDXML_H #include "bibReference.h" #include class pubmedXml : public QXmlStreamReader { public: explicit pubmedXml(const QString& xml); inline ~pubmedXml() {} inline bibReference reference() const { return _reference; } private: bibReference _reference; bool reading(const QString& tag); void readAuthors(); void readField(const QString& field); void readJournal(); void readKeywords(); void readReference(); }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/monthDB.cpp0000644000000000000000000000013213124510216015617 xustar0030 mtime=1498583182.911255639 30 atime=1498583183.007254748 30 ctime=1498583182.915255601 cb2bib-1.9.7/src/c2b/monthDB.cpp0000644000175000001440000000441413124510216017214 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "monthDB.h" #include "settings.h" monthDB::monthDB() : _day_rx(QRegExp("(\\d+)")), _month_rx(QRegExp("([A-Za-z]+)")), _month_abbreviated(QString("jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec").split('|')), _month_full(QString("January|February|March|April|May|June|July|August|September|October|November|December").split('|')) {} QString monthDB::retrieve(const QString& month_query) { bool has_month(_month_rx.indexIn(month_query) > -1); if (!has_month) return month_query; const QString month(_month_rx.cap(1)); const QString month_abbreviated(abbreviated(month)); const QString month_full(full(month)); // Early return if month is not recognized if (month_abbreviated == month_full) return month_query; const bool has_day(_day_rx.indexIn(month_query) > -1); if (settings::instance()->value("cb2Bib/PostprocessMonth").toBool()) { // Do '1 April' -> '"1~" # apr' if (has_day) return QString("\"%1~\" # %2").arg(_day_rx.cap(1)).arg(month_abbreviated); else return month_abbreviated; } else { // Capitalize if (has_day) return QString("%1 %2").arg(_day_rx.cap(1)).arg(month_full); else return month_full; } } QString monthDB::abbreviated(const QString& month) const { for (int i = 0; i < 12; i++) if (QString::compare(month, _month_abbreviated.at(i), Qt::CaseInsensitive) == 0 || QString::compare(month, _month_full.at(i), Qt::CaseInsensitive) == 0) return(_month_abbreviated.at(i)); return(month); } QString monthDB::full(const QString& month) const { for (int i = 0; i < 12; i++) if (QString::compare(month, _month_abbreviated.at(i), Qt::CaseInsensitive) == 0 || QString::compare(month, _month_full.at(i), Qt::CaseInsensitive) == 0) return(_month_full.at(i)); return(month); } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/networkQuery.h0000644000000000000000000000013213124510216016450 xustar0030 mtime=1498583182.971255081 30 atime=1498583183.007254748 30 ctime=1498583182.971255081 cb2bib-1.9.7/src/c2b/networkQuery.h0000644000175000001440000000537213124510216020051 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef NETWORKQUERY_H #define NETWORKQUERY_H #include #include class bibParser; class bibReference; class network; class settings; /** cb2Bib Network Queries @author Pere Constans */ class networkQuery : public QObject { Q_OBJECT public: networkQuery(bibParser* bp, QObject* parento = 0); networkQuery(bibParser* bp, network* net, QObject* parento = 0); inline virtual ~networkQuery() {} void submitQuery(const bibReference& reference, const QString& raw_reference, const bool check_document); inline QString errorString() const { return _error_string; } inline network* networkPtr() const { return _networkP; } signals: void queryEnded(bool succeeded, const QString& targetPDF, const QString& targetBib); void statusMessage(const QString& ms); protected: virtual bool checkQueryFile(const QString& fn) const; virtual inline QString fromHtmlString(const QString& str, const bool /* addMetadata */ = false) const { // Note: fromHtmlString in c2bUtils uses QTextDocument to perform HTML to text // conversions. c2bUtils::fromHtmlString is not set in the c2blib because GUI classes // are excluded from the core library. return str; } virtual bool openFile(const QString& /* fn */) const { // Reimplement to open files in GUI mode return false; } private: QList _query_parameter_count; QString _Qauthor; QString _Qdoi; QString _Qexcerpt; QString _Qjournal; QString _QjournalCode; QString _Qpage; QString _Qtitle; QString _Qvolume; QString _action; QString _captionQ; QString _error_string; QString _networkquery_tmp_fn1; QString _networkquery_tmp_fn2; QString _pdfurl_prefix; QString _pdfurl_sufix; QString _referenceurl_prefix; QString _referenceurl_sufix; QString _targetBib; QString _targetPDF; QString _targetQ; bibParser* _bpP; bool _check_document; bool _is_end_of_file; const QString encodeUrl(const QString& url) const; network* _networkP; settings* _settingsP; void init(); private slots: bool areQueryParametersValid(); bool setQueryParameters(); void queryDone(bool succeeded); void submitQuery1(); void submitQuery2(bool succeeded); void submitQuery3(bool succeeded); void updateQueryPlaceholders(); }; #endif cb2bib-1.9.7/src/c2b/PaxHeaders.3194/collectionIndex.cpp0000644000000000000000000000013113124510216017406 xustar0030 mtime=1498583182.895255788 30 atime=1498583183.007254748 29 ctime=1498583182.89925575 cb2bib-1.9.7/src/c2b/collectionIndex.cpp0000644000175000001440000014400613124510216021006 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "collectionIndex.h" #include "bibParser.h" #include "cb2bib_utilities.h" #include "documentCache.h" #include "documentParser.h" #include "posTagger.h" #include "settings.h" #include #include #include #include // Tunable parameters static const int _document_length_threshold(100000); static const int _in_long_document_sentence_repetition(3); static const int _in_short_document_sentence_repetition(2); static const int _inter_document_sentence_repetition(3); #if QT_VERSION >= 0x050400 static const QRegularExpression::PatternOptions _qre_pattern_options( QRegularExpression::UseUnicodePropertiesOption | QRegularExpression::OptimizeOnFirstUsageOption); #else static const QRegularExpression::PatternOptions _qre_pattern_options( QRegularExpression::UseUnicodePropertiesOption); #endif #define C2B_DEBUG_COLLECTIONINDEX 0 class reversedsorting { public: inline reversedsorting() {} inline bool operator()(const QString& si, const QString& sj) const { const int li(si.length()); const int lj(sj.length()); const QChar* a = si.unicode() + li - 1; const QChar* b = sj.unicode() + lj - 1; int cl(qMin(li, lj)); while (cl-- > 0) { if (*a == *b) { --a; --b; } else return *a < *b; } return li < lj; } }; class ussorting { public: inline ussorting() : ss(' '), us('_') {} inline bool operator()(const QString& si, const QString& sj) { QString ssi(si); QString ssj(sj); return ssi.replace(us, ss) < ssj.replace(us, ss); } const QChar ss; const QChar us; }; collectionIndex::collectionIndex(bibParser* bp) : _out(*(new QTextStream(stdout))), _bpP(bp), _space_char(QChar(' ')), _nerrors(0), _settingsP(settings::instance()) {} collectionIndex::~collectionIndex() { delete &_out; } int collectionIndex::index(const QString& dir) { const unsigned long start_time(clock()); _nerrors = 0; _keysentences.clear(); const QString bibtexdir(dir.isEmpty() ? QDir::toNativeSeparators(QFileInfo(_settingsP->fileName("cb2Bib/BibTeXFile")).path()) : QDir::toNativeSeparators(dir)); _out << QObject::tr("Indexing references from directory %1...").arg(bibtexdir) << endl; bibReference reference; documentCache dc; int documentid(0); QStringList documents; QStringList documentfns; const QStringList bibtexfns(c2bUtils::filesInDir(bibtexdir, QStringList() << "*.bib")); if (bibtexfns.count() == 0) { ++_nerrors; _out << QObject::tr("Error: No BibTeX files at %1").arg(bibtexdir) << endl; return _nerrors; } const QStringList fields(QStringList() << "file" << "journal" << "title" << "booktitle"); int nfailures(0); for (int i = 0; i < bibtexfns.count(); ++i) { const QString bibtexfn(bibtexfns.at(i)); _out << QObject::tr("Indexing %1...").arg(bibtexfn) << endl; const QString bibtex(c2bUtils::fileToString(bibtexfn)); dc.load(bibtexfn, documentContents::Complete); _bpP->initReferenceParsing(bibtexfn, fields, &reference); while (_bpP->referencesIn(bibtex, &reference)) { QString docfn(reference.value("file")); if (docfn.isEmpty()) continue; docfn = QDir::cleanPath(docfn); const QString journal(reference.value("journal")); QString title(reference.anyTitle()); c2bUtils::cleanTitle(title, true); if (dc.setCurrent(docfn)) setKeySentences(documentid, preprocessedText(journal, dc.current().text())); else ++nfailures; ++documentid; documents.append(title); documentfns.append(docfn); } dc.unload(); } if (nfailures > 0) { _out << QObject::tr("Warning: %1 documents could not be converted to text. Check search converter is set.").arg(nfailures) << endl; _out << QObject::tr(" Refresh cache by running a prove search including document contents.") << endl; } _out << QObject::tr("done") << endl; digestKeySentences(); cleanupKeySentences(); analyzeKeySentences(); #if C2B_DEBUG_COLLECTIONINDEX for (int i = 0; i < documents.count(); ++i) { QStringList sentences(_document_sentences.values(i)); qSort(sentences); _out << i << " " << documents.at(i) << ':' << endl; for (int j = 0; j < sentences.count(); ++j) _out << " " << sentences.at(j) << endl; } #endif _out << QObject::tr("Cleaning arrays...") << endl; _keysentences.clear(); _document_sentences.clear(); _out << QObject::tr("done") << endl; const QString cache_dir(_settingsP->fileName("cb2Bib/CacheDirectory")); const QString documentslfn(QDir::toNativeSeparators(cache_dir + "/documents.lc2b")); QFile documentslf(QDir::cleanPath(documentslfn)); if (documentslf.open(QIODevice::WriteOnly)) { _out << QObject::tr("Writing %1...").arg(documentslfn) << endl; QDataStream stream(&documentslf); stream << documentfns.count(); for (int i = 0; i < documentfns.count(); ++i) stream << documentfns.at(i); documentslf.close(); } else { ++_nerrors; _out << QObject::tr("Error: %1 can not be written").arg(documentslfn) << endl; } const QString documentsifn(QDir::toNativeSeparators(cache_dir + "/documents.ic2b")); QFile documentsif(documentsifn); if (documentsif.open(QIODevice::WriteOnly)) { _out << QObject::tr("Writing %1...").arg(documentsifn) << endl; QDataStream stream(&documentsif); for (int i = 0; i < documents.count(); ++i) { QList sentenceids(_document_sentenceids.values(i)); qSort(sentenceids); stream << sentenceids.count(); for (int j = 0; j < sentenceids.count(); ++j) stream << sentenceids.at(j); } documentsif.close(); } else { ++_nerrors; _out << QObject::tr("Error: %1 can not be written").arg(documentsifn) << endl; } _out << QObject::tr("done") << endl; const double time = double(clock() - start_time) / double(CLOCKS_PER_SEC); _out << QObject::tr("Indexing CPU time: %1s").arg(time) << endl; return _nerrors; } void collectionIndex::setKeySentences(const int documentid, const QString& text) { QHash docsentences; documentParser dp(text, 7); while (dp.parses()) { if (dp.nlength() < 4 * dp.nwords()) continue; const QStringRef s(dp.subsentence()); docsentences.insert(s, 1 + docsentences.value(s)); } const int dsr(text.length() < _document_length_threshold ? _in_short_document_sentence_repetition : _in_long_document_sentence_repetition); for (QHash::const_iterator si = docsentences.constBegin(); si != docsentences.constEnd(); ++si) { const QStringRef& s(si.key()); const int& n(si.value()); if (n < dsr) continue; const QString ss(s.toString()); if (!isValidKeySentence(ss)) continue; if (_keysentences.contains(ss)) _keysentences[ss].update(documentid); else _keysentences.insert(ss, KeysentenceData(documentid)); } } void collectionIndex::analyzeKeySentences() { _out << QObject::tr("Analysing keyword sentences...") << endl; posTagger pt; if (!pt.loadLexicon()) { ++_nerrors; _out << QObject::tr("Error: cb2Bib POS lexicon could not be loaded; check Configure Files") << endl; return; } QStringList validlist; #if C2B_DEBUG_COLLECTIONINDEX QStringList taggedvalidlist; #endif for (QMap::const_iterator si = _keysentences.constBegin(); si != _keysentences.constEnd(); ++si) { const QString& s(si.key()); const KeysentenceData& sdata(si.value()); if (sdata.ndocuments < _inter_document_sentence_repetition) continue; const QString pts(pt.tagged(s)); if (pt.contains(pts)) { validlist.append(s); #if C2B_DEBUG_COLLECTIONINDEX taggedvalidlist.append(pts + " " + s); for (int j = 0; j < sdata.documents.count(); ++j) _document_sentences.insert(sdata.documents.at(j), s); #endif } } ussorting uss; qSort(validlist.begin(), validlist.end(), uss); const QString cache_dir(_settingsP->fileName("cb2Bib/CacheDirectory")); const QString sentenceslfn(QDir::toNativeSeparators(QDir::cleanPath(cache_dir + "/sentences.lc2b"))); QFile sentenceslf(sentenceslfn); if (sentenceslf.open(QIODevice::WriteOnly)) { _out << QObject::tr("Writing %1...").arg(sentenceslfn) << endl; QDataStream stream(&sentenceslf); stream << validlist.count(); const QChar hs('-'); const QChar us('_'); const QString ss("\\1 "); QRegularExpression aprx(author::prefixes + '_', _qre_pattern_options); for (int i = 0; i < validlist.count(); ++i) { QString v(validlist.at(i)); v.replace(aprx, ss); stream << v.replace(us, hs); } sentenceslf.close(); } else { ++_nerrors; _out << QObject::tr("Error: %1 can not be written").arg(sentenceslfn) << endl; } const QString sentencesifn(QDir::toNativeSeparators(QDir::cleanPath(cache_dir + "/sentences.ic2b"))); QFile sentencesif(sentencesifn); if (sentencesif.open(QIODevice::WriteOnly)) { _out << QObject::tr("Writing %1...").arg(sentencesifn) << endl; QDataStream stream(&sentencesif); for (int i = 0; i < validlist.count(); ++i) { const QString& s(validlist.at(i)); const KeysentenceData& sdata(_keysentences.value(s)); QList dl(sdata.documents); qSort(dl); stream << dl.count(); for (int j = 0; j < dl.count(); ++j) stream << dl.at(j); } sentencesif.close(); } else { ++_nerrors; _out << QObject::tr("Error: %1 can not be written").arg(sentencesifn) << endl; } for (int i = 0; i < validlist.count(); ++i) { const QString& s(validlist.at(i)); const KeysentenceData& sdata(_keysentences.value(s)); for (int j = 0; j < sdata.documents.count(); ++j) _document_sentenceids.insert(sdata.documents.at(j), i); } #if C2B_DEBUG_COLLECTIONINDEX qSort(taggedvalidlist); for (int i = 0; i < taggedvalidlist.count(); ++i) _out << taggedvalidlist.at(i) << endl; #endif _out << QObject::tr("Raw keyword sentences: ") << _keysentences.size() << endl; _out << QObject::tr("Keyword sentences: ") << validlist.count() << endl; _out << QObject::tr("done") << endl; } void collectionIndex::cleanupKeySentences() { _out << QObject::tr("Cleaning keyword sentences...") << endl; QStringList keysentenceskeys; for (QMap::const_iterator si = _keysentences.constBegin(); si != _keysentences.constEnd(); ++si) { const int& v(si.value().ndocuments); if (v < _inter_document_sentence_repetition) continue; keysentenceskeys.append(si.key()); } const int nkeysentenceskeys(keysentenceskeys.count()); qSort(keysentenceskeys); for (int i = 0; i < nkeysentenceskeys - 1; ++i) { const QString& si(keysentenceskeys.at(i)); const QString& sj(keysentenceskeys.at(i + 1)); if (sj.startsWith(si) && _keysentences.value(si).ndocuments == _keysentences.value(sj).ndocuments) _keysentences[si].ndocuments = 0; } reversedsorting rs; qSort(keysentenceskeys.begin(), keysentenceskeys.end(), rs); for (int i = 0; i < nkeysentenceskeys - 1; ++i) { const QString& si(keysentenceskeys.at(i)); const QString& sj(keysentenceskeys.at(i + 1)); if (sj.endsWith(si) && _keysentences.value(si).ndocuments == _keysentences.value(sj).ndocuments) _keysentences[si].ndocuments = 0; } _out << QObject::tr("done") << endl; } void collectionIndex::digestKeySentences() { _out << QObject::tr("Digesting keyword sentences...") << endl; const QChar hyphen('_'); const QString coordination_and(" and "); const QString coordination_in(" in "); const QString coordination_of(" of "); const QString coordination_on(" on "); const QString coordination_or(" or "); const QRegularExpression trailing_ae("ae\\b", _qre_pattern_options); const QRegularExpression trailing_ches("ches\\b", _qre_pattern_options); const QRegularExpression trailing_dices("dices\\b", _qre_pattern_options); const QRegularExpression trailing_ices("ices\\b", _qre_pattern_options); const QRegularExpression trailing_ies("ies\\b", _qre_pattern_options); const QRegularExpression trailing_is("is\\b", _qre_pattern_options); const QRegularExpression trailing_us("us\\b", _qre_pattern_options); const QRegularExpression trailing_s("s\\b", _qre_pattern_options); const QRegularExpression trailing_ss("ss\\b", _qre_pattern_options); const QRegularExpression trailing_sses("sses\\b", _qre_pattern_options); const QRegularExpression trailing_ap("'\\b", _qre_pattern_options); const QRegularExpression trailing_aps("'s\\b", _qre_pattern_options); for (QMap::iterator si = _keysentences.begin(); si != _keysentences.end(); ++si) { if (si.value().ndocuments == 0) continue; const QString& s(si.key()); KeysentenceData* ksdndmax(&si.value()); int ndmax(ksdndmax->ndocuments); // Unify hyphenation if (s.contains(hyphen)) { QString sp(s); sp.remove(hyphen); if (_keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); sp = s; sp.replace(hyphen, _space_char); if (_keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); } // Unify simple coordinations if (s.count(coordination_and) == 1) { const QStringList p(s.split(coordination_and, QString::SkipEmptyParts)); const QString sp(p.at(1) + coordination_and + p.at(0)); if (_keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); } else if (s.count(coordination_or) == 1) { const QStringList p(s.split(coordination_or, QString::SkipEmptyParts)); const QString sp(p.at(1) + coordination_or + p.at(0)); if (_keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); } else if (s.count(coordination_of) == 1) { const QStringList p(s.split(coordination_of, QString::SkipEmptyParts)); const QString sp(p.at(1) + _space_char + p.at(0)); if (_keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); } else if (s.count(coordination_on) == 1) { const QStringList p(s.split(coordination_on, QString::SkipEmptyParts)); const QString sp(p.at(1) + _space_char + p.at(0)); if (_keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); } else if (s.count(coordination_in) == 1) { const QStringList p(s.split(coordination_in, QString::SkipEmptyParts)); const QString sp(p.at(1) + _space_char + p.at(0)); if (_keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); } // Unify genitives if (s.contains(trailing_aps) || s.contains(trailing_ap)) { QString sp(s); sp.remove(trailing_aps); sp.remove(trailing_ap); if (s.length() != sp.length() && _keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); } // Unify number if (s.contains(trailing_s) || s.contains(trailing_ae)) { QString sp(s); sp.replace(trailing_dices, "dex"); sp.replace(trailing_ices, "ix"); sp.replace(trailing_ae, "a"); sp.replace(trailing_ies, "y"); sp.replace(trailing_ches, "ch"); sp.replace(trailing_ss, "sss"); sp.replace(trailing_us, "uss"); sp.replace(trailing_aps, "'ss"); sp.replace(trailing_sses, "sss"); sp.replace(trailing_is, "iss"); sp.remove(trailing_s); if (s.length() != sp.length() && _keysentences.contains(sp)) ksdndmax = _digest_sentence(&_keysentences[sp], ksdndmax, &ndmax); } ksdndmax->ndocuments = ksdndmax->documents.count(); } _out << QObject::tr("done") << endl; } collectionIndex::KeysentenceData* collectionIndex::_digest_sentence(KeysentenceData* ksd, KeysentenceData* ksdndmax, int* ndmax) const { if (ksd->ndocuments > *ndmax) { // Transfer from ksdndmax *ndmax = ksd->ndocuments; const int nd(ksdndmax->documents.count()); for (int i = 0; i < nd; ++i) { const int& did(ksdndmax->documents.at(i)); if (!ksd->documents.contains(did)) ksd->documents.append(did); } ksdndmax->ndocuments = 0; return ksd; } else { // Transfer to ksdndmax const int nd(ksd->documents.count()); for (int i = 0; i < nd; ++i) { const int& did(ksd->documents.at(i)); if (!ksdndmax->documents.contains(did)) ksdndmax->documents.append(did); } ksd->ndocuments = 0; return ksdndmax; } } bool collectionIndex::isValidKeySentence(const QString& text) const { const ushort fc(text.at(0).unicode()); if (fc == 39) return false; if (fc == 95) return false; if (fc == 97) { if (text.startsWith(QLatin1String("a "))) return false; if (text.startsWith(QLatin1String("ability "))) return false; if (text.startsWith(QLatin1String("able "))) return false; if (text.startsWith(QLatin1String("about "))) return false; if (text.startsWith(QLatin1String("above "))) return false; if (text.startsWith(QLatin1String("academy of "))) return false; if (text.startsWith(QLatin1String("according "))) return false; if (text.startsWith(QLatin1String("acknowledgment "))) return false; if (text.startsWith(QLatin1String("across "))) return false; if (text.startsWith(QLatin1String("added "))) return false; if (text.startsWith(QLatin1String("advances in "))) return false; if (text.startsWith(QLatin1String("after "))) return false; if (text.startsWith(QLatin1String("agreement "))) return false; if (text.startsWith(QLatin1String("all ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("along "))) return false; if (text.startsWith(QLatin1String("also "))) return false; if (text.startsWith(QLatin1String("although "))) return false; if (text.startsWith(QLatin1String("among "))) return false; if (text.startsWith(QLatin1String("an "))) return false; if (text.startsWith(QLatin1String("and "))) return false; if (text.startsWith(QLatin1String("annals of "))) return false; if (text.startsWith(QLatin1String("any ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("are "))) return false; if (text.startsWith(QLatin1String("as "))) return false; if (text.startsWith(QLatin1String("at "))) return false; if (text.startsWith(QLatin1String("author "))) return false; if (text.startsWith(QLatin1String("author's "))) return false; if (text.startsWith(QLatin1String("authors "))) return false; } else if (fc == 98) { if (text.startsWith(QLatin1String("based on "))) return false; if (text.startsWith(QLatin1String("be "))) return false; if (text.startsWith(QLatin1String("been "))) return false; if (text.startsWith(QLatin1String("before "))) return false; if (text.startsWith(QLatin1String("between "))) return false; if (text.startsWith(QLatin1String("both "))) return false; if (text.startsWith(QLatin1String("but "))) return false; if (text.startsWith(QLatin1String("by "))) return false; } else if (fc == 99) { if (text.startsWith(QLatin1String("calculated ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("calculations "))) return false; if (text.startsWith(QLatin1String("can "))) return false; if (text.startsWith(QLatin1String("cannot "))) return false; if (text.startsWith(QLatin1String("capable "))) return false; if (text.startsWith(QLatin1String("carried "))) return false; if (text.startsWith(QLatin1String("case "))) return false; if (text.startsWith(QLatin1String("chapter "))) return false; if (text.startsWith(QLatin1String("chapters "))) return false; if (text.startsWith(QLatin1String("college of "))) return false; if (text.startsWith(QLatin1String("come "))) return false; if (text.startsWith(QLatin1String("conference on "))) return false; if (text.startsWith(QLatin1String("contribution from "))) return false; if (text.startsWith(QLatin1String("corresponding "))) return false; if (text.startsWith(QLatin1String("could "))) return false; if (text.startsWith(QLatin1String("current "))) return false; if (text.startsWith(QLatin1String("currently "))) return false; } else if (fc == 100) { if (text.startsWith(QLatin1String("data "))) return false; if (text.startsWith(QLatin1String("de "))) return false; if (text.startsWith(QLatin1String("department "))) return false; if (text.startsWith(QLatin1String("depicted "))) return false; if (text.startsWith(QLatin1String("depicts "))) return false; if (text.startsWith(QLatin1String("der "))) return false; if (text.startsWith(QLatin1String("described "))) return false; if (text.startsWith(QLatin1String("detailed "))) return false; if (text.startsWith(QLatin1String("details "))) return false; if (text.startsWith(QLatin1String("determined "))) return false; if (text.startsWith(QLatin1String("did not "))) return false; if (text.startsWith(QLatin1String("different ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("difficult "))) return false; if (text.startsWith(QLatin1String("discussed "))) return false; if (text.startsWith(QLatin1String("dissolved "))) return false; if (text.startsWith(QLatin1String("do "))) return false; if (text.startsWith(QLatin1String("does "))) return false; if (text.startsWith(QLatin1String("due ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("during "))) return false; } else if (fc == 101) { if (text.startsWith(QLatin1String("each "))) return false; if (text.startsWith(QLatin1String("easily "))) return false; if (text.startsWith(QLatin1String("easy "))) return false; if (text.startsWith(QLatin1String("edited "))) return false; if (text.startsWith(QLatin1String("effect ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("effects ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("either "))) return false; if (text.startsWith(QLatin1String("elsevier "))) return false; } else if (fc == 102) { if (text.startsWith(QLatin1String("faculty of "))) return false; if (text.startsWith(QLatin1String("figure "))) return false; if (text.startsWith(QLatin1String("figures "))) return false; if (text.startsWith(QLatin1String("find "))) return false; if (text.startsWith(QLatin1String("finding "))) return false; if (text.startsWith(QLatin1String("findings "))) return false; if (text.startsWith(QLatin1String("first ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("followed "))) return false; if (text.startsWith(QLatin1String("following "))) return false; if (text.startsWith(QLatin1String("footnote "))) return false; if (text.startsWith(QLatin1String("for "))) return false; if (text.startsWith(QLatin1String("form "))) return false; if (text.startsWith(QLatin1String("found "))) return false; if (text.startsWith(QLatin1String("foundation "))) return false; if (text.startsWith(QLatin1String("free of charge "))) return false; if (text.startsWith(QLatin1String("from "))) return false; if (text.startsWith(QLatin1String("fur "))) return false; if (text.startsWith(QLatin1String("further "))) return false; } else if (fc == 103) { if (text.startsWith(QLatin1String("gave "))) return false; if (text.startsWith(QLatin1String("give "))) return false; if (text.startsWith(QLatin1String("given "))) return false; if (text.startsWith(QLatin1String("gives "))) return false; if (text.startsWith(QLatin1String("go "))) return false; if (text.startsWith(QLatin1String("goes "))) return false; if (text.startsWith(QLatin1String("going "))) return false; if (text.startsWith(QLatin1String("groups "))) return false; } else if (fc == 104) { if (text.startsWith(QLatin1String("has "))) return false; if (text.startsWith(QLatin1String("have "))) return false; if (text.startsWith(QLatin1String("he "))) return false; if (text.startsWith(QLatin1String("highlighted "))) return false; if (text.startsWith(QLatin1String("his "))) return false; if (text.startsWith(QLatin1String("how "))) return false; } else if (fc == 105) { if (text.startsWith(QLatin1String("i "))) return false; if (text.startsWith(QLatin1String("if "))) return false; if (text.startsWith(QLatin1String("ii "))) return false; if (text.startsWith(QLatin1String("iii "))) return false; if (text.startsWith(QLatin1String("in "))) return false; if (text.startsWith(QLatin1String("initially "))) return false; if (text.startsWith(QLatin1String("int j "))) return false; if (text.startsWith(QLatin1String("international conference on "))) return false; if (text.startsWith(QLatin1String("international journal "))) return false; if (text.startsWith(QLatin1String("into "))) return false; if (text.startsWith(QLatin1String("is "))) return false; if (text.startsWith(QLatin1String("it "))) return false; if (text.startsWith(QLatin1String("its "))) return false; } else if (fc == 106) { if (text.startsWith(QLatin1String("j "))) return false; if (text.startsWith(QLatin1String("journal of "))) return false; if (text.startsWith(QLatin1String("journal on "))) return false; if (text.startsWith(QLatin1String("just "))) return false; } else if (fc == 107) { if (text.startsWith(QLatin1String("kept "))) return false; } else if (fc == 108) { if (text.startsWith(QLatin1String("laboratory for "))) return false; if (text.startsWith(QLatin1String("laboratory of "))) return false; if (text.startsWith(QLatin1String("larger "))) return false; if (text.startsWith(QLatin1String("less "))) return false; if (text.startsWith(QLatin1String("let "))) return false; if (text.startsWith(QLatin1String("lower "))) return false; } else if (fc == 109) { if (text.startsWith(QLatin1String("may "))) return false; if (text.startsWith(QLatin1String("mol "))) return false; if (text.startsWith(QLatin1String("more "))) return false; if (text.startsWith(QLatin1String("most ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("much ")) && text.count(_space_char) < 3) return false; if (text.startsWith(QLatin1String("my "))) return false; } else if (fc == 110) { if (text.startsWith(QLatin1String("national academy of "))) return false; if (text.startsWith(QLatin1String("need "))) return false; if (text.startsWith(QLatin1String("new "))) return false; if (text.startsWith(QLatin1String("not ")) && text.count(_space_char) < 3) return false; } else if (fc == 111) { if (text.startsWith(QLatin1String("observed "))) return false; if (text.startsWith(QLatin1String("obtained "))) return false; if (text.startsWith(QLatin1String("occur "))) return false; if (text.startsWith(QLatin1String("occurs "))) return false; if (text.startsWith(QLatin1String("of "))) return false; if (text.startsWith(QLatin1String("office "))) return false; if (text.startsWith(QLatin1String("on "))) return false; if (text.startsWith(QLatin1String("only "))) return false; if (text.startsWith(QLatin1String("onto "))) return false; if (text.startsWith(QLatin1String("or "))) return false; if (text.startsWith(QLatin1String("other "))) return false; if (text.startsWith(QLatin1String("otherwise "))) return false; if (text.startsWith(QLatin1String("our "))) return false; if (text.startsWith(QLatin1String("over "))) return false; } else if (fc == 112) { if (text.startsWith(QLatin1String("per "))) return false; if (text.startsWith(QLatin1String("permission of "))) return false; if (text.startsWith(QLatin1String("play "))) return false; if (text.startsWith(QLatin1String("played "))) return false; if (text.startsWith(QLatin1String("please "))) return false; if (text.startsWith(QLatin1String("possible "))) return false; if (text.startsWith(QLatin1String("present"))) return false; if (text.startsWith(QLatin1String("previous "))) return false; if (text.startsWith(QLatin1String("proceedings "))) return false; if (text.startsWith(QLatin1String("proof "))) return false; } else if (fc == 113) { if (text.startsWith(QLatin1String("quite "))) return false; } else if (fc == 114) { if (text.startsWith(QLatin1String("rather "))) return false; if (text.startsWith(QLatin1String("rest of "))) return false; if (text.startsWith(QLatin1String("result of "))) return false; if (text.startsWith(QLatin1String("reviews in "))) return false; if (text.startsWith(QLatin1String("run "))) return false; } else if (fc == 115) { if (text.startsWith(QLatin1String("same "))) return false; if (text.startsWith(QLatin1String("see "))) return false; if (text.startsWith(QLatin1String("several "))) return false; if (text.startsWith(QLatin1String("shall "))) return false; if (text.startsWith(QLatin1String("show "))) return false; if (text.startsWith(QLatin1String("shown "))) return false; if (text.startsWith(QLatin1String("since "))) return false; if (text.startsWith(QLatin1String("so "))) return false; if (text.startsWith(QLatin1String("some "))) return false; if (text.startsWith(QLatin1String("strongly "))) return false; if (text.startsWith(QLatin1String("studied "))) return false; if (text.startsWith(QLatin1String("studies "))) return false; if (text.startsWith(QLatin1String("study "))) return false; if (text.startsWith(QLatin1String("such "))) return false; if (text.startsWith(QLatin1String("supporting "))) return false; if (text.startsWith(QLatin1String("suppose "))) return false; if (text.startsWith(QLatin1String("symposium on "))) return false; } else if (fc == 116) { if (text.startsWith(QLatin1String("than "))) return false; if (text.startsWith(QLatin1String("thank "))) return false; if (text.startsWith(QLatin1String("that "))) return false; if (text.startsWith(QLatin1String("the "))) return false; if (text.startsWith(QLatin1String("their "))) return false; if (text.startsWith(QLatin1String("then "))) return false; if (text.startsWith(QLatin1String("there "))) return false; if (text.startsWith(QLatin1String("these "))) return false; if (text.startsWith(QLatin1String("they "))) return false; if (text.startsWith(QLatin1String("this "))) return false; if (text.startsWith(QLatin1String("those "))) return false; if (text.startsWith(QLatin1String("thus "))) return false; if (text.startsWith(QLatin1String("title "))) return false; if (text.startsWith(QLatin1String("to "))) return false; if (text.startsWith(QLatin1String("too "))) return false; if (text.startsWith(QLatin1String("top "))) return false; if (text.startsWith(QLatin1String("transactions on "))) return false; } else if (fc == 117) { if (text.startsWith(QLatin1String("under "))) return false; if (text.startsWith(QLatin1String("us "))) return false; if (text.startsWith(QLatin1String("use "))) return false; if (text.startsWith(QLatin1String("used "))) return false; if (text.startsWith(QLatin1String("uses "))) return false; if (text.startsWith(QLatin1String("using "))) return false; } else if (fc == 118) { if (text.startsWith(QLatin1String("very ")) && text.count(_space_char) < 3) return false; } else if (fc == 119) { if (text.startsWith(QLatin1String("was "))) return false; if (text.startsWith(QLatin1String("we "))) return false; if (text.startsWith(QLatin1String("were "))) return false; if (text.startsWith(QLatin1String("were "))) return false; if (text.startsWith(QLatin1String("what "))) return false; if (text.startsWith(QLatin1String("when "))) return false; if (text.startsWith(QLatin1String("whenever "))) return false; if (text.startsWith(QLatin1String("where "))) return false; if (text.startsWith(QLatin1String("whether "))) return false; if (text.startsWith(QLatin1String("which "))) return false; if (text.startsWith(QLatin1String("while "))) return false; if (text.startsWith(QLatin1String("whose "))) return false; if (text.startsWith(QLatin1String("wiley "))) return false; if (text.startsWith(QLatin1String("will "))) return false; if (text.startsWith(QLatin1String("with "))) return false; if (text.startsWith(QLatin1String("within "))) return false; if (text.startsWith(QLatin1String("without "))) return false; if (text.startsWith(QLatin1String("work "))) return false; if (text.startsWith(QLatin1String("workshop on "))) return false; if (text.startsWith(QLatin1String("worth "))) return false; if (text.startsWith(QLatin1String("would "))) return false; } else if (fc == 120) { if (text.startsWith(QLatin1String("x "))) return false; } else if (fc == 121) { if (text.startsWith(QLatin1String("yes "))) return false; if (text.startsWith(QLatin1String("you "))) return false; if (text.startsWith(QLatin1String("your "))) return false; } const ushort lc(text.at(text.length() - 1).unicode()); if (lc == 95) return false; if (lc == 97) { if (text.endsWith(QLatin1String(" a"))) return false; if (text.endsWith(QLatin1String(" via"))) return false; } else if (lc == 100) { if (text.endsWith(QLatin1String(" and"))) return false; if (text.endsWith(QLatin1String(" applied"))) return false; if (text.endsWith(QLatin1String(" carried"))) return false; if (text.endsWith(QLatin1String(" could"))) return false; if (text.endsWith(QLatin1String(" performed"))) return false; if (text.endsWith(QLatin1String(" second"))) return false; if (text.endsWith(QLatin1String(" should"))) return false; if (text.endsWith(QLatin1String(" showed"))) return false; if (text.endsWith(QLatin1String(" third"))) return false; if (text.endsWith(QLatin1String(" used"))) return false; if (text.endsWith(QLatin1String(" would"))) return false; } else if (lc == 101) { if (text.endsWith(QLatin1String(" above"))) return false; if (text.endsWith(QLatin1String(" are"))) return false; if (text.endsWith(QLatin1String(" available"))) return false; if (text.endsWith(QLatin1String(" be"))) return false; if (text.endsWith(QLatin1String(" because"))) return false; if (text.endsWith(QLatin1String(" due"))) return false; if (text.endsWith(QLatin1String(" gave"))) return false; if (text.endsWith(QLatin1String(" have"))) return false; if (text.endsWith(QLatin1String(" he"))) return false; if (text.endsWith(QLatin1String(" here"))) return false; if (text.endsWith(QLatin1String(" importance"))) return false; if (text.endsWith(QLatin1String(" indicate"))) return false; if (text.endsWith(QLatin1String(" like"))) return false; if (text.endsWith(QLatin1String(" made"))) return false; if (text.endsWith(QLatin1String(" more"))) return false; if (text.endsWith(QLatin1String(" same"))) return false; if (text.endsWith(QLatin1String(" since"))) return false; if (text.endsWith(QLatin1String(" the"))) return false; if (text.endsWith(QLatin1String(" there"))) return false; if (text.endsWith(QLatin1String(" these"))) return false; if (text.endsWith(QLatin1String(" we"))) return false; if (text.endsWith(QLatin1String(" were"))) return false; if (text.endsWith(QLatin1String(" where"))) return false; if (text.endsWith(QLatin1String(" where"))) return false; if (text.endsWith(QLatin1String(" while"))) return false; if (text.endsWith(QLatin1String(" whose"))) return false; } else if (lc == 102) { if (text.endsWith(QLatin1String(" if"))) return false; if (text.endsWith(QLatin1String(" of"))) return false; } else if (lc == 103) { if (text.endsWith(QLatin1String(" according"))) return false; if (text.endsWith(QLatin1String(" along"))) return false; if (text.endsWith(QLatin1String(" belonging"))) return false; if (text.endsWith(QLatin1String(" containing"))) return false; if (text.endsWith(QLatin1String(" corresponding"))) return false; if (text.endsWith(QLatin1String(" during"))) return false; if (text.endsWith(QLatin1String(" fig"))) return false; if (text.endsWith(QLatin1String(" having"))) return false; if (text.endsWith(QLatin1String(" involving"))) return false; if (text.endsWith(QLatin1String(" using"))) return false; } else if (lc == 104) { if (text.endsWith(QLatin1String(" although"))) return false; if (text.endsWith(QLatin1String(" both"))) return false; if (text.endsWith(QLatin1String(" much"))) return false; if (text.endsWith(QLatin1String(" such"))) return false; if (text.endsWith(QLatin1String(" through"))) return false; if (text.endsWith(QLatin1String(" which"))) return false; if (text.endsWith(QLatin1String(" with"))) return false; } else if (lc == 105) { if (text.endsWith(QLatin1String(" i"))) return false; } else if (lc == 108) { if (text.endsWith(QLatin1String(" all"))) return false; if (text.endsWith(QLatin1String(" several"))) return false; if (text.endsWith(QLatin1String(" will"))) return false; } else if (lc == 109) { if (text.endsWith(QLatin1String(" from"))) return false; if (text.endsWith(QLatin1String(" them"))) return false; } else if (lc == 110) { if (text.endsWith(QLatin1String(" an"))) return false; if (text.endsWith(QLatin1String(" been"))) return false; if (text.endsWith(QLatin1String(" between"))) return false; if (text.endsWith(QLatin1String(" can"))) return false; if (text.endsWith(QLatin1String(" in"))) return false; if (text.endsWith(QLatin1String(" known"))) return false; if (text.endsWith(QLatin1String(" on"))) return false; if (text.endsWith(QLatin1String(" shown"))) return false; if (text.endsWith(QLatin1String(" shown"))) return false; if (text.endsWith(QLatin1String(" supporting information"))) return false; if (text.endsWith(QLatin1String(" taken"))) return false; if (text.endsWith(QLatin1String(" than"))) return false; if (text.endsWith(QLatin1String(" then"))) return false; if (text.endsWith(QLatin1String(" upon"))) return false; if (text.endsWith(QLatin1String(" when"))) return false; if (text.endsWith(QLatin1String(" within"))) return false; } else if (lc == 111) { if (text.endsWith(QLatin1String(" also"))) return false; if (text.endsWith(QLatin1String(" do"))) return false; if (text.endsWith(QLatin1String(" into"))) return false; if (text.endsWith(QLatin1String(" to"))) return false; if (text.endsWith(QLatin1String(" two"))) return false; if (text.endsWith(QLatin1String(" who"))) return false; } else if (lc == 114) { if (text.endsWith(QLatin1String(" after"))) return false; if (text.endsWith(QLatin1String(" chapter"))) return false; if (text.endsWith(QLatin1String(" elsevier"))) return false; if (text.endsWith(QLatin1String(" for"))) return false; if (text.endsWith(QLatin1String(" or"))) return false; if (text.endsWith(QLatin1String(" our"))) return false; if (text.endsWith(QLatin1String(" over"))) return false; if (text.endsWith(QLatin1String(" per"))) return false; if (text.endsWith(QLatin1String(" their"))) return false; if (text.endsWith(QLatin1String(" under"))) return false; if (text.endsWith(QLatin1String(" whether"))) return false; if (text.endsWith(QLatin1String(" your"))) return false; } else if (lc == 115) { if (text.endsWith(QLatin1String(" across"))) return false; if (text.endsWith(QLatin1String(" as"))) return false; if (text.endsWith(QLatin1String(" does"))) return false; if (text.endsWith(QLatin1String(" does"))) return false; if (text.endsWith(QLatin1String(" figs"))) return false; if (text.endsWith(QLatin1String(" follows"))) return false; if (text.endsWith(QLatin1String(" gives"))) return false; if (text.endsWith(QLatin1String(" has"))) return false; if (text.endsWith(QLatin1String(" his"))) return false; if (text.endsWith(QLatin1String(" is"))) return false; if (text.endsWith(QLatin1String(" its"))) return false; if (text.endsWith(QLatin1String(" ones"))) return false; if (text.endsWith(QLatin1String(" shows"))) return false; if (text.endsWith(QLatin1String(" this"))) return false; if (text.endsWith(QLatin1String(" us"))) return false; if (text.endsWith(QLatin1String(" was"))) return false; if (text.endsWith(QLatin1String(" yes"))) return false; if (text.endsWith(QLatin1String("acids res"))) return false; } else if (lc == 116) { if (text.endsWith(QLatin1String(" about"))) return false; if (text.endsWith(QLatin1String(" at"))) return false; if (text.endsWith(QLatin1String(" department"))) return false; if (text.endsWith(QLatin1String(" et"))) return false; if (text.endsWith(QLatin1String(" first"))) return false; if (text.endsWith(QLatin1String(" important"))) return false; if (text.endsWith(QLatin1String(" it"))) return false; if (text.endsWith(QLatin1String(" let"))) return false; if (text.endsWith(QLatin1String(" most"))) return false; if (text.endsWith(QLatin1String(" must"))) return false; if (text.endsWith(QLatin1String(" not"))) return false; if (text.endsWith(QLatin1String(" out"))) return false; if (text.endsWith(QLatin1String(" suggest"))) return false; if (text.endsWith(QLatin1String(" that"))) return false; if (text.endsWith(QLatin1String(" without"))) return false; } else if (lc == 117) { if (text.endsWith(QLatin1String(" you"))) return false; } else if (lc == 119) { if (text.endsWith(QLatin1String(" how"))) return false; if (text.endsWith(QLatin1String(" new"))) return false; if (text.endsWith(QLatin1String(" show"))) return false; } else if (lc == 121) { if (text.endsWith(QLatin1String(" any"))) return false; if (text.endsWith(QLatin1String(" by"))) return false; if (text.endsWith(QLatin1String(" may"))) return false; if (text.endsWith(QLatin1String(" my"))) return false; if (text.endsWith(QLatin1String(" only"))) return false; if (text.endsWith(QLatin1String(" society"))) return false; if (text.endsWith(QLatin1String(" they"))) return false; if (text.endsWith(QLatin1String(" wiley"))) return false; } if (text.contains(QLatin1String("_ "))) return false; if (text.contains(QLatin1String(" _"))) return false; if (_last_equals_first(text)) return false; return true; } QString collectionIndex::preprocessedText(const QString& journal, const QString& text) const { QString pt(text); pt = pt.toLower(); if (journal.contains(_space_char)) { QStringList jns; jns.append(journal.toLower()); jns.append(_bpP->fullJournal(journal).toLower()); jns.append(_bpP->abbreviatedJournal(journal).toLower()); jns.append(QString(jns.at(0)).remove('.')); jns.append(QString(jns.at(1)).remove('.')); jns.append(QString(jns.at(2)).remove('.')); jns.removeDuplicates(); for (int i = 0; i < jns.count(); ++i) c2bUtils::fillString(pt, QStringMatcher(jns.at(i), Qt::CaseSensitive), '.'); } replace(pt, '"', ' '); replace(pt, '-', '_'); pt.replace(QRegularExpression("_{2,}", _qre_pattern_options), "_"); pt.replace(QRegularExpression("\\bin *situ\\b", _qre_pattern_options), " in_situ "); pt.replace(QRegularExpression("\\bin *vivo\\b", _qre_pattern_options), " in_vivo "); pt.replace(QRegularExpression("\\bin *vitro\\b", _qre_pattern_options), " in_vitro "); pt.replace(QRegularExpression("\\bex *situ\\b", _qre_pattern_options), " ex_situ "); pt.replace(QRegularExpression("\\bex *vivo\\b", _qre_pattern_options), " ex_vivo "); pt.replace(QRegularExpression("\\bex *vitro\\b", _qre_pattern_options), " ex_vitro "); // Clear some strings c2bUtils::fillString(pt, QRegularExpression("\\bbased (?=on\\b)", _qre_pattern_options), ' '); c2bUtils::fillString(pt, QRegularExpression("\\bin order (?=to\\b)", _qre_pattern_options), ' '); c2bUtils::fillString(pt, QStringMatcher(" a ", Qt::CaseSensitive), ' '); c2bUtils::fillString(pt, QStringMatcher(" an ", Qt::CaseSensitive), ' '); c2bUtils::fillString(pt, QStringMatcher(" its ", Qt::CaseSensitive), ' '); c2bUtils::fillString(pt, QStringMatcher(" the ", Qt::CaseSensitive), ' '); c2bUtils::fillString(pt, QStringMatcher(" their ", Qt::CaseSensitive), ' '); c2bUtils::fillString(pt, QStringMatcher(" '", Qt::CaseSensitive), ' '); c2bUtils::fillString(pt, QStringMatcher("' ", Qt::CaseSensitive), ' '); // Set additional breakpoints c2bUtils::fillString(pt, QStringMatcher(" are ", Qt::CaseSensitive), '.'); c2bUtils::fillString(pt, QStringMatcher(" be ", Qt::CaseSensitive), '.'); c2bUtils::fillString(pt, QStringMatcher(" is ", Qt::CaseSensitive), '.'); c2bUtils::fillString(pt, QStringMatcher(" was ", Qt::CaseSensitive), '.'); c2bUtils::fillString(pt, QStringMatcher(" were ", Qt::CaseSensitive), '.'); c2bUtils::fillString(pt, QRegularExpression("\\binstitut\\w*", _qre_pattern_options), '.'); c2bUtils::fillString(pt, QRegularExpression("\\buniversi\\w*", _qre_pattern_options), '.'); c2bUtils::fillString(pt, QRegularExpression("\\bdoi\\w*", _qre_pattern_options), '.'); c2bUtils::fillString(pt, QRegularExpression("\\bet al\\w*", _qre_pattern_options), '.'); // Normalize proper names c2bUtils::fillString(pt, QRegularExpression("\\bdo not\\b", _qre_pattern_options), '.'); pt.replace(QRegularExpression("\\b" + author::prefixes + "\\s", _qre_pattern_options), QString("\\1%1").arg(QChar(127))); replace(pt, QChar(127), '_'); // Remove noisy elements from PDF articles c2bUtils::fillString(pt, QStringMatcher("page intentionally left", Qt::CaseSensitive), '.'); c2bUtils::fillString(pt, QStringMatcher("journal article", Qt::CaseSensitive), '.'); c2bUtils::fillString(pt, QRegularExpression(" \\w \\w \\w ", _qre_pattern_options), '.'); c2bUtils::stripDiacritics(pt); c2bUtils::simplifyString(pt); return pt; } QString& collectionIndex::replace(QString& str, const QChar& a, const QChar& b) const { const int length(str.length()); QChar* const s(str.data()); int i(0); while (i < length) { QChar& c(s[i]); if (c == a) c = b; ++i; } return str; } cb2bib-1.9.7/src/c2b/PaxHeaders.3194/preprocess.cpp0000644000000000000000000000013213124510216016451 xustar0030 mtime=1498583182.919255565 30 atime=1498583183.007254748 30 ctime=1498583182.919255565 cb2bib-1.9.7/src/c2b/preprocess.cpp0000644000175000001440000000221313124510216020041 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "preprocess.h" #include "settings.h" preprocess::preprocess(QObject* parento) : QObject(parento) { loadSettings(); connect(settings::instance(), SIGNAL(newSettings()), this, SLOT(loadSettings())); } void preprocess::loadSettings() { FindReplaceInput = settings::instance()->value("cb2Bib/FindReplaceInput").toBool(); FindReplaceInputList = settings::instance()->value("cb2Bib/FindReplaceInputList").toStringList(); } void preprocess::preprocessText(QString* text) { if (!FindReplaceInput) return; QStringList::Iterator i = FindReplaceInputList.begin(); while (i != FindReplaceInputList.end()) { const QStringList spLine((*i).split('|')); if (spLine.count() > 1) text->replace(spLine.at(0), spLine.at(1)); ++i; } } cb2bib-1.9.7/src/PaxHeaders.3194/c2bEditor.h0000644000000000000000000000013213124510216015100 xustar0030 mtime=1498583182.835256344 30 atime=1498583183.007254748 30 ctime=1498583182.835256344 cb2bib-1.9.7/src/c2bEditor.h0000644000175000001440000000536613124510216016504 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BEDITOR_H #define C2BEDITOR_H #include "ui_c2bEditor.h" #include #include class QDockWidget; class QLabel; class QStackedWidget; class QSyntaxHighlighter; class bibSearcher; class c2bBibParser; class c2bReferenceList; class c2bSettings; class c2bTextBrowser; class c2bTextEdit; class findDialog; class c2bEditor : public QMainWindow { Q_OBJECT public: enum Mode {Annote, BibTeX, JAbbrev, NetQInfo, RegExp}; c2bEditor(const QString& file, const Mode mode, QWidget* main, QWidget* parentw = 0); c2bEditor(const QString& file, bibSearcher* searcher, QWidget* main, QWidget* parentw = 0); ~c2bEditor(); inline QString editorFilename() const { return _editor_fn; } bool closeEditor(); signals: void editFileRenamed(const QString& old_name, const QString& new_name); void execute(); void openBookmarks(); void openFile(const QString& fn); void restartEngine(); void restartQuery(); protected: virtual void closeEvent(QCloseEvent* qevent); protected slots: bool fileSave(); bool fileSaveAs(); void cursorPositionChanged(); void exportEntries(); void fileOpen(); void helpCb2Bib(); void helpEditor(); void htmlView(); void isModified(int position, int charsRemoved, int charsAdded); void journalsToAbbreviated(); void journalsToFull(); void load(); void overwriteModeChanged(); void pasteCurrentBibTeX(); void postProcess(); void reload(const QString& fn); void saveAndExecute(); void setViewMode(bool edit_mode); void showMessage(const QString& ms); void updateMetadata(); void viewCb2Bib(); private: Mode _editor_mode; QDockWidget* _dockWidgetP; QLabel* _lineLabelP; QLabel* _overwriteLabelP; QPointer _searcherP; QStackedWidget* _stackedWidgetP; QString _edit_reference_at_position; QString _editor_fn; QSyntaxHighlighter* _shP; QWidget* _c2b_mainP; Ui::c2bEditor ui; bool _is_modified_by_user; c2bBibParser* _bpP; c2bReferenceList* _referencesP; c2bSettings* _settingsP; c2bTextBrowser* _browserP; c2bTextEdit* _editorP; findDialog* _textFinderP; void createReferenceList(); void importActions(); void initEditor(); void setEditorMode(); QMenu* createPopupMenu() // to avoid default context menu { return 0; } }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/c2bBibHighlighter.cpp0000644000000000000000000000013213124510216017060 xustar0030 mtime=1498583182.723257384 30 atime=1498583183.007254748 30 ctime=1498583182.723257384 cb2bib-1.9.7/src/c2bBibHighlighter.cpp0000644000175000001440000000376113124510216020461 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bBibHighlighter.h" #include "c2bSettings.h" #include #include c2bBibHighlighter::c2bBibHighlighter(QTextDocument* doc) : QSyntaxHighlighter(doc) { QPalette p; text_color = p.text().color(); c2bSettings* settings(c2bSettingsP); c = &settings->colors; connect(settings, SIGNAL(newSettings()), this, SLOT(rehighlight())); rx0 = QRegExp("[\\{\\}]+"); rx0.setMinimal(true); rx1 = QRegExp("@\\w+"); rx2 = QRegExp("^\\w+"); rx3 = QRegExp("^%.+$"); } c2bBibHighlighter::~c2bBibHighlighter() {} void c2bBibHighlighter::highlightBlock(const QString& text) { const int len(text.length()); setFormat(0, len - 1, text_color); int pos(0); while (pos >= 0) { pos = rx0.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx0.matchedLength(), c->bib_delimiter_color); pos += rx0.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx1.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx1.matchedLength(), c->bib_reference_type_color); pos += rx1.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx2.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx2.matchedLength(), c->bib_reference_field_color); pos += rx2.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx3.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx3.matchedLength(), c->comment_color); pos += rx3.matchedLength(); } } } cb2bib-1.9.7/src/PaxHeaders.3194/c2bSettings.h0000644000000000000000000000013213124510216015452 xustar0030 mtime=1498583182.863256084 30 atime=1498583183.007254748 30 ctime=1498583182.867256048 cb2bib-1.9.7/src/c2bSettings.h0000644000175000001440000000407113124510216017046 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BSETTINGS_H #define C2BSETTINGS_H #include "c2bColors.h" #include #include #include class QAction; class QProgressBar; class QShortcut; class c2bSettings : public settings { Q_OBJECT public: ~c2bSettings(); QFont c2bMonoFont; c2bColors colors; void notify(); void update(); static c2bSettings* initSettings(); void setKeysequence(const QString& fullname, QShortcut* shortcut); void setKeysequence(const QString& path, QAction* action); void setKeysequences(const QHash& keysequences); inline QKeySequence keysequence(const QString& fullname) const { return value(fullname).value(); } inline QKeySequence defaultKeysequence(const QString& fullname) const { return _default_keysequences.value(fullname); } inline QByteArray ksname(const QString& fullname) const { return value(fullname).value().toString(QKeySequence::NativeText).toLatin1(); } inline QStringList shortcutNames() const { return _default_keysequences.keys(); } signals: void newSettings(); private: c2bSettings(const QString& organization, const QString& application, QObject* parento = 0); c2bSettings(const QString& fn, QObject* parento = 0); QMap _default_keysequences; QProgressBar* _progress_bar; void init(); void processReferenceFile(); void setDefaults(); #ifdef Q_OS_WIN QString decodeFilename(const QString& fn) const; #endif private slots: void guiExits(); void processReferenceFileEvent(); }; #define c2bSettingsP (static_cast(settings::instance())) #endif cb2bib-1.9.7/src/PaxHeaders.3194/c2bConfigureFR.cpp0000644000000000000000000000013213124510216016356 xustar0030 mtime=1498583182.747257161 30 atime=1498583183.007254748 30 ctime=1498583182.747257161 cb2bib-1.9.7/src/c2bConfigureFR.cpp0000644000175000001440000000223213124510216017747 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bConfigureFR.h" #include c2bConfigureFR::c2bConfigureFR(QTreeWidgetItem* item, QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); itemFindReplace = item; ui.lineEditFind->setText(itemFindReplace->text(0)); ui.lineEditReplace->setText(itemFindReplace->text(1)); ui.lineEditDescription->setText(itemFindReplace->text(2)); ui.lineEditFind->setFocus(); } c2bConfigureFR::~c2bConfigureFR() {} void c2bConfigureFR::reject() { QDialog::reject(); } void c2bConfigureFR::accept() { itemFindReplace->setText(0, ui.lineEditFind->text()); itemFindReplace->setText(1, ui.lineEditReplace->text()); itemFindReplace->setText(2, ui.lineEditDescription->text()); QDialog::accept(); } cb2bib-1.9.7/src/PaxHeaders.3194/c2bColors.cpp0000644000000000000000000000013213124510216015446 xustar0030 mtime=1498583182.743257199 30 atime=1498583183.007254748 30 ctime=1498583182.743257199 cb2bib-1.9.7/src/c2bColors.cpp0000644000175000001440000000742413124510216017047 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bColors.h" #include "c2bSettings.h" c2bColors::c2bColors() { colorList.insert("BibTeX delimiters", &bib_delimiter_color); colorList.insert("BibTeX reference field", &bib_reference_field_color); colorList.insert("BibTeX reference type", &bib_reference_type_color); colorList.insert("Comments and line numbers", &comment_color); colorList.insert("NetQInf command contents", &netqinf_command_content_color); colorList.insert("NetQInf command keys", &netqinf_command_key_color); colorList.insert("RegExp and NetQInf cb2Bib tags", &cb2bib_tag_color); colorList.insert("cb2Bib digits", &cb2bib_digit_color); colorList.insert("cb2Bib highly relevant text", &cb2bib_highly_relevant_color); colorList.insert("cb2Bib metadata", &cb2bib_metadata_color); colorList.insert("cb2Bib relevant text", &cb2bib_relevant_color); colorList.insert("cb2Bib unrelevant text", &cb2bib_unrelevant_color); } c2bColors::~c2bColors() {} void c2bColors::updateColor(const QColor& color, const QString& colorName) { *colorList[colorName] = color; } void c2bColors::saveColors(c2bSettings* settings) { settings->setValue("c2bColors/bib_delimiter_color", bib_delimiter_color); settings->setValue("c2bColors/bib_reference_field_color", bib_reference_field_color); settings->setValue("c2bColors/bib_reference_type_color", bib_reference_type_color); settings->setValue("c2bColors/cb2bib_digit_color", cb2bib_digit_color); settings->setValue("c2bColors/cb2bib_highly_relevant_color", cb2bib_highly_relevant_color); settings->setValue("c2bColors/cb2bib_metadata_color", cb2bib_metadata_color); settings->setValue("c2bColors/cb2bib_relevant_color", cb2bib_relevant_color); settings->setValue("c2bColors/cb2bib_tag_color", cb2bib_tag_color); settings->setValue("c2bColors/cb2bib_unrelevant_color", cb2bib_unrelevant_color); settings->setValue("c2bColors/comment_color", comment_color); settings->setValue("c2bColors/netqinf_command_content_color", netqinf_command_content_color); settings->setValue("c2bColors/netqinf_command_key_color", netqinf_command_key_color); } void c2bColors::loadColors(c2bSettings* settings) { bib_delimiter_color = settings->value("c2bColors/bib_delimiter_color", "#A9A9A9").value(); bib_reference_field_color = settings->value("c2bColors/bib_reference_field_color", "#FFE66A").value(); bib_reference_type_color = settings->value("c2bColors/bib_reference_type_color", "#5EB7F7").value(); cb2bib_digit_color = settings->value("c2bColors/cb2bib_digit_color", "#39C9FD").value(); cb2bib_highly_relevant_color = settings->value("c2bColors/cb2bib_highly_relevant_color", "#00FD00").value(); cb2bib_metadata_color = settings->value("c2bColors/cb2bib_metadata_color", "#FFE66A").value(); cb2bib_relevant_color = settings->value("c2bColors/cb2bib_relevant_color", "#008B8B").value(); cb2bib_tag_color = settings->value("c2bColors/cb2bib_tag_color", "#5AF7F4").value(); cb2bib_unrelevant_color = settings->value("c2bColors/cb2bib_unrelevant_color", "#868374").value(); comment_color = settings->value("c2bColors/comment_color", "#A5A5A5").value(); netqinf_command_content_color = settings->value("c2bColors/netqinf_command_content_color", "#FFFFFF").value(); netqinf_command_key_color = settings->value("c2bColors/netqinf_command_key_color", "#D5A805").value(); } cb2bib-1.9.7/src/PaxHeaders.3194/c2bSaveRegExp.ui0000644000000000000000000000007313124510115016053 xustar0030 atime=1498583183.007254748 29 ctime=1498583182.64725809 cb2bib-1.9.7/src/c2bSaveRegExp.ui0000644000175000001440000001102213124510115017435 0ustar00constansusers00000000000000 c2bSaveRegExp 0 0 845 584 Edit and Save Pattern - cb2Bib 6 Name: Choose a name to identify your reference recognition pattern Type: Fields: RegExp: Input Text: QFrame::Raised Qt::Horizontal Pattern Information: QFrame::Raised false true Qt::Horizontal Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Save c2bLineEdit QLineEdit

        c2bLineEdit.h
        buttonBox accepted() c2bSaveRegExp accept() 620 452 3 394 buttonBox rejected() c2bSaveRegExp reject() 730 444 759 341 cb2bib-1.9.7/src/PaxHeaders.3194/c2bClipEdit.h0000644000000000000000000000013213124510216015347 xustar0030 mtime=1498583182.823256456 30 atime=1498583183.007254748 30 ctime=1498583182.827256419 cb2bib-1.9.7/src/c2bClipEdit.h0000644000175000001440000000246513124510216016750 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCLIPEDIT_H #define C2BCLIPEDIT_H #include /** @author Pere Constans */ class c2bClipEdit : public QPlainTextEdit { Q_OBJECT public: enum Mode {Editor, Browser}; c2bClipEdit(const Mode mode, QWidget* parentw = 0); ~c2bClipEdit(); void setText(const QString& text, const QString& tagged_text = QString()); void setTaggedViewMode(bool tagged_view); void insertTag(const QString& tag); void updatePlainText(const QString& text); signals: void userEndedSelection(const QPoint& position); protected: virtual void contextMenuEvent(QContextMenuEvent* qevent); virtual void keyPressEvent(QKeyEvent* qevent); virtual void keyReleaseEvent(QKeyEvent* qevent); virtual void mouseReleaseEvent(QMouseEvent* qevent); private slots: virtual void selectionHasChanged(); private: QString _tagged_text; QString _text; bool _has_selecting_ended; bool _is_tagged_view; }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/c2bBibParser.cpp0000644000000000000000000000013213124510216016056 xustar0030 mtime=1498583182.727257347 30 atime=1498583183.007254748 30 ctime=1498583182.727257347 cb2bib-1.9.7/src/c2bBibParser.cpp0000644000175000001440000001565713124510216017466 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bBibParser.h" #include "c2b.h" #include "c2bSettings.h" #include #include #include #include c2bBibParser::c2bBibParser(QObject* parento) : bibParser(parento) { _c2b_mainP = c2b::mainWidget(); _bp_updates_gui = false; // Warn users if journal database file is not setup const QString journal_f(_settingsP->fileName("cb2Bib/JournalFile")); if (journal_f.isEmpty()) QMessageBox::information(_c2b_mainP, tr("Information - cb2Bib"), tr("No Abbreviation Journal file has been specified.\n\n" "Note: Abbreviation files are specified through the cb2Bib Configure dialog."), QMessageBox::Ok); else { QFile f(journal_f); if (!f.open(QIODevice::ReadOnly | QIODevice::Text)) // jdbfile.exists wouldn't produce an errorString QMessageBox::warning(_c2b_mainP, tr("Warning - cb2Bib"), tr("Unable to open the Journal Abbreviation file %1 for reading.\nError: '%2'.\n\n" "Note: Abbreviation files are specified through the cb2Bib Configure dialog.") .arg(journal_f).arg(f.errorString()), QMessageBox::Ok); else f.close(); } // Set status messages connect(this, SIGNAL(statusMessage(const QString&)), c2b::instance(), SIGNAL(statusMessage(const QString&))); // Set preparser log connect(_preparserP, SIGNAL(preparserLogAvailable(const QString&)), this, SLOT(showLog(const QString&))); } c2bBibParser::~c2bBibParser() {} void c2bBibParser::currentReferenceUpdated() { // Current reference has been updated by the base class. // Update it in the GUI _bp_updates_gui = true; bibReferenceIterator i; for (i = _current_reference.constBegin(); i != _current_reference.constEnd(); ++i) _field_editors[i.key()]->setText(i.value()); // Set default type to article if (_current_reference.typeName.isEmpty()) _current_reference.typeName = "article"; setReferenceType(_current_reference.typeName); setCiteID(); _bp_updates_gui = false; emit bibModified(fieldCount() > 0); } void c2bBibParser::clearCurrentReference() { _bp_updates_gui = true; // Clear by setting empty QString as a workaround for bug // http://bugreports.qt.nokia.com/browse/QTBUG-7866 // Affects versions 4.6.x, expected to be fixed in 4.6.3 for (int i = 0; i < _bibliographic_fields.count(); ++i) _field_editors[_bibliographic_fields.at(i)]->setText(QString()); // _field_editors[_bibliographic_fields.at(i)]->clear(); _field_editors["id"]->setText(QString()); // _field_editors["id"]->clear(); bibParser::clearCurrentReference(); _current_reference.typeName = "article"; _type_editor->setCurrentIndex(1); _bp_updates_gui = false; emit bibModified(false); } void c2bBibParser::referenceEdited(const QString& value) { if (_bp_updates_gui) return; if (sender()) { const QString name(sender()->objectName()); if (name == "id") { _current_reference.citeidName = value; emit setDocumentFilename(); } else if (name == "typecombo") _current_reference.typeName = value; else if (name == "file") _current_reference[name] = value; else { // Attention: No name checking is done. // Only reference editors must be connected here. _current_reference[name] = value; setCiteID(); emit setDocumentFilename(); } emit bibModified(fieldCount() > 0); } } void c2bBibParser::setCiteID() { bibParser::setCiteID(); _field_editors["id"]->setText(_current_reference.citeidName); } void c2bBibParser::setField() { if (sender()) { const QString name(sender()->objectName()); if (_field_editors.contains(name)) _field_editors[name]->setText(parse(name, _field_editors.value(name)->text())); } } void c2bBibParser::setReferenceType(const QString& type) { int i(0); while (i < _type_editor->count()) { if (_type_editor->itemText(i) == type) { _type_editor->setCurrentIndex(i); return; } ++i; } _type_editor->setCurrentIndex(0); _type_editor->setItemText(0, type); } void c2bBibParser::setWidgetMapping() { // Setting Reference Types _type_editor->insertItems(0, _bibliographic_types); _type_editor->setCurrentIndex(1); _current_reference.typeName = "article"; // Tracking Field Editor Line changes // Track using textChanged instead of editTextChanged. The latter does not track line clears for (int i = 0; i < _bibliographic_fields.count(); ++i) { const QString& name = _bibliographic_fields.at(i); connect(_field_editors.value(name), SIGNAL(returnPressed()), this, SLOT(setField())); connect(_field_editors.value(name), SIGNAL(textChanged(const QString&)), this, SLOT(referenceEdited(const QString&))); } connect(_field_editors.value("id"), SIGNAL(textChanged(const QString&)), this, SLOT(referenceEdited(const QString&))); connect(_type_editor, SIGNAL(editTextChanged(const QString&)), this, SLOT(referenceEdited(const QString&))); } void c2bBibParser::showLog(const QString& log) { if (!_preparser_logP) _preparser_logP = new c2bBibPreparserLog(_c2b_mainP); _preparser_logP->append(log); _preparser_logP->show(); // Don't use exec(), it could be a recursive call if clipboard changed } void c2bBibParser::checkRegExpFile(const QString& fn) { if (fn.isEmpty()) { QMessageBox::information(_c2b_mainP, tr("Information - cb2Bib"), tr("No RegExp filename has been specified.\n\n" "Note: RegExp files are specified through the cb2Bib Configure dialog."), QMessageBox::Ok); return; } QFile f(fn); if (!f.open(QIODevice::ReadOnly | QIODevice::Text)) QMessageBox::warning(_c2b_mainP, tr("Warning - cb2Bib"), tr("Unable to open the RegExp file %1 for reading.\nError: '%2'.\n\n" "Note: RegExp files are specified through the cb2Bib Configure dialog. " "After manual matching, patterns can be edited and stored in a " "RegExp file for future autodetection.").arg(fn).arg(f.errorString()), QMessageBox::Ok); else f.close(); } cb2bib-1.9.7/src/PaxHeaders.3194/proxyDialog.ui0000644000000000000000000000007413124510115015755 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.667257904 cb2bib-1.9.7/src/proxyDialog.ui0000644000175000001440000000543313124510115017347 0ustar00constansusers00000000000000 proxyDialog 0 0 454 127 Proxy Authentication - cb2Bib 6 Username: Password: QLineEdit::Password Qt::Vertical 0 0 Qt::Horizontal Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() proxyDialog accept() 248 254 157 274 buttonBox rejected() proxyDialog reject() 316 260 286 274 cb2bib-1.9.7/src/PaxHeaders.3194/bookmarkPlugin.h0000644000000000000000000000013213124510216016247 xustar0030 mtime=1498583182.803256641 30 atime=1498583183.007254748 30 ctime=1498583182.803256641 cb2bib-1.9.7/src/bookmarkPlugin.h0000644000175000001440000000160713124510216017645 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef BOOKMARKPLUGIN_H #define BOOKMARKPLUGIN_H #include class c2bFileSystemWatcher; class bookmarkPlugin : public QMenu { Q_OBJECT public: explicit bookmarkPlugin(QWidget* parentw = 0); ~bookmarkPlugin(); signals: void editBookmarks(); void openFile(const QString& fn); private: c2bFileSystemWatcher* _fsw; QString _bookmark_file; QString iconProvider(const QString& fn, const QString& iconFile); private slots: void init(); void openBookmark(); void parseBookmarks(); }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/c2bPdfImport.h0000644000000000000000000000013213124510216015556 xustar0030 mtime=1498583182.851256196 30 atime=1498583183.007254748 30 ctime=1498583182.851256196 cb2bib-1.9.7/src/c2bPdfImport.h0000644000175000001440000000266413124510216017160 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BPDFIMPORT_H #define C2BPDFIMPORT_H #include "ui_c2bPdfImport.h" #include class c2bSettings; class c2bPdfImport : public QDialog { Q_OBJECT public: explicit c2bPdfImport(QWidget* parentw = 0); ~c2bPdfImport(); QString processedFile; public slots: void processNext(); void referenceExtacted(bool status); void show(); void showMessage(const QString& ms); signals: void fileProcessed(const QString& filename); void saveReferenceRequest(); void setClipboardDisabled(bool disable); void textProcessed(const QString& text); protected: bool event(QEvent* qevent); void dragEnterEvent(QDragEnterEvent* qevent); void dropEvent(QDropEvent* qevent); private slots: void abort(); void help(); void loadSettings(); void processOneFile(); void saveSettings(); void selectFiles(); private: QPushButton* buttonProcess; QPushButton* buttonSelectFiles; Ui::c2bPdfImport ui; bool c2bAutomaticQuery; bool m_aborted; c2bSettings* settings; void processDocument(); }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/c2bAnnote.h0000644000000000000000000000013213124510216015076 xustar0030 mtime=1498583182.803256641 30 atime=1498583183.007254748 30 ctime=1498583182.807256604 cb2bib-1.9.7/src/c2bAnnote.h0000644000175000001440000000205513124510216016472 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BANNOTE_H #define C2BANNOTE_H #include class c2bFileSystemWatcher; class c2bSettings; class c2bWebBrowser; class texToHtml; class c2bAnnote : public QMainWindow { Q_OBJECT public: explicit c2bAnnote(QWidget* parentw = 0); ~c2bAnnote(); bool show(); private: QString _annote_filename; QString _html_filename; c2bFileSystemWatcher* _fsw; c2bSettings* _settingsP; c2bWebBrowser* _view_port; texToHtml* _t2h; private slots: void annote(); void configure(); void edit(); void help(); void loadSettings(); void setWindowTitle(const QString& title); void showMessage(const QString& ms); void update(); }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/c2bCiterWidget.h0000644000000000000000000000013213124510216016064 xustar0030 mtime=1498583182.823256456 30 atime=1498583183.007254748 30 ctime=1498583182.823256456 cb2bib-1.9.7/src/c2bCiterWidget.h0000644000175000001440000000343413124510216017462 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCITERWIDGET_H #define C2BCITERWIDGET_H #include "ui_c2bCiterWidget.h" #include class QLabel; class c2bCiterModel; class c2bCoreCiter; class c2bSettings; class c2bCiterWidget : public QWidget { Q_OBJECT public: explicit c2bCiterWidget(QWidget* parentw = 0); ~c2bCiterWidget(); public: void load(); void setTrayIcon(); public slots: void show(); void toggleVisible(); signals: void openAnnote(); void openFile(const QString& fn); private: QString _status_label; QStringList _bibtex_files; QSystemTrayIcon* _tray_icon; Ui::c2bCiterWidget ui; bool _clipboard_connected; c2bCiterModel* _citations; c2bCoreCiter* _citerP; c2bSettings* _settingsP; void reload(const c2bCiter::State& state); void setActions(); private slots: void citeReferences(); void doSearchInFiles(); void editReference(); void filterDataChanged(const QString& filter); void help(); void indexDocuments(); void openDirectory(); void openFile(); void openFiles(); void openUrl(); void reload(); void showLabel(); void showLabel(const QString& label); void showMessage(const QString& message); void toggleCb2Bib(); void toggleClipboard(); void toggleFullScreen(); void trayIconActivated(QSystemTrayIcon::ActivationReason r); void updatePatternFilter(const bool mode, const QString& pattern); }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/c2bBibHighlighter.h0000644000000000000000000000013213124510216016525 xustar0030 mtime=1498583182.807256604 30 atime=1498583183.007254748 30 ctime=1498583182.807256604 cb2bib-1.9.7/src/c2bBibHighlighter.h0000644000175000001440000000154213124510216020121 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BBIBHIGHLIGHTER_H #define C2BBIBHIGHLIGHTER_H #include /** BibTeX SyntaxHighLighter @author Pere Constans */ class c2bColors; class c2bBibHighlighter : public QSyntaxHighlighter { public: explicit c2bBibHighlighter(QTextDocument* doc); ~c2bBibHighlighter(); protected: virtual void highlightBlock(const QString& text); private: QColor text_color; QRegExp rx0; QRegExp rx1; QRegExp rx2; QRegExp rx3; c2bColors* c; }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/dialog.h0000644000000000000000000000013213124510216014522 xustar0030 mtime=1498583182.879255936 30 atime=1498583183.007254748 30 ctime=1498583182.879255936 cb2bib-1.9.7/src/dialog.h0000644000175000001440000000112513124510216016113 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef DIALOG_H #define DIALOG_H #include /** Remove What's This button from c2b dialogues */ namespace dialog { static const Qt::WindowFlags flags(Qt::WindowTitleHint | Qt::WindowSystemMenuHint); } // namespace dialog #endif cb2bib-1.9.7/src/PaxHeaders.3194/src.pro0000644000000000000000000000007413124510115014426 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.671257867 cb2bib-1.9.7/src/src.pro0000644000175000001440000001411113124510115016011 0ustar00constansusers00000000000000FORMS += c2bCiterWidget.ui \ c2bConfigure.ui \ c2bConfigureFR.ui \ c2bEditor.ui \ c2bExportDialog.ui \ c2bLogWidget.ui \ c2bPdfImport.ui \ c2bRLWebSearchSettings.ui \ c2bReferenceList.ui \ c2bSaveRegExp.ui \ c2bSearchInFiles.ui \ c2bSearchInFilesPattern.ui \ c2bSearchInFilesPatternEdit.ui \ c2bShortcutWidget.ui \ cb2Bib.ui \ findDialog.ui \ proxyDialog.ui RESOURCES += cb2bib.qrc HEADERS += qtsingleapplication/src/*.h \ bookmarkPlugin.h \ c2b.h \ c2bBibHighlighter.h \ c2bBibMenu.h \ c2bBibParser.h \ c2bBibPreparserLog.h \ c2bCiter.h \ c2bCiterExcerptView.h \ c2bCiterHistory.h \ c2bCiterModel.h \ c2bCiterView.h \ c2bCiterWidget.h \ c2bClipEdit.h \ c2bClipboard.h \ c2bCollectionIndex.h \ c2bColors.h \ c2bComboBox.h \ c2bConfigure.h \ c2bConfigureFR.h \ c2bConsole.h \ c2bCoreCiter.h \ c2bEditor.h \ c2bExport.h \ c2bExportDialog.h \ c2bFileDialog.h \ c2bFileSystemWatcher.h \ c2bHighlighter.h \ c2bIdLineEdit.h \ c2bLineEdit.h \ c2bNetworkQuery.h \ c2bNetworkQueryInfo.h \ c2bPdfImport.h \ c2bPostprocess.h \ c2bREHighlighter.h \ c2bRLWebSearchSettings.h \ c2bReferenceList.h \ c2bSaveREHighlighter.h \ c2bSaveRegExp.h \ c2bSearchInFiles.h \ c2bSearchInFilesPattern.h \ c2bSettings.h \ c2bShortcutPushButton.h \ c2bShortcutWidget.h \ c2bTests.h \ c2bTextBrowser.h \ c2bTextEdit.h \ c2bUpdateMetadata.h \ c2bUtils.h \ cb2Bib.h \ dialog.h \ findDialog.h SOURCES += qtsingleapplication/src/*.cpp \ bookmarkPlugin.cpp \ c2b.cpp \ c2bBibHighlighter.cpp \ c2bBibMenu.cpp \ c2bBibParser.cpp \ c2bBibPreparserLog.cpp \ c2bCiterExcerptView.cpp \ c2bCiterHistory.cpp \ c2bCiterModel.cpp \ c2bCiterView.cpp \ c2bCiterWidget.cpp \ c2bClipEdit.cpp \ c2bClipboard.cpp \ c2bCollectionIndex.cpp \ c2bColors.cpp \ c2bComboBox.cpp \ c2bConfigure.cpp \ c2bConfigureFR.cpp \ c2bConsole.cpp \ c2bCoreCiter.cpp \ c2bEditor.cpp \ c2bExport.cpp \ c2bExportDialog.cpp \ c2bFileDialog.cpp \ c2bFileSystemWatcher.cpp \ c2bHighlighter.cpp \ c2bIdLineEdit.cpp \ c2bLineEdit.cpp \ c2bNetworkQuery.cpp \ c2bNetworkQueryInfo.cpp \ c2bPdfImport.cpp \ c2bPostprocess.cpp \ c2bREHighlighter.cpp \ c2bRLWebSearchSettings.cpp \ c2bReferenceList.cpp \ c2bSaveREHighlighter.cpp \ c2bSaveRegExp.cpp \ c2bSearchInFiles.cpp \ c2bSearchInFilesPattern.cpp \ c2bSettings.cpp \ c2bShortcutPushButton.cpp \ c2bShortcutWidget.cpp \ c2bTests.cpp \ c2bTextBrowser.cpp \ c2bTextEdit.cpp \ c2bUpdateMetadata.cpp \ c2bUtils.cpp \ cb2Bib.cpp \ findDialog.cpp \ main.cpp TEMPLATE = app QT += widgets network LIBS += -lc2b QMAKE_LIBDIR += . INCLUDEPATH += c2b . qtHaveModule(webkitwidgets){ CONFIG += use_webkit } else { qtHaveModule(webenginewidgets){ CONFIG += use_webengine }} CONFIG(use_webkit) { message(The cb2Bib will be linked against QtWebKit library) HEADERS += c2bAnnote.h qweb/kit/c2bWebBrowser.h SOURCES += c2bAnnote.cpp qweb/kit/c2bWebBrowser.cpp INCLUDEPATH += ./qweb/kit DEFINES += C2B_USE_QWEB C2B_USE_QWEBKIT QT += webkitwidgets } CONFIG(use_webengine) { message(The cb2Bib will be linked against QtWebEngine library) HEADERS += c2bAnnote.h qweb/engine/c2bWebBrowser.h SOURCES += c2bAnnote.cpp qweb/engine/c2bWebBrowser.cpp INCLUDEPATH += ./qweb/engine DEFINES += C2B_USE_QWEB C2B_USE_QWEBENGINE QT += webenginewidgets } CONFIG += use_lzo use_lzo { LIBS += -llzo2 DEFINES += C2B_USE_LZO } disable_lzo { CONFIG -= use_lzo LIBS -= -llzo2 DEFINES -= C2B_USE_LZO } TARGET = cb2bib DESTDIR = ../bin DEPENDPATH += . POST_TARGETDEPS += libc2b.a QMAKE_CXXFLAGS_DEBUG += -DC2B_DEBUG enable_cbpoll { unix { message(Building with clipboardPoll) QT += x11extras HEADERS += clipboardPoll.h SOURCES += clipboardPoll.cpp DEFINES += C2B_USE_CBPOLL LIBS += -lX11 }} unix { INSTALLS += target script cb2bibdata icons desktop target.path = /usr/bin script.files += ../c2bscripts/c2bimport ../c2bscripts/c2bciter script.path = /usr/bin desktop.files += ../c2bscripts/cb2bib.desktop ../c2bscripts/c2bciter.desktop ../c2bscripts/c2bimport.desktop desktop.path = /usr/share/applications icons.files += ../src/icons/cb2bib.png icons.path = /usr/share/pixmaps cb2bibdata.files += ../AUTHORS ../COPYRIGHT ../LICENSE ../CHANGELOG ../data ../c2btools ../testPDFImport cb2bibdata.path = /usr/share/cb2bib } win32 { RC_FILE = ../cb2bib.rc } macx { ICON = ../src/icons/cb2bib.icns INSTALLS += target script cb2bibdata target.path = /Applications script.files += ../c2bscripts/c2bimport ../c2bscripts/c2bciter script.path = /Applications cb2bibdata.files += ../AUTHORS ../COPYRIGHT ../LICENSE ../CHANGELOG ../data ../c2btools ../testPDFImport cb2bibdata.path = Contents/Resources QMAKE_BUNDLE_DATA += script cb2bibdata # Set this directory if third party tools, like pdftotext are packaged # INSTALLS += externtools # externtools.files += # externtools.path = c2bExternTools # Set Library data # QMAKE_BUNDLE_DATA += externtools } cb2bib-1.9.7/src/PaxHeaders.3194/c2bShortcutWidget.cpp0000644000000000000000000000013013124510216017162 xustar0029 mtime=1498583182.78725679 30 atime=1498583183.007254748 29 ctime=1498583182.78725679 cb2bib-1.9.7/src/c2bShortcutWidget.cpp0000644000175000001440000001105413124510216020557 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bShortcutWidget.h" #include "c2bSettings.h" c2bShortcutWidget::c2bShortcutWidget(QWidget* parentw) : QWidget(parentw) { ui.setupUi(this); _settingsP = c2bSettingsP; _standard_keysequences.append(QKeySequence::Close); _standard_keysequences.append(QKeySequence::Copy); _standard_keysequences.append(QKeySequence::Cut); _standard_keysequences.append(QKeySequence::Find); _standard_keysequences.append(QKeySequence::FindNext); _standard_keysequences.append(QKeySequence::FindPrevious); _standard_keysequences.append(QKeySequence::HelpContents); _standard_keysequences.append(QKeySequence::Open); _standard_keysequences.append(QKeySequence::Paste); _standard_keysequences.append(QKeySequence::Redo); _standard_keysequences.append(QKeySequence::Refresh); _standard_keysequences.append(QKeySequence::Save); _standard_keysequences.append(QKeySequence::SelectAll); _standard_keysequences.append(QKeySequence::Undo); _standard_keysequences.append(QKeySequence::ZoomIn); _standard_keysequences.append(QKeySequence::ZoomOut); _standard_keysequences.append(Qt::Key_F2); _standard_keysequences.append(QKeySequence::Quit); _standard_keysequences.append(QKeySequence::SaveAs); connect(ui.Clear, SIGNAL(clicked()), ui.Shortcut, SLOT(clear())); connect(ui.Reset, SIGNAL(clicked()), ui.Shortcut, SLOT(reset())); } void c2bShortcutWidget::setShortcutNames(const QString& path, const QStringList& fullnames) { disconnect(ui.Shortcut, SIGNAL(shortcutChanged(const QKeySequence&, const QKeySequence&)), this, SLOT(shortcutChanged(const QKeySequence&, const QKeySequence&))); disconnect(ui.Description, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(currentIndexChanged(const QString&))); _modified_keysequences.clear(); _shortcut_path = path; _fullnames = fullnames.filter(path); const int n(_fullnames.count()); const int p(path.length()); for (int i = 0; i < n; ++i) if (_fullnames.at(i).startsWith(path)) ui.Description->addItem(_fullnames.at(i).mid(p)); ui.Shortcut->setKeysequence(_settingsP->keysequence(_shortcut_path + ui.Description->currentText())); ui.Shortcut->setDefaultKeysequence(_settingsP->defaultKeysequence(_shortcut_path + ui.Description->currentText())); connect(ui.Shortcut, SIGNAL(shortcutChanged(const QKeySequence&, const QKeySequence&)), this, SLOT(shortcutChanged(const QKeySequence&, const QKeySequence&))); connect(ui.Description, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(currentIndexChanged(const QString&))); } void c2bShortcutWidget::currentIndexChanged(const QString& name) { const QString fullname(_shortcut_path + name); if (_modified_keysequences.contains(fullname)) ui.Shortcut->setKeysequence(_modified_keysequences.value(fullname)); else ui.Shortcut->setKeysequence(_settingsP->keysequence(fullname)); ui.Shortcut->setDefaultKeysequence(_settingsP->defaultKeysequence(fullname)); } void c2bShortcutWidget::shortcutChanged(const QKeySequence& oldks, const QKeySequence& newks) { const QString fullname(_shortcut_path + ui.Description->currentText()); if (!newks.isEmpty()) { if (_standard_keysequences.contains(newks)) { ui.Shortcut->setKeysequence(oldks); ui.Shortcut->setChecked(true); emit statusMessage(tr("Key sequence %1 is used by standard shortcuts").arg(newks.toString(QKeySequence::NativeText))); return; } if (_modified_keysequences.size() == 0) { const int n(_fullnames.count()); for (int i = 0; i < n; ++i) _modified_keysequences.insert(_fullnames.at(i), _settingsP->keysequence(_fullnames.at(i))); } if (_modified_keysequences.values().contains(newks) && _modified_keysequences.value(fullname) != newks) { ui.Shortcut->setKeysequence(oldks); ui.Shortcut->setChecked(true); emit statusMessage(tr("Key sequence %1 is already assigned").arg(newks.toString(QKeySequence::NativeText))); return; } } _modified_keysequences[fullname] = newks; emit statusMessage(QString()); } cb2bib-1.9.7/src/PaxHeaders.3194/c2bExport.h0000644000000000000000000000013213124510216015133 xustar0030 mtime=1498583182.835256344 30 atime=1498583183.007254748 30 ctime=1498583182.839256308 cb2bib-1.9.7/src/c2bExport.h0000644000175000001440000000154113124510216016526 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BEXPORT_H #define C2BEXPORT_H #include #include class c2bExport : public QObject { Q_OBJECT public: explicit c2bExport(QObject* parento = 0); ~c2bExport(); struct export_data { QString bibtex_contents; QString bibtex_fn; QString documents_dir; QString export_fn; QStringList bibtex_keys; bool copy_documents; bool relative_dir; }; void exportEntries(const export_data& ed); }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/c2bBibMenu.cpp0000644000000000000000000000013213124510216015526 xustar0030 mtime=1498583182.727257347 30 atime=1498583183.007254748 30 ctime=1498583182.727257347 cb2bib-1.9.7/src/c2bBibMenu.cpp0000644000175000001440000001316313124510216017124 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bBibMenu.h" #include #include c2bBibMenu::c2bBibMenu(QWidget* parentw) : QMenu(parentw), _keyboard_selection(0), _was_plus_pressed(false) { _title_action = addAction("Title"); _title_action->setData("title"); _author_action = addAction("Author"); _author_action->setData("author"); _add_author_action = addAction("Add authors"); _add_author_action->setIcon(QIcon(C2B_ICON_DIR + "add.png")); _journal_action = addAction("Journal"); _journal_action->setData("journal"); addSeparator(); _pages_action = addAction("Pages"); _pages_action->setData("pages"); _volume_action = addAction("Volume"); _volume_action->setData("volume"); _number_action = addAction("Number"); _number_action->setData("number"); _year_action = addAction("Year"); _year_action->setData("year"); addSeparator(); _abstract_action = addAction("Abstract"); _abstract_action->setData("abstract"); _keywords_action = addAction("Keywords"); _keywords_action->setData("keywords"); _file_action = addAction("File"); _file_action->setData("file"); QMenu* submenu = new QMenu("Other fields...", this); _address_action = submenu->addAction("Address"); _address_action->setData("address"); _annote_action = submenu->addAction("Annote"); _annote_action->setData("annote"); _booktitle_action = submenu->addAction("Booktitle"); _booktitle_action->setData("booktitle"); _chapter_action = submenu->addAction("Chapter"); _chapter_action->setData("chapter"); _doi_action = submenu->addAction("DOI"); _doi_action->setData("doi"); _edition_action = submenu->addAction("Edition"); _edition_action->setData("edition"); _editor_action = submenu->addAction("Editor"); _editor_action->setData("editor"); _add_editor_action = submenu->addAction("Add editors"); _add_editor_action->setIcon(QIcon(C2B_ICON_DIR + "add.png")); _eprint_action = submenu->addAction("Eprint"); _eprint_action->setData("eprint"); _institution_action = submenu->addAction("Institution"); _institution_action->setData("institution"); _isbn_action = submenu->addAction("ISBN"); _isbn_action->setData("isbn"); _issn_action = submenu->addAction("ISSN"); _issn_action->setData("issn"); _month_action = submenu->addAction("Month"); _month_action->setData("month"); _note_action = submenu->addAction("Note"); _note_action->setData("note"); _organization_action = submenu->addAction("Organization"); _organization_action->setData("organization"); _publisher_action = submenu->addAction("Publisher"); _publisher_action->setData("publisher"); _school_action = submenu->addAction("School"); _school_action->setData("school"); _series_action = submenu->addAction("Series"); _series_action->setData("series"); _url_action = submenu->addAction("URL"); _url_action->setData("url"); addSeparator(); addMenu(submenu); addSeparator(); _any_pattern_action = addAction(QString()); } QAction* c2bBibMenu::exec(const QPoint& p) { _keyboard_selection = 0; _was_plus_pressed = false; QAction* a = QMenu::exec(p); if (a) return a; else return _keyboard_selection; } void c2bBibMenu::keyPressEvent(QKeyEvent* qevent) { switch (qevent->key()) { case Qt::Key_A: if (_was_plus_pressed) _keyboard_selection = _add_author_action; else _keyboard_selection = _author_action; break; case Qt::Key_B: _keyboard_selection = _booktitle_action; break; case Qt::Key_C: _keyboard_selection = _chapter_action; break; case Qt::Key_D: _keyboard_selection = _doi_action; break; case Qt::Key_E: if (_was_plus_pressed) _keyboard_selection = _add_editor_action; else _keyboard_selection = _editor_action; break; case Qt::Key_F: _keyboard_selection = _file_action; break; case Qt::Key_I: _keyboard_selection = _isbn_action; break; case Qt::Key_J: _keyboard_selection = _journal_action; break; case Qt::Key_K: _keyboard_selection = _keywords_action; break; case Qt::Key_M: _keyboard_selection = _month_action; break; case Qt::Key_N: _keyboard_selection = _number_action; break; case Qt::Key_O: _keyboard_selection = _organization_action; break; case Qt::Key_P: _keyboard_selection = _pages_action; break; case Qt::Key_S: _keyboard_selection = _series_action; break; case Qt::Key_T: _keyboard_selection = _title_action; break; case Qt::Key_U: _keyboard_selection = _url_action; break; case Qt::Key_V: _keyboard_selection = _volume_action; break; case Qt::Key_Y: _keyboard_selection = _year_action; break; case Qt::Key_Plus: _was_plus_pressed = true; break; default: _keyboard_selection = 0; _was_plus_pressed = false; } if (_keyboard_selection) { qevent->accept(); hide(); _keyboard_selection->trigger(); } else QMenu::keyPressEvent(qevent); } cb2bib-1.9.7/src/PaxHeaders.3194/c2bComboBox.cpp0000644000000000000000000000013213124510216015715 xustar0030 mtime=1498583182.743257199 30 atime=1498583183.007254748 30 ctime=1498583182.743257199 cb2bib-1.9.7/src/c2bComboBox.cpp0000644000175000001440000000214413124510216017310 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bComboBox.h" #include #include #include #include c2bComboBox::c2bComboBox(QWidget* parentw) : QComboBox(parentw) {} c2bComboBox::~c2bComboBox() {} void c2bComboBox::contextMenuEvent(QContextMenuEvent* e) { QMenu* menu = QComboBox::lineEdit()->createStandardContextMenu(); QList acts = menu->actions(); QAction* act; act = new QAction("Clear", menu); act->setEnabled(!QComboBox::lineEdit()->text().isEmpty()); connect(act, SIGNAL(triggered()), this, SLOT(clearEditText())); menu->insertAction(acts.at(7), act); acts = actions(); for (int i = 0; i < acts.count(); ++i) menu->addAction(acts.at(i)); menu->exec(e->globalPos()); delete menu; } cb2bib-1.9.7/src/PaxHeaders.3194/c2bCiterExcerptView.h0000644000000000000000000000013013124510216017104 xustar0029 mtime=1498583182.81525653 30 atime=1498583183.007254748 29 ctime=1498583182.81525653 cb2bib-1.9.7/src/c2bCiterExcerptView.h0000644000175000001440000000125013124510216020476 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCITEREXCERPTVIEW_H #define C2BCITEREXCERPTVIEW_H #include class c2bTextBrowser; class c2bCiterExcerptView : public QDialog { Q_OBJECT public: c2bCiterExcerptView(const QString& html, QWidget* parentw = 0); ~c2bCiterExcerptView(); private: c2bTextBrowser* _browserP; }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/c2bREHighlighter.cpp0000644000000000000000000000013213124510216016672 xustar0030 mtime=1498583182.775256901 30 atime=1498583183.007254748 30 ctime=1498583182.775256901 cb2bib-1.9.7/src/c2bREHighlighter.cpp0000644000175000001440000000575613124510216020301 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bREHighlighter.h" #include "c2bSettings.h" #include #include c2bREHighlighter::c2bREHighlighter(QTextDocument* doc) : QSyntaxHighlighter(doc) { QPalette p; text_color = p.text().color(); c2bSettings* settings(c2bSettingsP); c = &settings->colors; connect(settings, SIGNAL(newSettings()), this, SLOT(rehighlight())); rx0 = QRegExp("\\b(?:abstract|address|annote|author|booktitle|chapter|" "doi|edition|editor|eprint|file|institution|isbn|issn|journal|" "keywords|month|note|number|organization|pages|publisher|" "school|series|title|url|volume|year)\\b"); rx0.setMinimal(true); rx1 = QRegExp("\\b(?:article|book|booklet|conference|inbook|incollection|" "inproceedings|manual|mastersthesis|misc|periodical|phdthesis|" "proceedings|techreport|unpublished)\\b"); rx2 = QRegExp("^[a-z_]+=\\S.+$"); rx3 = QRegExp("^[a-z_]+="); rx4 = QRegExp("<<[a-z]+>>"); rx5 = QRegExp("^#.*$"); } c2bREHighlighter::~c2bREHighlighter() {} void c2bREHighlighter::highlightBlock(const QString& text) { const int len(text.length()); setFormat(0, len - 1, text_color); int pos(0); while (pos >= 0) { pos = rx0.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx0.matchedLength(), c->bib_reference_field_color); pos += rx0.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx1.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx1.matchedLength(), c->bib_reference_type_color); pos += rx1.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx2.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx2.matchedLength(), c->netqinf_command_content_color); pos += rx2.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx3.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx3.matchedLength(), c->netqinf_command_key_color); pos += rx3.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx4.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx4.matchedLength(), c->cb2bib_tag_color); pos += rx4.matchedLength(); } } pos = 0; while (pos >= 0) { pos = rx5.indexIn(text, pos); if (pos > -1) { setFormat(pos, rx5.matchedLength(), c->comment_color); pos += rx5.matchedLength(); } } } cb2bib-1.9.7/src/PaxHeaders.3194/c2bNetworkQuery.h0000644000000000000000000000013213124510216016331 xustar0030 mtime=1498583182.847256233 30 atime=1498583183.007254748 30 ctime=1498583182.847256233 cb2bib-1.9.7/src/c2bNetworkQuery.h0000644000175000001440000000176613124510216017735 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BNETWORKQUERY_H #define C2BNETWORKQUERY_H #include "c2bUtils.h" #include class c2bNetworkQuery : public networkQuery { Q_OBJECT public: c2bNetworkQuery(bibParser* bp, QObject* parento = 0); c2bNetworkQuery(bibParser* bp, network* net, QObject* parento = 0); ~c2bNetworkQuery(); protected: bool checkQueryFile(const QString& fn) const; inline QString fromHtmlString(const QString& str, const bool addMetadata = false) const { return c2bUtils::fromHtmlString(str, addMetadata); } bool openFile(const QString& fn) const { return c2bUtils::openFile(fn); } }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/c2bLogWidget.ui0000644000000000000000000000007313124510115015727 xustar0030 atime=1498583183.007254748 29 ctime=1498583182.64725809 cb2bib-1.9.7/src/c2bLogWidget.ui0000644000175000001440000000400013124510115017307 0ustar00constansusers00000000000000 Pere Constans c2bLogWidget 0 0 827 347 Process Log - cb2Bib 6 6 QFrame::StyledPanel QFrame::Raised true QFrame::HLine QFrame::Sunken Qt::Horizontal Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Help Log buttonBox rejected() c2bLogWidget reject() 797 330 830 305 cb2bib-1.9.7/src/PaxHeaders.3194/c2bCiter.h0000644000000000000000000000013013124510216014716 xustar0029 mtime=1498583182.81525653 30 atime=1498583183.007254748 29 ctime=1498583182.81525653 cb2bib-1.9.7/src/c2bCiter.h0000644000175000001440000001235213124510216016315 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCITER_H #define C2BCITER_H #include /** \page c2bciter The cb2Bib Citer The cb2Bib Citer is a keyboard based module for inserting citation IDs into a working document. Conveniently, the command c2bciter, or its expansion 'cb2bib --citer', can be assigned to a global, desktop wide shortcut key. This will provide an easy access to the citer from within any text editor. Pressing the shortcut turns on and off the citer panel. Once appropriate references are selected, pressing key C sets the citations either to the clipboard or to a LyX pipe, closes the citer panel, and returns keyboard focus to the editor. By default, c2bciter loads all references from the current directory, specified in the cb2Bib main panel. On the desktop tray, the cb2Bib icon indicates that the citer is running. Its context menu offers the possibility to load other files or directories, or to toggle full screen mode. Search, filtering, navigation, and citation are keyword based. Pressing keys A, I, J, T, and Y sorts the references by author, included date, journal, title, and year, respectively. Key F initiates filtering, and Esc leaves filtering mode. References are selected when pressing enter. Key S toggles the current selection display, and Del clears the selection. The combination Shift + letter navigates through the rows starting by the letter. Advanced filtering capabilities are available if documents are indexed. Document indexing, or term or key sentence extraction, is performed by clicking the tray icon menu action Index Documents. Once indexing is done, after pressing Refresh, pressing K displays the document extracted keywords, and pressing G, the collection glossary of terms. On a keyword, pressing R display all documents indexed by the keyword. On a document, pressing R display related documents. Relatedness is set from keyword based similarity measures. Key sequence Alt+C toggles clipboard connection on and off. When connection is on, the clipboard contents is set, each time it changes, as the filter string. This provides a fast way to retrieve a given reference while browsing elsewhere.

         

        \verbatim Usage: cb2bib --citer [dirname1 [dirname2 ... ]] cb2bib --citer [filename1.bib [filename2.bib ... ]] \endverbatim \verbatim Display Keys A author - journal - year - title I included date - title J journal - year - author T title Y year - author - journal - title \endverbatim \verbatim Filter Keys D Delete last filter F Enter pattern filter mode G Toggle glossary of terms view K Toggle document keywords view R Display related documents Left Move to previous filtered view Right Move to next filtered view \endverbatim \verbatim Action Keys C Cite selected citations and close citer window Del Unselect all citations E Edit current citation's source Enter Select current citation Esc Exit filter mode or close citer window O Open current citation's file S Display the set of selected citations V Display document excerpts in keywords view Shift+ Keyboard search naviagation U Open current citation's URL W Write notes using Annote \endverbatim \verbatim Tray Icon Actions F1 Citer help Ctrl+O Open BibTeX directory Alt+O Open BibTeX files F5 Refresh Ctrl+F Search in files Alt+L Set Lyx pipe F2 Toggle cb2Bib Alt+C Toggle clipboard Alt+F Toggle full screen Index documents \endverbatim

         

        See also \ref relnotes130, \ref relnotes140, \ref relnotes147, \ref commandline and \htmlonly The cb2Bib Annote. \endhtmlonly */ namespace c2bCiter { enum Format {AJYT, IT, JYA, T, YAJT, R, K}; enum Filter {None, Document, Keyword, Pattern, Related, Selected}; struct State { inline State() : format(AJYT), filter(None), viewer_index(0) {} inline State(const Format fo, const Filter fi, const int vi, const QString fs) : format(fo), filter(fi), viewer_index(vi), filter_string(fs) {} inline bool operator==(const State& s) const { return format == s.format && filter == s.filter && viewer_index == s.viewer_index && filter_string == s.filter_string; } Format format; Filter filter; int viewer_index; QString filter_string; QString index_data; }; struct KeywordData { bool valid; QString bibtexfn; QString documentfn; QString keyword; }; } // namespace c2bCiter #endif cb2bib-1.9.7/src/PaxHeaders.3194/c2bShortcutWidget.ui0000644000000000000000000000007313124510115017021 xustar0030 atime=1498583183.007254748 29 ctime=1498583182.64725809 cb2bib-1.9.7/src/c2bShortcutWidget.ui0000644000175000001440000000431013124510115020405 0ustar00constansusers00000000000000 c2bShortcutWidget 0 0 551 29 Form -1 0 0 true false Qt::NoFocus Clear key sequence :/icons/icons/clear_left.png:/icons/icons/clear_left.png Qt::NoFocus Reset key sequence to default value :/icons/icons/edit-undo.png:/icons/icons/edit-undo.png c2bShortcutPushButton QPushButton
        c2bShortcutPushButton.h
        cb2bib-1.9.7/src/PaxHeaders.3194/c2bEditor.ui0000644000000000000000000000007313124510115015270 xustar0030 atime=1498583183.007254748 29 ctime=1498583182.64725809 cb2bib-1.9.7/src/c2bEditor.ui0000644000175000001440000002477613124510115016676 0ustar00constansusers00000000000000 Pere Constans c2bEditor 0 0 801 600 Editor - cb2Bib :/icons/icons/cb2bib.png:/icons/icons/cb2bib.png 0 0 801 29 &Help &Edit &View &Settings &File Tools Qt::Horizontal TopToolBarArea false :/icons/icons/filesave22.png:/icons/icons/filesave22.png Save Save :/icons/icons/filesaveas22.png:/icons/icons/filesaveas22.png Save As... Save As Save As Save as... :/icons/icons/exec22.png:/icons/icons/exec22.png Exec :/icons/icons/fileclose22.png:/icons/icons/fileclose22.png Close Document Close Document Close Document Close document :/icons/icons/exit.png:/icons/icons/exit.png Exit Exit cb2Bib Exit cb2Bib Exit cb2Bib :/icons/icons/help16.png:/icons/icons/help16.png Editor Help Editor Help Editor Help Editor context help :/icons/icons/cb2bib.png:/icons/icons/cb2bib.png Toggle cb2Bib Toggle cb2Bib Toggle cb2Bib F2 Set LyX Pipe Set active LyX pipe Set LyX pipe Set active LyX pipe true :/icons/icons/edit22.png:/icons/icons/edit22.png Toggle Editing and Browsing Toggle Editing and Browsing Toggle Editing and Browsing Toggle editing and browsing modes false :/icons/icons/viewZoomIn.png:/icons/icons/viewZoomIn.png Zoom In Zoom in false :/icons/icons/viewZoomOut.png:/icons/icons/viewZoomOut.png Zoom Out Zoom out false :/icons/icons/cb2bib.png:/icons/icons/cb2bib.png cb2Bib Help cb2Bib Help cb2Bib Help cb2Bib context help Shift+F1 :/icons/icons/configure.png:/icons/icons/configure.png cb2Bib Settings cb2Bib Settings cb2Bib Settings cb2Bib settings :/icons/icons/fileopen22.png:/icons/icons/fileopen22.png Open Open Open document false false :/icons/icons/configure_bibtex.png:/icons/icons/configure_bibtex.png Export Entries Export Entries Export Entries Export selected entries false cb2bib-1.9.7/src/PaxHeaders.3194/c2bSearchInFilesPatternEdit.ui0000644000000000000000000000007313124510115020665 xustar0030 atime=1498583183.007254748 29 ctime=1498583182.64725809 cb2bib-1.9.7/src/c2bSearchInFilesPatternEdit.ui0000644000175000001440000000446713124510115022266 0ustar00constansusers00000000000000 Pere Constans c2bSearchInFilesPatternEdit 0 0 594 85 Edit Pattern - cb2Bib 6 6 6 6 6 Qt::Horizontal Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok c2bSearchInFilesPattern QWidget
        c2bSearchInFilesPattern.h
        buttonBox accepted() c2bSearchInFilesPatternEdit accept() 248 254 157 274 buttonBox rejected() c2bSearchInFilesPatternEdit reject() 316 260 286 274
        cb2bib-1.9.7/src/PaxHeaders.3194/c2bReferenceList.h0000644000000000000000000000013213124510216016404 xustar0030 mtime=1498583182.855256159 30 atime=1498583183.007254748 30 ctime=1498583182.855256159 cb2bib-1.9.7/src/c2bReferenceList.h0000644000175000001440000000502713124510216020002 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BREFERENCELIST_H #define C2BREFERENCELIST_H #include "ui_c2bReferenceList.h" #include class bibSearcher; class c2bCoreCiter; class c2bRLWebSearchSettings; class c2bSettings; class c2bTextBrowser; class c2bTextEdit; class c2bReferenceList : public QWidget { Q_OBJECT public: c2bReferenceList(c2bTextEdit* ed, c2bTextBrowser* br, QWidget* parentw = 0); ~c2bReferenceList(); QAction* citeEntryAction; QAction* clearSelectionsAction; QAction* openAuthorsWebSearchAction; QAction* openDOIAction; QAction* openFileAction; QAction* openTextLocalSearchAction; QAction* openTextWebSearchAction; QAction* openTitleWebSearchAction; QAction* openUrlAction; QAction* refreshListAction; QAction* webSearchSettingsAction; QStringList selectedKeys() const; void goToReference(const QString& id); void goToReference(const int position); public slots: void loadList(const QString& txt, bibSearcher* searcher = 0); void refreshList(); void setLyXPipe(); signals: void hasSelectedItems(bool); void openFile(const QString& fn); protected slots: void citeEntry(); void clearSelections(); void goToReference(QTreeWidgetItem* ref); void itemSelectionChanged(); void openAuthorWebSearch(); void openDOI(); void openFile(); void openLink(const QUrl& ln); void openTextLocalSearch(); void openTextWebSearch(); void openTitleWebSearch(); void openUrl(); void scrollToReference(const QString& id); void webSearchSettings(); private: QList _positionList; QString _bib_item_html; QString _filter_mode; QString _references_html; QStringList _doiList; QStringList _fileList; QStringList _urlList; Ui::c2bReferenceList ui; c2bCoreCiter* _citerP; c2bSettings* _settingsP; c2bTextBrowser* _browserP; c2bTextEdit* _editorP; int _author_index; int _id_index; int _journal_index; int _key_index; int _title_index; int _year_index; void setupFilterBar(); private slots: void blockFilterSignals(); void filterList(); void keepFilterPattern(); void setFilterMode(QAction* mode); }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/c2bFileDialog.h0000644000000000000000000000013213124510216015651 xustar0030 mtime=1498583182.839256308 30 atime=1498583183.007254748 30 ctime=1498583182.839256308 cb2bib-1.9.7/src/c2bFileDialog.h0000644000175000001440000000533613124510216017252 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BFILEDIALOG_H #define C2BFILEDIALOG_H #include #include class c2bSettings; class fileIconProvider; class c2bFileDialog : public QFileDialog { Q_OBJECT public: static QString getFilename(QWidget* parentw = 0, const QString& caption = QString(), const QString& path = QString(), const QString& filter = QString()); static QString getOpenFilename(QWidget* parentw = 0, const QString& caption = QString(), const QString& path = QString(), const QString& filter = QString()); static QStringList getOpenFilenames(QWidget* parentw = 0, const QString& caption = QString(), const QString& path = QString(), const QString& filter = QString()); static QString getSaveFilename(QWidget* parentw = 0, const QString& caption = QString(), const QString& path = QString(), const QString& filter = QString()); static QString getExistingDirectory(QWidget* parentw = 0, const QString& caption = QString(), const QString& path = QString()); static QString getSystemFilename(QWidget* parentw = 0, const QString& caption = QString(), const QString& path = QString(), const QString& filter = QString()); private: c2bFileDialog(QWidget* parentw, const QString& caption, const QString& fpath, const QString& ffilter); ~c2bFileDialog(); QString _current_file; QString fileName(const QString& path); c2bSettings* settings; fileIconProvider* fip; static QString _caption(const QString& generic, const QString& caption); static QString _dirpath(const QString& path); static QString _filename(const QString& path); static QString _path(const QString& path); void readSettings(); void writeSettings(); private slots: void accept(); void selectCurrentFile(); }; /*************************************************************************** Class fileIconProvider ***************************************************************************/ class fileIconProvider : public QFileIconProvider { public: fileIconProvider(); ~fileIconProvider(); inline QIcon icon(IconType it) const { return QFileIconProvider::icon(it); } QIcon icon(const QFileInfo& info) const; private: QIcon _exec_icon; }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/qweb0000644000000000000000000000007413124510115013776 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.671257867 cb2bib-1.9.7/src/qweb/0000755000175000001440000000000013124510115015440 5ustar00constansusers00000000000000cb2bib-1.9.7/src/qweb/PaxHeaders.3194/engine0000644000000000000000000000007413124510115015243 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.671257867 cb2bib-1.9.7/src/qweb/engine/0000755000175000001440000000000013124510115016705 5ustar00constansusers00000000000000cb2bib-1.9.7/src/qweb/engine/PaxHeaders.3194/c2bWebBrowser.h0000644000000000000000000000007413124510115020141 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.671257867 cb2bib-1.9.7/src/qweb/engine/c2bWebBrowser.h0000644000175000001440000000244513124510115021533 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BWEBBROWSER_H #define C2BWEBBROWSER_H #include #include class c2bWebBrowser : public QWebEngineView { Q_OBJECT public: explicit c2bWebBrowser(QWidget* parentw = 0); virtual ~c2bWebBrowser(); QAction* viewBackwardAction; QAction* viewForwardAction; QAction* viewHomeAction; QAction* viewReloadAction; QAction* viewZoomInAction; QAction* viewZoomOutAction; signals: void statusMessage(const QString ms); public slots: void loadPage(const QString& p_url); void setFixedFont(const QFont& qfont); void setFont(const QFont& qfont); void setHomePage(const QString& hp_url); protected: virtual QWebEngineView* createWindow(QWebEnginePage::WebWindowType type); protected slots: void copy(); void home(); void zoomIn(); void zoomOut(); private: QString _home_page; QString _hovered_link; void showTitle(const QVariant& v); private slots: void linkHovered(const QString& link); }; #endif cb2bib-1.9.7/src/qweb/engine/PaxHeaders.3194/c2bWebBrowser.cpp0000644000000000000000000000007413124510115020474 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.671257867 cb2bib-1.9.7/src/qweb/engine/c2bWebBrowser.cpp0000644000175000001440000001310313124510115022057 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bWebBrowser.h" #include "c2bUtils.h" #include #include #include #include #include #include c2bWebBrowser::c2bWebBrowser(QWidget* parentw) : QWebEngineView(parentw) { // Set default background to application #if QT_VERSION >= 0x050600 page()->setBackgroundColor(qApp->palette().color(QPalette::Window)); #endif // Actions setContextMenuPolicy(Qt::ActionsContextMenu); viewBackwardAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewBackward.png")), tr("Backward"), this); viewBackwardAction->setShortcut(QKeySequence("Left")); viewBackwardAction->setStatusTip(tr("Backward")); addAction(viewBackwardAction); viewForwardAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewForward.png")), tr("Forward"), this); viewForwardAction->setShortcut(QKeySequence("Right")); viewForwardAction->setStatusTip(tr("Forward")); addAction(viewForwardAction); c2bUtils::addSeparator(this); viewHomeAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewHome.png")), tr("Home"), this); viewHomeAction->setShortcut(QKeySequence("Esc")); viewHomeAction->setStatusTip(tr("Home page")); addAction(viewHomeAction); c2bUtils::addSeparator(this); viewReloadAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewReload.png")), tr("Reload"), this); viewReloadAction->setShortcut(QKeySequence("R")); viewReloadAction->setStatusTip(tr("Reload current page")); addAction(viewReloadAction); c2bUtils::addSeparator(this); viewZoomInAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewZoomIn.png")), tr("Zoom In"), this); viewZoomInAction->setShortcut(QKeySequence(QKeySequence::ZoomIn)); viewZoomInAction->setStatusTip(tr("Zoom in")); addAction(viewZoomInAction); viewZoomOutAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewZoomOut.png")), tr("Zoom Out"), this); viewZoomOutAction->setShortcut(QKeySequence(QKeySequence::ZoomOut)); viewZoomOutAction->setStatusTip(tr("Zoom out")); addAction(viewZoomOutAction); connect(viewForwardAction, SIGNAL(triggered()), this, SLOT(forward())); connect(viewBackwardAction, SIGNAL(triggered()), this, SLOT(back())); connect(viewHomeAction, SIGNAL(triggered()), this, SLOT(home())); connect(viewReloadAction, SIGNAL(triggered()), this, SLOT(reload())); connect(viewZoomInAction, SIGNAL(triggered()), this, SLOT(zoomIn())); connect(viewZoomOutAction, SIGNAL(triggered()), this, SLOT(zoomOut())); QShortcut* copy_shortcut = new QShortcut(QKeySequence(QKeySequence::Copy), this); connect(copy_shortcut, SIGNAL(activated()), this, SLOT(copy())); connect(page(), SIGNAL(linkHovered(const QString&)), this, SLOT(linkHovered(const QString&))); connect(this, SIGNAL(titleChanged(const QString&)), this, SLOT(setWindowTitle(const QString&))); } c2bWebBrowser::~c2bWebBrowser() {} void c2bWebBrowser::setHomePage(const QString& hp_url) { _home_page = hp_url; home(); } void c2bWebBrowser::setFont(const QFont& qfont) { QWebEngineSettings* wsettings = settings(); wsettings->setFontFamily(QWebEngineSettings::StandardFont, qfont.family()); wsettings->setFontSize(QWebEngineSettings::DefaultFontSize, qfont.pointSize()); } void c2bWebBrowser::setFixedFont(const QFont& qfont) { QWebEngineSettings* wsettings = settings(); wsettings->setFontFamily(QWebEngineSettings::FixedFont, qfont.family()); wsettings->setFontSize(QWebEngineSettings::DefaultFixedFontSize, qfont.pointSize()); } void c2bWebBrowser::copy() { page()->triggerAction(QWebEnginePage::Copy); } void c2bWebBrowser::home() { if (!_home_page.isEmpty()) load(c2bUtils::stringToUrl(_home_page)); } void c2bWebBrowser::loadPage(const QString& p_url) { if (!p_url.isEmpty()) load(c2bUtils::stringToUrl(p_url)); } void c2bWebBrowser::zoomIn() { setZoomFactor(zoomFactor() + 0.1); } void c2bWebBrowser::zoomOut() { setZoomFactor(zoomFactor() - 0.1); } QWebEngineView* c2bWebBrowser::createWindow(QWebEnginePage::WebWindowType /* type */) { if (!_hovered_link.isEmpty()) c2bUtils::openFile(_hovered_link, this); return 0; } template struct InvokeWrapper { R* receiver; void (C::*memberFun)(Arg); void operator()(Arg result) { (receiver->*memberFun)(result); } }; template InvokeWrapper invoke(R* receiver, void (C::*memberFun)(Arg)) { InvokeWrapper wrapper = {receiver, memberFun}; return wrapper; } void c2bWebBrowser::showTitle(const QVariant& v) { if (!v.isValid()) emit statusMessage(QString()); else emit statusMessage(v.toString()); } void c2bWebBrowser::linkHovered(const QString& link) { _hovered_link = link; if (_hovered_link.isEmpty()) emit statusMessage(QString()); else if (_hovered_link.contains(".tex.html#")) { const QString q(QFileInfo(link).fileName().split('#').last()); page()->runJavaScript("document.querySelector('a[id*=\"" + q + "\"]').text", invoke(this, &c2bWebBrowser::showTitle)); } else { QString vlink(link); emit statusMessage(vlink.remove("file://")); } } cb2bib-1.9.7/src/qweb/PaxHeaders.3194/kit0000644000000000000000000000007413124510115014565 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.671257867 cb2bib-1.9.7/src/qweb/kit/0000755000175000001440000000000013124510115016227 5ustar00constansusers00000000000000cb2bib-1.9.7/src/qweb/kit/PaxHeaders.3194/c2bWebBrowser.h0000644000000000000000000000007413124510115017463 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.671257867 cb2bib-1.9.7/src/qweb/kit/c2bWebBrowser.h0000644000175000001440000000235013124510115021050 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BWEBBROWSER_H #define C2BWEBBROWSER_H #include #include class c2bWebBrowser : public QWebView { Q_OBJECT public: explicit c2bWebBrowser(QWidget* parentw = 0); virtual ~c2bWebBrowser(); QAction* viewBackwardAction; QAction* viewForwardAction; QAction* viewHomeAction; QAction* viewReloadAction; QAction* viewZoomInAction; QAction* viewZoomOutAction; signals: void statusMessage(const QString ms); public slots: void loadPage(const QString& p_url); void setFixedFont(const QFont& qfont); void setFont(const QFont& qfont); void setHomePage(const QString& hp_url); protected: virtual QWebView* createWindow(QWebPage::WebWindowType type); protected slots: void copy(); void home(); void zoomIn(); void zoomOut(); private: QString _home_page; QString _hovered_link; private slots: void linkHovered(const QString& link); }; #endif cb2bib-1.9.7/src/qweb/kit/PaxHeaders.3194/c2bWebBrowser.cpp0000644000000000000000000000007413124510115020016 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.671257867 cb2bib-1.9.7/src/qweb/kit/c2bWebBrowser.cpp0000644000175000001440000001246313124510115021411 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bWebBrowser.h" #include "c2bUtils.h" #include #include #include #include #include #include c2bWebBrowser::c2bWebBrowser(QWidget* parentw) : QWebView(parentw) { // Avoid flickering (Qt 4.3) setAttribute(Qt::WA_NoSystemBackground, true); setAttribute(Qt::WA_OpaquePaintEvent, true); // Set default background to application page()->setPalette(qApp->palette()); // Actions setContextMenuPolicy(Qt::ActionsContextMenu); viewBackwardAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewBackward.png")), tr("Backward"), this); viewBackwardAction->setShortcut(QKeySequence("Left")); viewBackwardAction->setStatusTip(tr("Backward")); addAction(viewBackwardAction); viewForwardAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewForward.png")), tr("Forward"), this); viewForwardAction->setShortcut(QKeySequence("Right")); viewForwardAction->setStatusTip(tr("Forward")); addAction(viewForwardAction); c2bUtils::addSeparator(this); viewHomeAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewHome.png")), tr("Home"), this); viewHomeAction->setShortcut(QKeySequence("Esc")); viewHomeAction->setStatusTip(tr("Home page")); addAction(viewHomeAction); c2bUtils::addSeparator(this); viewReloadAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewReload.png")), tr("Reload"), this); viewReloadAction->setShortcut(QKeySequence("R")); viewReloadAction->setStatusTip(tr("Reload current page")); addAction(viewReloadAction); c2bUtils::addSeparator(this); viewZoomInAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewZoomIn.png")), tr("Zoom In"), this); viewZoomInAction->setShortcut(QKeySequence(QKeySequence::ZoomIn)); viewZoomInAction->setStatusTip(tr("Zoom in")); addAction(viewZoomInAction); viewZoomOutAction = new QAction(QIcon(QString::fromUtf8(":/icons/icons/viewZoomOut.png")), tr("Zoom Out"), this); viewZoomOutAction->setShortcut(QKeySequence(QKeySequence::ZoomOut)); viewZoomOutAction->setStatusTip(tr("Zoom out")); addAction(viewZoomOutAction); connect(viewForwardAction, SIGNAL(triggered()), this, SLOT(forward())); connect(viewBackwardAction, SIGNAL(triggered()), this, SLOT(back())); connect(viewHomeAction, SIGNAL(triggered()), this, SLOT(home())); connect(viewReloadAction, SIGNAL(triggered()), this, SLOT(reload())); connect(viewZoomInAction, SIGNAL(triggered()), this, SLOT(zoomIn())); connect(viewZoomOutAction, SIGNAL(triggered()), this, SLOT(zoomOut())); QShortcut* copy_shortcut = new QShortcut(QKeySequence(QKeySequence::Copy), this); connect(copy_shortcut, SIGNAL(activated()), this, SLOT(copy())); connect(page(), SIGNAL(linkHovered(const QString&, const QString&, const QString&)), this, SLOT(linkHovered(const QString&))); connect(this, SIGNAL(titleChanged(const QString&)), this, SLOT(setWindowTitle(const QString&))); connect(page(), SIGNAL(statusBarMessage(const QString&)), this, SIGNAL(statusMessage(const QString&))); } c2bWebBrowser::~c2bWebBrowser() {} void c2bWebBrowser::setHomePage(const QString& hp_url) { _home_page = hp_url; home(); } void c2bWebBrowser::setFont(const QFont& qfont) { QWebSettings* wsettings = settings(); wsettings->setFontFamily(QWebSettings::StandardFont, qfont.family()); wsettings->setFontSize(QWebSettings::DefaultFontSize, qfont.pointSize()); } void c2bWebBrowser::setFixedFont(const QFont& qfont) { QWebSettings* wsettings = settings(); wsettings->setFontFamily(QWebSettings::FixedFont, qfont.family()); wsettings->setFontSize(QWebSettings::DefaultFixedFontSize, qfont.pointSize()); } void c2bWebBrowser::copy() { page()->triggerAction(QWebPage::Copy); } void c2bWebBrowser::home() { if (!_home_page.isEmpty()) load(c2bUtils::stringToUrl(_home_page)); } void c2bWebBrowser::loadPage(const QString& p_url) { if (!p_url.isEmpty()) load(c2bUtils::stringToUrl(p_url)); } void c2bWebBrowser::zoomIn() { setTextSizeMultiplier(textSizeMultiplier() + 0.1); } void c2bWebBrowser::zoomOut() { setTextSizeMultiplier(textSizeMultiplier() - 0.1); } QWebView* c2bWebBrowser::createWindow(QWebPage::WebWindowType /* type */) { if (!_hovered_link.isEmpty()) c2bUtils::openFile(_hovered_link, this); return 0; } void c2bWebBrowser::linkHovered(const QString& link) { _hovered_link = link; if (_hovered_link.isEmpty()) emit statusMessage(QString()); else if (_hovered_link.contains(".tex.html#")) { const QString q(QFileInfo(link).fileName().split('#').last()); const QVariant v(page()->mainFrame()->evaluateJavaScript("document.querySelector('a[id*=\"" + q + "\"]').text")); if (!v.isValid()) emit statusMessage(QString()); else emit statusMessage(v.toString()); } else { QString vlink(link); emit statusMessage(vlink.remove("file://")); } } cb2bib-1.9.7/src/PaxHeaders.3194/htm0000644000000000000000000000007413124510115013630 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.651258052 cb2bib-1.9.7/src/htm/0000755000175000001440000000000013124510115015272 5ustar00constansusers00000000000000cb2bib-1.9.7/src/htm/PaxHeaders.3194/references.css0000644000000000000000000000007413124510115016540 xustar0030 atime=1498583182.715257459 30 ctime=1498583182.651258052 cb2bib-1.9.7/src/htm/references.css0000644000175000001440000000142213124510115020124 0ustar00constansusers00000000000000/* cb2Bib References CSS */ /* general */ body { font-size: 100%; font-family: sans-serif; background-color: #E7E7E7; color: black; padding: 0; margin: 0; } a { color: #010141; text-decoration: none; } a:link { color: #010141; text-decoration: underline; } h1 { background-color: #010141; color: #DBDBDB; font-size: 20px; font-variant: small-caps; font-family: sans-serif; } /* references */ #references{ background-color: #DBDBDB; } #references blockquote{ font-size: small; } #references span{ color: #0000FF; } #excerpt{ font-style: italic; } /* header */ #header { vertical-align: middle; } /* footer */ #footer { color: black; font-family: arial, sans-serif; font-size: 9pt; } #footer td{ padding: 10px; padding-left: 5px; padding-right: 5px; } cb2bib-1.9.7/src/htm/PaxHeaders.3194/tex2html_mathjax_header.html0000644000000000000000000000007413124510115021366 xustar0030 atime=1498583182.715257459 30 ctime=1498583182.651258052 cb2bib-1.9.7/src/htm/tex2html_mathjax_header.html0000644000175000001440000000045513124510115022757 0ustar00constansusers00000000000000 cb2bib-1.9.7/src/htm/PaxHeaders.3194/tex2html_local_mathjax_header.html0000644000000000000000000000007413124510115022540 xustar0030 atime=1498583182.719257421 30 ctime=1498583182.651258052 cb2bib-1.9.7/src/htm/tex2html_local_mathjax_header.html0000644000175000001440000000044413124510115024127 0ustar00constansusers00000000000000 cb2bib-1.9.7/src/htm/PaxHeaders.3194/bib_item.html0000644000000000000000000000007413124510115016345 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.651258052 cb2bib-1.9.7/src/htm/bib_item.html0000644000175000001440000000106013124510115017727 0ustar00constansusers00000000000000 action

        GET_REFERENCE_AUTHOR GET_REFERENCE_TITLE. GET_REFERENCE_SOURCE GET_REFERENCE_VOLUMEGET_REFERENCE_PAGES GET_REFERENCE_YEAR 

        GET_REFERENCE_ABSTRACT

        cb2bib-1.9.7/src/htm/PaxHeaders.3194/references.html0000644000000000000000000000007413124510115016714 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.651258052 cb2bib-1.9.7/src/htm/references.html0000644000175000001440000000225313124510115020303 0ustar00constansusers00000000000000 References


        GET_REFERENCES


        cb2bib-1.9.7/src/htm/PaxHeaders.3194/excerpts.html0000644000000000000000000000007413124510115016430 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.651258052 cb2bib-1.9.7/src/htm/excerpts.html0000644000175000001440000000112313124510115020012 0ustar00constansusers00000000000000 GET_EXCERPTS_TITLE

        GET_EXCERPTS


        cb2bib-1.9.7/src/PaxHeaders.3194/icons0000644000000000000000000000007413124510115014153 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.667257904 cb2bib-1.9.7/src/icons/0000755000175000001440000000000013124510115015615 5ustar00constansusers00000000000000cb2bib-1.9.7/src/icons/PaxHeaders.3194/application-x-tex.png0000644000000000000000000000007413124510115020304 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/application-x-tex.png0000644000175000001440000000126613124510115021676 0ustar00constansusers00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<3IDAT8•“½J\Q…¿³ï½™A±´¦0­h5 ö¦±ÓBA[ÀÒg,- bŠyA®‚˜ÁB 1ˆpuŠ)Æ\u8÷§˜?Ç@ ìÍa}k6Ǩ*Ƙ 0ÏÿÕµªþr{Ã|Åß’$ÆÁ0Æ`º æƒÒu]<Ïû Xkyë¼!âàºŽã ÆtZŒ aý&I<ÏCUɲŒOž‡B€´(HÓt@!Ë2¤—@Þ¥p\w$ÑàüüœŸww4Ÿž˜žž`yyq¾`­ess“¶¶¶é7EQ°¶¶Àêê*Íf“Ó³3N}ŸÅÅEîïïñ}Ÿ &''ÿÔj5DŒADˆã˜Ù™ªÕ*¾ï³¾¾Îáá!•Jed#€é¾&&&¸ººÂ÷}‚€Z­ÆÉÉI×è#Àáññ‘ ¸¼¼DD˜ššb||œýý}Êå2+++ìííq}}=Œ ªKáË‹þCµÖj’$º½½­Ah†º»»«Qi«ÕÒv»­qÀ’ª·P.•Èóéí¾R©Ðh4°Ö277Çëë+­V‹R©Äññq¸IÇñÀÝZ«ÏÏÏE‘Æq¬ív[/..´Óéh½^f£ªï=a’$š¦©fY¦EQh–e†¡ÞÜÜh½^ð<¯Ú²<ó<×<ϵ( Íó\£(*ŽŽŽ¾¿wîÓûΟ{—ÿª[à‡öûõ~Rs—£q¥IEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/viewZoomIn.png0000644000000000000000000000007413124510115017044 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.667257904 cb2bib-1.9.7/src/icons/viewZoomIn.png0000644000175000001440000000303113124510115020426 0ustar00constansusers00000000000000‰PNG  IHDRÄ´l; pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚbœ9s&ÃÿÿÿxxxÀ4 Ç?¼8HDDDñׯ_ߟ>}zPXXxù÷ïßo×ÔÔ0|øð  9, ÿþýsXYYÝ¿}û6EFFVEVVŽ““(ÊÈðçÏo§GU>{ölP}1 €X€®aøû÷/ƒ’’’##ã:''Gv99y]ÿÿƒ,üV(--Ãñôé³¢öö®¯_¿d×`€bäääd¨®®ñ––šíåå-#((tá_Eÿþý‡ZÂÀðéÓ'†ß¿¥üùóg.Ð!8  –ÀÀ@>>¾H### 66 æ¿à0&&F 8ÿeàààdøòåKéû÷ï¥þà2 €XÜÜÜ]´Ž¨¨80Hþ  tXÔlã@.É#Zhp80>–211a5 €X€®‘””Tàáá{÷ׯÿ`ÍèàïßÿP ˜ ® 4˜™™«ÁIJdè¿ š˜Á)3Œÿƒƒâ÷ï?`Ÿýþý›d0Èl €@.þõòåËG**êB@# 02@"äÍ`ׂ©  bggeøþýÛ+(EaIJcÇöµæææVÖÖ Ì̬   ù‚™™ êZFx’9äõ?üºsçî~:†¥äT@,?þf®-ÜóÓÒÒUy¤™™âjˆkÿ‚] "Pò<~üÀ2`î;LÀ8ùö 2€b±07axùüÉþ+,̽‚‚ÂíRR¬¬,p32‚‚à?0W²“!ÃÞ½;¾}}w[[[‡¡¿¿Œ _¿~§oP˜ÃR@1ëš82|ûÃÄÀÊô÷ Ó߯ëÄÅDuÿþ'ÏÁÉÁŠLˆw>þôïܹÓÇÏ;ÇóóÇo66V¦“§N–`Ã@.Ñ0#›Ó\†@׉ 02Ø©³1øÛ¨3hK0º2ýû“ùë?³ÐtÆ·oß={þüÙ\`DmÑ××ݶmë¢3gÎrˆŠŠž¯~³¾{úøÍ[&†ÿ§oÏ ˆÉmZ»œáÇF†—¯Þ0]*AEçÒÝ»wG3Èð Çwµ`. FÖà•¬òülGÄ8Í€EÜ{†ü©Gn>þü(h¸/̽=Ý Ÿ>§Ëž¿Œþ÷¦ë0cSAC‚)Xóù¾+à«nlgàdøÁðç?#CCC³±±1pqq1k–8Î7nS„Ç~`¸‹˜8ÏÙ/o¿?‰˜ûPöûçÏ K2µ’<øÅÈÄÄÌÅÃöÇ`úd`»²®®èêÿàààææfoö?‚‚‚ÀŒ6ûÚµk)@Ú¨¥ €˜£läî¼bv“•àãc³WågxøýÿïGÏÞ`~zåÞ³3ëøÿc´šiÔ`¤-€a´ÄÈ6Fœ¶¸¸˜0O~ûöÝX»ˆêèè´cc]=/Óÿ¿Ž[_©•þgfá鬠z‰ŸåÇ áç·€Ù™ h´Èc„æmPÆù Lÿ~ýúýߥâG`Íòäï_æÏ@ö~€Š”+d0Á>IEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/viewForward.png0000644000000000000000000000007413124510115017235 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.667257904 cb2bib-1.9.7/src/icons/viewForward.png0000644000175000001440000000062213124510115020622 0ustar00constansusers00000000000000‰PNG  IHDRóÿabKGD¾¾¾µ­@› pHYs  šœtIMEÕ Í—›—tEXtCommentCreated with The GIMPïd%nöIDAT8˵“Ëqƒ@D{mGe]6o €ªàHÒ…‚äÈ©{ã° Òë ©¢8À{Û=À;§ÏÙOç“?{çãуœ³K‚(t]ç/ DÂDH‚$µ¿$hÚ6L ¢¡ªªIØÛC]×n‹d¾†a7‚œ³“KdƒDP„É@*i“p¹ü†R¡ï³sÓW"$Â(ˆ+, &4ľÀ6ñ–ÎÆëØ¢J"͇•MÛ„+XÍV!Ùq¾ãþµÄ”’“œ¥S’€Ï]X‚ÙZg ?¤ôãÛþ÷à²Ä{C̦è¼;1F?|ü­ìá ¸¶J IEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/connect_established.png0000644000000000000000000000007413124510115020736 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/connect_established.png0000644000175000001440000000425213124510115022326 0ustar00constansusers00000000000000‰PNG  IHDR szzô pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF IDATxÚbøÿÿ?Ã@b€bhµ+++¯¤¤¤©®®n œœ\     6µ Õ,–••5ñññ™PVVö¸©©éKKËÿÆÆÆÿÿHHHd•1¢; €(¶˜——W"::zöâÅ‹ÿ¬\¹òmmí???¿G¶¶¶gŸUWWÿïëëûŸ˜˜ø_LL¬ÝD‘å:::Ó¦M{pàÀÿ“&Múïâârž““³(eÄê@l ""R´üÑäÉ“ÿ»¹¹½abb2Gv@‘e1_DDÄÔ]»vý;zôèÿüüüW@)KP ÀÔ-ÓÀtàÖÖÖö ÿùøøj‘@äĵ-0~ÏŸ9sæÿž={þr“™™9(%²¤˜èb\VVVB&&&|@‡ˆÓŪªªÿ@‡öÒ*Ì„ž‚Ù\]]ÛA¹èjwäDÃÎÎ.5oãÆÿNŸ>ýÕªUÿ¥|˜ ê8ñôôôܹsçnݹsçÝ}ûö}ؽ{÷G Ú'«W¯þ“››ûz90‡‚@(Ÿ¶lÙ²ÿ]]]ÿ­­­÷…ÀÙGUUÕ³µµõ&(®þïééù«¡¡±(e’700PÊO†Ê‹>üÿøñãÿׯ_ÿñâÅÿ'Ožü¿{÷îÿãÇÿŸ:uê¥0ƒ@È * èrpÖÑÒÒZ Æaaa»ààà… ,øô985ù”ŸŸ¿¨EHsUTTTÞ¼yóï_¿þ#ƒß¿ÿÿþýûÿOŸ>sïÞ½ÿ ÿYò¿²²rÌw€³³ó²šššÿ‘‘‘ÿlll.³Ð9`úLåÿAù¨ñ 0M*uùÀÎÎÎÌǾ~ý ·ôß¿`Œ þüùóÿÛ·oÿ_¾|ù…ÿµµµÿ-™r@Á,½âqÿè€ÿ)))ÿSSSA 쫹¹ù `zè*±ePʪI_³fÍ`ÿ¿xñ"8ˆAÁ þ?~`8Ž9òßÂÂ⿱±ñ}}ýõ@³„@ ä$ÀL„–À`-¦ÔnnîFFF ¸ÐRf F£°°°D`J^8eÊ”¿………ÿ322þWVV‚ãvëÖ­ÿÏž= ŽsPE Ì!oÞ¼ùŸ““¶Xü×ÔÔœ4—ä€"˜í¤¤¤$êê꺮_¿þýÖ­[ÿAÙïðáÃàĸvíÚÿ (jhhø_TTv ¨À–àPùòåËÿ§OŸ‚í`”þFóÿØØØÀÂ) ”±@ œ ±²ÔÉ“'Ÿ¿{÷îÿß¿ÿ¿ÿþÿƒþß¿lÁ7ÀQ*Œ6oÞüæÌ™ÿAéX0ýonnþÊ5Ó§OÿŸ——÷?&&æ||<(ZïCÖ–«åÞÞÞn[¶l9J½ ‹a¬ Ǽ}ûŒ_½zõÿÙ³g`]»ví?¨|9”[@!J¼Û¶m;&33ì8`4,%9˜Ãr`a‘ôå/P6Â~þü Ç löùóg°£ž?cÇŽýŸ={6Ø2PÑ A8˜f^ ´PPb†9 €P,¦îP 0’0¶T, P|ƒr¹sçþ¯X±œ@¹éĉÿA…0ñþSPPè‚ù怂[l¨±)L±€>þ tŒ)HBMM- X™œž7o¸ñ¹~ýzpO¤)>O¤)>O¤)>O¤)>O¤+>O¤-?P¤,>O¦¾ÁÅêøøøÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿðððÿÂÂÂÏKr”z]‹µÿ_¸ÿ^‹¶ÿ[‡®ÿ]ˆ¯ÿc‹±ÿi޵ÿn’¸ÿu›Âÿx¡Êÿl—¾ÿc޳ÿ¼ÆÎÿøøøÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿñññÿÃÃÃÏS}¥zhžÍÿm£Ôÿn£Ôÿp¥Õÿt§×ÿq§Öÿs¨×ÿt©×ÿuªØÿw«Øÿu¨Õÿv¨Ôÿ¼ÇÑÿøøøÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿòòòÿÆÆÆÏS}¥zgœÊÿm£Óÿn£Ôÿo¥Õÿq¥Õÿq§Öÿs¨×ÿt©×ÿu©×ÿu§Ôÿw«Øÿy­Úÿ½ÉÒÿùùùÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿòòòÿÇÇÇÏS}¥zižÍÿjžÍÿn£Ôÿo¥Õÿq¥Õÿq§Öÿs§×ÿt©×ÿuªØÿw«Ùÿw¬Ùÿy­Úÿ¾ÊÓÿùùùÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿóóóÿÊÊÊÏS}¥zj¢Òÿg™Çÿn£Ôÿo¥Õÿq¥Õÿq§Öÿs§×ÿt©×ÿu©Øÿw«Ùÿw¬Ùÿy­Úÿ¿ÊÔÿùùùÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿõõõÿËËËÏS}¥zk¢Óÿe—Åÿn£Ôÿo¥Õÿq¥Õÿq§Öÿs§×ÿt©×ÿu©Øÿw«Ùÿu¨Õÿy­Úÿ¿ÊÔÿùùùÿöööÿîîîÿ ¤¨ÿw}ƒÿx~„ÿœ ¤ÿâãäÿøøøÿøøøÿøøøÿ“—œÿrx~ÿrx~ÿrx~ÿrx~ÿrx~ÿrx~ÿ}ƒˆÿòóóÿª­±ÿrx~ÿrx~ÿrx~ÿrx~ÿrx~ÿtyÿ}ƒˆÿ˜¡ÿÈËÍÿôõõÿöööÿöööÿõõõÿÍÍÍÏS}¥zk¡Óÿf˜Æÿm£Ôÿo¥Õÿq¥Õÿq§Öÿs§×ÿs¨×ÿu©Øÿw«Ùÿs¥Ñÿy­Úÿ¿ËÔÿúúúÿøøøÿ¤¨¬ÿrx~ÿ¨«¯ÿóóóÿÜÞßÿ’—ÿÑÓÔÿùùùÿùùùÿöööÿ¨«¯ÿrx~ÿrx~ÿrx~ÿrx~ÿrx~ÿrx~ÿÈÊÌÿöööÿçèèÿ‹•ÿrx~ÿ³¶¹ÿóôôÿòòòÿÕÖØÿ”˜ÿrx~ÿ›Ÿ£ÿõõõÿ÷÷÷ÿöööÿÎÎÎÏS}¥zk¡ÓÿfšÈÿm£Ôÿo¥Õÿo¥Õÿq§Öÿs§×ÿs¨×ÿu©ØÿuªØÿq£Ïÿx¬ÚÿÀËÕÿúúúÿùùùÿ{€†ÿrx~ÿëëìÿùùùÿùùùÿëëìÿœ ¥ÿóóóÿùùùÿùùùÿùùùÿ¼¾Áÿ´·ºÿùùùÿùùùÿññòÿ¸»¾ÿŽ“˜ÿøøøÿøøøÿÏÑÒÿrx~ÿ•šžÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿõööÿž¢¦ÿrx~ÿ¹¼¿ÿ÷÷÷ÿöööÿÎÎÎÏS}¥zk¡Óÿf™Çÿm£Ôÿo¥Õÿo¥Õÿq§Öÿq§Öÿs¨×ÿt©ØÿuªØÿp¡Ìÿw¬ÙÿÁÌÖÿúúúÿùùùÿtz€ÿrx~ÿ÷÷÷ÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿËÍÏÿ©­°ÿøøøÿúúúÿúúúÿúúúÿúúúÿúúúÿ÷÷÷ÿy…ÿu{€ÿññòÿøøøÿøøøÿøøøÿääåÿrx~ÿƒ‰ŽÿøøøÿøøøÿÐÐÐÏS}¥zl¡ÔÿgœÊÿm£Ôÿn£Ôÿo¥Õÿq¦Öÿq§Öÿs¨×ÿt©×ÿuªØÿp ÌÿwªØÿÁÌÖÿúúúÿùùùÿ†‹ÿrx~ÿçèèÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿÒÓÕÿ£¦ªÿ÷÷øÿúúúÿúúúÿúúúÿúúúÿúúúÿŸ£§ÿrx~ÿÌÎÐÿøøøÿøøøÿøøøÿôôõÿrx~ÿtz€ÿøøøÿøøøÿÒÒÒÏS}¥zn¢ÕÿgœÊÿm£Óÿn£Ôÿo¥Õÿq¥Õÿq§Öÿs§×ÿt©×ÿu©Øÿr¤Ðÿt§ÓÿÁÌÖÿúúúÿúúúÿ®²µÿrx~ÿÁÃÆÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿÐÒÔÿŸ£§ÿ÷÷÷ÿúúúÿúúúÿúúúÿúúúÿÈËÍÿrx~ÿ¥©­ÿøøøÿøøøÿøøøÿÛÜÝÿrx~ÿ”™ÿøøøÿùùùÿÓÓÓÏS}¥zr¤×ÿhÍÿk¡Ñÿn£Ôÿo¥Õÿq¥Õÿq§Öÿs§×ÿt©×ÿu©Øÿt¦Ôÿs¤ÑÿÂÍ×ÿüüüÿûûûÿêëëÿv|ÿˆ’ÿùùùÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿÃÆÈÿŸ£§ÿùùúÿûûûÿûûûÿûûûÿðññÿsyÿ~ƒ‰ÿúúúÿóóôÿÓÕ×ÿ…Šÿ~„‰ÿáâãÿùùùÿúúúÿÕÕÕÏS}¥zx¨Ùÿl¢ÒÿiÌÿm£Ôÿo¥Õÿp¥Õÿq§Öÿs§×ÿs¨×ÿu©Øÿt¨Õÿr¤ÐÿÂÍ×ÿüüüÿûûûÿûûûÿ¾ÀÃÿrx~ÿ¸»¾ÿûûûÿûûûÿ…Šÿ¥©­ÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿž¢¦ÿ®²µÿûûûÿûûûÿûûûÿûûûÿ’–›ÿrx~ÿrx~ÿrx~ÿrx~ÿ~ƒ‰ÿÖØÙÿùùùÿùùùÿúúúÿ×××ÏQ{ zu§×ÿs¦ÖÿhœÌÿm£Ôÿo¥Õÿo¥Õÿq§Öÿq§Öÿs¨×ÿt©×ÿuªØÿr£ÏÿÂÎ×ÿüüüÿûûûÿüüüÿüüüÿ¶¹¼ÿrx~ÿ°´·ÿïððÿÚÛÝÿw}ƒÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿÞàáÿrx~ÿÖ×Ùÿüüüÿüüüÿüüüÿ»¾Áÿrx~ÿ¶¹¼ÿùùúÿêêëÿ·º½ÿtz€ÿ¡¥ÿôôõÿûûûÿ×××ÏMwœzo£ÔÿzªÙÿhÌÿm£Ôÿn£Ôÿo¥Õÿq¥Õÿq§Öÿs§×ÿt©×ÿuªØÿr¤ÐÿÃÏÙÿüüüÿûûûÿüüüÿüüüÿüüüÿÙÚÜÿ–›Ÿÿv|‚ÿ{†ÿ¿ÂÄÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿùùùÿrx~ÿ“—œÿüüüÿüüüÿüüüÿåæçÿrx~ÿ’—ÿüüüÿüüüÿüüüÿ¿ÂÄÿrx~ÿ«®²ÿüüüÿØØØÏMwšzi Òÿv§Õÿj Ñÿm£Óÿn£Ôÿo¥Õÿq¥Õÿq§Öÿs§×ÿt©×ÿu©Øÿq¤ÏÿÄÏÙÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿøøùÿrx~ÿv|‚ÿýýýÿýýýÿýýýÿýýýÿ„‰Žÿrx~ÿïðñÿýýýÿýýýÿóôôÿrx~ÿ{†ÿüüüÿØØØÏIr–ziŸÑÿk¡Òÿk¡Óÿm£Óÿm£Ôÿo¥Õÿo¥Õÿq§Öÿs§×ÿs¨×ÿu©Øÿq£ÏÿÄÏÙÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿ”™ÿ±´·ÿòóóÿøøùÿÎÐÒÿrx~ÿ~ƒ‰ÿýýýÿýýýÿýýýÿýýýÿ«®²ÿrx~ÿÇÉÌÿýýýÿýýýÿòóóÿrx~ÿ~„‰ÿüüüÿÛÛÛÏIr–ziŸÑÿi Òÿk¡Óÿk¢Óÿm£Ôÿn£Ôÿo¥Õÿq§Öÿq§Öÿs¨×ÿt©×ÿp¤ÑÿÄÏÙÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿÜÝßÿu{ÿrx~ÿrx~ÿrx~ÿrx~ÿ¶¹¼ÿýýýÿýýýÿýýýÿ÷÷øÿ¥©¬ÿrx~ÿ› ¤ÿúúúÿîîïÿ¢¦ªÿv|ÿÓÕÖÿýýýÿÛÛÛÏMušzfÏÿi Òÿk¡Òÿk¢Óÿm£Óÿn£Ôÿo¥Õÿq¥Õÿq§Öÿs§×ÿt©×ÿq¤ÒÿÃÏÙÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿàáãÿ•šžÿu{ÿ„‰ÿ·º½ÿûûüÿýýýÿýýýÿóóôÿrx~ÿrx~ÿrx~ÿrx~ÿrx~ÿw}‚ÿ–šŸÿáâãÿúúúÿùùùÿÚÚÚÏMwœzfœÎÿiŸÑÿk¡Òÿk¡Óÿm£Óÿm£Ôÿo¥Õÿq¥Õÿq§Öÿs§×ÿs¨×ÿt¨×ÿÂÌÕÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿúúúÿùùùÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿóóóÿØØØÏMwœzf›ÌÿiŸÑÿi Òÿk¡Óÿk¢Óÿm£Ôÿn£ÔÿoªÚÿq¦Õÿq§Öÿs§×ÿt©×ÿÃÏÙÿýýýÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿüüüÿúúúÿùùùÿ÷÷÷ÿõõõÿõõõÿõõõÿôôôÿõõõÿïïïÿ×××ÏMuœzd™ËÿhŸÑÿi Òÿk¡Òÿk¢Óÿm£Óÿn£Ôÿo¨Ùÿq§×ÿq§Öÿs§×ÿs¨×ÿÃÏÙÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿüüüÿúúúÿøøøÿöööÿôôôÿóóóÿòòòÿñññÿñññÿñññÿìììÿÖÖÖÏMwœzd™ÊÿhŸÑÿiŸÑÿk¡Òÿk¡Óÿm£Óÿm£Ôÿo¨Ùÿp«Üÿq§Öÿq§Öÿs¨×ÿÃÏÙÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿüüüÿúúúÿ÷÷÷ÿõõõÿóóóÿñññÿðððÿïïïÿîîîÿîîîÿïïïÿìììÿÕÕÕÍO{£zb—ÇÿgžÑÿiŸÑÿi Òÿk¡Óÿk¢Óÿm£Ôÿn£Ôÿp°áÿq¥Õÿq§Öÿs§×ÿÃÏÙÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿúúúÿøøøÿöööÿôôôÿñññÿïïïÿîîîÿíííÿìììÿëëëÿëëëÿäääÿËËË»O{£za—ÇÿgžÑÿhŸÑÿi Òÿk¡Òÿk¢Óÿm£Óÿn£Ôÿo°áÿq¥Õÿq§Öÿs§×ÿÃÏÙÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿüüüÿùùùÿöööÿâââÿÜÜÜÿÝÝÝÿÝÝÝÿÞÞÞÿßßßÿßßßÿàààÿÞÞÞÿÔÔÔôÀÀÀ=Oy z`–ÆÿgÐÿhŸÑÿiŸÑÿk¡Òÿk¡Óÿm£Óÿm£Ôÿo¯áÿo¥Õÿq¥Õÿq§ÖÿÃÎÙÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿúúúÿøøøÿöööÿßßßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿøøøÿëëëÿÜÜÜôÄÄÄAOy z_”ÄÿgÐÿgžÑÿiŸÑÿi Òÿk¡Óÿk¢Óÿm£Óÿn§Øÿo¥Õÿq¥Õÿq§ÖÿÃÎÙÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿúúúÿøøøÿôôôÿäääÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿøøøÿëëëÿÝÝÝôÈÈÈAMy za–ÇÿeÐÿgÐÿhŸÑÿiŸÑÿk¡Òÿk¡Óÿm£Óÿm£Ôÿo¥Õÿo¥Õÿq¦ÕÿÃÎÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿüüüÿúúúÿ÷÷÷ÿôôôÿçççÿÿÿÿÿÿÿÿÿþþþÿøøøÿëëëÿÞÞÞôÈÈÈAMy z_“ÄÿeÏÿgÐÿgžÑÿiŸÑÿi Òÿk¡Óÿk¢Óÿm£Óÿn£Ôÿo¥Õÿq¥ÕÿÃÎÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿüüüÿúúúÿ÷÷÷ÿôôôÿéééÿÿÿÿÿþþþÿøøøÿëëëÿàààôÏÏÏAMy z^“ÃÿeÏÿeÐÿgžÑÿhŸÑÿiŸÑÿk¡Òÿk¡Óÿm£Óÿm£Ôÿo¥Õÿo¥ÕÿÃÎØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿüüüÿúúúÿøøøÿõõõÿìììÿþþþÿøøøÿëëëÿרØú±±±LMy z]’Âÿe›ÏÿeÏÿgÐÿgžÑÿiŸÑÿi Òÿk¡Óÿk¢Óÿm£Óÿn£Ôÿo¥ÕÿÂÎØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿüüüÿúúúÿøøøÿöööÿîîîÿøøøÿëëëÿØÚÛÿ•¶ÑèMy z]‘Ãÿc›ÏÿeÏÿeÐÿgžÑÿhŸÑÿiŸÑÿk¡Òÿk¡Óÿm£Óÿm£Ôÿo¤ÕÿÂÎØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿüüüÿúúúÿøøøÿöööÿñññÿëëëÿÙÛÝÿ’´Ñÿ„³ÙèMw z]‘Ãÿc›Ïÿe›ÏÿeÏÿgÐÿgžÑÿiŸÑÿi Òÿk¡Óÿk¢Óÿm£Óÿn£ÔÿÂÎØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿþþþÿüüüÿúúúÿøøøÿðððÿÚÜÝÿ”¸Öÿ¯Õÿƒ³ÙèKw z\Âÿc›Îÿc›ÏÿeÏÿeÐÿgÑÿhŸÑÿiŸÑÿk¡Òÿk¡Óÿl£Óÿm£ÔÿÁÌ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿþþþÿüüüÿøøøÿãåæÿ”¹Øÿ†¸àÿ¯Õÿ‚³ÙèKw z\‘Ãÿb™Îÿc›Ïÿe›ÏÿeÏÿgÐÿgžÑÿiŸÑÿi Òÿk¡Òÿk¢Óÿm£Óÿ‘¯ÊÿãããÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿæææÿèèèÿÜßáÿ–½Üÿ…¶ßÿƒ´Üÿ€¯Õÿ°ØèKw z\‘Ãÿa›Ðÿc›Îÿc›ÏÿeÏÿeÐÿgÐÿhŸÑÿiŸÑÿi Òÿk¡Óÿk¢Óÿm£Óÿu¦Õÿ|«Õÿ}«Õÿ~­×ÿ­×ÿ­×ÿ¯×ÿ¯Øÿƒ°Øÿƒ±Ùÿƒ²Ùÿ…²Úÿ…³Úÿ†´Ûÿ‡´Ûÿˆ´Ûÿˆ¶Üÿ‰¶ÜÿŠ·Üÿ‹¸Üÿ‹¸ÞÿŒ¹Þÿ¹Þÿ„¶ßÿƒ¶ßÿ…·àÿ‚²Ûÿ±Øÿ°×èKu z\ÃÿažÒÿb™Îÿc›Îÿe›ÏÿeÏÿfÐÿgžÑÿhŸÑÿi Òÿk¡Òÿk¡Óÿm£Óÿm£Ôÿn£Ôÿo¥Õÿq¥Õÿq§Öÿr§×ÿs¨×ÿt©×ÿu©Øÿv«Ùÿw«Ùÿw¬Ùÿy­Úÿy­Úÿ{¯Ûÿ{¯Ûÿ}¯Ûÿ}±Üÿ}±Ýÿ±Ýÿ³Ýÿ³Þÿ´ßÿƒµßÿƒµßÿƒ¶ßÿ²ÚÿµÞÿ~®ÕèIu z\‘Åÿa Õÿa™Íÿc›Îÿc›Ïÿe›ÏÿeÐÿgÐÿgžÑÿiŸÑÿi Òÿk¡Òÿk¢Óÿm£Óÿm£Ôÿo¥Õÿo¥Õÿq¥Õÿq§Öÿs§×ÿs¨×ÿt©×ÿu©Øÿw«Ùÿw«Ùÿw¬Ùÿy­Úÿy­Ûÿ{¯Ûÿ{¯Ûÿ}¯Ûÿ}±Üÿ}±Ýÿ±Ýÿ³Ýÿ³Ýÿ³ßÿƒµßÿƒµßÿ°×ÿ„ºãÿz¨ÍèIu z\’Çÿ`¢Øÿa™Íÿb™Îÿc›Îÿd›ÏÿeÏÿeÐÿgÑÿhŸÑÿiŸÑÿj¡Òÿk¡Óÿk¢Óÿm£Óÿn£Ôÿo¥Õÿo¥Õÿq¦Õÿq§Öÿs§×ÿs¨×ÿu©×ÿuªØÿw«Ùÿw«Ùÿw¬Ùÿy­Úÿz®Ûÿ{¯Ûÿ{¯Ûÿ}¯Ûÿ}±Üÿ}±Ýÿ±Ýÿ³Ýÿ€³Ýÿ³Þÿ´ßÿ}­Öÿƒ¾çÿx§ÎèIu z\“Çÿ_ ÕÿaœÑÿa™Íÿb™Îÿc›Ïÿe›ÏÿeÏÿgÐÿgžÑÿhŸÑÿi Òÿk¡Òÿk¡Óÿl£Óÿm£Ôÿn£Ôÿo¥Õÿp¥Õÿq§Öÿq§Öÿs§×ÿs©×ÿu©ØÿuªØÿw«Ùÿw«Ùÿw¬Ùÿy­Úÿz®Ûÿ{¯Ûÿ{¯Ûÿ}¯Ûÿ}±Üÿ}±Ýÿ±Ýÿ³Ýÿ€³Ýÿ³Þÿ|¬Ôÿƒ¾èÿx§ÎèIužz[”Çÿ]™Ïÿ`ŸÖÿa™Íÿa™Íÿc›Îÿc›Ïÿe›ÏÿeÐÿgÐÿgžÑÿiŸÑÿi Òÿk¡Òÿk¡Óÿm£Óÿm£Ôÿn£Ôÿo¥Õÿq¥Õÿq§Öÿq§Öÿs§×ÿt©×ÿu©ØÿuªØÿw«Ùÿw«Ùÿw¬Ùÿy­Úÿy­Ûÿ{¯Ûÿ{¯Ûÿ}¯Ûÿ}±Üÿ}±Ýÿ±Ýÿ³Ýÿ€³Ýÿz«Óÿ¾èÿw§ÎèIužz\•Êÿ[’Æÿ_ Öÿ_–Ìÿa™Íÿb™Îÿc›Îÿd›ÏÿeÏÿeÐÿgÐÿhŸÑÿiŸÑÿi Òÿk¡Óÿk¢Óÿm£Óÿm£Ôÿo¤Õÿo¥Õÿq¥Õÿq§Öÿq§Öÿs§×ÿt©×ÿu©ØÿuªØÿw«Ùÿw«Ùÿw¬Ùÿy­Úÿy­Ûÿ{¯Ûÿ{¯Ûÿ}¯Ûÿ}±Üÿ}±Ýÿ~±Ýÿ²Üÿ{¬Õÿ»åÿ{¬ÕèIužz]•ËÿZ‘Äÿ_™ÎÿY‹¾ÿXŠºÿY‹»ÿYŒ»ÿY‹¹ÿP|¥ÿQ}¦ÿR~§ÿS€©ÿU©ÿUƒ«ÿWƒ­ÿY…®ÿY‡¯ÿ[‰±ÿ\‰³ÿ]‹³ÿ_µÿa·ÿa¸ÿb¹ÿc‘ºÿd‘ºÿe“»ÿf“»ÿg”¼ÿg”¼ÿg”»ÿg•»ÿi–¼ÿožÇÿoŸÇÿq Çÿs¡Êÿr¢Éÿz­Øÿ|®Ùÿ}±Ûÿ{«ÔèGužz[”ËÿZÅÿ]–ËÿVˆ·ÿSƒ²ÿS„²ÿU„²ÿHr—ÿ7K^ÿ9NcÿfîÜ™ÙÙÙñÚëµw׋‹i4}©!cQZ(H„cS\Úà¬D–Z‰Ph5¥mB (QUH¢–¶ŠªŠþA%‰¢ãØnñÚ˜ï8»cïî¼væÞ;{Oÿ˜¹wçí]“TùiŽî™sîè~¿¿×9çwGH)é!„èü9Ù¬èB¨@ÐåÿÚeÅj@EJé¶Nh­_šš7 ` ?R–€´¢Ôj ­ãFÄ€«-Ëú7Û© Dc!±úáš¿\õ:ß»ü°Ã3{ý¶—èšF(ºÈe` HØNÛ¶¢ º•€PD/à=ÆÀW@¢9“hbk»±“@Ûs[Á÷#ÐóÚ¨«ß¶M½^GÕ4ú䞃}ƒT à­à-Ëjok«Ì±ÊåžýÖûÚÆ„ ŸÏ#=¯1ßÚX§–éо)%Åb±9ÝCû-àÇ ~×Úï$ÛJÂu]<Ïëºwôs¡¼ëºØ¶eY‹E(‹¡U‹5"Ë¿.,,0¶iB2™ ›7oF( })¤…@‚l6K¹\&™Lbš&¦i¶)i}š?ÔuP(D"‘`C*Å«¯¼Â™™êõ:®ë×Î~6›ettUU)•J¤R)TU š¦i(J»¨ªÊÁƒà«Ê¼¾fVVVXYYÁqJ¥¥R MÓÀ•J!‘H„D"Œe2r¹š¦áy‰D"\*—±m)%¡P¨í±333ŒŒŒ`š&©T Mëq ßCCC$ DóÁo;F(¢Z­2::ʮݻÆó<¤ç‡Ažyúir¹ªª’L&9üðÃT‡z½Ž¢* Åb‘×^{t:¢(H)¹zdž††‚”#›Êì'ƒ˜& ?J)Ñ4 )%Û·oç“wÝEjdUU é:aÃOÓ4 Ã@k¦E„Ãaâñ8ª¢€$ n¿ýv®½öZ<ÏkXHÊ 6‚¤0À^xaÏ“_¼õ—Û9¬‚B4ò´ª‹Å¸åã_k¹×¿êºN8F×uEiªªöÌB;wî$‰îÖ™B/wß}÷—WV–îûû/ÿ°n_äž'þ®¼¤”èºÎððpû|«¦iD"\×Em÷•Ò©$€ÉÉIæç瑾Ö(Šišc'½|o,>4öânSo¸ó©ÜðkGiï÷¥çaF£Dc±ž [5ë[ ÍZݲ£MNNbF@`­kfÛöò3_ú®±Ñøí‹âÓ“©ñbþŸ¾²øn!B«<)Ù½{7çÞy§ t/+øéÒó¼.­ö”L&¹ãŽ;‚…rÍB¿óùK_[®ìEÞÎ~ñ_~ãÒ”¡^ÜôjÝA¬ª˜Ñ(•æêÚÏ ¾Âá0ªª¶i¾S*• ¦iiv=+±xõº¬øìŸ}®tîëóûnºôþóß¼füLY^: Ò[u%)Q5~ä#d2ò…B—ëøTUÅ0Œ6ê5WU•x<¤ÒõZ  \Z±¼ó¿´ôô9å·~5¿xô\2bmñ±Fj£ÄŠ(ŠÂôUWa„ÃX–µê"-ZSUµËÚP]׃¾çyë#Ð<¢¹…e÷Ügÿ|ùÙ½¯ßvÃ0ðHcuéoÚÖß]LÓ$i²Õ ­Û†`¾ZI÷Ûé²RÊ:æfR?÷ð_e_ºqû®ûp‚ß=T¡=Xþ† t]ïr—^;S«Q¯×{jµ0EQˆD"변ߑRÖ€,paæ|-ýnmw_÷Û6ÅÙÿ¹ jô‡ ózÃú€oý.¥ ´íZXBQR©Ôú-Ð"5çÎÅĦq¦|'‡o'$ îÿü;háïà•ÞhKŸý@Y–…mÛÔjµ¶=~'èÎñõ,b½È&‰•mÓÓDR¿ÎLáß›'wQáȧÑås`¿ÝxXŸ Ñ8Ä,//“Íf©T*=÷“õ¦ÑN‘@}ãè(Û¦§ÑR72[ø þò!Á©»<ñì{(ÎãPM÷Üø}Ïó¨V«Ø¶XK P $ Ã`lÓ&¦·mÃþ‹Õ_â¯1ù—,žý—%Dþ÷‘µ¥¾æw]—jµJµZÅuÝ5¹Ï•Hßí´¢(‘cccLoÛFA»›ižýí<÷·¾ýŸ\º¯^êïg¡J¥B¥RÁuÛŠiAK)»ÚP3eóø8SSS\·"„ÉW¾0Á—žÈñÚ,0/Ò«A ‰oz½ï^J‰çyÛú ø ’¢‹FÙ²u+SSÛ˜ç.6ŽnäOMsøð"§KUäüA¤ôˆD"d³Yæææº,à[ pÿ\í·AV\¼mYUã±LLNóžó ~q{’‡öŒsßE.Ôfñ.`llŒ|>ßÕjµ@'ðÖ¢@góK-ë&åšù^Ó4†††˜œœdó–«8Wº…× îºy#÷Ü_eYý>îü“lÙ²…L&€/ D£Ñ¼O µ’á®Õj]­C=Í0øÈßADÓ4†‡‡™ššÂu]ÞŸÿ$ŸÚõïäÊI>ó{%þõ›ÏQ?c¢ “É‹ÅXYY¡Z­¢ëzp>ðÿüóœ={–]»v±aÃÒé4žçQ,Éår8޼‰°yl !ÇŽ;~èСg€Y:Jë@ûÑx;³¸©R©|+X€ZO[-„*• /^äÔ©S¼øO³÷¶àΑš¸™oüóÿr~±A Z­ …RbYCCC<õÔS fgg)‹Äb1R© Œo&’Ïç9qâÄ™ýû÷? æi¼¡Y?Nà…Bb±H©TÂq™››£˜[äêäYæE„ñQ¢S{…ÃØ¶am§\.3??Ïââ"G62˜eYär9r¹§OŸ¾°gÏž£MðiÀéõŽì²AÜÆ¶Ibxx˜d2 4Üöm˜››ciiùÒ9ñ?s\Sz{î?4öF~Æ©T*d³Yêõzè¶màß}÷Ý¥<œ~Òüº ôÿ2>>Ža˜¦ÉҒɇô ^ã¿øÍÏ05½£-ûø ›ã8ŒŒŒàóù<étºøàƒ>æ8Î[44o÷ÿS!à“0M]׉D"Äãq²‰û®ùÞ>uŒ‰©_h[¼\×ÅqÇa||œ|>O.—#N9ò§KKKÿ ¼XRʇäÁúlºúm‰C¡ÉdÃ0ˆÇã”Ëe¶^w3µZ-¨8ø'5?°ãñ8¹\ŽÙÙÙ¥ƒ>Ö? ”.þò®@TU%¢ë:–euíD=Ï£Ö\u·nÝJ>Ÿgff&½oß¾GÇ9Ìåµ€ÿ™€†K…Ãa4M£^¯#„h[aý2¼išœy‰Ëç¯ýÉöú凼ÿ²};lê€_»í̼÷Λ>û·ï;ªJë%—.·ñ¬ƒ(Y\šdqeš¨`nR’YÇì\“¥•itÒ\šb§—1H,Ê(°³Ù¦(ýnJQ„aÈ÷Ý©÷ÿøÜÊñg*õß©ÿØDD­ž|ø‹ý¹;?uûí‡ÈrKw1ÊJê ëq€–'ÉJOé…­ýŒ…å)ʲäü¹ vÛCDk‚8`éèÍVŒÒŠ 2t{ ÏžÝäÆþõ«ûˆ´°vÛaNÝ}ìäÄt÷ ‘¨ß £yðròŽGõÄÍËŸ¾ï¾U6¶zŒÒD1L î=6ƒˆP”ç<­b Q´SÇ —ð+¿|//œÛ t%·ÝÔ"/s %&4ìîö¹¾Ñ£^÷DQ€ó1£~ÂÄÌ…”4+†›n]^û¯ŠÈÇÞLoIàö{þý}­fý úÐ-¤YÉ(-±úƒ”S·.ј¨Y‡8Öy&›×®;ŽjàŒ¬çù«=¶nô¨ÍLÒí¥|ûÛçÑÖzš5Íþ~Š--ÑØÜq÷=G9ÚŠ¨V&¸rq S‰™[™ý¨w¿þ["òè«Ó›øô§?@ôŸÿìÏœÒiVU,ya$ãܼ6Gi=¶ôDq@£®Èò’ÏÿÁwøîSÔk!ˇ§ñvÙi8¹6ÃæV›¨R¡p(*¡ab"¦Ó˱“­:•HsmgÈÈ*Ž.×XZž¥LS£ØßÞÿ­™ù_ÿ pöµXD""g_èý‡;N¯´<àþ0§7ÌIsËê±i¢8 fZÖ:Ö·‡l´SÖ÷ªµˆµµy>òà *•€Ù…:•jÈDÅà²SSUœÒÔ1¹–µ"Cá=ÝAŽàÐb¯“òç/ó½\£¹ÿâþcËò6‚ðWcÄüÚñ㳌Ò6·8`ñP‹ßœf=Ä lu2ºI "$¹çS¿x7“5›”ÎóSï[ãž;pn}‹àPŒ SÂÂ\V+æÚî 4Ã$g”ätzy™qþÅMöv†Ã!ç/î³ß/8qÛÊßšZþW~K""Ó‹ÓÿåÄÍ‹á0)°Þc§;ÈPæ“ÿàvÂ@ÓäcM8Cs"¦^ 0¡æø±Nݲˆ2 ëarºÁÒÊ4ßzz“'^Ø¥ð0Ùª’”ž¯wqJa”1šd”ŽJ”°Þã½B4¤*$®ÌͶþPäÑWp¿AH«eþÑôlÒ:†Ã’F³Âd«ÊÞw”4÷$…ED(j5Àô¤?*p>xÿ1ÒÜ"Jqá¥zƒ”Â:*Õ˜©F€užý^ÊÅÍJ+ÄNƇP¡1ÓÂùµF•ÅÃ3´¯ï¡´GM´¨7FË+«ÓÀS?BàÈÍÙ½ós3Õ,+Qf”•T+!Êh’ÂS:^°Îa´ÂZGá Ÿˆ'§xA)Ošgè@ó•6˜ ØØÏ0 J7Þm- ”Å—[ N,EZ²·ÛÞC«Sĵ*•ãE62'4§›¿!"ŸôÞûWB!"27ÛúÍçÏo³Û1ZœÀ+xöâ.Öz<‚—q÷µÖÓÏJ²ÂB5 ˜Ÿª13†ý~ÆúVŸj=¢3È(¼'Ž¢ØF*JDkœÒ N *P\[ßÃzO½5ˆÇyKÆ(å™?4E”}‘7hàISû~¥?øáu¼À0)yúùŒÑlí ;J'PXÑŠZ%À‹ Z!ކIB0b§7b[r ð#X^kœ2(cÐÁx)£­PZVè(@b11(͹Þ37=ÛŸyéé®v^ZµzˆhÍæÎ€'ŸÛâúvŸé© {Ý9p•‚(!Œ A iÕCZõ%ÂS/ÜàòF—(2¼÷ćæèÐ F#[Q­ñZðZaEðFP¡> a0 µ •C™€Ók3D±A”Æ‹PoÄx£>."ò |äøÑÔâ¹¶‰«&Ôø²%<y>°FT E8{¥ÃÂd•ÒyD ÝQŽE”;È1Æ6ÄhÁB¿pDqÎcÄQxÁz œ”±ˆScg¨=YVP‰c­øá…â Tཱ8ï›ð諘˜ˆv•V…%+ÎB¥ 2>„;„/ýÙsôF97-5dk‡§CC£#¢)€'®öø‹÷øþÕ.›ýœÜA¿p¤  ¬(¼V¯T èà ¡I’S«Xï_‚1ÄQHê…û¯‹@¯“<9·Ø@)! 4Ý~Š©FÔ›1A`¸p}ŸÉFÄ¿ýÒ÷ù矸ƒ¸ŠË;’¢D9O'±¬÷2¡[lJªQ2aÔ8$Î#â‡÷‚x…u‚ÒqãTJKO³Ãe"ò$£¿±ÍôâF< 6à̸‘yïý•ëígC£pîµvÛ3•x<›{ w˜ãògþÛxéFŸínÆd3FiÍÅÝß½¼Ï‘ùkË-t ‘@ãä^^©:Ê(ükªèWwÞ+å1Úú‚Ë›]Dx<Îo`°Ø° h” PÆ„šà`3^Â@aEa•Â+ƒÒ†µ•&/mõqxÚ»=†Ã gk»ÍyV—þyïýkÌÜoÌïü¿"/~8Ì™›®ÒIK^>Á‰W–õÝ!‡çj\ØM(œç‹_¿È{Ö¦Ë{W§˜nFä¥çê~B/s\îŒèŒ ¼sXëqÞ£ä h¼§ ¢å¸ã¦)Î_Þ;(Œ‚uà]‰¦ ;ð,Î9œ-·û7š¯ÂÔtå÷jC–´;CšÕV=Â9ÏñCMZÇ/´yïMÓ(=]|ïò>Úhn_i2߈™Ÿˆ¹se’ûMñ±Ó‹,OÖ°jÜuǹ®ñJŒ›Ö ´pÇê$[û ½QŒ]­¸|,|Bf§êôözØ<ÿ¿ðˆï½ÿó?þË?«E*ÕxláiwFIÁD5`·;b˜XnY™à™«û|ðÔÜØÆ ˆVÌ7cD%c#2öKµHó³'gùå»–ùÀÚ &0¯W…•ñqàæÅ kÙè$#%Øç  (Ë’ù©:ëëm ŸîåÃýŽ”_v…;…x‡rg½~Æ~/£)6ö†luRœ‡…f JXjUùûw. Z@k%(%(5ö9Q`86Sca²‚ 4(5þ­k uZUË]Œ+1 ¬×”Nãô‡š$‘³ëÝë“O¿Œøu¼ÇÏ5Í?õ†Ùd3ÆG™(<Þ9ºƒœî g˜<~©ÍOß:K«°4(E -zy…ÀÁÒcxr¾ÁÇO/ð‘“3Ü|†‡îZâP3âñËmJ/^cÝHœCÉxdsx¾Ê¥ \Y~úåôy“À7¿ùpg8ì¾æ4j% ­¾p¸Â"¼ó SËWŸØäÁ›§yîÆnZ £ˆ´":¨0ŸB-„JXl„h£hÕ*¼ïØSÍ:Ïl&”NÆ»-[Zli1JÀYŒñd…' Ÿß»våÿ¼v6ô#¼÷~{}ïL6ì÷FÝ„8Ôĵ¥5Þ9\Y¢ü8"ý¤ä;—ö¹u‚¯<» Ö'ÏÁ:ÁNÆ™rìÃ1Zsz¾Ê^byêjwlÕݸG¸ÂBéÑxD*ç¸úÒžOŠÑ¯¼qØû³Ñ/e&à3UíFÝy戫õˆH .·ñÜè&¼´—Ò4y¥‹ÑB#ÒLW óUÃ\-`¹°ÜXi„ž¹u6âÅvÆî°àÉK;ˆ÷(ï(K‹²£=J >ŒpÃ!Ywÿ?v¯|ö‰7"}SÞ{á™ó [ö>Ü µ‡Xð¢‰BC¬¡öhï¹°5`wÓK Îí©ŠŠB#T´hE=Pk,Ö ›ƒ’Üy.o(‹c-Ê•hïA¼ БëñýI{ðØÎjå7ÞìÒã-§ÓÞ{÷ÔwýoÛ´ÿ?ÏÄÈ(çñZ“82Š,wˆõÄÖ; ¶´ÜÔ ¹1ÊQ•(ÐÂbU1WUì&–nfi„Xt™QÕŠÂ4²(DÇ:Ô¸¼„~—d§½¾NÔ?v¦|3œo;^÷þŒûÎc÷<ÔÞÜüÚéÅ*3âr<óÑ&ÀD!hMVz²ÔòW×úüÑÙ6KUC#æ*ŠéXÑÎ=[#‡uÐÍ,WÚC’¬àÄB¯ & Q¡Á„J@')tG Öo\¶iv_ÿLòVßr:ý*‰J‘¿ø…§¾ûþÛΜZ©«4ŒèŠ¢c…\iÂjÀüT•Õ¹·,ÔˆP3°„ýÒãˆ,g{ŒžQl÷,™‡Ð€+¡LS Q½½«ßÐý©¿»ñ6àß—#!"ÿκýý‰éÉ?žXžœZbmy’¸Yа—;ªJkÙZ2«†‚­²äb'%ËËqm÷¼ãÆ~‚¶%>)Èza€nïûë/\ûÜÉCáo>vö3oš6¯}ÞÕ-¥ˆÈòòg&›‹“_pµ‰‡‚Ùií&jèɺóàénZ¨ÑjÄ™ªr½—ÑÏJD`:Ö8ëÈrË~Rrq«Ç·ŸÝÆEIÙéÒ¾´õÌúöö'Û¿X9ëÏœùk/øÞ=GUlü‚ž úQôÄwW%µÿµµ0}¿ši*ê ‚f̱•IN,7˜ªGh-®ï'ôF–ýaNš(ëÊ’²;¤»ÑaýÂÆõÑ0ýñMkߘl=¾ô¿íOœ€§¾-e3õ æ¥+'=%yrÈô?çJûA›ÅÆdCû@c"¸õÈ[½„­v‚÷ iAÒM¼Ïж-Ü÷e¢ö§Òhœ+²¼cLÜï¹H÷/üçŸÏßÉ¥÷;Ò 3W§©å±Uº.Ö´DÙ&A”Sñ“øâ’µÉô^§³êÊt ŸOn¾øbC|yer%ÁЙ`_«è†Ä•+:žØ$ˆö=¤×T¡v®”å³QfGïô¾þÝð»¿v%_í¯ DºÐ¥ˆ3V<¹“2=D›qe«Î»RW½s‘¸2ðJ¢L&&¡ƒ!AÜ÷Jwq®§´t½Õ=çl—ص] ûÏTòù×>ïN <øM½ºŠé×ÃØ5CQy,õ°b\Yû¸,],ÖE*ç ʉxqÎKé1¹R*è”ÀŒ?¢T‰+m–·jA~akPú/?ô¶—Û?6W^’ñœš‡¾¢¸uV®í%z”Y=i•éº*û™*u¡|a„Ð] J oŠÈu›í`›`Ïî<çxÇ#güó•ÿñÁ;á$¨ÒEIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/add.png0000644000000000000000000000007413124510115015466 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/add.png0000644000175000001440000000030213124510115017046 0ustar00constansusers00000000000000‰PNG  IHDRÄRWÓ pHYs  šœtIMEÕ5;xˆª­aIDAT×cü÷ï÷ ¦ÿ PðÕâ#جRÇÀpÁgAÖÜý1FÎc ÿ7«Ô¡Ë3ø.nb`äìe€è´„뻸 aì×Bˆå(‚Š1Â]Û) F;#V½NñIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/filesaveas.png0000644000000000000000000000007413124510115017060 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/filesaveas.png0000644000175000001440000000402513124510115020446 0ustar00constansusers00000000000000‰PNG  IHDR szzôgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<§IDATxÚbüÿÿ?5À›™Œ÷ÿ‹å)¼½õ”áÕ™ƒ~}x3Ñe÷ÿ„ôÈ”â7~^æûÿÿýæÿÿ?Üùÿûé¹ÿwgåýßíÂÐOH/@QÅïæ2ìÿÿšñÿÿ»ü@ÜvC€O/@±€BaÝú#ÿÿþÃðû×_FF†?þ1ÿA£²ÿ€Õ€hY¶ þŒÐxøÄÀð¥œáV?ÃO{ΧçA¢ðÅ@±¬_ô¿­½>ÐÀ ÿýc‘K\¾ùE¡®º V¾OdàP2¾ñšžÞp%®0Ü~+ÄÐö¯ø¾ #.Ëo ¯~üüÍðõÛO†?0õod`àà`eà`ge8¿¥Có¿Ïþ_á¼fe``:àÐrn†ç>0Ü”Žgp’–a” ýÿüùj¬Ž PþZüû„†n.v#yA>.~.¬®ÿy¡‰Shîo¥@5LÞ ån“cø¨ Ãðëù+&œQ@,àøZ Æ@6 °±²0HŠ 0€À‡é€ÿ¿>00±lc`dçd`xÄLÀäô‹ ü ï_f¸Íé öÔ‡Ÿþýû‡ÓÄJH ¸‡’B Q~ ø¡àÆôýÅ ¬Ò@Æ^ ¥Üß²™Ùž½åfx©ìÄð hù÷o?€À]Ö8þþ…jº3èkÊ1𣂇›Ã÷ÿ?/``VZøšh9ÿec`ø&LOßÝ‹>œùÄðíóW†Ÿ¿~3à+ìœA–âêòüpjús»Ðòÿ@‹¿‚Pß'Pà`xx÷ ¿¿×}k@fÿ:_Ëp"üTü·¼Ù?PA¥A€<ÿÇ ú|"Ÿ0·¼‡úŒ ˜v¾ 1üøþ•á«%Û}ç~ýú.7~€bÅ=8*€ôõ;ÏQø¡ F+üÚÆ o LtŒ@YÎöýÝëvýöføvúÃPÁrÀïßxÓ@A¢üá…ÌBˆ¥‚¥ó ,ÀBéËPII|ß„ò¿޽”døÊÇ ´ø7Ø÷’$ @¹1|ŒL‹ý=Ç « 2 äûßË¿ó‚CãÑ…+ 9üÀ>[ õØo`T ;€‘ÑvÿÿŸÿ @,¿aå´ äÇùßÿáô/`IùãÇ/Ó?›Xå –þ&@`á ÌûøX˜N=bà–‘g`Y ´üÁ“Wàhø  ¥Ì—ƒ1Ô!¬) A Šk-¸KAâ߀EôÏŸ¿€Åî}¡¯‚ýßÿCŒø 4ó?/Ãó+äƒËdy%Àf€<Ó3k=˜þõëÐPt1ˆa‰N€bù½ ú ôõ7`!©ÿ1p=ÍÀbl,í~}ý’÷ÿð}ÏÂðàÐz@ËC³3ÿüñlÆï?ð¦€ç‚?Hñ Rüõëpöù„9¯•«}ÿœâ@)û?Ãó §~éF0üû Ér_¿~ãï@‹aå >"  }ùòáôéÇN”rPe`û,rÿ|:XæÿF +ýÇÿ.‹J2|qèãŸ`õ22‚àtðÚ®Àç€bÕ‚ úÐç?~üf“ã‡&Ê¿ð(ø ªãÛ00°ßFÃ]pZxÿ:Ãs%. [ØÙÙêYà™¿à(•²8ªù¾ (¥‚‚ÿû÷Ÿ ß@ÁÔüáÃ7x¨€Áúæ$£(0ï3‹]6 0þüæ:ñ­«^éd3üùòR š‡‡ lñ_p=ƒÀ,Ä𠘿ƒ8Pp}ùò ÜÄ¥‰¾£ÈöØX‘‡›ðùÁu†½³æ0ÜQJcøûù'RTýÓììÌà,ø÷ÿ_äYøhñod×8‚ªÌŸÀìJÅ 2\V–ž&@øß.†}®2è±(2p½¸ÈpùØY†/–Y ¢Ð¬ )xé Ò þÿ :œ³Ž8ÿ[< ¨¶úÌ2¿~þ66ÿ0\¼ølà?hÀþú-Ãßï¿ή˜ÃðùÃK17†?·_C *¨:䑿 ¥ Âú(ªq'B€bÕ׿Á>ÿ ©@€XZš%þûÉÉðãú †_R– ÿUDþ!Jο(YX,°0°²2 ¬€Ã— œ ÿ@ó0¬ÙÍÆÆdƒŠOþ#$ ,„¢~‰h3ð eOp,%A W&`Á ~HÙòœ ÿ‚³!3NË/`¹þåí{†OÀÆ#(1Þ½{)À|¤™Dþ¾~Ž$ŽTy¡«Ò__½WÀeÃÿÿ\8@Œ à10Hýÿñãpà‚7Í=x0¢òlt±—/ß@Õƒ::pö ˆ‘ZSr@11 0 w@€{Ö(ºå)ðIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/cb2bib.png0000644000000000000000000000007413124510115016061 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/cb2bib.png0000644000175000001440000000657013124510115017456 0ustar00constansusers00000000000000‰PNG  IHDR@@ªiqÞbKGDÿÿÿ ½§“ pHYs  šœtIMEÖ!ûŽ[¼ IDATxÚÝ›kŒUz†ŸsNUuu÷ÜŒÇß0ø6Ö6€×ì±ãàåã`Än‚вRòƒ»HÙU¼ZÉÉ* ‘‚QP„@lH ˆ_ÆcÃzÁ^;Œ¯cc ¾ÎØ3ÓS]UçäGuUWÏ´gw·mQRM÷t×T÷ýÞïý¾sªFp ¶÷Þ{/;cÆŒ%ù|þFß÷ݳgÏöõöön[´hÑf.ó&}þmÛ¶ýPJùóS§NMìïïGˆè’Ùl¥Ô‡½½½½jÕªß}íX½zµsÛm·½râĉÇŽöm\×ÅqœŠ=“É}}}=þøã/æR uÞ'Ÿ|òÕcÇŽ­ ›Í’Ëå’=›Í’Édp]×u¥ëº÷vtt¬ïêê:öu @>óÌ3¿zB)…ëºär9òù<¹\×uÉf³¸®K&“Áqšššœ»[ZZ^ܵk×Ð¥$ÀªwJ­Y³f…eY?RJaYVP˲’=þ^JIOOÇ¿~æÌ™Ï„W‚ˆ_¯YÕ9sÁ§¥Ó…V|¸DF‘:ƒàÄy_î<éþa>ŸÏY–•H=“É`Ûv\J‰”’:Ä©S§ð<ß÷™5AlýNGK!€”Æ(D´§¶ó½göÞøðê¿t= Eo陃<¦¤"›oAXvD€R€@‡>®ããÈ€3~†O:ijjŠs›\.—G[kÍàà §OŸ¦¯¯b±H&“ÁƒÖš}'½EYçß꜊`Âñ½s„^?B”É7ÀP1@9ÈçëI€êë÷ò3Ú›òCÏãØ QŠ B2dl¾jáŒn¥ON$Ÿ/ƒOç¹R ­5žçáyÅb †a’a²ýHÝŸîfN;Ln’Lm³°m…•iFûÀ  ¼€¬kSôäêM€ÀDb³•Bc8sÎã|¡eŽ€³~ŽÞ¶¹‘¹9‘Ì3™L>M@I Ä‚Çq*¾SJqÞSüîH‘b±À’™>y7’¾@ ¤àêöVšó.Ö5ÕrkÌ!@ƒã(t!À±T)ï%Á¹ÓìÚùKl%±l…¥¶RX¶Â¶,l˲$–R(Kb ‰T)@ŠP”ÒÊ@CÖh´-4Ú2BÓ’Ÿ„›±’¸!p )JY/U£ª€!1"D)IF)””‰ùÍš2–œ‹Ñ ¤ $RFF)¤DH"ÓC€¥÷Ñçñß@H‘€#îˆ!É»NDº(!1Â`IA,[uãÊ Á …ÀÍ@KÞA(‰(&_Õ”Ô†2ˆhàñ £(ËD9%C “óÄ`I—I0’S 0BàÚšE¿„ÆÍH0¡JÙ&E2¼ _F(“ãê^FÂD A)‰ç!@“‘øArz xQ/†“+£<_QëG‚Gý¬iJ#;PR„$ÒQPºt)cS+ÿˆÁ“”S¡6ð‘‘Ö:{3´P_Xú¤¥K=Î{™"Rà÷¯"ûQÁ—zÐRj% ²qU "  ¹"Õ¤ŸÎû ">­Œ£æ¼æ/ ¤Ä÷C\Çj¥ôÒa*ú)'N¤ŸV= ” v&¼,ƒ,“çHRA¤Ò¦ìôQâ[`ˆ0ê#ÅŠA6®(¥Ž%+$]áú¥×BӦܺ2éþê:Ï–¯Ðßó6Ê;‹‚Ð×(!G€1”Œ*Æ—–~¤æ73}úôº7Æ”¡ ‚6Î8p¸òž¯Ëå¹þU reAeôÓÆwA×ox­£†'—oÆž½ŒAZj^Ù“ãþ¶làÑO«@ˆÆ,1Æàã]AKë2³ï!°'4¶0bXô©ýt·×ø- Cš››ii»ŠÜ¼e © #@1¾è'Òo, ñ4Úqš››i›0‘̬ï^µvíÚÛC@ºþýØ3 >^@‰¦Ä '¶Û7ÝtÓË;vìXRw”J+ú—(b3L“Ïçó­­­olݺuI „Z¨ûéè[–Ö”».«¶)c߇aXñYLBsss~Ò¤I_‰„1 ‡Mf†G?ë6>ìRÊŠ÷¾ï )&¡¥¥%ßÞÞþÆ–-[ÆE¨JVm*9éüqï.–ñ:b”–Šƒ&Š(¯,QZ™’ù¶¶¶7ººº–/^¼xs­p%ê‘^/Fm`êI€Ö)%íííh­ íubŽñà8N¾P(üð=À¿(¼@£¤¬*Ûø~ùãF›`œ Ƙ8ÒÕ!+"—Ë]d/št*âÕä©•"yI½ )„A@l”"šg[5M‡…””¿ ƒ49¢"B—Š„¸,¦¯·Ì5ÏemêUHï3?AhâÃ]_)U‘ Ã`YVíh=ì^¤Åø„À÷C2ª¶ÈþÙQÞùÍ›=r7›ãÖ…‹ø£%KKJ„Âà ÿ¼fõH ¶ÍŒ3Yzï}\}Í”älM}@ÉjKµN¸ùLMNøéáC¼ðܳî9H† ôŸgÓ†wèÚðNrL6—ãïW¯áÆoÞÀ¼ùüôç¿àïžzš|S/<÷,öï·Æç\Uä_Ö‚Læ ÚÔý ëÞbáíwð£ŸüŒŸüìyøÑ?`ûû[+޳Çv˜ß¹¥-­­,`aðÆ¿:îÝ!m+ºoçä ¼þêîD}æ?ùÊß;æß•coäC#öï`nÇü ¶Êé–ù¢€T–²(„w´u>ÏË%)-ÁÃ=Ù¼i=GƲmîZ²”Eß¾s,·`ê´=yâKzÏžaÊÔi䛚“ïvþ~ þàæú¬ Z–…²ÂÀKžßŠå_­ù1&º“<|ëZÿ6Ý×qûwñЪïsúäI^zñù1 øâxôÌÔ‹ï®ø|ߞݥèw¢Ã¾¾>>ܹÍ]ëéèüw/[>¢*\¶”H¡ðü°ÇRĈüuéaSÙo}w3Ý×±øîe î_¹aÁcðÝî.¾õí;˜5gnűûö|@÷Æuto\@>ßÄ÷û+®»~öW*Ãcß Šø~€m©êµ n~*nžD[oïY6¬{‹öI“ùÎ]åÉÙß>õã1¶ýƒ­!¸çï«ø|pp€ÏŽ!Ÿoâ©§JÑó8úéaÞzóuþç—/óƒÇž`òÕ×T¬ÔT´³¦Z#•H–¬Œ1¼ÿÛ-„AÀ­ oÑ²Ž¶ïýäc<ÀЇnˆ¤¾;°oÆæÌë@keÛ\?{.®|„þ~~ýúkɱu!À=²þ‹‘Å ÐØ)“4ưïfÍ7nSÚ¿w»?ÚÅC?ZõæJ,ÿÙs;*>¿æš)ÿüXÅ©æ0ÂR{[mé«bi`½gÏÐÚÚ6.ðïú?ŽîáÁ•«ª*. CzìC*ŬÙs‡¥[/-­­#–Îjn„ª5T‚Ê2 J;¤Ywœ ýýIDÎõõñêK/ây^…´»¥›“'¾dùý+B0T(°eÓ^ø·Iîìß·Ïó¸væuØŽ“’zȦ oðÍ[&òã¼78:gB”ún!Jíp$Áyó;ùpçïÙܵž¥÷ÞÇ©“_òÖ¯Örç’¥8Ž“Dõ7o¾ÎŽíï°eÓ†Šs?¸ò´Öœ;×Çæ’ãO›~-a µáóÏŽòn÷FŽîanG' o¿ã+5_c â’"F•†¥dœ3I¾»ì{AÀGîàã];¹nÖxhí“&'Jyé?žçÓ#‡ª^:—ÏÓÑyïüï¯ØþÁÖTyÜÈ»ÝB’Íe™2uò§0ÿ†\¨ÉÆ3«²¬‘Ǹ®Ëƒ+¹à²6Àþò‰1Ï}Ïòû¹gùý½|^~`pl5ö’!éacׯ ~Àjð+¥ ^ø¾:Ž3"à ©çïÕ¾Âó¼â¥&@¿òÊ+¯ !¦d³Y7XúuøÀ/ö÷8ºÕ®044ä½öÚk/1Æÿ Öûf˜tý×åÜO€žÑŒ¼ÞÀši°ã±" úQÓàÿ°“”³ÊüùIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/edit.png0000644000000000000000000000007413124510115015663 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/edit.png0000644000175000001440000000313313124510115017250 0ustar00constansusers00000000000000‰PNG  IHDR szzô pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFÑIDATxÚb;ÄÀpΗáFƒÛ~!Ž  ¨0±æ ± AÑ´‚dàá]‘xÄ??00\ÚÏðûÍ †w⮪ ‹@xKŒ¹ÄDRp]ÒÀtm‡ÔG å@_@üˆ?ò0¼xÇÊ ßÂ7oõÁÃÄš @L$§Z Æ… Œ@ÎK6`¼°20|àËû¡ÇpêÆc`‚e›±ò(QÙ €Hr(þ\YÀÀ!ÿ”á+Ðò?@ÌÄøÝûÂÀæYÊ #%Î &*Æðæ (nŒ ™ @,¤¦X¦—­ Œ’@ï?cƒ|†;Ãsi{6 y†ÿ3021m&@‘ä€?0°«ãþ'àÅ,À‚áƒÃëW_~2°³±óå†?ÿˆw@‘䀿»ØÔñý š?ÁÈÍð„QŽKÛ–á°púÏüŸéñ1 @D;àßë Œ¼7€ÁÀÍÀðhó`(ð1|ÿö“á‡N '+3ÐŒ  ”GŠˆhü~2—M^‚á5°LfâoœÀ áe¸}ÿ'ƒ€¿/°˜þÏð÷Ìÿ™‰v@å€ÿŸ00þÚdÈ-þ ô"0îð2üþóá§a:'330{ëPyðèFB! r!0°þ ‚øJèwV0pkèÜO¨›zÿð3Ü¿v›A4/h'ÐÒÿ lÊ–ûû›äA‚ì@ÌÁÿq(ÿ €ð:à/ÈòO8XMr@á tüWn†ßÀªñ‹Œƒ(ÿÈ…>###Ð!Àlw((ä8–‚½ûTý˜‚ÿñ^üº‘ùÁfi9ˆåÿNbâ? /ÝgñËWPŒŒÌà4  ›áû_ ?¾jàH–¢ #@átÀ¯ÿb—áÛnFvPð¿ºè‰_ÀPdã`xýCŽAŠ_œõÀ%䟟ÀñƒáçÏ_ÀÐ&Ú_¿aÉ—OÙÊ @¸CZ’ÿ} òß< à `šõŸŸáÙÅ‹ ¢þ} ~ÿføúõ;Ã÷Ÿ?þmý÷¢‘‰‰øâ €XpÅ=È[ ŸýüÊÁÀù׃׀œ— ™þ1<ÿ«ÊÀÃÂÇðûýp ”AÁõXCš‘¨bŸ¿^§Íeø ŠJF Ï9ô~1ÿe8±bƒ€wЮ¿@d„¸Øjúœ¬ç^Kÿý€˜úGÿˆOèƒéû_D€éŸáûû· §ObMèd`åæ': Pʇ(€ÒfüßR(¹ó?@±`³üÿDõ{öú{†‹371(›>ʹÓÁrÿÿ!œùªøÿ?ä6+(íýüÄÀðüº¥ÈöÁÔòëóqÞ' Êi ÐD öÿ |s-( °s;; ''(ûÿùMR8c €X°•|°øÿóç/ƒ‘™ƒr@ ß¿jþ!|Ï ´h)++$tþƒÊFlFb„ဿHÄ ,åL“K!¦üg€ZÌ•À,÷XJ1K!p¢Űàùm< ˆä6!,ŽÙ€qÌÄD–v@`~üc0@à(˜0cÓ€9 €`‘eLC;Îâ“ FX>(`ütþ°¡örIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/application-x-txt.png0000644000000000000000000000007413124510115020323 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/application-x-txt.png0000644000175000001440000000121013124510115021702 0ustar00constansusers00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<IDAT8•“ÍjA…¿{«{zât~t3Dƒ.$;w"¾‚ú>‚ÁE}BBÜ' n 1CÌ(¦{zúgº®‹ÌOƉ \Š*8çžs«JÌ ¹ lðØ5³½`´Ù8==ýèÍPUT™)`²ª*‹qüØÓ±œ7è÷ûÿl'"LjŒ±œS0Ûptø 30ïi.4©‡5.p¬\¿AÜj¨Î èè°::6N•FQä9Fƒ )‹‚FèPçæD„å•†ŽŽº„a@/’& ­¸EY–˜7Ú áÔ^vç9ªŠ \$ eY’œ'¨*·ÖÖ‚IÏ¿"ˆ€Íб~ç6yžÓjµ&âfFQ ‘«"¨âÍz8ÜßÇÌh.4 Ã4I‰¢ªÊêêM¢H®çˆBÇý{ëÓ«»â\Æt",--¡ªdY6C®ª !Ë2ªªb0È ðs·¦)×âe~ô~qÚû‰ÖD͈º®9ÿ}ÎYïŒv»Íööög`gÆf@š¦”yA+Žé§}D„ï''–eù¶©ª*Š¢`š&€»Z–eì1ñÞ£ª_µˆ°{½÷÷TU‰ÿÍ#¼×¡7 !|„Boòiˆ9Âg)ÓƒQTUb½$0œ&9S4—^œ""o¿Úö/ú8Üåk]IEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/back_cb2bib_32.png0000644000000000000000000000007413124510115017345 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/back_cb2bib_32.png0000644000175000001440000000313213124510115020731 0ustar00constansusers00000000000000‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIMEÖ.+—ħAçIDATXÃ¥—mh[×Çç¾HWW¶+²c˶b'îR§ZEÚÑv+n¶ÌccŒ¬l4 ²…°Bh`,߯`ÆÐ‡R¶AÍÂ^¼0Xƒ­4Y3XM›5«ç„%ó¼dÑb9¸¶¿Hrot¥û²ÞW’_äìƒî=œç<ÿûžçŽ;´t:í=zôà™Læíl6ûù³gÏ Ñvâ(Òé´‰D,Ã0MÓˆÅb¨ªš»sçNÇ£‚hp:sæŒ:88(yïÅbÑ=wî\9N»±X Û¶‰D"躎®ëƒAæææ˜˜˜À0 ehhHñï700Àððpp6 ù_‰ÄÇS©Ô{Á`°äX,f¦Ói·³³ÓܵkýýýôööÒÑÑÀÜÜ+++Äb1t]·dY.ùG(š>~üøK›1PƒV×õ½–e=•L&«sW¯^E×u4M êºN(BÁÚÚËËˬ¬¬ÏçˆÅbd2FFFªþ¦iöýMp]בe™›7ob¦i²ºº @6›m:¯SSS(Š‚®ëtww¸MB I---„B!$I"‘H¬çJ’BT‡÷.IRÍBT÷r]Y–·[Ï@ÕÁ  Ëò†Áý¼µ~_ÿM3àºî†_lÛvuÞuÝê¼ëº8ŽÓ°^–e$IÚ6] ضªª AúúúH¥R;êñÉÉI,ËÚHþ_]¤R)ÂápÓÁggg9|ø0·nÝÂõhÝNêA4›ÇzóÒ噪ªÎŽxýy}Ó4d2ÉéÓ§¿¿o߾Φxùúð[8&™LráÂ……ÁÁÁŽmøƒK’„¢(;ê/:Û¶«LŒ-ÆãñÝM¥ ¾wbeËeÞˆð«·2üò­»üñ/÷øpáGŽáرc_Ù´ üy÷ÚÐëq«nfFÉæg—r\¼ZÄpZèk «ÿZÔ‰<Çfy(uôl  ^Jýâ´€… §^¡D+§GzùäLD_WU³â2ùïÎÿi»â gžûæsWÞ{ý³nH_|êle†isêÕ{ìŽíæG'"|=Êgžî ?”»Þxþ¿îÞPˆêU°™xýÍJD8qTÅ,ƒY¶È|XâËϯ×ÛãKìëÖøÒ³frÎîÛwï7k joKÐÞÓ ¸•u<„tÀ°ºèPQ72§ !„„RPB‡Xa‰—Qw ˆÿ(ÞO ÜT@œÌ ¡ðÿxG4…×Ú¢‚Ç ¯z·ÚÈà#ØãQWšŽ‡PÔYðÎ@ø(àÞs‚nÛ[FA´ZÁ'‰ |j{#Ó½ž¾c!ôC¤™ÝëqáÛIæPq6²0ð¤ðIf"ñ2*¥t“W¼“3K@ð } N(ÄZu%‰ãiÜ 6 <,kôQÛÛÈš€èÖJ˜þ8^ÑàP÷:â>êT>‰~D€l%ÒûS–1æÂ{ïŽ]¡Ä`¨?‘>:\\QLã@ !ÜGòŒ1ض JëÇJÕÏÉåòŸ¿à9®”ö\(É>JQgÂ÷¾[X__ÇÚÚ,ËB­fƒ ŽB¾€b±OLùø““,Í@\í˜7Ö)¥°mårÿ”Ÿcccœ+ôîxCƒƒàœãáóGŽ|ú>€Pµ à ¡¨Y˜Åñ¾6”R,/¯àéÓß°wß^ôlïAww7„à(—+xðèþ_Çx@Õ ïçNTO®8æ,N謭¯£Z­"ûJ{†ö(­ÏÈ£ñåÏNž:\«ÕÊl¥TóÌÄâ„P@'ömÛÆÚÚVWW±½¸½~|òÑò—_|õQµZý@M‡÷ ˆ'”ôþ½ë¼eÕP³jX·6ÐßßïÂß½wß¿pâÙ³gÓ,¥”ê¯í,‰97õ·˜6¬šÃ4°sç”Ëܺu§O¹¹¹›¨¯ùð¡:±‘5ƒwj!(c`”¡×.,-Uñ˯c8wö[ض ^5ñ–÷$B0¯ˆV%©5„‘0Lù|ׯ_ÃÙ3çœïY©T’Íà4¼è&ýýý÷9çoBL¯·¼;&¥ÄÜÜœû¢h½„B „€µZ «««¨T^ “Í`lìgœ=sιD¤Óé‰ùùùwßý[°76 QJ­J©TJmÛ¶­Ÿ1&(¥Š1¦cŠsî!„[¤”náœ+J©ZYYQ jæÉuåÊ÷zzzúöïߟ/•J©ÍqH”(HôWRwé–ÑÑÑÏ8ð®ÓôR\7!%—°9£Tݽ}k¢T*X…¶IEbiã¦Ì"?Î2ÀÀâÂÀY€EG–m‰EIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/exec22.png0000644000000000000000000000007413124510115016026 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/exec22.png0000644000175000001440000000217313124510115017416 0ustar00constansusers00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsaaÁ0UútEXtSoftwarewww.inkscape.org›î<øIDATxÚ…UMH\W>ïÍ›Š:êX§âŒ´n øÓb t×±Hig“n]”RÐ.ªFˆâÂZ!q¡uãÆ†Ò›TÔM,šé¢ °Šü×ù}oÞô;îÃÑ$8Ü÷Þ½ç;ç|çÜó”l6K×Éììì“âââOÈÁÁÁóööö®küN ƒÊÚÚZ*‹eY×××Süí:;•.ÉØØØwAù®iÚG%%%šÍf#Ö¢¢" R+÷gff¦¦¦¾¿Œ“CC­­­?85ÿQVVæu¹\7jkkµ‹FÛÛÛ™H$òO*•Š666úu]ÏÎÏÏ?îèèè¹<<<üM ø¥¢¢Â*Etrïo¤P®¦iR4ÍÌÍÍ}Û××7C+’üüü2PáÓgˆ¨,'R2™ 9N‹OÃ0XÕ‚‚÷©˜œœ\lkk»Ã@ ƒNNNØ€Ar"M&“¤ª*{ŽV¼/,,,Š;ò\w|@âðéé©ÌË˳¥ØívqæøøXì' þæ¾R¼ÞÞ^éU£p¯|>;ãà ÌÊü™èß(Ae…ÛíV˜iƒˆˆ±¯¯®®~˜N§wGFF² Úë'TýžâñxT¦F‚G~>::2WVV>X'Èààà-¿ßÿ¨  Y#Úßß7‘±¾¹¹9ª¢87JKKh+PVZ¬;;; ÊÂϯ!m<çó\QhÆ€:q‘ê´‹)ÉÖBW0°72==ÝŒªßB"À½½=¶ã ÃT°©Œ¡iˆòÅáááHņCªÆw᤺ºÚ;44ÔTWW÷»×ë­aÎ/+ÓÌÙP XŘ·¥¥å%.ˆ†J[ÞA=™¡G‡Ã®Äã 2©ab_7ÉÈ€>Cœµz¼²²rNtWËèãËËËë9‚ÂÂB:??‘CDQk|5äoõÓ³g«´±±AÉD’ô˜N©tŠô´.©cîí9C@»h|ùÌÑrjÜÓÂ`÷u„ž>ýîÞýšêëR ç$Ç®¹b]P(ÔÓÐÐð9s%gœp¥Yaœ"ÏúêË’Âáç²À@º:G´ /G4A¼ |3¨ŽÒHwkk‹<øYtÃíÏnSsóMZZZ"ô9½slŽŽŽ755yld\UUU£Ïí]=]p¢0—f5¬çË‚›ùgάèîî¾?>>¾É€H¿ƒéRROOθ˜Ð ‰Uså °O¾õŸÌ,.ÐáZ\\|îíèãœþ…Èþ•+÷4Só£Fo…àj///ÿŠÙ8;;{œg ItL–‘K%©˜ÿ>Œ¿z„9F…IEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/cb2bib.icns0000644000000000000000000000007413124510115016231 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/cb2bib.icns0000644000175000001440000012673513124510115017634 0ustar00constansusers00000000000000icns­Ýics#H€?ø?øøøøøüüüüüü?üüü€?ø?øøøøøüüüüüü?üüüics8ÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿþýþûø÷þýýÿÿÿÿÿÿ^3WV÷øùW33ýÿÿÿÿÿ^333333333¬ÿÿÿÿÿ^3332,,,,,¬ÿÿÿÿÿ^33öõ+ýÿÿÿÿÿ^33öùÿÿÿÿÿ^33öõÿÿÿÿ^33ööõöõVÿÿÿÿ]33öõöõ+ö÷+ùÿÿÿÿ]33++õõõ÷+ùÿÿÿÿ]33++õ+÷+++ùÿÿÿÿ]33öõõõõõõùÿÿÿÿýýý÷õõõõùÿÿÿÿÿÿÿøõöööööõúÿÿÿÿÿÿÿþýýýýýþýþÿÿis32™ƒº¼¹† Ìãöž¨¼¢ÊðâÆ‚ §¥¾µ”šÅÔÇ‚ ÄÏ¿ÂÆÉÌËÓÜÄ‚ ÅÖÓ×ÚÛÝßáÞÇ‚ÃÖÑëû€ú÷ä¿‚ÅØÓðÿùúæ‚ÆÙÖïÿüõ÷Ü ÇÚÕîÿÿùßõßéá ÊÚÕîðæöÊØÂÏÌ ÊÛÖàÌêýèçÁËÝ ÉÜØÙÇðÍÄÊÈÓÝ ÄÚÖéîòèèëéûâ|~}ßüõ€ö÷ÿß„ÝèææååäæÍ„`ih€d`aZƒº¼¹† £ºÃž©½£¥Æ¸ª‚ ’Ÿ¸¯ŽˆŸª£‚ ‘š‘”˜œ ¡¨² ‚ “¡ ª±³¶¹»µž‚‘¢ Ýû€øöÒ›‚”¤£äÿúúå‚—¦¦ãÿüõ÷Ü ˜¨¦âÿÿùÝõÞèá ›©¦äðåöÈÖÀÍË ›©§ÕËéýçæ¾ÉÜ ™«ªÍÆïËÁÈÅÑÝ •ª¨Þïòèçêèúâ^abÝüõ€ö÷ÿß„ÝèææååäæÍ„`ih€d`aZƒº¼¹† z‰ˆžª¾£‡”q‚ \`p˜±§†uuys‚ Xa`bfjnpv~p‚ \hiyƒ†Šƒr‚^jjÎú€öõ¼o‚_llØÿúûã‚ann×ÿüö÷Ü cppÖÿÿùÜôÝçá gqq×ñäöÅÔ½ÊÉ irsÈÊèýæå»ÆÜ ftuÀÅïÉ¿ÆÃÏÝ ctuÒðòçæêèúâ>BEÚüõ€ö÷ÿß„ÞèææååäæÍ„`ih€d`aZs8mkd‡ %ÿÿ¨"$$ ¶úóÿÿÿÿôôõ@ÄÿÿÿÿÿÿÿÿÿFÂÿÿÿÿÿÿÿÿÿEÂÿÿÿÿÿÿÿÿÿ@Âÿÿÿÿÿÿÿÿÿ”ÂÿÿÿÿÿÿÿÿÿÿvÂÿÿÿÿÿÿÿÿÿÿ¦Âÿÿÿÿÿÿÿÿÿÿ¢Âÿÿÿÿÿÿÿÿÿÿ¢Âÿÿÿÿÿÿÿÿÿÿ¢Çÿÿÿÿÿÿÿÿÿÿ¢NkjÞÿÿÿÿÿÿÿ£¼ÿøøøøøÿš-DBBBBBD"ICN#À?Àÿÿ€ÿÿÀÿÿÀÿÿÀÿÿÀÿÿÀÿÿÀÿÿÀÿÿÀÿÿÀÿÿàÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿðÿðÿð?ÿðÀ?Àÿÿ€ÿÿÀÿÿÀÿÿÀÿÿÀÿÿÀÿÿÀÿÿÀÿÿÀÿÿÀÿÿàÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿÿðÿðÿðÿð?ÿðicl8ÿÿÿÿÿÿÿÿÿÿÿÿþú¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýùVøøûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýùVøø÷÷¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿˆ‚‚‚‚‚ùø÷÷+÷Vúû]]]üÿÿÿÿÿÿÿÿÿÿà^3333Vø÷++÷øVùùW333,]ÿÿÿÿÿÿÿÿÿÿà^33W]]]WWWWWWW]]W333]ÿÿÿÿÿÿÿÿÿÿþ^333333333333333333,]ÿÿÿÿÿÿÿÿÿÿà^33333333333333333,,]ÿÿÿÿÿÿÿÿÿÿà^33333333333333333,,]ÿÿÿÿÿÿÿÿÿÿþ^333332,,,,,,,,,,,,,]ÿÿÿÿÿÿÿÿÿÿþ]33333+ö,]ÿÿÿÿÿÿÿÿÿÿþ]33333öõöWÿÿÿÿÿÿÿÿÿÿþ]33333öõ+¬ÿÿÿÿÿÿÿÿÿþ]33333öõ+ýÿÿÿÿÿÿÿÿþ]33333öõõõõ÷ýÿÿÿÿÿÿÿþ]33333öõõõõõúÿÿÿÿÿÿÿþ]33333öùÿÿÿÿÿÿÿà]33333ö+÷õö÷÷+ùÿÿÿÿÿÿÿàW33333öö÷øVöùö÷÷VÿÿÿÿÿÿÿþW33333ö+÷öõVöV÷÷VÿÿÿÿÿÿÿþW33333ö÷÷++++÷VøøõùÿÿÿÿÿÿÿþW33333ööVõö+õV+öVõùÿÿÿÿÿÿÿþW33333ö+øõööõõöVõVöùÿÿÿÿÿÿÿþW33333ööV++õ+ùVV+øVö÷øùÿÿÿÿÿÿÿþW33333öö+õõö+++ö+++öõùÿÿÿÿÿÿÿþW33333öõõõùÿÿÿÿÿÿÿà‚]]]]]+õõõõõõõõõõõõõõùÿÿÿÿÿÿÿÿÿàààààøõõõõõõõõõõõõõõùÿÿÿÿÿÿÿÿÿÿÿÿÿÿøõõõõõõõõõõõõõõõùÿÿÿÿÿÿÿÿÿÿÿÿÿÿøõõõõõõõõõúÿÿÿÿÿÿÿÿÿÿÿÿÿÿüùùùùùùùùùùúúúúúú¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿil32‰áØÑ˜¢žœ£¬¯•Œ–œ£®¼¸ŽŽŸÉÒÖØÝÊ›©µÁÅ¿¡¯æãÝÝÛÒ‡ÁÑÌÉ»¬¬¼Ëέ˜ˆˆ¦Çרâ·ˆÂȵ¬…†’¥©¨¦¢•Œ¦¾ÃÞЇˆÁÒÉÉÅÅÆÈÈËÌÏÐÒÓÔÖ×ÙàÒ‡ˆÃÕÎÐÑÒÔÔÕÖרÙÚÜÜÝÞÞâчˆÂÔÏÐÑÒÓÓÕÖרÙÚÛÜÝÝßâчˆÀÓÏÐÑÒÕÛ€Ý ÞßßààáâßâЇˆÀÓÐÑÒÒãü…ûúøéßЇˆÀÔÑÑÓÓæ†ÿþùóè·ˆÀÔÑÒÓÓæ†ÿýøóûádžˆÁÔÑÓÕÔæ†ÿý÷ðÿÿæÍ…ˆÁÕÒÔÚÔæ†ÿþùìðñòÜÆ„ˆÂÖÓÕÚÕçÿ†þüõïììóÓ„ÅÖÓÕ×Õæÿƒþ€ÿþþýø÷ùØ„Æ×ÓÕÖÕåþý þúϺéÿ×¹ÁÍøÞ„ Æ×ÔÕ×Óåþþÿ ݸ¬¤ýå“ÞÅ»â„Ë×ÔÕ×ÓäþúÔÃäÿùÿç¡üܦýĸ℈ÍÕÕÖ×Óäý¿ÁÐÑÿüþÎÓÿºŸµ±öß„ˆÉÕÕÖ×Ñæà¡óûùûüáÕüö£Õâ£ëß„‘ÇÕÖÖ×Ò鯬ÿò÷üäÛñöãžõ÷œßÞ„‘ÇÕÖרÔçØ ÔÏôÌ“¢¡Ö­Ù·³ø×„‘ÆÕÖרØã÷ÛÖñõ×ÍÌÕåÐÑÑÚóýÔ„ˆÈÝÚÜÜÛã÷øøõõøùùø÷ùùøøõúÑ„j¢¨¥©°«Ö÷‹ôùÎ…#&""##Ñù‹ò÷Ì‹Ýù‹òöÉ‹Ûÿ‚÷ö‚õøÅ‹›¶´´³²²°°¯¯®®¬««¨„¡‰áØÑ˜¢žœ£¬¯•Œ–œ£®¼¸ŽŽ_œ©¬®°ªš©µÁÅ¿¡›¿¼··µ¬‡gŒ›™˜œ¡­½ÌÏ홉…“¤¬¬µ¥‡d”…ns~‡’‘ŽŠ…w‡˜œ²¦‡dŽœ•—””–—™›ž ¢¤¦§ª­®¶ª‡[‘ šž ¢¤¥§¨©«­¯°±²³·ª‡[ž›ž ¡¢£¥¦¨ª¬­®°±³¹ª‡dŽžœž ¡®¿ÀÁÂÃÄÅÆÇÈȽ¸ª‡dŽŸŸ¡¢Õÿ†üú侪‡dŽ ž ¡¢Ú†ÿþùôⳇd‘ Ÿ¡¢¤Ù†ÿýøòüàdžd‘¡ ¢¤¤Ù†ÿý÷ðÿÿæÍ…d’¢¡£©¦Ù†ÿþùìðñòÜÆ„d”¢¡¤©¦Úÿ†þüõïììóÓ„d”£¢¥§¦Úÿƒþ€ÿþþýù÷ùØ„[•¤£¥§¦Øÿ‚ý ú̶èÿÕ¶¾Ë÷Þ„ [˜¥£¦§¦Øÿþÿ ܵ§ŸýäŽÜ¸ä„d›¦£¦¨¦ØÿúÒÁãÿùÿæœüÛ¡ý´â„dž¤¤§¨¦×þ¼¾ÎÏÿüþÌÑÿ·š±­õß„m𤥧¨¥ÚàóûùûüàÓüöžÓáŸêß„m˜¤¦§¨¦ÝŨÿñ÷üãÚðöâšô÷—ÝÞ„m—¤¦§©¨Ú×›ÒÌóÊŽžÔ©™×´°ø×„m˜¤¦¨©«ÖøÙÔðõÕËÊÔäÎÏÏÙóýÔ„d™ªª¬­­Ö€øõõøùùø÷€ùøõúÑ„U|„‹‡Ìø‹ôùÎ…€Ñù‹ò÷Ì‹Ýù‹òöÉ‹Ûÿ‚÷ö‚õøÅ‹›¶´´³²²°°¯¯®®¬««¨„¡‰áØÑ˜¢žœ£¬¯•Œ–œ£®¼¸ŽŽ?p|‚}‚˜©µÁÅ¿¢ƒ•’‰‰ˆ‡8Wbcex”¯¾ÍÏÄ®šŠ€|zy€t‡6W\TSV^gpwywtoje_cjn~v‡?X`_a__acdgiknqrtxz|€w‡?Ybbegikmoqsuvxz|}~€ƒx‡?Ycdfh€j lnprtvxz{}€…z‡?Ydegij„ ¡¢£¤¥¦§¨©ª’„|‡?ZefhjkÅÿ…þýüÜ—z‡?\ggikmˆÿþùõÚ“‡?]hhklnˆÿýøòýÞdž?]iilmpˆÿý÷ðÿÿæÍ…?^jjmopʆÿþùìðñòÜÆ„?_kkmpqËÿ†þüõïììóÓ„?allnprËÿƒþ€ÿþþýù÷ùØ„?ammoqrÊÿý þúʳçÿÔ²»É÷Þ„ 6dnnprsÊÿþÿ Ú²¤›ýã‰ÛÀµä„?jpnpssÊÿúоâÿøÿå˜üÙý¿°â„HmnoqssÊÿ¹¼ÌÍÿüþÊÏÿ´–®ªôß„HgnortsÌà™òûùûüÞÑüöšÒà›éÞ„HenprtsÎĤÿñ÷üâÙðõá•ô÷’ÜÞ„HenpsuuÌ×—ÑÊóȉ™˜Ò¦”Õ±¬ø×„HdoqsuwÈùØÓðõÓÉÈÒäÌÍÎ×òýÔ„HfrsvxyÈùøøõõøùùø÷€ùøõúÑ„5RWY_e`Âù‹ôùÎ…€Ïù‹ò÷Ì‹Ýù‹òöÉ‹Ûÿ‚÷ö‚õøÅ‹›¶´´³²²°°¯¯®®¬««¨„¡l8mkv’CBÔýýò€3âÿÿÿÿÿfm•’’’‘Óÿÿÿÿÿÿé—‘’’’–fÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä7ØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙ4ØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙ2Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£Ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£Âíèèèéùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£2CBBAGÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£Âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤v¾ºººººººººººººº¼^ it32Wï ¿ÒÜâíìèäÙÖÆÆ¶íÿ¿¿ÊÌÓÔßáÙÙÐÍÄÀÁ¼ªªê¿ÊÈÎ˼º³€²±±¶·ºº¬¦ªç²¶¾Àõ³¬«¬¬­®´µ·¶¯¨™™åU™³¯¡‹Ž’”˜™žŸ¤¥©ª­®¢ž™ãU”­«œ™ˆ†ˆŠ’—˜žŸ¢¤¨©°°§¦Œmâ‹¢Ÿ”’€Ž”–› ¡¦§ª¬°±¶µ²±|ßqˆ ž€’—˜Ÿ £¥¨©®¯²´¸··µ“…sßx•”“”“”–—œž¢¤¨©®¯²³¶·º»¿À¾ž—‚mÝ sˆ’““”•–˜šŸ §¨«­°±µ¶¸¹½¾ÀÁ¼š’s?Û!f…‰•——™ž¤¦ª¬°±¶·¸¹¾¿ÀÁÅÅÇÄ­¥‡€ywa™¶ÆÌÒÉÝŽÔ$·¥‰—™›œŸ¡§¨¯°´¶¸¹¼½ÀÁÃÃÆÆÂ¾§Ÿ„~{y…—ɂԎßÝÌÒ¥™±¼ÕÖÖÕÙ×Ù×€Ù„Ú%×ǽ™•œŸ¢¤ª¬±³¸¹¾¿ÁÂÆÆÇÈÉÉÁ¼©¢‘„‚~›§Ô€ÜÝÜÓÒ¸¥‘³¼ÑÓÓÔÕÖרÚÚÛØÔÂºš˜Ÿ¡¦§®°µ·¼¾ÀÁÅÆÇÈƾ¸£Ž‹†…€‚— ÎÖÜ݃߉ÝÜÛÒÒ±¥‘ª°ÂÄÆÇƒÏÑ/ÏÐÕÖÝÛÎǤŸž ¦¨¯±·º¿ÀÇÈËÌÎÎÌËŵ±§¤š˜’Šˆ‚€„§³ØßáàßÝÜØØÙÛÛÙØÓÓÑГ¥©¯ÁÄÆÇÍ΀Ï>ÐÐÑÑÐÏÏÓÔ×ÕÇÀ¢ž¡£©«±³»½ÂÄÈÉÍÍÎÎËÊÃÀ²®¤¡›™“‘‹‰ƒ|€ž©ÏÖÚÛÝÝßßÜÜÙÙÚÛÛÙØÔÒÒÐ¥ x¨ÆÈÃÂÆÇËÌÍÍ€Î:ÍÈÆ½º¯« Ÿ ¢¨ª°²¹»ÁÃÈÉÍÍËÊÈÇÁÀ»¹±®©¦ ž—•‡…€~€Š¨®½ÂÓרÙÝÝÛÙØÒÒ×ÖÔÐz¥ rœ§ÆÉÃÂÅÆÈÉÈÈ€É8ÈÁ¾´°¦£™™¡£ª¬²´»½ÃÅÊËÎÎÌÌÈÇÂÀ»¹²°©§¡ž™–Žˆ‡€yx~‚™Ÿ­³ËÐÓÕ€×€Ö××ÑÒ×ÖÔÐz¥ m¨ÇÊÈÇÅļº±°®¢ž“‘—˜›¦©®±¹»ÁÃÉËÐÑ€ÔÓÐÎÈÇÀ¾¹¶¯­¥£œš’‰‡zxvuttry¦¯¶€¸ ¹¹¼¿ÍÑÙÚØÕÔÐu¥ m¨ÇÊÈÇÆÅ¹¶¯­7«œ—ˆ†Ž•˜ž¡¨ª±³¹»ÀÂÇÈËËÌÌÈÇÂÀ¼º´²¬ª£¡œš“‘‹‰„‚~|wvqpmt¡ª³€´ µ¶·ºÍÑÙÚØÖÓÐz¥ m¨ÇÊÆÆÉȺ·²±®›‘kehinoqswx}~ƒ‡ˆŒ’’––€—˜€—‚–••““Ž‹‹ˆ‡„‰¯¶¼‚½ ¾ÁÐÔÜÜØÖÓÐz¥ m¨ÇÊÆÆÊɺ·´³°Ÿ•nhjkoprswxz{€ƒ„‡ˆ‹ŒŽ‘’””•–—€˜™™š ™˜˜—••””’‘”²¸€¿ À¿ÀÁÃÓÖÜÝØÖÔÐz¥ m¨ÇÊÅÅÍÌ¿½¹¹€º¹µ±ŸœžžŸ  ¡¢¢¤¤§¨§¨ªª««€®¯¯°³´´µ¶·µ¶¸ÃÅ€Æ€Ç ÈÉÕØØÙÚØÔÐz¥ m¨ÇÊÅÅÎÎÁ¿½¼½»¹¬ª¬¬­­€® ¯¯°²²³³´´µµ€·¸¸¹»¼¼½½¾¾€¿ À¿ÀÀ¿À¿¿À¿ÁÉ‚ÊÌÌËÍÖ€ØÜÚÔÐz¥ m¨ÆÉÇÈÓÔËÊËËÌÍ̓ÊÌÍÍ‚ÎÏÏЃÑÒÒÓÓ…ÔƒÕÖրר׀ØÙÙÛÜÛרâáÖÒz¥ m¨ÅÈÈÉÔÕÍÌÍÍÎÏÐÏ‚ÐÑÒÒƒÓÔÔƒÕÖ×Ø×‚ØƒÙÚÚ…ÛÜÜÝÜÛÖ×äãÕÐz¥ m¨ÄÈÎÏÕÕ΀ÍÎ΂ÏÐÏÐÑÒÓÔÕւר×؃ÙÚÚ…ÛÜÜ„ÝÜÔÕåãÒÍu¥ m¦ÄÉÎÐÖÕ΀ÍÎ΀ÏÐÏ€ÐÑÒÓÔÕÖ×Ø×‚ØƒÙÚÚ…ÛÜÜ„ÝÜÔÖåãÒÌu¥ mŸ¨ÄÉÒÔÑÐÎÍÎ΂ÏÐÏÐÑÒÓÔÕւר×؃ÙÚÚ…ÛÜÜ…ÝÞÝÕ×åãÒÌu¥ mŸ¨ÄÉÔÖÐÏÎÍÎ΀ÏÐÏ€ÐÑÒÓÔÕÖ€×Ø×€ØƒÙÚÚ…ÛÜÜ…ÝÞÝÕÖåãÑÌu¥mŸ¨ÄÉÕÖς΂ÏÐЂÑÒÒƒÓÔÔƒÕÖւר×؃ÙÚÚ…ÛÜÜ…Ý ÞÞßÞ×ÙåãÒÌu¥mŸ¨ÄÉÕÖÎÍÎÏÐπЃÑÒÒƒÓÔÔƒÕÖÖ€×Ø×€ØƒÙÚÚ…ÛÜÜ…Ý ÞÞßÞרåãÑÌu¥ mŸ¨ÂÇÔÕÎÍÎ΂ÏÐÏÐÑÒÓÔÔƒÕÖÖ„×ØØ‚ÙÚÚ…ÛÜÜ…Ý‚ßÞØÙáßÐÊu¥ mŸ¨ÂÇÓÔÎÍÎ΀ÏÐÏ€ÐÑÒÓÔÔƒÕÖÖ€×Ø×€ØƒÙÚÚ…ÛÜ܅݃ߨÙáÞÑÌu¥mŸ¨ÀÅÐÑπ΀ÏÐÏÐÑÒÓÔÕÖÖ„×ØØ‚ÙÚƒÛÜ܃ÝÞÞ…ßÙÙßÝÔÐz¥mŸ¨ÀÅÐÑÏ€ÎÏÐÏ€ÐÑÒÓÔÕÖÖ€×Ø×€ØƒÙÚƒÛÜ܃ÝÞÞ‚ß àßßÛÚÞÜÕÒz¥mŸ¨ÀÅÎÏÏ΂ÏÐÏÐÑÒÒƒÓƒÕ†×Ø×ØÙڃۅ܃ރßÛÛØÖ×Ôz¥mŸ¨ÀÄÎÏÎ΀ÏÐÏ€ÐÑÒÒÓÒÒ‚×ØØˆÙÚۃ܅݀ßàßààßà€ßÛÚØÖÖÔz¥mŸ¨ÀÄ΃ÏÐÏÐÑÒ€ÓÒÌÎÞá‰ä›åææàßÝÝßßÝÛ×Õ×Õz¥mŸ¨ÀÄÍ΀ÏÐÏ€ÐÑÒ€ÓÒÌÎãçè¦éêéåãÞÝßßÝÜÖÔ×Õz¥mŸ¨¾ÃÍ΂ÏÐЂÑÒÒÓÔÔÖÛ÷¤üûúùöóçäÙØßÞÖÔØ×z¥mŸ¨¾ÃÍ΀ÏÐÏЃÑÒÒÓÔÕ×Üû¤ÿþüüøöêæÚØÞÝÖÔØ×z¥mŸ¨ÀÄÎÏÐÏÐÑÒÒƒÓÔÔ×Üú¢ÿþüüúúøöðìßÝØ×ÖÔØ×z¥ mŸ¨ÀÄÎÏÏÐÏ€ÐÑÒÒƒÓÔÕ×Üû¢ÿþüüúùø÷ðíâÞØ×ÕÔØ×z¥mŸ¨ÀÄÎÏÐЂÑÒÒÓÔÔÕÖ×Üû¢ÿþþüüúúø÷ø÷ñðêçÞÛÒÐØ×z¥ mŸ¨ÀÄÎÏÏÐÏЃÑÒÒÓÔÔÕÖ×Üû¢ÿþþüüúúø÷÷öðïîëáÞÓÑ×Õz¥ mŸ¨¾ÃÎÏÏÐÏÐÑÒÒƒÓÔÔÕÖ×Üû¢ÿþþüüúúø÷÷õððõõêçÜ×ÔÐu¥mŸ¨¾ÃÎÐÏ€ÐÑÒÒƒÓÔÔÕÖ×Üû¢ÿþþüüúúø÷÷õïðööïëßÛÓψ8¤ mŸ¨ÀÄÎÏÏÐЂÑÒÒÓÔÔ€ÕÖ×Üû¢ÿþþüüúúø÷öôíîüý÷õêæØÓ¹«Ÿ£mŸ¨ÀÄÎÐÏЃÑÒÒÓÔÔ€ÕÖ×Üû¢ÿþþüüúùø÷õôíîüþøöïêÝÙúÉÚ¢mŸ¨ÁÅÎÐÏÐÑÒÒƒÓÔÔ€ÕÖØÝû¢ÿþþüüúúø÷õóêëýÿþý÷õéæßÛ×Ѷ¡mŸ¨ÁÆÎ€ÐÑÒÒƒÓÔÔ€ÕÖØÝû¢ÿþþüüúùø÷ôóéêýÿþþøöïëãáÖÍáÚ mŸ¨ÄÈÎÐÏÐÑÒÒÓÔÔ‚ÕÖØÝû¢ÿ þþüüúùø÷ôóéêý€ÿ þý÷õéçÞÚÐÆ¶ŸmŸ¨ÄÉ΀ÐÑÒÒÓ„ÕÖØÝû¢ÿ þþüüúúø÷õòéêü€ÿ þþøöïêáßÑÊÒÚžmŸ¨ÁÆÎÐÑÒÒƒÓ××ÕÖרÝúþ£ÿ üüúùø÷ôòæçü‚ÿ þý÷õéæÞÚÍÆ¶mŸ¨ÁÆÎÐÑÒÒ‚ÓÔØØÖ€ÕÖרÝúþ£ÿ üüúúø÷õòåæü‚ÿ þþøöïêàÞÑÊÒÚœmŸ¨ÃÈÎÐÑÒÒÓÔÖÞÞ×€ÕÖרÝúþ£ÿ þþúúø÷÷ôâãü„ÿ þý÷õéæÝÙÊÁ¶›mŸ¨ÃÈÎÐÑÒÒÓÔÖßß×€ÕÖרÝúþ£ÿ þþúúø÷÷ôâãø„û úùõóëçÝÚÌÆÃ¶šm¢ªÄÉÏ€ÑÒÓ ÔÖßß×ÕÖÖרØÝúþ£ÿ þþüüùø÷ôãáààáââãáàÞÜÔÒÁ¹Ô™m¢ªÄÉÏ€ÑÒÓ ÔÖßß×ÕÖÖרØÝúþ£ÿþþüüùøøõæãààßßààßàƒáàÝ×Ôſƙm¢ªÄÉÏ€ÑÒÒÓ€Ô Ößß×ÕÖÖרØÝú¨þúùø÷ôôñðïîííììëëêéèâÞÏÊœ™m¢«ÄÉЀÑÒÒÓÔÔÕ×ÞÞ×ÕÖÖרØÝú¨þúúø÷÷öôôññðïðïííìì€ëêæâÐÌž™mš¦ÅÊЀÑÒÒÓÔÕרÝÜ×€ÖרØÝú¨þ üüúùø÷õõóóðïð€ïîïïëèÖÑ™mš¦ÆËЀÑÒÒÓÔÕØÙÛÚ×€ÖרØÝú¨þ üüúúø÷÷öóóññ€ð ïðïïðïïíéØÓ‰™mš¦ÇÌÐÑÒÓÔÕØÙØ××րרØÝúªþ üüùøø÷ööôôóóññ‚ðïíéØÒ…™mš¦ÇÌÐÑÒÓÔÕ€Ø×ÖրרØÝúªþ üüúúø÷ø÷ôôóóòò‚ñðíéØÒ‚™mš¦ÈÍÐÑÒÒÓ€ÔÕÙÙÖÕÖրרØÝùý«þüüúúø÷ø÷ƒõôôõôðìÙÔ‚™mš¦ÈÍÐÑÒÒÓ€ÔÕØØÖÕÖրר×Üùý«þüüúúùùø÷÷€ö õõôôõõðìÛÔ‚™mš¦ÊÏÐÑÒÒÓÔÔÕÕÖƒ×ÖÛø°ýüüùùø÷ø„÷òîÜÕ‚™mš¦ÊÏÐÑÒÒÓÔÔÕÖÖƒ×ÖÛøšý úùòðïîïðôöü‚ýüúï€íììêêé ìíôö÷÷õñÜÕˆ™m˜¤ËÐÑ€ÒÓÔÔÕÖÖ×ÒÓ×Üù™ý úéß±§“—¿Ìõü€ýüöè›…Ž ”§±ÞèöùøóÝÕ‚™m–¤ËÐÒÓÔÔÕÖÖ×ÒÓØÝù˜ý*ùôÜС—ƒ€‡¯½ìõüýýüöè›…ƒ‚„Ž’ž§ÑÛñöøõÝÕˆ™m–¤ËÐÒÒÓÔÕÕÖ×ÑÒØÝù—ýúæØ˜Œƒ€€€†Ž¼Ëö€ýüúê߯¡ƒ‚›©àéãÛ¯¤‘—ÑßùùÞÖˆ™a–¤ËÑÒÒÓÔÕÕÖר××ÑÑØÝù—ýøÜÍ‘ˆŒŽŽ‰‡€…¯¿ô‚ýøî·§„„£³ðùòé»­†‰ÄÓ÷ùÞÖˆ™a–¤ËÑÒÒÓÔÔÕÖÖƒ×ÐÑØÝù—ýò°§¯·Þåèä̾‡€ïƒýôºª…‡¾ÎöýûùìÜ‚ŸïøÞÖˆ™m–¤ÌÑÒÒÓÔÔÕÖրר×ÖÑÑ×Ýù—ý󳬽ÆîõøôÜ̉€†–ïƒýó·§„‰ÆÖøýýüô䀆–îøÝÕˆ™ m–¤ÍÒÕÕÑÑÓÓÔÔÕÖրר×ÖÑÑ×Ýù—ýüòñôõûüýüõå‚’îƒýð ŒÞîûýýüõ冖íøÝÕˆ™ m˜¦ÍÒÖÖÐÐÓÓÔÔÕÖրר××ÑÑØÝù†ý ùøòðïîîïõ÷üŒýù鎄”î‚ýúìš‹‚äóüýýûðàŒ€Ššî÷ÝÕ‚™ mš¨ÐÕ×ÖÏÎÓ€ÔÕÖÖ€× Ø×ÖÑÑ×Ýøüûû‚ü ùãÙ²¨”‘•œÄÑöŒüù鎂•¥ðüúìÝ‚’¡îû€ü öÐÀˆ„¦¶ò÷ÝÕ‚™ mš¨ÐÕ×ÖÎÍÓ€ÔÕÖÖ€× Ø×ÖÑÑÖÜøüûû€ü ûõðÔʨ ’‘–·Äô‹üû÷烟¯ñüùæÖ‹‚˜¨ðüúùõíÃµŠŠ³Âô÷ÝÕ‚™ mŸ«Ó××ÖÍÍÓÔÕÖ€× Ø××ÑÑ×Üøüûû€ü õ˽‘¯ºÜàÔÉ”™î‹üùç׋‰ÆÖ÷üõ̼‡…°Àñøïèʾ‹©äïùöÜÔ‚™ mŸ­Ó××ÕÍÍÓÔÕÖר×ר×ÐÐ×Ü÷üûûüûöí¼®ŒŽ¸Æëí×Ê‘–î‹üøÝÎÒáøüôÄ´†…­»ãèߨ¼²«¸î÷úöÜÔ‚™ m¤±Ó×ÓÑÍÍÓÔÕÖÖƒ×ÖÕÐÐÖÜ÷ü€ûõÐÁŒ°¾êóù¦²ñ‹ûñ¸®®·îøúû𫛃…‡ŽŒŒ—ÆÒêðöøúõÜÔ‚™ m¤±Ó×ÒÐÎÎÓÔÕÖրר××ÖÕÐÐ×Ü÷üûûùñôˆ‰¾Íôûûï© ´Àò‰ûúöë°©»Æó‚û úí¤•‚Ž€‰ ‘ÇÔñ÷øùúõÜÔ‚™ m¤±ÓÖÐÏÏÐÔÔÕÖրר××ÕÔÑÑ×Ü÷üûùïᕉœäòúûûùïîðòú‰ûõÔɬ±çòúûúó䑃‡”ÝéæâÏÄ—’ÜéöùúõÙÑ‚™ m¤¯ÓÖÎÎÐÑÔÔÕÖրר××ÕÔÑÑ×Ü÷üûøçØŒƒ•¤íùûú÷ðÉÁ³ºñú‚ûùîÞ‹›ìùöòßÔ¡–Š’ÏÞõùúõÙÑ‚™ m¤¯ÑÔËËÒÓÔÔÕÖրר××ÑÐÓÓÖÛõúúòÄ´‡ˆ·Çó‘úöÝÓ²´åïøƒúõ×lj„£³î÷ø÷óï×ÉŠ„ž­íøùôØÏ‚™ m¤¯ÑÔËËÒÓÔÔÕÖրר×ÖÑÐÓÔÖÛõúúñºª…ˆÁÑôúùöðÔ̵»ïø„úôξˆ…«»ïø õãÓ‹“£ëøùôØÏ‚™m¤¯ÐÓËËÓ€ÔÕÕրר×ÖÏÎÖ×ÖÛõúùì¡‘‹Öæ÷úöÞÔµ·åï÷ù„ú𶦄ˆÁÑòø ÷óã‚’éøøó×΂™m¤¯ÐÓÊÊÓ€ÔÕÕÖררØÖÎÎÖ××Ûõúù뜌€ŒÛëøúùõðÕ͸½ïø…úù„ŠÉÙóø ÷ôä€éøøó×΂™m¤¯ÎÒÉÉÓÔÕրר×ÖÎÎר×Ûõúùê‘ç÷ùúõÚѸ»çðø†úøê—‡àðöø õêÚ‹€‹›êøøóÕË‚™m¤¯ÎÒÉÉÓÔÕÖררØÖÎÎר×Ûõúùêç÷ù€úøöññ÷ù‚úùôîÒË»Áðøùøóñïðøúúùôå’„ƒ‘äò‚÷ ôàÑŠ‘ ë÷÷òÓË|™m¤¯ÎÑÉÉÒÔÕÖրררØÖÑÑØÙÖÚõúùê•…Œßï÷ùù÷ðç·¸ìõøù-óÎÆ¾Ãéñøøôį́¯íøøóÛËŠƒ—¦ìø÷øø÷øî·¨„†±Áð÷øóÓË‚™m¤¯ÎÑÉÉÒÔÕÖÖ€×=Ø×ØØ×ÑÑÙÙÖÚõúù뙉€‹×çõ÷öóãÚ²´ëõøùøöñé¾·³¹âééèäݼ³¡©ì÷öñÏÀˆƒ¬í€÷ôóì⪇‹¾Ìñ÷öñÓË|™m¤¯ÎÑÉÉÒÔÕÖÖ€×)Ø×ØÙØÑÑÙÙÕÙõúøí²¢ƒ…°¿ìòåÛª§ÉÔòøùøøðÀ²Ž‡†‡€Ž$Œ‡Ž¾Ìñöëà§™‚…®½ìôòïÞÕ®£ˆ†›¨äïö÷öñÓË|™m¤¯ÎÑÈÈÒÔÕÖÖ€×%Ø×ØÙØÒÒÙÙÕÙõùøï¼®Š‰¥±ÞäÙѨ¨ÒÝõùù÷íã±£„…~#ŠÇÔëìÜÑ›…ª·ßåãàÑȤœŠŒ©¶ìõ÷÷öñÓË|™m¤¯ÎÑÇÇÒÔÕÖÖ€×%Ø×ØÙØÖÖÙÙÕÙôøøõèÞªŸ‹‰‘•¨±ÔÝðô÷øøí²£ˆƒ…~…“á迳’‹‚€…‡ŒŽ‘”ž¤¿Èæìõ€öõðÒÊ|™m¤¯ÎÑÇÇÒÔÕÖÖ€×Ø×ØÙØ××ÙÙÕÙôø÷õð踭•‘’•«µßèõ÷í±¤‡Ž”¡çìÀ³“† Ž”˜¨°ÍÖñõöõðÒÊ|™m¤¯ÍÐÉÉÒÔÕÖրררÙÙØØÚÙÕÙôø÷öõôîíèìíóô‚÷öìêè‡çèèêõõïíè‡çèèéìíðñƒöõðÐÇ|™m¤¯ÌÐÉÉÓÔÕÖրררÙÚÙÕÙôø÷¼öõðÐÇ|™m¤­ÊÎÌÍÓÔÕÖրררÙÚÙÔØôøö¼õóîÏÆ|™m¤­ÉÍÎÏÓÔÕÖÖ‚× Ø×ØÙÙÚÙÔØôøö¼õóîÏÆ|™m¤­ÆËÑÒÔÔÕÖÖ€× Ø××ÖÖרÚÙÓ×ôøö¼õòíÌÃ|™m¤­ÆËÒÓÔÔÕÖրר××ÖÕ×€ØÓ×ôøö¼õòíÌÃ|™m¤­ÉÎÓ€ÔÕÕ××ÖÖ…×ÖÖÕÕÑÖó÷õ¼ôòíËÂ|™m¢«ÆËÐÑÐÒ ÓÓÔÔÕÕÖÖÒÒ€ÐÕó÷õ¼ôòìËÂv™a–ž´¸»»º¹´³´´µ¶¸¹»¼ÄÆËË¿¹ºÌÕò÷õ¼ôñëËÂv™YŒ“ª­®®­¬§§¦§¨¨¬¬®°µ·¿¾µ³«®ÈÒò÷õ¼ôñëÊÀv™6Bad``ƒ^`aaccddcbap¼Íð÷ô¼óðêÉ¿vš)KNI‹JLKK`¸Êñ÷¼óòðêÇ¿vœH¼Íñ÷ó¼òðêÉ¿v³A¾Ìñ÷¼òñðêÇ¿v³dÉÒñ÷¼òñïéżv³nÊÒñ÷¼òñïéżv³|ÈÑñ÷¼òñïéÄ»v³|ÈÑñ÷¼òñïéÄ»v³|ÈÑñ÷¼ñðíçùv³|ÈÑñ÷¼ñðíçÁ¸v³|ÇÐðö¼ðïíçÁ¸v³ÆÏò÷œðïðœïëåÀ¶o³yÃÍôúõôƒó…ò…ñŒðïð„ïƒî…íìëåÞ¼³i³x»Æðôðïîíí…ì…ë‰ê€éèé„èƒç…æåäÞÙµ«k³D{ŒÇÌÓÓ…ÒÑуÐÏσÎÍÍ€ÌÊÌÊ…ÉƒÈÆÅĀüµ€o4³1hzµ½ÂÄÂÁÂÁƒÀ¿¿ƒ¾¼¼ƒ»…º‚¹¸¸€·µ´³¬¦p\(´!#7;6868š6˜3431!ÿÿÿ‡¯ ¿ÒÜâíìèäÙÖÆÆ¶íÿ¿¿ÊÌÓÔßáÙÙÐÍÄÀÁ¼ªªê¿ÊÈÎ˼º³€²±±¶·ºº¬¦ªç²¶¾Àõ³¬«¬¬­®´µ·¶¯¨™™åU™³¯¡‹Ž’”˜™žŸ¤¥©ª­®¢ž™ãU”­«œ™ˆ†ˆŠ’—˜žŸ¢¤¨©°°§¦Œmâ‹¢Ÿ”’€Ž”–› ¡¦§ª¬°±¶µ²±|ßqˆ ž€’—˜Ÿ £¥¨©®¯²´¸··µ“…sßx•”“”“”–—œž¢¤¨©®¯²³¶·º»¿À¾ž—‚mÝ sˆ’““”•–˜šŸ §¨«­°±µ¶¸¹½¾ÀÁ¼š’s?Û!f…‰•——™ž¤¦ª¬°±¶·¸¹¾¿ÀÁÅÅÇÄ­¥‡€ywaÂfmª²¦ª¼Ž´$£–‰—™›œŸ¡§¨¯°´¶¸¹¼½ÀÁÃÃÆÆÂ¾§Ÿ„~{yª“´±¥¥¥fƒ“¯±²±´…³µ³µ‚¶&µ«¦–•œŸ¢¤ª¬±³¸¹¾¿ÁÂÆÆÇÈÉÉÁ¼©¢‘„‚~€‹“²¶¸…¹»»…¼­«›¥m¨ª­­ƒ¯ƒ±‚³²§¥˜˜Ÿ¡¦§®°µ·¼¾ÀÁÅÆÇÈƾ¸£Ž‹†…€Š­²·¸ƒº¸¸··¸¸„º¸­«¥m|’”›¡£9¡¢¥¦¨§¤¢šš ¦¨¯±·º¿ÀÇÈËÌÎÎÌËŵ±§¤š˜’Šˆ‚€~€–ž¹¾¾½½¼¹¸³²¬¬­€®­©©§¦x¥_|€‘˜š€ž5ŸŸ ¡ ŸŸ¢£¥¥ Ÿšš¡£©«±³»½ÂÄÈÉÍÍÎÎËÊÃÀ²®¤¡›™“‘‹‰ƒ|~–³¸¸€¹¸·³±®‚­®®­­¨§¨§v¥ Pt{‘‘’—˜—˜™˜˜™˜3šŸ¡¨ª°²¹»ÁÃÈÉÍÍËÊÈÇÁÀ»¹±®©¦ ž—•‡…€{|‚‘”›ž¨ª®¯±±¯€®­¬¨¨­®§¥d¥Lsz’€‘••”H••””––•–—™¡£ª¬²´»½ÃÅÊËÎÎÌÌÈÇÂÀ»¹²°©§¡ž™–Žˆ‡€ywxz…‰“¡¤¨©®®ªª««¬¬¨¨®­¨¦`¥ Hry“‘Šˆƒ€‚ƒ‚€Š”–›¦©®±¹»ÁÃÉËÐÑ€Ô/ÓÐÎÈÇÀ¾¹¶¯­¥£œš’‰‡zxutqpor‡Œ‘’””““”–¤§­®®­¨¦`¥Hry“€‘‰‡€8{{‚„‹“•œž¥§®°¶¸½¿ÄÆÇÈÉÈÆÄ¿½¸¶°¯¨¦¡Ÿ˜–‘Žˆ†€yxtronhl„‰‘ ’”¤¨®¯¯­¨¦`¥+Ht{‘”–•‰‡ƒ‚ƒƒ„‚uoWSWX[]_`deijnorswxyz}}~€~}{{zzyxwvttponq‹•– ——š¨«°°­««©`¥ Ht{‘”—–‰‡…„€… ƒwqUQTUWX\\^_bcfgijmnpqttuvwxyyzz{||ƒ{ yyxwvuswŽ“—˜™ šœ©¬¯¯®¬«©`¥*Ht{’•‘’—–‹‰‰ŠŠ‹‹ˆ…yvwxxyzz||~~€€„„……†‡‡ˆŠŒŒ€Ž†€‘’œ€Ÿ  Ÿ ¡¢¬­¯°¯®¬©`¥ Ht{’•‘’™˜Ž€ŒŽŽŒ€‚‚ƒƒ„„€‡ˆˆ‰‹‹ŒŽ€’”–‚—˜—˜™šŸ ¡¡¢¢££¤¥­®®¯±°¬©`¥ Ht{’•’“žž–•€—˜˜†™ƒœ žžŸ Ÿ ¡¡¢¤¥¥¦§¨§€¨©©ª¬¬­‚¯€°­®¸·®ª`¥Ht{’•“”žž€˜€™›ƒŸ Ÿ€ ¡¡¢¢£¤¤¥€§¨§¨©ªª«¬¬­€¯°¯°ƒ±²±­®¹¸­©`¥ Ht{‘•—™ŸŸ™˜™™ƒ›žž€Ÿ  €¡ƒ£¥‚§¨§¨©©ªª«¬¬­‚¯°¯°±€³²¬­¼»ª¥`¥Ht{‘•™šŸŸ™ƒ›žŸŸ€ ¡ƒ£¥€§¨§¨©ªª«¬¬­€¯°¯°ƒ±€³²¬­¼ºª¥[¥Ht{”žŸœœ™›žž€Ÿ  €¡ƒ£¥‚§¨§¨©©ªª«¬¬­­®®‚¯°¯°±‚³²­®¼ºª¥[¥Ht{•žŸœ™›žžŸ Ÿ ¡ƒ£¥€§¨§¨©ªª«¬¬­­®®€¯°¯°ƒ±‚³²­®¼ºª¥[¥Ht{Ž” ¡š€™›ƒ€Ÿ  €¡¢¢£¥¦¦‚§¨¨©ªª«¬¬­­®®‚¯°¯°±ƒ³´³®¯¼ºª¥[¥Ht{Ž” ¡š€™›ƒŸ Ÿ ¡¢¢£¥¦¦§¨§€¨©©ªª«¬¬­­®®€¯°¯°ƒ±ƒ³´³¯°¼»ª¥`¥Ht{“žŸš™ƒ›žž€Ÿ  ¡¢¢£ƒ¥‚§¨¨€©«¬¬­‚¯°¯°±ƒ³€µ´°±¸¶ª¥[¥Ht{’žŸ™™ƒ›žŸŸ€ ¡¡¢¢£ƒ¥§¨§€¨©«¬¬­€¯°¯°ƒ±ƒ³µ°±¸¶ª¥`¥Ht{Œ‘žŸ™™›žž€Ÿ  €¡ƒ£¥‚§¨¨€©«¬¬­‚¯°¯°±³´´µ¶¶²²¶´¯¬`¥Ut{‘ž™™›žžŸ Ÿ ¡£¤¤€¦§§‚¨©©ªª¬­­€®¯¯‚°±²²´ƒµ¶¶²²µ³°®`¥Ht{’š‚›ƒ€Ÿ  Ÿ ¡¡¢¢££¦§©€ªƒ¬‚¯°¯°±²²ƒ³µµ¶¶‚·¸·¸¸··€¶··²²±¯°®`¥Ut{Ž’š‚›ƒŸ Ÿ€ ¡¡¢¢¤¥­¯±€²ƒ´ƒ¶·¸·€¸¹¹ƒº¼ƒ½¾¾¿¿»º¸€·²²°¯°®f¥Ut{Ž’˜™›žž€Ÿ   ¡¢¢£¤­´ÕÛŠßàß’àƒáâáÛÖÀ»·¶´´°¯°®f¥Ut{Ž’˜™›žžŸ Ÿ ¡¡¢¢£¥±¹àçè¦éêéä߯À¹·µ´°¯¯®f¥Ut{‘š€›ƒ€Ÿ  €¡€£¨ÃÎö¤üûúùõòâÛ½·¸¶°¯±°f¥Ut{‘š€›ƒŸ Ÿ ¡€£¨ÇÒù¤ÿþüüøõê⽸¶±¯±°f¥Ut{Ž’š€›žž€Ÿ  ¡¢¢€£¨ÉÔù¢ÿþüüúúøöðìÚÔ¼¶±¯±°f¥Ut{Ž’š€› žžŸ Ÿ ¡¡¢¢€£¨ÉÔù¢ÿþüüúùø÷ðíáÚÀ»±¯²°f¥Uw}Ž’š›žž€Ÿ  €¡£¤©ÉÔù¢ÿþþüüúúø÷ø÷ñðêæÚÓ·²²°f¥Uw}Ž’š›žžŸ Ÿ ¡£¤©ÉÔù¢ÿþþüüúúø÷÷öðïîëßÙ½·³°f¥Uw}“š›žž€Ÿ  ¡¢¢£¥ªÉÔù¢ÿþþüüúúø÷÷õððõõêæØÐº´f¥Uw}“š› žžŸ Ÿ ¡¡¢¢£¥ªÉÔù¢ÿþþüüúúø÷÷õïðööïëÞ׿·z8¤Uw}‘”œ€žž€Ÿ  €¡£€¥ªÉÔù¢ÿþþüüúúø÷öôíîüý÷õêåÖѶ«Ÿ£Uw}‘”œ€žžŸ Ÿ ¡£€¥ªÉÔù¢ÿþþüüúùø÷õôíîüþøöïêÝÙúÉÚ¢Uw}‘”œ€žž€Ÿ  ¡¢¢£€¥ªÉÔù¢ÿþþüüúúø÷õóêëýÿþý÷õéæßÛ×Ѷ¡Uw}‘”œ€ žžŸ Ÿ ¡¡¢¢£€¥ªÉÔù¢ÿþþüüúùø÷ôóéêýÿþþøöïëãáÖÍáÚ Uw}”—œ€€Ÿ  €¡£¥¦«ÉÔù¢ÿ þþüüúùø÷ôóéêý€ÿ þý÷õéçÞÚÐÆ¶ŸUw}”—œ€Ÿ Ÿ ¡£¥¦«ÉÔù¢ÿ þþüüúúø÷õòéêü€ÿ þþøöïêáßÑÊÒÚžUw}’•œžž€Ÿ  ¡¢¢££§§¥§¬ÉÔøþ£ÿ üüúùø÷ôòæçü‚ÿ þý÷õéæÞÚÍÆ¶Uw}’•œžžŸ Ÿ ¡¡¢¢£¤§§¦€¥§¬ÉÔøþ£ÿ üüúúø÷õòåæü‚ÿ þþøöïêàÞÑÊÒÚœUw}”—œ€Ÿ  €¡€£¤­­¦€¥§¬ÉÔøþ£ÿ þþúúø÷÷ôâãü„ÿ þý÷õéæÝÙÊÁ¶› Uw}”—œŸ Ÿ ¡€£¥®®§€¥§¬ÉÔøþ£ÿ þþúúø÷÷ôâãø„û úùõóëçÝÚÌÆÃ¶šUy•˜ž€Ÿ  ¡¢¢€£¤®®¦¥€§¬ÊÕøþ£ÿ þþüüùø÷ôãáààáââãáàÞÜÔÒÁ¹Ô™Uy•˜žŸ Ÿ ¡¡¢¢€£¥®®§¥€§¬ÊÕøþ£ÿþþüüùøøõæãààßßààßàƒáàÝ×ÔſƙUy•˜žŸ Ÿ ¡¡¢¢€£¥®®§¥€§¬ÊÕø¨þúùø÷ôôñðïîííììëëêéèâÞÏÊœ™Uy•˜žžŸ Ÿ ¡¡¢¢££¤¥®®¦¥§¨§¬ËÕø¨þúúø÷÷öôôññðïðïííìì€ëêæâÐÌž™Ut}•˜€Ÿ  €¡£§¨««¨§¬ÊÕø¨þ üüúùø÷õõóóðïð€ïîïïëèÖÑ™Ht}•™Ÿ Ÿ ¡€£ ¤§¨ª©¨§§¨§¬ËÕø¨þ üüúúø÷÷öóóññ€ð ïðïïðïïíéØÓ‰™Ut}–™€Ÿ  ¡¢¢€£ ¤§¨¨§¨§§¨§¬ËÕøªþ üüùøø÷ööôôóóññ‚ðïíéØÒ…™ Ut}–™Ÿ Ÿ ¡¡¢¢€£¤§§¨§¨§¬ËÕøªþ üüúúø÷ø÷ôôóóòò‚ñðíéØÒ‚™ Ht}—›Ÿ Ÿ ¡¡¢¢€£¤©©§¦€§¨¨­ËÕ÷ý«þüüúúø÷ø÷ƒõôôõôðìÙÔ‚™ Ut}˜›Ÿ Ÿ ¡¡¢¢€£¤¨¨§¦§¨§¨©­ËÕ÷ý«þüüúúùùø÷÷€ö õõôôõõðìÛÔ‚™Ut}™œŸ  €¡£¥¥¦¦‚§¨§¬ÈÒ÷°ýüüùùø÷ø„÷òîÜÕ‚™Ht}˜Ÿ ¡£¥€§¨§§¨¬ÇÒ÷šý úùòðîíîïôöü‚ýüúï€íììêêééèèìíôö÷÷õñÜÕˆ™ Ut}šŸ  ¡¢¢£¥€§€¨¦ªÊÕ÷™ý úçÜ®£ŽŒ’™¼Éôû€ýüõ畆ˆ ¢­ÜçöùøóÝÕ‚™ Ht}™žŸ ¡¡¢¢£¥ §¨§¨©¨¥©ÊÕ÷˜ý*ùôÙÌž“~|‚‰¬ºëôüýýüõ敆~xx}†ˆ‹™¢ÎÙñöøõÝÕˆ™ Hr{› Ÿ ¡¡¢¢£¥¥‚§€¨¥©ÊÕ÷—ýúäÖ“†~|xxyzˆ¹Èö€ýüúê߬ž}|—¥àéáØ­¢Œ“ÐÞùùÞÖˆ™ Hr{› Ÿ ¡¡¢¢£¥¥€§ ¨§¨©¨¥©ÊÕ÷—ýøÚËŒ‚‡ˆ‡‡„‚y«»ô‚ýøî³£~} °ïùñ踩ƒ†ÁÑ÷ùÞÖˆ™Hr{›  €¡£¥€§ ¨§¨©¨¤¨ÊÕ÷—ýò¬¢¬´Ýåçãʼzˆ˜ï‚ýüò¸¨~»ËöýûùëÛ†zŒœîøÞÖˆ™Ht› ¡£¥€§ ¨§¨©¨¤¨ÊÕ÷—ýò°¨ºÄíõ÷óÚʃy‘îƒýó´¤~‚ÄÔ÷ýýüôä‡yƒ“íøÝÕˆ™Ht}› ¦§  £¥€§ ¨¨©©¨¥©ÊÕ÷—ýüòñôõûüýüôä‡x}íƒýz†Ýíûýýüõå‡y€íøÝÕˆ™ Utœ¡§¦¡ ¢€£¥€§ ¨¨©©¨¥©ÊÕ÷†ý ùøòðîíîïõ÷üŒýøèˆxí‚ýúë–†|Šâòüýýûðà†y…•í÷ÝÕ‚™ Ut ¤¨§ Ÿ¢€£¥€§ ¨¨©ª©¥©ÊÕöüûû‚ü øâ×®¤—ÂÏöŒüùéˆ{‘¡ïüúëÛˆ|íû€ü öξ‚~£³ò÷ÝÕ‚™ Ut ¤¨§Ÿž¢€£¥§¨§¨©©ª©¥©ÊÕöüûû€ü ûõïÓȤœ‹Œ’³Áô‹üû÷ç‡|›«ðüùäÔ…{”¤ïüúùõíÀ±…„°Àó÷ÝÕ‚™ Uyƒ¤§§¦¢£¥‚§ ¨¨©ª©¤¨ÉÔöüûû€ü õȹŒŠ«·ÛßÒÆ•í‹üùæÖ…‚ÅÕöüõʺ­½ð÷îçǺ‹†™¦áíùöÜÔ‚™ Uy…¤§§¥¢£¥€§¨§¨©©ª©¤¨ÉÔöüûûüûöí¹«†‡¶ÄêíÕÇ’í‹üøÜÌ‹‹ÐàøüôÁ±€ª¸âçÞ׸­Œ‹§µìöúöÜÔ‚™ U{…¤§¢¡žž¢£¥€§ ¨§¨©©¨§¥©ÈÓöü€ûôοˆ†­»êóùí¡–¡®ð‹ûñ´ª«´í÷úûï§—|y‡ ‰’ÄÐêðöøúõÜÔ‚™ U{…¤§¡ ŸŸ¢£¥€§¨§¨©¨¨§¤©ÈÓöüûûùðÀ°ƒºÊôûû亂°¼ò‰ûúõꬥ¸Ãó‚ûúí |{†‡ˆ‡ƒƒ„ÄÒñ÷øùúõÜÔ‚™U{…¢¤€Ÿ ££¥€§¨¨©©¨¨§¤©ÈÓöüûùïà’†Š˜äòúûûùïîðòú‰ûõÓȨ­æñúûúóã‹}ÝéåáÍ‘‰šÚèöùúõÙÑ‚™ U{…¡£žž ¡££¥€§¨¨©©¨§¦¤©ÈÓöüûøç׉‘¡ìùûú÷ðÈ¿°·ïù‚ûùîÞ‡{†–ìùõñÝÑ’…ŽÍÜõùúõÙÑ‚™U{…ž¡¢€£¥€§¨¨©©¨¥¤§¬ÇÒôúúòÁ±€€´Äò‘úõÜÑ­°äïøƒúõÕŃ}Ÿ¯í÷ø÷óïÖÇ„}šªìøùôØÏ‚™U{…ž¡¢€£¥§¨§¨€©¨¥¥§¬ÈÒôúúð·§~‚¾ÎôúùöðÑȱ·îø„úóͽ~§·îø ôãÓ„{ŽžëøùôØÏ‚™U{… ¢€£¥¥¦¦€§¨¨©ª©¡¡¨­ÈÒôúùì{…Öæ÷úöÜÒ²´åï÷ù„úð²¢~‚ÀÐòø ÷òâ‡x}èøøó×΂™U{… ¢€£¥¥¦¦§¨§¨©©ª©¡¡©®ÈÒôúùë—‡z†ÛëøúùõïÓË´ºïø…úùíªš|ƒÈØóø ÷óã‡x|Œèøøó×΂™U{… šš¢£¥€§¨§¨©©ª©¢¢«°ÈÒôúùéŒ|x‡ç÷ùúõØÏ¶¹æï÷ù…úøé“ƒ|‰Þîöø õéÙ…y†–éøøóÕË‚™U{… šš¢£¥€§¨§¨©©ª©¢¢«°ÈÒôúùé‹{x‡ç÷ù€úøöññ÷ù‚úùóíÏǺÀïøùøóñîïøúúùô䎎âñ‚÷ ôßЄzœê÷÷òÓË|™U{… ››¢£¥€§!¨§¨©©ª©¤¤«°ÇÑôúùéx†Þî÷ùù÷ïå³´ëõøù-òÍÅ»Àéñ÷øóìÉ¿¤«íøøóÚʃ{“¢ëø÷øø÷øî³¤~¯¿ï÷øóÓË‚™U{… ››¢£¥€§?¨§¨©©ª©¤¤«°ÇÑôúùꔄy…Öæõ÷öóâØ®°êõøùøöñè½¶°·âééèãܹ°¥ì÷öñο‚|™¨ì€÷óòìá§™€…ºÉñ÷öñÓË|™U{… ™™¢£¥€§S¨§¨©©«ª¦¦¬±ÇÑôúøí®ž}¬»ìòäÙ¦£ÇÓòøùøøï½¯†€†ˆˆ‡ˆ‡€ˆ»Éñöë࢔|¬»ìôòïÝÓªž‚—¥äïö÷öñÓË|™U{…Ÿ™™¡£¥€§'¨§¨©©«ª§§¬±ÇÑôùøï¸©„‚ ­ÜâÙУ¤ÐÜõùù÷ìá® }†x"yƒÅÓéëÜЗ‹z~©¶ÞåãàÏÆž•…‡¥³ìõ÷÷öñÓË|™U{…ž¡™™¢£¥€§¨¨€©!«ª¨¨¬±ÆÐóøøõèݨœ†„Œ¤®ÒÜðô÷øøí®žƒ~†xyáç½°Œ…|{xx€†ˆ‡ˆ›¢¼Æåëõ€öõðÒÊ|™U{…ž¡™™¢£¥€§¨¨€©««¨¨­±ÆÐóø÷õð綪Œ‘¦±Þçõ÷í­Ÿ‹‡‡‰çë¾°…‡ ˆ‡‰”¥­ËÔñõöõðÒÊ|™U{…ž¡™™¢£¥€§¨¨€©««¬¬­±ÆÐóø÷öõôíëèççèëíóô‚÷öëéè‡çèçéõõîìè‡çèçèëìðñƒöõðÐÇ|™U{… šš¢£¥€§¨¨€© ««¬¬­±ÆÐóø÷¼öõðÐÇ|™U{ƒœŸžŸ¢£¥€§¨¨©ªª««¬¬­±ÆÐóøö¼õóîÏÆ|™U{ƒ›žŸ ¢£¥§¨§¨©©ª¬¬­±ÆÐóøö¼õóîÏÆ|™U{ƒ™¡¢££¥€§¨¨€© ¨¨««­±ÅÏóøö¼õòíÌÃ|™U{ƒ™¢€£¥§¨§¨© ¨¨««­±ÄÎóøö¼õòíÌÃ|™U{ƒ›Ÿ¢€£¥¥€§¨§¨©©ª€¨¬ÄÎò÷õ¼ôòíËÂ|™Uy™Ÿ€ ¡¡ƒ¤¦§§¨ª©¦¥¤¨ÃÎñ÷õ¼ôòìËÂv™HtyŠŽ€Ž‹Ž‘’•–œž¡¡›™“˜ÀÍñ÷õ¼ôñëËÂv™Lkoƒ…€„ƒ€ƒ„…†‰Š‘“––‘ˆ¾Ìñ÷õ¼ôñëÊÀv™(1MNJHHƒKMMNNPPMLK^µÉð÷ô¼óðêÉ¿vš <>:‚9‹;:QµÈð÷¼óòðêÇ¿vœŽE¼Íñ÷ó¼òðêÉ¿v³A¾Ìñ÷¼òñðêÇ¿v³dÉÒñ÷¼òñïéżv³nÊÒñ÷¼òñïéżv³|ÈÑñ÷¼òñïéÄ»v³|ÈÑñ÷¼òñïéÄ»v³|ÈÑñ÷¼ñðíçùv³|ÈÑñ÷¼ñðíçÁ¸v³|ÇÐðö¼ðïíçÁ¸v³ÆÏò÷œðïðœïëåÀ¶o³yÃÍôúõôƒó…ò…ñŒðïð„ïƒî…íìëåÞ¼³i³x»Æðôðïîíí…ì…ë‰ê€éèé„èƒç…æåäÞÙµ«k³D{ŒÇÌÓÓ…ÒÑуÐÏσÎÍÍ€ÌÊÌÊ…ÉƒÈÆÅĀüµ€o4³1hzµ½ÂÄÂÁÂÁƒÀ¿¿ƒ¾¼¼ƒ»…º‚¹¸¸€·µ´³¬¦p\(´!#7;6868š6˜3431!ÿÿÿ‡¯ ¿ÒÜâíìèäÙÖÆÆ¶íÿ¿¿ÊÌÓÔßáÙÙÐÍÄÀÁ¼ªªê¿ÊÈÎ˼º³€²±±¶·ºº¬¦ªç²¶¾Àõ³¬«¬¬­®´µ·¶¯¨™™åU™³¯¡‹Ž’”˜™žŸ¤¥©ª­®¢ž™ãU”­«œ™ˆ†ˆŠ’—˜žŸ¢¤¨©°°§¦Œmâ‹¢Ÿ”’€Ž”–› ¡¦§ª¬°±¶µ²±|ßqˆ ž€’—˜Ÿ £¥¨©®¯²´¸··µ“…sßx•”“”“”–—œž¢¤¨©®¯²³¶·º»¿À¾ž—‚mÝ sˆ’““”•–˜šŸ §¨«­°±µ¶¸¹½¾ÀÁ¼š’s?Û!f…‰•——™ž¤¦ª¬°±¶·¸¹¾¿ÀÁÅÅÇÄ­¥‡€ywaÂ3H…ŽŠ#„‡†—™›œŸ¡§¨¯°´¶¸¹¼½ÀÁÃÃÆÆÂ¾§Ÿ„~{ytq”Šrx¥3\k‰‹‹ŠŒ€‚'’“•œŸ¢¤ª¬±³¸¹¾¿ÁÂÆÆÇÈÉÉÁ¼©¢‘„‚~}€Œ€„’’„“’ƒ€q¥HVb€ƒ„……ˆ‰‰Š‰ŒŒŽ–˜Ÿ¡¦§®°µ·¼¾ÀÁÅÆÇÈƾ¸£Ž‹†…€~Š„‘ŽŽƒŽ~n¥6LNYZ[^ijor.nljiefjpŒ“œ ¦¨¯±·º¿ÀÇÈËÌÎÎÌËŵ±§¤š˜’Šˆ‚€|{€ƒ•€˜–•Ž„{y€z {z{{zyxwwP¥ ?KMVXXZegi€jmmnnjjh€g(ms– £©«±³»½ÂÄÈÉÍÍÎÎËÊÃÀ²®¤¡›™“‘‹‰ƒ|{~’€•“’ŽŒƒz‚yzzyxxwvvP¥ 5FKXZXX[[_``€a0ccgips~‚Ž“ž¡¨ª°²¹»ÁÃÈÉÍÍËÊÈÇÁÀ»¹±®©¦ ž—•‡…€yxv€u vwyzz{|{€zyxxyywvE¥ 3EJY[XXZZ\\^=_`dguyƒ‡•™ £ª¬²´»½ÃÅÊËÎÎÌÌÈÇÂÀ»¹²°©§¡ž™–Žˆ‡€ywqoppopttvx~ywƒxzywvB¥0EIY€[ZYXWQQRRST[b‚‰’”›¦©®±¹»ÁÃÉËÐÑ€Ô!ÓÐÎÈÇÀ¾¹¶¯­¥£œš’‰‡zxtronihedfgg€h ijuw{|{ywvB¥0EIY€[ZYWVPP€QRX^{‰‹’™›¢¤«­³µº¼ÀÁÅ.ÁÀ»¹´²­«¥£œš•“ŒŠ„‚|zvtpojifebbddeeffgitw|}{ywvB¥ 0EIY[ZZ]\WVSUTKICBDEGHLMOPTUWX]^_`bbddfeeddccbbaa`__^\\[[XWWVSUdgh€i jjkmvx}}{yzxB¥ 0EIY[ZZ]\XWTVUKH=;<ƒ•––––––––––––––––––—™£ÞêüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÕ¸)9>DEEEEEEEEEEEEEEEEEEFL_ÇÝûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÕ¸)'+01111111111111111112:NÃÛúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÕ¸) 3¹ÕúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÕ¸).¸ÕúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÕ¸))¸ÕúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÕ¸))¸ÕúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÕ¸))¸ÕúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÕ¸))¸ÕúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÕ¸))¸ÕúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÕ¸)(¸ÕùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÕ¸)(·Ôùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùϲ)&­ÊõüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüôŨ&tÜêïððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððïë܉n b{ÇÕÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛÖÇt[  .9\ckllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllkc\6*  )CIPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPIC(      cb2bib-1.9.7/src/icons/PaxHeaders.3194/citer_citation_checked.png0000644000000000000000000000007413124510115021404 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/citer_citation_checked.png0000644000175000001440000000132613124510115022773 0ustar00constansusers00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYsììu85tIMEØ 6à¼}VIDATxÚ‘]HSq‡ŸsfRá2•0²ÕÂ0¨0½1/ºÑ‹À O¢ ²L«‹Œ`AA‚‘`EÒ÷Ea¤¡a(¡¨‘YJê]s¶LÏÎtº³ý;ØX[P¼¼ï¹xŸßËÿH`°ØÎP°[^y{cAæš#!áDH/„háü‹xz‹xyßNF{€—«30Ðüp»‘eÙ(I’õÒc† Ë_KyÝú…ë­2,SZ–G$ÉD`2™ÂS¨›LÆì·WÑÛÓŦxvnvsú¬äjÉ’ÏÅA#ÑH×KŸÃÝ7õÇ·7ØêãYožáVéj*ê—jž·iÓ‘ü™Jž}2þ„ Õ>VHj.YH­@_ö“aJŒÔ!´éÇ\¹ëa^Q©.QÐRËPå`1æ‚$àsœ~ˆíΟ‡ÝÜ<5‡yÓAfyX­V€%c'ê Œš‚З«y×íÄvtŽ-Ûrõ’––†Åb F`ü.á'à¨ãÁ³~ž6OPRè!7'þ_GHNN!33aâ¢ó“m´5·SÛ4IQÞ"‡ y1¸Ÿ)çæ5Iôõõ±Êœ ýU z%¼A+{wQ~Xæ•ý8Ã#ß©¬¬Ô/HFUU.•—¿ºb?gÌ:?¾ÎIFQ6ãñûÈÙ“9eÈXöz½Ø®ÚN>"È:÷jkĵËÇ„c¤SøýË" êÝ/:::„¢(¢ì|Ù'`+!¢öQͲÝDñ™â`QH`d…¿cÑ€N`‰(~™Ã ôööIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/edit-undo.png0000644000000000000000000000007413124510115016626 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/edit-undo.png0000644000175000001440000000154213124510115020215 0ustar00constansusers00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<ßIDATxÚ¥KhQ†Ï™;™ŒÉ´Iß/ÄG´ÅÚnD\‰nìÆ…‚¢VpíÆn¤¢¢¨+u+*.WnDP-Zj[kmª5MbÛ$“&3÷ÎÜãM PAtá7›Ãáç›s€0œ¡O ¸s×2]ëGjwDZ6ôôˆ¾—›ÿñŒ$ ªÜ8,ï]¶¦­úº¶¹dò¨¦k-+ãk¯lìê5ÍpŒÚšJ„]^ÈÁÔèpésâó%ItA‰¼ªàÁÕ{gßAkìÝÞÚÃÖö5Í€?"…ÙüÕ«çcžçoW®ƒBSß–î]0éI$ð ÜlåUuí¨«¯Î ±NcMº´9‘9§'+ŽÔHM*âÀNŒ@¹067Èç0ljµi«Ê1ˆ­ã‰ãª¯û:*ƒÏ]@‡|ê)¤mA£ÓäÔæù¿ý ìmLÌh»¹ƒÖ†mLҢјY.Íшœ\„[‰›[¡q`sJ¦É[ý罃±VgµÕ†<óãët9•Hy¶]l 3(;l‡æ.:âÓì„;óþ¥L~œ” iN’"ï ™Œ±›êÌ.UV–1qWõ¢XøþÚ+æGBr6W€¸îs±çk2s úÒ¬Z(Ô K0ϧy1óÑqóù¼íÛR;,1|VW¡þ<_/O\NûK{uEGÐÐÇÖ­ÐO‡„S[Ã_X¯_#c:,£ÁB `c µk² SQµ¾ˆˆû¬>hY‚0F.‹€Ý‘ ½øí‚©ë!”f6[ ·C«1csËv¤­±–YÈ‘ó:Üü™÷j¦râ¶iʾª`9ï[°ópºº{GdèûrE×5°Äý7³ÅýÈDY•{£*ø£O{…Ç*Ö §&çJ‡®q Šªà_L>îA™ÍbPHrgÒÔ5@PeIð?üH/t(¶ÝÙIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/annote.png0000644000000000000000000000007413124510115016222 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/annote.png0000644000175000001440000000675013124510115017617 0ustar00constansusers00000000000000‰PNG  IHDR00Wù‡sRGB®ÎébKGDÿÿÿ ½§“ pHYs11·í(RtIMEØ )å Ö hIDAThÞµšK]ÅyÇÝ}^÷Ü÷ŒfîÌhô@/(KРĤ T‘J‘*§H&Æ8Y{E{•EœÇ¥RâJÙ¤ÈÎ 6Þa?”,E0`ä R =ï<îû:>ÝÅŒ.3£‘4’àTê{úôãÿïïëïûú;Wp ×Ù³g/J)[Î9®v—ËO÷íÛ·›Ïùòn¥s’$o !rÎa­Ý|ó3ð?|×-8qâÄO‡¶Ùü ! n¦ÓóÏ?ÿƒ8Ž¿¥µFkMžçEÁúg­5EQŒ_¾‹¢øûçž{îØ&ûî»o_žçOÄq<½¬ÇB¦éïîÛ·kíø^¯6›ëÖ?¿ûî»òàƒ”R:¥”[?~š¦baaál†ÿþÖ[o}tÃî¹çž‡§§§077׸<¹”òÊNžG³Ù¼©ët:G87àâÂû,/'|õï ŽƒÏ ø5 ëÆ·sôË÷S­5Q¾‡úøaÀÄtöJNÊ|á)*Tè“öú8cYé§ %•8 —ðÿý!£´àѯ% ýk¿Qõò6«µ ä.޽—ÆÄ$ƒDSi– ã㉠³; º‰ÆÇ`”E8K6òж 7á 8ãØµg‚K£”Ÿ½ô“ÍðÀA¢Èÿ¢TÈQ¸)öï»›Öl‹ÁHã„`z¦NT °€Ì4¯¼ñ1ý‘¦TéõR´X¡½8äâùq %9AS;¢F¿T¢»œò£Ÿ¿Ïι:GÏ"¥Üðõm¶ ǦçÿRùæA&v´Hµe˜<4ÍL«†ô+#Mwd0Ê£5WaÇŽ Ÿží` 8‚8$Ž}4‚,ÕôSÍBgDçR—¤;dØ xåµ¹mï$õZé¦Ôgs›ñ‰=ŽËJª Ê•©6LL–9ü¥Y‚È'5¤$}îºs{÷î R+V#Ú=M_[dà‘Gb,æ©6ŒÒ#)’_¿w‰3Ÿv6„á[»aªT£šçO#¼ º°ÄJ23['Šmqk¸ÐjÕès><Ûe¡›2,,Z´ØÂ€ç!8kÉ GcªFà{k¸°œrâóØ7E«[öër&bn”ÕY\NÑÆÑi†iqã…uhãð<‰ZˆÃÑîŽXdd )ÁóÀó¡ð=œ’¬ôâzL\‹ã§|N}°@’ê«ªÈ ;²ûî{Z¬¤4XZI°Ÿthì¨05×À °”§ˆ•"´Ž‹Ë#»#â’G­‘ZÆ‚t8!Ò 8!@8üУ(ëèš‚óíí…>“åÏÇ y%å‰ÔÌù~‰¼p|øi—–4Î÷È2Co¤é'šR)ÀgûdÖ2ÙŒiÔKœ:ßãìâ« NI0««hø¾ ®ÆÌNÆX­Y^ê±ØIXZ]üVV‡­ü@ =©TËI…6ã`e”Ódœ]r¡3âR'¡\ (—Cz‰¥R á+Dàá) y+ÖNÎ!<…ò#mɇ9RIú£|ÕÔnþ*©ùÏÎØ[I@)!Â(ð†iN’ˆR@¢ HÁ{-•â8 ·Žb¤éiKgT…ŠÀ“ @>Òà3Öa€ch’‘ÆóV‰ºMº¿9oŒÙÚŒ¥%ä†ÔŠ·z@/tÉ R:Œ¶R\ê¦xçV˜©s`wƒÎHs±—qf%§—Ì@ã+ÉÀ8¬§VÇvkàC‹°–Bk¬P¤Ã‘kâÈ#.ù[eµÖcðë£ã1Q!õZFÂŽ \\N‹(®^²¶@ÉÕÁËýŒj¢Y:Ó!‚r%äÔbJ'·8)Ñ2Ö÷ð¤EÂàp8k…$gÏw±ÚbzC*ÊѪz4ê¥ !¼1fœ’×Z“ey¾úìÜj›8.óÆ¯Þø)pq-7´šjŸ~ÆíšùþŠÎ‡xAäj'/½¤@ÅŠ_Ÿé2?S#ˆ<ŽÌÖV“3IA7-H23ŠÕ=aÊZEáé‚öJ3Ì I¡¤uÛ,­éÚüúo ÃáÁ`@’$¤iFa *å Ífƒ·ÞzóÄc~ã Ù €(’gýó1ùx¾¤Z0ÖR+y sÇÿ-&½m‚‡~k†ÌÀ@[>é¦üæbŸÅ~F2ÊÀ‚²ŽšËÅîœÅ™_H"%8|û4år0Öõ<ÏɲŒv{K틌FCŠÂÑšžâàEÁ/ùÚ©Çûæ= ß°:KI×ê6žŸ’¦Ća’¯šN똨 |i®Jè+œ‚XIöO•™ªEœ¼Ôçƒ =R%ðCE s–ú«Ñ:œøJ0Õ,q÷»9V›<ÏévW8yò}Ž=ÂäÄ$Fc Úí^{ýÕ3ßzüÛtÖƒß@@*Uù%¢R2Ö8ò¬ÀŒrl'¡50]ÙQ QJà 'F8JöLÄ4C…Î4+Ý'O/0Ì Ö8œ]ÍD î¹k7{w7BŒÕf0Òét£C­eþV%òú¯µÿâ‰'JÓ´ d—UçŠPâÝ·þÎYÓCÙOñÜO8”¸Âe ½ m§—r ¾'‰|E)X½wTöNÆÌÔc™eeX` …E öÍ×yà÷öѨ—ƺŸeƒÁ€~¿ÏDsbø7~õz÷¯¿÷·_ït:Ÿéfð›b!ÂâÉ6glŽT¥$Ê9t^°¸’ñÉrÂÙ^F¨P1yÌ”}öÔ"Opa%åüÒ[h„µH%J°£âñÕösøöRб©L’”4I&#Z­™1ø_üï+üã?<ýíÓ§O¿½¶iÍu‚¹5¯ç2TqŠXHÕ(…²Lsn9aq˜a¥J&JŠf$‘B€1¸<Ã!$2ð‘JÍ×~ß|øNª•pœÕ^ýŠ™‘¤ RIff¦i·xùå—øÞ_ý 'NœxiÍæ›mÈV½žÃši÷5b¡™«Þ QL˜È'ò$Ifˆ$”=Á pt3Ëâ0£3ÊQr5ðó”Ä þôáÃüÙ#«à×§mŒ1äZ£sÍÞ]»X^îðŸÿuœgŸù'²,cxwÝpÚ9'Œ1zìÎmBñuß?ÎèÃ÷¨ö:Ì C KEX:Üv/g¡—r¡;b©—’¦9î3ÑÐwNú|÷ëGxüwS«FWÄ;Ƭ±H¥(—+üä'/òÌÓÏ^~¯;f¯~Ã'çœØ»wï«EQüŽB±æ„ Q¥xÍÃ3‡Z;¹ãŽyöî¬Ó¬ rÃ0-H“‚ÞJB2H¨â8º³ÂwÍsäÐQèCc ÆÒ4¥ßï³°°H?þ3žyúÙqtáûþ›çλW±=—I¬¯{æÇɾ|²ž‹©¬7¼C9÷e„;”Äm¥€é™‰p>/ ÚI¢ d²Rb÷d…ýs5îØÝ`ÏL•µ(ð®Èþ%IÂp8d¹Ûå7ï¼ýêw¾óÝGçççWyä‘ì©§žZ=ü]üuÿjP{òç¢TŒÊ¾Q ;„s;„+ZFç\ÚoíirÿÌT}6ð<—¢b²gÍJ5Ë~6QQùD¬òj$uà}ÄX‹),YQ óÜýâ•—ß¡*oU—‡*•ª*}H#"A]Óä¡ ª@-F ¸i²¥IU¶˜˜ØƒÍØãñì÷œ>\Ƙ͘–~ÒÑs¥s¾ßù˹#Œ1Tìà'×nMÒÎ~zîü÷¾±ªía׉;–-lÆ®^M288Èðð0¶­ˆD\Êå2™L–x¼šxmñÚFJeC&[ ™ÊqõRÏÅo>»âñÿ `f‹Ïé“§ÍRFâúQŒ1H)‘R¢µÆ” (£‰×5ã×4’aþœiì}ïÃÏŸß°ªù¿øËM)ÛG ?#óÇKRJ„ÅR™\6G!3ŒcGP±VÍke`¸ÈÁCG¯lÚø¥ÖÉÈÊ·ß~÷§™¡Ëe„Dc‚x<†ëØD\×±q‡r ¤’Ä¢‰ê§L¥T.î?ƒ§JÄ\IÇò¥ÓÞÚu¨oÒ tuí^ãFJìªzj‰¸Žë`[ ¥Æ„A@z$‹’˲p]¥ùB‘+½½475°è©Å¤F4éœæÐá#W¾³~Eë$ÈvŠH‰D ×Áó\|/B4êõ=bQŸ\®€ïG¨©Ža;6ÊRh­¨Šz´Î˜Á™³=ôô^!_(RÌ2þ‚i;?ìŸP×^{k³£³eƈÅ||?‚ïEð<×¶±dÈØwýÊRD}‘Ìh˜B „À¶F®]¾Âé3Ñ~Ë]Ž^z®CÜS ȯwüžç¢”¶ÂáXŽeq"ŽƒíØh­q;î­!¥Ävl§N¡”M1óñf¦·LaZs „h¿€¹5u‰RJ” OTÉ|¥T˜|å2ZklÛF °)ÂÊo¾ïS]SMf8…_]‡ BŠ “Ðr]»F)u[Lø4†|¡ÈõT*Tƶql‹rP“ÿ69!Ñ ¢¶¡ £ eýÇq°,+ÜL@  ýɾç`[6:v,âQŸ nõƒ0Æ  ×—Jl%1Ê µœ`p0Åô O„ÀR’ª˜G¡PBˆ2! $‰ ”¢X.cݯ‚1i :(cYN˜˜ð`€d2M±X‹çpz”êx”ºº8RHÛÂV dóy¬›¹Q¨l¯­5—.^â‰yX–@5q'5»n\OÞ*)K‘ÍæÎ0šÍ‘ÍåÉ‹”Ëå[ÒK‰KJ,ËB)…%%ÅB‘s=çhšÒ„uóeM¬€ÌfÍîS'ÏQ,•A€ã:c0Bˆ±Þ_‘ºò¾R%ã9uò-ÓgzX*t®ävìøÙï.÷\¸Ð{£ –º¹¡˜àâ¸Dò¹<{÷ìeñ’¤X–D*‰¥äƒ/£RIméþà#††Òxž{W‰Uâ\1c ÆÊZÃÎĘ8ƒÉH¡B ¤@> Èð&|e×ð`þ×ï¼³Ÿ©4Æ' …уshLØ#´ÖA@ìèz“3§ûX¼xét¥R¤÷<È}®ãW¶´¶L§sû^þÙó9¥R Û c;þÄcÎ!y}€ß¼ÞřӃ¬]»Š‘‘,ñ˜Ë`_©Ã¿$}äWcëï[†ã'«×­âË«ðû®?s´&ÎW/fáüDµA)1†’\½|cÿø„#O²lùÚÛãÓžË,˜ßF.W }èÔdöcJY² còŸdË6£€îîtwŸàÔ©ó$šêñê«1ùÉ+Iš¦$˜=·µëVP[WCßuêêù`_75}`j¬Ÿ¶Ç"¯åü¥gxšM?~s‰1æÄ„ Œ·5kÚY³¦2Ðߟ"™L0kvÆ€´c ±©@k©=ÔU§Y°q ¥k'@À qŒâgÝl}ñ‰Ÿ_Ÿ4„NŒ†ÆZ µc+*Ïp2z½—¶YTñ4·ÌæÅRîÙߟ۹iëéîWÚ4s B„î…´¿¸ãÿŽqö½¨ÂEìæ§pZ–á´,åÉ9.MU#›ßxanç¤ô8ÇãO<Dk3V%¶gùKÛ9üq”“ûºP… !Ä´¥ØÓ–²äÉÍÕ#›_ýÖœÎI¦"î ˆ{+c X^+°¿¨â_{ºPù^œ©¡vËR:Ú=Zë3›¾1„x¨LÖ?ÎW¶lcÿ‘*>úS2ÿNóâ1ˆ§—y´5d6ÿèk³;ïÈëGáúqžyyï®æøî.d®'„¸Ž…ó|JD6ßÕº¤jèbŽÑ¿oå™Õ+Ÿ{íÏæÒ±÷ézý]"ó¿}{#ºy˵?ê´ÖzU¶¼ÑÑÑ8kåú¯òÛW÷±pÃÙ÷מ¡»þ_öòºÙ5À-ìEuK¿ËÅdihhhdË^ ˆœ¶IEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/configure_utilities.png0000644000000000000000000000007413124510115021012 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/configure_utilities.png0000644000175000001440000000355013124510115022402 0ustar00constansusers00000000000000‰PNG  IHDR00Wù‡sBIT|dˆ pHYs11·í(RtEXtSoftwarewww.inkscape.org›î<åIDAThÍš[oÉÇÕ3@E#!YÁ!+”ï'ÂËFm.²@1Ab¯IØ5ä!/¹HdÏÀ7HâHy‹a’ _2ÁÄYÉ"ëµ-³3 Mß»Ï>ôejzºgzÆNÈ—ºº«/ÿÿ©ÿ9UÕm%"ä™RJå6¼"“ *{\)eû*ðÿBBpE$Ôª9'8 Œ´¿ ó&° ˜zCÀX6Ÿ¾hšæŸ,ÛA©¸”Tg•ü%ë÷IÎè¶Œ*ó®Í³}Õ*û÷ïÿ:ðR)eérÊóp8dÙ–e¡T Z'T •<çX xqË¡<¼EQ ÐÎ6Ÿ@îVÔSÏ€ÔK½<Ê@¡ ½?ðaHd±ôé,•–]z !Ita‹²R.®{'àó4?ð>$ú¦:i€E„0 {?L¿z‰jµšiš·/,°¾¾ÞÛ^tH*…QÐ^­V9wî,„VŠ@Âó<'NœàÀ†Ñ·T*•®ºRŠJ¥’öbi=oss“{÷ïó7ßÄ0ŒHì£ö@â™Z­F½^ï–Mêýö à ‚Â’ ‚€#GŽðñÆF„(‘¾ñÑwª b9ÌÏÏóðáÃ4& Ã(]7  õò ­ëºLLLð­·ßîÄÒHA¬e”GñÕ¯}…Cµ†„"H""ý0”h?D’Ò´h,"loosúôéžQ~hhìÇÇÇ™œfÛIJ­hä B¦¦ÞàâÅïsôµ£,.-ÆWäEúhòÙuÕîÄÎóçX¶M §NM1ó½‹Lšbii‰ï]gaa¡'ûìF>ÃXÿÙ(š”b¿üù¯X^^föæû<~¼@Ž®{'ÙýHœ.@’,ÿnݾÉââb<-@SFýw¿óí´>­h4¬¬ü£4™‘ $$²Yhiy©Ç³Yù¼óΕÂ{Þ½{÷G 3ÏÌ"­¿õÍ·JÏ}ŠLﵑƒX_Çveƒ—ˆàû~שÈúO§c¶eãy†Qé—r§©’ÚmÛ{C@'Òn·ùóý‹@%óþ¼mìñQ=ßn·²À‚ò4ÖóóóLLL”^Ì+¥ú.⋊ˆ`š&Ïž=ò,*• ¶m˃þìvöCG©Ìó¼˜SﺼýÜ Ï)aâ8ŽãàyaÒjµð}Ÿv»ïû¬¬¬|xùòåßÏ«|ЉƒÍÍÍèäøY–H2ôg $u}1¯ï{žG³ÙÄ÷}ÆÇÇ©×ëœþü-à_ÀŽˆxy÷HÀ0 Ξ=Ë™3gzd“wLž,ä“EýÎÎÛÛÛX–•‚___ÿäÒ¥K7€§À¶ˆ8EøJ}«V«¹ºD æäÍ›~„X­VKÁ·Z-666šW¯^½nšfø(ý–”CZž|tÉecÁó<,Ë¢^¯Ójµh6›lll4¯]»öþÖÖÖc`ƒœ¬“µò#ñ°EV”}<Ï#ÆÆÆRÙ\¹råúÖÖÖ"ðÀ>Àž¾>È{~òbÌ÷}jµ­V‹µµµfffÞ5MóŸD²)^Õwà8íîÛ·'Ož,OOO§K Ùè¶g10¬†A£ÑøËôôô€ÑGì¡ÀC~„€[©T ¿¶è6¨-yÅžd²xêÜ»wï.\øðБò/Dõgd +¥¾| xè&Ò¦Q±äa6‘Ç?^ä°e-@8à¿'1Ÿh^c‹HÏ së! :zØ ¯ç™ «õ"û }ðÀr¿¼—jIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/clipboard.png0000644000000000000000000000007413124510115016675 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/clipboard.png0000644000175000001440000000102113124510115020254 0ustar00constansusers00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<ŽIDATxÚ…S¿OÂP¾Ö“4qf’?€èàà_ÁjŠ,ìÌ,þ$£+)N2¹‰ q&2’&I¡4ÐÒz\¸¤”‡~Éå^ïõûÞw×W%`t:+|~ô}8gétڀب×ëHÍfÕ!(•J_Éd2ã8èºøÞVT*B€išír¹| !´™é÷û°(‹dÛ¶mÊËå’r<UUq¤(ÊIˆß³ÙŒÔq‰L§S¨Õj° †a|ò9§b±XM<Âu]Ú´&:UEae3Èk&DˆÌ˜‰(ÃJ€pÏžç±À–¸`Ddò¿žøF ŠD€r¤*¢@¸&Iøt?v°#“-Ë‚áÏpý¹5Æ#ÜþxâŸÖ û‘:LѼz½ž{s}™Ãµ)ýŒi>Ÿ3ÙËç Í÷æ µ0 Ƙp€Ñ!²ª+{1èv»Ï_è­ÖÇ“ìodÂ~µZ}Ö4Í×-Û‰=ÜßÝ6Þ¯áú/ºƒ-eHCÀ…IEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/filesave22.png0000644000000000000000000000007413124510115016700 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/filesave22.png0000644000175000001440000000143613124510115020271 0ustar00constansusers00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<›IDATxÚµ•]kA†ßÝM‚oô&é—”šŠ½Åký¼‘Z?ÀoêMAHñ¨?£‚¿@èHHJAk‘‚Ûš¸™ÝYçÌÄa– Bßp朰sž}÷lvãåyŽ£P‰–×®oGQ4ë>î®lLZÇRJ´Ö[hži‚g™2èY°…JÃ3‰N§£ÁRæ°`šs¦€t‚–Ë>6>uqݼ09õR(–DÁñBsAŸÀó8ðpëâ<\©C097Yª…æ+„$·Æ±EǧK£M,Íðqs‡Ñ•Å)d2'¨q­X®c:`ÀªfI†Ëç¦`ÝšÕ¸Ú—Cçqj›QÈ8ÎmæØìüÀa´8{Ê‚5'wÁt BPiŸ>9É S;޹ ~vÓ\4ĹÀ°„§aV:r#dd̰\Çf¤Õûw0†ˆå:¶£[dpÔñø}@èÉû«—¯VQ«Õþëléöúýžîž4?O!0ýT8ç¶) C<}üiš¢Z­âÙ‹ç°r^z{{%ìïÛ~!²"8ã¼ÐÈ¢ˆš©va ¬CpN@ê‚€XX z« ¡ÃS®ƒ µ‘pnßhÔ_o4ðuç›só„”1c~©¤¿"IIÁâQQsì[¨,fjoLµvÜïõŠŽ}/¸÷3 [µ‰ ‚kÐʃ‡HyªoRO58@ë~ð;BÌbð4¯T°»»[w¶»oNÏÌ <Øo!‡ßn·QQíó/¥ Wß(M]3Æ °\Š(ٟ餻P—ÿïâ€IEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/help16.png0000644000000000000000000000007413124510115016035 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/help16.png0000644000175000001440000000125413124510115017424 0ustar00constansusers00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<)IDATxÚ‘¿Oa‡Ÿ÷îýÑ(­€ ‹‰Á„ABÂàd¢¦êà"‹ƒÁÄÿŒ‹1. &,˜è?`\L0ÚÙ  D ¥¥Bï w÷z´V!\¢ÏòæýÞ'Ï}¾wÂZ‹èžÐ·=Ï£’>§Çù'~í®-ÞŸ4‰Ï.rïÁcþ‡ÅžO/Ž¿ësÕÏóÝ\»r°o”ÌÈ aÄn`i£¥ß# jÔû$->æzû¯.—wÈš<éî>.å=™%-ÙŒKgJ25½Â\©ÀÏòê2€Ã>¢ Àurš‡×YXõxú¦Ä£—K|ýáóäÖ£0J¢”â° q]—±3ÇÈh'º­ÐqøÕ‡ ÇsšK#=Í»TÉ>¬µÈ¸Áë™*½]šÙ%?> 5/¤0œKëA«L€8‘˳÷eŒtèé’ÜOGÚÐæD¯d¶ÆoN–ÈZ@ uÂ7P®$3ÆüI‡•Š%¥5®Ø,¥’H‰c-i£iÓˆÀ h—Â6*©+]|¿ŽŒO€w ‚m˜,Ú–àO6á/ üŸÝF+”**^!ŠgáÁ¨p¾mÕªxÛ›”76Yø²H›™y±Ô=ï;À/»Ù¹VC}æIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/filesaveas22.png0000644000000000000000000000007413124510115017224 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/filesaveas22.png0000644000175000001440000000232113124510115020607 0ustar00constansusers00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<NIDATxÚµ”mlEÇ{¯¥Ò* ¨ô–J[l ©­b­@LK‚/ˆ‘Z“*ØŠZ¬–bñ%! /‘Ô@BP£ 1AH š U±FPЄ¤- ´\KKz×wÛ»Ù»uç6ÙÞYùàÿ—çf63ó›ÿ>³Ï8t]çÿ`ieUO ȱÙm¬}s=N£%~C›((Jì Ö7[…ÐØ¹m ÑH”¼¼¼¾Ÿ–Õ`NCC]ÝÝ”‚c~©\ ]’ะ 0¶b3Àv…ee³þÉäb{#yiž:!( ‚W¯¦âôÒ­ ™çDÇ.ó1Ô°Æ÷g{ˆW°ç+žÎoãÙM¿_&<Ó€?žŠíò\D$*¡¦k]Op,L°ÑWC çdYÐþÎïŒüúøåÏ ÓRl«…Ðm0XZC$¬GoáX‹èŒ…g;¾ T¥mcÏaÁ±S†£Ð-o9ð+¹9_ÎU¹òÀ$Øäèñ`ù Æ`9ž=•13ûi?íåÓÃ:#ÞëØà&uJ‡.=ÉýÅ÷qgzV,QœèXæE¥„ˆ »‘ð(3‚»èìê¢y¯ß[êläfºØ×±„»s¦3ëÞ¢Øyè€&™¬xÇf*¤65®A!ÊÆÕI\óÿĪ-“ñú‚¬ªòR>ÏEÝÎF~&o濞l%A&+Þ±•Š˜Ö,sÏBVÔ^⦪²dÞuË]Ô2™nÂüL0×$Ê28Áñ"R±¸š•µû¸âÌšÖËæZïH¢ã<4§ÓiΟ¨‰"+/;­Ÿú—Ÿ¡ný~þêLK¾NK£/OÞÁéËSiÞð•••–³Ú—jñûG͵™YHEâ D~*S’Ùón1M|ÁguR\£ìm süŒƒ]_ÃÒ¥%”””0<‡Ãá{š¦¯À}Ì~ªþÕÊ.IEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/configure_shortcuts.png0000644000000000000000000000007413124510115021035 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/configure_shortcuts.png0000644000175000001440000000260613124510115022426 0ustar00constansusers00000000000000‰PNG  IHDR00ý 1 sBITUìF pHYs11·í(RtEXtSoftwarewww.inkscape.org›î<IDATxÚíWKoEþz^ûðcׯXرÛy)Š!H!á@näÀKˆC$w®H‚â$ðB  Ç!86–_`Ö]ïkvšOÕ«fr@ pq•<3Ý_u}ÕÕ]µ²ÒøwÅÂ!ÁÿMàJAᾋ ¢`!ƒ²©{Ñh‰…úg‘ vÑÔpàbø©g/Î)Jñ]1ÿðiæ$øäúôèäX*Ö¸öÑâ—Ø$ ²}îÊcãƒHÊæØÖ%dÙMüŽ ¾‚FªÝv¹…oäVR#LîG€øâj„™'Èð5ãøcÆ ÿŒNnãLŒÀ!–'íû˜%Z:€ixq®0‰yþÑ$4U¤ÎA›2³!‰–ÝåÑâ¾'°Žcë˜Î<îb?c:‰¢ºJã6&bÎ…\’´ƒn~_Ç9ƒ ªcåíšïçAnâ$sŒ¡Œ4S7%nµ`ð9ÓÍñ[˜”ÌH'pí^Ã/8 Ý6TBPCK5éèt™èŒsцÖÄ»Là) à ¸¢#ÐýÞ*öЇ¿‘óP¡–0‚Œ•S›8‚%d³Ð¤îÂ`ÆÃ2ªÜÅ1ŠHØ6Ž¡àI”B 6à;† 5ªÑ^RëÇÉdÓU*E¸ûƒB­šue'ûa‹å<”:ÉÜPM…ý@ VÅ­­ò㣅l__zå v¨2V1ÐëуVÂ0ålW¶/ëÅÍl‹¤t"[D®¤^®°tÔz¢õš~ŸŽ©óUhéÕŽŒCC;ŠSJÉ ä¥*"Ì"V ;jq,ƒfFÄJ(‡el!GÍ“.KX…¥õ*,¹5xTŽ¢YÌ¡)ó1,N Ú™üÛ°©s¶Üæw°7Ñ5ÚÐNvöºTOÔo[á¯B˜"y߯aŠšcv©>J¸†—‘ k*åç`ÝpLr &´^œÀ“‰ lqfÌÌ>òRÝ‹ØeòNEä‚å¤Õ/à¸is!9‡©åyÆïhxŽDÂ'³ ?Sá 'Ê‚ÉS?ƒ?×™ç'øå‹šŸ-˜¢“G0„EÎEm9Â:° ~lâê{Ìà‚iXí]ð[ÒÒ3|—Ù¾©”VŽre Ïpu[³u@k40Œ“t!í‹€ÂvÐä˜Îqü(2²Xú-±Ek…V3r-ãHÂ(qÜëEþ„ËȹˆÒ¾–~;§GZG-Ÿã2•XûB¶1U±ê´Ü£BÎ*Jë¸Ãèh­š(½zõÅõÅ*âÙAó³µÙ‹å$–±÷«·öžYÙObEgõ6ÐP‰…Œ`Àt†¸H~¸°S°€˜–›šX%…³Œm! 7Õícë^Xxg“äMÔu` ‰Â}­Ãc  þ‚¿ÚËÇ1QIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/tex.png0000644000000000000000000000007413124510115015536 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.667257904 cb2bib-1.9.7/src/icons/tex.png0000644000175000001440000000426013124510115017125 0ustar00constansusers00000000000000‰PNG  IHDR szzô pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF&IDATxÚbüÿÿ?C~~þEEEEÕß¿ÿþýÏðŸ€Ì@Š ÊA’Ë!‹ü‡PþÕp1FFF©OŸ<¹:uêT €bI012²§epþúÍÀÀÌ ”þ1ü÷ ÿǯÿ _~üÛðä( A Ã@ìÿP‡€õ€Ä@¼051°¾‡hH±24TrØx ƒ¡†Fð ¨à*Ãá\ÁAtoâÞô"´ôWSPå•BHþ•³Ì‹¢©nÔE†Kûiè»ãt`Û•aI5×bA’›Å…¦ Ñ××ðù[x¤PM °í¿×#€Xƒè;ЧLßþ3ü:— ès&†W¾3ó³0<|óè F oã? Ñ 1a F˜#8¸™À\FHDCƒå” Äs /'ƒ‹0ø 1ËÌôŸ*?ÿg`eac°×â:àXîßßÿ6r,(d@ú@ÁþïDDÿELˆ™˜˜ÁQÂÏÉÌK"£Äø ®'þ#ðþMh 1@Ó 4µ2üýû—áÅË ‚Àt…° €˜p¥X\쳿ÿÁqûû(îø7(ŽÿCëÿgø¤ÁøDîã—ï Ûwîexôô%4'@@11þÿÇïsduà,‡ÄgbbbPSScFQ @,¤XŽ CäÁáv#Tà’£™ù[[[›ŸŸÅDt ²ƒC¤†˜s¸€‰Œ• ®†•™‰‡“…áÛ·o(æ R²k[ùœÿ…¹Yî¿ùÎÀÍÎÄ +ÄÁpÿõOEI†,/ihÀL3 ëЕO «Ž¾§|uN†;Q`vþÏ0ßK†ë¿1xq2Xªñ¡x €˜`YTR¼öŽÁV‰AJð/ÃäUvŸxÉà¢ËÊ 'óŸáÀùg _¿}g`b†ämfûRê+r2gga‹ CnR†2ƒ °ÔOÞýa8}ôüÌ ¬ÿ¿0|þÃÏÀÿ—…AY’‹!'P€áýǯ ÿyäø„DQB €P¬Ã…Ù/Ú’—á».°*þŬR™þýúÂð“… X-30pK8N6V`EÄÈj-É` ÀÅðøío†­—¿2$Ûó3xj1+`¡N>†| Ž*ÿ¾çšÏLÌ(-7€bAn«ÊkpñÉÀÊÀÉ'ÌÀÅÈ/N™€ ã°…ôá;°ÅLˆWž30¨>üÉðî +ì}ï e™˜ÿq20s 0ˆr £íÔS œ¼B \|èC/Òˆ[y¬ÒªaW,Ï?³0t¼Õ þËðèÕ7 83ƒ0!ò}cø l%±S(Èr˜0Šl”&@±à«pÐó«¡ƒŽ¨m'G&`ˆBæÿ?`ÏÅÀÂÆ .fç΋VQ!•'@=¿~ý9ìB€"Ú°4ÂÂÁËÀÊɈÑÔæ7V Á¤“““899QJ=666†wïÞ1ÔÖÖ¾š5kVðÌ™3ˆ$àjóÃøàè†,®‘1Èç?~d¨««{5mÚ4; ò» =D–µ@3¬Ö…Èç Ëå7aêˆê€Yúçϰ#888^¿~ÍÐÜÜŒa9MB~ÿþ öùÛ·oÚÛÛaÁ~]=@±0а²²+¢Ç @‹qZÄ‚œ'A©””×oܸñgÉ’%ÏæÌ™ã†Ër FP‚ÉÉɹ,++«õÔ{ B|ÿþáÅ‹OfÏžmz/7#4 :­ rµ“Mž€ä‘@üŽPv0˜˜ÎHyW;IEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/select.png0000644000000000000000000000007413124510115016215 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.667257904 cb2bib-1.9.7/src/icons/select.png0000644000175000001440000001205113124510115017601 0ustar00constansusers00000000000000‰PNG  IHDR #ꦷ pHYs7\7\ËǤ¹ vpAg ‡úœbKGDÿÿÿÿÿÿ X÷܆IDATxÚÍ™ pTÕ¶†¿uNw'„™„Q&2#"2†œPA¸Ì‚2¨*“¢ÊA ¨€"s‘ApA¯È A¦$9d褻ÏÙowª«¬¢žÏ+U¯ê­¯ºÿZ«wŸÚû?kŸî>Í!wämBZ‘;Çýÿ !w̻͟BUip[JƒµU—T]Tõ½jéë¯5¼^³BgEgœós¤ÝÐn`×ç5ùDVË*P‘ ”Ç.À©1jÔ (¡X?ÀM9 @&˜GkÀK¦*£ ü¨@ž"¨¢\ÊhÀ"W&> D 4Iü¨¹`¼j¼a¼Á;¾M¾¯|_Y+VX½õþ“î”E)KR–ܪZçÐÐ:Ë:€Ê!íÒÕ ¯7<ÚpW£M#¾Ñ¤sËbWݰa®Éá1‘ÉNÂå§e/ËMÍà7ù$d¹$A]%Se*0—×™ 2OFÉ(`c5Èxé/ýQ Ò ñ ô’x‰]ë¤f<¬AÓT ¨®š¥@5*j`7^Í8#`Ì6fSÉ[¾ø%÷È7Grä>2*… ·!åß!0CZÒÏìÖÇÖjÇ4ž•î|ÏÓRSF€*£,ûŸÈÆUc1Í%Enqb9/a’²@6Ég ód¹Ü$€¤XªHåÒ…ô¤;0GúI_ù|Ìr ³ÄI,0Ÿ%|2[ÞY€"šJÀA²Éýž>ôêJ#îl*ëã†#j§ú–OŒzF{£=Kc·±›NÖ,kŠ5%¸ÆiôÌRÓqÇV°Bi5‹™Ì¦£Ô—nò<5¤§<'Àþø}³ö¯¢õçZ½Ôª Uš\iCåÖ[µí²V%0Vb$/¢UÖJ‚ìÓº›Mr ,ñ¥ð¶è<¨Cj°:¦i|jìõ.—¹ªTœò Ñ e¯œ¨1ê-`+ØÔç^’W?ÈÙIki µ¥,Èq¾&‘d3‡¹ø ­ T#BÇŸ\ iAKZiwSä˜\–ÖÆLcŒ%§í÷í^h×’Ü[܉îS—Iön0§È>é ¾j%VÉzp}ãÚæL{©½…c We*'ÀÈ31ÊÝÜ¡bÁ1ÑqÊQ Å?w/î¡ó;"Eà,rw–ãBÕÛcõóßfGc JFà?³Ô>µ…]< ŸÃŒc ^yAÓZ¿~‹ »£Ã…P8øŸÃ(õoHi!ýPÒ\ý˼7ãlÆ>ˆ=7¸êFPÍ䇮û*û"ýu cdÆ=YN ²º^KoZGAzIôëþVþþú ¯È`zClN̹ؽ¶6íXZ#pvw6uV¶H5iFw½ùbÀ{Ìëó D?½*z1TÍ©šY5ìö@ûY­ò*/CXKÓ’y ­Œ2b t­'ùc]w„ƒ?‹ýìã È£ÒJZk-#ÅrÒ;¤¦BåãÑßGïg˰6ÍÁñµã'G5ˆý<69638!ãqY Ž·ÌfKPߨýj"°Œì½¼ò2 ø‘Œƒ° á+Â7ƒ{]øâð™`§¨åcª±B–j —lÃ2ZFóŒÎ7šk€íTä{ÀÀ­Fi'åI ’ >PgÕE.a8þs -m@>‘Åò!ô5à9h߳Û–‚½Ý¾j ƒSGÇð®P0¹plÁ+`þb™°#üÀ9ÔÑÃ1\>×m—xEÆÈK`2g˜³ÀÙÈ(´¼:ÿÙ\(ë ç®@!­ñ€=L9Ôh0Ë9é¦ËvÑžÂMµ$ò‹ÈŽ •õÞ?ÈW2ä¿‹p‘©®Õÿ†êuõšz ´›µ¹8$»d|›¶ó«Ë¡õðÖ®‡îƒ2íËïªø5.*ï{./¾<òz]0³ÍŸŒïA"eºdÏŒÑÝ(²D¦Ê$¨:­ª]5Ò{¥?˜Þ|Ÿ•Ì/ùbfÇüS ²¯eÌþX­ZV,Øyö»/˜¯›íƒ ×åiÑǯӾNV|;ì6 \{/Àèi40ò€XÅVø[ mh¯-úLé‰Hœt•žÐqnG_G?„× oä®L{‰ æ£FWS/¬~Ëúiõ³À(0nI ˜WÌdóW°¿´SìÃàH1¯:®‚±×øQ¶»¦{@xk0÷ꦩu™cŽùTØ\aY… ¥Ï$ö‹eš¬•m/Wo[ø\EoñŽ,ÊIúì”g™¼Æ vÙAîÂõ#Idƒl’ÍZ»K‰O’ç²'ª½\­nµ•%Qk"Š@7Úw<Dböõ®]äCæŠÌYŽÙ®%À"µ‰¥E‘PülI¾}?8†;–Àïõ‡y ˆ|ÕýsDm¥Æ7†V5ÚþÐ~¤£4“/À,ozÍß@ÝPM8¥õ^µÐ^ Œ•8ÉŠ g °M¬» 8Ä ²‹/4ˆS^–iàéëyÂÓ ¢gVÙZÅÅßùJ°…=>·ï)ðlñÌI¢ó¾_"0‰t*¨ÕE(ñù®øjBÙÊÔ,¥soIVÉM°>²æZCK?Þªnp%»v8—?ÉÿQàYptpˆc+Ôú¼ÖÌš!Ì–æ5AÍU³@Šù·ôÒõ®X)Y+S¤=P€IôÝЙN¨$ÃdH¦DI9ˆßß:þA°ºXumýz±ßÿ¤5uë -qÑ`äÍãà|ÞïˆÿZÿåePp¢œ‘í²Ä©{ì²Öz²£ÔèBRå ¨Ëê'U ØÈF•ú|{L­Ž£ŽÎÞ <ªHÝÆcÆS »ƒ=ÄrXfó ðŽF€AŒdÚÝ0•é¤&»5È6’8‰ï'VOlíÆ¶›Ô.bÊTiöoövëP¿¨|ó¨ÖÍj—*€Â ÿ•ß "‡FN‹œTãSöƒãIÝôË@òåŒûSUQ5y’Ulֺظdll.Óp¡(„‚)ù9ù×Àùªk‚óqP›ø·Á}¿{WD*è£o%ä Y&2„ÁÝÐ^è)Ce(È!£ óÄÎ ;O‡ð'Ã׺‹!¼÷ŒÿØ/Ú×í+p¥ò•‹W——ò‰5xKïÑq€Éu\Ia߆m^PTE0;V:>#̨a8ÀþÎ^oÅCÑ‚ÂiEƒ¡ìÊro”]Æ'ò¾±@×­¢…Ç@î—_e)TUa|…Kw%îËð«à:äÉÀG,àq Ï0în 8º^`‘ÖÈ`©­ÓòÓn@õ]Õï¯Þ Ìç„ðÍ@oêÑê˜u.Ôþd!ã°µÞ2 Þ-Þ¥ÞŽ98buÄb°ÆØý¬`DµŒë ³PÞçBçLG>dLÈ(ʼ e—ý¶ìjÖÌÕ¬|+Ë~XÏÒÁ¸ed½@mUsÔcÀ*>eÈd#/Ò4wa@Ç5pAæÉ<Ћ_ÈHs§6Hm±É1‡b¾ N°Ì´¨Ó w`Ûs ÑÝ,•¡Œ©Ã+L‡rŸG5 OÒCO¹*$¸D6ÀdnÈvô@L5jލÞ/nP‘tV%xhŒn@Dq(ÀRÍø#jPŸæ¥ïâúw èÃ#¤-5Ƚ)‘ÐùBç’Î…`Ÿ³/Ù4|b=Fgã5c&XéöP»0€y äQùE6éŒQí@ÜÒCÚÑ4TeANj®ÿ$GÍY(¿•ž¹<£êžCý€‹šAÕSuÕM­Þ €ÒØÀj1 ŒuG|j¥Z¡–#t¡+Ý€³šóØÜêU5]M¶Ê2Y„À‚íÛ¯o¿ÙksrÀ1ÈÑÛÙ páÔ`v1;›´®7?3J[q²1ŒÝ=1I ¢óMA@ÖË:Y§ó$cŸ±ä>©-±Z/Èù8ÇY΀Dëþ  jjj@ UàÁÀƒàŸ;ðqì$ÕŽp”#(Rõ×ßûÊ#ìinrKn@—š]zuéoGLˆ ä¨ûÈOr/ƒ!¯Un›œxp9]nW­GÂꇹ@xÄÒ:ߨj| ê=5à Ætc¢¹7ÇýZ‹Vý\t"D4ˆpg]¶Nrš3Xè?° Êt/ˆ‚ˆEŽ8 R]I3*[™ÖXk&áacŒ1Úx‘^dÿPoÛCªþ| œá¼°BÑÜC]Hm”Z>¨ñCÖ5fƒmSÎQ|ù–úÃ!õ匧rÒÀÚXo-»¾Úk÷©"meŽ iy42Fkt™~Qç!-5õpÚ )2Qƒ¾³wRvAás…mŠÚó]ç·ÎP²¼$ºxˆÎ›8ŸsöÁ®]Pûdí6úþÕ«óÜ·Ã~wíãuo+oomßÀ¬žY³F+ #¤%!õÿùWá_Õ~µˆ Ý»sI¤”…Tgê¹Ô#{#öJl.8†‡%òÏàÞ3û˜« F×ê 5vëÜ6²Œt` X ê'v¨÷µµØÝAŒ)Æ«` ’ñÒÊn,Û¥Ür°ºæ&AqIq§âàáíí] ÎeÎõÎ5:¿äõx»¢üÙþÿJŒt;}sÆ~N:{èß›½T³‚㥚 kÏ'\JX¼ªø”óT…SuÏ.P¥!ý¤4T&Pð¿m‘28He ¢$SÒ¡Ë{]>ï²ô¥®ªmƒ±A¼,ÑúAXe×(¬R0¼`ˆßî Oûºû Û ç™j÷«wAË@#UëV —B(œT0$8fHSZBdMwcç kàXE¤­ñœðT…üº·å{‘ðTwª;"ïLŠ8n'Z·­O£Û7ow‡c}Ò¼Ió*Ì«ûá½ÓNOÛ;mmfµùÏo=¿–:뺨I¦º,Ò¼OáŸwÀ,5WÍ™GŽ|Ê«|°­pÛ¾m› Ã·b:Œ„2Ê·­´ üÞZ%+!9"ù£«ÕÁ4ÍBs3³ÍÏŒ&`?clSß[>ØÛ±¿Çƒ¢îE…Eõ ¯g^›¼SPip¥ç+vÏ ÏôôHðìïèo€ÊHL¯î‰ô«Ü·wï`T6RŒv“´{Óê¥ 1Nï¾gË“¿;;uÂÔ×§ŽŸshJ¿)]§´L™uøÐáeI,ç/~â6÷¹¸Þu½Ãù‚„‚Õ«P4T¥A_˜Nå;™ÌÞ“³Çf¿ývq9___g¥rfæÌȧ^*^¨ïâù”*ˆ+ÚTr\©Û§ J•ʞÿ_Eµ¾’]¯TÞ“ù¿]Q*¿oá¾âmz|Š·§¯–R…Õ½ã}Mô¸sù• *•Õ"ç¹¼<¥·àÂæK(upnRÄáë*Ïç­ì-cÕºr1ˆRk^^3eÍ”Càù¾þVXî¼½óq§ÑñWãOÅŸÒü3;1;±¸¼¯š/Þ×Q©sæ9÷¹(õR~BþÒ|½³ìÁÖ%K×­9’@}ˆÆöÛ¥õcÕÎÞ¬õº¾–<ª5UUza:¼j·~~Gõ°³õûFòÃu1Ý;«HiÃÚçžÎ Y[²žÎô(u6öLú™/Ô×ç+žË9·ËzâfÕ›UnVÔ °æñ5|“¯ØÈ—ôi1&HXVhÍ€F¡\ä¯ è R7þÅøAñƒz÷Ë.—Ý*»•7¬äé’·JÞRjOÓ=-ö´°‡g9³\Yn»ØºÏêb ±s}ïøÖù’ì\ÿrÿvÿ ;7hè£õ_ß;ךdÍ·>·síh»‘ÝC× ¬«ž[2ºdfÉ2;7ß“oÄØÙÙm²ûf¿ H})õ£ÔÃvÂéWNï:SÖJºq±æÅû•ZÙ|eÓ•w΀¦v޶04ÿ§€ÚsƒàèÒ=÷…Ð?”_ß¿>~}ïQ¹¿ä–ä–ÇX×ìH;R¢žÓ¼d¯ ¢;àk{‡½]×_S3Ô4­¿i.«?Â.å(òGjåZ9V–.—)Ž*ŽÒðsÞñ¼$u)£EF猡jÝùµçÏ'+õÞØ÷^|ïùµË ^¥Ñ£=£S]BóŽêüüxœ­fá?Žÿ ¨k(ÿ¬mû¶-Û¶ì^çJ¯+ƒ¯ ¾ŸöEÚþ´ý™¥tLé’Ò%}iZŸ´Þi½3jx þ¡žQÅ34ˆÖŸ‚dTI¯DkBŒ*f­ÓƒèúÁ UÒÞ ’wó€æÇô¼k ×Ö\[~ yeò—ɉÍÚ:k׬=óÎ@œ'áÁ„ø„‡×Bó-G¨Õ?ïóž˜ ÿßÔJ!Í •#¥´“v±+ݯ»'»'W{VŽÉa9l¸ÙÆö¨kjV*òC)ŠäRàçRPçƒ'Kó¥À©R )H~D†á’ùpùPYªHø<_l-ØvmâÒÆK›-mž>6mlÊØ»5Ð,dÄÉ*A@?iþ¾wæ*¤mCZ÷ÿúoq×Ä ¾%AÈÙÓ3Qݾ Âxࡪ͂P¯rt.ŸÞ„»Žÿ®ºh)\pÌ…"zTXtSoftwarexÚ+//×ËÌË.NN,HÕË/J6ØXSÊ\IEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/viewReload.png0000644000000000000000000000007413124510115017037 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.667257904 cb2bib-1.9.7/src/icons/viewReload.png0000644000175000001440000000075113124510115020427 0ustar00constansusers00000000000000‰PNG  IHDR&”N:sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ "-þFXMiIDAT(Ï}Ó½kUAðß}<ßK0*†T¢ ¾N#Ó ‚…••ZŠ…`%XØøXEìEQƒ••`7(Jl,mlRļF^üÀf/¬ñÅ…aawÎÌ™sv›¶mMZ1ÀÖÅ=LQÕu«êþÿçþϹçVR’fB‘Úð™lT$Ï ! ¨Àÿ ¸€-¥ôã jÊÅ:°ènÑþ[˜ i ohX“Mø}µZý‡aZQ!Qÿÿ›ãÏ ¯h´„*ÓîM3MUÉf³[€9!„—Sš‡U Ó0- Ã@ˆè8 ˆ4à)ç"ÀË QkéLÃÛJ"¢TF¨ÿ®›”2"ÒàùVÇ °"öœ¦¶FR© [j\ ð<Ïs#ïwt蘦•|0Bt]G X/‹„aÄŠ¢(d2²ÙlSíˆh«IGJ‰¦ª¨Zð ŽŽŽ¨#Ïuq=ß÷#P"±oI A¢££˲p]7rJ¼ˆmmc áÙB”LEIÈD2™ ªïc„Rj¼ %“¡££Ã0ð£X,âº.™L† 64Üwüøqüq†††èëëãí·ßÆ÷ýÔÙyѢܟß÷›êôøÞu]r¹ÝÝÝôôôÐÓÓÃää$]]]‘†`f^·nÙl–\.ÇóÏ?Ϲsç8}úô‚àaÅ\5ó}Ó4ë×Ä:QÓ49yò$SSS”Ëe¾ýö[LÓ¤³³³‰tµZåÊ•+ŒŒŒAœÜu×]lÞ¼™7ß|“ 6ÐÝÝÝ–@{Õ:ôk•$X%™¦Ù49…¿MÓdãÆ ²sçN¶nÝÅL¸Æ uýÉ'Ÿ°}ûö¨À«T*†Á3Ï<ƒïû:thÁy }xßu]ªÕ*¦a077‡išT*•×:loo/»víbýúõ@?a€¿óÎ;@PJ—ËeŠÅb´ سgccc|ýõ×mKê¶KJMÓ"Ý~úé§\¹r…óçÏãû>ûöíãî»ïæ‘Gá¾ûî‹n3M³¾:«Ð<€UU9vìŸþ9.\`õêÕlÙ²…•+Wâº.º®#¥Ä4M¾øâ \×å•W^áÌ™3¬Zµj]¡P8KÚ‹©´jÔ0M9_©ÈJ¥"«ÕjTYÆ+ʰRtGš¦)'''e¿”‹ã8‘†s¹\Ã[†Pë!@Û¶q‡r¹Ìôô4³³³tuu‘ÏßDw÷ÍhšF©TâòåËß¾\MJé$G~Q_`ÒjžÐ§þ̰n÷â/|k$CÍ»®[–Åìì,=öÕj•b±H±Xd||||ppðOÀ¿™4ð‹&I!æîx{üº¤÷3™L$ÞJC°è ÁÿüóÏ¿ŒŒŒ¼ \!ð¼Õ Ó¯ò ,­¨ ÷á¤Ï.ñô™Ïç#ð¥R‰©©©âž={öW«Õ‹À/@Kð°P-´ q‹ÇW:$à8†aÐÛÛK©T¢X,rõêÕâþýû …WIÉ:Ik?m&¬ÅZ<ûĽï8žç¡ëz$›Ý»wï/ ß“@u!ðidlû¯-­Y{×êº.]]]”J%~üñÇŸ†††þX­V/ÈfQàá·ú\[¨kšÆåË—ÿµcÇŽ(`Y„lâö«ÅÀRMQ.^¼xfÇŽ{‹±—ÒGÀìL&Óôò*Mû µ… ˜°,¯­ ¼o¾ùæøààà_€Ÿ€¢”Ò^ ð¨”ÿ•X¬!˜‘³ñ¦åt°°3“ÀãSÀl²…ã8n×®]ÙÇ™ž9{ôèÑÚµk×þêeƒe2٤Ç2‘×ë%"¢ªªªNS'NMM]­R©¨ººš²³³Kø¿HxxxøÔúúú&""Žã¨¯¯\.]ºtIëïïÿ¶/ëÖ­+½uëÙívª««»@äc>SQQñ¹Ëå¢þþ~2 äp8èÌ™3]þþþéãè¥aaaòñŒ"óóóoÐ7¬X±b«/éJ¥réÀÀÀXøðð0UUUéX–ýá8r¿ššš/;Võ,¿Ä5kÖ\¶X,ÔØØhôóó›ö¼û÷ï/"ƒÁ@z½žFFF¨¬¬¬ @ÀSR¦´´ôQIII#Á³x&Â¥×ëîÞ½+ß¶mÛOCBB^½~ýú®ÇEÇ1Ë–-{W*•òÜn7€aœN'x<ët:†aÀçóQSSÓwüøñÏ+#ÝÝÝ*­V‘••õc‰D2«®®îH$Eqqñ±ÄÄÄh‡ÃàñxOXöaTww7öíÛ÷GƒÁPéË<ÂÞÞÞ®²X,q[¶lù˲ÓÎ+ŠÐÓ§O_NKKûÞƒÆVîñxÀ²,X–Û ›Í†ööväç矫««Ë`¾@êÔ©­R©T²qãÆUn·›ÒÓÓ£S¿Ÿ:ßh4„B!ŒF#ÊËË;är¹ßôéÓÃE"```´¥¥¥ûÊ•+§5M1€þÈýbvîÜÙÐÔÔD†îÝ»O÷ï«I«Õ’Z­¦õë׫Ì0G$­ Ú( —˜ç;Ÿˆ‹‹KV©Tÿnll¤ÚÚZjmm%NGšî.úð›ZÌ}?Þó%ÿ%99y~aaáçQQQ‘RIœN'Ìf3œöaT×Ö9Ú=ŠvqD„ñE<_…‹-zãìÙ³Aȵê̘ðÈtÜù8ƒ¿=xÅ)N˜égkk¬/ü¹òX­f_|}:J¥òÍŠŠO/Êå!ÁŒºœ°rVˆ…ôÛ”´ ¡‡‚Ï Z;ýÕÖêsŒ~ëK–,YZRRrN$t´ßC Lа°0ðù|¨nÞðæ]ãÜöÉ,ã¶C†úõøÎ|eLd\|âkçÇž/U ##cՉş0 ëߣÑ"X> ~~BÊàñxð‡ßüÙÍ/«¯zB’^÷:¬<ÖO±X KŸQóßœÝñK_ªÀÊ•+ß+,,,õzH¨×÷"D!˲ †ÛíFnnnÃ_Ï_|ÎË.Ãm©W1g¡ËéO$…H(À©1 ßú®L èTU_y¡™™™› ŠGNÖhìƒ"t2†L&ƒL&áC‡Ôùùù™npcÄÜàÐȽ¡sç¹FlàûO‚eÀYLˆKyç5!Kþ=M7®ùT ++ë—¹¹¹G¬C38hBˆB†Äb1BBBPQQ1˜••µÉãñ\llŽ~•ËÒ;Õ«˜3Ëíà ƒÏx`³Z üÙ"–F=Úæ›7&,°cÇŽ²³w}ìryaµZ!›$À€Ï 88µµµ#6løã¸³ã,ÆŽá^•Ë:ëUÌž1j·À/@Öë‚}˜C‚rùb·ÍüÀÐöuø¶nÝšµ{÷îßY,V”—•·ñXŒ†‡G2 ƒÀÀ@´µµaÆ ¹Z­öOxøï08mƒËfMô†$ÇŽÚÌð“…‚q;àp8”¶<3ti;[o=1•šššb0ôŽšL&ÊÌÜT *11q­V«%³ÙL·oߦ… þ€äÁOØŒ¯$+>¥©ë+iÁRæ«hÙ_Ô´éê kÚ+ y°}ûößðùÐÑq÷*MJJÊ+2™ ‹ÙÙÙëëëÇ^¡>ÐÎ+ØZ.4Y87t÷;0ìÃÒ×A+_ùëÒò˜ÔŸ¤#“É¢ëëë›%I X,†N§ëR«Õm)))oîÙ³§¾¨¨è]jÃç5Ì\]&IÊH˜(@Äô3Û‰ gï±e±sø^¯W( ‡ááa„††ÆDGGÇx½^36E {ˆª——·ñööž™““s­¤¤ä3ÿLKK{ëââ²WDD$¨„ÝD *'%%­X¸pá¿Y³fýZü?!!á{bbâ¯êêêÿ===ÿìÿ’’’µè JÀhee•:þü×»wïþ_WW÷CWWw ;;{6PΈÝÑPtÌÓÉ“'ÿ üÎÆÆæ…ì€"ÛÜÜÜÒ™™™k:ôçÎÿ£¢¢îrpp¥TAiM­ceeåûÆÆÆÿÒÒÒ Bl0YPWW÷™6mÚÃsçÎý_»ví{{ûÃ@a_ @Vô-ƒ¹¹9˜±¨ç¿ªªê^ Wæ€ÂpP»A®œœ\ ºOøøøÂÃÃgmÙ²å÷Ù³gÿÏ™3翎ŽÎ: ”³222‚§”’’’ÛÖÖ6÷W¬X±·¹¹yÝôéÓïéÿÀĸdÌ„îÆ˜˜˜YÀ8ý_ZZúO@@ &¡¯¯=eÊ”gGý¿gÏP|&ª)@) ¼¡¡¡fÿ¼K—.}~õêÕÿ/^üþüùÿü¿wïÞÿS§Ný_ºtéŸíÈ!@(°´´Ì)jhhø­§§·(d.,,¬»fõêÕÿ7oÞüÆŒÿƒƒƒïAã[DBBB ¥¥¥íöíÛ_~ýúõ~ÿþýÿëׯÿ?~üøä û÷ïÿ™Q__ÿè™2˜î`ðq¦¦¦^ojjúÌËŸ”••éÍ@þ7Pˆ´··ÿ z"##3¨×ä.‡¾úóçÏÿ¸ÀŸ?þûö ìˆ;vüÏÊÊúïååu ¨_d/@!;€ÅÌÌl'05ÿÿ ÀùÈþãààp˜&5¹±(0-°£¨åÈ‘#¿@ÁûìÙ³ÿ¯_¿þÿéÓ§ÿ Çüû÷Å >È7n;X0ÝÚg ² €P¢€™™YhQ£¢¢â%%¥Uâââý¬¬¬ñ@)#X¼ã] ¶¶vcww÷ÿüüüÿ@681‚Êk×®ýùòåÿ/_¾üE²C.\¸Nñññ \sd&È^€Â– ¡©Ÿ ˆ9¡y\„S°Ì¤I“Ž?~ülÈÀÔþ˜Çÿ—••Ù‹/þüøqpâûðá8 @¡tðàÁÿ]]]ÿéé?0Á®§² €H*²³³€ÖÝ»wÿ¯_¿\€èuëÖtÜÿšššÿåååÿ[[[ÁÔùóçÿƒrξ}ûÀQ Lg ¬*’…@öÑ–`ÚÀ`þ ŠËyóæý­ÀòlðÀxïÞ½ÿ·nÝúÁ‚ÿ9ãnn.Ø‘ qP!²X ݃Ó {ˆh¸¹¹eƒ,›;wîÿªªªÿÀÊœ¥€¹àÿ‰'ÀøØ±c`>(=lذ5 Êiÿþýÿ‹‹‹ÿ²àjhqÍ ² €ˆv@HHȯ—,YòÕªU`ÀuØ2P© ¢ä G€BTòK@°z`ôýŒŒ| lÄ"—„DÐÀÒPl›@‰ dÙ¦M›þWTT€ GȲ3gÎü¿xñ"8Jz{{ÁÙ æ`éùXB‚âÿ°Pkå f‚9 €p:€‰‰‰X.´ ü ŠCP*•dyyy xü?aÂp"%°Ó§Oÿß¶mÛÿ•+W‚åAxùòåÿAmP”ðØX™ *±¡9Œæ€Âê åì¡¡¡A¾ù d8(á‹àÀÒœÝ@Ž9ä°íÛ·ÿ6FÀ%(Z@… (t@YsÑ¢EÿMLL@ź%ó ·Š@öV5€‚zÙ²e`ƒAõ8°ÝlhTØÙÙífµß³gÏû”ÊA–B”à€µ%8èa•³³3¨¶45 `Aì€Âæ&` ?ÊÇ………ÿåýG`:˜- AÁÇ ÌÇaÀ\± XT3(w€B”ÿAéãÆÆÆG¡>ç@*äP@ÕéZZZ»MFG(PXˆYÐ’ ³””T)(„®^½úXïÿ÷ððøÌf÷-,,N‹ó¥Àï õ9®V1@áJ„ f´0´…ÆM3°Ž4§€Õ08 € `%5êcPJ…å ø@d· Ê4Pê5N@)XÃJ8ô`&ä€"ËÀј½þ‚( @å¿Ðt ”)æ€ì ²`kk; ”-Aå;¨æŒg@a/,é„ ˆ,¢õà\ úÏœœœu@a R£d/@‘å`WPP˜#++»˜ÒS ¹„‰%=#vhJç!%á¡; À@0É&ˆ?îPIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/viewZoomOut.png0000644000000000000000000000007413124510115017245 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.667257904 cb2bib-1.9.7/src/icons/viewZoomOut.png0000644000175000001440000000307713124510115020641 0ustar00constansusers00000000000000‰PNG  IHDRÄ´l; pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFµIDATxÚbœ9s&ÃÿÿÿxxxÀ4 Ç?¼8HDDDñׯ_ߟ>}zPXXxù÷ïßo×ÔÔ0|øð  9, ÿþýsXYYÝ¿}û6EFFVEVVŽ““(ÊÈðçÏo§GU>{ölP}1 €X€®aøû÷/ƒ’’’##ã:''Gv99y]ÿÿƒ,üV(--Ãñôé³¢öö®¯_¿d×`€bäääd¨®®ñ––šíåå-#((tá_Eÿþý‡ZÂÀðéÓ'†ß¿¥üùóg.Ð!8  –ÀÀ@>>¾H### 66 æ¿à0&&F 8ÿeàààdøòåKéû÷ï¥þà2 €XÜÜÜ]´Ž¨¨80Hþ  tXÔlã@.É#Zhp80>–211a5 €X€®‘””Tàáá{÷ׯÿ`ÍèàïßÿP ˜ ® 4˜™™«ÁIJdè¿ š˜Á)3Œÿƒƒâ÷ï?`Ÿýþý›d0Èl €@.þõòåËG**êB@# 02@"äÍ`ׂ©  bggeøþýÛ+(EaIJcÇöµæææVÖÖ Ì̬   ù‚™™ êZFx’9äõ?üºsçî~:†¥äT@,?þf®-ÜóÓÒÒUy¤™™âjˆkÿ‚] "Pò<~üÀ2`î;LÀ8ùö 2€b±07axùüÉþ+,̽‚‚ÂíRR¬¬,p32‚‚à?0W²“!ÃÞ½;¾}}w[[[‡¡¿¿Œ _¿~§oP˜ÃR@1ëš82|ûÃÄÀÊô÷ Ó߯ëÄÅDuÿþ'ÏÁÉÁŠLˆw>þôïܹÓÇÏ;ÇóóÇo66V¦“§N–`Ã@.Ñ0#›Ó\†@׉ 02Ø©³1øÛ¨3hK0º2ýû“ùë?³ÐtÆ·oß={þüÙ\`DmÑ××ݶmë¢3gÎrˆŠŠž|ø°+0>‚‚$ÄÊZœœLfŠÒ\«œu…wkËûþ›ùÞŠ+¼k&bdxý•‰Ÿ“™˜¾Aé÷Õ«W W5YXX,»víÃëׯMutt}#+@ €˜YM£XeE8;T´ƒÿ²q1°p°1ˆK ¼yõžÿÃ&ÇM7–¿þÉÊ Åñáç×à´ J-À”³˜µõ®^½ª 4PB@@À hÉ&` @L¢â†ÌœÜQ¬,@Å?¿20üøÎ𘕤¤¿3r¸2ð 0\}ÃÈðäц/Ÿ?ƒs'¤ ù*¼‚555—?þ”*ŒÄÅÅ·¥xAòÄÂ' ð—˜Bæ$ªS*0¬áýé;$üû®üRãøÀ`Ép“˜ëþƒC\ ±±±1pqq1k–8Î7n]kÀÁÁ±Xû¸£ÝÄ« _ßÿüÉÁÂÈÊž¬ÀÌñŸ‰™‰™ùÿ÷ßoû2nUgøõh,3Ø•ÿÿƒ2Îpp€0(‰Ò10gÃ<”ü€ê¦‹õç- ûÞ+_VP0`ãàdd&½?ÿÿ?{ýå ß‹+ "?ò~ÿeôÿìÐ úïÿHD1þbaaý&''÷ÉÍÍm mqóæ meeå=ÄØXWÏËôÿoùž7Š‘ÿ™Yù€E: 0úøX2 ¾þ ÌΧ†0A‹¢#IŠšIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/package_network.png0000644000000000000000000000007413124510115020102 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.667257904 cb2bib-1.9.7/src/icons/package_network.png0000644000175000001440000000511513124510115021471 0ustar00constansusers00000000000000‰PNG  IHDR szzôgAMA¯È7Šé IDATxœ—kl×uÇ÷Îcg—ï7i‰-‰"UÉÖÖUñëEl#m“màAû¡O i‘¤èŠ"mŒöC¢/ ȇ¶©ÓAR‰ÄJËrW–mÙzТd‹o.É].÷1;»³3sïí‡Y2qå6np0À`æžÿ9çþgFðAmâ³cû‘Œg=ÜÕ™9Ò‘ËL伌'„ %a½^_©U6f›¥Í—)¿þ<äW>ȱâ§>±ïó3Žã~nfjèWyh¦ïþ>8ÂÃ]ضăֆr-äÖr…K³y¾ÿÒµê~xîL°ðÂß@áêNò½ΓÿèOïýØßÖþõÌ%S(ÕÖÆcŒJ´i„±i†± š‘iE‰I”ÙµV¤Í.åÍãŸ}:p†ù"Ðñ >õ;{ÜCŸûÞçŸ|ά|£•1õ 6•jh6‹¾Ù(øfu½b6‹¾)WCSõ[¦ê·L¥šJ545¿e¢H™f¨ÌW¿uÝì½ç÷~=ûß/”uÛÌÔþÜà‰çþâ>qÿþÆC õFD+Œ­Akƒ1iI¤$‰A©´Ji’DÓhÅD‘âØÌ0?{êÄÄË7¬Ç¶—¯žƒ°ø¿ØÛïMêÌÿÖGNþöã§1‰Ò$‰¢\©²]©°U®SªøÔê-:sR”ÒhmÚ®Q:”$š ±w¤‹#3Î]ªo¼õ,$µ÷`ïûÄ—~ùч?ú™_;цfØb£Pdi%O©R¥R h4š„aD=h … »³ƒhgoÐŒ! 4JišaÌøH®74üò•í;µ?û À¼@ߟ<~êc_üõgh0Çòz‰…¥% Å-šaDibe%a,1ØÜ9> Æà×›8¶eY(­)m×PZ#-‹$Ñĉ&J=Yæ7Ë‹·Öˆ oü$€ŽÁ™ÇÿùÑ=tg?«ÅKK‹A@œ@KgˆT†V"hFšz±g´—ñ±~–W6XXÉ#¤$¿±E~³Hœhz{ºQ*å„Ò)/´6æõd&ØüϯA  ûž_¹÷þ_ü´Da„¦”> 9"ãÅ‚V”4#”ÒãgŒ"0tuæ¸cl)%•ªÏ@o/ƒ}`Hù  ‰2¨Ä¶ÊÛMêQf`añU¢Â«ÀàÔÇŸœ>05í ¶«Uº³ abiV¤hE10¦§3ˇOäÐä B€iY!p‡áÁ~éßÊÍHr“Çê¡p‹Ñ6Ö׸4W¥ÖPTü¿IÅoR«‡\¹±N½áº6R ˱-l[ Eê‘b6£ +ùÚ@½±Uò±‹Ž¬ÃžÑÑ™‘{méõMwvvr×Á1ŽÏŒ±º>Íì»ë¬®Èut"¤£xåÍl[ðéO=@_O€f+¡Æ£Ñ¢ÝÈxü Uªð½s¯Qo$?zŒJÐdh ‘œ¶Û9>=žfd[;2ÅéãÓ”*e¾yö%Êtt bLª„Ͻpr%`z²“z½Åþ}C<òðq´‰‰“vö˜”±frïŠÛM:»X/.ñOϼÄè@?ý¸oØ–!¥À0ƵbËerüºï_ûæ¨ø1]½»•xîÜg¢TjOåç<Š”P»ÛQ)C%´"Ã׿s‘Òö6AݧÃ륿7ÇÜ–e[dŠZ€h“J›T8}’'Ÿø]²Y^Z¢T )×B–B‰°l®Þ,2¿\DJ±;÷q¬‰"…1‚oœ}“g¾{ž‹¯¿ÆþÉ >úð jõ&«…2J)l¥¢íV#È"DZ‰6ñ‰¢˜·oÌS 4±¶©-„0m i¯k~̵¹5&÷Ž’$š(NwGƵYÊoñÌó°Ü.î:z‚7涸pmƒr­‰ÂF«–/£úæÍª_C™f¯ ÚlÛ&¿Qä¯ÿá+}×ëBˆÙN»0éÂñƒˆ8ÑıBiƒApc¾ÀWžy ߯!£ãÃ'ïáоarž‹çTXZ’4×ÞÚ(*Jµ'Í.‰.^ž'н¸ÙnŒNnÛÜB¤l¿rc‹f3&ŠÃòÚ6¯.sy.m;„õ-LÒà±ïæÑå“9…M+Öõü5 áÒü;—/øM…ÖÏu¸tåOüåßó­ó7ÉtM ÄíŸ ;–qmÎ|ÿoÎ.!¥$Œ«›5^»²H¥¼…ë:HÇ!ŽË’ø¡¢R¸ù.4f%@~á¼»¼ jgÏžcaÍ'A õcR–”Ø–…k[¸ŽMÖs©ú-~ðÊ-‚FÌw_¼Î_}ùÞz{a"¦`ÿ¡S”A³Ù"I oßÊ–®žÓԢ¢/&~éèôá¡›‹Ü\NK&œîTï…Àql¼Œƒçî\2®MƵÉy×Ê|ûÅYνz‹°#- ËÎr÷ô^6Ë1åzÌÍÅ V7ë\¾úz¹•?ûç`æwjÛ¬Õ*I¦ÿ®_ìɱVjâ:†8QØvެçó²™4ãlÆ&“±Û ,2®¢(Áµm\Ç!1FPñHip‹•Í*óùmÂÕçÿÝ´6¿ $?nnT¼ºQ±NNÏœP!¥ËÖ-Â7d" Âjÿ2ÿÓðseÛt¶0ŒÖ׿¯Ÿ„Kêce“ò)üÔ7Õ õ©y¥iÔÔ£ŠYX6ËÆ2y¡<_žÏÿZVj,5¶Šaµa5a5îj!ùNò‹dÖßXc­æá7Ó+Òf§ýøÒØí;ÕWÒŸS…¾Rù[õ•¼¥ã·£ðwLÄQ”ƒÄŒ[J=EˆL˜&üߣRæbNè½ÿô&yi˜v˜ÖWkä©ì†°³n‹k¸k¸|¥ehKEKEràˆ_ˆßF·Ù Ö ÙÈa³tGôD_1]ܯ½'|§-ìî»8åb¼ž6>uü 1Tc÷ÚûÄM¾Ûàfº>jJ„1JlÐ%èÅpÃ.ý‡ú]Ÿ~¶~¢~¢iØ¥_¯_¯-7êsõ¹bF!ql‹eq,è jQP ›Ê&¡”¶«uê.~A—Ppþl«²õñÂ'ÍÇŽ5Ðîк„‚„ÈRÛsûs;ÈØ;´~h=¸TÐûV¯WêCô!0hšØ v²–ÆÒt”Â)œ¯¡*¦bL¡ BCÓ(¦¨ä|"ØFa»PHõ‚\)W¢.vINbN"Yƒ×|¼æcu4Vï¨ÞÄ}ÐôAàçôyêóP/È1r àyâyÓкEÍ”ë³Ó°Ú"áæ¾ÆJÞÎ7ðˆÀÌF1 EBx`Åpvi™œÌÜÆm€Æ(ÌæÉÆ}ö}vÑJ¹R4Æo²l²=®wÜüNß nü~ôWüU@õó¶y®<÷÷€§ÑóÄóœEÐ)*§ýB¾€Â ¡X¥@¨¹¯¹p·’©dš£>å>å@ÂþuU몀[KwíÛUÔ,÷,—€!Ÿ&$mk+Öž… #AßJ’:]tg8N:^J&¸ð6©uª`A‚øÂ>eÒ šзl[0U­‰47qçgtû˜öqÀÈ *|L7ž*:uP/Ê¿³€ÿî™;p{wÑ…¢ÿÞß;n9~tåÊ¥P»~çJ)·œ'‡¾ƒqÄ¢Y4ÀvÒ :ðJ§t€åаçfÏ @xçGo´º—>VŸã@ÊÌØ  3øzÖõ2àBÆ{¾ï@½—Tüyñ)€Ÿ |Ø‚‡½¾ò^y+ÞÓÄsx6˜€@øÁ€qà @ï3‘‰Þâżൃ]Ïž½@xßaB `¯lö4{Ÿï}aÙ¯ò—¯›ë€q­ÛÎl»cÄ–”®”^ çPûÙöSêÝ*ûVik'M Ø5 t´ƒa=¥§)Xõœ$‘ içwmwÛZ€+‡-é–ñ€k­­Ý¶ø_F-Ï5äzIc—[–/§gZ§VÙwtX;Úàx½èÕŽWÿV²¨Š¦Ñ2 jÚkî×4SY|¤öÈåŸÜü—¼†×A‹¿™¶9·9¥3—¸—¸ã½]®®ú®zy¡’¬®RWqÞûYègaê–Ò€¸Ÿãîó(kç¹·Ïàá|`a}…Òi/vÔvîŽçÔº´umëAïºg­Ï›†ó’®’ÎÛ±÷ÓÏÁà„¯…ba?ö j¤w“wà©t¿ë~—–èýýÿâ¿–¤Îg׺®½ŒÿßM/ÆýÇb¶¬À£Èo×M¬Р +l*Kx}D…ü_j‡Ú«öj^r\º|ñüñÔ̘̔LÓ’˜¬\1öñÙc³¡DËÑ®h@#ÈÓúûûûÕÄ Y¡ÒàH}‘÷be÷e±Ù”oÊ×6HL2¨fZ$¸…6JìŸ) ÓtÀ#™z¦÷¤Bölõæ{ó¸«×Ó{£÷ªvkCNˆ×_ÉJÎJÉŠ³8Â}{ÌÕæ³æ2ô˜ÛÌOÍÐDòH5Ò†½5:j4 IÒ'Ò'†Éq?ÅXc¬‘×}]áIáf”ôË®w\“Ðâÿ§¨Då!¸ëËÛÓoç‚„†bÃa´ÑGX…•´M©NVS”ô&M“Øä~´ÙñØau¼öŽÉº”U“U.s¹Ö|!ƫƫÆhí'í'í'áù?Åh&€³ÏžÆ"zTXtSoftwarexÚ+//×ËÌË.NN,HÕË/J6ØXSÊ\IEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/filter.png0000644000000000000000000000007413124510115016223 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/filter.png0000644000175000001440000000065513124510115017616 0ustar00constansusers00000000000000‰PNG  IHDRµú7êsBITUìF pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<,IDAT(ÏcøÏðŸÁI4¼§`yášüõ¹ëRç‡wzTXfjǸ‰‚ä@ˆ-åäî_{_í=¿wëÞÙ{÷¦ïõÝk¼RF¥„¬à?CƲ5?&~ÌûFã³ÜÓ‹îËc‹’ƒe &üg°6™ÿhïû‡¯>¿ÿöþå©{ƒ7ÚÚº1(ÁügÌÝôáÔýŸß}ýpuáÞÐÊ0Agˆ TÁ†ØY»n|÷ããû+{‹¦©&ÀÄá ˜]»þéù‹“Û*­ ˜1™ì…Ëž]¿·+¤žIô?ôÎúôæÈr³d1T9_ÞžYnžˆSWîç·gVY$áVT°Ú2§ÏÂOïάµÂ­À½¨`ƒu NVù/ß/ÙiˆÛ ÿÄÝØ,xE;/ä:ŒÑIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/fileclose22.png0000644000000000000000000000007413124510115017047 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/fileclose22.png0000644000175000001440000000204013124510115020430 0ustar00constansusers00000000000000‰PNG  IHDRÄ´l;sRGB®ÎébKGDÿÿÿ ½§“ pHYsvv}Õ‚ÌtIMEÚ  ðT3 IDAT8˵•ÏK[YÇ?÷åå1‰´˜’±‰$(."!tãªfé¢ÐÒE7ÝÌrÿÛâ¢P:¸ÌJDézÚÅ,ê&¥m´†Iy¦%“šhòÞ˽w6“‡ÖdÊ0̃û÷òøœï9÷¼s„Öšÿã1Ïo„ ÿ™eà´Öž·{½žîv»ºÛíjÛ¶µmÛÚqœKæºî%“RêùùùŸÃüÚmÛ´Z- Ã@á½ûöwdÞº¿Þ™ñ5XeY†q Úw4ÌÎ;3%)N{££#”R(¥¸®‹ßïÇ0 ´Ö\½zõB$CÁB>|ø@:FJI8Æï÷£”Â4MÚí6Á`@ €iš(¥0 ŸÏ÷mp_±‚J¥‚¿ßO"‘ ^¯‹ÅèõzH) …B¤R© С©°,‹T*…iš /ƒBï+þf*‰†aÐëõx÷îÁ`Û¶QJQ«Õxûö-_¾|abb‚›7o’Éd¹ÀXF!@€\.G*•"‹Q,yòä ­V‹d2I»Ýfee…¥¥%Þ¼yómÅ>Ÿ×u©T*Ôj5=zÄää$wïÞ%#¥$‘HpíÚ5J¥ËËË<~üøŸG" à  133ÃË—/q]—L&Ã7¨V«|üø‘ׯ_S(˜ššbdd„õõu¤”þ`€z½î…uzzÊÖÖñxœH$B6›åÖ­[T«UÉår$“I:/^¼Àqœï†*N§ÓÞúÕ«Wœžžâº.år™õõu®\¹ÂÇÉçólnn²±±A·Û Ñh|èŠ+• ŽãÐív½âÅbìïïS.— ‡Ãœœœ°³³C&“att´ÿÃÔ´ÖƒÁÓÓÓ!ƒ^çët:X–Åýû÷¹~ý:{{{D£Q88ð:]>Ÿgrr’Z­ÆÜÜ <{öŒ§OŸ²½½Íìì,wîÜáÓ§OH)qç÷¡å–Íf=ÅÜ»wµµ5ŠÅ"¶móþý{’É$¥R‰ÏŸ?óüùsšÍ&J©ŸµÖGâühBÜ–Rn)¥.ôÜF£Áêê*»»»Œ‡1M“f³Éññ1ZëßÎÎÎ~´,ëÏAà¡£É4ÍèØØØB$ùÁçó%ûU£µ¶¤”¿v:_«ëß Ó`0hF£Ñq)eÒçó)¥š†aÔ”Rõããcçü·Bs¾•nh—ãIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/exit.png0000644000000000000000000000007413124510115015707 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/exit.png0000644000175000001440000000311213124510115017271 0ustar00constansusers00000000000000‰PNG  IHDR szzôgAMA± üabKGDÿÿÿ ½§“ pHYs ˆ ˆåŽ)ItIMEÑ ³CŸJÇIDATxœÅ—mˆ×ÇÏ™ëª{½»ÛU¯^ÝÙUR]ßíÚ…hZ ´&,„@# ÄÔZ¡OY ˜PZóRI  h"ùR°ÁCTÚ$•m×À®n\5ºu·wwvW½oÞ{çäÃÌœ;sïlB ‰çËÎsæüžyÎóüϸÇMª޶5oöÝß2ëppç }jJ޶5vÕ§æ3{ÝJf¦’ 5Žã€Ö 5š28ÐhíŽk­A;hÇëu°×äÓ6·ú®8²sÐ~¼ÆÞºc;ÉMl›â¤M1›4ˆº&dZtx!ü˜…³@YŒ÷þ¨7ä„xð-ÀÉÖÛ™³a #ÿ¥oõÆ<߆ó‡PÊݱH®è¤˜Ëî?GúâyâÉ…¬Ù{¦Íà‡O<ǹ矤˜Ï¹ÑP 4®^Dm?á:~Õ‚Ÿ9Ôcà‹·>Ì}»÷³âw/O.D”"kðé ¿…Òó^ûO­ÀÅS ]‰€q@SFÀÀç­Þ3›LØÏê •Ú¬äB³H<¹À$\1—¥ÿµ?[ãÚmÔÅ.\”Ç/GDÀ‹Wç­]ÛŒéúß^‰¨ó€&Š„nòÆeŠW{yÎÒ5 Ê}OûÑ®vÀP_dÚ—ËÐÙ“µ"e«&Û‡/|lì -í(¥‘PT¶ÀßOá˜])¹b6S£p¡X‚‹¥(æ³Q1$f¹n; 5ZtE^ƒ-B^%è‚»öÀ".\YSWööÅ—OìfRݬÆy ‹î˜Êöiõ‰ß…+Ã=.£’P;îšÞÁRýŸ1µt>P£í‘Iè'§(æ¯ê2æÛ#_ ¼-@¦Š€7ègûÐÙÓfÒ‡v×,Ámß9Ÿ“"ÖÒaìã×ú+[€ªT\u\!p³ý湊?Ú½/TjÅ\ElJù¬O7°|×ÓÆæ P.e¹U€/ûÕÐÚ-Ä@Â]:¼ßL¬k_Ëê_ì5Ù~ùä1®ÿ —^–É›W |Õ¯ÿj†yïÒ{G ÜMB mAà,p+”í£Ï“<ó.M?þõ›éêØÌÍo0öù†?ûDhlYBjåF«¶†¢võí—) ¸wFF~Tg{ßñÃ,Wš—RÛ~Iª"”‘mèý#Üùÿ\Y1„)# ½,­ý“é{çs/ÿ—öŸï‚Dò+ÁÎðƒ§ÿNþ¶] ·b”2t9Â|ÚfÆÜ¥*¸¿ç£ûóS4µ,aþêM4,]å•¢@>ËÄÕ>Òýç<° £0nSÎj8v«ïJwÓŠ6Ôô:´ãÔh»_ç“7¯09| uâ­Š¼z"ã?OϧG¸;6Ja"îEÅTÁÁüèã½Xõq”‹„û¥æ,ß>rúòé;”sE€ƒq1™Ûµ’IJEà”ͱ©ÑáÛ†ÆÍÿñVò¾G»Ë B)“¡0nswl”|úÙáI¨¾˜T;Q×Ü@¢}ÓšâîÑé®]žcáñ²Û;î5Î}v{]Ö”³ ÿË£¯f'¶ð=^Nïyû<’\^‹),¢IEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/pdf.png0000644000000000000000000000007413124510115015507 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.667257904 cb2bib-1.9.7/src/icons/pdf.png0000644000175000001440000000362713124510115017104 0ustar00constansusers00000000000000‰PNG  IHDR szzô pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF IDATxÚbüÿÿ?C~~þEµ?¿ÿaòÁJCy¨àÿ >²È\ꀀþ-}öüùå)S¦X X‰‰½ 9™“á×/&&†¿!ªA|vv†W¯¾‡øï*©ÑhÚ„Ýá,, ?uuò««¹@BÄwñŸ? .000330¼ÏÀðჶ6Ãýû K—20¼~ QóãÄ1 ƒA àáaøïÜÄ‚6 wï20ܼÉÀt!É 7n00üü áƒh˜ÏA¾aøýk£PhClT-@±Àƒ†ŸŸÁÍ ‚A|b¡ >À,Òÿÿý†(ª€I¨æ?Pì,z€ô?¤ ÿu$È::VP”rrÂ@€â^Q‘`þ‡áß¿ QÇÊÆð]f!ˆ†aÃAþÚà ò  d(øþŸ9Âð¯.ƒá¸ Ã ü ÿ¡Áµ ž`Q„Äÿd³€¢ ˆ‰Ëÿƒ,ðwJ3ß'À„táÃçëþ}ó)’ïBÆþ ŒZF¤@L $‚ÿ „Ê!ü‚ ŒÀõÿûW ÿ#|bHà0ýCË-ÄDr€’ Ó‹gÉJPÿàÙê?‡@Òð?`šþâ{ &¢ƒ).­\ †rq3üçf`D²%è‘0ÈrÍÄ„j%@±ä{X*·÷b`”WføÃÂÆÀ$ˆpº#Ùÿ/3 9tѾ‡ü˜éDÅþ›Ø1°>ºËÀôø.Ã?VL‡Bõ,Å=ÈbPð£G@‘– À9Zê½zÎÀúéûªY ?€ “šÐãd9Ìbl &B–‚ A6ø?#Т·¯þ}þS]™ûÀ&†ŸÇö2üHȾ‡ùÝrt1ARí2 ¸u™áÿ×/ ï²ê9¹8çv1|{ÿ °ÔËï„@LD%¦¦™ \‰® |½å ¿R+¸Þ¾``øö•ᯚÃ_K`p *è T2¡$¢ÿèšXÙØvm`ø!"Áð×™T¥0£ƒùè†?üB WÎ1p”D1üTÓe`úý“õå3†3·3ðªi³ïo¬ ˜… ϱ£àÄÊëÀrŸåȆOúV {Ö2pìßÈðëÍK†Ïjú ¿2jxÞ¿fàžZÏÀüò £ˆ$Ã7u}†ŸÀ(á‡E’'a €XÐŒ XZ‘ ÿ98Á¡È´s 8ð¾{ÃðãÕ†×þ ÿmÜØ¥äø€ þ_:F L»Ö1|¶o?$0Љ›.š›„×ÿÙØÀ.g=º›qå,¦Ã;>[»3|‰+b`ÓÒ6ïøXÿý·žþÿüvì?C+†¹§.ArÃ# û¡„*(”‚2´) @8ðXÑ0?¼ÍÀ<±ŽáûËç Œ_?3°òð2¼µˆ®1û_`nùýE/XÿÏ  91)‰ Xs"W¿œ@þ+` »¡¡áåÌ™3ƒg̘Á@Lè´œeß&¦¬†·âò Ÿ“ËX~ý`xRÉÀ£¬ÎÀ´Ô0Á—ÇY€>ù–••زg[þñãG†¦¦¦—Ó§O·*¹R@˜!Œo¦ƒÛþ›\¯óZØq*R“ÈðÚ1€á@?;ö2ª–È@ÙÆæââ¶ôß3ÔÔÔ¼œ6mš-PèL@¡…¸]Áxö0¸²ز”¯$’á…;CR1ƒ8¨-LT)J°2ååË—È–ßF¶ €ÐBTÓ—ñÀ²:Ã? #>X1°ë™2ð°²@$ KpÝÈ¡ªˆ8€OPœwvv‚,·Aö9 fƒØægf` Š4œ V –¶!Àl/‚|>a„èÁŽ Ål l‡¥¦$’,ûÛ·o&Ožü˜àpZÄJP¹¹¹×TTT4ñöŸBІoß¾1>}úd¹zœ£×¶v??¿2=ÐŒ¸z䤸ä‘7oÞÆg9Ìòzü—º&ƒIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/configure_files.png0000644000000000000000000000007413124510115020101 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/configure_files.png0000644000175000001440000000202413124510115021464 0ustar00constansusers00000000000000‰PNG  IHDR00Wù‡sBIT|dˆ pHYs11·í(RtEXtSoftwarewww.inkscape.org›î<‘IDAThíYÏkGþ¾7³»RãtÑ©Pr2ô »O¥„Ü ]úˆþe…Üb|5%/uNL.èbpIVÖ²ózÆì®ö‡šDZüÁ²3ófåï›÷fæÍ˜ªŠÇ i›À·âI@ÛxÐ6ž´G/ÀÖ///ßDQô–dm¿8ŽÇñ÷e¶Ä=€×ÇÇÇï«:Ô3Ƽ‘Ú>Óé³Ù "[qfà7ï«:Ô’ uĦÓ)æó9Œ1_ÅnC„uÆ¦ÐøRª ’墭¬ŸG¶^U^!¨ãØBµêw„¯÷€µöq 0ÆÔºoGh¡ÉdòÃÁÁÁï$s3öððð(MÓm’k„1æ(ŽãQ¶MU]Çöûý™€³³³Wþ(~ÜívÞò Óˆ4M_ÎçóQ‰év4½³«NŸÊˆ’”’Ua§(F…Gš¦Ÿ€Uõz½wwwë©Û Œ€ëõzááp8WÕ› ?Þ5Ö8¨êÍp8œùUè ÀOÅs[ä¶ÊñÊ„axàU¶—1†[Êq6IÁÚJº. Óé|(޶µ¶õ9 " ðØöÁ—Xk¯P€1¦uªº&0›tžžþàG_‘_а•ï çÜß™úç“““_}%—JA0‘#_WU»Èqpγöœ€(Šnx¢ªûpä”Õfæ'hn¹Ï °ÖŽ3ù}°/÷¦$’÷ ªÕ0ÆŒ}Jᜳm'rÆ+"÷¦i½€Ìº¿7‘ ëZ@§ÓûQWUÛö&æAÒúÈðZÀ`0¸½¸¸X›n#v ñƒ¹ ·Y[‘¤ŠHLò…ªîÃi ÀòdhŒªÆrq½6ÊÆ˜À ­ïx¬]‘T É`æ@°šÍHÆ$A²» r›€dWD|å°&ÀZ;ç"’{B$#9C±d¬ªÏšÈ×ÝÄ•µ•ýÞ¦m«ßzF²^I^__Ïœs½ºø/»*,TwøÛœs=’3’Ô̳™àùùùyÒï÷ÿI’$L’$tÎ唨jS\5Ùk·w’9»ˆ¸ A,&“Ià9É/^ n&–}ÿ‡Xž",oÉüÞUeH,Vïªr¶-ÁòŸü Å2u\ÖlÊwV¢üƒ’wY[•´â]eSm Ø(`ß±;Õ7àI@Ûxôþ±[O R†ƒIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/edit16.png0000644000000000000000000000007413124510115016032 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/edit16.png0000644000175000001440000000126413124510115017422 0ustar00constansusers00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<1IDAT8…“KHTQÇßwÆ‹ÛhFÈŠ"‚Ð6!-jSû ¨@ˆ¤M‚•–=¤E‹² ’À!ÁBèIÖ&èaQÐ"Zµ¨©1A0Hé±Hihš;3÷k1÷Î#…>8|œsîùýÿçϹbfˆH§TÂÿË€éH8K$k>ML<ÏýÉIˆA)Qƒ©«³EõõÛÊçœä½¼û•É *¨º +ªÀª‘ˆ©8*í«*Î)ª炃"hÐC€HÉh5Á9‚!‚h$µÑ€ Îi ¢ŠS%çy\¤uï®Êºs ;P©ÜYUyx÷ù\ž­ëÉô\•Uåß Ê*“Ñ^–çÓ=ð“#­qÚ%ÃCeu€š+Æô±8;Fgÿw’'V’—MMÍeÀ…-âÓû},õ^ÐuåCgV‘þçà±[eÕ°‡°ðhäË ¯9zù ƒ§ã|œ‰ÓÖu›X,6V°¹ñG[ì÷3Ú/N2|¶‘3 tÞ –?žššÂó<ŠÅ"±XÌ<ÌŒö= ý÷î ä6nXm/‡·XòünËd2–Ïç­P(X±X4ß÷-•J™ïû–Íf­§çÔMÀt4¯ãýÎÛ ïÞ¾²dï>›››3Ïójff©Tʲ٬uŸ<>DÂVˆÈô¦µÑÏW/ퟧªû¾oétÚë8Üq ¨33Ì 13ZZZâããã=³³³£@Ò¦%U£¼13/Ìå/û\ø½e¥H4IEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/application-x-none.png0000644000000000000000000000007413124510115020443 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/application-x-none.png0000644000175000001440000000113713124510115022032 0ustar00constansusers00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<ÜIDAT8•‘=kSaÇçÜhkm­E -vÑââ – ‚£¶›ƒ.~qRѽŸÀÁY|ü¢R¤ui ’Ò‚.)FЛܗ<Ç!7·÷6UðÀáyáy~çÿ?GÌ ™æù¿¨šÙv!9Ì7›Í—Î UEU‘\骪)—€€³—d°ÏܧÏÓô¡!<{×@Uy¿ÙæÒÌ÷®OC(ÉTÌU^¬5)áÖÂ$×Χüx…¹c\žèQMéNDÄÏ„OÛ?ñT™›,r²4ÂÖwÏóú™ä$ëíò)î”§PUv~üKOä¤ég¢æC½ÍÝ«§;°/`ׂjj!;ÊÕ­6nÌì;Öœ‚Aw%©ÆŽ+gŽr°°;¡¿Z`ÏgáW7f1ãÝ9‡sŽ(Š py{$е†Oi¬Àùéq‚  ^ßdôÐ(¯^¿Y603€Eß÷­ÛíZ†E‘Åql÷Ÿ±•·_-Š"[_ÿlaØ£J¥œÄÌ2€NgÐëõÌ9g­VË6ªU{XY®53²€›~§ã‚ °(Šr3³FcÇ-?yú1©œ~6³¾ ™JÈÃmî‡K<³¤â þe&ë#q°¸7IEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/application-x-executable.png0000644000000000000000000000007413124510115021625 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/application-x-executable.png0000644000175000001440000000076213124510115023217 0ustar00constansusers00000000000000‰PNG  IHDRµú7êsBITUìF pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<qIDATxÚMQÛJQõ ú­^ Aúа—(z)èA1«QÓ¥²( 4Í,qÆëx+Çñ’]¤0ëÍu¬öØ`²a½×YkŸ³ÏÑa*vŒa),q‹Óœ¶,ͪè½b_HcþÎu™…óÑTcÔGu%ÄÇK-æÞÐ+ú2뢇tQ¥ø¢ì›ê [Ñk¼ÅwÚL!Œ Ò„>ÑÁqer„+ÑDE<£…&ÈC„Œ}a,°"ñ‘DÎG$†î O 1!íâ‹YL:{&$”Pw¢z<§Ud!¢B<'ê¬Ù¹åq¹{¨ 8Ÿz“:Š„Û¢nk‹•ÚäŠ œGÿÝ(ŽêwÃܱMÓß &y´‰Ê!y4ѡܑšL±—OB@5”?ÐC "œ¢&0¢,EŽ ^ñ6´Ž'ę٠u°®Þ3¿èà‰D‚r–náŽ4MóQ9Íø6ƒ¸T]×IhÁÊ«\€jUU%‰ ½Î>MS8üÇq ¤s‚y3ÿªSY¦¢(ÒCì'§¨~«Ð¾‰IEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/edit22.png0000644000000000000000000000007413124510115016027 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/edit22.png0000644000175000001440000000153313124510115017416 0ustar00constansusers00000000000000‰PNG  IHDRójœ sBITÛáOà pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<nPLTEÿÿÿ!!!999………†††‹‹‹Œ’’’îîîðððÒÒÒVVVZZZaaaeeejjjkkklllpppxxx{{{|||€€€„„„‘‘’’’’““–––žžžžŸŸŸ     ¢¢¢¢££°°°±±±²²²···»»»¾¾¾¿¿¿ÄÄÄÆÆÆÇÇÇÉÉÉÊÊÊËËËÎÎÎÎÎÏÏÏÏÐÐÐÓÓÓÖÖÖØØØÙÙÙÛÛÛÝÝÝââââãããääääääåååååææææççççççèèèèèèééééééêêêêêêëëëëëëììììììííííííîîîîîîïïïïïïððððððññññññòòòòòòóóóóóóôôôôôôõõõõõõöööööö÷÷÷÷÷÷øøøøøøøùøùùùùùùúúúúúúûûûûûüüüýýýþþþÿÿÿS…íétRNS#&MS\l¦¦±±ºøùþ>ôz#>IDATxÚmÑÝJAàïgvu ÅT’B+;©(¨£ ò ƒ® ëèvºR‚(„¤£¨ Á ’DKÅý›Ýiw™ _˜ïày¾A„yÑ1ù†NÌ|fAr!štÎ1Ã÷› ADˆ{€b¦0 =dB€”@šU`’tE6é‹Rãã…€)äF‘%Ýøb-Õ?P½Nå亴‘rqçf1Óm+Õ¸ºÛÜ]KL\µ‡³úÚó£fFd#ó°˜maÊ@¬‡—½âmíôµš‰>äСýõÇnJm½“hVV‘gÖ›G8Ý.ûšM 0¬Þ«bmðî‡J%ÌeaÐJ~ƒÉp”iJW¤!Á}³ïº›¤®?¨vÇNºuDQxÙ'9óh‚‘s-7Q@üóiJJмhëîm°«à2ˆ'÷#Bd-ªŠˆAuB TVÑ ÔÈs%0"Hdñ^1FÊQ@0@À³:Jè¦k-²†È¢È`D0F¬µÌ׿xûÍßpö‹Óxõø"CUïÜYQ¦]ЖÊ–_83}nŠGyˆúås|#1Î9·_°iÓ¦+¢,´6eÚaAD#Î~9Imæ+~úÜ3ìùųÌÏÏEï•§w>Åàcýïô÷÷ÏNMMýqùWÐ*"×ä·ü,`Jˆ3ÿeÏ ÏS©TȲ”óÓU>úä.ÎP››c`` ýÀ¿Û¶mÛÏ—à[’+r}!)½b¥¼ÿŽö6©K¨Õsþð·À_ÿ>‹ªcff†ááá΃¾ÛÑÑñȲƒpQÑ,=pu>€”r¼ðÞlƬ¿Ëã²yÎV ³³ßÒյޮ®.ÆÆÆë¶c ,oô¡ì‚Ó* ëׯ Çã¿„ZÓÒßßG÷† X[ŠÒþýûÇvìØñÊ©S§>ˆnµùÂÉÊü.õåê|9´5!"twwÓÝÝÍ}=[[UœK®ôõõ±wïÞ×Eäè²:¢p“ "%hšå7íŠÂÇMÒ4ŃªR###»z{{Ÿ‹n¥| />ñbÕ°¨6^oyžãœÃ¹RÁŠ¢ Iâ8¦R©0000òƒðáZ \çYê™Í÷ÞÇ¥K×á,Ë®n–¦)QÑh4¨ÕjT«Uêõ:›7oÞºâ¦ôFÛ1ðÿþÏÉÜ{B¨*QÑÙÙIžçÌÎÎR­V¹|ù2Î9TU—\Sè\Öº®..Vç¨V«ˆ•J…ŽŽÒ4%ŽcjµµZF£÷ž¢(˜˜˜8¹¤+þèÄ¿Vì…ÔÅ´gyõ×cÌÏÏ£ªxïIÓ”$IÈóœ(ŠŽ9òÉ¡C‡F¯h¥ÑÎ;jÓ¬½ß¾}¿}ÒZKQ­þÑàœczz:9vìØÑãÇ¿B8¿`5LDÖmß¾ýÅÁÁÁç7nܸEUõÊ•+ÕÉÉÉÏNŸ>ýažç'Cà;^&‘“1ùìÌIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/mimeFolder.png0000644000000000000000000000007413124510115017021 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/mimeFolder.png0000644000175000001440000000110013124510115020376 0ustar00constansusers00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsaaÁ0UútEXtSoftwarewww.inkscape.org›î<½IDAT8Õ•=ŽA…_uWϨ™!D²dNŒŽÀ|I,‡¾‹CË!¹±—p@°BŽø‘›î©r2µÌjƒ}Ò¨Ôê®OoªJݤªx ™¡¾J0/&“ÉgfþÔ¬cŒÕjµúuMTõËp8üú$8„p'"]"‚ˆ`·ÛÁZÛ$ž€ˆè$ªêÛ³ŽE$’$¹èôÈñÉaÞl6yÝn·_UÕÕ°cYkûëõúcîi4½SÕoÐjµÞ0sçpŒq¹Ýn}4EQLÄzŸn²{š‹¢˜š²,ƒ÷~꽇sÎ03nùœsÆ{ïý´,ËÀÐn·ô1Ôtù¥ª”¦)<õTäy>«7ù|êEqmjvgY¶€ªªøÖK‰ˆ¸žùÅœ$ÉBÏ;ç`~3󜈬ˆ<çî0Î9«ªà,Ëæûý>1þ;õ‚˜9mþ¾iÞb¹\v˜O{wMYþš¢Nžç5îõzÕx<þBøcd1ªÚ”…T•T""‚µVh cŒ0sL’d6 *UsED@ 9а𻉪*O濺7ïƒ"½Ý®Y¨ÓIEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/configure_documents.png0000644000000000000000000000007413124510115021000 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/configure_documents.png0000644000175000001440000002610213124510115022366 0ustar00constansusers00000000000000‰PNG  IHDR00’%ÄbKGDÿÿÿÿÿÿ X÷Ü pHYs7\7\ËǤ¹ vpAg00ÎîŒW+ŸIDATxÚµœw|TåÖï¿kOI†T%RA(ØB‘&(Mi"%4A)Š Ò MŠ RB‚ˆ€ EIèAZh %„$$¤M&3{?÷Ù ‡÷rŽÇûÞõÏú<{f—ù­gõµGx„¶½¾íõm¯CÈÌ™!3Ñ"ÆEŒ‹‡‘s>ç|Îy""ÚG´h/£dºL—é”'—\r)$@ÑøÿK“+“;M.óüçÙMnù‡×Áü݆ù»K¨qjœGZò¶ämÉÛÔÜàÚÁµƒk“œ<=yzòt´¬±Yc³ÆbtØÒaK‡-^æq7ô5y‘—iÝÌç5GWóô•æ÷j›Üó_ÿ¿G®wÖä6“GšÜø›À?8ï†ÉóL^ë¿|þG¯wÎ<ÜË<}ƒ—ß1oýÿW°>rá$vpìÐØQt´hÐWƒæú®.s¹Ì•2)U †7S¶a=ËaËoÖSö†Ýð1|ÕTi!Í%š§È#.Šqy*]¥Ud ÕÁ¨d„‚zËhm¼ÚNÛ ÛQਂ@ïäúÃu´§ì)öT„&r\p¹,®tWIm–üÎi¨³>ã}û¼®~PïªNªåx†<ƒ‡;øàÜ'›l “SœÆ.¿ÊvÙJ²û÷>Ï1 2ö§õsLð™àÓݧ•ڨƩÑê}*Ržðà‹ àB6 ÀŠ Âvv²“$-I»¢]‘Už§=/x^(ŽŸ?xþ'ó?I<“Q:£dFÉk~±ŸÄN^¨}2hÜ qüðÎîG%]âÁ®®®._1|6ø\ò) žðâ”ß~±ySWwsâækjýdŸærd©s$°†wågÙËË|æËT`–Lc ÈjIC@¶º®’@ µ9m·A[kYd™ú+E£Š‚hZk­ØZff€çDþñüã@µN­‡ÂççPó/Œ®àW߯–_È-V[ dx“çx‘x‚'€2X°€4Ð^Ñ^â¤bw±Üî·ü,~wýÒ€uj¹ZDR…*@YÊPÁŽð¥$%Í]ì üÊV¶ò®ôÐiƒXì>S¼²x¥3¤mû¶F[£ç#/éx¤ã/â uŠSr¦9î8”C)í>ª5Á¾Þ~ÑîT9l@mª>Ëó©gн½{‚»«;Y”Õ’®ítšÐQK ©!ÃqJ7YÄ\ò”¡z©7Á:Ã1×q ?ÏX˜1 ò¦^žuùSpι˜“ ù㮽s­X‚}| Z›>­û¼ £T¨WUžÚB¦{“笧Z¡¿ó¼Ó‡Ç Ç^Ç^”£†¨! ]d€ ÚÑšÖ@i‚ ‰PÔ4#ÒH4ÉÕºŸ^‚b½@/Ð ámÒIGQ 7nrÜç>PÒ{>¾d …ÚÇu®S¬ P*CÐcŒZF-uÙS߳óÃ~Ù £¶Ã÷€ï6ßmÊIM^ã5‚úQX”RJ)òÖ?µÞñ}‘Ì0mÚ~5„a¼/y2V†ÊN¥ÝÐ*i{(‰‹LEÄ%r»”E!´UJ+~¿ûý÷+&-MšE?¤×L¯ ¥Ü ŠxÀvÈ¿´iÐêX¬ péûØ‘±#áô’ [&l†{¾èþEð¼åîíîM¨­×ÑŸ}˜ÞIï„îYç^í^‹ØuŸ·}ºƒzNE©: CèB ˜@Aêiu´(” ”~2€ í©)‘ˆVMÂ¥":µ©A „ ï÷#¤àÀ ”qà@d Ú¨6"2S{G{$YR$E ˜Á|!ëLÜŽ¯û|ݲuËÄêÅUŠˆˆð8<$ãuãuÕ +§Y„rŽs\ šŒ—‰2ŠyV*ÊO@1êA’%y¤á+sç>¾Z3{’ýgp¿»ìîl¸6cíîµqðÔî©­¦¾ ÒÌRÓR”Ë玣§'Ú uæi4¦Ü÷v÷Âõeªm¨U'ö8ØãxòÓžM{Œƒ*Ke€kgñÇŃ¥}¨MÛLûçöé Ö¨…ê+&4¢1Hy’8 ”á+”“‚‰ Hà‡€0ÊSÈá'þE~ø¦9#›dArU.ÊELe*!”cÛ¨fÂxËxÃxÃxãñ8?>l|†gxö¡·÷pI]R×Ðe K˜â·d‚dI¦\ ‘`Ÿ1¬¿: ‡r†%Å&-ƒÜ×Îm=·¬»8΂ñ„+ÆRO»¥Ýi©¢U4苊ãŠã úÇýjõ«×'¯Ÿ´~¨nž@?øvsàÐ@ÞÖ^Ôš€äÊ I…¢û®+®Ëà®å.ëí’– %§$AŽ‚œ#r˜¬Æ¨Ñ µUÚ ¤ŽDåwù$W®ÊU,¹$—@œæúž$K2Hªœ“s rY.ƒxä–ܾ‘/åK ™Ë\Fˆ[}Òð!Žÿ…HàØÃ•p \Dˆ•XYr_îs $_òå]<’ ò›dI¨ÝFŽ‘öÐàÁÛ!ó­„í Ûá^ÖqÏqØ ,1Æc@X:Z:‚Þ¶¨GQéURýIàÉÉû8ïcÈÙ|6ôlyð©æ?Í2øžö¹és¤?}è Ú3R[j+ÜUÊ ÅÛ][]ÛA ¥HˆXÅ ª1QÔͦeh u¤´”¹. ’’c{ßä™rA.€Éy9¢{—l9)'A<’.é K˜ÉL༺¢®< c…DNqê±(ÿ\ã©.Õ®2›ÙŒñˆ.·@2$SÎ|-å#ç´0-Œó® ®õüJÔª¨Uà¸Ú#´[3:mt‘®® ½có·ùƒ¼ žVO?Ã>[»v‡Iá«ÃWCæâÄc‰ÇÀRÕ6Ô6l#¬ƒ­ïOœïnߟ€ @@ûNæÊ(îîæî EE!E¥AuRÔ³ :ªU ,µ¾Z·dÈ]rV΂Ü6wþmø¦ nIª¤‚¤É9¤˜‚È!…2W悺ÈE.þÇ+\áÊ?À%.qí/ë$’¸¬–Õ2$WîË9EÌd.°…ïøÄ)ä5 ƒ~O¿>³‚W¯€ZåGì±Ò>ûýÈïG aLL˜:`©íSϧÈ.k?k?PWöF{Ð{o¸³Ú¡j‡ çÊÙ g7€ö‹ù<ÉLc*øòyÓçMðÙèûµo,PÀ n‚v[öÉÐëßê+ÀyÔyÆy ÔiUE…e•u—uˆKnË-=lg;mšœ Óääšü¶—ã ©æÎ¿ëõâ‘»rˆes€‹\åê_pKæ:×ÿ‰n©[êö_Ö7¸É-O˜Ä8¥ò…Ì6Ë Y/± 2G†Èõ–hK4xòžË{ªïïs§Ï¨ü럿ú9\È^)+ŽvììíËyËy°¾êÓÀ§“ùš¯Á?·òÙÊg!ε“×N‚Š6u»…ì“}€ƒTRÁw²ÏŸáà;Û1Åñ)p^Kc`‰¼)o‚±Þôv3”¡`Ì6òŒBÀÎ}òA;£mÑ6ƒÄ³ŽuÀEI”D{rM®Ü”4II1ù-I‘|¹!7@be¶Ì.’Lò_p»ÌµÙÈ[iÜåî_Â-n=¤›tv²žïA6È|™²J¾•o­¬d%Èy±ˆxÖÊK_K_x6tA«­ ä«ñ5âáB×åÖƒ±Ýºvë Å;rÆäŒÛ%Þã=ð¹P²JÉ*àŠ¾çwÏ §gŠg hZúYúœðnŃÏö¥öÅPâ¨c£ch/kC´©,dh¿h‹µ%àöwOt‡Âlç^çÏ 7Ô‡ê1 ]ÓökûA«%¡ lã{¾îI’$…fÔ“nš¬û¦^hjÀ%.sù/¸]}D#¡Ç†Gê.™d!æ;d‘2ˆ L"Ke)¨XõúHñÚ:Yïd‹X$j¹Z.Ã\]ÁU•¬*YðrîZ÷Z7ür SûNí!źýýíïCATj»Ôvðòí5gלÿ*¾ZñU(ŽÌ©•S ô3…~–Í>|6€ÚmŒ6Fƒ,òB*¹¶)¶F¶F`©o™oY…‘ΠbÔUu ´CÚJí06¨mêp6,:Z”¶¶WlMÀ§³=Ñ~ ´D-^Û*CUgÍxÈ’c’bˆSœ ±2Gæ×þUÔeuUýpÓÜñ(Å´e#¥¯ôY$Ù’ ”öî<¹m†gëXÎr`“,’E 2›Ù 7­{­{Á“”oÍ·BiŸsÌ…f‡6•ÙTö¿Ý=¦{ dž?y:vŸl=ºõhxâÍ7ÂÞ©immm Ê¢ÏÐggU9Ud·|,ƒ\•VÒ ¨B9€?A6ÖÒÆÒ$]ÈyÒI:íèÍ;@ªº .€Ì–Sr ÜîHw$èèõCàSÂgÏ`°…ZÓ­i Ëd¡,•¢î©,?qH µ²RVAÞû>¤&©&5©ùߘ l3@™ä’ t €ïXÊR•&ÀkXÌbà[ïÊ·Þ’²Cvyk3𵵏ŸÊ‹Í‹…ÒÓž {& ZΉïßÊÞjhmh…‚#7çÜœÎÅÞ½E ïnº» ¯Üì}³7ø&ùîõÝ TU­UkÀ¦Ö©u éâ/þ }¬ Ѐ¡QF¨jŒŽw}Oúž¿ê%:—è –_-ó,ó€Œg¨æÆHc$H Mi Ƴú6}+H}‰°Ü°ü`ù,ó,]-¯ƒß…Z ì‡ííÏN (Žq–³ e° }”¾Cß…ï;_p¾…˜ݜÝAI®¾á+¾u^]R—þaíß·o‚îšb’ºE>ùÀ÷òм2xâ_‰–h[ÜáH”žò6°÷‘üà?j@–7ÁøËú×@Þa#€å2M¦ÓMï¿ÄtBßÈçò9È—Þ0R6xAœ©›¼>BÖËfÙ Œã)ží„åË+`<ånén âa üHóVÍ[­|ÀÝ€»PrNTí¨Ú ÒôáúpH™½£çŽž°½Û+•_© 3&­Ÿ´ŠŠïO¹ÿ)XA'ƒN€íí Û\ Êha4f1•© õ¥‹teUåTY°ìóš¤ÙŽúŽzàøÚ‘äHË–-r¨l ¡)ýð¶fì Çëwô€‹ 2ÿ²qû©nªÛ?Ñ€›ýÙ·®SH!ÐË»Ãe=é Ü”gåYÃë”e#›Ù ü,3e&°C¾—ïA¾õ&jlðæ D›‰ÛVs½I~–ŸA¦iiZhß1ƒP0!}vúl°}èçòsA›gv½±ë 8;i~Øü08[m~·ùÝÀµ&ûì?àD«©/OmW26Fm¬ ‘©Ã‡ÿOÖîÝ«XëÙCì!àYè©é© ª²>Fò«e»e;Ђ‘ŒJzm·ý[¢-lK­¬Áíñ”öô†âå®ñÅ·@©tõ$ð?°¨(Uqÿ7jýÙæúo4 à‘ ®ÀL(^“¡2˜#ÉG s™Æ4|ÎçÀB™"S@™&fó˜˜ašÄz}ƒl’¯ä+`µ—Ëf¯`œ·ú(f¯8-'1'¸h)´‚ýù A  ñÑOzÚŽÚ¸'Â67«Ó¬H¦¥…%rÛ$I‰ý†õÖvZ[žmù\;³£ÍŽ6  ÔBµP°ž·`ÿhÊÏü ª²ÑÖh Tð†Ýª5S˜€_°¶ÅÙº€_±ßÕÕÁè(ôí –Ÿµ5–ù :«ôû nƒ®&ü Hõ6&Ò53ÜB€´òîP5EH@—B)ùÒ›ÒË~™*S='q óØÂÝfÕp³¬–Õ Ë¼™§7y oó60Ú{[g‰;+ï¬Ûaÿ~þý@kbÅþ ¸›º†»†C詆‘ #¡íW?îúñG¸xjíäµ3àÔ†¹34¸1öb'HÿéHâ‘ãðséήÎ.¨Ð¦IZ“4¨Ûmt‹Ñ- üËæA̓@tÛIÛI0¾2Úí@}«¿¡¿¤%h @ü¨’()rìÚ íýÀw©OI{OPTMõ Cý#ŽCª›ëÿK>ðx>¢N3Ã{Ík›™,È MÔ5Äߨ!/ãƒ^'-ÓL“õ«é3v±‰M iD#x3…?,×å:Hi$þ@Á›§nž߯K )5,7¼.UO[«­÷ºâW‹Û€ö›ö¹6"¾îµ¿× (s«Å†–k!µäêÈÕmà|ÖÒñKjC^í«£®N€«w«Ý ÒÚÿ:ü×áP¾Ì˽üDµzbè ¨ôó«U^­–"ÛÛP÷TŽÊã¬^Q¯Jyàí²– Z¼e¶e6°ž…,ü nW¸GÆ?Ñ€›è«Ú^éy›Óy–gA&zj²DI$JÈLv²d—L”‰À¯²]¶ÙÁÏå3ù äÙ €Äò7JPñrPþyÛüö7ÛÜl~ÇÃÖ†­ýó¸jnŒ7ƃvÜZÎZ(¦9!ÿzvƒœPðyݧÿ:¨ïüÀ6öÔz·_BßP8ÿé²-Ëâà⠬¼ïò>Hm°ûÔîSpk˾¢}EPfâ3êµô/è_UwŠî >'‚óƒó†Þçð´/h^ÐrV\½yõ&È\Ù.;¨C£Ý×Üÿ¦ôx8Õm³çmF»ÍšF{i!-€*$A -ÕH5¤´·ùÍa+cçø‰Ÿ@f™&ËÌXÙo d?[Ù ²J–Èàs3d¥6_›ÆMSÖ§æ¤æ@©ßÛF¶õ¡¼É› £åUi rXË‘p—,Îõlµ’&Û.ëK8ô=.ðmÒ)¤ ÔïòáüçÓ·®¸’#¾;õÝ)¸4wuÅÕ!§êÅM7AæôÉ'’á€{ÀøàTŸY®YxBuXÕa Ì|!óYH»Äþà×5ªgTOð}³Lf™ `‰÷ùµ÷}Jû”þP÷ÌLøÁœÄ-oT$OÑn U¨NuPcÌ;Ô;- c©Mmò¾¼’Ÿä'àeö°d6õ©ò«ÌÀAùM~6ªCêhX†[†ƒ»0÷Jî(\œ>%} |TéÃJf·•…f¯rØîVî w'ÐNh+µY`l¯ko’ ­Õ-=Í<ó€0ã€q|Ÿ/Ù±dG¨óÁÐ^C{AT¯A1ƒb é“…… áÄšé7§ß}Ba³Âç û½Ko^ê™Ëfö™ù6X‡SHØ hÐ*nÓ ¨”—÷§leýú òYòàØßÓ€;^§ûrL¼cŽ{Ô7nB8á ¥Ä.v A~‘_€$pd,u© rRFÈà0{Ù œ£ m@‚½¥ ÕJUWÕA[«õÒzAAÆíe·—Aq“Ü‹¹!¨E‚ÞÄpÃ@ÖK¨‚a1⌻ 'é§õ`cíoõY¬*¨HPµŒxãXÂmÇl‰À-šÑ \-²Ûf·…”—ã¯Æ_+™›>Ù4îÎ<úÖï]¡hYúêô£à·?üð-PõDσ=kA‘-cKæOéLqtä'¥^J½×Ü[Ü[Ü ïWœUq柰¹Cózæõü'&Hý0ô7€ZÒCz€Œd〆^M`€·%c©E-ßå]y8á'Ìã³M0Û°©{f³{ªš¯æƒ4÷ÞîþéäÐäPIRCj@àª9Us€þÞÏåm-P³AqhñKîU`,ð¸=óÀÞDZ׷.h Ö‰Ö:€“ÁÔ{ïžÍ<› —6›þí]¸:esñæbÈ^wyäåQ ºzM[ˆ#òËH –uDô¨P)®S—N! ~U©Z´†Û˜î½éêNgȾqrÎÉa“xgûÝà:¼ªíª6@/ñ2Ÿx{xK_×Y§š6¾½×¦“Bozõ¤’T¤¤”.r„#@"‰é„œ•£r8ÍqŽƒª†©a oÉ,™ª;ðå(÷úžÙ|f3ø”*i)i‡C—„.u™ú<F }¢þ)¸cÜ—ÝÀ±¬äÔà;`kÇ]ÃÍ„½Çöž‚s·—¼½ä-¸¹q·±Û…Ñ9—r.¥‡%È¡ž7ž7 zl¿‘ýÆ@Øèv´; Žóe’ÊÌUüEñ‡ iEœQ`I±Î·.{ë +‡ÀÃ^[e';÷8ýÅÅçŸÿ³)¯½jÝoÝÿøÑÉÇ ÀóH&¬¼ýiî59ÄIoé R[uU]A")KY^ áSPj@-hRFÊJYPYꞺ|Æû¼øKŒÄxMDfʉÀسZƒj À6Äê(FçŠ' dšý {{Pm\WSH=·5..å,1–øÁíÇ>9ô ¸}‹.ë[?Û Km2·É"¨^f`ǯBصÖÛ[ǃO© ƒAûÖEkŠVì)x© ´&‡e«½« O'½³>ÔxÏž$Ð~‘'¤2ï(ZX´‘Ï$J¢âužà Jëmôvz;üIàw~ÿoPüH-èž…³Ÿý oy;fª ¡„uÍyšZ¦Oè'Ý¥;ÈU9-§$ÎpTkÕVµé/e 0Ë×kO[J[Jƒþ½þ¾þ>dùŸîsº7T¾ýÚ€×x4fœ0R ùÆÆ!óáÜöyIóü scâòÄàI-~­x1XëÙØÞ‚òクèÅ? Æ²÷ŠßË‡Šª}çöÍÁn÷oåÿ*(Oá­Â; 7  µ£ÚqPU¥‰Dƒ;ÉïÙуn€ 6`)¡”Æ£úkã´q`”f8ÃH&7¸¡z›»¶BäŒÈi‘ÓøÔÈzP”0þ³RÍaÔ fš í<Çs@ùyïÎçI “0 ‚D«T pÏLÄB¼ÕDuÏÜù™Ìd`úCýÚtë\ë\ÈíweÄ•ÿÍÍÚ7£ l{Ó†MBfÒ™gêÃoÃGËhH~°ÔA;«ÜÜ7@öj×´(Ó®Á× 6AÍ…C7m•“;­ïô)ø|ð!¨%ÎÃÎÖÀ»……ù .ÉmÐ}UՌޖ§kœ6NiH#P¨ÔXà6iܪJ9µ´·µ·ÁXj|a|Án-[ËÖ²icÂ6«q³ÆÑ£Õs]ãï ÀöH¥È5%€@—äúޮɮå(eH<šoŽïû¾9å˜ê›âÛWåçÉÝxÿ%i½òÈÊÝ+»/^»¾óú.ë_ß~»B÷ Ý+t¿;ôʺ+뮬s&‡}¶ lÁC´¸þ† Ê|$»gÖ‚jy3Yž§õ€p³TñŒ7^§ÂáVo­¨ºº®®¿ªjØ:z¿<ÓÄMáðò˜Ã1‡¡(/³Of°|ëSÓ§ ŠXñ;<üIÂä0¨8¥í‹mFƒÏjË&K' œñ„QŒÉ¼C/PGE;¨M†2, ßÖÖw€±ÆXc¬#Έ3âÀèiô4zBQé¢'Š" ­aZã´öàzÚÕÀõ.ØGÚµ…’—,W2ñïåŸëÿ+xêyjxZ÷sëå†äjKwß³ó½õÑóãçÇÏßùíêð_Â÷…ï»ÓëFÓÍn4ËnmZšV&zŒb£Èc®·LÿŸcN? "¬XHBêzKâ©g&ZE^ÓÃ<¢‰ž÷Î ÙúØv'[?µÃÔŽpü£)m¦¼ ô4V+Á2Ö‘æHŸ÷‚·ÿ ­>ݶlÛ>ði~?¼ èGr׿‚vÍÿªßÓ ¶ivÍ 7òŒ|P ”UYÁ¨a 0€ágøþ`8 §QÆ1#Ñ8 †Ó°þP¸°ð[ç~Èý=÷`îïðòØ—{¿Üìì[ì³1жm*ú-£wFçŒÖƧ¹a¹á¹•µöÇïß¹ÿÇÝúÄø‰ñw.¬^öjÙ«e¯ÞÚu£êª7ªfZßøæ;oö2žú~É÷+¾_m¾Ò9ÿw|€ú—™^ͬŽÖ2!5¥&H˜ª¡j/z/’ØÀ š7\³\°~kýÍ™=2ÎLüò‡/·ö²Œ–QPél‡÷;̃¬gOäŸÈ„òõžoø¼øuï^òßÊôd퀠:¥^+Ò_k¯ýª”¡F€j­ª¨* ’T’J5\ŨP{ÕµŒ!Æ`c0è™zŽžúZýGýu-êëÜÚ—Ú×–&`‹¶5·µDå­È[™·-kQÖ¢¬¯!ùYù™ù™Ú„= {öü>,æý˜Ñ1£fÿ˜˜˜”R'ÿzþõüëwÍüÝ32¾l|X|%MÔxÑÇNG?^Ö CÓ$àÀR‰ÊTn–Lß jNà ö;>[|¶@©I«&­‚Q_–ú²Ý-ߪ|KhÔç³úŸ=¡=Ÿëþ\Ä ipªÁNxbk·•ÝîBñOm}8ûí/aí´¶S;*_¥©»@ozÓHöÎݨ±j¬ F¼oăzI½¤^åT*ŒåÆfõ_KŒÁPP£àù‚ލ ¤ ß;!Å#ЇßB²žÍz)+Úx·À^`+°i‹Oj'µ“Ú©Ïß;ÿÞ¹÷Î}šï¨â¨â¨’\Ò2Æ2Æ2&ýÙÜ]¹»rw¹›VŸY}fõ™h—Ç^{y,ù&j:ÿþ]-è_ûº)‹ xyoÉ€:ÞÆŠ 2¾3¾{ßc¾Ç uîîõ»×CBý)}¦ôJÅM"›DÂËîØ±~Pjv¤¤ß5wÔÇàë,·­Ü!(ûkô÷ÑÁÀh×Û®ïÀ7ºÄsŽP÷•S¹@êHyŒCÆ!㨋ꢺª”*¥J²)›²á1܆T„ŠT &«™Æ×àÁ£yna¸ü\¥\Áheú–éT¶1éYFVZÖyãË|g¾3¿P[|rÑÉE'>dÉ%C–Lòe*S™zþp@ç€Îï|vwÖÝYwg¹>káháhá ëç±?ýy,.-7“/€à™ðRèè(¬f&ø`)ß·Ì1ŽOzO8Ñ÷³ÀÏ‚ ÜÑlp³!ж;f‚õ”ÃÏQ çeÄdŒ‚äI«'­Žº2ÉýÉðqdLk¶{€û*ɲPj‡úp™o/nõöøÃ¬!%š  ajn„Y./©Ê¨PPŸ1“¹èEOm.:ŒÅºÌú½u=[­7­§,‡Œk9»svç¬Õ¦­}4êhÔ‘SƒR¥Jýô„-Úm‹¾Ð2xVð¬àYéž»½îöºÛ«híÀu× \Ç¥%Ý—t_Òý¡­pñ_Òã°ŽÕ¬~8RdE§B,ø˜™o •¨$ªvªh†m¯m/8sî}{ï[ðH…«p*Ce¨  ¶•YÍ ¡:Õ¨†A¡„RÚ8e\1 òyƾÕgûO:3 ÛiÄIœ-ÎgMÜG#>þQ̤r¶r¶r¶ã<Í<Í<Í2.§÷OïŸÞ¿XïY·gÝžuIøßþqô ÿUB_¢ÏÓç=°e!No8¡á„7¯äåUÏ«^x[Y®WÊó‚gg®WðL÷LW)·Óµ—®½¬TVðÙ¹g¿PêÎÓ¿ýVJ©ƒÛÖh¡ÔÍûBöÕýóûª¯ÑÑh§þJ†2Ôÿ$·r+÷_ÖcÕX5V)OMOMOM¥œºSwêJåÛò­ùV¥²ÇfOȯgÖÍl›9H©3Ï\8“î ÖeXçaíg›©æSI•ºVêZ©Kh—À«W¯ZO˜85ˆiÓ æá륾Ê¿G{Q[¿æ¾æ¼æ$¹Š­Š£Š£TzÏÔ«[¯îKwâVÆmÛúùß}§ùNóÛkŒ1 ‘kb+ŸâTÕUuŠ-í[í[Á¸¬ëÁ·øÚÔkS¡Déò'ËŸÇ…2žÒP|0gêý ¥-KЗPÊòðߤ¿ô“~@D>ÞüDõT=UOPšÒ”êsõ¹úŒjF5£v#ÑH4YGe*SYöL)˜S[üâôÓkNbqÔÚjk«¯}b‡oÄ[oEôÌp_íqµÇÕ7³·êmõ¶z;ýz¹úåê—«Opú‰ôé'f°Åÿ ÐÿWØáfõÎï]/¯äííPºƒ—[+™ßû3ãû“j˜g_â€Ï<Ÿyžï<ßèGõ£f³ãö¿û»ÎR’’”ä¬×g8Yú[ú[úß½QÞ·¼oy߬Q7¿ºùÕͯr[z¿®Y -…–BJé%ôz‰‡q¼çŸ<Ä?Àz›^]{^nHФØ÷û­ó‹ó‹³G³„•¬”|rïñÂZ Ì»(2TZà~¯ºX?TÍäåQŠ“|´Ö ÏcJs g:-Æ%ìðƒF)·Ï÷}ÔÀÌ>:q†¸g ªÐ2] ë ß‘}:`Ô[Áš:²'­´ Tœ°Öýklõ2t“¼²±ÜÒÊC)ºúhÎXk ÿP³Ú•|gr|s¸éY&OÑ ýZ"P_, uâJi¬n¦ë³sŸOèÐ÷²×Ë©=5Áƒ<FZê7˜Ž¾È¶øÀzÐcu#FàëL7¢ Ë Ü 5ò\ÀlбR4(n Ï÷óÊ6W¥€5Ö6À0èêvü$àt#² 0 oÅ ^¤©ùpJ’Û=ƒ(dDF·¢`E·›Á2g"Ï ¥–­œ¾w«úWT|Ÿä€ ±ÉùÊåÞË5ï’˜?Å;éõ€S0 ¬‘VÀ$`!'nMBt’¡‘“fÃ͆÷QG´³(¥\eY^lŒw1ú·ÂZ ouê£"f—ت¦gÞhê­¼Ð<†<ÏÄÅÉßVÖþòýUКPw^/Î?{:>}×DÑ0»ò#WM;JÌ÷W/Ÿ“›p¢Ñj]Ú{8tŒgºÛÛï„ù¡{Ú8¾¬xK˜Ù/qåùTÚÕy©IEND®B`‚cb2bib-1.9.7/src/icons/PaxHeaders.3194/application-x-html.png0000644000000000000000000000007413124510115020450 xustar0030 atime=1498583183.007254748 30 ctime=1498583182.663257941 cb2bib-1.9.7/src/icons/application-x-html.png0000644000175000001440000000131213124510115022032 0ustar00constansusers00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<GIDAT8•’KO“A†Ÿ™¯ Ò–›EJ¹Q*`Ñ6,\»¤ w.ŒÿÅ_àFw®ˆ‰˜ˆQX Å ! ±1Ê­Öòµßí¸ jÄÄ7™äœÌ¼Ï¼™3JDPJµ)þO "²æ+5©B¡øÔ²Š(¥Q ”R¨ãõ‡Óçóá÷ûÇ2€b±Hþ(Ö†¡Ë€ŠU:«Ô)² PZaZkV÷ ž/˜]Ú!ŒÐ…»#õ wUÐJ¡µfz£Š©Õ Ï^½eørc#íØN€Ç³ŸÈäb¤¯_@k]”+¥¦ /×k8Ì~e ¥¯5µ¡%jqµ«—ée—¼% *³Ÿ=ªµÅëw Dkü4„C µl Ð×(ÏäÃúÏó‡y›pÀåFO3GE—ì¯G.Ù‚Ç—}lïÛ•á”@gbßösgtñöXÛøÁÃklï™\éìÆ3ÂôÄõ9SR5L­ì"nŒÆÚÞÌÑTÀó„o¦F|nv&*è³ "¡·“Š\†œc2ÚßK¬á"±ÆfBÕQŒ7#¶‰mÛò× ¸ÕWOK½É“÷ßéK4µ‘¨ƒÔ¥ÊÜ$“ÑÌÏÏÏË•oÀé÷í¨ƒûC[[q‡x8N~×$™L233³•N§ï+ˆÀXѲÄ4M±,KlÛÇqÄó‚ÁE}BBÜ' n 1CÌ(¦{zúgº®‹ÌOƉ \Š*8çžs«JÌ ¹ lðØ5³½`´Ù8==ýèÍPUT™)`²ª*‹qüØÓ±œ7è÷ûÿl'"LjŒ±œS0Ûptø 30ïi.4©‡5.p¬\¿AÜj¨Î èè°::6N•FQä9Fƒ )‹‚FèPçæD„å•†ŽŽº„a@/’& ­¸EY–˜7Ú áÔ^vç9ªŠ \$ eY’œ'¨*·ÖÖ‚IÏ¿"ˆ€Íб~ç6yžÓjµ&âfFQ ‘«"¨âÍz8ÜßÇÌh.4 Ã4I‰¢ªÊêêM¢H®çˆBÇý{ëÓ«»â\Æt",--¡ªdY6C®ª !Ë2ªªb0È ðs·¦)×âe~ô~qÚû‰ÖD͈º®9ÿ}ÎYïŒv»Íööög`gÆf@š¦”yA+Žé§}D„ï'' #include #include #include c2bTextEdit::c2bTextEdit(QWidget* parentw) : QPlainTextEdit(parentw) { setFrameShape(QPlainTextEdit::StyledPanel); setFrameShadow(QPlainTextEdit::Raised); _settingsP = c2bSettingsP; connect(_settingsP, SIGNAL(newSettings()), this, SLOT(loadSettings())); _line_number_area = new LineNumberArea(this); _line_number_area_color = palette().color(QPalette::Active, QPalette::Base).darker(110); _line_number_color_p = &_settingsP->colors.comment_color; connect(this, SIGNAL(blockCountChanged(int)), this, SLOT(updateLineNumberAreaWidth())); connect(this, SIGNAL(updateRequest(const QRect&, int)), this, SLOT(updateLineNumberArea(const QRect&, int))); updateLineNumberAreaWidth(); c2bUtils::addSeparator(this); toggleWordWrappingAction = new QAction(this); addAction(toggleWordWrappingAction); toggleWordWrappingAction->setText(tr("Toggle Word Wrapping")); toggleWordWrappingAction->setStatusTip(tr("Toggle word wrapping")); _settingsP->setKeysequence("Shortcuts/Editor/", toggleWordWrappingAction); connect(toggleWordWrappingAction, SIGNAL(triggered()), this, SLOT(toggleWordWrapping())); if (_settingsP->value("c2bTextEdit/WrapMode", false).toBool()) setLineWrapMode(QPlainTextEdit::WidgetWidth); else setLineWrapMode(QPlainTextEdit::NoWrap); } c2bTextEdit::~c2bTextEdit() { _settingsP->setValue("c2bTextEdit/WrapMode", lineWrapMode() == QPlainTextEdit::WidgetWidth); } void c2bTextEdit::setBibTeXActions() { c2bUtils::addSeparator(this); pasteCurrentBibTeXAction = new QAction(this); addAction(pasteCurrentBibTeXAction); pasteCurrentBibTeXAction->setText(tr("Paste Current BibTeX")); pasteCurrentBibTeXAction->setStatusTip(tr("Paste current BibTeX")); _settingsP->setKeysequence("Shortcuts/Editor/", pasteCurrentBibTeXAction); setLaTeXActions(); c2bUtils::addSeparator(this); journalsToFullAction = new QAction(this); addAction(journalsToFullAction); journalsToFullAction->setText(tr("Set Journals to Full Name")); journalsToFullAction->setStatusTip(tr("Set journals to full name")); _settingsP->setKeysequence("Shortcuts/Editor/", journalsToFullAction); journalsToAbbreviatedAction = new QAction(this); addAction(journalsToAbbreviatedAction); journalsToAbbreviatedAction->setText(tr("Set Journals to Abbreviated Name")); journalsToAbbreviatedAction->setStatusTip(tr("Set journals to abbreviated name")); _settingsP->setKeysequence("Shortcuts/Editor/", journalsToAbbreviatedAction); c2bUtils::addSeparator(this); updateMetadataAction = new QAction(this); addAction(updateMetadataAction); updateMetadataAction->setText(tr("Update Documents Metadata")); updateMetadataAction->setStatusTip(tr("Update document files metadata")); _settingsP->setKeysequence("Shortcuts/Editor/", updateMetadataAction); } void c2bTextEdit::setLaTeXActions() { c2bUtils::addSeparator(this); convertSelection2LaTeXAction = new QAction(this); addAction(convertSelection2LaTeXAction); convertSelection2LaTeXAction->setText(tr("Selection to LaTeX")); convertSelection2LaTeXAction->setStatusTip(tr("Convert selection to LaTeX")); _settingsP->setKeysequence("Shortcuts/Editor/", convertSelection2LaTeXAction); connect(convertSelection2LaTeXAction, SIGNAL(triggered()), this, SLOT(convert2LaTeX())); convertSelection2LaTeXAction->setEnabled(false); connect(this, SIGNAL(copyAvailable(bool)), convertSelection2LaTeXAction, SLOT(setEnabled(bool))); convertSelection2UnicodeAction = new QAction(this); addAction(convertSelection2UnicodeAction); convertSelection2UnicodeAction->setText(tr("Selection to Unicode")); convertSelection2UnicodeAction->setStatusTip(tr("Convert selection to Unicode")); _settingsP->setKeysequence("Shortcuts/Editor/", convertSelection2UnicodeAction); connect(convertSelection2UnicodeAction, SIGNAL(triggered()), this, SLOT(convert2Unicode())); convertSelection2UnicodeAction->setEnabled(false); connect(this, SIGNAL(copyAvailable(bool)), convertSelection2UnicodeAction, SLOT(setEnabled(bool))); } void c2bTextEdit::contextMenuEvent(QContextMenuEvent* qevent) { QMenu* menu = createStandardContextMenu(); QList acts = actions(); for (int i = 0; i < acts.count(); ++i) menu->addAction(acts.at(i)); menu->exec(qevent->globalPos()); delete menu; } void c2bTextEdit::keyPressEvent(QKeyEvent* qevent) { QPlainTextEdit::keyPressEvent(qevent); if (qevent->key() == Qt::Key_Insert) { setOverwriteMode(!overwriteMode()); emit overwriteModeChanged(); } } void c2bTextEdit::toggleWordWrapping() { if (lineWrapMode() == QPlainTextEdit::WidgetWidth) setLineWrapMode(QPlainTextEdit::NoWrap); else setLineWrapMode(QPlainTextEdit::WidgetWidth); } void c2bTextEdit::updatePlainText(const QString& text) { const int scrollPosition(verticalScrollBar()->value()); const int cursorBlock(textCursor().blockNumber()); const int cursorColumn(textCursor().columnNumber()); setPlainText(text); QTextBlock p = document()->begin(); int i(0); while (p.isValid()) { if (cursorBlock == i) break; i++; p = p.next(); } QTextCursor tcursor = textCursor(); tcursor.setPosition(p.position() + cursorColumn, QTextCursor::MoveAnchor); setTextCursor(tcursor); verticalScrollBar()->setValue(scrollPosition); } void c2bTextEdit::convert2LaTeX() { QString txt(textCursor().selectedText()); // Better do the long way: Convert anything to c2b, and then // translate to TeX c2bUtils::fullBibToC2b(txt); insertPlainText(c2bUtils::c2bToBib(txt)); } void c2bTextEdit::convert2Unicode() { QString txt(textCursor().selectedText()); // Strictly, this should be bibToC2b; but convert also // possible PNAS like, and, for consistency, HTML sub // and superscripts to TeX insertPlainText(c2bUtils::fullBibToC2b(txt)); } void c2bTextEdit::loadSettings() { if (font() != _settingsP->c2bMonoFont) { setFont(_settingsP->c2bMonoFont); updateLineNumberAreaWidth(); } _line_number_area->update(); // Update, otherwise number colors might not follow apply button } /*************************************************************************** * Line number area (From CodeEditor Qt's example) ***************************************************************************/ int c2bTextEdit::lineNumberAreaWidth() { int digits(1); int max(qMax(1, blockCount())); while (max >= 10) { max /= 10; ++digits; } const int space(5 + fontMetrics().width(QLatin1Char('9')) * digits); return space; } void c2bTextEdit::updateLineNumberAreaWidth() { setViewportMargins(lineNumberAreaWidth(), 0, 0, 0); } void c2bTextEdit::updateLineNumberArea(const QRect& qrect, int dy) { if (dy) _line_number_area->scroll(0, dy); else _line_number_area->update(0, qrect.y(), _line_number_area->width(), qrect.height()); if (qrect.contains(viewport()->rect())) updateLineNumberAreaWidth(); } void c2bTextEdit::resizeEvent(QResizeEvent* qevent) { QPlainTextEdit::resizeEvent(qevent); QRect cr = contentsRect(); _line_number_area->setGeometry(QRect(cr.left(), cr.top(), lineNumberAreaWidth(), cr.height())); } void c2bTextEdit::lineNumberAreaPaintEvent(QPaintEvent* qevent) { QPainter painter(_line_number_area); painter.fillRect(qevent->rect(), _line_number_area_color); painter.setPen(*_line_number_color_p); QFont f = font(); f.setPointSize(qMax(0, f.pointSize() - 3)); painter.setFont(f); QTextBlock block = firstVisibleBlock(); int blockNumber(block.blockNumber()); int top(int(blockBoundingGeometry(block).translated(contentOffset()).top())); int bottom(top + int(blockBoundingRect(block).height())); while (block.isValid() && top <= qevent->rect().bottom()) { if (block.isVisible() && bottom >= qevent->rect().top()) { const QString number(QString::number(blockNumber + 1)); painter.drawText(5, top + 2, _line_number_area->width(), fontMetrics().height(), Qt::AlignLeft, number); } block = block.next(); top = bottom; bottom = top + (int)blockBoundingRect(block).height(); ++blockNumber; } } cb2bib-1.9.7/src/PaxHeaders.3194/c2bClipEdit.cpp0000644000000000000000000000013213124510216015702 xustar0030 mtime=1498583182.739257236 30 atime=1498583183.007254748 30 ctime=1498583182.739257236 cb2bib-1.9.7/src/c2bClipEdit.cpp0000644000175000001440000000754313124510216017305 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bClipEdit.h" #include "c2b.h" #include "c2bBibHighlighter.h" #include "c2bHighlighter.h" #include #include #include #include #include c2bClipEdit::c2bClipEdit(const Mode mode, QWidget* parentw) : QPlainTextEdit(parentw) { setFrameShape(QPlainTextEdit::StyledPanel); setFrameShadow(QPlainTextEdit::Raised); viewport()->setAcceptDrops(false); _has_selecting_ended = false; _is_tagged_view = false; if (mode == Editor) { new c2bHighlighter(document()); setReadOnly(false); connect(this, SIGNAL(selectionChanged()), this, SLOT(selectionHasChanged())); } else if (mode == Browser) { new c2bBibHighlighter(document()); setReadOnly(true); } } c2bClipEdit::~c2bClipEdit() {} void c2bClipEdit::setText(const QString& text, const QString& tagged_text) { _text = text; if (tagged_text.isEmpty()) _tagged_text = text; else _tagged_text = tagged_text; if (_is_tagged_view) setPlainText(_tagged_text); else setPlainText(_text); } void c2bClipEdit::insertTag(const QString& tag) { if (_is_tagged_view) insertPlainText(tag); else insertPlainText("[[" + textCursor().selectedText() + "]]"); } void c2bClipEdit::setTaggedViewMode(bool tagged_view) { _is_tagged_view = tagged_view; if (_is_tagged_view) { _text = toPlainText(); setPlainText(_tagged_text); } else { _tagged_text = toPlainText(); setPlainText(_text); } } void c2bClipEdit::updatePlainText(const QString& text) { const int scrollPosition(verticalScrollBar()->value()); setPlainText(text); verticalScrollBar()->setValue(scrollPosition); } void c2bClipEdit::keyPressEvent(QKeyEvent* qevent) { _has_selecting_ended = false; QPlainTextEdit::keyPressEvent(qevent); } void c2bClipEdit::keyReleaseEvent(QKeyEvent* qevent) { QPlainTextEdit::keyReleaseEvent(qevent); if (_has_selecting_ended && qevent->key() == Qt::Key_Shift) if (textCursor().hasSelection()) { _has_selecting_ended = false; emit userEndedSelection(mapToGlobal(cursorRect().topLeft())); } } void c2bClipEdit::mouseReleaseEvent(QMouseEvent* qevent) { QPlainTextEdit::mouseReleaseEvent(qevent); if (qevent->button() == Qt::LeftButton) if (textCursor().hasSelection()) emit userEndedSelection(QCursor::pos()); _has_selecting_ended = false; } void c2bClipEdit::selectionHasChanged() { _has_selecting_ended = textCursor().hasSelection(); } void c2bClipEdit::contextMenuEvent(QContextMenuEvent* qevent) { QMenu* edit_menu = createStandardContextMenu(); edit_menu->setTitle(tr("Edit...")); QList acts = edit_menu->actions(); if (!isReadOnly()) { QAction* act; act = new QAction(tr("Clear"), edit_menu); act->setEnabled(acts.last()->isEnabled()); // As is Select All connect(act, SIGNAL(triggered()), this, SLOT(clear())); edit_menu->insertAction(acts.at(7), act); } QMenu* menu = new QMenu(this); menu->addMenu(edit_menu); menu->addSeparator(); acts = c2b::netqinf()->bookmarkActions(textCursor().selectedText()); for (int i = 0; i < acts.count(); ++i) menu->addAction(acts.at(i)); acts = actions(); for (int i = 0; i < acts.count(); ++i) menu->addAction(acts.at(i)); menu->exec(qevent->globalPos()); delete edit_menu; delete menu; } cb2bib-1.9.7/src/PaxHeaders.3194/c2bSearchInFilesPattern.h0000644000000000000000000000013213124510216017667 xustar0030 mtime=1498583182.863256084 30 atime=1498583183.007254748 30 ctime=1498583182.863256084 cb2bib-1.9.7/src/c2bSearchInFilesPattern.h0000644000175000001440000000225013124510216021260 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BSEARCHINFILESPATTERN_H #define C2BSEARCHINFILESPATTERN_H #include "ui_c2bSearchInFilesPattern.h" #include const int ITEMS_IN_SEARCH_PATTERN(6); class QTreeWidgetItem; class c2bSearchInFilesPattern : public QWidget { Q_OBJECT public: explicit c2bSearchInFilesPattern(QWidget* parentw = 0); ~c2bSearchInFilesPattern(); const QStringList patterns(); void clear(); void setPattern(QTreeWidgetItem* pattern); void setText(const QString& text); inline bool isAvailable() const { return !ui.inputPattern->text().isEmpty(); } signals: void patternAvailable(bool available); public slots: void setFocus(); private slots: void patternChanged(); void showYearScope(const QString& scope); private: Ui::c2bSearchInFilesPattern ui; }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/c2bReferenceList.cpp0000644000000000000000000000013213124510216016737 xustar0030 mtime=1498583182.771256939 30 atime=1498583183.007254748 30 ctime=1498583182.771256939 cb2bib-1.9.7/src/c2bReferenceList.cpp0000644000175000001440000006014513124510216020337 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bReferenceList.h" #include "c2b.h" #include "c2bBibParser.h" #include "c2bCoreCiter.h" #include "c2bRLWebSearchSettings.h" #include "c2bSettings.h" #include "c2bTextBrowser.h" #include "c2bTextEdit.h" #include "c2bUtils.h" #include #include #include #include #include class TreeWidgetItem : public QTreeWidgetItem { // Reimplement sorting public: explicit TreeWidgetItem(const QStringList& strings) : QTreeWidgetItem(strings) {} bool operator< (const QTreeWidgetItem& other) const { const int sortCol(treeWidget()->sortColumn()); const QString str(c2bUtils::toAscii(text(sortCol), c2bUtils::Collation)); const QString other_str(c2bUtils::toAscii(other.text(sortCol), c2bUtils::Collation)); return str < other_str; } }; c2bReferenceList::c2bReferenceList(c2bTextEdit* ed, c2bTextBrowser* br, QWidget* parentw) : QWidget(parentw) { ui.setupUi(this); _editorP = ed; _browserP = br; _citerP = new c2bCoreCiter(this); _settingsP = c2bSettingsP; _settingsP->setDefaultValue("c2bReferenceList/SearchEngine", "https://www.google.com/search?ie=UTF-8&q="); _settingsP->setDefaultValue("c2bReferenceList/SearchEngineAddQuotes", false); setupFilterBar(); _key_index = 0; _id_index = 1; _year_index = 2; _journal_index = 3; _author_index = 4; _title_index = 5; QStringList header; header.append(tr("Key")); header.append(tr("ID")); header.append(tr("Year")); header.append(tr("Journal")); header.append(tr("Author")); header.append(tr("Title")); ui.listView->sortItems(_key_index, Qt::AscendingOrder); ui.listView->setHeaderLabels(header); ui.listView->hideColumn(_id_index); ui.listView->setContextMenuPolicy(Qt::ActionsContextMenu); citeEntryAction = new QAction(this); citeEntryAction->setText(tr("Cite Selected Entries")); _settingsP->setKeysequence("Shortcuts/Editor/", citeEntryAction); connect(citeEntryAction, SIGNAL(triggered()), this, SLOT(citeEntry())); ui.listView->addAction(citeEntryAction); c2bUtils::addSeparator(ui.listView); openFileAction = new QAction(this); openFileAction->setText(tr("Open Document File")); openFileAction->setStatusTip(tr("Open document file")); _settingsP->setKeysequence("Shortcuts/Editor/", openFileAction); connect(openFileAction, SIGNAL(triggered()), this, SLOT(openFile())); ui.listView->addAction(openFileAction); openUrlAction = new QAction(this); openUrlAction->setText(tr("Open Document URL")); openUrlAction->setStatusTip(tr("Open document URL")); _settingsP->setKeysequence("Shortcuts/Editor/", openUrlAction); connect(openUrlAction, SIGNAL(triggered()), this, SLOT(openUrl())); ui.listView->addAction(openUrlAction); openDOIAction = new QAction(this); openDOIAction->setText(tr("Browse Reference by DOI")); openDOIAction->setStatusTip(tr("Browse reference by DOI")); _settingsP->setKeysequence("Shortcuts/Editor/", openDOIAction); connect(openDOIAction, SIGNAL(triggered()), this, SLOT(openDOI())); ui.listView->addAction(openDOIAction); c2bUtils::addSeparator(ui.listView); openAuthorsWebSearchAction = new QAction(this); openAuthorsWebSearchAction->setText(tr("Web Search by Author")); openAuthorsWebSearchAction->setStatusTip(tr("Web search by Author")); _settingsP->setKeysequence("Shortcuts/Editor/", openAuthorsWebSearchAction); connect(openAuthorsWebSearchAction, SIGNAL(triggered()), this, SLOT(openAuthorWebSearch())); ui.listView->addAction(openAuthorsWebSearchAction); openTitleWebSearchAction = new QAction(this); openTitleWebSearchAction->setText(tr("Web Search by Title")); openTitleWebSearchAction->setStatusTip(tr("Web search by Title")); _settingsP->setKeysequence("Shortcuts/Editor/", openTitleWebSearchAction); connect(openTitleWebSearchAction, SIGNAL(triggered()), this, SLOT(openTitleWebSearch())); ui.listView->addAction(openTitleWebSearchAction); c2bUtils::addSeparator(ui.listView); webSearchSettingsAction = new QAction(this); webSearchSettingsAction->setText(tr("Web Search Settings")); webSearchSettingsAction->setStatusTip(tr("Web search settings")); _settingsP->setKeysequence("Shortcuts/Editor/", webSearchSettingsAction); connect(webSearchSettingsAction, SIGNAL(triggered()), this, SLOT(webSearchSettings())); ui.listView->addAction(webSearchSettingsAction); c2bUtils::addSeparator(ui.listView); clearSelectionsAction = new QAction(this); clearSelectionsAction->setText(tr("Clear Entry Selection")); clearSelectionsAction->setStatusTip(tr("Clear entry selection")); _settingsP->setKeysequence("Shortcuts/Editor/", clearSelectionsAction); connect(clearSelectionsAction, SIGNAL(triggered()), this, SLOT(clearSelections())); ui.listView->addAction(clearSelectionsAction); c2bUtils::addSeparator(ui.listView); refreshListAction = new QAction(this); refreshListAction->setShortcut(QKeySequence(QKeySequence::Refresh)); refreshListAction->setText(tr("Refresh List and Browser")); refreshListAction->setStatusTip(tr("Refresh list and browser")); connect(refreshListAction, SIGNAL(triggered()), this, SLOT(refreshList())); ui.listView->addAction(refreshListAction); connect(ui.listView, SIGNAL(itemActivated(QTreeWidgetItem*, int)), this, SLOT(goToReference(QTreeWidgetItem*))); // Actions dependent on selection and availability itemSelectionChanged(); connect(ui.listView, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged())); // Browser functionality _references_html = c2bUtils::fileToString(":/htm/htm/references.html"); _references_html.replace("GET_CB2BIB_VERSION_NUMBER", C2B_VERSION); _bib_item_html = c2bUtils::fileToString(":/htm/htm/bib_item.html"); QString references_css(c2bUtils::fileToString(_settingsP->fileName("cb2Bib/BrowserCssFile"))); if (references_css.isEmpty()) references_css = c2bUtils::fileToString(":/htm/htm/references.css"); _browserP->document()->setDefaultStyleSheet(references_css); openTextLocalSearchAction = new QAction(this); openTextLocalSearchAction->setText(tr("Local Search for Selected Text")); openTextLocalSearchAction->setStatusTip(tr("Local search for selected text")); _settingsP->setKeysequence("Shortcuts/Editor/", openTextLocalSearchAction); connect(openTextLocalSearchAction, SIGNAL(triggered()), this, SLOT(openTextLocalSearch())); openTextLocalSearchAction->setEnabled(false); connect(_browserP, SIGNAL(copyAvailable(bool)), openTextLocalSearchAction, SLOT(setEnabled(bool))); openTextWebSearchAction = new QAction(this); openTextWebSearchAction->setText(tr("Web Search for Selected Text")); openTextWebSearchAction->setStatusTip(tr("Web search for selected text")); _settingsP->setKeysequence("Shortcuts/Editor/", openTextWebSearchAction); connect(openTextWebSearchAction, SIGNAL(triggered()), this, SLOT(openTextWebSearch())); openTextWebSearchAction->setEnabled(false); connect(_browserP, SIGNAL(copyAvailable(bool)), openTextWebSearchAction, SLOT(setEnabled(bool))); QList al = ui.listView->actions(); for (int i = 0; i < 2; ++i) _browserP->addAction(al.at(i)); _browserP->addAction(openTextLocalSearchAction); _browserP->addAction(openTextWebSearchAction); c2bUtils::addSeparator(_browserP); for (int i = 6; i < al.count(); ++i) _browserP->addAction(al.at(i)); _browserP->setContextMenuPolicy(Qt::ActionsContextMenu); connect(_browserP, SIGNAL(anchorClicked(const QUrl&)), this, SLOT(openLink(const QUrl&))); connect(_browserP, SIGNAL(highlighted(const QString&)), parentw->parent(), SLOT(showMessage(const QString&))); } c2bReferenceList::~c2bReferenceList() {} void c2bReferenceList::loadList(const QString& txt, bibSearcher* searcher) { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); c2bBibParser* bpP = c2b::bibParser(); QString references_html(_references_html); QString references; QStringList fields; fields.append("abstract"); fields.append("author"); fields.append("booktitle"); fields.append("doi"); fields.append("editor"); fields.append("file"); fields.append("journal"); fields.append("pages"); fields.append("title"); fields.append("url"); fields.append("volume"); fields.append("year"); bibReference ref; bpP->initReferenceParsing(_editorP->editorFilename(), fields, &ref); const QRegExp initials1("\\b\\w\\b"); const QRegExp initials2("[^\\w\\s]"); const QRegExp nonletters("[^\\w\\s-]"); int ref_counter(0); while (bpP->referencesIn(txt, &ref)) { ref_counter++; QString author(ref.anyAuthor()); QString author_long; if (!author.isEmpty()) { author = bpP->authorFromBibTeX(author); author_long = author; author_long.remove(nonletters); author_long.replace(" and ", ", "); c2bUtils::simplifyString(author_long); author_long += '.'; author.remove(initials1); author.remove(initials2); author.replace(" and ", ", "); c2bUtils::simplifyString(author); } QString title(ref.anyTitle()); c2bUtils::cleanTitle(title, true); QString doi(ref.value("doi")); if (!doi.isEmpty()) if (!doi.startsWith("http://")) doi = "http://dx.doi.org/" + QUrl::toPercentEncoding(doi); const QString file(ref.value("file")); const QString url(ref.value("url")); QString link; if (!file.isEmpty()) link = QDir::cleanPath(file); else if (!url.isEmpty()) link = url; else if (!doi.isEmpty()) link = doi; QString ID; ID.setNum(ref_counter); QString year(ref.value("year")); const QString abstract(ref.value("abstract")); const QString journal(ref.anyJournal()); const QString key(ref.citeidName); _doiList.append(doi); _fileList.append(file); _urlList.append(url); _positionList.append(ref.positionValue); QStringList dataList; dataList.append(key); dataList.append(ID); dataList.append(year); dataList.append(journal); dataList.append(author); dataList.append(title); TreeWidgetItem* qi = new TreeWidgetItem(dataList); qi->setStatusTip(_journal_index, bpP->fullJournal(journal)); qi->setStatusTip(_author_index, author_long); qi->setStatusTip(_title_index, title); ui.listView->insertTopLevelItem(0, qi); QString pages(ref.value("pages")); const QString volume(ref.value("volume")); if (!pages.isEmpty()) { if (!volume.isEmpty()) pages = ", " + pages; else pages = ' ' + pages; } if (!year.isEmpty()) year = '(' + year + ")."; QString bib_item_html(_bib_item_html); bib_item_html.replace("GET_REFERENCE_ANCHOR_ID", ID); bib_item_html.replace("GET_REFERENCE_ANCHOR_NAME", ID); bib_item_html.replace("GET_REFERENCE_AUTHOR", author_long); bib_item_html.replace("GET_REFERENCE_LINK", link); bib_item_html.replace("GET_REFERENCE_PAGES", pages); bib_item_html.replace("GET_REFERENCE_SOURCE", journal); bib_item_html.replace("GET_REFERENCE_TITLE", c2bUtils::toHtmlString(title)); bib_item_html.replace("GET_REFERENCE_VOLUME", volume); bib_item_html.replace("GET_REFERENCE_YEAR", year); if (searcher) bib_item_html.replace("GET_REFERENCE_ABSTRACT", searcher->highlight(abstract) + searcher->hitValue(ref.rawReference)); else bib_item_html.replace("GET_REFERENCE_ABSTRACT", c2bUtils::toHtmlString(abstract)); references += bib_item_html; } ui.listView->sortItems(ui.listView->sortColumn(), ui.listView->header()->sortIndicatorOrder()); ui.listView->resizeColumnToContents(_year_index); references_html.replace("GET_REFERENCES", references); _browserP->updateHtml(references_html); QApplication::restoreOverrideCursor(); c2b::showMessage(tr("Parsed %1 references.").arg(ref_counter)); } void c2bReferenceList::citeEntry() { QStringList keys; QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected | QTreeWidgetItemIterator::NotHidden); while (*it) { if (!(*it)->text(_key_index).isEmpty()) keys.append((*it)->text(_key_index)); ++it; } _citerP->cite(keys); } void c2bReferenceList::openDOI() { bool zdoi(false); QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected | QTreeWidgetItemIterator::NotHidden); while (*it) { const QString doi(_doiList.at((*it)->text(_id_index).toInt() - 1)); if (!doi.isEmpty()) { zdoi = true; c2bUtils::openFile(doi, parentWidget()); } ++it; } if (!zdoi) c2b::showMessage(tr("No DOI entry among selected references.")); } void c2bReferenceList::openFile() { bool zfile(false); QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected | QTreeWidgetItemIterator::NotHidden); while (*it) { const QString file(_fileList.at((*it)->text(_id_index).toInt() - 1)); if (!file.isEmpty()) { zfile = true; c2bUtils::openFile(file, parentWidget()); } ++it; } if (!zfile) c2b::showMessage(tr("No file entry among selected references.")); } void c2bReferenceList::openUrl() { bool zurl(false); QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected | QTreeWidgetItemIterator::NotHidden); while (*it) { const QString url(_urlList.at((*it)->text(_id_index).toInt() - 1)); if (!url.isEmpty()) { zurl = true; c2bUtils::openFile(url, parentWidget()); } ++it; } if (!zurl) c2b::showMessage(tr("No URL entry among selected references.")); } void c2bReferenceList::openLink(const QUrl& ln) { QString ln_str(QUrl::fromPercentEncoding(ln.toEncoded())); if (ln_str.isEmpty()) c2b::showMessage(tr("No link available for this reference.")); else if (ln_str.startsWith("Select reference ")) scrollToReference(ln_str.remove(QRegExp("\\D"))); else if (ln_str.contains(QRegExp(":\\d+$"))) emit openFile(ln_str); else c2bUtils::openFile(ln_str, parentWidget()); } void c2bReferenceList::openAuthorWebSearch() { const QString searchEngine(_settingsP->value("c2bReferenceList/SearchEngine").toString()); bool zwebs(false); QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected | QTreeWidgetItemIterator::NotHidden); while (*it) { if (!(*it)->text(_author_index).isEmpty()) { zwebs = true; QString webs((*it)->text(_author_index)); webs.remove(','); webs = searchEngine + webs.simplified(); c2bUtils::openFile(webs, parentWidget()); } ++it; } if (!zwebs) c2b::showMessage(tr("No author entry among selected references.")); } void c2bReferenceList::openTitleWebSearch() { const QString searchEngine(_settingsP->value("c2bReferenceList/SearchEngine").toString()); const bool addQuotes(_settingsP->value("c2bReferenceList/SearchEngineAddQuotes").toBool()); bool zwebs(false); QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected | QTreeWidgetItemIterator::NotHidden); while (*it) { if (!(*it)->text(_title_index).isEmpty()) { zwebs = true; QString webs((*it)->text(_title_index)); if (addQuotes) webs = '\"' + webs + '\"'; webs = searchEngine + webs; c2bUtils::openFile(webs, parentWidget()); } ++it; } if (!zwebs) c2b::showMessage(tr("No title entry among selected references.")); } void c2bReferenceList::openTextWebSearch() { const QString searchEngine(_settingsP->value("c2bReferenceList/SearchEngine").toString()); QString webs(_browserP->textCursor().selectedText()); if (_settingsP->value("c2bReferenceList/SearchEngineAddQuotes").toBool()) webs = '\"' + webs + '\"'; webs = searchEngine + webs; c2bUtils::openFile(webs, parentWidget()); } void c2bReferenceList::webSearchSettings() { c2bRLWebSearchSettings searchSettings(this); searchSettings.exec(); } void c2bReferenceList::openTextLocalSearch() { const QString text(_browserP->textCursor().selectedText()); const QString fn(_editorP->editorFilename()); c2b::doSearchInFiles(text, fn); } void c2bReferenceList::refreshList() { _doiList.clear(); _fileList.clear(); _urlList.clear(); _positionList.clear(); ui.listView->clear(); ui.comboFilter->clearEditText(); loadList(_editorP->toPlainText()); } void c2bReferenceList::goToReference(const QString& id) { QTextCursor tc(_editorP->textCursor()); tc.setPosition(_positionList.at(id.toInt() - 1)); _editorP->setTextCursor(tc); _editorP->verticalScrollBar()->setValue(_editorP->verticalScrollBar()->maximum()); _editorP->ensureCursorVisible(); _browserP->scrollToAnchor(id); int scrollPosition(_browserP->verticalScrollBar()->value()); _browserP->verticalScrollBar()->setValue(scrollPosition - 10); } void c2bReferenceList::goToReference(const int position) { // Maps position to internal reference id. It is needed by the search browser, when a // citation is edited in the original file. If this file is changed multiple times, // positions in the search browser get outdated, so the mapping position-id is inexact. // Thus, search for the closet reference. int ip(0); int pdiff_min(1000000); for (int i = 0; i < _positionList.count(); ++i) { int p(_positionList.at(i)); if (p == position) { ip = i; break; } int pdiff(abs(p - position)); if (pdiff < pdiff_min) { pdiff_min = pdiff; ip = i; } } QString id; goToReference(id.setNum(ip + 1)); } void c2bReferenceList::goToReference(QTreeWidgetItem* ref) { if (ref == 0) return; const QString id(ref->text(_id_index)); goToReference(id); } void c2bReferenceList::scrollToReference(const QString& id) { if (id.isEmpty()) return; QList items = ui.listView->findItems(id, Qt::MatchExactly, 1); QTreeWidgetItem* item = items.at(0); ui.listView->setFocus(); item->setSelected(!item->isSelected()); ui.listView->scrollToItem(item); QTextCursor tc(_editorP->textCursor()); tc.setPosition(_positionList.at(id.toInt() - 1)); _editorP->setTextCursor(tc); _editorP->verticalScrollBar()->setValue(_editorP->verticalScrollBar()->maximum()); _editorP->ensureCursorVisible(); } void c2bReferenceList::clearSelections() { disconnect(ui.listView, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged())); QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected); while (*it) { (*it)->setSelected(false); ++it; } itemSelectionChanged(); connect(ui.listView, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged())); } void c2bReferenceList::itemSelectionChanged() { int entries(0); int doi(0); int file(0); int url(0); int author(0); int title(0); QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected | QTreeWidgetItemIterator::NotHidden); while (*it) { if (!_doiList.at((*it)->text(_id_index).toInt() - 1).isEmpty()) ++doi; if (!_fileList.at((*it)->text(_id_index).toInt() - 1).isEmpty()) ++file; if (!_urlList.at((*it)->text(_id_index).toInt() - 1).isEmpty()) ++url; if (!(*it)->text(_author_index).isEmpty()) ++author; if (!(*it)->text(_title_index).isEmpty()) ++title; ++entries; ++it; } citeEntryAction->setEnabled(entries > 0); citeEntryAction->setStatusTip(tr("Cite selected entries. %1 Entries selected.").arg(entries)); openDOIAction->setEnabled(doi > 0); openDOIAction->setStatusTip(tr("Browse reference by DOI. %1 DOIs in selected entries.").arg(doi)); openFileAction->setEnabled(file > 0); openFileAction->setStatusTip(tr("Open document file. %1 Files in selected entries.").arg(file)); openUrlAction->setEnabled(url > 0); openUrlAction->setStatusTip(tr("Open document URL. %1 URLs in selected entries.").arg(url)); openAuthorsWebSearchAction->setEnabled(author > 0); openAuthorsWebSearchAction->setStatusTip(tr("Web search by Author. %1 Entries selected.").arg(author)); openTitleWebSearchAction->setEnabled(title > 0); openTitleWebSearchAction->setStatusTip(tr("Web search by Title. %1 Entries selected.").arg(title)); emit hasSelectedItems(entries > 0); } QStringList c2bReferenceList::selectedKeys() const { QStringList keys; QTreeWidgetItemIterator it(ui.listView, QTreeWidgetItemIterator::Selected | QTreeWidgetItemIterator::NotHidden); while (*it) { if (!(*it)->text(_key_index).isEmpty()) keys.append((*it)->text(_key_index)); ++it; } return keys; } void c2bReferenceList::setLyXPipe() { _citerP->setLyXPipe(); } /*************************************************************************** Filter Bar ***************************************************************************/ void c2bReferenceList::setupFilterBar() { const QStringList types(searchPattern::types()); _filter_mode = _settingsP->value("c2bReferenceList/FilterMode", types.first()).toString(); QActionGroup* filterMode = new QActionGroup(this); filterMode->setExclusive(true); for (int i = 0; i < types.count(); ++i) { const QString& t = types.at(i); QAction* act = filterMode->addAction(t); act->setCheckable(true); if (_filter_mode == t) act->setChecked(true); } QMenu* filterModeM = new QMenu(this); filterModeM->addActions(filterMode->actions()); ui.filterB->setMenu(filterModeM); connect(filterMode, SIGNAL(triggered(QAction*)), this, SLOT(setFilterMode(QAction*))); connect(ui.comboFilter, SIGNAL(editTextChanged(const QString&)), this, SLOT(blockFilterSignals())); } void c2bReferenceList::setFilterMode(QAction* mode) { _filter_mode = mode->text(); _settingsP->setValue("c2bReferenceList/FilterMode", _filter_mode); filterList(); } void c2bReferenceList::blockFilterSignals() { ui.comboFilter->blockSignals(true); QTimer::singleShot(500, this, SLOT(filterList())); } void c2bReferenceList::filterList() { const QString text(ui.comboFilter->currentText()); if (text.isEmpty()) { QTreeWidgetItemIterator it(ui.listView); while (*it) { (*it)->setHidden(false); ++it; } } else { searchPattern pattern(text, _filter_mode); QTreeWidgetItemIterator it(ui.listView); while (*it) { QTreeWidgetItem* item = *it; if (pattern.matches(item->text(_author_index)) || pattern.matches(item->text(_title_index))) item->setHidden(false); else item->setHidden(true); ++it; } QTimer::singleShot(5000, this, SLOT(keepFilterPattern())); } itemSelectionChanged(); ui.comboFilter->blockSignals(false); } void c2bReferenceList::keepFilterPattern() { const QString text(ui.comboFilter->currentText()); if (!text.isEmpty()) if (ui.comboFilter->findText(text) < 0) ui.comboFilter->addItem(text); } cb2bib-1.9.7/src/PaxHeaders.3194/c2bBibPreparserLog.h0000644000000000000000000000013213124510216016674 xustar0030 mtime=1498583182.811256566 30 atime=1498583183.007254748 30 ctime=1498583182.811256566 cb2bib-1.9.7/src/c2bBibPreparserLog.h0000644000175000001440000000153613124510216020273 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BBIBPREPARSERLOG_H #define C2BBIBPREPARSERLOG_H #include "ui_c2bLogWidget.h" #include class QCheckBox; class c2bBibPreparserLog : public QDialog { Q_OBJECT public: explicit c2bBibPreparserLog(QWidget* parentw = 0); ~c2bBibPreparserLog(); void append(const QString& ms); public slots: void show(); protected slots: void help(); private: QCheckBox* PreparserShowLog; Ui::c2bLogWidget ui; void closeEvent(QCloseEvent* qevent); }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/c2bConfigure.cpp0000644000000000000000000000013213124510216016126 xustar0030 mtime=1498583182.743257199 30 atime=1498583183.007254748 30 ctime=1498583182.747257161 cb2bib-1.9.7/src/c2bConfigure.cpp0000644000175000001440000013370413124510216017530 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bConfigure.h" #include "c2b.h" #include "c2bConfigureFR.h" #include "c2bFileDialog.h" #include "c2bSettings.h" #include "c2bUtils.h" #include #include #include /** \page c2bconf Configuration - \ref c2bconf_annote - \ref c2bconf_bibtex - \ref c2bconf_clipboard - \ref c2bconf_documents - \ref c2bconf_files - \ref c2bconf_fonts - \ref c2bconf_network - \ref c2bconf_shortcuts - \ref c2bconf_utilities

         

        \section c2bconf_annote Configuring Annote - Annote Cascading Style Sheet (CSS) \n This file contains the style sheet to personalize the appearance of the HTML notes generated by the cb2Bib. The cb2Bib distribution includes the tex2html.css file as a CSS template. - MathJax Header File \n The mathematical notation in the text notes is displayed by \htmlonly jsMath. \endhtmlonly or its successor \htmlonly MathJax. \endhtmlonly The MathJax is a Java Script library. Its location and configuration must be specified inside the HTML files in order to be known by the browser. Check and eventually edit the distribution file tex2html_local_mathjax_header.html. Should web script be preferred set script source to https://cdn.mathjax.org/mathjax/latest/MathJax.js. - Include CSS in HTML \n Styles for the notes will be included, if checked, into the HTML file. In this way, all the information, text and layout, is contained in one single file. - Use relative links \n If checked, linked local files will be set relative to the current HTML document. - Annote Viewer Fonts \n Selects default and monospaced fonts for the Annote viewer. Changes in the fonts might need restarting the viewer unless using some of the latest QtWebKit libraries. The viewer is disabled if the cb2Bib was not compiled and linked against WebKit. Note also that fonts specified in the CSS prevail over this selection. \section c2bconf_bibtex Configuring BibTeX - CiteID Pattern \n Specifies the pattern for formatting cite's ID. Predefined placeholders are available as a context menu, by right-clicking this edit line. Placeholders will be substituted by the actual reference field values. See \ref idplaceholders for descriptions. - Author and Editor Name Format \n Sets Authors and Editor names in abbreviated or full form, if the latter is available. - Journal Name Format \n Sets output journal names in abbreviated or full form. Note that this feature only works if journal names are found in the Journal Abbreviation List file. - Number Separator \n Sets number separator, e.g., ' - ' or ' -- '. Spaces count. It applies to pages, multiple volume, number, and year cases. - Convert entry strings to LaTeX \n If checked, cb2Bib converts special characters to LaTeX commands. Most BibTeX import filters do not process LaTeX escaped characters. Therefore, keeping this box unchecked can be appropriate when using cb2Bib as a temporary media to transfer references to non BibTeX reference managers. - Set 'title' in double braces \n If checked, it writes extra braces in title. This will keep capitalization as is, when processed by BibTeX. - Postprocess 'month' \n If checked, cb2Bib elaborates the 'month' string on a BibTeX fashion. E.g., 'April 1' becomes '"1~" # apr'. No processing is done if the input string is not written in English. - Try Heuristic Guess if recognition fails \n If checked, when automatic recognition fails, cb2Bib tries to catch some of the fields of the reference through an heuristic set of rules. See \ref heuristicguess. - Check Repeated On Save \n If checked, cb2Bib looks for existing references in the BibTeX directory similar to the one being saved. The search is based on exact cite ID match, or on reference contents, by considering title and author field values, or, if empty, booktitle and editor, and using the \htmlonly approximate string \endhtmlonly search pattern. If similar references are found, the current reference is not saved, and the similar ones are displayed. Pressing the save button one second time will proceed to actually saving the current reference. Note that this feature is not applied in command line mode, when using cb2bib --txt2bib or cb2bib --doc2bib. See also \ref keyboard. - External BibTeX Postprocessing \n Use this box to select a BibTeX postprocessing external tool. The name of the executable, the command arguments and the output file extension are required fields. Arguments, any number, are passed to the executable. For the sake of generality, it is required to specify the \%finput and \%foutput placeholders. The first one is later substituted by the current BibTeX filename. The second one is substituted by the current filename with the specified output extension. Caution: Be careful if using the same file extension for input and output, e.g., using bib because you want to use a beautifier or a sorting script. The cb2Bib has no control on external disk modifications. Therefore, if the script failed, the input data would possibly be lost. See also \ref keyboard. \section c2bconf_clipboard Configuring Clipboard - Replace/Remove from Input Stream \n If checked, input stream is preprocessed by performing a customizable set of string substitutions/removals. This option is mainly intended to remove image HTML alt tags. Although not visible, alt tags reach the clipboard when selecting and copying text. Author lists with email icons may contain alt strings that would interfere with the author names processing. In addition, this option is also appropriate to help translating special characters to Unicode and LaTeX. Use it carefully, as to avoid unwanted or unsuspected substitutions. See also \ref bibproc. - External Clipboard Preparsing Command \n Preparses input stream through an external, user-defined tool. Use the box bellow to specify its name and path. cb2Bib executes the command tool_name tmp_inputfile tmp_outputfile. You might consider a wrapper shell script to fullfill this particular syntax requirement. Two examples, isi2bib and ris2bib are provided. To test them, make sure the \htmlonly BibUtils Package \endhtmlonly is available on your machine. Otherwise, modify these scripts according to your needs. See also \ref keyboard, \ref bibproc, and the examples \ref ex_isi_format and \ref ex_ris. - Perform always, as part of an automatic extraction \n Performs preparsing each time the recognition engine is invoked. Caution: cb2Bib, when not in disconnected mode, starts the recognition engine each time the clipboard changes. Thus, it might send arbitrary data to the external parsing tool. The tool might not be prepared to handle 'any data' and might fall into a sort of 'infinite loop'. cb2Bib kills the external tool after a reasonable waiting. But, if the tool is called through a wrapper script, killing the script will not end the tool itself. Therefore, check this box only when needed. If you write your own preparser, design it as to write no data to output file whenever it can not process an input properly. When the preparser produces no data, the cb2Bib sends instead the input stream to the recognition engine. In this way, preparsing and normal cb2Bib functioning will work harmoniously. - Do not show log \n If unchecked, the external process messages, and the input and output streams are shown in a log window. Showing output logs is useful for debugging purposes. - Add document metadata to Input Stream \n When checked, if the document linked to a reference contains relevant metadata, then metadata will be added to the current clipboard contents. The metadata is included at the time of adding the document to the current reference, e. g., when dropping a file into the cb2Bib panel. If the document has BibTeX information, the cb2Bib will automatically set the corresponding fields. If it has not, but relevant bibliographic information is found, this data is only added to the clipboard panel. To insert it in the edit lines, activate the Heuristic Guess (Alt+G). The option Prepend or Append to the clipboard contents is provided for conveniently writing regular expressions considering metadata contents. File documents are linked to the references by the BibTeX tag 'file'. See also \ref metadata. \section c2bconf_documents Configuring Documents - Rename and Copy/Move document files to Directory \n If selected, each file 'drag and dropped' onto the cb2Bib main window is renamed to DocumentID.pdf (or DocumentID.ps, DocumentID.dvi, etc.) and moved to the storage directory. If unselected, the file URL is written to the file BibTeX keyword, without any renaming or moving of the file. The actual copy/move action is scheduled and performed once the reference is accepted, e.g., once it is saved. - Copy or Move document files \n Choose whether copy or move Network Files dropped onto the cb2Bib main window. See also Use External Network Client. - Set directory relative to the BibTeX File Directory \n If checked, the document file is copied/moved to the current BibTeX file directory. If the Documents Directory box contains a relative directory it will be added to the file name. For example, if it contains articles, files will be copied to /current_bibtex_path/articles/. An absolute path in the Documents Directory box will be ignored in this context. Note that the file dialog returns here relative file addresses. Consequently, only the necessary portion of the full name, instead of the fullpath filename, is written to the BibTeX entry. File retrieving from within the cb2Bib browser will be relative to the BibTeX file absolute location. \n Use this option if you plan to store in a same or a related directory the BibTeX and document files. This option is appropriate for storing bibliographic collections in removal devices. Likewise, when the cb2Bib is launched in USB mode, by means of the command line switch '--conf', the alternate option is not available. See \ref relnotes084 and \ref export_entries. - Insert BibTeX metadata to document files \n If checked, the cb2Bib will write bibliographic metadata to the linked document, once the current reference is accepted and saved. See also \ref metadata. - DocumentID Pattern \n Specifies the pattern for formatting the document's filenames. Predefined placeholders are available as a context menu, by right-clicking this edit line. Placeholders will be substituted by the actual reference field values. See \ref idplaceholders for descriptions. - ExifTool Metadata writer \n The cb2Bib uses \htmlonly ExifTool \endhtmlonly for writing bibliographic metadata to the attached documents. Select here the ExifTool path name. On Windows, remember renaming exiftool(-k).exe to exiftool.exe for command line use. See also \ref metadata_write. \section c2bconf_files Configuring Files - Journal Abbreviation List File \n This file contains a list of journal names equivalences: a capital-letter acronym, standard abbreviated form, and full name of the journal. If an input journal name is recognized, cb2Bib will use the standard abbreviated form for the journal bibkey. If your usual journal were not within the distributed, default abbreviations.txt, you could edit this file, or point to a personalized abbreviation file. Note: Changes in the abbreviation file only take place after reestarting cb2Bib. - Regular Expression List File \n The cb2Bib distribution includes the file regexps.txt with a few set of rules for reference extraction. This includes most of the scientific literature. Extracting from email alerts or publisher abstract pages is a volatile task. Information does not follow a standardized structure. Extraction pattern may then change as often as the web design needs to. Besides, such extraction from the clipboard is system dependent, in a way that produces different formatting of the text copies on different systems. You can use your personalized regexps.txt file, for testing, debugging -regular expressions are reloaded each time the automatic recognition engine executes-, and fullfiling your particular extraction needs. - Bookmarks and Network Query Info File \n The cb2Bib distribution includes the file netqinf.txt that contains bookmarks data, and server related information for bibliographic querying. Note that the cb2Bib treats bibliographic queries as generalized net bookmarks. This allows accessing almost any online bibliographic resource. Check this file for implementations details and customization. - Browser Cascading Style Sheet (CSS) \n This file contains the style sheet to configure the appearance of the bibliographic references when viewed in browser mode. The cb2Bib distribution includes the references.css and references-dark.css file as a CSS examples. - Part Of Speech (POS) Lexicon \n This box must contain the address to the cb2Bib distribution file lexicon.pos. This file contains a set of patterns and related POS information required to Index Documents, i. e., to extract keywords from documents for the c2bCiter module. - Search In Files Cache Directory \n Directory containing internal data for Search In Files functionality. If an existing directory is selected the cb2Bib will write all internal data on it. If otherwise, cache data will be written on the same directory from where BibTeX are searched. It might be, therefore, convenient to group all this files in a separate directory that does not need to be backup, and that can easily be deleted whenever desired. \section c2bconf_fonts Configuring Fonts - Font Selector \n Selects the main window and editor font family and size. - Context Colors \n Doubleclick on context color items to select syntax highlighter font color. Besides syntax highlighting, and to ease manual bibliographic extractions, cb2Bib has the following coloring convention. 'cb2Bib unrelevant text' colors non-word, non-digit, and cb2Bib's internal tags. 'cb2Bib relevant text' refers to the reference's year. 'cb2Bib highly relevant' attempts to guess text sectioning, highlighting 'abstract', 'introduction', and 'keywords'. \section c2bconf_network Configuring Network - Use External Network Client \n The cb2Bib manages local and network files in an equivalent manner. Network file retrieving, however, requires sometimes password and/or cookies administration. The KDE desktop incorporates kfmclient utility. A command kfmclient (copy|move|exec) source [destination] permits copying or moving files, with kfmclient taking care of advanced browsing preferences. By checking this box, cb2Bib will use the specified file manger client. - Use Proxy \n If checked, the cb2Bib will access the network through a proxy host. Set the Host name, the Port, and the proxy Type. A login dialog will appear if the proxy requires authentication. Login data is not stored, it must be entered at each session. - Perform Network Queries after automatic reference extractions \n Network queries can be used to complete a partial reference extraction. For instance, provided a reference 'J. Name, 25, 103' and an appropriate pattern to extract it, cb2Bib will attempt to complete the reference automatically. No query is performed if automatic reference extraction was tagged as BibTeX. - Download document if available \n If checked, cb2Bib downloads document files to the directory specified in Rename and Copy/Move document files to Directory. See also the file netqinf.txt for details. Download is scheduled and performed once the reference is accepted, e.g., once it is saved. Note that when document file is local, e.g., when PDFImport or switch --doc2bib is used, no document is downloaded. - Keep Query temporary files (Debug Only) \n cb2Bib may use up to three temporary files to perform a network query. If this box is checked, the temporary files are not deleted. This facilitates the testing and customization of the information file netqinf.txt. \section c2bconf_shortcuts Configuring Shortcuts - Customizes most key sequences for actions shortcuts. Concretely, cb2Bib specific actions are configurable, but not standard actions such as 'Open', 'Exit', 'Copy', or 'Paste', which are already predefined to the standard, specific key sequences for each platform. Shortcuts are customizable for the cb2Bib main panel, editor, and reference list actions. Single-key shortcuts, i.e., for manual reference extraction and shortcuts in c2bCiter, are non-configurable, since they they closely map non-translatable BibTeX keywords. \section c2bconf_utilities Configuring Utilities - To plain text converter \n Selects the external some_format_to_text tool that cb2Bib uses to convert document files prior to reference extraction and searching. cb2Bib executes the line command converter [options] inputfile tmp_output.txt, where [options] are user defined arguments. As a default, cb2Bib launches pdf2cb, a modified PDF to text utility found in the XPDF package. Modifications are available at xpdf/ directory in the cb2Bib sources. Default arguments are -q -f 1 -l 1 to extract only the first, title page when used within PDFImport, and -q, to convert the complete document when used within Search in Files. Appropriate for PDFImport could also be a document metadata extractor. Often metadata contains structured information regarding document authors, title, and source. A simple shell script wrapper could be the following any2text_search: \verbatim #!/bin/csh # Convert documents to text according to filename extension # any2text_search input_fn.ext output_fn.txt set ext = $1:e if ( $ext == 'djvu' ) then /usr/bin/djvutxt "$1" "$2" if ($status) exit 1 else if ( $ext == 'chm' ) then (/usr/local/bin/archmage -c text "$1" "$2") >& /dev/null if ($status) exit 1 else # If using pdf2cb /path/to/pdf2cb -q "$1" "$2" # If using pdftotex # /usr/bin/pdftotext -enc UTF-8 "$1" "$2" if ($status) exit 1 endif \endverbatim

         

        */ c2bConfigure::c2bConfigure(QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); resize(QSize(1, 1)); // Set it at minimum size settings = c2bSettingsP; for (int i = 0; i < ui.contentsWidget->count(); ++i) ui.contentsWidget->item(i)->setStatusTip(tr("Configure %1").arg(ui.contentsWidget->item(i)->text())); connect(ui.contentsWidget, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(changePage(QListWidgetItem*, QListWidgetItem*))); ui.contentsWidget->setCurrentItem(ui.contentsWidget->item(settings->value("c2bConfigure/CurrentPage", 0).toInt())); ui.buttonBox->button(QDialogButtonBox::Apply)->setAutoDefault(false); ui.buttonBox->button(QDialogButtonBox::Cancel)->setAutoDefault(false); ui.buttonBox->button(QDialogButtonBox::Help)->setAutoDefault(false); connect(ui.buttonBox->button(QDialogButtonBox::Apply), SIGNAL(clicked()), this, SLOT(apply())); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); populateFontCombos(); // Annote ui.AnnoteCssFile->setText(settings->fileName("c2bAnnote/AnnoteCssFile")); connect(ui.AnnoteCssDir, SIGNAL(clicked()), this, SLOT(getAnnoteCssFile())); ui.MathJaxHeaderFile->setText(settings->fileName("c2bAnnote/MathJaxHeaderFile")); connect(ui.MathJaxDir, SIGNAL(clicked()), this, SLOT(getMathJaxHeaderFile())); ui.IncludeCSS->setChecked(settings->value("c2bAnnote/IncludeCSS").toBool()); ui.UseRelativeLinks->setChecked(settings->value("c2bAnnote/UseRelativeLinks").toBool()); fontSelection(settings->value("c2bAnnote/Font").value(), ui.af_familycombo, ui.af_psizecombo); fontSelection(settings->value("c2bAnnote/FixedFont").value(), ui.aff_familycombo, ui.aff_psizecombo); #ifndef C2B_USE_QWEB ui.AnnoteViewerFont->setDisabled(true); ui.AnnoteViewerFixedFont->setDisabled(true); #endif // BibTeX ui.CiteIdPattern->setText(settings->value("cb2Bib/CiteIdPattern").toString()); ui.UseAbbreviatedNames->setChecked(!settings->value("cb2Bib/UseFullNames").toBool()); ui.UseFullNames->setChecked(settings->value("cb2Bib/UseFullNames").toBool()); ui.SetJournalsToAbbreviated->setChecked(!settings->value("cb2Bib/SetJournalsToFullname").toBool()); ui.SetJournalsToFullname->setChecked(settings->value("cb2Bib/SetJournalsToFullname").toBool()); ui.PageNumberSeparator->setText(settings->value("cb2Bib/PageNumberSeparator").toString()); ui.ConvertReferenceToLaTeX->setChecked(settings->value("cb2Bib/ConvertReferenceToLaTeX").toBool()); ui.UseDoubleBraces->setChecked(settings->value("cb2Bib/UseDoubleBraces").toBool()); ui.PostprocessMonth->setChecked(settings->value("cb2Bib/PostprocessMonth").toBool()); ui.DoHeuristicGuess->setChecked(settings->value("cb2Bib/DoHeuristicGuess").toBool()); ui.CheckRepeatedOnSave->setChecked(settings->value("cb2Bib/CheckRepeatedOnSave").toBool()); ui.PostprocessBibTeXBin->setText(settings->fileName("cb2Bib/PostprocessBibTeXBin")); ui.PostprocessBibTeXArg->setText(settings->value("cb2Bib/PostprocessBibTeXArg").toString()); ui.PostprocessBibTeXExt->setText(settings->value("cb2Bib/PostprocessBibTeXExt").toString()); connect(ui.PostprocessBibTeXDir, SIGNAL(clicked()), this, SLOT(getPostprocessBibTeXBin())); // Clipboard ui.FindReplaceInput->setChecked(settings->value("cb2Bib/FindReplaceInput").toBool()); connect(ui.FindReplaceInput, SIGNAL(toggled(bool)), this, SLOT(updateFindReplaceInputButtons())); updateFindReplaceInputButtons(); QStringList FindReplaceInputList(settings->value("cb2Bib/FindReplaceInputList").toStringList()); QStringList::Iterator i = FindReplaceInputList.begin(); while (i != FindReplaceInputList.end()) { const QStringList spLine((*i).split('|')); new QTreeWidgetItem(ui.FindReplaceList, spLine); ++i; } connect(ui.FindReplaceList, SIGNAL(itemActivated(QTreeWidgetItem*, int)), this, SLOT(FindReplaceDialog_Edit())); connect(ui.FindReplaceList, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(updateFindReplaceInputButtons())); connect(ui.FRNew, SIGNAL(clicked()), this, SLOT(FindReplaceDialog_New())); connect(ui.FREdit, SIGNAL(clicked()), this, SLOT(FindReplaceDialog_Edit())); connect(ui.FRDelete, SIGNAL(clicked()), this, SLOT(FindReplaceDialog_Delete())); ui.AddMetadata->setChecked(settings->value("cb2Bib/AddMetadata").toBool()); const QString PreAppendMetadata(settings->value("cb2Bib/PreAppendMetadata").toString()); if (PreAppendMetadata == "prepend") ui.Prepend->setChecked(true); else if (PreAppendMetadata == "append") ui.Append->setChecked(true); if (ui.AddMetadata->isChecked()) ui.PreAppendMetadata->setEnabled(true); else ui.PreAppendMetadata->setEnabled(false); connect(ui.AddMetadata, SIGNAL(toggled(bool)), ui.PreAppendMetadata, SLOT(setEnabled(bool))); ui.PreparserAutomatic->setChecked(settings->value("cb2Bib/PreparserAutomatic").toBool()); ui.PreparserShowLog->setChecked(!settings->value("cb2Bib/PreparserShowLog").toBool()); ui.PreparserBin->setText(settings->fileName("cb2Bib/PreparserBin")); connect(ui.PreparserDir, SIGNAL(clicked()), this, SLOT(getPreparserBin())); // Documents ui.MovePdf->setChecked(settings->value("cb2Bib/MovePdf").toBool()); ui.PdfDirectory->setText(settings->fileName("cb2Bib/PdfDirectory")); connect(ui.PdfDir, SIGNAL(clicked()), this, SLOT(getPdfDirectory())); const QString CopyMovePdf(settings->value("cb2Bib/CopyMovePdf").toString()); if (CopyMovePdf == "copy") ui.Copy->setChecked(true); else if (CopyMovePdf == "move") ui.Move->setChecked(true); if (ui.MovePdf->isChecked()) { ui.RenameCopyMovePdf->setEnabled(true); ui.DocumentIdPatternBox->setEnabled(true); } else { ui.RenameCopyMovePdf->setEnabled(false); ui.DocumentIdPatternBox->setEnabled(false); } connect(ui.MovePdf, SIGNAL(toggled(bool)), ui.RenameCopyMovePdf, SLOT(setEnabled(bool))); ui.RelativePdfDirectory->setChecked(settings->value("cb2Bib/RelativePdfDirectory").toBool()); ui.RelativePdfDirectory->setDisabled(settings->isUsbConfiguredMode()); ui.InsertMetadata->setChecked(settings->value("cb2Bib/InsertMetadata").toBool()); ui.DocumentIdPattern->setDocumentIDEdit(); ui.DocumentIdPattern->setText(settings->value("cb2Bib/DocumentIdPattern").toString()); connect(ui.MovePdf, SIGNAL(toggled(bool)), ui.DocumentIdPatternBox, SLOT(setEnabled(bool))); ui.ExifToolBin->setText(settings->fileName("cb2Bib/ExifToolBin")); connect(ui.ExifToolDir, SIGNAL(clicked()), this, SLOT(getExifToolBin())); // Files ui.JournalFile->setText(settings->fileName("cb2Bib/JournalFile")); connect(ui.JournalDir, SIGNAL(clicked()), this, SLOT(getJournalFile())); ui.RegularExpressionFile->setText(settings->fileName("cb2Bib/RegularExpressionFile")); connect(ui.RegularExpressionDir, SIGNAL(clicked()), this, SLOT(getRegularExpressionFile())); ui.NetworkFile->setText(settings->fileName("cb2Bib/NetworkFile")); connect(ui.NetworkDir, SIGNAL(clicked()), this, SLOT(getNetworkFile())); ui.BrowserCssFile->setText(settings->fileName("cb2Bib/BrowserCssFile")); connect(ui.BrowserCssDir, SIGNAL(clicked()), this, SLOT(getBrowserCssFile())); ui.PosLexiconFile->setText(settings->fileName("cb2Bib/PosLexiconFile")); connect(ui.PosLexiconDir, SIGNAL(clicked()), this, SLOT(getPosLexiconFile())); ui.CacheDirectory->setText(settings->fileName("cb2Bib/CacheDirectory")); connect(ui.CacheDir, SIGNAL(clicked()), this, SLOT(getCacheDirectory())); // Fonts c2bMonoFont = settings->c2bMonoFont; ui.samplelineedit->setFont(c2bMonoFont); fontSelection(c2bMonoFont, ui.familycombo, ui.psizecombo); connect(ui.familycombo, SIGNAL(activated(const QString&)), this, SLOT(comboFamilyChanged(const QString&))); connect(ui.psizecombo, SIGNAL(activated(const QString&)), this, SLOT(comboSizeChanged(const QString&))); colors.loadColors(settings); QHashIterator cit(colors.colorList); while (cit.hasNext()) { cit.next(); QTreeWidgetItem* item = new QTreeWidgetItem(QStringList(cit.key())); item->setData(0, Qt::DecorationRole, *cit.value()); item->setData(0, Qt::TextColorRole, *cit.value()); ui.ColorList->insertTopLevelItem(0, item); } ui.ColorList->header()->setSortIndicatorShown(false); ui.ColorList->viewport()->setCursor(QCursor(static_cast(Qt::PointingHandCursor))); ui.ColorList->sortItems(0, Qt::AscendingOrder); connect(ui.ColorList, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(changeContextColor(QTreeWidgetItem*))); connect(ui.ColorList, SIGNAL(itemActivated(QTreeWidgetItem*, int)), this, SLOT(changeContextColor(QTreeWidgetItem*))); // Network ui.FmClient->setChecked(settings->value("cb2Bib/FmClient").toBool()); ui.clientGroupBox->setEnabled(settings->value("cb2Bib/FmClient").toBool()); ui.FmClientCopyBin->setText(settings->fileName("cb2Bib/FmClientCopyBin")); ui.FmClientCopyArg->setText(settings->value("cb2Bib/FmClientCopyArg").toString()); ui.FmClientMoveBin->setText(settings->fileName("cb2Bib/FmClientMoveBin")); ui.FmClientMoveArg->setText(settings->value("cb2Bib/FmClientMoveArg").toString()); connect(ui.FmClientCopyDir, SIGNAL(clicked()), this, SLOT(getFmClientCopyBin())); connect(ui.FmClientMoveDir, SIGNAL(clicked()), this, SLOT(getFmClientMoveBin())); ui.UseProxy->setChecked(settings->value("cb2Bib/UseProxy").toBool()); ui.proxyGroupBox->setEnabled(settings->value("cb2Bib/UseProxy").toBool()); ui.ProxyHostName->setText(settings->value("cb2Bib/ProxyHostName", QString()).toString()); QValidator* proxyPortValidator = new QIntValidator(0, 999999, this); ui.ProxyPort->setValidator(proxyPortValidator); ui.ProxyPort->setText(settings->value("cb2Bib/ProxyPort").toString()); ui.ProxyType->setCurrentIndex(settings->value("cb2Bib/ProxyType").toInt()); ui.AutomaticQuery->setChecked(settings->value("cb2Bib/AutomaticQuery").toBool()); ui.AutomaticPdfDownload->setChecked(settings->value("cb2Bib/AutomaticPdfDownload").toBool()); ui.KeepTmpNQFiles->setChecked(settings->value("cb2Bib/KeepTmpNQFiles").toBool()); // Shortcuts ui.cb2BibShortcuts->setShortcutNames("Shortcuts/cb2Bib/", settings->shortcutNames()); connect(ui.cb2BibShortcuts, SIGNAL(statusMessage(const QString&)), this, SLOT(showMessage(const QString&))); ui.EditorShortcuts->setShortcutNames("Shortcuts/Editor/", settings->shortcutNames()); connect(ui.EditorShortcuts, SIGNAL(statusMessage(const QString&)), this, SLOT(showMessage(const QString&))); // Utilities ui.PdfImportPdf2TextBin->setText(settings->fileName("c2bPdfImport/Pdf2TextBin")); ui.PdfImportPdf2TextArg->setText(settings->value("c2bPdfImport/Pdf2TextArg").toString()); connect(ui.PdfImportPdf2TextDir, SIGNAL(clicked()), this, SLOT(getPdfImportPdf2TextBin())); ui.BibSearcherPdf2TextBin->setText(settings->fileName("c2bBibSearcher/Pdf2TextBin")); ui.BibSearcherPdf2TextArg->setText(settings->value("c2bBibSearcher/Pdf2TextArg").toString()); connect(ui.BibSearcherPdf2TextDir, SIGNAL(clicked()), this, SLOT(getBibSearcherPdf2TextBin())); } c2bConfigure::~c2bConfigure() {} void c2bConfigure::setPage(int index) { ui.contentsWidget->setCurrentItem(ui.contentsWidget->item(index)); } void c2bConfigure::accept() { apply(); QDialog::accept(); } void c2bConfigure::apply() { settings->setValue("c2bConfigure/CurrentPage", ui.contentsWidget->row(ui.contentsWidget->currentItem())); // Annote settings->setFilename("c2bAnnote/AnnoteCssFile", ui.AnnoteCssFile->text()); settings->setFilename("c2bAnnote/MathJaxHeaderFile", ui.MathJaxHeaderFile->text()); settings->setValue("c2bAnnote/IncludeCSS", ui.IncludeCSS->isChecked()); settings->setValue("c2bAnnote/UseRelativeLinks", ui.UseRelativeLinks->isChecked()); settings->setValue("c2bAnnote/Font", selectedFont(ui.af_familycombo, ui.af_psizecombo)); settings->setValue("c2bAnnote/FixedFont", selectedFont(ui.aff_familycombo, ui.aff_psizecombo)); // BibTeX settings->setValue("cb2Bib/CiteIdPattern", ui.CiteIdPattern->text()); settings->setValue("cb2Bib/UseFullNames", ui.UseFullNames->isChecked()); settings->setValue("cb2Bib/SetJournalsToFullname", ui.SetJournalsToFullname->isChecked()); settings->setValue("cb2Bib/PageNumberSeparator", ui.PageNumberSeparator->text()); settings->setValue("cb2Bib/ConvertReferenceToLaTeX", ui.ConvertReferenceToLaTeX->isChecked()); settings->setValue("cb2Bib/UseDoubleBraces", ui.UseDoubleBraces->isChecked()); settings->setValue("cb2Bib/PostprocessMonth", ui.PostprocessMonth->isChecked()); settings->setValue("cb2Bib/DoHeuristicGuess", ui.DoHeuristicGuess->isChecked()); settings->setValue("cb2Bib/CheckRepeatedOnSave", ui.CheckRepeatedOnSave->isChecked()); settings->setFilename("cb2Bib/PostprocessBibTeXBin", ui.PostprocessBibTeXBin->text()); settings->setValue("cb2Bib/PostprocessBibTeXArg", ui.PostprocessBibTeXArg->text()); settings->setValue("cb2Bib/PostprocessBibTeXExt", ui.PostprocessBibTeXExt->text()); // Clipboard QStringList FindReplaceInputList; QTreeWidgetItemIterator it(ui.FindReplaceList); while (*it) { QTreeWidgetItem* item = *it; FindReplaceInputList.append(QString("%1|%2|%3").arg(item->text(0)).arg(item->text(1)).arg(item->text(2))); ++it; } if (FindReplaceInputList.isEmpty()) { FindReplaceInputList = C2B_FIND_REPLACE_LIST.split("^e"); settings->setValue("cb2Bib/FindReplaceInput", false); } else settings->setValue("cb2Bib/FindReplaceInput", ui.FindReplaceInput->isChecked()); settings->setValue("cb2Bib/FindReplaceInputList", FindReplaceInputList); QString PreAppendMetadata; if (ui.Prepend->isChecked()) PreAppendMetadata = "prepend"; else PreAppendMetadata = "append"; settings->setValue("cb2Bib/PreAppendMetadata", PreAppendMetadata); settings->setValue("cb2Bib/AddMetadata", ui.AddMetadata->isChecked()); settings->setValue("cb2Bib/PreparserAutomatic", ui.PreparserAutomatic->isChecked()); settings->setValue("cb2Bib/PreparserShowLog", !ui.PreparserShowLog->isChecked()); settings->setFilename("cb2Bib/PreparserBin", ui.PreparserBin->text()); // Documents QString CopyMovePdf; if (ui.Copy->isChecked()) CopyMovePdf = "copy"; else CopyMovePdf = "move"; settings->setValue("cb2Bib/CopyMovePdf", CopyMovePdf); settings->setValue("cb2Bib/MovePdf", ui.MovePdf->isChecked()); settings->setFilename("cb2Bib/PdfDirectory", ui.PdfDirectory->text()); settings->setValue("cb2Bib/RelativePdfDirectory", ui.RelativePdfDirectory->isChecked()); settings->setValue("cb2Bib/InsertMetadata", ui.InsertMetadata->isChecked()); settings->setValue("cb2Bib/DocumentIdPattern", ui.DocumentIdPattern->text()); settings->setFilename("cb2Bib/ExifToolBin", ui.ExifToolBin->text()); // Files settings->setFilename("cb2Bib/JournalFile", ui.JournalFile->text()); settings->setFilename("cb2Bib/RegularExpressionFile", ui.RegularExpressionFile->text()); settings->setFilename("cb2Bib/NetworkFile", ui.NetworkFile->text()); settings->setFilename("cb2Bib/BrowserCssFile", ui.BrowserCssFile->text()); settings->setFilename("cb2Bib/PosLexiconFile", ui.PosLexiconFile->text()); settings->setFilename("cb2Bib/CacheDirectory", ui.CacheDirectory->text()); // Fonts settings->setValue("cb2Bib/MonoFont", c2bMonoFont); colors.saveColors(settings); // Network settings->setValue("cb2Bib/FmClient", ui.FmClient->isChecked()); settings->setFilename("cb2Bib/FmClientCopyBin", ui.FmClientCopyBin->text()); settings->setFilename("cb2Bib/FmClientMoveBin", ui.FmClientMoveBin->text()); settings->setValue("cb2Bib/FmClientCopyArg", ui.FmClientCopyArg->text().simplified()); settings->setValue("cb2Bib/FmClientMoveArg", ui.FmClientMoveArg->text().simplified()); settings->setValue("cb2Bib/UseProxy", ui.UseProxy->isChecked()); settings->setValue("cb2Bib/ProxyHostName", ui.ProxyHostName->text().trimmed()); settings->setValue("cb2Bib/ProxyPort", ui.ProxyPort->text().trimmed()); settings->setValue("cb2Bib/ProxyType", ui.ProxyType->currentIndex()); settings->setValue("cb2Bib/AutomaticQuery", ui.AutomaticQuery->isChecked()); settings->setValue("cb2Bib/AutomaticPdfDownload", ui.AutomaticPdfDownload->isChecked()); settings->setValue("cb2Bib/KeepTmpNQFiles", ui.KeepTmpNQFiles->isChecked()); // Shortcuts settings->setKeysequences(ui.cb2BibShortcuts->modifiedKeysequences()); settings->setKeysequences(ui.EditorShortcuts->modifiedKeysequences()); // Utilities settings->setValue("c2bPdfImport/Pdf2TextArg", ui.PdfImportPdf2TextArg->text().simplified()); settings->setFilename("c2bPdfImport/Pdf2TextBin", ui.PdfImportPdf2TextBin->text()); settings->setValue("c2bBibSearcher/Pdf2TextArg", ui.BibSearcherPdf2TextArg->text().simplified()); settings->setFilename("c2bBibSearcher/Pdf2TextBin", ui.BibSearcherPdf2TextBin->text()); // Notify settings settings->notify(); } void c2bConfigure::comboFamilyChanged(const QString& family) { ui.samplelineedit->setFont(QFont(family, ui.psizecombo->currentText().toInt())); c2bMonoFont.setFamily(family); } void c2bConfigure::comboSizeChanged(const QString& pt) { ui.samplelineedit->setFont(QFont(ui.familycombo->currentText(), pt.toInt())); c2bMonoFont.setPointSize(pt.toInt()); } void c2bConfigure::FindReplaceDialog_Delete() { QTreeWidgetItem* item = ui.FindReplaceList->currentItem(); delete item; item = ui.FindReplaceList->currentItem(); if (item) item->setSelected(true); updateFindReplaceInputButtons(); } void c2bConfigure::FindReplaceDialog_Edit() { QTreeWidgetItem* item = ui.FindReplaceList->currentItem(); if (item) { c2bConfigureFR* frD = new c2bConfigureFR(item, this); frD->exec(); delete frD; } } void c2bConfigure::FindReplaceDialog_New() { QStringList newlist; newlist << QString() << QString() << QString(); QTreeWidgetItem* fri = new QTreeWidgetItem(ui.FindReplaceList, newlist); c2bConfigureFR* frD = new c2bConfigureFR(fri, this); if (frD->exec() != QDialog::Accepted) delete fri; delete frD; } void c2bConfigure::updateFindReplaceInputButtons() { if (!ui.FindReplaceInput->isChecked()) { ui.FindReplaceList->setEnabled(false); ui.FRNew->setEnabled(false); ui.FREdit->setEnabled(false); ui.FRDelete->setEnabled(false); return; } else { ui.FindReplaceList->setEnabled(true); ui.FRNew->setEnabled(true); if (ui.FindReplaceList->topLevelItemCount() > 0) { ui.FREdit->setEnabled(true); ui.FRDelete->setEnabled(true); } else { ui.FREdit->setEnabled(false); ui.FRDelete->setEnabled(false); } } } void c2bConfigure::getAnnoteCssFile() { const QString fn(ui.AnnoteCssFile->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, tr("Select CSS filename"), fn, tr("Cascading Style Sheets (*.css);;All (*)"))); if (!new_fn.isEmpty()) ui.AnnoteCssFile->setText(new_fn); } void c2bConfigure::getMathJaxHeaderFile() { const QString fn(ui.MathJaxHeaderFile->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, tr("Select MathJax filename"), fn, tr("HTML Header (*.html);;All (*)"))); if (!new_fn.isEmpty()) ui.MathJaxHeaderFile->setText(new_fn); } void c2bConfigure::getJournalFile() { const QString fn(ui.JournalFile->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, tr("Select a filename (Restart to apply changes)"), fn, tr("cb2Bib Journal Lists (*.txt);;All (*)"))); if (!new_fn.isEmpty()) ui.JournalFile->setText(new_fn); } void c2bConfigure::getRegularExpressionFile() { const QString fn(ui.RegularExpressionFile->text()); const QString new_fn(c2bFileDialog::getFilename(this, QString(), fn, tr("cb2Bib RegExp Lists (*.txt);;All (*)"))); if (!new_fn.isEmpty()) ui.RegularExpressionFile->setText(new_fn); } void c2bConfigure::getNetworkFile() { const QString fn(ui.NetworkFile->text()); const QString new_fn(c2bFileDialog::getFilename(this, QString(), fn, tr("cb2Bib Network Query Info (*.txt);;All (*)"))); if (!new_fn.isEmpty()) ui.NetworkFile->setText(new_fn); } void c2bConfigure::getBrowserCssFile() { const QString fn(ui.BrowserCssFile->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, tr("Select a filename (Restart browser to apply changes)"), fn, tr("Cascading Style Sheets (*.css);;All (*)"))); if (!new_fn.isEmpty()) ui.BrowserCssFile->setText(new_fn); } void c2bConfigure::getFmClientCopyBin() { const QString fn(ui.FmClientCopyBin->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, QString(), fn, tr("File Manager Client executable (*)"))); if (!new_fn.isEmpty()) ui.FmClientCopyBin->setText(new_fn); } void c2bConfigure::getPreparserBin() { const QString fn(ui.PreparserBin->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, QString(), fn, tr("External Parser executable (*)"))); if (!new_fn.isEmpty()) ui.PreparserBin->setText(new_fn); } void c2bConfigure::getFmClientMoveBin() { const QString fn(ui.FmClientMoveBin->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, QString(), fn, tr("File Manager Client executable (*)"))); if (!new_fn.isEmpty()) ui.FmClientMoveBin->setText(new_fn); } void c2bConfigure::getPostprocessBibTeXBin() { const QString fn(ui.PostprocessBibTeXBin->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, QString(), fn, tr("BibTeX Postprocess executable (*)"))); if (!new_fn.isEmpty()) ui.PostprocessBibTeXBin->setText(new_fn); } void c2bConfigure::getPdfImportPdf2TextBin() { const QString fn(ui.PdfImportPdf2TextBin->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, QString(), fn, tr("PDF to text converter (*)"))); if (!new_fn.isEmpty()) ui.PdfImportPdf2TextBin->setText(new_fn); } void c2bConfigure::getBibSearcherPdf2TextBin() { const QString fn(ui.BibSearcherPdf2TextBin->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, QString(), fn, tr("PDF to text converter (*)"))); if (!new_fn.isEmpty()) ui.BibSearcherPdf2TextBin->setText(new_fn); } void c2bConfigure::getExifToolBin() { const QString fn(ui.ExifToolBin->text()); const QString new_fn(c2bFileDialog::getOpenFilename(this, QString(), fn, tr("ExifTool (*)"))); if (!new_fn.isEmpty()) ui.ExifToolBin->setText(new_fn); } void c2bConfigure::getPosLexiconFile() { const QString fn(ui.PosLexiconFile->text()); const QString new_fn(c2bFileDialog::getFilename(this, QString(), fn, tr("cb2Bib Part Of Speech Lexicon (*.pos);;All (*)"))); if (!new_fn.isEmpty()) ui.PosLexiconFile->setText(new_fn); } void c2bConfigure::getCacheDirectory() { const QString new_dir(c2bFileDialog::getExistingDirectory(this, tr("Select a cache directory"), ui.CacheDirectory->text())); if (!new_dir.isEmpty()) ui.CacheDirectory->setText(new_dir); } void c2bConfigure::getPdfDirectory() { const QString dir(c2bUtils::documentAbsoluteName(ui.RelativePdfDirectory->isChecked(), settings->fileName("cb2Bib/BibTeXFile"), ui.PdfDirectory->text(), QString())); QString new_dir(c2bFileDialog::getExistingDirectory(this, tr("Select documents directory"), dir)); if (!new_dir.isEmpty()) { new_dir = c2bUtils::documentDirName(ui.RelativePdfDirectory->isChecked(), settings->fileName("cb2Bib/BibTeXFile"), new_dir); ui.PdfDirectory->setText(new_dir); } } void c2bConfigure::populateFontCombos() { QFontDatabase db; QList sizes = db.standardSizes(); QList::Iterator it = sizes.begin(); while (it != sizes.end()) { ui.psizecombo->insertItem(0, QString::number(*it)); ui.af_psizecombo->insertItem(0, QString::number(*it)); ui.aff_psizecombo->insertItem(0, QString::number(*it)); it++; } } void c2bConfigure::fontSelection(const QFont& f, QFontComboBox* fc, QComboBox* sc) { fc->setCurrentFont(f); const int p_font_size(f.pointSize()); int i(0); while (i < sc->count()) { if (sc->itemText(i) == QString::number(p_font_size)) { sc->setCurrentIndex(i); break; } i++; } } QFont c2bConfigure::selectedFont(QFontComboBox* fc, QComboBox* sc) const { QFont f = fc->currentFont(); f.setPointSize(sc->currentText().toInt()); return f; } void c2bConfigure::changeContextColor(QTreeWidgetItem* item) { QColor newColor = QColorDialog::getColor(item->textColor(0), this); if (newColor.isValid()) { item->setData(0, Qt::TextColorRole, newColor); item->setData(0, Qt::DecorationRole, newColor); colors.updateColor(newColor, item->text(0)); } } void c2bConfigure::changePage(QListWidgetItem* current, QListWidgetItem* previous) { if (!current) current = previous; setWindowTitle(tr("Configure %1 - cb2Bib").arg(current->text())); ui.pagesWidget->setCurrentIndex(ui.contentsWidget->row(current)); } void c2bConfigure::showMessage(const QString& ms) { ui.statusBar->showMessage(ms, C2B_MESSAGE_TIME); } bool c2bConfigure::event(QEvent* qevent) { if (qevent->type() == QEvent::StatusTip) { ui.statusBar->showMessage(static_cast(qevent)->tip()); return true; } else return QDialog::event(qevent); } void c2bConfigure::help() { c2bUtils::displayHelp("http://www.molspaces.com/d_cb2bib-c2bconf.php#c2bconf_" + ui.contentsWidget->currentItem()->text().toLower()); } cb2bib-1.9.7/src/PaxHeaders.3194/c2bCiterModel.cpp0000644000000000000000000000013213124510216016234 xustar0030 mtime=1498583182.731257309 30 atime=1498583183.007254748 30 ctime=1498583182.735257273 cb2bib-1.9.7/src/c2bCiterModel.cpp0000644000175000001440000006706713124510216017646 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bCiterModel.h" #include #include "c2b.h" #include #include template class ascending { public: explicit ascending(const T& data) : _data(data) {} inline bool operator()(const int i, const int j) { return _data.at(i) < _data.at(j); } private: const T& _data; }; c2bCiterModel::c2bCiterModel(QObject* parento) : QAbstractTableModel(parento) { _first_column_color = QApplication::palette().color(QPalette::Active, QPalette::Base).darker(110); _clear(); } void c2bCiterModel::loadCitations(const QStringList& fns) { emit layoutAboutToBeChanged(); _clear(); _analyzer.reload(); for (int i = 0; i < fns.count(); ++i) _add_citations(fns.at(i)); _set_table_data(); _set_sort_indices(); _update_format(); emit layoutChanged(); emit statusMessage(tr("Loaded %1 references from %2 files.").arg(_citation_count).arg(fns.count())); } void c2bCiterModel::loadCitations(const QString& fn) { emit layoutAboutToBeChanged(); _clear(); _analyzer.reload(); _add_citations(fn); _set_table_data(); _set_sort_indices(); _update_format(); emit layoutChanged(); emit statusMessage(tr("Loaded %1 references.").arg(_citation_count)); } void c2bCiterModel::reloadCitations(const QStringList& fns, const c2bCiter::State& state, QModelIndex* current_index) { emit layoutAboutToBeChanged(); _clear(); _analyzer.reload(); for (int i = 0; i < fns.count(); ++i) _add_citations(fns.at(i)); _set_table_data(); _set_sort_indices(); _update_format(state.format); const int current_item(_current_item(state.index_data)); _update_current_index(current_item, current_index); _history.saveCurrentState(_format, _filter, current_item, current_index, _fstring); emit layoutChanged(); emit statusMessage(tr("Loaded %1 references from %2 files.").arg(_citation_count).arg(fns.count())); } QVariant c2bCiterModel::data(const QModelIndex& i, int role) const { if (role == Qt::DisplayRole) return (this->*_display_ptr)(i.row(), i.column()); else if (role == Qt::DecorationRole) { if (_format == c2bCiter::K && i.column() == 0) return QVariant(QIcon(":/icons/icons/bullet.png")); if (i.column() == 0) { if (_is_selected.at(_offset(i.row()))) return QVariant(QIcon(":/icons/icons/citer_citation_checked.png")); else return QVariant(QIcon(":/icons/icons/citer_citation.png")); } return QVariant(); } else if (role == Qt::BackgroundRole) { if (i.column() == 0 && _column_count > 1 && _format != c2bCiter::K) return _first_column_color; else return QVariant(); } else return QVariant(); } QStringList c2bCiterModel::dataSelectedCiteIds() const { QStringList ids; for (int i = 0; i < _citation_count; ++i) if (_is_selected.at(_map_yajt.at(i))) ids.append(_citeId.at(_map_yajt.at(i))); return ids; } void c2bCiterModel::setPatternFilter(const QString& pattern, QModelIndex* current_index, const c2bCiter::Format format) { _history.saveCurrentState(_format, _filter, _current_item(current_index), current_index, _fstring); emit layoutAboutToBeChanged(); const QStringList word(pattern.split(c2bUtils::nonLetter, QString::SkipEmptyParts)); _filter = word.count() > 0 ? c2bCiter::Pattern : c2bCiter::None; _format = format; if (_filter == c2bCiter::Pattern) { _fstring = pattern; if (_format == c2bCiter::K) { int j(0); for (int i = 0; i < _keyword_count; ++i) { const QString& str = _analyzer.sentence(i); bool mf(true); for (int w = 0; w < word.count(); ++w) if (!str.contains(word.at(w), Qt::CaseSensitive)) { mf = false; break; } if (mf) _map_filter[j++] = i; } _row_count = j; } else { for (int i = 0; i < _citation_count; ++i) { _matches_filter[i] = true; const QString& str = _search_string.at(i); for (int w = 0; w < word.count(); ++w) if (!str.contains(word.at(w), Qt::CaseSensitive)) { _matches_filter[i] = false; break; } } } } else _fstring.clear(); _update_format(_format == c2bCiter::R ? _history.lastCitationFormat() : _format); _update_current_index(_format == c2bCiter::K ? _history.lastKeyword() : _history.lastCitation(), current_index); emit layoutChanged(); } void c2bCiterModel::setSelectedFilter(QModelIndex* current_index) { emit statusLabel(tr("Selected")); _history.saveCurrentState(_format, _filter, _current_item(current_index), current_index, _fstring); emit layoutAboutToBeChanged(); for (int i = 0; i < _citation_count; ++i) _matches_filter[i] = _is_selected.at(i); _filter = c2bCiter::Selected; _fstring.clear(); _update_format(_history.lastCitationFormat()); _update_current_index(_history.lastSelectionCitation(), current_index); emit layoutChanged(); } void c2bCiterModel::setRelatedFilter(const QString& documentfn, QModelIndex* current_index, const c2bCiter::Format format) { _analyzer.setSimilarDocuments(documentfn); if (_analyzer.similarCount() == 0) { emit statusMessage(tr("No related references.")); return; } emit statusLabel(tr("Related to '%1'").arg(_title.at(_file.value(documentfn)))); _history.saveCurrentState(_format, _filter, _current_item(current_index), current_index, _fstring); emit layoutAboutToBeChanged(); for (int i = 0; i < _citation_count; ++i) _matches_filter[i] = false; const int sc(_analyzer.similarCount()); _related_count = 0; for (int i = 0; i < sc; ++i) { // Note that data in collectionAnalyzer index might not match // BibTeX files data (outdated index or users browsing // particular BibTeX file sets). Use full path document // filenames to set a mapping. const int j(_file.value(_analyzer.similar(i), -1)); if (j == -1) { _analyzer.skipSimilarDocument(i); continue; } _matches_filter[j] = true; _map_filter[i] = j; ++_related_count; } _filter = c2bCiter::Related; _fstring = documentfn; _update_format(format); _update_current_index(_history.lastCitation(), current_index); emit layoutChanged(); } void c2bCiterModel::setKeywordFilter(const QString& keyword, QModelIndex* current_index) { _analyzer.setKeywordDocuments(keyword); if (_analyzer.documentCount() == 0) { emit statusMessage(tr("No related references.")); return; } emit statusLabel(tr("Related to '%1'").arg(keyword)); _history.saveCurrentState(_format, _filter, _current_item(current_index), current_index, _fstring); emit layoutAboutToBeChanged(); for (int i = 0; i < _citation_count; ++i) _matches_filter[i] = false; const int dc(_analyzer.documentCount()); for (int i = 0; i < dc; ++i) { // See comment at c2bCiterModel::setRelatedFilter const int j(_file.value(_analyzer.document(i), -1)); if (j == -1) continue; _matches_filter[j] = true; } _filter = c2bCiter::Keyword; _fstring = keyword; _update_format(_history.lastCitationFormat()); _update_current_index(_history.lastKeyword(), current_index); emit layoutChanged(); } void c2bCiterModel::setDocumentFilter(const QString& documentfn, QModelIndex* current_index) { _analyzer.setDocumentKeywords(documentfn); const int nk(_analyzer.keywordCount()); if (nk == 0) { emit statusMessage(tr("No keywords from this reference.")); return; } emit statusLabel(tr("Keywords from '%1'").arg(_title.at(_file.value(documentfn)))); _history.saveCurrentState(_format, _filter, _current_item(current_index), current_index, _fstring); emit layoutAboutToBeChanged(); int j(0); for (int i = 0; i < nk; ++i) _map_filter[j++] = _analyzer.keywordid(i); _row_count = j; _filter = c2bCiter::Document; _fstring = documentfn; _update_format(c2bCiter::K); _update_current_index(_history.lastKeyword(), current_index); emit layoutChanged(); } void c2bCiterModel::setGlossaryView(QModelIndex* current_index) { _history.saveCurrentState(_format, _filter, _current_item(current_index), current_index, _fstring); emit layoutAboutToBeChanged(); _filter = c2bCiter::None; _fstring.clear(); _update_format(c2bCiter::K); _update_current_index(_history.lastKeyword(), current_index); emit patternFilterChanged(_fstring); emit layoutChanged(); } void c2bCiterModel::selectCitation(const QModelIndex& i) { if (_format == c2bCiter::K) return; _is_selected[_offset(i.row())] = !_is_selected.at(_offset(i.row())); emit layoutChanged(); } QList c2bCiterModel::sizeHintForColumns() const { QList sizes; switch (_format) { case c2bCiter::AJYT: sizes.append(qMin(20, _author_max_length + 2)); sizes.append(20); sizes.append(6); sizes.append(100); break; case c2bCiter::IT: sizes.append(12); sizes.append(100); break; case c2bCiter::JYA: sizes.append(qMin(25, _journal_max_length)); sizes.append(6); sizes.append(100); break; case c2bCiter::K: sizes.append(100); break; case c2bCiter::R: sizes.append(9); sizes.append(100); break; case c2bCiter::T: sizes.append(100); break; case c2bCiter::YAJT: default: sizes.append(8); sizes.append(75); sizes.append(25); sizes.append(100); break; } return sizes; } void c2bCiterModel::clearSelection() { emit layoutAboutToBeChanged(); for (int i = 0; i < _citation_count; ++i) _is_selected[i] = false; emit layoutChanged(); } void c2bCiterModel::clearCurrentFilter(QModelIndex* current_index) { if (_filter == c2bCiter::None) return; if (_filter != c2bCiter::Pattern && _history.lastState().filter == c2bCiter::Pattern) { const c2bCiter::State& s(_history.lastState()); setPatternFilter(s.filter_string, current_index, s.format); emit patternFilterChanged(s.filter_string); } else { _history.saveCurrentState(_format, _filter, _current_item(current_index), current_index, _fstring); emit layoutAboutToBeChanged(); _filter = c2bCiter::None; _fstring.clear(); _update_format(_format == c2bCiter::R ? _history.lastCitationFormat() : _format); _update_current_index(_format == c2bCiter::K ? _history.lastKeyword() : _history.lastCitation(), current_index); emit patternFilterChanged(_fstring); emit layoutChanged(); } } c2bCiter::State c2bCiterModel::currentState(const QModelIndex& current_index) const { const int current_item(_current_item(current_index)); c2bCiter::State s(_format == c2bCiter::R ? _history.lastCitationFormat() : _format, _filter, current_index.row(), _fstring); if (current_item > -1) s.index_data = (_format == c2bCiter::K) ? _analyzer.sentence(current_item) : _search_string.at(current_item); return s; } void c2bCiterModel::restoreState(const c2bCiter::State& s, QModelIndex* current_index) { if (current_index) _history.saveCurrentItemIndex(_format, _filter, _current_item(current_index)); switch (s.filter) { case c2bCiter::None: emit layoutAboutToBeChanged(); _filter = c2bCiter::None; _fstring.clear(); _update_format(s.format); emit patternFilterChanged(_fstring); emit layoutChanged(); break; case c2bCiter::Document: if (_file.contains(s.filter_string)) emit statusLabel(tr("Keywords from '%1'").arg(_title.at(_file.value(s.filter_string)))); setDocumentFilter(s.filter_string, 0); break; case c2bCiter::Keyword: setKeywordFilter(s.filter_string, 0); break; case c2bCiter::Pattern: setPatternFilter(s.filter_string, 0, s.format); emit patternFilterChanged(s.filter_string); break; case c2bCiter::Related: setRelatedFilter(s.filter_string, 0, s.format); break; case c2bCiter::Selected: emit statusLabel(tr("Selected")); setSelectedFilter(0); break; default: break; } if (current_index) *current_index = index(s.viewer_index, 0); } void c2bCiterModel::restorePreviousState(QModelIndex* current_index) { if (_history.currentState() == -1) _history.saveCurrentState(_format, _filter, _current_item(current_index), current_index, _fstring); const c2bCiter::State& s(_history.previousState()); restoreState(s, 0); if (current_index) *current_index = index(s.viewer_index, 0); } void c2bCiterModel::restoreNextState(QModelIndex* current_index) { if (_history.currentState() == -1) return; const c2bCiter::State& s(_history.nextState()); restoreState(s, 0); if (current_index) *current_index = index(s.viewer_index, 0); } void c2bCiterModel::updateFormat(const c2bCiter::Format format, QModelIndex* current_index) { if (_format == c2bCiter::K) { c2bCiter::State s(_history.lastNonKeywordState()); s.format = format; restoreState(s, current_index); } else { emit layoutAboutToBeChanged(); const int current_item(_current_item(current_index)); _update_format(format); _update_current_index(current_item, current_index); emit layoutChanged(); } } void c2bCiterModel::_update_format(const c2bCiter::Format format) { _format = format; _history.saveCurrentCitationFormat(_format); switch (_format) { case c2bCiter::AJYT: _column_count = 4; _display_ptr = &c2bCiterModel::_display_ajyt; break; case c2bCiter::IT: _column_count = 2; _display_ptr = &c2bCiterModel::_display_it; break; case c2bCiter::JYA: _column_count = 3; _display_ptr = &c2bCiterModel::_display_jya; break; case c2bCiter::K: _column_count = 1; _display_ptr = &c2bCiterModel::_display_k; break; case c2bCiter::R: _column_count = 2; _display_ptr = &c2bCiterModel::_display_r; break; case c2bCiter::T: _column_count = 1; _display_ptr = &c2bCiterModel::_display_t; break; case c2bCiter::YAJT: default: _column_count = 4; _display_ptr = &c2bCiterModel::_display_yajt; break; } _set_mapping(); } int c2bCiterModel::_current_item(const QString& index_data) const { int current_item(-1); if (!index_data.isEmpty()) { if (_format == c2bCiter::K) { for (int i = 0; i < _keyword_count; ++i) if (index_data == _analyzer.sentence(i)) { current_item = i; break; } } else { for (int i = 0; i < _citation_count; ++i) if (index_data == _search_string.at(i)) { current_item = i; break; } } } return current_item; } void c2bCiterModel::_update_current_index(const int current_item, QModelIndex* current_index) const { if (!current_index) return; if (current_item >= 0) for (int i = 0; i < _row_count; ++i) if (_offset(i) == current_item) { *current_index = index(i, 0); return; } *current_index = index(0, 0); } void c2bCiterModel::_add_citations(const QString& fn) { bibParser* bpP = c2b::bibParser(); const QString tag_author("author"); const QString tag_booktitle("booktitle"); const QString tag_doi("doi"); const QString tag_editor("editor"); const QString tag_file("file"); const QString tag_journal("journal"); const QString tag_title("title"); const QString tag_url("url"); const QString tag_year("year"); const QString template_position("%1:%2"); QStringList fields; fields.append(tag_author); fields.append(tag_booktitle); fields.append(tag_doi); fields.append(tag_editor); fields.append(tag_file); fields.append(tag_journal); fields.append(tag_title); fields.append(tag_url); fields.append(tag_year); bibReference ref; bpP->initReferenceParsing(fn, fields, &ref); const QRegExp initials1("\\b\\w\\b"); const QRegExp initials2("[^\\w\\s]"); const QString bibtex(c2bUtils::fileToString(fn)); while (bpP->referencesIn(bibtex, &ref)) { QString author(ref.anyAuthor()); if (!author.isEmpty()) { author = bpP->authorFromBibTeX(author); author.remove(initials1); author.remove(initials2); author.replace(" and ", ", "); c2bUtils::simplifyString(author); } QString title(ref.anyTitle()); c2bUtils::cleanTitle(title, true); QString url(ref.value(tag_url)); if (url.isEmpty()) { const QString doi(ref.value(tag_doi)); if (!doi.isEmpty()) { if (doi.startsWith("http://")) url = QUrl::toPercentEncoding(doi); else url = "http://dx.doi.org/" + QUrl::toPercentEncoding(doi); } } QString file(ref.value(tag_file)); if (!file.isEmpty()) file = QDir::cleanPath(file); uint included_date; const QFileInfo finf(file); if (finf.exists()) included_date = QDateTime(finf.lastModified().date()).toTime_t(); else included_date = 0; _author_string.append(author); _bibtex_position.append(template_position.arg(fn).arg(ref.positionValue)); _citeId.append(ref.citeidName); _included_date.append(included_date); _journal.append(ref.anyJournal()); _title.append(title); _url.append(url); _year.append(ref.value(tag_year)); if (!file.isEmpty()) _file.insert(file, _citation_count); _citation_count++; } } void c2bCiterModel::_clear() { _filter = c2bCiter::None; _format = c2bCiter::AJYT; _author.clear(); _author_string.clear(); _bibtex_position.clear(); _citeId.clear(); _file.clear(); _fstring.clear(); _history.clear(); _included_date.clear(); _is_selected.clear(); _journal.clear(); _map_ajyt.clear(); _map_author.clear(); _map_filter.clear(); _map_it.clear(); _map_jya.clear(); _map_t.clear(); _map_yajt.clear(); _matches_filter.clear(); _search_string.clear(); _title.clear(); _url.clear(); _year.clear(); _author_count = 0; _author_max_length = 0; _citation_count = 0; _column_count = 0; _journal_max_length = 0; _keyword_count = 0; _mapping = 0; _related_count = 0; _row_count = 0; } /**************************************************************************** SETTING DATA POINTERS *****************************************************************************/ void c2bCiterModel::_set_table_data() { const QString sep(", "); const QChar dot('.'); for (int i = 0; i < _citation_count; ++i) _author_count += _author_string.at(i).count(sep) + 1; _author.resize(_author_count); _map_author.resize(_author_count); int ij(0); for (int i = 0; i < _citation_count; ++i) { const QStringList authors(_author_string.at(i).split(sep, QString::KeepEmptyParts)); for (int j = 0; j < authors.count(); ++j) { _author[ij] = authors.at(j).trimmed(); _map_author[ij] = i; _author_max_length = qMax(_author_max_length, _author.at(ij).length()); ++ij; } } if (_author_count != ij) qFatal("c2bCiterModel::_set_table_data: Mismatch author mapping"); bibParser* bpP = c2b::bibParser(); for (int i = 0; i < _citation_count; ++i) { _journal[i] = bpP->abbreviatedJournal(_journal.at(i)); _journal[i].remove(dot); _journal_max_length = qMax(_journal_max_length, _journal.at(i).length()); } _is_selected.resize(_citation_count); for (int i = 0; i < _citation_count; ++i) _is_selected[i] = false; _keyword_count = _analyzer.sentenceCount(); const int mca(qMax(_citation_count, _author_count)); const int mcas(qMax(mca, _keyword_count)); _matches_filter.resize(mca); _map_filter.resize(mcas); } void c2bCiterModel::_set_sort_indices() { const QChar sp(' '); // AJYT // Use _search_string as temporary for sorting _search_string.resize(_author_count); for (int i = 0; i < _author_count; ++i) { const int j(_map_author.at(i)); _search_string[i] = c2bUtils::toAscii(_author.at(i) + sp + _journal.at(j) + sp + _year.at(j) + sp + _title.at(j), c2bUtils::Collation); } _map_ajyt.resize(_author_count); for (int i = 0; i < _author_count; ++i) _map_ajyt[i] = i; ascending< QVector > ajyt(_search_string); qSort(_map_ajyt.begin(), _map_ajyt.end(), ajyt); // IT _search_string.resize(_citation_count); const int current_dtt(QDateTime::currentDateTime().toTime_t()); const QString dtt("%1"); const QChar padding('0'); for (int i = 0; i < _citation_count; ++i) _search_string[i] = c2bUtils::toAscii(dtt.arg(current_dtt - _included_date.at(i), 10, 10, padding) + sp + _title.at(i), c2bUtils::Collation); _map_it.resize(_citation_count); for (int i = 0; i < _citation_count; ++i) _map_it[i] = i; ascending< QVector > it(_search_string); qSort(_map_it.begin(), _map_it.end(), it); // JYA for (int i = 0; i < _citation_count; ++i) _search_string[i] = c2bUtils::toAscii(_journal.at(i) + sp + _year.at(i) + sp + _author_string.at(i), c2bUtils::Collation); _map_jya.resize(_citation_count); for (int i = 0; i < _citation_count; ++i) _map_jya[i] = i; ascending< QVector > jya(_search_string); qSort(_map_jya.begin(), _map_jya.end(), jya); // T for (int i = 0; i < _citation_count; ++i) _search_string[i] = c2bUtils::toAscii(_title.at(i), c2bUtils::Collation); _map_t.resize(_citation_count); for (int i = 0; i < _citation_count; ++i) _map_t[i] = i; ascending< QVector > t(_search_string); qSort(_map_t.begin(), _map_t.end(), t); // YAJT for (int i = 0; i < _citation_count; ++i) _search_string[i] = c2bUtils::toAscii(_year.at(i) + sp + _author_string.at(i) + sp + _journal.at(i) + sp + _title.at(i), c2bUtils::Collation); _map_yajt.resize(_citation_count); for (int i = 0; i < _citation_count; ++i) _map_yajt[i] = i; ascending< QVector > yajt(_search_string); qSort(_map_yajt.begin(), _map_yajt.end(), yajt); // Keep _search_string for filtering } void c2bCiterModel::_set_mapping() { switch (_format) { case c2bCiter::AJYT: _row_count = _author_count; _mapping = &_map_ajyt; break; case c2bCiter::IT: _row_count = _citation_count; _mapping = &_map_it; break; case c2bCiter::JYA: _row_count = _citation_count; _mapping = &_map_jya; break; case c2bCiter::K: _row_count = _filter == c2bCiter::None ? _keyword_count : _row_count; break; case c2bCiter::R: _row_count = _related_count; _mapping = &_map_filter; break; case c2bCiter::T: _row_count = _citation_count; _mapping = &_map_t; break; case c2bCiter::YAJT: default: _row_count = _citation_count; _mapping = &_map_yajt; break; } if (_filter == c2bCiter::None) return; if (_format == c2bCiter::K) { _mapping = &_map_filter; return; } if (_format == c2bCiter::R) // _map_filter is already set in setRelatedFilter return; int r(0); if (_format == c2bCiter::AJYT) { for (int i = 0; i < _row_count; ++i) if (_matches_filter.at(_map_author.at(_mapping->at(i)))) _map_filter[r++] = _mapping->at(i); } else { for (int i = 0; i < _row_count; ++i) if (_matches_filter.at(_mapping->at(i))) _map_filter[r++] = _mapping->at(i); } _row_count = r; _mapping = &_map_filter; } QString c2bCiterModel::_display_ajyt(const int row, const int column) const { switch (column) { case 0: return _author.at(_mapping->at(row)); case 1: return _journal.at(_map_author.at(_mapping->at(row))); case 2: return _year.at(_map_author.at(_mapping->at(row))); case 3: return _title.at(_map_author.at(_mapping->at(row))); default: return QString(); } } QString c2bCiterModel::_display_it(const int row, const int column) const { switch (column) { case 0: return _included_date.at(_offset(row)) > 0 ? QDateTime::fromTime_t(_included_date.at(_offset(row))).date().toString(Qt::ISODate) : QString(); case 1: return _title.at(_offset(row)); default: return QString(); } } QString c2bCiterModel::_display_jya(const int row, const int column) const { switch (column) { case 0: return _journal.at(_offset(row)); case 1: return _year.at(_offset(row)); case 2: return _author_string.at(_offset(row)); default: return QString(); } } QString c2bCiterModel::_display_k(const int row, const int column) const { switch (column) { case 0: return _analyzer.sentence(_offset(row)); default: return QString(); } } QString c2bCiterModel::_display_r(const int row, const int column) const { switch (column) { case 0: return QString("%1%").arg(100 * _analyzer.similarity(row), 3, 'f', 0); case 1: return _title.at(_offset(row)); default: return QString(); } } QString c2bCiterModel::_display_t(const int row, const int column) const { switch (column) { case 0: return _title.at(_offset(row)); default: return QString(); } } QString c2bCiterModel::_display_yajt(const int row, const int column) const { switch (column) { case 0: return _year.at(_offset(row)); case 1: return _author_string.at(_offset(row)); case 2: return _journal.at(_offset(row)); case 3: return _title.at(_offset(row)); default: return QString(); } } int c2bCiterModel::_offset(const int i) const { if (_format == c2bCiter::AJYT) return _map_author.at(_mapping->at(i)); else if (_format == c2bCiter::K && _filter == c2bCiter::None) return i; else return _mapping->at(i); } cb2bib-1.9.7/src/PaxHeaders.3194/c2bBibParser.h0000644000000000000000000000013213124510216015523 xustar0030 mtime=1498583182.811256566 30 atime=1498583183.007254748 30 ctime=1498583182.811256566 cb2bib-1.9.7/src/c2bBibParser.h0000644000175000001440000000427213124510216017122 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BBIBPARSER_H #define C2BBIBPARSER_H #include "c2bLineEdit.h" #include "c2bBibPreparserLog.h" #include #include #include class QComboBox; /** cb2Bib interface to bibParser This class groups Bib Parser functionality related to GUI @author Pere Constans */ class c2bBibParser : public bibParser { Q_OBJECT public: explicit c2bBibParser(QObject* parento = 0); ~c2bBibParser(); void clearCurrentReference(); void setWidgetMapping(); inline void addField(const QString& name, c2bLineEdit* editor) { _field_editors.insert(name, editor); } inline void addTypes(QComboBox* types) { _type_editor = types; } inline QString field(const QString& name) const { return _field_editors.value(name)->text(); } inline void setField(const QString& name, const QString& value) { _field_editors[name]->setText(parse(name, value)); } inline void setField(const QString& name, const QString& value, const QString& init_value) { if (name == "addauthors") _field_editors["author"]->setText(parse(name, value, init_value)); else if (name == "addeditors") _field_editors["editor"]->setText(parse(name, value, init_value)); } signals: void bibModified(bool modified); void setDocumentFilename(); private: QComboBox* _type_editor; QHash _field_editors; QPointer _preparser_logP; QWidget* _c2b_mainP; bool _bp_updates_gui; void checkRegExpFile(const QString& fn); void currentReferenceUpdated(); void setCiteID(); void setReferenceType(const QString& type); private slots: void referenceEdited(const QString& value); void setField(); void showLog(const QString& log); }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/findDialog.cpp0000644000000000000000000000013213124510216015656 xustar0030 mtime=1498583182.799256679 30 atime=1498583183.007254748 30 ctime=1498583182.799256679 cb2bib-1.9.7/src/findDialog.cpp0000644000175000001440000001257213124510216017257 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * findDialog was originally adapted from Qt Designer * Copyright (C) 2001 Trolltech AS. All rights reserved. ***************************************************************************/ #include "findDialog.h" #include #include #include #include findDialog::findDialog(QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); resize(size().width(), 1); ui.buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Find")); _editor = 0; QAction* act = new QAction(this); act->setSeparator(true); addAction(act); findAction = new QAction(this); addAction(findAction); findAction->setShortcut(QKeySequence::Find); findAction->setText(tr("Find")); findAction->setStatusTip(tr("Find in text")); connect(findAction, SIGNAL(triggered()), this, SLOT(findText())); findNextAction = new QAction(this); addAction(findNextAction); findNextAction->setShortcut(QKeySequence::FindNext); findNextAction->setText(tr("Find Next")); findNextAction->setStatusTip(tr("Find next occurrence")); connect(findNextAction, SIGNAL(triggered()), this, SLOT(findNext())); findPreviousAction = new QAction(this); addAction(findPreviousAction); findPreviousAction->setShortcut(QKeySequence::FindPrevious); findPreviousAction->setText(tr("Find Previous")); findPreviousAction->setStatusTip(tr("Find previous occurrence")); connect(findPreviousAction, SIGNAL(triggered()), this, SLOT(findPrevious())); } findDialog::~findDialog() {} void findDialog::init() { ui.notFound->hide(); raise(); if (_editor->inherits("QPlainTextEdit")) ui.comboFind->setEditText(qobject_cast(_editor)->textCursor().selectedText().trimmed()); else if (_editor->inherits("QTextEdit")) ui.comboFind->setEditText(qobject_cast(_editor)->textCursor().selectedText().trimmed()); ui.comboFind->setFocus(); } void findDialog::setEditor(QPlainTextEdit* editor) { _editor = editor; } void findDialog::setEditor(QTextEdit* editor) { _editor = editor; } int findDialog::exec() { if (!_editor) return (-1); init(); return QDialog::exec(); } void findDialog::show() { if (!_editor) return; init(); QDialog::show(); } void findDialog::accept() { if (ui.comboFind->currentText().isEmpty()) return; if (_editor) { if (findText(ui.comboFind->currentText(), ui.radioForward->isChecked(), ui.checkCase->isChecked(), ui.checkWords->isChecked())) QDialog::accept(); else ui.notFound->show(); } } void findDialog::findText() { show(); } bool findDialog::findText(const QString& pattern, bool do_forward, bool do_case_sensitive, bool do_whole_words) { if (pattern.isEmpty()) return false; m_find_pattern = pattern; m_find_case = do_case_sensitive; m_find_words = do_whole_words; QTextDocument* doc; QTextCursor c; if (_editor->inherits("QPlainTextEdit")) { QPlainTextEdit* ed = qobject_cast(_editor); doc = ed->document(); c = ed->textCursor(); } else if (_editor->inherits("QTextEdit")) { QTextEdit* ed = qobject_cast(_editor); doc = ed->document(); c = ed->textCursor(); } else return false; QTextDocument::FindFlags options; if (c.hasSelection()) c.setPosition(do_forward ? c.position() : c.anchor(), QTextCursor::MoveAnchor); QTextCursor newCursor = c; if (!do_forward) options |= QTextDocument::FindBackward; if (m_find_case) options |= QTextDocument::FindCaseSensitively; if (m_find_words) options |= QTextDocument::FindWholeWords; newCursor = doc->find(m_find_pattern, c, options); bool found(true); if (newCursor.isNull()) { QTextCursor ac(doc); ac.movePosition((options & QTextDocument::FindBackward) ? QTextCursor::End : QTextCursor::Start); newCursor = doc->find(m_find_pattern, ac, options); if (newCursor.isNull()) { newCursor = c; found = false; } } if (_editor->inherits("QPlainTextEdit")) { QPlainTextEdit* ed = qobject_cast(_editor); ed->setTextCursor(newCursor); ed->verticalScrollBar()->setValue(ed->verticalScrollBar()->maximum()); ed->ensureCursorVisible(); } else if (_editor->inherits("QTextEdit")) { QTextEdit* ed = qobject_cast(_editor); ed->setTextCursor(newCursor); ed->verticalScrollBar()->setValue(ed->verticalScrollBar()->maximum()); ed->ensureCursorVisible(); } return found; } void findDialog::findNext() { if (m_find_pattern.isEmpty()) findText(); else findText(m_find_pattern, true, m_find_case, m_find_words); } void findDialog::findPrevious() { if (m_find_pattern.isEmpty()) findText(); else findText(m_find_pattern, false, m_find_case, m_find_words); } cb2bib-1.9.7/src/PaxHeaders.3194/c2bClipboard.h0000644000000000000000000000013213124510216015551 xustar0030 mtime=1498583182.823256456 30 atime=1498583183.007254748 30 ctime=1498583182.823256456 cb2bib-1.9.7/src/c2bClipboard.h0000644000175000001440000000242213124510216017143 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCLIPBOARD_H #define C2BCLIPBOARD_H #include #include #include /** cb2Bib Clipboard Implements clipboard functionality as required by cb2Bib This should fix acrobat, mozilla, qt 3.3.3 issues Using clipboardPoll STATUS: DEPRECATED */ #ifdef C2B_USE_CBPOLL class clipboardPoll; #endif class c2bClipboard : public QObject { Q_OBJECT public: explicit c2bClipboard(QObject* parento = 0); ~c2bClipboard(); void setConnected(bool); signals: void cbDataChanged(const QString&); private: QClipboard* _cb; QString _cb_text; QString _cbs_text; bool _is_connected; bool _supports_selection; uint _interval; #ifdef C2B_USE_CBPOLL clipboardPoll* _poll; #else QTimer* _timer; #endif private slots: void checkData(); void dataChanged(); void newClipboardData(bool selectionMode); void selectionChanged(); }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/c2bExport.cpp0000644000000000000000000000013213124510216015466 xustar0030 mtime=1498583182.751257124 30 atime=1498583183.007254748 30 ctime=1498583182.755257087 cb2bib-1.9.7/src/c2bExport.cpp0000644000175000001440000000520313124510216017060 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bExport.h" #include "c2b.h" #include c2bExport::c2bExport(QObject* parento) : QObject(parento) {} c2bExport::~c2bExport() {} void c2bExport::exportEntries(const export_data& ed) { // Note. Assume caller performs export_data validity check for files and directories. // Prefer replacing filenames to a full BibTeX parsing: This will preserve the // original entry and possibly available non cb2Bib tags. bibParser* bp = c2b::bibParser(); QStringList fields; if (ed.copy_documents) fields.append("file"); QRegExp filere("\\bfile\\s*=\\s*[\\{\"](.*)[\\}\"]", Qt::CaseInsensitive); filere.setMinimal(true); QString export_contents("\n\n"); QString export_log; bibReference ref; bp->initReferenceParsing(ed.bibtex_fn, fields, &ref); while (bp->referencesIn(ed.bibtex_contents, &ref)) { if (!ed.bibtex_keys.contains(ref.citeidName, Qt::CaseSensitive)) continue; if (ed.copy_documents) { QString sfn(ref.value("file")); if (!sfn.isEmpty()) { QString dfn(c2bUtils::documentAbsoluteName(ed.relative_dir, ed.export_fn, ed.documents_dir, sfn)); QFile source(sfn); if (!source.copy(dfn)) export_log += tr("% Unable to copy file %1 to %2. %3.\n").arg(sfn).arg(dfn).arg(source.errorString()); if (QFileInfo(dfn).exists()) { const int pos(filere.indexIn(ref.rawReference, 0)); if (pos > -1) { QString line(filere.cap(0)); QString file(filere.cap(1)); line.replace(file, c2bUtils::documentFilename(ed.relative_dir, ed.export_fn, ed.documents_dir, sfn)); ref.rawReference.replace(pos, filere.matchedLength(), line); } } } } export_contents += ref.rawReference + "\n\n"; } if (!export_log.isEmpty()) export_contents = "% cb2Bib " + C2B_VERSION + " / Export Error Log\n" + export_log + export_contents; if (!c2bUtils::stringToFile(export_contents, ed.export_fn)) c2bUtils::warn(tr("Unable to write file %1").arg(ed.export_fn)); } cb2bib-1.9.7/src/PaxHeaders.3194/c2bSearchInFilesPattern.cpp0000644000000000000000000000013213124510216020222 xustar0030 mtime=1498583182.783256826 30 atime=1498583183.007254748 30 ctime=1498583182.783256826 cb2bib-1.9.7/src/c2bSearchInFilesPattern.cpp0000644000175000001440000000705413124510216021622 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bSearchInFilesPattern.h" #include "c2b.h" #include "c2bBibParser.h" #include "c2bSettings.h" #include #include c2bSearchInFilesPattern::c2bSearchInFilesPattern(QWidget* parentw) : QWidget(parentw) { ui.setupUi(this); c2bBibParser* bp = c2b::bibParser(); ui.patternType->addItems(searchPattern::types()); ui.patternType->setCurrentIndex(c2bSettingsP->value("c2bSearchInFiles/PatternTypeIndex", 0).toInt()); ui.patternScope->addItems(bp->sortedBibliographicFields()); ui.yearScope->hide(); ui.inputPattern->setFocus(); connect(ui.clearB, SIGNAL(clicked()), this, SLOT(patternChanged())); connect(ui.inputPattern, SIGNAL(textEdited(const QString&)), this, SLOT(patternChanged())); connect(ui.patternScope, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(showYearScope(const QString&))); } c2bSearchInFilesPattern::~c2bSearchInFilesPattern() { c2bSettingsP->setValue("c2bSearchInFiles/PatternTypeIndex", ui.patternType->currentIndex()); } void c2bSearchInFilesPattern::patternChanged() { emit patternAvailable(isAvailable()); } void c2bSearchInFilesPattern::setText(const QString& text) { ui.inputPattern->setText(text); ui.inputPattern->setFocus(); } void c2bSearchInFilesPattern::clear() { ui.inputPattern->clear(); ui.inputPattern->setFocus(); } void c2bSearchInFilesPattern::setPattern(QTreeWidgetItem* pattern) { if (!pattern) return; if (pattern->columnCount() != ITEMS_IN_SEARCH_PATTERN) return; if (pattern->text(0) == "NOT") ui.NOT->setChecked(true); else ui.NOT->setChecked(false); if (pattern->text(1) == "Sensitive") ui.caseSensitive->setChecked(true); else ui.caseSensitive->setChecked(false); ui.patternType->setCurrentIndex(ui.patternType->findText(pattern->text(2))); ui.patternScope->setCurrentIndex(ui.patternScope->findText(pattern->text(3))); if (pattern->text(4) == "=") ui.yearScope->setCurrentIndex(ui.yearScope->findText("Exact")); else if (pattern->text(4) == ">") ui.yearScope->setCurrentIndex(ui.yearScope->findText("Newer")); else ui.yearScope->setCurrentIndex(ui.yearScope->findText("Older")); ui.inputPattern->setText(pattern->text(5)); } const QStringList c2bSearchInFilesPattern::patterns() { QStringList p; if (ui.NOT->isChecked()) p.append("NOT"); else p.append(QString()); if (ui.caseSensitive->isChecked()) p.append("Sensitive"); else p.append("Insensitive"); p.append(ui.patternType->currentText()); p.append(ui.patternScope->currentText()); if (ui.yearScope->isHidden()) p.append(" "); else if (ui.yearScope->currentText() == "Exact") p.append("="); else if (ui.yearScope->currentText() == "Newer") p.append(">"); else if (ui.yearScope->currentText() == "Older") p.append("<"); p.append(ui.inputPattern->text()); return p; } void c2bSearchInFilesPattern::showYearScope(const QString& scope) { if (scope == "year") ui.yearScope->show(); else ui.yearScope->hide(); } void c2bSearchInFilesPattern::setFocus() { ui.inputPattern->setFocus(); } cb2bib-1.9.7/src/PaxHeaders.3194/c2bCiterView.cpp0000644000000000000000000000013213124510216016106 xustar0030 mtime=1498583182.735257273 30 atime=1498583183.007254748 30 ctime=1498583182.735257273 cb2bib-1.9.7/src/c2bCiterView.cpp0000644000175000001440000002671613124510216017514 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bCiterView.h" #include "c2bCiterExcerptView.h" #include #include #include #include c2bCiterView::c2bCiterView(QWidget* parentw) : QTableView(parentw) { setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setShowGrid(false); setTabKeyNavigation(true); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed); horizontalHeader()->setVisible(false); verticalHeader()->setDefaultSectionSize(fontMetrics().height() + 5); verticalHeader()->setSectionResizeMode(QHeaderView::Fixed); verticalHeader()->setVisible(false); _citationsP = 0; _filter_mode = false; } void c2bCiterView::reloadModel(QAbstractItemModel* citations, const QStringList& bibtex_files, const c2bCiter::State& s) { _filter_mode = false; _filter_string.clear(); if (!citations) return; if (_citationsP != citations) { _citationsP = static_cast(citations); QTableView::setModel(_citationsP); connect(_citationsP, SIGNAL(patternFilterChanged(const QString&)), this, SLOT(updatePatternFilter(const QString&))); } QModelIndex i(currentIndex()); _citationsP->reloadCitations(bibtex_files, s, &i); updateViewport(); updateCurrentIndex(i); } c2bCiter::State c2bCiterView::currentState() const { if (_citationsP) return _citationsP->currentState(currentIndex()); else return c2bCiter::State(); } void c2bCiterView::showPreviousState() { QModelIndex i(currentIndex()); _citationsP->restorePreviousState(&i); updateViewport(); updateCurrentIndex(i); } void c2bCiterView::showNextState() { QModelIndex i(currentIndex()); _citationsP->restoreNextState(&i); updateViewport(); updateCurrentIndex(i); } void c2bCiterView::clearCurrentFilter() { QModelIndex i(currentIndex()); _citationsP->clearCurrentFilter(&i); updateViewport(); updateCurrentIndex(i); } void c2bCiterView::setPatternFilter(const QString& pattern) { QModelIndex i(currentIndex()); _filter_string = pattern; _citationsP->setPatternFilter(_filter_string, &i, _citationsP->currentFormat()); updateViewport(); updateCurrentIndex(i); } void c2bCiterView::updatePatternFilter(const QString& pattern) { _filter_string = pattern; emit patternFilterChanged(false, _filter_string); } void c2bCiterView::setRelatedFilter() { if (_citationsP->count() == 0) return; QModelIndex i(currentIndex()); if (_citationsP->currentFormat() == c2bCiter::K) { const QString k(_citationsP->dataKeyword(i)); _citationsP->setKeywordFilter(k, &i); updateViewport(); updateCurrentIndex(i); } else { const QString f(_citationsP->dataFile(i)); if (f.isEmpty()) emit statusMessage(tr("No File contents in this reference.")); else { _citationsP->setRelatedFilter(f, &i); updateViewport(); updateCurrentIndex(i); } } } void c2bCiterView::toggleSelectedFilter() { QModelIndex i(currentIndex()); if (_citationsP->currentFilter() == c2bCiter::Selected) _citationsP->restoreLastNonSelectedState(&i); else _citationsP->setSelectedFilter(&i); updateViewport(); updateCurrentIndex(i); } void c2bCiterView::toggleKeywordView() { if (_citationsP->count() == 0) return; QModelIndex i(currentIndex()); if (_citationsP->currentFormat() == c2bCiter::K) { _citationsP->restoreLastNonKeywordState(&i); updateViewport(); updateCurrentIndex(i); } else { const QString f(_citationsP->dataFile(i)); if (f.isEmpty()) emit statusMessage(tr("No File contents in this reference.")); else { _citationsP->setDocumentFilter(f, &i); updateViewport(); updateCurrentIndex(i); } } } void c2bCiterView::toggleGlossaryView() { QModelIndex i(currentIndex()); if (_citationsP->currentFormat() == c2bCiter::K && (_citationsP->currentFilter() == c2bCiter::None || _citationsP->currentFilter() == c2bCiter::Pattern)) _citationsP->restoreLastNonKeywordState(&i); else _citationsP->setGlossaryView(&i); updateViewport(); updateCurrentIndex(i); } void c2bCiterView::keywordDocumentSearch() { const c2bCiter::KeywordData kd(_citationsP->keywordData(currentIndex())); if (!kd.valid) return; QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); const QString excerpt(bibSearcher::searchDocumentKeyword(kd.bibtexfn, kd.documentfn, kd.keyword)); QApplication::restoreOverrideCursor(); if (excerpt.isEmpty()) { emit statusMessage(tr("Keyword variation '%1' not available in this reference.").arg(kd.keyword)); return; } c2bCiterExcerptView cev(excerpt, this); cev.exec(); } void c2bCiterView::updateCurrentIndex(const QModelIndex& i) { setCurrentIndex(i); scrollTo(i, PositionAtCenter); } void c2bCiterView::updateFormat(const c2bCiter::Format& format) { if (!_citationsP) return; QModelIndex i(currentIndex()); _citationsP->updateFormat(format, &i); updateViewport(); updateCurrentIndex(i); } void c2bCiterView::updateViewport() { if (!_citationsP) return; const int nc(_citationsP->columnCount()); if (nc < 1) return; const int vp_w(viewport()->size().width()); if (nc == 1) { setColumnWidth(0, vp_w); return; } QList w = _citationsP->sizeHintForColumns(); const int char_w(fontMetrics().width(QLatin1Char('N'))); for (int i = 0; i < nc; ++i) w[i] *= char_w; int required_w(w.at(0)); if (required_w >= vp_w) { setColumnWidth(0, vp_w); for (int i = 1; i < nc; ++i) setColumnWidth(i, 0); return; } for (int i = 1; i < nc; ++i) required_w += w.at(i); if (required_w > vp_w) { int available_w(vp_w - w.at(0)); int div[] = {0, 0, 0, 0}; while (available_w > 0) for (int i = 1; i < nc; ++i) if (div[i] < w.at(i)) { div[i] += 1; --available_w; } for (int i = 1; i < nc; ++i) w[i] = div[i]; } else w[nc-1] += vp_w - required_w; for (int i = 0; i < nc; ++i) setColumnWidth(i, w.at(i)); } void c2bCiterView::keyPressEvent(QKeyEvent* qevent) { if (_filter_mode) { switch (qevent->key()) { case Qt::Key_Enter: case Qt::Key_Return: case Qt::Key_Down: case Qt::Key_Escape: case Qt::Key_Up: case Qt::Key_Tab: _filter_mode = false; emit patternFilterChanged(_filter_mode, _filter_string); qevent->accept(); return; } switch (qevent->key()) { case Qt::Key_Backspace: _filter_string.chop(1); break; default: _filter_string += c2bUtils::toAscii(qevent->text(), c2bUtils::Collation); } emit patternFilterChanged(_filter_mode, _filter_string); setPatternFilter(_filter_string); qevent->ignore(); return; } if (qevent->modifiers() & Qt::ShiftModifier) { if (!qevent->text().isEmpty()) QTableView::keyboardSearch(qevent->text()); qevent->accept(); return; } switch (qevent->key()) { // Formats case Qt::Key_A: updateFormat(c2bCiter::AJYT); qevent->accept(); return; case Qt::Key_I: updateFormat(c2bCiter::IT); qevent->accept(); return; case Qt::Key_J: updateFormat(c2bCiter::JYA); qevent->accept(); return; case Qt::Key_T: updateFormat(c2bCiter::T); qevent->accept(); return; case Qt::Key_Y: updateFormat(c2bCiter::YAJT); qevent->accept(); return; // Filters case Qt::Key_Delete: _citationsP->clearSelection(); qevent->accept(); return; case Qt::Key_D: clearCurrentFilter(); qevent->accept(); return; case Qt::Key_F: _filter_mode = true; emit patternFilterChanged(_filter_mode, _filter_string); qevent->accept(); return; case Qt::Key_G: toggleGlossaryView(); qevent->accept(); return; case Qt::Key_K: toggleKeywordView(); qevent->accept(); return; case Qt::Key_R: setRelatedFilter(); qevent->accept(); return; case Qt::Key_S: toggleSelectedFilter(); qevent->accept(); return; // Actions case Qt::Key_Left: emit showPreviousState(); qevent->accept(); return; case Qt::Key_Right: emit showNextState(); qevent->accept(); return; case Qt::Key_C: emit citeReferences(); qevent->accept(); return; case Qt::Key_E: emit editReference(); qevent->accept(); return; case Qt::Key_O: emit openFile(); qevent->accept(); return; case Qt::Key_U: emit openUrl(); qevent->accept(); return; case Qt::Key_V: keywordDocumentSearch(); qevent->accept(); return; case Qt::Key_W: emit openAnnote(); qevent->accept(); return; case Qt::Key_Escape: emit hideCiter(); qevent->accept(); return; // Navigation case Qt::Key_Tab: { QKeyEvent ke(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier); QTableView::keyPressEvent(&ke); qevent->accept(); return; } case Qt::Key_Backspace: { QKeyEvent ke(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier); QTableView::keyPressEvent(&ke); qevent->accept(); return; } case Qt::Key_Home: { QKeyEvent ke(QEvent::KeyPress, Qt::Key_Home, Qt::ControlModifier); QTableView::keyPressEvent(&ke); qevent->accept(); return; } case Qt::Key_End: { QKeyEvent ke(QEvent::KeyPress, Qt::Key_End, Qt::ControlModifier); QTableView::keyPressEvent(&ke); qevent->accept(); return; } case Qt::Key_Space: { QKeyEvent ke(QEvent::KeyPress, Qt::Key_PageDown, Qt::NoModifier); QTableView::keyPressEvent(&ke); qevent->accept(); return; } case Qt::Key_Enter: case Qt::Key_Return: { QTableView::keyPressEvent(qevent); QKeyEvent ke(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier); QTableView::keyPressEvent(&ke); qevent->accept(); return; } default: QTableView::keyPressEvent(qevent); qevent->ignore(); } } void c2bCiterView::resizeEvent(QResizeEvent* qevent) { updateViewport(); QTableView::resizeEvent(qevent); } void c2bCiterView::keyboardSearch(const QString& /* search */) {} cb2bib-1.9.7/src/PaxHeaders.3194/c2bLineEdit.cpp0000644000000000000000000000013213124510216015702 xustar0030 mtime=1498583182.763257013 30 atime=1498583183.007254748 30 ctime=1498583182.763257013 cb2bib-1.9.7/src/c2bLineEdit.cpp0000644000175000001440000000204413124510216017274 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bLineEdit.h" #include #include #include c2bLineEdit::c2bLineEdit(QWidget* parentw) : QLineEdit(parentw) {} c2bLineEdit::~c2bLineEdit() {} void c2bLineEdit::contextMenuEvent(QContextMenuEvent* e) { QMenu* menu = QLineEdit::createStandardContextMenu(); QList acts = menu->actions(); QAction* act; act = new QAction("Clear", menu); act->setEnabled(!text().isEmpty()); connect(act, SIGNAL(triggered()), this, SLOT(clear())); menu->insertAction(acts.at(7), act); acts = actions(); for (int i = 0; i < acts.count(); ++i) menu->addAction(acts.at(i)); menu->exec(e->globalPos()); delete menu; } cb2bib-1.9.7/src/PaxHeaders.3194/c2bConsole.h0000644000000000000000000000013213124510216015254 xustar0030 mtime=1498583182.831256381 30 atime=1498583183.007254748 30 ctime=1498583182.835256344 cb2bib-1.9.7/src/c2bConsole.h0000644000175000001440000000142313124510216016646 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCONSOLE_H #define C2BCONSOLE_H #include /** Interface for console functionality */ class c2bConsole : public QObject { Q_OBJECT public: explicit c2bConsole(QObject* parento = 0); ~c2bConsole(); void load(); private: int cl_cb2bib_tests(); int cl_doc2bib(); int cl_html_annote(); int cl_index(); int cl_txt2bib(); private slots: void _process(); }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/c2bConfigureFR.h0000644000000000000000000000013213124510216016023 xustar0030 mtime=1498583182.831256381 30 atime=1498583183.007254748 30 ctime=1498583182.831256381 cb2bib-1.9.7/src/c2bConfigureFR.h0000644000175000001440000000141313124510216017414 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCONFIGUREFR_H #define C2BCONFIGUREFR_H #include "ui_c2bConfigureFR.h" #include class QTreeWidgetItem; class c2bConfigureFR : public QDialog { Q_OBJECT public: c2bConfigureFR(QTreeWidgetItem* item, QWidget* parentw = 0); ~c2bConfigureFR(); private: QTreeWidgetItem* itemFindReplace; Ui::c2bConfigureFR ui; protected slots: void accept(); void reject(); }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/c2bConsole.cpp0000644000000000000000000000013213124510216015607 xustar0030 mtime=1498583182.747257161 30 atime=1498583183.007254748 30 ctime=1498583182.751257124 cb2bib-1.9.7/src/c2bConsole.cpp0000644000175000001440000000522213124510216017202 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bConsole.h" #include "c2bSettings.h" #include "c2bTests.h" #include "c2bNetworkQuery.h" #include #include #include #include #include #include #include c2bConsole::c2bConsole(QObject* parento) : QObject(parento) {} c2bConsole::~c2bConsole() {} void c2bConsole::load() { // Send _process to application cue QTimer::singleShot(0, this, SLOT(_process())); } void c2bConsole::_process() { int code(0); if (c2bSettingsP->cl_html_annote) code = cl_html_annote(); else if (c2bSettingsP->cl_doc2bib) code = cl_doc2bib(); else if (c2bSettingsP->cl_txt2bib) code = cl_txt2bib(); else if (c2bSettingsP->cl_index) code = cl_index(); else if (c2bSettingsP->cl_cb2bib_tests) code = cl_cb2bib_tests(); QCoreApplication::exit(code); } int c2bConsole::cl_html_annote() { if (QFileInfo(c2bSettingsP->cl_annote_filename).exists()) { const QString tex(c2bUtils::fileToString(c2bSettingsP->cl_annote_filename)); const QString htmlf(c2bSettingsP->cl_annote_filename + ".html"); texToHtml t2h; t2h.toHtml(tex, htmlf); return 0; } else { c2bUtils::warn(QObject::tr("Error: Could not open %1 file for reading").arg(c2bSettingsP->cl_annote_filename)); return 1; } } int c2bConsole::cl_doc2bib() { bibParser bp; metadataParser mp(&bp); c2bNetworkQuery nq(&bp); // needs c2bUtils::fromHtmlString bibExtractor be(&bp, &mp, &nq); const int c(be.extract(c2bSettingsP->cl_extract_input_filenames, c2bSettingsP->cl_extract_output_filename, bibExtractor::Document)); return c; } int c2bConsole::cl_txt2bib() { bibParser bp; metadataParser mp(&bp); c2bNetworkQuery nq(&bp); bibExtractor be(&bp, &mp, &nq); const int c(be.extract(c2bSettingsP->cl_extract_input_filenames, c2bSettingsP->cl_extract_output_filename, bibExtractor::PlainText)); return c; } int c2bConsole::cl_index() { bibParser bp; collectionIndex ci(&bp); const int c(ci.index(c2bSettingsP->cl_index_dirname)); return c; } int c2bConsole::cl_cb2bib_tests() { c2bTests* t = new c2bTests(); const int passed(t->allTests()); delete t; return passed; } cb2bib-1.9.7/src/PaxHeaders.3194/c2bConfigure.h0000644000000000000000000000013213124510216015573 xustar0030 mtime=1498583182.831256381 30 atime=1498583183.007254748 30 ctime=1498583182.831256381 cb2bib-1.9.7/src/c2bConfigure.h0000644000175000001440000000370313124510216017170 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCONFIGURE_H #define C2BCONFIGURE_H #include "c2bColors.h" #include "ui_c2bConfigure.h" #include #include class c2bSettings; class c2bConfigure : public QDialog { Q_OBJECT public: explicit c2bConfigure(QWidget* parentw = 0); ~c2bConfigure(); void setPage(int index); protected slots: void FindReplaceDialog_Delete(); void FindReplaceDialog_Edit(); void FindReplaceDialog_New(); void accept(); void apply(); void changeContextColor(QTreeWidgetItem* item); void changePage(QListWidgetItem* current, QListWidgetItem* previous); void comboFamilyChanged(const QString& family); void comboSizeChanged(const QString& pt); void getAnnoteCssFile(); void getBibSearcherPdf2TextBin(); void getBrowserCssFile(); void getCacheDirectory(); void getExifToolBin(); void getFmClientCopyBin(); void getFmClientMoveBin(); void getJournalFile(); void getMathJaxHeaderFile(); void getNetworkFile(); void getPdfDirectory(); void getPdfImportPdf2TextBin(); void getPosLexiconFile(); void getPostprocessBibTeXBin(); void getPreparserBin(); void getRegularExpressionFile(); void help(); void showMessage(const QString& ms); void updateFindReplaceInputButtons(); private: QFont c2bMonoFont; QFont selectedFont(QFontComboBox* fc, QComboBox* sc) const; Ui::c2bConfigure ui; bool event(QEvent* qevent); c2bColors colors; c2bSettings* settings; void fontSelection(const QFont& f, QFontComboBox* fc, QComboBox* sc); void populateFontCombos(); }; #endif cb2bib-1.9.7/src/PaxHeaders.3194/cb2Bib.cpp0000644000000000000000000000013213124510216014701 xustar0030 mtime=1498583182.795256716 30 atime=1498583183.007254748 30 ctime=1498583182.795256716 cb2bib-1.9.7/src/cb2Bib.cpp0000644000175000001440000031266713124510216016312 0ustar00constansusers00000000000000/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "cb2Bib.h" #include "c2b.h" #include "c2bBibMenu.h" #include "c2bBibParser.h" #include "c2bCiterWidget.h" #include "c2bClipEdit.h" #include "c2bClipboard.h" #include "c2bEditor.h" #include "c2bFileDialog.h" #include "c2bNetworkQuery.h" #include "c2bPdfImport.h" #include "c2bPostprocess.h" #include "c2bSaveRegExp.h" #include "c2bSearchInFiles.h" #include "c2bSettings.h" #include "c2bTextBrowser.h" #include "c2bUtils.h" #include #include #include /** \page overview Overview The cb2Bib is a free, open source, and multiplatform application for rapidly extracting unformatted, or unstandardized bibliographic references from email alerts, journal Web pages, and PDF files. The cb2Bib facilitates the capture of single references from unformatted and non standard sources. Output references are written in BibTeX. Article files can be easily linked and renamed by dragging them onto the cb2Bib window. Additionally, it permits editing and browsing BibTeX files, citing references, searching references and the full contents of the referenced documents, inserting bibliographic metadata to documents, and writing short notes that interrelate several references. See \ref relnotes190. Current version: cb2Bib GET_VERSION. (See \ref changelog for a detailed list of changes and acknowledgments, and \ref relnotes for additional notes and information.)

         

        \section contents Contents: - \ref descrip - \ref usage - \ref detail - \ref requirements - \ref credits

         

        \section descrip Description The cb2Bib reads the clipboard text contents and process it against a set of predefined patterns. If this automatic detection is successful, cb2Bib formats the clipboard data according to the structured BibTeX reference syntax. Otherwise, if no predefined format pattern is found or if detection proves to be difficult, manual data extraction is greatly simplified by cb2Bib. In most cases, such manual data extraction will provide with a new, personalized pattern to be included within the predefined pattern set for future automatic extractions. Once the bibliographic reference is correctly extracted, it is added to a specified BibTeX database file. Optionally, document files are renamed to a DocumentID filename and moved to a desired directory as a personal article library, and their metadata is updated with the bibliographic reference. See \ref metadata section. The cb2Bib facilitates writing short notes related to bibliographic collections. Notes are written using a minimalist markup on a plain text editor, and can latter be converted to HTML. Related references and links become easily accessible on any browser or by the embedded cb2Bib viewer. See \ref relnotes110.

         

        \section usage Using cb2Bib \subsection procedure Procedure - Select the reference to import from the email or web browser \n On Unix machines, cb2Bib automatically detects mouse selections and clipboard changes. On Windows machines, copy or Ctrl-C is necessary to activate cb2Bib automatic processing. - cb2Bib automatic processing \n Once text is selected cb2Bib initiates the automatic reference extraction. It uses the predefined patterns from file regexp.txt to attempt automatic extraction. See \ref c2bconf_files section for setting the user predefined pattern matching expression file. After a successful detection bibliographic fields appear on the cb2Bib item line edits. Manual editing is possible at this stage. - cb2Bib manual processing \n If no predefined format pattern is found or if detection proves to be difficult, a manual data extraction must be performed. Select, either using mouse or Shift+arrow keys, the reference fields from the cb2Bib clipboard area. A popup menu will appear after selection is made. Choose the corresponding bibliographic field. See \ref entrytype. If operating with the keyboard, first letter of the field is set as a menu shortcut. Thus, typing 'A' sets selection to 'author', or '+A' to 'add authors'. Selection is postprocessed and added to the cb2Bib item line edit. cb2Bib field tags will show on the cb2Bib clipboard area. Once the manual processing is done, cb2Bib clipboard area will contain the matching pattern. The pattern can be further edited and stored to the regexp.txt file using Insert Regular Expression, Alt+I. See the \ref bibproc and \ref regexpedit sections. - Download reference to cb2Bib \n The cb2Bib has the built-in functionality to interact with publishers "Download reference to Citation Manager" service. Choose BibTeX format, or any other format that you can translate using External Clipboard Preparsing Command. See \ref keyboard, Alt C. Click "Download" from your browser. When asked "Open with..." select cb2Bib. The cb2Bib will be launched if no running instance is found. If already running, it will place the downloaded reference to the clipboard, and it will start processing. Make sure your running instance is aware of clipboard changes. See \ref c2bbuttons. For convenience, the shell script c2bimport, and the desktop config file c2bimport.desktop are also provided. - Adding documents \n PDF and other documents can be added to the BibTeX reference by dragging the file icon and dropping it into the cb2Bib's panel. Optionally, document files, are renamed to a DocumentID filename and moved to a desired directory as a personal article library (See \ref c2bconf_documents section). Linked to a reference documents correspond to the BibTeX tag file. Usual reference manager software will permit to retrieve and visualize these files. Download, copy and/or moving is scheduled and performed once the reference is accepted, e.g., once it is saved by pressing Save Reference button. - Multiple retrieving from PDF files \n Multiple PDF or convertible to text files can be sequentially processed by dragging a set of files into cb2Bib's PDFImport dialog. By starting the processing button, files are sequentially converted to text and send to cb2Bib clipboard panel for reference extraction. See \ref c2bpdfimport for details. - Journal-Volume-Page Queries \n Takes input Journal, Volume, and first page from the corresponding edit lines and attempts to complete the reference. Additionally, queries consider Title, DOI, and an excerpt, which is a simplified clipboard panel contents. See \ref c2bconf_network section, the distribution file netqinf.txt, and \ref relnotes035 for customization and details. - BibTeX Editor \n cb2Bib includes a practical text editor suitable for corrections and additions. cb2Bib capabilities are readily available within the editor. E.g., the reference is first sent to cb2Bib by selecting it, and later retrieved from cb2Bib to the editor using 'right click' + 'Paste Current BibTeX'. Interconversions Unicode <-> LaTeX, long <-> abbreviated journal name, and adding/renaming PDF files are easily available. BibTeX Editor is also accessible through a shell command line. See \ref commandline and \ref c2beditor. \subsection c2bbuttons Buttons Functionality - \b About \n About cb2Bib, bookmarks, and online help - \b Configure \n Configure cb2Bib. See \ref c2bconf section. - Search references \n Opens the cb2Bib's search dialog. The search is performed either on the current BibTeX file, or for all BibTeX files on the current directory. Optionally, the search is extended to reference's files. Hits are displayed on an editor window. See \ref c2bsearch. See also \ref c2bconf_utilities section to configure the external to text converter. - \b PDFImport \n Launches cb2Bib's PDFImport window. Files dragged into PDFImport window are sequentially translated to text and sent to cb2Bib clipboard panel. The cb2Bib automatic and manual capabilities are then easily available to extract and supervise reference extractions. See \ref c2bpdfimport. - \b Exit \n Exits the cb2Bib - Dis/Connect Clipboard \n Toggles automatic cb2Bib and desktop clipboard connection. While the automatic cb2Bib-clipboard connection permits reducing keystrokes, the disconnected mode is needed in cases where multiple mouse selections or copies are required to complete a reference extraction. See also \ref relnotes041 and \ref relnotes021 if you experience problems with this feature. - Network Reference Query \n Starts Network Query. It usually takes input Journal, Volume, and first page from the corresponding edit lines and attempts to complete the reference. See \ref c2bconf_network network section to customize querying. See the distribution file netqinf.txt and also \ref relnotes035 for the details. - View BibTeX Reference \n View current reference as will be output to the BibTeX file. Eventual manual changes should be done on the item line edit. - Save Reference \n Inserts the current bibliographic reference to the output BibTeX file. This action decides whether or not a reference is accepted. Scheduled actions such as PDF downloading, copying or renaming will be performed at this time. - Open BibTeX File \n Opens the current BibTeX output file. Right click within the BibTeX Editor window for its particular functionality. See also \ref c2beditor. \subsection keyboard Additional, Keyboard Functionality Most keyboard shortcuts are customizable. See \ref c2bconf_shortcuts. In the following, default shortcuts are used to describe functionality. - Alt A \n Starts cb2Bib Annote. Specify the note's filename in the dialog. A new note is created if the file name does not exist. The cb2Bib Annote is opened as a separate program. Exiting cb2Bib will not exit the note's viewer. On the viewer, pressing key E launches the default text editor. The viewer will track the editor, and will update the note's display each time the editor saves it. The viewer's functionality is disabled if the cb2Bib was not compiled and linked against WebKit. See \ref commandline to use Annote in command line mode. - Alt B \n Edits the Bookmarks and Network Query Info file netqinf.txt. - Alt C \n Preparses cb2Bib's clipboard through a user specified external script or tool. Preparsing is necessary to catch formatted references that can not be easily extracted using recognition patterns, or that are written in ambiguous formats. Many available scripts or specific user-written tools can be incorporated to cb2Bib through this external preparsing capability. In addition, simple, one-line scripts can be used within PDFImport to provide, for instance, the journal name when missing from the PDF first page. The cb2Bib distribution contains the sample scripts isi2bib and ris2bib that convert ISI and RIS formatted strings to BibTeX. See \ref c2bconf_clipboard for details. - Alt D \n Deletes temporary BibTeX output file. This permits using cb2Bib output files as temporary media to transfer references to a preferred reference manager and preferred format. Caution: This feature is not intended for the users who actually store their references in one or several BibTeX files. Remember to import references prior to delete cb2Bib output file. - Alt E \n Edits the regular expression file. It permits an easy access and modification of stored extraction patterns. New patterns are conveniently added to to the regular expression file by using the RegExp Editor button functionality. - Alt F \n Launches a file dialog for selecting the source file name for the BibTeX entry file. Selected files are displayed either, as the actual source filename, or, as the target filename, depending on the file copy/rename/move settings. See \ref c2bconf_documents. Alternatively to Alt F, documents can be easily linked to a reference by dragging the document file and dropping it to the cb2Bib panel. - Alt I \n Edits and optionally inserts the current regular expression pattern. See the \ref bibproc and \ref regexpedit sections. - Alt J \n Edits the Journal Abbreviations file. - Alt O \n Opens the currently linked document for browsing. Documents can be easily linked to a reference by dragging the document file and dropping it to the cb2Bib panel, or with Alt F. Linked documents correspond to the BibTeX tag file. - Alt P \n Postprocess BibTeX output file. It launches a user specified script or program to postprocess the current BibTeX file. The cb2Bib distribution contains two sample scripts. One, bib2pdf is a shell script for running latex and bibtex; this permits to check the BibTeX file for possible errors, and to easily produce a suitable output for printing. The other one, bib2end.bat is a batch script for running bib2xml and xml2end, which converts references into Endnote format. See \ref c2bconf_bibtex for details. - Alt R \n Restarts the cb2Bib automatic engine. Takes input data not from the system clipboard but from the cb2Bib clipboard panel. This permits editting the input stream from poorly translated PDF captions, correcting for author superscripts, or helps in debugging regular expressions. - Alt W \n Writes current reference to the source document file. This option is intended for writing and updating bibliographic metadata to document files without needing to use BibTeX files. Only local and writable files are considered. - Alt X \n Check Repeated looks for existing references in the BibTeX directory similar to the current one. The search is done for exact cite ID, and for title and author field values, or, if empty, for booktitle and editor,using the \htmlonly approximate string \endhtmlonly search pattern. See also \ref c2bconf_bibtex. - F4 \n Toggles between Main and Other Fields reference edit tabs. - Esc \n Quits cb2Bib popup menu. The cb2Bib menu pops up each time a selection in made in the clipboard panel. This saves keystrokes in a normal bibliographic extraction. Press Esc or Right Click mouse button if you need to gain access to the editor cut/copy/paste functionality instead.

         

        \section detail Advanced features Advanced features, and processing and extraction details are described in the following sections: - \ref faq_automatic_extraction - \ref bibproc - \ref authorproc - \ref journalproc - \ref heuristicguess - \ref regexpedit Configuration information is described in the following sections: - \ref c2bconf - \ref idplaceholders Utilities and modules are described in the following sections: - \ref c2bsearch - \ref c2beditor - \ref c2bpdfimport - \ref commandline - \ref metadata - \htmlonly The cb2Bib Annote \endhtmlonly - \ref c2bciter

         

        \section requirements Requirements \subsection requirements_comp Compilation To compile cb2Bib, the following libraries must be present and accessible: - Qt 5.3.0 or higher from \htmlonly Qt Project \endhtmlonly for cb2Bib prereleases 1.9. - Qt 4.4.0 or higher from \htmlonly Qt Project. \endhtmlonly On a Linux platform with Qt preinstalled, make sure that the devel packages and Qt tools are also present. - WebKit library (optional) to compile cb2Bib Annote viewer. It is already included in Qt > 4.4.0 library. No special action/flag is needed during compilation. - LZO 2.03 library and headers available at \htmlonly http://www.oberhumer.com/opensource/lzo. \endhtmlonly If LZO2 were unavailable on a particular platform, type configure --disable-lzo or, equivalently, qmake -config disable_lzo before compiling. - X11 header files if compiling on Unix platforms. Concretely, headers X11/Xlib.h and X11/Xatom.h are needed. - The header files fcntl.h and unistd.h from glibc-devel package are also required. Otherwise compilation will fail with referencelist.cpp:227: `::close' undeclared. \subsection requirements_run Deployment Although not needed for running cb2Bib, the following tools extend cb2Bib applicability: - MathJax, available at \htmlonly https://www.mathjax.org, \endhtmlonly for displaying mathematical notation. Simply, download and unzip it in a desired directory. See \ref c2bconf_annote. - ExifTool, version 7.31 or later, available at \htmlonly http://www.sno.phy.queensu.ca/~phil/exiftool. \endhtmlonly - pdftotext, found packaged as xpdf, and downloadable from \htmlonly http://www.foolabs.com/xpdf. \endhtmlonly - The bib2xml and xml2end \htmlonly BibUtils, \endhtmlonly to test the postprocess script bib2end.bat on Windows platforms. - ... and LaTeX and friends, to check for BibTeX file correctness and to get a nice printing through the shell script bib2pdf.

         

        \section credits Credits and License The cb2Bib icons are taken from the Oxygen, Crystal SVG, and Noia icon sets, to be found at the \htmlonly KDE Desktop Environment. \endhtmlonly Several people has contributed with suggestions, bug reports or patches. For a detailed list of acknowledgments see the \ref changelog. The cb2Bib program is licensed under the terms of the \htmlonly GNU General Public License \endhtmlonly version 3.

         

        The cb2Bib, Pere Constans, Copyright © 2004-2017.\n First released, version 0.1.0 on 2004-06-29. \n GET_UPDATEDON */ /** \page relnotes Release Notes \section relnotes190 Release Note cb2Bib 1.9.0 The cb2Bib sources have been ported to Qt5. To highlight this major update in library requirements the version number is set to 1.9.0. Later, once stabilized and new functionality related to Qt5 enhancements are applied, version number will be set to 2. At this point the cb2Bib has exactly the same functionality as its preceding version 1.5.0. To build the program, however, only qmake and its related config procedure are available. The cmake scripts have not yet been ported. Qt5 brings important enhancements related to regular expressions and string processing. Some careful updates to the cb2Bib sources are needed to fully benefit from them. They will implemented through the 1.9.x series. We expect by then a performance boost on full text, regular expression based searches.

         

        */ /** \page relnotes Release Notes \section relnotes150 Release Note cb2Bib 1.5.0 Included in version 1.5.0 sources there is a patch for XPDF 3.0.4, the default tool to convert PDF documents to plain text. The modified code separates superscripts to avoid words being joined to reference numbers and author names joined to affiliations' glyphs. Interested users will need to download the package, apply the patch, and compile it. Additionally, this version improves converted text postprocessing. This step normalizes character codes, reverts ligatures, restores when possible orphan diacritics and broken words, and undoes text hyphenation. Conversion to text and postprocessing is important for reference extraction, and document indexing and searching. It is therefore recommended to delete cached document-to-text data to benefit from the present improvements. The cb2Bib stores cached texts in *c2b files in an user specified directory. After that, by performing a search or initiating indexing an updated cache will be created.

         

        */ /** \page relnotes Release Notes \section relnotes147 Release Note cb2Bib 1.4.7 Approximate and context searches effectively locate our references of interest. As collections grow in size, and low performance devices, netbooks and tablets, start being used, complete document searches become demanding. Besides, it is often not clear what to query for, and then a glossary of terms provides guidance. Often too, interest lies on subsetting documents by being similar to a given one. Version 1.4.7 adds a pragmatic term or keyword extraction from the document contents. Accepted keywords are set as the substrings appearing at least twice in one document, appearing at least in three documents, and conforming to predefined part-of-speech (POS) sequences. Keyword extraction is performed by either clicking on Index Documents at the c2bciter desktop tray menu, or, by typing cb2bib --index [bibdirname] on a shell. During extraction, the Part Of Speech (POS) Lexicon distribution file must be available and readable. On termination, indexing files are saved on the Search In Files Cache Directory. Simply copying this directory will synchronize keyword indexing to a second computer. After refreshing c2bciter module, pressing key G displays the glossary of terms. On a reference, pressing K displays its list of keywords. Pressing R on a keyword lists the references related to that keyword. Pressing R on a reference lists similarly related references. Similarity is assessed based on keyword occurrences. Left and Right keys provide previous and next navigation. Pressing V on either a reference keyword, or a keyword reference, visualizes the keyword excerpts from the reference's document. To close excerpt dialog press Esc or Left keys. See also \ref c2bciter, \ref c2bconf_files, and \ref commandline.

         

        */ /** \page relnotes Release Notes \section relnotes140 Release Note cb2Bib 1.4.0 The c2bciter module was introduced in version 1.3.0. Its name, as it was described, states its purpose of being "aimed to ease inserting citation IDs into documents". In fact, it does have such functionality. And, it has also another, equally important one: it provides a very fast way to retrieve a given work from our personal collections. Retrieving is accomplished through pre-sorted views of the references and filtering. Both, views and filtering, scale on the (tens of) thousands references. Usually, we recall a work from its publication year, a few words from its title, or (some of the letters of) one of its authors names. Often, what we remember is when a reference was included into our collection. Therefore, having such a chronological view was desirable. The implementation of this sorted-by-inclusion-date view was not done during the 1.3.x series, but postponed to version 1.4.0; somehow, to indicate that some sort of 'proprietary' BibTeX tag might be required to specify inclusion timestamps. I have been reluctant through the cb2Bib's life span to introduce 'cb2Bib-only' tags in the BibTeX outputs. I believe that there is little gain, and it costs, possibly, breaking interoperability. In the end, the choice was to not write any 'timestamp' tag in references. Instead, c2bciter checks for the last modified date of the linked documents to build an approximated chronological view. The advantage is that all, not just 'version 1.4.0 or later', references are sorted. Furthermore, if a reference is later corrected, and the document metadata is updated too, the modification date is reflected in the view. The obvious inconvenience is that no such sorting can be done for references without an attached document. See also \ref c2bciter.

         

        */ /** \page relnotes Release Notes \section relnotes130 Release Note cb2Bib 1.3.0 When version 0.2.7 came up, it was mentioned in \ref relnotes027, that the cb2Bib 'doesn't have the means to automatically discern an author name from a department or street name'. I forgot mentioning, that I did not expect the cb2Bib would have had such a feature. Since the last \ref relnotes110, the cb2Bib internals had changed significantly. Some changes, such heuristic recognition for interlaced authors and affiliations, get easily noticed. Other changes, however, do not, and need additional explanation. From version 1.2.3, the switches --txt2bib and --doc2bib set the cb2Bib to work on console mode. The non-exact nature of the involved extractions makes logging necessary. On Windows, graphic or console modes must be decided not at run time, but when the application is built. So far, logging and globing were missing. This release adds the convenience wrapper c2bconsole. Typing c2bconsole --txt2bib i*.txt out.bib, for instance, will work as it does in the other platforms. Lists of references are now sorted case and diacritic insensitive. For some languages such a choice is not the expected one, and some operating systems offer local-aware collation. Due to usual inconsistencies and inaccuracies in references, this decision was taken to group together 'Density Matrix' with 'Density-matrix', and \htmlonly Møller \endhtmlonly with Moller, which, in a personal collection, most probably, refer to the same concept and to the same person. Additionally, document to text converted strings are now clean from extraneous, non-textual symbols. Therefore, recreating cache files is recommended. Finally, this release introduces a new module, named c2bciter, and aimed to ease inserting citation IDs into documents. The module should ideally stay idle at the system tray, and be recalled as needed by pressing a global, desktop shortcut. This functionality, while desirable, and usual in dictionaries, is platform and desktop dependent. On KDE there are currently known issues when switching among virtual desktops. See also \ref c2bciter, and \ref commandline.

         

        */ /** \page relnotes Release Notes \section relnotes110 Release Note cb2Bib 1.1.0 A frequent request from cb2Bib users has been to expand the command line functionality. So far few progress has been seen in this regard. First, the addition of in-document searches and reading/inserting metadata were priorities. Second, the cb2Bib is not the tool to interconvert among bibliographic formats. And third, the cb2Bib is designed to involve the user in the search process, in the archiving and validation of the discovered works and references. For the latter reason, and for not knowing a priori how would such a tool be designed, the cb2Bib internals had been interlaced to its graphical interface. At the time of version 0.7.0, when the graphical libraries changed, and a major refactoring was required, the code started moving toward a better modularization and structure. The current release pushes code organization further. As a result, it adds two new command line switches: --html-annote and --view-annote. The new cb2Bib module is named after the BibTeX key 'annote'. Annote is not for a 'one reference annotation' though. Instead, Annote is for short notes that interrelate several references. Annote takes a plain text note, with minimal or no markup, inserts the bibliographic citations, and converts it to a HTML page with links to the referenced documents. From within the cb2Bib, to write your notes, type Alt+A, enter a filename, either new or existing, and once in Annote, type E to launch your default text editor. For help, type F1. Each time you save the document the viewer will be updated. To display mathematical notations, install \htmlonly jsMath \endhtmlonly locally. And, remember, code refactoring introduces bugs. See also an annote's \htmlonly screenshot, The cb2Bib Annote, \endhtmlonly and \ref commandline.

         

        */ /** \page relnotes Release Notes \section relnotes100 Release Note cb2Bib 1.0.0 Approximately four years ago the first cb2Bib was released. It included the possibility of easily linking a document to its bibliographic reference, in a handy way, by dragging the file to the main (at that time, single) panel. Now, in version 1.0.0, when a file is dropped, the cb2Bib scans the document for metadata packets, and checks, in a rather experimental way, whether or not they contain relevant bibliographic information. Publishers metadata might or might not be accurate. Some, for instance, assign the DOI to the key Title. The cb2Bib extracts possibly relevant key-value pairs and adds them to clipboard panel. Whenever key-value pairs are found accurate, just pressing Alt+G imports them to the line edits. If keys with the prefix bibtex are found, then, most probable the data was written by JabRef or the cb2Bib itself, and then, the values are automatically imported. The preparsed metadata that is added to the clipboard panel begins with [Bibliographic Metadata and ends with /Bibliographic Metadata]. Therefore, if you are using PDFImport together with a set of regular expressions, such that they contain the begin (^) or end ($) anchors, you can safely replace them by the above tags. In this manner, existing regular expressions remain useful with this minor change. And, with the advantage that, if recognition fails for a given document, metadata might give the hardest fields to extract from a PDF article, which are author and title. See also \ref metadata.

         

        */ /** \page relnotes Release Notes \section relnotes084 Release Note cb2Bib 0.8.4 The previous cb2Bib release added the command line option --conf [full_path]cb2bib.conf to specify the settings location. This feature was intended, mainly, as a clean way to run the program on a host computer from a removable drive. The work done focused on arranging the command line and settings related code. It was left for a later release to solve some requirements regarding the managing of file pathnames and temporary files. This release addresses these two points. Now, when the cb2Bib is launched as cb2bib --conf --without a configuration filename-- it treats filenames as being relative to the cb2Bib actual location. Temporary files, if needed, will be placed at this location as well. Therefore, no data is being written on the host, and the cb2Bib works independently of the actual address that the host assigns to the removable drive. The Windows' un/installer cleans/sets configuration data on the registry. Being aware of this particular, it might be better not to install the program directly to the USB drive. Just copy the cb2Bib base directory from a home/own computer to the removable drive, and then run it on the host computer as cb2bib --conf.

         

        */ /** \page relnotes Release Notes \section relnotes083 Release Note cb2Bib 0.8.3 The cb2Bib accepts several arguments on its command line to access specific functionality. So far, the command cb2bib tmp_ref permits importing references from the browser, whenever a download to reference manager choice is available. In addition, the command cb2bib --bibedit ref.bib directly launches the BibTeX editor for file browsing and editing. This release adds the command line option --conf [full_path]cb2bib.conf to specifically set a file where all internal settings are being retrieved and stored. This has two interesting applications. On one hand, it easily permits switching from several sets of extraction rules, since the files abbreviations.txt, regexps.txt, and netqinf.txt are all stored in the cb2Bib's settings. And, on the other hand, it allows installing the program on a USB flash drive, and cleanly running it on any (e. g., library) computer. Settings can be stored and kept on the external device, and therefore, no data will be written on the registry or settings directory of the host computer. So far, however, this feature should be regarded as experimental. The Qt library to which the cb2Bib is linked does read/write access to system settings in a few places (concretely, in file and color dialogs). On Unix and Mac OS systems this access can be modified by setting the environment variable DAG_CONFIG_HOME. No such workaround is presently available in Windows. See \ref commandline for a detailed syntax description.

         

        */ /** \page relnotes Release Notes \section relnotes081 Release Note cb2Bib 0.8.1 Several changes in this release affect installation and deployment. First, the cb2Bib internals for settings management has been reorganized. Version 0.8.1 will not read previous settings, as user colors, file locations, etc. On Unix, settings are stored at ~/.config/MOLspaces/cb2Bib.conf. This file can be removed, or renamed. On Windows, it is recommended to uninstall previous versions before upgrading. Second, cb2Bib tags are not shown by default. Instead, it is shown plain, raw clipboard data, as it is easier to identify with the original source. To write a regular expression, right click, on the menu, check 'View Tagged Clipboard Data', and perform the extraction from this view. And finally, the cb2Bib adds the tag <> for network queries. It takes a simplified version of the clipboard contents and sends it to, e.g. Google Scholar. From there, one can easily import BibTeX references related to that contents. Therefore one should unchecked in most cases the 'Perform Network Queries after automatic reference extractions' box.

         

        */ /** \page relnotes Release Notes \section relnotes072 Release Note cb2Bib 0.7.2 The cb2Bib reads the clipboard contents, processes it, and places it to the main cb2Bib's panel. If clipboard contents can be recognized as a reference, it writes the corresponding BibTeX entry. If not, the user can interact from the cb2Bib panel and complete or correct the reference. Additionally, this process permits to write down a regular expression matching the reference's pattern. To ease pattern writing, cb2Bib preprocesses the raw input data. This can consider format conversion by external tools and general substitutions, in addition to including some special tags. The resulting preprocessed data is usually less readable. A particularly illustrating case is when input data comes from a PDF article. The cb2Bib now optionally presents input data, as raw, unprocessed data. This preserves the block text format of the source, and thus identifying the relevant bibliographic fields by visual inspection is more straightforward. In this raw mode view panel, interaction works in a similar manner. Except that, no conversions or substitutions are seen there, and that no regular expression tags are written.

         

        */ /** \page relnotes Release Notes \section relnotes070 Release Note cb2Bib 0.7.0 This release moves forward cb2Bib base requirement to Qt 4.2.0. Compilation errors related to rehighlight() library calls, kindly reported by Bongard, Seemann, and Luisser, should not appear anymore. File/URL opening is carried now by this library, in a desktop integrated manner. Additionally, Gnome users will enjoy better integration, as Cleanlooks widget style is available. All known regressions in 0.6.9x series have been fixed. Also, a few minor improvements have been included. In particular, file selection dialogs display navigation history, and BibTeX output file can be conveniently selected from the list of '*.bib' files at the current directory. Such a feature will be specially useful to users that sort references in thematic files located at a given directory.

         

        */ /** \page relnotes Release Notes \section relnotes0691 Release Note cb2Bib 0.6.91 This release fixes a regression in the cb2Bib network capabilities. Network, and hence querying was erratic, both for the internal HTTP routines and for external clients. In addition to this fix, the netqinf.txt has been updated. PubMed is working again. Queries are also extended to include DOI's. A possible applicability will be for indexing a set of PDF articles with PDFImport. If the article contains its DOI number, and 'Perform Network Queries after automatic reference extractions' is checked, chances are that automatic extractions will work smooth.

         

        */ /** \page relnotes Release Notes \section relnotes0690 Release Note cb2Bib 0.6.90 The cb2Bib has been ported from Qt3 to Qt4, a migration in its underlying system library. Qt experienced many changes and improvements in this major release upgrade. Relevant to cb2Bib, these changes will provide a better file management, word completion, faster searches, and better desktop integration. Upgrading to Qt4 it is not a "plug and recompile" game. Thorough refactoring and rewriting was required. The resulting cb2Bib code is cleaner and more suitable to further development. As one might expect, major upgrades introduce new bugs that must be fixed. The cb2Bib 0.6.90 is actually a preview version. It has approximately the same functionality than its predecessor. So, no additions were considered at this point. Its use, bug reporting, and feedback are encouraged. This will help to get sooner a stable cb2Bib 0.7. To compile it, type ./configure as usual. The configure script calls the qmake tool to generate an appropriate Makefile. To make sure the right, Qt4 qmake is invocated, you can setup QTDIR environment variable prior to ./configure. The configure's call statement will then be '$QTDIR/bin/qmake'. E. g., type 'setenv QTDIR /usr' if qmake happens to be at the directory/usr/bin.

         

        */ /** \page relnotes Release Notes \section relnotes060 Release Note cb2Bib 0.6.0 The cb2Bib uses the internal tags <> and <> to ease the creation of regular expressions for reference extraction. New line and tabular codes from the input stream are substituted by these numbered tags. Numbering new lines and tabulars gives an extra safety when writing down a regular expression. E. g., suppose field title is 'anything' between '<> and <>'. We can then easily write 'anything' as '.+' without the risk of overextending the caption to several '\\n' codes. On the other hand, one still can use <> if not interested in a specific numbering. All these internal tags are later removed, once cb2Bib postprocesses the entry fields. The cb2Bib identified so far new lines by checking for '\\n' codes. I was unaware that this was a platform dependent, as well as a not completely accurate way of detecting new lines. McKay Euan reported that <> tags were not appearing as expected in the MacOSX version. I later learn that MacOSX uses '\\r' codes, and that Windows uses '\\r\\n', instead of '\\n' for new line encoding. This release addresses this issue. It is supposed now that the cb2Bib regular expressions will be more transferable among the different platforms. Extraction from plain text sources is expected to be completely platform independent. Extraction from web pages will still remain browser dependent. In fact, each browser adds its peculiar interpretation of a given HTML source. For example, in Wiley webpages we see the sectioning header 'Abstract' in its source and in several browsers, but we see, and get, 'ABSTRACT' if using Konqueror. What we pay for this more uniform approach is, however, a break in compatibility with previous versions of cb2Bib. Unix/Linux users should not expect many differences, though. Only one from the nine regular expressions in the examples needed to be modified, and the two contributed regular expressions work perfectly without any change. Windows users will not see a duplication of <> tags. To update previous expressions it should be enough just shifting the <> numbering. And, of course, any working regular expression that does not uses <> tags will still be working in this new version. Finally, just to mention that I do not have a MacOSX to test any of the cb2Bib releases in this particular platform. I am therefore assuming that these changes will fix the problem at hand. If otherwise, please, let me know. Also, let me know if release 0.6.0 'break' your own expressions. I consider this release a sort of experimental or beta version, and the previous version 0.5.3, will still be available during this testing period.

         

        */ /** \page relnotes Release Notes \section relnotes050 Release Note cb2Bib 0.5.0 Two issues had appeared regarding cb2Bib installation and deployment on MacOSX platforms. First, if you encounter a 'nothing to install'-error during installation on MacOSX 10.4.x using the cb2Bib binary installer available at naranja.umh.es/~atg/, please delete the cb2bib-receipts from /Library/Receipts and then rerun the installer. See also M. Bongard's clarifying note 'MACOSX 10.4.X "NOTHING TO INSTALL"-ERROR' for details. Second, and also extensible to other cb2Bib platform versions, if PDFImport issues the error message 'Failed to call some_format_to_text' tool, make sure such a tool is installed and available. Go to Configure->PDFImport, click at the 'Select External Convert Tool' button, and navigate to set its full path. Since version 0.5.0 the default full path for the MacOSX is already set, and pointing to /usr/local/bin/pdftotext.

         

        */ /** \page relnotes Release Notes \section relnotes041 Release Note cb2Bib 0.4.1 Qt/KDE applications emit notifications whenever they change the clipboard contents. The cb2Bib uses these notifications to automatically start its 'clipboard to BibTeX' processing. Other applications, however, does not notify about them. Since version 0.2.1, see \ref relnotes021, cb2Bib started checking the clipboard periodically. This checking was later disabled as a default, needing a few lines of code to be uncomented to activate it. Without such a checking, the cb2Bib appears unresponsive when selecting/copying from e.g., acroread or Mozilla. This release includes the class clipboardpoll written by L. Lunak for the KDE's Klipper. Checking is performed in a very optimized way. This checking is enabled by default. If you experience problems with this feature, or if the required X11 headers aren't available, consider disabling it by typing ./configure --disable-cbpoll prior to compilation. This will disable checking completely. If the naive, old checking is preferred, uncomment the four usual lines, ./configure --disable-cbpoll, and compile.

         

        */ /** \page relnotes Release Notes \section relnotes035 Release Note cb2Bib 0.3.5 Releases 0.3.3 and 0.3.4 brought querying functionality to cb2Bib. In essence, cb2Bib was rearranged to accommodate copying and opening of network files. Queries were then implemented as user customizable HTML posts to journal databases. In addition, these arrangements permitted defining convenience, dynamic bookmarks that were placed at the cb2Bib's 'About' panel. cb2Bib contains three viewing panels: 'About', 'Clipboard' and 'View BibTeX', being the 'Clipboard' panel the main working area. To keep cb2Bib simple, only two buttons, 'About' and 'View BibTeX', are set to navigate through the panels. The 'About' and 'View BibTeX' buttons are toggle buttons for momentarily displaying their corresponding panels. Guidance was so far provided by enabling/disabling the buttons. After the bookmark introduction, the 'About' panel has greatly increased its usefullness. Button functionality has been slightly redesigned now to avoid as many keystrokes and mouse clicks as possible. The buttons remain switchable, but they no longer disable the other buttons. User is guided by icon changes instead. Hopefully these changes will not be confusing or counterintuitive. Bookmarks and querying functionality are customizable through the netqinf.txt file, which is editable by pressing the Alt+B keys. Supported queries are of the form 'Journal-Volume-First Page'. cb2Bib parses netqinf.txt each time a query is performed. It looks for journal=Full_Name|[code] to obtain the required information for a specific journal. Empty, 'journal=' entries have a meaning of 'any journal'. New in this release, cb2Bib will test all possible queries for a given journal instead of giving up at the first No article found message. The query process stops at the first successfull hit or, otherwise, once netqinf.txt is parsed completely (in an equivalent way as the automatic pattern recognition works). This permits querying multiple -and incomplete- journal databases. Users should order the netqinf.txt file in a way it is more convenient. E.g., put PubMed in front of JACS if desired an automatic extraction. Or JACS in front of PubMed and extract from the journal web page, if author accented characters are wanted. So far, this querying functionality is still tagged as experimental. Either the querying itself or its syntax seem quite successful. However, downloading of PDF files, on windows OS + T1 network, was found to freeze once progress reaches the 30-50%. Any feedback on this issue will be greatly appreciated. Also, information on kfmclient equivalent tools for non KDE desktops would be worth to be included in the cb2Bib documentation.

         

        */ /** \page relnotes Release Notes \section relnotes030 Release Note cb2Bib 0.3.0 cb2Bib considers the whole set of authors as an author-string pattern. This string is later postprocessed, without requirements on the actual number of authors it may contain, or on how the names are written. Once considered author-string patterns, the extraction of bibliographic references by means of regular expressions becomes relatively simple. There are situations, however, where several author-strings are required. The following box shows one of these cases. Authors are grouped according to their affiliations. Selecting from 'F. N. First' to 'F. N. Fifth' would include 'First Affiliation' within the author string. Cleaning up whatever wording 'First Affiliation' may contain is a rather ill-posed problem. Instead, cb2Bib includes an Add Authors option. The way of operation is then to select 'F. N. First, F. N. Second, F. N. Third' and chose Authors and right after, select 'F. N. Fourth and F. N. Fifth' and chose Add Authors. \htmlonly \endhtmlonly At this point in the manual extraction, the user was faced with a red <> tag in the cb2Bib clipboard panel. The <> tag was intended to warn the user about the fact that cb2Bib would not be able to consider the resulting extraction pattern as a valid, general regular expression. Usual regular expressions are built up from an a priori known level of nesting. In these cases, however, the level of nesting is variable. It depends on the number of different affiliations occurring in a particular reference. So far the <> tag has become a true FAQ about cb2Bib and a source of many confusions. There is no real need, however, for such an user warning. The <> has therefore been removed and cb2Bib has taken an step further, to its 0.3.0 version. The cb2Bib 0.3.0 manual extraction works as usual. By clicking Authors the Authors edit line is reseted and selection contents moved there. Alternatively, if Add Authors is clicked, selection contents is added to the author field. On this version, however, both operations are tagged as <> (singular form, as it is the BibTeX keyword for Authors). The generated extraction pattern can now contain any number of <> fields. In automatic mode, cb2Bib now adds all author captions to Authors. In this way, cb2Bib can treat interlaced author-affiliation cases. Obviously, users needing such extractions will have to write particular regular expressions for cases with one set of authors, for two sets, and so on. Eventhough it is not rare a work having a hundred of authors, it would be quite umprobable that they were working on so many different institutions. Therefore, few regular expressions should actually be required in practice. Although not elegant, this breaks what was a cb2Bib limitation and broadens its use when extracting from PDF sources. Remember here to sort these regular expressions in decreasing order, since at present, cb2Bib stops at the first hit. Also, consider Any Pattern to get ride of the actual affiliation contents, as you might not want to extract authors addresses.

         

        */ /** \page relnotes Release Notes \section relnotes027 Release Note cb2Bib 0.2.7 The cb2Bib 0.2.7 release introduces multiple retrieving from PDF files. PDF documents are becoming more and more widely used, not only to transfer and printing articles, but also are substituting the personal paper files and classifiers for the electronic equivalents. cb2Bib is intended to help updating personal databases of papers. It is a tool focused on what is left behind in database retrieving. Cases such as email alerts, or inter colleague references and PDF sharing are example situations. Though in an electronic format, sources are not standardized or not globally used as to permit using habitual import filters in reference managers. cb2Bib is designed to consider a direct user intervention, either by creating its own useful filters or by a simple copy-paste assistance when handtyping. Hopefully someday cb2Bib will be able to take that old directory, with perhaps a few hundreds of papers, to automatically index the references and rename the files by author, in a consistent manner. The required mechanism is already there, in this version. But I guess that this new feature will manifest some present limitations in cb2Bib. For instance, most printed and PDF papers interlace author names and affiliations. cb2Bib doesn't have the means to automatically discern an author name from a department or street name. So far one needs to manually use the 'Add to Authors' feature to deal with these situations. Also, the managing of regular expressions needs developing, specially thinking in the spread variety of design patterns in publications. In summary, this current version is already useful in classifying and extracting the reference of that couple of papers that someone send right before submitting a work. A complete unsupervised extraction is still far away, however.

         

        */ /** \page relnotes Release Notes \section relnotes021 Release Note cb2Bib 0.2.1 The cb2Bib mechanism 'select-and-catch' failed in some cases. Acrobat and Mozilla selections were not always notified to the cb2Bib. Indeed, this 'window manager - application' connection seems to be broken on a KDE 3.3.0 + Qt 3.3.3 system. The cb2Bib 0.2.1 continues to listen to system clipboard change notifications, whenever they are received and whenever cb2Bib is on connected mode. Additionally, the cb2Bib 0.2.1 periodically checks for changes in the system clipboard. Checks are performed every second, approximately. This permits cb2Bib to work as usual, although one could experience 1-2 seconds delays in systems where the automatic notification is broken. If the 'select-and-catch' functionality appears 'sticky', possibly happening while using non KDE applications from where text is selected, check the source file c2bclipboard.cpp, look for 'Setting timer', and set variable interval to 1000. This is the interval of time in ms that cb2Bib will use to check for clipboard changes.

         

        */ cb2Bib::cb2Bib(QWidget* parentw) : QMainWindow(parentw) { _settingsP = c2bSettingsP; ui.setupUi(this); connect(ui.id, SIGNAL(textChanged(const QString&)), this, SLOT(setWindowTitle(const QString&))); // Creating cb2Bib global resources c2b* c2b_resources = new c2b(this, this); connect(c2b_resources, SIGNAL(statusMessage(const QString&)), this, SLOT(showMessage(const QString&))); connect(c2b_resources, SIGNAL(searchInFiles(const QString&, const QString&)), this, SLOT(doSearchInFiles(const QString&, const QString&))); // Actions and shortcuts c2bUtils::addSeparator(this); addAction(ui.checkRepeatedAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.checkRepeatedAction); c2bUtils::addSeparator(this); addAction(ui.clearFieldsAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.clearFieldsAction); addAction(ui.guessFieldsAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.guessFieldsAction); addAction(ui.startEngineAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.startEngineAction); c2bUtils::addSeparator(this); addAction(ui.preparseClipboardAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.preparseClipboardAction); addAction(ui.postprocessBibTeXAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.postprocessBibTeXAction); c2bUtils::addSeparator(this); addAction(ui.editBookmarksAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.editBookmarksAction); addAction(ui.editAbbreviationsAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.editAbbreviationsAction); addAction(ui.editRegExpsAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.editRegExpsAction); c2bUtils::addSeparator(this); addAction(ui.openAnnoteAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.openAnnoteAction); c2bUtils::addSeparator(this); addAction(ui.insertRegExpAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.insertRegExpAction); addAction(ui.viewTaggedClipEditAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.viewTaggedClipEditAction); setAcceptDrops(true); c2bUtils::addSeparator(ui.file); ui.file->addAction(ui.selectFileAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.selectFileAction); ui.file->addAction(ui.openFileDocumentAction); _settingsP->setKeysequence("Shortcuts/cb2Bib/", ui.openFileDocumentAction); ui.openFileDocumentAction->setEnabled(false); QShortcut* sc(new QShortcut(this)); _settingsP->setKeysequence("Shortcuts/cb2Bib/Delete Temporary BibTeX File", sc); connect(sc, SIGNAL(activated()), this, SLOT(deleteTmpBib())); sc = new QShortcut(this); _settingsP->setKeysequence("Shortcuts/cb2Bib/Write Metadata to Document", sc); connect(sc, SIGNAL(activated()), this, SLOT(addMetadata())); sc = new QShortcut(this); _settingsP->setKeysequence("Shortcuts/cb2Bib/Toggle Reference Tabs", sc); connect(sc, SIGNAL(activated()), this, SLOT(toggleReferenceTabs())); sc = new QShortcut(QKeySequence(Qt::Key_F2), this); // Made consistent with c2bCiter and c2bEditor connect(sc, SIGNAL(activated()), this, SLOT(hide())); ClipEdit = new c2bClipEdit(c2bClipEdit::Editor, this); ClipEdit->setObjectName("ClipEdit"); ClipEdit->addActions(actions()); ui.stackedWidget->addWidget(ClipEdit); AboutBrowser = new c2bTextBrowser(this); AboutBrowser->setObjectName("AboutBrowser"); AboutBrowser->addActions(actions()); ui.stackedWidget->addWidget(AboutBrowser); BibBrowser = new c2bClipEdit(c2bClipEdit::Browser, this); BibBrowser->setObjectName("BibBrowser"); BibBrowser->addActions(actions()); ui.stackedWidget->addWidget(BibBrowser); connect(AboutBrowser, SIGNAL(anchorClicked(const QUrl&)), this, SLOT(linkClicked(const QUrl&))); connect(AboutBrowser, SIGNAL(highlighted(const QString&)), this, SLOT(showLink(const QString&))); // Connect Actions connect(ui.checkRepeatedAction, SIGNAL(triggered()), this, SLOT(checkRepeated())); connect(ui.clearFieldsAction, SIGNAL(triggered()), this, SLOT(c2bInit())); connect(ui.editAbbreviationsAction, SIGNAL(triggered()), this, SLOT(abbreviationsEditor())); connect(ui.editBookmarksAction, SIGNAL(triggered()), this, SLOT(bookmarksEditor())); connect(ui.editRegExpsAction, SIGNAL(triggered()), this, SLOT(regExpsEditor())); connect(ui.guessFieldsAction, SIGNAL(triggered()), this, SLOT(guessFields())); connect(ui.insertRegExpAction, SIGNAL(triggered()), this, SLOT(insertRegExp())); connect(ui.openAnnoteAction, SIGNAL(triggered()), this, SLOT(openAnnote())); connect(ui.openFileDocumentAction, SIGNAL(triggered()), this, SLOT(openFileDocument())); connect(ui.postprocessBibTeXAction, SIGNAL(triggered()), this, SLOT(postprocessBibTeX())); connect(ui.preparseClipboardAction, SIGNAL(triggered()), this, SLOT(preparseClipboard())); connect(ui.selectFileAction, SIGNAL(triggered()), this, SLOT(selectFile())); connect(ui.startEngineAction, SIGNAL(triggered()), this, SLOT(restartEngine())); connect(ui.viewTaggedClipEditAction, SIGNAL(triggered(bool)), this, SLOT(setTaggedClipEditMode(bool))); setBibMenu(); _pdfImportP = 0; _searchInFilesP = 0; setTaggedClipEditMode(false); // Set checkRepeated ui.checkRepeatedAction->setVisible(false); _is_check_repeated_done = false; connect(ui.author, SIGNAL(textChanged(const QString&)), this, SLOT(updateCheckRepeatedAction())); connect(ui.booktitle, SIGNAL(textChanged(const QString&)), this, SLOT(updateCheckRepeatedAction())); connect(ui.editor, SIGNAL(textChanged(const QString&)), this, SLOT(updateCheckRepeatedAction())); connect(ui.id, SIGNAL(textChanged(const QString&)), this, SLOT(updateCheckRepeatedAction())); connect(ui.title, SIGNAL(textChanged(const QString&)), this, SLOT(updateCheckRepeatedAction())); // cb2Bib Settings loadSettings(); connect(_settingsP, SIGNAL(newSettings()), this, SLOT(loadSettings())); resize(_settingsP->value("cb2Bib/size", size()).toSize()); ui.bibtexfile->completer()->setCompletionMode(QCompleter::PopupCompletion); updateBibfile(_settingsP->fileName("cb2Bib/BibTeXFile")); // Setting Bibliographic Parser _bpP = c2b::bibParser(); setWidgetMapping(); _modified = false; ui.AddBibB->setEnabled(_modified); // Setting cb2bib network queries _netQP = new c2bNetworkQuery(_bpP, c2b::net(), this); connect(_netQP, SIGNAL(statusMessage(const QString&)), c2b_resources, SIGNAL(statusMessage(const QString&))); connect(_netQP, SIGNAL(queryEnded(bool, const QString&, const QString&)), this, SLOT(netQueryEnded(bool, const QString&, const QString&))); // Set citer if (_settingsP->cl_citer) { _citerP = new c2bCiterWidget; _citerP->setTrayIcon(); _citerP->load(); connect(_citerP, SIGNAL(openAnnote()), this, SLOT(openAnnote())); connect(_citerP, SIGNAL(openFile(const QString&)), this, SLOT(bibEditor(const QString&))); } else _citerP = 0; // Connecting cb2Bib clipboard and start c2bClipboard* cbP = c2b::clipboard(); connect(cbP, SIGNAL(cbDataChanged(const QString&)), this, SLOT(dataChanged(const QString&))); _connected = false; on_ConnectB_clicked(); // Set button and update _connected dataChanged(QString()); if (_settingsP->cl_bibedit) initAsBibTeXEditor(); } cb2Bib::~cb2Bib() { delete _citerP; delete _searchInFilesP; } /**************************************************************************** GUI FUNCTIONALITY *****************************************************************************/ void cb2Bib::show() { if (_settingsP->cl_citer && _citerP) _citerP->toggleVisible(); else if (!_settingsP->cl_bibedit) QMainWindow::show(); } void cb2Bib::on_ViewAboutB_clicked() { if (ui.stackedWidget->currentWidget() == AboutBrowser) { ui.stackedWidget->setCurrentWidget(ClipEdit); ClipEdit->setFocus(); } else { const QColor linkColor(palette().buttonText().color()); const QString sheet(QString::fromLatin1("a { text-decoration: underline; color: %1 }").arg(linkColor.name())); AboutBrowser->document()->setDefaultStyleSheet(sheet); const QString AboutS( tr( "

        cb2Bib %1

        " "

        " "A tool for rapidly extracting unformatted bibliographic references from email " "alerts, journal web pages, and PDF files.
        " "

        " "

        " "" "cb2Bib Help and User's Guide


        " "

        Additional Functionality:

        " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "
        KeysDescription
        " + _settingsP->ksname("Shortcuts/cb2Bib/Check Repeated") + "Check repeated
        " + _settingsP->ksname("Shortcuts/cb2Bib/Delete Temporary BibTeX File") + "Delete temporary BibTeX file
        " + _settingsP->ksname("Shortcuts/cb2Bib/Edit Bookmarks") + "Edit bookmarks
        " + _settingsP->ksname("Shortcuts/cb2Bib/Edit Journal Abbreviations") + "Edit journal abbreviations
        " + _settingsP->ksname("Shortcuts/cb2Bib/Edit Regular Expressions") + "Edit regular expressions
        " + _settingsP->ksname("Shortcuts/cb2Bib/Insert Regular Expression") + "Insert regular expression
        " + _settingsP->ksname("Shortcuts/cb2Bib/Open Document") + "Open document
        " + _settingsP->ksname("Shortcuts/cb2Bib/Postprocess BibTeX") + "Postprocess BibTeX
        " + _settingsP->ksname("Shortcuts/cb2Bib/Preparse Clipboard") + "Preparse clipboard
        " + _settingsP->ksname("Shortcuts/cb2Bib/Restart Recognition") + "Restart recognition
        " + _settingsP->ksname("Shortcuts/cb2Bib/Select Document File") + "Select document file
        " + _settingsP->ksname("Shortcuts/cb2Bib/Annote Editor") + "Open cb2Bib Annote
        " + _settingsP->ksname("Shortcuts/cb2Bib/Toggle Reference Tabs") + "Toggle reference tabs
        " + _settingsP->ksname("Shortcuts/cb2Bib/Write Metadata to Document") + "Write metadata to document
        EscQuit cb2Bib popup menu
        Right ClickShow cb2Bib main panel popup menu" "
        " "
        %2
        " "

        Copyright (C) 2004-2017 by Pere Constans
        " "" "http://www.molspaces.com/cb2bib

         " "

        The cb2Bib is licensed under the terms of the " "" "GNU General Public License version 3" "

         ") .arg(C2B_VERSION).arg(c2b::netqinf()->bookmarksToHtml())); const int scrollPosition(AboutBrowser->verticalScrollBar()->value()); AboutBrowser->setHtml(AboutS); AboutBrowser->verticalScrollBar()->setValue(scrollPosition); ui.stackedWidget->setCurrentWidget(AboutBrowser); AboutBrowser->setFocus(); } updateViewButtons(); } void cb2Bib::on_ConfigureB_clicked() { c2b::configure(); } void cb2Bib::on_SearchInFilesB_clicked() { doSearchInFiles(); } void cb2Bib::on_PdfImportB_clicked() { if (!_pdfImportP) { _pdfImportP = new c2bPdfImport; _pdfImportP->setAttribute(Qt::WA_DeleteOnClose); connect(this, SIGNAL(addedBibToFile(const QString&)), _pdfImportP, SLOT(processNext())); connect(this, SIGNAL(endedProcessing(bool)), _pdfImportP, SLOT(referenceExtacted(bool))); connect(_pdfImportP, SIGNAL(textProcessed(const QString&)), this, SLOT(forceDataChange(const QString&))); connect(_pdfImportP, SIGNAL(fileProcessed(const QString&)), this, SLOT(fileDropped(const QString&))); connect(_pdfImportP, SIGNAL(saveReferenceRequest()), this, SLOT(on_AddBibB_clicked())); connect(_pdfImportP, SIGNAL(setClipboardDisabled(bool)), ui.ConnectB, SLOT(setDisabled(bool))); showMessage(tr("PDF Import launched.")); } _pdfImportP->show(); } void cb2Bib::on_ExitB_clicked() { c2b::instance()->exitRequested(); } void cb2Bib::on_ConnectB_clicked() { if (_connected) { ui.ConnectB->setIcon(QIcon(C2B_ICON_DIR + C2B_ICON_DISCONNECT_B)); ui.ConnectB->setStatusTip(buttonStatusTip(tr("Connect clipboard"), ui.ConnectB->shortcut())); _connected = false; } else { ui.ConnectB->setIcon(QIcon(C2B_ICON_DIR + C2B_ICON_CONNECT_B)); ui.ConnectB->setStatusTip(buttonStatusTip(tr("Disconnect clipboard"), ui.ConnectB->shortcut())); _connected = true; } } void cb2Bib::on_MakeNetworkQueryB_clicked() { makeNetQuery(); } void cb2Bib::on_ViewBibB_clicked() { if (ui.stackedWidget->currentWidget() == BibBrowser) { ui.stackedWidget->setCurrentWidget(ClipEdit); ClipEdit->setFocus(); } else { BibBrowser->updatePlainText(_bpP->toBibTeX()); ui.stackedWidget->setCurrentWidget(BibBrowser); BibBrowser->setFocus(); } updateViewButtons(); } void cb2Bib::on_AddBibB_clicked() { // Prepare Save Reference to file ui.AddBibB->setEnabled(false); if (!_is_check_repeated_done && _settingsP->value("cb2Bib/CheckRepeatedOnSave").toBool()) { _is_check_repeated_done = true; if (isReferenceRepeated()) { ui.AddBibB->setEnabled(_modified); return; } } QFile bibtexfile(ui.bibtexfile->currentText()); bool is_writable; if (bibtexfile.exists()) is_writable = bibtexfile.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append); else is_writable = bibtexfile.open(QIODevice::WriteOnly | QIODevice::Text); if (!is_writable) { QMessageBox::information(this, tr("Information - cb2Bib"), tr("Unable to open file %1 for writing.\nError: '%2'."). arg(ui.bibtexfile->currentText()).arg(bibtexfile.errorString()), QMessageBox::Ok); ui.AddBibB->setEnabled(_modified); return; } if (_dropped_document_file.isEmpty() || ui.file->text().isEmpty() || !_settingsP->value("cb2Bib/MovePdf").toBool()) { _target_document_file.clear(); addToFile(true); } else { _target_document_file = c2bUtils::documentAbsoluteName(_settingsP->value("cb2Bib/RelativePdfDirectory").toBool(), ui.bibtexfile->currentText(), _settingsP->fileName("cb2Bib/PdfDirectory"), ui.file->text()); const QString doc_dir_name(QFileInfo(_target_document_file).absolutePath()); QDir doc_dir(doc_dir_name); if (!doc_dir.exists()) if (!doc_dir.mkpath(doc_dir_name)) { QMessageBox::information(this, tr("Information - cb2Bib"), tr("Unable to create directory %1.").arg(doc_dir_name), QMessageBox::Ok); ui.AddBibB->setEnabled(_modified); return; } const network::Action CopyMovePdf(network::actionType(_settingsP->value("cb2Bib/CopyMovePdf").toString())); c2b::net()->getFile(_dropped_document_file, _target_document_file, CopyMovePdf, this, SLOT(addToFile(bool))); } } void cb2Bib::on_EditBibTeXB_clicked() { bibEditor(ui.bibtexfile->currentText()); } void cb2Bib::on_BibTeXDir_clicked() { const QString fn(c2bFileDialog::getFilename(this, "Select a BibTeX filename", ui.bibtexfile->currentText(), "BibTeX (*.bib);;All (*)")); if (!fn.isEmpty()) updateBibfile(fn); } void cb2Bib::loadSettings() { ClipEdit->setFont(_settingsP->c2bMonoFont); BibBrowser->setFont(_settingsP->c2bMonoFont); AboutBrowser->setFont(_settingsP->c2bMonoFont); ui.AddBibB->setShortcut(QKeySequence::Save); ui.EditBibTeXB->setShortcut(QKeySequence::Open); ui.SearchInFilesB->setShortcut(QKeySequence::Find); ui.ExitB->setShortcut(QKeySequence::Quit); ui.BibTeXDir->setShortcut(_settingsP->keysequence("Shortcuts/cb2Bib/Select BibTeX File")); ui.ConfigureB->setShortcut(_settingsP->keysequence("Shortcuts/cb2Bib/Button Configure")); ui.ConnectB->setShortcut(_settingsP->keysequence("Shortcuts/cb2Bib/Button Toggle Connection")); ui.MakeNetworkQueryB->setShortcut(_settingsP->keysequence("Shortcuts/cb2Bib/Button Network Query")); ui.PdfImportB->setShortcut(_settingsP->keysequence("Shortcuts/cb2Bib/Button Start PDFImport")); ui.ViewAboutB->setShortcut(_settingsP->keysequence("Shortcuts/cb2Bib/Button About and Bookmarks")); ui.ViewBibB->setShortcut(_settingsP->keysequence("Shortcuts/cb2Bib/Button View BibTeX")); ui.AddBibB->setStatusTip(buttonStatusTip(tr("Save reference to BibTeX file"), ui.AddBibB->shortcut())); ui.BibTeXDir->setStatusTip(buttonStatusTip(tr("Select BibTeX file"), ui.BibTeXDir->shortcut())); ui.ConfigureB->setStatusTip(buttonStatusTip(tr("Configure cb2Bib"), ui.ConfigureB->shortcut())); ui.ConnectB->setStatusTip(buttonStatusTip(_connected ? tr("Disconnect clipboard") : tr("Connect clipboard"), ui.ConnectB->shortcut())); ui.EditBibTeXB->setStatusTip(buttonStatusTip(tr("Open BibTeX file"), ui.EditBibTeXB->shortcut())); ui.ExitB->setStatusTip(buttonStatusTip(tr("Close all windows and exit"), ui.ExitB->shortcut())); ui.MakeNetworkQueryB->setStatusTip(buttonStatusTip(tr("Network query for current reference"), ui.MakeNetworkQueryB->shortcut())); ui.PdfImportB->setStatusTip(buttonStatusTip(tr("Import references from a set of PDF files"), ui.PdfImportB->shortcut())); ui.SearchInFilesB->setStatusTip(buttonStatusTip(tr("Search BibTeX file for references"), ui.SearchInFilesB->shortcut())); updateViewButtons(); } QString cb2Bib::buttonStatusTip(const QString& ms, const QKeySequence& ks) const { if (ks.isEmpty()) return ms; else return ms + QLatin1String(" - ") + ks.toString(QKeySequence::NativeText); } void cb2Bib::updateViewButtons() { QWidget* viewing = ui.stackedWidget->currentWidget(); if (viewing == BibBrowser) { ui.ViewBibB->setIcon(QIcon(C2B_ICON_DIR + C2B_ICON_VIEWC2B_B)); ui.ViewAboutB->setIcon(QIcon(C2B_ICON_DIR + C2B_ICON_ABOUT_B)); ui.ViewBibB->setStatusTip(buttonStatusTip(tr("View cb2Bib clipboard"), ui.ViewBibB->shortcut())); ui.ViewAboutB->setStatusTip(buttonStatusTip(tr("About cb2bib and cb2bib bookmarks"), ui.ViewAboutB->shortcut())); } else if (viewing == AboutBrowser) { ui.ViewBibB->setIcon(QIcon(C2B_ICON_DIR + C2B_ICON_VIEWBIB_B)); ui.ViewAboutB->setIcon(QIcon(C2B_ICON_DIR + C2B_ICON_ABOUT_B_BACK)); ui.ViewBibB->setStatusTip(buttonStatusTip(tr("View BibTeX for current reference"), ui.ViewBibB->shortcut())); ui.ViewAboutB->setStatusTip(buttonStatusTip(tr("Back to cb2Bib clipboard"), ui.ViewAboutB->shortcut())); } else { ui.ViewBibB->setIcon(QIcon(C2B_ICON_DIR + C2B_ICON_VIEWBIB_B)); ui.ViewAboutB->setIcon(QIcon(C2B_ICON_DIR + C2B_ICON_ABOUT_B)); ui.ViewBibB->setStatusTip(buttonStatusTip(tr("View BibTeX for current reference"), ui.ViewBibB->shortcut())); ui.ViewAboutB->setStatusTip(buttonStatusTip(tr("About cb2bib and cb2bib bookmarks"), ui.ViewAboutB->shortcut())); } } void cb2Bib::toggleReferenceTabs() { if (ui.tabWidget->currentIndex() == 0) ui.tabWidget->setCurrentIndex(1); else ui.tabWidget->setCurrentIndex(0); } void cb2Bib::updateBibfile(const QString& fn) { ui.bibtexfile->clear(); QFileInfo fi(fn); const QStringList flist(fi.isDir() ? c2bUtils::filesInDir(fn, QStringList() << "*.bib") : c2bUtils::filesInDir(fi.absolutePath(), QStringList() << "*.bib")); for (int i = 0; i < flist.count(); ++i) ui.bibtexfile->addItem(flist.at(i)); const int index(ui.bibtexfile->findText(fn)); if (index == -1) ui.bibtexfile->setEditText(fn); else ui.bibtexfile->setCurrentIndex(index); } void cb2Bib::showLink(const QString& ln) { statusBar()->showMessage(c2b::encodeLink(ln), C2B_MESSAGE_TIME); } void cb2Bib::showMessage(const QString& ms) { statusBar()->showMessage(ms, C2B_MESSAGE_TIME); } void cb2Bib::dragEnterEvent(QDragEnterEvent* qevent) { if (qevent->mimeData()->hasUrls()) qevent->acceptProposedAction(); } void cb2Bib::dropEvent(QDropEvent* qevent) { QList fns = qevent->mimeData()->urls(); if (fns.count() > 0) { if (fns.at(0).scheme() == "file") { c2bUtils::setWidgetOnTop(this); fileDroppedByUser(fns.at(0).toLocalFile().trimmed()); } else fileDroppedByUser(fns.at(0).toString().trimmed()); } qevent->acceptProposedAction(); } void cb2Bib::fileDroppedByUser(const QString& fn) { if (fn.isEmpty()) return; bool has_bibtex(false); if (_settingsP->value("cb2Bib/AddMetadata").toBool()) { const QString metadata(c2b::documentMetadata(fn)); if (!metadata.isEmpty()) { QString text(ClipEdit->toPlainText()); if (_settingsP->value("cb2Bib/PreAppendMetadata").toString() == "prepend") text = metadata + text; else text = text + '\n' + metadata; has_bibtex = _bpP->hasBibTeX(metadata); if (has_bibtex) forceDataChange(text); else ClipEdit->setText(text); } } fileDropped(fn); if (!has_bibtex) showMessage(tr("Scheduled inclusion of file '%1'.").arg(fn)); if (QFileInfo(fn).exists()) _settingsP->setFilename("cb2Bib/LastDroppedFile", fn); } void cb2Bib::fileDropped(const QString& fn) { if (fn.isEmpty()) return; _dropped_document_file = fn.trimmed(); ui.openFileDocumentAction->setEnabled(true); ui.openFileDocumentAction->setText(tr("Open '%1'").arg(_dropped_document_file)); setDocumentFilename(); if (_settingsP->value("cb2Bib/MovePdf").toBool()) ui.file->setStatusTip(tr("From file '%1'.").arg(_dropped_document_file)); } void cb2Bib::closeEvent(QCloseEvent* qevent) { if (_pdfImportP) _pdfImportP->close(); if (_searchInFilesP) _searchInFilesP->close(); _settingsP->setValue("cb2Bib/size", size()); _settingsP->setFilename("cb2Bib/BibTeXFile", QFileInfo(ui.bibtexfile->currentText()).absoluteFilePath()); qevent->accept(); } void cb2Bib::setTaggedClipEditMode(bool tagged) { _taggedViewMode = tagged; ui.insertRegExpAction->setEnabled(tagged); ClipEdit->setTaggedViewMode(tagged); if (_taggedViewMode) _bib_menu->setAnyPatternText(tr("Any Pattern")); else _bib_menu->setAnyPatternText(tr("Delete")); ui.stackedWidget->setCurrentWidget(ClipEdit); ClipEdit->setFocus(); updateViewButtons(); } void cb2Bib::doSearchInFiles(const QString& string, const QString& fn) { if (!_searchInFilesP) { _searchInFilesP = new c2bSearchInFiles(ui.bibtexfile->currentText()); connect(ui.bibtexfile, SIGNAL(editTextChanged(const QString&)), _searchInFilesP, SLOT(setBibTeXFile(const QString&))); connect(_searchInFilesP, SIGNAL(searchDone(const QString&, bibSearcher*)), this, SLOT(bibEditor(const QString&, bibSearcher*))); showMessage(tr("BibTeX Search launched.")); } if (fn.isEmpty()) _searchInFilesP->setBibTeXFile(ui.bibtexfile->currentText()); else _searchInFilesP->setBibTeXFile(fn); _searchInFilesP->setCurrentText(string); _searchInFilesP->show(); } void cb2Bib::setWindowTitle(const QString& title) { if (title.isEmpty()) QMainWindow::setWindowTitle(tr("cb2Bib")); else QMainWindow::setWindowTitle(tr("%1 - cb2Bib").arg(title)); } /**************************************************************************** CB2BIB FUNCTIONALITY *****************************************************************************/ void cb2Bib::setWidgetMapping() { _bpP->addField("abstract", ui.abstract); _bpP->addField("address", ui.address); _bpP->addField("annote", ui.annote); _bpP->addField("author", ui.author); _bpP->addField("booktitle", ui.booktitle); _bpP->addField("chapter", ui.chapter); _bpP->addField("doi", ui.doi); _bpP->addField("edition", ui.edition); _bpP->addField("editor", ui.editor); _bpP->addField("eprint", ui.eprint); _bpP->addField("file", ui.file); _bpP->addField("id", ui.id); _bpP->addField("institution", ui.institution); _bpP->addField("isbn", ui.isbn); _bpP->addField("issn", ui.issn); _bpP->addField("journal", ui.journal); _bpP->addField("keywords", ui.keywords); _bpP->addField("month", ui.month); _bpP->addField("note", ui.note); _bpP->addField("number", ui.number); _bpP->addField("organization", ui.organization); _bpP->addField("pages", ui.pages); _bpP->addField("publisher", ui.publisher); _bpP->addField("school", ui.school); _bpP->addField("series", ui.series); _bpP->addField("title", ui.title); _bpP->addField("url", ui.url); _bpP->addField("volume", ui.volume); _bpP->addField("year", ui.year); _bpP->addTypes(ui.typecombo); _bpP->setWidgetMapping(); connect(_bpP, SIGNAL(bibModified(bool)), this, SLOT(bibModified(bool))); } void cb2Bib::setBibMenu() { _bib_menu = new c2bBibMenu(this); connect(_bib_menu->addAuthorAction(), SIGNAL(triggered()), this, SLOT(addAuthors())); connect(_bib_menu->addEditorAction(), SIGNAL(triggered()), this, SLOT(addEditors())); connect(_bib_menu->anyPatternAction(), SIGNAL(triggered()), this, SLOT(anyPattern())); connect(ClipEdit, SIGNAL(userEndedSelection(const QPoint&)), this, SLOT(readField(const QPoint&))); } void cb2Bib::readField(const QPoint& position) { QAction* action = _bib_menu->exec(position); if (!action) return; const QString field(action->data().toString()); if (field.isEmpty()) return; _bpP->setField(field, ClipEdit->textCursor().selectedText()); ClipEdit->insertTag("<<" + field + ">>"); } void cb2Bib::addAuthors() { _bpP->setField("addauthors", ClipEdit->textCursor().selectedText(), ui.author->text()); ClipEdit->insertTag("<>"); if (_taggedViewMode) showMessage(tr("Info: Creating a pattern with multiple author sets.")); } void cb2Bib::addEditors() { _bpP->setField("addeditors", ClipEdit->textCursor().selectedText(), ui.editor->text()); ClipEdit->insertTag("<>"); if (_taggedViewMode) showMessage(tr("Info: Creating a pattern with multiple ui.editor sets.")); } void cb2Bib::anyPattern() { if (_taggedViewMode) ClipEdit->insertTag(""); else ClipEdit->insertPlainText(QString()); } void cb2Bib::preparseClipboard() { c2bPreparse(_raw_input_data); } void cb2Bib::restartEngine() { const QString text(ClipEdit->toPlainText()); if (!text.isEmpty()) c2bParse(text); } void cb2Bib::guessFields() { const QString text(ClipEdit->toPlainText()); if (!text.isEmpty()) { const QString keep_dropped_article_file(_dropped_document_file); c2bInit(); _bpP->guessFields(text); fileDropped(keep_dropped_article_file); processingEnded(); } } void cb2Bib::dataChanged(const QString& str) { bool do_allow(isVisible()); if (ui.stackedWidget->currentWidget() == ClipEdit) { if (ClipEdit->textCursor().hasSelection()) do_allow = false; } else if (ui.stackedWidget->currentWidget() == BibBrowser) { if (BibBrowser->textCursor().hasSelection()) do_allow = false; } if (_connected && ui.ConnectB->isEnabled() && do_allow) forceDataChange(str); } void cb2Bib::forceDataChange(const QString& str) { if (!str.isEmpty()) { _raw_input_data = str.trimmed(); if (_settingsP->value("cb2Bib/PreparserAutomatic").toBool()) c2bPreparse(str); else c2bParse(str); } } void cb2Bib::c2bInit() { _dropped_document_file.clear(); ui.openFileDocumentAction->setEnabled(false); ui.openFileDocumentAction->setText(tr("Open File Document")); ui.file->setStatusTip(QString()); disconnect(_bpP, SIGNAL(setDocumentFilename()), this, SLOT(setDocumentFilename())); _bpP->clearCurrentReference(); _is_check_repeated_done = false; _modified = false; ui.AddBibB->setEnabled(_modified); } void cb2Bib::c2bParse(const QString& text) { c2bInit(); QString out_text, out_tagtext; _bpP->parse(text, &out_text, &out_tagtext); ClipEdit->setText(out_text, out_tagtext); processingEnded(); } void cb2Bib::c2bPreparse(const QString& text) { QString out_text; _bpP->preparse(text, &out_text); if (!out_text.isEmpty()) c2bParse(out_text); } void cb2Bib::deleteTmpBib() { QMessageBox msgBox(this); QPushButton* deleteButton = msgBox.addButton(tr("&Delete"), QMessageBox::DestructiveRole); msgBox.setDefaultButton(msgBox.addButton(QMessageBox::Cancel)); msgBox.setWindowTitle(tr("Confirmation - cb2Bib")); msgBox.setText(tr("Delete temporary BibTeX file %1 ?").arg(ui.bibtexfile->currentText())); msgBox.setIcon(QMessageBox::Question); msgBox.exec(); if (msgBox.clickedButton() == deleteButton) { QFile BibFile(ui.bibtexfile->currentText()); if (BibFile.remove()) showMessage(tr("File %1 deleted.").arg(ui.bibtexfile->currentText())); else QMessageBox::warning(this, tr("Warning - cb2Bib"), tr("Unable to delete the file %1.\nError: '%2'"). arg(ui.bibtexfile->currentText()).arg(BibFile.errorString()), QMessageBox::Ok); } } void cb2Bib::insertRegExp() { QStringList pattern; // Extracting Reference Type pattern.append(ui.typecombo->currentText()); // Extracting Field Order QString order(ClipEdit->toPlainText()); QRegExp rx("<<(" + _bpP->bibliographicFields().join("|") + ")>>"); QStringList list; int ipos(0); while (ipos >= 0) { ipos = rx.indexIn(order, ipos); if (ipos > -1) { list += rx.cap(1); ipos += rx.matchedLength(); c2bUtils::debug(rx.cap(1)); } } order = list.join(" "); c2bUtils::debug(order); pattern.append(order); // Parsing Regular Expression QString str('^' + QRegExp::escape(ClipEdit->toPlainText()) + '$'); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<
        >"), "(.+)"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp(""), ".+"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<>"), "(\\d+)"); str.replace(QRegExp("<>"), "(10\\.[\\d\\.]+/\\S+)"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<>"), "(\\S+)"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<>"), "(\\d+)"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<>"), "([\\d\\-" + QString(QChar(8211)) + "\\s]+)"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<>"), "(.+)"); str.replace(QRegExp("<<url>>"), "(\\S+)"); str.replace(QRegExp("<<volume>>"), "(\\d+)"); str.replace(QRegExp("<<year>>"), "(\\d\\d\\d\\d)"); c2bUtils::debug(str); pattern.append(str); // User Editting c2bSaveRegExp Sdiag(pattern, _raw_input_data, this); connect(c2b::clipboard(), SIGNAL(cbDataChanged(const QString&)), &Sdiag, SLOT(updateInput(const QString&))); connect(&Sdiag, SIGNAL(savePatternInfo(const QString&, const QString&)), this, SLOT(savePattern(const QString&, const QString&))); ui.ConnectB->setDisabled(true); if (Sdiag.exec() == QDialog::Rejected) showMessage(tr("Cancelled.")); ui.ConnectB->setDisabled(false); } void cb2Bib::savePattern(const QString& rx, const QString& rxname) { const QString regular_expression_f(_settingsP->fileName("cb2Bib/RegularExpressionFile")); QFile file(regular_expression_f); bool fopen; if (file.exists()) fopen = file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append); else fopen = file.open(QIODevice::WriteOnly | QIODevice::Text); if (fopen) { QTextStream stream(&file); stream.setCodec("UTF-8"); stream.setAutoDetectUnicode(true); stream << ("# cb2Bib " + C2B_VERSION + " Pattern:") << endl << rxname << endl << rx << endl << endl; file.close(); showMessage(tr("Pattern '%1' added to %2.").arg(rxname).arg(regular_expression_f)); } else QMessageBox::warning(this, tr("Warning - cb2Bib"), tr("Unable to open the file %1 for writing.\nError: '%2'."). arg(regular_expression_f).arg(file.errorString()), QMessageBox::Ok); c2bUtils::debug("signal:"); c2bUtils::debug(rx); c2bUtils::debug(rxname); } void cb2Bib::setDocumentFilename() { disconnect(_bpP, SIGNAL(setDocumentFilename()), this, SLOT(setDocumentFilename())); if (_dropped_document_file.isEmpty()) return; ui.file->setText(_bpP->documentFilename(_dropped_document_file, ui.bibtexfile->currentText())); connect(_bpP, SIGNAL(setDocumentFilename()), this, SLOT(setDocumentFilename())); } void cb2Bib::addToFile(bool ready) { if (!ready) { QMessageBox::information(this, tr("Information - cb2Bib"), tr("Not ready to add reference.\n%2"). arg(c2b::net()->errorString()), QMessageBox::Ok); ui.AddBibB->setEnabled(_modified); return; } QFile file(ui.bibtexfile->currentText()); bool fopen; if (file.exists()) fopen = file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append); else fopen = file.open(QIODevice::WriteOnly | QIODevice::Text); if (fopen) { QTextStream stream(&file); stream.setCodec("UTF-8"); stream.setAutoDetectUnicode(true); stream << _bpP->toBibTeX(); file.close(); c2b::showMessage(tr("Bib Item %1 added to %2.").arg(ui.id->text()).arg(ui.bibtexfile->currentText())); if (_settingsP->value("cb2Bib/InsertMetadata").toBool()) if (!_target_document_file.isEmpty()) if (!c2b::metaParser()->insertMetadata(_bpP->currentReference(), _target_document_file)) c2b::showMessage(tr("Unable to insert metadata to file %1.").arg(_target_document_file)); _is_check_repeated_done = false; _modified = false; ui.AddBibB->setEnabled(_modified); emit addedBibToFile(ui.bibtexfile->currentText()); } else QMessageBox::warning(this, tr("Warning - cb2Bib"), tr("Unable to open file %1 for writing.\nError: '%2'."). arg(ui.bibtexfile->currentText()).arg(file.errorString()), QMessageBox::Ok); } void cb2Bib::addMetadata() { if (!_dropped_document_file.isEmpty()) { if (QFileInfo(_dropped_document_file).isWritable() && c2b::metaParser()->insertMetadata(_bpP->currentReference(), _dropped_document_file)) c2b::showMessage(tr("Inserted metadata to file %1.").arg(_dropped_document_file)); else c2b::showMessage(tr("Unable to insert metadata to file %1.").arg(_dropped_document_file)); } } void cb2Bib::postprocessBibTeX() { c2bPostprocess* ppBib = new c2bPostprocess(ui.bibtexfile->currentText(), this); showMessage(tr("BibTeX Postprocessing launched.")); if (ppBib->exec() != QDialog::Accepted) showMessage(tr("BibTeX Postprocessing exited.")); } void cb2Bib::bookmarksEditor() { if (_openDocuments.contains("bookmark_network_editor")) { c2bUtils::setWidgetOnTop(_openDocuments.value("bookmark_network_editor")); return; } c2bEditor* ed = new c2bEditor(_settingsP->fileName("cb2Bib/NetworkFile"), c2bEditor::NetQInfo, this); ed->setObjectName("bookmark_network_editor"); _openDocuments.insert("bookmark_network_editor", ed); ui.editBookmarksAction->setEnabled(false); connect(ed, SIGNAL(restartQuery()), this, SLOT(makeNetQuery())); connect(ed, SIGNAL(destroyed(QObject*)), this, SLOT(updateOpenDocuments(QObject*))); connect(ed, SIGNAL(openFile(const QString&)), this, SLOT(bibEditor(const QString&))); ed->show(); showMessage(tr("Bookmark File Editor launched.")); } void cb2Bib::abbreviationsEditor() { c2bEditor* ed = new c2bEditor(_settingsP->fileName("cb2Bib/JournalFile"), c2bEditor::JAbbrev, this); ed->setObjectName("journal_abbreviations_editor"); _openDocuments.insert("journal_abbreviations_editor", ed); ui.editAbbreviationsAction->setEnabled(false); connect(ed, SIGNAL(destroyed(QObject*)), this, SLOT(updateOpenDocuments(QObject*))); connect(ed, SIGNAL(openFile(const QString&)), this, SLOT(bibEditor(const QString&))); connect(ed, SIGNAL(openBookmarks()), this, SLOT(bookmarksEditor())); ed->show(); showMessage(tr("Journal Abbreviations Editor launched.")); } void cb2Bib::regExpsEditor() { c2bEditor* ed = new c2bEditor(_settingsP->fileName("cb2Bib/RegularExpressionFile"), c2bEditor::RegExp, this); ed->setObjectName("regular_expression_editor"); _openDocuments.insert("regular_expression_editor", ed); ui.editRegExpsAction->setEnabled(false); connect(ed, SIGNAL(restartEngine()), this, SLOT(restartEngine())); connect(ed, SIGNAL(destroyed(QObject*)), this, SLOT(updateOpenDocuments(QObject*))); connect(ed, SIGNAL(openFile(const QString&)), this, SLOT(bibEditor(const QString&))); connect(ed, SIGNAL(openBookmarks()), this, SLOT(bookmarksEditor())); ed->show(); showMessage(tr("RegExp File Editor launched.")); } void cb2Bib::annoteEditor(const QString& annotefile) { c2bEditor* ed = new c2bEditor(annotefile, c2bEditor::Annote, this); ed->setObjectName("annote_editor"); _openDocuments.insert("annote_editor", ed); connect(ed, SIGNAL(destroyed(QObject*)), this, SLOT(updateOpenDocuments(QObject*))); connect(ed, SIGNAL(openFile(const QString&)), this, SLOT(bibEditor(const QString&))); connect(ed, SIGNAL(openBookmarks()), this, SLOT(bookmarksEditor())); ed->show(); showMessage(tr("Annote Editor launched.")); } void cb2Bib::initAsBibTeXEditor() { for (int i = 0; i < _settingsP->cl_bibedit_filenames.count(); ++i) bibEditor(_settingsP->cl_bibedit_filenames.at(i)); } void cb2Bib::bibEditor(const QString& bibtexfile, bibSearcher* searcher) { if (bibtexfile.isEmpty()) return; if (_openDocuments.contains(bibtexfile)) { c2bUtils::setWidgetOnTop(_openDocuments.value(bibtexfile)); return; } c2bEditor* ed = new c2bEditor(bibtexfile, searcher, this); ed->setObjectName(ed->editorFilename()); _openDocuments.insert(ed->editorFilename(), ed); connect(ed, SIGNAL(destroyed(QObject*)), this, SLOT(updateOpenDocuments(QObject*))); connect(ed, SIGNAL(openFile(const QString&)), this, SLOT(bibEditor(const QString&))); connect(ed, SIGNAL(openBookmarks()), this, SLOT(bookmarksEditor())); connect(ed, SIGNAL(editFileRenamed(const QString&, const QString&)), this, SLOT(updateOpenDocuments(const QString&, const QString&))); ed->show(); showMessage(tr("BibTeX Editor launched.")); } void cb2Bib::updateOpenDocuments(QObject* obj) { _openDocuments.remove(obj->objectName()); if (!_openDocuments.contains("bookmark_network_editor")) ui.editBookmarksAction->setEnabled(true); if (!_openDocuments.contains("journal_abbreviations_editor")) ui.editAbbreviationsAction->setEnabled(true); if (!_openDocuments.contains("regular_expression_editor")) ui.editRegExpsAction->setEnabled(true); if (_settingsP->cl_bibedit && _openDocuments.count() == 0 && isHidden()) close(); } void cb2Bib::updateOpenDocuments(const QString& old_name, const QString& new_name) { c2bEditor* ed = _openDocuments.take(old_name); if (ed) { if (ed->objectName() == "bookmark_network_editor" || ed->objectName() == "journal_abbreviations_editor" || ed->objectName() == "regular_expression_editor" || ed->objectName() == "annote_editor") return; ed->setObjectName(new_name); _openDocuments.insert(new_name, ed); updateBibfile(new_name); } } void cb2Bib::bibModified(bool modified) { _modified = modified; ui.AddBibB->setEnabled(_modified); if (ui.stackedWidget->currentWidget() == BibBrowser) BibBrowser->updatePlainText(_bpP->toBibTeX()); } void cb2Bib::updateCheckRepeatedAction() { // Do not use anyAuthor/anyTitle, _bpP->currentReference() might not yet be set ui.checkRepeatedAction->setVisible(!ui.author->text().isEmpty() || !ui.title->text().isEmpty() || !ui.editor->text().isEmpty() || !ui.booktitle->text().isEmpty() || !ui.id->text().isEmpty()); } void cb2Bib::checkRepeated() { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); isReferenceRepeated(); QApplication::restoreOverrideCursor(); } bool cb2Bib::isReferenceRepeated() { QFileInfo fi(ui.bibtexfile->currentText()); showMessage(tr("Checking for similar references at %1.").arg(fi.absolutePath())); bibSearcher searcher(_bpP, fi.absolutePath()); searcher.exec(); const bool repeated(searcher.hitsCount() > 0); if (repeated) { QApplication::processEvents(); bibEditor(fi.absolutePath(), &searcher); QApplication::processEvents(); if (searcher.hitsCount() == 1) c2b::showMessage(tr("Found %1 similar reference.").arg(searcher.hitsCount())); else c2b::showMessage(tr("Found %1 similar references.").arg(searcher.hitsCount())); } else showMessage(tr("No similar references found at %1.").arg(fi.absolutePath())); return repeated; } /**************************************************************************** NETWORK FUNCTIONALITY *****************************************************************************/ void cb2Bib::makeNetQuery() { if (!ui.MakeNetworkQueryB->isEnabled()) { showMessage(tr("Currently processing previous query. Resubmit later.")); return; } ui.MakeNetworkQueryB->setEnabled(false); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); _netQP->submitQuery(_bpP->currentReference(), ClipEdit->toPlainText(), !_pdfImportP); } void cb2Bib::netQueryEnded(bool succeeded, const QString& targetPDF, const QString& targetBib) { if (!succeeded) { emit endedProcessing(false); c2b::showMessage(tr("Query submission error. %1").arg(_netQP->errorString())); } else if (targetPDF.isEmpty() && targetBib.isEmpty()) { emit endedProcessing(false); c2b::showMessage(tr("Query submitted. %1").arg(_netQP->errorString())); } else { const QString previous_article_file(_dropped_document_file); // Keep dropped file in case this is auto recognized forceDataChange(targetBib); if (_bpP->isAutoRecognized() && !targetPDF.isEmpty()) fileDropped(targetPDF); else if (_bpP->isAutoRecognized()) fileDropped(previous_article_file); } QApplication::restoreOverrideCursor(); ui.MakeNetworkQueryB->setEnabled(true); } void cb2Bib::processingEnded() { if (_settingsP->value("cb2Bib/AutomaticQuery").toBool()) if (ui.MakeNetworkQueryB->isEnabled() && !_bpP->autoRecognizedString().contains("BibTeX")) { makeNetQuery(); return; } if (_pdfImportP) fileDropped(_pdfImportP->processedFile); emit endedProcessing(_bpP->isAutoRecognized()); } void cb2Bib::linkClicked(const QUrl& ln) { // Encode link sets dynamic link. c2bUtils::openFile(c2b::encodeLink(ln.toString()), this); } void cb2Bib::openFileDocument() { if (!_dropped_document_file.isEmpty()) c2bUtils::openFile(_dropped_document_file, this); } void cb2Bib::selectFile() { const QString fn(c2bFileDialog::getOpenFilename(this, QString(), _settingsP->fileName("cb2Bib/LastDroppedFile"), "Portable Document Format (*.pdf);;DjVu (*.djvu);;Post Script (*.ps);;TeX (*.tex);;All (*)")); if (!fn.isEmpty()) fileDroppedByUser(fn); } void cb2Bib::openAnnote() { const QString fn(c2bFileDialog::getFilename(this, QString(), _settingsP->fileName("cb2Bib/LastAnnoteFile"), "Annote HTML output (*.tex.html);;LaTeX (*.tex);;All (*)")); if (fn.isEmpty()) return; const QString tex_fn(QString(fn).remove(QRegExp("\\.html$"))); if (!QFileInfo(tex_fn).exists()) { const QString empty_note("%\\c2b_bibtex_directory{" + QFileInfo(ui.bibtexfile->currentText()).absolutePath() + "}\n%\\c2b_makeindex\n\n\n\\title{New Note}\n\n\n\n"); if (!c2bUtils::stringToFile(empty_note, tex_fn)) { QMessageBox::information(this, tr("Information - cb2Bib"), tr("Unable to create new note %1.\nCheck writing permission.").arg(tex_fn), QMessageBox::Ok); return; } } _settingsP->setFilename("cb2Bib/LastAnnoteFile", fn); #ifdef C2B_USE_QWEB const QStringList flags(QStringList() << "--view-annote" << fn << _settingsP->confCommandFlags()); QProcess::startDetached(QCoreApplication::applicationFilePath(), flags); #else annoteEditor(tex_fn); #endif } �������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bExportDialog.cpp������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016606� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.755257087 30 atime=1498583183.007254748 30 ctime=1498583182.755257087 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bExportDialog.cpp����������������������������������������������������������������0000644�0001750�0000144�00000011334�13124510216�020202� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bExportDialog.h" #include "c2b.h" #include "c2bFileDialog.h" #include "c2bSettings.h" #include "c2bUtils.h" #include <QMessageBox> #include <QPushButton> c2bExportDialog::c2bExportDialog(const QString& fn, const QString& contents, const QStringList& keys, QWidget* parentw) : QDialog(parentw) { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); _ed.bibtex_fn = fn; if (contents.isEmpty()) _ed.bibtex_contents = c2bUtils::fileToString(fn); else _ed.bibtex_contents = contents; _ed.bibtex_keys = keys; ui.setupUi(this); setWindowTitle(tr("Export Entries - cb2Bib")); QPushButton* buttonExport = new QPushButton(tr("Export")); ui.buttonBox->addButton(buttonExport, QDialogButtonBox::ActionRole); buttonExport->setAutoDefault(true); buttonExport->setDefault(true); connect(buttonExport, SIGNAL(clicked()), this, SLOT(_export())); settings = c2bSettingsP; ui.ExportFile->setText(settings->value("c2bExportDialog/ExportFile", QString()).toString()); ui.DocumentsDirectory->setText(settings->value("c2bExportDialog/DocumentsDirectory", QString()).toString()); ui.CopyDocuments->setChecked(settings->value("c2bExportDialog/CopyDocuments").toBool()); ui.RelativeDocumentDirectory->setChecked(settings->value("c2bExportDialog/RelativeDocumentDirectory").toBool()); ui.DocumentsDirectoryBox->setEnabled(ui.CopyDocuments->isChecked()); connect(ui.ExportFileDir, SIGNAL(clicked()), this, SLOT(getExportFile())); connect(ui.DocumentsDirectoryDir, SIGNAL(clicked()), this, SLOT(getDocumentsDirectory())); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); } c2bExportDialog::~c2bExportDialog() { if (result() == QDialog::Accepted) { settings->setValue("c2bExportDialog/CopyDocuments", ui.CopyDocuments->isChecked()); settings->setValue("c2bExportDialog/DocumentsDirectory", ui.DocumentsDirectory->text()); settings->setValue("c2bExportDialog/ExportFile", ui.ExportFile->text()); settings->setValue("c2bExportDialog/RelativeDocumentDirectory", ui.RelativeDocumentDirectory->isChecked()); } } void c2bExportDialog::_export() { _ed.copy_documents = ui.CopyDocuments->isChecked(); _ed.documents_dir = ui.DocumentsDirectory->text(); _ed.export_fn = ui.ExportFile->text(); _ed.relative_dir = ui.RelativeDocumentDirectory->isChecked(); // Check files if (QFileInfo(_ed.export_fn).exists()) { const int button(QMessageBox::warning(this, tr("Warning - cb2Bib"), tr("File %1 already exists.\nDo you want to replace it?").arg(_ed.export_fn), QMessageBox::Yes | QMessageBox::No)); if (button == QMessageBox::No) return; } if (_ed.copy_documents) { const QString ddname(c2bUtils::documentAbsoluteName(_ed.relative_dir, _ed.export_fn, _ed.documents_dir, QString()) + QDir::separator()); QDir doc_dir(ddname); if (!doc_dir.exists()) if (!doc_dir.mkpath(ddname)) { QMessageBox::warning(this, tr("Warning - cb2Bib"), tr("Unable to create directory %1.").arg(ddname), QMessageBox::Ok); return; } } QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); c2bExport e(this); e.exportEntries(_ed); QApplication::restoreOverrideCursor(); accept(); } void c2bExportDialog::getExportFile() { const QString fn(ui.ExportFile->text()); const QString new_fn(c2bFileDialog::getFilename(this, tr("Select export filename"), fn, "BibTeX (*.bib)")); if (!new_fn.isEmpty()) ui.ExportFile->setText(new_fn); } void c2bExportDialog::getDocumentsDirectory() { const QString dir(c2bUtils::documentAbsoluteName(ui.RelativeDocumentDirectory->isChecked(), ui.ExportFile->text(), ui.DocumentsDirectory->text(), QString())); QString new_dir(c2bFileDialog::getExistingDirectory(this, tr("Select documents directory"), dir)); if (!new_dir.isEmpty()) { new_dir = c2bUtils::documentDirName(ui.RelativeDocumentDirectory->isChecked(), ui.ExportFile->text(), new_dir); ui.DocumentsDirectory->setText(new_dir); } } void c2bExportDialog::help() { c2bUtils::displayHelp("http://www.molspaces.com/d_cb2bib-c2beditor.php#export_entries"); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bUpdateMetadata.cpp����������������������������������������������0000644�0000000�0000000�00000000132�13124510216�017070� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.791256753 30 atime=1498583183.007254748 30 ctime=1498583182.791256753 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bUpdateMetadata.cpp��������������������������������������������������������������0000644�0001750�0000144�00000015702�13124510216�020467� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bUpdateMetadata.h" #include "c2b.h" #include "c2bSettings.h" #include "c2bUtils.h" #include <QPushButton> #include <QTimer> c2bUpdateMetadata::c2bUpdateMetadata(QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowTitle(tr("Documents Updating Log - cb2Bib")); ui.Log->setFont(c2bSettingsP->c2bMonoFont); ui.Log->setLineWrapMode(QPlainTextEdit::NoWrap); _buttonAbort = new QPushButton(tr("Abort")); ui.buttonBox->addButton(_buttonAbort, QDialogButtonBox::ActionRole); connect(_buttonAbort, SIGNAL(clicked()), this, SLOT(aborted())); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); resize(c2bSettingsP->value("c2bLogWidget/size", size()).toSize()); _bpP = c2b::bibParser(); } c2bUpdateMetadata::~c2bUpdateMetadata() { c2bSettingsP->setValue("c2bLogWidget/size", size()); } void c2bUpdateMetadata::update(const QString& fn, const QString& bibtex) { ui.Log->clear(); _fn = fn; _bibtex = bibtex; QTimer::singleShot(500, this, SLOT(update())); QDialog::exec(); } void c2bUpdateMetadata::update() { ui.Log->appendPlainText(tr("[cb2bib] Updating documents metadata...\n")); const QString exiftool_bin(c2bSettingsP->fileName("cb2Bib/ExifToolBin")); if (exiftool_bin.isEmpty()) { ui.Log->appendPlainText(tr("[cb2bib] ExifTool location has not been specified.")); return ; } const QFileInfo exiftool_bin_fi(exiftool_bin); if (exiftool_bin_fi.isAbsolute()) if (!exiftool_bin_fi.exists()) { ui.Log->appendPlainText(tr("[cb2bib] ExifTool file %1 does not exist.").arg(exiftool_bin)); return; } QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(false); _buttonAbort->setEnabled(true); _buttonAbort->setFocus(); _aborted = false; ui.Log->appendPlainText(tr("[cb2bib] Processing file %1...\n").arg(_fn)); int doc_counter(0); int error_counter(0); int updated_counter(0); metadataParser* mp = c2b::metaParser(); bibReference ref; _bpP->initReferenceParsing(_fn, _bpP->bibliographicFields(), &ref); while (_bpP->referencesIn(_bibtex, &ref) && !_aborted) { QCoreApplication::processEvents(); const QString file(ref.value("file")); if (file.isEmpty()) { ui.Log->appendPlainText(tr("[cb2bib] %1: No file in reference.").arg(ref.citeidName)); continue; } QFileInfo fi(file); if (!fi.exists()) { ui.Log->appendPlainText(tr("[cb2bib] %1: Warning: File %2 does not exist.").arg(ref.citeidName).arg(file)); continue; } ++doc_counter; bibReference mref; if (mp->metadata(file, &mref)) if (!needsUpdating(ref, mref)) continue; if (!fi.isWritable()) { ++error_counter; ui.Log->appendPlainText(tr("[cb2bib] %1: Error: File %2 is not writable.").arg(ref.citeidName).arg(file)); continue; } QString error_str; if (mp->insertMetadata(ref, file, &error_str)) { if (mp->metadata(file, &mref)) if (!needsUpdating(ref, mref)) { ++updated_counter; ui.Log->appendPlainText(tr("[cb2bib] %1: File %2 successfully updated.").arg(ref.citeidName).arg(file)); continue; } ++error_counter; ui.Log->appendPlainText(tr("[cb2bib] %1: Warning: File %2 was not properly updated.").arg(ref.citeidName).arg(file)); writeDifferences(ref, mref); } else { ++error_counter; ui.Log->appendPlainText(tr("[cb2bib] %1: Error: File %2 could not be updated.").arg(ref.citeidName).arg(file)); ui.Log->appendPlainText(tr("[exiftool] '%1'.").arg(error_str)); } QCoreApplication::processEvents(); } QApplication::restoreOverrideCursor(); ui.buttonBox->button(QDialogButtonBox::Close)->setEnabled(true); ui.buttonBox->button(QDialogButtonBox::Close)->setFocus(); _buttonAbort->setEnabled(false); ui.Log->appendPlainText(tr("\n[cb2bib] Checked %1 documents.").arg(doc_counter)); if (doc_counter > 0 && updated_counter == 0 && error_counter == 0) ui.Log->appendPlainText(tr("[cb2bib] Documents Metadata was up to date.")); else ui.Log->appendPlainText(tr("[cb2bib] Updated %1 documents.").arg(updated_counter)); if (error_counter > 0) ui.Log->appendPlainText(tr("[cb2bib] Found %1 errors.").arg(error_counter)); c2b::showMessage(tr("Updated %1 documents.").arg(updated_counter)); } bool c2bUpdateMetadata::needsUpdating(const bibReference& ref, const bibReference& mref) { if (ref.typeName != mref.typeName) return true; const QStringList& bibliographicFields = _bpP->bibliographicFields(); for (int i = 0; i < bibliographicFields.count(); ++i) { const QString key(bibliographicFields.at(i)); if (key == "file") continue; else if (key == "id") continue; QString value(ref.value(key)); c2bUtils::fullBibToC2b(value); if (key == "title" || key == "booktitle") c2bUtils::cleanTitle(value); if (value != mref.value(key)) return true; } return false; } void c2bUpdateMetadata::writeDifferences(const bibReference& ref, const bibReference& mref) { QString diff(" [Key] '%1'\n [In Reference] '%2'\n [In Document] '%3'"); if (ref.typeName != mref.typeName) ui.Log->appendPlainText(diff.arg("type").arg(ref.typeName).arg(mref.typeName)); const QStringList& bibliographicFields = _bpP->bibliographicFields(); for (int i = 0; i < bibliographicFields.count(); ++i) { const QString key(bibliographicFields.at(i)); if (key == "file") continue; else if (key == "id") continue; QString value(ref.value(key)); c2bUtils::fullBibToC2b(value); if (key == "title" || key == "booktitle") c2bUtils::cleanTitle(value); if (value != mref.value(key)) ui.Log->appendPlainText(diff.arg(key).arg(value).arg(mref.value(key))); } } void c2bUpdateMetadata::aborted() { _aborted = true; _buttonAbort->setEnabled(false); ui.Log->appendPlainText(tr("\n\n[cb2bib] Aborted.\n")); } void c2bUpdateMetadata::help() { c2bUtils::displayHelp("http://www.molspaces.com/d_cb2bib-c2beditor.php#update_metadata"); } ��������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/findDialog.ui������������������������������������������������������0000644�0000000�0000000�00000000074�13124510115�015514� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 30 ctime=1498583182.651258052 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/findDialog.ui����������������������������������������������������������������������0000644�0001750�0000144�00000016065�13124510115�017111� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<ui version="4.0" > <author>Pere Constans</author> <class>findDialog</class> <widget class="QDialog" name="findDialog" > <property name="geometry" > <rect> <x>0</x> <y>0</y> <width>459</width> <height>196</height> </rect> </property> <property name="windowTitle" > <string>Find in text - cb2Bib</string> </property> <layout class="QGridLayout" > <property name="margin" > <number>6</number> </property> <property name="spacing" > <number>6</number> </property> <item row="1" column="0" > <widget class="QGroupBox" name="groupBox" > <property name="sizePolicy" > <sizepolicy vsizetype="Expanding" hsizetype="Expanding" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="title" > <string>Options</string> </property> <layout class="QGridLayout" > <property name="margin" > <number>9</number> </property> <property name="spacing" > <number>6</number> </property> <item row="1" column="0" > <widget class="QCheckBox" name="checkCase" > <property name="text" > <string>&Case sensitive</string> </property> </widget> </item> <item row="2" column="0" > <spacer> <property name="orientation" > <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0" > <size> <width>180</width> <height>16</height> </size> </property> </spacer> </item> <item row="0" column="0" > <widget class="QCheckBox" name="checkWords" > <property name="text" > <string>&Whole words only</string> </property> </widget> </item> </layout> </widget> </item> <item row="0" column="0" colspan="2" > <layout class="QHBoxLayout" > <property name="spacing" > <number>6</number> </property> <property name="margin" > <number>0</number> </property> <item> <widget class="QLabel" name="TextLabel1" > <property name="text" > <string>Find:</string> </property> <property name="buddy" > <cstring>comboFind</cstring> </property> </widget> </item> <item> <widget class="c2bComboBox" name="comboFind" > <property name="sizePolicy" > <sizepolicy vsizetype="Fixed" hsizetype="Expanding" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="editable" > <bool>true</bool> </property> <property name="autoCompletion" > <bool>true</bool> </property> <property name="duplicatesEnabled" > <bool>false</bool> </property> </widget> </item> <item> <widget class="QToolButton" name="clearB" > <property name="toolTip" > <string>Clear Text</string> </property> <property name="text" > <string/> </property> <property name="icon" > <iconset resource="cb2bib.qrc" > <normaloff>:/icons/icons/clear_left.png</normaloff>:/icons/icons/clear_left.png</iconset> </property> </widget> </item> </layout> </item> <item row="3" column="0" > <widget class="QLabel" name="notFound" > <property name="text" > <string>Pattern not found</string> </property> </widget> </item> <item row="3" column="1" > <widget class="QDialogButtonBox" name="buttonBox" > <property name="orientation" > <enum>Qt::Horizontal</enum> </property> <property name="standardButtons" > <set>QDialogButtonBox::Close|QDialogButtonBox::Ok</set> </property> </widget> </item> <item row="1" column="1" > <widget class="QGroupBox" name="groupBox_2" > <property name="sizePolicy" > <sizepolicy vsizetype="Expanding" hsizetype="Expanding" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="title" > <string>Direction</string> </property> <layout class="QGridLayout" > <property name="margin" > <number>9</number> </property> <property name="spacing" > <number>6</number> </property> <item row="2" column="0" > <spacer> <property name="orientation" > <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0" > <size> <width>147</width> <height>16</height> </size> </property> </spacer> </item> <item row="1" column="0" > <widget class="QRadioButton" name="radioBackward" > <property name="text" > <string>&Backward</string> </property> </widget> </item> <item row="0" column="0" > <widget class="QRadioButton" name="radioForward" > <property name="text" > <string>&Forward</string> </property> <property name="checked" > <bool>true</bool> </property> </widget> </item> </layout> </widget> </item> <item row="2" column="0" colspan="2" > <widget class="Line" name="line5" > <property name="frameShape" > <enum>QFrame::HLine</enum> </property> <property name="frameShadow" > <enum>QFrame::Sunken</enum> </property> <property name="orientation" > <enum>Qt::Horizontal</enum> </property> </widget> </item> </layout> </widget> <layoutdefault spacing="6" margin="11" /> <customwidgets> <customwidget> <class>c2bComboBox</class> <extends>QComboBox</extends> <header>c2bComboBox.h</header> </customwidget> </customwidgets> <tabstops> <tabstop>comboFind</tabstop> <tabstop>clearB</tabstop> <tabstop>checkWords</tabstop> <tabstop>checkCase</tabstop> <tabstop>radioForward</tabstop> <tabstop>radioBackward</tabstop> </tabstops> <resources> <include location="cb2bib.qrc" /> </resources> <connections> <connection> <sender>clearB</sender> <signal>clicked()</signal> <receiver>comboFind</receiver> <slot>clearEditText()</slot> <hints> <hint type="sourcelabel" > <x>380</x> <y>18</y> </hint> <hint type="destinationlabel" > <x>244</x> <y>28</y> </hint> </hints> </connection> <connection> <sender>buttonBox</sender> <signal>rejected()</signal> <receiver>findDialog</receiver> <slot>reject()</slot> <hints> <hint type="sourcelabel" > <x>125</x> <y>202</y> </hint> <hint type="destinationlabel" > <x>309</x> <y>226</y> </hint> </hints> </connection> <connection> <sender>buttonBox</sender> <signal>accepted()</signal> <receiver>findDialog</receiver> <slot>accept()</slot> <hints> <hint type="sourcelabel" > <x>200</x> <y>202</y> </hint> <hint type="destinationlabel" > <x>211</x> <y>170</y> </hint> </hints> </connection> </connections> </ui> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bColors.h��������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�015113� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.827256419 30 atime=1498583183.007254748 30 ctime=1498583182.827256419 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bColors.h������������������������������������������������������������������������0000644�0001750�0000144�00000002225�13124510216�016506� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCOLORS_H #define C2BCOLORS_H #include <QColor> #include <QHash> class c2bSettings; /** cb2Bib Color Scheme */ class c2bColors { public: c2bColors(); ~c2bColors(); QColor bib_delimiter_color; QColor bib_reference_field_color; QColor bib_reference_type_color; QColor cb2bib_digit_color; QColor cb2bib_highly_relevant_color; QColor cb2bib_metadata_color; QColor cb2bib_relevant_color; QColor cb2bib_tag_color; QColor cb2bib_unrelevant_color; QColor comment_color; QColor netqinf_command_content_color; QColor netqinf_command_key_color; QHash<QString, QColor*> colorList; void loadColors(c2bSettings* settings); void saveColors(c2bSettings* settings); void updateColor(const QColor& color, const QString& colorName); }; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2b.cpp������������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�014264� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.723257384 30 atime=1498583183.007254748 30 ctime=1498583182.723257384 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2b.cpp����������������������������������������������������������������������������0000644�0001750�0000144�00000010617�13124510216�015663� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2b.h" #include "c2bClipboard.h" #include "c2bConfigure.h" #include "dialog.h" #include "ui_proxyDialog.h" #include <QAuthenticator> #include <QMessageBox> #include <QNetworkProxy> #include <QProgressDialog> /** Global resources for the cb2Bib */ c2b::c2b(QWidget* main, QObject* parento) : QObject(parento) { Q_ASSERT_X(!_c2b_single_instance, "c2b", "cb2Bib resources already instantiated"); c2b::_c2b_single_instance = this; _c2b_main = main; if (_c2b_main->inherits("cb2Bib")) { // Create bibliographic parser _c2b_bibparser = new c2bBibParser(this); // Create cb2Bib network _c2b_network = new network(this); connect(_c2b_network, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)), this, SLOT(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*))); connect(_c2b_network, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(updateDownloadProgress(qint64, qint64))); _download_progress = new QProgressDialog(_c2b_main, dialog::flags); _download_progress->setWindowTitle("Downloading..."); _download_progress->reset(); connect(_download_progress, SIGNAL(canceled()), _c2b_network, SLOT(cancelDownload())); // Create cb2Bib network query info _c2b_netqinf = new c2bNetworkQueryInfo(this); // Create cb2Bib metadata parser _c2b_metadataparser = new metadataParser(_c2b_bibparser, this); connect(_c2b_metadataparser, SIGNAL(showMessage(const QString&, const QString&)), this, SLOT(showMessage(const QString&, const QString&))); // Create cb2Bib clipboard _c2b_clipboard = new c2bClipboard(this); _c2b_clipboard->setConnected(true); } else if (_c2b_main->inherits("c2bAnnote")) { // Nothing is needed at present for the c2bAnnote } else Q_ASSERT_X(false, "c2b", "unknown required resources for main"); } c2b::~c2b() { _c2b_single_instance = 0; } c2b* c2b::_c2b_single_instance = 0; void c2b::showMessage(const QString& title, const QString& ms) { QMessageBox::warning(_c2b_main, title, ms, QMessageBox::Ok); } void c2b::configure(int index) { c2bConfigure* c = new c2bConfigure(); if (index > -1) c->setPage(index); if (c->exec() == QDialog::Accepted) showMessage(tr("Configuration was saved.")); else showMessage(tr("Configuration was cancelled.")); delete c; } void c2b::exitRequested() { foreach(QWidget * w, QApplication::topLevelWidgets()) { // So far only editors grant user exit cancellation // Avoid closing other visible widgets until exit is granted if (w->isVisible()) if (w->inherits("c2bEditor")) w->close(); } qApp->processEvents(); foreach(QWidget * widget, QApplication::topLevelWidgets()) { if (widget->isVisible()) if (widget->inherits("c2bEditor")) return; } qApp->closeAllWindows(); qApp->processEvents(); if (!qApp->quitOnLastWindowClosed()) qApp->quit(); } void c2b::updateDownloadProgress(qint64 bytesReceived, qint64 bytesTotal) { if (bytesTotal < 50000) return; if (bytesReceived == bytesTotal) { _download_progress->reset(); return; } _download_progress->setLabelText(tr("Retrieving from %1...").arg(QUrl(_c2b_network->sourceFilename()).host())); _download_progress->setMaximum((int)bytesTotal); _download_progress->setValue((int)bytesReceived); } void c2b::proxyAuthenticationRequired(const QNetworkProxy& proxy, QAuthenticator* auth) { QDialog dialog(_c2b_main, dialog::flags); Ui::proxyDialog proxyDialog; proxyDialog.setupUi(&dialog); dialog.setWindowTitle(tr("Proxy %1 Authentication - cb2Bib").arg(proxy.hostName())); if (dialog.exec() == QDialog::Accepted) { auth->setUser(proxyDialog.userNameLineEdit->text()); auth->setPassword(proxyDialog.passwordLineEdit->text()); } else _c2b_network->cancelDownload(); } �����������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bTextEdit.h������������������������������������������������������0000644�0000000�0000000�00000000130�13124510216�015402� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 mtime=1498583182.87125601 30 atime=1498583183.007254748 29 ctime=1498583182.87125601 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bTextEdit.h����������������������������������������������������������������������0000644�0001750�0000144�00000004775�13124510216�017013� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BTEXTEDIT_H #define C2BTEXTEDIT_H #include <QPlainTextEdit> class c2bSettings; class c2bTextEdit : public QPlainTextEdit { Q_OBJECT public: explicit c2bTextEdit(QWidget* parentw = 0); ~c2bTextEdit(); QAction* convertSelection2LaTeXAction; QAction* convertSelection2UnicodeAction; QAction* journalsToAbbreviatedAction; QAction* journalsToFullAction; QAction* pasteCurrentBibTeXAction; QAction* toggleWordWrappingAction; QAction* updateMetadataAction; void setBibTeXActions(); void setLaTeXActions(); void updatePlainText(const QString& text); inline const QString editorFilename() const { return _editor_filename; } void setEditorFilename(const QString& fn) { _editor_filename = fn; } signals: void overwriteModeChanged(); public slots: void toggleWordWrapping(); protected slots: void convert2LaTeX(); void convert2Unicode(); protected: void contextMenuEvent(QContextMenuEvent* qevent); void keyPressEvent(QKeyEvent* qevent); void resizeEvent(QResizeEvent* qevent); private: QColor _line_number_area_color; QColor* _line_number_color_p; QString _editor_filename; QWidget* _line_number_area; c2bSettings* _settingsP; int lineNumberAreaWidth(); void lineNumberAreaPaintEvent(QPaintEvent* qevent); private slots: void loadSettings(); void updateLineNumberAreaWidth(); void updateLineNumberArea(const QRect& qrect, int dy); friend class LineNumberArea; }; /*************************************************************************** * Line number area (From CodeEditor Qt's example) ***************************************************************************/ class LineNumberArea : public QWidget { public: explicit LineNumberArea(c2bTextEdit* editor) : QWidget(editor) { _editor = editor; } ~LineNumberArea() {} QSize sizeHint() const { return QSize(_editor->lineNumberAreaWidth(), 0); } protected: void paintEvent(QPaintEvent* qevent) { _editor->lineNumberAreaPaintEvent(qevent); } private: c2bTextEdit* _editor; }; #endif ���cb2bib-1.9.7/src/PaxHeaders.3194/c2bRLWebSearchSettings.cpp�����������������������������������������0000644�0000000�0000000�00000000132�13124510216�020027� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.775256901 30 atime=1498583183.007254748 30 ctime=1498583182.775256901 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bRLWebSearchSettings.cpp���������������������������������������������������������0000644�0001750�0000144�00000003021�13124510216�021415� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bRLWebSearchSettings.h" #include "c2bSettings.h" c2bRLWebSearchSettings::c2bRLWebSearchSettings(QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); resize(size().width(), 1); c2bSettings* settings(c2bSettingsP); const QString searchEngine(settings->value("c2bReferenceList/SearchEngine").toString()); ui.searchEngine->addItem(searchEngine); ui.searchEngine->addItem("https://www.google.com/search?ie=UTF-8&q="); ui.searchEngine->addItem("https://scholar.google.com/scholar?ie=UTF-8&q="); ui.searchEngine->addItem("http://www.ncbi.nlm.nih.gov/pubmed?term="); ui.searchEngine->setCurrentIndex(0); ui.searchEngine->setFocus(); ui.addQuotes->setChecked(settings->value("c2bReferenceList/SearchEngineAddQuotes").toBool()); } c2bRLWebSearchSettings::~c2bRLWebSearchSettings() {} void c2bRLWebSearchSettings::accept() { c2bSettings* settings(c2bSettingsP); settings->setValue("c2bReferenceList/SearchEngine", ui.searchEngine->currentText()); settings->setValue("c2bReferenceList/SearchEngineAddQuotes", ui.addQuotes->isChecked()); QDialog::accept(); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bCoreCiter.h�����������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�015531� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.835256344 30 atime=1498583183.007254748 30 ctime=1498583182.835256344 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bCoreCiter.h���������������������������������������������������������������������0000644�0001750�0000144�00000001564�13124510216�017131� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BCORECITER_H #define C2BCORECITER_H #include <QObject> #include <QWidget> class settings; class c2bCoreCiter : public QObject { Q_OBJECT public: explicit c2bCoreCiter(QWidget* parentw = 0); ~c2bCoreCiter(); void cite(const QStringList& keys) const; void citeToClipboard(const QStringList& keys) const; void citeToLyXPipe(const QStringList& keys) const; public slots: void setLyXPipe(); private: QString _lyxpipe; QWidget* _parentWP; settings* _settingsP; }; #endif ��������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/xml����������������������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�013637� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 29 ctime=1498583182.67525783 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/xml/�������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�13124510115�015302� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/xml/PaxHeaders.3194/ExifTool_config������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�016715� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 29 ctime=1498583182.67525783 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/xml/ExifTool_config����������������������������������������������������������������0000644�0001750�0000144�00000001760�13124510115�020307� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%Image::ExifTool::UserDefined::BibTeX = ( GROUPS => { 0 => 'XMP', 1 => 'XMP-bibtex', 2 => 'Reference' }, NAMESPACE => { 'bibtex' => 'http://www.molspaces.com/cb2bib' }, WRITABLE => 'string', type => { }, abstract => { }, address => { }, annote => { }, author => { }, booktitle => { }, chapter => { }, doi => { }, edition => { }, editor => { }, eprint => { }, file => { }, institution => { }, isbn => { }, issn => { }, journal => { }, keywords => { }, month => { }, note => { }, number => { }, organization => { }, pages => { }, publisher => { }, school => { }, series => { }, title => { }, url => { }, volume => { }, year => { }, ); %Image::ExifTool::UserDefined = ( 'Image::ExifTool::XMP::Main' => { bibtex => { SubDirectory => { TagTable => 'Image::ExifTool::UserDefined::BibTeX', }, }, }, ); 1; ����������������cb2bib-1.9.7/src/xml/PaxHeaders.3194/cb2bib.xmp�����������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�015565� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 29 ctime=1498583182.67525783 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/xml/cb2bib.xmp���������������������������������������������������������������������0000644�0001750�0000144�00000000726�13124510115�017160� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='cb2Bib'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:bibtex='http://www.molspaces.com/cb2bib'> GET_BIBTEX_TAGS</rdf:Description> <rdf:Description rdf:about='' xmlns:pdf='http://ns.adobe.com/pdf/1.3/'> <pdf:Author>GET_FORMATTED_AUTHOR</pdf:Author> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?> ������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bLineEdit.h������������������������������������������������������0000644�0000000�0000000�00000000131�13124510216�015346� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 mtime=1498583182.84325627 30 atime=1498583183.007254748 30 ctime=1498583182.847256233 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bLineEdit.h����������������������������������������������������������������������0000644�0001750�0000144�00000001172�13124510216�016742� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BLINEEDIT_H #define C2BLINEEDIT_H #include <QLineEdit> class c2bLineEdit : public QLineEdit { Q_OBJECT public: explicit c2bLineEdit(QWidget* parentw = 0); ~c2bLineEdit(); protected: virtual void contextMenuEvent(QContextMenuEvent* e); }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bPostprocess.h���������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016176� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.851256196 30 atime=1498583183.007254748 30 ctime=1498583182.855256159 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bPostprocess.h�������������������������������������������������������������������0000644�0001750�0000144�00000001732�13124510216�017573� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BPOSTPROCESS_H #define C2BPOSTPROCESS_H #include "ui_c2bLogWidget.h" #include <QDialog> class QProcess; class c2bPostprocess : public QDialog { Q_OBJECT public: c2bPostprocess(const QString& fn, QWidget* parentw = 0); ~c2bPostprocess(); protected: void PProcessFile(); void addToLog(); protected slots: void conversionEnded(); void help(); void openFile(); private: QProcess* _ppBibTeX; QPushButton* _buttonOpenFile; QString PPBIBTEX_ARG; QString PPBIBTEX_BIN; QString PPBIBTEX_EXT; QString _bib; QString _out; Ui::c2bLogWidget ui; }; #endif ��������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bCiterHistory.cpp������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016635� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.731257309 30 atime=1498583183.007254748 30 ctime=1498583182.731257309 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bCiterHistory.cpp����������������������������������������������������������������0000644�0001750�0000144�00000003534�13124510216�020234� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bCiterHistory.h" static const int _maximum_history_states(35); c2bCiterHistory::c2bCiterHistory() { _last_citation_format = c2bCiter::AJYT; _index.resize(_maximum_history_states); _states.resize(_maximum_history_states); clear(); } void c2bCiterHistory::clear() { _last_citation = 0; _last_keyword = 0; _last_selection_citation = 0; _last_nonkeyword_state = c2bCiter::State(); _last_nonselected_state = c2bCiter::State(); _cstate = -1; _nstates = -1; for (int i = 0; i < _maximum_history_states; ++i) _index[i] = i; } void c2bCiterHistory::saveCurrentState(const c2bCiter::Format format, const c2bCiter::Filter filter, const int iindex, const int vindex, const QString fstring) { if (_cstate != -1) _nstates = _cstate - 1; _cstate = -1; const c2bCiter::State s(format, filter, vindex, fstring); if (_nstates > -1 && s == _states[_index[_nstates]]) return; if (++_nstates >= _maximum_history_states) { // Move, e.g., 0 1 2 3 4 to 1 2 3 4 0 const int oldest(_index[0]); for (int i = 0; i < _maximum_history_states - 1; ++i) _index[i] = _index[i+1]; _index[--_nstates] = oldest; } _states[_index[_nstates]] = s; if (format != c2bCiter::K) { _last_nonkeyword_state = s; if (filter != c2bCiter::Selected) _last_nonselected_state = s; } saveCurrentItemIndex(format, filter, iindex); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bSearchInFiles.cpp�����������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016664� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.779256864 30 atime=1498583183.007254748 30 ctime=1498583182.783256826 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bSearchInFiles.cpp���������������������������������������������������������������0000644�0001750�0000144�00000016616�13124510216�020270� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bSearchInFiles.h" #include "c2b.h" #include "c2bUtils.h" #include <bibSearcher.h> #include <QFileInfo> #include <QTime> c2bSearchInFiles::c2bSearchInFiles(const QString& file, QWidget* parentw) : QDialog(parentw) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); // Set blank title to columns 0 and 4. Qt 4.4.0 needs it, otherwise it takes column number as default title. // Recheck whenever ui files are generated for 4.4 instead of current 4.2. ui.patternList->headerItem()->setText(0, QApplication::translate("c2bSearchInFiles", "", 0)); ui.patternList->headerItem()->setText(4, QApplication::translate("c2bSearchInFiles", "", 0)); for (int i = 0; i < ITEMS_IN_SEARCH_PATTERN; ++i) ui.patternList->resizeColumnToContents(i); ui.buttonBox->button(QDialogButtonBox::Abort)->setAutoDefault(false); ui.buttonBox->button(QDialogButtonBox::Abort)->setDefault(false); ui.buttonBox->button(QDialogButtonBox::Abort)->setEnabled(false); ui.buttonBox->button(QDialogButtonBox::Close)->setAutoDefault(false); ui.buttonBox->button(QDialogButtonBox::Close)->setDefault(false); _searchB = new QPushButton(tr("Search")); ui.buttonBox->addButton(_searchB, QDialogButtonBox::ActionRole); _searchB->setAutoDefault(true); _searchB->setDefault(true); _searchB->setEnabled(false); _bibtex_file.clear(); _bibtex_dir.clear(); setBibTeXFile(file); connect(_searchB, SIGNAL(clicked()), this, SLOT(searchB_clicked())); connect(ui.allBibFiles, SIGNAL(clicked()), this, SLOT(setBibTeXFile())); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); connect(ui.pattern, SIGNAL(patternAvailable(bool)), this, SLOT(updateForm())); connect(ui.patternList, SIGNAL(itemActivated(QTreeWidgetItem*, int)), this, SLOT(on_editPatternB_clicked())); connect(ui.patternList, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(updateForm())); } c2bSearchInFiles::~c2bSearchInFiles() {} void c2bSearchInFiles::updateForm() { ui.addPatternB->setEnabled(ui.pattern->isAvailable()); ui.Boolean->setEnabled((ui.patternList->topLevelItemCount() > 1) || (ui.pattern->isAvailable() && ui.patternList->topLevelItemCount() > 0)); _searchB->setEnabled(!_bibtex_dir.isEmpty() && (ui.pattern->isAvailable() || ui.patternList->topLevelItemCount() > 0)); if (ui.patternList->currentItem()) { ui.deletePatternB->setEnabled(true); ui.editPatternB->setEnabled(true); } else { ui.deletePatternB->setEnabled(false); ui.editPatternB->setEnabled(false); } ui.searchLog->setText(_search_log); } void c2bSearchInFiles::on_addPatternB_clicked() { new QTreeWidgetItem(ui.patternList, ui.pattern->patterns()); for (int i = 0; i < ITEMS_IN_SEARCH_PATTERN; ++i) ui.patternList->resizeColumnToContents(i); ui.pattern->clear(); updateForm(); } void c2bSearchInFiles::on_deletePatternB_clicked() { QTreeWidgetItem* item = ui.patternList->currentItem(); delete item; item = ui.patternList->currentItem(); if (item) ui.patternList->currentItem()->setSelected(true); updateForm(); } void c2bSearchInFiles::on_editPatternB_clicked() { QDialog editor(this); ui_editor.setupUi(&editor); QTreeWidgetItem* item = ui.patternList->currentItem(); ui_editor.pattern->setPattern(item); connect(ui_editor.pattern, SIGNAL(patternAvailable(bool)), ui_editor.buttonBox->button(QDialogButtonBox::Ok), SLOT(setEnabled(bool))); if (editor.exec() == QDialog::Accepted) { const QStringList pattern(ui_editor.pattern->patterns()); for (int i = 0; i < ITEMS_IN_SEARCH_PATTERN; ++i) item->setText(i, pattern.at(i)); for (int i = 0; i < ITEMS_IN_SEARCH_PATTERN; ++i) ui.patternList->resizeColumnToContents(i); } } void c2bSearchInFiles::searchB_clicked() { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); _searchB->setEnabled(false); ui.buttonBox->button(QDialogButtonBox::Abort)->setEnabled(true); ui.searchLog->setText(_search_log); bibSearcher searcher(c2b::bibParser()); connect(ui.buttonBox->button(QDialogButtonBox::Abort), SIGNAL(clicked()), &searcher, SLOT(abort())); searcher.setSearchScope(_bibtex_file, _bibtex_dir, ui.allBibFiles->isChecked(), ui.documentFiles->isChecked()); searcher.setSimplifySource(ui.simplifySource->isChecked()); searcher.setBoolean(ui.Boolean->currentText() == "All"); if (ui.addPatternB->isEnabled()) { const QStringList p(ui.pattern->patterns()); searcher.addPattern(p.at(0) == "NOT", p.at(1) == "Sensitive", p.at(2), p.at(3), p.at(4).at(0), p.at(5)); } QTreeWidgetItemIterator it(ui.patternList); while (*it) { QStringList p; for (int i = 0; i < ITEMS_IN_SEARCH_PATTERN; ++i) p.append((*it)->text(i)); searcher.addPattern(p.at(0) == "NOT", p.at(1) == "Sensitive", p.at(2), p.at(3), p.at(4).at(0), p.at(5)); ++it; } if (searcher.patternsCount() == 0) return; QTime t; t.start(); searcher.exec(); QString search_status; if (searcher.hitsCount() > 0 || searcher.errorsCount() > 0) { if (searcher.hitsCount() > 0) search_status = tr("Found %1 hits from %2 references (%3s)") .arg(searcher.hitsCount()).arg(searcher.referencesCount()).arg(t.elapsed() / 1000.0); else ui.searchLog->setText(_search_log); QApplication::processEvents(); emit searchDone(_bibtex_dir, &searcher); } else if (searcher.errorsCount() < 0) search_status = tr("Search aborted"); else search_status = tr("No reference found (%1s)").arg(t.elapsed() / 1000.0); if (!search_status.isEmpty()) { ui.searchLog->setText(search_status); c2b::showMessage(search_status); } ui.buttonBox->button(QDialogButtonBox::Abort)->setEnabled(false); _searchB->setEnabled(true); QApplication::restoreOverrideCursor(); } void c2bSearchInFiles::setBibTeXFile(const QString& file) { if (!file.isEmpty()) { QFileInfo fi(file); QDir d(fi.absolutePath()); if (d.exists()) { _bibtex_file = fi.absoluteFilePath(); _bibtex_dir = fi.absolutePath(); } else _bibtex_dir.clear(); } if (_bibtex_dir.isEmpty()) _search_log = tr("No existing file or directory set for searching"); else if (ui.allBibFiles->isChecked()) _search_log = tr("Search in files at %1").arg(_bibtex_dir); else _search_log = tr("Search in file %1").arg(_bibtex_file); updateForm(); } void c2bSearchInFiles::setCurrentText(const QString& text) { if (text.isEmpty()) return; ui.pattern->setText(text); updateForm(); } void c2bSearchInFiles::show() { c2bUtils::setWidgetOnTop(this); ui.pattern->setFocus(); QDialog::show(); } void c2bSearchInFiles::help() { c2bUtils::displayHelp("http://www.molspaces.com/d_cb2bib-c2bsearch.php"); } ������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bAnnote.cpp������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�015431� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.723257384 30 atime=1498583183.007254748 30 ctime=1498583182.723257384 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bAnnote.cpp����������������������������������������������������������������������0000644�0001750�0000144�00000012064�13124510216�017026� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bAnnote.h" #include "c2b.h" #include "c2bFileSystemWatcher.h" #include "c2bSettings.h" #include "c2bUtils.h" #include "c2bWebBrowser.h" #include <texToHtml.h> #include <QLabel> #include <QMessageBox> #include <QShortcut> #include <QStatusBar> c2bAnnote::c2bAnnote(QWidget* parentw) : QMainWindow(parentw) { _view_port = new c2bWebBrowser(this); setCentralWidget(_view_port); QLabel* informationLabel = new QLabel(this); statusBar()->addWidget(informationLabel, 1); connect(_view_port, SIGNAL(titleChanged(const QString&)), this, SLOT(setWindowTitle(const QString&))); connect(_view_port, SIGNAL(statusMessage(const QString&)), this, SLOT(showMessage(const QString&))); // Creating cb2Bib global resources c2b* c2b_resources = new c2b(this, this); connect(c2b_resources, SIGNAL(statusMessage(const QString&)), this, SLOT(showMessage(const QString&))); QAction* act = new QAction(QIcon(QString::fromUtf8(":/icons/icons/edit.png")), tr("Edit Note"), this); act->setShortcut(QKeySequence(Qt::Key_E)); act->setStatusTip(tr("Edit TeX note")); c2bUtils::addSeparator(_view_port); _view_port->addAction(act); connect(act, SIGNAL(triggered()), this, SLOT(edit())); act = new QAction(QIcon(QString::fromUtf8(":/icons/icons/configure.png")), tr("Configure"), this); act->setShortcut(QKeySequence(Qt::Key_C)); act->setStatusTip(tr("Configure cb2Bib Annote")); c2bUtils::addSeparator(_view_port); _view_port->addAction(act); connect(act, SIGNAL(triggered()), this, SLOT(configure())); _settingsP = c2bSettingsP; resize(_settingsP->value("c2bAnnote/size", size()).toSize()); move(_settingsP->value("c2bAnnote/position", pos()).toPoint()); loadSettings(); connect(_settingsP, SIGNAL(newSettings()), this, SLOT(loadSettings())); _t2h = new texToHtml; _fsw = new c2bFileSystemWatcher(this); connect(_fsw, SIGNAL(fileChanged(const QString&)), this, SLOT(annote())); disconnect(_view_port->viewReloadAction, 0, 0, 0); connect(_view_port->viewReloadAction, SIGNAL(triggered()), this, SLOT(update())); QShortcut* help_shortcut = new QShortcut(QKeySequence(QKeySequence::HelpContents), this); connect(help_shortcut, SIGNAL(activated()), this, SLOT(help())); } c2bAnnote::~c2bAnnote() { delete _t2h; _settingsP->setValue("c2bAnnote/position", pos()); _settingsP->setValue("c2bAnnote/size", size()); } bool c2bAnnote::show() { _annote_filename = QDir::cleanPath(_settingsP->cl_annote_filename); const bool is_html = _annote_filename.endsWith(".html"); if (is_html) _annote_filename.remove(QRegExp("\\.html$")); if (!QFileInfo(_annote_filename).exists()) { QMessageBox::warning(this, tr("Warning - cb2Bib"), tr("Unable to open the file %1 for reading.\nError: '%2'."). arg(QDir::toNativeSeparators(_annote_filename)).arg("File does not exist"), QMessageBox::Ok); return false; } _html_filename = _annote_filename + ".html"; if (!is_html || !QFileInfo(_html_filename).exists()) _t2h->toHtml(c2bUtils::fileToString(_annote_filename), _html_filename); _view_port->setHomePage(_html_filename); _fsw->addPath(_annote_filename); QMainWindow::show(); return true; } void c2bAnnote::annote() { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); _t2h->toHtml(c2bUtils::fileToString(_annote_filename), _html_filename); if (_html_filename == QDir::cleanPath(_view_port->url().toLocalFile())) _view_port->reload(); QApplication::restoreOverrideCursor(); } void c2bAnnote::update() { if (_html_filename == QDir::cleanPath(_view_port->url().toLocalFile())) annote(); else _view_port->reload(); } void c2bAnnote::edit() { c2bUtils::openFile(_annote_filename, this); } void c2bAnnote::configure() { // Attention: Currently c2bAnnote is page 0. Update here if c2bConfigure changes page ordering. c2b::configure(0); } void c2bAnnote::setWindowTitle(const QString& title) { if (title.isEmpty()) QMainWindow::setWindowTitle("Annote - cb2Bib"); else QMainWindow::setWindowTitle(title + " - cb2Bib"); if (title == "New Note") showMessage(tr("Press E to Edit and %1 for Help.").arg(QKeySequence(QKeySequence::HelpContents).toString())); } void c2bAnnote::showMessage(const QString& ms) { statusBar()->showMessage(ms, C2B_MESSAGE_TIME); } void c2bAnnote::loadSettings() { _view_port->setFont(_settingsP->value("c2bAnnote/Font").value<QFont>()); _view_port->setFixedFont(_settingsP->value("c2bAnnote/FixedFont").value<QFont>()); } void c2bAnnote::help() { c2bUtils::displayHelp("http://www.molspaces.com/cb2bib/annote.tex.html"); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bShortcutPushButton.cpp������������������������������������������0000644�0000000�0000000�00000000131�13124510216�020053� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.783256826 30 atime=1498583183.007254748 29 ctime=1498583182.78725679 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bShortcutPushButton.cpp����������������������������������������������������������0000644�0001750�0000144�00000003017�13124510216�021447� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bShortcutPushButton.h" #include <QKeyEvent> void c2bShortcutPushButton::setKeysequence(const QKeySequence& ks) { _keysequence = ks; const QString bt(_keysequence.toString(QKeySequence::NativeText)); setText(bt.isEmpty() ? tr("None") : bt); setChecked(false); } void c2bShortcutPushButton::clear() { _set_keysequence(QKeySequence()); } void c2bShortcutPushButton::reset() { _set_keysequence(_default_keysequence); } void c2bShortcutPushButton::keyPressEvent(QKeyEvent* qevent) { const int k(qevent->key()); // This function is based on GPL configdialog.cpp // Copyright (C) 2003-2007 by Pascal Brachet, http://www.xm1math.net/texmaker/ if ((qevent->modifiers() != 0 && k != Qt::Key_Enter && k != Qt::Key_Alt && k != Qt::Key_Shift && k != Qt::Key_Control && k != Qt::Key_AltGr && k != Qt::Key_Meta && k != 0 && k != Qt::Key_Super_L && k != Qt::Key_Super_R) || (k >= Qt::Key_F1 && k <= Qt::Key_F35)) { _set_keysequence(QKeySequence(qevent->modifiers() | k)); return; } QPushButton::keyPressEvent(qevent); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bSaveREHighlighter.h���������������������������������������������0000644�0000000�0000000�00000000132�13124510216�017156� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.859256122 30 atime=1498583183.007254748 30 ctime=1498583182.859256122 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bSaveREHighlighter.h�������������������������������������������������������������0000644�0001750�0000144�00000001520�13124510216�020546� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BSAVEREHIGHLIGHTER_H #define C2BSAVEREHIGHLIGHTER_H #include <QSyntaxHighlighter> /** Save RegExp SyntaxHighLighter @author Pere Constans */ class c2bColors; class c2bSaveREHighlighter : public QSyntaxHighlighter { public: c2bSaveREHighlighter(QRegExp& rx, QTextDocument* doc); ~c2bSaveREHighlighter(); protected: virtual void highlightBlock(const QString& text); private: QColor text_color; QRegExp& _current_rx; c2bColors* c; }; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bUtils.h���������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�014752� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.875255973 30 atime=1498583183.007254748 30 ctime=1498583182.875255973 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bUtils.h�������������������������������������������������������������������������0000644�0001750�0000144�00000003643�13124510216�016352� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BUTILS_H #define C2BUTILS_H #include <cb2bib_utilities.h> #include "dialog.h" #include <QAction> #include <QTextDocument> #include <QUrl> /** General cb2Bib Utils: GUI related utilities */ namespace c2bUtils { extern bool openFile(const QString& fn, QWidget* w = 0); inline void displayHelp(const QString& url) { openFile(url); } inline QUrl stringToUrl(const QString& fn) { // Avoid cross-platform pitfalls regarding string to url conversions // Avoid possible issues regarding QUrl and local files not starting with 'file://' if (QFileInfo(fn).exists()) return QUrl::fromLocalFile(fn); else return QUrl(fn, QUrl::TolerantMode); } inline QString fromHtmlString(const QString& str, const bool addMetadata = false) { QTextDocument converter; converter.setHtml(str); if (addMetadata) { const QString md(converter.metaInformation(QTextDocument::DocumentTitle).trimmed()); if (md.isEmpty()) return converter.toPlainText(); else return "Document Title: " + md + "\n\n" + converter.toPlainText(); } else return converter.toPlainText(); } inline void addSeparator(QWidget* w) { // Adds separator to widget w QAction* action = new QAction(w); action->setSeparator(true); w->addAction(action); } inline void setWidgetOnTop(QWidget* w) { if (w) { if (w->isHidden()) w->show(); if (w->isMinimized()) w->showNormal(); w->raise(); w->activateWindow(); } } } // namespace c2bUtils #endif ���������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bSaveREHighlighter.cpp�������������������������������������������0000644�0000000�0000000�00000000132�13124510216�017511� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.779256864 30 atime=1498583183.007254748 30 ctime=1498583182.779256864 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bSaveREHighlighter.cpp�����������������������������������������������������������0000644�0001750�0000144�00000002701�13124510216�021103� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bSaveREHighlighter.h" #include "c2bSettings.h" #include <QPalette> #include <QTextDocument> c2bSaveREHighlighter::c2bSaveREHighlighter(QRegExp& rx, QTextDocument* doc) : QSyntaxHighlighter(doc), _current_rx(rx) { QPalette p; text_color = p.text().color(); c2bSettings* settings(c2bSettingsP); c = &settings->colors; connect(settings, SIGNAL(newSettings()), this, SLOT(rehighlight())); } c2bSaveREHighlighter::~c2bSaveREHighlighter() {} void c2bSaveREHighlighter::highlightBlock(const QString& text) { const int len(text.length()); const int ind(_current_rx.indexIn(text)); const int caps(_current_rx.capturedTexts().count()); if (ind == -1 || caps <= 1) setFormat(0, len, text_color); else { setFormat(0, len, c->cb2bib_unrelevant_color); for (int i = 1; i < caps; i = i + 2) setFormat(_current_rx.pos(i), _current_rx.cap(i).length(), c->cb2bib_highly_relevant_color); for (int i = 2; i < caps; i = i + 2) setFormat(_current_rx.pos(i), _current_rx.cap(i).length(), c->cb2bib_relevant_color); } } ���������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bExportDialog.h��������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016253� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.839256308 30 atime=1498583183.007254748 30 ctime=1498583182.839256308 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bExportDialog.h������������������������������������������������������������������0000644�0001750�0000144�00000002005�13124510216�017642� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BEXPORTDIALOG_H #define C2BEXPORTDIALOG_H #include "c2bExport.h" #include "ui_c2bExportDialog.h" #include <QDialog> class c2bSettings; class c2bExportDialog : public QDialog { Q_OBJECT public: c2bExportDialog(const QString& fn, const QString& contents, const QStringList& keys, QWidget* parentw = 0); ~c2bExportDialog(); inline const QString exportFilename() const { return ui.ExportFile->text(); } private: Ui::c2bExportDialog ui; c2bExport::export_data _ed; c2bSettings* settings; private slots: void _export(); void getDocumentsDirectory(); void getExportFile(); void help(); }; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bTextBrowser.h���������������������������������������������������0000644�0000000�0000000�00000000130�13124510216�016140� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 mtime=1498583182.87125601 30 atime=1498583183.007254748 29 ctime=1498583182.87125601 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bTextBrowser.h�������������������������������������������������������������������0000644�0001750�0000144�00000001462�13124510216�017537� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BTEXTBROWSER_H #define C2BTEXTBROWSER_H #include <QTextBrowser> class QAction; /** @author Pere Constans */ class c2bTextBrowser : public QTextBrowser { Q_OBJECT public: explicit c2bTextBrowser(QWidget* parentw = 0); ~c2bTextBrowser(); void updateHtml(const QString& newHtml); public slots: virtual void setSource(const QUrl& name); protected: virtual void contextMenuEvent(QContextMenuEvent* qevent); }; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/clipboardPoll.cpp��������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016404� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.799256679 30 atime=1498583183.007254748 30 ctime=1498583182.799256679 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/clipboardPoll.cpp������������������������������������������������������������������0000644�0001750�0000144�00000017010�13124510216�017775� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * clipboardPoll, modified by Pere Constans for the cb2Bib, 2005 * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * * * Author and Copyright (C) 2003 by Lubos Lunak <l.lunak@kde.org> * Distributed under the GNU General Public License * * * This file is part of the KDE project * Copyright (C) 2003 by Lubos Lunak <l.lunak@kde.org> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. ***************************************************************************/ #include "clipboardPoll.h" #include <QX11Info> #include <QClipboard> #include <X11/Xatom.h> /* The polling magic: There's no way with X11 how to find out if the selection has changed (unless its ownership is taken away from the current client). In the future, there will be hopefully such notification, which will make this whole file more or less obsolete. But for now, Klipper has to poll. In order to avoid transferring all the data on every time pulse, this file implements two optimizations: The first one is checking whether the selection owner is Qt application (using the _QT_SELECTION/CLIPBOARD_SENTINEL atoms on the root window of screen 0), and if yes, Klipper can rely on QClipboard's signals. If the owner is not Qt app, and the ownership has changed, it means the selection has changed as well. Otherwise, first only the timestamp of the last selection change is requested using the TIMESTAMP selection target, and if it's the same, it's assumed the contents haven't changed. Note that some applications (like XEmacs) does not provide this information, so Klipper has to assume that the clipboard might have changed in this case --- this is what is meant by REFUSED below. */ clipboardPoll::clipboardPoll(QWidget* parentw) : QWidget(parentw) { // kapp->installX11EventFilter( this ); timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(timeout())); const char* names[ 6 ] = { "_QT_SELECTION_SENTINEL", "_QT_CLIPBOARD_SENTINEL", "CLIPBOARD", "TIMESTAMP", "KLIPPER_SELECTION_TIMESTAMP", "KLIPPER_CLIPBOARD_TIMESTAMP" }; Atom atoms[ 6 ]; XInternAtoms(QX11Info::display(), const_cast< char** >(names), 6, False, atoms); selection.sentinel_atom = atoms[ 0 ]; clipboard.sentinel_atom = atoms[ 1 ]; xa_clipboard = atoms[ 2 ]; xa_timestamp = atoms[ 3 ]; selection.timestamp_atom = atoms[ 4 ]; clipboard.timestamp_atom = atoms[ 5 ]; selection.atom = XA_PRIMARY; clipboard.atom = xa_clipboard; selection.last_change = clipboard.last_change = QX11Info::appTime(); // don't trigger right after startup selection.last_owner = XGetSelectionOwner(QX11Info::display(), XA_PRIMARY); clipboard.last_owner = XGetSelectionOwner(QX11Info::display(), xa_clipboard); selection.waiting_for_timestamp = false; clipboard.waiting_for_timestamp = false; updateQtOwnership(selection); updateQtOwnership(clipboard); } clipboardPoll::~clipboardPoll() { delete timer; } bool clipboardPoll::x11Event(XEvent* e) { // note that this is also installed as app-wide filter if (e->type == SelectionNotify && e->xselection.requestor == winId()) { if (changedTimestamp(selection, *e)) { emit clipboardChanged(true); } if (changedTimestamp(clipboard, *e)) { emit clipboardChanged(false); } return true; // filter out } return false; } void clipboardPoll::updateQtOwnership(SelectionData& sData) { Atom type; int format; unsigned long nitems; unsigned long after; unsigned char* prop = NULL; if (XGetWindowProperty(QX11Info::display(), QX11Info::appRootWindow(0), sData.sentinel_atom, 0, 2, False, XA_WINDOW, &type, &format, &nitems, &after, &prop) != Success || type != XA_WINDOW || format != 32 || nitems != 2 || prop == NULL) { sData.owner_is_qt = false; if (prop != NULL) XFree(prop); return; } Window owner = reinterpret_cast< long* >(prop)[ 0 ]; // [0] is new owner, [1] is previous XFree(prop); Window current_owner = XGetSelectionOwner(QX11Info::display(), sData.atom); sData.owner_is_qt = (owner == current_owner); } void clipboardPoll::timeout() { // KlipperWidget::updateTimestamp(); if (!qApp->clipboard()->ownsSelection() && checkTimestamp(selection)) { emit clipboardChanged(true); } if (!qApp->clipboard()->ownsClipboard() && checkTimestamp(clipboard)) { emit clipboardChanged(false); } } bool clipboardPoll::checkTimestamp(SelectionData& sData) { Window current_owner = XGetSelectionOwner(QX11Info::display(), sData.atom); updateQtOwnership(sData); if (sData.owner_is_qt) { sData.last_change = CurrentTime; sData.last_owner = current_owner; sData.waiting_for_timestamp = false; return false; } if (current_owner != sData.last_owner) // owner has changed { sData.last_owner = current_owner; sData.waiting_for_timestamp = false; sData.last_change = CurrentTime; return true; } if (current_owner == None) { return false; // None also last_owner... } if (sData.waiting_for_timestamp) { // We're already waiting for the timestamp of the last check return false; } XDeleteProperty(QX11Info::display(), winId(), sData.timestamp_atom); XConvertSelection(QX11Info::display(), sData.atom, xa_timestamp, sData.timestamp_atom, winId(), QX11Info::appTime()); sData.waiting_for_timestamp = true; sData.waiting_x_time = QX11Info::appTime(); return false; } bool clipboardPoll::changedTimestamp(SelectionData& sData, const XEvent& ev) { if (ev.xselection.requestor != winId() || ev.xselection.selection != sData.atom || ev.xselection.time != sData.waiting_x_time) { return false; } sData.waiting_for_timestamp = false; if (ev.xselection.property == None) { return true; } Atom type; int format; unsigned long nitems; unsigned long after; unsigned char* prop = NULL; if (XGetWindowProperty(QX11Info::display(), winId(), ev.xselection.property, 0, 1, False, AnyPropertyType, &type, &format, &nitems, &after, &prop) != Success || format != 32 || nitems != 1 || prop == NULL) { if (prop != NULL) XFree(prop); return true; } Time timestamp = reinterpret_cast< long* >(prop)[ 0 ]; XFree(prop); if (timestamp != sData.last_change || timestamp == CurrentTime) { sData.last_change = timestamp; return true; } return false; // ok, same timestamp } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bBibMenu.h�������������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�015173� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.807256604 30 atime=1498583183.007254748 30 ctime=1498583182.811256566 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bBibMenu.h�����������������������������������������������������������������������0000644�0001750�0000144�00000003760�13124510216�016573� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BBIBMENU_H #define C2BBIBMENU_H #include <QMenu> class c2bBibMenu : public QMenu { Q_OBJECT public: explicit c2bBibMenu(QWidget* parentw = 0); inline ~c2bBibMenu() {} inline QAction* addAuthorAction() const { return _add_author_action; } inline QAction* addEditorAction() const { return _add_editor_action; } inline QAction* anyPatternAction() const { return _any_pattern_action; } inline void setAnyPatternText(const QString& text) { _any_pattern_action->setText(text); } QAction* exec(const QPoint& p); protected: void keyPressEvent(QKeyEvent* qevent); private: QAction* _abstract_action; QAction* _add_author_action; QAction* _add_editor_action; QAction* _address_action; QAction* _annote_action; QAction* _any_pattern_action; QAction* _author_action; QAction* _booktitle_action; QAction* _chapter_action; QAction* _doi_action; QAction* _edition_action; QAction* _editor_action; QAction* _eprint_action; QAction* _file_action; QAction* _institution_action; QAction* _isbn_action; QAction* _issn_action; QAction* _journal_action; QAction* _keyboard_selection; QAction* _keywords_action; QAction* _month_action; QAction* _note_action; QAction* _number_action; QAction* _organization_action; QAction* _pages_action; QAction* _publisher_action; QAction* _school_action; QAction* _series_action; QAction* _title_action; QAction* _url_action; QAction* _volume_action; QAction* _year_action; bool _was_plus_pressed; }; #endif ����������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bShortcutPushButton.h��������������������������������������������0000644�0000000�0000000�00000000132�13124510216�017521� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.867256048 30 atime=1498583183.007254748 30 ctime=1498583182.867256048 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bShortcutPushButton.h������������������������������������������������������������0000644�0001750�0000144�00000002534�13124510216�021117� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BSHORTCUTPUSHBUTTON_H #define C2BSHORTCUTPUSHBUTTON_H #include <QPushButton> class c2bShortcutPushButton : public QPushButton { Q_OBJECT public: explicit inline c2bShortcutPushButton(QWidget* parentw = 0) : QPushButton(parentw) {} inline ~c2bShortcutPushButton() {} void setKeysequence(const QKeySequence& ks); void setDefaultKeysequence(const QKeySequence& ks) { _default_keysequence = ks; } inline QKeySequence keysequence() const { return _keysequence; } signals: void shortcutChanged(const QKeySequence& oldks, const QKeySequence& newks); public slots: void clear(); void reset(); protected: virtual void keyPressEvent(QKeyEvent* qevent); private: inline void _set_keysequence(const QKeySequence& ks) { const QKeySequence oldks(_keysequence); setKeysequence(ks); emit shortcutChanged(oldks, ks); } QKeySequence _default_keysequence; QKeySequence _keysequence; }; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bShortcutWidget.h������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016631� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.867256048 30 atime=1498583183.007254748 30 ctime=1498583182.867256048 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bShortcutWidget.h����������������������������������������������������������������0000644�0001750�0000144�00000002441�13124510216�020224� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BSHORTCUTWIDGET_H #define C2BSHORTCUTWIDGET_H #include "ui_c2bShortcutWidget.h" #include <QHash> #include <QWidget> class c2bSettings; class c2bShortcutWidget : public QWidget { Q_OBJECT public: explicit c2bShortcutWidget(QWidget* parentw = 0); inline ~c2bShortcutWidget() {} void setShortcutNames(const QString& path, const QStringList& fullnames); inline const QHash<QString, QKeySequence>& modifiedKeysequences() const { return _modified_keysequences; } signals: void statusMessage(const QString& ms); private slots: void currentIndexChanged(const QString& name); void shortcutChanged(const QKeySequence& oldks, const QKeySequence& newks); private: QHash<QString, QKeySequence> _modified_keysequences; QList<QKeySequence> _standard_keysequences; QString _shortcut_path; QStringList _fullnames; Ui::c2bShortcutWidget ui; c2bSettings* _settingsP; }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/cb2bib.qrc���������������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�014746� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 29 ctime=1498583182.64725809 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/cb2bib.qrc�������������������������������������������������������������������������0000644�0001750�0000144�00000005131�13124510115�016334� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<RCC> <qresource prefix="/icons" > <file>icons/add.png</file> <file>icons/annote.png</file> <file>icons/application-x-executable.png</file> <file>icons/application-x-html.png</file> <file>icons/application-x-none.png</file> <file>icons/application-x-pdf.png</file> <file>icons/application-x-tex.png</file> <file>icons/application-x-txt.png</file> <file>icons/back_cb2bib_32.png</file> <file>icons/bullet.png</file> <file>icons/cb2bib.png</file> <file>icons/citer_citation.png</file> <file>icons/citer_citation_checked.png</file> <file>icons/clear_left.png</file> <file>icons/clipboard.png</file> <file>icons/configure.png</file> <file>icons/configure_bibtex.png</file> <file>icons/configure_clipboard.png</file> <file>icons/configure_documents.png</file> <file>icons/configure_files.png</file> <file>icons/configure_fonts.png</file> <file>icons/configure_network.png</file> <file>icons/configure_shortcuts.png</file> <file>icons/configure_utilities.png</file> <file>icons/connect_established.png</file> <file>icons/connect_no.png</file> <file>icons/edit-undo.png</file> <file>icons/edit.png</file> <file>icons/edit16.png</file> <file>icons/edit22.png</file> <file>icons/exec22.png</file> <file>icons/exit.png</file> <file>icons/fileclose22.png</file> <file>icons/fileopen22.png</file> <file>icons/filesave22.png</file> <file>icons/filesaveas22.png</file> <file>icons/filesaveas.png</file> <file>icons/filter.png</file> <file>icons/help16.png</file> <file>icons/mimeFolder.png</file> <file>icons/package_network.png</file> <file>icons/pdf.png</file> <file>icons/select.png</file> <file>icons/tex.png</file> <file>icons/viewBackward.png</file> <file>icons/viewForward.png</file> <file>icons/viewHome.png</file> <file>icons/viewReload.png</file> <file>icons/viewZoomIn.png</file> <file>icons/viewZoomOut.png</file> <file>icons/viewbib.png</file> <file>icons/viewcb.png</file> </qresource> <qresource prefix="/htm" > <file>htm/bib_item.html</file> <file>htm/excerpts.html</file> <file>htm/references.css</file> <file>htm/references.html</file> </qresource> <qresource prefix="/xml" > <file>xml/cb2bib.xmp</file> <file>xml/ExifTool_config</file> </qresource> </RCC> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bSearchInFiles.h�������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016331� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.863256084 30 atime=1498583183.007254748 30 ctime=1498583182.863256084 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bSearchInFiles.h�����������������������������������������������������������������0000644�0001750�0000144�00000002421�13124510216�017722� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BSEARCHINFILES_H #define C2BSEARCHINFILES_H #include "ui_c2bSearchInFiles.h" #include "ui_c2bSearchInFilesPatternEdit.h" #include <QDialog> class bibSearcher; class c2bSearchInFiles : public QDialog { Q_OBJECT public: c2bSearchInFiles(const QString& file, QWidget* parentw = 0); ~c2bSearchInFiles(); void setCurrentText(const QString& text); public slots: void setBibTeXFile(const QString& file = QString()); void show(); signals: void searchDone(const QString& filename, bibSearcher* searcher); private slots: void help(); void on_addPatternB_clicked(); void on_deletePatternB_clicked(); void on_editPatternB_clicked(); void searchB_clicked(); void updateForm(); private: QPushButton* _searchB; QString _bibtex_dir; QString _bibtex_file; QString _search_log; Ui::c2bSearchInFiles ui; Ui::c2bSearchInFilesPatternEdit ui_editor; }; #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bSaveRegExp.cpp��������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016216� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.779256864 30 atime=1498583183.007254748 30 ctime=1498583182.779256864 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bSaveRegExp.cpp������������������������������������������������������������������0000644�0001750�0000144�00000021155�13124510216�017614� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bSaveRegExp.h" #include "c2b.h" #include "c2bSaveREHighlighter.h" #include "c2bSettings.h" #include "c2bUtils.h" #include <QPushButton> /** \page regexpedit Regular Expression Editor Once a manual processing is done, cb2Bib clipboard area contains the extraction tags, plus, possibly, some other cb2Bib tags introduced during the preprocessing (see \ref bibproc). The <b>RegExp Editor</b> will generate a guess regular expression or matching pattern usable for automated extractions. The cb2Bib matching patterns consist of four lines: a brief description, the reference type, an ordered list of captured fields, and the regular expression itself. \htmlonly <pre style="background : #d5d5d5; border : #6D8CC3 solid 1px;"> # cb2Bib GET_VERSION Pattern: American Chemical Society Publications article journal volume pages year title author abstract ^(.+), (\d+) \(.+\), ([\d|\-|\s]+),(\d\d\d\d)\..+<NewLine3>(.+)<NewLine4> (.+)<NewLine5>.+Abstract:<NewLine\d+>(.+)$ </pre> \endhtmlonly The Regular Expression Editor provides the basic skeleton and a set of predefined suggestions. The regular expressions follow a Perl-like sintax. There are, however, some slight differences and minor limitations. Information about the basics on the editing and working with Regular Expressions as used by cb2Bib can be found at the Qt document file \htmlonly <a href="http://doc.qt.io/qt-5.6/QRegExp.html#introduction" target="_blank">http://doc.qt.io/qt-5.6/QRegExp.html#introduction</a>. \endhtmlonly <b>Remember when creating and editing regular expressions:</b> - Switch the clipboard mode to 'Tagged Clipboard Data', using the clipboard panel context menu. - Extract the bibliographic reference manually. On the clipboard panel will appear some cb2Bib tags that indicate which fields are being extracted. Once done, type Alt+I to enter to the regular expression editor. In the editor, there are the four line edits that define a cb2Bib pattern, one copy of the clipboard panel, and an information panel. The information panel displays possible issues, and, once everything is correct, the actual extracted fields. The clipboard panel highlights the captures for the current regular expression and current input text. - Patterns can be modified at any time by typing Alt+E to edit the regular expression file. Patterns are reloaded each time the automatic pattern recognition is started. This permits editing and testing. - The cb2Bib processes sequentially the list of regular expressions as found in the regular expression file. It stops and picks the first match for the current input. <b>Therefore, the order of the regular expressions is important</b>. Consequently, to avoid possible clashing among similar patterns, consider sorting them from the most restrictive pattern to the less one. As a rule of thumb, the more captions it has the most restrictive a pattern is. - <b>The cb2Bib proposed patterns are general, and not necessarily the most appropriate for a particular capture</b>. E.g. tag <tt>pages</tt> becomes <tt>([\\d|\\-|\\s]+)</tt>, which considers digits, hyphens, and spaces. It must be modified accordingly for reference sources with, e.g., <tt>pages</tt> written as Roman ordinals. - <b>Avoid whenever possible general patterns <tt>(.+)</tt></b>. There is a risk that such a caption could include text intended for a posterior caption. This is why, sometimes, the cb2Bib proposed pattern is not hit by the input stream that originated it. <b>Use, whenever possible, cb2Bib anchors like <tt>\<NewLine1\></tt> instead of <tt>\<NewLine\\d+\></tt>. They prevent <tt>(.+)</tt> captions to overextend</b>. - To debug a large regular expression it might be useful to break it to the first capturing parenthesis. For instance, the above pattern will be \htmlonly <pre style="background : #d5d5d5; border : #6D8CC3 solid 1px;"> # cb2Bib GET_VERSION Pattern: American Chemical Society Publications article journal ^(.+), </pre> \endhtmlonly - Then, check if anything is captured and if this corresponds to <tt>journal</tt>. - Add on successive steps your set of captions and BibTeX fields. */ c2bSaveRegExp::c2bSaveRegExp(const QStringList& pattern, const QString& input, QWidget* parentw) : QDialog(parentw) { Q_ASSERT_X(pattern.count() == 3, "c2bSaveRegExp", "Expected exactly three strings for pattern"); ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(help())); c2bSettings* settings(c2bSettingsP); ui.Input->setFont(settings->c2bMonoFont); ui.Type->setText(pattern.at(0)); ui.Fields->setText(pattern.at(1)); ui.RegExp->setText(pattern.at(2)); ui.Name->setFocus(); updateInput(input); _pattern_rx.setMinimal(true); _sreS = new c2bSaveREHighlighter(_pattern_rx, ui.Input->document()); setInformation(); connect(ui.Type, SIGNAL(textChanged(const QString&)), this, SLOT(setInformation())); connect(ui.Fields, SIGNAL(textChanged(const QString&)), this, SLOT(setInformation())); connect(ui.RegExp, SIGNAL(textChanged(const QString&)), this, SLOT(setInformation())); connect(ui.Input, SIGNAL(textChanged()), this, SLOT(inputMightHaveChanged())); } c2bSaveRegExp::~c2bSaveRegExp() {} void c2bSaveRegExp::setInformation() { QString info; bool can_save(false); const QStringList field_list(ui.Fields->text().split(' ', QString::SkipEmptyParts)); const int fields(field_list.count()); _pattern_rx.setPattern(ui.RegExp->text()); const int captures(_pattern_rx.captureCount()); if (_pattern_rx.isValid() && fields > 0 && fields == captures && !ui.Type->text().isEmpty()) { info += tr("Reference type: %1\n").arg(ui.Type->text()); info += tr("Number of fields: %1\n").arg(fields); can_save = true; } else { if (ui.Type->text().isEmpty()) info += tr("[Error] Invalid pattern: empty reference type\n"); if (fields == 0) info += tr("[Error] Invalid pattern: no fields declared\n"); if (_pattern_rx.isValid()) { if (captures == 0) { if (_pattern_rx.pattern().isEmpty()) info += tr("[Error] Invalid pattern: empty regular expression\n"); else info += tr("[Error] Invalid pattern: no captures defined in the regular expression\n"); } else if (fields != captures) info += tr("[Error] Invalid pattern: declared %1 fields while the regular expression has %2 captures\n"). arg(fields).arg(captures); } else info += tr("[Error] Invalid regular expression: %1\n").arg(_pattern_rx.errorString()); } if (can_save) { if (_pattern_rx.indexIn(ui.Input->toPlainText()) == -1 || _pattern_rx.matchedLength() < 1) info += tr("[Info] Regular expression does not match input text\n"); else { bibParser* bp = c2b::bibParser(); for (int i = 0; i < fields; ++i) { const QString& f = field_list.at(i); const QString v(bp->parse(f, _pattern_rx.cap(i + 1))); info += QString("[%1]: '%2'\n").arg(f).arg(v); } } } ui.Information->setPlainText(info); ui.buttonBox->button(QDialogButtonBox::Save)->setEnabled(can_save); _sreS->rehighlight(); } void c2bSaveRegExp::updateInput(const QString& text) { if (!ui.Input->textCursor().hasSelection()) ui.Input->setPlainText(c2b::bibParser()->setTags(text)); } void c2bSaveRegExp::inputMightHaveChanged() { // Avoid recursively calling setInformation due to syntax highlighting if (_input_text == ui.Input->toPlainText()) return; _input_text = ui.Input->toPlainText(); setInformation(); } void c2bSaveRegExp::accept() { const QString rx(ui.Type->text() + '\n' + ui.Fields->text() + '\n' + ui.RegExp->text()); emit savePatternInfo(rx, ui.Name->text()); QDialog::accept(); } void c2bSaveRegExp::help() { c2bUtils::displayHelp("http://www.molspaces.com/d_cb2bib-regexpedit.php"); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bPdfImport.ui����������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�015746� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 29 ctime=1498583182.64725809 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bPdfImport.ui��������������������������������������������������������������������0000644�0001750�0000144�00000013755�13124510115�017347� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<ui version="4.0" > <author>Pere Constans</author> <class>c2bPdfImport</class> <widget class="QDialog" name="c2bPdfImport" > <property name="geometry" > <rect> <x>0</x> <y>0</y> <width>869</width> <height>414</height> </rect> </property> <property name="acceptDrops" > <bool>true</bool> </property> <property name="windowTitle" > <string>PDFImport - cb2Bib</string> </property> <layout class="QGridLayout" > <property name="margin" > <number>6</number> </property> <property name="spacing" > <number>6</number> </property> <item row="0" column="0" colspan="2" > <widget class="QSplitter" name="splitter" > <property name="orientation" > <enum>Qt::Vertical</enum> </property> <widget class="QListWidget" name="PDFlist" > <property name="frameShadow" > <enum>QFrame::Raised</enum> </property> </widget> <widget class="QPlainTextEdit" name="Log" > <property name="frameShape" > <enum>QFrame::StyledPanel</enum> </property> <property name="frameShadow" > <enum>QFrame::Raised</enum> </property> <property name="readOnly" > <bool>true</bool> </property> </widget> </widget> </item> <item row="3" column="0" colspan="2" > <widget class="QStatusBar" name="statusBar" > <property name="sizePolicy" > <sizepolicy vsizetype="Preferred" hsizetype="Expanding" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="sizeGripEnabled" > <bool>false</bool> </property> </widget> </item> <item row="5" column="0" colspan="2" > <widget class="QDialogButtonBox" name="buttonBox" > <property name="orientation" > <enum>Qt::Horizontal</enum> </property> <property name="standardButtons" > <set>QDialogButtonBox::Abort|QDialogButtonBox::Close|QDialogButtonBox::Help</set> </property> </widget> </item> <item row="4" column="0" colspan="2" > <widget class="Line" name="line" > <property name="orientation" > <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="2" column="0" colspan="2" > <widget class="Line" name="line1" > <property name="frameShape" > <enum>QFrame::HLine</enum> </property> <property name="frameShadow" > <enum>QFrame::Sunken</enum> </property> <property name="orientation" > <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="1" column="1" > <widget class="QGroupBox" name="groupBox_2" > <property name="title" > <string>Miscellaneous</string> </property> <layout class="QGridLayout" > <property name="margin" > <number>9</number> </property> <property name="spacing" > <number>6</number> </property> <item row="0" column="2" > <spacer> <property name="orientation" > <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0" > <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item row="0" column="1" > <widget class="QCheckBox" name="AutomaticQuery" > <property name="statusTip" > <string>Perform network queries after automatic reference extractions</string> </property> <property name="text" > <string>Perform network queries</string> </property> </widget> </item> <item row="0" column="0" > <widget class="QCheckBox" name="OpenFiles" > <property name="toolTip" > <string/> </property> <property name="statusTip" > <string>Open document files</string> </property> <property name="text" > <string>Open document files</string> </property> </widget> </item> </layout> </widget> </item> <item row="1" column="0" > <widget class="QGroupBox" name="groupBox" > <property name="title" > <string>Sequence</string> </property> <layout class="QGridLayout" > <property name="margin" > <number>9</number> </property> <property name="spacing" > <number>6</number> </property> <item row="0" column="2" > <spacer> <property name="orientation" > <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0" > <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item row="0" column="0" > <widget class="QCheckBox" name="DoNextAfterSaving" > <property name="statusTip" > <string>Process next after saving</string> </property> <property name="text" > <string>Process next after saving</string> </property> </widget> </item> <item row="0" column="1" > <widget class="QCheckBox" name="DoAll" > <property name="statusTip" > <string>Unsupervised processing</string> </property> <property name="text" > <string>Unsupervised processing</string> </property> </widget> </item> </layout> </widget> </item> </layout> </widget> <layoutdefault spacing="6" margin="11" /> <tabstops> <tabstop>PDFlist</tabstop> <tabstop>Log</tabstop> <tabstop>OpenFiles</tabstop> <tabstop>DoNextAfterSaving</tabstop> <tabstop>buttonBox</tabstop> </tabstops> <resources> <include location="cb2bib.qrc" /> </resources> <connections> <connection> <sender>buttonBox</sender> <signal>rejected()</signal> <receiver>c2bPdfImport</receiver> <slot>reject()</slot> <hints> <hint type="sourcelabel" > <x>759</x> <y>428</y> </hint> <hint type="destinationlabel" > <x>822</x> <y>323</y> </hint> </hints> </connection> </connections> </ui> �������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bConfigure.ui����������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�015763� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 29 ctime=1498583182.64725809 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bConfigure.ui��������������������������������������������������������������������0000644�0001750�0000144�00000215105�13124510115�017355� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <author>Pere Constans</author> <class>c2bConfigure</class> <widget class="QDialog" name="c2bConfigure"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>1128</width> <height>783</height> </rect> </property> <property name="windowTitle"> <string>Configure - cb2Bib</string> </property> <layout class="QGridLayout" name="gridLayout"> <item row="0" column="0" colspan="3"> <widget class="Line" name="line_4"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="1" column="0" rowspan="2"> <widget class="QListWidget" name="contentsWidget"> <property name="sizePolicy"> <sizepolicy hsizetype="Fixed" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="maximumSize"> <size> <width>200</width> <height>16777215</height> </size> </property> <property name="cursor" stdset="0"> <cursorShape>PointingHandCursor</cursorShape> </property> <property name="mouseTracking"> <bool>true</bool> </property> <property name="frameShadow"> <enum>QFrame::Raised</enum> </property> <property name="selectionMode"> <enum>QAbstractItemView::NoSelection</enum> </property> <property name="selectionBehavior"> <enum>QAbstractItemView::SelectColumns</enum> </property> <property name="iconSize"> <size> <width>32</width> <height>32</height> </size> </property> <property name="movement"> <enum>QListView::Static</enum> </property> <property name="spacing"> <number>5</number> </property> <property name="viewMode"> <enum>QListView::ListMode</enum> </property> <property name="modelColumn"> <number>0</number> </property> <property name="uniformItemSizes"> <bool>true</bool> </property> <item> <property name="text"> <string>Annote</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/annote.png</normaloff>:/icons/icons/annote.png</iconset> </property> </item> <item> <property name="text"> <string>BibTeX</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/configure_bibtex.png</normaloff>:/icons/icons/configure_bibtex.png</iconset> </property> </item> <item> <property name="text"> <string>Clipboard</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/configure_clipboard.png</normaloff>:/icons/icons/configure_clipboard.png</iconset> </property> </item> <item> <property name="text"> <string>Documents</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/configure_documents.png</normaloff>:/icons/icons/configure_documents.png</iconset> </property> </item> <item> <property name="text"> <string>Files</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/configure_files.png</normaloff>:/icons/icons/configure_files.png</iconset> </property> </item> <item> <property name="text"> <string>Fonts</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/configure_fonts.png</normaloff>:/icons/icons/configure_fonts.png</iconset> </property> </item> <item> <property name="text"> <string>Network</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/configure_network.png</normaloff>:/icons/icons/configure_network.png</iconset> </property> </item> <item> <property name="text"> <string>Shortcuts</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/configure_shortcuts.png</normaloff>:/icons/icons/configure_shortcuts.png</iconset> </property> </item> <item> <property name="text"> <string>Utilities</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/configure_utilities.png</normaloff>:/icons/icons/configure_utilities.png</iconset> </property> </item> </widget> </item> <item row="1" column="1" rowspan="2" colspan="2"> <widget class="Line" name="line_3"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> </widget> </item> <item row="2" column="2"> <widget class="QStackedWidget" name="pagesWidget"> <property name="currentIndex"> <number>0</number> </property> <widget class="QWidget" name="Annote"> <layout class="QGridLayout"> <property name="leftMargin"> <number>1</number> </property> <property name="topMargin"> <number>1</number> </property> <property name="rightMargin"> <number>1</number> </property> <property name="bottomMargin"> <number>1</number> </property> <item row="0" column="0"> <widget class="QGroupBox" name="groupBox_21"> <property name="title"> <string>Annote Cascading Style Sheet (CSS)</string> </property> <layout class="QGridLayout"> <item row="0" column="0"> <widget class="c2bLineEdit" name="AnnoteCssFile"> <property name="text"> <string/> </property> </widget> </item> <item row="0" column="1"> <widget class="QToolButton" name="AnnoteCssDir"> <property name="statusTip"> <string>Select Annote CSS file</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> </layout> </widget> </item> <item row="1" column="0"> <widget class="QGroupBox" name="groupBox_22"> <property name="title"> <string>MathJax Header</string> </property> <layout class="QGridLayout"> <item row="0" column="0"> <widget class="c2bLineEdit" name="MathJaxHeaderFile"> <property name="text"> <string/> </property> </widget> </item> <item row="0" column="1"> <widget class="QToolButton" name="MathJaxDir"> <property name="statusTip"> <string>Select MathJax header file</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> </layout> </widget> </item> <item row="2" column="0"> <widget class="QGroupBox" name="groupBox_23"> <property name="title"> <string>HTML Output</string> </property> <layout class="QGridLayout"> <item row="0" column="0"> <widget class="QCheckBox" name="IncludeCSS"> <property name="text"> <string>Include CSS in HTML</string> </property> </widget> </item> <item row="0" column="1"> <widget class="QCheckBox" name="UseRelativeLinks"> <property name="text"> <string>Use relative links</string> </property> </widget> </item> <item row="0" column="2"> <spacer> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> </layout> </widget> </item> <item row="3" column="0"> <widget class="QGroupBox" name="AnnoteViewerFont"> <property name="title"> <string>Annote Viewer Font</string> </property> <layout class="QGridLayout"> <item row="0" column="0"> <widget class="QLabel" name="textLabel3_9"> <property name="text"> <string>Family</string> </property> </widget> </item> <item row="0" column="1"> <widget class="QFontComboBox" name="af_familycombo"> <property name="autoCompletion"> <bool>true</bool> </property> <property name="duplicatesEnabled"> <bool>false</bool> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="textLabel3_10"> <property name="text"> <string>Size</string> </property> </widget> </item> <item row="1" column="1"> <widget class="QComboBox" name="af_psizecombo"> <property name="sizePolicy"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="editable"> <bool>true</bool> </property> <property name="autoCompletion"> <bool>true</bool> </property> <property name="duplicatesEnabled"> <bool>false</bool> </property> </widget> </item> </layout> </widget> </item> <item row="4" column="0"> <widget class="QGroupBox" name="AnnoteViewerFixedFont"> <property name="title"> <string>Annote Viewer Fixed Font</string> </property> <layout class="QGridLayout"> <item row="0" column="0"> <widget class="QLabel" name="textLabel3_6"> <property name="text"> <string>Family</string> </property> </widget> </item> <item row="0" column="1"> <widget class="QFontComboBox" name="aff_familycombo"> <property name="autoCompletion"> <bool>true</bool> </property> <property name="duplicatesEnabled"> <bool>false</bool> </property> <property name="fontFilters"> <set>QFontComboBox::MonospacedFonts</set> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="textLabel3_5"> <property name="text"> <string>Size</string> </property> </widget> </item> <item row="1" column="1"> <widget class="QComboBox" name="aff_psizecombo"> <property name="sizePolicy"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="editable"> <bool>true</bool> </property> <property name="autoCompletion"> <bool>true</bool> </property> <property name="duplicatesEnabled"> <bool>false</bool> </property> </widget> </item> </layout> </widget> </item> <item row="5" column="0"> <spacer name="spacer"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>41</height> </size> </property> </spacer> </item> </layout> </widget> <widget class="QWidget" name="BibTeX"> <layout class="QGridLayout"> <property name="leftMargin"> <number>1</number> </property> <property name="topMargin"> <number>1</number> </property> <property name="rightMargin"> <number>1</number> </property> <property name="bottomMargin"> <number>1</number> </property> <item row="0" column="0" colspan="4"> <widget class="QGroupBox" name="groupBox_11"> <property name="title"> <string>CiteID Pattern</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="0"> <widget class="c2bIdLineEdit" name="CiteIdPattern"> <property name="statusTip"> <string>Rightclick to edit pattern placeholders</string> </property> </widget> </item> </layout> </widget> </item> <item row="1" column="0"> <widget class="QGroupBox" name="groupBox_9"> <property name="title"> <string>Author and Editor Format</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="2"> <spacer> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item row="0" column="1"> <widget class="QRadioButton" name="UseFullNames"> <property name="text"> <string>F&ull Name</string> </property> </widget> </item> <item row="0" column="0"> <widget class="QRadioButton" name="UseAbbreviatedNames"> <property name="text"> <string>Abbrevia&ted</string> </property> </widget> </item> </layout> </widget> </item> <item row="1" column="1" colspan="2"> <widget class="QGroupBox" name="groupBox_10"> <property name="title"> <string>Journal Format</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="1"> <widget class="QRadioButton" name="SetJournalsToFullname"> <property name="text"> <string>Full Name</string> </property> </widget> </item> <item row="0" column="0"> <widget class="QRadioButton" name="SetJournalsToAbbreviated"> <property name="text"> <string>Abbreviated</string> </property> </widget> </item> <item row="0" column="2"> <spacer> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeType"> <enum>QSizePolicy::Expanding</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>95</width> <height>31</height> </size> </property> </spacer> </item> </layout> </widget> </item> <item row="1" column="3"> <widget class="QGroupBox" name="PageNumberSeparatorBox"> <property name="title"> <string>Number Separator</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="0"> <widget class="c2bLineEdit" name="PageNumberSeparator"> <property name="statusTip"> <string>Keep empty for default dash. Blank spaces count</string> </property> </widget> </item> </layout> </widget> </item> <item row="2" column="0" colspan="4"> <widget class="QGroupBox" name="groupBox_12"> <property name="title"> <string>LaTeX Conversions</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="3"> <spacer> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeType"> <enum>QSizePolicy::Expanding</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>182</width> <height>20</height> </size> </property> </spacer> </item> <item row="0" column="2"> <widget class="QCheckBox" name="PostprocessMonth"> <property name="text"> <string>Postprocess 'month'</string> </property> </widget> </item> <item row="0" column="1"> <widget class="QCheckBox" name="UseDoubleBraces"> <property name="text"> <string>Set 'title' in double braces</string> </property> </widget> </item> <item row="0" column="0"> <widget class="QCheckBox" name="ConvertReferenceToLaTeX"> <property name="text"> <string>Convert entry strings to LaTe&X</string> </property> </widget> </item> </layout> </widget> </item> <item row="3" column="0" colspan="2"> <widget class="QGroupBox" name="groupBox_13"> <property name="title"> <string>Reference Extraction</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="0"> <widget class="QCheckBox" name="DoHeuristicGuess"> <property name="text"> <string>Tr&y Heuristic Guess if recognition fails</string> </property> </widget> </item> </layout> </widget> </item> <item row="3" column="2" colspan="2"> <widget class="QGroupBox" name="groupBox_19"> <property name="title"> <string>Reference Check</string> </property> <layout class="QGridLayout" name="_3"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="0"> <widget class="QCheckBox" name="CheckRepeatedOnSave"> <property name="text"> <string>Check Repeated On Save</string> </property> </widget> </item> </layout> </widget> </item> <item row="4" column="0" colspan="4"> <widget class="QGroupBox" name="groupBox_14"> <property name="title"> <string>External BibTeX Postprocessing</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="1" column="0"> <widget class="QLabel" name="textLabel2_2_5"> <property name="text"> <string>Aguments:</string> </property> </widget> </item> <item row="0" column="2"> <widget class="QToolButton" name="PostprocessBibTeXDir"> <property name="statusTip"> <string>Select external postprocess tool</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> <item row="0" column="0"> <widget class="QLabel" name="textLabel1_2_4"> <property name="text"> <string>Command:</string> </property> </widget> </item> <item row="2" column="0"> <widget class="QLabel" name="textLabel2_2_3_2"> <property name="text"> <string>Output Extension:</string> </property> </widget> </item> <item row="0" column="1"> <widget class="c2bLineEdit" name="PostprocessBibTeXBin"> <property name="text"> <string/> </property> </widget> </item> <item row="1" column="1" colspan="2"> <widget class="c2bLineEdit" name="PostprocessBibTeXArg"> <property name="text"> <string/> </property> </widget> </item> <item row="2" column="1" colspan="2"> <widget class="c2bLineEdit" name="PostprocessBibTeXExt"> <property name="text"> <string/> </property> </widget> </item> </layout> </widget> </item> <item row="5" column="0" colspan="2"> <spacer> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>20</height> </size> </property> </spacer> </item> </layout> </widget> <widget class="QWidget" name="Clipboard"> <layout class="QGridLayout"> <property name="leftMargin"> <number>1</number> </property> <property name="topMargin"> <number>1</number> </property> <property name="rightMargin"> <number>1</number> </property> <property name="bottomMargin"> <number>1</number> </property> <item row="0" column="0"> <widget class="QGroupBox" name="groupBox_4"> <property name="title"> <string>Clipboard Preprocessing</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="0"> <widget class="QCheckBox" name="FindReplaceInput"> <property name="text"> <string>Replace/Remove from Input Stream</string> </property> </widget> </item> <item row="1" column="0"> <layout class="QGridLayout"> <property name="leftMargin"> <number>0</number> </property> <property name="topMargin"> <number>0</number> </property> <property name="rightMargin"> <number>0</number> </property> <property name="bottomMargin"> <number>0</number> </property> <property name="spacing"> <number>6</number> </property> <item row="2" column="1"> <widget class="QPushButton" name="FREdit"> <property name="text"> <string>&Edit</string> </property> <property name="shortcut"> <string>Alt+E</string> </property> </widget> </item> <item row="0" column="1"> <spacer> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>40</height> </size> </property> </spacer> </item> <item row="3" column="1"> <widget class="QPushButton" name="FRDelete"> <property name="text"> <string>&Delete</string> </property> <property name="shortcut"> <string>Alt+D</string> </property> </widget> </item> <item row="0" column="0" rowspan="4"> <widget class="QTreeWidget" name="FindReplaceList"> <property name="frameShadow"> <enum>QFrame::Raised</enum> </property> <property name="editTriggers"> <set>QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked</set> </property> <property name="tabKeyNavigation"> <bool>true</bool> </property> <property name="selectionMode"> <enum>QAbstractItemView::SingleSelection</enum> </property> <property name="rootIsDecorated"> <bool>false</bool> </property> <property name="uniformRowHeights"> <bool>true</bool> </property> <property name="sortingEnabled"> <bool>true</bool> </property> <property name="columnCount"> <number>3</number> </property> <column> <property name="text"> <string>Find</string> </property> </column> <column> <property name="text"> <string>Replace</string> </property> </column> <column> <property name="text"> <string>Description</string> </property> </column> </widget> </item> <item row="1" column="1"> <widget class="QPushButton" name="FRNew"> <property name="text"> <string>&New</string> </property> <property name="shortcut"> <string>Alt+N</string> </property> </widget> </item> </layout> </item> </layout> </widget> </item> <item row="1" column="0"> <widget class="QGroupBox" name="groupBox_5"> <property name="title"> <string>External Clipboard Preparsing Command</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="1" column="0" colspan="3"> <layout class="QHBoxLayout"> <property name="spacing"> <number>6</number> </property> <property name="leftMargin"> <number>0</number> </property> <property name="topMargin"> <number>0</number> </property> <property name="rightMargin"> <number>0</number> </property> <property name="bottomMargin"> <number>0</number> </property> <item> <widget class="c2bLineEdit" name="PreparserBin"> <property name="text"> <string/> </property> </widget> </item> <item> <widget class="QToolButton" name="PreparserDir"> <property name="statusTip"> <string>Select external parser tool</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> </layout> </item> <item row="0" column="0"> <widget class="QCheckBox" name="PreparserAutomatic"> <property name="text"> <string>Perform always, as part of an automatic extraction</string> </property> </widget> </item> <item row="0" column="1"> <widget class="QCheckBox" name="PreparserShowLog"> <property name="text"> <string>Do not show log</string> </property> </widget> </item> <item row="0" column="2"> <spacer> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> </layout> </widget> </item> <item row="2" column="0"> <widget class="QCheckBox" name="AddMetadata"> <property name="text"> <string>Add document metadata to Input Stream</string> </property> </widget> </item> <item row="3" column="0"> <widget class="QGroupBox" name="PreAppendMetadata"> <property name="title"> <string/> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="2"> <spacer> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item row="0" column="1"> <widget class="QRadioButton" name="Append"> <property name="text"> <string>Append</string> </property> </widget> </item> <item row="0" column="0"> <widget class="QRadioButton" name="Prepend"> <property name="text"> <string>Prepend</string> </property> <property name="shortcut"> <string/> </property> </widget> </item> </layout> </widget> </item> </layout> </widget> <widget class="QWidget" name="Documents"> <layout class="QGridLayout"> <property name="leftMargin"> <number>1</number> </property> <property name="topMargin"> <number>1</number> </property> <property name="rightMargin"> <number>1</number> </property> <property name="bottomMargin"> <number>1</number> </property> <item row="0" column="0"> <widget class="QCheckBox" name="MovePdf"> <property name="text"> <string>Rename and Copy/Move document files</string> </property> <property name="shortcut"> <string/> </property> </widget> </item> <item row="1" column="0"> <widget class="QGroupBox" name="RenameCopyMovePdf"> <property name="title"> <string>Document Options</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="1" column="0"> <widget class="QLabel" name="label"> <property name="text"> <string>Documents Directory:</string> </property> </widget> </item> <item row="4" column="0"> <widget class="QCheckBox" name="InsertMetadata"> <property name="text"> <string>Insert BibTeX metadata to document files</string> </property> </widget> </item> <item row="3" column="0"> <widget class="QCheckBox" name="RelativePdfDirectory"> <property name="text"> <string>Set directory relative to the BibTeX File Directory</string> </property> </widget> </item> <item row="2" column="0"> <layout class="QHBoxLayout"> <property name="spacing"> <number>6</number> </property> <property name="leftMargin"> <number>0</number> </property> <property name="topMargin"> <number>0</number> </property> <property name="rightMargin"> <number>0</number> </property> <property name="bottomMargin"> <number>0</number> </property> <item> <widget class="c2bLineEdit" name="PdfDirectory"> <property name="text"> <string/> </property> </widget> </item> <item> <widget class="QToolButton" name="PdfDir"> <property name="statusTip"> <string>Select PDF directory</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> </layout> </item> <item row="0" column="0"> <widget class="QGroupBox" name="CopyMovePdf"> <property name="title"> <string/> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="2"> <spacer> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item row="0" column="1"> <widget class="QRadioButton" name="Move"> <property name="text"> <string>Move (local so&urce files)</string> </property> </widget> </item> <item row="0" column="0"> <widget class="QRadioButton" name="Copy"> <property name="text"> <string>Copy</string> </property> <property name="shortcut"> <string/> </property> </widget> </item> </layout> </widget> </item> </layout> </widget> </item> <item row="2" column="0"> <widget class="QGroupBox" name="DocumentIdPatternBox"> <property name="title"> <string>DocumentID Pattern</string> </property> <layout class="QGridLayout" name="_2"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="0"> <widget class="c2bIdLineEdit" name="DocumentIdPattern"> <property name="statusTip"> <string>Rightclick to edit pattern placeholders</string> </property> </widget> </item> </layout> </widget> </item> <item row="3" column="0"> <widget class="QGroupBox" name="groupBox_18"> <property name="title"> <string>ExifTool Metadata writer</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="1"> <widget class="c2bLineEdit" name="ExifToolBin"> <property name="text"> <string/> </property> </widget> </item> <item row="0" column="2"> <widget class="QToolButton" name="ExifToolDir"> <property name="statusTip"> <string>Select ExifTool executable</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> <item row="0" column="0"> <widget class="QLabel" name="textLabel1_6"> <property name="text"> <string>Command:</string> </property> </widget> </item> </layout> </widget> </item> <item row="4" column="0"> <spacer> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>16</height> </size> </property> </spacer> </item> </layout> </widget> <widget class="QWidget" name="Files"> <layout class="QGridLayout"> <property name="leftMargin"> <number>1</number> </property> <property name="topMargin"> <number>1</number> </property> <property name="rightMargin"> <number>1</number> </property> <property name="bottomMargin"> <number>1</number> </property> <item row="0" column="0"> <widget class="QGroupBox" name="groupBox_3"> <property name="title"> <string>Journal Abbreviation List File</string> </property> <layout class="QGridLayout"> <item row="0" column="0"> <widget class="c2bLineEdit" name="JournalFile"> <property name="text"> <string/> </property> </widget> </item> <item row="0" column="1"> <widget class="QToolButton" name="JournalDir"> <property name="statusTip"> <string>Select journal abbreviation file</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> </layout> </widget> </item> <item row="1" column="0"> <widget class="QGroupBox" name="groupBox_2"> <property name="title"> <string>Regular Expression List File</string> </property> <layout class="QGridLayout"> <item row="0" column="0"> <widget class="c2bLineEdit" name="RegularExpressionFile"> <property name="text"> <string/> </property> </widget> </item> <item row="0" column="1"> <widget class="QToolButton" name="RegularExpressionDir"> <property name="statusTip"> <string>Select regular expression file</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> </layout> </widget> </item> <item row="2" column="0"> <widget class="QGroupBox" name="groupBox_16"> <property name="title"> <string>Bookmarks and Network Query Info File</string> </property> <layout class="QGridLayout"> <item row="0" column="0"> <widget class="c2bLineEdit" name="NetworkFile"> <property name="text"> <string/> </property> </widget> </item> <item row="0" column="1"> <widget class="QToolButton" name="NetworkDir"> <property name="statusTip"> <string>Select network informantion file</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> </layout> </widget> </item> <item row="3" column="0"> <widget class="QGroupBox" name="groupBox_6"> <property name="title"> <string>Browser Cascading Style Sheet (CSS)</string> </property> <layout class="QGridLayout"> <item row="0" column="0"> <widget class="c2bLineEdit" name="BrowserCssFile"> <property name="text"> <string/> </property> </widget> </item> <item row="0" column="1"> <widget class="QToolButton" name="BrowserCssDir"> <property name="statusTip"> <string>Select CSS file</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> </layout> </widget> </item> <item row="7" column="0"> <spacer> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>31</width> <height>20</height> </size> </property> </spacer> </item> <item row="4" column="0"> <widget class="QGroupBox" name="groupBox_20"> <property name="title"> <string>Part Of Speech (POS) Lexicon</string> </property> <layout class="QGridLayout" name="_4"> <item row="0" column="0"> <widget class="c2bLineEdit" name="PosLexiconFile"> <property name="text"> <string/> </property> </widget> </item> <item row="0" column="1"> <widget class="QToolButton" name="PosLexiconDir"> <property name="statusTip"> <string>Select POS lexicon file</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> </layout> </widget> </item> <item row="6" column="0"> <widget class="QGroupBox" name="groupBox_7"> <property name="title"> <string>Search In Files Cache Directory</string> </property> <layout class="QGridLayout"> <item row="0" column="0"> <widget class="c2bLineEdit" name="CacheDirectory"> <property name="text"> <string/> </property> </widget> </item> <item row="0" column="1"> <widget class="QToolButton" name="CacheDir"> <property name="statusTip"> <string>Select cache directory</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> </layout> </widget> </item> </layout> </widget> <widget class="QWidget" name="Fonts"> <layout class="QGridLayout"> <property name="leftMargin"> <number>1</number> </property> <property name="topMargin"> <number>1</number> </property> <property name="rightMargin"> <number>1</number> </property> <property name="bottomMargin"> <number>1</number> </property> <item row="0" column="0"> <widget class="QGroupBox" name="groupBox"> <property name="title"> <string/> </property> <layout class="QGridLayout"> <item row="0" column="0"> <widget class="QLabel" name="textLabel3"> <property name="text"> <string>Family</string> </property> </widget> </item> <item row="0" column="1"> <widget class="QFontComboBox" name="familycombo"> <property name="autoCompletion"> <bool>true</bool> </property> <property name="duplicatesEnabled"> <bool>false</bool> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="textLabel3_2"> <property name="text"> <string>Size</string> </property> </widget> </item> <item row="1" column="1"> <widget class="QComboBox" name="psizecombo"> <property name="sizePolicy"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="editable"> <bool>true</bool> </property> <property name="autoCompletion"> <bool>true</bool> </property> <property name="duplicatesEnabled"> <bool>false</bool> </property> </widget> </item> <item row="2" column="0" colspan="2"> <widget class="QLineEdit" name="samplelineedit"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="text"> <string>Sample Text</string> </property> <property name="alignment"> <set>Qt::AlignHCenter</set> </property> </widget> </item> <item row="3" column="0" colspan="2"> <widget class="QTreeWidget" name="ColorList"> <property name="frameShadow"> <enum>QFrame::Raised</enum> </property> <property name="tabKeyNavigation"> <bool>true</bool> </property> <property name="rootIsDecorated"> <bool>false</bool> </property> <property name="uniformRowHeights"> <bool>true</bool> </property> <property name="sortingEnabled"> <bool>true</bool> </property> <property name="columnCount"> <number>1</number> </property> <column> <property name="text"> <string>Context Colors</string> </property> </column> </widget> </item> </layout> </widget> </item> </layout> </widget> <widget class="QWidget" name="Network"> <layout class="QGridLayout" name="gridLayout_2"> <property name="leftMargin"> <number>1</number> </property> <property name="topMargin"> <number>1</number> </property> <property name="rightMargin"> <number>1</number> </property> <property name="bottomMargin"> <number>1</number> </property> <item row="0" column="0"> <widget class="QCheckBox" name="FmClient"> <property name="text"> <string>Use E&xternal Network Client</string> </property> </widget> </item> <item row="1" column="0"> <widget class="QGroupBox" name="clientGroupBox"> <property name="title"> <string/> </property> <layout class="QGridLayout"> <item row="0" column="0"> <widget class="QLabel" name="textLabel1_2_3"> <property name="text"> <string>Copy:</string> </property> </widget> </item> <item row="0" column="1"> <widget class="c2bLineEdit" name="FmClientCopyBin"> <property name="text"> <string>kfmclient</string> </property> </widget> </item> <item row="0" column="2"> <widget class="QToolButton" name="FmClientCopyDir"> <property name="statusTip"> <string>Select external copy executable</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> <item row="0" column="3"> <widget class="QLabel" name="textLabel2_2_3"> <property name="text"> <string>Copy Aguments:</string> </property> </widget> </item> <item row="0" column="4"> <widget class="c2bLineEdit" name="FmClientCopyArg"> <property name="text"> <string/> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="textLabel1_2_2_4"> <property name="text"> <string>Move:</string> </property> </widget> </item> <item row="1" column="1"> <widget class="c2bLineEdit" name="FmClientMoveBin"> <property name="text"> <string>kfmclient</string> </property> </widget> </item> <item row="1" column="2"> <widget class="QToolButton" name="FmClientMoveDir"> <property name="statusTip"> <string>Select external move executable</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> <item row="1" column="3"> <widget class="QLabel" name="textLabel2_2_2_3"> <property name="text"> <string>Move Aguments:</string> </property> </widget> </item> <item row="1" column="4"> <widget class="c2bLineEdit" name="FmClientMoveArg"> <property name="text"> <string/> </property> </widget> </item> </layout> </widget> </item> <item row="2" column="0"> <widget class="QCheckBox" name="UseProxy"> <property name="text"> <string>Use Proxy</string> </property> </widget> </item> <item row="3" column="0"> <widget class="QGroupBox" name="proxyGroupBox"> <property name="title"> <string/> </property> <property name="checkable"> <bool>false</bool> </property> <property name="checked"> <bool>false</bool> </property> <layout class="QGridLayout" name="gridLayout_3"> <item row="0" column="0"> <widget class="QLabel" name="textLabel1_2_5"> <property name="text"> <string>Host:</string> </property> </widget> </item> <item row="0" column="1"> <widget class="c2bLineEdit" name="ProxyHostName"> <property name="text"> <string/> </property> </widget> </item> <item row="0" column="2"> <widget class="QLabel" name="textLabel1_2_2_5"> <property name="text"> <string>Port:</string> </property> </widget> </item> <item row="0" column="3"> <widget class="c2bLineEdit" name="ProxyPort"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="text"> <string/> </property> <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> </widget> </item> <item row="0" column="4"> <widget class="QLabel" name="textLabel1_2_2_6"> <property name="text"> <string>Type:</string> </property> </widget> </item> <item row="0" column="5"> <widget class="QComboBox" name="ProxyType"> <item> <property name="text"> <string>Http</string> </property> </item> <item> <property name="text"> <string>Socks5</string> </property> </item> </widget> </item> </layout> </widget> </item> <item row="4" column="0"> <widget class="QGroupBox" name="groupBox_8"> <property name="title"> <string>Queries</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="1" column="0"> <widget class="QCheckBox" name="AutomaticPdfDownload"> <property name="text"> <string>Download document if available</string> </property> </widget> </item> <item row="2" column="0"> <widget class="QCheckBox" name="KeepTmpNQFiles"> <property name="text"> <string>&Keep Query temporary files (Debug Only)</string> </property> </widget> </item> <item row="0" column="0"> <widget class="QCheckBox" name="AutomaticQuery"> <property name="text"> <string>Perform Network Queries after automatic reference extractions</string> </property> <property name="shortcut"> <string>Alt+Q</string> </property> </widget> </item> </layout> </widget> </item> <item row="5" column="0"> <spacer> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>16</height> </size> </property> </spacer> </item> </layout> </widget> <widget class="QWidget" name="Shortcuts"> <layout class="QGridLayout" name="gridLayout_6"> <property name="leftMargin"> <number>1</number> </property> <property name="topMargin"> <number>1</number> </property> <property name="rightMargin"> <number>1</number> </property> <property name="bottomMargin"> <number>1</number> </property> <item row="0" column="0"> <widget class="QGroupBox" name="cb2BibScGroupBox"> <property name="title"> <string>Main panel</string> </property> <layout class="QGridLayout" name="gridLayout_1"> <item row="0" column="0"> <widget class="c2bShortcutWidget" name="cb2BibShortcuts" native="true"/> </item> </layout> </widget> </item> <item row="1" column="0"> <widget class="QGroupBox" name="EditorScGroupBox"> <property name="title"> <string>Editor and reference list</string> </property> <layout class="QGridLayout" name="gridLayout_5"> <item row="0" column="0"> <widget class="c2bShortcutWidget" name="EditorShortcuts" native="true"/> </item> </layout> </widget> </item> <item row="2" column="0"> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>398</height> </size> </property> </spacer> </item> </layout> </widget> <widget class="QWidget" name="Utilities"> <layout class="QGridLayout"> <property name="leftMargin"> <number>1</number> </property> <property name="topMargin"> <number>1</number> </property> <property name="rightMargin"> <number>1</number> </property> <property name="bottomMargin"> <number>1</number> </property> <item row="0" column="0"> <widget class="QGroupBox" name="groupBox_15"> <property name="title"> <string>PDF Import: To plain text converter</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="2"> <widget class="QToolButton" name="PdfImportPdf2TextDir"> <property name="statusTip"> <string>Select external convert tool</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="textLabel2_6"> <property name="text"> <string>Aguments:</string> </property> </widget> </item> <item row="0" column="0"> <widget class="QLabel" name="textLabel1_4"> <property name="text"> <string>Command:</string> </property> </widget> </item> <item row="0" column="1"> <widget class="c2bLineEdit" name="PdfImportPdf2TextBin"> <property name="text"> <string/> </property> </widget> </item> <item row="1" column="1" colspan="2"> <widget class="c2bLineEdit" name="PdfImportPdf2TextArg"> <property name="text"> <string/> </property> </widget> </item> </layout> </widget> </item> <item row="1" column="0"> <widget class="QGroupBox" name="groupBox_17"> <property name="title"> <string>BibTeX search: To plain text converter</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="2"> <widget class="QToolButton" name="BibSearcherPdf2TextDir"> <property name="statusTip"> <string>Select external convert tool</string> </property> <property name="icon"> <iconset resource="cb2bib.qrc"> <normaloff>:/icons/icons/mimeFolder.png</normaloff>:/icons/icons/mimeFolder.png</iconset> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="textLabel2_7"> <property name="text"> <string>Aguments:</string> </property> </widget> </item> <item row="0" column="0"> <widget class="QLabel" name="textLabel1_5"> <property name="text"> <string>Command:</string> </property> </widget> </item> <item row="0" column="1"> <widget class="c2bLineEdit" name="BibSearcherPdf2TextBin"> <property name="text"> <string/> </property> </widget> </item> <item row="1" column="1" colspan="2"> <widget class="c2bLineEdit" name="BibSearcherPdf2TextArg"> <property name="text"> <string/> </property> </widget> </item> </layout> </widget> </item> <item row="2" column="0"> <spacer> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>40</height> </size> </property> </spacer> </item> </layout> </widget> </widget> </item> <item row="3" column="0" colspan="3"> <widget class="Line" name="line_2"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="4" column="0" colspan="3"> <widget class="QStatusBar" name="statusBar"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="sizeGripEnabled"> <bool>false</bool> </property> </widget> </item> <item row="5" column="0" colspan="3"> <widget class="Line" name="line"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="6" column="0" colspan="3"> <widget class="QDialogButtonBox" name="buttonBox"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="standardButtons"> <set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Save</set> </property> </widget> </item> </layout> </widget> <customwidgets> <customwidget> <class>c2bLineEdit</class> <extends>QLineEdit</extends> <header>c2bLineEdit.h</header> </customwidget> <customwidget> <class>c2bIdLineEdit</class> <extends>QLineEdit</extends> <header>c2bIdLineEdit.h</header> </customwidget> <customwidget> <class>c2bShortcutWidget</class> <extends>QWidget</extends> <header>c2bShortcutWidget.h</header> <container>1</container> </customwidget> </customwidgets> <tabstops> <tabstop>buttonBox</tabstop> </tabstops> <resources> <include location="cb2bib.qrc"/> </resources> <connections> <connection> <sender>buttonBox</sender> <signal>accepted()</signal> <receiver>c2bConfigure</receiver> <slot>accept()</slot> <hints> <hint type="sourcelabel"> <x>427</x> <y>578</y> </hint> <hint type="destinationlabel"> <x>612</x> <y>561</y> </hint> </hints> </connection> <connection> <sender>buttonBox</sender> <signal>rejected()</signal> <receiver>c2bConfigure</receiver> <slot>reject()</slot> <hints> <hint type="sourcelabel"> <x>385</x> <y>578</y> </hint> <hint type="destinationlabel"> <x>342</x> <y>524</y> </hint> </hints> </connection> <connection> <sender>FmClient</sender> <signal>toggled(bool)</signal> <receiver>clientGroupBox</receiver> <slot>setEnabled(bool)</slot> <hints> <hint type="sourcelabel"> <x>549</x> <y>46</y> </hint> <hint type="destinationlabel"> <x>549</x> <y>106</y> </hint> </hints> </connection> <connection> <sender>UseProxy</sender> <signal>toggled(bool)</signal> <receiver>proxyGroupBox</receiver> <slot>setEnabled(bool)</slot> <hints> <hint type="sourcelabel"> <x>235</x> <y>162</y> </hint> <hint type="destinationlabel"> <x>276</x> <y>190</y> </hint> </hints> </connection> </connections> </ui> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bTextBrowser.cpp�������������������������������������������������0000644�0000000�0000000�00000000131�13124510216�016474� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������29 mtime=1498583182.78725679 30 atime=1498583183.007254748 30 ctime=1498583182.791256753 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bTextBrowser.cpp�����������������������������������������������������������������0000644�0001750�0000144�00000002515�13124510216�020072� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bTextBrowser.h" #include <QAction> #include <QContextMenuEvent> #include <QMenu> #include <QScrollBar> c2bTextBrowser::c2bTextBrowser(QWidget* parentw) : QTextBrowser(parentw) { setFrameShape(QTextBrowser::StyledPanel); setFrameShadow(QTextBrowser::Raised); } c2bTextBrowser::~c2bTextBrowser() {} void c2bTextBrowser::setSource(const QUrl& /* dummy_name */) {} void c2bTextBrowser::contextMenuEvent(QContextMenuEvent* qevent) { QMenu* edit_menu = createStandardContextMenu(); edit_menu->setTitle(tr("Edit...")); QMenu* menu = new QMenu(this); menu->addMenu(edit_menu); QList<QAction*> acts = actions(); for (int i = 0; i < acts.count(); ++i) menu->addAction(acts.at(i)); menu->exec(qevent->globalPos()); delete edit_menu; delete menu; } void c2bTextBrowser::updateHtml(const QString& newHtml) { const int scrollPosition(verticalScrollBar()->value()); setHtml(newHtml); verticalScrollBar()->setValue(scrollPosition); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/bookmarkPlugin.cpp�������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016602� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.719257421 30 atime=1498583183.007254748 30 ctime=1498583182.719257421 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/bookmarkPlugin.cpp�����������������������������������������������������������������0000644�0001750�0000144�00000007501�13124510216�020177� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "bookmarkPlugin.h" #include "c2b.h" #include "c2bFileSystemWatcher.h" #include "c2bSettings.h" #include "c2bUtils.h" #include <QtGui> bookmarkPlugin::bookmarkPlugin(QWidget* parentw) : QMenu(parentw) { setObjectName(QString::fromUtf8("menuBookmarks")); setTitle(QApplication::translate("c2bEditor", "&Bookmarks", 0)); connect(c2bSettingsP, SIGNAL(newSettings()), this, SLOT(init())); _fsw = new c2bFileSystemWatcher(this); connect(_fsw, SIGNAL(fileChanged(const QString&)), this, SLOT(parseBookmarks())); init(); } bookmarkPlugin::~bookmarkPlugin() {} void bookmarkPlugin::init() { const QString nfn(c2bSettingsP->fileName("cb2Bib/NetworkFile")); if (nfn == _bookmark_file) return; if (QFileInfo(nfn).exists()) { if (!_bookmark_file.isEmpty()) _fsw->removePath(_bookmark_file); _bookmark_file = nfn; _fsw->addPath(_bookmark_file); } parseBookmarks(); } void bookmarkPlugin::parseBookmarks() { clear(); const QString bmf(c2bUtils::fileToString(_bookmark_file)); QStringList bookmarks(bmf.split('\n', QString::KeepEmptyParts)); const QRegExp _bookmark("^editorbookmark="); const QRegExp _separator("^editorbookmark=\\s*$"); for (int i = 0; i < bookmarks.count(); ++i) { if (bookmarks.at(i).contains(_separator)) { addSeparator(); continue; } if (bookmarks.at(i).contains(_bookmark)) { bookmarks[i].remove(_bookmark); const QStringList bm_parts(bookmarks.at(i).split('|', QString::KeepEmptyParts)); if (bm_parts.count() != 4) { c2bUtils::warn(tr("bookmarkPlugin::parseBookmarks: Syntax error at '%1'").arg(bookmarks.at(i))); continue; } QAction* act = addAction(bm_parts.at(0), this, SLOT(openBookmark())); act->setData(bm_parts.at(1)); act->setStatusTip(QString("%1 [%2]").arg(bm_parts.at(0)).arg(bm_parts.at(1))); act->setShortcut(bm_parts.at(2)); act->setIcon(QIcon(iconProvider(bm_parts.at(1), bm_parts.at(3)))); } } addSeparator(); QAction* edit_bookmarks = addAction(tr("Edit Bookmarks"), this, SIGNAL(editBookmarks())); edit_bookmarks->setStatusTip(tr("Edit bookmarks")); edit_bookmarks->setIcon(QIcon(":/icons/icons/edit.png")); } QString bookmarkPlugin::iconProvider(const QString& fn, const QString& iconFile) { if (!iconFile.isEmpty()) return iconFile; if (fn.contains(QRegExp("\\.(tex|dvi)\\b", Qt::CaseInsensitive))) return ":/icons/icons/application-x-tex.png"; if (fn.contains(QRegExp("\\.(chm|djvu|pdf|ps)\\b", Qt::CaseInsensitive))) return ":/icons/icons/application-x-pdf.png"; if (fn.contains(QRegExp("\\.(htm|html|php)\\b", Qt::CaseInsensitive))) return ":/icons/icons/application-x-html.png"; if (fn.contains(QRegExp("\\.txt\\b", Qt::CaseInsensitive))) return ":/icons/icons/application-x-tex.png"; if (fn.contains(QRegExp("\\.bib\\b", Qt::CaseInsensitive))) return ":/icons/icons/cb2bib.png"; return ":/icons/icons/application-x-none.png"; } void bookmarkPlugin::openBookmark() { QAction* act = static_cast<QAction*>(sender()); if (act) { const QString fn(act->data().toString()); if (fn.endsWith(".bib")) // Open BiBTeX files internally emit openFile(fn); else c2bUtils::openFile(fn, parentWidget()); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bSearchInFiles.ui������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�016521� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 29 ctime=1498583182.64725809 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bSearchInFiles.ui����������������������������������������������������������������0000644�0001750�0000144�00000024020�13124510115�020105� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <author>Pere Constans</author> <class>c2bSearchInFiles</class> <widget class="QDialog" name="c2bSearchInFiles"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>824</width> <height>494</height> </rect> </property> <property name="windowTitle"> <string>Search in files - cb2Bib</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>6</number> </property> <property name="topMargin"> <number>6</number> </property> <property name="rightMargin"> <number>6</number> </property> <property name="bottomMargin"> <number>6</number> </property> <property name="spacing"> <number>6</number> </property> <item row="4" column="1"> <widget class="QGroupBox" name="Modifiers"> <property name="title"> <string>Modifier</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="0"> <widget class="QCheckBox" name="simplifySource"> <property name="text"> <string>&Simplify source</string> </property> </widget> </item> <item row="0" column="1"> <spacer> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> </layout> </widget> </item> <item row="4" column="0"> <widget class="QGroupBox" name="Scope"> <property name="title"> <string>Search scope</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="1"> <widget class="QCheckBox" name="documentFiles"> <property name="text"> <string>Scan &linked documents</string> </property> </widget> </item> <item row="0" column="0"> <widget class="QCheckBox" name="allBibFiles"> <property name="text"> <string>Scan all &BibTeX files</string> </property> </widget> </item> <item row="0" column="2"> <spacer> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>16</width> <height>22</height> </size> </property> </spacer> </item> </layout> </widget> </item> <item row="6" column="0" colspan="2"> <widget class="QLabel" name="searchLog"> <property name="text"> <string>Search for ...</string> </property> </widget> </item> <item row="7" column="0" colspan="2"> <widget class="Line" name="line"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="5" column="0" colspan="2"> <widget class="Line" name="line_4"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="3" column="0" colspan="2"> <widget class="Line" name="line_2"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="8" column="0" colspan="2"> <widget class="QDialogButtonBox" name="buttonBox"> <property name="focusPolicy"> <enum>Qt::NoFocus</enum> </property> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="standardButtons"> <set>QDialogButtonBox::Abort|QDialogButtonBox::Close|QDialogButtonBox::Help</set> </property> </widget> </item> <item row="0" column="0" colspan="2"> <widget class="QGroupBox" name="groupBox"> <property name="title"> <string>Pattern</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="0" column="0"> <widget class="c2bSearchInFilesPattern" name="pattern" native="true"/> </item> </layout> </widget> </item> <item row="1" column="0" colspan="2"> <widget class="Line" name="line_3"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item row="2" column="0" colspan="2"> <widget class="QGroupBox" name="Composite"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="title"> <string>Composite pattern</string> </property> <layout class="QGridLayout"> <property name="leftMargin"> <number>9</number> </property> <property name="topMargin"> <number>9</number> </property> <property name="rightMargin"> <number>9</number> </property> <property name="bottomMargin"> <number>9</number> </property> <property name="spacing"> <number>6</number> </property> <item row="3" column="1"> <widget class="QPushButton" name="editPatternB"> <property name="enabled"> <bool>false</bool> </property> <property name="text"> <string>&Edit</string> </property> </widget> </item> <item row="4" column="1"> <widget class="QPushButton" name="deletePatternB"> <property name="enabled"> <bool>false</bool> </property> <property name="text"> <string>&Delete</string> </property> </widget> </item> <item row="2" column="1"> <widget class="QPushButton" name="addPatternB"> <property name="enabled"> <bool>false</bool> </property> <property name="contextMenuPolicy"> <enum>Qt::PreventContextMenu</enum> </property> <property name="text"> <string>&Add</string> </property> </widget> </item> <item row="0" column="0" rowspan="5"> <widget class="QTreeWidget" name="patternList"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="tabKeyNavigation"> <bool>true</bool> </property> <property name="rootIsDecorated"> <bool>false</bool> </property> <property name="animated"> <bool>true</bool> </property> <column> <property name="text"> <string/> </property> </column> <column> <property name="text"> <string>Case</string> </property> </column> <column> <property name="text"> <string>Type</string> </property> </column> <column> <property name="text"> <string>Scope</string> </property> </column> <column> <property name="text"> <string/> </property> </column> <column> <property name="text"> <string>Pattern</string> </property> </column> </widget> </item> <item row="1" column="1"> <spacer> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>75</width> <height>91</height> </size> </property> </spacer> </item> <item row="0" column="1"> <widget class="QComboBox" name="Boolean"> <property name="enabled"> <bool>false</bool> </property> <item> <property name="text"> <string>All</string> </property> </item> <item> <property name="text"> <string>Any</string> </property> </item> </widget> </item> </layout> </widget> </item> </layout> </widget> <customwidgets> <customwidget> <class>c2bSearchInFilesPattern</class> <extends>QWidget</extends> <header>c2bSearchInFilesPattern.h</header> </customwidget> </customwidgets> <tabstops> <tabstop>patternList</tabstop> <tabstop>addPatternB</tabstop> <tabstop>deletePatternB</tabstop> <tabstop>allBibFiles</tabstop> <tabstop>documentFiles</tabstop> <tabstop>buttonBox</tabstop> </tabstops> <resources> <include location="cb2bib.qrc"/> </resources> <connections> <connection> <sender>buttonBox</sender> <signal>rejected()</signal> <receiver>c2bSearchInFiles</receiver> <slot>reject()</slot> <hints> <hint type="sourcelabel"> <x>325</x> <y>565</y> </hint> <hint type="destinationlabel"> <x>286</x> <y>274</y> </hint> </hints> </connection> </connections> </ui> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bIdLineEdit.cpp��������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016157� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.759257049 30 atime=1498583183.007254748 30 ctime=1498583182.763257013 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bIdLineEdit.cpp������������������������������������������������������������������0000644�0001750�0000144�00000011471�13124510216�017555� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. * * Improvements and modifications: * July 2009 - Added <<author_all_abbreviated>>, (C) 2009 by Dayu Huang ***************************************************************************/ #include "c2bIdLineEdit.h" #include "c2bUtils.h" #include <cb2bib_parameters.h> #include <QAction> #include <QContextMenuEvent> #include <QMenu> c2bIdLineEdit::c2bIdLineEdit(QWidget* parentw) : c2bLineEdit(parentw) { a_author_all_abbreviated = new QAction(this); a_author_all_initials = new QAction(this); a_author_first = new QAction(this); a_citeid = new QAction(this); a_journal_initials = new QAction(this); a_pages_first = new QAction(this); a_ppages_first = new QAction(this); a_title = new QAction(this); a_title_underscored = new QAction(this); a_volume = new QAction(this); a_year_abbreviated = new QAction(this); a_year_full = new QAction(this); a_reset = new QAction(this); c2bUtils::addSeparator(this); addAction(a_author_all_abbreviated); addAction(a_author_all_initials); addAction(a_author_first); c2bUtils::addSeparator(this); addAction(a_citeid); c2bUtils::addSeparator(this); addAction(a_journal_initials); c2bUtils::addSeparator(this); addAction(a_pages_first); addAction(a_ppages_first); c2bUtils::addSeparator(this); addAction(a_title); addAction(a_title_underscored); c2bUtils::addSeparator(this); addAction(a_volume); c2bUtils::addSeparator(this); addAction(a_year_abbreviated); addAction(a_year_full); c2bUtils::addSeparator(this); addAction(a_reset); a_author_all_abbreviated->setText(tr("Insert <<author_all_abbreviated>>")); a_author_all_initials->setText(tr("Insert <<author_all_initials>>")); a_author_first->setText(tr("Insert <<author_first>>")); a_citeid->setText(tr("Insert <<citeid>>")); a_journal_initials->setText(tr("Insert <<journal_initials>>")); a_pages_first->setText(tr("Insert <<pages_first>>")); a_ppages_first->setText(tr("Insert <<ppages_first>>")); a_title->setText(tr("Insert <<title>>")); a_title_underscored->setText(tr("Insert <<title_underscored>>")); a_volume->setText(tr("Insert <<volume>>")); a_year_abbreviated->setText(tr("Insert <<year_abbreviated>>")); a_year_full->setText(tr("Insert <<year_full>>")); a_reset->setText(tr("Reset ID Pattern")); connect(a_author_all_abbreviated, SIGNAL(triggered()), this, SLOT(author_all_abbreviated())); connect(a_author_all_initials, SIGNAL(triggered()), this, SLOT(author_all_initials())); connect(a_author_first, SIGNAL(triggered()), this, SLOT(author_first())); connect(a_citeid, SIGNAL(triggered()), this, SLOT(citeid())); connect(a_journal_initials, SIGNAL(triggered()), this, SLOT(journal_initials())); connect(a_pages_first, SIGNAL(triggered()), this, SLOT(pages_first())); connect(a_ppages_first, SIGNAL(triggered()), this, SLOT(ppages_first())); connect(a_title, SIGNAL(triggered()), this, SLOT(title())); connect(a_title_underscored, SIGNAL(triggered()), this, SLOT(title_underscored())); connect(a_volume, SIGNAL(triggered()), this, SLOT(volume())); connect(a_year_abbreviated, SIGNAL(triggered()), this, SLOT(year_abbreviated())); connect(a_year_full, SIGNAL(triggered()), this, SLOT(year_full())); connect(a_reset, SIGNAL(triggered()), this, SLOT(reset())); // Hide citeid as default: CiteID line edit a_citeid->setVisible(false); } c2bIdLineEdit::~c2bIdLineEdit() {} void c2bIdLineEdit::setDocumentIDEdit() { a_citeid->setVisible(true); } void c2bIdLineEdit::author_all_abbreviated() { insert("<<author_all_abbreviated>>"); } void c2bIdLineEdit::author_all_initials() { insert("<<author_all_initials>>"); } void c2bIdLineEdit::author_first() { insert("<<author_first>>"); } void c2bIdLineEdit::citeid() { insert("<<citeid>>"); } void c2bIdLineEdit::journal_initials() { insert("<<journal_initials>>"); } void c2bIdLineEdit::pages_first() { insert("<<pages_first>>"); } void c2bIdLineEdit::ppages_first() { insert("<<ppages_first>>"); } void c2bIdLineEdit::title() { insert("<<title_25>>"); } void c2bIdLineEdit::title_underscored() { insert("<<title_underscored_25>>"); } void c2bIdLineEdit::volume() { insert("<<volume>>"); } void c2bIdLineEdit::year_abbreviated() { insert("<<year_abbreviated>>"); } void c2bIdLineEdit::year_full() { insert("<<year_full>>"); } void c2bIdLineEdit::reset() { if (a_citeid->isVisible()) setText(C2B_DOCUMENT_ID_PATTERN); else setText(C2B_CITE_ID_PATTERN); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bCiterWidget.cpp�������������������������������������������������0000644�0000000�0000000�00000000132�13124510216�016417� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.735257273 30 atime=1498583183.007254748 30 ctime=1498583182.735257273 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bCiterWidget.cpp�����������������������������������������������������������������0000644�0001750�0000144�00000027120�13124510216�020013� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #include "c2bCiterWidget.h" #include "c2b.h" #include "c2bCiterModel.h" #include "c2bClipboard.h" #include "c2bCollectionIndex.h" #include "c2bCoreCiter.h" #include "c2bFileDialog.h" #include "c2bSettings.h" #include "c2bUtils.h" #include <QKeyEvent> #include <QLabel> #include <QMenu> c2bCiterWidget::c2bCiterWidget(QWidget* parentw) : QWidget(parentw) { ui.setupUi(this); ui.clipboardIcon->setVisible(true); ui.filterIcon->setVisible(false); _citerP = new c2bCoreCiter(this); _tray_icon = 0; setActions(); _settingsP = c2bSettingsP; resize(_settingsP->value("c2bCiter/size", size()).toSize()); move(_settingsP->value("c2bCiter/position", pos()).toPoint()); _clipboard_connected = true; _citations = new c2bCiterModel(this); connect(_citations, SIGNAL(statusLabel(const QString&)), this, SLOT(showLabel(const QString&))); connect(_citations, SIGNAL(statusMessage(const QString&)), this, SLOT(showMessage(const QString&))); connect(c2b::clipboard(), SIGNAL(cbDataChanged(const QString&)), this, SLOT(filterDataChanged(const QString&))); connect(ui.citationsView, SIGNAL(activated(const QModelIndex&)), _citations, SLOT(selectCitation(const QModelIndex&))); connect(ui.citationsView, SIGNAL(citeReferences()), this, SLOT(citeReferences())); connect(ui.citationsView, SIGNAL(editReference()), this, SLOT(editReference())); connect(ui.citationsView, SIGNAL(hideCiter()), this, SLOT(hide())); connect(ui.citationsView, SIGNAL(openAnnote()), this, SIGNAL(openAnnote())); connect(ui.citationsView, SIGNAL(openFile()), this, SLOT(openFile())); connect(ui.citationsView, SIGNAL(openUrl()), this, SLOT(openUrl())); connect(ui.citationsView, SIGNAL(patternFilterChanged(const bool, const QString&)), this, SLOT(updatePatternFilter(const bool, const QString&))); connect(ui.citationsView, SIGNAL(statusMessage(const QString&)), this, SLOT(showMessage(const QString&))); } c2bCiterWidget::~c2bCiterWidget() { if (!isFullScreen()) { _settingsP->setValue("c2bCiter/position", pos()); _settingsP->setValue("c2bCiter/size", size()); } _settingsP->setValue("c2bCiter/format", static_cast<int>(_citations->lastCitationFormat())); } void c2bCiterWidget::load() { _bibtex_files.clear(); if (_settingsP->cl_citer_filenames.count() == 0) _bibtex_files = c2bUtils::filesInDir(QFileInfo(_settingsP->fileName("cb2Bib/BibTeXFile")).absolutePath(), QStringList() << "*.bib"); else for (int i = 0; i < _settingsP->cl_citer_filenames.count(); ++i) _bibtex_files += c2bUtils::filesInDir(_settingsP->cl_citer_filenames.at(i), QStringList() << "*.bib"); c2bCiter::State state; state.format = static_cast<c2bCiter::Format>(_settingsP->value("c2bCiter/format", state.format).toInt()); reload(state); } void c2bCiterWidget::reload() { const c2bCiter::State state(ui.citationsView->currentState()); reload(state); } void c2bCiterWidget::reload(const c2bCiter::State& state) { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); updatePatternFilter(false, QString()); if (_bibtex_files.count() == 1) setWindowTitle(tr("%1 - cb2Bib").arg(QDir::toNativeSeparators(QFileInfo(_bibtex_files.at(0)).absoluteFilePath()))); else if (_bibtex_files.count() > 1) setWindowTitle(tr("%1 - cb2Bib").arg(QDir::toNativeSeparators(QFileInfo(_bibtex_files.at(0)).absolutePath()))); else setWindowTitle(tr("Citer - cb2Bib")); ui.citationsView->reloadModel(_citations, _bibtex_files, state); QApplication::restoreOverrideCursor(); } void c2bCiterWidget::toggleVisible() { if (isVisible()) hide(); else show(); } void c2bCiterWidget::show() { if (isHidden()) QWidget::show(); raise(); activateWindow(); ui.citationsView->setFocus(); } void c2bCiterWidget::setTrayIcon() { _tray_icon = new QSystemTrayIcon(this); _tray_icon->setIcon(QIcon(":/icons/icons/cb2bib.png")); _tray_icon->setToolTip("c2bBib Citer"); QMenu* tray_icon_menu = new QMenu(this); foreach(QAction * a, actions()) { tray_icon_menu->addAction(a); } _tray_icon->setContextMenu(tray_icon_menu); _tray_icon->show(); connect(_tray_icon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayIconActivated(QSystemTrayIcon::ActivationReason))); } void c2bCiterWidget::trayIconActivated(QSystemTrayIcon::ActivationReason r) { if (r == QSystemTrayIcon::Context) return; show(); } void c2bCiterWidget::setActions() { QAction* a; a = new QAction(this); a->setText(tr("Citer Help")); a->setShortcut(QKeySequence(QKeySequence::HelpContents)); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(help())); c2bUtils::addSeparator(this); a = new QAction(this); a->setText(tr("Open Directory")); a->setShortcut(QKeySequence(QKeySequence::Open)); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(openDirectory())); a = new QAction(this); a->setText(tr("Open Files")); a->setShortcut(QKeySequence(Qt::ALT + Qt::Key_O)); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(openFiles())); c2bUtils::addSeparator(this); a = new QAction(this); a->setText(tr("Refresh")); a->setShortcut(QKeySequence(QKeySequence::Refresh)); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(reload())); c2bUtils::addSeparator(this); a = new QAction(this); a->setText(tr("Search In Files")); a->setShortcut(QKeySequence(QKeySequence::Find)); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(doSearchInFiles())); c2bUtils::addSeparator(this); a = new QAction(this); a->setText(tr("Set LyX Pipe")); a->setShortcut(QKeySequence(Qt::ALT + Qt::Key_L)); addAction(a); connect(a, SIGNAL(triggered()), _citerP, SLOT(setLyXPipe())); c2bUtils::addSeparator(this); a = new QAction(this); a->setText(tr("Toggle cb2Bib")); a->setShortcut(QKeySequence(Qt::Key_F2)); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(toggleCb2Bib())); a = new QAction(this); a->setText(tr("Toggle Clipboard")); a->setShortcut(QKeySequence(Qt::ALT + Qt::Key_C)); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(toggleClipboard())); a = new QAction(this); a->setText(tr("Toggle Full Screen")); a->setShortcut(QKeySequence(Qt::ALT + Qt::Key_F)); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(toggleFullScreen())); c2bUtils::addSeparator(this); a = new QAction(this); a->setText(tr("Index Documents")); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(indexDocuments())); c2bUtils::addSeparator(this); a = new QAction(this); a->setText(tr("Exit")); a->setShortcut(QKeySequence(QKeySequence::Quit)); addAction(a); connect(a, SIGNAL(triggered()), c2b::instance(), SLOT(exitRequested())); } void c2bCiterWidget::openDirectory() { QString dir; if (_bibtex_files.count() > 0) dir = _bibtex_files.at(0); dir = c2bFileDialog::getExistingDirectory(this, tr("Select BibTeX directory"), dir); if (dir.isEmpty()) return; _bibtex_files = c2bUtils::filesInDir(dir, QStringList() << "*.bib"); reload(); } void c2bCiterWidget::openFiles() { QString dir; if (_bibtex_files.count() > 0) dir = _bibtex_files.at(0); const QStringList fns(c2bFileDialog::getOpenFilenames(this, "Select BibTeX filenames", dir, "BibTeX (*.bib);;All (*)")); if (fns.count() > 0) { _bibtex_files = fns; reload(); } } void c2bCiterWidget::doSearchInFiles() { const QString fn(_citations->isKeywordView() ? QString() : _citations->dataBibTeXFile(ui.citationsView->currentIndex())); if (fn.isEmpty()) showMessage(tr("No active reference.")); else c2b::doSearchInFiles(QString(), fn); } void c2bCiterWidget::toggleCb2Bib() { if (c2b::mainWidget()->isVisible()) c2b::mainWidget()->hide(); else c2bUtils::setWidgetOnTop(c2b::mainWidget()); } void c2bCiterWidget::toggleClipboard() { _clipboard_connected = !_clipboard_connected; ui.clipboardIcon->setVisible(_clipboard_connected); if (_clipboard_connected) showMessage(tr("Filter set to clipboard contents.")); } void c2bCiterWidget::toggleFullScreen() { if (isFullScreen()) showNormal(); else showFullScreen(); } void c2bCiterWidget::indexDocuments() { c2bCollectionIndex* ci(new c2bCollectionIndex(0)); ci->setAttribute(Qt::WA_DeleteOnClose); ci->show(); ci->index(); } void c2bCiterWidget::filterDataChanged(const QString& filter) { if (_clipboard_connected && isVisible()) { const QString p(c2bUtils::toAscii(filter, c2bUtils::Collation).simplified()); updatePatternFilter(false, p); ui.citationsView->setPatternFilter(p); } } void c2bCiterWidget::updatePatternFilter(const bool mode, const QString& pattern) { ui.filterIcon->setVisible(mode); if (mode) showLabel(tr("Filter: %1_").arg(pattern)); else { if (pattern.isEmpty()) showLabel(_citations->isKeywordView() ? tr("Glossary of terms") : pattern); else showLabel(tr("Filter: %1").arg(pattern)); } } void c2bCiterWidget::citeReferences() { const QStringList k(_citations->dataSelectedCiteIds()); if (k.count() > 0) { hide(); _citerP->cite(k); } else showMessage(tr("No selected references.")); } void c2bCiterWidget::editReference() { if (_citations->isKeywordView()) { showMessage(tr("No active reference.")); return; } const QString r(_citations->dataBibTeXPosition(ui.citationsView->currentIndex())); if (r.isEmpty()) showMessage(tr("No active reference.")); else emit openFile(r); } void c2bCiterWidget::openFile() { if (_citations->count() == 0) return; if (_citations->isKeywordView()) { showMessage(tr("No active reference.")); return; } const QString f(_citations->dataFile(ui.citationsView->currentIndex())); if (f.isEmpty()) showMessage(tr("No File entry in this reference.")); else { showMessage(tr("Opening %1").arg(f)); c2bUtils::openFile(f, parentWidget()); } } void c2bCiterWidget::openUrl() { if (_citations->count() == 0) return; if (_citations->isKeywordView()) { showMessage(tr("No active reference.")); return; } const QString u(_citations->dataUrl(ui.citationsView->currentIndex())); if (u.isEmpty()) showMessage(tr("No URL entry in this reference.")); else { showMessage(tr("Opening %1").arg(QUrl::fromPercentEncoding(u.toUtf8()))); c2bUtils::openFile(u, parentWidget()); } } void c2bCiterWidget::showLabel() { ui.statusBar->showMessage(_status_label, 0); } void c2bCiterWidget::showLabel(const QString& label) { _status_label = label; ui.statusBar->showMessage(_status_label, 0); } void c2bCiterWidget::showMessage(const QString& message) { QTimer::singleShot(C2B_MESSAGE_TIME, this, SLOT(showLabel())); ui.statusBar->showMessage(message, 0); } void c2bCiterWidget::help() { c2bUtils::displayHelp("http://www.molspaces.com/d_cb2bib-c2bciter.php"); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/qtsingleapplication������������������������������������������������0000644�0000000�0000000�00000000074�13124510115�017112� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 30 ctime=1498583182.667257904 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/���������������������������������������������������������������0000755�0001750�0000144�00000000000�13124510115�020554� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/PaxHeaders.3194/INSTALL.TXT������������������������������������0000644�0000000�0000000�00000000074�13124510115�020676� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 30 ctime=1498583182.667257904 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/INSTALL.TXT����������������������������������������������������0000644�0001750�0000144�00000022374�13124510115�022273� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������INSTALLATION INSTRUCTIONS These instructions refer to the package you are installing as some-package.tar.gz or some-package.zip. The .zip file is intended for use on Windows. The directory you choose for the installation will be referred to as your-install-dir. Note to Qt Visual Studio Integration users: In the instructions below, instead of building from command line with nmake, you can use the menu command 'Qt->Open Solution from .pro file' on the .pro files in the example and plugin directories, and then build from within Visual Studio. Unpacking and installation -------------------------- 1. Unpacking the archive (if you have not done so already). On Unix and Mac OS X (in a terminal window): cd your-install-dir gunzip some-package.tar.gz tar xvf some-package.tar This creates the subdirectory some-package containing the files. On Windows: Unpack the .zip archive by right-clicking it in explorer and choosing "Extract All...". If your version of Windows does not have zip support, you can use the infozip tools available from www.info-zip.org. If you are using the infozip tools (in a command prompt window): cd your-install-dir unzip some-package.zip 2. Configuring the package. The configure script is called "configure" on unix/mac and "configure.bat" on Windows. It should be run from a command line after cd'ing to the package directory. You can choose whether you want to use the component by including its source code directly into your project, or build the component as a dynamic shared library (DLL) that is loaded into the application at run-time. The latter may be preferable for technical or licensing (LGPL) reasons. If you want to build a DLL, run the configure script with the argument "-library". Also see the note about usage below. (Components that are Qt plugins, e.g. styles and image formats, are by default built as a plugin DLL.) The configure script will prompt you in some cases for further information. Answer these questions and carefully read the license text before accepting the license conditions. The package cannot be used if you do not accept the license conditions. 3. Building the component and examples (when required). If a DLL is to be built, or if you would like to build the examples, next give the commands qmake make [or nmake if your are using Microsoft Visual C++] The example program(s) can be found in the directory called "examples" or "example". Components that are Qt plugins, e.g. styles and image formats, are ready to be used as soon as they are built, so the rest of this installation instruction can be skipped. 4. Building the Qt Designer plugin (optional). Some of the widget components are provided with plugins for Qt Designer. To build and install the plugin, cd into the some-package/plugin directory and give the commands qmake make [or nmake if your are using Microsoft Visual C++] Restart Qt Designer to make it load the new widget plugin. Note: If you are using the built-in Qt Designer from the Qt Visual Studio Integration, you will need to manually copy the plugin DLL file, i.e. copy %QTDIR%\plugins\designer\some-component.dll to the Qt Visual Studio Integration plugin path, typically: C:\Program Files\Trolltech\Qt VS Integration\plugins Note: If you for some reason are using a Qt Designer that is built in debug mode, you will need to build the plugin in debug mode also. Edit the file plugin.pro in the plugin directory, changing 'release' to 'debug' in the CONFIG line, before running qmake. Solutions components are intended to be used directly from the package directory during development, so there is no 'make install' procedure. Using a component in your project --------------------------------- To use this component in your project, add the following line to the project's .pro file (or do the equivalent in your IDE): include(your-install-dir/some-package/src/some-package.pri) This adds the package's sources and headers to the SOURCES and HEADERS project variables respectively (or, if the component has been configured as a DLL, it adds that library to the LIBS variable), and updates INCLUDEPATH to contain the package's src directory. Additionally, the .pri file may include some dependencies needed by the package. To include a header file from the package in your sources, you can now simply use: #include <SomeClass> or alternatively, in pre-Qt 4 style: #include <some-class.h> Refer to the documentation to see the classes and headers this components provides. Install documentation (optional) -------------------------------- The HTML documentation for the package's classes is located in the your-install-dir/some-package/doc/html/index.html. You can open this file and read the documentation with any web browser. To install the documentation into Qt Assistant (for Qt version 4.4 and later): 1. In Assistant, open the Edit->Preferences dialog and choose the Documentation tab. Click the Add... button and select the file your-install-dir/some-package/doc/html/some-package.qch For Qt versions prior to 4.4, do instead the following: 1. The directory your-install-dir/some-package/doc/html contains a file called some-package.dcf. Execute the following commands in a shell, command prompt or terminal window: cd your-install-dir/some-package/doc/html/ assistant -addContentFile some-package.dcf The next time you start Qt Assistant, you can access the package's documentation. Removing the documentation from assistant ----------------------------------------- If you have installed the documentation into Qt Assistant, and want to uninstall it, do as follows, for Qt version 4.4 and later: 1. In Assistant, open the Edit->Preferences dialog and choose the Documentation tab. In the list of Registered Documentation, select the item com.nokia.qtsolutions.some-package_version, and click the Remove button. For Qt versions prior to 4.4, do instead the following: 1. The directory your-install-dir/some-package/doc/html contains a file called some-package.dcf. Execute the following commands in a shell, command prompt or terminal window: cd your-install-dir/some-package/doc/html/ assistant -removeContentFile some-package.dcf Using the component as a DLL ---------------------------- 1. Normal components The shared library (DLL) is built and placed in the some-package/lib directory. It is intended to be used directly from there during development. When appropriate, both debug and release versions are built, since the run-time linker will in some cases refuse to load a debug-built DLL into a release-built application or vice versa. The following steps are taken by default to help the dynamic linker to locate the DLL at run-time (during development): Unix: The some-package.pri file will add linker instructions to add the some-package/lib directory to the rpath of the executable. (When distributing, or if your system does not support rpath, you can copy the shared library to another place that is searched by the dynamic linker, e.g. the "lib" directory of your Qt installation.) Mac: The full path to the library is hardcoded into the library itself, from where it is copied into the executable at link time, and ready by the dynamic linker at run-time. (When distributing, you will want to edit these hardcoded paths in the same way as for the Qt DLLs. Refer to the document "Deploying an Application on Mac OS X" in the Qt Reference Documentation.) Windows: the .dll file(s) are copied into the "bin" directory of your Qt installation. The Qt installation will already have set up that directory to be searched by the dynamic linker. 2. Plugins For Qt Solutions plugins (e.g. image formats), both debug and release versions of the plugin are built by default when appropriate, since in some cases the release Qt library will not load a debug plugin, and vice versa. The plugins are automatically copied into the plugins directory of your Qt installation when built, so no further setup is required. Plugins may also be built statically, i.e. as a library that will be linked into your application executable, and so will not need to be redistributed as a separate plugin DLL to end users. Static building is required if Qt itself is built statically. To do it, just add "static" to the CONFIG variable in the plugin/plugin.pro file before building. Refer to the "Static Plugins" section in the chapter "How to Create Qt Plugins" for explanation of how to use a static plugin in your application. The source code of the example program(s) will also typically contain the relevant instructions as comments. Uninstalling ------------ The following command will remove any fils that have been automatically placed outside the package directory itself during installation and building make distclean [or nmake if your are using Microsoft Visual C++] If Qt Assistant documentation or Qt Designer plugins have been installed, they can be uninstalled manually, ref. above. Enjoy! :) - The Qt Solutions Team. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/PaxHeaders.3194/README.TXT�������������������������������������0000644�0000000�0000000�00000000074�13124510115�020525� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 30 ctime=1498583182.667257904 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/README.TXT�����������������������������������������������������0000644�0001750�0000144�00000001641�13124510115�022114� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Qt Solutions Component: Single Application The QtSingleApplication component provides support for applications that can be only started once per user. Version history: 2.0: - Version 1.3 ported to Qt 4. 2.1: - Fix compilation problem on Mac. 2.2: - Really fix the Mac compilation problem. - Mac: fix crash due to wrong object releasing. - Mac: Fix memory leak. 2.3: - Windows: Force creation of internal widget to make it work with Qt 4.2. 2.4: - Fix the system for automatic window raising on message reception. NOTE: minor API change. 2.5: - Mac: Fix isRunning() to work and report correctly. 2.6: - - initialize() is now obsolete, no longer necessary to call it - - Fixed race condition where multiple instances migth be started - - QtSingleCoreApplication variant provided for non-GUI (console) usage - Complete reimplementation. Visible changes: - LGPL release. �����������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/PaxHeaders.3194/src��������������������������������������������0000644�0000000�0000000�00000000074�13124510115�017701� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 30 ctime=1498583182.667257904 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/�����������������������������������������������������������0000755�0001750�0000144�00000000000�13124510115�021343� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/PaxHeaders.3194/qtlockedfile.cpp���������������������������0000644�0000000�0000000�00000000074�13124510115�023130� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 30 ctime=1498583182.667257904 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/qtlockedfile.cpp�������������������������������������������0000644�0001750�0000144�00000013742�13124510115�024524� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "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 Digia Plc and its Subsidiary(-ies) 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." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qtlockedfile.h" /*! \class QtLockedFile \brief The QtLockedFile class extends QFile with advisory locking functions. A file may be locked in read or write mode. Multiple instances of \e QtLockedFile, created in multiple processes running on the same machine, may have a file locked in read mode. Exactly one instance may have it locked in write mode. A read and a write lock cannot exist simultaneously on the same file. The file locks are advisory. This means that nothing prevents another process from manipulating a locked file using QFile or file system functions offered by the OS. Serialization is only guaranteed if all processes that access the file use QLockedFile. Also, while holding a lock on a file, a process must not open the same file again (through any API), or locks can be unexpectedly lost. The lock provided by an instance of \e QtLockedFile is released whenever the program terminates. This is true even when the program crashes and no destructors are called. */ /*! \enum QtLockedFile::LockMode This enum describes the available lock modes. \value ReadLock A read lock. \value WriteLock A write lock. \value NoLock Neither a read lock nor a write lock. */ /*! Constructs an unlocked \e QtLockedFile object. This constructor behaves in the same way as \e QFile::QFile(). \sa QFile::QFile() */ QtLockedFile::QtLockedFile() : QFile() { #ifdef Q_OS_WIN wmutex = 0; rmutex = 0; #endif m_lock_mode = NoLock; } /*! Constructs an unlocked QtLockedFile object with file \a name. This constructor behaves in the same way as \e QFile::QFile(const QString&). \sa QFile::QFile() */ QtLockedFile::QtLockedFile(const QString &name) : QFile(name) { #ifdef Q_OS_WIN wmutex = 0; rmutex = 0; #endif m_lock_mode = NoLock; } /*! Opens the file in OpenMode \a mode. This is identical to QFile::open(), with the one exception that the Truncate mode flag is disallowed. Truncation would conflict with the advisory file locking, since the file would be modified before the write lock is obtained. If truncation is required, use resize(0) after obtaining the write lock. Returns true if successful; otherwise false. \sa QFile::open(), QFile::resize() */ bool QtLockedFile::open(OpenMode mode) { if (mode & QIODevice::Truncate) { qWarning("QtLockedFile::open(): Truncate mode not allowed."); return false; } return QFile::open(mode); } /*! Returns \e true if this object has a in read or write lock; otherwise returns \e false. \sa lockMode() */ bool QtLockedFile::isLocked() const { return m_lock_mode != NoLock; } /*! Returns the type of lock currently held by this object, or \e QtLockedFile::NoLock. \sa isLocked() */ QtLockedFile::LockMode QtLockedFile::lockMode() const { return m_lock_mode; } /*! \fn bool QtLockedFile::lock(LockMode mode, bool block = true) Obtains a lock of type \a mode. The file must be opened before it can be locked. If \a block is true, this function will block until the lock is aquired. If \a block is false, this function returns \e false immediately if the lock cannot be aquired. If this object already has a lock of type \a mode, this function returns \e true immediately. If this object has a lock of a different type than \a mode, the lock is first released and then a new lock is obtained. This function returns \e true if, after it executes, the file is locked by this object, and \e false otherwise. \sa unlock(), isLocked(), lockMode() */ /*! \fn bool QtLockedFile::unlock() Releases a lock. If the object has no lock, this function returns immediately. This function returns \e true if, after it executes, the file is not locked by this object, and \e false otherwise. \sa lock(), isLocked(), lockMode() */ /*! \fn QtLockedFile::~QtLockedFile() Destroys the \e QtLockedFile object. If any locks were held, they are released. */ ������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/PaxHeaders.3194/qtsingleapplication.cpp��������������������0000644�0000000�0000000�00000000074�13124510115�024534� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 30 ctime=1498583182.667257904 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/qtsingleapplication.cpp������������������������������������0000644�0001750�0000144�00000027010�13124510115�026121� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "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 Digia Plc and its Subsidiary(-ies) 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." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qtsingleapplication.h" #include "qtlocalpeer.h" #include <QWidget> /*! \class QtSingleApplication qtsingleapplication.h \brief The QtSingleApplication class provides an API to detect and communicate with running instances of an application. This class allows you to create applications where only one instance should be running at a time. I.e., if the user tries to launch another instance, the already running instance will be activated instead. Another usecase is a client-server system, where the first started instance will assume the role of server, and the later instances will act as clients of that server. By default, the full path of the executable file is used to determine whether two processes are instances of the same application. You can also provide an explicit identifier string that will be compared instead. The application should create the QtSingleApplication object early in the startup phase, and call isRunning() to find out if another instance of this application is already running. If isRunning() returns false, it means that no other instance is running, and this instance has assumed the role as the running instance. In this case, the application should continue with the initialization of the application user interface before entering the event loop with exec(), as normal. The messageReceived() signal will be emitted when the running application receives messages from another instance of the same application. When a message is received it might be helpful to the user to raise the application so that it becomes visible. To facilitate this, QtSingleApplication provides the setActivationWindow() function and the activateWindow() slot. If isRunning() returns true, another instance is already running. It may be alerted to the fact that another instance has started by using the sendMessage() function. Also data such as startup parameters (e.g. the name of the file the user wanted this new instance to open) can be passed to the running instance with this function. Then, the application should terminate (or enter client mode). If isRunning() returns true, but sendMessage() fails, that is an indication that the running instance is frozen. Here's an example that shows how to convert an existing application to use QtSingleApplication. It is very simple and does not make use of all QtSingleApplication's functionality (see the examples for that). \code // Original int main(int argc, char **argv) { QApplication app(argc, argv); MyMainWidget mmw; mmw.show(); return app.exec(); } // Single instance int main(int argc, char **argv) { QtSingleApplication app(argc, argv); if (app.isRunning()) return !app.sendMessage(someDataString); MyMainWidget mmw; app.setActivationWindow(&mmw); mmw.show(); return app.exec(); } \endcode Once this QtSingleApplication instance is destroyed (normally when the process exits or crashes), when the user next attempts to run the application this instance will not, of course, be encountered. The next instance to call isRunning() or sendMessage() will assume the role as the new running instance. For console (non-GUI) applications, QtSingleCoreApplication may be used instead of this class, to avoid the dependency on the QtGui library. \sa QtSingleCoreApplication */ void QtSingleApplication::sysInit(const QString &appId) { actWin = 0; peer = new QtLocalPeer(this, appId); connect(peer, SIGNAL(messageReceived(const QString&)), SIGNAL(messageReceived(const QString&))); } /*! Creates a QtSingleApplication object. The application identifier will be QCoreApplication::applicationFilePath(). \a argc, \a argv, and \a GUIenabled are passed on to the QAppliation constructor. If you are creating a console application (i.e. setting \a GUIenabled to false), you may consider using QtSingleCoreApplication instead. */ QtSingleApplication::QtSingleApplication(int &argc, char **argv, bool GUIenabled) : QApplication(argc, argv, GUIenabled) { sysInit(); } /*! Creates a QtSingleApplication object with the application identifier \a appId. \a argc and \a argv are passed on to the QAppliation constructor. */ QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char **argv) : QApplication(argc, argv) { sysInit(appId); } #if QT_VERSION < 0x050000 /*! Creates a QtSingleApplication object. The application identifier will be QCoreApplication::applicationFilePath(). \a argc, \a argv, and \a type are passed on to the QAppliation constructor. */ QtSingleApplication::QtSingleApplication(int &argc, char **argv, Type type) : QApplication(argc, argv, type) { sysInit(); } # if defined(Q_WS_X11) /*! Special constructor for X11, ref. the documentation of QApplication's corresponding constructor. The application identifier will be QCoreApplication::applicationFilePath(). \a dpy, \a visual, and \a cmap are passed on to the QApplication constructor. */ QtSingleApplication::QtSingleApplication(Display* dpy, Qt::HANDLE visual, Qt::HANDLE cmap) : QApplication(dpy, visual, cmap) { sysInit(); } /*! Special constructor for X11, ref. the documentation of QApplication's corresponding constructor. The application identifier will be QCoreApplication::applicationFilePath(). \a dpy, \a argc, \a argv, \a visual, and \a cmap are passed on to the QApplication constructor. */ QtSingleApplication::QtSingleApplication(Display *dpy, int &argc, char **argv, Qt::HANDLE visual, Qt::HANDLE cmap) : QApplication(dpy, argc, argv, visual, cmap) { sysInit(); } /*! Special constructor for X11, ref. the documentation of QApplication's corresponding constructor. The application identifier will be \a appId. \a dpy, \a argc, \a argv, \a visual, and \a cmap are passed on to the QApplication constructor. */ QtSingleApplication::QtSingleApplication(Display* dpy, const QString &appId, int argc, char **argv, Qt::HANDLE visual, Qt::HANDLE cmap) : QApplication(dpy, argc, argv, visual, cmap) { sysInit(appId); } # endif // Q_WS_X11 #endif // QT_VERSION < 0x050000 /*! Returns true if another instance of this application is running; otherwise false. This function does not find instances of this application that are being run by a different user (on Windows: that are running in another session). \sa sendMessage() */ bool QtSingleApplication::isRunning() { return peer->isClient(); } /*! Tries to send the text \a message to the currently running instance. The QtSingleApplication object in the running instance will emit the messageReceived() signal when it receives the message. This function returns true if the message has been sent to, and processed by, the current instance. If there is no instance currently running, or if the running instance fails to process the message within \a timeout milliseconds, this function return false. \sa isRunning(), messageReceived() */ bool QtSingleApplication::sendMessage(const QString &message, int timeout) { return peer->sendMessage(message, timeout); } /*! Returns the application identifier. Two processes with the same identifier will be regarded as instances of the same application. */ QString QtSingleApplication::id() const { return peer->applicationId(); } /*! Sets the activation window of this application to \a aw. The activation window is the widget that will be activated by activateWindow(). This is typically the application's main window. If \a activateOnMessage is true (the default), the window will be activated automatically every time a message is received, just prior to the messageReceived() signal being emitted. \sa activateWindow(), messageReceived() */ void QtSingleApplication::setActivationWindow(QWidget* aw, bool activateOnMessage) { actWin = aw; if (activateOnMessage) connect(peer, SIGNAL(messageReceived(const QString&)), this, SLOT(activateWindow())); else disconnect(peer, SIGNAL(messageReceived(const QString&)), this, SLOT(activateWindow())); } /*! Returns the applications activation window if one has been set by calling setActivationWindow(), otherwise returns 0. \sa setActivationWindow() */ QWidget* QtSingleApplication::activationWindow() const { return actWin; } /*! De-minimizes, raises, and activates this application's activation window. This function does nothing if no activation window has been set. This is a convenience function to show the user that this application instance has been activated when he has tried to start another instance. This function should typically be called in response to the messageReceived() signal. By default, that will happen automatically, if an activation window has been set. \sa setActivationWindow(), messageReceived(), initialize() */ void QtSingleApplication::activateWindow() { if (actWin) { actWin->setWindowState(actWin->windowState() & ~Qt::WindowMinimized); actWin->raise(); actWin->activateWindow(); } } /*! \fn void QtSingleApplication::messageReceived(const QString& message) This signal is emitted when the current instance receives a \a message from another instance of this application. \sa sendMessage(), setActivationWindow(), activateWindow() */ /*! \fn void QtSingleApplication::initialize(bool dummy = true) \obsolete */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/PaxHeaders.3194/qtsinglecoreapplication.h������������������0000644�0000000�0000000�00000000074�13124510115�025052� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 30 ctime=1498583182.667257904 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/qtsinglecoreapplication.h����������������������������������0000644�0001750�0000144�00000005030�13124510115�026435� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "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 Digia Plc and its Subsidiary(-ies) 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." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QTSINGLECOREAPPLICATION_H #define QTSINGLECOREAPPLICATION_H #include <QCoreApplication> class QtLocalPeer; class QtSingleCoreApplication : public QCoreApplication { Q_OBJECT public: QtSingleCoreApplication(int &argc, char **argv); QtSingleCoreApplication(const QString &appId, int &argc, char **argv); bool isRunning(); QString id() const; public Q_SLOTS: bool sendMessage(const QString &message, int timeout = 5000); Q_SIGNALS: void messageReceived(const QString &message); private: QtLocalPeer* peer; }; #endif // QTSINGLECOREAPPLICATION_H ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/PaxHeaders.3194/qtsingleapplication.h����������������������0000644�0000000�0000000�00000000074�13124510115�024201� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 30 ctime=1498583182.667257904 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/qtsingleapplication.h��������������������������������������0000644�0001750�0000144�00000007613�13124510115�025575� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "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 Digia Plc and its Subsidiary(-ies) 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." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QTSINGLEAPPLICATION_H #define QTSINGLEAPPLICATION_H #include <QApplication> class QtLocalPeer; #if defined(Q_OS_WIN) # if !defined(QT_QTSINGLEAPPLICATION_EXPORT) && !defined(QT_QTSINGLEAPPLICATION_IMPORT) # define QT_QTSINGLEAPPLICATION_EXPORT # elif defined(QT_QTSINGLEAPPLICATION_IMPORT) # if defined(QT_QTSINGLEAPPLICATION_EXPORT) # undef QT_QTSINGLEAPPLICATION_EXPORT # endif # define QT_QTSINGLEAPPLICATION_EXPORT __declspec(dllimport) # elif defined(QT_QTSINGLEAPPLICATION_EXPORT) # undef QT_QTSINGLEAPPLICATION_EXPORT # define QT_QTSINGLEAPPLICATION_EXPORT __declspec(dllexport) # endif #else # define QT_QTSINGLEAPPLICATION_EXPORT #endif class QT_QTSINGLEAPPLICATION_EXPORT QtSingleApplication : public QApplication { Q_OBJECT public: QtSingleApplication(int &argc, char **argv, bool GUIenabled = true); QtSingleApplication(const QString &appId, int &argc, char **argv); #if QT_VERSION < 0x050000 QtSingleApplication(int &argc, char **argv, Type type); # if defined(Q_WS_X11) QtSingleApplication(Display* dpy, Qt::HANDLE visual = 0, Qt::HANDLE cmap = 0); QtSingleApplication(Display *dpy, int &argc, char **argv, Qt::HANDLE visual = 0, Qt::HANDLE cmap = 0); QtSingleApplication(Display* dpy, const QString &appId, int argc, char **argv, Qt::HANDLE visual = 0, Qt::HANDLE cmap = 0); # endif // Q_WS_X11 #endif // QT_VERSION < 0x050000 bool isRunning(); QString id() const; void setActivationWindow(QWidget* aw, bool activateOnMessage = true); QWidget* activationWindow() const; // Obsolete: void initialize(bool dummy = true) { isRunning(); Q_UNUSED(dummy) } public Q_SLOTS: bool sendMessage(const QString &message, int timeout = 5000); void activateWindow(); Q_SIGNALS: void messageReceived(const QString &message); private: void sysInit(const QString &appId = QString()); QtLocalPeer *peer; QWidget *actWin; }; #endif // QTSINGLEAPPLICATION_H ���������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/PaxHeaders.3194/qtlocalpeer.h������������������������������0000644�0000000�0000000�00000000074�13124510115�022442� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 30 ctime=1498583182.667257904 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/qtlocalpeer.h����������������������������������������������0000644�0001750�0000144�00000005205�13124510115�024031� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "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 Digia Plc and its Subsidiary(-ies) 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." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QTLOCALPEER_H #define QTLOCALPEER_H #include <QLocalServer> #include <QLocalSocket> #include <QDir> #include "qtlockedfile.h" class QtLocalPeer : public QObject { Q_OBJECT public: QtLocalPeer(QObject *parent = 0, const QString &appId = QString()); bool isClient(); bool sendMessage(const QString &message, int timeout); QString applicationId() const { return id; } Q_SIGNALS: void messageReceived(const QString &message); protected Q_SLOTS: void receiveConnection(); protected: QString id; QString socketName; QLocalServer* server; QtLP_Private::QtLockedFile lockFile; private: static const char* ack; }; #endif // QTLOCALPEER_H �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/PaxHeaders.3194/qtlockedfile.h�����������������������������0000644�0000000�0000000�00000000074�13124510115�022575� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.007254748 30 ctime=1498583182.667257904 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/qtlockedfile.h���������������������������������������������0000644�0001750�0000144�00000006320�13124510115�024163� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "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 Digia Plc and its Subsidiary(-ies) 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." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QTLOCKEDFILE_H #define QTLOCKEDFILE_H #include <QFile> #ifdef Q_OS_WIN #include <QVector> #endif #if defined(Q_OS_WIN) # if !defined(QT_QTLOCKEDFILE_EXPORT) && !defined(QT_QTLOCKEDFILE_IMPORT) # define QT_QTLOCKEDFILE_EXPORT # elif defined(QT_QTLOCKEDFILE_IMPORT) # if defined(QT_QTLOCKEDFILE_EXPORT) # undef QT_QTLOCKEDFILE_EXPORT # endif # define QT_QTLOCKEDFILE_EXPORT __declspec(dllimport) # elif defined(QT_QTLOCKEDFILE_EXPORT) # undef QT_QTLOCKEDFILE_EXPORT # define QT_QTLOCKEDFILE_EXPORT __declspec(dllexport) # endif #else # define QT_QTLOCKEDFILE_EXPORT #endif namespace QtLP_Private { class QT_QTLOCKEDFILE_EXPORT QtLockedFile : public QFile { public: enum LockMode { NoLock = 0, ReadLock, WriteLock }; QtLockedFile(); explicit QtLockedFile(const QString &name); ~QtLockedFile(); bool open(OpenMode mode); bool lock(LockMode mode, bool block = true); bool unlock(); bool isLocked() const; LockMode lockMode() const; private: #ifdef Q_OS_WIN Qt::HANDLE wmutex; Qt::HANDLE rmutex; QVector<Qt::HANDLE> rmutexes; QString mutexname; Qt::HANDLE getMutexHandle(int idx, bool doCreate); bool waitMutex(Qt::HANDLE mutex, bool doBlock); #endif LockMode m_lock_mode; }; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/PaxHeaders.3194/qtlockedfile_win.cpp�����������������������0000644�0000000�0000000�00000000074�13124510115�024005� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 30 ctime=1498583182.667257904 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/qtlockedfile_win.cpp���������������������������������������0000644�0001750�0000144�00000014661�13124510115�025402� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "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 Digia Plc and its Subsidiary(-ies) 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." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qtlockedfile.h" #include <qt_windows.h> #include <QFileInfo> #define MUTEX_PREFIX "QtLockedFile mutex " // Maximum number of concurrent read locks. Must not be greater than MAXIMUM_WAIT_OBJECTS #define MAX_READERS MAXIMUM_WAIT_OBJECTS #if QT_VERSION >= 0x050000 #define QT_WA(unicode, ansi) unicode #endif Qt::HANDLE QtLockedFile::getMutexHandle(int idx, bool doCreate) { if (mutexname.isEmpty()) { QFileInfo fi(*this); mutexname = QString::fromLatin1(MUTEX_PREFIX) + fi.absoluteFilePath().toLower(); } QString mname(mutexname); if (idx >= 0) mname += QString::number(idx); Qt::HANDLE mutex; if (doCreate) { QT_WA( { mutex = CreateMutexW(NULL, FALSE, (TCHAR*)mname.utf16()); }, { mutex = CreateMutexA(NULL, FALSE, mname.toLocal8Bit().constData()); } ); if (!mutex) { qErrnoWarning("QtLockedFile::lock(): CreateMutex failed"); return 0; } } else { QT_WA( { mutex = OpenMutexW(SYNCHRONIZE | MUTEX_MODIFY_STATE, FALSE, (TCHAR*)mname.utf16()); }, { mutex = OpenMutexA(SYNCHRONIZE | MUTEX_MODIFY_STATE, FALSE, mname.toLocal8Bit().constData()); } ); if (!mutex) { if (GetLastError() != ERROR_FILE_NOT_FOUND) qErrnoWarning("QtLockedFile::lock(): OpenMutex failed"); return 0; } } return mutex; } bool QtLockedFile::waitMutex(Qt::HANDLE mutex, bool doBlock) { Q_ASSERT(mutex); DWORD res = WaitForSingleObject(mutex, doBlock ? INFINITE : 0); switch (res) { case WAIT_OBJECT_0: case WAIT_ABANDONED: return true; break; case WAIT_TIMEOUT: break; default: qErrnoWarning("QtLockedFile::lock(): WaitForSingleObject failed"); } return false; } bool QtLockedFile::lock(LockMode mode, bool block) { if (!isOpen()) { qWarning("QtLockedFile::lock(): file is not opened"); return false; } if (mode == NoLock) return unlock(); if (mode == m_lock_mode) return true; if (m_lock_mode != NoLock) unlock(); if (!wmutex && !(wmutex = getMutexHandle(-1, true))) return false; if (!waitMutex(wmutex, block)) return false; if (mode == ReadLock) { int idx = 0; for (; idx < MAX_READERS; idx++) { rmutex = getMutexHandle(idx, false); if (!rmutex || waitMutex(rmutex, false)) break; CloseHandle(rmutex); } bool ok = true; if (idx >= MAX_READERS) { qWarning("QtLockedFile::lock(): too many readers"); rmutex = 0; ok = false; } else if (!rmutex) { rmutex = getMutexHandle(idx, true); if (!rmutex || !waitMutex(rmutex, false)) ok = false; } if (!ok && rmutex) { CloseHandle(rmutex); rmutex = 0; } ReleaseMutex(wmutex); if (!ok) return false; } else { Q_ASSERT(rmutexes.isEmpty()); for (int i = 0; i < MAX_READERS; i++) { Qt::HANDLE mutex = getMutexHandle(i, false); if (mutex) rmutexes.append(mutex); } if (rmutexes.size()) { DWORD res = WaitForMultipleObjects(rmutexes.size(), rmutexes.constData(), TRUE, block ? INFINITE : 0); if (res != WAIT_OBJECT_0 && res != WAIT_ABANDONED) { if (res != WAIT_TIMEOUT) qErrnoWarning("QtLockedFile::lock(): WaitForMultipleObjects failed"); m_lock_mode = WriteLock; // trick unlock() to clean up - semiyucky unlock(); return false; } } } m_lock_mode = mode; return true; } bool QtLockedFile::unlock() { if (!isOpen()) { qWarning("QtLockedFile::unlock(): file is not opened"); return false; } if (!isLocked()) return true; if (m_lock_mode == ReadLock) { ReleaseMutex(rmutex); CloseHandle(rmutex); rmutex = 0; } else { foreach(Qt::HANDLE mutex, rmutexes) { ReleaseMutex(mutex); CloseHandle(mutex); } rmutexes.clear(); ReleaseMutex(wmutex); } m_lock_mode = QtLockedFile::NoLock; return true; } QtLockedFile::~QtLockedFile() { if (isOpen()) unlock(); if (wmutex) CloseHandle(wmutex); } �������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/PaxHeaders.3194/qtlocalpeer.cpp����������������������������0000644�0000000�0000000�00000000074�13124510115�022775� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 30 ctime=1498583182.667257904 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/qtlocalpeer.cpp��������������������������������������������0000644�0001750�0000144�00000015070�13124510115�024365� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "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 Digia Plc and its Subsidiary(-ies) 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." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qtlocalpeer.h" #include <QCoreApplication> #include <QDataStream> #include <QTime> #if defined(Q_OS_WIN) #include <QLibrary> #include <qt_windows.h> typedef BOOL(WINAPI*PProcessIdToSessionId)(DWORD,DWORD*); static PProcessIdToSessionId pProcessIdToSessionId = 0; #endif #if defined(Q_OS_UNIX) #include <sys/types.h> #include <time.h> #include <unistd.h> #endif namespace QtLP_Private { #include "qtlockedfile.cpp" #if defined(Q_OS_WIN) #include "qtlockedfile_win.cpp" #else #include "qtlockedfile_unix.cpp" #endif } const char* QtLocalPeer::ack = "ack"; QtLocalPeer::QtLocalPeer(QObject* parent, const QString &appId) : QObject(parent), id(appId) { QString prefix = id; if (id.isEmpty()) { id = QCoreApplication::applicationFilePath(); #if defined(Q_OS_WIN) id = id.toLower(); #endif prefix = id.section(QLatin1Char('/'), -1); } prefix.remove(QRegExp("[^a-zA-Z]")); prefix.truncate(6); QByteArray idc = id.toUtf8(); quint16 idNum = qChecksum(idc.constData(), idc.size()); socketName = QLatin1String("qtsingleapp-") + prefix + QLatin1Char('-') + QString::number(idNum, 16); #if defined(Q_OS_WIN) if (!pProcessIdToSessionId) { QLibrary lib("kernel32"); pProcessIdToSessionId = (PProcessIdToSessionId)lib.resolve("ProcessIdToSessionId"); } if (pProcessIdToSessionId) { DWORD sessionId = 0; pProcessIdToSessionId(GetCurrentProcessId(), &sessionId); socketName += QLatin1Char('-') + QString::number(sessionId, 16); } #else socketName += QLatin1Char('-') + QString::number(::getuid(), 16); #endif server = new QLocalServer(this); QString lockName = QDir(QDir::tempPath()).absolutePath() + QLatin1Char('/') + socketName + QLatin1String("-lockfile"); lockFile.setFileName(lockName); lockFile.open(QIODevice::ReadWrite); } bool QtLocalPeer::isClient() { if (lockFile.isLocked()) return false; if (!lockFile.lock(QtLP_Private::QtLockedFile::WriteLock, false)) return true; bool res = server->listen(socketName); #if defined(Q_OS_UNIX) && (QT_VERSION >= QT_VERSION_CHECK(4,5,0)) // ### Workaround if (!res && server->serverError() == QAbstractSocket::AddressInUseError) { QFile::remove(QDir::cleanPath(QDir::tempPath())+QLatin1Char('/')+socketName); res = server->listen(socketName); } #endif if (!res) qWarning("QtSingleCoreApplication: listen on local socket failed, %s", qPrintable(server->errorString())); QObject::connect(server, SIGNAL(newConnection()), SLOT(receiveConnection())); return false; } bool QtLocalPeer::sendMessage(const QString &message, int timeout) { if (!isClient()) return false; QLocalSocket socket; bool connOk = false; for(int i = 0; i < 2; i++) { // Try twice, in case the other instance is just starting up socket.connectToServer(socketName); connOk = socket.waitForConnected(timeout/2); if (connOk || i) break; int ms = 250; #if defined(Q_OS_WIN) Sleep(DWORD(ms)); #else struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 }; nanosleep(&ts, NULL); #endif } if (!connOk) return false; QByteArray uMsg(message.toUtf8()); QDataStream ds(&socket); ds.writeBytes(uMsg.constData(), uMsg.size()); bool res = socket.waitForBytesWritten(timeout); if (res) { res &= socket.waitForReadyRead(timeout); // wait for ack if (res) res &= (socket.read(qstrlen(ack)) == ack); } return res; } void QtLocalPeer::receiveConnection() { QLocalSocket* socket = server->nextPendingConnection(); if (!socket) return; while (socket->bytesAvailable() < (int)sizeof(quint32)) socket->waitForReadyRead(); QDataStream ds(socket); QByteArray uMsg; quint32 remaining; ds >> remaining; uMsg.resize(remaining); int got = 0; char* uMsgBuf = uMsg.data(); do { got = ds.readRawData(uMsgBuf, remaining); remaining -= got; uMsgBuf += got; } while (remaining && got >= 0 && socket->waitForReadyRead(2000)); if (got < 0) { qWarning("QtLocalPeer: Message reception failed %s", socket->errorString().toLatin1().constData()); delete socket; return; } QString message(QString::fromUtf8(uMsg)); socket->write(ack, qstrlen(ack)); socket->waitForBytesWritten(1000); socket->waitForDisconnected(1000); // make sure client reads ack delete socket; emit messageReceived(message); //### (might take a long time to return) } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/PaxHeaders.3194/qtlockedfile_unix.cpp����������������������0000644�0000000�0000000�00000000074�13124510115�024173� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 30 ctime=1498583182.667257904 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/qtlockedfile_unix.cpp��������������������������������������0000644�0001750�0000144�00000006614�13124510115�025567� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "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 Digia Plc and its Subsidiary(-ies) 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." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include <string.h> #include <errno.h> #include <unistd.h> #include <fcntl.h> #include "qtlockedfile.h" bool QtLockedFile::lock(LockMode mode, bool block) { if (!isOpen()) { qWarning("QtLockedFile::lock(): file is not opened"); return false; } if (mode == NoLock) return unlock(); if (mode == m_lock_mode) return true; if (m_lock_mode != NoLock) unlock(); struct flock fl; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; fl.l_type = (mode == ReadLock) ? F_RDLCK : F_WRLCK; int cmd = block ? F_SETLKW : F_SETLK; int ret = fcntl(handle(), cmd, &fl); if (ret == -1) { if (errno != EINTR && errno != EAGAIN) qWarning("QtLockedFile::lock(): fcntl: %s", strerror(errno)); return false; } m_lock_mode = mode; return true; } bool QtLockedFile::unlock() { if (!isOpen()) { qWarning("QtLockedFile::unlock(): file is not opened"); return false; } if (!isLocked()) return true; struct flock fl; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 0; fl.l_type = F_UNLCK; int ret = fcntl(handle(), F_SETLKW, &fl); if (ret == -1) { qWarning("QtLockedFile::lock(): fcntl: %s", strerror(errno)); return false; } m_lock_mode = NoLock; return true; } QtLockedFile::~QtLockedFile() { if (isOpen()) unlock(); } ��������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/PaxHeaders.3194/qtsinglecoreapplication.cpp����������������0000644�0000000�0000000�00000000074�13124510115�025405� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 30 ctime=1498583182.667257904 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/qtsingleapplication/src/qtsinglecoreapplication.cpp��������������������������������0000644�0001750�0000144�00000012355�13124510115�027000� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Solutions component. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "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 Digia Plc and its Subsidiary(-ies) 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." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qtsinglecoreapplication.h" #include "qtlocalpeer.h" /*! \class QtSingleCoreApplication qtsinglecoreapplication.h \brief A variant of the QtSingleApplication class for non-GUI applications. This class is a variant of QtSingleApplication suited for use in console (non-GUI) applications. It is an extension of QCoreApplication (instead of QApplication). It does not require the QtGui library. The API and usage is identical to QtSingleApplication, except that functions relating to the "activation window" are not present, for obvious reasons. Please refer to the QtSingleApplication documentation for explanation of the usage. A QtSingleCoreApplication instance can communicate to a QtSingleApplication instance if they share the same application id. Hence, this class can be used to create a light-weight command-line tool that sends commands to a GUI application. \sa QtSingleApplication */ /*! Creates a QtSingleCoreApplication object. The application identifier will be QCoreApplication::applicationFilePath(). \a argc and \a argv are passed on to the QCoreAppliation constructor. */ QtSingleCoreApplication::QtSingleCoreApplication(int &argc, char **argv) : QCoreApplication(argc, argv) { peer = new QtLocalPeer(this); connect(peer, SIGNAL(messageReceived(const QString&)), SIGNAL(messageReceived(const QString&))); } /*! Creates a QtSingleCoreApplication object with the application identifier \a appId. \a argc and \a argv are passed on to the QCoreAppliation constructor. */ QtSingleCoreApplication::QtSingleCoreApplication(const QString &appId, int &argc, char **argv) : QCoreApplication(argc, argv) { peer = new QtLocalPeer(this, appId); connect(peer, SIGNAL(messageReceived(const QString&)), SIGNAL(messageReceived(const QString&))); } /*! Returns true if another instance of this application is running; otherwise false. This function does not find instances of this application that are being run by a different user (on Windows: that are running in another session). \sa sendMessage() */ bool QtSingleCoreApplication::isRunning() { return peer->isClient(); } /*! Tries to send the text \a message to the currently running instance. The QtSingleCoreApplication object in the running instance will emit the messageReceived() signal when it receives the message. This function returns true if the message has been sent to, and processed by, the current instance. If there is no instance currently running, or if the running instance fails to process the message within \a timeout milliseconds, this function return false. \sa isRunning(), messageReceived() */ bool QtSingleCoreApplication::sendMessage(const QString &message, int timeout) { return peer->sendMessage(message, timeout); } /*! Returns the application identifier. Two processes with the same identifier will be regarded as instances of the same application. */ QString QtSingleCoreApplication::id() const { return peer->applicationId(); } /*! \fn void QtSingleCoreApplication::messageReceived(const QString& message) This signal is emitted when the current instance receives a \a message from another instance of this application. \sa sendMessage() */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/PaxHeaders.3194/c2bFileSystemWatcher.h���������������������������������������������0000644�0000000�0000000�00000000131�13124510216�017253� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 mtime=1498583182.839256308 30 atime=1498583183.011254711 29 ctime=1498583182.84325627 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/src/c2bFileSystemWatcher.h�������������������������������������������������������������0000644�0001750�0000144�00000002000�13124510216�020636� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************************************************** * Copyright (C) 2004-2017 by Pere Constans * constans@molspaces.com * cb2Bib version 1.9.7. Licensed under the GNU GPL version 3. * See the LICENSE file that comes with this distribution. ***************************************************************************/ #ifndef C2BFILESYSTEMWATCHER_H #define C2BFILESYSTEMWATCHER_H #include <QFileSystemWatcher> class c2bFileSystemWatcher : public QObject { Q_OBJECT public: explicit c2bFileSystemWatcher(QObject* parento = 0); inline ~c2bFileSystemWatcher() {} inline void addPath(const QString& path) { _filewatcher.addPath(path); } inline void removePath(const QString& path) { _filewatcher.removePath(path); } signals: void fileChanged(const QString& path); private slots: void fileSaved(); void waitForSaved(const QString& path); private: QFileSystemWatcher _filewatcher; QString _path; }; #endif cb2bib-1.9.7/PaxHeaders.3194/testPDFImport����������������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�014754� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 29 ctime=1498583182.67525783 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/testPDFImport/�������������������������������������������������������������������������0000755�0001750�0000144�00000000000�13124510115�016417� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/testPDFImport/PaxHeaders.3194/nomeaning4.pdf�������������������������������������������0000644�0000000�0000000�00000000073�13124510115�017563� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 29 ctime=1498583182.67525783 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/testPDFImport/nomeaning4.pdf�����������������������������������������������������������0000644�0001750�0000144�00000075520�13124510115�021162� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.2 7 0 obj << /Type/Encoding /Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis] >> endobj 10 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F1 /FontDescriptor 9 0 R /BaseFont/NOAEMU+CMR10 /FirstChar 33 /LastChar 196 /Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3 777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 500] >> endobj 13 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F2 /FontDescriptor 12 0 R /BaseFont/TCDBMP+CMBX10 /FirstChar 33 /LastChar 196 /Widths[350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1 575 1150 575 575 575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 691.7 958.3 894.4 805.6 766.7 900 830.6 894.4 830.6 894.4 0 0 830.6 670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 575] >> endobj 16 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F3 /FontDescriptor 15 0 R /BaseFont/EWUVHY+CMBX12 /FirstChar 33 /LastChar 196 /Widths[342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500 562.5 1125 562.5 562.5 562.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 675.9 937.5 875 787 750 879.6 812.5 875 812.5 875 0 0 812.5 656.2 625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 562.5] >> endobj 19 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F4 /FontDescriptor 18 0 R /BaseFont/QGNGHU+CMBX9 /FirstChar 33 /LastChar 196 /Widths[360.2 617.6 986.1 591.7 986.1 920.4 328.7 460.2 460.2 591.7 920.4 328.7 394.4 328.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 328.7 328.7 360.2 920.4 558.8 558.8 920.4 892.9 840.9 854.6 906.6 776.5 743.7 929.9 924.4 446.3 610.8 925.8 710.8 1121.6 924.4 888.9 808 888.9 886.7 657.4 823.1 908.6 892.9 1221.6 892.9 892.9 723.1 328.7 617.6 328.7 591.7 328.7 328.7 575.2 657.4 525.9 657.4 543 361.6 591.7 657.4 328.7 361.6 624.5 328.7 986.1 657.4 591.7 657.4 624.5 488.1 466.8 460.2 657.4 624.5 854.6 624.5 624.5 525.9 591.7 1183.3 591.7 591.7 591.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 710.8 986.1 920.4 827.2 788.9 924.4 854.6 920.4 854.6 920.4 0 0 854.6 690.3 657.4 657.4 986.1 986.1 328.7 361.6 591.7 591.7 591.7 591.7 591.7 892.9 525.9 616.8 854.6 920.4 591.7 1071 1202.5 920.4 328.7 591.7] >> endobj 21 0 obj << /Filter[/FlateDecode] /Length 1662 >> stream xÚ}WIsÛ6¾÷WèjƤ Üz³ÛÄM'n2ŽÓN§í’` Hª�é&ýõ} ¨Åòô"oùÞ-ò,ÏÛ}n×÷—oÄ¢ÍÚjqÿ°H›,Wq÷ãÉ•ËTJ™Üêm¯/–Ýÿ|ù¦Øs—*“b‘«âè2«e<»`!¢©(Úý®‘|G.„ÈÚ/ Qd¢]¤¢ÎÚ†î¾svå \©Ëdc\àUg/v~XJ‘<áñ+ž›¡$Ú˜2k ¼ÓÝÐ/Ó²ÉAöä_P‹f†@¨<“õ"UM&éÆÛl™ ÑÉÇO··Ww˶N~®&­ËLÀ¥¢Ì*¾uÿhÉX‘ð7O4o׫âÚ®x½[¦E“l˜Áv¼üÈÇæ«îv΀þ²¬Ž {(AÆ,R2 ÍTI 4E ЀD†pÉÂ#k‘E¦®ÓþÓG}J©ƒ>¹×Ü =H~5ËOÉH*qliUyZñµª\´â&j­J¹×ŠdÖŠI+’^Õ³W*G¯ƒƒ~NàYŸhŽôÁfÖ¡ÜërÔ+Ö‹PT¢&P(ÉÉó#P‹¨îY¢Õ5¦$œg"æ2ÏÙ&“ë·ïoî®>ütžkUM¡Æ\+èæ/:¬'ð³Ì)ËJ�äV;7øµfbÌ+ú]3icÂΣkUµTu‘ô­má„E¸xy=ôO&ŒÐ�ÒRp¡¬ÝYÒ1àxWVmò »¥9 —M‹ é,–@U'ý°ŠY-’h ¦^³„'»‰«5œš ù !õ}à#° ÛIÝ$Ú…ã0zÓcìFNPö²©Ý£Êo!îVºß $¼iÈgüó´,K*YàùoàÔò•ˆq°kË”UIˆÈ[ížçi¬U:7>-¦áÆ®µOƒá½ÆO›8ˆÁ´±L‹Ïvžî«Æ*–TyȸÓ~´³üWšú 0Ž`7t1B¶Nܰ &„S§ Rs¨¹‹Ò2\%qÅxº}û£ºÒ0»öÒ\Œi‡,S˜\ú2VîÖßÜ$¸ôy2-9ðÑB?“zLš·f²‹ßÃßµ·a´hØ$9™²z&FHÅ)©5&Ë=(p‰¤H#·†8õnªeâ^Ðòzu±ççÄõÕãg홓Á#{ŠªÈZµ-´nîÕ{ocè8# ‰ü H&€“ÐD¨Oêy(°pOå9³ +F–¦ç¯sz</‰ nÖk=jw’d ÁxŒ!±PÏï1]Áš_—Ðú0©aÞ*ØÇ„·ÝLÓÓ8ÌÇ=œCj´—Ô±†°7i@ðØ&Î.ÀL¨Ñ †­%f:Ae dR£Â…s¦ßNqó4¹­öØ(‹œÌFâ3<ÀÓ¦•É랺—ÌÀþƒ•B ’/(UÈ9µTÃÉŒ§!D™u!ì†0zÌäÈ¢˜‡Áwš—'Þ­g¢>Rœ|˜ÛXt ƒ/VŽÂ¹jlè°+I%ˆ'€=ŽVL`?ø0Ëš©\¢é9ȈյJ®?L:=û•×£évÔðQ4m§S8§ÀtbVß^jîEð¨Ò ·–K$®´EÁÓÄn{{fñ´Ôi‹ìÜH$(³«t=RÀ°Û¬‡Žù Í™‹§ŒJ |‡0xݨây #ºSÆèÂ9Ghˆ£ËôÁðhÃéŽ7#63(ÔÛÙÈ–Ëá 8 qÎ# ²#äæþg§7«¹y`œÙ²õÈYÀ;Zå>£2:�ÇŠ²¿.îiàRŸÄËïˆEâèUu‰­�3¦€Žv&nt?ðýk?Áò,\Ø«"¹Æñºã·2ùͺGã:Þ¼3vÕÛñ9úÊm§žº]%㈓T¢´ ²¬¹S‚Xn1g èͰ)9d4²‹i½öòè0ðItxLCy !N[+”§‡lcBÁÂ8–÷æe‡Åôáܶk§ñ5ç{–c‹‰YƒCØz@Èg�`ѽ†]¤Âë1~n&=-g¡Ñ<ªì–Z+NG°‹3 0žÐ;ÓŸ= ›:+à¿¢,3%öèâô­’ï?Ý-üÃëóÿlu&%¼£«,g“îqø˜¯ñѨ¿P°{6æÁ3ìðo…àwß_^®uöýbcÑo¬Î¿½DÒåþßåâõýwÿÁC> endstream endobj 23 0 obj << /F1 10 0 R /F2 13 0 R /F3 16 0 R /F4 19 0 R >> endobj 6 0 obj << /ProcSet[/PDF/Text/ImageC] /Font 23 0 R >> endobj 9 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-251 -250 1009 969] /FontName/NOAEMU+CMR10 /ItalicAngle 0 /StemV 69 /FontFile 8 0 R /Flags 4 >> endobj 8 0 obj << /Filter[/FlateDecode] /Length1 720 /Length2 11503 /Length3 533 /Length 12060 >> stream xÚí”ePᶦq,¸nÜÝÝ%¸CpÛ8Û¸;A‚»[pw'¸»{pîÎÍ9gîšsçÏÔü›šî®®o­õöû=½zUS’*«1ŠšÙ›�¥ìA`FV&V>€¸‚*+ €•‰…E ‘’RÜ h ¶²Iƒ|�V^^6€ÐäïâïÅÇÉÁÇɆˆH ·wðp²²°hÄiÿ¡âˆÚ¬LA�c°%Ð©±-@ÍÞÔ ö`�DmmªÿxÄ  t:¹͘YYfV¦`€ Р„Èüª¯ s{�÷¿Òf.ÿYr:9ÿåÐü“”ð—ÓÌdë0š#2+ÚÿÝø—æÿìÃõïæR.¶¶ŠÆvÿ°ÿG¯þ[ÙØÎÊÖãìí\À@'€‚½Ð ôïR-à¿Ø€fV.vÿ^ý 6¶µ2YØ,ÿJY9KY¹Í”­À¦–�sc[gà?ó@Ù¿CüíÜ?˜•D%4èÿõYÿUT6¶Õ=þËöêƬÿ3þÛ'+w€.Ëßþ²þþ=ÿs¥ÿo›I‚Líͬ@�5°1ÈÌØÉì¿ÿJLÌÞÝ‹‘“ð÷öwÎXXx¼\¼>ÿ«Rdåèü*àdaaáæeÿgÖÔÅÉ ÿsþ¾ñÆæVûºMýÕThNiV±Y° Ë©hç^‹Ã4¸ßmWì·¤üö®¡¾^k´Aô¦|åÄh4<º©xù÷“åa L™ó8ùºÚ9ìy©‰$¢ø€ÎQs³’Æñš…¤h@ojÑìNŠÐaîByÔö!чe²)ª¼ÖÑ„7+Q`)/‰·ÆÎßW›ª¤Š‘þjš°[[ÁZËøVt—·yàI…^‘DB&u±†t†“ôö5ù5ku×ɵc¾ùÊoàͬ{ùn·!2í·¥T)k„»¾“NcEO{ Åçb¾ùcYóêñ+©§ŸJñ‘üÀ ê¹BÀ”_Gô>#“W££4oÂSO«NÛft‡¬3Sðo±¹®},­8Œ‰ˆoÉt?U«»X÷ò‚.)Ñ<üþh$½ Êú=?ä³ üÎR¬5•W²Ñ•$22óäG´È’ Ò.îqÓZNàjâû~íCìqm—>“iÙ~g)îEÕlÊÜxüP¨xÎTïZ((*ª¥}Oî2¥omêˆkÂÒÆOÕo´!†5:·ŸÒC<=`Zû ·ÌÉN&‚Šd^ Œ¡ÛMÇDB iáÂCd8—c”LaŽÚ:^ ÐÉ @<-’™WcÉšº|}Ψ†äÀd´´(N `DZ©»Awæ² f’0HÁöe*5Sd=Áî­¤=aÜÆÙ•[+ˆñÊw¹Iúþž¿³¨Yù zñiÚŸ»Ð7fÞjà)Â@�«SvRdN2’ðÇx¹¼¦B«±1¿Q%É+¹_í¬yu¿ú-®Ð.!f;Ý‚(XáLœüêÜŽ’¢H•UVM/dªmŽøÓ� ßÖu6µÿø3„DŸÉA7_½I¡úyÂ&夺(Zlov–Ë0òŽu°ˆÜÊ&ß9Šp<þ@ؼ}zQ¶Á‰o$}á.»?)ÛƒQ~,²ÕúYçÈÄjϪä"íËH㪡¡E]šïí^iþÈçºyé#¨“èâ^¿7^/;Š,Ôù“%Š Ã¨¦Aèt¶ÚƒFËX“ ½K°ð°`‰½áâšø\ëÔh'©(›ÑǼž²ÈOéO#.Z~4U{ Î'‡¼IŒ“æ½`‰bóÕÿþ&¹(à›êOä&%-î6™ðˆ s£…ø²°öî¦ çÙješê zeN{Ö<­2#ÓJUÕô‹Ý»°³wœ t�¨»íBFpë•hÑ §0¨Ì„ŠOŽÁÄfO¹:‚ë{†O­º‰s¶:P‡ÎRN-–ÝOV‡G‹ÈÞH[ð¹Ë5¥ç=âEY?›ÇÇÅLEHᦻ/šFTz7H1†Og‚áI#òH²ì×+ÌöOJ‰DoÚY ‡± c¤ßZÕØ£œƒÇ,áx` Zvç#¥ FAIõmµf*c@ŸZæ9(“)ɶۼyþWãÞ•† å a¼ã¤uU)õ¢šðÂR½jU]^ðë•+ñœTA34V¨K¥Ÿ¹ü$¬ˆ={’ÞŒþ+n´s®/ ùEzUiòs|¹„�ÂKDðç3ª6Ëcù^_÷É‘¨¾1J=£Ól‡O4žS!j™^@fOÚ•½ª^ÄP|g;6óCÆœÆT9eƒo:@’'R’èk@šB¥šNü‚‡üu™ª ©øRQp~cÊ}*ô ‹óœfFÅ“~®œT'lztçÜYDéQuøM{ ¾†×ø/:bˆ·‹7hdh¦€MV±<¸ž³ßYšf"§bF´z' rÓ;†6YËÏý$’üãÎ8n¿*ª¹Kp¢Ñ»Î-q±nΣ)¼k•¦ª`Hí©Öi¨_PµEAuJ‘KÆ ö÷wÇpŠqÊÙìtÜG£ˆ´¦Ê=JêÐS?6…‘FŽ¥/,×§v KkqÉ*ÛÂ,%×[…ZsðWn*jtK(¦t0?òŠà_­oáY©º ©—­À T·ß?LŠðBß`"–ÌÔçé[¡aðÖò´›†ûA5p¬äÜ]ó<N¯àæºÓO‘â¦@më jÒ\t~ú«eµçH8úó|½òÁO©S < éÂrcܤ©yÉ#ì®ÇöÓ¿…Dì`@¦/½´ölJ®ª’ðÝÓ0{ À×WOá¶ZühgFï!Ìêëcå(ز±—w9MU7ᅢ öÃt!ÖúÙí"ý õtdùçó¨Ž0’x…³bÔù÷X†h|;bˆp¢MœbL<_ûùÈ�ƒ ˆÖ2kA©½ÕŠëeÙ[? ÿÚ;,H9ËPLsÈ3D/¥0wô{ÞÛ›ý¸’Ìw ê ÀÂÍÚõóVßUDê|ÎnH[£”A^Ë;¢5d³xÂÕÛ1îPä`;|,ažO&NŠt…€±+Iñ³U3†ŸPöîµë˜ºŒœ%}– í‰#öò07v&#ÑHDo³%ãÊØ‹ÖóÎ$Q›Ü *é®C‚ñO½BÑ,ú±¹Ñd¶ÞLzp™ú-=šý°·7 lÍXEšò\qŸÚbÜ’W.ë°Èð-ò+8sWž:nÃÄ;ìÂk:»Ÿ’øÕN£jÄþMæä­.'¢#:.q¡†øgZîBÀ o;ÅŽ6Ôd ý¹”w³;-;Çr¿ÿ@¾\šz(Êa jxQ^­î"9åfº g–œjêÖv1ª—½Evúe¦Ì^F@qã×0HMÁkŸÆÀà£VRjtöý¸“ºz¬3ŸŸ1Õµdyjœ6-vtÛu*(lS Á‘Û–T9#éküÕÉ=„s3¡™ 7á’=8¼ãlúúñäÒ™ª;¥Ï üíôû#ar¡`í  t4¢]ÑÝAÐWž ÂB‚8TÊfjðîèñUlVéù!êyñúœé–ßI<f1vljZùR\ºô_Ö-'–öÒ–mÍ(µ¯ÜvLj2užÞM8x° |#™íwæ:‡öè;îQ0¨Î’rC‰µâL¶|Úí-cú¬îÃÓD6TÝ~2:züsvÓ$¼5û\åëælDx^G·%…Bê»–ûæMéòW;‘WXb[ŽÍúãúªöt¿1)Ö2yáøÈ‹(.­.¥eá"0ã Ÿl‘yj–c¸·t²Ç9“{NM‡üy'ìEä@‹©#XØäxò¹ n0Òô~×1ðYܱálü (9LW~Õ'lþá'Z­‰¥»u%D®ÃÂù~]̃( £ä½’Þ¸û舟/|Z ¾‚vÓØ¯0ý¶AÒ¡9c™6OâPHÕg.w®öÝágÊ".’ù”¸¨‹Äq‹ªï;[Bó©A þr¼n†+·UçOwx­¤D€îŸU¸´i…»ãø‹ÐÝq®üorÑŒß ^…¹É"mÆÄvÇÚ5ú$a¶Þ»lS·Tƒ·¼ ur Ñ Oã»Äߦc`üf¡ýŽ °KA›¡8óœ Ùl!_wk\ïM›ÓI žè–"'µÇ'¯ÐsõªŒMSÚHü.ÛÎ?•|Wùаœ'DÄÊ“!JŠ«£cà‡hUO¹¾x‘?Wýþ 8Ýa2¡uÎGød׌†Í¬"0ÚŒ·eŠw{U݉‰îéæÉFr 0#P÷ŒÙMOQιY�qPÆÂdö„°Nv³‰·.2û&5¥‘/[ð믶$lró(ö¬aïgÜež ëÚ `Ðj\©š:cÐ$ýÔE¤}út7ée¿d2ªx Žoߥâ¬Â”sÈüŠ$*%x &g )O ˜™*¶Ð8ARtàÄÖhp™IdœL Fj©š¦»Äh²èeˆ²üuKÔtbR£¹mý„Zá<È*Ø{„ö8“ílAÚdsêxjD ×Þâ³í"ö™7QâÓ@5üÐhr>ôy™)‰×9ym3#% ‰²£¥¬ÿJŠ“–@ÕTÇ}›SÜ-ö™LISØäs’mn3Ø"º-„-uìEþXˆ¹~¿í¥Tü"³+´q+Ñg©VÀ](—z…nÀ›—ýŒ³g©ê¬ImEÐ ¦ùU³× œ‡¢±hÊÛaP‚,Ùð©3¦•s(_òbeR4¢Ðphré ]ò$O–$-‚%4¨žáb ²^˜Œ=»,Yâ}U<^>ÂW÷pqÓ§_\?ã噦Ê]¶Mø×• ¢ýynÞ §DŽ—)¹ÝŸÞÝžÃZM»×!‡]¼cAe.mê*ë8îk‘ÐULÎŒ#èw+ ê ÚøøÍO%’¿b&S{l‡oŠ‹<ßRV*ÕZ œÌ–)ä]SRHQŠ;Öš½fúàôÛ՚ᆉ!O!uäò W[ƒn ¤emR„Äå_ñÞL_»Ú dšÜÁt½D”K}Z¬cGBެØÕ!{7y|øO ";ëøË‡ƒPøq÷ðl… ‚ºø"7è¾Ðe0ΩUKM“ÄhŽh¬ÏVDÕÁÎç2ªXÝ"0k!ÇLä3´8 Œ¸g€ØÔËDš‰³&‚Z—#sâ7³ˆ>€¼Uò…~>ùŒ@èý•[ý Ù‡I q%†­ÛHÒó¬µó^Îá}âñ¥Mg[â~­�kêËÒmoÅîÂ…ñ°¼øoãGg Ãd{óý¯ø`ibÄ“FŒ:¬¾™¼˜+^4°Ð‘1sjja΢®”å|;Êdï*õVB¸5¶€øT`+75ûÑʽ¸µO(|¹«Cº ‚å&ðöóŠÒK쎜Nä÷ úæý‚Ý‘-!›ß OÿõÃG·y‚•ó=Ë–\<“v~©ˆeW¹²±ã~#Ç—ô¤`-°·-´uSB@vg[½I*‚± ÖOÒ¯\õüØsÄä©A1ûIxsp»¯Y"j§³ °ïcÀ¹ ckÛ c~GÏ'“7›Ýž<\ƺ3³I3îPÙæ`âò¦eL]Ís$Y«Ñ‘„±–¼Nöãs‡=ÇM†X’Õþ+¹Ý™ÈýfNšZÉÊ1D¬'<:7„Ի„…«+‘„i|¦F­åÖ¡ö¯ à͘àd_¹JÓüÛÅØ&‚{o*vb- :.ç+,nSVý¥ªîbÂìV×?ªØ»”Bü9²=²YŠÙö‹¡ºbº|[*CWþ|ßá*³—8¬S×ûD­&SŒ‡º1¥ ™u/³Í(¥öç]+•:{EÞ°«4vù.4\ïÔÚÀ…]%Õ2 ¢: Ü}ˆÜBž´"­\˜ò^sêîò¤ `8ú£‘“6­™½vOÐJA{tëk`�1‹t¿K^¢‡Tu1YÀ7Y] ¾RIe(œÑ*ž Äí@Ÿt¦ƒu0ÌTçʃ.C%­* ­bZ2\¹tÖ6 ædzU¹ÍV^¶©ëÔ›K õ´a×xÛxºŠë5Óüg°›’h¬Ÿ,ŽòiÌÂÙ˜Äøî;ütòX2ô²^ú/Š6{s±ÑM;ÖÛÏ^q;öUWÛ£t šœ:á‹2rowYìK8O“ÿ¼m.4 ·¡(¼¿ A¨Û6½ ð¸i‚Îór«õ7(_+—I7 K®º×÷àÃ5JüEýSKœK׽◙½ðâÌñô*4¢§7«Z°U®– êÝå2oCJ-ô%:áðU§ro*¬‡8XÅi¦ à0ÀâCYÚ p½ŽÁŒåÞhó ç÷Pæc>¡ázå2Jž=RUñ\uŵ¡ z” þâçïKPMiAüá¤!+’À³¶õÞÂp×–å5ï@ó1kA!’AG¥,?„Æ6�9É.$Ê3ÀÞìéXUزxLUÓuE6˜Ê,)©7í½¤Ä§”Õ´úóY8žÒ±u„+´vÄ<yFqü(èôi9‰û4 ¯ãD”‡±pÁÞ@è âOGO òü%íª¢õ³_[%lj†œnu¿š¢?0h¦öuýóŸcw'ÁÕ»£·Ýn¤„A]šzø&Ç$¬oÓTtÀ^× ˆq]¾Ö:ê ”ÄpXIfߥê7à´ÊۥîLzšƒù‘€îŽHƒþ'†ûOsºëtÕÖûK] ñ˜[ðƒÒFþkéDËR \ïCE.ݳý†²Š¾ãð†‚Ôª,Øïár¬«©ßwóÁ/�ê|‹i¦XÝÒùƒn;rfL«ÞÔ@‘ZX{(Û!‡úÞ>zrfÿSÅÓcþkò$˜>-S>Æ&Ld�IaÍpyX­ð1Öl³¦«s•4uyšûÆptÎmÚ! <ìù9.äV“;]-…舰ž©Õ%~sã@ v÷ØLö>"léc¾Nk±ZÉMm™¯ó˜—sªd{y\ê|×ÅKlù[UBŒ©×Ú·y2œüàMUüÁ¶Ÿ~ÅBZõír“…ÇŸ¥ƒ~!–÷O‰ÕNÑõ=cZ'ÜåÐRwßõ÷S…tÞ°¦–8ü"ZÌž-Â^çáIÿûcN½>Øo…Õg@BD+ˆùúÅ$~V{Í‘k}ˆ¶N´†˜.Ø«Í bmF?à2ˆ¿ðÐ#Ú1ñJ!ŒšHçï3.ÓJSÑ-Ê€±?ÙÔF| âÞ¾Óë÷xW_,ÕS_Û–l8…37îþ¦ªÃÜ.Hô˜ËÔ»ñ"á#6ä¨ ›¸ˆ[uâ44á)09‰¡Ço+S<F Ãô×Ä ;ô7f©’%ƒdf̾›HùpwÁ,ßYs¹-Û€|7‡ßÚ±šKv5Ì`­Cox"„&̓ªˆ?M†µRäéÜ#S#$O(·ö'#·X!c¦_i$ÍœD—i\wåáƒ*Õ¶ÚÈ ë´g Øg ¦h÷b³?Ù™ˆ'„ÅØÔ<Iâf8ÿ†¨©¤8;¯;¾[%þ,“;Î1AO—R§7©”ç¤ÔFæ†Ñtܧô ­í°ª+ÀìÄÃ&7ä94+Þ]éãõDà©4ŒºíìC}Í¥[r•Dm$EFqàËB¤ãX­¨îž·Xm$ÇD÷MóD�D€L9e2Q/LÙu#ž[ñUrìÛ S¯ýWÞÓMJžÎ”· A†ˆÔrç½F z²ƒe+ËÌÐòûb6V ºüKûý –æö¤ö©›ûÝ6£MOåÞs5ñ€H£a<_‡ö‹n~o™cp®%š¤ÿöq=ÓµnÒ%ð@}<»'ä{ÁüÍáG°C|.ã~F<kfh3`}Î>#_˜W¨ï0ÿ ½q«QÄP¸5…²á­òKÀ¸"[À‡‚ë7á-ƒД 3Æ3>5yØæ>äƒrpÞbq~<•ÐZ‚íꟉ·î`¥B,øÀ/à ó]º¸”ŽÄ"øƒ“Ò.á²(ÔYXªÖ†E>û vÏê•rl·‡m0sÉð& ÎSö$|§z>uÖQ±‚kyÖ|Q—ƒyíãý‘³„å³ù´mLJÕ/gþ+=‰Úûús!]QÈ žæÛì>­Ù ˜°&ÇŠùBý±ä‡‰œQãsø7ø0.ëÂ6H °á(h‰ð“jŽ�E–Õ¡�%U'ì+Ÿ‚Çu?×áÞdh84 ŠN*þ®GdGLB R÷Çjª&*±ùÊVDzYbÑ †kØ8 ¡~´õ‹ ‘íOðL8¾àXb3ºêüFJGÿ!$$OYáŒÀO¨kþ‹™‰ÇëñV‡2mv hó ¾´ëÉÿ¾2a‹Îäq1]Ĺîáõ¤¢èèàKû!,­(.Ü;YK)Fñ—Á\C]èB‚3\‚HÞNâDF´mÔ¶œ`;ö„8à …ýzYÄUEÇÍÇšOû¡R­µW£|y™Ïš dYO¨èîµa´©*ú/dÄ£ž‰õYÉpFŒru™æ¸OzÒìŸîd2˜—{^QîØ7ÂhÕê¡¥’×Oßæáù÷'hùR”´ªôÄ ŸæÜôZǽc³”Gu¥~¿^ã"ãÞòÁÔ?SÏyÄ©) Q/£œd0rè¾2¤Qÿ•;ˆU®,²Æj ¸ƒâ ú8“ÜI³E+Mù˜ H‰»ñ’}¶³8ÓŸ ,Í]8ñA!§±Ä*DÏ¿‹E9LFóSùKá‡å£QOCèeŒÌŸkÍ#aŽñ.|˜~ÌàÞÿì<V–˜DÌ„[ÍØ¯6Ìñ©3r¢}ðÃÙ‰÷ûœÜKhÀß‚t.Ó#û\ÓX¥4”rëîD͈T ýÃFúµ§—J ԥ؃!ß 'p±œ)'ŽoþbóP窿Bi)mã^µõøÙƒùÝ©àÏǵ5¯cºÎåký6Ÿï˸§\…‹AúŸMeßZ"š4ÐRB¿i¹fŒ-öQŒ ¤†þꮕsÀ5.Ò ‡Î÷ÝŒ.HºÒß>$-*_óº" ©)'- ŒO^™kæÀQx¥•Çt{¿c¬l_„ RM]ed½3OòçgÁûÄs20ù„‰z®˜ÀwüÅ5x:V¼KÉ0Ð-¡SçŒw¢Š  ›c7~.M Ý2_%Å¡\1AÖŸ.»©St¿�iŒD‚~KGºúr!¥uûU<ܘÄÙ‹GÍTš)Îk×lB 3ªsÀ}÷»uÆ¢èÓ>³›—Å žMUa½k鼚š&aê!ü$/=ö©Ôï(á 1_†ÅÑ#|YÎK£F;rîYW%—ËØÐ‡7šÝ™.²Ásðѧ¢{%ño‡Åï yTĺô·’ vA0¼Ecþò—[Q´kyrßCvó8è)VD( È otb1¸ôöÂIoÐäD¨ØªÒˆì›¡;;À÷Ã)4îÇ“s½ë4§èìÃ{¢«Üd9ɱ Böleu”~Y FAGÛøæ‹°® ãÍ9„§½§01Î5á¥3yG•lɈRsUæŠ ”NH{(eM0,”.²?í—Å_Éß,3+ÖG©y¿´>5ü àÄ)pt g‡w=D˜œ`[…mZz°·[Uðe%"NI ÊèIcŒ¤ô}ƒâe­è©gêçÃñ¦wg-F‹�5¿‰âþ4 8>@5Vr׃¬Ý¬öJ¼�#…æuMr%Ý–~ÂbŠõkù켓õ9×Í|uD:xll)"¨ô[zK±…:ÌéGY-Ísô¯t·òÕ/æVˆÖ«Ÿ•oeµ¢=1™ ¼ÛÌœW”,Ï•0xkÌ›M{ûÎN?·Ç]zª^F2cÁ÷æ;oâS¨µ '4‘º…[ Ý/”&•ß({p3nk;ÏiÑfÜîqéÀwøŽ l¨«1 OçV…è¬#§Q•§Êì=½HìÄ^„„N†¿x1I¤ YR‰Ðóy‘ü&‹ÉWP‰rç|ë"�#·Í3"Êë^»³(\ãpd LÕ7°êâ¦`Á²ø(Ë|Û=\–e„»ú„Òa9âá#™Íý¢Qb>6ÇíuVpj¤Šf[ß3ª…M;…`²ä±EâoWái!hLÙÒ¬ŠW¼÷EyX wVï1zD1ÔSä¬x(2÷„|,¡ã„k¹l™ÿ·>DÒ¥ho{Q žs1Þ-ÿDÊd�iMNrq.8ç#¦1<×÷hyýàÉ=-ß †, ][ÜÓíòÓ³CêÚÓcxKÑmâÊvì4 [ëD<áÀh¹tOF¡µœ¼K]ß™bØ$B8Üï/ô£%%dXÄ×áW0û|Ô•Õia{„¿öû‡mpùÅ«"ïÎå¸k?„CÃ<vÿÞ»ÿ ×-oJ‘ÙE8¥$‚|_ðY†‰·0Ü ·ÈT3·òŽä¼{x€ç¶Ò0{bÉšTyý1¹ÁHžrÂ/(p¾Zç@Úã@½ôµµ"’/ø¦u­©ZĘ6'Ñ Ôœ»f_Ï:„yH"ÃBQP¢ÛâË„ë))=™V1ƒQz.ÕÖ…™Z÷Ø$}1ª?B=¨ èg=Q’íÓo">:È´Eûä�ŸRàágÆß$‚ž~K±þžÁ&[“5S¥Hn¸%x`R/6ŒÖê@%ùQSR�ÉeÏt³ËƽL°.½ºó;% A¥A‘Ù‚‘Rk{Ê´ÊȽp¹mQ2ýÐ"ãDÞ'Ô§qåH*R>ÂüºFAëô¨s5¶WÎëô©káË•C?’$ß ÿw<ƒ‚ê‚£Ö“Ø1F³½”…HŸçô)@"@ôK#Mí÷ ¾e÷< "Ž©µ¼+?r}¢H°å18¾ô3Õо,ÖÚb´ÍÒ¹’ #BÓ—‹ìþ‰µú¼R72.,wŽ1Òz%¦»!^J G’ö>R¦ƒôy¨Ót@”‡øå³k>gl¹­›}å&å~ä’‚=Wú1hd¤„ïü§óØÞ‹YÙ‡‡_]žB×EÁrý¼ËräBéšÚôÓ6ÊQ‡þnµæCáñǯL¸ñ³ÌEàþTsïÇû$;ºLVÍ\«åŸbÿÚ.1`ãQë{ ü¶Ô@O!·òZ¯P¦§ž7o ã _÷î¥h8[»æâŸB9miìà‚å:øýj¦y0ÁçŸù °ëE‡ÈW1Æú¼YSùvÉSK³”ìQ@w_ŠtÛ ² ¸áb‡X˜41‡ï_MhŒ*~¢YGÈÇògoÖÀ>8†NÖ90;çñUÌ•½X…�ˆ–?hª»º>V…½•“,–Ý´Rg¶„@ŸñÅŠ‹4oK®Ñp‹Û#¤§@>ÔÎWe;Ø2 lè ûYÖðöæêÕfz·}Â!~U|[aëš\Uç ¦tò±âjz@Î8ÈÿN[-ö’~nüíQ«¿6H±¶i|hˆ+l$ávæõã$ ¨½ÿ!‰ô”á*rDCægüåˆ5‚-{µÞ—Â}îì·n#NßÓ̲~÷JŸ=D=±Þ¨²a·¶¡È !•5ÄÈ×tX{86S„µÚÒ‘çò5Xjdd޼¬nlGø:ÿ¤Í+<‹j»nµïi^7dÜ {—G6gnÒÎ7߀èÈÉÂ<AìüjýL<ŸŒxå eÐrÛ³¢N_‰Ò=$EÍÍLõ} :ëüŠéÇÑë,û2AgòTqkíýÐÙè„ìŠ<êÍîÁ3Tyx$Dü)ÂÖ¶²Ç¼O‚"Ò"dÙŽ-ÿ§¹h?í)ˆXq­p¾¡–Ò4nÑô•zIuRUIçôÍú~h­½RÜ+.ÞÎÍj È„ /[Ì:›w»vÀBÝL|=–Ig¾¾¼í ¼ÁBÏêEȯL° žø´ÑùÜs^Ç¢+Yfº*c\ ÄÓyA¼ñ?*¥K<Çw~qxQþS˜ ,ûeHÂ>Ày1l=±â'¼£žŠó0z+~ê„JÓd›é7U=L)õxÍwÒ†RäÙg”Tt÷¨ÖÖ䬮EÎ&|ae¶Î˜vz]’DCXT±¿¤ Æo6C-R#à7“3,Y‚ÑÆêu‚0Õ‘ßô°x$iæFªð™'îÂÑcâN\î¶q[Ò¼›ZÄ®{É®Šáã Å"Õ»a!#U-\>‡¯AQ‰1›·¾rÃ…ž¤,S¾J)FÅ7"Šo” ÇF·M"ëŽx\}ñTíîþàüøs¤ú<?]iâR Þ”ÿÞ‚WÌÕ¢•`ÚÑ&t‘²é\”Ü)tY;vĽËrºŒsâ.šè¾?ãÛlžî…»å´ŽõÑW”²åÂ×ËN·0@ås‡'v£YŸÙ°×K5&õLŠ)J‰M!°5ä¹2‰²*¨i áß¡±bÑ®Ïv’ž âe=¤ypnÚ2ߤºi>U.r’ÇJ-éëòtàKvÍ¶ì ¢+2+¯¡§CÖ|@‹ð_êƒõLO*úª¦ Cô««íœ¥‹¨2–ÂüÍú‡Ä·‹2›Çµ&Uß“Ixj9\š7…g½>~Í*/KÓOòU'OÚ#·¯iGµöq"<OFT<Òô ñqq{iÅ7° v;Ž*"6«‚4˜²M/*m[-ˆž}}Fa¬G7î´2oµ|‘K˜âœ1ú}­g®ç`c.\ˆýì¾×{ù>¶WP¨ $ƒ3ünê›nÙ`Ù<×c½ƒ“Ïxƒª)ÿðY¥ð:ûÌ¡—õXy¬pïÔL¬ kiŽ˜¿éÞDú`"Tž?iŽºw_dôPÓ>mpEëß×y)±«—–-3NìîáüQéŠÍ­YuSA÷`$åÝ%ð{²LAm¥éãÕɤD‰‡)&g5¹ þ‘{Yyß1J¬ÓRÜC.Ó\&Ñ’çGPñ‹ÿ$è^bµ“ýL Ú ;?ûŽŸMÓOˆ3Æ †€ŠÄ5ƒÖᥘ×H]œg%Þ4Á¼Vy†mîT3 úí|å7«ý³ 5ä r0Õñó.…òmFO\g¯P q×øOü$÷!(aÇ£åc³qBд‚|ÇÞú%LJËjÑl¨Ùû~ÍEvÅË—þ(—Ìß,ü[àÚ!… ½ELKÞ'U–Ù¨‡”+£i%ÄHT¸ì°±6‡/9TÉí¸’ù+i‰ Î÷›+èFüb‹0S9õÈb3à )…ÍÊÏ.÷ì°é0J%üÖ/—ÁPõËjüú³]wœŒŠÇ­&�bÍFß­;(ag5»y R¨õ37Õ·áñð†ïÔu!í0¯£øöÒÅ îǪlPÙËvîd¯–bAP&ýùM»G…[É9€}{›0´@‰N¹zwô'?@[%ë¹­ÑÆ=®?~ÁçÆqë¶!~w¶†UµÜаuÎÖ4c³_Ún–Q8á:Øî°œlºÜ×¥fˆ±ûùz÷›"äèУ#•T"·Er×Î5¬±>H?rL°4òœÆ#š˜2÷B‰¡>6î×!9^£ŽÙà¾éU;¡†ðàÃAyÑtDdîÏG¿ê'Bzi<Ôò6³¾ËŽç‘̧i„æn$X‰ˆÓ[âa½üœÜ d-…^èÏ÷U+¾ �r Ñ7më zŒ¢ý %†`Žør€ïpÑñùsðŠ—}o0OÂÞt‹™§›@Ñ�{î0öà,}›±ˆIæ'è©V/·(“R@ð�M7FÈÙhN4{ìK¤Mñz¨û)¾:Év€`Go LÃO…$¦’¤mˆI? ÞdžCpOz¿rvNtRœ:N(Ô³ët@-Û×â(î3 ¯š7>u缯Žî:}�N7òM­3<à…g&ݘɸ’NÕX¶¶gÐàf¿´Eô !Éþš6þÕ¶º†ž*eüZm¹¨¿ûYÓãG@Ž.ñ�¸íóèSêr6Ìììm½˜:ÿ3‘ò²~{l/Îü=6 šý Lä QY Çsï ³ô!­±Û£&í2tCµ²¢Ï2ŠÊ:Õ+.î )n× iÙšU]ñçË´{«n¢OæSG4O )qTí wÓo® pòD;L¦ ¥—T}ž_¿[ 62ŃÏÇÊæ¼> ÕI¡3¦h×”0Mîa,Ú×’Âú„ÜþXü+ÉÄ4j‚,‚  û–¨‡Yï¢ÝÈYyÔ¹“² ?ϰìÙ4¢MýƒÔ0`¾ôTîzûÁN¥éUm•ƒí'¤�)‡B3G²©~€ Ý^_¿=z¸'´w¯®øË2Ã3]ëì×-ß:‡¨]Þo“‡ú[]GÞ†‚ÍÕ­ÑÄŠÜ‚.“o”ÆÍ5¨eOg‚jq´È=¼iWz¤8ÓÛpýÔ†qœtn-áÔ¾á`k%ÿP%ƒ¢øîYêéçº}}|]Q܇ŠêþÆ?t"ö*˜tΔËNH´ë͵ä2Ùµ’SÈ?­wÉô)ÈD?Æ,£>¨¢ÿêî:ÃÖr6ÑTÄ.yÀ4lá‹‹#¾pAªBô9ÿ®ߥ”^Ò§äü“7®Æ„µö­­Þ»RoÆÈ˜q+‰·j™å^Т¦#G5¦·ñ¼rUX¬Vc{+_ÐX@ür«@æ"MÔUý˜"X˜â"³ìÖ¦$ÖSÐüî¸ÊŠL]{I¸µ»åÓ DnæQ}Â�¨" Í# êœýeúo»-ü@Ô; ½c¿tÖ³ûÔÀèÄþóú„^Ô\Ü¡ØR'Ç* »œò£@Rw6¦à0ì/èѺ™™PµzöŽèµÍžµ}ëx¤£èÁ@¸d…Ÿí®hÁª“ù�/æ¶óµ{íL„ËÊK=Œ¡þyñ×¹*òÍ3„ù&W°â%‘.Žr)†O(QÐàf|˜úùuÛ!q$g[þ`Þ‘ûøš’ÒÜsüT_ ³¸ECr¹n̶^ûè¶þ­úÇ~ƒÞ„-‘Ð×:±ß=ÕÝÄânq,ë#¯pQ¬Ï)&9þ#F ¦è°èX4ކ¥´3Ú…r«)%2ëÐJ&>Ó)˜kŒm•òaöÊå�ÆÅ üe´¹Z{SŽ>EDMÐ \e=…a6l2^·'fæ¸AÒGÜú'Ü#ÂÇ[F1 a÷’öÕt¬JQ3¤+&ᆮŒÝh@bïέíòSãâû�V"Àõ°k>jÆjä£=Y¼h¶Y5êl.=¾fpžAÀúsõ9bJ£§†7$dæuzÀî۸̊ÂU$ ¥Œ"í…÷ÂØD=©{.§dV¼»™ó‘¶­3µjº£1¬a…~ÀÍÌÝþÀ¸7F×ã†"ùCH²ŠZ\Ï4…ñf¦ ­lí¥:FÝJjú³VU×Zšc©¥H\ÁÌûÂEßd¨’ ›9¬æ}ò½n*Lõ†ªÏf¯?Æ\ÈH©g®‘ƒáÞ{RIýµÎʵ4¨N>šš¨Ù‚¬"IåIÛcÅB-Z߇ìKC,≸¨œdÍÛ%›ùë§Ú9x.ç_ÌI{¯:¶<Ì¿uelG“ÿœÕæ¡Bb†GÇ“ÌUS+Bºlܘ>ýª;jm¾¯‚Åûyô'—(ÞßÓ×5cžáë7óò·è[Ý!…sÅe;÷“Ûä¤83'¾/JiO±dô%b”ÇÒöÎ0'c|ÈV¥Ga$ –[k§&éq3ñ%ÐñÓP!ÎÍêÎHÇ´†$™?ñý=qªØbÎ3Ê^”ºIñB¦“D¶'°Î—f¬ÒÛywKa2û^‡n­zrÜñxp¤ýô_ ŠÄ¡FZ%¼C5>蜛®.ïXÂB[ ‡QJôõXþ/Äÿoðÿ„©-ÐØ logìdƒˆøøú·õ endstream endobj 12 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-301 -250 1164 946] /FontName/TCDBMP+CMBX10 /ItalicAngle 0 /StemV 114 /FontFile 11 0 R /Flags 4 >> endobj 11 0 obj << /Filter[/FlateDecode] /Length1 721 /Length2 2664 /Length3 533 /Length 3205 >> stream xÚí’y<”íÇ%…Ù#á±ÕH˜±6ö-û¾›72fLfÑâ$ŒA¢2½…(BY[²%KY²'[b„ìG½ï{Îç¼ïùç|Îçsžçùã¾®ë÷ü®ï}Ý·Œ„­ƒ¼>†è dy¸\0´2p…Ã�¸ f�‘‘1$(2–H0B‘A �Ž@(Æ ×ÞbïÓPUÑ€©A 2€!Ñ?„„õñ%PCÙ*u@’°h°B‘}Aüž …ˆh,HQ��}°ÿñK�`€¤ £�Àá�‹&^ –�QüeFð&ê¿¥1þ”‚@RÀ�ýI* ìqbˆ\€½!ŠÖĽ~àÍ öo¸þlnˆÃY£ð?ìë/u‹ ù]AÄû’A`EÄ€$Ÿ¥.àopDÜ_Ú˜‘Q8,ZŸàƒØo)l€16ÄØbÉh_À… �æAæÏ{ƒû  èhhd`e+÷û±þVµEa dÇÿøþÿŒáÿŒ÷ÆC¿Àöæ ßÜÿÔí MÄ` >€EÀ H˜$þJe`@ ¾$¯¼g$¯¤ºwÏàj*�BEíò¿*Ø  ™  ƒÁÔÕNÿÌ¢I$@þyö¶üGì݃hH„ƒt: <—Ù½õ0–©å¤¾ƒÓ¸ñ©"u,´øÄJ³îà3?H¨Ì–*ï³sÓË›»máæ§å#ÓÛº/kÍš ¼|“õ·Eg=ë5•âåþt•­»Öž�Oeg…3]7%A ©XÃõÝõ²¸ ù MÉÚn«[n#-`û^O¬òfÏòÃ"´]š$õMÝóv#ü`k¿À`Ænl”u°¥ßÚé´ýýg8IžßpÐø”³¶Ýü±F2œ/ÿZ—¥4N²¹T8 -Üÿx0¥~¿Ã™:tɳ1FgK„T€ ‹|µËAë–âÁ«|9ã=©cw ÏvƼV}múÙB–߸ïj3ã{ƒ’Õy†\«O%_¬šÍÖæ/X¹e7m±ûú’†¹¨Ì˜oe—Š“ÍyW¾àæw}ó ØYÎÖçŒ~‰Y2áÓeד0Õœ{}l{*Ý ã‘Å ‘ÃØéµÑ×[͵oß³€„´+Ë–ét®@“õˆÚo¯GXÆŒ‹¹H)Å©#ƒT7G_NŒïƒ–gãIl|K6ÅM8Wß«è5Ï8¡0…µ©Õi6bä¿Y/‹óF0¿»šI±=~ÊC)ˆ‘^ýefø\©â\óÇÐê�ï¼#Gž]=©òÕÏHèBSºvö££[k‡—£NJdѸÌ޵f_î«N0ÚqÄó°|£‡M÷½|)˜?vuÙ<å P~ñLPZǨ³ÐéÙ|y¢‘]c³D ªA¹+ñZ@†—3öà ‰+ËêÑ›öŸ ÅŽfžsÈüž‰µ¿ÆøØk ¨ñíÆN 3p4[z}EÅkßGqO‡¢HŸŸ/¯'e¢HZì,1ÈP%ЧØBâ²½dÃCquÄóœ!?Òdr£þ¥7Á’Çü¦›-êF«ÈìúaBM×¥sSÏø]áʰ(ŽýÝ,’h¦Å…äVŸ0Ñhœ)”^«w]Ä»q eöR­®x‰O¬Ês=oP‹9‡!õBpÓq†]M)Š×OåjÞU Œð @ŒNðû¸×ØíRLæ¦Û–f› ÁÍq°í_é¾J\WÍL{ŒöPS ã½.0qtGwë‘´‡~ö˜? —Y¯bæ„d™jÙãÛQñóð{¾ÝïcèÓÜbÇR‘ sîï'“˜&î_+(D&{ˆ%ÄK;)*ʬ‘Í&nd¶¢›•ÕoÈ&êö’¹…"Ûš"÷?ù~=óú¦ZÖ¡}“9Œð{£§òaÊMÉU%`ÓÝE¢¦ÏŸd¶³xÉyUÈcp; 9Ü»;Æ¥éRΕ#‡¾dŠézû÷^9'óh¹³¿ ö•i´ÔÆf¨Ðö}Q5Rà Ø56쑽À¶â>¶øæ¾eø«y؉‹ÇW‹ŸªÒ7_ÝZùV3ttGÅÏõ‹Î¶RnÞ|½m~µñý·‰2aZ§hÁUû^¹¢D7køW’TÄÉ‚. ¤¾Còìáòççnqë¡ë"ð…¸•mÎåÚNVýÆá³~f2WOÅÚéplCƒ{ñ14 ;V?Ç[)ë[kµ~BÙÇQÌ´{Í-§|铬 åÊ×ÿö>ÖêÙÇvnü•¶#ôШZWöKÍ_aw_„Y:\+›î,¿A˜:àS×_Ëú‚¸äÇ þ†góZ€=I1Mµr9ðJoQ¦…Ë#•élP"ÅœÁÍß[zÈ×j6½~Q^l·ðüƒfu`w[*tÀ.vvÇÅ:Í?õ›òîõÊI®˜ÚN™|­3Ng.µ'w¥òìc„Ý„'sÇs £/8—èfÝe¢é°_”r¦‹Ü=è Ý'39QMïhb/–¤«ÞšŠ,yØZEV±ï°@z§öK ´àªî*\Ò–Ê>8,¦Ž4Iv ¿Ï´TøSžÇѰq¼œ,o¦õâ ¡s WV}Sÿt×(MÉ„…%Z‡ª-±:ÉfêÀþIÀ=X:Û~EKæ…÷4çw^àè»»üÙ?<ÛÆ;nÍnv·æø@žß†yýBtÃŒ_ÆÓ\íè:Xî›êÐóün äÈdóv ˆ…æ]œÃ";Î-±XÅÏ¿veoÜÇ“øøAI»È–U}š­ÄTŒãÍòãE|-J è”é—ï¢>EÇ W†SpS÷´×}û–L©cP /|‚è”\$ ¡wó×h^اì.¸ÒV‚¾nkêò%€Ó=TÛ…-˜ß‚ºXwVŸËc³S‹]Ègßð]­-9í¼b™Šlçö¿/Ý—<’U¯òeÿaªó"¯½÷çƒ(Cc´‰Ém™ñ+SלÕMY2ûtÝ-JÌ3Ž ŠâÞ)¹™Œ±h£{.î&ÞÈÎ0Dªµ ÄÒçö¥n–(YDj:ìTj0.È[T,n”iRZ­-4œU‚¸ñ ’é’ouÞë ½BYÊð~ì¹iÞ&ÖL'¥H©óèdÖg™Õ4sM{g5RAe^Ól1V÷\p¿#è׉9«¿:—YˆŸB|Ðô0Í}šËÄ7ÃâV›P2Z­38—ÿ«ÖÃWÌQf²´¬q4SVY•^y¯ì«Owvä7<‹ ‚µÅ°‘£†Œw‚íCÑé• þþÛÃ&/}Úv =j«;Íù ¤áMµ\N×¼Åp¥þö‡ªåûÌqµµ`¯2õ¢?péPŸºf«œ>÷º$K{dãíCšŒª Dv#‚6b5e)ö%_ª9»)Y½C´X©3ìÑuŠr¹ö=º3z#§úøÜуB~ÓÕZžFßÄ Ža!ºržÁÛ«2bÏß–˜3ÇÇ•1k7ç;éÁ¿\“¸æzÆô:‡®&¸ÊÛ›ôV)͆<t² ƒÔäÇ!²J‰ô 9Ÿ)ÌÁT-ùt†º«ö:z…0Ñþ`[´¹˜<9VG“ó¶u‰bÚçxÖF÷8ïÓ®NµúóîÍþóz\–µ4såO‘¡¾Ýœ…Ì$Õ gïYÍíDòîk{€ë¨@3Ü>L½«:·Ù-4ÝB¾ã &bÙv•òïYvÔ½÷ r.ŠT·:0õI%GG)%KǨÅ”‰ŠÚBn„–•hËÕÏW$t­Z¼sG14YH˜¤4Ë=Š]jw§`oz¦ã$Fjn…¼¾@¤æNÏѯòÓiáô¾Ç’¦BE±Z¬“H©L3yÄ1h8{Ó¶¯!¾óôA2âųÙå6“_/,þ:ãD ‡¤Mt®²ÆšæÏŸ(ÛˆÒ%ªƒZ¥µ¥|<,†N„d<šôåY~òñ¥ù4"'iúâ|nÃÝ´VÐÒ£]}y¡†Ò”,75“Çs[õPßL…¡ý^ÝQò0‰cbfÊámYÿ›Ç‘Rþ Ñqt˜¸Mܳ%½|Ѯˆ̌w·uË©YÝ•™ïuÞVŠ<èYÉ*ÐM)þdiÚ›ÇÇY*Q”ÈK¼ÀÆxÊyÄmÁ}Š[Z¯·Ìf³· úµ`¼ÓweÍÞòaëá`e&•¬Öí„6°Z657Cƒmh²øá¦¬ƒ­În°ÿòüßàÂ�Q$2"ùA aW¤ endstream endobj 15 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-53 -251 1139 750] /FontName/EWUVHY+CMBX12 /ItalicAngle 0 /StemV 109 /FontFile 14 0 R /Flags 4 >> endobj 14 0 obj << /Filter[/FlateDecode] /Length1 716 /Length2 2687 /Length3 533 /Length 3224 >> stream xÚí’y<T}ßÇe‹±Ží¢IY³ÍXÒ ÂØ·aìóÆÌÆ23f†H%BHÖK¢ED‹-F›"¢ìeËž²µ¬·ºîë~^Ïu=ÿ<¯û¿ûõœóÏù~¾Ÿßçû>ßsdÑu"Õ´ R˜ê „>`foêÐpˆ‚‚Ä3ÉT Ïõ‰�LÂü-8€8¬¯­£¯«(�fTZ$ìÀ”ÍT~ºô�“N&à)€=ž�†ì†ðÁ�†J ƒÌH �0 œa�Î ¤‡ƒD �ˆdðýɈæO(k ‰ èý!Ãh¶ÂA:c— PÞåTv)‰TJp$@IMêî4p—åÿŒõ¿Pý5Ü",8Øò3þ×¢þÖLJƒ#ÿ順И °§A:å¯Vwð8Sjð߯X3ñÁd‚ Å?àHd†9$¢ÉLB�@Â3À_:H!þawm¿�4ÍÝ]ݬ<UÿùIÿè¢ñd Ó%’ö¯ÜŸö_5â¿ëÝõÐÉ�®‡#v»÷ŸOÞ™fN!P‰dŠ?€aâ)D<ø/áïT¦¦Ôˆ(u]m@]K ÚH@Oý?®rhhtáp¸Þaä/•F§ƒæ¯ß`÷ÿ¬IäÝý€`H€ä_'ïñQ“V]ñýö¨OÎýá«~4¤©x!WwµH¢«u™/˜Kc 0!>ýmP`ý:%gMYÆ8±ò”½Aú£UÜÓÈÈ}·‡%‘Ú±+úw.̪¿½ïŮټ¦Ôû`«U‹t£p\B#_ˆELës‹¬TíFß‹S¬·ÄÛ^ª¬¶Áꩤé6}BŸùqÛ ÕŸÕ nJ§ÑKT2²BK4:$N;~Ûõë1uטž« Ùt蛕æ»ÿ%cI™YÆUv¿ü¤˜çQ™é Í©Ùìì=c˜ÖÄÁ7 >¸óNú•¹ío'öåÜ/œ¥Ígw*(È?Ø¿ïÑYù>WùC)E)Öw¿²ezçÕç•\žµâ¼´5sð›…v(J<X¼Ú)ÕŠ,áy¤ ª!÷<»µãΔÛéi©Ð󝤯ødát‘´êŒ. $ Ã­‚Ã{¬†3YŸö"‡¯ÑoΨlœø¨†-y8ÍeWœ5ðëªäÌMÇä \+:*;ö`æJ&òJ?^Ë'¿©•«\îÚôP± ËÞûŠnçvᥠ2 >-¡Vïf¬w¶„{ä]N^–ñÅ‹ûr"ý‘q°ºh^A¡wå`è$‘øæî.%Mû„Ö5†#í#Uü§`ƒì”˜”£y }Óv˜fÕ­xl&‘Qc¥Ý‘ptmêÅLÀÎŽBYÃ…biLÛ.ùþö¸Xù(¸s‡7éëçÆµâ@ã‹Qƒ,¸B¸sç{]¿¤…±Ae¯nX²Øé;òƒ¹9Ö«“F.†S“ÏÒ®Ìȶt%ÍÁ×Ò÷À<¤¶D_߀·s³?­Àª‡�s®Í£¼½´}/8®Úg4l+51¡Õ„ÒTíÒ¹Rv¯§2²³G[Tµ .^ࡵX1n¤Ë©sî#½—Ra…¨%f%¥Ñs¤‹Q¦y¥—ò\*ye-â}ø‰,+ 2MQ¶¢ËZ>çóÓ®âÄÄ ùæ?€ïGŸZSCÞ $¯Jˆ„Y+“^è13Y;10” ´ñƦê=r]åÈzþÄh¸&ÐK‹5txÏa«±Q˜°Ç\ùAQþÔ²ŒÌÙÑ õ`ÒÀêNö í*dÈe©:¬¨æ x^¿çªôPâySz¾ï�ÖøÎÖ#ôE+äèt_w­ñ™%YG´—&¬ÁŽZM¿‡¥j*—\\;÷ɵة2Y¤SÌ]BmÍD×¶›·¸Íç0ßQÂK½Ü°ì²¦9é÷óuâìäÀùB³•æîUÏH²òÚPCþ÷x 3¶ˆ8µ¼*yHd…¶-xç°9 &nW‰_¹Ÿè`~Ù,ä|ì…&ÖXÝÇ Rî˜þhü<@—ÍhòÌ-x÷*‹û‹&á-ö«oz|ÚÂpeö\Y:&8èuH®6Ëe±Áªš— s¡)?¢Õµý°åIë”å-‘`ØìÅôÃÁϯ¼ê͸øy*šµ?d_uµêä1á 9oôÍ–{ZD¾u*£}~}¶¾Æ†Qr^æiË û×c÷<#²âð©’·tPòÕÒ#ei µz½u½øóXˆ.‡JŽ©E½<a»ÉW5`0&ðã"þa `+ÌF½U|´?m¢(ÀuLüõIQ7ß0f? þýÜ…O’=šÀç°ï¸œLÒltÝlµ¿àŠèñy³û®擜œi2¦ñ/1/ù$¸›ÄÖ¬ìf%<d% ¬0Ûx.OÁ¨ÇW¬ix-çÛ}ɶ±ìÑÛ¸�Œñw›zû¸z,tÁf)Y)Õ9Ý´¨ð»ògîêÄs‰ýf%™u­Ã‚ýmE…RÈÇJGò9bäìï2Áù8‡õœxtçÑ‚z™Ê¿þDÎ?õL|'Cp-›’u—û´¥g6”ÃYs"e½9é^2Âô?ƒüÀè çŠa9ÊF£ný‹ÞQÞE*ÍõrXœ yØÔºÇ&º!D+µI÷Ü3ó¸ä#&8"ԘƻÔ'2EÎ})ê i‰9G¬tCùI{‚g£®óQ+ÓõDS›ã¤„·öZ¦ªçX?x5š7«(^;–ÿÙI§ ê Ó[z†“êrºâÆÑZfŽö2ãsÁ¡–ëwǧ*1sÃNî.%Pu[Q—^Õd†ê‰r|‰ÿlê-g¾£`qÞÝúН”±}3Ué˜@»çöí3} ÷2h"Å)¥¯ÊŠO­Z-ݰ\Ëê`¶E¿‘:ù™zÓÝÖ>™‰¾7Í*¤Ìû+‹iêðíÜ⹄Ì<ãíù•Å×vI©#íZÔ°OÆÔ÷MÉwü è ^ŸŠòœ~ÜpءڶÕv+Ý3Âà']¤«`Ä^§ÀYnسë\77ähÜútp®6Pç+«f zb/ýŽk‹*-³Ü¿Ÿ¬< „35tÞÔ91뾚yßåakÈZÅIã +€­Üäño…lË–Õ7%¡†ê6ò%º£ã7§—ɲþŽ1i=#T¯1˜CÏìT^ sĦeÁn ÝŒ1¢O®Þ2øÐl2\’³•íW9= åpö)âñåŠÇ>|¡¸åþí½a›z?ÝÁç Q×#]‘&`sZŒ×S±—½("„â66¥;•âFÔ5l#?Ï•XdW¹ ¡æJ/ï@;Ý*’ €µ%+ ËX¯'è¥< gzmû\%‹Ù|‚ß8Ž«åMZz‘{xüîØÎ ¨8B­ú]Ôå­Ì™ªÌá‘z\ÁbÄ›5ï:²Ý©¿X©jK1è)†7È]â~B’×”ÞkÞ6¦2ïâìs¤'†uZ*0Ýœ3­1UýšÞÓjÙÄŠ¡±­s*ûªµëG. ºŸõÖWh‹¹»êlÑédŸëÖ¨^9ïñO¾ÏÌ5îç©:¢èL•Ûx\³�CòsmR¿`{s/áh‘±[B£úýRŽeñ¯‹.p,¸,ÂÌ/'J¿€ Ÿh”/KdZªÊªåÏ ilµ‡ô¼žšX¢y¢ ¡ î:Ÿzo;¼`äuŠûv¦ƒOuì¼§p„S#MlªbûLµè±r Ol'V™ðÈ;ñÛ‘oñû˹ šI:÷ûeHýþQîÄdrøë_’ãÎhÅy( m›Pû%_M@U³UÉ­_Ð ò-ð^]/·aEäz\{ñ÷T_Æ…;RF}Ï3žƒ'á_ä”x“н·ÁʨÙÊ×u…ÝmíØÁAÚ½½Ò‡‰“/Ô2©Ã¹%¯P¯Ÿ'8öÁ:šÄ!:/èÝ*ñØìË×)¥1v0§Ýj">>迯u`¼†w…!oßʪÏ?gr™ú¾'7/p–õ8Fä—Š•T•ÏÄvIJéIÅç7nEÑíÇíÚQF@¡Dà4"Ÿ]s9‡$œZ«œìz¥e8.U C D EèV<xùcý¹F@›ÙÔ>K¸‚»‡%âI±Aª€†ùf ¬à:N%DHÜÉ›<63¡`ô²ÛJþÃV\ãRìÇI3 o75O9.‘%+~ë· `½%8ûñ² 9*é†ëÈròŽlF¶ozÜFé°u—nmôœ&³u84nCÍ+ö[GTÍ >°ì.ŽãÞ-¤§çxÃàÿæùÿ€ÿˆ�B0ˆ§3©!xzòoUuK endstream endobj 18 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-58 -250 1195 750] /FontName/QGNGHU+CMBX9 /ItalicAngle 0 /StemV 117 /FontFile 17 0 R /Flags 4 >> endobj 17 0 obj << /Filter[/FlateDecode] /Length1 713 /Length2 3449 /Length3 533 /Length 3992 >> stream xÚí’y<”ý»ÇÊ »Bj$KöÁØ÷‰L–™ìÙ§™ÁdÌ0Æ2 Ñ ,e_’ŒJ–ðY²¯Y²/¡aB–¬Yâ§žóüÎë<Ïùç¼ÎçuîûŸûú\Ÿûs½ïëþŠÁÍ¥uQø›h<Ž( ’©!&z6ª@Œ@DB@#ˆ<î ‚ˆV‚TUA@]W ¼¤¤¦ ¤&�D€¼'‰€qu#Å!—¹”ºh‰ÀMD7´Çqšã‘4‘$êb±@³_¯xÍÐÞh‚/%�€@@IÞD»bp�Ù_LPœ ¨ü§Œòñü«å‹&xsÅ9/)Qx–D¡]�²¦øãièc–ÿ1ÖCõ÷p,Öáñ+þמþÑFx`°¤ÿ0à=<}ˆhÐBp·Z£ÿdÓÃcÿ1JD`1H]œ+ ”ûSÂx`üÑ(8†ˆtº °Þèß:‡ú;ÂñÖ~È^¿jzÕÐRòÏúgŽÀàˆ$ÏÇþrÿ®AÿY/‡€ñÚÉÉÈÉŽÇ÷_O¦CâQœ+МˆÀ¡Ô¿…Bééáý¤Á*@iyðñ©‚Ê`¹Àÿj´Äa¼|ÐÐ+@°œœœ²’òoéC  qÄß‡àøƒÿª]0ÇëA£ýÑH@ú ­“” ä–ófÃðEë·Ý#p@mör*x›ÂÛ۾ƌeùp+"̾9ʺ·Nù!~Aû~I‰zlöc3‰Ä_ð‰WÂ¥«ÆnfK­0†*ÝÏõÆ–N¶~]ådW*I82°M¬£(DϺï­B|åûÃï‚êÆP¶’u£¥³‘sÕ4jÈa}?£xÉ §íbF\eËu–T,Ïèªvh¹¡#m<XfèNåèߪ/²¿p7¿æX2й$šfS’hÆ‘RÊyÐ3¬ñ¨öóžÑ£qÁn}£3¦·ùSÞdR=çýè®gd¤ ð7/ ; M<ƒö®½qÏT;Z蛲§Ë–pçeyäýÖ~åþ$r­5² HTUx¬yØV²½ZØí)`çJG\2äžÈlJZÖëÓÍÑ4[÷ Ü:÷¬)ÑzNQ­¢fík€•s¶×…-ýY;nxN¶‹¬£+óXþ$³Ävw™çjz/T¬¹K7›iìWi¿7½œƒà¶#íÚ?ÙÛy~í7±-%n?§>ä¼Ö8‹°äØ¢[?øë¨‘O°@éR؃5h 7µŒ¡ØAó" Cz–[z�•osïÁ­_lÂ)©â¦v³�´º€”[›ÒªXé, óc’!dus,WÄ-‡«<´•ø…¤Í¤¶êc>}Ú˧é Wx’tæbÀЛ»öyLa%Šm5<Y÷¦êK‘ÈN-·¦ý/3›e—®¨#.©ëŸª03I1P ³¿×Îa˜îvx¶êÅ›gá¼þ¹–iOPfV•òJÖýŽG¶L¤œ¹ë/KaqÒ¨e¤uà}pá�æ2K‘óC’›%rÕLa H«}WúÈð/ø·[°0y�F_Kó¾IZ~–Kʼߘ^ýê‰+ð‚kdÍïú±sÂç¡’CŽæ‘ù Qùåzì‘*Ýôr}åÞ)µ‹:«ÚÞ*ªÅ+‹‚¶²`"¸È«bjÜ"ÕA°û¤\â®wlèÙÒ JSô§ê¬^ ÷— W]äž·`? ùêÍâÌ »ý ëÓ•ü‡rᇵèj˜Ç*2Þæl•„¸/³u1uÕAæÅq÷ž?=3å@À/…ô¼az¶±“È„-þ&º_Íe/Ûœv®È,ïÖD$9g ­Â÷ÖF[­©š³ÿóñ7}ZÆŽ¶«gb»­)ï‚Z-‘scÒá%±§¤½7¬N?k"úµ,Y³GkF´ð7v§0U T|Ü‘–ÙªllÕbMXÁ¼n‰wÏï9{§7PxOØ‹º{ê¦Å_ÿèa¤·³•ýÕBžµ!ò>%-ìÙOÒ¤Y,Œý É™8ÐÀEÓè`„f¾|³e;£—•l}ú‚ñÔ«‰<+˜=øÚ;xU¾n-X‚Í[ŠÕ3¾µÆ§mNO[ÆLù.,HéÅJÔ^ LH·?†Þ½-e‰ofiÔß+;™ ?bÝòlÕìcM*Üa½8cwzɾHÛ:Ë-`lÃ&€ö²”ÇËN̆Sc8}­s?àYX@ÉKašÄD•¸!íyÑÍðþ’\(‘”A_™Y%c©…ý½È}NfWÔt ÄQÍä1’ôÙ4Ò°DôÑ0`‰Àµyµ(ÆœÄ_z΃«///ô`/ânàˆ'·/Dµ(_›ný3Lsù5G±È=Ø#1£¼e ˆî!8ùÒlwvÛû±qYÕ‡i4œç¬SÙ;U¥UC,Ãú%¸)néÌ‹¨sˆ…’¦f‚çäöŒXmëoÕQS{b•x‹Çe˜0Èz ¹”L%óìÏI¹·U J˜õ1Ƈ*?iN~4,t2¬Ò.1ŽpK«37ÛùÈ#´÷MÄý ¸‚¶›$.¬Èàøn c³z”Ig\Nœ’Ôûu½°»2V»QN_¹Ö‡§Ø:Mê Dµêê:º+÷õ§Á í“ÐN©¬uèÑw³`¯x¿}†NCêmÇFͨ4ëJñš÷¨ËœÔl’ýÊ&|Yäá÷¾"Ö¤žñÉZ±/sÜ%Ä+Ýæ&O3|µ¥Ùüà¬Êi*ŽÏO„g¼®í· 1ÈÞIý¦šlÍÇÔÒ3}»QÃM´%­Æ¶o¾( œ±}èþ4˜H§‹O1gJ_NûÖftÄ]½‘bb„vÒPFÔM=ܵ߻P#šFËå?ºO+¼Õ]ð—;Ù¿H¸×¨âŸœ—xx‹Y&£fé»�¯tÒ¨²æ‡Õ¶}ŽK¡m—r‰‘gØaB\<aR�ñýwÕ®ÊcR<¦äKg9D·èºrr˜ÇšËú(TÛ8¾ÖˆŽÍ‹Cíúñ"ÚæŽ=ª‘UÁ‚÷l§4,÷ÙËèÑÐ,„5;ÈåL¨ÍiÐʜȮȚ‰8’1%ÌêÌ y23DiÃ1/|Y«/ôy¢q°{p« F!Ì%]cXÚÚÖÀ3߉œ²‰˜úi÷‘_Q!;ú%n4ë«?<W%ŒgR‰¿Çô=Û(=Ĥ…}Üî$f !¤–¼›jÅ%8äÜh“R‡žt¡Tñ…ÞO/¸)Úrªìo©}’ëüÇðÄ„9©žÌHÊÝUÏñž7Ôa‹™s*ŸÞ”ü°ÉªUŸ`º~‡WÓaé[á‹97‘ó*s.t'&е)Šéá•ÚT'©ü Ñ®ÈøoÛ©çJš¦YR¥ß?ʰY³jÕx¢‘ë;=›Ÿ»“²�+˜¼ßÑú%CÿåáýRª`¥8þÍøWlÂè Ÿ¶^÷›ýÍú",]*²\ìú ­übœ/–?ªÖ8Ø9'Ýì Ne òq„3ÍŸp"‹­}§Óq<Ÿ!¥ø‹þá"^t”8*ÌÂÚ®Îÿ(×¢ÓÇ>•cF¦•^î¹FW›æø/òoC{&Ì K}‰n% 7.ò’§B_D¤ˆ/H%Ã’R£ÔIÓŇ©’u©·(ß hÂÕÏ&£#£vlKÓƒ9†Ë'b™lÖ`2áÞ±)FÙÕß\kU\z©À èÉAÛ…•¯õz Š•lÍuúCÎszÃêº*£~©ß…÷ŠSfö95Œ$Ö¯^lj£áÞg½¹ý£áó|~gWÂ3ëÅMB'Çí»Š‘=ÅþWŠ©:ð#уA1²ÞƒZÚ¤Üq«.4ðcx{Šû¢ )22R#öÑË9(i5M"‹K÷ÒÜf6jIAî=ºË¬èB§{%~}@‰ò(Ó‹n­…Ëöþýófªk?ÿ(è»ýVÅK¢™ì·qÂuP=þí¦…À*¬€¡ÝM¯t1ÐYåtgðVQ´£Ÿ?@òÓ~âŒv¨ N”ÎÍd¼Liå¡_á²X V6£cÒØ™³/ÖENžÎqÿÖš?¯™ñ‘Å´6™ƒœ¢µ=éà~s‹‡¤6šè¨X4^%k‡±xC®ï†qµ¶»J|È9Jó_¤bx—:[£ÂR^ƒ'«4›hÓEò¥êíó©åþWŸ#f€^ìÔkÑü›Á‡QÔáLBºÛ @d¥!G�N˜ö6õÀ)NÉ‹½°L°á®†j¦Æ¢#^¾”`SG°ÐMuß;-i—aF¤Uú³¯ì1öåªÈíYÁnøk³rQ1WÓ6‡¯\NŒ[G÷}õ™š‹›÷Ø5@Ö' k¢ÖL)÷º¡t8 RÌ[³h®X*©@#¬Mäz3kòý¤L«œ ŠÙHîU¯bE+B/Þé,Zùâ¦4 ¡\}w„¡—y/&ÒCb®úÄç©ö¶çDé}ãky¸Nkçi·í>Is¶²}` Äx=bgf¯ðÎÀªRw!•¨šþ´Ï§@Êð4OL™;lÐ8ÊbÇ&ÅB, bì¨õšËh}¨vÞ+ Ï?žÍ‚”a6ZfiêF3ÆûŠÞupÝÏn…^õÃ@ôA)ÅvÂæìÔ¼KVUJb^âZpKË9ò§W «•LNõuÈo¨^dÈÔ!fêghïžõ™(©S ÃÞàíOÎ÷G_< $Ég¿ã:¢ÉÂåÐ;/ÿXCgÝê,\µ>1é…«:zÞäÏ›èßppÈb¦Q÷./Úì~0sÚwLíÁa9<Ú}^ 0Ð|ò-m˜¯ŸÙè~Œ¨`åUuÆøë´‹§ƒÝSuÇ–¥ñ†'›;¶:ü?µJgÕ^Rž°qîàűT(Þ÷¨žfºD»ZOá~ o=5‰'6ð‰'™MŽ»ãE?‘~—ýY>†=xäÿóÆ[Ö~Ýl}³Ö•­Êh9ìNyñ´€æˆö=-obVòd0Q úw·’—þL]Dk÷³]_|õhŸ§€¡b©T@G¹D̶Éf‚•0Åæö={!ÒÉsö1ž3QLçdÖ}勵9ª&ãöáý:‹‚ú' 7ÎÉ¿/ø¦:_iñPÛ¡/YsÊ 6»8в¬ÌŠ©Õï .Ù ·J3‰^9c_×¾Ø>í1©äøðýü«Üµ!¡ðB¤úK3DZɈ…xú­Lßf˜'Û$Ã’œ‹âÌà4/LCÀF$5JvŽW„¢ä=4g¨Èû=ÞÖLüõäîžo«Ö»Æ~ÙE¹ÿåøÿ€ÿH,A â=w�à_´ƒö5 endstream endobj 1 0 obj << /Creator( TeX output 2004.10.19:1440) /Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks) /CreationDate(D:20041019144002+01'00') >> endobj 5 0 obj << /Type/Page /Resources 6 0 R /Contents[20 0 R 4 0 R 21 0 R 22 0 R] /Parent 3 0 R >> endobj 3 0 obj << /Type/Pages /Count 1 /Kids[5 0 R] /MediaBox[0 0 595 842] >> endobj 20 0 obj << /Length 1 >> stream endstream endobj 22 0 obj << /Length 1 >> stream endstream endobj 4 0 obj << /Length 33 >> stream 1.00028 0 0 1.00028 72 769.82 cm endstream endobj 24 0 obj << >> endobj 25 0 obj null endobj 26 0 obj << >> endobj 2 0 obj << /Type/Catalog /Pages 3 0 R /Outlines 24 0 R /Threads 25 0 R /Names 26 0 R >> endobj xref 0 27 0000000000 65535 f 0000030264 00000 n 0000030854 00000 n 0000030529 00000 n 0000030707 00000 n 0000030428 00000 n 0000006512 00000 n 0000000009 00000 n 0000006759 00000 n 0000006573 00000 n 0000000913 00000 n 0000019124 00000 n 0000018934 00000 n 0000001829 00000 n 0000022632 00000 n 0000022443 00000 n 0000002765 00000 n 0000026158 00000 n 0000025970 00000 n 0000003711 00000 n 0000030607 00000 n 0000004710 00000 n 0000030657 00000 n 0000006446 00000 n 0000030789 00000 n 0000030811 00000 n 0000030832 00000 n trailer << /Size 27 /Root 2 0 R /Info 1 0 R >> startxref 30949 %%EOF ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/testPDFImport/PaxHeaders.3194/nomeaning2.pdf�������������������������������������������0000644�0000000�0000000�00000000073�13124510115�017561� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 29 ctime=1498583182.67525783 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/testPDFImport/nomeaning2.pdf�����������������������������������������������������������0000644�0001750�0000144�00000074253�13124510115�021162� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.2 7 0 obj << /Type/Encoding /Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis] >> endobj 10 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F1 /FontDescriptor 9 0 R /BaseFont/TKGDPV+CMR10 /FirstChar 33 /LastChar 196 /Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3 777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 500] >> endobj 13 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F2 /FontDescriptor 12 0 R /BaseFont/AWUTTI+CMBX10 /FirstChar 33 /LastChar 196 /Widths[350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1 575 1150 575 575 575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 691.7 958.3 894.4 805.6 766.7 900 830.6 894.4 830.6 894.4 0 0 830.6 670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 575] >> endobj 16 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F3 /FontDescriptor 15 0 R /BaseFont/QADBYN+CMBX12 /FirstChar 33 /LastChar 196 /Widths[342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500 562.5 1125 562.5 562.5 562.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 675.9 937.5 875 787 750 879.6 812.5 875 812.5 875 0 0 812.5 656.2 625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 562.5] >> endobj 19 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F4 /FontDescriptor 18 0 R /BaseFont/SBJCEJ+CMBX9 /FirstChar 33 /LastChar 196 /Widths[360.2 617.6 986.1 591.7 986.1 920.4 328.7 460.2 460.2 591.7 920.4 328.7 394.4 328.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 328.7 328.7 360.2 920.4 558.8 558.8 920.4 892.9 840.9 854.6 906.6 776.5 743.7 929.9 924.4 446.3 610.8 925.8 710.8 1121.6 924.4 888.9 808 888.9 886.7 657.4 823.1 908.6 892.9 1221.6 892.9 892.9 723.1 328.7 617.6 328.7 591.7 328.7 328.7 575.2 657.4 525.9 657.4 543 361.6 591.7 657.4 328.7 361.6 624.5 328.7 986.1 657.4 591.7 657.4 624.5 488.1 466.8 460.2 657.4 624.5 854.6 624.5 624.5 525.9 591.7 1183.3 591.7 591.7 591.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 710.8 986.1 920.4 827.2 788.9 924.4 854.6 920.4 854.6 920.4 0 0 854.6 690.3 657.4 657.4 986.1 986.1 328.7 361.6 591.7 591.7 591.7 591.7 591.7 892.9 525.9 616.8 854.6 920.4 591.7 1071 1202.5 920.4 328.7 591.7] >> endobj 21 0 obj << /Filter[/FlateDecode] /Length 1581 >> stream xÚ}WKsÛ6¾÷Wèh&¢I€ÏÞì6qÓ‰›Œã´Óiz€$HF’*@ºI}÷Š–åÉE�»‹Ýo_Ð"MÒt±_Ðr½¸º»x-š¤)w»ÅªNÒ<~ýü—¸ôa¹RJ‰½ïôËåßw¿^¼–Gî"OT¶H‰5çÃYU‘T*ž½d%™ZeÍ´—µd µÈ²¤)P$+ÒDªÅ*«’¦&É+§»Fã;}®^V‹•TI“ç­nûn¹*êT¼u£sÌŸ/êɳ,O"y(’x“,WYVKñáãÍÍåí²©ÄŸOoYUE’á=ER²ÔݽELš\ðZÍŸ›µ¼²k&–+Y‹í.2¶üÝû æ«nÎÀý%ùH§—hÄbE&€I^ÐÅážäeUˆ0¶­ößð#÷Æ£¦\'šï’9¾/‰—A.dï:1I¡I´DEJ=R„ôÉ„ü‰3ª`É"J’_ó]œc4©Ù¤Ç¡« äΓ,F™§ø)qõæÝõíåû_ΣWV"FO’äo:lFp¡HSŒ[‘fÚÎõ~£™#E¿&mM8ø¥¬Ä'Y–˼’Â@äó¦Vá¢ð¦GßÃ�•²*r EÅ™xN”Ue#vº]fYÊÊUÝàF9‹ð••èú5åIQdâ=Ú�0Æ£‘  vw85AóAM×wÀ.¬¼ªÚ…'1ç8 ÞtKðzЫ IÕ•Ð^ù-įµî¶=)¯kò×`–ð|Ç8µ,1vcR€²Ç£R„ˆ¼Õîi¶0l,k<, T˜ÙÚö«`øó”9ˆÁ¸µL‹‹‹gO2¯ÆÔU’ªÚvÒÿBS@Ÿ-’¶o#b„l%\¿&„S§ RS¨¹/Ñ6\qÅxºc õü1>jÃì:js1¦-²Œat«ç+«Õ]�ÓòLMBàÒçÑŒ´åpÀ¢„~"u˜43·f²‹ëÎðºñ6  [˜ªÄ%™²~&F06JIíì  4è (p‰”ÓPÜâÔm½a&÷bFËëõË#?'î­>kÏì˜$Þó°¸ï¼5òÀ IyÙÌ÷Éðq¤ûëˆôIù#Ï6žæiа@„Ö $ÐLÇ«sz8¯ŒJ*ÅFÚäƒVËRâPÌš{šM|Ô·�jø•ø} í¦X ¢€oã˜pð¶hzúé¸ããÙC¤FÓqK]«G»z$`9¼¡àrP5˜~v£ß[b¦¼,Ô¬pãœéöcüxÝ^{l–2%³‘øð´n”xÕ±BwjFЃ°+à¥P‡ä j…Äé•CヌNãˆ:«âØöað˜=ȇaE5»Þ·š·'Þm&¢>·„íð˜ßXx%+ƒ+(ÏæÊ±¡Å†œ+*C<™m�v*@¤ï{&]•ËtudÄ*˜î—èvžCŒýÊûÁ´j U&¶ã~<…y$¦³úÖðVs?*JŸd¥–HÜôhK®D°ûΞ™Ãp@,-u›:öôn Ônˆ•º(`Øq6}Ë|æÌÅ“&¾9 Â@e</`hDwŠ]˜"çõq|™.pø†!ÓmlØÐ Zo&#.‡ùâÐïâ<œÆ e)Fs‰óÓ›õÔAÆî™lÙ{ä”…¢€–)Ä£œPÑ8Î)‹puñ›†.õ*†|G,d•ŠèUu­�3FB›¼·ºëYþʰ=³û`)Åu? ;h‘[üTâëîkùã­±ëÎþ‡OèÒ—n?vÔòJÇœ¢¥ •eÅíÔr‹9 ˆÞö‡’CÕñQ£š©øÖiï!æé€Ï"DŠ‹ Ê;˲Óþ %Æé¡š˜P°1Žõ½>EÙaq ý@æ×,*K±Å„yr¤ÐW�¤€t�6hfu4“©R´ð�‰ñséé|9³DóKÃâ„»x3àá�3à½3ÝÙ#º®ÙÀ¿Ÿ"IËã#Zž>¥sñáÝÇÛ%zuþO¨Jü7“URWüO‡ùJ`è/ìŽÙy†žô×pøñâb£“í‹~kuÒûý’.ŽÿÙ¯î~ø*ÃÒâ endstream endobj 23 0 obj << /F1 10 0 R /F2 13 0 R /F3 16 0 R /F4 19 0 R >> endobj 6 0 obj << /ProcSet[/PDF/Text/ImageC] /Font 23 0 R >> endobj 9 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-251 -250 1009 969] /FontName/TKGDPV+CMR10 /ItalicAngle 0 /StemV 69 /FontFile 8 0 R /Flags 4 >> endobj 8 0 obj << /Filter[/FlateDecode] /Length1 720 /Length2 11503 /Length3 533 /Length 12060 >> stream xÚí”ePᶦq,¸nÜÝÝ%¸CpÛ8Û¸;A‚»[pw'¸»{pîÎÍ9gîšsçÏÔü›šî®®o­õöû=½zUS’*«1ŠšÙ›�¥ìA`FV&V>€¸‚*+ €•‰…E ‘’RÜ h ¶²Iƒ|�V^^6€ÐäïâïÅÇÉÁÇɆˆH ·wðp²²°hÄiÿ¡âˆÚ¬LA�c°%Ð©±-@ÍÞÔ ö`�DmmªÿxÄ  t:¹͘YYfV¦`€ Р„Èüª¯ s{�÷¿Òf.ÿYr:9ÿåÐü“”ð—ÓÌdë0š#2+ÚÿÝø—æÿìÃõïæR.¶¶ŠÆvÿ°ÿG¯þ[ÙØÎÊÖãìí\À@'€‚½Ð ôïR-à¿Ø€fV.vÿ^ý 6¶µ2YØ,ÿJY9KY¹Í”­À¦–�sc[gà?ó@Ù¿CüíÜ?˜Õå¤%”5éÿõYÿUT6¶Õ=þËöêƬÿ3þÛ'+w€.Ëßþ²þþ=ÿs¥ÿo›I‚Líͬ@�5°1ÈÌØÉì¿ÿJLÌÞÝ‹‘“ð÷öwÎXXx¼\¼>ÿ«Rdåèü*àdaaáæeÿgÖÔÅÉ ÿsþ¾ñÆæVûºMýÕThNiV±Y° Ë©hç^‹Ã4¸ßmWì·¤üö®¡¾^k´Aô¦|åÄh4<º©xù÷“åa L™ó8ùºÚ9ìy©‰$¢ø€ÎQs³’Æñš…¤h@ojÑìNŠÐaîByÔö!чe²)ª¼ÖÑ„7+Q`)/‰·ÆÎßW›ª¤Š‘þjš°[[ÁZËøVt—·yàI…^‘DB&u±†t†“ôö5ù5ku×ɵc¾ùÊoàͬ{ùn·!2í·¥T)k„»¾“NcEO{ Åçb¾ùcYóêñ+©§ŸJñ‘üÀ ê¹BÀ”_Gô>#“W££4oÂSO«NÛft‡¬3Sðo±¹®},­8Œ‰ˆoÉt?U«»X÷ò‚.)Ñ<üþh$½ Êú=?ä³ üÎR¬5•W²Ñ•$22óäG´È’ Ò.îqÓZNàjâû~íCìqm—>“iÙ~g)îEÕlÊÜxüP¨xÎTïZ((*ª¥}Oî2¥omêˆkÂÒÆOÕo´!†5:·ŸÒC<=`Zû ·ÌÉN&‚Šd^ Œ¡ÛMÇDB iáÂCd8—c”LaŽÚ:^ ÐÉ @<-’™WcÉšº|}Ψ†äÀd´´(N `DZ©»Awæ² f’0HÁöe*5Sd=Áî­¤=aÜÆÙ•[+ˆñÊw¹Iúþž¿³¨Yù zñiÚŸ»Ð7fÞjà)Â@�«SvRdN2’ðÇx¹¼¦B«±1¿Q%É+¹_í¬yu¿ú-®Ð.!f;Ý‚(XáLœüêÜŽ’¢H•UVM/dªmŽøÓ� ßÖu6µÿø3„DŸÉA7_½I¡úyÂ&夺(Zlov–Ë0òŽu°ˆÜÊ&ß9Šp<þ@ؼ}zQ¶Á‰o$}á.»?)ÛƒQ~,²ÕúYçÈÄjϪä"íËH㪡¡E]šïí^iþÈçºyé#¨“èâ^¿7^/;Š,Ôù“%Š Ã¨¦Aèt¶ÚƒFËX“ ½K°ð°`‰½áâšø\ëÔh'©(›ÑǼž²ÈOéO#.Z~4U{ Î'‡¼IŒ“æ½`‰bóÕÿþ&¹(à›êOä&%-î6™ðˆ s£…ø²°öî¦ çÙješê zeN{Ö<­2#ÓJUÕô‹Ý»°³wœ t�¨»íBFpë•hÑ §0¨Ì„ŠOŽÁÄfO¹:‚ë{†O­º‰s¶:P‡ÎRN-–ÝOV‡G‹ÈÞH[ð¹Ë5¥ç=âEY?›ÇÇÅLEHᦻ/šFTz7H1†Og‚áI#òH²ì×+ÌöOJ‰DoÚY ‡± c¤ßZÕØ£œƒÇ,áx` Zvç#¥ FAIõmµf*c@ŸZæ9(“)ɶۼyþWãÞ•† å a¼ã¤uU)õ¢šðÂR½jU]^ðë•+ñœTA34V¨K¥Ÿ¹ü$¬ˆ={’ÞŒþ+n´s®/ ùEzUiòs|¹„�ÂKDðç3ª6Ëcù^_÷É‘¨¾1J=£Ól‡O4žS!j™^@fOÚ•½ª^ÄP|g;6óCÆœÆT9eƒo:@’'R’èk@šB¥šNü‚‡üu™ª ©øRQp~cÊ}*ô ‹óœfFÅ“~®œT'lztçÜYDéQuøM{ ¾†×ø/:bˆ·‹7hdh¦€MV±<¸ž³ßYšf"§bF´z' rÓ;†6YËÏý$’üãÎ8n¿*ª¹Kp¢Ñ»Î-q±nΣ)¼k•¦ª`Hí©Öi¨_PµEAuJ‘KÆ ö÷wÇpŠqÊÙìtÜG£ˆ´¦Ê=JêÐS?6…‘FŽ¥/,×§v KkqÉ*ÛÂ,%×[…ZsðWn*jtK(¦t0?òŠà_­oáY©º ©—­À T·ß?LŠðBß`"–ÌÔçé[¡aðÖò´›†ûA5p¬äÜ]ó<N¯àæºÓO‘â¦@më jÒ\t~ú«eµçH8úó|½òÁO©S < éÂrcܤ©yÉ#ì®ÇöÓ¿…Dì`@¦/½´ölJ®ª’ðÝÓ0{ À×WOá¶ZühgFï!Ìêëcå(ز±—w9MU7ᅢ öÃt!ÖúÙí"ý õtdùçó¨Ž0’x…³bÔù÷X†h|;bˆp¢MœbL<_ûùÈ�ƒ ˆÖ2kA©½ÕŠëeÙ[? ÿÚ;,H9ËPLsÈ3D/¥0wô{ÞÛ›ý¸’Ìw ê ÀÂÍÚõóVßUDê|ÎnH[£”A^Ë;¢5d³xÂÕÛ1îPä`;|,ažO&NŠt…€±+Iñ³U3†ŸPöîµë˜ºŒœ%}– í‰#öò07v&#ÑHDo³%ãÊØ‹ÖóÎ$Q›Ü *é®C‚ñO½BÑ,ú±¹Ñd¶ÞLzp™ú-=šý°·7 lÍXEšò\qŸÚbÜ’W.ë°Èð-ò+8sWž:nÃÄ;ìÂk:»Ÿ’øÕN£jÄþMæä­.'¢#:.q¡†øgZîBÀ o;ÅŽ6Ôd ý¹”w³;-;Çr¿ÿ@¾\šz(Êa jxQ^­î"9åfº g–œjêÖv1ª—½Evúe¦Ì^F@qã×0HMÁkŸÆÀà£VRjtöý¸“ºz¬3ŸŸ1Õµdyjœ6-vtÛu*(lS Á‘Û–T9#éküÕÉ=„s3¡™ 7á’=8¼ãlúúñäÒ™ª;¥Ï üíôû#ar¡`í  t4¢]ÑÝAÐWž ÂB‚8TÊfjðîèñUlVéù!êyñúœé–ßI<f1vljZùR\ºô_Ö-'–öÒ–mÍ(µ¯ÜvLj2užÞM8x° |#™íwæ:‡öè;îQ0¨Î’rC‰µâL¶|Úí-cú¬îÃÓD6TÝ~2:züsvÓ$¼5û\åëælDx^G·%…Bê»–ûæMéòW;‘WXb[ŽÍúãúªöt¿1)Ö2yáøÈ‹(.­.¥eá"0ã Ÿl‘yj–c¸·t²Ç9“{NM‡üy'ìEä@‹©#XØäxò¹ n0Òô~×1ðYܱálü (9LW~Õ'lþá'Z­‰¥»u%D®ÃÂù~]̃( £ä½’Þ¸û舟/|Z ¾‚vÓØ¯0ý¶AÒ¡9c™6OâPHÕg.w®öÝágÊ".’ù”¸¨‹Äq‹ªï;[Bó©A þr¼n†+·UçOwx­¤D€îŸU¸´i…»ãø‹ÐÝq®üorÑŒß ^…¹É"mÆÄvÇÚ5ú$a¶Þ»lS·Tƒ·¼ ur Ñ Oã»Äߦc`üf¡ýŽ °KA›¡8óœ Ùl!_wk\ïM›ÓI žè–"'µÇ'¯ÐsõªŒMSÚHü.ÛÎ?•|Wùаœ'DÄÊ“!JŠ«£cà‡hUO¹¾x‘?Wýþ 8Ýa2¡uÎGød׌†Í¬"0ÚŒ·eŠw{U݉‰îéæÉFr 0#P÷ŒÙMOQιY�qPÆÂdö„°Nv³‰·.2û&5¥‘/[ð믶$lró(ö¬aïgÜež ëÚ `Ðj\©š:cÐ$ýÔE¤}út7ée¿d2ªx Žoߥâ¬Â”sÈüŠ$*%x &g )O ˜™*¶Ð8ARtàÄÖhp™IdœL Fj©š¦»Äh²èeˆ²üuKÔtbR£¹mý„Zá<È*Ø{„ö8“ílAÚdsêxjD ×Þâ³í"ö™7QâÓ@5üÐhr>ôy™)‰×9ym3#% ‰²£¥¬ÿJŠ“–@ÕTÇ}›SÜ-ö™LISØäs’mn3Ø"º-„-uìEþXˆ¹~¿í¥Tü"³+´q+Ñg©VÀ](—z…nÀ›—ýŒ³g©ê¬ImEÐ ¦ùU³× œ‡¢±hÊÛaP‚,Ùð©3¦•s(_òbeR4¢Ðphré ]ò$O–$-‚%4¨žáb ²^˜Œ=»,Yâ}U<^>ÂW÷pqÓ§_\?ã噦Ê]¶Mø×• ¢ýynÞ §DŽ—)¹ÝŸÞÝžÃZM»×!‡]¼cAe.mê*ë8îk‘ÐULÎŒ#èw+ ê ÚøøÍO%’¿b&S{l‡oŠ‹<ßRV*ÕZ œÌ–)ä]SRHQŠ;Öš½fúàôÛ՚ᆉ!O!uäò W[ƒn ¤emR„Äå_ñÞL_»Ú dšÜÁt½D”K}Z¬cGBެØÕ!{7y|øO ";ëøË‡ƒPøq÷ðl… ‚ºø"7è¾Ðe0ΩUKM“ÄhŽh¬ÏVDÕÁÎç2ªXÝ"0k!ÇLä3´8 Œ¸g€ØÔËDš‰³&‚Z—#sâ7³ˆ>€¼Uò…~>ùŒ@èý•[ý Ù‡I q%†­ÛHÒó¬µó^Îá}âñ¥Mg[â~­�kêËÒmoÅîÂ…ñ°¼øoãGg Ãd{óý¯ø`ibÄ“FŒ:¬¾™¼˜+^4°Ð‘1sjja΢®”å|;Êdï*õVB¸5¶€øT`+75ûÑʽ¸µO(|¹«Cº ‚å&ðöóŠÒK쎜Nä÷ úæý‚Ý‘-!›ß OÿõÃG·y‚•ó=Ë–\<“v~©ˆeW¹²±ã~#Ç—ô¤`-°·-´uSB@vg[½I*‚± ÖOÒ¯\õüØsÄä©A1ûIxsp»¯Y"j§³ °ïcÀ¹ ckÛ c~GÏ'“7›Ýž<\ƺ3³I3îPÙæ`âò¦eL]Ís$Y«Ñ‘„±–¼Nöãs‡=ÇM†X’Õþ+¹Ý™ÈýfNšZÉÊ1D¬'<:7„Ի„…«+‘„i|¦F­åÖ¡ö¯ à͘àd_¹JÓüÛÅØ&‚{o*vb- :.ç+,nSVý¥ªîbÂìV×?ªØ»”Bü9²=²YŠÙö‹¡ºbº|[*CWþ|ßá*³—8¬S×ûD­&SŒ‡º1¥ ™u/³Í(¥öç]+•:{EÞ°«4vù.4\ïÔÚÀ…]%Õ2 ¢: Ü}ˆÜBž´"­\˜ò^sêîò¤ `8ú£‘“6­™½vOÐJA{tëk`�1‹t¿K^¢‡Tu1YÀ7Y] ¾RIe(œÑ*ž Äí@Ÿt¦ƒu0ÌTçʃ.C%­* ­bZ2\¹tÖ6 ædzU¹ÍV^¶©ëÔ›K õ´a×xÛxºŠë5Óüg°›’h¬Ÿ,ŽòiÌÂÙ˜Äøî;ütòX2ô²^ú/Š6{s±ÑM;ÖÛÏ^q;öUWÛ£t šœ:á‹2rowYìK8O“ÿ¼m.4 ·¡(¼¿ A¨Û6½ ð¸i‚Îór«õ7(_+—I7 K®º×÷àÃ5JüEýSKœK׽◙½ðâÌñô*4¢§7«Z°U®– êÝå2oCJ-ô%:áðU§ro*¬‡8XÅi¦ à0ÀâCYÚ p½ŽÁŒåÞhó ç÷Pæc>¡ázå2Jž=RUñ\uŵ¡ z” þâçïKPMiAüá¤!+’À³¶õÞÂp×–å5ï@ó1kA!’AG¥,?„Æ6�9É.$Ê3ÀÞìéXUزxLUÓuE6˜Ê,)©7í½¤Ä§”Õ´úóY8žÒ±u„+´vÄ<yFqü(èôi9‰û4 ¯ãD”‡±pÁÞ@è âOGO òü%íª¢õ³_[%lj†œnu¿š¢?0h¦öuýóŸcw'ÁÕ»£·Ýn¤„A]šzø&Ç$¬oÓTtÀ^× ˆq]¾Ö:ê ”ÄpXIfߥê7à´ÊۥîLzšƒù‘€îŽHƒþ'†ûOsºëtÕÖûK] ñ˜[ðƒÒFþkéDËR \ïCE.ݳý†²Š¾ãð†‚Ôª,Øïár¬«©ßwóÁ/�ê|‹i¦XÝÒùƒn;rfL«ÞÔ@‘ZX{(Û!‡úÞ>zrfÿSÅÓcþkò$˜>-S>Æ&Ld�IaÍpyX­ð1Öl³¦«s•4uyšûÆptÎmÚ! <ìù9.äV“;]-…舰ž©Õ%~sã@ v÷ØLö>"léc¾Nk±ZÉMm™¯ó˜—sªd{y\ê|×ÅKlù[UBŒ©×Ú·y2œüàMUüÁ¶Ÿ~ÅBZõír“…ÇŸ¥ƒ~!–÷O‰ÕNÑõ=cZ'ÜåÐRwßõ÷S…tÞ°¦–8ü"ZÌž-Â^çáIÿûcN½>Øo…Õg@BD+ˆùúÅ$~V{Í‘k}ˆ¶N´†˜.Ø«Í bmF?à2ˆ¿ðÐ#Ú1ñJ!ŒšHçï3.ÓJSÑ-Ê€±?ÙÔF| âÞ¾Óë÷xW_,ÕS_Û–l8…37îþ¦ªÃÜ.Hô˜ËÔ»ñ"á#6ä¨ ›¸ˆ[uâ44á)09‰¡Ço+S<F Ãô×Ä ;ô7f©’%ƒdf̾›HùpwÁ,ßYs¹-Û€|7‡ßÚ±šKv5Ì`­Cox"„&̓ªˆ?M†µRäéÜ#S#$O(·ö'#·X!c¦_i$ÍœD—i\wåáƒ*Õ¶ÚÈ ë´g Øg ¦h÷b³?Ù™ˆ'„ÅØÔ<Iâf8ÿ†¨©¤8;¯;¾[%þ,“;Î1AO—R§7©”ç¤ÔFæ†Ñtܧô ­í°ª+ÀìÄÃ&7ä94+Þ]éãõDà©4ŒºíìC}Í¥[r•Dm$EFqàËB¤ãX­¨îž·Xm$ÇD÷MóD�D€L9e2Q/LÙu#ž[ñUrìÛ S¯ýWÞÓMJžÎ”· A†ˆÔrç½F z²ƒe+ËÌÐòûb6V ºüKûý –æö¤ö©›ûÝ6£MOåÞs5ñ€H£a<_‡ö‹n~o™cp®%š¤ÿöq=ÓµnÒ%ð@}<»'ä{ÁüÍáG°C|.ã~F<kfh3`}Î>#_˜W¨ï0ÿ ½q«QÄP¸5…²á­òKÀ¸"[À‡‚ë7á-ƒД 3Æ3>5yØæ>äƒrpÞbq~<•ÐZ‚íꟉ·î`¥B,øÀ/à ó]º¸”ŽÄ"øƒ“Ò.á²(ÔYXªÖ†E>û vÏê•rl·‡m0sÉð& ÎSö$|§z>uÖQ±‚kyÖ|Q—ƒyíãý‘³„å³ù´mLJÕ/gþ+=‰Úûús!]QÈ žæÛì>­Ù ˜°&ÇŠùBý±ä‡‰œQãsø7ø0.ëÂ6H °á(h‰ð“jŽ�E–Õ¡�%U'ì+Ÿ‚Çu?×áÞdh84 ŠN*þ®GdGLB R÷Çjª&*±ùÊVDzYbÑ †kØ8 ¡~´õ‹ ‘íOðL8¾àXb3ºêüFJGÿ!$$OYáŒÀO¨kþ‹™‰ÇëñV‡2mv hó ¾´ëÉÿ¾2a‹Îäq1]Ĺîáõ¤¢èèàKû!,­(.Ü;YK)Fñ—Á\C]èB‚3\‚HÞNâDF´mÔ¶œ`;ö„8à …ýzYÄUEÇÍÇšOû¡R­µW£|y™Ïš dYO¨èîµa´©*ú/dÄ£ž‰õYÉpFŒru™æ¸OzÒìŸîd2˜—{^QîØ7ÂhÕê¡¥’×Oßæáù÷'hùR”´ªôÄ ŸæÜôZǽc³”Gu¥~¿^ã"ãÞòÁÔ?SÏyÄ©) Q/£œd0rè¾2¤Qÿ•;ˆU®,²Æj ¸ƒâ ú8“ÜI³E+Mù˜ H‰»ñ’}¶³8ÓŸ ,Í]8ñA!§±Ä*DÏ¿‹E9LFóSùKá‡å£QOCèeŒÌŸkÍ#aŽñ.|˜~ÌàÞÿì<V–˜DÌ„[ÍØ¯6Ìñ©3r¢}ðÃÙ‰÷ûœÜKhÀß‚t.Ó#û\ÓX¥4”rëîD͈T ýÃFúµ§—J ԥ؃!ß 'p±œ)'ŽoþbóP窿Bi)mã^µõøÙƒùÝ©àÏǵ5¯cºÎåký6Ÿï˸§\…‹AúŸMeßZ"š4ÐRB¿i¹fŒ-öQŒ ¤†þꮕsÀ5.Ò ‡Î÷ÝŒ.HºÒß>$-*_óº" ©)'- ŒO^™kæÀQx¥•Çt{¿c¬l_„ RM]ed½3OòçgÁûÄs20ù„‰z®˜ÀwüÅ5x:V¼KÉ0Ð-¡SçŒw¢Š  ›c7~.M Ý2_%Å¡\1AÖŸ.»©St¿�iŒD‚~KGºúr!¥uûU<ܘÄÙ‹GÍTš)Îk×lB 3ªsÀ}÷»uÆ¢èÓ>³›—Å žMUa½k鼚š&aê!ü$/=ö©Ôï(á 1_†ÅÑ#|YÎK£F;rîYW%—ËØÐ‡7šÝ™.²Ásðѧ¢{%ño‡Åï yTĺô·’ vA0¼Ecþò—[Q´kyrßCvó8è)VD( È otb1¸ôöÂIoÐäD¨ØªÒˆì›¡;;À÷Ã)4îÇ“s½ë4§èìÃ{¢«Üd9ɱ Böleu”~Y FAGÛøæ‹°® ãÍ9„§½§01Î5á¥3yG•lɈRsUæŠ ”NH{(eM0,”.²?í—Å_Éß,3+ÖG©y¿´>5ü àÄ)pt g‡w=D˜œ`[…mZz°·[Uðe%"NI ÊèIcŒ¤ô}ƒâe­è©gêçÃñ¦wg-F‹�5¿‰âþ4 8>@5Vr׃¬Ý¬öJ¼�#…æuMr%Ý–~ÂbŠõkù켓õ9×Í|uD:xll)"¨ô[zK±…:ÌéGY-Ísô¯t·òÕ/æVˆÖ«Ÿ•oeµ¢=1™ ¼ÛÌœW”,Ï•0xkÌ›M{ûÎN?·Ç]zª^F2cÁ÷æ;oâS¨µ '4‘º…[ Ý/”&•ß({p3nk;ÏiÑfÜîqéÀwøŽ l¨«1 OçV…è¬#§Q•§Êì=½HìÄ^„„N†¿x1I¤ YR‰Ðóy‘ü&‹ÉWP‰rç|ë"�#·Í3"Êë^»³(\ãpd LÕ7°êâ¦`Á²ø(Ë|Û=\–e„»ú„Òa9âá#™Íý¢Qb>6ÇíuVpj¤Šf[ß3ª…M;…`²ä±EâoWái!hLÙÒ¬ŠW¼÷EyX wVï1zD1ÔSä¬x(2÷„|,¡ã„k¹l™ÿ·>DÒ¥ho{Q žs1Þ-ÿDÊd�iMNrq.8ç#¦1<×÷hyýàÉ=-ß †, ][ÜÓíòÓ³CêÚÓcxKÑmâÊvì4 [ëD<áÀh¹tOF¡µœ¼K]ß™bØ$B8Üï/ô£%%dXÄ×áW0û|Ô•Õia{„¿öû‡mpùÅ«"ïÎå¸k?„CÃ<vÿÞ»ÿ ×-oJ‘ÙE8¥$‚|_ðY†‰·0Ü ·ÈT3·òŽä¼{x€ç¶Ò0{bÉšTyý1¹ÁHžrÂ/(p¾Zç@Úã@½ôµµ"’/ø¦u­©ZĘ6'Ñ Ôœ»f_Ï:„yH"ÃBQP¢ÛâË„ë))=™V1ƒQz.ÕÖ…™Z÷Ø$}1ª?B=¨ èg=Q’íÓo">:È´Eûä�ŸRàágÆß$‚ž~K±þžÁ&[“5S¥Hn¸%x`R/6ŒÖê@%ùQSR�ÉeÏt³ËƽL°.½ºó;% A¥A‘Ù‚‘Rk{Ê´ÊȽp¹mQ2ýÐ"ãDÞ'Ô§qåH*R>ÂüºFAëô¨s5¶WÎëô©káË•C?’$ß ÿw<ƒ‚ê‚£Ö“Ø1F³½”…HŸçô)@"@ôK#Mí÷ ¾e÷< "Ž©µ¼+?r}¢H°å18¾ô3Õо,ÖÚb´ÍÒ¹’ #BÓ—‹ìþ‰µú¼R72.,wŽ1Òz%¦»!^J G’ö>R¦ƒôy¨Ót@”‡øå³k>gl¹­›}å&å~ä’‚=Wú1hd¤„ïü§óØÞ‹YÙ‡‡_]žB×EÁrý¼ËräBéšÚôÓ6ÊQ‡þnµæCáñǯL¸ñ³ÌEàþTsïÇû$;ºLVÍ\«åŸbÿÚ.1`ãQë{ ü¶Ô@O!·òZ¯P¦§ž7o ã _÷î¥h8[»æâŸB9miìà‚å:øýj¦y0ÁçŸù °ëE‡ÈW1Æú¼YSùvÉSK³”ìQ@w_ŠtÛ ² ¸áb‡X˜41‡ï_MhŒ*~¢YGÈÇògoÖÀ>8†NÖ90;çñUÌ•½X…�ˆ–?hª»º>V…½•“,–Ý´Rg¶„@ŸñÅŠ‹4oK®Ñp‹Û#¤§@>ÔÎWe;Ø2 lè ûYÖðöæêÕfz·}Â!~U|[aëš\Uç ¦tò±âjz@Î8ÈÿN[-ö’~nüíQ«¿6H±¶i|hˆ+l$ávæõã$ ¨½ÿ!‰ô”á*rDCægüåˆ5‚-{µÞ—Â}îì·n#NßÓ̲~÷JŸ=D=±Þ¨²a·¶¡È !•5ÄÈ×tX{86S„µÚÒ‘çò5Xjdd޼¬nlGø:ÿ¤Í+<‹j»nµïi^7dÜ {—G6gnÒÎ7߀èÈÉÂ<AìüjýL<ŸŒxå eÐrÛ³¢N_‰Ò=$EÍÍLõ} :ëüŠéÇÑë,û2AgòTqkíýÐÙè„ìŠ<êÍîÁ3Tyx$Dü)ÂÖ¶²Ç¼O‚"Ò"dÙŽ-ÿ§¹h?í)ˆXq­p¾¡–Ò4nÑô•zIuRUIçôÍú~h­½RÜ+.ÞÎÍj È„ /[Ì:›w»vÀBÝL|=–Ig¾¾¼í ¼ÁBÏêEȯL° žø´ÑùÜs^Ç¢+Yfº*c\ ÄÓyA¼ñ?*¥K<Çw~qxQþS˜ ,ûeHÂ>Ày1l=±â'¼£žŠó0z+~ê„JÓd›é7U=L)õxÍwÒ†RäÙg”Tt÷¨ÖÖ䬮EÎ&|ae¶Î˜vz]’DCXT±¿¤ Æo6C-R#à7“3,Y‚ÑÆêu‚0Õ‘ßô°x$iæFªð™'îÂÑcâN\î¶q[Ò¼›ZÄ®{É®Šáã Å"Õ»a!#U-\>‡¯AQ‰1›·¾rÃ…ž¤,S¾J)FÅ7"Šo” ÇF·M"ëŽx\}ñTíîþàüøs¤ú<?]iâR Þ”ÿÞ‚WÌÕ¢•`ÚÑ&t‘²é\”Ü)tY;vĽËrºŒsâ.šè¾?ãÛlžî…»å´ŽõÑW”²åÂ×ËN·0@ås‡'v£YŸÙ°×K5&õLŠ)J‰M!°5ä¹2‰²*¨i áß¡±bÑ®Ïv’ž âe=¤ypnÚ2ߤºi>U.r’ÇJ-éëòtàKvÍ¶ì ¢+2+¯¡§CÖ|@‹ð_êƒõLO*úª¦ Cô««íœ¥‹¨2–ÂüÍú‡Ä·‹2›Çµ&Uß“Ixj9\š7…g½>~Í*/KÓOòU'OÚ#·¯iGµöq"<OFT<Òô ñqq{iÅ7° v;Ž*"6«‚4˜²M/*m[-ˆž}}Fa¬G7î´2oµ|‘K˜âœ1ú}­g®ç`c.\ˆýì¾×{ù>¶WP¨ $ƒ3ünê›nÙ`Ù<×c½ƒ“Ïxƒª)ÿðY¥ð:ûÌ¡—õXy¬pïÔL¬ kiŽ˜¿éÞDú`"Tž?iŽºw_dôPÓ>mpEëß×y)±«—–-3NìîáüQéŠÍ­YuSA÷`$åÝ%ð{²LAm¥éãÕɤD‰‡)&g5¹ þ‘{Yyß1J¬ÓRÜC.Ó\&Ñ’çGPñ‹ÿ$è^bµ“ýL Ú ;?ûŽŸMÓOˆ3Æ †€ŠÄ5ƒÖᥘ×H]œg%Þ4Á¼Vy†mîT3 úí|å7«ý³ 5ä r0Õñó.…òmFO\g¯P q×øOü$÷!(aÇ£åc³qBд‚|ÇÞú%LJËjÑl¨Ùû~ÍEvÅË—þ(—Ìß,ü[àÚ!… ½ELKÞ'U–Ù¨‡”+£i%ÄHT¸ì°±6‡/9TÉí¸’ù+i‰ Î÷›+èFüb‹0S9õÈb3à )…ÍÊÏ.÷ì°é0J%üÖ/—ÁPõËjüú³]wœŒŠÇ­&�bÍFß­;(ag5»y R¨õ37Õ·áñð†ïÔu!í0¯£øöÒÅ îǪlPÙËvîd¯–bAP&ýùM»G…[É9€}{›0´@‰N¹zwô'?@[%ë¹­ÑÆ=®?~ÁçÆqë¶!~w¶†UµÜаuÎÖ4c³_Ún–Q8á:Øî°œlºÜ×¥fˆ±ûùz÷›"äèУ#•T"·Er×Î5¬±>H?rL°4òœÆ#š˜2÷B‰¡>6î×!9^£ŽÙà¾éU;¡†ðàÃAyÑtDdîÏG¿ê'Bzi<Ôò6³¾ËŽç‘̧i„æn$X‰ˆÓ[âa½üœÜ d-…^èÏ÷U+¾ �r Ñ7më zŒ¢ý %†`Žør€ïpÑñùsðŠ—}o0OÂÞt‹™§›@Ñ�{î0öà,}›±ˆIæ'è©V/·(“R@ð�M7FÈÙhN4{ìK¤Mñz¨û)¾:Év€`Go LÃO…$¦’¤mˆI? ÞdžCpOz¿rvNtRœ:N(Ô³ët@-Û×â(î3 ¯š7>u缯Žî:}�N7òM­3<à…g&ݘɸ’NÕX¶¶gÐàf¿´Eô !Éþš6þÕ¶º†ž*eüZm¹¨¿ûYÓãG@Ž.ñ�¸íóèSêr6Ìììm½˜:ÿ3‘ò²~{l/Îü=6 šý Lä QY Çsï ³ô!­±Û£&í2tCµ²¢Ï2ŠÊ:Õ+.î )n× iÙšU]ñçË´{«n¢OæSG4O )qTí wÓo® pòD;L¦ ¥—T}ž_¿[ 62ŃÏÇÊæ¼> ÕI¡3¦h×”0Mîa,Ú×’Âú„ÜþXü+ÉÄ4j‚,‚  û–¨‡Yï¢ÝÈYyÔ¹“² ?ϰìÙ4¢MýƒÔ0`¾ôTîzûÁN¥éUm•ƒí'¤�)‡B3G²©~€ Ý^_¿=z¸'´w¯®øË2Ã3]ëì×-ß:‡¨]Þo“‡ú[]GÞ†‚ÍÕ­ÑÄŠÜ‚.“o”ÆÍ5¨eOg‚jq´È=¼iWz¤8ÓÛpýÔ†qœtn-áÔ¾á`k%ÿP%ƒ¢øîYêéçº}}|]Q܇ŠêþÆ?t"ö*˜tΔËNH´ë͵ä2Ùµ’SÈ?­wÉô)ÈD?Æ,£>¨¢ÿêî:ÃÖr6ÑTÄ.yÀ4lá‹‹#¾pAªBô9ÿ®ߥ”^Ò§äü“7®Æ„µö­­Þ»RoÆÈ˜q+‰·j™å^Т¦#G5¦·ñ¼rUX¬Vc{+_ÐX@ür«@æ"MÔUý˜"X˜â"³ìÖ¦$ÖSÐüî¸ÊŠL]{I¸µ»åÓ DnæQ}Â�¨" Í# êœýeúo»-ü@Ô; ½c¿tÖ³ûÔÀèÄþóú„^Ô\Ü¡ØR'Ç* »œò£@Rw6¦à0ì/èѺ™™PµzöŽèµÍžµ}ëx¤£èÁ@¸d…Ÿí®hÁª“ù�/æ¶óµ{íL„ËÊK=Œ¡þyñ×¹*òÍ3„ù&W°â%‘.Žr)†O(QÐàf|˜úùuÛ!q$g[þ`Þ‘ûøš’ÒÜsüT_ ³¸ECr¹n̶^ûè¶þ­úÇ~ƒÞ„-‘Ð×:±ß=ÕÝÄânq,ë#¯pQ¬Ï)&9þ#F ¦è°èX4ކ¥´3Ú…r«)%2ëÐJ&>Ó)˜kŒm•òaöÊå�ÆÅ üe´¹Z{SŽ>EDMÐ \e=…a6l2^·'fæ¸AÒGÜú'Ü#ÂÇ[F1 a÷’öÕt¬JQ3¤+&ᆮŒÝh@bïέíòSãâû�V"Àõ°k>jÆjä£=Y¼h¶Y5êl.=¾fpžAÀúsõ9bJ£§†7$dæuzÀî۸̊ÂU$ ¥Œ"í…÷ÂØD=©{.§dV¼»™ó‘¶­3µjº£1¬a…~ÀÍÌÝþÀ¸7F×ã†"ùCH²ŠZ\Ï4…ñf¦ ­lí¥:FÝJjú³VU×Zšc©¥H\ÁÌûÂEßd¨’ ›9¬æ}ò½n*Lõ†ªÏf¯?Æ\ÈH©g®‘ƒáÞ{RIýµÎʵ4¨N>šš¨Ù‚¬"IåIÛcÅB-Z߇ìKC,≸¨œdÍÛ%›ùë§Ú9x.ç_ÌI{¯:¶<Ì¿uelG“ÿœÕæ¡Bb†GÇ“ÌUS+Bºlܘ>ýª;jm¾¯‚Åûyô'—(ÞßÓ×5cžáë7óò·è[Ý!…sÅe;÷“Ûä¤83'¾/JiO±dô%b”ÇÒöÎ0'c|ÈV¥Ga$ –[k§&éq3ñ%ÐñÓP!ÎÍêÎHÇ´†$™?ñý=qªØbÎ3Ê^”ºIñB¦“D¶'°Î—f¬ÒÛywKa2û^‡n­zrÜñxp¤ýô_ ŠÄ¡FZ%¼C5>蜛®.ïXÂB[ ‡QJôõXþ/Äÿoðÿ„©-ÐØ logìdƒˆøa¸� endstream endobj 12 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-301 -250 1164 946] /FontName/AWUTTI+CMBX10 /ItalicAngle 0 /StemV 114 /FontFile 11 0 R /Flags 4 >> endobj 11 0 obj << /Filter[/FlateDecode] /Length1 721 /Length2 2664 /Length3 533 /Length 3205 >> stream xÚí’y<”íÇ%…Ù#á±ÕH˜[cßÂØ÷eÞȘy0™Ecˆ“ì4Q‰™ÞB”¡,‰ìÉ–,eÉžl‰²õ¾ï9Ÿó¾çŸó9ÿÏyžçûº®ßó»¾÷uß2Övòz8²hD&Qåá puÀÀBßà 0˜>DFÆ€b¨x2ÉCÕ8‰�Œ@½ÅÞ§®¢¬S…@d�²oïåM ²?Tj€¤à±`¡zƒÄ=,†�Ø‘±x¤��z`ûã?Àô) NÃK<@/< ¢ø Eò$j¿¥qþ¾”@Šß�ýI* ìqâÈ$B€=!Š–ä½~àÍ öo¸þlnäO Xbˆ?ìë/u Oú]A&úúSA `AÆÒŸ¥NàopúdÂ_Ú ¨«Gò"€�ì·ÞÏâ¬ñT¬7à‰!ø?ó ÷g„½ÁýPÔsr°·GÉý~¬¿U­1xÕ>È÷¾?ä?cø?ã½ñPðÀ/°½ùÂ÷„{ï+×?u;CÂ’qx’`GÅp Réë“/É+íÉ#Töî\U@*«^þW¥ ÁD*0LMõôÏ,ÖŸBIÔŸ7aoËÄžø½` ˆ…„ÙÙX@ç¡‚0ÁsyÇ¡Ý[iášj;­ŸÊSÆ‚‹N¬4ë >óËl©ð>;7½œ¿¹ÛjzZ>"­-¾û²æ,jàå›Ä¨¿-:rèZ®ñ(-÷§)oÝå°tx*:Ëët’ã5ÑŠÕ\ß/‹;Q¯Ð–6[ÅPZ™•´€õ{]±Š›=Ë ±6©ú’‘ojŸ·[ûÓwiQ–æ>k§S÷÷Ÿá8$á~ŸßA£SŽZ6óSä6z¤Á|ø×ÚLÄ8ÅêRÁ$´`ÿãÁäúývgjÝÒ$wPcŒÎ–0)?A'ù*§ƒ–-EƒWù²Ç{ÜRÆî$œíŒy­ò,Úä³™,¿QßÕfÆ÷„[¤ã µ�V?žB½X9›¥Å/^¶rËfÚl‹öú’º©¨Ì˜wE—²ƒÕyg¾Àæw}óòÙYÎÖg~‰Y2æÓaו0ј{}l{*M¿ç–É ‘ÃÙè¶Õ­·šjݾg jW’-Õé\Ú'é’µÞ^3s’R$‹GŽà` þQl=91¾šî'ñq-Yá.Â9z…—"sâ ’Y›ZfÃF®á‰›õ²O$óû«áÖÇO@yÂóc¤W™>W¢x€Ðü1¸ÊÏ3÷È‘gWO*õ1ºÐ”¦•õèèVúÚá娓™t.ÔÀ±Ö¬Ë}À æAŽ8öüou!Ó}/_ æ]]6MÇØ)”]<Ú1ê(tz6O‰ldWß,¨lPêJ¸æ—îáˆ?øBâʲZ´Ä¦íçCB4ÒÑŒsvß3ð¶×{ÍU¾]Ú”0ƒ@·®«//íý(vãéPåóóåõÄ E]“%¬w[HX¶•lx(®¬†\bž3àGOnÔ¿ô$™ó˜Þt±ÆÜh’]?Lªîú€87õLÿÑ®t³"Ú§èf‘”&oš[XmÂX½q¦@z­Þy‘è 4–ÑiqÅC|bÅ@t›ëyƒyXÄ9 y¨D˜Ž5èjJV¼~*G ö|¨r°h`„O�bx‚ß˵Úf72^ÁxnºÝpi¶©àÂkáþ•î«äu•ŒÔÇX7¥Õ1ÞëGwt¶I»éeùò(s¡z3&$KUJ×ßŸ‡ßóî~Sg6Í-v,?çú~2Qiâþµüt’›X|,°´“¬, ÄúݬoìBÕf+¼YQõ†j¬f+™CRø(²­¯!ÒÈqÿ“¡÷×3¯oªfÚ7™Í½71z*¦ÔôÁŸZY 6Ý=P(jòüIF;‹‡œG¹<ް³Í½»cT’&åXñ0BpèK–¿˜Ž§oÁ•#p*Ï–;ûKa_™FK¬¬† ¬ß7‘U"¾€]cÃn‰Ñ l+®Ã!‹o¾š‡¸x|µè©JÝæ«[+ߪ‡ŽîÈbø¹~Ñ>ÂVÂÍ›§»Í¯:¾ÿ6Y&Dó½1°òbß+gŒèf5ÿŠ¿]¢²8UÐ „ÔwHž=<@ýüÜ%V=x]¾»²Í¹\Óɪ×8|Ö%sõÍÀF›cØK쌡›Ù°úØßJ^ßZ«ñÊ:Ža¦ßkn9å]7É_¦týoïiÏ>¶s¯$³© Ž: ye?¹Äô~÷Eˆ¹ÝµÒéβáS§‘|jzk™_—|˜ ߈l‹°'É&)ÖBÎ1AëZ”è¡òh¥:6(™lÊàæïÍ>äm1›V¿Æ(+²YxþA£-r`w[*xÀ†6»ãd™ê›òMi÷zXøI®˜šN™<Í|§#—ê“»Òñ¹¶1Â.“9ãÙÑÈœKu¨òîRÑ4؉/†œÉ"w6`÷ÉLvTÓ;ºØ‹%éÊ·&"KnÖUGl;ÌО)ýR-Ä£*» —´¤òž‹©#Œ“\‚ãî3-¼Á•år4l/£Ê£4_4pôçÊì±mêŸî¥#ŒYX¢µ#µ$V'ÙLìØ? ¸JgÙ®hêÒ=ˆîúòüŽ }w—?û†fYyÆ®ÙÌîVÈõÙ0­_ˆn˜ñIš£]«¾¢�ËyS|žß%ž‘dÚ¢G¡¹gÇðèŽsK,qäó¯íEÙ÷ñ$<~PÜ.²†gÆ^EgE#˜Š¼™>¼È¯…‰~2ýò]‘O±q¡ᄩá[ZëÞƒ}Ë&‘cP /t‚ìT( ®{ó×h^ا¬.8b+@AO§5sùÀé¬åÄÈo¹X{VAÈe³Q¥-ä±ox¯ÖŸv\1OA·sûÞ—îKɬWþ²ÿp¤ãB½÷ç‡Æè+’Û2ãW¦pÎ8Õ«š2eö鸚›¦3%¼C¸²h«s_ÜM¸‘•n(ˆV h&‰¥ÍíKÙ,F˜EhØíT¨3.È› ”/n”j„·Zš©;*p$Ó$Ýê¼×Ay…1—áýØsÓ ¼M®žNK–RãÑΨÿÎ2«rN}g1Tɼ¦Ñ b¤æ¾à4~GЧtVou.6²7…ü áf’ó4‡=€o†Å¥&¾x´J{p.ïW3¼›·˜½ÌdIiãh†¬’J]Žү^ÝYO\ˆ,ÆHÖƒFŽj*ÑN ¶SWWÁàïß±>lüÒ«mÒ£ºº3М·@éÞÔVÍáôuÎ] Eô·?T)ÛggJ¨©9�{ý©;øK;ò©s&¹Òás¯S’´ÇI6Þ>´ñ¨2Rd7,`ƒ¦!n[ü¥Š³;<³wˆN“:Ã]«(—cÛ£3ã¯;’ªÏ;(ä3]¥énøM b¤#總*#öüm±)s\LQ@)ƒ±vS‘¡þñxžƒ.üË5‰kÎgL®sèØh€«¼½‰oYX6ô¡“•8 ÿ;î0‘Õðï óÂL@å’WgÈ©»ª¯£WXà~í¶E›‹¨“cµt9Ok§(¦}ög­tŽó>ÍçêT­?¯îjÖì;¯Ëe.PC7UúìÝíÇ)QÀLaQ¹pøžÙÜþH$÷þ·¶„Žr,ÃuáÃÔ»ÊÓ±›ÝBÓ-Ô;1Î`žm‘wϼ£ö½˜Ÿ}Q¤ªÕŽ©O*)¬( ‘$£“_**j ¹\Z¬%W?_P°5ªqŽEPº€4Þ,÷ˆ¶Ôî Ž¿éžH\©¾A^ðL�úüÑ;=G¿ÊL§†Öõ=–4*¤i²N¢¥2Pòtˆ}Àp<÷¦u_C\çéƒTä‹g³ËmÆ¿^XüuÆ!2’:ѹÊJ3É›?Qº¥CV5KjKy¹™ J04éͳ.üäãKÓidvâôÅùœ†»/è­ ¹[»ÚòBuxS’ÜÔL.Ïm•C>3åu÷j’Ї)3SvoKûßÄØ”ðoˆŽcCÄ­bï –tóD» Â2ÒßÝÖ)ŒÌì®Èh|¯ý¶BäAÏJf¾NªHñð's“Þ\>ΉÂLèDn†0Î]®Ð-¶p îUÔÒ’p½e6‹½eЇ¬ ã¾+‹zWtÈ‹i¬‡ƒ•™R¼Z°ÜÀjÞÔÜ ´¢Ë6‡›2¶ú;ºÀþËòƒÿ ,ÄP¨d"†âüCøÈ endstream endobj 15 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-53 -251 1139 750] /FontName/QADBYN+CMBX12 /ItalicAngle 0 /StemV 109 /FontFile 14 0 R /Flags 4 >> endobj 14 0 obj << /Filter[/FlateDecode] /Length1 716 /Length2 2094 /Length3 533 /Length 2627 >> stream xÚí’{8TûÇ]"F”[î¬Ü¶Á0CƒQÃ&¹ßŠÐ˜YÃìÆÌ˜—É.¥äƶ„PD"”Ü˶±crOîÉ%亱…rT»}žÓ>ÿœçüwž³Ö?ëý¾ßß÷ý¬w-•CÎ0SÙ´$“è0„Â0·5;‰ÐZpˆŠŠ9ÄÐ dC  …�Lƒü�8€Ð3Ô=lˆ< ¨�æd ƒJðó§jæÐO.}À4�¤°`‹¡ûƒ»!X p&c ¡�¦D"àôé pi 5ÄiA €#`é€/èG A´?AY“ðd@ÿ‹Œ ¢|mƒTÚ. ¶Ë v)qd‘à@<DÛŽ¼; Üeù±þ Õ·á–AD¢&àSüçEý­ :È” :HlÉ8JúÖê~3#ÿ6ÆšŽ!°¦$?"À¿Hš%!Ä9èX�!ÒÀÏ:HÂ}‹°»¶Ï�ÚŽ¦h³Sv~Ò/] DwaPþÊýdÿ\#þYﮇJ<áZp8b׸{}òúfš KÆH~€3CÂa¨¸¿„¿S™™‘CÃ`H]�¦ƒD�„. ÐGÂÏÿ«Ñ•D ­Ñ�‡ëë¡>«Ø *$Ñ?ÿ»oüµÆv÷‚¡ ’‘)NàôÑ”ÓX;³ÚЫè^ÕÞç�©ÍŸOC®ç|Ѳ$@äÑzùCTäY‡Õ~ÁÍ9‡¸Ô 5“èÒ ¶GÖ½ éûCÕñÏk<Ç× ‹â§a¢\Úõ `ÜÏ2d˜7Ïþá\R·ÜtHêÑVoó…ºW¸ûu­ýe±“Õ†Ø^‹›$,Ÿõ^Ûç!*É(Ñ=¡ùÑõ÷c0×ðîr«³Ó‰Âkõŧ¾'M-y—vý6§š~²4ÙI8µLd›Ýs5ü(³–[à¥xÿ΀\»…„Ý9éÔŠìiÊT—cVV†RŸtÃå^Weõ¸œ8ëâß9’½ÒŸ¤dN[í)>ûaJiÕR7­ *寳¥ZP| *¢ZŠ¿²ZÚŠ&Ü.NJÆt¼OôIñF¢(eI/œ!þmn%Ü^£õ�N¯›Û‹ª¹I½=Ý:7«éYP5¹/ìD~Êh(° M}g<‰UÌ®v¡­½m+mãtž)O/œ½™Aè|¤Xºôbû$TÄ*ˆµ÷•°Ãs^G~ÊP6ýÈÜ"z½8i“Ý|2=óÚ’ÂŒø™=(ß‚·Låy~¡ý÷À,ЈŠÌ/ÆNúVÖ£lP¿ ™~®#¤ð8£ô¨ÞÉÎõÕ:‘žÉ8Z¹•nmh”ÑÆDó”ÿÎŽÊÝêø<1&Ý&‹G¹ïyÄ%å0¸S›þ÷åšüLÊ-gO†õ×ÁU‚ØcHߨùÑ~µ#]2×Ä.)÷§¥BZrß»xó óÆÔ¡&¶qì |#‘Sˇo>sÆÿÕŒknM¦l°àÙ6âï¡H7sçÚ&Uü®–.\†-LÐ-œ)äòhT84mÔ¤¡{ä§xJ“-/Q¶G?&¥*R ˤ<åN#MòË-÷Rý¼œŠ¤y/½g‡ê˜�Žn†¶]Òñ‰É`æz‹‰ gX¼þ0j´&Œ £%s%å2Öùjøæ,}zrÝN¸ ÚT¸&o[c‹ÊØ„lfŒk=”KGíÆ¸Í/imeGqZ¨=ÎɘXRP¸2’#â_®ï°ò’t¢2¥*=Eµ×ÀÃî\¹Áè ¶ܻ^yO“¢òÆ?Y¡F&{»™\~[b »8n­GØëŒ×^bª×–\ظºŒâY`Cß䨆çóP[’=7faiM¤½‚€yü€ªÊ먉UQYÙµŠ½ð"Ùñ 3ÝäA.¨ÉM‰õTñM|ìÂý÷þ%¶…Góna’•n±nŠùüô­Á•¦„V®û·x²¼6‡Ïð˜ÊKÏ'ŠÀfu6TK/]WýéeßB+„‡d‰%´…ðÒP#2½’a,w½¶ ³®þ;ÙÛsb`NÃxÚ³ÀVÞî¬-ï_¤%s³Ü¾Ûß*séù©‰.y¾fvO¢3©iÄßÞüI<#]~í=¥dß+QQ;Ãw|‹)É¡Çñ|Ùu«½™¦zña«8.ç}Ÿ bE`²ÜCú~^<÷ã1MŽù‘‹¬Ð£¼Í±Z]ýÊ ¼ï­¤ö“µ¤ö4U<£V´—²<›r;|™OÃÅZäg*J$â•`Ã$§õƒ¢lWM±rû…ž +¯cŽB;®;Û;4Eoº©›ðh=Ejµ³ <Øóƒu⎳f¯Þ%_ü•& êe\u›®2j÷Î¼àž²²Îà4]¿}<=NkàÁxº¿,½Ç@ÐŽ9?yo º¼~zþ»4¦H§x‡À²rË6|òhüÖ½• ¢ .fÓ‚ïË”£Ëþ˜Ùž—–8þ¸°þ7¬jo®xõ…áxd}ç±j2SÓvõ.È[of,pêšv+z “P¸wóí}åY]ÁÈÁ‘C} W2ƒ]Š%u nìJ¡Óœ‘B¥ÍÃ&Ñt5kÞ¹:[òGW.ŠÎ¢ôÔ!'þ´§¾ˆ¾#‰ÁÇé±n¹ ³ûü3nE¶ƒ å¶75z>>úäã¹Cå 2¨iY†eÆêRÖóŒ÷רirF«¼‚ò~’v²#Yýâ6¸¬e•S#”¦É:\ëÓADõ¡à¢èΟ/Ï~ج?°SwCÝ(ÿ¬P!!ÌQN“.¬Ð§¹Ò Üòñ%"Cci9i>1 õwÙÙö\qg¯åÁTöí’ï#Ôï,«oN\…Íó …­u•º�* ²´§B?~?%¼kh4N¹â.69Òntêk·ZŠt‡]WϪÚî~|µêÊ;‹|â{Ù¥²ãÒÆ,~ãý›f]٣٬”ä´¶&´ºDBt쀭<²µ@óc_œùÁ¶bÀí¾:]\ÁžRi q˜z2ó¢ü2×ÝÈQL$Ôz™þëÍ*gþ7Z…·2…ÊÃÊ}dÓ†œ¶nhôÅÞЈ^éxPÖ.‹HyxÕ´1¥igÞé}§( ‹i½;½’¯ ®O«m’}[ŽQìñN³PNê5©ó÷àØ—yÞÓ°ô†—d÷Î J²¯LÄbúPÁé`¨£HQÚüqú ¬lN¤X™çd Rå'o_|ýE‡ùi·Úàî¾ t¼¡ÛÃNwß_èCwËäîm/Úˆ¿£ð ÞMbA¸ÕªØ¶Ýz^Û+1¶ÜÎ;ßé•Ô,TR[ý°þCYöpêÈD͈ “;övsX–¹†I–䚌ãë H„t‘;î¼ ÷ÜdÑL—ª°Üî[!‹—}Ü·äŸu׆™Tˈ¹Ðÿ//Èÿþ'°DC¥“0Ô³È?�ˆ…M endstream endobj 18 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-58 -250 1195 750] /FontName/SBJCEJ+CMBX9 /ItalicAngle 0 /StemV 117 /FontFile 17 0 R /Flags 4 >> endobj 17 0 obj << /Filter[/FlateDecode] /Length1 713 /Length2 3449 /Length3 533 /Length 3993 >> stream xÚí’y<”ý»Ç­•Av…ÔH–샱Ë2ÈØf²gŸfÓŒÆX&I4ÈVö!ɨd ‘%ûš%»„J(&d)KYâ§žóüÎë<Ïùç¼ÎçuîûŸûú\Ÿûs½ïëþJˆÁmä P„+hž$R�i!–†Žš@‚@BBD#HÞABkAšš  A€PY RÓRQÓR�@Á—LÄxy“€Òó¿\ê@4ƒDà–’7Úç0‰ÀmH šDV� p8 õ¯WüÖh41R��@ ƒ$¯ ½0x€â/&(Þ“�TÿSFøþÕ Dý¹€Ò‡œç‡”(G¢Ðž�E+Âá4ô!Ëÿë¿¡ú{¸I�g…ðùÿkOÿh#|08ò>¾$4hI@¡‰ø¿[вpÿ˜%!p¤Þ ‡*ý)aüM0ÁhCBz=8ôoGýápk¿m Í Æf²þÐ?›pO²%ûþ;ö—ûw úÏúp9DL0ÐYIAI th<¼ÿzrýÛ0c<’€Âཀ6$… ¢þ-üÊÐ"Ö�Ê+ƒH T+…þW£ã€†ÁJJJêjê¿Ud�‘ˆÆ“~‚Ãþ«öÄ®F#Y÷0Œîr¢²›ͯÏ:¼èƒò–3À[4Á®5v«Â›«Ñ‘XøÆ8çÎ<žúCúŒÞíò–Ú‰Í[nmd²pñ;AÏÞzçÙM­’ºüßs'&Ŧt|­»s…, âÆÊõþŠFòmüÚ!&TµûúåÆ T±“lc÷xŧع:-äkã ódÙl÷­²#ø~ʉï$¹L™/Ô'B%rßn]_Þ.l¤ÒKOäÚl*u9s?¿æV>ܳ$™éXžjÍC­àÝë Ó¹ÛÀÌþF`ü`R´ÏØü„Õ5aêóºï|Ó¥ìì,ñ1áfʹ×î£ïBÖžcs´§Ä\˜òd°/ýì°ñ/\ÆPØG ³ŽØ~4 =T[JTâ³æãT;Îõta»¿˜›/ qΔÿ}NkÚ²áÐó>žÖOOAqÀÍS[SŽ8Ì©jUׯ}ŽpòNÁvzq?&MO)öRôtî)e—ÙêK9ñHËð±†C ÅFƒËj*ã×Ö#óIð7üÎäm—û;ߟÍCœ*H[èwxÍZ>!ìx¾CJÐo‚õµ(ÌÜÅP¦ wî°è• P܈Íp©Œ) ÇUC€Æ—¹×ÏÀ£h¡ÒVnë´¶ˆœw§Úª!Xí$ çmš)duc¢@Â;Ÿ¯*¢ƒô‘‹¬Ç¦µà‚>~Ü/ õ#_Tš˜|ÎbÈèó›.…l‘åªõ¹÷v¦›*Ž ‘=$¼[‹/?ÉiS\2ÒFœÓ6>VmmI5Q‹t¹ÕÅŸmšå½²ê'Xhá½ô¡mGTa YK}ªˆ½î“͆«Ô©çl+Ò8ÜuްHº Ɯكy~¢)¡G(m2ZV°˜bòêÀ•A ü£ áÅ&,R€±40¼j•WþÄ'g3dÁ¢}‘Ù^lFÑýjœ8'~*Ë3Jcài›_¿!©¼Ü„;ÐdƒžoªÙ9¦uVoUÏ_C³»leQÔIL—úUOOÚf¸ŠöUJÝöƒ>\ÑhW—; ƒ}²j¤²èSpÚ–û$ä³?‡«âÖ;\@oúê%F®kÅÐTz¤Ï*²�ÞéaŸ†¸ ¯tò´òÒG&ñœ>>;íJƇ-…÷?g{¸¾“ʆ+û"¹[Ççr+φq®ÔºðꘀL,%¸h­:ðêzç '+-àG“Ï/X¸9­žH@nwP_Þè°CÎMÈG•'“÷_·)™yØJ j_ràžŒ×nn飲ÕW¿ý.¯°YÓÒ<~3eó¬=[Ôò Ép¸ 3üЏwóÝû‚pÓÝ;±þö.K‚µF)»´Ìȇ?ÉSÖ‰0n#²i8¤™¡ÅÕÍ~þJûVö�'Å1þø‹é§c2…ö0s°ÙëM¡¾ °9†*4û‡Bk-:Ý´OX Y3L”h=y/ßuzóšXœi,¡]œ£ÅøûDåÑøç¦o‡î gZÉwγ³ÎÇ—\Jõr½C&ÖCÏËù<éÁ¬»·D±ä2º²F†”?±gHMÕHÕ›—܈ú,ˇ’ Ž*|R³[ØÝ‰Ýåe÷BÍ”CÜ´,ï!ɬbM;@,7Þš†,ù6.–&Øp‘…+Nùð FìíDß ]  †k–é1}{ÈÓ]þcÍM*öûŽ ì‡¹”yá² Ä`œ~îÓ ^竉IEWKÍ;™ ¼§2¸{<4åZ4Ãí"‡døi1Wõç¥ô9ÄByk›Hñ°GzWv¢žÃ—º¸é©‚í½JL$ä[9¥‚B§ìÎÉa;kGd¬$G¨ßoËz}÷µØ~ø§0.™I„wf£%¸Í9@¡·k$í®ÃUô¼eápqUV·—ÃÝuãlú“JÒ´´ÏߺˆÛ+ ëUdé³AÍÉ}ÊX$þ³}oﱈm¥Ï?MfïG4óÊå~ƒ|µóKv Úeí1¥_skQÐËtx¬–¬{‹Î³|Õ]»Ù18Ä£n)”kKyý*PÂL˜œjú8ÇÉSN2ê³±|¨'ÏçTÏÔq»wú}Tö³†!çp“¼ï_4Ó„ØÚûGB⯵è8¡INäÕÄ®Çá#³Nw°ÂHL„T ¶¬åÌ/æüuëTKs´»Ž:¢qúζËΙ†ÉB0Z©èîmFñ­¸^èB`²2ØÝåqÊ­–PàôÂÔý«ì ÙõK_EåÓÆÕußÌjvïòœ‹è<W@Š=Á ㈔HᆲóRŸ°¢œ;É#¹ÉÔ›ŸÏ>ÑV98L£;%ù vDwoœí2N–àѳqë׌­ ½å¸8­c·Ë]I‡æ‚dLèy7<OD8­ÌIlK¬YJ3¨)‘¨‘ö'FlÒÙ!jëná@xÉ“c±ï[FúF6;a¤1â\šëÒæ–ýúXì´côôOç·Âª*yñOðã ¸@ã×sIµâ6•ðäëIl_ó̳Â-ËP¸{]îR&:bZEÈ›ö|¢£-ŽÔFô”'­V(âvVñÉö½ õ`;½£|§ßF•C –ìiM”#ä‚õ PÝœàiS}®„9ìðhÕÌ†ì› Î M)Vß® êº.})y<ç-qZcÎ3›‰ù}™M5+ªFî.Wtƒ*Ù›üe+ãTyë G†ü«»ÙŽkö:÷uŠ®~eá råvWáSv»;>FcX>þ!¾[A÷¬”%?ŸüŒK¿Ð9€½2Ôvf0Úγ:×ÓyÐÔ>!Åû¸yù­f½«³GÚ•núÌžù<Q!ž(¶yfwŠÔ8p& /ðRA8%áÇÔCK¢Ãlœƒ ì ú0cÜ%vdfÅùþK`tU~Ðä¢ð´ÿ½µiE ÉÛ§ü=+Ï峂”éáðÅÇÑTéù‰tXZFœ6Ùg¦lŸ&WÞ¬-íÝ º M¹øÁ2t|lÜ™kif$ßt™9‘Íq F¤oÅHMQ\ýXà ‰ï×®y ½/;â´°ò¹ÉT½’§ûeŸ÷”ákmñ Œ¯â;e!³»¼:æ2ß.žmídàßå¼²õ£9Æc¾¨§7å¡ÃⱇçÚMÕØþ²`£2º>ü@roVTŠbÓÀ˜Vð8iÕ“Þo!ï¢Êqï©:’cccuï>™ƒ’W3ÐÄiù†kìæíTäÎݛ쪞LFÉ߆Õhwsü˜ÖÚùœnß>m­¹öóâÁ‰óñ/4üdÚ(AëÌ^#ÚÉ/6lEVaŽ.hV§‰þ*/–Õ_C%Ô™e~)ÌøŽ7Þµ1,U¾(âSΑó´fE–>ÛÀHM:!“›=ïlcì4ñÎñ|ì—Ž¢yÝì·ä8¶µ©|„ì4£ÓQ¯xÿó«d­ñÔ @õ¢Å*E/’Ãri;j‚¯£ËK®ø³HþAfð"#¸ÒÓI}žªÕQme´È’(’kr)¢Õ‡ž~ˆžúqÓÍâ…7Âöã o¢ØÄL NÙ€ØSž¼8ã5úž{’šwI¥hóMÍç$7&Ã"9ÑZ¶î0±+ &Ú×Û3eÎÃÌÉ«,'Ÿº`\ª4‘[ŸDûàϬ«D$¥ˆ|­[<ÎJù ÞÝÕü·µgëÏnÜâÖ…80CÖ$†Ù¨·ú Lx RÆ–X¿h£Z!«BŸ ®½/ðg×úI›Ñ`¦K9ÊîÔ­â$«#Î^ï)]ùè­6¬£^{y€aVx%%ÑOf¯}Ç‘ä«õ¢Ÿ¹â¶…Y!¾ÇÁcÆ› b½Z/$kÃU¹ ¬g…X|‹þ>»SrýrhmVL#na(óÃ1:<ÓS‰…XÄÙ~w¤ÚJ¥¡Â-Ü.<ã3ÿ6Ú0ïGžÌã@*°[Å-s´ö¡$JÞÄ> ¹ä¼Â¢ùf8~¯’LuzïxrzáÁ%ûZ5)?é p;»¹�Ê»§ ‹5lîM:È/¨døô>fúgÄÀŽÃ‰8¹c ýaàµw·Çß %+ç½=`ÈÅç³x,ÿXCOæ^í,\t`~뇯=xÔ,˜ܼ·/ bgÐö¯*Ýè‹™=8¡³_·BŸ6ˆ ·}Á$d=¾› )ZsQûHò%ÆÅãaØ ƒ ×ey‚éѶn•Íîàwò¹ çÔçC=ºñÕª·}êæDÇ 9°^ÉÞŽcøŸâ›,“IÍBÒiÖSceX<²ô'2è|0ÇÛȘ»^É?/¿à¬÷6È3¶îHÐØ¬‰WÂ}¯Ê%Ñ3Ñ»uÁŸ”›>F<"RwŽ¿OÍÏx¶1º£ïr³õv ¡n|ÐWÄTµB.¤»J&aËr#Å^‰âòþšŠ;ëîûé7UJÿè vçIp€ ª>ûÚþíFÛâ¦ûÍ—O)¿*þblFŸ¯±½£çÚ%”®;m’˜WjWYiÏÖŽò�—¯³Øg$YƯœNpiìZìšñ™Rs»ójþiÁÚ¨XT Rû‰µÛÄTô¬J2ËfHh#Ò—kŠuII‡CuvdF¦#â(‘§8'¼-ASó3Uüšìd-ýlj{Ç]°ã‚‘sËâ¢ÒÿòüÀÿ‰�$ ’>"�øÿö endstream endobj 1 0 obj << /Creator( TeX output 2004.10.19:1439) /Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks) /CreationDate(D:20041019143940+01'00') >> endobj 5 0 obj << /Type/Page /Resources 6 0 R /Contents[20 0 R 4 0 R 21 0 R 22 0 R] /Parent 3 0 R >> endobj 3 0 obj << /Type/Pages /Count 1 /Kids[5 0 R] /MediaBox[0 0 595 842] >> endobj 20 0 obj << /Length 1 >> stream endstream endobj 22 0 obj << /Length 1 >> stream endstream endobj 4 0 obj << /Length 33 >> stream 1.00028 0 0 1.00028 72 769.82 cm endstream endobj 24 0 obj << >> endobj 25 0 obj null endobj 26 0 obj << >> endobj 2 0 obj << /Type/Catalog /Pages 3 0 R /Outlines 24 0 R /Threads 25 0 R /Names 26 0 R >> endobj xref 0 27 0000000000 65535 f 0000029587 00000 n 0000030177 00000 n 0000029852 00000 n 0000030030 00000 n 0000029751 00000 n 0000006431 00000 n 0000000009 00000 n 0000006678 00000 n 0000006492 00000 n 0000000913 00000 n 0000019043 00000 n 0000018853 00000 n 0000001829 00000 n 0000022551 00000 n 0000022362 00000 n 0000002765 00000 n 0000025480 00000 n 0000025292 00000 n 0000003711 00000 n 0000029930 00000 n 0000004710 00000 n 0000029980 00000 n 0000006365 00000 n 0000030112 00000 n 0000030134 00000 n 0000030155 00000 n trailer << /Size 27 /Root 2 0 R /Info 1 0 R >> startxref 30272 %%EOF �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/testPDFImport/PaxHeaders.3194/metadata_bibtex.pdf��������������������������������������0000644�0000000�0000000�00000000073�13124510115�020641� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 29 ctime=1498583182.67525783 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/testPDFImport/metadata_bibtex.pdf������������������������������������������������������0000644�0001750�0000144�00000106520�13124510115�022233� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.2 7 0 obj << /Type/Encoding /Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis] >> endobj 10 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F1 /FontDescriptor 9 0 R /BaseFont/SRPUXN+CMR10 /FirstChar 33 /LastChar 196 /Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3 777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 500] >> endobj 13 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F2 /FontDescriptor 12 0 R /BaseFont/XHPQKW+CMBX10 /FirstChar 33 /LastChar 196 /Widths[350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1 575 1150 575 575 575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 691.7 958.3 894.4 805.6 766.7 900 830.6 894.4 830.6 894.4 0 0 830.6 670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 575] >> endobj 16 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F3 /FontDescriptor 15 0 R /BaseFont/CYZVRG+CMBX12 /FirstChar 33 /LastChar 196 /Widths[342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500 562.5 1125 562.5 562.5 562.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 675.9 937.5 875 787 750 879.6 812.5 875 812.5 875 0 0 812.5 656.2 625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 562.5] >> endobj 19 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F4 /FontDescriptor 18 0 R /BaseFont/NWSIIM+CMBX9 /FirstChar 33 /LastChar 196 /Widths[360.2 617.6 986.1 591.7 986.1 920.4 328.7 460.2 460.2 591.7 920.4 328.7 394.4 328.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 328.7 328.7 360.2 920.4 558.8 558.8 920.4 892.9 840.9 854.6 906.6 776.5 743.7 929.9 924.4 446.3 610.8 925.8 710.8 1121.6 924.4 888.9 808 888.9 886.7 657.4 823.1 908.6 892.9 1221.6 892.9 892.9 723.1 328.7 617.6 328.7 591.7 328.7 328.7 575.2 657.4 525.9 657.4 543 361.6 591.7 657.4 328.7 361.6 624.5 328.7 986.1 657.4 591.7 657.4 624.5 488.1 466.8 460.2 657.4 624.5 854.6 624.5 624.5 525.9 591.7 1183.3 591.7 591.7 591.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 710.8 986.1 920.4 827.2 788.9 924.4 854.6 920.4 854.6 920.4 0 0 854.6 690.3 657.4 657.4 986.1 986.1 328.7 361.6 591.7 591.7 591.7 591.7 591.7 892.9 525.9 616.8 854.6 920.4 591.7 1071 1202.5 920.4 328.7 591.7] >> endobj 21 0 obj << /Filter[/FlateDecode] /Length 1647 >> stream xÚ}WYsÛ6~ï¯à[È™& ðê›Ý&n:qqœv:m ’‘€¤ ’nÒ_ß=@Q‡§/¸XìñíU&iìZnƒ›Ç«·YÐ$M<nƒ¸NRé¿~ü#¼vC !Â;µëÔëè¯ÇŸ¯ÞæîB&" Rb­$Ÿ.²²,‘¥?}Íb²\Š~šÃw]ñ5ìMA÷Ò&‘2ˆ³*ijºýÞš•Óp¥’á†Ö"´zàM«ŠD>G" µEú™!2M„â\$MFòTÛwQ\Ô)ˆž¬å 2¨g2¼R±¬A7Þ%Qœeu~ütwwý5Uøû¹š¸*’ .åERò­Ç'FÊ¢ y-CÅŸëU~cVLÚGq^‡›­glñ» {72AUíÞjÐ_gò€žl4 ð1#ì©'d@Ös ™XÔExÍËðDJh;µ­rß𣠟´Cueš.ÀÏÆ¯^L¹ˆI=äSv¬ý °b…õ¢°>VX- ›#…•WXÏ ëcªSñäþb�'¯W'K±¨“e>««E¾À <'“X$¼Ÿ,3ô†d’ø—<_œ³¶³«*LE8O2Ÿ_È<g™oÞÝß>\øé2ÇÊŠ‚Œ9–ÓÍ_Ô°žÀÍÂ¥pÉ X­íÝZ1‘ó«§ß5“6zØ;tíϼ,#Yå!ùÖ4аþòºïþžô0BíÇ…ÌáBQq½§ãMñ*›p«Ú(ËR.ê7Â…§UØõ+Êæ¢ÈÂgº?š:ÅžÍÆïÖpªÅ5©ï>»°‹Tu¨ìðbF§;ŒÝ¨â©ãTQªüæG­T·éI8æ™_ýE¨˜ç¼SÃW<ƃY† ì¹J¼Qö<MÙJ¾«, ô½1kåâAó·Â¥Á¤§aš_¬?Û;ºs¬ð•{×̸Wn4³üWŠzG°í[![…¶_ zN*«C¨¹{Òvи âòñ´‡ vKÙ:/ ³ë Íú˜¶È2 “_ƪUÝ�¦ÉLÌ—À¥Ï“žhËá€EYýLê0inÅdë×­æuíÌ0H4lDz ™²z&FÉ)©¬&Š(p‰$I#·‚8ujnÀd_-h9µz}àçÄýQãgå˜H´'/ó¤‘AÖ@;á&`_Ý;ãCÇIH¤‹@ 霜¸»z¨Oêy(°pO¦)³õ+F¶ºãÕZ5^–†%Íõ•=I2†`<ÆX¨g÷˜®`ͯ´>Ljxg*øÖ– {gÚ™¦¦±Ÿ;>^œCª··Ô±úá`R à±Mœ]€™Q£îú!f:AedR£Â < ÝnòÏ“Ý)‡2OÉl$žáïN#Â7 ´/™ý;*…$_P*$½O- M²i< !ʬJaÛ£ÃÌA>zÖ@̶w­âí‰w뙨.ƒÄv8Ìm,º’…ÁŠÕ#³¥jÌÐb3–‚JO€Š©Ú¹Þ ³¬™Ê%_",€Xcß5º-%t€Q›¯¼u»§vPeáfÚM§p ON±ºVóÖ¿é8ŒÞJDH\÷h‹„WÝì:sañ4Ôijé‹ìéíèÇ*5ø*]0ì6ë¾e>Hs?>)&@ø–08Ý(ýy†w§ðÑ…ä¡~‘ºAóÓ†!S-ŒØÌ Pïf#.‡EñÐoý[8?a€”¡!7÷/ÿv:½š›À…-;‡œy!( e ñ(g„w�Žy„ÇÕúozp©OâeÈwÄ"¯ÒÐ{AU]`+ÀŒÉ¡£Ý‚‰Õõ|ÿÆM°½¶@˜çnûqÜBwÜà§3öIÛ–?Þk³êÌ¿8Ž@‡¾¶»©£nçÇA\íL ²¬¸S‚Xn1 ¨M¿)9DíÑÌŇ´N9y´¼ 8!Ró˜ ­5;m­Pbœ¢ñ mYÞÛS”-ÒûKÛn¬ÂiÎu$,Åã³úê€ÔÎ�ÀÍ<û3 ¿…áÃÇÏΤó§å"4ŠŸ*³£ÖН#ØÅ›™�C¼Ïèî.èºJòè"‘Ùa€ÎOÇh~¼ÿôù‡7—ÿÕ*þOX&)›ôˆþ:òÔ>ª/ìŽÙ:†]„O׸ÿþêj­’Ìã‹~cTһݒ®ÿ*ƒ7ßýeZ endstream endobj 23 0 obj << /F1 10 0 R /F2 13 0 R /F3 16 0 R /F4 19 0 R >> endobj 6 0 obj << /ProcSet[/PDF/Text/ImageC] /Font 23 0 R >> endobj 9 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-251 -250 1009 969] /FontName/SRPUXN+CMR10 /ItalicAngle 0 /StemV 69 /FontFile 8 0 R /Flags 4 >> endobj 8 0 obj << /Filter[/FlateDecode] /Length1 720 /Length2 11638 /Length3 533 /Length 12196 >> stream xÚí—ct&á¶çcÛ¶ùƶmolulÛ¶t:¶Ý±t’îØÖísÎÜ;kÎ/³æÛ¬©ªUëÙ{ÿëÿüj×ó¡JRe5FsGS ¤£ƒ#  /‰˜‚* €„… �…£¤sš¸Y;:ˆ›¸yIXxxXI$¦/^v^V88J1G'/kK+71Ú¨¸HDì.Öf&$ &nV@û¿&f&v$jŽfÖ@7/&;;Õ<âJ¢ tºx�Í™ààXXHÌ­ÍÜHL–ÖpÌÿ ’q°p$áúWÚÜÝé?K@׿\$4ÿ$¥%ùËiîè`çEb´€cVtü;ð/Íÿ1Øÿ†ëßÍ%ÝíìMìÿaÿ^ý·²‰½µ×ÿ8Ú;¹»]HÍ.ÿ.Õþ‹MhnínÿïU7;k3K; à_)kWIkO ¹²µ›™‰…‰+ðŸy ƒù¿CüíÜ?˜ÕT•5´éÿõYÿUT6±vpS÷rú/Û¨ÿ³üÏøo{\¬=Iô�ûËòWø÷üÏ‘Á¿M&á`æhní`I¢æfâ`nâbþ_‰ÿ%*êèéÃÈÊÁBò÷öw�<$<œ<~ÿ«RÃÁÚÙ(#NÂ��¸xØþ™5swq:¸ýs%ü}ãÿŒ-¬ÿöôšÁª©(МÓl`°Œj¨h‚ß+"ƒ‚ù5¸>í6âÚ3ö}©Æ„6[lá|)ß9ÐZŒþÜÕ¾}MÈr3gM',úñŸÊlôL&‡z_k +>¡²7Þ­g±¿çÁ+“ v̶k ¥%ðë2÷"=kûk¹Eä²*ª¼7ÑD¶)Q`*¯ u$.ÝU4˜©dŠ’…L´þ·ßœZÇÜÌùŠ Uô”·}âÎ_—€G u·u…’ðõ7X°¾ƒêa;°Øyç3ô‹ŽcÖ»þ´ßžsMÚUª“5ÆÙ:ȦO°¦§½ãõE²Ø‰_ÓǸy–!µäP©ø#?²Î„|©4ÐwÄÈäÓâ, ΓòÒË¢Û¹×-ëʺ/ºØ{„©•„„ö3ºÄW"ÛÐ6@Õú!ѳ¦¤WR¤o8ÞT?„òG|¼|¾aÀE†¦òz^0ª’xNn‘¼â„–YZIvÊUÊ#NVû)TcòÐÀøñ!ç^Õ+™–] F`|Ù ¸5wûùK¡ö5W½w¹¤Z°ì;ígz¯XGkwR+¦6^¦A‹-è¤ñ¥õdò¬>Lðù1ÓÆâ>Ô{$™02¼E0îÈa.!E $ǵ­rcÒÎùšŸNzäe…Ì¢SÖÌýË1§Vr†ƒÑʲ"-h„ Û¶éÕ•Ó’ˆIÜ,:ËŸ©Ê\‘åk°Ž6ñ”mDtoÓÁþO‚pºO±û]ZÔgñÁf°fÝ�øÊË4x W©Â’õÈK´!?fìŒð¢0h Á—ÑZMc­VKKñ œJšOú°ÚEÛÆQÃGR©}JÂ^›a¨Â…ùÍ¥=�”î·‘¢L•ERM?l‹ªs‘v ˆHë±9|‚">dzÜÇûôTý2e‡rF]%q0?Ï}áÀ&TXn}‡÷I(o$âZ‹>D½lËðÔ?†¾ô[ )ë“q3^"‚uüטS¸ïúô2íë“ú±±=š¨.Ÿ¬@„¯K½¢ì äT1Ÿýí÷ëî2Kxu¾tñ ‚ª¹ÝžG„§Éj–4PßJL\Lxˆg"g_¨¤V^“&5Ú*Ê6Ô)Ÿ—<òsú–óè«ö’f²:Ò¥ô°ñiÒ¢OCL,Þû:’ +üþ™„ß$¥Ä¾Í¤<c@ÜiÁ½-o~~Ó ‡Lòî°6ËôwxgÊzÕ<¯7'ÓÊTÕ HœN<¼²wtž v"Qÿv@ Í¥_ɯE/”Á 4.63‘˜:ëáìö£üܺ¨`·yì"ãÜrÍóTac|²Œìc4…ñ‰´F³EjÉ+Y„Ñ"9)a6Z'ÛsÅ,ºÎ·Y’1ÂíÜu>˜6!/Ìö“ývÙñE)•ðC;ïŠáwâò©N‡[¬kè”Õ�¶œU_1|–@,8z¦‡ S5êì÷qµte¾ýÎÝë~Q£goF˜“†Mú‹nìMä›jJˆ+¨zý(²º¼€Ì·ÉƒœdI8f³C¯Ê0sÍiD[þ ½95´ Nœk¡?·ÅUv}Uúkr8?Ì[t(âU§Õ‰ü ÿÀcz 2¿‚RÿÈäÜS ëï ïYŠ0µ\ ³7íúaý \<ïÅíÒ˜I‡ UAõè‡.øë…”8î–$K¡ÎE7yÙKþ¶ZÕ–Tl ¾,´¸%ã1“|à:e«™SûbP(' ÖC™׳x]õ'‡:ò®Ñ³OÃgLl€Žäãêœ)h‡E´ªÿb¿;OÓ\¸û\Ô˜Vÿôç²ÜÜ‘mÞÚë0±ß´+ö·ýãÚ®Jì8Ô^ü‹+Ì»åË8 xß“ïJ³ ˤŽT[4ÔoÈ&Ú"MJ1«&]Ÿ)žÎ‘Ó*èF ÒùÙ…ÏÂÆÑY%Lu‡”ÄÔ_áç¬ -ì«è†€Ûs|û”Õͤt•=!@eðín©Ö"ôÍ75ºU$3:ˆrþ¢2èw›{hª^Pê5k·fªû¨/Ó2~ÜðˆèUsõ%ú}cc4žïÜ]fÀa‡F¨§çmr®^˜%n4—÷«·¶¦sØ13 ¶M5i!*ýÍšÚk ýe±~Í(læ¬ws¶ÜifQúÄ™ýíÔQ¶NXô8Aöê[ÇП“ã‰­IUbÞ;fÁèñ ³8–ñ]̨ýyCÃ,ì#%»¶Žòîç™êáîD!å}îÒ\`/¬ÎW† bˆÖ9j']÷§rD’»à„R]h† ’y“Ø.'FLh­ò–•JÙ:œ¨8ßÖ| ‚†o=±"B”óŒD5ǼÃô3Jãpvö—|}ÙNêÈüWÁnH�\,½åwÂ’—‹6PcÚU40òZ®XÑa;?=|=á’~ ïEN¥,ñJ'I€ƒ‘î á3ö¦)Þcth&ð¨Ñ>¼÷žPW“²˜P^Øsìê~&Îç¤ ëï´çܘø0Ðz?˜¦j“áǦ=t‹3žýP([€G=±0žÉןÏ­V¿§Gq÷õ…€lœê¦ÈR^¬R[IZõ)d¿ç%CxwËý%O´mê[èæÎc¶p”‘*c¯Q?áø!}úÑTÝ—”¸ÜH <Û�—»âwÁÝ˰„"… 7éz­âÙéËÊ/°:>–ï‚v«* ÿ-ÂnntÕÙ î.1ûÍlÊ<=Óì[KÄÕ¤~þ.Ù9ú|µ£4¿,Üö'Qˆš‚Ï¡ ‰ŸZe•ñEÔIuÃTO1c¦GåÚì4mVâ2éžÇlHÄ2†Œ3—©rNÚ)æô»‹g1ÆNL*NÊ5[hd÷ÅÜíóéµ+U_Æ‹›ÎyÔ3Az©¡À÷Q©88û²‡ãî+‚Rü$dÊJfj·_“'7‰y½¤—ñ ‚Ôíòb? ¤Ú÷Ó¸Í(ìYÕ´Š%9õrèÑ·¬~®*d­Ù™S¿¿sÙ3©H7yûŠ·aãB*ðNäv=XèþvD=ðÄ…@v•Ký.ÆdÇ«ÝÕ>uÅnÀâ9>GhKÕ ­«Ï·h?GÌÓÈ~ÄY³eÁz&Ìý>¹'!ö£wmhÉŽ®x£axÒ~b>œ4T¨§Ã¤øÉ[¦¼–ç^+*3×n†hÒOK%§áE³КªsrDƒËêæv™�®÷–?8+Ü.7db1ŸÂFÚ5xrOù»xNåùÀYÍý~HÝ]Åô÷²ÈìaõÌjÆMT´†.£¯Ö}ﮥ€€ ®ÕÎÕ1Ñ ¸š©z‘ËÁ5Îî¦XÀéwýyÂ)9˜ñ·“êý„Äâ䓊¦Ìš3Pó¯€Ól?á¨#¯È‰º®mzòKg>$7ÐT2f<xrìPKµðÉž˜´Ë%S‡:3ð«X§ŒÐWM&I–»3k£ÕUºØ0põ¿%·„V¤/¾Ý_‹59àø„¥˜Yç·!º aEºº ]0ÿ sž[˜ìÚ÷Îå—Æ±¡icãî€Ke Ö-5ªiç¤Ä¡,]O^ðûRñ¡è¯Æ8­ãD\ÚVv™ˆ5@xÎ¤ÄÆE•ýó\¤kº>Eª¼p„[;ŠóêGÖíÍv6}d‚­Àë9êïFc¸ÇªÐ7‚n£ìðè!fÃ{yyUH¨ä›ɇµº¾2Š`¬‹ããô÷ËþD8Œ¥‰k<®‹C8À—êSù”P¥ãè×B‰ AÈ‚ƒvxAӕ瀃N.ÔÙÑí!î°>øŒÈ}2[¼’ Q™@§ÄO+¾ ²gøÒ×7‹êjI<Û¢_›–¡^ ?ž¤ =xWÏ4vB7b"1e>þŠ)‰ÿ†éû{þ9Nfå¾¥«j·2VçPãŸZ²?b”iuYVQ±ƒ×°òk$AǾ˜Wr°ûb{¬œY†w=ZÆNÕ›kÞøÚ/‘HΤ—ÐGµt;ƒ÷Ó©\€_“èˆj¬‘Š¿q—3vÐp²Òb#Tn6ã͉9Ù‘äL¾(9pàÇ„ ç+)Œz1c‚Ay«<ºËA6è»?8´„æê–úà³®k‹d‘ ÕOB‚Œ \âý+¯‡6ÚdÌá“g‡³#+^ ßOX6«5A§œ ™¾¬\ËÛ;F†*ï=g‘Ðgμ1-K÷”[ùcœÛw…áq©Ú"½ŒK­Ñב5šMÛN–?TrìßZúaØóX›»6 ¢c?Œl¸ì!*¤ á-O%rZ DÉø#üð«(â;ÐÞ0m„Ö´¦Rã3ƒ¦í3+//&\(Â@$* £Þ!rÄÚžK` Ï ¨ÅA؈:jµ¬Þ 8´ÔAU:ß-97­gÚx8Áwç™ýËú!¥žÞ„>¹°T,3š?6–«IÕžÉü]¸¸M¯¼–¡uPwÅü妾—üÐÖç­úuÝeÃðŠoDé¨YEÙ—ãßçBt¡øˆ9¼®ÜKþô=À`—¦Ê Ü]p—ðˆÑ µÆøƒù@4¥Ïm.¨Çu+i¬ _–'Œ¸£Ô_­Wó…¼øI6ÆÑÊ›ª:#‘Ýìz_˜2X×bþA5¢¥fÿõ‡š®ôjÐÙO¯tú-ToMOþÌ^“± ^ƒŒP;’í73¼Zk×ÐhÌÍpZ´Ï;37½Bh„µ¾™ög Œ£û1¼œ½i÷)×ÜÌ+(Ãw®‹Œý½·Ó½åM¯Îgjަމݶ^µÈXðý*鲜­aÃ’gƒÞ¦(ì”ÒëÉÌZé¬G>æ¯JþóµÀu^ü2énƒ`£Š‹›ZÓ²ü¥`. ÌX=s˜_ý~÷ì<…Ä3éaÐ…¼CÄ>wiuéò5¡îäƒëÙºò×þ¯ ™–ùa ™ÚË’Ïí­¹öLïíÁ®£¸`"]ôÕÖxúÈß»»(Ç¥ý»IQ·žÃ`ClÞY{¸ÏÜóxôqQ¨‹÷ ÌÉÓ9'úÀcë=;ås[ç3n­H#˜¬õ‘MGFQõZèmž}}IðÜ÷ïϦW°yl¸Œñ@&‘0\0z©¼žNä‘ÇÄ­QÐ=ˆ0|ϪVsž5I³&&áhœr"hÞl¯ \”w"lǨƒÎՑɉýÒ*må”r•…Zóι:½ùãá"8±*¦zF¤Ó4#]Ÿ8LB ÞgížÖ%¯Æ¿~“‡ì4ä „p|á¤6—”t}ϯ6fŽIpXøh²û†“ÒŽZ  ü¬Ð$Æ›¦ùN¨ ñ(‘_2Áxέ §–èvOÊ·B%€ëÖã4á»Ç‹Ä[6³³ ÿfï~‡`ªP u§ßíptd‡&5¤®ÝO¤±�‡ÝÔ¦=V5PI¹ÄξHEŸ¬rc¦«Bpå`,±ùÀÜ ó.†èœý¬‚ÏeððÝ­t¤ö‚œMå!bŒènE· Ÿ—Ó¥-ÜÙ:°À¬ÇmßHt¢IÁ'®¬„‹Ö¸åÈ~gÃn^¬Š=60 @Û’n}Ž'{ÚœZ¤’ÀMøQØ|‘¶ŒPf oFÅÀ\Ÿ‘š `"aŽ8[G^Oý°ºÍµ<ãÙÁYƒÖ@ß°«#%A99º;®…þÌ‘>D êœäŒÒ7ÁèËÔ0®\°£³© Ãީı8Û>VÏÀqÐÙ·±¸ñ’k‚g7lôÖ„ [}êñ #\Þw· U[ÑIÜ¢,ñ‰Ô÷yòFs.ÍŠX+c¸\²v86Izp¶Ë)ÊÍbÌÑ|j¾ÛÀW¥íÕ<®  %Ûtdè ‡Ïj8Ü]³õÂU "E« []&¯AÐûö¦ˆ®ž|¾ýÝç%Î8f»¹-¡ò'Œª‡[X_·•"¶ý’ncʉX{€Ì±kht'O¹\Áë°k’Âf7¿#ún0c1ªvFަ_b‚Ÿfd5¡œa¥Ï4%ÄsPƒ qêÚèwÂnÖÑóf:¥,F�pfH<xI GU¶/A'{Vé¥I´¾ø@ ¦T1&zÁQkßx'UKh¶;ÓŸ—[™"g×Ïj4Qu9.Ä! ±™(ýô(lJWæÁA€þùþì"/MÁD7úœ&÷çtëûw¿Šû Y‰F á»ÙùÉt™}jõ0³ÂDU›(^*Iíx¶«pa#3 …Ñ•_ë¤"1vQ=“8ÒýrþoWIœšª`T£’jéá3+iWK+Ñ ÷|Jü­Õ€cÀÞÜ\¸¤.Vå”À~\ë>//ÒO›Þ=MVĈñÙX’+.–ìD£1lX¼'%½k<d• IؾEUáMÝò8ˆÅöŸÈærP\zr>°™²”àÇÜ×ã¯Êù_>SÕøùYû8¸êÝ&Ö†S$ÊtzÖÔ×DËPM÷MÓEÊÃÔÖÉ.ÔÆ#GQ†3¬>UÇ5¦‰SÃmk\µ®¤Vçæ*ÙS8ùÌE~ó’»@4ôlGc'×§5±–vQslÌ·ö$oë™Ü¡²/ïÂáH`}Û$å>�‘ñÿJÝsM¾OJYÓ]ü@±}¼M^Šk®«W`e¼wµ÷סG¬PÂ4¼¾ìÕ‡¯†G‰K¢5s‘ñºe*¨·)brT >ÙÚ±,;]h7Q¨ùl®³ñ4V§Ô›þQjp«ª|ËÌóyžmIy¶¡‹N%J¤ªœñ4÷†ùÍe( –ŸùÓœèZ+ =2 7ü¥”¥~e&­æ bx×ÕÕ*ö õÙx£#¶Wz]N¦Þ—S¦]¥¤SÒh¤Æ†žödœšít=挴¹Ì«Ä"4o’ÙK¬I*ð~¦!ÜF˯ǡ½Î–ADl?áP 9;¹Y%´[¸Ék8;²òÈu÷&/^ð4]³N]Š£ÓªdP¨È[öÕ P /ÿø¥>:åTÉcAÏJí!3Ƥyynëô›ÏFkléÞ”sžÊ(ŽÌ0YwßÙð^?õ¹éyaXYT^â*LHEá{çì™ Åc­¡ÁÜ'© n&èK™’³'Ò‡Êk+\È«…I^“#¿*½­ÉñÕµÐT·ø³Y$!*äs é}ÙAîçc×íjn÷$Hå8¶,zQ8ÚM¸ËxkáX¯#.R““D„VWÈ Ÿ÷ôó ëK»@¨¬­uïßý3±Û,e)ïžgút¼$eÙÅ"éÔ+7·ä;$D/”`k˜Å¯ EÿÕyX)»oÉÒÛ^û=ÿ±¨ò¡àÁÆBÖ�ÚWþzÜkaÆOýI®ßp03 eñžÞé5$*.øÓº½iJÈ9÷á„Yï'1ïºýJ,Ÿ4¨ê•tˆÅO­aÔÃ&CÉm —Ò^®jrNÌ á·H •â²H8RÝÕÚ§'¹ä\-º?”UX~Wϰ}!È&MẠY½™}çïZFúŠ ÇÀØÚ‚…omý¿Ù§êY# yo22ðup–ù v,k o'$“AÌë'_më¬L°¶DOt7sÐÝØÖÆçÖÒd“aµ ¼ÃùIKâ,u üá”Ä»b­¬¢µQ㥑™Èû±7ÇëLß¿ÇvóÓwÆÐþ€¡±•TX?ºDtÙ17„¼�εÈ&³êÊ&3Ç]=—tNlÚ$(÷ó€àç_kžÒÛÈo4í^7NàÍå9*VRÈÁ?p½x·©„âö§îPŽœ²¸~Ì>{-PÊb¼_)9®ëpqQ†(Êä?\ ØåßÄäÞ¼e„ãÛ ,ñ?ň”K(¶«nžúγ¯þ3N–nOÀ}¥f–ê`[€P×.‡[E ™zZMÃk{aþ¥Ç‡‚l©Ÿô{åé aB‰P»¼´ä²røMˆo­‚^,}ç/Ë©æ—bûˆ’"¯ÏK”·$('2Èoí- ’WÑMb}ŒhÙYËŒžûÕñdÏRTsúÖPØ2àdg[+Äåe0aÀÉb´HøðwÈÖ6(È5üÅ)D]„ÖCÃZ~3T[Ô šüpm™üú°Bëä~ŒX6/p÷þ6 ™mô4ãÇóWkz#”zöR] ZüH½eÍKÍ»ÕPðz<ëÕ3QÖÐh’y‘©'‚ú0ê•qª›Jž½ªÆN*òñ+ C“ŸQçkRàîx©0çN6õü~±ÏgF‘Ã?HjC`”’®{§"íõJ{áê¢ï°Pys@Nµ(ÀE'(ŸFÁ¿È*°[¥Ì Õœv÷ú0Šè)¯»ÊìúÀã˜Ï-Xœ’>mÀeÏ@€XÛÿKÅš³ñzZXÔ£¾ùuÝýAWª�;ªj³ è‹ó”ôÙ1Í)¦àõ«œˆ°"Žd•Ÿž–åW¶^]Cj®½�¦Ô]/¯‡îûŽ#°öèਣKÝ[èœæ“ 6+¸t× ¡’_n©‹uÃç0 Ï*X-²ž)|tÈÒ�`³gL~' œÿ²NùI :¡]ºY›‘žû6xñÈ!JRu•Ú®®zøÙõƒ'áÛvT+eÁ×Òu –Ê�™béÉãeQ+óy¶À‰Ñ1ì5†ÿ¢…b'Ìà’¹ÒùYïqf‡èâ‰$ß~2Lêþ8¹+šésä˜_0ÊÒn…;¸ŽÕO\Sß’Û~™ô�œ$Ö0¾ª<¹¤Ç_¡ŽÜÃýl¾Y`cf‚ãÃA?’«©ç¶\vÕU̲ˆCÇ«RÖãý‘I.ûžòjÀѯ¿i¡™©žK¯»½ RÎΊ-f™Wðï¿s·Áq†ZÌý~”dP3Ê¢¤— $ÊPÌ-žÐõê®&ðްñ§Eª\µã#Λ$FwIñ²¡ºz± bƒä¨ü“eÐÿ!C sM! YFž5‡ªç„þÞÆÈWáœ./Š$z™‹ìrª5ˆé0ŒL/$p²Û²éÎü�GR¹Å½íÊÑÿ!¾MG#¢¤hR‰€”\[¥…vÔ®d\‹W'i¡ôK±í^ãb8Ûåʬ—õT”_w.¹}Öaˆá Rÿbâ”7EOTEµ"¾•u8œ\‹om,n\8"iPÑÉ Ü9ÉizP•ü©IrÒiMÛ@fa`þ‘[ÇöGã¸rÚs'KYÖŸñ™&Ý;aaðýP ZfÀ_à’$þc§ŽtŒØ2“¯[6‡‰à7†Rš¼SðÞŽÅì2‹QÓ~‰êriÚÁO.-A$vºµX hÓº ýðC~9Aýö lÏíÙ­“i6§9áúoV3ˆ³HyÏÖYÒ±Z!}Ó±�—Ãûq3ý.¼uDöʸ'‚ç'U¥f<zÀmÏÑu�®e¶éR\ â`F!€æ)ß¼²Ô(ÅP¢òòí&PæñRÍûU•ØŽá{–æÒW / 1½m”Ì ªh¢ŸìõÊW%NäwjO¹ºcØ>¸W#OæÝN>^·Vç®øaïØJŠ6YÛ׬®š&[ØàgcRJiÕŠ¬ U†$Á²†$Tú:©jœBž˜¶dÃØ²ü£L,kŒ�ÎD3;H’ÖG„‚ÇoN·¢èÉH°'áÎBTíeÃÁÖoªz»Vg'kiĦG8:‰ËoáP¨6B Û²¹íA íÚ˽ålZÌò—ËîS é:Û~¥A½ÑP/T1­ÏkåY­!z6lßTé?ãØ‰ÆëÍˤcÔ˜%$Ž„\¿îÀÓ±�j»nç§ÉÉ® /›SJÌåc"C5ïߴޏµ•ôOÉ~…å¦lG¨`]PyÏEkWë+~Ö vû¶µtÅN 7šàÕ£«ôºßÏã Vä$è"ŒU×Cç l^§.uå±#Ü!šÂ€8ZðN±_‹t�åéæßß±ºÁ^Úä©ò;vwÍçÅCÀe|ƒÞ-·1,=ó ÛÆš(\ûîh#FÚ’³Å 5ç9‰['nª½±e–g©}Ð|æÁÌ“ޤËÞ’OËðÀI­«Å‹w|9€~t9üÐC÷Ï"ççaHÏw tŽWÅõ1nêúÅ–ã·™Œ(A«Yb=üv™ùº¸€DàQ¸³9éSÞý;°úÜ0 À‡v¾LËkOT™"2ÔÚ­ïѹ³::j¾ýñZãÃÞÃGÞÜ9dÙ¨»’IÊDeeÚ&Y³ÕÊQI<1&k˜¶þˆ7_z¸Îÿ `å6ªΜé©k×[©k¨ÙŒ0ŒT&hM"=X¾ô†Ï)TmZTCÉ1nv1Î’ŽÈà1ÌÐVøÝ›:ín­fÓmy® ªyN�6]åU=~ºn$˧¿9;q›|â$êÈ÷LqÁaîêöè{Sòì\¬%”ðê˜*(ÿ2raéX…Hl;4oXºÔkœnÄ¥|±ÂØsÇ™óDFXTnuX7™‚Úø,ٱθǦ.g ¶¨8 ʧô{LûbLÓ)ó\Ìb!.i7Ûç»—�š€BõÌ™Á›Ð£ó“[bÔ\sU™s$¡ñGÓgé¼oœu}K}L‘ûú€×º7)]nýH¹û¯ qOïã1Ïsû"?·‹ÝýMpÚ>,‘‚vuôöÃDÛul.7DzÐöû ëÅxu‡ÌFÒDÇvrÉbãSžlÅø>ä·‘¢An_Nx/'ÜpW?·G²Þ,1çvDúÎTîƒ"P®<OtöK$(·^ÆDv*$ö°4´™ÕHà(Áï.Zº,ðcä,Ô5ä>àí?ø÷l«ç.R¸‰ÇJ!òLºIŒ?É (]‰ÒJ€ž�ûÇù5’fšÐ? µ¼Náó?F|r»— ýÅoÇáWvJ.KZýRÆèÂÚƒêÍc³Z¨Ê»´s?`o«¥Ào–»mBtk´8¸Î#RñbÎPáEÇ©oy‚&«Er¿Tù._uB©ökóÏ1ùFï,c‹2"ÒÝ©–" ³o¡nJѪP»¯ÕÑÈ¿—¸þ�h8BŽˆç‚?c:¿>µãš6°‰GP´RÞàê6+ë'QHÇœ`´ùó;×øEöˆƒv)ÿøo¹@í NÈ´L<*Ê™ÕÜO¢ZFȸ‹ ò¶/öÝ}^ýÙE-/»CÒlµ³¥Od}­nëÕ¬p‘RëÈHâ1óÈgA™– ñ3&ô«•¸F7¨ôšá²ô¿Æ•Ýg†;»ÛÐÁHÍeEFÜn%Ø.u¥3%*«cÐqi‰cy,D{ªDa@¤©"Î0‹ÈìÜz%Ö@cÓYì3øoGÈYÞÂUø% 0ã>'ºÿªÞYZ¢ýHUnåµË•€õß,2 uK€°‡÷"91œ¯`~8*Ø¥8|eñŽÖŒ¢ÞÝLu2.œ "o—ëÍQ~q-ó“"±×`»òb¡|ûɃo™hÙq¢\zlêÚo͆Fâ¶¥üfVÙ;ñ­ù›£Vš<ã¼C]˜Dôjø‚üݧȼW'™.4œŒq1ÉÚÓÇo‰rÛž%}zBeꬱI­$ñ¡"£B:¦á^xh~fOWCЕ˜ò£ax&ª [£¨à2¤ï6ÝŸÈ]âVQ– _Ô®f›üŠz¿µKO÷,¶íéÏ$SJŽ+BÓ±Ø0ˆ*ùôAŠþwe5,§x§6°méAÒ"6{€o¸4Îùq.,\´…î6î ~L¢Ø}Ù kª/žÄ°3¬¦ÜcÝX'L%ïÅCW ü±=<á=¥:‹; “‹s™ŽeÏ÷J­[CPâƒÊöHê¸2‡©^—¯°V Pæ(ànuˆµ‚æ0wU$R-Œ ¬²å0¨J襡‚Q¯ ÑwBœùçf¼æíCÅàlÖ]I‰M: >ßCÁÿèlî[D‹ˆ¸J,::@bl;3“j|±%8VéÈ0´&ÒB¾˜8•™‚\Cw:n`@ú,ãð{QIûe¯bÇ[Ú±s¡sò‘<¿©ÆÜ6aÙ Q hòD§¾.2–kŽ´¦IÛ!z7ÏÉ‘wµ3kä\m}‹O¾Ç¹sB‡¾ÿ’I\Y%ËÂ–Ì @O—§¸öÎïe뜕+—Ã-˜`‰ l0×¹i\4ÌDVñ¬:‰ÛŽ¢Ú3|§”P¶á¤0ïW¬úiJAI\~äy·WlëÁ‡µ»}ïÂZký4§ÑŸ6*7Ñ€ÿŸå„ƒ}OggfLØŽ7UŠÆÑóc„¥# î%} 5 Q·äŒ7ÓIø÷ˆÜàïäÐCµ¦sg^ú«q£;ŽØ o»c7ë0 ËDá6é›§x×Éù§ÙÁY*{Ö›Z�îœR^ÐZæÍœù‘þø ‘pµe³ìî yöÕé(Ð%#Ñ®›PPŸhŽ¿v”渻¢S·Ž þ^TQƒÇ³~,åÂì°TN¦ÌyîF!éyÚ1‹Ò›íP}Àûaj §bQ¹m"²³ä´Ñ–‡Gù©ñ– þÐ]Šé¸ök+eËô2OKÅKf6K•Káív(PŽOð—?á]Ô]f›×u™™Ehã6n{LŸ¨™¨¡¼¼qÜYÿ5L¸°"ʽ °µ¯òÏØ—„Ü2Æ%ª@ÇãtÆ–‹É¡ò(‹ü8tâYQ~‰@æ¤-6R¶D æ©&Nf6+«Ìç\1¨×}jEz¬gH3>;uzäôÈùÅqÃþ¯5gÃËxž®‡)оÂ{ÃsŒ[}• ÷^Öl)Cp8Éu>”]ð:B‹‚žäx[7Õ!¾,Iûîb!r›!„j]¹G<ðn–3,ÕY.Ÿ“Ÿ¿\!§¨ºÑò«�-züŠÄL8î33X}ä: XaAHYk‰²º__¦ÔŸa‡½,Ÿ™v •O‎Ÿf%ÕMqÒß ó—&Ðgž‡bÊ!¥ñ \Ò1¡§í .Qew¾çÇ] sß]ÝwšOÖÈnü–Æy Íð0ýôD|B3L³i^šP ú$(�=;Dçñeíc�‚c¹ÄܵŠúD�»)É"ÁÀi–H!)ÄÕ’�µG17$Ç~MV„"ª|Qà¶z+†)±žºbHT—nÁ6lÀ¯ÙkÑýÞC´<ó¼R¨àñüÚu°CŸi­Áæ¿pù¡°Y%Þ+ dS@“¤1†žRè_#áËFe,q‹,pîbÚp=~poiÅ•+Í©QöyÙ7úÓA¨àB"©Ì+*BÉÌþÎêñÃ+J¬’i°¸ºDGÅèƒ9ëçîÜ|qÇ1eÁô»–‘—¥+¡ÑžÕÚJi›Ô6ff#ìÞuG¶Ø-x%Ôþí)£YõøÍÒ#2ö­Y5Yr÷2º@Ó­Ü óB'�Ÿd½ñ=—7R,Õ ZžÊ—3ÐbÑ)L=[vß œrÊ׈‚ákì˜s0v’9d>Èòújð€Œniþô£;N0Mb”“o´EpŸ#â§@53Ù•{iß$œz&¡x? 3Œcüv6 F“�^[ýIØ­^A&Ð Å<x¢¾Þk焜Úògx‡ö o;¯Ÿhü÷!S_c9í¤Y6jý%%+7ѤŸKïÁÒ~¼q„ŠˆºV­Üa< âÅ8¶$Ћ~szêHSzR•²¾H¥¥ýõ{+@&(½Ü$1c¦c±ó¥Dùp9þèõnsd0ÞºJËÜ…vÅ.ÉœÒÓ ²a3wG¥½i ¿\á”ô½íR¢qU¸}/º´¸îÛm˜ å~eüCÞ@wTnb)”ô‚¨æØ„ü/*xÁ^#ïø>»¯¿ Èóö²@‹‚Äm“KéS µÜý…js.v!ZÏ/þý Ò’ñ tqPcÕsÿO*϶ù-íÉv´G#ÇU¥ðÙ¸Wæï]^’žå%kÈ:9‰âøb`¹ u\P£ù{˜ŽÇžÁúhHƒ=¬6ò Ô»ö10<W*G¡Êï§‚=¹1ÄKiÃŽŠ2ë?â‡Ý¿f£rüó H Êé~—Ÿ 8Î^¢ÔÝb^LûÔÕç6ÅÃLüñ ³xªâT€Â_fCvQ‰$5¢ÎÈ;ˆh@(Þt'Vu¹l­ ‡æ‚=²Ê,>�W© ˜F=+;±=‡°Ôo&¥’X)o/{QMŒ ;y´ë¼D]Óƒ·ÖàÂþè>úÀFcÔ7ؽ‘¯Áxtó¦XNéyßì{ÆrŘH‡Ú¹o(~’»0µ Ny¬‡ ùû¦”‡ŽÎHœ ê¢+lUÌÕ> ò°vñÐí©‡t'É¥Îg�„»w±]>uôìåš”ò>ú(=i;ä$3=J7j²,qPîTPh|c®BéáЉdžÄ¬©g±}×ÚfUµ<+ÞQă/näM'‚5HåzYÞ‹ ÎòSS²YªçuÕÅÚÆi ’3õ¬Y¸o˜Wݬ² ‚àÿÁöžtÙùri,0¶¢Ë ˆŠ´|§MhÁøŠóh=ŒT¸“õ[h¨cÚeoÄ̉ü<^³Ò‘ƇDZÜ…²É?t ¦Qß/ ¦ÔcÛE ºÞ%lmЕ½õòƒÈð\ÞŒöC>•¦È,Ý*m� ~+¢Ñͦ:—jÒl»Žÿ ä6ñ ‘àž”¦¨ã,AC¢Ž_ñív ·C BI’÷¸&LøyµÔ^—Á1½¾‰'õüç0OÆ¢µq?�{ü«t;S¿ZÐ]!µI#·ÜÞ¿à;àÁHµ×]uKFÒž‚“ldçêfêï/ÏÑ<Ô­º‹§€'üÈR]h§ÛÒa!¡vÐfq£dÙ÷è½¢­o ŒÆ÷ô)ð¾T™çüFìáé˜l#£8ïÔ ©Àß!° Ê^^L28 ¬bµÙ¨¼`Ð7Ò\”åúÞ3…}°ç³$PØ$|Á×â7�»Y­‹hJ¿ã÷iÉ g@K—<Ò3ñJ1SóRÛÖ;ÌlŽÉ)Á@ æóçûÔë ¯ï Ôg•6I0c°ì;[ñ|PI<µØÐÉ"FÂΊ252’Mƒ~P`<JìÞ½C#Ñ8žQ–D¨ÎFX‹ì[,—ßT%«ÎJà¢)Õv‹¿AHz=ÿ\ _oï¿P}aÖ&Ç \Ùq1Õí2,&Û1Ф p ¸CCAHž9üõMœTß È+5ëB\ñŒÌð ¸ó÷üŒƒ2–ìTóñ>Qd¼#$÷gö…ìÓ‡Þ÷æAŽAHŒA~ YtZlv2eO)€LÀ ?çvAßxDÉ=…üÙ'õpMâœ<í2úXÇÅ¢Žˆ£w>Æ«t b*éøMÞC6q3ÃS™¨ˆƒm(x‘ä9Ö|Õ[Õæö1t{æžkJÇçÛ>èd_~šU7»ÎÓS¼ü_pÿßàÿ 3; ‰‹›£½‰‹-Ü�:I×/ endstream endobj 12 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-301 -250 1164 946] /FontName/XHPQKW+CMBX10 /ItalicAngle 0 /StemV 114 /FontFile 11 0 R /Flags 4 >> endobj 11 0 obj << /Filter[/FlateDecode] /Length1 721 /Length2 2808 /Length3 533 /Length 3353 >> stream xÚí’gXSÙÖÇa€ H—"x(Qºô*½¤EABr€H †€áŠÒ1€HTŠ4Aš E¤©RiR”*"½ˆR.:3÷>ïÌûå}Þo÷¹çœ{­õ?ÿõÛko¨°µ­´.šàð$i995@ßBÏQÈÉÀ`z(TŸ"IÞ�IÕ�9UUyÀt;Z}jJŠj0e è¼ý‰O ®/ñC¥èâ@"…ÄH’'ˆ;2A!±€-…Iþ2� ‹Å6?~ñl@è¢e 99�A‘�7Ѓ‡ÈþÀ2Á»�•ßÓh_ï?K~ Ñçˆ ÿI*q¢ x¬?€Ý!²–„£~àÍÿìáú«¹¡/k‰Äý°ÿ9¬¿Õ‘8 ÖÿçíK‰€ ñ•:€¿Ãé°kcBBb1(]¼`¿§0>†2ˆ¶ÆPž€;ëþ̃xô_Ž÷@ÖÑØnæ ùDZþ^µFbð¤KþÞÿòý!ÿËý;>C.ÃŽæ+w$<zÿ\9ÿ¥ÛE<Š€Æà=�[FÑÿJüJO@¾)­pd$-¯ttÏä”UEå[ÿSi‡Ç\÷M �% ¦¢|ágåK$‚xÒÏ›p´å?cwÌÑ€@ ¢ A¶p ñ%ñQÏÕ³â!ý{y”à ;•¬æè½ÕÉS¥ç¶Ú´Ç*½ Ð=%ŽÊ«ó›Eß»M/H‡¤vÅößÒX0}Õ™ö5{fËvÅÒÍ‘TŽ‡Ì–®�{Moµ=U;)V![ÏúÕñÖÒtyKø^¹8¥ÊJŒÛzXG¨&n`3¯OÑ ílzÑm€{3Â=–vH ³$›{í\H9>r‘ù„°ïµc>¿JÙk—æ]顼úKÅgV›²ä§‰V7‹gÅ‹?Kj>n{±É%UäÀdj£·#HÔ‡ÇAºÎáËÑŽÒ±HΜé—ä©ñúWz£&Ú•*Ã?™IpE¶m|}-ïjÿ™T kžN&ݨ]ÈÖä:S´u>o¶Gi¿©f*ò¬éS´³ºæÈIn{;´”_ÄDw¥9gr9b݈S›IGbÆX}±ýôþ\ª^/Ú%‹"‰†ëtQwߘjþúØ âß­ Q¡3Ñ»%~)Q‡ ù[LyÄŸƒ¨,áLè¶Á5©£+)ÄùNõå<&º#;؉/W×­äfhalqCë»… ‰»Ü÷f ¬»*íðíÈÌ`ë³çÄÙƒ‹"Ķ/þpõ¹,=¶í}@{Á©S•‘çW½ x¯·¦jfçóï¥íœÜ ;/œ•Îj2zúMö­¡àíœ9š©è õöüß«W<…S‘›¦iH[™ªýRz&íy/,J«ª¶0©}/ç®}­Ð×'ÍÍóËKá;›*áÂßm>à¥àù3¯Úf~ÍÄØÜÝx?h(sRæø6°éÖÔæêêvÏü¨oeãaÄO/6w2‘D5 &ºD€ž|°«ÐJü¦Èë¼3Š*ªë´‹ú\£ÙoͯÜñæì¦qNÖÈ{oÆ%vOâëûÞÉ_«”áʿÚfVJùÞ&o¢Á†`ãS™1Rkù\,¶Ó츆sbñãÊ µ¸ãvffK_tYèD敲|€äéøcç£ôûZ“dc¤r5a/ÆkÇJG'8¹!ç¸<œëᇡ±2F‹óÝë ­Å—±‹Ì %Ç·ú# »J™)OQ. ·•o qÄpÏðhï勹èfOy³+²š ÊfΈT(Uìl|y0yæšÜcÏþáªÙ<›ÐédDì¢óðl‚ ÍLÆÝ¢bD¢‹Pl°~¤È­ÀðѦgäDÒb,‰«©ë$©ØˆäâeÞ ìë© ´0g|4ð\½Ø§œuâØlÎFàã™I©B˜Bë;_Rm9Øú¾DÐøÅ³Ìn:7I·ji4ö`%‡íðÀðyª¨}M^Ïør¶¯¶»÷HñSr$vúŽÇ+`«4“Ï­¬Æ‹­‡[ J!ÜË`ßÔ—„ðÆ-ç·×:3Ì—`çnœÝ.-S¢~o¼¿õ¥~œÿ@ÉÅzYëãs6ŽB}.åéã¿ ·5¤Ò[ȵ7†‘‚ßë¹¶|mÏx@HsÈ•“£¤O/œ¢ôvväV¢¶öY6zt[>\ñ2FJQôáZÌûâäA\oDºœÁëÒý¤Ý½/Þì³HÚôÇmRžÔY†Ø*…˜ S,*ßw³áî$1ž¢„ÑkÜ9NxnÚˆ9|yÛ\ßönÅ|oÕ½àѹ ªœ*º;Y˪7½h ä/8F·5nس$ãdk^Çú|qj‡Bz 4BÊ(ŽUM2Ý`ã, 8ái±Ú¼³QU _yñN½+tôp_4`NY8p°LñNþ¢p|ž5¢¡Z¨QdÂbϪüì¡XlMŸßlîtŽ~¸êK–uªIu…`*ìܲü†¤ñÛ�ÊïðÙ眰ַéB/×Åj3Xw±¶©;eÓc†pOíÀñ+ÊÜÔ-|1öAHb”èA³^܉®*`~ýílIÚDãå/úö¾¬Y6­#ó}“éòFttáZ¡šÂÛ³ŒÆ¶L¹ÉbÙ6[:én8W=i.û桇›Ÿ¼³­Ü£và ‡õgG ¼¾™6¯„¿þì•V–«Þ¤¶%Ëí¬ ¸ÆåK I4í“â7¦0ˆž«ëtÑ„kí—™ZޱÇ?}RÞ-°ƒaàCE"²ÃåiJ±Y^ª«% >½Ðé¾Ð2T4_M`0vîÃ}Í]ϱ¡MnãÐ)q`(p†`—X­¦÷(œö1»ON~ÏOFWûMòÖM€Å9@Ó‘ÌeºÖtEw[@;W¦¬2}óÜn(¿`¿ežŒèfóÎJ#Od5+.?jO_âör0cÉ/x|*}fKd:}gíøŽE­®5 zLÛÙ¬Ü4mãÉiAì[y'£é:õÓT×µÃø{Ùi<¿.>¼Pêâ±äïåòf!ê¶5újץ͸«×¾U¨¿±4S³WôcýI}’x¿÷q±iåx?gþJ¨ŸO˜JUa×ÊlþJ· nâ˜òÖbÚ¿:”vGýµ€¡ŠëŠÃô¯^Uÿ+ºÛ‹Q)•è9Õwê.ƹe¹L~œŸéœbË'ë´Æ ™a\<….AgŸW´LfJ((QkW¬zôg‡<sÂÑ©2tè·0דp¶¢°cH*µfƒkäÀú¤Ñ+®È€òöÁh[á ±‡ï»–r.‹·cÁZ üHwžRÕ1[SlC=¬=f5öŽU+´Ì1‹Pk÷iÐ!QÌí<#ÇÂhRQUà0ÈïE]"ئ|¹Ž¥?8kp<"z‘)¼IV2×f@û³¯ÎD‘Ô§3jŒ×k¾NÃÕà‹äÒmmIWòþ6TèÅo妴Ñ¥~;q²jïÏÚéÈ-ß¾ëxÑ8†Y®ns &ü&ŸbDœ8_‹ÆŽ©s½e Øñô¿–ÉÇLÔ®{ôÞ–z¨Ü¾E'ç3Óýd_°­”4;Õ”.éníFsìÒ+í³eE¬½ÊÍ×ÔœÍÚ¼—tX͹ÒM>†xöû°Óé”®_¾fµuç d|éz‚í©Fm8¯¼›{[{!ê{?ï|éA„#a<”/|lÞÓ4ìåܨ{cK3$šT&Ÿ(¡QT!(h ¹PQ®)Ù¼TQ ÊÑö=¥âD1~6¸M2Ÿ²Þmw&0çšDÆ­OÔß#ñ­¸ÇC¾õƒþUéÑù”@ê0yQ8*yÝoÂ^¤C Úœ>@k»àú“ –ê[*á ù¤–ß W±ð©>פɫ±Èo?²ûQÛ’w{evå°ævW9äÚEJÚë· w÷JeYæZ*ÍáOꨙ8:·Å– o×U1ÎÝÇe…r}õýµ«A­£s™¬†Å7Ç;›\l6Kµh‘FîU!_ wIkd©´¼Gê‰íj*Cxü =ýšxÍ‹"™á9Ï?)—moüFKÇÀõžš\ÑŽê§ùÈ©'#Zý”¿—†>´"NŸ¾]4Tv+·S'zñrDÇú7ÐÉ!plX3vFšr¾xÉÀËß7Ì 3OÜšíºÇk)/Ô­ýžAp`½*£?Öv)=¹ßã°ŠÎÔ˳bø¨²ÊzîƒíLJce˜eê4Ò¹ „©qXv72Ó>F…ÛÒN‡fˆÿØk?¾uJ†Ü ÷Ú¶¤ÜÊx´÷:+^¾SSH&ž(ç�‚Wç½=]ŲxÈJÅ•Ô[©å—û\7‹}òi^/Z›Ö-2­îiÙWoëpþnþe].ö{Ž‰Î°ÿçù¯Á„ "‰$Iô‚@þ klÄK endstream endobj 15 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-53 -251 1139 750] /FontName/CYZVRG+CMBX12 /ItalicAngle 0 /StemV 109 /FontFile 14 0 R /Flags 4 >> endobj 14 0 obj << /Filter[/FlateDecode] /Length1 716 /Length2 2582 /Length3 533 /Length 3117 >> stream xÚí’y<”ûÇC%CvÂc+ûÌk¶áp‰,‘eÌ<c&³3sŒN¡"KeÉC‹ˆCDâ([Š(âZSBÙ—,%ÛH®êœs_·sÿ¹¯ûß}Ýçùçù~¾Ÿßçû~¾Ï£ªèä¢m£úƒ6T C®7¬,=àº�\QUµ¢ƒ‘JAa �74„Ì�@À!ôŒôõ UÀŠJcÓ‰ f¥þÕ…,È ˆÅP� ƒ�’·B°àBÅA[�,H$Àùë‘`À é,§Àá�Žˆe�þ`�‘~…²£à©�ò»ŒcÒþh±@zð ¶Å©lQâ¨ÀxÔ‘º5 Übù±þ Õá6LÉCþÿmQécÈDûw•Lc2@:à@ÅtÊVwð;œ%•ô—1v ‰ˆµ @�ö]"ÛC@œ‘%�x )ü¦ƒÜ[kû�µ:îéæü“æïŸô{× C¤0ޱiæ~µ«áÿ¬·ÖC'†�^0 ¾eܺÿxòþaš5KÅ)€ CÁaè¸?…¿RYZRCNië#�m]}8�‡# ¤>ìô¿])Ä &h‡ôa0òá7ˤÓA ãÛo°õÆÔxâÖ~@0ÄB8™RD_-9Í%¿Oz”ܾèu‚ÔäÎ^Õ_¾±§½yA´CçåÉ ‘NŸúvsgœ.¦­ª)˜E—žq0Nx´ìó„Í–¹óf¾¥ÚkxɨèÒ„v‡D¹'/´n¼øÀ׫Ló†þ)Ÿ"q7´ÚŠÒë=Mgj_áîxjÖ>ë+«Úf„í±þ¤™å»\²“Òf…ó”ØÇ.Ñ•8M>‹ˆüâºh®íÖuß6p"A¬c©®ø„ÂO”ñŸÒÎç3Ò=J“ÅÒÊÄ?·uG…™Ä×ð ¾”êÛ|-÷½×1T&­üúmügÞ£YYå^™GçUz\U4.Þ¸hW¼¸-Ù;ýAz^æ„íöâÀqåO6ˆ TÎ]n“n6ÌÛõHUBGéijskѨ[ø˜tPÌß×.‡íöMñÑ7¤•%µ»@­n%|ÞCu� ƨá7|SM¿=®¾:­å•÷pLè”}nÊP ¤¯žöþðnHézÕ±à¥ÉÖÒV—©¼áôüél±£B©t¡ý³‡º¸-3•ÿ•˜SËΣâ´7ׯ3ó¨åâ$n[#Ë#=3nAÁ#å·ÝÐÿÑG¶ò´€°ÈëB0 tbñ‚SÅó±c¾A•Õ,C¶zÀ¨l¯1%ì¢iú…ž1{—:Í*ÝH¯d\ð}[DMÈÓÕѦqÂæ¦jAÕ¥Éx:k‡JoËÙ•S0çVoüâ‡êÕÜ“f÷m¦=NõÕÂTYÎmoõýcg‡úÔŒ=;eã$ËTú®¦AšoŽ>f2:Òm\±±ípìl5G» ÿ,ÚÏðjJ9ufI¶¬°ÞñÙT ›&ÓÄwÓ!©êËÁ†X6ÿ2"*Ÿ×ó‰‚â„i£&Â8ñ’ 8­Ñ68'AI{» þ­ôñZ²VtJl<­ž/A’2& ·�¦ø\&ò(QfĽ=V¬p KZbA×7†ÓGRRŒc½¬˜>±£’ß öÝÜ'Ï–µËUÃ7e!ɵ›a²( ±êœÏšët6WÝ€ËdAnZ„‰ã[>« õëx¬Õ~»Á]PP8?˜¤M¿\ÞLÍIBÜ3$gJWzI@—À£®›rýÑ£ÄÏrï{ä½ÌŠ6ä;%ÚŽõtV˜›ÌK1@ÌÛiÀàGt‡k2˜ñ5ù¢¬}s«Q w̵©Ü8–»3ÔœìTÑb çÿl¦´ØWr«¦Ú÷¡Æ³6~žÑ$ÿØp‡µŒ¡„wnÙéÝå´ê)±+æ»5šõb‰÷D¤„ ï3ÈŸïx>h®l´zNØÖ `[ŸÎ®ÂØ‹í‹vTúÕ¤Ö'14ù±JµØÚiׯ4Õ–­ÐP€¸‰¿)6ƒW÷Kx¡ãeêà`P,Êî‚ÞTó}Yq<êíüœçÅ~óíõw{Ñ”§#ÄzPêv\þÁ¤!ý‹µ‘,= Yh„â×L]-+™²Ò²Pçµ5öS‘‚}.ëò8e¯9?onÕ•X¾æË”7©Ï TŠÏpÒbŸ@Ì.‰)/Eì9ØœÞ{iôêØ)>ž¨#&îï×¥ï—YE­ôé’Ï G.%•È–ÐãŽòi±*JÐG8÷=µÐ_Ì‹Mœ‹A[Ø_DFðiÆ´#„[·û7?¨®¸&àeÐ*ò¸jZÚlor¯d§àM÷Hs)ïÕnß!µ–LSDÎ}ù'•mg'fõÅìãÙ€øÇI"gá×¢)Ø–—ÂYFtš!Îýºª¾9[ ´i蜌¯Ý«U;÷\ˆO¤äUãã†p²bÉÊî™=I!䡞í]NÛLÌîÙ{úœ~LW±îRPï†=ÚǬuaJžoÌJ¡fLFåY pX&x>Ù.^)=Xs“s߈{=,;{Á½cÍÃýòýKù»¢Ãkò‘{ãÞ+¼óÿ¥I$^É3ÇÈìÿÔµ€ôôD‹_óÇîtéÆ×¨0Ã…VŸt›¸r<Š#^¯4]tÇÙdÅÏg_Kê{&/Ošph~|7¾þáe´TVA¡õ‰B½HšWÃþöµÛrªÃ K<üï›^ß~æŠüy‡š@î镤D%Tù´¼æ¹ý:pÃä>~ÆÕ{ëœÆZHLå(W>þmÄ“®êç«NàTtúê•Ûs‡ÞEmçhb¯vÄô{K®E;¨YµB[atØï ’“Q}3îc Ô~¬W¬ÿË„é¿òu%J°I'j©_cG :»«_/Ì(Ä2nmKÃ[ßãÐRѾ²0‰Ã‹ÂŸ+Ò´tccwb_v,~Á$ÐzÎJ¶–OÜ*µ {”„™½Wçp-Üþ/›‰ vU¬`W¸†sòÎȘfiFCˆ)…[2<·ÖSß³±×ˆ%‚ŽÞ~XÚîCù â5ÊtZ¾Pø8fôZ8ÓâäÓrõžÿˆ‹5TgJ L€'u.©p•Ñ"k¯ÂÊ$dâ:åünI¼~QbÆ?º®èÐã~V‚Y‰jŠ|3_™uÅlŽ}Ryì)¨ã¶‰±°Ugük{²¤J sËÕ]ŸTNTME?SM’eí¸gÞ¸ò>,a’xÞ¦2P’ÓSȪ rïÑjb¬î¾¦æ¡hasKЉ§µ°Ýøƒê"¢Ó#/¡(•%iI)ÅŸxÉCÂ‰Ž²¾÷‡ÚäÂ$‹|ÈzjÇB%µM¾<YèŽYé„"²tí7ϵl:PúÎN¹µ\ …I]~+0{oàáÚ$@0|›ãûzýÁÙåž OÁ¢/áoEµ5W±gìL›ÝM $mÁ€}¤ç®´ö=Û^MNŊ儈¹š,ˆ¦î 4ÈÌDæFJÌö/þH‹·,Ks)x/Š,Ú}rí–“/²ž{AˆظÏo$Š®›K×äL„jç¶Y_dßߕǬmçO6ˆKáâ¥&n|h»ñ(Ú7g£æ%=s“;T€¼ÅÊ�+º¡³¯qYÌ‘õódníì¹|fJ‹™ìæT7EQªèôùÞÊ/8­/—ǰî™có%­Ÿ¥ŸCV£v k¶+¬�õ‰„É£Õ#ñ¡¡Že‚ÌŠÐy‚ò‰£¿¸Yè^ ‚‰2xm^-¯†%jkqgx¬ô2#'.ßÁ êíÌ2ž{h›Ñ±:ý[WÏ5F#,yä„Åßp™=o®ˆÙXÁ$ÚDmò\‘þÒ Û\<4%Þ ,Ïž<s‡‚(U?"Õq¯—¯CJrB=æÆïÜçŸgY¼;­-7P1A’Q91ç-n{ok¿é —b_ÑYØlc ×Ŭ˜Ç ë<µØÎ9©.¯Ò¼1}‹/ôÏn[©ÃÉZÕÙ{µf»5a¯(ë'²ÇMÉÀ¸4 ¥_\±$³ÃóqöUvI™û//Èÿþ'°$CgPÉz òSÎJ_ endstream endobj 18 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-58 -250 1195 750] /FontName/NWSIIM+CMBX9 /ItalicAngle 0 /StemV 117 /FontFile 17 0 R /Flags 4 >> endobj 17 0 obj << /Filter[/FlateDecode] /Length1 713 /Length2 3449 /Length3 533 /Length 3993 >> stream xÚí’gTS{—Æ©*”®€h)Ò„Þ$€DJ"]zLÄ„B(Á�Ò”^D$¨H¸ H‘^¥H/  ¢4)‹޹יּw¾Ìšo³æœ/g?û9Ïþ}þ¢Âp ™Ë( ´!O’É‚ÔS=[5 HV * !¢$ ¯ ¡Õ 55ð²PARVWTVW��¢@Á“Lĸ¹“€K¿\*ÀËh"‰ÀM$w´ÇQZ4‰, ^Æá€æ¿^ñš£½ÑD_4J��€( ’¼vÃàr¿˜ xWPåOåãùWËMô>âJq^Q¢xˆB»äÌGÓÐG,ÿc¬ÿ†êïá†>8œÂãWü¯=ý£ðÀàÈÿa xxúÐD )…&âÿnµAÿɦGÀýc ”„Àa—ñn84PþO ãmˆñG£àÒèŠÀy£ëh<êïG[û gfc…šJýùCÿlÂ<É’ìùïØ_îß5è?ë£å1þ@{yYyyБñèþëÉñoà ðH ƒwZx‚ˆú·ðO(==‚€ X(£�>:@ 50P,ø_VxŒ—ªËËË«(«üV‘>D"Oú}Ž>ø¯Ús´4Úd<âÅÐ;K Imºl4Ž\°yÝ3 Ôå,§·¨|}k¬8fÙw7#°ð1öÝ%xLê‰ó:÷JƒL5â·œZÈdÂ|’®Ýµö³›êE±4™îWv r +è˜jgû2)*8À‰ùÔäw•äYÿ­M˜¿boäMPý8ªÐNª¾s¬ìsÔ\ :rÄÀÏ8A*Óy«ä¾‚²ã>C.QàôU ;°Zו± *7ÂÒâ86ŠÎ_Áϯ9•v-‰¥Û–&™s¦–qí÷‡k>¨cd}Ç;v8!Ôc`|Úì–@ê«,šç¼õÌÌ ‘QFÊÅçáÉ'оµWØ,õÃ…þ)a†Iì/«ClÌk‡Qö)Hôj[T/¨!.ª ðXó°«;õba§·ƒ;qшg2«9yYoàUgóçú hàæÙ'͉Çlæ”Ô+k×¾D�ع¦`»Ý¸²ŸuFgåº)º±Zq²޳Jnõ$ž~ª®÷LÕ¦‰§l£…Îa5‰þ[óë¡ùxø;{òŽÃ£Ýí§à—~ó»2ÒÖSÚ}®«MŸVœÛ"tÛ;]u #G!”!Í™#xH“zCÛŠ²,–4bâd»©Pý:7òÜöÉ6œš(a†à0@kJ»·+¯ê•Ï�ºÞ'AV7ÆóDÝs¹+BÛHŸN‘uXÔW}Ð'Ozù4âO–ÉZ ~uÇ!Ÿ%¬T©½–7ûáîtCÙ1$²K[Ô½¹Ðàúó¬¹%} ÄE ƒ•榩†Êaw;x22ÜÎÔA½øò- \×>Ö±ì ÉnáªS_Èao{d²àÊÕ@*Y;þrT6gͺcLbŽ|‘ç÷a®Ÿ©ò~è!J‹džº,²¼zßw¥ŸÿdHx½ S€`Luto›e>sK[ ˜0i\aÔ‡^¥h}3ˆ›9•â¦Òq¶ŒÎ¯‰),7àÕF¡—ªvO¨_ÐÝ_ÕñVUë,YY²““ÀÅ^•Ó–iŽB=Çå“v¼£aÃO–†T›c>Ôd÷ibŸ/$ê+.ºFæ³ä8ùâÍæÂ,·õçÓò‡J‘¾ãZ!ôG*-Ìc™ow±NF\‡—Û¹š¹é"óãyúΜv$⃗Bz_±<YßMbÁ•|Û«áv¸›cA?Wlžs”W2Š’;X°Vé{s½=ÈÎLÝÅÿéÄ«~m'»ÕӱȶÔ7AmVȹq™ðÒ¸2ÞëÖ‘E3OšI~­K61Z­M=©,Õƒ•ï·ed7«šÇ´ÙW0/[°½gãõ0ƒo‰»Ñw®ÑܵÜòñv±v¸RÄë¯>LÙ£¦‡=ùIž2ƒqè“]HƒÜtMŽÆhÖK7Z·2ûØ)¶1'Ï›L¿•Ì·†3¯þ¸MPãïц%JÓ½V¤Z?á_kzÜîü¸uÜŒÿü‚´^œ@ý…à¤LÇCè[ÂÑFQ„V¶&ƒíñòãyðCöMÏ6­~öä¢mö ³ö'—Šul²ÝÆ×mè/I{<ï¬;7…3eÓ;²�ž„”>7¡KJRÖ™Ûÿá/ÅMò•ý¬l"½°·µÇÅꆚ)…8©›>D’?šEµ˜‚Þ,¹7®ÇZœ" ”õàîÏÏÝ߸¸âÍëQ+.Ðaøþ„¦µüÇš“xÔö®"쇱¸qþ²$äò8åâç~žœö·ãrަj÷Óé¸ÎÚ¤qt¹¨I7©…X… HòP#oê΋isˆ…ÒæÁÂA—”ŽÌ8›¯5ÑÓ»âUˇå˜0:È÷RJ…FáÝ›“ƶWIš÷KUyÔ’1ò`Dø äs°j‡äÂ=½ÞÜbÐÙ3’öÖáŠ:îRp¸ˆ³Ó›ÁΚ1Ý y jrß—ïÄ•ñºõ ²ÄÊÕ~ÕÎyÊ@0æ‹uw÷‰Ðù/? gé…6rIg‡~3öJ°õÛcî2¢Ýrj’ÕŠN·y¦œ u—ƹüÙY£Ñ68À©bÊŸmIyë+jCN嘪ÿ4ÇsÉYJÒï±0}œé«#sÊή’®*èôðÜdxæËºûÃœí´¯j)6ü,­½C1·š4íÐ$;òj\ÇÆ³²¡Y»ûØÇÁ$†Ë„$Q –Œåô¯íƇ<5멦ÆhgMDýôý‡Ýóu±bù`´|Áƒ{ô"[ÑÝÐß°³Ã³Ä»Mªþ)ùI7Ye3k—¾ òÉ$©h½›UkÜã¼Ú~1uš&ÌÍ& Ø{Sã¦2.ÍkF¹x†Sl“¡;7—u¼¥¼J³‹÷èo‹èܸ0Üa Ê©cáÔ«U,t×vqZÓj£"ŒÍIÒr‚\O‡Úž­Ì‰îˆ®™JÐ)Ë“RìOY¤°B”×B€ð¢çuÂ'›†z†6Ûa¤Qâ\òUæ¥Í-MëíѨiÛˆéŸöï”sbžãÇbq¾#sñÕ"Å„Ûñ,ßrŒ3BLKP¸‡Î↚ÂêÈ;iÖÜBÃ.M¶©õè)Wj5轌Âb­ûi*þV:ǹϽ/…@LY“(ÇÈyëã š9¾sFº§bç°ƒÃ3Rï6صÍ¾ßæÓr\úZôlÎ]ôœêœk&ãd‰U)#¼J‡æ,]”*Ö•ðu+ílió [šÌÛ™¶kÖmš4 n~c:åçÈá¬"Ȧìu¶}ŠÀ0}úCd¯ŒæX)Ix5ñ—8vݧ½{c å|„•ke¶«}¿‘µBœëYãò{µZG{—ä´™}ã !~Îp–yFgŠøØw&ÏûRF¸à.êÅÐE§Á,mìëýó¬ º0ÜcyVdzÙ¥Þk`tY®ßÄ¢À´wÒܨ̗äîQ:ÉÌyýez0dñYDªÄ‚Ìx ,9-Zƒì1Sr@•.mÔŽpï„ò_‡&^ùh86:fjif(×h™1ŽÅv F¤ðïFŠO“[ÝöͳQÃ÷j” >ƒ>’²[XùÒ ª\ÉÑúÎtÀuVoDã²ê˜_Ú7‘Ý’´€Ù=.McÉïW.4·Óñì±ßØúÑé2_ÐÕøÄfqƒØÅyëŽRTo‰¿~ M~(¶?+$NÑ‹¬£OÎ{¿êJï5…w¤Jsì+Ù’£¢¢4ã<Ÿƒ’WÓÐÄ Š„LÝ-VãÖTäîƒ;¬J® —õ¾*Sdy1¬µrÛÝ»wÎ\míç…ýã—b^«zI¶PüÖ݆4^oX ®Â y:ÐŒ*WCÝU.,³·ªb =Óü>R€þWŒc}p’LAèç¬c—¨r¼L+Ü–+€¡ªtl:kÎ…ú¨iâý“¹Ø¯móZ™ïÉÑ,kS¹©iz»ãn1žW7yÉêcI~€ÊE“UŠN›7äÚNø8w[‡›táÁÜÃtÿE†o9 «5<:,õ%xªZS©™Þ$C´@ºÁ¡€FTxñ1bèÅA»#°| I{Î"Œ`ˆµËDUqàEèoÑö㕽8ŠÊ…ïhªei¾"91èH U³t ß 3Ôð½Ýš.y fL^e:óÂãP¡†Üú,Ôi^!(&NänÞâ´÷•Ïuï¬ä¹§1[{aã.‡&(À†²&f3È’z·Ê€§R!%,qµ‹JeRŠ´qâÚdž7«ÿOêŒ*#MÜVj·f'VzávWñÊ'wåAM•JÜ›C „ì[qÑ^2kõ¶xOõ×½Œe÷L®æã»l\fÜSAÌ7kù¥,N•ïk™!&ß#¶gw‹n_¬.à «F/Ð ¤<R§{bʱ°!“hËmÛTKñdTˆ‰“öKnãïÃuó^щ6¤,«Yô2[súX‚¯Øìó€k~ö+LjïcöËÉ©v“¶g¦þà[²®V÷’І[YÍùP>¼�]©bqnЬG~Eõ!C¦0Ó?CûvmNGKŸ�ô o}p¹7öì~ Y!ç ïð!]6>—ÉeùÇz"ûf`አãH”¾úði³?_’ãþ�ˆ•Nû¢x£'rö¤ï¸zäA<Æ }N 8Ørü5}˜ŸŸùØ^¬˜PÕc ×èOcÓ.;.ËŒŽ·t*nvúh“É®»¨2`ëÒɇg«TºçQ3'4 Í‚u‹u·ÀÿÙ|lš@jä—H6Ÿ-Áâ‘Å?‘~—üÙÞ‡E>pKøyý5{­«Àåó¶XÕͪyÜvE6餠֨¡Î]moRvÊT0ñ˜`ÍEže/ƒÙúˆ¶žëæ;¾„š±~OA#¥2é€Î ÉØ-ÓDk$ê”û·$Üù(gÏÏ \IâºÇƒpØÝçþ>¨ÚÌ[÷ê- 5^?«ð¶ð«ÁUÚ|•å}Çþ­iøœ’@«òrk–VÔ€ ¸tÉ:-Þ4få\¬C}Çbnjǔ²Óý·ó/òÖ†…ËÏÍÆ§"f˜6³@üaž§¦˜—ä5Ù”f‡fø`š‚¶¢iÑrs;¢Teïá9#%¾o væ/§vvùÚ´õí›äåÿ—àÿþO qh‘Dð@±�À¿�Š»öB endstream endobj 1 0 obj << /Creator( TeX output 2004.10.19:1439) /Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks) /CreationDate(D:20041019143951+01'00') >> endobj 5 0 obj << /Type/Page /Resources 6 0 R /Contents[20 0 R 4 0 R 21 0 R 22 0 R] /Parent 3 0 R >> endobj 3 0 obj << /Type/Pages /Count 1 /Kids[5 0 R] /MediaBox[0 0 595 842] >> endobj 20 0 obj << /Length 1 >> stream endstream endobj 22 0 obj << /Length 1 >> stream endstream endobj 4 0 obj << /Length 33 >> stream 1.00028 0 0 1.00028 72 769.82 cm endstream endobj 24 0 obj << >> endobj 25 0 obj null endobj 26 0 obj << >> endobj 2 0 obj << /Type/Catalog /Pages 3 0 R /Outlines 24 0 R /Threads 25 0 R /Names 26 0 R >> endobj xref 0 27 0000000000 65535 f 0000030427 00000 n 0000031017 00000 n 0000030692 00000 n 0000030870 00000 n 0000030591 00000 n 0000006497 00000 n 0000000009 00000 n 0000006744 00000 n 0000006558 00000 n 0000000913 00000 n 0000019245 00000 n 0000019055 00000 n 0000001829 00000 n 0000022901 00000 n 0000022712 00000 n 0000002765 00000 n 0000026320 00000 n 0000026132 00000 n 0000003711 00000 n 0000030770 00000 n 0000004710 00000 n 0000030820 00000 n 0000006431 00000 n 0000030952 00000 n 0000030974 00000 n 0000030995 00000 n trailer << /Size 27 /Root 2 0 R /Info 1 0 R >> startxref 31112 %%EOF %BeginExifToolUpdate 1 0 obj << /Creator ( TeX output 2004.10.19:1439) /Producer (dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks) /CreationDate (D:20041019143951+01'00') /Author (R. Llull) /Title (Llibre de les meravelles) >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R /Outlines 24 0 R /Threads 25 0 R /Names 26 0 R /Metadata 27 0 R >> endobj 27 0 obj << /Type /Metadata /Subtype /XML /Length 3807 >> stream <?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 7.24'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:bibtex='http://www.molspaces.com/cb2bib'> <bibtex:abstract>This is a cb2Bib pdf import example. Llibre de les meravelles A short summary here. Llibre de les meravelles A short summary here. Llibre de les meravelles A short summary here. Llibre de les meravelles A short summary here.</bibtex:abstract> <bibtex:author>R. Llull</bibtex:author> <bibtex:journal>Ars Magna</bibtex:journal> <bibtex:pages>1243 - 1249</bibtex:pages> <bibtex:title>Llibre de les meravelles</bibtex:title> <bibtex:type>article</bibtex:type> <bibtex:url>http://ca.wikipedia.org/wiki/Llull</bibtex:url> <bibtex:volume>74</bibtex:volume> <bibtex:year>1287</bibtex:year> </rdf:Description> <rdf:Description rdf:about='' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:title> <rdf:Alt> <rdf:li xml:lang='x-default'>Llibre de les meravelles</rdf:li> </rdf:Alt> </dc:title> <dc:type> <rdf:Bag> <rdf:li>article</rdf:li> </rdf:Bag> </dc:type> </rdf:Description> <rdf:Description rdf:about='' xmlns:pdf='http://ns.adobe.com/pdf/1.3/'> <pdf:Author>R. Llull</pdf:Author> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?> endstream endobj xref 0 3 0000000000 65535 f 0000031752 00000 n 0000031972 00000 n 27 1 0000032085 00000 n trailer << /Size 28 /Root 2 0 R /Info 1 0 R /Prev 31112 >> startxref 35976 %%EOF %EndExifToolUpdate 31731 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/testPDFImport/PaxHeaders.3194/nomeaning3.pdf�������������������������������������������0000644�0000000�0000000�00000000073�13124510115�017562� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 29 ctime=1498583182.67525783 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/testPDFImport/nomeaning3.pdf�����������������������������������������������������������0000644�0001750�0000144�00000075542�13124510115�021165� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.2 7 0 obj << /Type/Encoding /Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis] >> endobj 10 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F1 /FontDescriptor 9 0 R /BaseFont/DBSFOS+CMR10 /FirstChar 33 /LastChar 196 /Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3 777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 500] >> endobj 13 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F2 /FontDescriptor 12 0 R /BaseFont/TXSURH+CMBX10 /FirstChar 33 /LastChar 196 /Widths[350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1 575 1150 575 575 575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 691.7 958.3 894.4 805.6 766.7 900 830.6 894.4 830.6 894.4 0 0 830.6 670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 575] >> endobj 16 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F3 /FontDescriptor 15 0 R /BaseFont/TNADRM+CMBX12 /FirstChar 33 /LastChar 196 /Widths[342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500 562.5 1125 562.5 562.5 562.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 675.9 937.5 875 787 750 879.6 812.5 875 812.5 875 0 0 812.5 656.2 625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 562.5] >> endobj 19 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F4 /FontDescriptor 18 0 R /BaseFont/GUFCLH+CMBX9 /FirstChar 33 /LastChar 196 /Widths[360.2 617.6 986.1 591.7 986.1 920.4 328.7 460.2 460.2 591.7 920.4 328.7 394.4 328.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 328.7 328.7 360.2 920.4 558.8 558.8 920.4 892.9 840.9 854.6 906.6 776.5 743.7 929.9 924.4 446.3 610.8 925.8 710.8 1121.6 924.4 888.9 808 888.9 886.7 657.4 823.1 908.6 892.9 1221.6 892.9 892.9 723.1 328.7 617.6 328.7 591.7 328.7 328.7 575.2 657.4 525.9 657.4 543 361.6 591.7 657.4 328.7 361.6 624.5 328.7 986.1 657.4 591.7 657.4 624.5 488.1 466.8 460.2 657.4 624.5 854.6 624.5 624.5 525.9 591.7 1183.3 591.7 591.7 591.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 710.8 986.1 920.4 827.2 788.9 924.4 854.6 920.4 854.6 920.4 0 0 854.6 690.3 657.4 657.4 986.1 986.1 328.7 361.6 591.7 591.7 591.7 591.7 591.7 892.9 525.9 616.8 854.6 920.4 591.7 1071 1202.5 920.4 328.7 591.7] >> endobj 21 0 obj << /Filter[/FlateDecode] /Length 1601 >> stream xÚ}WKsÛ6¾÷WèhƤI‚$ÈÞì6IÓ©›Œã´Óiz€$HF’*@ºI}÷J–åæ"€‹ÝÅî~û€Yše‹Ý‚–׋ë»ËWù¢MÛzq·]$Mš•ñëÇ?Å•ËDJ)nô®×Ë¿î~¾|U¸«2•ù"#ÖR)>>*ËUš7ñø‚õä…Lò¢Vj‰R¥‘,(yž¶I–YZ5‹4´Í#KT%:´äéM2-Õ")dÚæÄ}«»¡_&U“‰_Üäó—‹fv/ R6©$‰7é2Éó¦ï?ÜÜ\Ý.[%þxzK¢ª4Ç{ª´f©»{ f•y!x•BóçzU\Ûï÷ˤhÄfË ¶Ão%?2Á|ÑÝÞ¸¿nröÉì')¸BC ™F¦eE—‡{Ò!óF„©ë´ÿÊ÷Æ£¶R¶1j@‹Úd®@‹|S/„ÉßÇÊ ¤³²¦ e`õ¬ ·epM©šf–ÎÿWš|<ÞÉ xÔÉs0í1” R¤XÀyšG$‘yÆSŠë7o_ß^½ûéÍZQ@Í‚$Õa=U–!ŽU–CÞ;7øµf"#9ÐïšIö~ x~,êzYªB°má„U¸(¼ú¿'F(£¤* ¨gæ9´(+ëVlu·ÌóŒ•˦ÅtÃW+Ñ+Ê›ªÊÅ»%çT<š(Ä áÁnân §&h>hèú>ðØ…Õ¨¡]x‚=ã0zÓ/ÁëQ'S¨)¡{¼òkˆ_+Ýo¶!Ÿq æaYUB3Ï7¼SË"1ÆÁ®-‡B9àQ-BŒ¼Õîi¶pØXÖxXZ¨8³±kí“`ø[ãÒ LË´¸¸x¶÷$óøjª$JUdÜk?ÚYÿ M€>[,ÝÐňQd•pÃ*˜N¤f¨¹OÑ6\qE<ÝDŠúþµav´¹ˆi‡,S˜\ò|euºÜj¢¸ôi2mX´ègRIsäÖLvqÝ^×Þ†ÑB¢aK“ÐpȔճaâj”’ÚÙQSÐdu B"•t#·œú7Ìä^£åõêâÀω‡{«ÇOÚ3;·_H’gÃâ^¼õÖPGNHÊËöx?L�'º¿‰‘>)äÙÄÓ2Ë0,€ÐŠ 4ÓóêœÏ+QÉ`„èQ»“< cÐê¢.pPæmƒ½Í&>ê[LY0é·eCó¨€N¨(àÛ8&ì½ífšžÆa>îùøè!R£é¸¥®5„ƒ]D†÷q(!p%¨ÍptcØYb¦¼¬Ô¬pãœéwSüx˜ÜN{l–EFf#ñIPÀÓ¦•âeÏ Ý©qLB®€—B’/¨?¦W 2j<Åuªpì†0zÌäCXQÍvðæí‰w뙨Ï-a;<æ7^ÍÊ`u4è•cC‡ ¹”T†xr´Ø©�‘j¼ø½PÇ"F*—ir²@Ä”*ź]–ÐFc¿ð~4ÝžZ‚ÊÅfÚM§á@ž‚ž7Äê;Ã[Íý¨ªa |,”\"q= -¥Áîz{f‡°´Ômš2VØ3¸‘HP»!Vêz$À°ã¬‡Žù Í™‹'M)�¾# ` ‰:žW04¢;UD¦Èy„†8¾L¸|EÈt64¨Ö›ÙÈ–Ëáxq¶qÎc "e÷8?½YÍdêŸÉ–G΢’hõ쀌ÀqIY„«‹ß4t©W¡0ä;Æ¢P™ˆ^PUWØ 0c h“¯ÁÄî–¿ölÏìÁ>Xâõ0Ž[h‘ü”âwëîëøãcW½ýŸ$Ð¥¯Ünê©åÕ2Ž9I%J*KÅíÔr‹9Do†ýHÉ!›ø¨gm,>¤õÚ{È£ãtÀgFŠ‹ Ê;ÏóÓþ %Æé!Û˜P°1Žõ½:²Ãâ@ú3¹v_t¾'e¶˜pœôÕC�²€l�lÐLu0“©…èàñs3éé|9³DóKÃâ„»x3àá�3à½3ýÙ#ºQiÑ¿¡*ÍêÃ#º8}J—âýÛ·K ÿðòüŸ‘J¥„·´JÅÿŒpø˜/ õg»gc¶žÃOz ׸ÿþòr­Óìg‹~cu:øÝ%’.ÿá/ï¾ûôªÕ¼ endstream endobj 23 0 obj << /F1 10 0 R /F2 13 0 R /F3 16 0 R /F4 19 0 R >> endobj 6 0 obj << /ProcSet[/PDF/Text/ImageC] /Font 23 0 R >> endobj 9 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-251 -250 1009 969] /FontName/DBSFOS+CMR10 /ItalicAngle 0 /StemV 69 /FontFile 8 0 R /Flags 4 >> endobj 8 0 obj << /Filter[/FlateDecode] /Length1 720 /Length2 11820 /Length3 533 /Length 12377 >> stream xÚí•UP%Á¶¦qww6 lÜ¡q·Æ¥±;4n[#»»»»»»Cãîî·Ï9sïÄœ;/ó61U™kýõçW+WDR‘}Sa6¶34‘°³ubd²ðDå•Y˜,@ff**Q“…­ÈÉ„ÀÂÃà 01ü;øûðr°ór°" PDíìÝ,ÌÌ�´¢tÿPq„mL,Œ@¶�y“¹‰Í_#5@ÅÎÈÂÄÉ�[[”ÿñ‰#@ÙÄÑÄÁÅĈ€ÀÂ0¶0rš˜YØ"0ýƒJÚÖÔÀõ¯°±³ý¦\LÿrhÿIJøËilgkí061E`R°û»žÉ_šÿc°ÿ ׿›K8[[+€lþaÿZý·4ÈÆÂÚýìlìL�òvÆ&¶ÿ.Õ0ù›¼‰±…³Í¿g¥@ÖF¶fÖ&�æ…,%,ÜLŒ¿Y8™LAÖŽ&ÿŒ›Øÿ;ÄßÊýILDEBQ…þ_Ûú¯ä7…­“ª»ýÙþCýÏ9Ëÿœÿ-ƒ…à;óßú²üþ½ÿs¤ûo‹‰ÛÙ[ØšTœ@¶Æ ãÿ üw(;7OFVÀß×ß>cfæðpòüü_•j¶?œM¤Å�ÌÌÌ\<lÿŒ9;8˜Ø:ý³þþñÎM-þÖÇÄÄÍÄÁWEIžöŒv‡G¿ŒšÖî­(ÔÏŸ_ëÃZ`õ÷~sÒ¶W5ÍýàZƒ‚ÕFƒþÑmùëç¸ 7£ÊxÔÜOþéÕŽÑØ@+uD!…GtöêÛ•ö· D�zËT³z¯`B¿6S'Ê“æOR §tV¥·ZÚÐ&EJìoKB$-Ñó·EUFJÉ"ä£=b6kc+ØkiŸ¡ nrVÜÉ+âˆHdΖàŽ0â^Þ†=³·0ì;¦›o|z?Ã"™¾_}ØlM;Æl)VÈà­ï¤ÒGYÐÓÝ@ðz¡˜nþ^ÖÁº~’&3ãðQ*:’X¢^ÈûMù´Gî3=~ˆ@òÄ=wG°h·nF¶Ë8·Eæ:÷±5bP0&Âò¼ÄSõ¬|”-î£ÝÊò:%„sú# u¨ê~wÿ–ËÔó9O²Tÿ¶’á®(––ž#§0¢aOž—w÷€—Ò|SÛ׳y°Çù§ä…\Ãús™Àp/ª®cúÆÓ§|ùKºjçB^éׂºÄN#ZÑ–Æö˜FlM‚dÝ+ðQƒ ‹ÑØ)8ÿ³àêÜ6Ì2{(¹*¢i•IÔ—}Ûé¨p04 <X°4Ç2Œâ)¬QëWü_¤ÀžÉM«°eŒœ? ÓÊ¡'Ù±ÍÍŠüØp­joÑ9ÍH€bFaI8ÞÀc–œÞ ºè¶!ð?ÃØ¶6Ge–òBE˜ž¹Î· ¿>rwÖüÕ+z ŸÇ!}¹ò½£æ-žÃôø±;d&…æ„ÀÉ>’,—U—k44äö"(%x&ö«œ7­îW½ÇäÛÄEýÉa3#”?¥¸¾°aÿr‚_MY Ì¢­¢´NÝ:G?€b‚áKç2›ÜŒ &ÖgxÐÅ[g˜¯z·I5©*ŒÝ›™á<Œ´c($»²É{"K0ò «A ZЇ£wâNŸ¿ËæKÆúhPOdñ»nÖ1ü¡Ê£2±@ó*T94´øöW›gŠ/ÒçÅ÷œÔÔItQÏí·«ö3DU¾D±"¢êé0íŽ;[¤ÇÑR–p¯bl|l"D¨'’^01¼.ǵ*t“ÔTMècžÏgô ga—Í=yõä OüùÄ w±q²œ=laÞºm- ðE~ïd_bW IQ×ɸ',¨[ „×…µW`è £doÛ7FÁ”õ³JcrdeuŸèñè½K»3Aþö�U×2ð0.b~ zÁ$%¿™`ÑÉ1¨èŒÀ)—NuÝÃg]$Y[í¨CçIgfËn'ò«Ã£äïƒqŒdÍO\eê ’óî±Â,Ȧ±1QSax©n‹Fa^õŒ!NgŽ3°& #rˆ2þlì7+LvÏŠñÄïš— ‡Ñ cdZ-*lŽcæ=¸îæ]¹ˆ)˜ÉÞ-–ÀRô©eîƒR©âL›ÍÛ—íœj·Î¤,{5ËÄíˆë ‰Wå¸_`Žàª•ƒ¨ªrÒ×.Ü {Y‰¼&HìzÛN¥~¦²“¶ÌIzcXi¼HÇlonÓËÔÊ’Ä—Ø21~¸×°@äsêVóc¹^þž‡ÄpT~ï(ÅîÑéÇ<ÖÃg5Z)Ê •tO&º•½Ê^„ß¼ç;VóC uVéà»¶ éç3iä E¾ÂM;vÁ]î¦TÙŠLt± 0·!é!™r…Ùq ÆJ=­üY7[V¢ƒ:5²cî<¬ä(&ô¶Ú­˜@ÍsH´ç Øûå;$$Ðo“E$¦û|»=CÝX¨ýLÄ€NçdbAvzGß*cù¥ŸTœoÜ×uû ¼Š«7½“ð|Ñûvá"’Ñë¸FqªjŠÌŽz–æ¤)l[«¾²mûˆsûJ9n«„©%•™ª–ý$d–’¬Ø£"¥ù >óa•i`_ÂÔc¾9#´‰[Z‹ITú#È\쳕¯1{íª¤òe Åè T!Nì›å, u'8Ͳ…S=õݯOÃ~üàw¨°%cÕyúmK4 žî6£“~Ûj˜Ç§  ®N¸yn ‡·Ë§¦Ú3øpQ#MË�²lt>úëe•—pú‹\²Aøä)yîúTAÙ1.²äœÄ‘S››±ýT­ ° H¢Ô¥×–¾£ãƒMñõQeRÞ[-“ç×Øáºª)¼³ßmLèÝD}ýï,ìy[VvrÎgɪ¦ý÷Ð>XÎ#$º…]ÎR\«ÏGæ§ÈK¶ýsDá$+壎Ûci±mA‚ñ´}0 Q±¼1l# †¶tæ Šùl-öÔœ¯Ë^º~ý7n8!ß2ôEÔ‡<‚t’ò#ñ6m·ç½¼ØŽ+Ƚ— ®Ì\,…·Ðº.Bs–0Cšj%´prŽ8a-A›E.^n1‡BBÇâæy¥bÄ!!È6Q;î°ZÔ£øˆTèîß:iJ)˜SghÏìiÖ‡ÙÑ3iñB:›Íi× O:{ÃxM }ˆ„ûv1ÆÓ:ù‚YDôcSƒÉL™ÔÀRÕ;z4»a//(èê±vÊ”osE}*‹1KžÙ,ÃBÃw¼äHoNé»r41†^ÙNÎ<F³ûIñÒ6j•#vïR'ïµYaí‘1qŒ Õ¤&§«²—üø’Ì`È ƒ Ú^Jx6»R2³Ì÷ûäÚ`Jr‚…ÙAÁú—Õ¡UªÎâS®F«0ƉÉF® !—£:™[äg˜3¥vRü2<ú*òžû´z–€Ÿ*Å%翎;hªÆ:rù“]Š—§ÆéR¢Èþ¸L„,`iÀýà²&û––p‚=þæàDе�×DÇ‹»b m?Ÿ¾y:¹r¤îJêspÒ:ûõ„A”˜¯'P3( ‰`Sp Í}I”OƒJUÌDã´;z|ÑIvñì+M³œh]ÖŽdóv·q¥ «ŠF®ç÷4zÌuó‰¥=ù”ekc*“š7.  ˜T­‡—X£.>´<ïHzÛ½©ö¡úŽaª£¸ìP|(КW³­yì’]—ÅmxšØŠºËGJ[‡oÎfš”§š}Ÿ³lÝ”õTˆûmôø× ºÎå¾yC„/¹«H+ÌÑÇÍÇÆý1}•{ßµ€ 5@÷Væ(ˆIC&J9§{^õv_ÚêÈ#³É½ê )‰vrëj>ÕUÃÊ,>ñ„ɱ÷ŠFÉû@ö4Ò1¯ôJ4¢â¬é|@×)gÃóO ̺µã–¸V So6Êñb—ñ …HgÌFÚt^e#|ý²'Ö¥×V÷ŽQÄWéQ=µ#›9©<ZUÛ^ÈNÐY¨ËNJrJñ\)ç‡tyhËö"6U 0q°.6…xùJšõÛs‚¹· ¾âç÷½› ZGÞH «àõ`7û\ö¤?øÝÆOd¤^±Šµ¯ÆÛçÒ±¡_±s¯²%@ÏØY÷Çë”ì§AÞ‘/ ®(7Õío¼­4laM­äJêñ.“3nq°{<K7EZ¾8…6?V´-SÏåý`hu¶™d K®)2êU2ü  âw®ªoÞø ˜>Kì"w®êzŒbvù©]¾,PÆ•"-Ðïã<W`Ño‹¥bPóµ~÷éêzÀ'ËaòÆ}S¾œÍ±“š¤FTðyǘŒ¥cejl´37¹Â÷Y±%)ׂì¶ó¼¥Pº‹Û_‘WBfñøîj‡ú =$R'J~謎Â_Àrá }_ÅØüZgµìvBÚ{¢b±'J³É¥ü^rpkUضNø¥¨óǘéEd#Ìcíyäi5¸]ÐM ð®ä[ 8ú,€WˆÖ•©øË ŽL™ßV[«’ zŠ$P€Ñ:ûýˆqaÍÿ�Õ´"DÆÀ”VL´DêkÙ« ãë݆ën\rÂ~›ÃçÆ9> îs0ð‹m—,S–ÑDªÍ·O(: ¯ªû<Êh»‘îç/…;Ø)¡Ùq;†+ªYÑAo é¦ÁM³â¦ë]km—4[X4§fCc&GÍÕà=o´O\3HÀM¤ÿ¼¨Äúõû ñÝÔ7læ:®H–Üå€\ª»`+®õ;n~Ð ¢.U&ØŒç¯D¢Ð÷Y’ziE:7L[r9}Ÿ|zUŽ@hrH™>°øÖOVµQ©ßõ R}³8vñý†ó‚;½9w¼Îc+ÜÆ*ªý_Øa“P¤_[Ìd`ßܿй\Bæ#ñÇÐíÖAHGv}UV}ƒìn|ó^Ÿl+<e¾óÂK!hœTx5á_ÄëÈH™ÓiwÕ ƒ“4žø³õ0Çq$Ú’X›ð,ŒÙaОQúH)5›Û«lý7ïçs““–9+Ó²ê �ÈèÙja7d6Õ‚µ;™N®ÍÜÕKÅà &‡¸´Æ*ÞàŸèŸþ‚wsJzg$0˜\1( –I)kT—í¾˜‚ŽíËjÌ\à|_X¡¾¦¾©6# M÷gõh\ø]jÅ÷¯Š2M„Û?¤›Ï_3Ìa• ù]gzDè‹12ëƒ!£Ï£ñé ¿ÉI Ü ÎRŠeÑÁ«ÅÞ‘EB;¹´+Âî­>³ãˆ™uöNýü$m“2ÙÆ©ÔéÛ¹àW Ñ,n&ÕŽAP¥d[h©|ÿ,"�p‡7%&éCIøDçéPIzüh²­´¡]ŽèÖº¥œt˜éyˆº“öš]7WH8”½]”Úw'´ÁÔC`±OΕWþµSõí•„æ`>$ÐÝ›;ƒ¿Vz!.‘¼òVÉן *«Xhv>×Ô ×Ø'ºS¬b}CK0Œ5˜„Šr‚•ƒæ‰©ø\7°ÆÎ*‚ Нy™xB©¯i•ðÂy6™+ÌDÉ‚Æ8“šÃ›s%Ü„•S,„ÁeSøŸ,s‰PR6%DÈÌØtƒ|;|ã¿?8—{_.»ë>vqLñ=Î/ð¹/tœï½}õM&a¾\ <~j`ÄÔ‰—ˆ}+Ð@¦ÜÝù’(z­¥:ö©1Û’Ðb×ZgÙ¶F"Éoªð²ù>“Ç@I»ûµ†Ûx¢Kv�¤-•É›À(F7gzŸã¶¨pDÐñ‚Ê_Yþ§úO¿ÄY fÊA³�P2kš¼-õŒv‹m”à’Þ×—–¥=1zŒ6[O§Ö?cþK–7º»ðùŽÑCaG/;Ov“ô9{gsqz¿Ø‘= \)•É·æ­J´+Ióv)%€(½z´9ìDø›¸TÌ7“|sý1ì�’Ë?/6óö¤cЙ'„[Rs”îH#zZ$&%‹ƒI4(ì\Þò‡µ@wº¼Íòò“@­[0¾—­[=3ÌZÁ¹dÅO4F\ª¯»ª×è-ƒñ<TÛäå™{J¾2ŽN•ó$Ÿ¼v]7Òmá}hÓ#´¸$Œ®¢ºÌ—`ª6 ¦3R0Ú�;CØUyþfâ•Ú}¨F*´…\ÝðΕß{Ñõ%h"š„]™jZs‚? Jà!ÍVŠÉÐ1Ì} z1GSEÔè¥Î @Á®f‘¾4DÍÔ7ÿ¤È¸o# ¸ÊÁÅ/H%TVý … M¦ñâŸZöØ“…6ºëɼÑ#[QÈ5]“ùmNršO5üôs&]¶ÕÖþÕ!²ä §|@¥­/„Ë‘ºQºZ!!+þQâİÓïêY’Ïïæ8Ƥwig]x5z9;d[&B ꣊ùï;ÚA·¹‰Bwb£ÒLàÔêEÍΗBñE—[ÉäÏ•3!‚BÏ?ä×Mˆš¸5FaPóCL…Mxó$méÇ.ùŲº@¦Q%F5ŒwÍ߉ՖCÖ¦¿û—©}·¶$õžâåÙ Ó0ÅÆµô|R.4!g"®óoåÐãc8HiªUŸëŽldEY?BßïÍ£:¶‘fi¦úh|*æÐ²QÅ·ê£K5:®B:¨Ž5¼atºO¿zÕ¸ì C>ò‘àûÅ1ŽÆt07´¥÷ÉïæMôè„E¦»{±BJ0ŸsÙqƒ{¹wd]ÈÂøD$²Z&ÿ$¢@Tz(´¦¶ ÖihØû+MRKä§Bï;¾§¡4B ‹Ã)•Rœ?Ïj޲þO„”=èo`a Mü«Uã+æ—½øT9À$c$‹ÿ…2sŒ/°2üàU¦ÆZyf1S,39&³wøsÕP¨¢¬çœ)¯ëñÐÙþ¨f$¡÷”ÿ6ÀÜ2,š6Ý»‚{ý×H;¬Š9ÿ=¶ãeqxŸ±þ˜¦ÏЀÁàðEOŒ-Tèû=úÇ4.i¢Zgå;,Âé ¡¾l\ ê*‰(µ}+ÅÉËSJs0Dšùš’X…_Ÿ.]ËkÏ·äÕ{x0¢_ª]PMÇ èJów±Ä,¶0b‘Åšx4Q ²J¾Z‡CjI[ëg"_¬É; Ë\8 P]e{©C»ozÄDj_«d ˱î¾Ðé·ô n¼­Iޏ§?3(âPay…RèBIP<DÏ÷5‘�ÃN¿¨¹÷Ð"V›6!üd’ݾoü¡;ðV¸ÎÁó¬:1ô4{»Är8Çî·;çÙRwrS‡ì7ô|è]éä)w–bÑ{ìw… Ké]ï×d¾%¶ä²h7öb Í@˜è«õLª‡0gQâãîM÷GDz_bäN¸‡ÙyŒmù̳!¨È°-îáî‰Þôž™µî¥$¤Y7ŽQjfd@ƒ×Mvé&9Ÿ¿Øz¤Õ‘»)·ãég, ™‘»¬ÃOk nñú$(‰•\jG7ù£ìTQǪ(?:Ø#)-Í©^øMY7'ŸµçºlƒÄá“q8{"¼™ÈènÜügOc€ŒH ´æÓùùü¯kÇ`ö°pŠš¡–zô„àã°ºN>lŸ—aÕI3Ngìíf.†dpÌ.ºÛÏÑÞò`gX ŠÅ3QÝ?³‘\‡ Þì!~ÿÕXÊÉPÞ0Í®6Ÿ1ä}<;õHŠ‚®ÊªœHÊk-Ăӻ#y¤cwµÙ-žáý· ­˜ÏÖ”¯ÀEçnñ=iv¦`“ŸZçJŠwïE± =smiáó:êåHë—R‚ÈR/[µ™t D£Vò8›¡i¹tˆ÷pnR8˜ÀßùjW‡¦(¢—èež ì;7F2³/H¼0ª"µà‘Åhƒ-¸B4¼ó§¾!„}%Gw*#V©²!_Lƒ!'ʱñÈõÃ:ÈCˆÌ/¬Å†ËòÃ\Â�PЩTݼËßìý<öFL…‰Ñ(z^ç›ÆeäaJ BA•ñWläû±oVî»öb…kzϲ5‘†¦†r™ C¾³¿íÇâ ?®Û•µy¸ƒO-ž=ä‰]’)x¹øý,64’ÇìúÚ/ºDfõ)š �!ñ’»/¤GT2ëÊ•ýËâp:ùٰ驲rƒ oE,’mKIŽwm_qãâ;O.hól›u;:"`®žï×ÝdføËŠÊäW1Eí—Xkg2˜®ã¤Ï öÄÄV%œA¿ÆÝ­&‘9"Þ§HQ¼mõ5 ÝAd•öÆÈ‹lZ'C.9 ÜDSÓAÞæ•6‡<&³¹NB+wt>ðZÞkÚ{–ŽöSi ‚÷kHy5Ë=9¯-’ÒþséMÈrÇã63æ0:?8ýì>ô¿ ÃR"œîƒã•§b¸“b\ÅÛ»‹1âd‹çÃè2¦ÖR¹‚2Ji/fIÄ6ødî²_½Ú‘ÎSrˆä§éFöÄ¥2Kµ±¦X9[ÜÜß„ÈZäA¨`Ü4̺â–0:h5iÝ>ðn|PÓJ¡Ú¬z;õÌáßï´¸=BC.4ŸŽ„…„¾:$ jY5y—%@4ÅfrrLí^_;‰Œ%?Ö­%ÙSÏøÕ'§v˜([]p màEà[©…G.…Müh|î˜"¢yfú£¦ù™š¹Î]bšö¬Èü‚äQïxÝŸvøm±ÆAçð2³¡­dW' ª?\:)Aôª1Úf6ÖEPº$]k…ñÅ h™y]­  óµžái§®Æl ÛåüvVãšO ¶ ìâöTýMªù žnð ž9¾7âë„á=7Z&}"hŒ;Hú+Ž5°÷=€ÉÁŸµŸ´ül`ûË Rš¶ucÏ­Zü2ŸQMÏ®)ƒ æé½RÏÁt'âX–4_LÚ“Ð7­¶òdˆü 6Ü™NrOÃÓÓÒÈ13vçÌå„?ÈìúbhÚäRŽ þŠ5[àƒÐW‚ìõ~ߺ'ñµGØõƒ>Ú²QÚ.§z—m“oŒ·™®í;~cœHF×ÚÕ˜‰¾qƒÜX4g¨£S±%Ÿ@䆓:×qLdåÔ“™ü â Éç b{æýI}ð(y'4¿hΤœ°BýÆþ§Ð7óËòÎMÄ›%õTÖ¿g.~œh\¼ÁhÏÔ|—ùë"åoËÁ Ô̤ë�äå‘uõ½Õ/ç$Ð4t«›©Ç#ï #»œœe\ZDT[’~ çÐþ¸Õ$L»PÙQ.%ì÷ÌÂ= Án ¼ÈŠ §‚p̵DN`(Lù´Êm•$x 2¬èÙÉ0E–Éeõé ¸×„.;0ÏÊ2ïš½ãnDoØM%çc¿²°C]YH(ì±ìØ ’¾Q4 ¸ŠÅ¿Ë%Ú`Âz5ò&Çß_Ÿõ:–ʬ&²5˜GšQÊ›jÒ‡qf©H¯êÑæÅ™¦¶Âs§´´PO(ÿ€»% 9,=Àv•3äPj{*“«Aù.þ®Ìúle¥×-rMÆûöRPi¡Ë",â 'N¬;–8¹-Œ…ŒÉƒ´ô¨™<YW;¤¥U›XFi óséRÀ°&Ëùµ®Ñ¬½mG”:á”ДS¥îá¨qëvµI‰Í¼þšø}�('ïoF}˜Äõ•SüâÛ]´0ûk+ãê.¨ÒמîJ×ÊbèÇ“a¹MH¦ŸÈGssl½:ågÕ X½êpS dKÐ}ç.CøŒf3;Hv–ñûùU0é‘%ȳÒ'¹`†¸SOöj×þ@¡ôé±€‚j7üæ·ßq1)öåŠéóþÈmêê’—ôŒÛT‡ß€‘¾¢,k“ OG=5ƒ=/³m_IþD䙄·w´Ð2s¿«|`¾VØ7Ó—Hž£áïÏÖåã¶2CLMºD6ðx˜—Õà>çߥm~À}ü˜2¯È~–µ§ñ¢žVø¶ßƒEKoÌ¢Ã0�pèRÌ<ã5þ®=­8®1™<ýº©üªŽocc/îrt#綃öNn‰ÇÇU%†$ šl©Ñ£ÊðÜ;½•Ò Ç!ÍéyÃh8„‡sQ{]xTèë,QM¯,àri«ü÷p_ð´N<•Íj1”.ÕܱÝûäm³k»´¸i ýä3~î$dwâç"e%Aì>»ÆS¤•ì(}?fƒäŠp˜yXRvÞ[º¦BIw‹—œúC±ø89½ȪíkÔ¬§ o?9Yt/7{Q^޳±Zòí’ßmœ'—$µÀ•à-=¢V J6犷€SPw*xíëït—N²|–¬‹Ä µžÔÉp•KÖž¡RFr& Êë&O»¨»V¹0Ò—~ ;|ì¼]Ò‡ûäl r½_å†jáÝC}u0sóPZ#B0G ßåWè¾A#³írǃ?®­ÇáLŽN|´Çœ²m®Eûb.®ÑÜïÁA¯å˜ån/>ê(Ñúé?ßpŠ…z«D>h/aò…ÌÞ{½ÈÎ&—LÑ›ßÝ}Kø•<^”mº[‹º»½¬îI$XŠÆLD_ëý1bÖ0UªaÀyï®K™«÷)MݳÚL.,Òß™“¥ÎjÃüæªR(v3‰½ioWöÌT9óüYê¾Ë vS9LƒÏo‹ˆÚÛ3Æ3Uˆ  ÝÌ$1§™à„î,h¯«§Ä+íá«…yƒÀ63c.ÌÆ‡~,_ÝÀêI0&¿xsê¥oý!ã#P KÔé�7Ó `reõØMªÕoGP!JT 3÷ÒømŸ‹éÂìéì[HÐæT•¿Ôy3°†y—@eÿïaHúÔ«¥Itã…~Ÿ¢3ƒ^l/gôë¼$‰¬V=ÞR€ˆðýfÕ^¼hM’¹­inñ1:IoÒ£nz½ÞDXóry˂ǒ:Îq9XÞLŽUGVA=Ý«m¯Eég$WÁ;s­ˆŽ¼&Á·GßFЬ«„ÞÁ¹c­ó7ò³¾š*r—¸‰BÊ=ž\mž÷b:I†~d~‹õ?gP�cX»o“„z݈N-Fá(WWÒzÊXÚŽ¢º-—ñ•w*œð¼Â×vœAÐÒ'Èx«Aî–Ëå¨ñæXÛ=›þÙf�Ú¤½ì*ÝÕr5“¡NÁµº$ŸE¯ t̶·ªë£™±¯ì¸^Á½›_äÃCÏ“šÎƒs ›Œ¼h‰ÚB¤Mð¨Jº|“šü4.ÿø8  ±ƒ‹¯%T,9Wõ‰H Ë”ÑO¢‹ÞTe+dZ¡;y2SrüaoP~^2–"8Êœì«'T¡Â9¢jþKü€íg'38“b°Oõ´Pž °þÄ«ßÚ÷>?b—õ®ñu ß”ùuôöéA­¬JÝ©|òÚã œi–C7NY£jÈb,kÎM Ó’¦U‡ogÈaF*Êc@¥rŽ1õŸš#éØÈ)#>.+Yðd§kB?$ÝË¿µ6ˆGÎá¾P¨‚Hdñ”‹÷á:³á-Xáü!†ß<21sŠ>%‹û«ZŒ6L†¼&PñK6gÐ×kÇŸ/Pö>"Õ™ Áf}iºka?Wݪ Go\Xš¡]pb «¸¾AH)ÓvlŽ•}‰»`AgZ“ Îo/ï.:ÄmçOĈOƒÚfUhÇtÔóPã‚È–ß{ÊñhÇ #ü[&>:]ɾ{ÐÏ+“Cö©ûpµT ¨[ªªO–ä{Y)áöÓlÐ[Ä™ ò3€zQL‘Ùò­¶ Xã¸#•S|/m¨çlÈÀSÞ´¾„¦^öÊ‚Œµ.ðÙ«T¬Ç¡ü¨^–Éi•\Q@–¾ï¢Ê4&4u="FP®p*Tl@¥š,"µ­Ò…¡Èvm6þ]Èwë¼…áòÀn¬˜·( ‚ùu…‘覀áþ[É" ¹÷}¬¿å÷êÑ ëö\Êp÷Ùÿ=O)™rv±XEG5d3)ן”§›)vÕ«kM1Ýl¼ýîXp&ªxz“ÕÕôÞ*ügQZ-UÊžX‰å;[4?ly;ƒÉÌEy ºH" “E(ÿ$ý8÷˜uÏ@`ßO¯2»U4I=*¸uF[RlspŸÍö¹Ž-G¢`­em»Óð¼ŠÃÀQó“ùxfÜ–¦æàdWÔI£¥S.â Ö!¡SuvR˜?«¥Š˜Þ¶ªs©°5*Ì“Éâz¿*S%õgwàfÈ ¬%R­ôÙ3•5޳e~tÊûµÙ‡»©‹D¼)åÑãK"^Gmô~ñ&4c¬­ÎøÊ²êéý·ˆ¹Ëâ›éwÍm•H&ÚjËkO²¬åëÙÇT³ xkoäT¸.«(>Ùyóu¼Ê„€‚á9ÚÈ`ÝÜ­taJÓŽÏ‚ @´îGÞl2+úëü«*ÍVb1D+„ÏÚKÀ7 ¾¬ÈÓ’ˆy“ïzÑ*.Úê%ÄÅÏ€ÓÖø‹[ÚOž†×Øzü“qÕ¤•is÷GD(¼mTðNËÚãª`¼Êg5lY/¢Nql À©•'T·(,"cÌU?·Ù Ì+pÓÀðB^5%SÕr_kõD ¬ø­þÊlºþ>í�Ý¥LÒU—ääôœv®gkö줙wÛQšÅag‡ÇöœwËŸÔ/ÛHtè 'Š#ëÛÔˆ{×Ky lÃŒ(<GÚk×;P“VÀ^ÖôY*ÇÄœFÛÍ“ÞÏ>MÂ¥¨Ú;wüNK Zã´ÜrŤP ¯ë}ã! Cß@}¥?;_p!cðT?ñŒ3º!åJ)ô(32Ú8JwhŒ9jŽüÉX£bÈDÍAÓ»W?¹‰É×°×ìø½ ÑÈÄaîÍ=ÇFM£ˆåÂAÙ³jÞÎ=3Š-ŸtEЙ(Gy g„͹ó€ö:¤ë'ì©";¼U"Æ[¢"{|º¢ Ô€œ\†Àä©?l†ç%—¿+ßÈr˜ö9è=tu]|œ x3¦Ö0e¼wä„ùg¥ݰÁ”‡ùK·{‚FàÖjÐË=3ivƒBi:؃ÀðØ- W„`ïíhVïök¢½£ÏnHó½Pۀࢉ›îè„ÄŽ‰ÄÎ ÊÍX„ó¼sQ”¸·­Mœû-‹S»ˆšdüá h“3i§hЊRÙÕ&µ¼o— p­_Òíã]4[œËáЇ"8ˆÂeåÝå2»ìMAûUï-(ô*2œ RžÏpïËdI½Ô¤*¨Îw}[igiÃãÿS亠ó7‹Ÿ'gNi÷Òû$eý|;X ú !Ún]g"µ“?®®öWÁއΈ6t”ŽS€+ÒB¢ûVT¢ƒ?¯;PR7o»ßÍüí¤c9ùàÏûòï‰ù]šS7Ó.©·öeG4-îìÜô™šÀ¬ëhT4½âLXÞAøôlÙçqÑiž*ô%H‹>¬ÀÙLï+ÚÛ[gèÖ½~Q‚héPï)¦¸yónñQ‰&4l"ÑL7щ®*-Ì~©ËŸÄ=ľÛÑŒ¥ÊÆâ_ùlYɉÅB8“<1#*€=‘6"£îT,@æŒÒAË%Çïý–ÀˆIø@Í+ª €dX˜"=ãY�ÿ7u–ÆÚM¢ƒè™ÜÓPè¦tÌ?²^ göaoˆJ,ºÿ¦;p†ïw|­§Í+"€ + s]e£Eäm­Š{ärKh6‹Ÿ±•dî,–LK¸‡ЊÅÃ?ƒ%Š Ö×P¿ªœП›¯ž?¸±•[À•#_îòü¨a/>Ë÷V£+˜)‰êÜ9ÎUÊyÔÐ2ú˜Øm¬ÚÏ6d}yÆ/>Iµë$^¯lkX2*÷3*Bêsu¬Þv~·§¦fÔñcW©~G}ˆfî Ì_^uŒH'dŒ{«RÙóïdÀwVKÊûGäorTtš(_ åïè)ѱ‡þ¤:P™ üt4B" T:×õ7Ñ_ 5|Èz Ïú¡Sv‘G†¸´-zþXG)Èo!†íõ^í%¬Iö dŽOnzi|ÚæŸruâ£VY46ÆYqf!J¾™|·I=S:ø£bu™zÒkíq[Ášˆ‡Û‚òRA¹ƒWîNxaQ¨š>I¦§ž,þ¿ìºì¾b—êæ`ªLeæ@)‚0¾LtË“9Ÿ.åK\Š΋H:2ëÎZ‰Ñ⥠îaDÖÌ>Á™ÍL2èM·’·#fp~Ù¼õò¤šÔ;Ñãèït‚ßÄW?%íÉü$ÓšZhFOnu¯v¤·ê%zÅC_¹ÇÄO./ ¬v_ƽRG”¢˜ûDtØ Z¿¥ËVÕ«§{³]yù…·<¼‘è"b7:>äàg£Ý—(ªL\”T•šíK¹›l»Ñæ´÷Æt, ÅË%Ÿ¹æ«aÄ…ÑKЧLø"4¼ @Ê#ÎÏí.û–†pöˆõjÌÑKÿŠ?¿Ct·^Jp(Ì žÐ} >‹tçMb¶¹o°Œ“4Šäç1"CfX\ °Lˆ3ðÉâ–áÕþ)“lb¬øÈqñîz|¡ =MpEû�<0ÅvdGóòÐxÄ¢eßÐYŒp½Õ·ë’†c@ Í²‘élÇrŠ™fx+¶Çn(&LÄ-œ;w§�'3z¾Â]:àwÒó³ò¿R+ÈûÚümÎÎÛöL`Eõ/aU¶Â}&æ/L¥ÊbIe—aí‹¶š:±Ùè{¯Oé³~_YËa”¬˜·²âîãeìÏY>ÛGŽpê>­<w*_%¬D?ž%”†Î‡<9^rñ¢®R‡é[;>oÑ^z©ÖüU>;êøh”™úowšudcŒ÷‹]¿-vUy‹Ù«âìØ_ ˆ…¯ï)‚xü"ú)WˆæCºÃ •ŸCã)–IE¶e‘ò&\bKÚiÆœb9˜µ}äåQ·ÈöþûxIØÍœìÍŸ=&Ü £ÛI(†"P9ë×D“J Mçã`ɱÎçÊdÔ“)tR¡ÊÄ+{X]:ý¸óÇ †"¿¹©<÷»kܲm±ý ˜ËàÚ ˜c}§»÷“•†ÛW^ÝH€¯«+”)”©1\±õ‡èÃhVj¥k*qÛ‹Sò…ó;d a«˜Hn÷» çS®~é {L­ÍY7ñ¼vJÈþ'û%þÆÔIÑè°.ÞÔ˜¿ã™ã–vè·©?åe8jvj˜°•3½n$,º¤XÒº˜ö\ñ;{þ¾T-®ÊR[Jì²õ Ê>Ý ù= •¿…ýÝ®ô»1û< ‘DâÖÚwžòk™(ŠÖǸo&ñΔ§6,~èF3ŒOó•i)ºËº˜ž_Í CN‰X›|¨¯Òùþ<•F\æÒ1^ÍÁE7ÒhBU‹S©ÐDÿX P1-ã¹£;¶*Ð*ì /_¯yIÂD†n1~2^á8‡ï•C[_œóÑ}—sîšÞ¼ñXI·)ŽÇ&É£‹9xÙ$Äo³ú2Õ¯]6¦˜I-nº!¨§ÑþƒÆÞ™?VM~�¿u©Ö(wÌ‚»o<üq¢ÜÜŒ^®lü”“SÔ‰;êá3qàš§‡yLˆ8ÇÞ­ÝkC =B¡ˆÔÊëàöpfép£9í°>:Ö4æ§7Oÿi?q¶Ÿšw,Œ²¡G›¥²ð!Ⱦ(-èuÂ×"J lV·ˆÆ~©(KôèÇ=å8‰ÏB I;»ø´Ò¥âÓŸ*„£Âн?®�W¶ï[HC’;ˆ~Ürµ#ÇW¾Aˆ€ÊXfbrIµ%À®Í8"éc£æwAìç|wõŠbë‘uñgÙGÌŸæT×u›Ûx „2¤‘Ò^#Ä«4W¶…{RìîÚ9ì¹þNtÒƒ_åûQ ðõ ¼˜A²¿_píXìâììɽŸ> àr‡²žÖù°R®²K¸]]r’æ}œ‡Ê«¥"Ñ)PÝi ³.£JÒcY 3ƒ Ú2OÞHè/A¦±`R¶_÷W¦‡´õÝ,¯_¶ƒ—A1 æGqLs¡TI#ZŸdB·¸,v=Æ<XE~©­Ô™¤h–÷p›‰Y°A))üi[lèØðë°´Ò?Š¡uÝ­Æ$€zÌò*NQ¤OUÒø,âT1%O®îƒô�9ů^8Ú^§D•½R¼z/ïAJAƵçZ¨÷ö߯×Û „5ï²TaI‚@¥Pn%g?ð<²37ŸÜ„J¨úP¯’¬XýxÓ=^rÇç¨H_à§²<¤À½u(Dn4mæY÷×l4µ‰·W¯2/¶a“˜ÿ//„ÿoðÿ„‘µ ÈÁÉÎä`…€ð% L÷ endstream endobj 12 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-301 -250 1164 946] /FontName/TXSURH+CMBX10 /ItalicAngle 0 /StemV 114 /FontFile 11 0 R /Flags 4 >> endobj 11 0 obj << /Filter[/FlateDecode] /Length1 721 /Length2 2808 /Length3 533 /Length 3352 >> stream xÚí’gXSÙÖÇa€ HUŠà¡)H ¡I、E@BrH †€áŠÒ14)Â�‚J‘&H“.R‚TFiR”*"½ˆR.:3÷>ïÌûå}Þo÷¹çœ{­õ?ÿõÛko1!k[i4Á4$àIÒr2rª€ž…®£“Bu!bbzDIÂðúH¨ È©¨À�CÐýhqô©**¨B• 1@àíOÄ\õ$âz?TÊ€$bPH<`$y‚¸# ØPä/�:X,`óãÀô‰~ Z‘“Ð p¯bðÙX&x ü{íëýgÉ$úqâ?I%€#N4õРDÖ’pÔ<¢ù?ƒý/\57ôÅb-‘¸ö?‡õ·:‡Áúÿ¡ à¼}I °  A"þ¯Rðw8]öomLHH,¥ƒ¿Šèï)Œ!† ¢­1$”'àÄú€?ó ýW„£Áý½ähkgc,ùDZþ^µFbð¤KþÞÿòý!ÿËý;>C.Cæ+w$<zÿ\¹ü¥›E@cðW[FÑÿJüJW—@¾)-d$ S<ºgrJ €Š‚Ò­ÿ©´Ãc®û‚&ú€" UVºø3‹ò%A<éçM8ÚòŸ±æh@ HQ [¸…ø’øè)è©+EçÄCú÷ò)Á!êvÊXÑ»kS¦ÊÎouhUyAÄö9ª®Ìo?|hzQ:$íu\ÿ-õ“Ñ݉aÿX³gÖ¶ÜaW(ÛISØ{Àlé°×õÕÚSµ’ãÔ²¬_ou ÝÉ€YÂ÷*Ä)5V¢ÜÖÃÚ‚uñ›ù¥(xª®phwKu>nìÕ÷Xú!%Ì’lîµs1õøˆó !ßkÇ|~1”²×€/Í^g„òè-•œ]mɆM­n–ÌŠ—2–ÜzÜÖ Å5MøÀdj£¯+HÄ甃tƒÃ/–£]ec‘œ¹Ó®)S÷ôœû¢&:«Â?™IpEvl|} s µÿL*¶N§nÔ/ähp­ ÚºŸ7Û£tÞT5›ò¬{£`guÍ‘“Üñvh© ˜‰Î¹5wr9b݈S‹I[bÆXm±óÌþ\šnÚ5›"‰†k¿¦î¾2Õøõ‘Ä¿G^¢R{¢oKüR’6Aã·Ø óˆ ^AYÂÙÐ 4tƒkR+WGRóº[ÛLtWN°ožŽ{éÍÐBø’d†öWv A1Ü÷V ¬‡ íðíȬ`ësçÅÙƒ‹#D·/þpå™,=¶ã}@ƒGáéÓU‘V½ôy®·§iäðí¥ïœÜ » ”Áj2zæUέ¡:à<íœ9𩸠õöüß‹§Š¦"7MÓ‘¶257 üR{'íy..I«¨´1©~¯à®)ÿ&!Æ'ÝÝóËs¡;›ÊáBßm>à¡àù²®Øf}ÍÂØÄl¼4”8)s¼Ø kjkmm§gAÔ·òñ0â§êÍÝÄ,$QU‰.  v\IØ´~™VAYevQ a4û­õ…ÞœÝ4ÞÉy÷ÿ¸ÄîI|ã›w°+sU2\wXÓÍÊ(Ã;øLÔ9Âl¼Ê3FªmŸKDwZ×pN,~<SYƒ¡wÜÏÎléI‚®‹ÝÈü2–|mì|”Þ›ödÙX©< hõxýXÙè'7Dÿ<×U—FøahœŒÑâ|þúB{Éeì"3Céñ­þH®bVꔫüm¥Û‚±Ü3|Z{¢®:9SÞì ¬&ƒ²Y3Â•Š•;_îOž½&÷ȳ8‚j6Ï&x&·è2<›(C3“S\‚HrŒ‹Ö’¸åž :tœHšŒ¥ñu Ý$#eá<¼Ì{þ}]5þ6æÌúž«ñJÙ'ŽÍæn>š™”*‚Ê·¿ó%ÕW€íèKŒ«ŸfõйKº×J£±+¹l‡†ÏÒDìëòCN/çø jyx”Ü9-Gb§ïº¼ºJ3ùÌÊj¼Äz¸ ½ ¾™úàš¾Â¸åòáöZw¦y`óôüsÛeåŠÔïÍ÷¶¾4ŽóH ¹X/kžf|ÆÆQ¤½Ï¥4}üW‚Ømu©Œ6rý¡fG¤À÷F®-_ÛD…³¤S ¤µWØùä(éSµS”înÀ.¿ÜJÔÖ>ËfSƒNÛg/±H)Š\“y_œ<ˆë‹È0ƒ3x]º—¼»·ÓäÅ“sI›ñ¨£KÊ“:ËW#ûaŠEÕû6ÜdÆÓÔ€0zõ;Ç ÏL›1‡Ïo›ëÙÆTÎ÷ÕÜ »¨Â©¬³“½¬rÓ‹Bþ‚ct_ã†>M6N±æqŒ /§vÉgJ#䩌âX•dÓ 6®Á„ i­;5eð•êwj¯CG÷EFá”…ËTï”/ò‡±AÁX#šúÄŠÔ‹MXìY•ž>+´‰àuâÍ›ÎÕ WyβN5©í¯Hƒž_†mH¯±  üŸ~Î k›!ø|]´þ7cþuWk‹†Ó6½f”‘Ñ.Ÿâ¡ÌM ‘¢ê±‚ʸ£$§€èLšõ’ntM!óËoçjHÒ&êÏѳ÷eͰi™3™3¢£ × ÕÚže4¶eúÈíBͱÙR×ÎpǹéJsÙ¯0=Øüä˜cåµ_8l<7ZèõÍ´u%üåg¯ôò<ðÕ-h^wCÀ5.§8RH’iO0ˆ˜/¼±0…Aô^Y§³ˆ&\ë¼$ÀÔvŒ=áÉãŠþ /*£)Ãrd{q¨¬–&úô‰H¿ -GEóÖcç>ÜÓØõÚä6†gvI¥ÜªÚñÃ9 sÞÈÁöüdt´^¥#oÝX\4É\f¡k-Î:ØBÚ)¸e¥ˆé›çvSÅEû-óD›w¦èP:y"»UaùøÉP{úR÷烙K~ÁãS3[ÂûbÓwæÐŽïXTڳŎi¹˜U˜¦o<>sJ�ûæd4]J§v†ê¶v˜p7']ÿBÙï5/^0mñXÊ÷ ˜YˆšíAžêÆui3îÚµo•jÁ¯,ÍTíüØp/…Ó'Ýë{ÔKlFš‹q¼ˆ·%4Î'N%‹(³kfµ~¥[P3qL}k1í_J»£ö’ßPÙmÅaúþ)¯>gíŨTÈJôœÊ;5Wã¼ò<&?ÎÏtNMq“ šc‹EÍ0®ž‚—ÄfŸU¶MfIÈ+RëU®^íÏ yê„£3RaèÒkcn$álE ÇTjÝ×ÈõI£W_@”¶F;ŠVˆ½¼ß5•òX¼ ×a#=ùŠ5ÇlM±MMôÐÎ|šAÔØ;VÍÐrÇlB½Ý§A‡$Q÷ ŒC£Iþà ¿o5‰`›Šå–þàìÁñ ŠˆSx‹¬džÍ€Ög_í‰b©!NÔ×|ƒº›þAÈ¥ÛþZ’näým1Áêß*Li£#Êü*76vâe7Tߟ+²Ó–[ŽŠq40ŽeÖ‚«Ûƒ‰¿ÁrPŒˆêÑØ15®·lAüÛÁ!žþײx™i€úõ«}·¥(u†oÑÉùÌô<Þè(#ÍNµdHzX;„Ñ»äl¥uŽ£¼˜µO©õšª‹Y‡÷’6«9wS†©üÇ�Ï~¡Z"âugàkvGOaæ—×±½µ¨ —•wsoë/F}ïç™ï"Ýp0Œ‡°¢Gæ½-Ãî`qî þ†W¶4C"IAea°$Ñ¥ˆâJkÈÝ€Ê ÉÖ¥€ˆjRжï-§ Jð³Á’”õ»³Á˜x·d2nEh¢ñ.‰wÅ#òE¨ ð­JΧR‡É‹BQ)ë~öÂ]šb­ô·¶ ¯?Îd)¤¾•¡¾OjÚùU»9ˆî€Oäðy&-^ÍÅ~û‘=;–ì¸[Ø«â±+‡o î1J!× (éw®ß‹Ù+“e™k«2c„?Fª¡fâéÜ Ú‚¼ÝFTD…9w{—å+ôÔö×®µÎe±–ÜïnqK´Ù,ÓJ¤EyÔ„|1Ü%­‘¥Òóª%uª*áù›ð'tõê4 „³ Ãs»Ÿ}R*ßކ߉–Ž…ë>1qÖŠê§ùÈ©+#Rû„¯†>´2^¾S$Tv+¯[;zñrD×ú7ÐÉ!plX#nFšr¡dIßËß7Ì 3OÚš}}—Ç>&Ø£õžA``½&³?Îv©`=¹ß밊ΔÔÍ·æ—bø¨¼ÊzþƒíLjsU˜eÚ4Ò¥0„©yXv72Ë>V™ÛÒN›fˆïØgž0¾uZ†Ü ÷Ú¶¤ÜÊ|¸÷@lV¼b'¶®ˆL<QÁ¯.Î{{6»ýŠe¹*+_Úh¥ZPásÝ,îñ§yÝh-Z÷Èô†'å_½­Ãùzø–u¸Øï:&5»@ÿŸä¿ÿ(,ˆ$’8$Ñ ù'FÄV endstream endobj 15 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-53 -251 1139 750] /FontName/TNADRM+CMBX12 /ItalicAngle 0 /StemV 109 /FontFile 14 0 R /Flags 4 >> endobj 14 0 obj << /Filter[/FlateDecode] /Length1 716 /Length2 2297 /Length3 533 /Length 2838 >> stream xÚí•y8TÇ­½LT¶ ɱ•uÌÛ†ŒuPLæ5L3g˜Œ™1†P’d+d_²dKq-ñ’,%/²”]’ze©¼¡, éªÞ÷ÞçöÞîsÿ»Ï=çŸóûþ¾çûûœß9Ïs”ä°N(2ãhÁ ³5àP¸>`fkŠƒkp( ¢¤dƉl*ƒŽ&²A}�Ž@À”¿' àGõµèë@”�33ˆEõôbÊf*_]º�ÊdQID:`Kd{>Û!$" pb¨ ; �( püz‹àú¬� …@àp€L%±S '•Ñü …¡S€îw™ìÏü³�²ü¶¹�åmN`›’Ì Ó‚�2HhÚ1¶§Û,ÿ1Ö¿¡ú1ÜŸF³#ú|ÿ¶¨¿ô‰>TZІӟ ²�[dÑ´º€ßáL´¿ŒÁ°‰4* E÷¤�ì»Dõ³ ‚d,•Mò(DšøMéä¶×ö @ó¸ íh«öÇ+ýÞÅ©töñ æ?r¿Ú¿ÕðÖÛëaQ< ƒÁ·ÛçŸWn?L3§“d*Ýpbéd"‹üá¯T¦¦ŒÀ³:Ú€†–€Ãµ€®,ä_'èT_ƒt`0˜îQÄ7•äÏbtö·Ï`û‰ÿ¬)Ôíý€` H‚dfIP¹ÝÕeÔV<–[†ä]îö c!…ïÒtVs÷>îXÜI㇎œŽŠðÆ. ¯ÏacS×”e‘Ñ•çm â[V ­AAR·Ç÷ªRºîá'WôËâf5úÄj\y4›çÁØzw|µZ®ÎYÿîçȹlfÓû69ÉÚ¡öóMOÉ·]Õš:G«§.O7p铆ÌÏX'ªe»¯Vì ÷š‘]ÅöUh‰…ø\ÔŽØ:±d¢q"tàŽ¥÷l¼HßJsùϲÇè3‹„ÊþGs‡Òq•IŽ"©Õ¢›½ƒ‘¡†œFÞ#£_ÆdzÌ­÷ÙK¥ÖäÌ2gÎð8dgg* Kµ\R:¡¨›‹)_âJrK¯O/Κµä+÷þ<£°l¡í‹Ö W{%;Å-JbPù_S:ºË¦œ/LKúÆ<ùt5TØ=™ ƒ`V'>v‚xu;Wðº½hh0vÓÜOˆñ{ù¬¢•à·êøâ»ÓBgm “_B:*©¿O“_Èç4÷[yÝ]ÙÍíô¦x2½äm~&µ¯V¾rññ&NEÔÒ?å§§"Ø®¢‚Ìñ¶ÁÜzµ<q½·-�—žueQÖƒ(áÁ‡8ÕB%H×…îÚ=v Ì]€Ë”oÊ.O»ûÖÝ @Ø©xNIòÐCcÒ£†¦mœšÕ´"ðId¿;–ÚQFkSí3^_¾(•6ĈsØÖÙüŠÃ]ÃÏ»Ý(Kïï­žFÞ±x‹;;ÚS pì}©sêò»£Ê®ýÒWÄ/”)ަ¥B:ò^7œzõs}F®­×øòØZ<·4I€ÒíááõôBÊÜŠtõ3ÀœÓHp)ÕΛg›Ø°u¸‘-RM*¹ª]ò¦„ǵUVnÖ¨MMÛ !n§(³ÍÒ¯ ^^ƒOŠòRòh“ztòeó>o¼8}ZPf¸•êI¸Jå–§¿ÃŠº} ×ÄÈlS´µØ¢–{L&' ..’iþ øhÔŠaø¼|ŽÞŸ·ÿ`4¦P™Òž­ËNjú*F‰Ü+ØTÛ`­«è­gNNhƒÌ0C»—¼f¾aМ(nså_r3§ee/M$jÐ(#«_R µ«>Y’ux1Í0F OæYôuSæ÷¡ƒxdÙçƒÆØKÄÄôP-2üuq²žöÂ$F·×šlÌðç¨6–ì Ø?¿ùÁ?ß«ò*÷PháŽb–oG¶¶Ë ˜Ûœ®Êsêéß) z„‘»Š}šV¸«<#34{ÐĪ»ˆº×©lµÝó:þ0Ͳ¡h-'\˜=/‚ð¸%q§°9Q7ùZРR.óþህ!`–3×›yí­x˜MÀ[ )©+èéï<ÀÃ…‰ÿp~Àv·Ë††Cæ.„Ëš¤¢š!»°îü`â¯åÁL…¼/TÍà±§WØ;X~jÉ <pNs«Õ~¸ãżÆY D"kÇÍ9Ÿ¿ƒ.ãÒÍn«W]³šŠ!äûDn†¤‹V9V¬õÝ;sžÊèÈðë¹»Sš±ºzù¤CyǦ®É:"/L´>Agq,=!‡ñ.ãÔP‰ÉèaÍ”2l6Ø&À ^A¼Ï¾:Œ h̉,XESH–å[ƒ7†{ùgR{®/™j´ž1ºm±ÿh’ñ{|8Q,v0{± —8 ›AÈ Ä—þ‚Jпx©¥Í»³αâÎößwõ#ïK*,žÛ4ëU¨ÓŠ^iݪ¦ýÍñ¦F2'”³póªÌ!¬æˆêË 24ÃOç´YÊ^ôƒ"'»R¿¬ ZUIØßTJ_º9«-¹ëÌæ À~ì^ ¹É7©_ ‡ Zé¹  ­¤½œl­qBcüïóX#Ç2õ~îÏKu>Ø}ÿÉ^Ó­R*„ñ²'•£2´qÁHßäò|Äæ¹ne7­^dÿ¢}tŒV·HOÉÍ3üiS{Ü]¸§'nÜ{õÙ¾júŒ£ÕQƒ‹k~貂ûÏëj|—Sd¡"êòõ†©n85o£TÖ’î¼ßd^þH¥|ͺþoRG»x­t²ÆèÝwêd´?eöýšLÇLœ_;k.éPà|:%®Å¶«ãÙuÜMèn¯_¡ý~�ô“êN#c¯àL»Š ^zsðõq»ÓK5zqV÷$që<ð™ï);gNe\á*4ºÄõLƼón ÁuúJƒXdeÚ¹fR]>~~ m?R÷h˜Oé¾hôc.¿›{ŸN£ºŒË·¸{‹qº­ù«cPîN)™´±€·ƒÂõvµ=ä’O°[ OÍŠº  mâùt¶•nî¬Mô%…èáºÙ¾u¾g`…u¥c~"ÇDjiÍÿ¡3ïÑ)Ò&™_ú$r¹Z.jdAa+D‹‡ŠëŠ£bºz 'c‘kkÚ©ÚmzîCi…¢ñg=ó%¯Y”ºí½#õé'½#¤ŠsoÐâ?¯~܍ɿGM¬˜÷>Ïx}Åᓲì»Ü¢õóæ>ƒ|Ùæë^ýÞ˯¥fÖ>¦ß®¼ãª}èÑú¨Nð¤“PÍFâøÝ†æ#þwÕ”“7*ÞŸÛ•rXȯºõÜì6…m½{‡>ã‘ð‹Ø}7<tÓPÅ¿1Õěǽ‡Ì<rVom…•)´ûå¯ úÓµøêî¶Ÿ ZÀS¯"·¢¯iYóŽ`³ÖË–Ô \+òWŽñå9Þ05VÝ;\<©íËM•Ç4"„û‰w¬‹ŒµdGzk…óìÒ÷J°ÕßRb„Ì«[&9Óqœk±Ù¶ûõ‘æuW¹àÛ¿‹‹GPò†!w»ôƒPJö˜™•Û¥]eUhž‰†U ÜÄîiÚoaÊŒÒþ‹ÅVîÏ�»4$¼rŒ_å‰@¶Èã8U•F”±ªMðIY|T~m³ÄÛsÆn›Ù‡ö0…ªÌ/™QÍÖ‚r‘ÔG¿º•'œ”†wóxð€àDåÎy¨~ã•S"‡89!7š¨Æ´¨ï O½‚Ñ‚.œŸð)šÑC´G…á +Kýg>¶­¹áí Uc”,ìÞx_j¬Q‘Kz¾"Y~!ÙÈö_ÿüOh ‘ÅføYÞÈßV·V endstream endobj 18 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-58 -250 1195 750] /FontName/GUFCLH+CMBX9 /ItalicAngle 0 /StemV 117 /FontFile 17 0 R /Flags 4 >> endobj 17 0 obj << /Filter[/FlateDecode] /Length1 713 /Length2 3449 /Length3 533 /Length 3993 >> stream xÚí’y<”ý»Ç­•Av…ÔH–샱Ë2Èd™Éž}šLÆ c,“ ²•}I2*YÂCdɾfɾ„"„ Y²•%~ê9Ïï¼ÎóœÎëüw^ç¾ÿ¹¯Ïõ¹?×û¾î¯ˆÜ\Z…¿‰6ÀãˆÒ b¢k£ ÉÈDD 4‚ˆÁãôD´¤ª êø¸åå€ %5%5y0� „à=IŒ«(¹üË¥ Ôñ@0Hh‚ º¡=ŽC,ÐÄ ‰$ P‹šýzÅh†öF|Ñ(��¢0H"ð&ÚƒÈþb‚â\ð@å?e”ç_-_4Áû˜ (~ÌyxL‰Âã°$ í5ÅOC³ü±þª¿‡ø`±¦_ñ¿öô6ƒ%ý‡ïáéCD€&xš€û»Õý'›.û)P"‹Aêà\±h ÜŸÆÛ�ãFÁ1D¤ÐõFÿÖÑ8Ôߎ·ö@öª¥ÄØPòÏúgŽÀàˆ$ÏÇþrÿ®AÿY/‡€ñÚÉÉÈÉŽÇ÷_O¦CâQœ+МˆÀ¡Ô¿…Béêâý¤Á*@iyðñ©‚Ê`¹Àÿj´Äa¼|ÐP= XNNNYIù·Šô!Ð8âïCpüÁÕ.˜ãõ Ñþh$ ã1†ÖIJPrÛy«qä¢õ›žQ8 .g% ¼CáíëXgÆ2ʼ¿æßcÝ[†Ç¤þ¿ u¿4ÈD=®qDZ…Dâ/üÈ+áÒ]k7»­VK•àzmK'Û°ŠŽ©v²+“¤€Ù&7P¢gý·6!¾Šý‘·Aõã¨B[Éúα²¹¨ù5䈾ŸQ‚d¦ÓNÉ \/eËu–T"Ïèªvh¹©-m<TnèNãØn(¶¿p·°îX:ص,šnSšdÆ‘ZÆyÐ;¬ñ°Žžù=ÏØÑ„`¾ÑÓÛü©¯³¨ž ~t×333„GùÉ—Fœ†'ŸBûÖ_»g©-öO ÙÓåH¸¿õ²<ryc?Šr¹ÖÕ‹¤ª‹ ƒª<Ö=l«ÇØ^.îö²se .rOf5'¯è¼îáhž« ŠnŸ{ÚœxÂz^Q­²výK€•s ¶×-ûY7axN¶›¬«'óHþ$³ÄNOâ™gjºÏU¬›¸Ë¶Zhì×’h¿5¿Zˆ‡¿ç¶#íÚ?Þûþ üÊob[FÜyF}Ày­iaÉñR„n{ﯭF¦g/„Ò¥9±iÐ@o^1†b‡Ì‹% 8XnéT¾Î¼·}¶ §¤Š›"ØÍÐêRníJkº`¥³€®Ɇµ­ñ<·\®ŠÐ6âg6’“Úš=úôi/ŸæÏ\áÉBÒYKïïÚç3…•*¶×òd?Ú›n(;Dv]qk.Ô¿ñ"«EvYOqI]ÿT¥™IªR˜ý½îLà ·Ã³uP/Þ|sçõOuL{‚2;ذêÔ—²îw<2™°åª å¬]Y ‹“FÝ QÞÈ 0—9ŠœzˆÜ"‘§f ‹,$­=ð]í'Ã?àßlÃÂäa�CÍ»fiù9.)ócõ«ôzðÂkdÍoúqóÂç¡’ÃŽ–Ñ…Í Qù•ì‘*Ý(ôrCÕÞ)µ‹ÚkZÞ*ª%«K‚¶²`"¸Ø«rzÂ"ÍA°ç¤\Ò®w4løéòJsÌÇšì> ÷‹‰z K.‘yç-ØÏB¾x³83Êî|Äút§ü¡\¤ç°^ý‘J óXCæÁÛ­’7àå¶.¦®ÚÈüxî¾ó§g§Hƒ¸àåÞ×LO7÷b“˜°%_E÷k¸ìïå˜ÓΛåß呈"ç¬WúÞÚl²5Usö6ñºÿб£íÚ™Xän[êÛ 6Käü¸txiÜ)iïM«È¢™§ÍD¿Öekö‰͈Vþ¦žT¦êÁÊߥe¶«šÇ®°&®b^µ&¸ôž=Š×lÀ ¾#ìEß½Nu»ÂßððA”·³•ýÕ"žXµaò>%=ìéOÒ”YŒ]äL hä¢ir0B3_¾Ùº“ÙÇJ¶‰9}Áxúå¨D¾̈|íǼ*_ÏX¢ÍŠÕS¾õ¦'íNOZÇMù.,JéÆIÔ^ LJw<‚Þ½-m…ofiÒÿ>^~2~ĺíÙ¦ÙÏš\ôõâ¬Ýéeûb-ël·€ñM›�ÚËR/º0›NMá Ù´Ì€§a¥/L„i’’T⇵D·ÂøKr¡DR‡|e攌¥÷÷¢ö9™]Q3¥G5“GHÒ'Ó(Ã6CÐÀe×ÖÕâXs6Ù9®þüüЃ½ˆ»ë ž¼þÕâ-º§Ì0Í•?ÖÅ¢¾ï)À~‰å¯H@tÁ)—æú¹sÚßOÈ:˜¨>H§á<gÆÞå¬*Õ¤b6 ÁM‰¼¥½�,¦Î#K›[ S:2ã´¬¿ÖDOï‰Uá-•cÂh ¥ä22•̳?/åÞ^=$aÖ"!TùqKÆÈáù`•‰ „[z½ ¸ÅÎG¡µo $îo´Ü$ápaEFÇ·ƒ[5cLÚrâ”ä¾/„ÝÕñºÍ ’øêµ~<ÅÖiJ_ æ‹Uw÷©Ð]¹/? fi‡6rJeo@¾™{%Øøí3vRo;6ÉhF§[?WJмGåXyÄè¤Þh“àP6á˶ ¼ó±&¥òLLÕ‰}žç¾€ä(%êõ˜›<ÉôÕ’fóƒ³*§«8>:?žùªnÀ.Ä ç{ÚWÕk>¦ÖÞ¡€˜ÛM¶h¢-i-®cëyYÈЬí÷'ÁD:|’ˆ9SÆJú×v£#îšÍT#´“†2¢~úÁ®ýÞ…ºXÑ|0Z®àá}Záènè¢o‚<ØÉþy⽦@ÿ”ü¤Ã[Ì2™µËßx¥“Ç”5ßϪ¶îs\ m¿”GŒ:Ãââ “ˆï¿­qU—â1%_:Ë!ºM×›Ë<ÞRÞ?H¡ÚÆ{ô·Etn]îÐOáÐ2wìUª¼g³4­a¹Ï^Ffƒ$ ¨9A.gBmNƒVçEvEÖMÄi”䈩aVg†ÌS˜!J›Ž!@xÑ‹:}¡O“MC=CÛí0â(a>ùãòöŽžùÎhÔ´MÄôO»üŠ 91/pc±X_ý‘ùøja<“BHÂx¦o9F!&%(ì£'1 !µäÝ4+.Áaç&›Ôzô” ¥š/ô~FáMÑÖƒ4eK­“\ç?„—B &ÌÉ ä¤¼ÍqPÍ<ïyCm¶Øy÷Áኙ-É÷[¬WM7îðj:,-z>ï&r^eÞ%“Ž~²D‹¢˜^¥Eu’*JíŽJøº“v®´y†%MúÝÃL›u«6Ç·¾1°ù9°;) °‚ÉûmŸ#0 ŸÿÞ/£zVK^O|Á&ŽÝðiïs¿9Ðr¡?ÂÒ¥2ÛÅ®ßÐÊ!Æù¼qåƒj­ƒsòÍNêÌQPŽ G8Ó½Ylì;“ãù)Ã_ôñ¢ë¢ÄSaÖvõþGy–m˜>ö‰32½ìrïu0ºÆ4×ob‰Ú;ifXæKtó(dä¸q‘—<=²ô<"U|Qz<–œ­Nò˜)9¤H•6ªKE¸uBùn@¯~2 ³c[žÊ5\¡c²Y‡È|„{‘bÓ'd×¾ûæY«âzÕËžCKÙ.®~iÐU®æhn0ržÓQ×QóKû&¼W’0»Ï©a$±qõbs; ÷>ë͑Π]݉O­—¶]·ï*Fõ–øë•PµáG¢³‚bdÝÈ:Úä¼çñk.4ð^cxGªû¢ )**J#îá‹y(i- M"‹K÷ÑÜf6jMEî=¼Ë¬èB§£—°1¨Dy˜åE·ÞÊe{ÿþy3ÕõŸö_Žy£â%ÑBöÛ¤wROx³e!°+äAhu@3ª\ ´×8ݽUíü´9cꃓ¤ Bç²N\¦4Êò0¬rY¬†ªZбéìÌ9룦 Nçºm+XÐÌü@ŠfZŸÊEHNÓÚžtAp¿¾ÅCRKòT.¯‘µÂX¼!×wÃǹÚ:\¥ ¿ä¥û/Q1¼+]­áÑa©¯ÀSÕŠÍ´Æ"R öT‚òÀËO³@/vêµþ­àÃhHÚûp&!]¬m& ªÊ#�'L{›zà¯äÅ^T.ØxWC5Kã5Ñ‘N·@J°š©3Xè&ºïÖt‰Ë0#ÒÃÙ—öû UäΜ`ü•Y…€¨«y‡ÃÎW.7Ö­³’û¾úlíÅ­{ì �kzȺ¨õ Sê½(ŽB”0ÅÕ.™+–I*PÇ ë“yÞÌš|?)3*ôT1ɽš5¬heèÅ;]Å«ŸÝ”5”+±o04â2ïÄDzIÌÕYâ=ÕÞôÒ—Ý7¾–ë²vžqK1Þªå“4g+ßÖ2BŒ7"¾ÏîݹX]æ.¤½H3þéHžî‰)w‡ G[|·IµKF…;^yÅe´1\·àçŸÈaAÊ0›F¯°4÷ O$øŠÞupÝÏn•Aõý`ÌA9)ÕvÒæìôâ¼ËVÕJb^âWà––ó>ä/AW«˜œ4ê‘_Q}ÈéCÌôÏо=ë3ÑR§@‡}ƒÀÛï=H’ÏyË3|D“Ëep^ù±ŽžÈ¾ÕX¼jM?å…«>zÖìÏ›äßxpÈb¦Q÷®(Þꉜ=í;®yX1EŸ× ¶œ|CæÇëg6¶+*XuUýDÂuÚ¥ÓÁîi:ã+ÒxÓ- ÛþÛ¤³ë.)/Ø8wòâX*ï{ÔÌ ŽB³`Ý¢Ým§p?…·Ÿ˜$ùēͦFKÜqÈâŸH¿Ëþ,Â"º&ü¼ñ†µÖ…_'G߬-Ve»*Fû½"›xZ@sÔ@ëÞobvÊT0á„@Í%î%/ýÙúˆ¶žf»¾øš±~OCÅ2©€Î ‰Ø“­D+a$ŠÍí[öB”“çÜ#<g’˜öÉ ¬ûÞ sTmæíÃûõ… oœ“WøUÿu¡Êâ–C_Šæ´A\NI ey¹S+jÀ\ºÉ`•o³z>Ö¾¾c©cÆcJÉñÁ»…—yëÃBáEHõfŽãS³ ÛY ¾­0O¶)Æe9 ÅÙ¡^˜†€HZ´ì<ÿ®EÉ{xÞP‘÷[‚­™ø«©Ý='Þ¶+zvM²KrÿË ðÿÿ'X4‚@Ä{ î�À¿�œªö$ endstream endobj 1 0 obj << /Creator( TeX output 2004.10.19:1439) /Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks) /CreationDate(D:20041019143933+01'00') >> endobj 5 0 obj << /Type/Page /Resources 6 0 R /Contents[20 0 R 4 0 R 21 0 R 22 0 R] /Parent 3 0 R >> endobj 3 0 obj << /Type/Pages /Count 1 /Kids[5 0 R] /MediaBox[0 0 595 842] >> endobj 20 0 obj << /Length 1 >> stream endstream endobj 22 0 obj << /Length 1 >> stream endstream endobj 4 0 obj << /Length 33 >> stream 1.00028 0 0 1.00028 72 769.82 cm endstream endobj 24 0 obj << >> endobj 25 0 obj null endobj 26 0 obj << >> endobj 2 0 obj << /Type/Catalog /Pages 3 0 R /Outlines 24 0 R /Threads 25 0 R /Names 26 0 R >> endobj xref 0 27 0000000000 65535 f 0000030282 00000 n 0000030872 00000 n 0000030547 00000 n 0000030725 00000 n 0000030446 00000 n 0000006451 00000 n 0000000009 00000 n 0000006698 00000 n 0000006512 00000 n 0000000913 00000 n 0000019380 00000 n 0000019190 00000 n 0000001829 00000 n 0000023035 00000 n 0000022846 00000 n 0000002765 00000 n 0000026175 00000 n 0000025987 00000 n 0000003711 00000 n 0000030625 00000 n 0000004710 00000 n 0000030675 00000 n 0000006385 00000 n 0000030807 00000 n 0000030829 00000 n 0000030850 00000 n trailer << /Size 27 /Root 2 0 R /Info 1 0 R >> startxref 30967 %%EOF ��������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/testPDFImport/PaxHeaders.3194/nomeaning1.pdf�������������������������������������������0000644�0000000�0000000�00000000073�13124510115�017560� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 29 ctime=1498583182.67525783 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/testPDFImport/nomeaning1.pdf�����������������������������������������������������������0000644�0001750�0000144�00000075763�13124510115�021170� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.2 7 0 obj << /Type/Encoding /Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis] >> endobj 10 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F1 /FontDescriptor 9 0 R /BaseFont/SRPUXN+CMR10 /FirstChar 33 /LastChar 196 /Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3 777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 500] >> endobj 13 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F2 /FontDescriptor 12 0 R /BaseFont/XHPQKW+CMBX10 /FirstChar 33 /LastChar 196 /Widths[350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1 575 1150 575 575 575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 691.7 958.3 894.4 805.6 766.7 900 830.6 894.4 830.6 894.4 0 0 830.6 670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 575] >> endobj 16 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F3 /FontDescriptor 15 0 R /BaseFont/CYZVRG+CMBX12 /FirstChar 33 /LastChar 196 /Widths[342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500 562.5 1125 562.5 562.5 562.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 675.9 937.5 875 787 750 879.6 812.5 875 812.5 875 0 0 812.5 656.2 625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 562.5] >> endobj 19 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F4 /FontDescriptor 18 0 R /BaseFont/NWSIIM+CMBX9 /FirstChar 33 /LastChar 196 /Widths[360.2 617.6 986.1 591.7 986.1 920.4 328.7 460.2 460.2 591.7 920.4 328.7 394.4 328.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 328.7 328.7 360.2 920.4 558.8 558.8 920.4 892.9 840.9 854.6 906.6 776.5 743.7 929.9 924.4 446.3 610.8 925.8 710.8 1121.6 924.4 888.9 808 888.9 886.7 657.4 823.1 908.6 892.9 1221.6 892.9 892.9 723.1 328.7 617.6 328.7 591.7 328.7 328.7 575.2 657.4 525.9 657.4 543 361.6 591.7 657.4 328.7 361.6 624.5 328.7 986.1 657.4 591.7 657.4 624.5 488.1 466.8 460.2 657.4 624.5 854.6 624.5 624.5 525.9 591.7 1183.3 591.7 591.7 591.7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 710.8 986.1 920.4 827.2 788.9 924.4 854.6 920.4 854.6 920.4 0 0 854.6 690.3 657.4 657.4 986.1 986.1 328.7 361.6 591.7 591.7 591.7 591.7 591.7 892.9 525.9 616.8 854.6 920.4 591.7 1071 1202.5 920.4 328.7 591.7] >> endobj 21 0 obj << /Filter[/FlateDecode] /Length 1647 >> stream xÚ}WYsÛ6~ï¯à[È™& ðê›Ý&n:qqœv:m ’‘€¤ ’nÒ_ß=@Q‡§/¸XìñíU&iìZnƒ›Ç«·YÐ$M<nƒ¸NRé¿~ü#¼vC !Â;µëÔëè¯ÇŸ¯ÞæîB&" Rb­$Ÿ.²²,‘¥?}Íb²\Š~šÃw]ñ5ìMA÷Ò&‘2ˆ³*ijºýÞš•Óp¥’á†Ö"´zàM«ŠD>G" µEú™!2M„â\$MFòTÛwQ\Ô)ˆž¬å 2¨g2¼R±¬A7Þ%Qœeu~ütwwý5Uøû¹š¸*’ .åERò­Ç'FÊ¢ y-CÅŸëU~cVLÚGq^‡›­glñ» {72AUíÞjÐ_gò€žl4 ð1#ì©'d@Ös ™XÔExÍËðDJh;µ­rß𣠟´Cueš.ÀÏÆ¯^L¹ˆI=äSv¬ý °b…õ¢°>VX- ›#…•WXÏ ëcªSñäþb�'¯W'K±¨“e>««E¾À <'“X$¼Ÿ,3ô†d’ø—<_œ³¶³«*LE8O2Ÿ_È<g™oÞÝß>\øé2ÇÊŠ‚Œ9–ÓÍ_Ô°žÀÍÂ¥pÉ X­íÝZ1‘ó«§ß5“6zØ;tíϼ,#Yå!ùÖ4аþòºïþžô0BíÇ…ÌáBQq½§ãMñ*›p«Ú(ËR.ê7Â…§UØõ+Êæ¢ÈÂgº?š:ÅžÍÆïÖpªÅ5©ï>»°‹Tu¨ìðbF§;ŒÝ¨â©ãTQªüæG­T·éI8æ™_ýE¨˜ç¼SÃW<ƃY† ì¹J¼Qö<MÙJ¾«, ô½1kåâAó·Â¥Á¤§aš_¬?Û;ºs¬ð•{×̸Wn4³üWŠzG°í[![…¶_ zN*«C¨¹{Òvи âòñ´‡ vKÙ:/ ³ë Íú˜¶È2 “_ƪUÝ�¦ÉLÌ—À¥Ï“žhËá€EYýLê0inÅdë×­æuíÌ0H4lDz ™²z&FÉ)©¬&Š(p‰$I#·‚8ujnÀd_-h9µz}àçÄýQãgå˜H´'/ó¤‘AÖ@;á&`_Ý;ãCÇIH¤‹@ 霜¸»z¨Oêy(°pO¦)³õ+F¶ºãÕZ5^–†%Íõ•=I2†`<ÆX¨g÷˜®`ͯ´>Ljxg*øÖ– {gÚ™¦¦±Ÿ;>^œCª··Ô±úá`R à±Mœ]€™Q£îú!f:AedR£Â < ÝnòÏ“Ý)‡2OÉl$žáïN#Â7 ´/™ý;*…$_P*$½O- M²i< !ʬJaÛ£ÃÌA>zÖ@̶w­âí‰w뙨.ƒÄv8Ìm,º’…ÁŠÕ#³¥jÌÐb3–‚JO€Š©Ú¹Þ ³¬™Ê%_",€Xcß5º-%t€Q›¯¼u»§vPeáfÚM§p ON±ºVóÖ¿é8ŒÞJDH\÷h‹„WÝì:sañ4Ôijé‹ìéíèÇ*5ø*]0ì6ë¾e>Hs?>)&@ø–08Ý(ýy†w§ðÑ…ä¡~‘ºAóÓ†!S-ŒØÌ Pïf#.‡EñÐoý[8?a€”¡!7÷/ÿv:½š›À…-;‡œy!( e ñ(g„w�Žy„ÇÕúozp©OâeÈwÄ"¯ÒÐ{AU]`+ÀŒÉ¡£Ý‚‰Õõ|ÿÆM°½¶@˜çnûqÜBwÜà§3öIÛ–?Þk³êÌ¿8Ž@‡¾¶»©£nçÇA\íL ²¬¸S‚Xn1 ¨M¿)9DíÑÌŇ´N9y´¼ 8!Ró˜ ­5;m­Pbœ¢ñ mYÞÛS”-ÒûKÛn¬ÂiÎu$,Åã³úê€ÔÎ�ÀÍ<û3 ¿…áÃÇÏΤó§å"4ŠŸ*³£ÖН#ØÅ›™�C¼Ïèî.èºJòè"‘Ùa€ÎOÇh~¼ÿôù‡7—ÿÕ*þOX&)›ôˆþ:òÔ>ª/ìŽÙ:†]„O׸ÿþêj­’Ìã‹~cTһݒ®ÿ*ƒ7ßýeZ endstream endobj 23 0 obj << /F1 10 0 R /F2 13 0 R /F3 16 0 R /F4 19 0 R >> endobj 6 0 obj << /ProcSet[/PDF/Text/ImageC] /Font 23 0 R >> endobj 9 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-251 -250 1009 969] /FontName/SRPUXN+CMR10 /ItalicAngle 0 /StemV 69 /FontFile 8 0 R /Flags 4 >> endobj 8 0 obj << /Filter[/FlateDecode] /Length1 720 /Length2 11638 /Length3 533 /Length 12196 >> stream xÚí—ct&á¶çcÛ¶ùƶmolulÛ¶t:¶Ý±t’îØÖísÎÜ;kÎ/³æÛ¬©ªUëÙ{ÿëÿüj×ó¡JRe5FsGS ¤£ƒ#  /‰˜‚* €„… �…£¤sš¸Y;:ˆ›¸yIXxxXI$¦/^v^V88J1G'/kK+71Ú¨¸HDì.Öf&$ &nV@û¿&f&v$jŽfÖ@7/&;;Õ<âJ¢ tºx�Í™ààXXHÌ­ÍÜHL–ÖpÌÿ ’q°p$áúWÚÜÝé?K@׿\$4ÿ$¥%ùËiîè`çEb´€cVtü;ð/Íÿ1Øÿ†ëßÍ%ÝíìMìÿaÿ^ý·²‰½µ×ÿ8Ú;¹»]HÍ.ÿ.Õþ‹MhnínÿïU7;k3K; à_)kWIkO ¹²µ›™‰…‰+ðŸy ƒù¿CüíÜ?˜ÕT•5´éÿõYÿUT6±vpS÷rú/Û¨ÿ³üÏøo{\¬=Iô�ûËòWø÷üÏ‘Á¿M&á`æhní`I¢æfâ`nâbþ_‰ÿ%*êèéÃÈÊÁBò÷öw�<$<œ<~ÿ«RÃÁÚÙ(#NÂ��¸xØþ™5swq:¸ýs%ü}ãÿŒ-¬ÿöôšÁª©(МÓl`°Œj¨h‚ß+"ƒ‚ù5¸>í6âÚ3ö}©Æ„6[lá|)ß9ÐZŒþÜÕ¾}MÈr3gM',úñŸÊlôL&‡z_k +>¡²7Þ­g±¿çÁ+“ v̶k ¥%ðë2÷"=kûk¹Eä²*ª¼7ÑD¶)Q`*¯ u$.ÝU4˜©dŠ’…L´þ·ßœZÇÜÌùŠ Uô”·}âÎ_—€G u·u…’ðõ7X°¾ƒêa;°Øyç3ô‹ŽcÖ»þ´ßžsMÚUª“5ÆÙ:ȦO°¦§½ãõE²Ø‰_ÓǸy–!µäP©ø#?²Î„|©4ÐwÄÈäÓâ, ΓòÒË¢Û¹×-ëʺ/ºØ{„©•„„ö3ºÄW"ÛÐ6@Õú!ѳ¦¤WR¤o8ÞT?„òG|¼|¾aÀE†¦òz^0ª’xNn‘¼â„–YZIvÊUÊ#NVû)TcòÐÀøñ!ç^Õ+™–] F`|Ù ¸5wûùK¡ö5W½w¹¤Z°ì;ígz¯XGkwR+¦6^¦A‹-è¤ñ¥õdò¬>Lðù1ÓÆâ>Ô{$™02¼E0îÈa.!E $ǵ­rcÒÎùšŸNzäe…Ì¢SÖÌýË1§Vr†ƒÑʲ"-h„ Û¶éÕ•Ó’ˆIÜ,:ËŸ©Ê\‘åk°Ž6ñ”mDtoÓÁþO‚pºO±û]ZÔgñÁf°fÝ�øÊË4x W©Â’õÈK´!?fìŒð¢0h Á—ÑZMc­VKKñ œJšOú°ÚEÛÆQÃGR©}JÂ^›a¨Â…ùÍ¥=�”î·‘¢L•ERM?l‹ªs‘v ˆHë±9|‚">dzÜÇûôTý2e‡rF]%q0?Ï}áÀ&TXn}‡÷I(o$âZ‹>D½lËðÔ?†¾ô[ )ë“q3^"‚uüטS¸ïúô2íë“ú±±=š¨.Ÿ¬@„¯K½¢ì äT1Ÿýí÷ëî2Kxu¾tñ ‚ª¹ÝžG„§Éj–4PßJL\Lxˆg"g_¨¤V^“&5Ú*Ê6Ô)Ÿ—<òsú–óè«ö’f²:Ò¥ô°ñiÒ¢OCL,Þû:’ +üþ™„ß$¥Ä¾Í¤<c@ÜiÁ½-o~~Ó ‡Lòî°6ËôwxgÊzÕ<¯7'ÓÊTÕ HœN<¼²wtž v"Qÿv@ Í¥_ɯE/”Á 4.63‘˜:ëáìö£üܺ¨`·yì"ãÜrÍóTac|²Œìc4…ñ‰´F³EjÉ+Y„Ñ"9)a6Z'ÛsÅ,ºÎ·Y’1ÂíÜu>˜6!/Ìö“ývÙñE)•ðC;ïŠáwâò©N‡[¬kè”Õ�¶œU_1|–@,8z¦‡ S5êì÷qµte¾ýÎÝë~Q£goF˜“†Mú‹nìMä›jJˆ+¨zý(²º¼€Ì·ÉƒœdI8f³C¯Ê0sÍiD[þ ½95´ Nœk¡?·ÅUv}Uúkr8?Ì[t(âU§Õ‰ü ÿÀcz 2¿‚RÿÈäÜS ëï ïYŠ0µ\ ³7íúaý \<ïÅíÒ˜I‡ UAõè‡.øë…”8î–$K¡ÎE7yÙKþ¶ZÕ–Tl ¾,´¸%ã1“|à:e«™SûbP(' ÖC™׳x]õ'‡:ò®Ñ³OÃgLl€Žäãêœ)h‡E´ªÿb¿;OÓ\¸û\Ô˜Vÿôç²ÜÜ‘mÞÚë0±ß´+ö·ýãÚ®Jì8Ô^ü‹+Ì»åË8 xß“ïJ³ ˤŽT[4ÔoÈ&Ú"MJ1«&]Ÿ)žÎ‘Ó*èF ÒùÙ…ÏÂÆÑY%Lu‡”ÄÔ_áç¬ -ì«è†€Ûs|û”Õͤt•=!@eðín©Ö"ôÍ75ºU$3:ˆrþ¢2èw›{hª^Pê5k·fªû¨/Ó2~ÜðˆèUsõ%ú}cc4žïÜ]fÀa‡F¨§çmr®^˜%n4—÷«·¶¦sØ13 ¶M5i!*ýÍšÚk ýe±~Í(læ¬ws¶ÜifQúÄ™ýíÔQ¶NXô8Aöê[ÇП“ã‰­IUbÞ;fÁèñ ³8–ñ]̨ýyCÃ,ì#%»¶Žòîç™êáîD!å}îÒ\`/¬ÎW† bˆÖ9j']÷§rD’»à„R]h† ’y“Ø.'FLh­ò–•JÙ:œ¨8ßÖ| ‚†o=±"B”óŒD5ǼÃô3Jãpvö—|}ÙNêÈüWÁnH�\,½åwÂ’—‹6PcÚU40òZ®XÑa;?=|=á’~ ïEN¥,ñJ'I€ƒ‘î á3ö¦)Þcth&ð¨Ñ>¼÷žPW“²˜P^Øsìê~&Îç¤ ëï´çܘø0Ðz?˜¦j“áǦ=t‹3žýP([€G=±0žÉןÏ­V¿§Gq÷õ…€lœê¦ÈR^¬R[IZõ)d¿ç%CxwËý%O´mê[èæÎc¶p”‘*c¯Q?áø!}úÑTÝ—”¸ÜH <Û�—»âwÁÝ˰„"… 7éz­âÙéËÊ/°:>–ï‚v«* ÿ-ÂnntÕÙ î.1ûÍlÊ<=Óì[KÄÕ¤~þ.Ù9ú|µ£4¿,Üö'Qˆš‚Ï¡ ‰ŸZe•ñEÔIuÃTO1c¦GåÚì4mVâ2éžÇlHÄ2†Œ3—©rNÚ)æô»‹g1ÆNL*NÊ5[hd÷ÅÜíóéµ+U_Æ‹›ÎyÔ3Az©¡À÷Q©88û²‡ãî+‚Rü$dÊJfj·_“'7‰y½¤—ñ ‚Ôíòb? ¤Ú÷Ó¸Í(ìYÕ´Š%9õrèÑ·¬~®*d­Ù™S¿¿sÙ3©H7yûŠ·aãB*ðNäv=XèþvD=ðÄ…@v•Ký.ÆdÇ«ÝÕ>uÅnÀâ9>GhKÕ ­«Ï·h?GÌÓÈ~ÄY³eÁz&Ìý>¹'!ö£wmhÉŽ®x£axÒ~b>œ4T¨§Ã¤øÉ[¦¼–ç^+*3×n†hÒOK%§áE³КªsrDƒËêæv™�®÷–?8+Ü.7db1ŸÂFÚ5xrOù»xNåùÀYÍý~HÝ]Åô÷²ÈìaõÌjÆMT´†.£¯Ö}ﮥ€€ ®ÕÎÕ1Ñ ¸š©z‘ËÁ5Îî¦XÀéwýyÂ)9˜ñ·“êý„Äâ䓊¦Ìš3Pó¯€Ól?á¨#¯È‰º®mzòKg>$7ÐT2f<xrìPKµðÉž˜´Ë%S‡:3ð«X§ŒÐWM&I–»3k£ÕUºØ0põ¿%·„V¤/¾Ý_‹59àø„¥˜Yç·!º aEºº ]0ÿ sž[˜ìÚ÷Îå—Æ±¡icãî€Ke Ö-5ªiç¤Ä¡,]O^ðûRñ¡è¯Æ8­ãD\ÚVv™ˆ5@xÎ¤ÄÆE•ýó\¤kº>Eª¼p„[;ŠóêGÖíÍv6}d‚­Àë9êïFc¸ÇªÐ7‚n£ìðè!fÃ{yyUH¨ä›ɇµº¾2Š`¬‹ããô÷ËþD8Œ¥‰k<®‹C8À—êSù”P¥ãè×B‰ AÈ‚ƒvxAӕ瀃N.ÔÙÑí!î°>øŒÈ}2[¼’ Q™@§ÄO+¾ ²gøÒ×7‹êjI<Û¢_›–¡^ ?ž¤ =xWÏ4vB7b"1e>þŠ)‰ÿ†éû{þ9Nfå¾¥«j·2VçPãŸZ²?b”iuYVQ±ƒ×°òk$AǾ˜Wr°ûb{¬œY†w=ZÆNÕ›kÞøÚ/‘HΤ—ÐGµt;ƒ÷Ó©\€_“èˆj¬‘Š¿q—3vÐp²Òb#Tn6ã͉9Ù‘äL¾(9pàÇ„ ç+)Œz1c‚Ay«<ºËA6è»?8´„æê–úà³®k‹d‘ ÕOB‚Œ \âý+¯‡6ÚdÌá“g‡³#+^ ßOX6«5A§œ ™¾¬\ËÛ;F†*ï=g‘Ðgμ1-K÷”[ùcœÛw…áq©Ú"½ŒK­Ñב5šMÛN–?TrìßZúaØóX›»6 ¢c?Œl¸ì!*¤ á-O%rZ DÉø#üð«(â;ÐÞ0m„Ö´¦Rã3ƒ¦í3+//&\(Â@$* £Þ!rÄÚžK` Ï ¨ÅA؈:jµ¬Þ 8´ÔAU:ß-97­gÚx8Áwç™ýËú!¥žÞ„>¹°T,3š?6–«IÕžÉü]¸¸M¯¼–¡uPwÅü妾—üÐÖç­úuÝeÃðŠoDé¨YEÙ—ãßçBt¡øˆ9¼®ÜKþô=À`—¦Ê Ü]p—ðˆÑ µÆøƒù@4¥Ïm.¨Çu+i¬ _–'Œ¸£Ô_­Wó…¼øI6ÆÑÊ›ª:#‘Ýìz_˜2X×bþA5¢¥fÿõ‡š®ôjÐÙO¯tú-ToMOþÌ^“± ^ƒŒP;’í73¼Zk×ÐhÌÍpZ´Ï;37½Bh„µ¾™ög Œ£û1¼œ½i÷)×ÜÌ+(Ãw®‹Œý½·Ó½åM¯Îgjަމݶ^µÈXðý*鲜­aÃ’gƒÞ¦(ì”ÒëÉÌZé¬G>æ¯JþóµÀu^ü2énƒ`£Š‹›ZÓ²ü¥`. ÌX=s˜_ý~÷ì<…Ä3éaÐ…¼CÄ>wiuéò5¡îäƒëÙºò×þ¯ ™–ùa ™ÚË’Ïí­¹öLïíÁ®£¸`"]ôÕÖxúÈß»»(Ç¥ý»IQ·žÃ`ClÞY{¸ÏÜóxôqQ¨‹÷ ÌÉÓ9'úÀcë=;ås[ç3n­H#˜¬õ‘MGFQõZèmž}}IðÜ÷ïϦW°yl¸Œñ@&‘0\0z©¼žNä‘ÇÄ­QÐ=ˆ0|ϪVsž5I³&&áhœr"hÞl¯ \”w"lǨƒÎՑɉýÒ*må”r•…Zóι:½ùãá"8±*¦zF¤Ó4#]Ÿ8LB ÞgížÖ%¯Æ¿~“‡ì4ä „p|á¤6—”t}ϯ6fŽIpXøh²û†“ÒŽZ  ü¬Ð$Æ›¦ùN¨ ñ(‘_2Áxέ §–èvOÊ·B%€ëÖã4á»Ç‹Ä[6³³ ÿfï~‡`ªP u§ßíptd‡&5¤®ÝO¤±�‡ÝÔ¦=V5PI¹ÄξHEŸ¬rc¦«Bpå`,±ùÀÜ ó.†èœý¬‚ÏeððÝ­t¤ö‚œMå!bŒènE· Ÿ—Ó¥-ÜÙ:°À¬ÇmßHt¢IÁ'®¬„‹Ö¸åÈ~gÃn^¬Š=60 @Û’n}Ž'{ÚœZ¤’ÀMøQØ|‘¶ŒPf oFÅÀ\Ÿ‘š `"aŽ8[G^Oý°ºÍµ<ãÙÁYƒÖ@ß°«#%A99º;®…þÌ‘>D êœäŒÒ7ÁèËÔ0®\°£³© Ãީı8Û>VÏÀqÐÙ·±¸ñ’k‚g7lôÖ„ [}êñ #\Þw· U[ÑIÜ¢,ñ‰Ô÷yòFs.ÍŠX+c¸\²v86Izp¶Ë)ÊÍbÌÑ|j¾ÛÀW¥íÕ<®  %Ûtdè ‡Ïj8Ü]³õÂU "E« []&¯AÐûö¦ˆ®ž|¾ýÝç%Î8f»¹-¡ò'Œª‡[X_·•"¶ý’ncʉX{€Ì±kht'O¹\Áë°k’Âf7¿#ún0c1ªvFަ_b‚Ÿfd5¡œa¥Ï4%ÄsPƒ qêÚèwÂnÖÑóf:¥,F�pfH<xI GU¶/A'{Vé¥I´¾ø@ ¦T1&zÁQkßx'UKh¶;ÓŸ—[™"g×Ïj4Qu9.Ä! ±™(ýô(lJWæÁA€þùþì"/MÁD7úœ&÷çtëûw¿Šû Y‰F á»ÙùÉt™}jõ0³ÂDU›(^*Iíx¶«pa#3 …Ñ•_ë¤"1vQ=“8ÒýrþoWIœšª`T£’jéá3+iWK+Ñ ÷|Jü­Õ€cÀÞÜ\¸¤.Vå”À~\ë>//ÒO›Þ=MVĈñÙX’+.–ìD£1lX¼'%½k<d• IؾEUáMÝò8ˆÅöŸÈærP\zr>°™²”àÇÜ×ã¯Êù_>SÕøùYû8¸êÝ&Ö†S$ÊtzÖÔ×DËPM÷MÓEÊÃÔÖÉ.ÔÆ#GQ†3¬>UÇ5¦‰SÃmk\µ®¤Vçæ*ÙS8ùÌE~ó’»@4ôlGc'×§5±–vQslÌ·ö$oë™Ü¡²/ïÂáH`}Û$å>�‘ñÿJÝsM¾OJYÓ]ü@±}¼M^Šk®«W`e¼wµ÷סG¬PÂ4¼¾ìÕ‡¯†G‰K¢5s‘ñºe*¨·)brT >ÙÚ±,;]h7Q¨ùl®³ñ4V§Ô›þQjp«ª|ËÌóyžmIy¶¡‹N%J¤ªœñ4÷†ùÍe( –ŸùÓœèZ+ =2 7ü¥”¥~e&­æ bx×ÕÕ*ö õÙx£#¶Wz]N¦Þ—S¦]¥¤SÒh¤Æ†žödœšít=挴¹Ì«Ä"4o’ÙK¬I*ð~¦!ÜF˯ǡ½Î–ADl?áP 9;¹Y%´[¸Ék8;²òÈu÷&/^ð4]³N]Š£ÓªdP¨È[öÕ P /ÿø¥>:åTÉcAÏJí!3Ƥyynëô›ÏFkléÞ”sžÊ(ŽÌ0YwßÙð^?õ¹éyaXYT^â*LHEá{çì™ Åc­¡ÁÜ'© n&èK™’³'Ò‡Êk+\È«…I^“#¿*½­ÉñÕµÐT·ø³Y$!*äs é}ÙAîçc×íjn÷$Hå8¶,zQ8ÚM¸ËxkáX¯#.R““D„VWÈ Ÿ÷ôó ëK»@¨¬­uïßý3±Û,e)ïžgút¼$eÙÅ"éÔ+7·ä;$D/”`k˜Å¯ EÿÕyX)»oÉÒÛ^û=ÿ±¨ò¡àÁÆBÖ�ÚWþzÜkaÆOýI®ßp03 eñžÞé5$*.øÓº½iJÈ9÷á„Yï'1ïºýJ,Ÿ4¨ê•tˆÅO­aÔÃ&CÉm —Ò^®jrNÌ á·H •â²H8RÝÕÚ§'¹ä\-º?”UX~Wϰ}!È&MẠY½™}çïZFúŠ ÇÀØÚ‚…omý¿Ù§êY# yo22ðup–ù v,k o'$“AÌë'_më¬L°¶DOt7sÐÝØÖÆçÖÒd“aµ ¼ÃùIKâ,u üá”Ä»b­¬¢µQ㥑™Èû±7ÇëLß¿ÇvóÓwÆÐþ€¡±•TX?ºDtÙ17„¼�εÈ&³êÊ&3Ç]=—tNlÚ$(÷ó€àç_kžÒÛÈo4í^7NàÍå9*VRÈÁ?p½x·©„âö§îPŽœ²¸~Ì>{-PÊb¼_)9®ëpqQ†(Êä?\ ØåßÄäÞ¼e„ãÛ ,ñ?ň”K(¶«nžúγ¯þ3N–nOÀ}¥f–ê`[€P×.‡[E ™zZMÃk{aþ¥Ç‡‚l©Ÿô{åé aB‰P»¼´ä²røMˆo­‚^,}ç/Ë©æ—bûˆ’"¯ÏK”·$('2Èoí- ’WÑMb}ŒhÙYËŒžûÕñdÏRTsúÖPØ2àdg[+Äåe0aÀÉb´HøðwÈÖ6(È5üÅ)D]„ÖCÃZ~3T[Ô šüpm™üú°Bëä~ŒX6/p÷þ6 ™mô4ãÇóWkz#”zöR] ZüH½eÍKÍ»ÕPðz<ëÕ3QÖÐh’y‘©'‚ú0ê•qª›Jž½ªÆN*òñ+ C“ŸQçkRàîx©0çN6õü~±ÏgF‘Ã?HjC`”’®{§"íõJ{áê¢ï°Pys@Nµ(ÀE'(ŸFÁ¿È*°[¥Ì Õœv÷ú0Šè)¯»ÊìúÀã˜Ï-Xœ’>mÀeÏ@€XÛÿKÅš³ñzZXÔ£¾ùuÝýAWª�;ªj³ è‹ó”ôÙ1Í)¦àõ«œˆ°"Žd•Ÿž–åW¶^]Cj®½�¦Ô]/¯‡îûŽ#°öèਣKÝ[èœæ“ 6+¸t× ¡’_n©‹uÃç0 Ï*X-²ž)|tÈÒ�`³gL~' œÿ²NùI :¡]ºY›‘žû6xñÈ!JRu•Ú®®zøÙõƒ'áÛvT+eÁ×Òu –Ê�™béÉãeQ+óy¶À‰Ñ1ì5†ÿ¢…b'Ìà’¹ÒùYïqf‡èâ‰$ß~2Lêþ8¹+šésä˜_0ÊÒn…;¸ŽÕO\Sß’Û~™ô�œ$Ö0¾ª<¹¤Ç_¡ŽÜÃýl¾Y`cf‚ãÃA?’«©ç¶\vÕU̲ˆCÇ«RÖãý‘I.ûžòjÀѯ¿i¡™©žK¯»½ RÎΊ-f™Wðï¿s·Áq†ZÌý~”dP3Ê¢¤— $ÊPÌ-žÐõê®&ðްñ§Eª\µã#Λ$FwIñ²¡ºz± bƒä¨ü“eÐÿ!C sM! YFž5‡ªç„þÞÆÈWáœ./Š$z™‹ìrª5ˆé0ŒL/$p²Û²éÎü�GR¹Å½íÊÑÿ!¾MG#¢¤hR‰€”\[¥…vÔ®d\‹W'i¡ôK±í^ãb8Ûåʬ—õT”_w.¹}Öaˆá Rÿbâ”7EOTEµ"¾•u8œ\‹om,n\8"iPÑÉ Ü9ÉizP•ü©IrÒiMÛ@fa`þ‘[ÇöGã¸rÚs'KYÖŸñ™&Ý;aaðýP ZfÀ_à’$þc§ŽtŒØ2“¯[6‡‰à7†Rš¼SðÞŽÅì2‹QÓ~‰êriÚÁO.-A$vºµX hÓº ýðC~9Aýö lÏíÙ­“i6§9áúoV3ˆ³HyÏÖYÒ±Z!}Ó±�—Ãûq3ý.¼uDöʸ'‚ç'U¥f<zÀmÏÑu�®e¶éR\ â`F!€æ)ß¼²Ô(ÅP¢òòí&PæñRÍûU•ØŽá{–æÒW / 1½m”Ì ªh¢ŸìõÊW%NäwjO¹ºcØ>¸W#OæÝN>^·Vç®øaïØJŠ6YÛ׬®š&[ØàgcRJiÕŠ¬ U†$Á²†$Tú:©jœBž˜¶dÃØ²ü£L,kŒ�ÎD3;H’ÖG„‚ÇoN·¢èÉH°'áÎBTíeÃÁÖoªz»Vg'kiĦG8:‰ËoáP¨6B Û²¹íA íÚ˽ålZÌò—ËîS é:Û~¥A½ÑP/T1­ÏkåY­!z6lßTé?ãØ‰ÆëÍˤcÔ˜%$Ž„\¿îÀÓ±�j»nç§ÉÉ® /›SJÌåc"C5ïߴޏµ•ôOÉ~…å¦lG¨`]PyÏEkWë+~Ö vû¶µtÅN 7šàÕ£«ôºßÏã Vä$è"ŒU×Cç l^§.uå±#Ü!šÂ€8ZðN±_‹t�åéæßß±ºÁ^Úä©ò;vwÍçÅCÀe|ƒÞ-·1,=ó ÛÆš(\ûîh#FÚ’³Å 5ç9‰['nª½±e–g©}Ð|æÁÌ“ޤËÞ’OËðÀI­«Å‹w|9€~t9üÐC÷Ï"ççaHÏw tŽWÅõ1nêúÅ–ã·™Œ(A«Yb=üv™ùº¸€DàQ¸³9éSÞý;°úÜ0 À‡v¾LËkOT™"2ÔÚ­ïѹ³::j¾ýñZãÃÞÃGÞÜ9dÙ¨»’IÊDeeÚ&Y³ÕÊQI<1&k˜¶þˆ7_z¸Îÿ `å6ªΜé©k×[©k¨ÙŒ0ŒT&hM"=X¾ô†Ï)TmZTCÉ1nv1Î’ŽÈà1ÌÐVøÝ›:ín­fÓmy® ªyN�6]åU=~ºn$˧¿9;q›|â$êÈ÷LqÁaîêöè{Sòì\¬%”ðê˜*(ÿ2raéX…Hl;4oXºÔkœnÄ¥|±ÂØsÇ™óDFXTnuX7™‚Úø,ٱθǦ.g ¶¨8 ʧô{LûbLÓ)ó\Ìb!.i7Ûç»—�š€BõÌ™Á›Ð£ó“[bÔ\sU™s$¡ñGÓgé¼oœu}K}L‘ûú€×º7)]nýH¹û¯ qOïã1Ïsû"?·‹ÝýMpÚ>,‘‚vuôöÃDÛul.7DzÐöû ëÅxu‡ÌFÒDÇvrÉbãSžlÅø>ä·‘¢An_Nx/'ÜpW?·G²Þ,1çvDúÎTîƒ"P®<OtöK$(·^ÆDv*$ö°4´™ÕHà(Áï.Zº,ðcä,Ô5ä>àí?ø÷l«ç.R¸‰ÇJ!òLºIŒ?É (]‰ÒJ€ž�ûÇù5’fšÐ? µ¼Náó?F|r»— ýÅoÇáWvJ.KZýRÆèÂÚƒêÍc³Z¨Ê»´s?`o«¥Ào–»mBtk´8¸Î#RñbÎPáEÇ©oy‚&«Er¿Tù._uB©ökóÏ1ùFï,c‹2"ÒÝ©–" ³o¡nJѪP»¯ÕÑÈ¿—¸þ�h8BŽˆç‚?c:¿>µãš6°‰GP´RÞàê6+ë'QHÇœ`´ùó;×øEöˆƒv)ÿøo¹@í NÈ´L<*Ê™ÕÜO¢ZFȸ‹ ò¶/öÝ}^ýÙE-/»CÒlµ³¥Od}­nëÕ¬p‘RëÈHâ1óÈgA™– ñ3&ô«•¸F7¨ôšá²ô¿Æ•Ýg†;»ÛÐÁHÍeEFÜn%Ø.u¥3%*«cÐqi‰cy,D{ªDa@¤©"Î0‹ÈìÜz%Ö@cÓYì3øoGÈYÞÂUø% 0ã>'ºÿªÞYZ¢ýHUnåµË•€õß,2 uK€°‡÷"91œ¯`~8*Ø¥8|eñŽÖŒ¢ÞÝLu2.œ "o—ëÍQ~q-ó“"±×`»òb¡|ûɃo™hÙq¢\zlêÚo͆Fâ¶¥üfVÙ;ñ­ù›£Vš<ã¼C]˜Dôjø‚üݧȼW'™.4œŒq1ÉÚÓÇo‰rÛž%}zBeꬱI­$ñ¡"£B:¦á^xh~fOWCЕ˜ò£ax&ª [£¨à2¤ï6ÝŸÈ]âVQ– _Ô®f›üŠz¿µKO÷,¶íéÏ$SJŽ+BÓ±Ø0ˆ*ùôAŠþwe5,§x§6°méAÒ"6{€o¸4Îùq.,\´…î6î ~L¢Ø}Ù kª/žÄ°3¬¦ÜcÝX'L%ïÅCW ü±=<á=¥:‹; “‹s™ŽeÏ÷J­[CPâƒÊöHê¸2‡©^—¯°V Pæ(ànuˆµ‚æ0wU$R-Œ ¬²å0¨J襡‚Q¯ ÑwBœùçf¼æíCÅàlÖ]I‰M: >ßCÁÿèlî[D‹ˆ¸J,::@bl;3“j|±%8VéÈ0´&ÒB¾˜8•™‚\Cw:n`@ú,ãð{QIûe¯bÇ[Ú±s¡sò‘<¿©ÆÜ6aÙ Q hòD§¾.2–kŽ´¦IÛ!z7ÏÉ‘wµ3kä\m}‹O¾Ç¹sB‡¾ÿ’I\Y%ËÂ–Ì @O—§¸öÎïe뜕+—Ã-˜`‰ l0×¹i\4ÌDVñ¬:‰ÛŽ¢Ú3|§”P¶á¤0ïW¬úiJAI\~äy·WlëÁ‡µ»}ïÂZký4§ÑŸ6*7Ñ€ÿŸå„ƒ}OggfLØŽ7UŠÆÑóc„¥# î%} 5 Q·äŒ7ÓIø÷ˆÜàïäÐCµ¦sg^ú«q£;ŽØ o»c7ë0 ËDá6é›§x×Éù§ÙÁY*{Ö›Z�îœR^ÐZæÍœù‘þø ‘pµe³ìî yöÕé(Ð%#Ñ®›PPŸhŽ¿v”渻¢S·Ž þ^TQƒÇ³~,åÂì°TN¦ÌyîF!éyÚ1‹Ò›íP}Àûaj §bQ¹m"²³ä´Ñ–‡Gù©ñ– þÐ]Šé¸ök+eËô2OKÅKf6K•Káív(PŽOð—?á]Ô]f›×u™™Ehã6n{LŸ¨™¨¡¼¼qÜYÿ5L¸°"ʽ °µ¯òÏØ—„Ü2Æ%ª@ÇãtÆ–‹É¡ò(‹ü8tâYQ~‰@æ¤-6R¶D æ©&Nf6+«Ìç\1¨×}jEz¬gH3>;uzäôÈùÅqÃþ¯5gÃËxž®‡)оÂ{ÃsŒ[}• ÷^Öl)Cp8Éu>”]ð:B‹‚žäx[7Õ!¾,Iûîb!r›!„j]¹G<ðn–3,ÕY.Ÿ“Ÿ¿\!§¨ºÑò«�-züŠÄL8î33X}ä: XaAHYk‰²º__¦ÔŸa‡½,Ÿ™v •O‎Ÿf%ÕMqÒß ó—&Ðgž‡bÊ!¥ñ \Ò1¡§í .Qew¾çÇ] sß]ÝwšOÖÈnü–Æy Íð0ýôD|B3L³i^šP ú$(�=;Dçñeíc�‚c¹ÄܵŠúD�»)É"ÁÀi–H!)ÄÕ’�µG17$Ç~MV„"ª|Qà¶z+†)±žºbHT—nÁ6lÀ¯ÙkÑýÞC´<ó¼R¨àñüÚu°CŸi­Áæ¿pù¡°Y%Þ+ dS@“¤1†žRè_#áËFe,q‹,pîbÚp=~poiÅ•+Í©QöyÙ7úÓA¨àB"©Ì+*BÉÌþÎêñÃ+J¬’i°¸ºDGÅèƒ9ëçîÜ|qÇ1eÁô»–‘—¥+¡ÑžÕÚJi›Ô6ff#ìÞuG¶Ø-x%Ôþí)£YõøÍÒ#2ö­Y5Yr÷2º@Ó­Ü óB'�Ÿd½ñ=—7R,Õ ZžÊ—3ÐbÑ)L=[vß œrÊ׈‚ákì˜s0v’9d>Èòújð€Œniþô£;N0Mb”“o´EpŸ#â§@53Ù•{iß$œz&¡x? 3Œcüv6 F“�^[ýIØ­^A&Ð Å<x¢¾Þk焜Úògx‡ö o;¯Ÿhü÷!S_c9í¤Y6jý%%+7ѤŸKïÁÒ~¼q„ŠˆºV­Üa< âÅ8¶$Ћ~szêHSzR•²¾H¥¥ýõ{+@&(½Ü$1c¦c±ó¥Dùp9þèõnsd0ÞºJËÜ…vÅ.ÉœÒÓ ²a3wG¥½i ¿\á”ô½íR¢qU¸}/º´¸îÛm˜ å~eüCÞ@wTnb)”ô‚¨æØ„ü/*xÁ^#ïø>»¯¿ Èóö²@‹‚Äm“KéS µÜý…js.v!ZÏ/þý Ò’ñ tqPcÕsÿO*϶ù-íÉv´G#ÇU¥ðÙ¸Wæï]^’žå%kÈ:9‰âøb`¹ u\P£ù{˜ŽÇžÁúhHƒ=¬6ò Ô»ö10<W*G¡Êï§‚=¹1ÄKiÃŽŠ2ë?â‡Ý¿f£rüó H Êé~—Ÿ 8Î^¢ÔÝb^LûÔÕç6ÅÃLüñ ³xªâT€Â_fCvQ‰$5¢ÎÈ;ˆh@(Þt'Vu¹l­ ‡æ‚=²Ê,>�W© ˜F=+;±=‡°Ôo&¥’X)o/{QMŒ ;y´ë¼D]Óƒ·ÖàÂþè>úÀFcÔ7ؽ‘¯Áxtó¦XNéyßì{ÆrŘH‡Ú¹o(~’»0µ Ny¬‡ ùû¦”‡ŽÎHœ ê¢+lUÌÕ> ò°vñÐí©‡t'É¥Îg�„»w±]>uôìåš”ò>ú(=i;ä$3=J7j²,qPîTPh|c®BéáЉdžÄ¬©g±}×ÚfUµ<+ÞQă/näM'‚5HåzYÞ‹ ÎòSS²YªçuÕÅÚÆi ’3õ¬Y¸o˜Wݬ² ‚àÿÁöžtÙùri,0¶¢Ë ˆŠ´|§MhÁøŠóh=ŒT¸“õ[h¨cÚeoÄ̉ü<^³Ò‘ƇDZÜ…²É?t ¦Qß/ ¦ÔcÛE ºÞ%lmЕ½õòƒÈð\ÞŒöC>•¦È,Ý*m� ~+¢Ñͦ:—jÒl»Žÿ ä6ñ ‘àž”¦¨ã,AC¢Ž_ñív ·C BI’÷¸&LøyµÔ^—Á1½¾‰'õüç0OÆ¢µq?�{ü«t;S¿ZÐ]!µI#·ÜÞ¿à;àÁHµ×]uKFÒž‚“ldçêfêï/ÏÑ<Ô­º‹§€'üÈR]h§ÛÒa!¡vÐfq£dÙ÷è½¢­o ŒÆ÷ô)ð¾T™çüFìáé˜l#£8ïÔ ©Àß!° Ê^^L28 ¬bµÙ¨¼`Ð7Ò\”åúÞ3…}°ç³$PØ$|Á×â7�»Y­‹hJ¿ã÷iÉ g@K—<Ò3ñJ1SóRÛÖ;ÌlŽÉ)Á@ æóçûÔë ¯ï Ôg•6I0c°ì;[ñ|PI<µØÐÉ"FÂΊ252’Mƒ~P`<JìÞ½C#Ñ8žQ–D¨ÎFX‹ì[,—ßT%«ÎJà¢)Õv‹¿AHz=ÿ\ _oï¿P}aÖ&Ç \Ùq1Õí2,&Û1Ф p ¸CCAHž9üõMœTß È+5ëB\ñŒÌð ¸ó÷üŒƒ2–ìTóñ>Qd¼#$÷gö…ìÓ‡Þ÷æAŽAHŒA~ YtZlv2eO)€LÀ ?çvAßxDÉ=…üÙ'õpMâœ<í2úXÇÅ¢Žˆ£w>Æ«t b*éøMÞC6q3ÃS™¨ˆƒm(x‘ä9Ö|Õ[Õæö1t{æžkJÇçÛ>èd_~šU7»ÎÓS¼ü_pÿßàÿ 3; ‰‹›£½‰‹-Ü�:I×/ endstream endobj 12 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-301 -250 1164 946] /FontName/XHPQKW+CMBX10 /ItalicAngle 0 /StemV 114 /FontFile 11 0 R /Flags 4 >> endobj 11 0 obj << /Filter[/FlateDecode] /Length1 721 /Length2 2808 /Length3 533 /Length 3353 >> stream xÚí’gXSÙÖÇa€ H—"x(Qºô*½¤EABr€H †€áŠÒ1€HTŠ4Aš E¤©RiR”*"½ˆR.:3÷>ïÌûå}Þo÷¹çœ{­õ?ÿõÛko¨°µ­´.šàð$i995@ßBÏQÈÉÀ`z(TŸ"IÞ�IÕ�9UUyÀt;Z}jJŠj0e è¼ý‰O ®/ñC¥èâ@"…ÄH’'ˆ;2A!±€-…Iþ2� ‹Å6?~ñl@è¢e 99�A‘�7Ѓ‡ÈþÀ2Á»�•ßÓh_ï?K~ Ñçˆ ÿI*q¢ x¬?€Ý!²–„£~àÍÿìáú«¹¡/k‰Äý°ÿ9¬¿Õ‘8 ÖÿçíK‰€ ñ•:€¿Ãé°kcBBb1(]¼`¿§0>†2ˆ¶ÆPž€;ëþ̃xô_Ž÷@ÖÑØnæ ùDZþ^µFbð¤KþÞÿòý!ÿËý;>C.ÃŽæ+w$<zÿ\9ÿ¥ÛE<Š€Æà=�[FÑÿJüJO@¾)­pd$-¯ttÏä”UEå[ÿSi‡Ç\÷M �% ¦¢|ágåK$‚xÒÏ›p´å?cwÌÑ€@ ¢ A¶p ñ%ñQÏÕ³â!ý{y”à ;•¬æè½ÕÉS¥ç¶Ú´Ç*½ Ð=%ŽÊ«ó›Eß»M/H‡¤vÅößÒX0}Õ™ö5{fËvÅÒÍ‘TŽ‡Ì–®�{Moµ=U;)V![ÏúÕñÖÒtyKø^¹8¥ÊJŒÛzXG¨&n`3¯OÑ ílzÑm€{3Â=–vH ³$›{í\H9>r‘ù„°ïµc>¿JÙk—æ]顼úKÅgV›²ä§‰V7‹gÅ‹?Kj>n{±É%UäÀdj£·#HÔ‡ÇAºÎáËÑŽÒ±HΜé—ä©ñúWz£&Ú•*Ã?™IpE¶m|}-ïjÿ™T kžN&ݨ]ÈÖä:S´u>o¶Gi¿©f*ò¬éS´³ºæÈIn{;´”_ÄDw¥9gr9b݈S›IGbÆX}±ýôþ\ª^/Ú%‹"‰†ëtQwߘjþúØ âß­ Q¡3Ñ»%~)Q‡ ù[LyÄŸƒ¨,áLè¶Á5©£+)ÄùNõå<&º#;؉/W×­äfhalqCë»… ‰»Ü÷f ¬»*íðíÈÌ`ë³çÄÙƒ‹"Ķ/þpõ¹,=¶í}@{Á©S•‘çW½ x¯·¦jfçóï¥íœÜ ;/œ•Îj2zúMö­¡àíœ9š©è õöüß«W<…S‘›¦iH[™ªýRz&íy/,J«ª¶0©}/ç®}­Ð×'ÍÍóËKá;›*áÂßm>à¥àù3¯Úf~ÍÄØÜÝx?h(sRæø6°éÖÔæêêvÏü¨oeãaÄO/6w2‘D5 &ºD€ž|°«ÐJü¦Èë¼3Š*ªë´‹ú\£ÙoͯÜñæì¦qNÖÈ{oÆ%vOâëûÞÉ_«”áʿÚfVJùÞ&o¢Á†`ãS™1Rkù\,¶Ó츆sbñãÊ µ¸ãvffK_tYèD敲|€äéøcç£ôûZ“dc¤r5a/ÆkÇJG'8¹!ç¸<œëᇡ±2F‹óÝë ­Å—±‹Ì %Ç·ú# »J™)OQ. ·•o qÄpÏðhï勹èfOy³+²š ÊfΈT(Uìl|y0yæšÜcÏþáªÙ<›ÐédDì¢óðl‚ ÍLÆÝ¢bD¢‹Pl°~¤È­ÀðѦgäDÒb,‰«©ë$©ØˆäâeÞ ìë© ´0g|4ð\½Ø§œuâØlÎFàã™I©B˜Bë;_Rm9Øú¾DÐøÅ³Ìn:7I·ji4ö`%‡íðÀðyª¨}M^Ïør¶¯¶»÷HñSr$vúŽÇ+`«4“Ï­¬Æ‹­‡[ J!ÜË`ßÔ—„ðÆ-ç·×:3Ì—`çnœÝ.-S¢~o¼¿õ¥~œÿ@ÉÅzYëãs6ŽB}.åéã¿ ·5¤Ò[ȵ7†‘‚ßë¹¶|mÏx@HsÈ•“£¤O/œ¢ôvväV¢¶öY6zt[>\ñ2FJQôáZÌûâäA\oDºœÁëÒý¤Ý½/Þì³HÚôÇmRžÔY†Ø*…˜ S,*ßw³áî$1ž¢„ÑkÜ9NxnÚˆ9|yÛ\ßönÅ|oÕ½àѹ ªœ*º;Y˪7½h ä/8F·5nس$ãdk^Çú|qj‡Bz 4BÊ(ŽUM2Ý`ã, 8ái±Ú¼³QU _yñN½+tôp_4`NY8p°LñNþ¢p|ž5¢¡Z¨QdÂbϪüì¡XlMŸßlîtŽ~¸êK–uªIu…`*ìܲü†¤ñÛ�ÊïðÙ眰ַéB/×Åj3Xw±¶©;eÓc†pOíÀñ+ÊÜÔ-|1öAHb”èA³^܉®*`~ýílIÚDãå/úö¾¬Y6­#ó}“éòFttáZ¡šÂÛ³ŒÆ¶L¹ÉbÙ6[:én8W=i.û桇›Ÿ¼³­Ü£và ‡õgG ¼¾™6¯„¿þì•V–«Þ¤¶%Ëí¬ ¸ÆåK I4í“â7¦0ˆž«ëtÑ„kí—™ZޱÇ?}RÞ-°ƒaàCE"²ÃåiJ±Y^ª«% >½Ðé¾Ð2T4_M`0vîÃ}Í]ϱ¡MnãÐ)q`(p†`—X­¦÷(œö1»ON~ÏOFWûMòÖM€Å9@Ó‘ÌeºÖtEw[@;W¦¬2}óÜn(¿`¿ežŒèfóÎJ#Od5+.?jO_âör0cÉ/x|*}fKd:}gíøŽE­®5 zLÛÙ¬Ü4mãÉiAì[y'£é:õÓT×µÃø{Ùi<¿.>¼Pêâ±äïåòf!ê¶5újץ͸«×¾U¨¿±4S³WôcýI}’x¿÷q±iåx?gþJ¨ŸO˜JUa×ÊlþJ· nâ˜òÖbÚ¿:”vGýµ€¡ŠëŠÃô¯^Uÿ+ºÛ‹Q)•è9Õwê.ƹe¹L~œŸéœbË'ë´Æ ™a\<….AgŸW´LfJ((QkW¬zôg‡<sÂÑ©2tè·0דp¶¢°cH*µfƒkäÀú¤Ñ+®È€òöÁh[á ±‡ï»–r.‹·cÁZ üHwžRÕ1[SlC=¬=f5öŽU+´Ì1‹Pk÷iÐ!QÌí<#ÇÂhRQUà0ÈïE]"ئ|¹Ž¥?8kp<"z‘)¼IV2×f@û³¯ÎD‘Ô§3jŒ×k¾NÃÕà‹äÒmmIWòþ6TèÅo妴Ñ¥~;q²jïÏÚéÈ-ß¾ëxÑ8†Y®ns &ü&ŸbDœ8_‹ÆŽ©s½e Øñô¿–ÉÇLÔ®{ôÞ–z¨Ü¾E'ç3Óýd_°­”4;Õ”.éníFsìÒ+í³eE¬½ÊÍ×ÔœÍÚ¼—tX͹ÒM>†xöû°Óé”®_¾fµuç d|éz‚í©Fm8¯¼›{[{!ê{?ï|éA„#a<”/|lÞÓ4ìåܨ{cK3$šT&Ÿ(¡QT!(h ¹PQ®)Ù¼TQ ÊÑö=¥âD1~6¸M2Ÿ²Þmw&0çšDÆ­OÔß#ñ­¸ÇC¾õƒþUéÑù”@ê0yQ8*yÝoÂ^¤C Úœ>@k»àú“ –ê[*á ù¤–ß W±ð©>פɫ±Èo?²ûQÛ’w{evå°ævW9äÚEJÚë· w÷JeYæZ*ÍáOꨙ8:·Å– o×U1ÎÝÇe…r}õýµ«A­£s™¬†Å7Ç;›\l6Kµh‘FîU!_ wIkd©´¼Gê‰íj*Cxü =ýšxÍ‹"™á9Ï?)—moüFKÇÀõžš\ÑŽê§ùÈ©'#Zý”¿—†>´"NŸ¾]4Tv+·S'zñrDÇú7ÐÉ!plX3vFšr¾xÉÀËß7Ì 3OÜšíºÇk)/Ô­ýžAp`½*£?Öv)=¹ßã°ŠÎÔ˳bø¨²ÊzîƒíLJce˜eê4Ò¹ „©qXv72Ó>F…ÛÒN‡fˆÿØk?¾uJ†Ü ÷Ú¶¤ÜÊx´÷:+^¾SSH&ž(ç�‚Wç½=]ŲxÈJÅ•Ô[©å—û\7‹}òi^/Z›Ö-2­îiÙWoëpþnþe].ö{Ž‰Î°ÿçù¯Á„ "‰$Iô‚@þ klÄK endstream endobj 15 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-53 -251 1139 750] /FontName/CYZVRG+CMBX12 /ItalicAngle 0 /StemV 109 /FontFile 14 0 R /Flags 4 >> endobj 14 0 obj << /Filter[/FlateDecode] /Length1 716 /Length2 2582 /Length3 533 /Length 3117 >> stream xÚí’y<”ûÇC%CvÂc+ûÌk¶áp‰,‘eÌ<c&³3sŒN¡"KeÉC‹ˆCDâ([Š(âZSBÙ—,%ÛH®êœs_·sÿ¹¯ûß}Ýçùçù~¾Ÿßçû~¾Ï£ªèä¢m£úƒ6T C®7¬,=àº�\QUµ¢ƒ‘JAa �74„Ì�@À!ôŒôõ UÀŠJcÓ‰ f¥þÕ…,È ˆÅP� ƒ�’·B°àBÅA[�,H$Àùë‘`À é,§Àá�Žˆe�þ`�‘~…²£à©�ò»ŒcÒþh±@zð ¶Å©lQâ¨ÀxÔ‘º5 Übù±þ Õá6LÉCþÿmQécÈDûw•Lc2@:à@ÅtÊVwð;œ%•ô—1v ‰ˆµ @�ö]"ÛC@œ‘%�x )ü¦ƒÜ[kû�µ:îéæü“æïŸô{× C¤0ޱiæ~µ«áÿ¬·ÖC'†�^0 ¾eܺÿxòþaš5KÅ)€ CÁaè¸?…¿RYZRCNië#�m]}8�‡# ¤>ìô¿])Ä &h‡ôa0òá7ˤÓA ãÛo°õÆÔxâÖ~@0ÄB8™RD_-9Í%¿Oz”ܾèu‚ÔäÎ^Õ_¾±§½yA´CçåÉ ‘NŸúvsgœ.¦­ª)˜E—žq0Nx´ìó„Í–¹óf¾¥ÚkxɨèÒ„v‡D¹'/´n¼øÀ׫Ló†þ)Ÿ"q7´ÚŠÒë=Mgj_áîxjÖ>ë+«Úf„í±þ¤™å»\²“Òf…ó”ØÇ.Ñ•8M>‹ˆüâºh®íÖuß6p"A¬c©®ø„ÂO”ñŸÒÎç3Ò=J“ÅÒÊÄ?·uG…™Ä×ð ¾”êÛ|-÷½×1T&­üúmügÞ£YYå^™GçUz\U4.Þ¸hW¼¸-Ù;ýAz^æ„íöâÀqåO6ˆ TÎ]n“n6ÌÛõHUBGéijskѨ[ø˜tPÌß×.‡íöMñÑ7¤•%µ»@­n%|ÞCu� ƨá7|SM¿=®¾:­å•÷pLè”}nÊP ¤¯žöþðnHézÕ±à¥ÉÖÒV—©¼áôüél±£B©t¡ý³‡º¸-3•ÿ•˜SËΣâ´7ׯ3ó¨åâ$n[#Ë#=3nAÁ#å·ÝÐÿÑG¶ò´€°ÈëB0 tbñ‚SÅó±c¾A•Õ,C¶zÀ¨l¯1%ì¢iú…ž1{—:Í*ÝH¯d\ð}[DMÈÓÕѦqÂæ¦jAÕ¥Éx:k‡JoËÙ•S0çVoüâ‡êÕÜ“f÷m¦=NõÕÂTYÎmoõýcg‡úÔŒ=;eã$ËTú®¦AšoŽ>f2:Òm\±±ípìl5G» ÿ,ÚÏðjJ9ufI¶¬°ÞñÙT ›&ÓÄwÓ!©êËÁ†X6ÿ2"*Ÿ×ó‰‚â„i£&Â8ñ’ 8­Ñ68'AI{» þ­ôñZ²VtJl<­ž/A’2& ·�¦ø\&ò(QfĽ=V¬p KZbA×7†ÓGRRŒc½¬˜>±£’ß öÝÜ'Ï–µËUÃ7e!ɵ›a²( ±êœÏšët6WÝ€ËdAnZ„‰ã[>« õëx¬Õ~»Á]PP8?˜¤M¿\ÞLÍIBÜ3$gJWzI@—À£®›rýÑ£ÄÏrï{ä½ÌŠ6ä;%ÚŽõtV˜›ÌK1@ÌÛiÀàGt‡k2˜ñ5ù¢¬}s«Q w̵©Ü8–»3ÔœìTÑb çÿl¦´ØWr«¦Ú÷¡Æ³6~žÑ$ÿØp‡µŒ¡„wnÙéÝå´ê)±+æ»5šõb‰÷D¤„ ï3ÈŸïx>h®l´zNØÖ `[ŸÎ®ÂØ‹í‹vTúÕ¤Ö'14ù±JµØÚiׯ4Õ–­ÐP€¸‰¿)6ƒW÷Kx¡ãeêà`P,Êî‚ÞTó}Yq<êíüœçÅ~óíõw{Ñ”§#ÄzPêv\þÁ¤!ý‹µ‘,= Yh„â×L]-+™²Ò²Pçµ5öS‘‚}.ëò8e¯9?onÕ•X¾æË”7©Ï TŠÏpÒbŸ@Ì.‰)/Eì9ØœÞ{iôêØ)>ž¨#&îï×¥ï—YE­ôé’Ï G.%•È–ÐãŽòi±*JÐG8÷=µÐ_Ì‹Mœ‹A[Ø_DFðiÆ´#„[·û7?¨®¸&àeÐ*ò¸jZÚlor¯d§àM÷Hs)ïÕnß!µ–LSDÎ}ù'•mg'fõÅìãÙ€øÇI"gá×¢)Ø–—ÂYFtš!Îýºª¾9[ ´i蜌¯Ý«U;÷\ˆO¤äUãã†p²bÉÊî™=I!䡞í]NÛLÌîÙ{úœ~LW±îRPï†=ÚǬuaJžoÌJ¡fLFåY pX&x>Ù.^)=Xs“s߈{=,;{Á½cÍÃýòýKù»¢Ãkò‘{ãÞ+¼óÿ¥I$^É3ÇÈìÿÔµ€ôôD‹_óÇîtéÆ×¨0Ã…VŸt›¸r<Š#^¯4]tÇÙdÅÏg_Kê{&/Ošph~|7¾þáe´TVA¡õ‰B½HšWÃþöµÛrªÃ K<üï›^ß~æŠüy‡š@î镤D%Tù´¼æ¹ý:pÃä>~ÆÕ{ëœÆZHLå(W>þmÄ“®êç«NàTtúê•Ûs‡ÞEmçhb¯vÄô{K®E;¨YµB[atØï ’“Q}3îc Ô~¬W¬ÿË„é¿òu%J°I'j©_cG :»«_/Ì(Ä2nmKÃ[ßãÐRѾ²0‰Ã‹ÂŸ+Ò´tccwb_v,~Á$ÐzÎJ¶–OÜ*µ {”„™½Wçp-Üþ/›‰ vU¬`W¸†sòÎȘfiFCˆ)…[2<·ÖSß³±×ˆ%‚ŽÞ~XÚîCù â5ÊtZ¾Pø8fôZ8ÓâäÓrõžÿˆ‹5TgJ L€'u.©p•Ñ"k¯ÂÊ$dâ:åünI¼~QbÆ?º®èÐã~V‚Y‰jŠ|3_™uÅlŽ}Ryì)¨ã¶‰±°Ugük{²¤J sËÕ]ŸTNTME?SM’eí¸gÞ¸ò>,a’xÞ¦2P’ÓSȪ rïÑjb¬î¾¦æ¡hasKЉ§µ°Ýøƒê"¢Ó#/¡(•%iI)ÅŸxÉCÂ‰Ž²¾÷‡ÚäÂ$‹|ÈzjÇB%µM¾<YèŽYé„"²tí7ϵl:PúÎN¹µ\ …I]~+0{oàáÚ$@0|›ãûzýÁÙåž OÁ¢/áoEµ5W±gìL›ÝM $mÁ€}¤ç®´ö=Û^MNŊ儈¹š,ˆ¦î 4ÈÌDæFJÌö/þH‹·,Ks)x/Š,Ú}rí–“/²ž{AˆظÏo$Š®›K×äL„jç¶Y_dßߕǬmçO6ˆKáâ¥&n|h»ñ(Ú7g£æ%=s“;T€¼ÅÊ�+º¡³¯qYÌ‘õódníì¹|fJ‹™ìæT7EQªèôùÞÊ/8­/—ǰî™có%­Ÿ¥ŸCV£v k¶+¬�õ‰„É£Õ#ñ¡¡Že‚ÌŠÐy‚ò‰£¿¸Yè^ ‚‰2xm^-¯†%jkqgx¬ô2#'.ßÁ êíÌ2ž{h›Ñ±:ý[WÏ5F#,yä„Åßp™=o®ˆÙXÁ$ÚDmò\‘þÒ Û\<4%Þ ,Ïž<s‡‚(U?"Õq¯—¯CJrB=æÆïÜçŸgY¼;­-7P1A’Q91ç-n{ok¿é —b_ÑYØlc ×Ŭ˜Ç ë<µØÎ9©.¯Ò¼1}‹/ôÏn[©ÃÉZÕÙ{µf»5a¯(ë'²ÇMÉÀ¸4 ¥_\±$³ÃóqöUvI™û//Èÿþ'°$CgPÉz òSÎJ_ endstream endobj 18 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-58 -250 1195 750] /FontName/NWSIIM+CMBX9 /ItalicAngle 0 /StemV 117 /FontFile 17 0 R /Flags 4 >> endobj 17 0 obj << /Filter[/FlateDecode] /Length1 713 /Length2 3449 /Length3 533 /Length 3993 >> stream xÚí’gTS{—Æ©*”®€h)Ò„Þ$€DJ"]zLÄ„B(Á�Ò”^D$¨H¸ H‘^¥H/  ¢4)‹޹יּw¾Ìšo³æœ/g?û9Ïþ}þ¢Âp ™Ë( ´!O’É‚ÔS=[5 HV * !¢$ ¯ ¡Õ 55ð²PARVWTVW��¢@Á“Lĸ¹“€K¿\*ÀËh"‰ÀM$w´ÇQZ4‰, ^Æá€æ¿^ñš£½ÑD_4J��€( ’¼vÃàr¿˜ xWPåOåãùWËMô>âJq^Q¢xˆB»äÌGÓÐG,ÿc¬ÿ†êïá†>8œÂãWü¯=ý£ðÀàÈÿa xxúÐD )…&âÿnµAÿɦGÀýc ”„Àa—ñn84PþO ãmˆñG£àÒèŠÀy£ëh<êïG[û gfc…šJýùCÿlÂ<É’ìùïØ_îß5è?ë£å1þ@{yYyyБñèþëÉñoà ðH ƒwZx‚ˆú·ðO(==‚€ X(£�>:@ 50P,ø_VxŒ—ªËËË«(«üV‘>D"Oú}Ž>ø¯Ús´4Úd<âÅÐ;K Imºl4Ž\°yÝ3 Ôå,§·¨|}k¬8fÙw7#°ð1öÝ%xLê‰ó:÷JƒL5â·œZÈdÂ|’®Ýµö³›êE±4™îWv r +è˜jgû2)*8À‰ùÔäw•äYÿ­M˜¿boäMPý8ªÐNª¾s¬ìsÔ\ :rÄÀÏ8A*Óy«ä¾‚²ã>C.QàôU ;°Zו± *7ÂÒâ86ŠÎ_Áϯ9•v-‰¥Û–&™s¦–qí÷‡k>¨cd}Ç;v8!Ôc`|Úì–@ê«,šç¼õÌÌ ‘QFÊÅçáÉ'оµWØ,õÃ…þ)a†Iì/«ClÌk‡Qö)Hôj[T/¨!.ª ðXó°«;õba§·ƒ;qшg2«9yYoàUgóçú hàæÙ'͉Çlæ”Ô+k×¾D�ع¦`»Ý¸²ŸuFgåº)º±Zq²޳Jnõ$ž~ª®÷LÕ¦‰§l£…Îa5‰þ[óë¡ùxø;{òŽÃ£Ýí§à—~ó»2ÒÖSÚ}®«MŸVœÛ"tÛ;]u #G!”!Í™#xH“zCÛŠ²,–4bâd»©Pý:7òÜöÉ6œš(a†à0@kJ»·+¯ê•Ï�ºÞ'AV7ÆóDÝs¹+BÛHŸN‘uXÔW}Ð'Ozù4âO–ÉZ ~uÇ!Ÿ%¬T©½–7ûáîtCÙ1$²K[Ô½¹Ðàúó¬¹%} ÄE ƒ•榩†Êaw;x22ÜÎÔA½øò- \×>Ö±ì ÉnáªS_Èao{d²àÊÕ@*Y;þrT6gͺcLbŽ|‘ç÷a®Ÿ©ò~è!J‹džº,²¼zßw¥ŸÿdHx½ S€`Luto›e>sK[ ˜0i\aÔ‡^¥h}3ˆ›9•â¦Òq¶ŒÎ¯‰),7àÕF¡—ªvO¨_ÐÝ_ÕñVUë,YY²““ÀÅ^•Ó–iŽB=Çå“v¼£aÃO–†T›c>Ôd÷ibŸ/$ê+.ºFæ³ä8ùâÍæÂ,·õçÓò‡J‘¾ãZ!ôG*-Ìc™ow±NF\‡—Û¹š¹é"óãyúΜv$⃗Bz_±<YßMbÁ•|Û«áv¸›cA?Wlžs”W2Š’;X°Vé{s½=ÈÎLÝÅÿéÄ«~m'»ÕӱȶÔ7AmVȹq™ðÒ¸2ÞëÖ‘E3OšI~­K61Z­M=©,Õƒ•ï·ed7«šÇ´ÙW0/[°½gãõ0ƒo‰»Ñw®ÑܵÜòñv±v¸RÄë¯>LÙ£¦‡=ùIž2ƒqè“]HƒÜtMŽÆhÖK7Z·2ûØ)¶1'Ï›L¿•Ì·†3¯þ¸MPãïц%JÓ½V¤Z?á_kzÜîü¸uÜŒÿü‚´^œ@ý…à¤LÇCè[ÂÑFQ„V¶&ƒíñòãyðCöMÏ6­~öä¢mö ³ö'—Šul²ÝÆ×mè/I{<ï¬;7…3eÓ;²�ž„”>7¡KJRÖ™Ûÿá/ÅMò•ý¬l"½°·µÇÅꆚ)…8©›>D’?šEµ˜‚Þ,¹7®ÇZœ" ”õàîÏÏÝ߸¸âÍëQ+.Ðaøþ„¦µüÇš“xÔö®"쇱¸qþ²$äò8åâç~žœö·ãrަj÷Óé¸ÎÚ¤qt¹¨I7©…X… HòP#oê΋isˆ…ÒæÁÂA—”ŽÌ8›¯5ÑÓ»âUˇå˜0:È÷RJ…FáÝ›“ƶWIš÷KUyÔ’1ò`Dø äs°j‡äÂ=½ÞÜbÐÙ3’öÖáŠ:îRp¸ˆ³Ó›ÁΚ1Ý y jrß—ïÄ•ñºõ ²ÄÊÕ~ÕÎyÊ@0æ‹uw÷‰Ðù/? gé…6rIg‡~3öJ°õÛcî2¢Ýrj’ÕŠN·y¦œ u—ƹüÙY£Ñ68À©bÊŸmIyë+jCN嘪ÿ4ÇsÉYJÒï±0}œé«#sÊή’®*èôðÜdxæËºûÃœí´¯j)6ü,­½C1·š4íÐ$;òj\ÇÆ³²¡Y»ûØÇÁ$†Ë„$Q –Œåô¯íƇ<5멦ÆhgMDýôý‡Ýóu±bù`´|Áƒ{ô"[ÑÝÐß°³Ã³Ä»Mªþ)ùI7Ye3k—¾ òÉ$©h½›UkÜã¼Ú~1uš&ÌÍ& Ø{Sã¦2.ÍkF¹x†Sl“¡;7—u¼¥¼J³‹÷èo‹èܸ0Üa Ê©cáÔ«U,t×vqZÓj£"ŒÍIÒr‚\O‡Úž­Ì‰îˆ®™JÐ)Ë“RìOY¤°B”×B€ð¢çuÂ'›†z†6Ûa¤Qâ\òUæ¥Í-MëíѨiÛˆéŸöï”sbžãÇbq¾#sñÕ"Å„Ûñ,ßrŒ3BLKP¸‡Î↚ÂêÈ;iÖÜBÃ.M¶©õè)Wj5轌Âb­ûi*þV:ǹϽ/…@LY“(ÇÈyëã š9¾sFº§bç°ƒÃ3Rï6صÍ¾ßæÓr\úZôlÎ]ôœêœk&ãd‰U)#¼J‡æ,]”*Ö•ðu+ílió [šÌÛ™¶kÖmš4 n~c:åçÈá¬"Ȧìu¶}ŠÀ0}úCd¯ŒæX)Ix5ñ—8vݧ½{c å|„•ke¶«}¿‘µBœëYãò{µZG{—ä´™}ã !~Îp–yFgŠøØw&ÏûRF¸à.êÅÐE§Á,mìëýó¬ º0ÜcyVdzÙ¥Þk`tY®ßÄ¢À´wÒܨ̗äîQ:ÉÌyýez0dñYDªÄ‚Ìx ,9-Zƒì1Sr@•.mÔŽpï„ò_‡&^ùh86:fjif(×h™1ŽÅv F¤ðïFŠO“[ÝöͳQÃ÷j” >ƒ>’²[XùÒ ª\ÉÑúÎtÀuVoDã²ê˜_Ú7‘Ý’´€Ù=.McÉïW.4·Óñì±ßØúÑé2_ÐÕøÄfqƒØÅyëŽRTo‰¿~ M~(¶?+$NÑ‹¬£OÎ{¿êJï5…w¤Jsì+Ù’£¢¢4ã<Ÿƒ’WÓÐÄ Š„LÝ-VãÖTäîƒ;¬J® —õ¾*Sdy1¬µrÛÝ»wÎ\míç…ýã—b^«zI¶PüÖ݆4^oX ®Â y:ÐŒ*WCÝU.,³·ªb =Óü>R€þWŒc}p’LAèç¬c—¨r¼L+Ü–+€¡ªtl:kÎ…ú¨iâý“¹Ø¯móZ™ïÉÑ,kS¹©iz»ãn1žW7yÉêcI~€ÊE“UŠN›7äÚNø8w[‡›táÁÜÃtÿE†o9 «5<:,õ%xªZS©™Þ$C´@ºÁ¡€FTxñ1bèÅA»#°| I{Î"Œ`ˆµËDUqàEèoÑö㕽8ŠÊ…ïhªei¾"91èH U³t ß 3Ôð½Ýš.y fL^e:óÂãP¡†Üú,Ôi^!(&NänÞâ´÷•Ïuï¬ä¹§1[{aã.‡&(À†²&f3È’z·Ê€§R!%,qµ‹JeRŠ´qâÚdž7«ÿOêŒ*#MÜVj·f'VzávWñÊ'wåAM•JÜ›C „ì[qÑ^2kõ¶xOõ×½Œe÷L®æã»l\fÜSAÌ7kù¥,N•ïk™!&ß#¶gw‹n_¬.à «F/Ð ¤<R§{bʱ°!“hËmÛTKñdTˆ‰“öKnãïÃuó^щ6¤,«Yô2[súX‚¯Øìó€k~ö+LjïcöËÉ©v“¶g¦þà[²®V÷’І[YÍùP>¼�]©bqnЬG~Eõ!C¦0Ó?CûvmNGKŸ�ô o}p¹7öì~ Y!ç ïð!]6>—ÉeùÇz"ûf`አãH”¾úði³?_’ãþ�ˆ•Nû¢x£'rö¤ï¸zäA<Æ }N 8Ørü5}˜ŸŸùØ^¬˜PÕc ×èOcÓ.;.ËŒŽ·t*nvúh“É®»¨2`ëÒɇg«TºçQ3'4 Í‚u‹u·ÀÿÙ|lš@jä—H6Ÿ-Áâ‘Å?‘~—üÙÞ‡E>pKøyý5{­«Àåó¶XÕͪyÜvE6餠֨¡Î]moRvÊT0ñ˜`ÍEže/ƒÙúˆ¶žëæ;¾„š±~OA#¥2é€Î ÉØ-ÓDk$ê”û·$Üù(gÏÏ \IâºÇƒpØÝçþ>¨ÚÌ[÷ê- 5^?«ð¶ð«ÁUÚ|•å}Çþ­iøœ’@«òrk–VÔ€ ¸tÉ:-Þ4få\¬C}Çbnjǔ²Óý·ó/òÖ†…ËÏÍÆ§"f˜6³@üaž§¦˜—ä5Ù”f‡fø`š‚¶¢iÑrs;¢Teïá9#%¾o væ/§vvùÚ´õí›äåÿ—àÿþO qh‘Dð@±�À¿�Š»öB endstream endobj 1 0 obj << /Creator( TeX output 2004.10.19:1439) /Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks) /CreationDate(D:20041019143951+01'00') >> endobj 5 0 obj << /Type/Page /Resources 6 0 R /Contents[20 0 R 4 0 R 21 0 R 22 0 R] /Parent 3 0 R >> endobj 3 0 obj << /Type/Pages /Count 1 /Kids[5 0 R] /MediaBox[0 0 595 842] >> endobj 20 0 obj << /Length 1 >> stream endstream endobj 22 0 obj << /Length 1 >> stream endstream endobj 4 0 obj << /Length 33 >> stream 1.00028 0 0 1.00028 72 769.82 cm endstream endobj 24 0 obj << >> endobj 25 0 obj null endobj 26 0 obj << >> endobj 2 0 obj << /Type/Catalog /Pages 3 0 R /Outlines 24 0 R /Threads 25 0 R /Names 26 0 R >> endobj xref 0 27 0000000000 65535 f 0000030427 00000 n 0000031017 00000 n 0000030692 00000 n 0000030870 00000 n 0000030591 00000 n 0000006497 00000 n 0000000009 00000 n 0000006744 00000 n 0000006558 00000 n 0000000913 00000 n 0000019245 00000 n 0000019055 00000 n 0000001829 00000 n 0000022901 00000 n 0000022712 00000 n 0000002765 00000 n 0000026320 00000 n 0000026132 00000 n 0000003711 00000 n 0000030770 00000 n 0000004710 00000 n 0000030820 00000 n 0000006431 00000 n 0000030952 00000 n 0000030974 00000 n 0000030995 00000 n trailer << /Size 27 /Root 2 0 R /Info 1 0 R >> startxref 31112 %%EOF �������������cb2bib-1.9.7/PaxHeaders.3194/AUTHORS����������������������������������������������������������������0000644�0000000�0000000�00000000074�13124510115�013376� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 30 ctime=1498583182.555258944 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/AUTHORS��������������������������������������������������������������������������������0000644�0001750�0000144�00000000016�13124510115�014760� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Pere Constans ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/PaxHeaders.3194/configure��������������������������������������������������������������0000644�0000000�0000000�00000000074�13124510115�014232� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 30 ctime=1498583182.719257421 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/configure������������������������������������������������������������������������������0000755�0001750�0000144�00000026205�13124510115�015627� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh #------------------------------------------------------------------------------ # cb2Bib configuration script: # - Checks for QTDIR # -- If set, checks for qmake at QTDIR # -- If not set, checks for qmake at PATH and other usual locations # - Manages Installation directory data # - Runs qmake # # Modifications for the cb2Bib Gentoo build descriptions # by Hugo Mildenberger and Andreas K. Huettel # Copyright 2009 Hugo Mildenberger and Andreas K. Huettel # - December 2009: do not use temporary files, fix sed regular # expression, set both enable/disable for options, and add # call to qmake option. # # Modifications for the cb2Bib Debian distribution package # by Filippo Rusconi # Copyright 2009 Filippo Rusconi # - June 2009: replace ' ' with ':' along with use of IFS=: as # word-splitting delimiter for PATH-related tasks (Thanks Lionel # Mamane). # - September 2009: protect all shell variables against spaces. # #------------------------------------------------------------------------------ # ( originally based upon 'shell script to configure doxygen', # http://www.stack.nl/~dimitri/doxygen/ # Copyright (C) 1997-2001 by Dimitri van Heesch ) # # Permission to use, copy, modify, and distribute this software and its # documentation under the terms of the GNU General Public License is hereby # granted. No representations are made about the suitability of this software # for any purpose. It is provided "as is" without express or implied warranty # See the GNU General Public License for more details #------------------------------------------------------------------------------ platform=`uname -s` echo echo "Configuration script for cb2Bib (Unix/Linux/MacOSX)" echo f_prefix=/usr f_bindir=/usr/bin f_datadir=/usr/share/cb2bib f_desktopdatadir=/usr/share/applications f_icondir=/usr/share/pixmaps f_qmake=NO f_make=NO f_enable_cbpoll=NO f_disable_lzo=NO f_disable_qmake_call=NO while test -n "$1"; do case $1 in --prefix | -prefix) shift; f_prefix="$1" ; f_bindir="$1/bin" ; f_datadir="$1/share/cb2bib" ; f_desktopdatadir="$1/share/applications" ; f_icondir="$1/share/pixmaps" ;; --bindir | -bindir) shift; unset f_prefix ; f_bindir="$1" ;; --datadir | -datadir) shift; unset f_prefix ; f_datadir="$1/cb2bib" ;; --desktopdatadir | -desktopdatadir) shift; unset f_prefix ; f_desktopdatadir="$1" ;; --icondir | -icondir) shift; unset f_prefix ; f_icondir="$1" ;; --qmakepath | -qmakepath) shift; unset f_qmake ; f_qmake="$1" ;; -h | --help | -help) f_help=y ;; --enable-cbpoll | -enable-cbpoll) f_enable_cbpoll=y ;; --disable-cbpoll | -disable-cbpoll) f_enable_cbpoll=NO ;; --enable-lzo | -enable-lzo) f_disable_lzo=NO ;; --disable-lzo | -disable-lzo) f_disable_lzo=y ;; --enable-qmake-call | -enable-qmake-call) f_disable_qmake_call=NO ;; --disable-qmake-call | -disable-qmake-call) f_disable_qmake_call=y ;; *) echo "-----------------------------------------------------------------------" echo Error: Unknown argument $1 echo "-----------------------------------------------------------------------" echo "" f_help=y f_error=y ;; esac shift done if test "$f_help" = y; then cat <<EOF Usage: $0 [--help] [--prefix dir] [--bindir dir] [--datadir dir] ... Options: General: --help Print this help --qmakepath dir qmake fullpath name [example: --qmakepath /usr/bin/qmake] --prefix dir Installation prefix directory [default: /usr] --bindir dir Executable installation directory [default: /usr/bin] --datadir dir Data installation directory [default: /usr/share/cb2bib] --enable-lzo Enable linking with lzo library [default] --disable-lzo Disable linking with lzo library --enable-qmake-call Enable configure to call qmake [default] --disable-qmake-call Disable configure to call qmake Unix/Linux only: --desktopdatadir dir Desktop data installation directory [default: /usr/share/applications] --icondir dir Icon installation directory [default: /usr/share/pixmaps] --enable-cbpoll Enable clipboard poll --disable-cbpoll Disable clipboard poll [default] EOF test "$f_error" = y && exit 1 exit 0; fi echo "-----------------------------------------------------------------------" echo "Platform: $platform" echo "-----------------------------------------------------------------------" echo "Setting installation directories..." if test "$f_prefix"; then echo "Setting installation relative to dir: $f_prefix" fi if test "$f_bindir"; then echo "Setting installation executable to dir: $f_bindir" fi if test "$f_datadir"; then echo "Setting installation cb2Bib data files relative to dir: $f_datadir" fi if test "$f_desktopdatadir"; then echo "Setting installation desktop data files to dir: $f_desktopdatadir" fi if test "$f_icondir"; then echo "Setting installation icon file to dir: $f_icondir" fi echo "-----------------------------------------------------------------------" echo echo "-----------------------------------------------------------------------" echo "cb2Bib Info:" echo "-----------------------------------------------------------------------" echo "- This version requires Qt 5.3.0 or later." echo " " echo "- Set the environment variable QTDIR if this script cannot determine" echo " the right Qt qmake." echo "- QTDIR will only be used during configuration; it can later be reset" echo " to its original value." echo " " echo "- Alternatively, set Qt5 qmake's fullpath name with" echo " --qmakepath flag." echo "-----------------------------------------------------------------------" #- check for qt --------------------------------------------------------------- echo echo "Checking for Qt/qmake:" if test "$f_qmake" != NO; then echo -n "Checking for qmake tool... " if test ! -x "$f_qmake"; then echo "Specified $f_qmake could not be found." exit 2 else echo "using $f_qmake." fi elif test -z "$QTDIR"; then echo "Environment variable QTDIR not set, checking elsewhere for qmake..." echo -n "Checking for qmake tool... " if test "$f_qmake" = NO; then qmake_name="qmake-qt5" qmake_dirs="/usr/bin:/usr/lib64/qt5/bin:/usr/lib/qt5/bin:/usr/bin:/usr/lib/qt/bin:/usr/share/qt/bin:/Developer/Tools/Qt:$PATH" qmake_prog=NO IFS=: for j in $qmake_dirs; do if test -x "$j/$qmake_name"; then qmake_prog="$j/$qmake_name" break 1 fi done unset IFS f_qmake="$qmake_prog" fi if test "$f_qmake" = NO; then qmake_name="qmake" qmake_dirs="/usr/lib/x86_64-linux-gnu/qt5/bin:/usr/lib/i386-linux-gnu/qt5/bin:/usr/lib/arm-linux-gnueabi/qt5/bin:/usr/lib/mips-linux-gnu/qt5/bin:/usr/lib/powerpc-linux-gnu/qt5/bin:/usr/lib/powerpc64le-linux-gnu/qt5/bin:/usr/lib64/qt5/bin:/usr/lib/qt5/bin:/Developer/Tools/Qt:$PATH" qmake_prog=NO IFS=: for j in $qmake_dirs; do if test -x "$j/$qmake_name"; then qmake_prog="$j/$qmake_name" break 1 fi done unset IFS f_qmake="$qmake_prog" fi if test "$f_qmake" = NO; then echo "not found!" echo echo "Please, check if required Qt/qmake is properly installed." echo "If so, set QTDIR environment variable to your Qt root directory." exit 2 fi echo "using $f_qmake." else echo "Using QTDIR environment variable for Qt directory location." echo "Checking for Qt tools at $QTDIR..." echo -n "Checking for qmake tool... " if test ! -x "$QTDIR/bin/qmake"; then echo "QTDIR is set, but the qmake could not be found in $QTDIR/bin." exit 2 else f_qmake="$QTDIR/bin/qmake" echo "using $QTDIR/bin/qmake." fi fi "$f_qmake" -v #------------------------------------------------------------------------------ # Set directories for binaries search #------------------------------------------------------------------------------ bin_dirs="/usr/bin:/usr/local/bin:/bin:/sbin:$PATH" #------------------------------------------------------------------------------ # - check for make ------------------------------------------------------------ echo echo "Checking for additional tools:" echo -n "Checking for make..." if test "$f_make" = NO; then make_names="gmake:make" make_prog=NO IFS=: for i in $make_names; do for j in $bin_dirs ; do if test -x "$j/$i"; then if test -n "`$j/$i --version 2>/dev/null | grep GNU`"; then make_prog="$j/$i" break 2 fi fi done done unset IFS f_make="$make_prog" fi if test "$f_make" != NO; then echo "using $f_make." else echo "not found." fi #- Setting dirs and start qmake ----------------------------------------------- echo sed -i -e 's%^.*cb2bibdata\.path .*$%cb2bibdata.path = '$f_datadir'%g' \ -e 's%^.*target\.path .*$%target.path = '$f_bindir'%g' \ -e 's%^.*script\.path .*$%script.path = '$f_bindir'%g' \ -e 's%^.*desktop\.path .*$%desktop.path = '$f_desktopdatadir'%g' \ -e 's%^.*icons\.path .*$%icons.path = '$f_icondir'%g' src/src.pro sed -i 's%^const QString C2B_DATA_DIR.*$%const QString C2B_DATA_DIR("'$f_datadir'/");%g' src/c2b/cb2bib_parameters.h f_configs= if test "$f_enable_cbpoll" = y; then echo "Setting clipboardPoll enabled" f_configs="$f_configs -config enable_cbpoll" fi if test "$f_disable_lzo" = y; then echo "Setting lzo disabled" f_configs="$f_configs -config disable_lzo" fi if test "$f_disable_qmake_call" = NO; then echo "Running $f_qmake $f_configs -o Makefile" "$f_qmake" $f_configs -o Makefile else echo "Writing qmake flags to file 'qmake-additional-args'" echo $f_configs > qmake-additional-args fi echo " " if test "$f_make" = NO; then echo "-----------------------------------------------------------------------" echo "Configuration ended. 'make' not found." echo "Build toolchain might not be completed." echo "-----------------------------------------------------------------------" exit 1 else if test "$f_disable_lzo" = NO; then echo "-----------------------------------------------------------------------" echo "- NOTE: cb2Bib requires lzo library. If it were unavailable in your" echo " platform, reconfigure using --disable-lzo." fi echo "-----------------------------------------------------------------------" echo "- NOTE: Type 'make distclean' or, preferably, untar again to set other" echo " configure flags." echo "-----------------------------------------------------------------------" echo " " echo "-----------------------------------------------------------------------" if test "$f_disable_qmake_call" = NO; then echo "Configuration ended. Type 'make' and 'make install'." else echo "Configuration ended. Run qmake, and type 'make' and 'make install'." fi echo "-----------------------------------------------------------------------" echo " " fi �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/PaxHeaders.3194/xpdf�������������������������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�013211� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 29 ctime=1498583182.67525783 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/xpdf/����������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�13124510115�014654� 5����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/xpdf/PaxHeaders.3194/HTMLGen.cc��������������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�014773� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 29 ctime=1498583182.67525783 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/xpdf/HTMLGen.cc������������������������������������������������������������������������0000644�0001750�0000144�00000020430�13124510115�016360� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������//======================================================================== // // Modified pdftohtml (constans@molspaces.com, 2014) // // HTMLGen.cc // // Copyright 2010 Glyph & Cog, LLC // //======================================================================== #include <aconf.h> #ifdef USE_GCC_PRAGMAS #pragma implementation #endif #include <stdlib.h> #include "gmem.h" #include "GString.h" #include "GList.h" #include "PDFDoc.h" #include "TextOutputDev.h" #include "SplashOutputDev.h" #include "ErrorCodes.h" #include "HTMLGen.h" #ifdef _WIN32 # define strcasecmp stricmp # define strncasecmp strnicmp #endif //------------------------------------------------------------------------ // Map Unicode indexes from the private use area, following the Adobe // Glyph list. #define privateUnicodeMapStart 0xf6f9 #define privateUnicodeMapEnd 0xf7ff static int privateUnicodeMap[privateUnicodeMapEnd - privateUnicodeMapStart + 1] = { 0x0141, 0x0152, 0, 0, 0x0160, 0, 0x017d, // f6f9 0, 0, 0, 0, 0, 0, 0, 0, // f700 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // f710 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0021, 0, 0, 0x0024, 0, 0x0026, 0, // f720 0, 0, 0, 0, 0, 0, 0, 0, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, // f730 0x0038, 0x0039, 0, 0, 0, 0, 0, 0x003f, 0, 0, 0, 0, 0, 0, 0, 0, // f740 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // f750 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, // f760 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, // f770 0x0058, 0x0059, 0x005a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // f780 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // f790 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00a1, 0x00a2, 0, 0, 0, 0, 0, // f7a0 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // f7b0 0, 0, 0, 0, 0, 0, 0, 0x00bf, 0, 0, 0, 0, 0, 0, 0, 0, // f7c0 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // f7d0 0, 0, 0, 0, 0, 0, 0, 0, 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, // f7e0 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0, // f7f0 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x0178 }; //------------------------------------------------------------------------ //------------------------------------------------------------------------ HTMLGen::HTMLGen() { TextOutputControl textOutControl; SplashColor paperColor; ok = gTrue; backgroundResolution = 150; drawInvisibleText = gTrue; // set up the TextOutputDev textOutControl.mode = textOutReadingOrder; textOutControl.html = gTrue; textOut = new TextOutputDev(NULL, &textOutControl, gFalse); if (!textOut->isOk()) { ok = gFalse; } // set up the SplashOutputDev paperColor[0] = paperColor[1] = paperColor[2] = 0xff; splashOut = new SplashOutputDev(splashModeRGB8, 1, gFalse, paperColor); splashOut->setSkipText(gTrue, gFalse); } HTMLGen::~HTMLGen() { delete textOut; delete splashOut; } void HTMLGen::startDoc(PDFDoc* docA) { doc = docA; splashOut->startDoc(doc->getXRef()); } int HTMLGen::convertPage(int pg, int (*writeHTML)(void* stream, const char* data, int size), void* htmlStream) { TextPage* text; GList* cols, *pars, *lines, *words; TextColumn* col; TextParagraph* par; TextLine* line; TextWord* word1; GString* s; double base; int colIdx, parIdx, lineIdx, wordIdx; int i, u; const char parsep('\n'); // get the PDF text doc->displayPage(textOut, pg, 72, 72, 0, gFalse, gTrue, gFalse); text = textOut->takeText(); // generate the PDF text cols = text->makeColumns(); for (colIdx = 0; colIdx < cols->getLength(); ++colIdx) { col = (TextColumn*)cols->get(colIdx); pars = col->getParagraphs(); for (parIdx = 0; parIdx < pars->getLength(); ++parIdx) { par = (TextParagraph*)pars->get(parIdx); lines = par->getLines(); for (lineIdx = 0; lineIdx < lines->getLength(); ++lineIdx) { line = (TextLine*)lines->get(lineIdx); words = line->getWords(); base = line->getBaseline(); s = new GString(); for (wordIdx = 0; wordIdx < words->getLength(); ++wordIdx) { word1 = (TextWord*)words->get(wordIdx); if (word1->getBaseline() - base < -0.55) s->append(' '); // superscript for (i = 0; i < word1->getLength(); ++i) { u = word1->getChar(i); if (u >= privateUnicodeMapStart && u <= privateUnicodeMapEnd && privateUnicodeMap[u - privateUnicodeMapStart]) { u = privateUnicodeMap[u - privateUnicodeMapStart]; } if (u <= 0x7f) { s->append((char)u); } else if (u <= 0x7ff) { s->append((char)(0xc0 + (u >> 6))); s->append((char)(0x80 + (u & 0x3f))); } else if (u <= 0xffff) { s->append((char)0xe0 + (u >> 12)); s->append((char)0x80 + ((u >> 6) & 0x3f)); s->append((char)0x80 + (u & 0x3f)); } else if (u <= 0x1fffff) { s->append((char)0xf0 + (u >> 18)); s->append((char)0x80 + ((u >> 12) & 0x3f)); s->append((char)0x80 + ((u >> 6) & 0x3f)); s->append((char)0x80 + (u & 0x3f)); } else if (u <= 0x3ffffff) { s->append((char)0xf8 + (u >> 24)); s->append((char)0x80 + ((u >> 18) & 0x3f)); s->append((char)0x80 + ((u >> 12) & 0x3f)); s->append((char)0x80 + ((u >> 6) & 0x3f)); s->append((char)0x80 + (u & 0x3f)); } else if (u <= 0x7fffffff) { s->append((char)0xfc + (u >> 30)); s->append((char)0x80 + ((u >> 24) & 0x3f)); s->append((char)0x80 + ((u >> 18) & 0x3f)); s->append((char)0x80 + ((u >> 12) & 0x3f)); s->append((char)0x80 + ((u >> 6) & 0x3f)); s->append((char)0x80 + (u & 0x3f)); } } if (word1->getSpaceAfter()) s->append(' '); } s->append('\n'); writeHTML(htmlStream, s->getCString(), s->getLength()); delete s; } writeHTML(htmlStream, &parsep, 1); } } delete text; deleteGList(cols, TextColumn); return errNone; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/xpdf/PaxHeaders.3194/HTMLGen.h���������������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�014635� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 29 ctime=1498583182.67525783 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/xpdf/HTMLGen.h�������������������������������������������������������������������������0000644�0001750�0000144�00000002160�13124510115�016222� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������//======================================================================== // // Modified pdftohtml (constans@molspaces.com, 2014) // // HTMLGen.h // // Copyright 2010 Glyph & Cog, LLC // //======================================================================== #ifndef HTMLGEN_H #define HTMLGEN_H #include <aconf.h> #ifdef USE_GCC_PRAGMAS #pragma interface #endif class PDFDoc; class TextOutputDev; class SplashOutputDev; //------------------------------------------------------------------------ class HTMLGen { public: HTMLGen(); ~HTMLGen(); GBool isOk() const { return ok; } GBool getDrawInvisibleText() const { return drawInvisibleText; } void setDrawInvisibleText(GBool drawInvisibleTextA) { drawInvisibleText = drawInvisibleTextA; } void startDoc(PDFDoc* docA); int convertPage(int pg, int (*writeHTML)(void* stream, const char* data, int size), void* htmlStream); private: double backgroundResolution; GBool drawInvisibleText; PDFDoc* doc; TextOutputDev* textOut; SplashOutputDev* splashOut; GBool ok; }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/xpdf/PaxHeaders.3194/PDF2CB.README�����������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�015045� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 29 ctime=1498583182.67525783 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/xpdf/PDF2CB.README���������������������������������������������������������������������0000644�0001750�0000144�00000000652�13124510115�016436� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ pdf2cb: a modified pdftohtml 3.04 for cb2bib . Separate superscripts to avoid words being joined to reference numbers and author names joined to affiliations' glyphs. Download ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.04.tar.gz Copy/Overwrite: cp pdftohtml.cc xpdf-3.04/xpdf/ cp HTMLGen.cc xpdf-3.04/xpdf/ cp HTMLGen.h xpdf-3.04/xpdf/ cd xpdf-3.04/ ./configure make Rename modified pdftohtml: mv xpdf/pdftohtml ../pdf2cb ��������������������������������������������������������������������������������������cb2bib-1.9.7/xpdf/PaxHeaders.3194/COPYING3����������������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�014404� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 29 ctime=1498583182.67525783 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/xpdf/COPYING3��������������������������������������������������������������������������0000644�0001750�0000144�00000104513�13124510115�015776� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: <program> Copyright (C) <year> <name of author> This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/xpdf/PaxHeaders.3194/README������������������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�014146� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 29 ctime=1498583182.67525783 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/xpdf/README����������������������������������������������������������������������������0000644�0001750�0000144�00000035734�13124510115�015550� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Xpdf ==== version 3.04 2014-may-28 The Xpdf software and documentation are copyright 1996-2014 Glyph & Cog, LLC. Email: derekn@foolabs.com WWW: http://www.foolabs.com/xpdf/ The PDF data structures, operators, and specification are copyright 1985-2006 Adobe Systems Inc. What is Xpdf? ------------- Xpdf is an open source viewer for Portable Document Format (PDF) files. (These are also sometimes also called 'Acrobat' files, from the name of Adobe's PDF software.) The Xpdf project also includes a PDF text extractor, PDF-to-PostScript converter, and various other utilities. Xpdf runs under the X Window System on UNIX and OS/2. The non-X components (pdftops, pdftotext, etc.) also run on Windows and Mac OSX systems and should run on pretty much any system with a decent C++ compiler. Xpdf will run on 32-bit and 64-bit machines. License & Distribution ---------------------- Xpdf is licensed under the GNU General Pulbic License (GPL), version 2 or 3. This means that you can distribute derivatives of Xpdf under any of the following: - GPL v2 only - GPL v3 only - GPL v2 or v3 The Xpdf source package includes the text of both GPL versions: COPYING for GPL v2, COPYING3 for GPL v3. Please note that Xpdf is NOT licensed under "any later version" of the GPL, as I have no idea what those versions will look like. If you are redistributing unmodified copies of Xpdf (or any of the Xpdf tools) in binary form, you need to include all of the documentation: README, man pages (or help files), COPYING, and COPYING3. If you want to incorporate the Xpdf source code into another program (or create a modified version of Xpdf), and you are distributing that program, you have two options: release your program under the GPL (v2 and/or v3), or purchase a commercial Xpdf source license. If you're interested in commercial licensing, please see the Glyph & Cog web site: http://www.glyphandcog.com/ Compatibility ------------- Xpdf is developed and tested on Linux. In addition, it has been compiled by others on Solaris, AIX, HP-UX, Digital Unix, Irix, and numerous other Unix implementations, as well as OS/2. It should work on pretty much any system which runs X11 and has Unix-like libraries. You'll need ANSI C++ and C compilers to compile it. The non-X components of Xpdf (pdftops, pdftotext, pdfinfo, pdffonts, pdfdetach, pdftoppm, and pdfimages) can also be compiled on Windows and Mac OSX systems. See the Xpdf web page for details. If you compile Xpdf for a system not listed on the web page, please let me know. If you're willing to make your binary available by ftp or on the web, I'll be happy to add a link from the Xpdf web page. I have decided not to host any binaries I didn't compile myself (for disk space and support reasons). If you can't get Xpdf to compile on your system, send me email and I'll try to help. Xpdf has been ported to the Acorn, Amiga, BeOS, and EPOC. See the Xpdf web page for links. Getting Xpdf ------------ The latest version is available from: http://www.foolabs.com/xpdf/ or: ftp://ftp.foolabs.com/pub/xpdf/ Source code and several precompiled executables are available. Announcements of new versions are posted to comp.text.pdf and emailed to a list of people. If you'd like to receive email notification of new versions, just let me know. Running Xpdf ------------ To run xpdf, simply type: xpdf file.pdf To generate a PostScript file, hit the "print" button in xpdf, or run pdftops: pdftops file.pdf To generate a plain text file, run pdftotext: pdftotext file.pdf There are five additional utilities (which are fully described in their man pages): pdfinfo -- dumps a PDF file's Info dictionary (plus some other useful information) pdffonts -- lists the fonts used in a PDF file along with various information for each font pdfdetach -- lists or extracts embedded files (attachments) from a PDF file pdftoppm -- converts a PDF file to a series of PPM/PGM/PBM-format bitmaps pdfimages -- extracts the images from a PDF file Command line options and many other details are described in the man pages: xpdf(1), etc. All of these utilities read an optional configuration file: see the xpdfrc(5) man page. Upgrading from Xpdf 3.02 (and earlier) -------------------------------------- The font configuration system has been changed. Previous versions used mostly separate commands to configure fonts for display and for PostScript output. As of 3.03, configuration options that make sense for both display and PS output have been unified. The following xpdfrc commands have been removed: * displayFontT1, displayFontTT: replaced with fontFile * displayNamedCIDFontT1, displayNamedCIDFontTT: replaced with fontFile * displayCIDFontT1, displayCIDFontTT: replaced with fontFileCC * psFont: replaced with psResidentFont * psNamedFont16: replaced with psResidentFont16 * psFont16: replaced with psResidentFontCC See the xpdfrc(5) man page for more information on the new commands. Pdftops will now embed external 16-bit fonts (configured with the fontFileCC command) when the PDF file refers to a non-embedded font. It does not do any subsetting (yet), so the resulting PS files will be large. Compiling Xpdf -------------- See the separate file, INSTALL. Bugs ---- If you find a bug in Xpdf, i.e., if it prints an error message, crashes, or incorrectly displays a document, and you don't see that bug listed here, please send me email, with a pointer (URL, ftp site, etc.) to the PDF file. Third-Party Libraries --------------------- Xpdf uses the following libraries: * FreeType [http://www.freetype.org/] * libpng [http://www.libpng.com/pub/png/libpng.html] (used by pdftohtml) * zlib [http://zlib.net/] (used by pdftohtml) Acknowledgments --------------- Thanks to: * Patrick Voigt for help with the remote server code. * Patrick Moreau, Martin P.J. Zinser, and David Mathog for the VMS port. * David Boldt and Rick Rodgers for sample man pages. * Brendan Miller for the icon idea. * Olly Betts for help testing pdftotext. * Peter Ganten for the OS/2 port. * Michael Richmond for the Win32 port of pdftops and pdftotext and the xpdf/cygwin/XFree86 build instructions. * Frank M. Siegert for improvements in the PostScript code. * Leo Smiers for the decryption patches. * Rainer Menzner for creating t1lib, and for helping me adapt it to xpdf. * Pine Tree Systems A/S for funding the OPI and EPS support in pdftops. * Easy Software Products for funding several improvements to the PostScript output code. * Tom Kacvinsky for help with FreeType and for being my interface to the FreeType team. * Theppitak Karoonboonyanan for help with Thai support. * Leonard Rosenthol for help and contributions on a bunch of things. * Alexandros Diamantidis and Maria Adaloglou for help with Greek support. * Lawrence Lai for help with the CJK Unicode maps. Various people have contributed modifications made for use by the pdftex project: * Han The Thanh * Martin Schröder of ArtCom GmbH References ---------- Adobe Systems Inc., _PDF Reference, sixth edition: Adobe Portable Document Format version 1.7_. http://www.adobe.com/devnet/pdf/pdf_reference.html [The manual for PDF version 1.7.] Adobe Systems Inc., "Errata for the PDF Reference, sixth edition, version 1.7", October 16, 2006. http://www.adobe.com/devnet/pdf/pdf_reference.html [The errata for the PDF 1.7 spec.] Adobe Systems Inc., _PostScript Language Reference_, 3rd ed. Addison-Wesley, 1999, ISBN 0-201-37922-8. [The official PostScript manual.] Adobe Systems, Inc., _The Type 42 Font Format Specification_, Adobe Developer Support Technical Specification #5012. 1998. http://partners.adobe.com/asn/developer/pdfs/tn/5012.Type42_Spec.pdf [Type 42 is the format used to embed TrueType fonts in PostScript files.] Adobe Systems, Inc., _Adobe CMap and CIDFont Files Specification_, Adobe Developer Support Technical Specification #5014. 1995. http://www.adobe.com/supportservice/devrelations/PDFS/TN/5014.CIDFont_Spec.pdf [CMap file format needed for Japanese and Chinese font support.] Adobe Systems, Inc., _Adobe-Japan1-4 Character Collection for CID-Keyed Fonts_, Adobe Developer Support Technical Note #5078. 2000. http://partners.adobe.com/asn/developer/PDFS/TN/5078.CID_Glyph.pdf [The Adobe Japanese character set.] Adobe Systems, Inc., _Adobe-GB1-4 Character Collection for CID-Keyed Fonts_, Adobe Developer Support Technical Note #5079. 2000. http://partners.adobe.com/asn/developer/pdfs/tn/5079.Adobe-GB1-4.pdf [The Adobe Chinese GB (simplified) character set.] Adobe Systems, Inc., _Adobe-CNS1-3 Character Collection for CID-Keyed Fonts_, Adobe Developer Support Technical Note #5080. 2000. http://partners.adobe.com/asn/developer/PDFS/TN/5080.CNS_CharColl.pdf [The Adobe Chinese CNS (traditional) character set.] Adobe Systems Inc., _Supporting the DCT Filters in PostScript Level 2_, Adobe Developer Support Technical Note #5116. 1992. http://www.adobe.com/supportservice/devrelations/PDFS/TN/5116.PS2_DCT.PDF [Description of the DCTDecode filter parameters.] Adobe Systems Inc., _Open Prepress Interface (OPI) Specification - Version 2.0_, Adobe Developer Support Technical Note #5660. 2000. http://partners.adobe.com/asn/developer/PDFS/TN/5660.OPI_2.0.pdf Adobe Systems Inc., CMap files. ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/ [The actual CMap files for the 16-bit CJK encodings.] Adobe Systems Inc., Unicode glyph lists. http://partners.adobe.com/asn/developer/type/unicodegn.html http://partners.adobe.com/asn/developer/type/glyphlist.txt http://partners.adobe.com/asn/developer/type/corporateuse.txt http://partners.adobe.com/asn/developer/type/zapfdingbats.txt [Mappings between character names to Unicode.] Adobe Systems Inc., OpenType Specification v. 1.4. http://partners.adobe.com/public/developer/opentype/index_spec.html [The OpenType font format spec.] Aldus Corp., _OPI: Open Prepress Interface Specification 1.3_. 1993. http://partners.adobe.com/asn/developer/PDFS/TN/OPI_13.pdf Anonymous, RC4 source code. ftp://ftp.ox.ac.uk/pub/crypto/misc/rc4.tar.gz ftp://idea.sec.dsi.unimi.it/pub/crypt/code/rc4.tar.gz [This is the algorithm used to encrypt PDF files.] T. Boutell, et al., "PNG (Portable Network Graphics) Specification, Version 1.0". RFC 2083. [PDF uses the PNG filter algorithms.] CCITT, "Information Technology - Digital Compression and Coding of Continuous-tone Still Images - Requirements and Guidelines", CCITT Recommendation T.81. http://www.w3.org/Graphics/JPEG/ [The official JPEG spec.] A. Chernov, "Registration of a Cyrillic Character Set". RFC 1489. [Documentation for the KOI8-R Cyrillic encoding.] Roman Czyborra, "The ISO 8859 Alphabet Soup". http://czyborra.com/charsets/iso8859.html [Documentation on the various ISO 859 encodings.] L. Peter Deutsch, "ZLIB Compressed Data Format Specification version 3.3". RFC 1950. [Information on the general format used in FlateDecode streams.] L. Peter Deutsch, "DEFLATE Compressed Data Format Specification version 1.3". RFC 1951. [The definition of the compression algorithm used in FlateDecode streams.] Morris Dworkin, "Recommendation for Block Cipher Modes of Operation", National Institute of Standards, NIST Special Publication 800-38A, 2001. [The cipher block chaining (CBC) mode used with AES in PDF files.] Federal Information Processing Standards Publication 197 (FIPS PUBS 197), "Advanced Encryption Standard (AES)", November 26, 2001. [AES encryption, used in PDF 1.6.] Jim Flowers, "X Logical Font Description Conventions", Version 1.5, X Consortium Standard, X Version 11, Release 6.1. ftp://ftp.x.org/pub/R6.1/xc/doc/hardcopy/XLFD/xlfd.PS.Z [The official specification of X font descriptors, including font transformation matrices.] Foley, van Dam, Feiner, and Hughes, _Computer Graphics: Principles and Practice_, 2nd ed. Addison-Wesley, 1990, ISBN 0-201-12110-7. [Colorspace conversion functions, Bezier spline math.] Robert L. Hummel, _Programmer's Technical Reference: Data and Fax Communications_. Ziff-Davis Press, 1993, ISBN 1-56276-077-7. [CCITT Group 3 and 4 fax decoding.] ISO/IEC, _Information technology -- Lossy/lossless coding of bi-level images_. ISO/IEC 14492, First edition (2001-12-15). http://webstore.ansi.org/ [The official JBIG2 standard. The final draft of this spec is available from http://www.jpeg.org/jbighomepage.html.] ISO/IEC, _Information technology -- JPEG 2000 image coding system -- Part 1: Core coding system_. ISO/IEC 15444-1, First edition (2000-12-15). http://webstore.ansi.org/ [The official JPEG 2000 standard. The final committee draft of this spec is available from http://www.jpeg.org/JPEG2000.html, but there were changes made to the bitstream format between that draft and the published spec.] ITU, "Standardization of Group 3 facsimile terminals for document transmission", ITU-T Recommendation T.4, 1999. ITU, "Facsimile coding schemes and coding control functions for Group 4 facsimile apparatus", ITU-T Recommendation T.6, 1993. http://www.itu.int/ [The official Group 3 and 4 fax standards - used by the CCITTFaxDecode stream, as well as the JBIG2Decode stream.] B. Kaliski, "PKCS #5: Password-Based Cryptography Specification, Version 2.0". RFC 2898. [Defines the padding scheme used with AES encryption in PDF files.] Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz, "Practical Fast 1-D DCT Algorithms with 11 Multiplications". IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989, 988-991. [The fast IDCT algorithm used in the DCTDecode filter.] Microsoft, _TrueType 1.0 Font Files_, rev. 1.66. 1995. http://www.microsoft.com/typography/tt/tt.htm [The TrueType font spec (in MS Word format, naturally).] V. Ostromoukhov, R.D. Hersch, "Stochastic Clustered-Dot Dithering", Conf. Color Imaging: Device-Independent Color, Color Hardcopy, and Graphic Arts IV, 1999, SPIE Vol. 3648, 496-505. http://diwww.epfl.ch/w3lsp/publications/colour/scd.html [The stochastic dithering algorithm used in Xpdf.] P. Peterlin, "ISO 8859-2 (Latin 2) Resources". http://sizif.mf.uni-lj.si/linux/cee/iso8859-2.html [This is a web page with all sorts of useful Latin-2 character set and font information.] Charles Poynton, "Color FAQ". http://www.inforamp.net/~poynton/ColorFAQ.html [The mapping from the CIE 1931 (XYZ) color space to RGB.] R. Rivest, "The MD5 Message-Digest Algorithm". RFC 1321. [MD5 is used in PDF document encryption.] Thai Industrial Standard, "Standard for Thai Character Codes for Computers", TIS-620-2533 (1990). http://www.nectec.or.th/it-standards/std620/std620.htm [The TIS-620 Thai encoding.] Unicode Consortium, "Unicode Home Page". http://www.unicode.org/ [Online copy of the Unicode spec.] W3C Recommendation, "PNG (Portable Network Graphics) Specification Version 1.0". http://www.w3.org/Graphics/PNG/ [Defines the PNG image predictor.] Gregory K. Wallace, "The JPEG Still Picture Compression Standard". ftp://ftp.uu.net/graphics/jpeg/wallace.ps.gz [Good description of the JPEG standard. Also published in CACM, April 1991, and submitted to IEEE Transactions on Consumer Electronics.] F. Yergeau, "UTF-8, a transformation format of ISO 10646". RFC 2279. [A commonly used Unicode encoding.] ������������������������������������cb2bib-1.9.7/xpdf/PaxHeaders.3194/pdftohtml.cc������������������������������������������������������0000644�0000000�0000000�00000000073�13124510115�015576� x����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������30 atime=1498583183.011254711 29 ctime=1498583182.67525783 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cb2bib-1.9.7/xpdf/pdftohtml.cc����������������������������������������������������������������������0000644�0001750�0000144�00000011612�13124510115�017165� 0����������������������������������������������������������������������������������������������������ustar�00constans������������������������users���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������//======================================================================== // // Modified pdftohtml (constans@molspaces.com, 2014) // // pdftohtml.cc // // Copyright 2005 Glyph & Cog, LLC // //======================================================================== #include <aconf.h> #include <stdio.h> #include <stdlib.h> #include "parseargs.h" #include "gmem.h" #include "gfile.h" #include "GString.h" #include "GlobalParams.h" #include "PDFDoc.h" #include "HTMLGen.h" #include "Error.h" #include "ErrorCodes.h" #include "config.h" //------------------------------------------------------------------------ static int firstPage = 1; static int lastPage = 0; static GBool skipInvisible = gFalse; static char ownerPassword[33] = "\001"; static char userPassword[33] = "\001"; static GBool quiet = gFalse; static char cfgFileName[256] = ""; static GBool printVersion = gFalse; static GBool printHelp = gFalse; static ArgDesc argDesc[] = { { "-f", argInt, &firstPage, 0, "first page to convert" }, { "-l", argInt, &lastPage, 0, "last page to convert" }, { "-skipinvisible", argFlag, &skipInvisible, 0, "do not draw invisible text" }, { "-opw", argString, ownerPassword, sizeof(ownerPassword), "owner password (for encrypted files)" }, { "-upw", argString, userPassword, sizeof(userPassword), "user password (for encrypted files)" }, { "-q", argFlag, &quiet, 0, "don't print any messages or errors" }, { "-cfg", argString, cfgFileName, sizeof(cfgFileName), "configuration file to use in place of .xpdfrc" }, { "-v", argFlag, &printVersion, 0, "print copyright and version info" }, { "-h", argFlag, &printHelp, 0, "print usage information" }, { "-help", argFlag, &printHelp, 0, "print usage information" }, { "--help", argFlag, &printHelp, 0, "print usage information" }, { "-?", argFlag, &printHelp, 0, "print usage information" }, {NULL} }; //------------------------------------------------------------------------ static int writeToFile(void* file, const char* data, int size) { return (int)fwrite(data, 1, size, (FILE*)file); } int main(int argc, char* argv[]) { PDFDoc* doc; GString* fileName; GString* ownerPW, *userPW; HTMLGen* htmlGen; GString* htmlFileName; FILE* htmlFile; int pg, err, exitCode; GBool ok; exitCode = 99; // parse args ok = parseArgs(argDesc, &argc, argv); if (!ok || argc != 3 || printVersion || printHelp) { fprintf(stderr, "\npdf2cb (a modified pdftohtml version %s for cb2bib)\n", xpdfVersion); fprintf(stderr, "\n%s\n", xpdfCopyright); if (!printVersion) { printUsage("pdf2cb", "<PDF-file> <TXT-file>", argDesc); } goto err0; } fileName = new GString(argv[1]); htmlFileName = new GString(argv[2]); // read config file globalParams = new GlobalParams(cfgFileName); if (quiet) { globalParams->setErrQuiet(quiet); } globalParams->setupBaseFonts(NULL); globalParams->setTextEncoding("UTF-8"); // open PDF file if (ownerPassword[0] != '\001') ownerPW = new GString(ownerPassword); else ownerPW = NULL; if (userPassword[0] != '\001') userPW = new GString(userPassword); else userPW = NULL; doc = new PDFDoc(fileName, ownerPW, userPW); if (userPW) delete userPW; if (ownerPW) delete ownerPW; if (!doc->isOk()) { exitCode = 1; goto err1; } // check for copy permission if (!doc->okToCopy()) { error(errNotAllowed, -1, "Copying of text from this document is not allowed."); exitCode = 3; goto err1; } // get page range if (firstPage < 1) { firstPage = 1; } if (lastPage < 1 || lastPage > doc->getNumPages()) { lastPage = doc->getNumPages(); } // set up the HTMLGen object htmlGen = new HTMLGen(); if (!htmlGen->isOk()) { exitCode = 99; goto err1; } htmlGen->setDrawInvisibleText(!skipInvisible); htmlGen->startDoc(doc); if (!(htmlFile = fopen(htmlFileName->getCString(), "wb"))) { error(errIO, -1, "Couldn't open TXT file '{0:t}'", htmlFileName); goto err2; } // convert the pages for (pg = firstPage; pg <= lastPage; ++pg) { err = htmlGen->convertPage(pg, writeToFile, htmlFile); if (err != errNone) { error(errIO, -1, "Error converting page {0:d}", pg); exitCode = 2; goto err2; } } fclose(htmlFile); exitCode = 0; // clean up err2: delete htmlFileName; delete htmlGen; err1: delete doc; delete globalParams; err0: // check for memory leaks Object::memCheck(stderr); gMemReport(stderr); return exitCode; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������