./PaxHeaders.8614/kchmviewer-7.50000644000000000000000000000013212622005721013265 xustar0030 mtime=1447562193.244733042 30 atime=1447562193.004736308 30 ctime=1447562193.244733042 kchmviewer-7.5/0000755000175000001440000000000012622005721013536 5ustar00timusers00000000000000kchmviewer-7.5/PaxHeaders.8614/CMakeLists.txt0000644000000000000000000000012412322425122015744 xustar0027 mtime=1397369426.255372 27 atime=1447562193.020736 30 ctime=1447562193.027735995 kchmviewer-7.5/CMakeLists.txt0000644000175000001440000000151212322425122016273 0ustar00timusers00000000000000# Project name PROJECT( kchmviewer ) # Init cmake #SET( CMAKE_VERBOSE_MAKEFILE ON ) set( CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/") # Necessary packages FIND_PACKAGE( KDE4 REQUIRED ) FIND_PACKAGE( Libchm REQUIRED) # libzip FIND_PATH(LIBZIP_INCLUDE_DIR zip.h) FIND_LIBRARY(LIBZIP_LIBRARY NAMES zip) IF (LIBZIP_INCLUDE_DIR AND LIBZIP_LIBRARY) MESSAGE(STATUS "Found libzip: ${LIBZIP_LIBRARY}") ELSE () MESSAGE(FATAL_ERROR "Could not find libzip. Please install libzip and libzip-devel packages") ENDIF () # Set compilation params INCLUDE_DIRECTORIES( ${KDE4_INCLUDES} ${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/lib/libebook ) ADD_DEFINITIONS( ${KDE4_DEFINITIONS} ) ADD_DEFINITIONS( -DUSE_KDE ) # Run in those subdirectories ADD_SUBDIRECTORY( lib/libebook ) ADD_SUBDIRECTORY( src ) ADD_SUBDIRECTORY( po ) ADD_SUBDIRECTORY( packages ) kchmviewer-7.5/PaxHeaders.8614/templates0000644000000000000000000000013212622005721015126 xustar0030 mtime=1447562193.237733137 30 atime=1447562193.236733151 30 ctime=1447562193.237733137 kchmviewer-7.5/templates/0000755000175000001440000000000012622005721015534 5ustar00timusers00000000000000kchmviewer-7.5/templates/PaxHeaders.8614/cpp0000644000000000000000000000007110340772766015731 xustar0027 atime=1447562193.237733 30 ctime=1447562193.237733137 kchmviewer-7.5/templates/cpp0000644000175000001440000000300510340772766016256 0ustar00timusers00000000000000/*************************************************************************** * Copyright (C) 2004-2005 by Georgy Yunaev, gyunaev@ulduzsoft.com * * Please do not use email address above for bug reports; see * * the README file * * * * 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; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ kchmviewer-7.5/templates/PaxHeaders.8614/h0000644000000000000000000000007110340772766015376 xustar0027 atime=1447562193.237733 30 ctime=1447562193.237733137 kchmviewer-7.5/templates/h0000644000175000001440000000300510340772766015723 0ustar00timusers00000000000000/*************************************************************************** * Copyright (C) 2004-2005 by Georgy Yunaev, gyunaev@ulduzsoft.com * * Please do not use email address above for bug reports; see * * the README file * * * * 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; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ kchmviewer-7.5/PaxHeaders.8614/COPYING0000644000000000000000000000012411270677072014255 xustar0027 mtime=1256422970.829794 27 atime=1447562193.027735 30 ctime=1447562193.030735954 kchmviewer-7.5/COPYING0000644000175000001440000010451311270677072014611 0ustar00timusers00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. 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 . 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 . kchmviewer-7.5/PaxHeaders.8614/build-win32-mingw.sh0000644000000000000000000000012412616333137016730 xustar0027 mtime=1446622815.937622 27 atime=1447562193.032735 30 ctime=1447562193.036735873 kchmviewer-7.5/build-win32-mingw.sh0000755000175000001440000000131412616333137017262 0ustar00timusers00000000000000#!/bin/sh # Path to (cross-platform) mingw compiler MINGWPATH=/usr/toolchains/windows-x86-complete # We cannot build statically because Webkit is not statically linkable #QMAKE=$MINGWPATH/x86_64-w64-mingw32.static/qt4-shared/bin/qmake QMAKE=$MINGWPATH/i686-w64-mingw32.static/qt4-shared/bin/qmake #QMAKE=$MINGWPATH/qt4-static/bin/qmake BUILDDIR="build.win32" ################################## if [ -d "$BUILDDIR" ]; then rm -rf "$BUILDDIR" fi svn export . "$BUILDDIR/" || exit 1 cd "$BUILDDIR" # Compile it export PATH=$MINGWPATH/bin:$PATH $QMAKE -r "CONFIG -= release_and_debug" "CONFIG += release" && make -j4 || exit 1 if [ "x$1" == "x-nsis" ]; then (cd nsis && sh create_installer.sh) || exit 1 fi kchmviewer-7.5/PaxHeaders.8614/kchmviewer.pro0000644000000000000000000000012412425306307016101 xustar0027 mtime=1414892743.080698 27 atime=1447562193.037735 30 ctime=1447562193.037735859 kchmviewer-7.5/kchmviewer.pro0000644000175000001440000000011112425306307016422 0ustar00timusers00000000000000SUBDIRS += lib src TEMPLATE = subdirs CONFIG += debug src.depends = lib kchmviewer-7.5/PaxHeaders.8614/DBUS-bindings0000644000000000000000000000012311115111274015455 xustar0027 mtime=1228182204.558559 27 atime=1447562193.030735 29 ctime=1447562193.03173594 kchmviewer-7.5/DBUS-bindings0000644000175000001440000000141311115111274016005 0ustar00timusers00000000000000kchmviewer supports the following DBUS bindings: Interface path: net.kchmviewer.application Bingings: // Loads a CHM file filename , and opens the URL url. Use URL "/" to open default homepage void loadHelpFile( String filename, String url ); // Opens a specific url inside the loaded CHM file void openPage( String url ); // Tries to find word in index, opening the index window and scrolling it there void guiFindInIndex( String word ); // Executes a search in GUI. query contains the complete search query. void guiSearchQuery( String query ); // Executes a search; GUI is not involved and user sees nothing. // query contains the complete search query. // Returns a list of URLs, or empty array if nothing os StringList searchQuery( String query ); kchmviewer-7.5/PaxHeaders.8614/ChangeLog0000644000000000000000000000012412622005704014761 xustar0027 mtime=1447562180.413702 27 atime=1447562193.030735 30 ctime=1447562193.030735954 kchmviewer-7.5/ChangeLog0000644000175000001440000005667612622005704015335 0ustar00timusers000000000000002015-11-14 tim - Version 7.5 released (r458); - Added more useful information into About window; - Fixed EPUB default encoding to be UTF-8; - Changed the TOC/Index/Search default click to be single-click, not system-specific. - On Windows we do not store the window size if it is minimized or maximized; using default size instead. 2015-11-02 tim - Version 7.4 released (r450) - Zoom level is now inherited in newly opened windows - Fixed the empty or stale tab names while using the back/forward navigation buttons and new tab options - Added -v and --version command-line options - Added an option (Settings/Browser/Always use single click) to use a single-click to open tree items in the contents/index tabs despite the selected OS activator such as KDE double-click. Off by default. - Fixed TOC parsing on some CHM files which had TOC names without associated URLs. - Disabled encoding selection menu for epubs 2015-02-22 tim - Version 7.3 released (r440) - Fixed Windows-specific issues, Windows build works again - Added X11-specific way to bring the window to front when requested; - Added search highlighting suggested by Jomart - Various KDE build fixes - Added an option to disable automatic auto-expansion of Table of Contents entries - Fixed the new version check which was triggered on older versions - Fixed Qt5 build, it works fine now - Fixed settings storage on Qt4/Qt5 2014-12-23 tim - Version 7.2 released - Ported to Qt5 (but still builds and works with Qt4) - Added support for 3rd party integration - Fixed some minor issues 2014-10-12 tim - Version 7.1 released - Added support for creating kchmviewer as a portable app - Fixed a crash when indexing (in search) certain malformed HTML files - Fixed parsing CHM files whose filenames contained URL-encoded characters 2014-03-26 tim - Version 6.1 released - Keyboard usability improved thanks to the Giuseppe "Cowo" Corbelli. - The focus is now moved to the content page once the link is clicked, so the keyboard navigation is available immediately. You can switch the focus back by pressing Ctrl+(1-4). - Added extended keyboard shortcuts for FindNext and FindPrevious; F3 still works. - Navigation tab window activation (Contents, Search, Index, Bookmarks) now automatically focus the proper element. - The items in the navigation page now reacts on onItemActivated, and hence act on key and follow the DE policy (such as respecting KDE single click). - Upon successful search, the focus moves to the results list. - Titles are now space-trimmed. - Fixed binary TOC parser check which led to crashes for some CHM files. - Fixed incorrect settings file storage name when the CHM file contains multiple dots. - Fixed the Ctrl+click and Shift+click when the release event was intercepted by other applications (i.e. GoldenDict) - 'Esc' closes the search dialog and restores focus in the content window. 2011-12-18 tim - Version 6.0 released - Removed outdated and buggy QTextBrowser support. - Removed unneeded KHTMLPart support. Only QWebKit is now supported. - Fixed zoom and "select all". - Fixed storing scrollbar position. - Added browser options to control JavaScript, Java and HTML5 features, which now apply to Webkit - Fixed crash on start when the number of recent files was set to zero - Added support for opening the specific page on startup using the --url switch - Fixed scrolling at the same page when links are clicked - Fixed the "Locate in content tree" which was broken for QWebKit - For CHM entries with an URL but no name use the URL as name - Updated copyrights 2011-01-14 tim - Version 5.3 released. - Fixed spelling error (thx Razvan Visan) - Changed encodings order for Chinese and Japanese languages (thanks Kai-Chieh Ku) - Added Ukrainian localization (thanks Olexander Yatsenko) - Added Brazilian localization (thanks Márcio Moraes) - Fixed some grammatical errors (thanks Robin 'cheese' Lee) - Fixed webkit engine for buggy CHMs which do not have all content, as well as cases when external references cannot be loaded. Thanks to Kai-Chieh Ku - Added Mac support (thanks Serge Weinstock) 2010-04-26 tim - 5.2 RELEASE - Fixed missing images on CHM files under Windows XP SP3; - Fixed viewing CHM files which embed links to other CHM files; 2010-04-23 tim - Fixed window icon (thanks Aaron Lewis) - Fixed typos in README and FAQ (thanks Martin 'Cheese' Lee) - Fixed errors while building index because 'keyword' was ignored (thanks ivg) - Switched to use new cross-compiler from http://mingw-cross-env.nongnu.org/ to create Windows builds 2009-12-17 tim - 5.1 RELEASE - Trying to use non-normalized URL first to fix CHMs which use them in TOC/Index 2009-12-16 tim - Fixed application settings storage. - Fixed bookmark edit button. - Version changed to 5.1 2009-12-14 tim - 5.0 RELEASE - Version changed to 5.0 - Binary index parser commented out as it seems to be buggy. - Toolbar mode is now configurable through settings. - Now the application can start without opening a CHM file. Startup mode is selected in settings. - Added check if a new version is available. - Added new icons from DryIcons 2009-12-13 tim - Major code refactoring, with renamed files and classes, to make it easier to maintain the code in future. - Changed all license headers to GPLv3-compliant. - Recent files feature now uses a separate class. - The navigator tab is now a Dock widget, so can be moved and floated. - Content tab is now always loaded, and the page is correctly located. 2009-24-10 tim - Version changed to 4.2 - Fixed font size change on KHTMLPart (thanks to Jure Repinc) - Fixed Windows file opener being unable to open the file with non-English characters. - Fixed "Open in new tab" for QTextBrowser opening an empty page. - Middle button in QTextBrowser and WebKit now opens the link in new tab in background. - Middle button now closes opened tabs in the tab bar. 2009-19-07 tim - Version changed to 4.1 - Updated Dutch translation (thanks to Sander Pientka) - Updated Turkish translation (thanks to Ozan Caglayan) - Default toolbar button order changed to standard -/+ - Automatic encoding detection for KHTMLPart/WebKit is now disabled by default. - Fixed incorrest index string encoding for non-English strings. - Fixed text size auto-increase each time the file is loaded for WebKit browser. - Fixed Windows mingw build issues. - Fixed Windows command line parser being unable to open the file with non-English characters. - License changed from GPLv2 to GPLv3. 2008-12-01 tim - Version changed to 4.0 (release); - Released version 4.0. 2008-11-30 tim - Integrate Fedora .desktop fixes (thx Patrice Dumas) - Implemented binary TOC and index tables (thx Razvan Cojocaru , the author of xchm). Speed up loading files more than twice! - Now showing 'waiting' cursor while loading chm table of contents or index. - Fixed QTextBrowser by providing workaround for "empty" books. - More compatibility fixes with KDE 4.1 - Added Swedish translation (thx Daniel Nylander) - Fixed handling files with file:// prefix. - Added D-BUS support for Qt and KDE builds, the application could now be controlled remotely from other applications or scripts. - Restored KDE translations. 2008-06-18 tim - Version changed to 4.0b4; - Added WebKit support (requires QtWebKit module). WebKit browser is default for a system where QtWebKit is present; - Added support for Right-To-Left application and text layouts; - Added support for disabling automatic encoding detection for browsers which could detect it themselves (KHTMLPart and Webkit); 2008-06-06 tim - Version changed to 4.0b3; - Added KDE4 support; - Fixed several compatibility issues with qt-4.4.0; - Added keyboard shortcuts to move to the next and previous entries in TOC: Ctrl+Right arrow and Ctrl+Left arrow; - Added manifest for the Windows version (thanks Cristian Adam); - Windows version should not rely on mingw DLL anymore; - Toolbars are now named; - Fixed parallel build (thanks Patrice Dumas); 2008-02-10 tim - Version changed to 4.0b2 (this is Qt4-only release); - Added a command-line option to search through table of contents (--stoc); - Added Italian translation (thanks to Emilio Scalise); - Fixed crash on incorrectly compressed CHM file (thanks Albert Astals Cid); - Fixed kio-msits so it now works with KDE4 (thanks Albert Astals Cid); - Fixed FSF mailing address everywhere (thanks Albert Astals Cid); - Fixed handling of improperly formatted CHM files like Audigy help; - Added heuristics to support for improperly formatted CHMs which have toc and index, but do not specify so in the project file; - Fixed handling of CHM files which have local links in form of MS-ITS: urls; - Search engine has been integrated into libchmfile; - Search indexes are now stored in a single file, which should make it easier to make search available through the indexing application; 2007-08-26 tim - Application ported to Qt4. - Recent files reworked. - Search on page is now done via toolbar (like FireFox), activated by Ctrl-F and /. - After switching tabs (either with mouse or Alt+ the focus is moved to the browser widget, so you don't have to click on it to navigate using keyboard. - Enchanced browser context menu. 2007-06-16 tim - Fixed locale and .desktop installation directory for Gentoo (thanks Peter Volkov) - Increased the speed of search engine indexing (thanks Kai Londenberg) - Fixed the problem when kchmviewer is called from a browser with URL like file://. - Fixed the unability to run the program when the last opened file does not exist anymore, and the LoadLatestFileOnStartup is set to 1. - Fixed CHMs with Unicode index/topic filenames inside CHM file (thanks hephooey). - Fixed showing book images in QTextBrowser when file path contains urlencoded symbols. - Fixed 64bit platforms compilation if system chmlib is not present. - Version 3.1 (Qt3) released. 2007-03-14 tim - Version 3.0 released - Added a lot of decoded entities. - Fixed incorrect saving of the settings file which result of this file not being loaded. - Added FAQ. - Added command-line options to search in index and in search window. 2007-03-09 tim - Added improved custom search engine. - Added DCOP support for KDE version. 2007-03-08 tim - KDE version now shows KDE about dialog - Fixed 'copy' in KDE browser - Version changed to 3.0 - Removed duplicated application title in KDE. - Gentoo installation issues fixed. - KDE version sometime didn't kill the process after quit; thanks Norberto Bensa for fix. - Fixed popup menu popping in a wrong place when using QTextBrowser if the scrollbar position is not at the top of the document. - KHTMLPart options sometime were not disabled while QTextBrowser was choosen. 2007-03-01 tim - The design changed; created the chm files processing library, and moved it outside the source to improve and simplify Okular integration. - Changed URL2Topic search, the result - startup and opening times increased up to 20 times for large chm files! - Index multiple URL entry also opens now faster. - Added support for new autotools. 2006-12-01 tim - Version changed to 2.7. - You can now switch between tabs using Alt+, thanks Bobi Jam. - Kchmviewer should now work correctly on non-x86 platforms, including the codepage autodetection. - Added a warning when the browser or browser settings are changed that the application restart is required for changes to take effect. - Fixed the i18n compilation problem in kchmviewwindow.cpp. - If the TOC directory entry did not have an associated page, it was not possible to select it. - TOC directory entries now could be opened/closed with double-click on the entry name/icon, not just +/- icons. Credits to Ludo for the ideas. - No more duplicate entries in previous file history. - The window title is now truncated if too long. - Tab close icon now positioned correctly. - Now current window size and splitter position is also stored on exit - separately for each chm file. - Window selection with multiple tabs now works. - Czech translation added, thanks Hynek Fabian. - Dutch translation updated, thanks Rinse de Vries. 2006-04-05 tim - Version changed to 2.6 - Fixed gcc 4.x compilation. - Added shortcut help in context menus. - Right-click menu is now available in Contents, Search, Index and Favorites windows. - Fixed navigation buttons 'What's this' messages. - Fixed compilation on Zaurus and Debian. 2006-04-05 tim - Application icon should now be correctly installed. - Fixed handling of mailto: urls. - 'Locate in content' button now opens a Contents tab, if hidden. - Version 2.5 release. 2006-04-02 tim - A tooltip is now shows the full text in all the tree and list views if truncated on screen. - Fixed content tree parser, now the content table should be parsed correctly. - Fixed crash after the encoding is changed, if any tree item is clicked. - Added a bookmark menu. Ctrl-B is a shortcut to add a bookmark. 2006-04-01 tim - Added tab browsing. Use right-click and 'Open in new tab'. - Added right-click content menu to open pages in a new tab. - Control-click on link or table of contents opens a page in a new tab in background. - Shift-click on link or table of contents opens a page in a new tab in foreground. 2006-03-31 tim - 'Setup' menu renamed to 'Settings' - Fixed various navigation errors when 'Locate' button didn't locate the appropriate topic. - Fixed forward navigation, and saved scroll position. - Added tab browsing. 2006-02-07 tim - Navigation history rewritten, now it stores text position too. - Version changed to 2.1. 2006-02-06 tim - Added 'Extract CHM content' menu item to extract the whole CHM file into a directory. 2006-02-02 tim - Added i18n calls for complete internationalization. pot file created. - Switched to a new, correct automake file structure. - Fixed autotest. - Version changed to 2.0. 2006-02-01 tim - Now kchmviewer uses system libchm if found, and no --with-builtin-chmlib configure switch defined. - Made configure more compatible with newest autoconf and Debian - thanks to Jose Luis Tallon. - Added an application icon - thanks to Jose Luis Tallon. - Fixed index parser for PHP manual - thanks to Dmitry Bakshaev. - In full screen mode the menu bar and status bar are now hidden. 2006-01-30 tim - Added 'locate in content window' button to open currently opened topic in the content window. - Fixed compilation with gcc 4.1 - thanks to Jan Jitse Venselaar. - The algorithm to detect the valid root offset in contents page is changed. Now there should be less "CHMFile::ParseAndFillTopicsTree: child entry 1 with no root entry!" errors. - Pages with images only are now shown correctly. 2005-12-30 tim - Fixed kqrunprocess.h compilation bug on some platforms. 2005-11-27 tim - Version 1.3 RELEASE 2005-11-25 tim - Fixed error message when CHM file cannot be opened. - Added Fullscreen mode (shortcut F11), and option to show/hide contents window (F9). 2005-11-22 tim - Added possibility to view HTML source in external viewer/editor 2005-11-21 tim - File names containing non-English characters now open correctly. - Changed copyright notices. 2005-11-21 tim - Fixed browser page update for QTextBrowser when current encoding changes. - Changed encoding selectore. Now it compiles on x86_64. - version 1.2 RELEASE 2005-11-20 tim - Added 'next page' and 'prev page' buttons. - Added extra charset encodings for Japanese, Chinese, Russian and Ukrainian languages. - Added UTF-8 and UTF-16 encodings to country 'Unicode' :) - Added special KOI8 encoding to Russian and Ukrainian languages. 'Special' means that TOC is in CP1251 encoding, while content is in KOI8 encoding. There were some CHM files with such weird encoding, so it is kinda hack. - Fixed language selection bug - application crashed when you select the last language in any submenu. - 'Set encoding' menu renamed to 'Set Language'. - Added a new 'Set codepage' menu, which allows experienced people to send needed text code page directly. - Added Ctrl-F shortcut to move cursor focus onto the search input combo box. - Fixed navigation in some CHM files, which have spaces in filenames. 2005-10-30 tim - fixed security bug - chmlib-0.35 updated to 0.37 - version 1.1 RELEASE released. 2005-09-27 tim - fixed bug with incorrect embedded image shown - thanks to XinWei Hu. - fixed bug with non-working decrease font size - thanks to anonymous Sourceforge user. - copy in KDE version worked through Ctrl-C or 'copy' in content menu. 2005-07-28 tim - Version 1.0 RELEASE released. - Fixed -h option for Qt version. - Fixed search messagebox on '?' button. - Added F3 shortcut for 'next search in page' action. 2005-06-30 tim - version 0.92 RELEASE CANDIDATE 2 released. - fixed Slackware 10 compilation (one more time) 2005-06-25 tim - more namespace cleanups and bugfixes. - context and search windows are not shown if the opened file doesn't have it. - removed 'search in results' checkbox. - the last used directory is also stored. 2005-06-21 tim - fixed 'View HTML source' bug. - fixed "Select All/Copy" popup menu bugs. - fixed bug with duplicated WhatsIs icon on every toolbar. - added several keyboard shortcuts for menu commands. - added extra shortcuts: Ctrl+1 opens the contents page, Ctrl+2 opens Index page, Ctrl+3 opens the Search page, and Ctrl+4 opens the Bookmarks page. - added command-line options to search in pages, in index and in bookmarks. 2005-06-20 Luca 'Ziabice' Gambetta - fix for AMD64 platform (confirmed to work) 2005-06-18 tim - version 0.91 RELEASE CANDIDATE 1 released. 2005-06-18 tim - all configuration settings are now used. - history is saved, loaded and cleaned up correctly. - chm data (size/time) is now stored inside the history file, not in file name. 2005-06-17 tim - some of configuration settings are now used. - new browser is now running on Qt version when external URL is opening. 2005-06-16 tim - added the configuration dialog, configuration settings are now saved and loaded. 2005-06-12 tim - fixed compilation on Slackware 10. - fixed internal links following for QTextBrowser. 2005-06-11 Gregorio Guidi - fixed possible problem - linking static chmlib against non-static executable. - added --without-kde option. 2005-06-07 tim - preparing to release version 0.9beta. - version 0.9beta released. 2005-06-07 tim - added a full-featured search engine with complex query support. 2005-06-02 tim - added copy/selectall functionality to KHTML browser, including a popup menu. - fixed storing scrollbar position for KHTML browser. - fixed window refresh on encoding change, encoding change now works for KHTML browser. - zoom in/out buttons also work for KHTML browser. 2005-06-01 tim - clicking on links (in-book navigation) now works for KHTML browser. - full links (ms-its:) in chm files are now supported. 2005-05-10 tim - switched to KPopupMenu for KDE. - fixed search/print for KHTMLPart. - fixed status bar in KDE window. - added QWhatsThis for every toolbar icon. - fixed command-line parsing for KDE app, remove external GetOpt class. - fixed build outside the work directory. 2005-05-04 tim - KDE integration continues. Now we support printing from KHTML. - KIO-slave now works. - switched to KTabWidget for KDE. - fixed search/print for QTextBrowser. 2005-05-03 tim - Reimplemented browser history in a more convinient way. - KDE integration continues. Now we support KHTML. - Added a KIO-slave to handle CHMs. - Now it is possible to open files with non-latin filenames. - Added support for CHM urls containing anchors. - It is possible to use QTextBrowser even for a KDE application. 2005-04-27 tim - KDE integration started. Now we support KApplication, KMainWindow and KFileDialog. 2005-04-24 tim - version 0.2 released. 2005-04-24 tim - added index fields identation according to .hhk file. - index entries with multiple links are now supported. A dialog is opened when such a link is clicked. - index "see also" links are now supported. - added red color for index entries with multiple links, and grey color for "see also" links. - chmlib interface redesigned for a great code cleanup and a little speedup. - fixed bug when search history and bookmark list grow up every start. - fixed garbage at the end of some HTML pages. - fixed bug when search results do not open in page. - fixed compilation on earlier Qt version (remove qvector.h dependency). - fixed compilation on glibc without off_t. 2005-04-23 tim - TOC parser rewritten, got about 30% speedup on TOC parsing. Note that TOC parser becomes stricter; please report any warnings. - Fixed chinese encoding TOC bugs, chinese files are now also shown correctly. - Added ” entity to the entities list. 2005-04-19 tim - added support for built-in images, including custom images for folders; - re-merged toolbar images into the executable as PNGs (uses less space); - switched to autoconf/automake from qmake to simplify building and distribution, and to simplify KDEing; 2005-04-05 tim - version 0.1alpha released - fixed slowdown on big files; 2005-04-05 tim - images merged into the main executable kchmviewer-7.5/PaxHeaders.8614/build-release.sh0000644000000000000000000000012412616333137016267 xustar0027 mtime=1446622815.937622 27 atime=1447562193.032735 30 ctime=1447562193.032735926 kchmviewer-7.5/build-release.sh0000755000175000001440000000612212616333137016623 0ustar00timusers00000000000000#!/bin/sh # Export the source code BUILD_RPM64=1 BUILD_RPM32=1 BUILD_WINDOWS=1 PACKAGE=kchmviewer BINARYFILE="bin/kchmviewer" FILE_VERSION="src/version.h" RPM_OUTDIR="/home/tim/rpmbuild/RPMS" # Get current version VERSION_MAJOR=`sed -n 's/^\#define\s\+APP_VERSION_MAJOR\s\+\([0-9a-z]\+\)/\1/p' $FILE_VERSION` VERSION_MINOR=`sed -n 's/^\#define\s\+APP_VERSION_MINOR\s\+\"\?\([0-9a-z]\+\)\"\?/\1/p' $FILE_VERSION` CURRENTVER="$VERSION_MAJOR.$VERSION_MINOR" BUILDDIR="$PACKAGE-$CURRENTVER" RELEASEDIR="release-$CURRENTVER" if [ -d "$BUILDDIR" ]; then rm -rf "$BUILDDIR" fi if [ -d "$RELEASEDIR" ]; then rm -rf "$RELEASEDIR" fi mkdir "$RELEASEDIR" || exit 1 # Source package svn export . "$BUILDDIR/" || exit 1 tar zcf "$RELEASEDIR/$PACKAGE-$CURRENTVER.tar.gz" $BUILDDIR || exit 1 # win32 sh build-win32-mingw.sh -nsis || exit 1 mv build.win32/nsis/InstallKchmviewer*.exe $RELEASEDIR rm -rf "build.win32" # Linux RPMs for target in qt5-32 qt5-64 qt4-32 qt4-64; do echo "Building for $target" rm -rf "$BUILDDIR" svn export . "$BUILDDIR/" || exit 1 # Get the Qt version case $target in qt4-*) QMAKE=qmake QTLIBS="QtDBus QtXml QtGui QtCore QtNetwork QtWebKit" RPMSUFFIX="qt4" ;; qt5-*) QMAKE=qmake-qt5 QTLIBS="Qt5WebKitWidgets Qt5PrintSupport Qt5WebKit Qt5Widgets Qt5Xml Qt5DBus Qt5Network Qt5Gui Qt5Core GL" RPMSUFFIX="qt5" ;; *) echo "Invalid target" exit 1 esac # Get the arch case $target in *-32) QMAKESPEC="linux-g++-32" RPMARCH="i586" LINKLIBS="pthread chm zip $QTLIBS" ;; *-64) QMAKESPEC="linux-g++-64" RPMARCH="x86_64" ;; *) echo "Invalid arch" exit 1 esac # Hack the libs if [ -n "$LINKLIBS" ]; then pushd $BUILDDIR # Link the libraries so the linker finds the 32-bit libs instead of 64-bit ones for lib in $LINKLIBS; do libpath=`find /lib /usr/lib/ -maxdepth 1 -name lib$lib.so | sort -r | head -n1` if [ -z "$libpath" ]; then libpath=`find /lib /usr/lib/ -maxdepth 1 -name lib$lib.so\.[0-9] | sort -r | head -n1` if [ -z "$libpath" ]; then echo "No library $lib found" exit fi fi ln -s $libpath "src/lib$lib.so" done popd fi # Build it (cd "$BUILDDIR" && $QMAKE -r -spec $QMAKESPEC "CONGIF+=release" && make -j4) || exit 1 # Making the RPM root rm -rf "$BUILDDIR/buildroot" mkdir -p "$BUILDDIR/buildroot/usr/bin" mkdir -p "$BUILDDIR/buildroot/usr/share/applications" mkdir -p "$BUILDDIR/buildroot/usr/share/pixmaps" cp packages/*.desktop "$BUILDDIR/buildroot/usr/share/applications" cp packages/*.png "$BUILDDIR/buildroot/usr/share/pixmaps" strip --strip-all "$BUILDDIR/bin/kchmviewer" -o "$BUILDDIR/buildroot/usr/bin/kchmviewer" || exit 1 # Prepare a spec file sed "s/^Version: [0-9.]\\+/Version: $CURRENTVER/" packages/rpm.spec > $BUILDDIR/rpm.spec # Build an RPM rpmbuild -bb --target=$RPMARCH --buildroot `pwd`"/$BUILDDIR/buildroot/" $BUILDDIR/rpm.spec || exit 1 mv $RPM_OUTDIR/$RPMARCH/kchmviewer-$CURRENTVER-1.$RPMARCH.rpm "$RELEASEDIR/kchmviewer-$CURRENTVER-1.${RPMARCH}-${RPMSUFFIX}.rpm" || exit 1 rm -rf "$BUILDDIR" done echo "Done! Version $CURRENTVER released!" kchmviewer-7.5/PaxHeaders.8614/lib0000644000000000000000000000013112622005721013675 xustar0030 mtime=1447562193.073735369 29 atime=1447562193.04573575 30 ctime=1447562193.073735369 kchmviewer-7.5/lib/0000755000175000001440000000000012622005721014304 5ustar00timusers00000000000000kchmviewer-7.5/lib/PaxHeaders.8614/lib.pro0000644000000000000000000000012412316713333015251 xustar0027 mtime=1396414171.836935 27 atime=1447562193.070735 30 ctime=1447562193.071735396 kchmviewer-7.5/lib/lib.pro0000644000175000001440000000006612316713333015603 0ustar00timusers00000000000000SUBDIRS += libebook TEMPLATE = subdirs CONFIG += xml kchmviewer-7.5/lib/PaxHeaders.8614/libebook0000644000000000000000000000013012622005721015462 xustar0029 mtime=1447562193.09273511 30 atime=1447562193.071735396 29 ctime=1447562193.09273511 kchmviewer-7.5/lib/libebook/0000755000175000001440000000000012622005721016072 5ustar00timusers00000000000000kchmviewer-7.5/lib/libebook/PaxHeaders.8614/helperxmlhandler_epubtoc.cpp0000644000000000000000000000012312325413144023326 xustar0027 mtime=1398150756.763307 27 atime=1447562193.092735 29 ctime=1447562193.09273511 kchmviewer-7.5/lib/libebook/helperxmlhandler_epubtoc.cpp0000644000175000001440000000514612325413144023665 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include #include "helperxmlhandler_epubtoc.h" HelperXmlHandler_EpubTOC::HelperXmlHandler_EpubTOC(EBook_EPUB *epub) { m_epub = epub; m_inNavMap = false; m_inText = false; m_indent = 0; } bool HelperXmlHandler_EpubTOC::startElement(const QString &, const QString &localName, const QString &, const QXmlAttributes &atts) { // qDebug() << "startElement " << " " << localName; // for ( int i = 0; i < atts.count(); i++ ) // qDebug() << " " << atts.localName(i) << " " << atts.value(i); if ( localName == "navMap" ) { m_inNavMap = true; return true; } if ( !m_inNavMap ) return true; if ( localName == "navPoint" ) m_indent++; if ( localName == "text" ) m_inText = true; if ( localName == "content" ) { int idx = atts.index( "src" ); if ( idx == -1 ) return false; m_lastId = atts.value( idx ); checkNewTocEntry(); } return true; } bool HelperXmlHandler_EpubTOC::characters(const QString &ch) { // qDebug() << "characters" << " " << ch; if ( m_inText ) m_lastTitle = ch; checkNewTocEntry(); return true; } bool HelperXmlHandler_EpubTOC::endElement(const QString& , const QString &localName, const QString &) { // qDebug() << "endElement" << " " << qName; if ( localName == "navMap" ) { m_inNavMap = false; return true; } if ( localName == "navPoint" ) m_indent--; if ( localName == "text" ) m_inText = false; return true; } void HelperXmlHandler_EpubTOC::checkNewTocEntry() { if ( !m_lastId.isEmpty() && !m_lastTitle.isEmpty() ) { EBookTocEntry entry; entry.name = m_lastTitle; entry.url = m_epub->pathToUrl( m_lastId ); entry.iconid = EBookTocEntry::IMAGE_AUTO; entry.indent = m_indent - 1; entries.push_back( entry ); //qDebug() << "TOC entry: " << m_lastId << " :" << m_lastTitle << " :" << m_indent - 1; m_lastId.clear(); m_lastTitle.clear(); } } kchmviewer-7.5/lib/libebook/PaxHeaders.8614/ebook_search.h0000644000000000000000000000012312321077735020350 xustar0027 mtime=1396998109.567818 27 atime=1447562193.081735 29 ctime=1447562193.08173526 kchmviewer-7.5/lib/libebook/ebook_search.h0000644000175000001440000000642612321077735020711 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef EBookSearch_H #define EBookSearch_H #include #include "helper_search_index.h" class EBook; class EBookSearch : public QObject { Q_OBJECT public: EBookSearch(); ~EBookSearch(); //! Loads the search index from the data stream \param stream. //! The index should be previously saved with generateIndex(). bool loadIndex( QDataStream& stream ); //! Generates the search index from the opened CHM file \param chmFile, //! and saves it to the data stream \param stream which should be writeable. //! //! To show the progress, this procedure emits a progressStep() signal periodically //! with the value showing current progress in percentage (i.e. from 0 to 100) //! After signal emission, the following event processing function will be called: //! qApp->processEvents( QEventLoop::ExcludeUserInputEvents ) //! to make sure the dialogs (if any) are properly updated. //! //! If \param progressDls is not null, it will be used to display progress. //! Returns true if the index has been generated and saved, or false if internal //! error occurs, or (most likely) the cancelIndexGeneration() slot has been called. bool generateIndex( EBook * ebook, QDataStream& stream ); //! Executes the search query. The \param query is a string like "C++ language" class, //! \param results is a pointer to QStringList, and \param limit limits the number of //! results in case the query is too generic (like \a "a" ). //! The \param chmFile is used to get the current encoding information. //! The return value is false only if the index is not generated, or if a closing quote character //! is missing. Call hasIndex() to clarify. If search returns no results, the return value is //! true, but the \param results list will be empty. //! //! Note that the function does not clear \param results before adding search results, so if you are //! not merging search results, make sure it's empty. bool searchQuery ( const QString& query, QList< QUrl > * results, EBook * chmFile, unsigned int limit = 100 ); //! Returns true if a valid search index is present, and therefore search could be executed bool hasIndex() const; signals: void progressStep( int value, const QString& stepName ); public slots: void cancelIndexGeneration(); private slots: void updateProgress( int value, const QString& stepName ); void processEvents(); private: QStringList m_keywordDocuments; QtAs::Index * m_Index; }; #endif kchmviewer-7.5/lib/libebook/PaxHeaders.8614/CMakeLists.txt0000644000000000000000000000012412322425122020300 xustar0027 mtime=1397369426.255372 27 atime=1447562193.074735 30 ctime=1447562193.078735301 kchmviewer-7.5/lib/libebook/CMakeLists.txt0000644000175000001440000000054712322425122020636 0ustar00timusers00000000000000# Project files SET( libebookSources ebook_chm.cpp ebook_epub.cpp ebook.cpp ebook_chm_encoding.cpp ebook_search.cpp helper_entitydecoder.cpp helper_search_index.cpp helperxmlhandler_epubcontainer.cpp helperxmlhandler_epubcontent.cpp helperxmlhandler_epubtoc.cpp ) KDE4_ADD_LIBRARY( ebook STATIC ${libebookSources} ) kchmviewer-7.5/lib/libebook/PaxHeaders.8614/bitfiddle.h0000644000000000000000000000012411270704705017647 xustar0027 mtime=1256425925.210996 27 atime=1447562193.079735 30 ctime=1447562193.079735287 kchmviewer-7.5/lib/libebook/bitfiddle.h0000644000175000001440000000642711270704705020210 0ustar00timusers00000000000000/* Copyright (C) 2003 Razvan Cojocaru Most of the code in this file is a modified version of code from Pabs' GPL chmdeco project, credits and thanks go to him. 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; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ inline unsigned short UINT16ARRAY( const void * x ) { unsigned char * p = (unsigned char *) x; return p[0] | (p[1] << 8); } inline unsigned int UINT32ARRAY( const void * x ) { unsigned char * p = (unsigned char *) x; return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24); } inline int INT32ARRAY( const void * x ) { char * p = (char *) x; return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24); } inline unsigned int get_int32_le( void *addr) { unsigned char *p = (unsigned char*) addr; return (unsigned int) ( p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24) ); } inline quint64 be_encint(unsigned char* buffer, size_t& length) { quint64 result = 0; int shift=0; length = 0; do { result |= ((*buffer) & 0x7f) << shift; shift += 7; ++length; } while (*(buffer++) & 0x80); return result; } /* Finds the first unset bit in memory. Returns the number of set bits found. Returns -1 if the buffer runs out before we find an unset bit. */ inline int ffus(unsigned char* byte, int* bit, size_t& length) { int bits = 0; length = 0; while(*byte & (1 << *bit)){ if(*bit) --(*bit); else { ++byte; ++length; *bit = 7; } ++bits; } if(*bit) --(*bit); else { ++length; *bit = 7; } return bits; } inline quint64 sr_int(unsigned char* byte, int* bit, unsigned char s, unsigned char r, size_t& length) { quint64 ret; unsigned char mask; int n, n_bits, num_bits, base, count; length = 0; size_t fflen; if(!bit || *bit > 7 || s != 2) return ~(quint64)0; ret = 0; count = ffus(byte, bit, fflen); length += fflen; byte += length; n_bits = n = r + (count ? count-1 : 0) ; while(n > 0) { num_bits = n > *bit ? *bit : n-1; base = n > *bit ? 0 : *bit - (n-1); switch(num_bits){ case 0: mask = 1; break; case 1: mask = 3; break; case 2: mask = 7; break; case 3: mask = 0xf; break; case 4: mask = 0x1f; break; case 5: mask = 0x3f; break; case 6: mask = 0x7f; break; case 7: mask = 0xff; break; default: mask = 0xff; break; } mask <<= base; ret = (ret << (num_bits+1)) | (quint64)((*byte & mask) >> base); if( n > *bit ){ ++byte; ++length; n -= *bit+1; *bit = 7; } else { *bit -= n; n = 0; } } if(count) ret |= (quint64)1 << n_bits; return ret; } kchmviewer-7.5/lib/libebook/PaxHeaders.8614/ebook_chm_encoding.h0000644000000000000000000000012412321077735021521 xustar0027 mtime=1396998109.567818 27 atime=1447562193.080735 30 ctime=1447562193.080735274 kchmviewer-7.5/lib/libebook/ebook_chm_encoding.h0000644000175000001440000000175712321077735022063 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef EBOOK_CHM_ENCODING_H #define EBOOK_CHM_ENCODING_H #include class Ebook_CHM_Encoding { public: static QString guessByLCID( unsigned short lcid ); }; #endif // EBOOK_CHM_ENCODING_H kchmviewer-7.5/lib/libebook/PaxHeaders.8614/libebook.pro0000644000000000000000000000012312616333137020061 xustar0027 mtime=1446622815.937622 27 atime=1447562193.092735 29 ctime=1447562193.09273511 kchmviewer-7.5/lib/libebook/libebook.pro0000644000175000001440000000127212616333137020414 0ustar00timusers00000000000000HEADERS += bitfiddle.h \ ebook_chm.h \ ebook_epub.h \ ebook.h \ ebook_chm_encoding.h \ ebook_search.h \ helper_entitydecoder.h \ helper_search_index.h \ helperxmlhandler_epubcontainer.h \ helperxmlhandler_epubcontent.h \ helperxmlhandler_epubtoc.h SOURCES += \ ebook_chm.cpp \ ebook_epub.cpp \ ebook.cpp \ ebook_chm_encoding.cpp \ ebook_search.cpp \ helper_entitydecoder.cpp \ helper_search_index.cpp \ helperxmlhandler_epubcontainer.cpp \ helperxmlhandler_epubcontent.cpp \ helperxmlhandler_epubtoc.cpp TARGET = ebook CONFIG += warn_on \ qt \ staticlib TEMPLATE = lib INCLUDEPATH += ../../src QT += widgets kchmviewer-7.5/lib/libebook/PaxHeaders.8614/ebook.cpp0000644000000000000000000000012412321077735017357 xustar0027 mtime=1396998109.567818 27 atime=1447562193.079735 30 ctime=1447562193.079735287 kchmviewer-7.5/lib/libebook/ebook.cpp0000644000175000001440000000234112321077735017707 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include "ebook.h" #include "ebook_chm.h" #include "ebook_epub.h" const char * const INTERNAL_URL_SCHEME = "kchm"; EBook::EBook() { } EBook::~EBook() { } EBook * EBook::loadFile( const QString &archiveName ) { EBook_CHM * cbook = new EBook_CHM(); if ( cbook->load( archiveName ) ) return cbook; delete cbook; EBook_EPUB * ebook = new EBook_EPUB(); if ( ebook->load( archiveName ) ) return ebook; delete ebook; return 0; } kchmviewer-7.5/lib/libebook/PaxHeaders.8614/ebook_url.h0000644000000000000000000000012412317212375017702 xustar0027 mtime=1396511997.347081 27 atime=1447562193.081735 30 ctime=1447562193.090735139 kchmviewer-7.5/lib/libebook/ebook_url.h0000644000175000001440000000025512317212375020234 0ustar00timusers00000000000000#ifndef EBOOK_URL_H #define EBOOK_URL_H #include class EbookURL : public QUrl { public: EbookURL(); EbookURL( const QString & url ); }; #endif // EBOOK_URL_H kchmviewer-7.5/lib/libebook/PaxHeaders.8614/ebook_search.cpp0000644000000000000000000000012312616333137020701 xustar0027 mtime=1446622815.937622 27 atime=1447562193.081735 29 ctime=1447562193.08173526 kchmviewer-7.5/lib/libebook/ebook_search.cpp0000644000175000001440000001240712616333137021236 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include #include "ebook.h" #include "ebook_search.h" // Helper class to simplity state management and data keeping class SearchDataKeeper { public: SearchDataKeeper() { m_inPhrase = false; } void beginPhrase() { phrase_terms.clear(); m_inPhrase = true; } void endPhrase() { m_inPhrase = false; phrasewords += phrase_terms; phrases.push_back( phrase_terms.join(" ") ); } bool isInPhrase() const { return m_inPhrase; } void addTerm( const QString& term ) { if ( !term.isEmpty() ) { terms.push_back( term ); if ( m_inPhrase ) phrase_terms.push_back( term ); } } // Should contain all the search terms present in query, includind those from phrases. One element - one term . QStringList terms; // Should contain phrases present in query without quotes. One element - one phrase. QStringList phrases; // Should contain all the terms present in all the phrases (but not outside). QStringList phrasewords; private: bool m_inPhrase; QStringList phrase_terms; }; EBookSearch::EBookSearch() { m_Index = 0; } EBookSearch::~ EBookSearch() { delete m_Index; } bool EBookSearch::loadIndex( QDataStream & stream ) { delete m_Index; m_Index = new QtAs::Index(); return m_Index->readDict( stream ); } bool EBookSearch::generateIndex( EBook * ebookFile, QDataStream & stream ) { QList< QUrl > documents; QList< QUrl > alldocuments; emit progressStep( 0, "Generating the list of documents" ); processEvents(); // Enumerate the documents if ( !ebookFile->enumerateFiles( alldocuments ) ) return false; if ( m_Index ) delete m_Index; m_Index = new QtAs::Index(); connect( m_Index, SIGNAL( indexingProgress( int, const QString& ) ), this, SLOT( updateProgress( int, const QString& ) ) ); // Process the list of files in CHM archive and keep only HTML document files from there for ( int i = 0; i < alldocuments.size(); i++ ) { QString docpath = alldocuments[i].path(); if ( docpath.endsWith( ".html", Qt::CaseInsensitive ) || docpath.endsWith( ".htm", Qt::CaseInsensitive ) || docpath.endsWith( ".xhtml", Qt::CaseInsensitive ) ) documents.push_back( alldocuments[i] ); } if ( !m_Index->makeIndex( documents, ebookFile ) ) { delete m_Index; m_Index = 0; return false; } m_Index->writeDict( stream ); m_keywordDocuments.clear(); return true; } void EBookSearch::cancelIndexGeneration() { m_Index->setLastWinClosed(); } void EBookSearch::updateProgress(int value, const QString & stepName) { emit progressStep( value, stepName ); } void EBookSearch::processEvents() { // Do it up to ten times; some events generate other events for ( int i = 0; i < 10; i++ ) qApp->processEvents( QEventLoop::ExcludeUserInputEvents ); } bool EBookSearch::searchQuery(const QString & query, QList< QUrl > * results, EBook *ebookFile, unsigned int limit) { // We should have index if ( !m_Index ) return false; // Characters which split the words. We need to make them separate tokens QString splitChars = m_Index->getCharsSplit(); // Characters which are part of the word. We should keep them apart. QString partOfWordChars = m_Index->getCharsPartOfWord(); // Variables to store current state SearchDataKeeper keeper; QString term; for ( int i = 0; i < query.length(); i++ ) { QChar ch = query[i].toLower(); // a quote either begins or ends the phrase if ( ch == '"' ) { keeper.addTerm( term ); if ( keeper.isInPhrase() ) keeper.endPhrase(); else keeper.beginPhrase(); continue; } // If new char does not stop the word, add ot and continue if ( ch.isLetterOrNumber() || partOfWordChars.indexOf( ch ) != -1 ) { term.append( ch ); continue; } // If it is a split char, add this term and split char as separate term if ( splitChars.indexOf( ch ) != -1 ) { // Add existing term if present keeper.addTerm( term ); // Change the term variable, so it will be added when we exit this block term = ch; } // Just add the word; it is most likely a space or terminated by tokenizer. keeper.addTerm( term ); term = QString::null; } keeper.addTerm( term ); if ( keeper.isInPhrase() ) return false; QList< QUrl > foundDocs = m_Index->query( keeper.terms, keeper.phrases, keeper.phrasewords, ebookFile ); for ( QList< QUrl >::iterator it = foundDocs.begin(); it != foundDocs.end() && limit > 0; ++it, limit-- ) results->push_back( *it ); return true; } bool EBookSearch::hasIndex() const { return m_Index != 0; } kchmviewer-7.5/lib/libebook/PaxHeaders.8614/ebook_epub.cpp0000644000000000000000000000012312622003403020352 xustar0027 mtime=1447560963.701728 27 atime=1447562193.080735 29 ctime=1447562193.08173526 kchmviewer-7.5/lib/libebook/ebook_epub.cpp0000644000175000001440000001703412622003403020710 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include #include #include "ebook_epub.h" #include "helperxmlhandler_epubcontainer.h" #include "helperxmlhandler_epubcontent.h" #include "helperxmlhandler_epubtoc.h" static const char * URL_SCHEME_EPUB = "epub"; EBook_EPUB::EBook_EPUB() { m_zipFile = 0; } EBook_EPUB::~EBook_EPUB() { close(); } bool EBook_EPUB::load(const QString &archiveName) { close(); // We use QFile and zip_fdopen instead of zip_open because latter does not support Unicode file names m_epubFile.setFileName( archiveName ); if ( !m_epubFile.open( QIODevice::ReadOnly ) ) { qWarning("Could not open file %s: %s", qPrintable(archiveName), qPrintable( m_epubFile.errorString())); return false; } // Open the ZIP archive: http://www.nih.at/libzip/zip_fdopen.html int errcode; m_zipFile = zip_fdopen( m_epubFile.handle(), 0, &errcode ); if ( !m_zipFile ) { qWarning("Could not open file %s: error %d", qPrintable(archiveName), errcode); return false; } // Parse the book descriptor file if ( !parseBookinfo() ) return false; return true; } void EBook_EPUB::close() { if ( m_zipFile ) { zip_close( m_zipFile ); m_zipFile = 0; } if ( m_epubFile.isOpen() ) m_epubFile.close(); } bool EBook_EPUB::getFileContentAsString(QString &str, const QUrl &url) const { return getFileAsString( str, urlToPath( url ) ); } bool EBook_EPUB::getFileContentAsBinary(QByteArray &data, const QUrl &url) const { return getFileAsBinary( data, urlToPath( url ) ); } bool EBook_EPUB::enumerateFiles(QList &files) { files = m_ebookManifest; return true; } QString EBook_EPUB::title() const { return m_title; } QUrl EBook_EPUB::homeUrl() const { return m_tocEntries[0].url; } bool EBook_EPUB::hasFeature(EBook::Feature code) const { switch ( code ) { case FEATURE_TOC: return true; case FEATURE_INDEX: return false; case FEATURE_ENCODING: return false; } return false; } bool EBook_EPUB::getTableOfContents( QList &toc ) const { toc = m_tocEntries; return true; } bool EBook_EPUB::getIndex(QList &) const { return false; } QString EBook_EPUB::getTopicByUrl(const QUrl& url) { if ( m_urlTitleMap.contains( url ) ) return m_urlTitleMap[ url ]; return ""; } QString EBook_EPUB::currentEncoding() const { return "UTF-8"; } bool EBook_EPUB::setCurrentEncoding(const char *) { abort(); } bool EBook_EPUB::isSupportedUrl(const QUrl &url) { return url.scheme() == URL_SCHEME_EPUB; } bool EBook_EPUB::parseXML(const QString &uri, QXmlDefaultHandler * parser) { QByteArray container; if ( !getFileAsBinary( container, uri ) ) { qDebug("Failed to retrieve XML file %s", qPrintable( uri ) ); return false; } // Use it as XML source QXmlInputSource source; source.setData( container ); // Init the reader QXmlSimpleReader reader; reader.setContentHandler( parser ); reader.setErrorHandler( parser ); return reader.parse( source ); } bool EBook_EPUB::parseBookinfo() { // Parse the container.xml to find the content descriptor HelperXmlHandler_EpubContainer container_parser; if ( !parseXML( "META-INF/container.xml", &container_parser ) || container_parser.contentPath.isEmpty() ) return false; // Parse the content.opf HelperXmlHandler_EpubContent content_parser; if ( !parseXML( container_parser.contentPath, &content_parser ) ) return false; // At least title and the TOC must be present if ( !content_parser.metadata.contains("title") || content_parser.tocname.isEmpty() ) return false; // All the files, including TOC, are relative to the container_parser.contentPath m_documentRoot.clear(); int sep = container_parser.contentPath.lastIndexOf( '/' ); if ( sep != -1 ) m_documentRoot = container_parser.contentPath.left( sep + 1 ); // Keep the trailing slash // Parse the TOC HelperXmlHandler_EpubTOC toc_parser( this ); if ( !parseXML( content_parser.tocname, &toc_parser ) ) return false; // Get the data m_title = content_parser.metadata[ "title" ]; // Copy the manifest information and fill up the other maps Q_FOREACH( EBookTocEntry e, toc_parser.entries ) { // Add into url-title map m_urlTitleMap[ e.url ] = e.name; m_tocEntries.push_back( e ); } // Move the manifest entries into the list Q_FOREACH( QString f, content_parser.manifest.values() ) m_ebookManifest.push_back( pathToUrl( f ) ); return true; } QUrl EBook_EPUB::pathToUrl(const QString &link) const { QUrl url; url.setScheme( URL_SCHEME_EPUB ); url.setHost( URL_SCHEME_EPUB ); // Does the link contain the fragment as well? int off = link.indexOf( '#' ); QString path; if ( off != -1 ) { path = link.left( off ); url.setFragment( link.mid( off + 1 ) ); } else path = link; if ( !path.startsWith( '/' ) ) path.prepend( '/' ); url.setPath( QUrl::fromPercentEncoding( path.toUtf8() ) ); return url; } QString EBook_EPUB::urlToPath(const QUrl &link) const { if ( link.scheme() == URL_SCHEME_EPUB ) return link.path(); return ""; } bool EBook_EPUB::getFileAsString(QString &str, const QString &path) const { QByteArray data; if ( !getFileAsBinary( data, path ) ) return false; // I have never seen yet an UTF16 epub if ( data.startsWith("" ); int utf16 = data.indexOf("UTF-16"); if ( utf16 > 0 && utf16 < endxmltag ) { QMessageBox::critical( 0, ("Unsupported encoding"), ("The encoding of this ebook is not supported yet. Please send it to gyunaev@ulduzsoft.com for support to be added") ); return false; } } str = QString::fromUtf8( data ); return true; } bool EBook_EPUB::getFileAsBinary(QByteArray &data, const QString &path) const { // Retrieve the file size struct zip_stat fileinfo; QString completeUrl; if ( !path.isEmpty() && path[0] == '/' ) completeUrl = m_documentRoot + path.mid( 1 ); else completeUrl = m_documentRoot + path; //qDebug("URL requested: %s (%s)", qPrintable(path), qPrintable(completeUrl)); // http://www.nih.at/libzip/zip_stat.html if ( zip_stat( m_zipFile, completeUrl.toUtf8().constData(), 0, &fileinfo) != 0 ) { qDebug("File %s is not found in the archive", qPrintable(completeUrl)); return false; } // Make sure the size field is valid if ( (fileinfo.valid & ZIP_STAT_SIZE) == 0 || (fileinfo.valid & ZIP_STAT_INDEX) == 0 ) return false; // Open the file struct zip_file * file = zip_fopen_index( m_zipFile, fileinfo.index, 0 ); if ( !file ) return false; // Allocate the memory and read the file data.resize( fileinfo.size ); // Could it return a positive number but not fileinfo.size??? int ret = zip_fread( file, data.data(), fileinfo.size ); if ( ret != (int) fileinfo.size ) { zip_fclose( file ); return false; } zip_fclose( file ); return true; } kchmviewer-7.5/lib/libebook/PaxHeaders.8614/helper_search_index.cpp0000644000000000000000000000012312446223156022250 xustar0026 mtime=1419322990.47456 27 atime=1447562193.090735 30 ctime=1447562193.090735139 kchmviewer-7.5/lib/libebook/helper_search_index.cpp0000644000175000001440000002764512446223156022617 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include #include #include "ebook.h" #include "ebook_search.h" #include "helper_search_index.h" static const int DICT_VERSION = 4; namespace QtAs { // Those characters are splitters (i.e. split the word), but added themselves into dictionary too. // This makes the dictionary MUCH larger, but ensure that for the piece of "window->print" both // search for "print" and "->print" will find it. static const char SPLIT_CHARACTERS[] = "!()*&^%#@[]{}':;,.?/|/?<>\\-+=~`"; // Those characters are parts of word - for example, '_' is here, and search for _debug will find only _debug. static const char WORD_CHARACTERS[] = "$_"; struct Term { Term() : frequency(-1) {} Term( const QString &t, int f, QVector l ) : term( t ), frequency( f ), documents( l ) {} QString term; int frequency; QVectordocuments; bool operator<( const Term &i2 ) const { return frequency < i2.frequency; } }; QDataStream &operator>>( QDataStream &s, Document &l ) { s >> l.docNumber; s >> l.frequency; return s; } QDataStream &operator<<( QDataStream &s, const Document &l ) { s << (short)l.docNumber; s << (short)l.frequency; return s; } Index::Index() : QObject( 0 ) { lastWindowClosed = false; connect( qApp, SIGNAL( lastWindowClosed() ), this, SLOT( setLastWinClosed() ) ); } void Index::setLastWinClosed() { lastWindowClosed = true; } bool Index::makeIndex(const QList< QUrl >& docs, EBook *chmFile ) { if ( docs.isEmpty() ) return false; docList = docs; if ( chmFile->hasFeature( EBook::FEATURE_ENCODING ) ) entityDecoder.changeEncoding( QTextCodec::codecForName( chmFile->currentEncoding().toUtf8() ) ); QList< QUrl >::ConstIterator it = docList.begin(); int steps = docList.count() / 100; if ( !steps ) steps++; int prog = 0; for ( int i = 0; it != docList.end(); ++it, ++i ) { if ( lastWindowClosed ) return false; QUrl filename = *it; QStringList terms; if ( parseDocumentToStringlist( chmFile, filename, terms ) ) { for ( QStringList::ConstIterator tit = terms.begin(); tit != terms.end(); ++tit ) insertInDict( *tit, i ); } if ( i%steps == 0 ) { prog++; prog = qMin( prog, 99 ); emit indexingProgress( prog, tr("Processing document %1") .arg( (*it).path() ) ); } } emit indexingProgress( 100, tr("Processing completed") ); return true; } void Index::insertInDict( const QString &str, int docNum ) { Entry *e = 0; if ( dict.count() ) e = dict[ str ]; if ( e ) { if ( e->documents.last().docNumber != docNum ) e->documents.append( Document(docNum, 1 ) ); else e->documents.last().frequency++; } else { dict.insert( str, new Entry( docNum ) ); } } bool Index::parseDocumentToStringlist(EBook *chmFile, const QUrl& filename, QStringList& tokenlist ) { QString parsedbuf, parseentity, text; if ( !chmFile->getFileContentAsString( text, filename ) || text.isEmpty() ) { qWarning( "Search index generator: could not retrieve the document content for %s", qPrintable( filename.toString() ) ); return false; } m_charssplit = SPLIT_CHARACTERS; m_charsword = WORD_CHARACTERS; tokenlist.clear(); // State machine states enum state_t { STATE_OUTSIDE_TAGS, // outside HTML tags; parse text STATE_IN_HTML_TAG, // inside HTML tags; wait for end tag STATE_IN_QUOTES, // inside HTML tags and inside quotes; wait for end quote (in var QuoteChar) STATE_IN_HTML_ENTITY // inside HTML entity; parse the entity }; state_t state = STATE_OUTSIDE_TAGS; QChar QuoteChar; // used in STATE_IN_QUOTES for ( int j = 0; j < text.length(); j++ ) { QChar ch = text[j]; if ( (j % 20000) == 0 ) qApp->processEvents( QEventLoop::ExcludeUserInputEvents ); if ( state == STATE_IN_HTML_TAG ) { // We are inside HTML tag. // Ignore everything until we see '>' (end of HTML tag) or quote char (quote start) if ( ch == '"' || ch == '\'' ) { state = STATE_IN_QUOTES; QuoteChar = ch; } else if ( ch == '>' ) state = STATE_OUTSIDE_TAGS; continue; } else if ( state == STATE_IN_QUOTES ) { // We are inside quoted text inside HTML tag. // Ignore everything until we see the quote character again if ( ch == QuoteChar ) state = STATE_IN_HTML_TAG; continue; } else if ( state == STATE_IN_HTML_ENTITY ) { // We are inside encoded HTML entity (like  ). // Collect to parsedbuf everything until we see ; if ( ch.isLetterOrNumber() ) { // get next character of this entity parseentity.append( ch ); continue; } // The entity ended state = STATE_OUTSIDE_TAGS; // Some shitty HTML does not terminate entities correctly. Screw it. if ( ch != ';' && ch != '<' ) { if ( parseentity.isEmpty() ) { // straight '&' symbol. Add and continue. parsedbuf += "&"; } else qWarning( "Index::parseDocument: incorrectly terminated HTML entity '&%s%c', ignoring", qPrintable( parseentity ), ch.toLatin1() ); j--; // parse this character again, but in different state continue; } // Don't we have a space? if ( parseentity.toLower() != "nbsp" ) { QString entity = entityDecoder.decode( parseentity ); if ( entity.isNull() ) { // decodeEntity() already printed error message //qWarning( "Index::parseDocument: failed to decode entity &%s;", parsedbuf.ascii() ); continue; } parsedbuf += entity; continue; } else ch = ' '; // We got a space, so treat it like it, and not add it to parsebuf } // // Now process STATE_OUTSIDE_TAGS // // Check for start of HTML tag, and switch to STATE_IN_HTML_TAG if it is if ( ch == '<' ) { state = STATE_IN_HTML_TAG; goto tokenize_buf; } // Check for start of HTML entity if ( ch == '&' ) { state = STATE_IN_HTML_ENTITY; parseentity = QString::null; continue; } // Replace quote by ' - quotes are used in search window to set the phrase if ( ch == '"' ) ch = '\''; // Ok, we have a valid character outside HTML tags, and probably some in buffer already. // If it is char or letter, add it and continue if ( ch.isLetterOrNumber() || m_charsword.indexOf( ch ) != -1 ) { parsedbuf.append( ch ); continue; } // If it is a split char, add the word to the dictionary, and then add the char itself. if ( m_charssplit.indexOf( ch ) != -1 ) { if ( !parsedbuf.isEmpty() ) tokenlist.push_back( parsedbuf.toLower() ); tokenlist.push_back( ch.toLower() ); parsedbuf = QString::null; continue; } tokenize_buf: // Just add the word; it is most likely a space or terminated by tokenizer. if ( !parsedbuf.isEmpty() ) { tokenlist.push_back( parsedbuf.toLower() ); parsedbuf = QString::null; } } // Add the last word if still here - for broken htmls. if ( !parsedbuf.isEmpty() ) tokenlist.push_back( parsedbuf.toLower() ); return true; } void Index::writeDict( QDataStream& stream ) { stream << DICT_VERSION; stream << m_charssplit; stream << m_charsword; // Document list stream << docList; // Dictionary for( QHash::ConstIterator it = dict.begin(); it != dict.end(); ++it ) { stream << it.key(); stream << (int) it.value()->documents.count(); stream << it.value()->documents; } } bool Index::readDict( QDataStream& stream ) { dict.clear(); docList.clear(); QString key; int version, numOfDocs; stream >> version; if ( version < 2 ) return false; stream >> m_charssplit; stream >> m_charsword; // Read the document list stream >> docList; while ( !stream.atEnd() ) { stream >> key; stream >> numOfDocs; QVector docs( numOfDocs ); stream >> docs; dict.insert( key, new Entry( docs ) ); } return dict.size() > 0; } QList< QUrl > Index::query(const QStringList &terms, const QStringList &termSeq, const QStringList &seqWords, EBook *chmFile ) { QList termList; QStringList::ConstIterator it = terms.begin(); for ( it = terms.begin(); it != terms.end(); ++it ) { Entry *e = 0; if ( dict[ *it ] ) { e = dict[ *it ]; termList.append( Term( *it, e->documents.count(), e->documents ) ); } else { return QList< QUrl >(); } } if ( !termList.count() ) return QList< QUrl >(); qSort( termList ); QVector minDocs = termList.takeFirst().documents; for(QList::Iterator it = termList.begin(); it != termList.end(); ++it) { Term *t = &(*it); QVector docs = t->documents; for(QVector::Iterator minDoc_it = minDocs.begin(); minDoc_it != minDocs.end(); ) { bool found = false; for (QVector::ConstIterator doc_it = docs.constBegin(); doc_it != docs.constEnd(); ++doc_it ) { if ( (*minDoc_it).docNumber == (*doc_it).docNumber ) { (*minDoc_it).frequency += (*doc_it).frequency; found = true; break; } } if ( !found ) minDoc_it = minDocs.erase( minDoc_it ); else ++minDoc_it; } } QList< QUrl > results; qSort( minDocs ); if ( termSeq.isEmpty() ) { for(QVector::Iterator it = minDocs.begin(); it != minDocs.end(); ++it) results << docList.at((int)(*it).docNumber); return results; } QUrl fileName; for(QVector::Iterator it = minDocs.begin(); it != minDocs.end(); ++it) { fileName = docList[ (int)(*it).docNumber ]; if ( searchForPhrases( termSeq, seqWords, fileName, chmFile ) ) results << fileName; } return results; } bool Index::searchForPhrases( const QStringList &phrases, const QStringList &words, const QUrl &filename, EBook * chmFile ) { QStringList parsed_document; if ( !parseDocumentToStringlist( chmFile, filename, parsed_document ) ) return false; miniDict.clear(); // Initialize the dictionary with the words in phrase(s) for ( QStringList::ConstIterator cIt = words.begin(); cIt != words.end(); ++cIt ) miniDict.insert( *cIt, new PosEntry( 0 ) ); // Fill the dictionary with the words from the document unsigned int word_offset = 3; for ( QStringList::ConstIterator it = parsed_document.begin(); it != parsed_document.end(); it++, word_offset++ ) { PosEntry * entry = miniDict[ *it ]; if ( entry ) entry->positions.append( word_offset ); } // Dump it /* QDictIterator it( miniDict ); for( ; it.current(); ++it ) { QString text( it.currentKey() ); QValueList pos = miniDict[text]->positions; for ( unsigned int i = 1; i < pos.size(); i++ ) text += " " + QString::number( pos[i] ); qDebug( "%s", text.ascii()); } */ QList first_word_positions; for ( QStringList::ConstIterator phrase_it = phrases.begin(); phrase_it != phrases.end(); phrase_it++ ) { QStringList phrasewords = phrase_it->split( ' ' ); first_word_positions = miniDict[ phrasewords[0] ]->positions; for ( int j = 1; j < phrasewords.count(); ++j ) { QList next_word_it = miniDict[ phrasewords[j] ]->positions; QList::iterator dict_it = first_word_positions.begin(); while ( dict_it != first_word_positions.end() ) { if ( next_word_it.indexOf( *dict_it + 1 ) != -1 ) { (*dict_it)++; ++dict_it; } else dict_it = first_word_positions.erase( dict_it ); } } } if ( first_word_positions.count() ) return true; return false; } }; kchmviewer-7.5/lib/libebook/PaxHeaders.8614/helperxmlhandler_epubcontent.cpp0000644000000000000000000000012412321077735024224 xustar0027 mtime=1396998109.567818 27 atime=1447562193.091735 30 ctime=1447562193.091735125 kchmviewer-7.5/lib/libebook/helperxmlhandler_epubcontent.cpp0000644000175000001440000000563312321077735024563 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include "helperxmlhandler_epubcontent.h" HelperXmlHandler_EpubContent::HelperXmlHandler_EpubContent() { m_state = STATE_NONE; } bool HelperXmlHandler_EpubContent::startElement(const QString &, const QString &localName, const QString &, const QXmlAttributes &atts) { // tag contains the medatada which goes into m_metadata if ( localName == "metadata" ) m_state = STATE_IN_METADATA; else if ( localName == "manifest" ) m_state = STATE_IN_MANIFEST; else if ( localName == "spine" ) m_state = STATE_IN_SPINE; // Now handle the states else if ( m_state == STATE_IN_METADATA ) // we don't need to store the first 'metadata' here m_tagname = localName; else if ( m_state == STATE_IN_MANIFEST && localName == "item" ) { int idx_id = atts.index( "id" ); int idx_href = atts.index( "href" ); int idx_mtype = atts.index( "media-type" ); if ( idx_id == -1 || idx_href == -1 || idx_mtype == -1 ) return false; manifest[ atts.value( idx_id ) ] = atts.value( idx_href ); if ( atts.value( idx_mtype ) == "application/x-dtbncx+xml" ) tocname = atts.value( idx_href ); //qDebug() << "MANIFEST: " << atts.value( idx_id ) << "->" << atts.value( idx_href ); } else if ( m_state == STATE_IN_SPINE && localName == "itemref" ) { int idx = atts.index( "idref" ); if ( idx == -1 ) return false; spine.push_back( atts.value( idx ) ); //qDebug() << "SPINE: " << atts.value( idx ); } return true; } bool HelperXmlHandler_EpubContent::characters(const QString &ch) { if ( m_state == STATE_IN_METADATA && !m_tagname.isEmpty() && !ch.trimmed().isEmpty() ) { // Some metadata may be duplicated; we concantenate them with | if ( metadata.contains( m_tagname ) ) { metadata[ m_tagname ].append( "|" ); metadata[ m_tagname ].append( ch.trimmed() ); } else metadata[ m_tagname ] = ch.trimmed(); //qDebug() << "METATAG: " << m_tagname << " " << metadata[ m_tagname ]; } return true; } bool HelperXmlHandler_EpubContent::endElement(const QString &, const QString &, const QString &qName) { if ( qName == "manifest" || qName == "metadata" || qName == "spine" ) m_state = STATE_NONE; return true; } kchmviewer-7.5/lib/libebook/PaxHeaders.8614/helper_search_index.h0000644000000000000000000000012412321077735021720 xustar0027 mtime=1396998109.567818 27 atime=1447562193.090735 30 ctime=1447562193.091735125 kchmviewer-7.5/lib/libebook/helper_search_index.h0000644000175000001440000000704512321077735022256 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef EBOOK_SEARCH_INDEX_H #define EBOOK_SEARCH_INDEX_H #include #include #include #include #include #include "helper_entitydecoder.h" class EBook; // This code is based on some pretty old version of Qt Assistant namespace QtAs { struct Document { Document( int d, int f ) : docNumber( d ), frequency( f ) {} Document() : docNumber( -1 ), frequency( 0 ) {} bool operator==( const Document &doc ) const { return docNumber == doc.docNumber; } bool operator<( const Document &doc ) const { return frequency > doc.frequency; } bool operator<=( const Document &doc ) const { return frequency >= doc.frequency; } bool operator>( const Document &doc ) const { return frequency < doc.frequency; } qint16 docNumber; qint16 frequency; }; QDataStream &operator>>( QDataStream &s, Document &l ); QDataStream &operator<<( QDataStream &s, const Document &l ); class Index : public QObject { Q_OBJECT public: Index(); void writeDict( QDataStream& stream ); bool readDict( QDataStream& stream ); bool makeIndex(const QList &docs, EBook * chmFile ); QList query( const QStringList&, const QStringList&, const QStringList&, EBook * chmFile ); QString getCharsSplit() const { return m_charssplit; } QString getCharsPartOfWord() const { return m_charsword; } signals: void indexingProgress( int, const QString& ); public slots: void setLastWinClosed(); private: struct Entry { Entry( int d ) { documents.append( Document( d, 1 ) ); } Entry( QVector l ) : documents( l ) {} QVector documents; }; struct PosEntry { PosEntry( int p ) { positions.append( p ); } QList positions; }; bool parseDocumentToStringlist( EBook * chmFile, const QUrl& filename, QStringList& tokenlist ); void insertInDict( const QString&, int ); QStringList getWildcardTerms( const QString& ); QStringList split( const QString& ); QList setupDummyTerm( const QStringList& ); bool searchForPhrases(const QStringList &phrases, const QStringList &words, const QUrl &filename, EBook * chmFile ); QList< QUrl > docList; QHash dict; QHashminiDict; bool lastWindowClosed; HelperEntityDecoder entityDecoder; // Those characters are splitters (i.e. split the word), but added themselves into dictionary too. // This makes the dictionary MUCH larger, but ensure that for the piece of "window->print" both // search for "print" and "->print" will find it. QString m_charssplit; // Those characters are parts of word - for example, '_' is here, and search for _debug will find only _debug. QString m_charsword; }; }; #endif // EBOOK_SEARCH_INDEX_H kchmviewer-7.5/lib/libebook/PaxHeaders.8614/ebook.h0000644000000000000000000000012412622003403017005 xustar0027 mtime=1447560963.701728 27 atime=1447562193.079735 30 ctime=1447562193.079735287 kchmviewer-7.5/lib/libebook/ebook.h0000644000175000001440000001741412622003403017344 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef INCLUDE_EBOOK_H #define INCLUDE_EBOOK_H #include #include #include //! Stores a single table of content entry class EBookTocEntry { public: //! Content TOC icon indexes for CHM books (epub books contain no icons) enum Icon { IMAGE_NONE = -1, IMAGE_AUTO = -2, MAX_BUILTIN_ICONS = 42 }; //! Entry name QString name; //! Entry URL. QUrl url; //! Associated image number. Used for TOC only; indexes does not have the image. //! If IMAGE_NONE, no icon is associated. Otherwise use getBookIconPixmap() to get associated pixmap icon. Icon iconid; //! Indentation level for this entry. int indent; }; //! Stores a single index entry class EBookIndexEntry { public: //! Entry name QString name; //! Entry URLs. The index entry could have several URLs QList urls; //! Whether this is a 'see also' index type, and its value QString seealso; //! Indentation level for this entry. int indent; }; //! Universal ebook files processor supporting both CHM and EPUB. Abstract. class EBook { public: enum Feature { FEATURE_TOC, // has table of contents FEATURE_INDEX, // has index FEATURE_ENCODING // Could be encoded with different encodings }; //! Default constructor and destructor. EBook(); virtual ~EBook(); /*! * \brief Attempts to load chm or epub file. * \param archiveName filename. * \return EBook object on success, NULL on failure. * * Loads a CHM or epub file. For CHM files it could internally load more than one file, * if files linked to this one are present locally (like MSDN). * \ingroup init */ static EBook * loadFile( const QString& archiveName ); /*! * \brief Closes all the files, and frees the appropriate data. * \ingroup init */ virtual void close() = 0; /*! * \brief Gets the title name of the opened ebook. * \return The name of the opened document, or an empty string if no ebook has been loaded. * \ingroup information */ virtual QString title() const = 0; /*! * \brief Gets the default URL of the e-book which should be opened when the book it first open * * \return The home page name, with a '/' added in front and relative to * the root of the archive filesystem. If no book has been opened, returns "/". * \ingroup information */ virtual QUrl homeUrl() const = 0; /*! * \brief Checks whether the specific feature is present in this file. * \return true if it is available; false otherwise. * \ingroup information */ virtual bool hasFeature( Feature code ) const = 0; /*! * \brief Parses and fills up the Table of Contents (TOC) * \param topics A pointer to the container which will store the parsed results. * Will be cleaned before parsing. * \return true if the tree is present and parsed successfully, false otherwise. * The parser is built to be error-prone, however it still can abort with qFatal() * by really buggy files; please report a bug if the file is opened ok under Windows. * \ingroup fileparsing */ virtual bool getTableOfContents( QList< EBookTocEntry >& toc ) const = 0; /*! * \brief Parses the index table * \param indexes A pointer to the container which will store the parsed results. * Will be cleaned before parsing. * \return true if the tree is present and parsed successfully, false otherwise. * The parser is built to be error-prone, however it still can abort with qFatal() * by really buggy chm file; so far it never happened on indexes. * \ingroup fileparsing */ virtual bool getIndex( QList< EBookIndexEntry >& index ) const = 0; /*! * \brief Retrieves the content associated with the url from the current ebook as QString. * \param str A string where the retreived content should be stored. * \param url An URL in chm file to retreive content from. Must be absolute. * \return true if the content is successfully received; false otherwise. Note content may be an empty string. * * This function retreives the file content (mostly for HTML pages) from the ebook. Because the content * in chm file might not be stored in Unicode, it will be recoded according to current encoding. * Do not use for binary data. * * \sa setCurrentEncoding() currentEncoding() getFileContentAsBinary() * \ingroup dataretrieve */ virtual bool getFileContentAsString( QString& str, const QUrl& url ) const = 0; /*! * \brief Retrieves the content from url in current chm file to QByteArray. * \param data A data array where the retreived content should be stored. * \param url An URL in chm file to retreive content from. Must be absolute. * \return true if the content is successfully received; false otherwise. * * This function retreives the file content from the chm archive opened by load() * function. The content is not encoded. * * \sa getFileContentAsString() * \ingroup dataretrieve */ virtual bool getFileContentAsBinary( QByteArray& data, const QUrl& url ) const = 0; /*! * \brief Obtains the list of all the files (URLs) in current ebook archive. This is used in search * and to dump the e-book content. * \param files An array to store list of URLs present in chm archive. * \return true if the enumeration succeed; false otherwise (I could hardly imagine a reason). * * \ingroup dataretrieve */ virtual bool enumerateFiles( QList& files ) = 0; /*! * \brief Gets the Title of the page referenced by url. * \param url An URL in ebook file to get title from. Must be absolute. * \return The title, or QString::null if the URL cannot be found or not a HTML page. * * \ingroup dataretrieve */ virtual QString getTopicByUrl ( const QUrl& url ) = 0; /*! * \brief Gets the current ebook encoding (set or autodetected) as qtcodec name. Must be implemented, * even if the book doesn't support change of encoding (then it should return a default encoding) * \return The current encoding. * * \ingroup encoding */ virtual QString currentEncoding() const = 0; /*! * \brief Sets the ebook encoding to use for TOC and content * \param encoding An encoding to use. * * \ingroup encoding */ virtual bool setCurrentEncoding ( const char * encoding ) = 0; /*! * \brief Checks if this kind of URL is supported by the ebook format (i.e. could be passed to ebook functions) * \param url The url to check */ virtual bool isSupportedUrl( const QUrl& url ) = 0; // Converts the string to the ebook-specific URL format virtual QUrl pathToUrl( const QString & link ) const = 0; // Extracts the path component from the URL virtual QString urlToPath( const QUrl& link ) const = 0; protected: // Loads the file; returns true if loaded, false otherwise virtual bool load( const QString& archiveName ) = 0; }; #endif // INCLUDE_LIBCHMFILE_H kchmviewer-7.5/lib/libebook/PaxHeaders.8614/helper_entitydecoder.h0000644000000000000000000000012412321077735022126 xustar0027 mtime=1396998109.567818 27 atime=1447562193.090735 30 ctime=1447562193.090735139 kchmviewer-7.5/lib/libebook/helper_entitydecoder.h0000644000175000001440000000271612321077735022464 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef HELPER_ENTITYDECODER_H #define HELPER_ENTITYDECODER_H #include #include // // This helper class decodes the Unicode HTML entities into the Unicode characters // class HelperEntityDecoder { public: // Initialization with the specific decoder HelperEntityDecoder( QTextCodec * encoder = 0 ); // Used when the encoding changes void changeEncoding( QTextCodec * encoder = 0 ); // The decoder function QString decode( const QString& entity ) const; private: // Map to decode HTML entitles like ´ based on current encoding, initialized upon the first use QMap m_entityDecodeMap; }; #endif // HELPER_ENTITYDECODER_H kchmviewer-7.5/lib/libebook/PaxHeaders.8614/helperxmlhandler_epubcontainer.cpp0000644000000000000000000000012412321077735024534 xustar0027 mtime=1396998109.567818 27 atime=1447562193.091735 30 ctime=1447562193.091735125 kchmviewer-7.5/lib/libebook/helperxmlhandler_epubcontainer.cpp0000644000175000001440000000217412321077735025070 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include "helperxmlhandler_epubcontainer.h" bool HelperXmlHandler_EpubContainer::startElement(const QString &, const QString &, const QString &qName, const QXmlAttributes &atts) { if ( qName == "rootfile" ) { int idx = atts.index( "full-path" ); if ( idx == -1 ) return false; contentPath = atts.value( idx ); } return true; } kchmviewer-7.5/lib/libebook/PaxHeaders.8614/helperxmlhandler_epubcontent.h0000644000000000000000000000012412425306251023662 xustar0027 mtime=1414892713.024955 27 atime=1447562193.091735 30 ctime=1447562193.091735125 kchmviewer-7.5/lib/libebook/helperxmlhandler_epubcontent.h0000644000175000001440000000337312425306251024220 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef HELPERXMLHANDLER_EPUBCONTENT_H #define HELPERXMLHANDLER_EPUBCONTENT_H #include #include #include class HelperXmlHandler_EpubContent : public QXmlDefaultHandler { public: HelperXmlHandler_EpubContent(); // Keep the tag-associated metadata QMap< QString, QString > metadata; // Manifest storage, id -> href QMap< QString, QString > manifest; // Spline storage QList< QString > spine; // TOC (NCX) filename QString tocname; private: enum State { STATE_NONE, STATE_IN_METADATA, STATE_IN_MANIFEST, STATE_IN_SPINE }; bool startElement ( const QString & namespaceURI, const QString & localName, const QString & qName, const QXmlAttributes & atts ); bool characters(const QString &ch); bool endElement(const QString &namespaceURI, const QString &localName, const QString &qName); // Tracking State m_state; QString m_tagname; }; #endif // HELPERXMLHANDLER_EPUBCONTENT_H kchmviewer-7.5/lib/libebook/PaxHeaders.8614/helperxmlhandler_epubcontainer.h0000644000000000000000000000012412321077735024201 xustar0027 mtime=1396998109.567818 27 atime=1447562193.091735 30 ctime=1447562193.091735125 kchmviewer-7.5/lib/libebook/helperxmlhandler_epubcontainer.h0000644000175000001440000000234212321077735024532 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef HELPERXMLHANDLER_EPUBCONTAINER_H #define HELPERXMLHANDLER_EPUBCONTAINER_H #include class HelperXmlHandler_EpubContainer : public QXmlDefaultHandler { public: // Overridden members bool startElement ( const QString & namespaceURI, const QString & localName, const QString & qName, const QXmlAttributes & atts ); // The content path QString contentPath; }; #endif // HELPERXMLHANDLER_EPUBCONTAINER_H kchmviewer-7.5/lib/libebook/PaxHeaders.8614/helperxmlhandler_epubtoc.h0000644000000000000000000000012312321077735023003 xustar0027 mtime=1396998109.567818 27 atime=1447562193.092735 29 ctime=1447562193.09273511 kchmviewer-7.5/lib/libebook/helperxmlhandler_epubtoc.h0000644000175000001440000000307412321077735023340 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef HELPERXMLHANDLER_EPUBTOC_H #define HELPERXMLHANDLER_EPUBTOC_H #include #include "ebook_epub.h" class HelperXmlHandler_EpubTOC : public QXmlDefaultHandler { public: HelperXmlHandler_EpubTOC( EBook_EPUB * epub ); QList< EBookTocEntry > entries; private: // Overridden members bool startElement ( const QString & namespaceURI, const QString & localName, const QString & qName, const QXmlAttributes & atts ); bool characters(const QString &ch); bool endElement(const QString &namespaceURI, const QString &localName, const QString &qName); void checkNewTocEntry(); bool m_inNavMap; bool m_inText; unsigned int m_indent; QString m_lastId; QString m_lastTitle; EBook_EPUB * m_epub; }; #endif // HELPERXMLHANDLER_EPUBTOC_H kchmviewer-7.5/lib/libebook/PaxHeaders.8614/helper_entitydecoder.cpp0000644000000000000000000000012312446223156022456 xustar0026 mtime=1419322990.47456 27 atime=1447562193.090735 30 ctime=1447562193.090735139 kchmviewer-7.5/lib/libebook/helper_entitydecoder.cpp0000644000175000001440000003167312446223156023021 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include #include "helper_entitydecoder.h" HelperEntityDecoder::HelperEntityDecoder(QTextCodec *encoder) { changeEncoding( encoder ); } static inline QString encodeWithCodec( QTextCodec *encoder, const QByteArray& str ) { return (encoder ? encoder->toUnicode( str.constData () ) : str); } void HelperEntityDecoder::changeEncoding(QTextCodec *encoder) { // Set up m_entityDecodeMap characters according to current textCodec m_entityDecodeMap.clear(); m_entityDecodeMap["AElig"] = encodeWithCodec( encoder, "\306"); // capital AE diphthong (ligature) m_entityDecodeMap["Aacute"] = encodeWithCodec( encoder, "\301"); // capital A, acute accent m_entityDecodeMap["Acirc"] = encodeWithCodec( encoder, "\302"); // capital A, circumflex accent m_entityDecodeMap["Agrave"] = encodeWithCodec( encoder, "\300"); // capital A, grave accent m_entityDecodeMap["Aring"] = encodeWithCodec( encoder, "\305"); // capital A, ring m_entityDecodeMap["Atilde"] = encodeWithCodec( encoder, "\303"); // capital A, tilde m_entityDecodeMap["Auml"] = encodeWithCodec( encoder, "\304"); // capital A, dieresis or umlaut mark m_entityDecodeMap["Ccedil"] = encodeWithCodec( encoder, "\307"); // capital C, cedilla m_entityDecodeMap["Dstrok"] = encodeWithCodec( encoder, "\320"); // whatever m_entityDecodeMap["ETH"] = encodeWithCodec( encoder, "\320"); // capital Eth, Icelandic m_entityDecodeMap["Eacute"] = encodeWithCodec( encoder, "\311"); // capital E, acute accent m_entityDecodeMap["Ecirc"] = encodeWithCodec( encoder, "\312"); // capital E, circumflex accent m_entityDecodeMap["Egrave"] = encodeWithCodec( encoder, "\310"); // capital E, grave accent m_entityDecodeMap["Euml"] = encodeWithCodec( encoder, "\313"); // capital E, dieresis or umlaut mark m_entityDecodeMap["Iacute"] = encodeWithCodec( encoder, "\315"); // capital I, acute accent m_entityDecodeMap["Icirc"] = encodeWithCodec( encoder, "\316"); // capital I, circumflex accent m_entityDecodeMap["Igrave"] = encodeWithCodec( encoder, "\314"); // capital I, grave accent m_entityDecodeMap["Iuml"] = encodeWithCodec( encoder, "\317"); // capital I, dieresis or umlaut mark m_entityDecodeMap["Ntilde"] = encodeWithCodec( encoder, "\321"); // capital N, tilde m_entityDecodeMap["Oacute"] = encodeWithCodec( encoder, "\323"); // capital O, acute accent m_entityDecodeMap["Ocirc"] = encodeWithCodec( encoder, "\324"); // capital O, circumflex accent m_entityDecodeMap["Ograve"] = encodeWithCodec( encoder, "\322"); // capital O, grave accent m_entityDecodeMap["Oslash"] = encodeWithCodec( encoder, "\330"); // capital O, slash m_entityDecodeMap["Otilde"] = encodeWithCodec( encoder, "\325"); // capital O, tilde m_entityDecodeMap["Ouml"] = encodeWithCodec( encoder, "\326"); // capital O, dieresis or umlaut mark m_entityDecodeMap["THORN"] = encodeWithCodec( encoder, "\336"); // capital THORN, Icelandic m_entityDecodeMap["Uacute"] = encodeWithCodec( encoder, "\332"); // capital U, acute accent m_entityDecodeMap["Ucirc"] = encodeWithCodec( encoder, "\333"); // capital U, circumflex accent m_entityDecodeMap["Ugrave"] = encodeWithCodec( encoder, "\331"); // capital U, grave accent m_entityDecodeMap["Uuml"] = encodeWithCodec( encoder, "\334"); // capital U, dieresis or umlaut mark m_entityDecodeMap["Yacute"] = encodeWithCodec( encoder, "\335"); // capital Y, acute accent m_entityDecodeMap["OElig"] = encodeWithCodec( encoder, "\338"); // capital Y, acute accent m_entityDecodeMap["oelig"] = encodeWithCodec( encoder, "\339"); // capital Y, acute accent m_entityDecodeMap["aacute"] = encodeWithCodec( encoder, "\341"); // small a, acute accent m_entityDecodeMap["acirc"] = encodeWithCodec( encoder, "\342"); // small a, circumflex accent m_entityDecodeMap["aelig"] = encodeWithCodec( encoder, "\346"); // small ae diphthong (ligature) m_entityDecodeMap["agrave"] = encodeWithCodec( encoder, "\340"); // small a, grave accent m_entityDecodeMap["aring"] = encodeWithCodec( encoder, "\345"); // small a, ring m_entityDecodeMap["atilde"] = encodeWithCodec( encoder, "\343"); // small a, tilde m_entityDecodeMap["auml"] = encodeWithCodec( encoder, "\344"); // small a, dieresis or umlaut mark m_entityDecodeMap["ccedil"] = encodeWithCodec( encoder, "\347"); // small c, cedilla m_entityDecodeMap["eacute"] = encodeWithCodec( encoder, "\351"); // small e, acute accent m_entityDecodeMap["ecirc"] = encodeWithCodec( encoder, "\352"); // small e, circumflex accent m_entityDecodeMap["Scaron"] = encodeWithCodec( encoder, "\352"); // small e, circumflex accent m_entityDecodeMap["egrave"] = encodeWithCodec( encoder, "\350"); // small e, grave accent m_entityDecodeMap["eth"] = encodeWithCodec( encoder, "\360"); // small eth, Icelandic m_entityDecodeMap["euml"] = encodeWithCodec( encoder, "\353"); // small e, dieresis or umlaut mark m_entityDecodeMap["iacute"] = encodeWithCodec( encoder, "\355"); // small i, acute accent m_entityDecodeMap["icirc"] = encodeWithCodec( encoder, "\356"); // small i, circumflex accent m_entityDecodeMap["igrave"] = encodeWithCodec( encoder, "\354"); // small i, grave accent m_entityDecodeMap["iuml"] = encodeWithCodec( encoder, "\357"); // small i, dieresis or umlaut mark m_entityDecodeMap["ntilde"] = encodeWithCodec( encoder, "\361"); // small n, tilde m_entityDecodeMap["oacute"] = encodeWithCodec( encoder, "\363"); // small o, acute accent m_entityDecodeMap["ocirc"] = encodeWithCodec( encoder, "\364"); // small o, circumflex accent m_entityDecodeMap["ograve"] = encodeWithCodec( encoder, "\362"); // small o, grave accent m_entityDecodeMap["oslash"] = encodeWithCodec( encoder, "\370"); // small o, slash m_entityDecodeMap["otilde"] = encodeWithCodec( encoder, "\365"); // small o, tilde m_entityDecodeMap["ouml"] = encodeWithCodec( encoder, "\366"); // small o, dieresis or umlaut mark m_entityDecodeMap["szlig"] = encodeWithCodec( encoder, "\337"); // small sharp s, German (sz ligature) m_entityDecodeMap["thorn"] = encodeWithCodec( encoder, "\376"); // small thorn, Icelandic m_entityDecodeMap["uacute"] = encodeWithCodec( encoder, "\372"); // small u, acute accent m_entityDecodeMap["ucirc"] = encodeWithCodec( encoder, "\373"); // small u, circumflex accent m_entityDecodeMap["ugrave"] = encodeWithCodec( encoder, "\371"); // small u, grave accent m_entityDecodeMap["uuml"] = encodeWithCodec( encoder, "\374"); // small u, dieresis or umlaut mark m_entityDecodeMap["yacute"] = encodeWithCodec( encoder, "\375"); // small y, acute accent m_entityDecodeMap["yuml"] = encodeWithCodec( encoder, "\377"); // small y, dieresis or umlaut mark m_entityDecodeMap["iexcl"] = encodeWithCodec( encoder, "\241"); m_entityDecodeMap["cent"] = encodeWithCodec( encoder, "\242"); m_entityDecodeMap["pound"] = encodeWithCodec( encoder, "\243"); m_entityDecodeMap["curren"] = encodeWithCodec( encoder, "\244"); m_entityDecodeMap["yen"] = encodeWithCodec( encoder, "\245"); m_entityDecodeMap["brvbar"] = encodeWithCodec( encoder, "\246"); m_entityDecodeMap["sect"] = encodeWithCodec( encoder, "\247"); m_entityDecodeMap["uml"] = encodeWithCodec( encoder, "\250"); m_entityDecodeMap["ordf"] = encodeWithCodec( encoder, "\252"); m_entityDecodeMap["laquo"] = encodeWithCodec( encoder, "\253"); m_entityDecodeMap["not"] = encodeWithCodec( encoder, "\254"); m_entityDecodeMap["shy"] = encodeWithCodec( encoder, "\255"); m_entityDecodeMap["macr"] = encodeWithCodec( encoder, "\257"); m_entityDecodeMap["deg"] = encodeWithCodec( encoder, "\260"); m_entityDecodeMap["plusmn"] = encodeWithCodec( encoder, "\261"); m_entityDecodeMap["sup1"] = encodeWithCodec( encoder, "\271"); m_entityDecodeMap["sup2"] = encodeWithCodec( encoder, "\262"); m_entityDecodeMap["sup3"] = encodeWithCodec( encoder, "\263"); m_entityDecodeMap["acute"] = encodeWithCodec( encoder, "\264"); m_entityDecodeMap["micro"] = encodeWithCodec( encoder, "\265"); m_entityDecodeMap["para"] = encodeWithCodec( encoder, "\266"); m_entityDecodeMap["middot"] = encodeWithCodec( encoder, "\267"); m_entityDecodeMap["cedil"] = encodeWithCodec( encoder, "\270"); m_entityDecodeMap["ordm"] = encodeWithCodec( encoder, "\272"); m_entityDecodeMap["raquo"] = encodeWithCodec( encoder, "\273"); m_entityDecodeMap["frac14"] = encodeWithCodec( encoder, "\274"); m_entityDecodeMap["frac12"] = encodeWithCodec( encoder, "\275"); m_entityDecodeMap["frac34"] = encodeWithCodec( encoder, "\276"); m_entityDecodeMap["iquest"] = encodeWithCodec( encoder, "\277"); m_entityDecodeMap["times"] = encodeWithCodec( encoder, "\327"); m_entityDecodeMap["divide"] = encodeWithCodec( encoder, "\367"); m_entityDecodeMap["copy"] = encodeWithCodec( encoder, "\251"); // copyright sign m_entityDecodeMap["reg"] = encodeWithCodec( encoder, "\256"); // registered sign m_entityDecodeMap["nbsp"] = encodeWithCodec( encoder, "\240"); // non breaking space m_entityDecodeMap["fnof"] = QChar((unsigned short) 402); m_entityDecodeMap["Delta"] = QChar((unsigned short) 916); m_entityDecodeMap["Pi"] = QChar((unsigned short) 928); m_entityDecodeMap["Sigma"] = QChar((unsigned short) 931); m_entityDecodeMap["beta"] = QChar((unsigned short) 946); m_entityDecodeMap["gamma"] = QChar((unsigned short) 947); m_entityDecodeMap["delta"] = QChar((unsigned short) 948); m_entityDecodeMap["eta"] = QChar((unsigned short) 951); m_entityDecodeMap["theta"] = QChar((unsigned short) 952); m_entityDecodeMap["lambda"] = QChar((unsigned short) 955); m_entityDecodeMap["mu"] = QChar((unsigned short) 956); m_entityDecodeMap["nu"] = QChar((unsigned short) 957); m_entityDecodeMap["pi"] = QChar((unsigned short) 960); m_entityDecodeMap["rho"] = QChar((unsigned short) 961); m_entityDecodeMap["lsquo"] = QChar((unsigned short) 8216); m_entityDecodeMap["rsquo"] = QChar((unsigned short) 8217); m_entityDecodeMap["rdquo"] = QChar((unsigned short) 8221); m_entityDecodeMap["bdquo"] = QChar((unsigned short) 8222); m_entityDecodeMap["trade"] = QChar((unsigned short) 8482); m_entityDecodeMap["ldquo"] = QChar((unsigned short) 8220); m_entityDecodeMap["ndash"] = QChar((unsigned short) 8211); m_entityDecodeMap["mdash"] = QChar((unsigned short) 8212); m_entityDecodeMap["bull"] = QChar((unsigned short) 8226); m_entityDecodeMap["hellip"] = QChar((unsigned short) 8230); m_entityDecodeMap["emsp"] = QChar((unsigned short) 8195); m_entityDecodeMap["rarr"] = QChar((unsigned short) 8594); m_entityDecodeMap["rArr"] = QChar((unsigned short) 8658); m_entityDecodeMap["crarr"] = QChar((unsigned short) 8629); m_entityDecodeMap["le"] = QChar((unsigned short) 8804); m_entityDecodeMap["ge"] = QChar((unsigned short) 8805); m_entityDecodeMap["lte"] = QChar((unsigned short) 8804); // wrong, but used somewhere m_entityDecodeMap["gte"] = QChar((unsigned short) 8805); // wrong, but used somewhere m_entityDecodeMap["dagger"] = QChar((unsigned short) 8224); m_entityDecodeMap["Dagger"] = QChar((unsigned short) 8225); m_entityDecodeMap["euro"] = QChar((unsigned short) 8364); m_entityDecodeMap["asymp"] = QChar((unsigned short) 8776); m_entityDecodeMap["isin"] = QChar((unsigned short) 8712); m_entityDecodeMap["notin"] = QChar((unsigned short) 8713); m_entityDecodeMap["prod"] = QChar((unsigned short) 8719); m_entityDecodeMap["ne"] = QChar((unsigned short) 8800); m_entityDecodeMap["amp"] = "&"; // ampersand m_entityDecodeMap["gt"] = ">"; // greater than m_entityDecodeMap["lt"] = "<"; // less than m_entityDecodeMap["quot"] = "\""; // double quote m_entityDecodeMap["apos"] = "'"; // single quote m_entityDecodeMap["frasl"] = "/"; m_entityDecodeMap["minus"] = "-"; m_entityDecodeMap["oplus"] = "+"; m_entityDecodeMap["Prime"] = "\""; } QString HelperEntityDecoder::decode( const QString &entity ) const { // If entity is an ASCII code like 〽 - just decode it if ( entity.isEmpty() ) { return ""; } else if ( entity[0] == '#' ) { bool valid; unsigned int ascode = entity.mid(1).toUInt( &valid ); if ( !valid ) { qWarning ( "HelperEntityDecoder::decode: could not decode HTML entity '%s'", qPrintable( entity ) ); return QString::null; } return (QString) (QChar( ascode )); } else { QMap::const_iterator it = m_entityDecodeMap.find( entity ); if ( it == m_entityDecodeMap.end() ) { qWarning ("HelperEntityDecoder::decode: could not decode HTML entity '%s'", qPrintable( entity )); return ""; } return *it; } } kchmviewer-7.5/lib/libebook/PaxHeaders.8614/ebook_chm.h0000644000000000000000000000012412616333137017651 xustar0027 mtime=1446622815.937622 27 atime=1447562193.080735 30 ctime=1447562193.080735274 kchmviewer-7.5/lib/libebook/ebook_chm.h0000644000175000001440000002635212616333137020211 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef EBOOK_CHM_H #define EBOOK_CHM_H #include #include // Enable Unicode use in libchm #if defined (WIN32) #define PPC_BSTR #endif #include #include "ebook.h" #include "helper_entitydecoder.h" class EBook_CHM : public EBook { public: EBook_CHM(); ~EBook_CHM(); /*! * \brief Attempts to load chm file. * \param archiveName filename. * \return EBook object on success, NULL on failure. * * Loads a CHM file. For CHM files it could internally load more than one file, * if files linked to this one are present locally (like MSDN). * \ingroup init */ bool load( const QString& archiveName ); /*! * \brief Closes all the files, and frees the appropriate data. * \ingroup init */ virtual void close(); /*! * \brief Gets the title name of the opened ebook. * \return The name of the opened document, or an empty string if no ebook has been loaded. * \ingroup information */ virtual QString title() const; /*! * \brief Gets the default URL of the e-book which should be opened when the book it first open * * \return The home page name, with a '/' added in front and relative to * the root of the archive filesystem. If no book has been opened, returns "/". * \ingroup information */ virtual QUrl homeUrl() const; /*! * \brief Checks whether the specific feature is present in this file. * \return true if it is available; false otherwise. * \ingroup information */ virtual bool hasFeature( Feature code ) const; /*! * \brief Parses and fills up the Table of Contents (TOC) * \param topics A pointer to the container which will store the parsed results. * Will be cleaned before parsing. * \return true if the tree is present and parsed successfully, false otherwise. * The parser is built to be error-prone, however it still can abort with qFatal() * by really buggy files; please report a bug if the file is opened ok under Windows. * \ingroup fileparsing */ virtual bool getTableOfContents( QList< EBookTocEntry >& toc ) const; /*! * \brief Parses the index table * \param indexes A pointer to the container which will store the parsed results. * Will be cleaned before parsing. * \return true if the tree is present and parsed successfully, false otherwise. * The parser is built to be error-prone, however it still can abort with qFatal() * by really buggy chm file; so far it never happened on indexes. * \ingroup fileparsing */ virtual bool getIndex( QList< EBookIndexEntry >& index ) const; /*! * \brief Retrieves the content associated with the url from the current ebook as QString. * \param str A string where the retreived content should be stored. * \param url An URL in chm file to retreive content from. Must be absolute. * \return true if the content is successfully received; false otherwise. Note content may be an empty string. * * This function retreives the file content (mostly for HTML pages) from the ebook. Because the content * in chm file might not be stored in Unicode, it will be recoded according to current encoding. * Do not use for binary data. * * \sa setCurrentEncoding() currentEncoding() getFileContentAsBinary() * \ingroup dataretrieve */ virtual bool getFileContentAsString( QString& str, const QUrl& url ) const; /*! * \brief Retrieves the content from url in current chm file to QByteArray. * \param data A data array where the retreived content should be stored. * \param url An URL in chm file to retreive content from. Must be absolute. * \return true if the content is successfully received; false otherwise. * * This function retreives the file content from the chm archive opened by load() * function. The content is not encoded. * * \sa getFileContentAsString() * \ingroup dataretrieve */ virtual bool getFileContentAsBinary( QByteArray& data, const QUrl& url ) const; /*! * \brief Retrieves the content size. * \param url An URL in ebook file to retreive content from. Must be absolute. * \return the size; -1 in case of error. * * \ingroup dataretrieve */ virtual int getContentSize( const QString& url ); /*! * \brief Obtains the list of all the files (URLs) in current ebook archive. This is used in search * and to dump the e-book content. * \param files An array to store list of URLs (file names) present in chm archive. * \return true if the enumeration succeed; false otherwise (I could hardly imagine a reason). * * \ingroup dataretrieve */ virtual bool enumerateFiles( QList& files ); /*! * \brief Gets the Title of the page referenced by url. * \param url An URL in ebook file to get title from. Must be absolute. * \return The title, or QString::null if the URL cannot be found or not a HTML page. * * \ingroup dataretrieve */ virtual QString getTopicByUrl ( const QUrl& url ); /*! * \brief Gets the current ebook encoding (set or autodetected) as qtcodec * \return The current encoding. * * \ingroup encoding */ virtual QString currentEncoding() const; /*! * \brief Sets the ebook encoding to use for TOC and content * \param encoding An encoding to use. * * \ingroup encoding */ virtual bool setCurrentEncoding ( const char * encoding ); /*! * \brief Checks if this kind of URL is supported by the ebook format (i.e. could be passed to ebook functions) * \param url The url to check */ virtual bool isSupportedUrl( const QUrl& url ); // Converts the string to the ebook-specific URL format QUrl pathToUrl( const QString & link ) const; // Extracts the path component from the URL QString urlToPath( const QUrl& link ) const; private: // Used in local parser class ParsedEntry { public: ParsedEntry(); QString name; QList urls; int iconid; int indent; QString seealso; }; //! Looks up fileName in the archive. bool hasFile( const QString& fileName ) const; //! Looks up fileName in the archive. bool ResolveObject( const QString& fileName, chmUnitInfo *ui ) const; //! Retrieves an uncompressed chunk of a file in the .chm. size_t RetrieveObject( const chmUnitInfo *ui, unsigned char *buffer, LONGUINT64 fileOffset, LONGINT64 bufferSize) const; //! Encode the string with the currently selected text codec, if possible. Or return as-is, if not. inline QString encodeWithCurrentCodec( const QByteArray& str) const { return (m_textCodec ? m_textCodec->toUnicode( str.constData () ) : str); } //! Encode the string with the currently selected text codec, if possible. Or return as-is, if not. inline QString encodeWithCurrentCodec (const char * str) const { return (m_textCodec ? m_textCodec->toUnicode( str ) : (QString) str); } //! Encode the string from internal files with the currently selected text codec, if possible. //! Or return as-is, if not. inline QString encodeInternalWithCurrentCodec (const QString& str) const { return (m_textCodecForSpecialFiles ? m_textCodecForSpecialFiles->toUnicode( qPrintable(str) ) : str); } //! Encode the string from internal files with the currently selected text codec, if possible. //! Or return as-is, if not. inline QString encodeInternalWithCurrentCodec (const char * str) const { return (m_textCodecForSpecialFiles ? m_textCodecForSpecialFiles->toUnicode (str) : (QString) str); } //! Helper. Translates from Win32 encodings to generic wxWidgets ones. const char * GetFontEncFromCharSet (const QString& font) const; //! Parse the HHC or HHS file, and fill the context (asIndex is false) or index (asIndex is true) array. bool parseFileAndFillArray (const QString& file, QList< ParsedEntry >& data, bool asIndex ) const; bool getBinaryContent( QByteArray &data, const QString &url ) const; bool getTextContent( QString& str, const QString& url, bool internal_encoding = false ) const; /*! * Parse binary TOC */ bool parseBinaryTOC(QList &data ) const; //! btree string parser QString getBtreeString( const QByteArray& btidx, unsigned long * offset, unsigned short * spaceLeft ) const; /*! * Recursively parse and fill binary TOC */ bool RecurseLoadBTOC(const QByteArray& tocidx, const QByteArray& topics, const QByteArray& urltbl, const QByteArray& urlstr, const QByteArray& strings, int offset, QList &data, int level ) const; /*! * Helper procedure in TOC parsing, decodes the string between the quotes (first or last) with decoding HTML * entities like í */ int findStringInQuotes (const QString& tag, int offset, QString& value, bool firstquote, bool decodeentities ) const; bool getInfoFromWindows(); bool getInfoFromSystem(); bool changeFileEncoding(const QString &qtencoding); bool guessTextEncoding(); void fillTopicsUrlMap(); bool hasOption(const QString &name) const; // Members //! Pointer to the chmlib structure chmFile * m_chmFile; //! Opened file name QString m_filename; //! Home url, got from CHM file QByteArray m_home; //! Context tree filename. Got from CHM file QByteArray m_topicsFile; //! Index filename. Got from CHM file QByteArray m_indexFile; //! Chm Title. Got from CHM file QByteArray m_title; // Localization stuff //! LCID from CHM file, used in encoding detection short m_detectedLCID; //! font charset from CHM file, used in encoding detection QString m_font; //! Chosen text codec QTextCodec * m_textCodec; QTextCodec * m_textCodecForSpecialFiles; //! Current encoding QString m_currentEncoding; //! TRUE if /#TOPICS, /#STRINGS, /#URLTBL and /#URLSTR are resolved, and the members below are valid bool m_lookupTablesValid; //! pointer to /#TOPICS chmUnitInfo m_chmTOPICS; //! pointer to /#STRINGS chmUnitInfo m_chmSTRINGS; //! pointer to /#URLTBL chmUnitInfo m_chmURLTBL; //! pointer to /#URLSTR chmUnitInfo m_chmURLSTR; //! Indicates whether TOC, either binary or text, is available. bool m_tocAvailable; //! Indicates whether index, either binary or text, is available. bool m_indexAvailable; //! Map url->topic QMap< QUrl, QString > m_url2topics; //! KCHMViewer debug options from environment QString m_envOptions; //! HTML entity decoder HelperEntityDecoder m_htmlEntityDecoder; }; #endif // EBOOK_CHM_H kchmviewer-7.5/lib/libebook/PaxHeaders.8614/ebook_epub.h0000644000000000000000000000012312321077735020036 xustar0027 mtime=1396998109.567818 27 atime=1447562193.081735 29 ctime=1447562193.08173526 kchmviewer-7.5/lib/libebook/ebook_epub.h0000644000175000001440000001557312321077735020402 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef EBOOK_EPUB_H #define EBOOK_EPUB_H #include #include #include #include #include "ebook.h" #include "zip.h" class QXmlDefaultHandler; class EBook_EPUB : public EBook { public: EBook_EPUB(); virtual ~EBook_EPUB(); /*! * \brief Attempts to load epub file. * \param archiveName filename. * \return EBook object on success, NULL on failure. * * Loads a epub file. * \ingroup init */ bool load( const QString& archiveName ); /*! * \brief Closes all the files, and frees the appropriate data. * \ingroup init */ virtual void close(); /*! * \brief Gets the title name of the opened ebook. * \return The name of the opened document, or an empty string if no ebook has been loaded. * \ingroup information */ virtual QString title() const; /*! * \brief Gets the default URL of the e-book which should be opened when the book it first open * * \return The home page name, with a '/' added in front and relative to * the root of the archive filesystem. If no book has been opened, returns "/". * \ingroup information */ virtual QUrl homeUrl() const; /*! * \brief Checks whether the specific feature is present in this file. * \return true if it is available; false otherwise. * \ingroup information */ virtual bool hasFeature( Feature code ) const; /*! * \brief Parses and fills up the Table of Contents (TOC) * \param topics A pointer to the container which will store the parsed results. * Will be cleaned before parsing. * \return true if the tree is present and parsed successfully, false otherwise. * The parser is built to be error-prone, however it still can abort with qFatal() * by really buggy files; please report a bug if the file is opened ok under Windows. * \ingroup fileparsing */ virtual bool getTableOfContents( QList< EBookTocEntry >& toc ) const; /*! * \brief Parses the index table * \param indexes A pointer to the container which will store the parsed results. * Will be cleaned before parsing. * \return true if the tree is present and parsed successfully, false otherwise. * The parser is built to be error-prone, however it still can abort with qFatal() * by really buggy chm file; so far it never happened on indexes. * \ingroup fileparsing */ virtual bool getIndex( QList< EBookIndexEntry >& index ) const; /*! * \brief Retrieves the content associated with the url from the current ebook as QString. * \param str A string where the retreived content should be stored. * \param url An URL in chm file to retreive content from. Must be absolute. * \return true if the content is successfully received; false otherwise. Note content may be an empty string. * * This function retreives the file content (mostly for HTML pages) from the ebook. Because the content * in chm file might not be stored in Unicode, it will be recoded according to current encoding. * Do not use for binary data. * * \sa setCurrentEncoding() currentEncoding() getFileContentAsBinary() * \ingroup dataretrieve */ virtual bool getFileContentAsString( QString& str, const QUrl& url ) const; /*! * \brief Retrieves the content from url in current chm file to QByteArray. * \param data A data array where the retreived content should be stored. * \param url An URL in chm file to retreive content from. Must be absolute. * \return true if the content is successfully received; false otherwise. * * This function retreives the file content from the chm archive opened by load() * function. The content is not encoded. * * \sa getFileContentAsString() * \ingroup dataretrieve */ virtual bool getFileContentAsBinary( QByteArray& data, const QUrl& url ) const; /*! * \brief Obtains the list of all the files (URLs) in current ebook archive. This is used in search * and to dump the e-book content. * \param files An array to store list of URLs (file names) present in chm archive. * \return true if the enumeration succeed; false otherwise (I could hardly imagine a reason). * * \ingroup dataretrieve */ virtual bool enumerateFiles( QList& files ); /*! * \brief Gets the Title of the page referenced by url. * \param url An URL in ebook file to get title from. Must be absolute. * \return The title, or QString::null if the URL cannot be found or not a HTML page. * * \ingroup dataretrieve */ virtual QString getTopicByUrl ( const QUrl& url ); /*! * \brief Gets the current ebook encoding (set or autodetected) as qtcodec * \return The current encoding. * * \ingroup encoding */ virtual QString currentEncoding() const; /*! * \brief Sets the ebook encoding to use for TOC and content * \param encoding An encoding to use. * * \ingroup encoding */ virtual bool setCurrentEncoding ( const char * encoding ); /*! * \brief Checks if this kind of URL is supported by the ebook format (i.e. could be passed to ebook functions) * \param url The url to check */ virtual bool isSupportedUrl( const QUrl& url ); // Converts the string to the ebook-specific URL format QUrl pathToUrl( const QString & link ) const; // Extracts the path component from the URL QString urlToPath( const QUrl& link ) const; private: // Parses the XML file using a specified parser bool parseXML( const QString& uri, QXmlDefaultHandler * reader ); // Parses the book description file. Fills up the ebook info bool parseBookinfo(); // Get file content from path bool getFileAsString( QString& str, const QString& path ) const; bool getFileAsBinary( QByteArray& data, const QString& path ) const; // ZIP archive fd and structs QFile m_epubFile; struct zip * m_zipFile; // Ebook info QString m_title; QString m_documentRoot; // List of files in the ebook QList m_ebookManifest; // Table of contents QList< EBookTocEntry > m_tocEntries; // Map of URL-Title QMap< QUrl, QString> m_urlTitleMap; }; #endif // EBOOK_EPUB_H kchmviewer-7.5/lib/libebook/PaxHeaders.8614/ebook_chm_encoding.cpp0000644000000000000000000000012412321077735022054 xustar0027 mtime=1396998109.567818 27 atime=1447562193.080735 30 ctime=1447562193.080735274 kchmviewer-7.5/lib/libebook/ebook_chm_encoding.cpp0000644000175000001440000001076412321077735022414 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include "ebook_chm_encoding.h" typedef struct { const char * qtcodec; const short * lcids; } EbookChmTextEncodingEntry; // Do not try to embed those in the text_encoding_table, it does not work - at least with gcc. static short lcid_arabic[] = { 0x1401, 0x3C01, 0x0C01, 0x0801, 0x2C01, 0x3401, 0x3001, 0x1001, 0x1801, 0x2001, 0x4001, 0x0401, 0x2801, 0x1C01, 0x3801, 0x2401, 0x0429, 0x0420, 0, }; static short lcid_baltic[] = { 0x0425, 0x0426, 0x0427, 0 }; static short lcid_centralEuropean[] = { 0x041C, 0x041A, 0x0405, 0x040E, 0x0415, 0x0418, 0x081A, 0x041B, 0x0424, 0 }; static short lcid_ChineseSimplifiedGB18030[] = { 0x0804, 0 }; static short lcid_ChineseSimplifiedGBK[] = { 0x0804, 0 }; static short lcid_ChineseSimplifiedGB2313[] = { 0x1004, 0 }; static short lcid_ChineseTraditionalBig5[] = { 0x0404, 0x1404, 0 }; static short lcid_ChineseTraditionalBigHKSCS[] = { 0x0C04, 0 }; static short lcid_CyrillicCP1251[] = { 0x082C, 0x0423, 0x0402, 0x042F, 0x0419, 0x0C1A, 0x0444, 0x0422, 0x0843, 0 }; static short lcid_CyrillicKOI8R[] = { 0x7001, // artifical LCID 0 }; static short lcid_Greek[] = { 0x0408, 0 }; static short lcid_Hebrew[] = { 0x040D, 0 }; static short lcid_Japanese_eucJP[] = { 0x0411, 0 }; static short lcid_Japanese_JIS7[] = { 0x0411, 0 }; static short lcid_Japanese_ShiftJIS[] = { 0x0411, 0 }; static short lcid_Korean_eucKR[] = { 0x0412, 0 }; static short lcid_TamilTSCII[] = { 0x0449, 0 }; static short lcid_ThaiTIS[] = { 0x041E, 0 }; static short lcid_UkrainianKOI[] = { 0x7006, 0 }; static short lcid_Turkish[] = { 0x042C, 0x041F, 0x0443, 0 }; static short lcid_Vietnamese[] = { 0x042A, 0 }; static short lcid_UnicodeUTF8[] = { 0x7004, // artifical LCID 0 }; static short lcid_UnicodeUTF16[] = { 0x7005, // artifical LCID 0 }; static short lcid_Western[] = { 0x0436, 0x042D, 0x0403, 0x0406, 0x0813, 0x0413, 0x0C09, 0x2809, 0x1009, 0x2409, 0x1809, 0x2009, 0x1409, 0x3409, 0x1C09, 0x2C09, 0x0809, 0x0409, 0x0438, 0x040B, 0x080C, 0x0C0C, 0x040C, 0x140C, 0x100C, 0x0C07, 0x0407, 0x1407, 0x1007, 0x0807, 0x040F, 0x0421, 0x0410, 0x0810, 0x083E, 0x043E, 0x0414, 0x0814, 0x0416, 0x0816, 0x0432, 0x2C0A, 0x400A, 0x340A, 0x240A, 0x140A, 0x1C0A, 0x300A, 0x440A, 0x100A, 0x480A, 0x080A, 0x4C0A, 0x180A, 0x3C0A, 0x280A, 0x500A, 0x0C0A, 0x380A, 0x200A, 0x0441, 0x081D, 0x041D, 0x0434, 0x0435, 0x042B, 0x042C, 0x0439, 0x043A, 0x044E, 0x044F, 0x081A, 0x0443, 0 }; static const EbookChmTextEncodingEntry text_encoding_table [] = { { "CP1256", lcid_arabic }, { "CP1257", lcid_baltic }, { "CP1250", lcid_centralEuropean }, { "GB18030", lcid_ChineseSimplifiedGB18030 }, { "GBK", lcid_ChineseSimplifiedGBK }, { "GB2313", lcid_ChineseSimplifiedGB2313 }, { "Big5", lcid_ChineseTraditionalBig5 }, { "Big5-HKSCS", lcid_ChineseTraditionalBigHKSCS }, { "CP1251", lcid_CyrillicCP1251 }, { "KOI8-R", lcid_CyrillicKOI8R }, { "CP1253", lcid_Greek }, { "CP1255", lcid_Hebrew }, { "Shift-JIS", lcid_Japanese_ShiftJIS }, { "eucJP", lcid_Japanese_eucJP }, { "JIS7", lcid_Japanese_JIS7 }, { "eucKR", lcid_Korean_eucKR }, { "TSCII", lcid_TamilTSCII }, { "TIS-620", lcid_ThaiTIS }, { "KOI8-U", lcid_UkrainianKOI }, { "CP1254", lcid_Turkish }, { "CP1258", lcid_Vietnamese }, { "UTF-8", lcid_UnicodeUTF8 }, { "UTF-16", lcid_UnicodeUTF16 }, { "CP1252", lcid_Western }, { 0, 0 } }; QString Ebook_CHM_Encoding::guessByLCID(unsigned short lcid) { for ( const EbookChmTextEncodingEntry * t = text_encoding_table; t->qtcodec; ++t ) { for ( const short * lcids = t->lcids; *lcids; lcids++ ) if ( *lcids == lcid ) return t->qtcodec; } return "UTF-8"; } kchmviewer-7.5/lib/libebook/PaxHeaders.8614/ebook_chm.cpp0000644000000000000000000000012412616333137020204 xustar0027 mtime=1446622815.937622 27 atime=1447562193.079735 30 ctime=1447562193.080735274 kchmviewer-7.5/lib/libebook/ebook_chm.cpp0000644000175000001440000006544612616333137020553 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include #include #include #include "ebook_chm.h" #include "ebook_chm_encoding.h" #include "helper_entitydecoder.h" #include "bitfiddle.h" // Big-enough buffer size for use with various routines. #define BUF_SIZE 4096 #define COMMON_BUF_LEN 1025 #define TOPICS_ENTRY_LEN 16 #define URLTBL_ENTRY_LEN 12 //#define DEBUGPARSER(A) qDebug A #define DEBUGPARSER(A) static const char * URL_SCHEME_CHM = "ms-its"; EBook_CHM::EBook_CHM() { m_envOptions = getenv("KCHMVIEWEROPTS"); m_chmFile = NULL; m_filename = m_font = QString::null; m_textCodec = 0; m_textCodecForSpecialFiles = 0; m_detectedLCID = 0; m_currentEncoding = "UTF-8"; m_htmlEntityDecoder = 0; } EBook_CHM::~EBook_CHM() { close(); } void EBook_CHM::close() { if ( m_chmFile == NULL ) return; chm_close( m_chmFile ); m_chmFile = NULL; m_filename = m_font = QString::null; m_home.clear(); m_topicsFile.clear(); m_indexFile.clear(); m_textCodec = 0; m_textCodecForSpecialFiles = 0; m_detectedLCID = 0; m_currentEncoding = "UTF-8"; } QString EBook_CHM::title() const { return encodeWithCurrentCodec( m_title ); } QUrl EBook_CHM::homeUrl() const { return pathToUrl( m_home ); } bool EBook_CHM::hasFeature(EBook::Feature code) const { switch ( code ) { case FEATURE_TOC: return m_tocAvailable; case FEATURE_INDEX: return m_indexAvailable; case FEATURE_ENCODING: return true; } return false; } bool EBook_CHM::getTableOfContents( QList &toc ) const { if ( parseBinaryTOC( toc ) ) return true; // Parse the plain text TOC QList< ParsedEntry > parsed; if ( !parseFileAndFillArray( m_topicsFile, parsed, false ) ) return false; // Find out the root offset, and reduce the indent level to it // so the toc starts from zero offset. int root_offset = -1; // Fill up the real toc toc.reserve( parsed.size() ); Q_FOREACH( const ParsedEntry& e, parsed ) { if ( root_offset == -1 ) root_offset = e.indent; EBookTocEntry entry; entry.iconid = (EBookTocEntry::Icon) e.iconid; entry.indent = e.indent - root_offset; entry.name = e.name; if ( !e.urls.empty() ) entry.url = e.urls[0]; toc.append( entry ); } return true; } bool EBook_CHM::getIndex(QList &index) const { // Parse the plain text index QList< ParsedEntry > parsed; if ( !parseFileAndFillArray( m_indexFile, parsed, true ) ) return false; // Find out the root offset, and reduce the indent level to it // so the index starts from zero offset. int root_offset = -1; // Fill up the real index index.reserve( parsed.size() ); Q_FOREACH( const ParsedEntry& e, parsed ) { if ( e.urls.empty() ) continue; if ( root_offset == -1 ) root_offset = e.indent; EBookIndexEntry entry; entry.name = e.name; entry.urls = e.urls; entry.indent = e.indent - root_offset; entry.seealso = e.seealso; index.append( entry ); } return true; } bool EBook_CHM::getFileContentAsString( QString &str, const QUrl &url ) const { return getTextContent( str, urlToPath( url ) ); } bool EBook_CHM::getFileContentAsBinary( QByteArray &data, const QUrl &url ) const { return getBinaryContent( data, urlToPath(url) ); } bool EBook_CHM::getBinaryContent( QByteArray &data, const QString &url ) const { chmUnitInfo ui; if( !ResolveObject( url, &ui ) ) return false; data.resize( ui.length ); if ( RetrieveObject( &ui, (unsigned char*) data.data(), 0, ui.length ) ) return true; return false; } bool EBook_CHM::getTextContent( QString& str, const QString& url, bool internal_encoding ) const { QByteArray buf; if ( getBinaryContent( buf, url ) ) { unsigned int length = buf.size(); if ( length > 0 ) { buf.resize( length + 1 ); buf [length] = '\0'; str = internal_encoding ? (QString)( buf.constData() ) : encodeWithCurrentCodec( buf.constData() ); return true; } } return false; } int EBook_CHM::getContentSize(const QString &url) { chmUnitInfo ui; if( !ResolveObject( url, &ui ) ) return -1; return ui.length; } bool EBook_CHM::load(const QString &archiveName) { QString filename; // If the file has a file:// prefix, remove it if ( archiveName.startsWith( "file://" ) ) filename = archiveName.mid( 7 ); // strip it else filename = archiveName; if( m_chmFile ) close(); #if defined (WIN32) // chmlib on Win32 uses BSTR, so we need to alloc/free a string BSTR bstrfilename = SysAllocStringLen( 0, filename.length() ); filename.toWCharArray( bstrfilename ); m_chmFile = chm_open( bstrfilename ); SysFreeString( bstrfilename ); #else m_chmFile = chm_open( QFile::encodeName(filename) ); #endif if ( m_chmFile == NULL ) return false; m_filename = filename; // Reset encoding m_textCodec = 0; m_textCodecForSpecialFiles = 0; m_currentEncoding = "UTF-8"; // Get information from /#WINDOWS and /#SYSTEM files (encoding, title, context file and so) // and guess the encoding getInfoFromWindows(); getInfoFromSystem(); guessTextEncoding(); // Check whether the search tables are present if ( ResolveObject("/#TOPICS", &m_chmTOPICS) && ResolveObject("/#STRINGS", &m_chmSTRINGS) && ResolveObject("/#URLTBL", &m_chmURLTBL) && ResolveObject("/#URLSTR", &m_chmURLSTR) ) { m_lookupTablesValid = true; fillTopicsUrlMap(); } else m_lookupTablesValid = false; // Some CHM files have toc and index files, but do not set the name properly. // Some heuristics here. if ( m_topicsFile.isEmpty() && hasFile( "/toc.hhc" ) ) m_topicsFile = "/toc.hhc"; if ( m_indexFile.isEmpty() && hasFile( "/index.hhk" ) ) m_indexFile = "/index.hhk"; if ( !m_topicsFile.isEmpty() || ( m_lookupTablesValid && hasFile( "/#TOCIDX" ) ) ) m_tocAvailable = true; else m_tocAvailable = false; if ( !m_indexFile.isEmpty() || ( m_lookupTablesValid && hasFile( "/$WWKeywordLinks/BTree" ) ) ) m_indexAvailable = true; else m_indexAvailable = false; return true; } int EBook_CHM::findStringInQuotes (const QString& tag, int offset, QString& value, bool firstquote, bool decodeentities) const { int qbegin = tag.indexOf ('"', offset); if ( qbegin == -1 ) qFatal ("EBook_CHMImpl::findStringInQuotes: cannot find first quote in tag: '%s'", qPrintable( tag )); int qend = firstquote ? tag.indexOf ('"', qbegin + 1) : tag.lastIndexOf ('"'); if ( qend == -1 || qend <= qbegin ) qFatal ("EBook_CHMImpl::findStringInQuotes: cannot find last quote in tag: '%s'", qPrintable( tag )); // If we do not need to decode HTML entities, just return. if ( decodeentities ) { QString htmlentity = QString::null; bool fill_entity = false; value.reserve (qend - qbegin); // to avoid multiple memory allocations for ( int i = qbegin + 1; i < qend; i++ ) { if ( !fill_entity ) { if ( tag[i] == '&' ) // HTML entity starts fill_entity = true; else value.append (tag[i]); } else { if ( tag[i] == ';' ) // HTML entity ends { // If entity is an ASCII code, just decode it QString decode = m_htmlEntityDecoder.decode( htmlentity ); if ( decode.isNull() ) break; value.append ( decode ); htmlentity = QString::null; fill_entity = false; } else htmlentity.append (tag[i]); } } } else value = tag.mid (qbegin + 1, qend - qbegin - 1); return qend + 1; } bool EBook_CHM::parseFileAndFillArray( const QString& file, QList< ParsedEntry >& data, bool asIndex ) const { QString src; const int MAX_NEST_DEPTH = 256; if ( !getTextContent( src, file ) || src.isEmpty() ) return false; /* // Save the index for debugging purposes QFile outfile( "parsed.htm" ); if ( outfile.open( QIODevice::WriteOnly ) ) { QTextStream textstream( &outfile ); textstream << src; outfile.close(); } */ EBookTocEntry::Icon defaultimagenum = EBookTocEntry::IMAGE_AUTO; int pos = 0, indent = 0, root_indent_offset = 0; bool in_object = false, root_indent_offset_set = false; ParsedEntry entry; entry.iconid = defaultimagenum; // Split the HHC file by HTML tags int stringlen = src.length(); while ( pos < stringlen && (pos = src.indexOf ('<', pos)) != -1 ) { int i, word_end = 0; for ( i = ++pos; i < stringlen; i++ ) { // If a " or ' is found, skip to the next one. if ( (src[i] == '"' || src[i] == '\'') ) { // find where quote ends, either by another quote, or by '>' symbol (some people don't know HTML) int nextpos = src.indexOf (src[i], i+1); if ( nextpos == -1 && (nextpos = src.indexOf ('>', i+1)) == -1 ) { qWarning ("EBook_CHMImpl::ParseHhcAndFillTree: corrupted TOC: %s", qPrintable( src.mid(i) )); return false; } i = nextpos; } else if ( src[i] == '>' ) break; else if ( !src[i].isLetterOrNumber() && src[i] != '/' && !word_end ) word_end = i; } QString tagword, tag = src.mid (pos, i - pos); if ( word_end ) tagword = src.mid (pos, word_end - pos).toLower(); else tagword = tag.toLower(); DEBUGPARSER(("tag: '%s', tagword: '%s'\n", qPrintable( tag ), qPrintable( tagword ) )); // - a topic entry if ( tagword == "object" && tag.indexOf ("text/sitemap", 0, Qt::CaseInsensitive ) != -1 ) in_object = true; else if ( tagword == "/object" && in_object ) { // a topic entry closed. Add a tree item if ( entry.name.isEmpty() && entry.urls.isEmpty() ) { qWarning ("EBook_CHMImpl::ParseAndFillTopicsTree: tag is parsed, but both name and url are empty."); } else { // If the name is empty, use the URL as name if ( entry.name.isEmpty() ) entry.name = entry.urls[0].toString(); if ( !root_indent_offset_set ) { root_indent_offset_set = true; root_indent_offset = indent; if ( root_indent_offset > 1 ) qWarning("CHM has improper index; root indent offset is %d", root_indent_offset); } // Trim the entry name entry.name = entry.name.trimmed(); int real_indent = indent - root_indent_offset; entry.indent = real_indent; data.push_back( entry ); } entry.name = QString::null; entry.urls.clear(); entry.iconid = defaultimagenum; entry.seealso.clear(); in_object = false; } else if ( tagword == "param" && in_object ) { // int offset; // strlen("param ") QString name_pattern = "name=", value_pattern = "value="; QString pname, pvalue; if ( (offset = tag.indexOf (name_pattern, 0, Qt::CaseInsensitive )) == -1 ) qFatal ("EBook_CHMImpl::ParseAndFillTopicsTree: bad tag '%s': no name=\n", qPrintable( tag )); // offset+5 skips 'name=' offset = findStringInQuotes (tag, offset + name_pattern.length(), pname, true, false); pname = pname.toLower(); if ( (offset = tag.indexOf(value_pattern, offset, Qt::CaseInsensitive )) == -1 ) qFatal ("EBook_CHMImpl::ParseAndFillTopicsTree: bad tag '%s': no value=\n", qPrintable( tag )); // offset+6 skips 'value=' findStringInQuotes (tag, offset + value_pattern.length(), pvalue, false, true); DEBUGPARSER((": name '%s', value '%s'", qPrintable( pname ), qPrintable( pvalue ))); if ( pname == "name" || pname == "keyword" ) { // Some help files contain duplicate names, where the second name is empty. Work it around by keeping the first one if ( !pvalue.isEmpty() ) entry.name = pvalue; } else if ( pname == "merge" ) { // MERGE implementation is experimental QUrl mergeurl = pathToUrl( pvalue ); QString mergecontent; if ( getFileContentAsString( mergecontent, mergeurl ) && !mergecontent.isEmpty() ) { qWarning( "MERGE is used in index; the implementation is experimental. Please let me know if it works" ); // Merge the read value into the current parsed file. // To save memory it is done in a kinda hacky way: src = mergecontent + src.mid( i ); pos = 0; stringlen = src.length(); } else qWarning( "MERGE is used in index but file %s was not found in CHM archive", qPrintable(pvalue) ); } else if ( pname == "local" ) { // Check for URL duplication QUrl url = pathToUrl( pvalue ); if ( !entry.urls.contains( url ) ) entry.urls.push_back( url ); } else if ( pname == "see also" && asIndex && entry.name != pvalue ) { entry.urls.push_back( QUrl("seealso") ); entry.seealso = pvalue; } else if ( pname == "imagenumber" ) { bool bok; int imgnum = pvalue.toInt (&bok); if ( bok && imgnum >= 0 && imgnum < EBookTocEntry::MAX_BUILTIN_ICONS ) entry.iconid = (EBookTocEntry::Icon) imgnum; } } else if ( tagword == "ul" ) // increase indent level { // Fix for buggy help files if ( ++indent >= MAX_NEST_DEPTH ) qFatal("EBook_CHMImpl::ParseAndFillTopicsTree: max nest depth (%d) is reached, error in help file", MAX_NEST_DEPTH); DEBUGPARSER(("
    : new intent is %d\n", indent - root_indent_offset)); } else if ( tagword == "/ul" ) // decrease indent level { if ( --indent < root_indent_offset ) indent = root_indent_offset; DEBUGPARSER(("
: new intent is %d\n", indent - root_indent_offset)); } pos = i; } // Dump our array // for ( int i = 0; i < data.size(); i++ ) // qDebug() << data[i].indent << data[i].name << data[i].urls; return true; } bool EBook_CHM::ResolveObject(const QString& fileName, chmUnitInfo *ui) const { return m_chmFile != NULL && ::chm_resolve_object(m_chmFile, qPrintable( fileName ), ui) == CHM_RESOLVE_SUCCESS; } bool EBook_CHM::hasFile(const QString & fileName) const { chmUnitInfo ui; return m_chmFile != NULL && ::chm_resolve_object(m_chmFile, qPrintable( fileName ), &ui) == CHM_RESOLVE_SUCCESS; } size_t EBook_CHM::RetrieveObject(const chmUnitInfo *ui, unsigned char *buffer, LONGUINT64 fileOffset, LONGINT64 bufferSize) const { return ::chm_retrieve_object(m_chmFile, const_cast(ui), buffer, fileOffset, bufferSize); } bool EBook_CHM::getInfoFromWindows() { #define WIN_HEADER_LEN 0x08 unsigned char buffer[BUF_SIZE]; unsigned int factor; chmUnitInfo ui; long size = 0; if ( ResolveObject("/#WINDOWS", &ui) ) { if ( !RetrieveObject(&ui, buffer, 0, WIN_HEADER_LEN) ) return false; unsigned int entries = get_int32_le( (unsigned int *)(buffer) ); unsigned int entry_size = get_int32_le( (unsigned int *)(buffer + 0x04) ); QVector uptr(entries * entry_size); unsigned char* raw = (unsigned char*) uptr.data(); if ( !RetrieveObject (&ui, raw, 8, entries * entry_size) ) return false; if( !ResolveObject ("/#STRINGS", &ui) ) return false; for ( unsigned int i = 0; i < entries; ++i ) { unsigned int offset = i * entry_size; unsigned int off_title = get_int32_le( (unsigned int *)(raw + offset + 0x14) ); unsigned int off_home = get_int32_le( (unsigned int *)(raw + offset + 0x68) ); unsigned int off_hhc = get_int32_le( (unsigned int *)(raw + offset + 0x60) ); unsigned int off_hhk = get_int32_le( (unsigned int *)(raw + offset + 0x64) ); factor = off_title / 4096; if ( size == 0 ) size = RetrieveObject(&ui, buffer, factor * 4096, BUF_SIZE); if ( size && off_title ) m_title = QByteArray( (const char*) (buffer + off_title % 4096) ); if ( factor != off_home / 4096) { factor = off_home / 4096; size = RetrieveObject (&ui, buffer, factor * 4096, BUF_SIZE); } if ( size && off_home ) m_home = QByteArray("/") + QByteArray( (const char*) buffer + off_home % 4096); if ( factor != off_hhc / 4096) { factor = off_hhc / 4096; size = RetrieveObject(&ui, buffer, factor * 4096, BUF_SIZE); } if ( size && off_hhc ) m_topicsFile = QByteArray("/") + QByteArray((const char*) buffer + off_hhc % 4096); if ( factor != off_hhk / 4096) { factor = off_hhk / 4096; size = RetrieveObject (&ui, buffer, factor * 4096, BUF_SIZE); } if ( size && off_hhk ) m_indexFile = QByteArray("/") + QByteArray((const char*) buffer + off_hhk % 4096); } } return true; } bool EBook_CHM::getInfoFromSystem() { unsigned char buffer[BUF_SIZE]; chmUnitInfo ui; int index = 0; unsigned char* cursor = NULL, *p; unsigned short value = 0; long size = 0; // Run the first loop to detect the encoding. We need this, because title could be // already encoded in user encoding. Same for file names if ( !ResolveObject ("/#SYSTEM", &ui) ) return false; // Can we pull BUFF_SIZE bytes of the #SYSTEM file? if ( (size = RetrieveObject (&ui, buffer, 4, BUF_SIZE)) == 0 ) return false; buffer[size - 1] = 0; // First loop to detect the encoding for ( index = 0; index < (size - 1 - (long)sizeof(unsigned short)) ;) { cursor = buffer + index; value = UINT16ARRAY(cursor); switch(value) { case 0: index += 2; cursor = buffer + index; if(m_topicsFile.isEmpty()) m_topicsFile = QByteArray("/") + QByteArray((const char*) buffer + index + 2); break; case 1: index += 2; cursor = buffer + index; if(m_indexFile.isEmpty()) m_indexFile = QByteArray("/") + QByteArray((const char*)buffer + index + 2); break; case 2: index += 2; cursor = buffer + index; if(m_home.isEmpty() || m_home == "/") m_home = QByteArray("/") + QByteArray((const char*) buffer + index + 2); break; case 3: index += 2; cursor = buffer + index; m_title = QByteArray( (const char*) (buffer + index + 2) ); break; case 4: index += 2; cursor = buffer + index; p = buffer + index + 2; m_detectedLCID = (short) (p[0] | (p[1]<<8)); break; case 6: index += 2; cursor = buffer + index; if ( m_topicsFile.isEmpty() ) { QString topicAttempt = "/", tmp; topicAttempt += QString ((const char*) buffer +index +2); tmp = topicAttempt + ".hhc"; if ( ResolveObject( tmp, &ui) ) m_topicsFile = qPrintable( tmp ); tmp = topicAttempt + ".hhk"; if ( ResolveObject( tmp, &ui) ) m_indexFile = qPrintable( tmp ); } break; case 16: index += 2; cursor = buffer + index; m_font = QString ((const char*) buffer + index + 2); break; default: index += 2; cursor = buffer + index; } value = UINT16ARRAY(cursor); index += value + 2; } return true; } QString EBook_CHM::getTopicByUrl( const QUrl& url ) { QMap< QUrl, QString >::const_iterator it = m_url2topics.find( url ); if ( it == m_url2topics.end() ) return QString::null; return it.value(); } static int chm_enumerator_callback( struct chmFile*, struct chmUnitInfo *ui, void *context ) { EBook_CHM tmp; ((QList *) context)->push_back( tmp.pathToUrl( ui->path ) ); return CHM_ENUMERATOR_CONTINUE; } bool EBook_CHM::enumerateFiles(QList &files ) { files.clear(); return chm_enumerate( m_chmFile, CHM_ENUMERATE_ALL, chm_enumerator_callback, &files ); } QString EBook_CHM::currentEncoding() const { return m_currentEncoding; } bool EBook_CHM::setCurrentEncoding( const char * encoding ) { m_currentEncoding = encoding; return changeFileEncoding( encoding ); } bool EBook_CHM::isSupportedUrl(const QUrl &url) { return url.scheme() == URL_SCHEME_CHM; } bool EBook_CHM::guessTextEncoding() { if ( !m_detectedLCID ) { qFatal ("Could not detect LCID"); return false; } QString enc = Ebook_CHM_Encoding::guessByLCID( m_detectedLCID ); if ( changeFileEncoding ( enc ) ) { m_currentEncoding = enc; return true; } return false; } bool EBook_CHM::changeFileEncoding( const QString& qtencoding ) { // Encoding could be either simple Qt codepage, or set like CP1251/KOI8, which allows to // set up encodings separately for text (first) and internal files (second) int p = qtencoding.indexOf( '/' ); if ( p != -1 ) { QString global = qtencoding.left( p ); QString special = qtencoding.mid( p + 1 ); m_textCodec = QTextCodec::codecForName( global.toUtf8() ); if ( !m_textCodec ) { qWarning( "Could not set up Text Codec for encoding '%s'", qPrintable( global ) ); return false; } m_textCodecForSpecialFiles = QTextCodec::codecForName( special.toUtf8() ); if ( !m_textCodecForSpecialFiles ) { qWarning( "Could not set up Text Codec for encoding '%s'", qPrintable( special ) ); return false; } } else { m_textCodecForSpecialFiles = m_textCodec = QTextCodec::codecForName( qtencoding.toUtf8() ); if ( !m_textCodec ) { qWarning( "Could not set up Text Codec for encoding '%s'", qPrintable( qtencoding ) ); return false; } } m_htmlEntityDecoder.changeEncoding( m_textCodec ); return true; } void EBook_CHM::fillTopicsUrlMap() { if ( !m_lookupTablesValid ) return; // Read those tables QVector topics( m_chmTOPICS.length ), urltbl( m_chmURLTBL.length ), urlstr( m_chmURLSTR.length ), strings( m_chmSTRINGS.length ); if ( !RetrieveObject( &m_chmTOPICS, (unsigned char*) topics.data(), 0, m_chmTOPICS.length ) || !RetrieveObject( &m_chmURLTBL, (unsigned char*) urltbl.data(), 0, m_chmURLTBL.length ) || !RetrieveObject( &m_chmURLSTR, (unsigned char*) urlstr.data(), 0, m_chmURLSTR.length ) || !RetrieveObject( &m_chmSTRINGS, (unsigned char*) strings.data(), 0, m_chmSTRINGS.length ) ) return; for ( unsigned int i = 0; i < m_chmTOPICS.length; i += TOPICS_ENTRY_LEN ) { unsigned int off_title = get_int32_le( (unsigned int *)(topics.data() + i + 4) ); unsigned int off_url = get_int32_le( (unsigned int *)(topics.data() + i + 8) ); off_url = get_int32_le( (unsigned int *)( urltbl.data() + off_url + 8) ) + 8; QUrl url = pathToUrl( (const char*) urlstr.data() + off_url ); if ( off_title < (unsigned int)strings.size() ) m_url2topics[url] = encodeWithCurrentCodec ( (const char*) strings.data() + off_title ); else m_url2topics[url] = "Untitled"; } } bool EBook_CHM::parseBinaryTOC( QList< EBookTocEntry >& toc ) const { if ( !m_lookupTablesValid ) return false; QByteArray tocidx, topics, urltbl, urlstr, strings; // Read the index tables if ( !getBinaryContent( tocidx, "/#TOCIDX" ) || !getBinaryContent( topics, "/#TOPICS" ) || !getBinaryContent( urltbl, "/#URLTBL" ) || !getBinaryContent( urlstr, "/#URLSTR" ) || !getBinaryContent( strings, "/#STRINGS" ) ) return false; // Shamelessly stolen from xchm if ( !RecurseLoadBTOC( tocidx, topics, urltbl, urlstr, strings, UINT32ARRAY( tocidx.data() ), toc, 0 ) ) { qWarning("Failed to parse binary TOC, fallback to text-based TOC"); toc.clear(); return false; } return true; } // // This piece of code was based on the one in xchm written by Razvan Cojocaru // bool EBook_CHM::RecurseLoadBTOC( const QByteArray& tocidx, const QByteArray& topics, const QByteArray& urltbl, const QByteArray& urlstr, const QByteArray& strings, int offset, QList< EBookTocEntry >& entries, int level ) const { while ( offset ) { // If this is end of TOCIDX, return. if ( tocidx.size() < offset + 20 ) return true; unsigned int flags = UINT32ARRAY( tocidx.data() + offset + 4 ); int index = UINT32ARRAY( tocidx.data() + offset + 8 ); if ( (flags & 0x04) || (flags & 0x08)) { QString name, value; if ( (flags & 0x08) == 0 ) { if ( strings.size() < index + 1 ) { qWarning("EBook_CHM::RecurseLoadBTOC: invalid name index (%d) for book TOC entry!", index ); return false; } name = encodeWithCurrentCodec( strings.data() + index); } else { if ( topics.size() < (index * 16) + 12 ) { qWarning("EBook_CHM::RecurseLoadBTOC: invalid name index (%d) for local TOC entry!", index ); return false; } int tocoffset = (int) UINT32ARRAY(topics.data()+ (index * 16) + 4); if ( strings.size() < tocoffset + 1 ) { qWarning("EBook_CHM::RecurseLoadBTOC: invalid name tocoffset (%d) for TOC entry!", tocoffset ); return false; } if ( tocoffset < 0 ) name.clear(); else name = encodeWithCurrentCodec( strings.data() + tocoffset ); // #URLTBL index tocoffset = (int) UINT32ARRAY( topics.data() + (index * 16) + 8 ); if ( tocoffset < 0 || urltbl.size() < tocoffset + 12 ) { qWarning("EBook_CHM::RecurseLoadBTOC: invalid url index (%d) for TOC entry!", tocoffset ); return false; } tocoffset = (int) UINT32ARRAY(urltbl.data() + tocoffset + 8); if ( tocoffset < 0 || urlstr.size() < tocoffset ) { qWarning("EBook_CHM::RecurseLoadBTOC: invalid url offset (%d) for TOC entry!", tocoffset ); return false; } value = encodeWithCurrentCodec( urlstr.data() + tocoffset + 8 ); } EBookTocEntry entry; entry.name = name.trimmed(); if ( !entry.name.isEmpty() ) { if ( !value.isEmpty() ) entry.url = pathToUrl( value ); entry.iconid = EBookTocEntry::IMAGE_AUTO; entry.indent = level; entries.push_back( entry ); } } if ( flags & 0x04 ) { // book if ( tocidx.size() < offset + 24 ) { qWarning("EBook_CHM::RecurseLoadBTOC: invalid child entry offset (%d)", offset ); return false; } unsigned int childoffset = UINT32ARRAY( tocidx.data() + offset + 20 ); if ( childoffset ) { if ( !RecurseLoadBTOC( tocidx, topics, urltbl, urlstr, strings, childoffset, entries, level + 1 ) ) return false; } } offset = UINT32ARRAY( tocidx.data() + offset + 0x10 ); } return true; } bool EBook_CHM::hasOption(const QString & name) const { if ( !m_envOptions.isEmpty() && m_envOptions.contains( name ) ) return true; return false; } QUrl EBook_CHM::pathToUrl(const QString &link) const { if ( link.startsWith( "http://" ) || link.startsWith( "https://" ) ) return QUrl( link ); QUrl url; url.setScheme( URL_SCHEME_CHM ); url.setHost( URL_SCHEME_CHM ); // Does the link contain the fragment as well? int off = link.indexOf( '#' ); QString path; if ( off != -1 ) { path = link.left( off ); url.setFragment( link.mid( off + 1 ) ); } else path = link; if ( !path.startsWith( '/' ) ) path.prepend( '/' ); url.setPath( QUrl::fromPercentEncoding( path.toUtf8() ) ); return url; } QString EBook_CHM::urlToPath(const QUrl &link) const { if ( link.scheme() == URL_SCHEME_CHM ) { if ( link.path() == "/" || link.path().isEmpty() ) return m_home; return link.path(); } return ""; } EBook_CHM::ParsedEntry::ParsedEntry() { iconid = 0; indent = 0; } kchmviewer-7.5/PaxHeaders.8614/portable.txt0000644000000000000000000000012412416602244015563 xustar0027 mtime=1413153956.388708 27 atime=1447562193.151734 30 ctime=1447562193.151734307 kchmviewer-7.5/portable.txt0000644000175000001440000000120512416602244016111 0ustar00timusers00000000000000It is possible to make kchmviewer a portable app, meaning it would keep its files in predefined location and will not write into system/user folders. To do this, please create a directory named "portable" (without quotes) in the same directory where kchmviewer binary is stored. If this directory exists: - Subdirectory "data" will be created under "portable" and will be used to store the search index and per-help file preferences; - Application settings will be stored in subdirectory "Ulduzsoft" created in "portable" - Qt-specific settings will be stored in "portable" directory - Nothing will be written into any other location on disk. kchmviewer-7.5/PaxHeaders.8614/packages0000644000000000000000000000013212622005721014706 xustar0030 mtime=1447562193.129734607 30 atime=1447562193.123734689 30 ctime=1447562193.129734607 kchmviewer-7.5/packages/0000755000175000001440000000000012622005721015314 5ustar00timusers00000000000000kchmviewer-7.5/packages/PaxHeaders.8614/CMakeLists.txt0000644000000000000000000000012411311626155017530 xustar0027 mtime=1260858477.436697 27 atime=1447562193.123734 30 ctime=1447562193.123734689 kchmviewer-7.5/packages/CMakeLists.txt0000644000175000001440000000022611311626155020060 0ustar00timusers00000000000000INSTALL( FILES kchmviewer.desktop DESTINATION ${KDE4_XDG_APPS_INSTALL_DIR} ) KDE4_INSTALL_ICONS( ${KDE4_ICON_INSTALL_DIR} ) KDE4_UPDATE_ICONCACHE( ) kchmviewer-7.5/packages/PaxHeaders.8614/kchmviewer.png0000644000000000000000000000012411311623221017631 xustar0027 mtime=1260856977.099904 27 atime=1447562193.128734 30 ctime=1447562193.128734621 kchmviewer-7.5/packages/kchmviewer.png0000644000175000001440000003571511311623221020174 0ustar00timusers00000000000000PNG  IHDR>a IDATxwՕ:OIQΈ ,` xx^^Ű1L66IBByf3Թi(SuUu[B)19zE{OrG#Q.p1rG#Q.p1rG#Q.;}\s-jծC4WMb9\t;}^m0sZݲ 4 ӶхFa(yuX8ϝ|QCrjD_@۾Nl(*eKy_ [^UW?t K ~ 8}">;2 ujohx4)Q[Zə3O 7=uˏ2j2;辕i2y3ϼg%7Surd2Ό{O}IKڻm=mHX)4XRO?w=w8UWx=MJ"Eua38oЬux /~(R{-T|w9t5s|>wxhsڧ_dt¿jUHB<:-1-I"i#B0t]wD7Qϼf4dxT=?*i9,R}:5y(*@ ,[Jcp(u?czeK'?=Mo?tzt ̯}}XԦ"*˃h {EG(LAJŏ7y"jW?+?|[N,>{պ=[Xղ^5j<ƌLGuuATR 0x4ePdغc}%i(ԩ©K$~s5\zX8PT(lؗ'H()) +(CuPP"m!R*ZmMS\#8Ӧ,K_x#|] Cn{ܫ`v9\3[):eP6 'J);MV4j uf*7;ֿ$%H$A*U4!WE,yWS^y bubscFS"@ Ӧ^*E8x'EOآ4_`y|=s[|o͵oUfIű, oxTXI3o o^~B̽T9Wͻ%W1KDe:: RpH༖Jy%P¦i~N @he6V4T%I$n&I,9g$ +Z_>!"[®NuӿrB`v]X\kPH$Ry~_ H)[OPdeoDx~o[*Ney+f5V@mamcY1m ˲H)= J{7Ԏ=h5{MwWν| ]CII*Bєb8a3Ip\19X8j15H"&A MIZz {@ҫ Ym(֟]Q><9D]ǠsǛ~mtDB {xʼBYGw y6̶x vu'7 0Pl굉$ PH%Q! %UmK4¶؛,gdSW%<@TFLP@Iq&I38dufV:TXWOba%>ke3d 5E %b["nf$.ROJlxRZ2D!=i( B@$fb[&Rxd0+ģ Aᛐx2b Jٔ14Ap?HIcQ__zž'rxps޻>bRQBr$LeKM-@8`+*~=J)b)ۋl[2%{ D,* $ 8TDy~1Kڼg3DdwE8VӲ%##QuvFR0(/OfѤ|aꝝa~tVJD11l30<%!/ xL.%$%-ubzy=W.$>ǃidTOo}~{(P!<^e1;–} Bl[?/!^6@ByP>?ҊaP&meRBDA9tIgJsY/Njh`T:S, j]N"y0lB y~! iH s1 Mg0c@~}E!7 yBPVh©#@* ;g4߾į܊ Nta  ANJ^iQ[@M;n<@'o(ƣH)4=q O-:.WS&a@|<^t,e]"a;FP/%y$amC8ԩΝ뻝sz&R=^;_ MH۩ pC(RFP(E)H@$3lEwpHȿ*mJ! dBci:()+Ey~)ԛ/ND H4E(襬ɅA]gNM @j)y 'm _p8C;UH$UU5L/BAʲ fz/̀o۶3:(mt142_V>ʗ_dxpH}>5. &0J 1m Œ&HtHILAC3:,|'!B &xMt 5>O~uZVǏY˧o|Kozξ_9.Lp"U ѝkI2i"cI>r\-5e$&ɵo9;j8aexswMӰdNE#0@w#}GgD"[2i*&VhΩܿYƒxt;@(|~P"P`>qmȕ_U󮦲"k\[Nw/Az`{0[;̞䤁R*.@ J` /"ӽ/N<"T &}C D4J.>kN%qp0N*g8Q|룦2>:VБ6fv6{)eYjg?1%yx L'W_U6lb(3ԋf zȏQaYIɷ&?\5* 4L*B)P47oz }IT%\/+7t,p*zBCx`xQV&@RQ$rtM#7;k] ԕTRWLkIesYV3 ezF"LL&IRw೏c;b<{Nڼy3h Ń[W2؅BhyuO8\9*),cKɞoDmUiIm#4#ix 3\VL"Kڻ|MWm&AmY>}4fyChvݣy :SH?KR0'Sgbh:J}Q( ̮nrQli$6-M IY&~h}فx2u>l6K,00A a}v"d*C$:>ϡ'jr+y=46T O0~D 2 (I1%AY`'QH_2O£ CCqy)d&?8GSsJ<'O+ZnG)mc&Xs Oxg[&>vM4EJID&C#R߬\> / x Ln >z3V@)6&*D89}躳`(#C]l9? sr\<4F1_)%gN?jcs<- n,K!wlBZ C*Θ[oz! ^6f~Mʳ.Nư\p)՘ҰX|ڒ.Z3AV233&%NHt>g:э1eԚ 4̓{4=cO&H$hJ)Κ~󫧀&2ivRa(<셧__ԯC kQ{.Ay>4Db8Jle}i&-ml[bl1Zi+˲1Nk3%]ZLmsa MG]kx6(!Q*c%RC ܞ%鋙Y8|W> Y߶e:N/:>[ bܱ]q5ɃR _X|dRAJPh6tD+5%5BCγڶ: S ;Ads5T)*SRf'Dž8p|5; D # {qhhchd@wR9J)jt&c&:u(AFݴϕl_[_'_gK2c\m?{ a?5s@FJ̬ndvuUl,P˲@s 3 %$m 4BCJ/ګ,DJ\(Mϊl-ji , \2{dj+If.(` 8~d}}7_z|,^Q^?+wӿ%Ag;eIeA,ttM53s e~RjtVJ,`]6t$XzfV7R_ 8˜hJ!%HA hJHk(4 \(&۬AK|Lg,8.1#cm:dm|!<#[ \_m1'[v/V"d 2Ž6vV)! Yfݟ%mBe5̬gRq%~/S/tO!;4d:^p݉=CKE ǣil@R_932]x^5-{nwdewIDAT;73.bFD:v[sK- 5Ǫ})rɛ\i| ߯(;_C?8.v8-J\*)21j` ,ˢgxvuv w* -@>>gL"j^@jv*4dUJ`Ɣg1UE`@5D?;;m-Ww(ʴ y|#.RhxtYם8TȣWp3'fISq3wԾ;?]&Ռ~u` \$wdݝ{Yk3[:[鰇Hx2/edaPWTFJ z}x.FB!mylaglj8BoW_1y%m +8k1ݺ.ٙx?U&$Ҳ)]”IN9kgXBi@>kڶ?ߖ^89f~{gcNj_3O47}kmк=>I]((ro:t zL*`FU1QӟvYc؀:4b6\2k728|[I +8s?o&LlI?ȗϺ)#t<~o "+:ǖ4W{^'>F r%AvD]{xevv/#=&<^jʙZ^Oua3%+xhczeŁ̸}.Yd7N-6w-0If]O'Vp2໦?{`@xr*eκh MGt4گa{ʽ7NiS 9T *u~}ir F.!G۲1 f74;2ȚXu:D-]{u I6dsniϟr0-I5h钰3HM BdvK|sG%h*RQ,?MSy-Bw6&_# zK wʽ.4+&qܹ'^}$RIۈ&c N=!:{2}2&lRd?I%Sˎ/b:ZYy-;z)>I\BP_ŒFJk §T2JF]F4g@7wD 5P)+5>ݭ{Ox? pmW*]~7+fY $`(6ƶٶNFHH㡩( 7p Pjh(qFr:Ɛݒ63X>eAҼ=|;Q/G~Q-M E>vg/D銤/vvQ/HpOrYyDRqVj?d )+h~nLঐ.!ZĒK[7m;a"~=kgSW%-C0kڶ}'V3Ǐm;n_,oIY4砑x"5~E"0Uua 7\xeex- tn@d{JH_v7[9)1) S !h V0U-&f?2m]/uD1AS$kپ6B[_Rt%x`_75,4"'F"l72D> װ}c̾%mV6iΘn݉sO'"rÅPZRݼ8agg[;K*}bC3@YVARϧ[@!2JM'>#عtɎ \AM?w[۶3nJY㤙Y4}{Xm#n`8J_:;\ 3 cAm`W_{Ǻb+ɼ,iD;JrNjr_L@P\]Fmqs&N2id]vvwK%=(!)JaJRԓG?Nei[I"V!ۏ|a.OȬ%|p4TMhxAlƳ.!\s_o3-cmm=]lknNδ&ttxVUS8qţM[+gJ2 ~%uXKѷ bh:^C0"cFY:b)jga.kǣDUIc6^wHغe7<̭my9yEc4gϹ)e.*RJz:xez6l;2HIY)']HQA!mTJ1z2M4oN|Ӷp4T_8NLmt ;S#}@:HG7<bR4V:LGxͅ>ֶl˒I?,?o3lCJ!"œrƬW?)bgή3䂙]"jB(kwmᥭhaiL:6NJɂ)W74q^-/_x;mK*ɅQ_Ri$ll}eKF#t000'n3)P&4RQPt` #{/ ;q{YR>_'@|_5m[iƶMt!-`YBΝY5McJn}krx#ٱ~vbkG?uffau3 fz5`b7?~aTڥL).:U%ƮP3aYj 6BP "6zJj=*B*07%͵!_6-:P"%95S9'y>5E凵?Wƫ1MW[08<Į=(]u̫k΀>^xNjF;s>O$gW_A,)9ed@}D1T"/S,e~m3j)/,ͬH\+k y_~;_K?G_wfKwkz2( q|,><$NjCihb 2J.#ۍQ~DZMc}!Kb?ңiaVM7l$怮APNfI1(^ְq:B3r2x. ~=stmͯv(Gg+}!3,ԩ U9rÁ>JD'{-~Wh~cY-'7kxfP"l)  *|6Lczd*>"A6ǟyCkSm|ݭ$(=4p쥜68kPgiDQjjj=ƧWL|:Ni^@ǒ6Clnk+5 Am\6MәR=`~cz s Ml"|y{-sh/vip?Sk;5vgUagZI({#[RR yl*D ̯K{6D"%O}I%dvC3PfJhxߴgs%aHY)^aםj}ps7kx~?ƒjNvg]ƔÎ/[tvF^쪥+Do=x+Oo}^%$lz+aLTY>*hqfSWVgJ+kx5cVȬjx{xzz۸-8U|l\jut 2W?żiݜ9y<X_8h$$$6٣dـ #\s-rܲ =A+xZ})it 2g4s2sk1M3Ӎ[4M3Bgwo]>؎3Vqj\xG3&W]sRimli-/܎T/Nlg z5ܪ۴i)#yGQWi(dzxVOƣ$R1wPY:noG;?~"M9/x^ó_Q&[ktn9ϋ7ܱ0<痲~?Gnv{A}מ&iZ@Si5;ֳpYO# U28N $duӕ΀ڒ ,|-\ߞD/lkxu ! ͮ‡/Y$=GCݷ$R&J̮l FJֺ?n{&c(:SkYV?SػwW>6z<__zڞaM|=F$VVs^ EOya)4/ʳ.=k' pQ_IM5\/3v2iw/Omy'wLOxTikάۨm#i37_]sWJ]Dsݧi[mo[Wܶ5ut%yE,)ӎ㼅F=K=~㺿OҢ_UOi5MU-Xղ̾0e:kI|OX rh7R2ڞ?,1Ù)ᱭ/_eK gN9[LJx!7Zs0~+nB@V` ŕX?{ধ~^$ RRqÅ_ㄦYcB.4,bpx@ _n?^kFew/OmZ ;^S9mšJ*ij9c̹OʣD RpX~xY6ml1wP(Mn@A,`kwOn~WvoSI C$E9e">` ly\U\{㴙;N&jecw'+v-/@έbJk8x>wſYy_Ε[WX"'b`&^w=pᶏ c}NV\s^e0: T\ 3#_y}KW=?8)PYsǃ0}'o\+ 5gpma */@ϖ5}I@4]'aΜ`^(S3 Y^ټc[^dݞmciy5* J^Z9sqw_?yK+H4锃 LII h^ʶB!tu:e>_E г 8f?[q?# g a[Q1RVlgPt맮S{߁-G [sg$Mi!;KT0:9} +G_W_ޓ( 03y'vT-G\#TEU\l9j pLyctF(c8r9F\(c8r9F\()p jIENDB`kchmviewer-7.5/packages/PaxHeaders.8614/kchmviewer.desktop0000644000000000000000000000012412616060543020531 xustar0027 mtime=1446535523.401268 27 atime=1447562193.124734 30 ctime=1447562193.128734621 kchmviewer-7.5/packages/kchmviewer.desktop0000644000175000001440000000044412616060543021063 0ustar00timusers00000000000000[Desktop Entry] Name=KchmViewer Categories=Qt;KDE;Office;Viewer; Terminal=false Type=Application Exec=kchmviewer %f Icon=kchmviewer GenericName=CHM file viewer Comment=A viewer of CHM (MS-Help) files MimeType=application/chm;application/x-chm;application/vnd.ms-htmlhelp;application/epub+zip kchmviewer-7.5/packages/PaxHeaders.8614/rpm.spec0000644000000000000000000000012411311626155016442 xustar0027 mtime=1260858477.436697 27 atime=1447562193.129734 30 ctime=1447562193.129734607 kchmviewer-7.5/packages/rpm.spec0000644000175000001440000000163711311626155017001 0ustar00timusers00000000000000Summary: Free CHM files viewer application Name: kchmviewer Version: 0.7 Release: 1 License: GPLv3+ Group: Applications/Office Packager: kchmviewer@ulduzsoft.com URL: http://www.kchmviewer.net %description Kchmviewer is a free, open-source chm (MS HTML help file format) viewer, which uses Qt toolkit. Its main advantage is the best support for non-English languages. Unlike other viewers, kchmviewer in most cases is able to correctly detect the chm file encoding and show it. It correctly shows the index and table of context in Russian, Spanish, Romanian, Korean, Chinese and Arabic help files, and with new search engine is able to search in any chm file no matter what language it is written. Author: ------- George Yunaev Requires: libqt4 >= 4.5.0 %files %defattr(-,root,root) /usr/bin/kchmviewer %defattr(-,root,root) /usr/share/applications/kchmviewer.desktop %defattr(-,root,root) /usr/share/pixmaps/kchmviewer.png kchmviewer-7.5/PaxHeaders.8614/FAQ0000644000000000000000000000012311364464524013553 xustar0027 mtime=1272080724.503152 27 atime=1447562193.031735 29 ctime=1447562193.03173594 kchmviewer-7.5/FAQ0000644000175000001440000001013711364464524014106 0ustar00timusers00000000000000*** PLEASE MAKE SURE YOU HAVE THE LATEST RELEASE FROM www.kchmviewer.net BEFORE SUBMITTING A BUG! *** *** Browsing: *** Q: The book body is not shown (empty screen) although table of contents is shown. What's wrong? A: QTextBrowser is very basic browser which cannot handle HTML in some modern books. Kchmviewer tries to fix the books with known quirks, but it does not always work. If the latest release does not work for you, try to use different internal browser by changing it in Settings using KHTMLPart or WebKit instead. Q: The book file contains spaces or non-English characters and it shows without any problem using QTextWidget browser, but when I use KHTMLPart browser, I cannot open it or go through internal links: A: You have either kio_chm installed, or previous version of kio_msits. To disable kio_chm, find the file chm.protocol in your KDE directory, and remove it. Then run kdeinit to reread the configuration. To find the old kio_msits, find the file kio_msits.so in your KDE directory, and remove it. Then recompile the application. Q: The book shows without any problem using QTextWidget browser, but when I use KHTMLPart browser, I get the following error: An error occurred while loading ms-its:/home/user/Symphony?FrameWork.chm::/index.html The?file?or?folder?ms-its:/home/user/Symphony?FrameWork.chm::/index.html?does?not?exist. A: You have kio_chm installed, and because it installs itself as KIO slave for ms-its, sometime KDE uses it instead of kio_msits. To disable it, find the file chm.protocol in your KDE directory, and remove it. Then run kdeinit or kdeinit4 to reread the configuration. Q: When I open CHM document, there is no "Contents" or "Index" tab. A: The files required for Content or Index tabs are not present in chm file. Therefore it is not possible to show those tabs. Q: I use KDE. Which browser is better to use - KHTMLPart or QTextBrowser? A: QTextBrowser was reported to be faster, except for multibyte languages (Japanese/Chinese/Korean). However KHTMLPart is obviously more standard-compliant. I use KHTMLPart. 4.0 version adds WebKit as well. Q: Font size increasing button does not increase the font size, just changes the font to bold once. A: Make sure you use resizeable (true type) fonts. The described behavior is expected when bitmap fonts are used, as their size could not be changed. Check your system configuration. *** Questions about search. *** Before version 3.0 is out there was only one search engine, which is still available in Advanced settings as "search engine based on internal CHM index". The following questions are only related to the old search engine, and are fixed in a new one. Q: Why my search for "for this" found no documents even though I know there are documents containing this phrase? Q: Why my search for "C++" or "argv[0]" found no documents even though I know there are documents containing this phrase? Q: Why the search tab is not shown? A: The search does not look through all the documents. Instead it uses the previously generated index stored in CHM file. If the index is not present in the file, the search is not possible. However the indexing procedure in Microsoft HTML Help Workshop does not index the symbols (except underscore), single letters and common words like for, this, to, do, etc. Therefore those words and symbols are not in index file, so search for "C++" will not be found. Also the the indexing procedure in Microsoft HTML Help Workshop brokes the ASCII characters which are outside 7-bit ASCII table. Therefore search using European/Russian letters often produces strange results, finding the pages with no search words present, and does not work with Asian langiages. The solution is new kchmviewer search engine. It is also index-based, but the index is generated by chmviewer. Every symbol is indexed, so seach for "C++" or "argv[0]" will find the appropriate code. It uses Unicode inside, so it has no problem with any language, including Japanese, Chinese and Korean. kchmviewer-7.5/PaxHeaders.8614/tests0000644000000000000000000000013212622005721014272 xustar0030 mtime=1447562193.251732947 30 atime=1447562193.244733042 30 ctime=1447562193.251732947 kchmviewer-7.5/tests/0000755000175000001440000000000012622005721014700 5ustar00timusers00000000000000kchmviewer-7.5/tests/PaxHeaders.8614/autotest.sh0000644000000000000000000000012411311400213016541 xustar0027 mtime=1260781707.369914 27 atime=1447562193.244733 30 ctime=1447562193.251732947 kchmviewer-7.5/tests/autotest.sh0000644000175000001440000000076311311400213017077 0ustar00timusers00000000000000#!/bin/sh CHMDIR="/mnt/ebooks /mnt/disk_d/Docs" #KCHMVIEWER="../src/kchmviewer" KCHMVIEWER="../bin/kchmviewer" COMMONLOG="autotest.log" FATALLOG="fatal.log" CMDOPTIONS="--nocrashhandler" #find $CHMDIR -iname "*.chm" -print -exec find $CHMDIR -iname "*.chm" -print | while read file; do echo "Testing file $file" echo "File $file" >> $COMMONLOG $KCHMVIEWER $CMDOPTIONS --shortautotestmode "$file" >>$COMMONLOG 2>&1 if test $? != 0; then echo "$file FAILED, exit code $?!" >> FATALLOG fi done kchmviewer-7.5/PaxHeaders.8614/src0000644000000000000000000000013012622005721013715 xustar0029 mtime=1447562193.22873326 30 atime=1447562193.152734294 29 ctime=1447562193.22873326 kchmviewer-7.5/src/0000755000175000001440000000000012622005721014325 5ustar00timusers00000000000000kchmviewer-7.5/src/PaxHeaders.8614/config.cpp0000644000000000000000000000012312622004024015740 xustar0026 mtime=1447561236.73948 27 atime=1447562193.160734 30 ctime=1447562193.160734185 kchmviewer-7.5/src/config.cpp0000644000175000001440000001304312622004024016272 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include #include #include #include "kde-qt.h" #include "config.h" #include "settings.h" #include "mainwindow.h" Config * pConfig; Config::Config() { // Support for portable app - if the data path is specified in the configuration, use it. m_datapath = QCoreApplication::applicationDirPath() + QDir::separator() + "portable"; if ( QFile( m_datapath ).exists() ) { QSettings::setPath( QSettings::defaultFormat(), QSettings::UserScope, m_datapath ); m_datapath += QDir::separator() + QString("data"); } else m_datapath = QDir::homePath () + "/" + ".kchmviewer"; QSettings settings; m_startupMode = (Config::StartupMode) settings.value( "settings/onstartup", STARTUP_DO_NOTHING ).toInt(); m_onNewChmClick = (Config::choose_action_t) settings.value( "settings/onnewchm", ACTION_ASK_USER ).toInt(); m_onExternalLinkClick = (Config::choose_action_t) settings.value( "settings/onexternal", ACTION_ASK_USER ).toInt(); m_numOfRecentFiles = settings.value( "settings/maxrecentfiles", 10 ).toInt(); m_HistoryStoreExtra = settings.value( "settings/extrahistory", true ).toBool(); m_advUseInternalEditor = settings.value( "advanced/internaleditor", true ).toBool(); m_advLayoutDirectionRL = settings.value( "advanced/layoutltr", false ).toBool(); m_advAutodetectEncoding = settings.value( "advanced/autodetectenc", false ).toBool(); m_advExternalEditorPath = settings.value( "advanced/editorpath", "/usr/bin/kate" ).toString(); m_advCheckNewVersion = settings.value( "advanced/checknewver", true ).toBool(); m_toolbarMode = (Config::ToolbarMode) settings.value( "advanced/toolbarmode", TOOLBAR_LARGEICONSTEXT ).toInt(); m_lastOpenedDir = settings.value( "advanced/lastopendir", "." ).toString(); m_browserEnableJS = settings.value( "browser/enablejs", true ).toBool(); m_browserEnableJava = settings.value( "browser/enablejava", false ).toBool(); m_browserEnablePlugins = settings.value( "browser/enableplugins", true ).toBool(); m_browserEnableImages = settings.value( "browser/enableimages", true ).toBool(); m_browserEnableOfflineStorage = settings.value( "browser/enableofflinestorage", false ).toBool(); m_browserEnableLocalStorage = settings.value( "browser/enablelocalstorage", false ).toBool(); m_browserEnableRemoteContent = settings.value( "browser/enableremotecontent", false ).toBool(); m_browserHighlightSearchResults = settings.value( "browser/highlightsearchresults", true ).toBool(); m_tocOpenAllEntries = settings.value( "browser/tocopenallentries", true ).toBool(); m_tabUseSingleClick = settings.value( "browser/tabusesingleclick", true ).toBool(); QDir dir; dir.setPath (m_datapath); if ( !dir.exists() && !dir.mkdir(m_datapath) ) qWarning( "Could not create directory %s", qPrintable( m_datapath )); } void Config::save( ) { QSettings settings; settings.setValue( "settings/onstartup", m_startupMode ); settings.setValue( "settings/onnewchm", m_onNewChmClick ); settings.setValue( "settings/onexternal", m_onExternalLinkClick ); settings.setValue( "settings/maxrecentfiles", m_numOfRecentFiles ); settings.setValue( "settings/extrahistory", m_HistoryStoreExtra ); settings.setValue( "advanced/internaleditor", m_advUseInternalEditor ); settings.setValue( "advanced/layoutltr", m_advLayoutDirectionRL ); settings.setValue( "advanced/autodetectenc", m_advAutodetectEncoding ); settings.setValue( "advanced/editorpath", m_advExternalEditorPath ); settings.setValue( "advanced/checknewver", m_advCheckNewVersion ); settings.setValue( "advanced/toolbarmode", m_toolbarMode ); settings.setValue( "advanced/lastopendir", m_lastOpenedDir ); settings.setValue( "browser/enablejs", m_browserEnableJS ); settings.setValue( "browser/enablejava", m_browserEnableJava ); settings.setValue( "browser/enableplugins", m_browserEnablePlugins ); settings.setValue( "browser/enableimages", m_browserEnableImages ); settings.setValue( "browser/enableofflinestorage", m_browserEnableOfflineStorage ); settings.setValue( "browser/enablelocalstorage", m_browserEnableLocalStorage ); settings.setValue( "browser/enableremotecontent", m_browserEnableRemoteContent ); settings.setValue( "browser/highlightsearchresults", m_browserHighlightSearchResults ); settings.setValue( "browser/tocopenallentries", m_tocOpenAllEntries ); settings.setValue( "browser/tabusesingleclick", m_tabUseSingleClick ); } QString Config::getEbookSettingFile(const QString &ebookfile ) const { QFileInfo finfo ( ebookfile ); QString prefix = pConfig->m_datapath + QDir::separator() + finfo.completeBaseName(); return prefix + ".kchmviewer"; } QString Config::getEbookIndexFile(const QString &ebookfile) const { QFileInfo finfo ( ebookfile ); QString prefix = pConfig->m_datapath + "/" + finfo.completeBaseName(); return prefix + ".idx"; } kchmviewer-7.5/src/PaxHeaders.8614/CMakeLists.txt0000644000000000000000000000012412322425122016533 xustar0027 mtime=1397369426.255372 27 atime=1447562193.152734 30 ctime=1447562193.159734199 kchmviewer-7.5/src/CMakeLists.txt0000644000175000001440000000214412322425122017064 0ustar00timusers00000000000000INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR}/src ) # Project files SET( kchmviewerSources config.cpp dbus_interface.cpp dialog_chooseurlfromlist.cpp dialog_setup.cpp kde-qt.cpp main.cpp mainwindow.cpp recentfiles.cpp settings.cpp tab_bookmarks.cpp tab_contents.cpp tab_index.cpp tab_search.cpp viewwindow.cpp viewwindowmgr.cpp navigationpanel.cpp checknewversion.cpp toolbarmanager.cpp toolbareditor.cpp qwebviewnetwork.cpp textencodings.cpp treeitem_toc.cpp treeitem_index.cpp ) # UI files KDE4_ADD_UI_FILES( kchmviewerSources dialog_about.ui dialog_setup.ui dialog_topicselector.ui mainwindow.ui navigatorpanel.ui tab_bookmarks.ui tab_contents.ui tab_index.ui tab_search.ui toolbareditor.ui window_browser.ui ) # Resources QT4_ADD_RESOURCES( kchmviewerResources resources/images.qrc ) KDE4_ADD_EXECUTABLE( kchmviewer ${kchmviewerSources} ${kchmviewerResources} ) TARGET_LINK_LIBRARIES( kchmviewer ebook ${LIBCHM_LIBRARY} ${LIBZIP_LIBRARY} ${KDE4_KDEUI_LIBS} ${QT_QTWEBKIT_LIBRARY} ${KDE4_KFILE_LIBS} ) INSTALL( TARGETS kchmviewer DESTINATION ${KDE4_BIN_INSTALL_DIR} ) kchmviewer-7.5/src/PaxHeaders.8614/treeitem_toc.h0000644000000000000000000000012412321077735016643 xustar0027 mtime=1396998109.567818 27 atime=1447562193.227733 30 ctime=1447562193.227733274 kchmviewer-7.5/src/treeitem_toc.h0000644000175000001440000000265212321077735017200 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef TREEITEM_TOC_H #define TREEITEM_TOC_H #include class TreeItem_TOC : public QTreeWidgetItem { public: TreeItem_TOC( QTreeWidgetItem* parent, QTreeWidgetItem* after, const QString& name, const QUrl& url, int image ); TreeItem_TOC( QTreeWidget* parent, QTreeWidgetItem* after, const QString& name, const QUrl& url, int image ); QUrl getUrl() const; bool containstUrl(const QUrl& url , bool ignorefragment ) const; // Overridden methods int columnCount () const; QVariant data ( int column, int role ) const; private: QString m_name; QUrl m_url; int m_image; }; #endif // TREEITEM_TOC_H kchmviewer-7.5/src/PaxHeaders.8614/settings.h0000644000000000000000000000012212416601767016021 xustar0027 mtime=1413153783.882419 27 atime=1447562193.225733 28 ctime=1447562193.2257333 kchmviewer-7.5/src/settings.h0000644000175000001440000000431012416601767016351 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef SETTINGS_H #define SETTINGS_H #include #include class Settings { public: Settings(); bool loadSettings (const QString& filename); bool saveSettings ( ); void removeSettings ( const QString& filename ); QString searchIndexFile() const { return m_searchIndex; } class SavedBookmark { public: SavedBookmark() { scroll_y = 0; } SavedBookmark ( const QString& n, const QString& u, int y) : name(n), url(u), scroll_y(y) {}; QString name; QString url; int scroll_y; }; class SavedViewWindow { public: SavedViewWindow() { scroll_y = 0; zoom = 0.0; } SavedViewWindow ( const QString& u, int y, qreal z) : url(u), scroll_y(y), zoom(z) {}; QString url; int scroll_y; qreal zoom; }; typedef QList search_saved_settings_t; typedef QList bookmark_saved_settings_t; typedef QList viewindow_saved_settings_t; int m_window_size_x; int m_window_size_y; int m_window_size_splitter; int m_activetabsystem; int m_activetabwindow; QString m_activeEncoding; search_saved_settings_t m_searchhistory; bookmark_saved_settings_t m_bookmarks; viewindow_saved_settings_t m_viewwindows; private: unsigned int m_currentfilesize; unsigned int m_currentfiledate; QString m_settingsFile; QString m_searchIndex; }; #endif kchmviewer-7.5/src/PaxHeaders.8614/tab_bookmarks.h0000644000000000000000000000012212321077735016774 xustar0027 mtime=1396998109.567818 27 atime=1447562193.225733 28 ctime=1447562193.2257333 kchmviewer-7.5/src/tab_bookmarks.h0000644000175000001440000000322412321077735017327 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef TAB_BOOKMARK_H #define TAB_BOOKMARK_H #include "kde-qt.h" #include "settings.h" #include "ui_tab_bookmarks.h" class TabBookmarks : public QWidget, public Ui::TabBookmarks { Q_OBJECT public: TabBookmarks( QWidget *parent ); void createMenu( QMenu * menuBookmarks ); void restoreSettings ( const Settings::bookmark_saved_settings_t& settings ); void saveSettings ( Settings::bookmark_saved_settings_t& settings ); void invalidate(); void focus(); public slots: void onAddBookmarkPressed (); private slots: void actionBookmarkActivated(); void onDelBookmarkPressed( ); void onEditBookmarkPressed( ); void onItemActivated ( QListWidgetItem* ); void onContextMenuRequested ( const QPoint &point ); private: QMenu * m_menuBookmarks; QMenu * m_contextMenu; QString m_bookmarkFileName; bool m_listChanged; }; #endif kchmviewer-7.5/src/PaxHeaders.8614/checknewversion.cpp0000644000000000000000000000012412321077735017710 xustar0027 mtime=1396998109.567818 27 atime=1447562193.159734 30 ctime=1447562193.159734199 kchmviewer-7.5/src/checknewversion.cpp0000644000175000001440000002115512321077735020244 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include #include #include #if !defined (WIN32) #include #include #include #include #include #include #else #include #endif #include "checknewversion.h" // Uncomment this to enable debugging messages //#define ENABLE_DEBUG_MESSAGES CheckNewVersion::CheckNewVersion() : QThread() { m_sockfd = -1; m_timeout = 180; m_inputOffset = 0; m_inputBuffer.resize( 8192 ); qRegisterMetaType< NewVersionMetaMap >("NewVersionMetaMap"); } void CheckNewVersion::setUrl( const QString& url ) { m_url = url; } void CheckNewVersion::setCurrentVersion( const QString& version ) { m_currentversion = version; } void CheckNewVersion::closeSocket() { if ( m_sockfd == -1 ) return; #if defined (WIN32) closesocket( m_sockfd ); #else close( m_sockfd ); #endif m_sockfd = -1; } void CheckNewVersion::fatalError( int code ) { #if defined (ENABLE_DEBUG_MESSAGES) #define CASE_PRINT(A) case A: qDebug("CheckNewVersion::fatalError( " #A " )"); break; switch ( code ) { CASE_PRINT( Error_URL_Invalid ); CASE_PRINT( Error_Name_Lookup ); CASE_PRINT( Error_System ); CASE_PRINT( Error_Connecting ); CASE_PRINT( Error_Sending ); CASE_PRINT( Error_Receiving ); CASE_PRINT( Error_HTTPerror ); CASE_PRINT( Error_InvalidFormat ); CASE_PRINT( Error_InvalidSignature ); } #undef CASE_PRINT #endif closeSocket(); emit error( code ); deleteLater(); } void CheckNewVersion::reportStatus( int status ) { #if defined (ENABLE_DEBUG_MESSAGES) #define CASE_PRINT(A) case A: qDebug("CheckNewVersion::reportStatus( " #A " )"); break; switch ( status ) { CASE_PRINT( Status_Resolving ); CASE_PRINT( Status_Connecting ); CASE_PRINT( Status_SendingRequest ); CASE_PRINT( Status_ReceivingResponse ); CASE_PRINT( Status_Proceeding ); CASE_PRINT( Status_Finished ); } #undef CASE_PRINT #endif emit statusChanged( status ); } void CheckNewVersion::run() { m_inputOffset = 0; // Validate the URL QUrl url( m_url ); if ( !url.isValid() || url.scheme() != "http" || url.host().isEmpty() ) { fatalError( Error_URL_Invalid ); return; } // Win32s-specific socket initialization #if defined (WIN32) WORD wVersionRequested = MAKEWORD (1, 1); WSADATA wsaData; if ( WSAStartup (wVersionRequested, &wsaData) != 0 ) { fatalError( Error_System ); return; } #endif // IPv4 address resolving struct sockaddr_in saddr; memset( &saddr, 0, sizeof(saddr) ); saddr.sin_family = AF_INET; saddr.sin_port = htons( url.port(80) ); saddr.sin_addr.s_addr = ::inet_addr ( qPrintable(url.host() ) ); if ( saddr.sin_addr.s_addr == INADDR_NONE ) { reportStatus( Status_Resolving ); struct hostent *hp; #if defined HAVE_GETHOSTBYNAME_R int tmp_errno; struct hostent tmp_hostent; char buf[2048]; if ( ::gethostbyname_r( qPrintable(url.host() ), &tmp_hostent, buf, sizeof(buf), &hp, &tmp_errno) ) hp = 0; #else hp = ::gethostbyname( qPrintable(url.host() ) ); #endif // HAVE_GETHOSTBYNAME_R if ( !hp ) { fatalError( Error_Name_Lookup ); return; } ::memcpy (&saddr.sin_addr, hp->h_addr, (size_t) hp->h_length); } // create the socket m_sockfd = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); if ( m_sockfd < 0 ) { fatalError( Error_System ); return; } reportStatus( Status_Connecting ); // Connect to the HTTP server if ( ::connect( m_sockfd, (struct sockaddr *) &saddr, sizeof(saddr)) ) { fatalError( Error_Connecting ); return; } // Prepare the HTTP request QString request = QString("GET %1 HTTP/1.1\r\n" "Host: %2\r\n" "User-Agent: Qt/New version checker (www.karlyriceditor.com)\r\nConnection: close\r\n\r\n") .arg( url.path() ) .arg( url.host() ); // Send the request reportStatus( Status_SendingRequest ); const char * reqmsg = qPrintable( request ); unsigned int offset = 0, length = strlen( reqmsg ); while ( offset < length ) { int sentamount = ::send( m_sockfd, reqmsg + offset, length - offset, 0 ); if ( sentamount <= 0 ) { fatalError( Error_Sending ); return; } offset += sentamount; } // Receive the response reportStatus( Status_ReceivingResponse ); // First, receive the HTTP header int contentlen = -1; QStringList header; while ( 1 ) { QString line = readLine(); // Has connection closed? if ( m_sockfd == -1 ) { fatalError( Error_Receiving ); return; } // Empty line separates header and body if ( line.isEmpty() ) break; header.push_back( line ); } // Make sure server didn't return error if ( header.isEmpty() || header[0].indexOf( QRegExp( "^http/1.\\d\\s+2\\d\\d", Qt::CaseInsensitive )) == -1 ) { #if defined (ENABLE_DEBUG_MESSAGES) if ( !header.isEmpty() ) qDebug("CheckNewVersion::run: server returned invalid header: %s", qPrintable( header[0]) ); #endif fatalError( Error_HTTPerror ); return; } // Find content-length QRegExp clr( "^content-length: (\\d+)$" ); clr.setCaseSensitivity( Qt::CaseInsensitive ); if ( header.indexOf( clr ) != -1 ) contentlen = clr.cap( 1 ).toInt(); // Read the rest of content until we have contentlen or connection closed while ( contentlen == -1 || contentlen < m_inputOffset ) { int amount = ::recv( m_sockfd, m_inputBuffer.data() + m_inputOffset, m_inputBuffer.size() - m_inputOffset, 0 ); // connection closed? if ( amount == 0 ) break; // read error if ( amount < 0 ) { fatalError( Error_Receiving ); return; } m_inputOffset += amount; } closeSocket(); m_inputBuffer[ m_inputOffset ] ='\0'; // Remove/replace line ends, and convert to a string reportStatus( Status_Proceeding ); m_inputBuffer.replace( '\r', '\n' ); QStringList content_list = QString::fromUtf8( m_inputBuffer ).split( '\n', QString::SkipEmptyParts ); QMap contentMap; // Validate the file, and parse it into map for ( int i = 0; i < content_list.size(); i++ ) { QRegExp reg( "^(\\w+)\\s*:(.*)$" ); if ( content_list[i].indexOf( reg ) == -1 ) { #if defined (ENABLE_DEBUG_MESSAGES) qDebug("CheckNewVersion::run: invalid line found: '%s'", qPrintable( content_list[i] ) ); #endif fatalError( Error_InvalidFormat ); return; } // Decode \n back to 0x0A QString value = reg.cap( 2 ).trimmed(); value.replace( "\\n", "\n" ); value.replace( "\\\\", "\\" ); contentMap[ reg.cap(1) ] = value; } // Validate signature if ( !contentMap.contains( "Signature" ) || !contentMap.contains( "Version" ) || contentMap["Signature"] != "CheckNewVersion1" ) { fatalError( Error_InvalidSignature ); return; } contentMap.remove( "Signature" ); // Do we need to call the callback? if ( m_currentversion.isEmpty() || contentMap["Version"] != m_currentversion ) emit newVersionAvailable( contentMap ); reportStatus( Status_Finished ); deleteLater(); } QString CheckNewVersion::readLine() { while ( 1 ) { // First check if we have a line in buffer already if ( m_inputOffset > 0 ) { for ( int i = 0; i < m_inputOffset - 1; i++ ) { if ( m_inputBuffer[i] == '\r' && m_inputBuffer[i+1] == '\n' ) { // Null-terminate the buffer, and copy the string m_inputBuffer[i] = '\0'; QString line = QString::fromUtf8( m_inputBuffer ); // Now move the rest of the buffer if something left unsigned int amount = i + 2; // removing CRLF too) m_inputOffset -= amount; if ( m_inputOffset > 0 ) memmove( m_inputBuffer.data(), m_inputBuffer.data() + amount, m_inputOffset ); return line; } } } // No line in buffer yet if ( m_inputOffset + 1 > m_inputBuffer.size() ) return QString::null; int bytes = ::recv( m_sockfd, m_inputBuffer.data() + m_inputOffset, m_inputBuffer.size() - m_inputOffset, 0 ); // Error; restart on EINTR, abort on anything else if ( bytes < 0 ) { if ( errno == EINTR ) continue; break; } if ( bytes == 0 ) break; m_inputOffset += bytes; } return QString::null; } kchmviewer-7.5/src/PaxHeaders.8614/tab_bookmarks.ui0000644000000000000000000000012211365252422017155 xustar0027 mtime=1272272146.537538 27 atime=1447562193.225733 28 ctime=1447562193.2257333 kchmviewer-7.5/src/tab_bookmarks.ui0000644000175000001440000000253711365252422017516 0ustar00timusers00000000000000 TabBookmarks 0 0 257 296 9 6 0 6 &Add Edi&t &Del kchmviewer-7.5/src/PaxHeaders.8614/treeitem_index.h0000644000000000000000000000012412321154504017153 xustar0027 mtime=1397020996.536725 27 atime=1447562193.227733 30 ctime=1447562193.227733274 kchmviewer-7.5/src/treeitem_index.h0000644000175000001440000000301612321154504017503 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef TREEITEM_INDEX_H #define TREEITEM_INDEX_H #include class TreeItem_Index : public QTreeWidgetItem { public: TreeItem_Index( QTreeWidgetItem* parent, QTreeWidgetItem* after, const QString& name, const QList& urls, const QString& seealso ); TreeItem_Index( QTreeWidget* parent, QTreeWidgetItem* after, const QString& name, const QList& urls, const QString& seealso ); QUrl getUrl() const; bool containstUrl( const QUrl& url ) const; bool isSeeAlso() const; QString seeAlso() const; // Overridden methods int columnCount () const; QVariant data ( int column, int role ) const; private: QString m_name; QList m_urls; QString m_seealso; }; #endif // TREEITEM_INDEX_H kchmviewer-7.5/src/PaxHeaders.8614/mainwindow.cpp0000644000000000000000000000012412622005640016655 xustar0027 mtime=1447562144.157048 27 atime=1447562193.164734 30 ctime=1447562193.164734131 kchmviewer-7.5/src/mainwindow.cpp0000644000175000001440000012310712622005640017211 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include #include #include #include #include #include "kde-qt.h" #include "mainwindow.h" #include "config.h" #include "settings.h" #include "viewwindow.h" #include "viewwindowmgr.h" #include "dialog_setup.h" #include "recentfiles.h" #include "navigationpanel.h" #include "toolbarmanager.h" #include "version.h" #include "textencodings.h" #include "ui_dialog_about.h" #ifdef Q_WS_X11 #include #include #endif // Maximum memory size for inter-application communication static const int SHARED_MEMORY_SIZE = 4096; static const unsigned int WINDOW_DEFAULT_X_SIZE = 900; static const unsigned int WINDOW_DEFAULT_Y_SIZE = 700; MainWindow::MainWindow( const QStringList& arguments ) : QMainWindow ( 0 ), Ui::MainWindow() { const unsigned int SPLT_X_SIZE = 300; m_arguments = arguments; // Delete the pointer when the window is closed setAttribute( Qt::WA_DeleteOnClose ); // UIC stuff setupUi( this ); // Set up layout direction if ( pConfig->m_advLayoutDirectionRL ) qApp->setLayoutDirection( Qt::RightToLeft ); else qApp->setLayoutDirection( Qt::LeftToRight ); m_ebookFile = 0; m_autoteststate = STATE_OFF; m_sharedMemory = 0; m_currentSettings = new Settings(); // Create the view window, which is a central widget m_viewWindowMgr = new ViewWindowMgr( this ); setCentralWidget( m_viewWindowMgr ); // Create a navigation panel m_navPanel = new NavigationPanel( this ); // Add navigation dock m_navPanel->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea ); addDockWidget( Qt::LeftDockWidgetArea, m_navPanel, Qt::Vertical ); // Set up toolbar manager m_toolbarMgr = new ToolbarManager( this ); m_toolbarMgr->queryAvailableActions( this ); m_toolbarMgr->addManaged( mainToolbar ); m_toolbarMgr->addManaged( navToolbar ); m_toolbarMgr->addManaged( viewToolbar ); m_toolbarMgr->load(); // Set up other things setupActions(); updateToolbars(); setupLangEncodingMenu(); // Resize main window and dock resize( WINDOW_DEFAULT_X_SIZE, WINDOW_DEFAULT_Y_SIZE ); m_navPanel->resize( SPLT_X_SIZE, m_navPanel->height() ); statusBar()->show(); qApp->setWindowIcon( QPixmap(":/images/kchmviewer.png") ); if ( pConfig->m_numOfRecentFiles > 0 ) { m_recentFiles = new RecentFiles( menu_File, file_exit_action, pConfig->m_numOfRecentFiles ); connect( m_recentFiles, SIGNAL(openRecentFile(QString)), this, SLOT(actionOpenRecentFile(QString)) ); } else m_recentFiles = 0; // Basically disable everything updateActions(); } MainWindow::~MainWindow() { // Temporary files cleanup while ( !m_tempFileKeeper.isEmpty() ) delete m_tempFileKeeper.takeFirst(); delete m_sharedMemory; } void MainWindow::launch() { QTimer::singleShot( 0, this, SLOT( firstShow()) ); } bool MainWindow::hasSameTokenInstance() { // Find out if token has been specified as this would mean we're running in a single instance mode QString token; // argv[0] in Qt is still a program name for ( int i = 1; i < m_arguments.size(); i++ ) { // This is not bulletproof (think -showPage -token) but this is not likely to happen if ( m_arguments[i] == "-token") { token = m_arguments[++i]; break; } } if ( token.isEmpty() ) return false; m_sharedMemory = new QSharedMemory( token ); // If we can attach to it, the segment already exists if ( m_sharedMemory->attach() ) { // Another instance exists; send the command-line there QByteArray args = m_arguments.join("|").toLocal8Bit(); if ( args.size() < SHARED_MEMORY_SIZE - 2 ) { // Write the size first, then the string if ( m_sharedMemory->lock() ) { char * data = (char*) m_sharedMemory->data(); *((short*)data) = args.size(); memcpy( data + 2, args.data(), args.size() ); m_sharedMemory->unlock(); } else qDebug("failed to lock"); } // Clean up delete m_sharedMemory; m_sharedMemory = 0; return true; } // Create a new segment if ( !m_sharedMemory->create( SHARED_MEMORY_SIZE ) ) { QMessageBox::critical( 0, i18n("Shared memory segment failed"), i18n("Failed to create a shared memory segment: %1").arg( m_sharedMemory->errorString()) ); return false; } // Set it up so our checker knows there's no data yet *((short*) m_sharedMemory->data()) = 0; // Recheck every second QTimer * timer = new QTimer( this ); connect( timer, SIGNAL(timeout()), this, SLOT(checkForSharedMemoryMessage())); timer->start(1000); return false; } void MainWindow::checkForSharedMemoryMessage() { QStringList args; m_sharedMemory->lock(); // Is there any data? char * data = (char*) m_sharedMemory->data(); if ( data[0] != 0 || data[1] != 0 ) { // Get the message length and the message short len = *((short*) data); args = QString::fromLocal8Bit( data + 2, len ).split( "|" ); // Clean up *((short*) data) = 0; } m_sharedMemory->unlock(); // And process it if we find anything if ( !args.isEmpty() ) parseCmdLineArgs( args, true ); } void MainWindow::checkNewVersionAvailable() { // Create a New version available object if necessary. This object will auto-delete itself CheckNewVersion * pNewVer = new CheckNewVersion(); connect( pNewVer, SIGNAL(error(int)), this, SLOT(newVerAvailError(int)) ); connect( pNewVer, SIGNAL(newVersionAvailable( NewVersionMetaMap )), this, SLOT(newVerAvailable(NewVersionMetaMap)) ); pNewVer->setUrl( "http://www.kchmviewer.net/latestversion.txt" ); pNewVer->start(); } bool MainWindow::loadFile ( const QString &loadFileName, bool call_open_page ) { QString fileName = loadFileName; // Strip file:// prefix if any if ( fileName.startsWith( "file://" ) ) fileName.remove( 0, 7 ); EBook * new_ebook = EBook::loadFile( fileName ); if ( new_ebook ) { // The new file is opened, so we can close the old one if ( m_ebookFile ) { closeFile( ); delete m_ebookFile; } m_ebookFile = new_ebook; updateActions(); // Show current encoding in status bar if ( m_ebookFile->hasFeature( EBook::FEATURE_ENCODING ) ) showInStatusBar( i18n("Detected file encoding: %1 ( %2 )") .arg( TextEncodings::languageForCodec( m_ebookFile->currentEncoding() )) .arg( m_ebookFile->currentEncoding() ) ); // Make the file name absolute; we'll need it later QDir qd; qd.setPath (fileName); m_ebookFilename = qd.absolutePath(); // Qt's 'dirname' does not work well QFileInfo qf ( m_ebookFilename ); pConfig->m_lastOpenedDir = qf.dir().path(); m_ebookFileBasename = qf.fileName(); // Apply settings to the navigation dock m_navPanel->updateTabs( m_ebookFile ); // and to navigation buttons nav_actionPreviousPage->setEnabled( hasTableOfContents() ); nav_actionNextPageToc->setEnabled( hasTableOfContents() ); navSetBackEnabled( false ); navSetForwardEnabled( false ); m_viewWindowMgr->invalidate(); refreshCurrentBrowser(); if ( m_currentSettings->loadSettings (fileName) ) { if ( m_ebookFile->hasFeature( EBook::FEATURE_ENCODING ) ) setTextEncoding(m_currentSettings->m_activeEncoding ); m_navPanel->applySettings( m_currentSettings ); if ( call_open_page ) { m_viewWindowMgr->restoreSettings( m_currentSettings->m_viewwindows ); m_viewWindowMgr->setCurrentPage( m_currentSettings->m_activetabwindow ); if ( m_ebookFile->hasFeature( EBook::FEATURE_TOC ) ) actionLocateInContentsTab(); } // Restore the main window size resize( m_currentSettings->m_window_size_x, m_currentSettings->m_window_size_y ); m_navPanel->resize( m_currentSettings->m_window_size_splitter, m_navPanel->height() ); m_navPanel->setActive( NavigationPanel::TAB_CONTENTS ); } else { m_navPanel->setActive( NavigationPanel::TAB_CONTENTS ); if ( m_ebookFile->hasFeature( EBook::FEATURE_ENCODING ) ) setTextEncoding( m_ebookFile->currentEncoding() ); if ( call_open_page ) openPage( m_ebookFile->homeUrl() ); } // Disable the menu if ebook format doesn't support encoding changes view_Set_encoding_action->setEnabled( m_ebookFile->hasFeature( EBook::FEATURE_ENCODING ) ); if ( m_recentFiles ) m_recentFiles->setCurrentFile( m_ebookFilename ); return true; } else { QMessageBox mbox( i18n("%1 - failed to load the chm file") . arg(QCoreApplication::applicationName() ), i18n("Unable to load the chm file %1") . arg(fileName), QMessageBox::Critical, QMessageBox::Ok, Qt::NoButton, Qt::NoButton); mbox.exec(); statusBar()->showMessage( i18n("Could not load file %1").arg(fileName), 2000 ); return false; } } void MainWindow::refreshCurrentBrowser( ) { QString title = m_ebookFile->title(); if ( title.isEmpty() ) title = QCoreApplication::applicationName(); // KDE adds application name automatically, so we don't need it here #if !defined (USE_KDE) else title = (QString) QCoreApplication::applicationName() + " - " + title; #endif setWindowTitle( title ); currentBrowser()->invalidate(); m_navPanel->refresh(); } void MainWindow::activateUrl( const QUrl & link ) { if ( link.isEmpty() ) return; Qt::KeyboardModifiers mods = QApplication::keyboardModifiers(); if ( mods & Qt::ShiftModifier ) openPage( link, OPF_NEW_TAB | OPF_CONTENT_TREE ); else if ( mods & Qt::ControlModifier ) openPage( link, OPF_NEW_TAB | OPF_BACKGROUND ); else openPage( link, OPF_CONTENT_TREE ); } bool MainWindow::openPage( const QUrl& url, unsigned int flags ) { QString otherlink; // Feed to the browser all non-internal URLs if ( !m_ebookFile->isSupportedUrl( url ) ) { switch ( pConfig->m_onExternalLinkClick ) { case Config::ACTION_DONT_OPEN: break; case Config::ACTION_ASK_USER: if ( QMessageBox::question(this, i18n("%1 - remote link clicked - %2") . arg(QCoreApplication::applicationName()) . arg(otherlink), i18n("A remote link %1 will start the external program to open it.\n\nDo you want to continue?").arg( url.toString() ), i18n("&Yes"), i18n("&No"), QString::null, 0, 1 ) ) return false; // no break! should continue to open. case Config::ACTION_ALWAYS_OPEN: #if defined (USE_KDE) new KRun ( url, 0 ); #else QDesktopServices::openUrl( url ); #endif break; } return false; // do not change the current page. } ViewWindow * vwnd = currentBrowser(); if ( flags & OPF_NEW_TAB ) { vwnd = m_viewWindowMgr->addNewTab( !(flags & OPF_BACKGROUND) ); vwnd->setZoomFactor( currentBrowser()->zoomFactor() ); } if ( vwnd->openUrl (url) ) { // Open all the tree items to show current item (if needed) if ( (flags & OPF_CONTENT_TREE) != 0 ) m_navPanel->findUrlInContents( url ); } // Focus on the view window so keyboard scroll works; do not do it for the background tabs if ( (flags & OPF_BACKGROUND) == 0 ) vwnd->setFocus( Qt::OtherFocusReason ); return true; } void MainWindow::firstShow() { if ( !parseCmdLineArgs( m_arguments ) ) { if ( m_recentFiles && pConfig->m_startupMode == Config::STARTUP_LOAD_LAST_FILE && !m_recentFiles->latestFile().isEmpty() ) { loadFile( m_recentFiles->latestFile() ); return; } if ( pConfig->m_startupMode == Config::STARTUP_POPUP_OPENFILE ) actionOpenFile(); } } void MainWindow::setTextEncoding( const QString& encoding ) { m_ebookFile->setCurrentEncoding( qPrintable( encoding ) ); // Find the appropriate encoding item in "Set encodings" menu const QList encodings = m_encodingActions->actions(); for ( QList::const_iterator it = encodings.begin(); it != encodings.end(); ++it ) { if ( (*it)->data().toString() == encoding ) { if ( !(*it)->isChecked() ) (*it)->setChecked( true ); break; } } // Because updateView() will call view->invalidate(), which clears the view->getOpenedPage(), // we have to make a copy of it. QUrl url = currentBrowser()->getOpenedPage(); // Regenerate the content and index trees refreshCurrentBrowser(); currentBrowser()->openUrl( url ); } void MainWindow::closeFile( ) { // Prepare the settings if ( pConfig->m_HistoryStoreExtra ) { if ( m_ebookFile->hasFeature( EBook::FEATURE_ENCODING ) ) m_currentSettings->m_activeEncoding = m_ebookFile->currentEncoding(); m_currentSettings->m_activetabwindow = m_viewWindowMgr->currentPageIndex( ); m_currentSettings->m_window_size_x = width(); m_currentSettings->m_window_size_y = height(); #ifdef Q_OS_WIN // On Windows if the window is maximised or minimized, the WM will not restore positions/state, // so we reset to default size if ( isMaximized() || isMinimized() ) { m_currentSettings->m_window_size_x = WINDOW_DEFAULT_X_SIZE; m_currentSettings->m_window_size_y = WINDOW_DEFAULT_Y_SIZE; } #endif m_currentSettings->m_window_size_splitter = m_navPanel->width(); m_navPanel->getSettings( m_currentSettings ); m_viewWindowMgr->saveSettings( m_currentSettings->m_viewwindows ); m_currentSettings->saveSettings( ); } pConfig->save(); } void MainWindow::closeEvent ( QCloseEvent * e ) { // Save the settings if we have something opened if ( m_ebookFile ) { closeFile( ); delete m_ebookFile; m_ebookFile = 0; } // Save toolbars m_toolbarMgr->save(); QMainWindow::closeEvent ( e ); } void MainWindow::printHelpAndExit() { fprintf (stderr, "Usage: %s [options] [helpfile]\n" " The following options supported:\n" " -showPage opens the url in the help file\n" " -index searches for text in the Index tab\n" " -search searches for query in the Search tab, and activate the first entry if found\n" " -token specifies the application token; see the integration reference\n" " -background start minimized\n" " -novcheck disable check for new version even if enabled in configuration\n" , qPrintable( m_arguments[0] ) ); exit (1); } bool MainWindow::parseCmdLineArgs(const QStringList& args , bool from_another_app ) { QString filename, search_query, search_index, open_url, search_toc; bool do_autotest = false, disable_vcheck = false, force_background = false; // argv[0] in Qt is still a program name for ( int i = 1; i < args.size(); i++ ) { if ( args[i] == "-h" || args[i] == "--help" ) printHelpAndExit(); else if ( args[i] == "--autotestmode" || args[i] == "--shortautotestmode" ) do_autotest = true; else if ( args[i] == "--search" || args[i] == "-search" ) search_query = args[++i]; else if ( args[i] == "--sindex" || args[i] == "-index" ) search_index = args[++i]; else if ( args[i] == "--stoc" ) search_toc = args[++i]; else if ( args[i] == "-token" ) i++; // ignore else if ( args[i] == "-background" ) force_background = true; else if ( args[i] == "-novcheck" ) disable_vcheck = true; else if ( args[i] == "-v" || args[i] == "--version" ) { printf("kchmviewer version %d.%d built at %s %s\n", APP_VERSION_MAJOR, APP_VERSION_MINOR, __DATE__, __TIME__ ); exit( 0 ); } else if ( args[i] == "--url" || args[i] == "-showPage" ) open_url = args[++i]; else { if ( filename.isEmpty() ) filename = args[i]; else { // Don't quit just because wrong CL was passed if ( from_another_app ) return false; fprintf (stderr, "Invalid command-line option %s (ebook filename is already specified as %s)\n", qPrintable( filename ), qPrintable( args[i] ) ); printHelpAndExit(); } } } // Check for a new version if needed if ( pConfig->m_advCheckNewVersion && !disable_vcheck ) { QSettings settings; if ( settings.contains( "advanced/lastupdate" ) ) { QDateTime lastupdate = settings.value( "advanced/lastupdate" ).toDateTime(); if ( lastupdate.secsTo( QDateTime::currentDateTime() ) >= 86400 * 7 ) // seven days checkNewVersionAvailable(); } } // Opening the file? if ( !filename.isEmpty() ) { // If we have already opened the same file, no need to reopen it again if ( !m_ebookFile || QDir(m_ebookFilename) != QDir(filename) ) if ( !loadFile( filename ) ) return true; // skip the latest checks, but do not exit from the program if ( !open_url.isEmpty() ) { QStringList event_args; event_args.push_back( m_ebookFile->pathToUrl(open_url).toString() ); qApp->postEvent( this, new UserEvent( "openPage", event_args ) ); } else if ( !search_index.isEmpty() ) { QStringList event_args; event_args.push_back( search_index ); qApp->postEvent( this, new UserEvent( "findInIndex", event_args ) ); } else if ( !search_query.isEmpty() ) { QStringList event_args; event_args.push_back( search_query ); qApp->postEvent( this, new UserEvent( "searchQuery", event_args ) ); } else if ( !search_toc.isEmpty() ) { QStringList event_args; event_args.push_back( search_toc ); qApp->postEvent( this, new UserEvent( "findInToc", event_args ) ); } if ( do_autotest ) { if ( filename.isEmpty() ) qFatal ("Could not use Auto Test mode without a chm file!"); m_autoteststate = STATE_INITIAL; showMinimized (); runAutoTest(); } if ( force_background ) showMinimized(); else if ( from_another_app ) { #ifdef Q_WS_X11 // On Linux - at least on KDE - activating the foreground window // via activateWindow(); raise(); only works twice. Then it does not // work anymore, most likely because of some internal counter in Qt. // The code below, however, works fine. Display * display = x11Info().display(); WId win = winId(); XEvent event = { 0 }; event.xclient.type = ClientMessage; event.xclient.serial = 0; event.xclient.send_event = True; event.xclient.message_type = XInternAtom( display, "_NET_ACTIVE_WINDOW", False); event.xclient.window = win; event.xclient.format = 32; XSendEvent( display, DefaultRootWindow(display), False, SubstructureRedirectMask | SubstructureNotifyMask, &event ); XMapRaised( display, win ); #else // On Windows it is not possible to activate the window of a non-active process. From MSDN: // https://msdn.microsoft.com/en-us/library/windows/desktop/ms633539%28v=vs.85%29.aspx // // An application cannot force a window to the foreground while the user is working with another window. // Instead, Windows flashes the taskbar button of the window to notify the user. activateWindow(); raise(); show(); #endif } return true; } return false; } ViewWindow * MainWindow::currentBrowser( ) const { return m_viewWindowMgr->current(); } void MainWindow::onOpenPageInNewTab( ) { openPage( currentBrowser()->getNewTabLink(), OPF_NEW_TAB | OPF_CONTENT_TREE ); } void MainWindow::onOpenPageInNewBackgroundTab( ) { openPage( currentBrowser()->getNewTabLink(), OPF_NEW_TAB | OPF_BACKGROUND ); } void MainWindow::browserChanged( ViewWindow * newbrowser ) { m_navPanel->findUrlInContents( newbrowser->getOpenedPage() ); } bool MainWindow::event( QEvent * e ) { if ( e->type() == QEvent::User ) return handleUserEvent( (UserEvent*) e ); return QMainWindow::event( e ); } bool MainWindow::handleUserEvent( const UserEvent * event ) { if ( event->m_action == "loadAndOpen" ) { if ( event->m_args.size() != 1 && event->m_args.size() != 2 ) qFatal("handleUserEvent: event loadAndOpen must receive 1 or 2 args"); QString chmfile = event->m_args[0]; QString openurl = event->m_args.size() > 1 ? event->m_args[1] : "/"; return loadFile( chmfile, false ) && openPage( openurl ); } else if ( event->m_action == "openPage" ) { if ( event->m_args.size() != 1 ) qFatal("handleUserEvent: event openPage must receive 1 arg"); return openPage( event->m_args[0] ); } else if ( event->m_action == "findInIndex" ) { if ( event->m_args.size() != 1 ) qFatal( "handleUserEvent: event findInIndex must receive 1 arg" ); if ( !hasIndex() ) return false; actionSwitchToIndexTab(); m_navPanel->findInIndex( event->m_args[0] ); return true; } else if ( event->m_action == "findInToc" ) { if ( event->m_args.size() != 1 ) qFatal( "handleUserEvent: event findInToc must receive 1 arg" ); if ( !hasTableOfContents() ) return false; actionSwitchToContentTab(); m_navPanel->findTextInContents( event->m_args[0] ); return true; } else if ( event->m_action == "searchQuery" ) { if ( event->m_args.size() != 1 ) qFatal( "handleUserEvent: event searchQuery must receive 1 arg" ); actionSwitchToSearchTab(); m_navPanel->executeQueryInSearch( event->m_args[0] ); return true; } else qWarning( "Unknown user event received: %s", qPrintable( event->m_action ) ); return false; } void MainWindow::runAutoTest() { switch (m_autoteststate) { case STATE_INITIAL: m_autoteststate = STATE_OPEN_INDEX; QTimer::singleShot (500, this, SLOT(runAutoTest()) ); break; // allow to finish the initialization sequence case STATE_OPEN_INDEX: if ( hasIndex() ) m_navPanel->setActive( NavigationPanel::TAB_INDEX ); m_autoteststate = STATE_SHUTDOWN; QTimer::singleShot (500, this, SLOT(runAutoTest()) ); break; case STATE_SHUTDOWN: qApp->quit(); break; default: break; } } void MainWindow::showInStatusBar(const QString & text) { statusBar()->showMessage( text, 2000 ); } void MainWindow::actionNavigateBack() { currentBrowser()->navigateBack(); } void MainWindow::actionNavigateForward() { currentBrowser()->navigateForward(); } void MainWindow::actionNavigateHome() { currentBrowser()->navigateHome(); } void MainWindow::actionOpenFile() { #if defined (USE_KDE) QString fn = KFileDialog::getOpenFileName( pConfig->m_lastOpenedDir, i18n("*.chm|Compressed Help Manual;*.epub|EPUB electronic book"), this); #else QString fn = QFileDialog::getOpenFileName( this, i18n( "Open a chm file"), pConfig->m_lastOpenedDir, i18n("Electronic books (*.chm *.epub)"), 0, QFileDialog::DontResolveSymlinks ); #endif if ( !fn.isEmpty() ) loadFile( fn ); } void MainWindow::actionPrint() { currentBrowser()->printCurrentPage(); } void MainWindow::actionEditCopy() { currentBrowser()->clipCopy(); } void MainWindow::actionEditSelectAll() { currentBrowser()->clipSelectAll(); } void MainWindow::actionFindInPage() { m_viewWindowMgr->onActivateFind(); } void MainWindow::actionChangeSettings() { DialogSetup dlg ( this ); dlg.exec(); } void MainWindow::actionExtractCHM() { QList< QUrl > files; #if defined (USE_KDE) QString outdir = KFileDialog::getExistingDirectory ( KUrl(), this, i18n("Choose a directory to store CHM content") ); #else QString outdir = QFileDialog::getExistingDirectory ( this, i18n("Choose a directory to store CHM content"), QString::null, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); #endif if ( outdir.isEmpty() ) return; outdir += "/"; // Enumerate all the files in archive if ( !m_ebookFile || !m_ebookFile->enumerateFiles( files ) ) return; KQProgressModalDialog progress( i18n("Extracting CHM content"), i18n("Extracting files..."), i18n("Abort"), files.size(), this ); for ( int i = 0; i < files.size(); i++ ) { progress.setValue( i ); if ( (i % 3) == 0 ) { qApp->processEvents(); if ( progress.wasCancelled() ) break; } // Extract the file QByteArray buf; if ( m_ebookFile->getFileContentAsBinary( buf, files[i] ) ) { // Split filename to get the list of subdirectories QStringList dirs = files[i].path().split( '/' ); // Walk through the list of subdirectories, and create them if needed // dirlevel is used to detect extra .. and prevent overwriting files // outside the directory (like creating the file images/../../../../../etc/passwd int i, dirlevel = 0; QStringList dirlist; for ( i = 0; i < dirs.size() - 1; i++ ) { // Skip .. which lead too far above if ( dirs[i] == ".." ) { if ( dirlevel > 0 ) { dirlevel--; dirlist.pop_back(); } } else { dirlist.push_back( dirs[i] ); QDir dir ( outdir + dirlist.join( "/" ) ); if ( !dir.exists() ) { if ( !dir.mkdir( dir.path() ) ) qWarning( "Could not create subdir %s\n", qPrintable( dir.path() ) ); } } } QString filename = outdir + dirlist.join( "/" ) + "/" + dirs[i]; QFile wf( filename ); if ( !wf.open( QIODevice::WriteOnly ) ) { qWarning( "Could not write file %s\n", qPrintable( filename ) ); continue; } wf. write( buf ); wf.close(); } else qWarning( "Could not get file %s\n", qPrintable( files[i].toString() ) ); } progress.setValue( files.size() ); } void MainWindow::actionFontSizeIncrease() { currentBrowser()->zoomIncrease(); } void MainWindow::actionFontSizeDecrease() { currentBrowser()->zoomDecrease(); } void MainWindow::actionViewHTMLsource() { QString text; if ( !m_ebookFile->getFileContentAsString( text, currentBrowser()->getOpenedPage() ) || text.isEmpty() ) return; if ( pConfig->m_advUseInternalEditor ) { QTextEdit * editor = new QTextEdit ( 0 ); editor->setPlainText( text ); editor->setWindowTitle( i18n("HTML source") ); editor->resize( 800, 600 ); editor->show(); } else { QTemporaryFile * tf = new QTemporaryFile(); m_tempFileKeeper.append( tf ); if ( !tf->open() ) { qWarning("Cannot open created QTemporaryFile: something is wrong with your system"); return; } tf->write( text.toUtf8() ); tf->seek( 0 ); // Run the external editor QStringList arguments; arguments.push_back( tf->fileName() ); if ( !QProcess::startDetached( pConfig->m_advExternalEditorPath, arguments, "." ) ) { QMessageBox::warning( 0, "Cannot start external editor", tr("Cannot start external editor %1.\nMake sure the path is absolute!") .arg( pConfig->m_advExternalEditorPath ) ); delete m_tempFileKeeper.takeLast(); } } } void MainWindow::actionToggleFullScreen() { bool fullscreen = view_Toggle_fullscreen_action->isChecked(); if ( fullscreen ) { if ( !isFullScreen() ) { showFullScreen (); // Hiding menu bar disables menu actions. Probably a bug in Qt. //menuBar()->hide(); statusBar()->hide(); } } else { if ( isFullScreen() ) { showNormal(); menuBar()->show(); statusBar()->show(); } } } void MainWindow::actionShowHideNavigator( bool toggle ) { if ( toggle ) m_navPanel->show(); else m_navPanel->hide(); } void MainWindow::navigatorVisibilityChanged( bool visible ) { view_Show_navigator_window->setChecked( visible ); } void MainWindow::actionLocateInContentsTab() { if ( m_navPanel->findUrlInContents( currentBrowser()->getOpenedPage() ) ) m_navPanel->setActive( NavigationPanel::TAB_CONTENTS ); else statusBar()->showMessage( i18n( "Could not locate opened topic in content window"), 2000 ); } void MainWindow::actionAboutApp() { #if QT_VERSION >= 0x050000 QString info = QString( "
Built for %1 arch using %2 ABI
Running on %3, Qt version %4" ) .arg( QSysInfo::buildCpuArchitecture() ) .arg( QSysInfo::buildAbi() ) .arg( QSysInfo::prettyProductName() ) .arg( qVersion() ); #else QString info = QString( "
Using Qt version %1") .arg( qVersion() ); #endif QString abouttext = i18n( "kchmviewer version %1.%2%3

" "Copyright (C) George Yunaev, 2004-2015
" "gyunaev@ulduzsoft.com
" "http://www.ulduzsoft.com/kchmviewer

" "Licensed under GNU GPL license version 3." ) .arg(APP_VERSION_MAJOR) .arg(APP_VERSION_MINOR) .arg( info ); // It is quite funny that the argument order differs #if defined (USE_KDE) KMessageBox::about( this, abouttext, i18n("About kchmviewer") ); #else QDialog dlg; Ui::DialogAbout ui; ui.setupUi( &dlg ); ui.lblAbout->setText( abouttext ); dlg.exec(); #endif } void MainWindow::actionAboutQt() { QMessageBox::aboutQt( this, QCoreApplication::applicationName() ); } void MainWindow::actionSwitchToContentTab() { m_navPanel->setActive( NavigationPanel::TAB_CONTENTS ); } void MainWindow::actionSwitchToIndexTab() { m_navPanel->setActive( NavigationPanel::TAB_INDEX ); } void MainWindow::actionSwitchToSearchTab() { m_navPanel->setActive( NavigationPanel::TAB_SEARCH ); } void MainWindow::actionSwitchToBookmarkTab() { m_navPanel->setActive( NavigationPanel::TAB_BOOKMARK ); } void MainWindow::setupActions() { // File menu connect( file_Open_action, SIGNAL( triggered() ), this, SLOT( actionOpenFile() ) ); connect( file_Print_action, SIGNAL( triggered() ), this, SLOT( actionPrint() ) ); connect( file_ExtractCHMAction, SIGNAL( triggered() ), this, SLOT( actionExtractCHM() ) ); connect( file_exit_action, SIGNAL( triggered() ), qApp, SLOT( closeAllWindows() ) ); // Edit connect( edit_Copy_action, SIGNAL( triggered() ), this, SLOT( actionEditCopy() ) ); connect( edit_SelectAll_action, SIGNAL( triggered() ), this, SLOT( actionEditSelectAll() ) ); connect( edit_FindAction, SIGNAL( triggered() ), this, SLOT( actionFindInPage() ) ); // Bookmarks connect( bookmark_AddAction, SIGNAL( triggered() ), m_navPanel, SLOT( addBookmark()) ); // View connect( view_Increase_font_size_action, SIGNAL( triggered() ), this, SLOT( actionFontSizeIncrease() ) ); connect( view_Decrease_font_size_action, SIGNAL( triggered() ), this, SLOT( actionFontSizeDecrease() ) ); connect( view_View_HTML_source_action, SIGNAL( triggered() ), this, SLOT( actionViewHTMLsource() ) ); connect( view_Toggle_fullscreen_action, SIGNAL( triggered() ), this, SLOT( actionToggleFullScreen() ) ); connect( view_Show_navigator_window, SIGNAL( triggered(bool) ), this, SLOT( actionShowHideNavigator(bool) ) ); connect( view_Locate_in_contents_action, SIGNAL( triggered() ), this, SLOT( actionLocateInContentsTab() ) ); // Settings connect( settings_SettingsAction, SIGNAL( triggered() ), this, SLOT( actionChangeSettings() ) ); connect( actionEdit_toolbars, SIGNAL( triggered() ), this, SLOT( actionEditToolbars() ) ); connect( actionCheck_for_updates, SIGNAL(triggered()), this, SLOT(checkNewVersionAvailable()) ); // Help menu connect( actionAbout_kchmviewer, SIGNAL(triggered()), this, SLOT(actionAboutApp()) ); connect( actionAbout_Qt, SIGNAL(triggered()), this, SLOT(actionAboutQt()) ); menuHelp->addSeparator(); // Navigation toolbar connect( nav_action_Back, SIGNAL( triggered() ), this, SLOT( actionNavigateBack() ) ); connect( nav_actionForward, SIGNAL( triggered() ), this, SLOT( actionNavigateForward() ) ); connect( nav_actionHome, SIGNAL( triggered() ), this, SLOT( actionNavigateHome() ) ); connect( nav_actionPreviousPage, SIGNAL( triggered() ), m_navPanel, SLOT( showPrevInToc() ) ); connect( nav_actionNextPageToc, SIGNAL( triggered() ), m_navPanel, SLOT( showNextInToc() ) ); // m_viewWindowMgr fills and maintains 'Window' menu m_viewWindowMgr->createMenu( this, menu_Windows, action_Close_window ); m_navPanel->setBookmarkMenu( menu_Bookmarks ); // Close Window goes directly to the window manager connect( action_Close_window, SIGNAL( triggered() ), m_viewWindowMgr, SLOT( onCloseCurrentWindow() ) ); // Navigation panel visibility connect( m_navPanel, SIGNAL(visibilityChanged(bool)), this, SLOT( navigatorVisibilityChanged(bool) ) ); // "What's this" action QAction * whatsthis = QWhatsThis::createAction( this ); menuHelp->addAction( whatsthis ); viewToolbar->addAction( whatsthis ); // Tab switching actions (void) new QShortcut( QKeySequence( i18n("Ctrl+1") ), this, SLOT( actionSwitchToContentTab() ), SLOT( actionSwitchToContentTab() ), Qt::ApplicationShortcut ); (void) new QShortcut( QKeySequence( i18n("Ctrl+2") ), this, SLOT( actionSwitchToIndexTab() ), SLOT( actionSwitchToIndexTab() ), Qt::ApplicationShortcut ); (void) new QShortcut( QKeySequence( i18n("Ctrl+3") ), this, SLOT( actionSwitchToSearchTab() ), SLOT( actionSwitchToSearchTab() ), Qt::ApplicationShortcut ); (void) new QShortcut( QKeySequence( i18n("Ctrl+4") ), this, SLOT( actionSwitchToBookmarkTab() ), SLOT( actionSwitchToBookmarkTab() ), Qt::ApplicationShortcut ); // Find (/) global shortcut (void) new QShortcut( QKeySequence( i18n("/") ), m_viewWindowMgr, SLOT( onActivateFind() ), SLOT( onActivateFind() ), Qt::ApplicationShortcut ); // Find next global shortcuts (void) new QShortcut( QKeySequence( i18n("F3") ), m_viewWindowMgr, SLOT( onFindNext() ), SLOT( onFindNext() ), Qt::ApplicationShortcut ); (void) new QShortcut( QKeySequence( QKeySequence::FindNext ), m_viewWindowMgr, SLOT( onFindNext() ), SLOT( onFindNext() ), Qt::ApplicationShortcut ); // Find prev global shortcut (void) new QShortcut( QKeySequence( QKeySequence::FindPrevious ), m_viewWindowMgr, SLOT( onFindPrevious() ), SLOT( onFindPrevious() ), Qt::ApplicationShortcut ); // Open next page in TOC global shortcut (void) new QShortcut( QKeySequence( i18n("Ctrl+Right") ), m_navPanel, SLOT( showNextInToc() ), SLOT( showNextInToc() ), Qt::ApplicationShortcut ); // Open next page in TOC global shortcut (void) new QShortcut( QKeySequence( i18n("Ctrl+Left") ), m_navPanel, SLOT( showPrevInToc() ), SLOT( showPrevInToc() ), Qt::ApplicationShortcut ); // Context menu m_contextMenu = new QMenu( this ); m_contextMenu->addAction ( "&Open this link in a new tab", this, SLOT( onOpenPageInNewTab() ), QKeySequence( "Shift+Enter" ) ); m_contextMenu->addAction ( "&Open this link in a new background tab", this, SLOT( onOpenPageInNewBackgroundTab() ), QKeySequence( "Ctrl+Enter" ) ); } void MainWindow::updateToolbars() { // Toolbars configuration Qt::ToolButtonStyle buttonstyle = Qt::ToolButtonIconOnly; QSize iconsize = QSize( 32, 32 ); switch ( pConfig->m_toolbarMode ) { case Config::TOOLBAR_SMALLICONS: iconsize = QSize( 16, 16 ); break; case Config::TOOLBAR_LARGEICONS: break; case Config::TOOLBAR_LARGEICONSTEXT: buttonstyle = Qt::ToolButtonTextUnderIcon; break; case Config::TOOLBAR_TEXTONLY: buttonstyle = Qt::ToolButtonTextOnly; break; } mainToolbar->setIconSize( iconsize ); mainToolbar->setToolButtonStyle( buttonstyle ); navToolbar->setIconSize( iconsize ); navToolbar->setToolButtonStyle( buttonstyle ); viewToolbar->setIconSize( iconsize ); viewToolbar->setToolButtonStyle( buttonstyle ); } void MainWindow::navSetBackEnabled(bool enabled) { nav_action_Back->setEnabled( enabled ); } void MainWindow::navSetForwardEnabled(bool enabled) { nav_actionForward->setEnabled( enabled ); } void MainWindow::actionOpenRecentFile( const QString& file ) { loadFile( file ); } void MainWindow::setupLangEncodingMenu() { // Create the language selection menu. QMenu * encodings = new QMenu( this ); // Create the action group m_encodingActions = new QActionGroup( this ); // Get the supported languages and encodings QStringList languages, qencodings; TextEncodings::getSupported( languages, qencodings ); for ( int idx = 0; idx < qencodings.size(); idx++ ) { QAction * action = new QAction( this ); QString text = i18n("%1 ( %2 )") .arg( languages[idx] ) .arg( qencodings[idx] ); action->setText( text ); action->setData( qVariantFromValue( qencodings[idx] ) ); action->setCheckable( true ); // Add to the action group, so only one is checkable m_encodingActions->addAction( action ); // Add to the menu encodings->addAction( action ); } // Set up the Select Codepage action view_Set_encoding_action->setMenu( encodings ); // Connect the action group signal connect( m_encodingActions, SIGNAL( triggered ( QAction * ) ), this, SLOT( actionEncodingChanged( QAction * ) ) ); } void MainWindow::actionEncodingChanged( QAction * action ) { QString encoding = action->data().toString(); setTextEncoding( encoding ); } QMenu * MainWindow::tabItemsContextMenu() { return m_contextMenu; } void MainWindow::setupPopupMenu( QMenu * menu ) { menu->addAction( action_Close_window ); menu->addSeparator(); menu->addAction( nav_action_Back ); menu->addAction( nav_actionForward ); menu->addAction( nav_actionHome ); menu->addSeparator(); menu->addAction( nav_actionPreviousPage ); menu->addAction( nav_actionNextPageToc ); menu->addSeparator(); menu->addAction( view_Increase_font_size_action ); menu->addAction( view_Decrease_font_size_action ); menu->addSeparator(); menu->addAction( edit_Copy_action ); menu->addAction( edit_FindAction ); } bool MainWindow::hasTableOfContents() const { return m_ebookFile && m_ebookFile->hasFeature( EBook::FEATURE_TOC ); } bool MainWindow::hasIndex() const { return m_ebookFile && m_ebookFile->hasFeature( EBook::FEATURE_INDEX ); } const QPixmap *MainWindow::getEBookIconPixmap(EBookTocEntry::Icon imagenum) { if ( m_builtinIcons[imagenum].isNull() ) { QString resicon = QString( ":/chm_icons/icon_%1.png") .arg( imagenum ); if ( !m_builtinIcons[imagenum].load( resicon ) ) qFatal("Could not initialize the internal icon %d as %s", imagenum, qPrintable( resicon ) ); } return &(m_builtinIcons[imagenum]); } void MainWindow::updateActions() { bool enabled = m_ebookFile != 0; file_Print_action->setEnabled( enabled ); edit_Copy_action->setEnabled( enabled ); edit_SelectAll_action->setEnabled( enabled ); edit_FindAction->setEnabled( enabled ); file_ExtractCHMAction->setEnabled( enabled ); bookmark_AddAction->setEnabled( enabled ); view_Increase_font_size_action->setEnabled( enabled ); view_Decrease_font_size_action->setEnabled( enabled ); view_View_HTML_source_action->setEnabled( enabled ); view_Locate_in_contents_action->setEnabled( enabled ); view_Set_encoding_action->setEnabled( enabled ); action_Close_window->setEnabled( enabled ); nav_action_Back->setEnabled( enabled ); nav_actionForward->setEnabled( enabled ); nav_actionHome->setEnabled( enabled ); nav_actionPreviousPage->setEnabled( enabled ); nav_actionNextPageToc->setEnabled( enabled ); m_navPanel->setEnabled( enabled ); } void MainWindow::newVerAvailError( int ) { statusBar()->showMessage( tr("Unable to check whether a new version is available"), 2000 ); } void MainWindow::newVerAvailable( NewVersionMetaMap metadata ) { QSettings().setValue( "advanced/lastupdate", QDateTime::currentDateTime() ); // What is the latest version? QString current = QString("%1.%2") .arg(APP_VERSION_MAJOR) .arg(APP_VERSION_MINOR); if ( metadata["Version"].toFloat() > current.toFloat() ) { if ( QMessageBox::question( 0, tr("New version available"), tr("A new version %1 of Kchmviewer is available!

" "You are currently using version %3.
" "Do you want to visit the application web site %2?") .arg( metadata["Version"] ) .arg( metadata["URL"] ) .arg( current ), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes ) == QMessageBox::No ) return; QDesktopServices::openUrl ( QUrl(metadata["URL"]) ); } else statusBar()->showMessage( tr("Checked for updates; you are using the latest version of kchmviewer"), 2000 ); } void MainWindow::actionEditToolbars() { m_toolbarMgr->editDialog(); } kchmviewer-7.5/src/PaxHeaders.8614/tab_search.ui0000644000000000000000000000012411365252422016434 xustar0027 mtime=1272272146.537538 27 atime=1447562193.226733 30 ctime=1447562193.226733287 kchmviewer-7.5/src/tab_search.ui0000644000175000001440000000601711365252422016770 0ustar00timusers00000000000000 TabSearch 0 0 210 409 Form1 9 6 0 6 Type in word(s) to search for: 0 0 0 0 <a href="help">Help</a> Qt::RichText 0 6 7 0 2 0 true 10 &Go false false false true 2 Title Location kchmviewer-7.5/src/PaxHeaders.8614/treeitem_toc.cpp0000644000000000000000000000012412321077735017176 xustar0027 mtime=1396998109.567818 27 atime=1447562193.227733 30 ctime=1447562193.227733274 kchmviewer-7.5/src/treeitem_toc.cpp0000644000175000001440000000573412321077735017537 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include "ebook.h" #include "mainwindow.h" #include "treeitem_toc.h" TreeItem_TOC::TreeItem_TOC(QTreeWidgetItem *parent, QTreeWidgetItem *after, const QString &name, const QUrl &url, int image) : QTreeWidgetItem( parent, after ) { m_name = name; m_url = url; m_image = image; } TreeItem_TOC::TreeItem_TOC(QTreeWidget *parent, QTreeWidgetItem *after, const QString &name, const QUrl &url, int image) : QTreeWidgetItem( parent, after ) { m_name = name; m_url = url; m_image = image; } QUrl TreeItem_TOC::getUrl() const { return m_url; } bool TreeItem_TOC::containstUrl(const QUrl &url, bool ignorefragment ) const { if ( ignorefragment ) { // This appears to be a bug in Qt: the url.path() returns a proper path starting with /, // but m_url.path() returns a relative URL starting with no / - so we make sure both are. QString urlpath = url.path(); QString ourpath = m_url.path(); // Memory allocation-wise this must really suck :( however this code is rarely used, // and only for buggy epub/chms. if ( !urlpath.startsWith( '/') ) urlpath.prepend( '/' ); if ( !ourpath.startsWith( '/') ) ourpath.prepend( '/' ); return urlpath == ourpath; } else { return url == m_url; } } int TreeItem_TOC::columnCount() const { return 1; } QVariant TreeItem_TOC::data(int column, int role) const { int imagenum; if ( column != 0 ) return QVariant(); switch( role ) { // Item name case Qt::DisplayRole: return m_name; // Item image case Qt::DecorationRole: if ( m_image != EBookTocEntry::IMAGE_NONE ) { // If the item has children, we change the book image to "open book", or next image automatically if ( childCount() ) { if ( isExpanded() ) imagenum = (m_image == EBookTocEntry::IMAGE_AUTO) ? 1 : m_image; else imagenum = (m_image == EBookTocEntry::IMAGE_AUTO) ? 0 : m_image + 1; } else imagenum = (m_image == EBookTocEntry::IMAGE_AUTO) ? 10 : m_image; const QPixmap *pix = ::mainWindow->getEBookIconPixmap( (EBookTocEntry::Icon) imagenum ); if ( !pix || pix->isNull() ) abort(); return *pix; } break; case Qt::ToolTipRole: case Qt::WhatsThisRole: return m_name; } return QVariant(); } kchmviewer-7.5/src/PaxHeaders.8614/main.cpp0000644000000000000000000000012412472417133015434 xustar0027 mtime=1424629339.337191 27 atime=1447562193.164734 30 ctime=1447562193.164734131 kchmviewer-7.5/src/main.cpp0000644000175000001440000000706412472417133015773 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include "kde-qt.h" #include "mainwindow.h" #include "config.h" #include "dbus_interface.h" #include "version.h" #if !defined (WIN32) #include #endif #if defined (USE_KDE) #include #endif #if defined (Q_WS_MAC) #include "kchmviewerapp.h" #else typedef QApplication KchmviewerApp; #endif MainWindow * mainWindow; int main( int argc, char ** argv ) { #if defined (USE_KDE) KAboutData aboutdata ( "kchmviewer", QByteArray(), ki18n("kchmviewer"), qPrintable( QString("%1.%2") .arg(APP_VERSION_MAJOR) .arg(APP_VERSION_MINOR) ), ki18n("CHM file viewer"), KAboutData::License_GPL, ki18n("(c) 2004-2015 George Yunaev, gyunaev@ulduzsoft.com"), ki18n("Please report bugs to kchmviewer@ulduzsoft.com"), "http://www.ulduzsoft.com/kchmviewer", "kchmviewer@ulduzsoft.com"); KCmdLineArgs::init( &aboutdata ); KApplication app; #else KchmviewerApp app( argc, argv ); app.addLibraryPath ( "qt-plugins" ); #endif // Set data for QSettings QCoreApplication::setOrganizationName("Ulduzsoft"); QCoreApplication::setOrganizationDomain("kchmviewer.net"); QCoreApplication::setApplicationName("kchmviewer"); // Configuration pConfig = new Config(); #if !defined (WIN32) && !defined(Q_WS_MAC) if ( QDBusConnection::sessionBus().isConnected() ) { if ( QDBusConnection::sessionBus().registerService(SERVICE_NAME) ) { DBusInterface * dbusiface = new DBusInterface(); QDBusConnection::sessionBus().registerObject( "/", dbusiface, QDBusConnection::ExportAllSlots ); } else qWarning( "Cannot register service %s on session bus. Going without D-BUS support.", SERVICE_NAME ); } else qWarning( "Cannot connect to the D-BUS session bus. Going without D-BUS support." ); #endif #if defined (USE_KDE) // Because KDE insists of using its KCmdLineArgs class for argument processing, and does not let you just // to use QCoreApplication::arguments(), it forces us to write two different process functions. To avoid this, // we convert command-line options to arguments ourselves here. QStringList arguments; for ( int i = 0; i < argc; i++ ) arguments << argv[i]; mainWindow = new MainWindow( arguments ); #else mainWindow = new MainWindow( QCoreApplication::arguments() ); #endif // If we already have the duplicate instance, the data has been already sent to it - quit now if ( mainWindow->hasSameTokenInstance() ) return 0; mainWindow->show(); mainWindow->launch(); app.connect( &app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()) ); return app.exec(); } kchmviewer-7.5/src/PaxHeaders.8614/mainwindow.ui0000644000000000000000000000012411313604004016503 xustar0027 mtime=1261373444.631314 27 atime=1447562193.165734 30 ctime=1447562193.165734117 kchmviewer-7.5/src/mainwindow.ui0000644000175000001440000004556211313604004017047 0ustar00timusers00000000000000 MainWindow 0 0 873 591 kchmviewer 0 0 873 25 &Settings &Bookmarks &File &Edit &View &Windows Help General toolbar Qt::Horizontal 32 32 Qt::ToolButtonTextUnderIcon TopToolBarArea false Navigation toolbar Qt::Horizontal 32 32 Qt::ToolButtonTextUnderIcon TopToolBarArea false View toolbar Qt::Horizontal 32 32 Qt::ToolButtonTextUnderIcon TopToolBarArea false :/images/icon_print.png:/images/icon_print.png &Print... Print Print current page Prints currently opened page. Ctrl+P :/images/find_close.png:/images/find_close.png &Quit Exit Exits the application Ctrl+Q :/images/icon_copy.png:/images/icon_copy.png C&opy Copy Copies selected content to clipboard Ctrl+C image8image8 &Select All Paste Selects everything in the document Ctrl+V :/images/icon_find.png:/images/icon_find.png &Find... Find text in currently opened page Enters the Find in page mode Ctrl+F :/images/dryicons_save.png:/images/dryicons_save.png E&xtract CHM content... Extract the CHM content to the directory Exctracts the CHM archive content to the specified directory. All the files are extracted. :/images/dryicon_process.png:/images/dryicon_process.png &Application settings... Change the application settings Change the application settings :/images/icon_add_bookmark.png:/images/icon_add_bookmark.png &Add bookmark Bookmark Adds a bookmark for currently opened page Adds a bookmark for currently opened page. Remembers the opened page, and scroll position. Bookmarks are accessible through Bookmarks menu or tab. Ctrl+B :/images/icon_font_increase.png:/images/icon_font_increase.png &Increase font size Larger Increase the font size Increases the document font size. The new font size will be stored. Ctrl+= :/images/icon_font_decrease.png:/images/icon_font_decrease.png &Decrease font size Smaller Decrease the font size Decreases the document font size. The new font size will be stored. Ctrl+- :/images/icon_view_source.png:/images/icon_view_source.png See &HTML View HTML source of current page Shows the HTML source of currently opened page Ctrl+U true :/images/dryicons_window.png:/images/dryicons_window.png Enable &full screen mode Enters or leaves the fullscreen mode F11 false true true :/images/icon_locate_in_content.png:/images/icon_locate_in_content.png Show &navigator window Show navigator dock window Shows or hides the size window (with Content, Index, Search and Bookmark tabs) F9 false :/images/icon_locate_in_content.png:/images/icon_locate_in_content.png &Locate Locate the current page in contents window If the current page is present in the Table of Contents, locate it there. Ctrl+L :/images/dryicons_replace.png:/images/dryicons_replace.png Set &encoding Changes the current document encoding. :/images/icon_open_file.png:/images/icon_open_file.png &Open... Open a CHM file Opens a new CHM file :/images/icon_back.png:/images/icon_back.png Back Navigate back Navigate back in navigation history :/images/icon_forward.png:/images/icon_forward.png Forward Navigate forward Navigate forward in navigation history :/images/icon_home.png:/images/icon_home.png Home Navigate home Navigate to the document Home page, as specified in the document. :/images/icon_prev_page.png:/images/icon_prev_page.png Previous Go to the previous page in the Table of Contents Go to the previous page in the <b>Table of Contents</b><br><br><i>Shortcut: Ctrl+Left Arrow</i> :/images/icon_next_page.png:/images/icon_next_page.png Next Go to the next page in the Table of Contents Go to the next page in the <b>Table of Contents</b><br><br><i>Shortcut: Ctrl+Right Arrow</i> :/images/closetab.png:/images/closetab.png &Close window Close current window Closes currently opened window Ctrl+W About kchmviewer... About Qt :/images/find_wrap.png:/images/find_wrap.png Check for updates :/images/dryicons_window.png:/images/dryicons_window.png Edit toolbars... kchmviewer-7.5/src/PaxHeaders.8614/tab_contents.ui0000644000000000000000000000012411365252422017024 xustar0027 mtime=1272272146.537538 27 atime=1447562193.226733 30 ctime=1447562193.226733287 kchmviewer-7.5/src/tab_contents.ui0000644000175000001440000000120311365252422017350 0ustar00timusers00000000000000 TabContents 0 0 257 424 Form1 9 6 kchmviewer-7.5/src/PaxHeaders.8614/dialog_topicselector.ui0000644000000000000000000000012411365252422020537 xustar0027 mtime=1272272146.537538 27 atime=1447562193.162734 30 ctime=1447562193.163734145 kchmviewer-7.5/src/dialog_topicselector.ui0000644000175000001440000000363411365252422021075 0ustar00timusers00000000000000 DialogTopicSelector 0 0 218 258 Multiple topics 9 6 Please select the topic to open: Qt::AlignCenter Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok buttonBox accepted() DialogTopicSelector accept() 66 330 -3 275 buttonBox rejected() DialogTopicSelector reject() 151 327 277 293 kchmviewer-7.5/src/PaxHeaders.8614/tab_search.cpp0000644000000000000000000000012412616066413016604 xustar0027 mtime=1446538507.448643 27 atime=1447562193.226733 30 ctime=1447562193.226733287 kchmviewer-7.5/src/tab_search.cpp0000644000175000001440000002047312616066413017142 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include #include "mainwindow.h" #include "config.h" #include "tab_search.h" #include "ebook_search.h" class SearchTreeViewItem : public QTreeWidgetItem { public: SearchTreeViewItem( QTreeWidget * tree, const QString& name, const QUrl& url ) : QTreeWidgetItem( tree ), m_name( name ), m_url( url ) {} QUrl getUrl() const { return m_url; } protected: // Overriden members int columnCount () const { return 2; } // Overriden member QVariant data ( int column, int role ) const { switch( role ) { // Item name case Qt::DisplayRole: case Qt::ToolTipRole: case Qt::WhatsThisRole: if ( column == 0 ) return m_name; else return m_url.path(); } return QVariant(); } private: QString m_name; QUrl m_url; }; TabSearch::TabSearch( QWidget * parent ) : QWidget( parent ), Ui::TabSearch() { // UIC stuff setupUi( this ); // Clickable Help label connect( lblHelp, SIGNAL( linkActivated( const QString & ) ), this, SLOT( onHelpClicked(const QString & ) ) ); // Go Button connect( btnGo, SIGNAL( clicked () ), this, SLOT( onReturnPressed() ) ); // Pressing 'Return' in the combo box line edit connect( searchBox->lineEdit(), SIGNAL( returnPressed() ), this, SLOT( onReturnPressed() ) ); // Clicking on tree element if ( pConfig->m_tabUseSingleClick ) { connect( tree, SIGNAL( itemClicked(QTreeWidgetItem*,int)), this, SLOT( onItemActivated( QTreeWidgetItem *, int ) ) ); } else { connect( tree, SIGNAL( itemActivated ( QTreeWidgetItem *, int ) ), this, SLOT( onItemActivated( QTreeWidgetItem *, int ) ) ); } // Activate custom context menu, and connect it tree->setContextMenuPolicy( Qt::CustomContextMenu ); connect( tree, SIGNAL( customContextMenuRequested ( const QPoint & ) ), this, SLOT( onContextMenuRequested( const QPoint & ) ) ); focus(); m_contextMenu = 0; m_genIndexProgress = 0; m_searchEngineInitDone = false; m_searchEngine = new EBookSearch(); connect( m_searchEngine, SIGNAL( progressStep( int, const QString& ) ), this, SLOT( onProgressStep( int, const QString& ) ) ); } void TabSearch::invalidate( ) { tree->clear(); searchBox->clear(); searchBox->lineEdit()->clear(); delete m_genIndexProgress; m_genIndexProgress = 0; m_searchEngineInitDone = false; } void TabSearch::onReturnPressed( ) { QList results; QString text = searchBox->lineEdit()->text(); if ( text.isEmpty() ) return; tree->clear(); if ( searchQuery( text, &results ) ) { if ( !results.empty() ) { for ( int i = 0; i < results.size(); i++ ) { SearchTreeViewItem * item = new SearchTreeViewItem ( tree, ::mainWindow->chmFile()->getTopicByUrl( results[i] ), results[i] ); if ( i == 0 ) tree->setCurrentItem( item ); } ::mainWindow->showInStatusBar( i18n( "Search returned %1 result(s)" ) . arg(results.size()) ); tree->setFocus(); } else ::mainWindow->showInStatusBar( i18n( "Search returned no results") ); } else ::mainWindow->showInStatusBar( i18n( "Search failed") ); } void TabSearch::onItemActivated( QTreeWidgetItem * item, int ) { if ( !item ) return; SearchTreeViewItem * treeitem = (SearchTreeViewItem *) item; ::mainWindow->currentBrowser()->openUrl( treeitem->getUrl() ); } void TabSearch::restoreSettings( const Settings::search_saved_settings_t & settings ) { for ( int i = 0; i < settings.size(); i++ ) searchBox->addItem (settings[i]); } void TabSearch::saveSettings( Settings::search_saved_settings_t & settings ) { settings.clear(); for ( int i = 0; i < searchBox->count(); i++ ) settings.push_back( searchBox->itemText(i) ); } void TabSearch::onHelpClicked( const QString & ) { QWhatsThis::showText ( mapToGlobal( lblHelp->pos() ), i18n( "

The improved search engine allows you to search for a word, symbol or phrase, which is set of words and symbols included in quotes. Only the documents which include all the terms specified in th search query are shown; no prefixes needed.

Unlike MS CHM internal search index, my improved search engine indexes everything, including special symbols. Therefore it is possible to search (and find!) for something like $q = new ChmFile();. This search also fully supports Unicode, which means that you can search in non-English documents.

If you want to search for a quote symbol, use quotation mark instead. The engine treats a quote and a quotation mark as the same symbol, which allows to use them in phrases.") ); } bool TabSearch::initSearchEngine( ) { ShowWaitCursor waitcursor; QString indexfile = ::mainWindow->currentSettings()->searchIndexFile(); // First try to read the index if exists QFile file( indexfile ); if ( file.open( QIODevice::ReadOnly ) ) { QDataStream stream( &file ); ::mainWindow->statusBar()->showMessage( i18n( "Reading dictionary..." ) ); qApp->processEvents( QEventLoop::ExcludeUserInputEvents ); if ( m_searchEngine->loadIndex( stream ) ) { m_searchEngineInitDone = true; return true; } } // So the index cannot be read or does not exist. Create a new one. // Show the user what we gonna do m_genIndexProgress = new QProgressDialog( this ); m_genIndexProgress->setWindowTitle( i18n( "Generating search index..." ) ); m_genIndexProgress->setLabelText( i18n( "Generating search index..." ) ); m_genIndexProgress->setMaximum( 100 ); m_genIndexProgress->reset(); m_genIndexProgress->show(); ::mainWindow->statusBar()->showMessage( tr( "Generating search index..." ) ); // Show 'em qApp->processEvents( QEventLoop::ExcludeUserInputEvents ); // Since we gonna save it, reopen the file file.close(); if ( !file.open( QIODevice::WriteOnly ) ) { QMessageBox::critical( 0, "Cannot save index", tr("The index cannot be saved into file %1") .arg( file.fileName() ) ); return false; } // Run the generation QDataStream stream( &file ); m_searchEngine->generateIndex( ::mainWindow->chmFile(), stream ); delete m_genIndexProgress; m_genIndexProgress = 0; if ( m_searchEngine->hasIndex() ) { m_searchEngineInitDone = true; return true; } m_searchEngineInitDone = false; return false; } void TabSearch::execSearchQueryInGui( const QString & query ) { searchBox->lineEdit()->setText( query ); onReturnPressed(); } bool TabSearch::searchQuery( const QString & query, QList< QUrl > * results ) { if ( !m_searchEngineInitDone ) { if ( !initSearchEngine() ) return false; } if ( !m_searchEngine->hasIndex() ) { QMessageBox::information ( this, "No index present", "The index is not present" ); return false; } if ( query.isEmpty() ) return false; ShowWaitCursor waitcursor; bool result; result = m_searchEngine->searchQuery( query, results, ::mainWindow->chmFile() ); return result; } void TabSearch::focus() { if ( !searchBox->hasFocus() && !tree->hasFocus() ) searchBox->setFocus(); } void TabSearch::onContextMenuRequested( const QPoint & point ) { SearchTreeViewItem * treeitem = (SearchTreeViewItem *) tree->itemAt( point ); if( treeitem ) { ::mainWindow->currentBrowser()->setTabKeeper( treeitem->getUrl() ); ::mainWindow->tabItemsContextMenu()->popup( tree->viewport()->mapToGlobal( point ) ); } } void TabSearch::onProgressStep(int value, const QString & stepName) { if ( m_genIndexProgress ) { m_genIndexProgress->setLabelText( stepName ); m_genIndexProgress->setValue( value ); } } kchmviewer-7.5/src/PaxHeaders.8614/dialog_setup.h0000644000000000000000000000012412321077735016637 xustar0027 mtime=1396998109.567818 27 atime=1447562193.162734 30 ctime=1447562193.162734158 kchmviewer-7.5/src/dialog_setup.h0000644000175000001440000000220612321077735017167 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef DIALOG_SETUP_H #define DIALOG_SETUP_H #include #include class DialogSetup : public QDialog, public Ui::DialogSetup { Q_OBJECT public: DialogSetup( QWidget *parent = 0 ); ~DialogSetup(); public slots: void browseExternalEditor(); void accept(); private: int m_numOfRecentFiles; }; #endif kchmviewer-7.5/src/PaxHeaders.8614/dbus_interface.h0000644000000000000000000000012412321077735017135 xustar0027 mtime=1396998109.567818 27 atime=1447562193.161734 30 ctime=1447562193.161734172 kchmviewer-7.5/src/dbus_interface.h0000644000175000001440000000376012321077735017473 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef DBUS_INTERFACE_H #define DBUS_INTERFACE_H #include #include #include #define SERVICE_NAME "net.kchmviewer.application" class DBusInterface : public QObject { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "net.kchmviewer.application") public: DBusInterface( QObject *parent = 0 ); ~DBusInterface(); public Q_SLOTS: //! Loads a CHM file \a filename , and opens the URL \a url. Use URL "/" to open default homepage Q_SCRIPTABLE void loadHelpFile( const QString& filename, const QString& url ); //! Opens a specific \a url inside the loaded CHM file Q_SCRIPTABLE void openPage( const QString& url ); //! Tries to find word in index, opening the index window and scrolling it there Q_SCRIPTABLE void guiFindInIndex( const QString& word ); //! Executes a search in GUI. \a query contains the complete search query. Q_SCRIPTABLE void guiSearchQuery( const QString& query ); //! Executes a search; GUI is not involved and user sees nothing. //! \a query contains the complete search query. //! Returns a list of URLs, or empty array if nothing os Q_SCRIPTABLE QStringList searchQuery( const QString& query ); }; #endif // DBUSIFACE_H kchmviewer-7.5/src/PaxHeaders.8614/window_browser.ui0000644000000000000000000000012311673562333017421 xustar0027 mtime=1324279003.617437 27 atime=1447562193.228733 29 ctime=1447562193.22873326 kchmviewer-7.5/src/window_browser.ui0000644000175000001440000001316011673562333017753 0ustar00timusers00000000000000 ********************************************************************* ** ** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved. ** ** This file is part of the Qt Assistant of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sales@trolltech.com. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ********************************************************************* TabbedBrowser 0 0 749 664 TabbedBrowser QFrame::StyledPanel QFrame::Raised 6 0 :/images/find_close.png:/images/find_close.png true 0 0 150 0 Previous :/images/find_previous.png:/images/find_previous.png Qt::ToolButtonTextBesideIcon true 0 0 Next :/images/find_next.png:/images/find_next.png Qt::ToolButtonTextBesideIcon true Qt::NoArrow Case Sensitive 0 20 1050 20 <img src=":/images/find_wrap.png">&nbsp;Search wrapped Qt::RichText true Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter Qt::Horizontal 81 21 kchmviewer-7.5/src/PaxHeaders.8614/kde-qt.h0000644000000000000000000000012312446223156015342 xustar0026 mtime=1419322990.47456 27 atime=1447562193.163734 30 ctime=1447562193.164734131 kchmviewer-7.5/src/kde-qt.h0000644000175000001440000000670712446223156015705 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef KDE_QT_H #define KDE_QT_H #if defined (USE_KDE) #define KQ_CLASSNAME(name) K##name #define KQ_DECLARECLASS(name) class KQ##name : public K##name #include #include #include #include #include #include #include #include #include #include #include #include #include #include #else /* !USE_KDE */ #define KQ_CLASSNAME(name) Q##name #include #include #include #include #include #include #include #include #include #include #include #define i18n(A) tr(A) #endif /* USE_KDE */ // common non-wrapped UI classes #include #include #include #include #include #include #include #include // common utility classes #include #include #include #include #include #include #include #include #include #include #include #include // events #include #include #include #include class KQProgressModalDialog : public KQ_CLASSNAME(ProgressDialog) { public: KQProgressModalDialog ( const QString & captionText, const QString & labelText, const QString & cancelButtonText, int totalSteps, QWidget * creator = 0 ); // Seems like people have fun making classes incompatible #if defined (USE_KDE) void setValue( int value ) { progressBar()->setValue( value ); } #else bool wasCancelled() { return wasCanceled(); } #endif }; class KQTabWidget : public KQ_CLASSNAME(TabWidget) { public: KQTabWidget (QWidget *parent = 0 ) : KQ_CLASSNAME(TabWidget) (parent) {} }; #include #include #include #include #include #include #include #include #include #include #include #include class ShowWaitCursor { public: ShowWaitCursor() { QApplication::setOverrideCursor( QCursor(Qt::WaitCursor) ); } ~ShowWaitCursor() { QApplication::restoreOverrideCursor(); } }; // Forward declarations class MainWindow; class ViewWindow; class TabIndex; class TabSearch; class TabBookmarks; class TabContents; class Settings; class ViewWindow; class ViewWindowMgr; class EBookUrl; #endif /* KDE_QT_H */ kchmviewer-7.5/src/PaxHeaders.8614/recentfiles.cpp0000644000000000000000000000012412321077735017016 xustar0027 mtime=1396998109.567818 27 atime=1447562193.166734 30 ctime=1447562193.166734104 kchmviewer-7.5/src/recentfiles.cpp0000644000175000001440000000626212321077735017354 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include #include #include #include "recentfiles.h" RecentFiles::RecentFiles( QMenu * menu, QAction * before, int maxfiles, const QString& settingsname ) { if ( maxfiles < 1 ) qFatal( "RecentFiles::RecentFiles: maxfiles (%d) is < 1 ", maxfiles ); m_settingsName = settingsname.isEmpty() ? "recentFileList" : settingsname; m_actions.resize( maxfiles ); // Create the actions for ( int i = 0; i < maxfiles; ++i ) { m_actions[i] = new QAction( this ); m_actions[i]->setVisible(false); connect( m_actions[i], SIGNAL(triggered()), this, SLOT(actionRecent()) ); } // Add them to the menu for ( int i = 0; i < maxfiles; ++i ) menu->insertAction( before, m_actions[i] ); // Add a separator after the last action m_separator = menu->insertSeparator( before ); // Update the actions menu updateMenu(); } RecentFiles::~RecentFiles() { } void RecentFiles::setCurrentFile( const QString& file ) { QStringList files = loadRecentFiles(); files.removeAll( file ); files.prepend( file ); while ( files.size() > m_actions.size() ) files.removeLast(); saveRecentFiles( files ); updateMenu(); } void RecentFiles::removeRecentFile( const QString& file ) { QStringList files = loadRecentFiles(); files.removeAll( file ); saveRecentFiles( files ); updateMenu(); } void RecentFiles::actionRecent() { QAction *action = qobject_cast(sender()); if ( action ) emit openRecentFile( action->data().toString() ); } void RecentFiles::updateMenu() { QStringList files = loadRecentFiles(); int numRecentFiles = qMin( files.size(), m_actions.size() ); for ( int i = 0; i < m_actions.size(); ++i ) { if ( i < numRecentFiles ) { QString text = tr("&%1 %2").arg(i + 1).arg( QFileInfo( files[i] ).fileName() ); m_actions[i]->setText(text); m_actions[i]->setToolTip( files[i] ); m_actions[i]->setData(files[i]); m_actions[i]->setVisible(true); } else m_actions[i]->setVisible(false); } m_separator->setVisible( numRecentFiles > 0 ); } QString RecentFiles::latestFile() { QStringList files = loadRecentFiles(); if ( files.isEmpty() ) return QString::null; else return files[0]; } QStringList RecentFiles::loadRecentFiles() { QSettings settings; return settings.value( m_settingsName ).toStringList(); } void RecentFiles::saveRecentFiles( const QStringList& files ) { QSettings settings; settings.setValue( m_settingsName, files ); } kchmviewer-7.5/src/PaxHeaders.8614/treeitem_index.cpp0000644000000000000000000000012412321154504017506 xustar0027 mtime=1397020996.536725 27 atime=1447562193.227733 30 ctime=1447562193.227733274 kchmviewer-7.5/src/treeitem_index.cpp0000644000175000001440000000557212321154504020047 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include "ebook.h" #include "mainwindow.h" #include "dialog_chooseurlfromlist.h" #include "treeitem_index.h" TreeItem_Index::TreeItem_Index(QTreeWidgetItem *parent, QTreeWidgetItem *after, const QString &name, const QList &urls, const QString& seealso) : QTreeWidgetItem( parent, after ) { m_name = name; m_urls = urls; m_seealso = seealso; } TreeItem_Index::TreeItem_Index(QTreeWidget *parent, QTreeWidgetItem *after, const QString &name, const QList &urls, const QString &seealso) : QTreeWidgetItem( parent, after ) { m_name = name; m_urls = urls; m_seealso = seealso; } QUrl TreeItem_Index::getUrl() const { if ( m_urls.size() == 1 ) return m_urls.front(); // Create a dialog with URLs, and show it, so user can select an URL he/she wants. QStringList titles; EBook * xchm = ::mainWindow->chmFile(); for ( int i = 0; i < m_urls.size(); i++ ) { QString title = xchm->getTopicByUrl( m_urls[i] ); if ( title.isEmpty() ) { qWarning( "Could not get item name for url '%s'", qPrintable( m_urls[i].toString() ) ); titles.push_back(QString::null); } else titles.push_back(title); } DialogChooseUrlFromList dlg( ::mainWindow ); return dlg.getSelectedItemUrl( m_urls, titles ); } bool TreeItem_Index::containstUrl(const QUrl &url) const { for ( int i = 0; i < m_urls.size(); i++ ) { if ( m_urls[i] == url ) return true; } return false; } bool TreeItem_Index::isSeeAlso() const { return !m_seealso.isEmpty(); } QString TreeItem_Index::seeAlso() const { return m_seealso; } int TreeItem_Index::columnCount() const { return 1; } QVariant TreeItem_Index::data(int column, int role) const { if ( column != 0 ) return QVariant(); switch( role ) { // Item name case Qt::DisplayRole: return m_name; // Item foreground color case Qt::ForegroundRole: // For Index URL it means that there is URL list in m_url if ( m_urls.size() > 1 ) return QBrush( QColor( Qt::red ) ); else if ( isSeeAlso() ) return QBrush( QColor( Qt::lightGray ) ); break; case Qt::ToolTipRole: case Qt::WhatsThisRole: return m_name; } return QVariant(); } kchmviewer-7.5/src/PaxHeaders.8614/toolbareditor.ui0000644000000000000000000000012411313604004017200 xustar0027 mtime=1261373444.631314 27 atime=1447562193.227733 30 ctime=1447562193.227733274 kchmviewer-7.5/src/toolbareditor.ui0000644000175000001440000001015311313604004017530 0ustar00timusers00000000000000 ToolbarEditor 0 0 497 386 Dialog Select a toolbar Editing the toolbar 1 0 Drag the actions to the toolbar list to add them to the toolbar. Drag them from toolbar list to remove them from the toolbar. Qt::AlignCenter 0 2 Available actions true QAbstractItemView::DragDrop 0 2 Toolbar actions true QAbstractItemView::DragDrop Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() ToolbarEditor accept() 248 254 157 274 buttonBox rejected() ToolbarEditor reject() 316 260 286 274 kchmviewer-7.5/src/PaxHeaders.8614/toolbarmanager.h0000644000000000000000000000012412321077735017155 xustar0027 mtime=1396998109.567818 27 atime=1447562193.227733 30 ctime=1447562193.227733274 kchmviewer-7.5/src/toolbarmanager.h0000644000175000001440000000513212321077735017506 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef TOOLBARMANAGER_H #define TOOLBARMANAGER_H #include #include #include #include #include // This class manages application toolbars, including the following: // - Stores and restores the toolbars, including their position and content; // - Allows toolbar editing; class ToolbarManager : public QObject { Q_OBJECT public: // Returns the name of the separator object which should be used in place // of separators where needed. static QString separatorName(); static QString actionName( QAction * action ); static bool hasAction( const QList& actions, QAction* action ); ToolbarManager( QObject * parent = 0, const QString& settingpath = "/tooolbars" ); virtual ~ToolbarManager(); // Set the actions available in all toolbars. Actions which are stored for toolbars // must be present in this list, or they will be ignored. void setAvailableActions( QList availableActions ); // Query the actions available to set in toolbar from the provided QObject as children // of this object. Typically (always for UIC-generated files) all actions have application // MainWindow as their parent. void queryAvailableActions( QObject * source ); // Adds a toolbar to the list of managed toolbars void addManaged( QToolBar * toolbar ); // Loads the managed toolbars actions; keeps toolbars intact if nothing is loaded void load(); // Saves the managed toolbars actions void save(); // Shows the edit toolbars dialog void editDialog(); private: void applyActions( QToolBar * toolbar, const QStringList& actions ); // Keeps available actions QList m_availableActions; // Keeps the managed toolbars QList< QToolBar *> m_toolbars; // Setting name QString m_settingsRoot; }; #endif // TOOLBARMANAGER_H kchmviewer-7.5/src/PaxHeaders.8614/dialog_about.ui0000644000000000000000000000012412322435306016770 xustar0027 mtime=1397373638.171533 27 atime=1447562193.161734 30 ctime=1447562193.161734172 kchmviewer-7.5/src/dialog_about.ui0000644000175000001440000001623412322435306017326 0ustar00timusers00000000000000 DialogAbout 0 0 479 227 About kchmviewer 0 About appplication :/images/kchmviewer.png 1 1 About text true Thanks <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Liberation Sans'; font-size:10pt; font-weight:600;">I would like to thank:</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Sans'; font-size:10pt;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Liberation Sans'; font-size:10pt;">- Razvan Cojocaru, the author of xchm.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Liberation Sans'; font-size:10pt;">- Peter Volkov for significant QA (more than 20 reported bugs!)</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Liberation Sans'; font-size:10pt;">- And of course </span><span style=" font-family:'Liberation Sans'; font-size:10pt; font-weight:600;">everyone</span><span style=" font-family:'Liberation Sans'; font-size:10pt;">, who report bugs, and suggest features.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Liberation Sans'; font-size:10pt;"><br /></p></body></html> true 3rd party software <html><head/><body><p>kchmviewer uses the following 3rd party software:</p><ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Qt library from http://qt-project.org by Digia; </li><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">libchm for parsing CHM files by Jed Wing; </li><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">libzip for handling EPUB files by Dieter Baron and Thomas Klausner</li><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Icons from DryIcons, http://dryicons.com</li></ul></body></html> Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter Qt::Horizontal QDialogButtonBox::Close buttonBox accepted() DialogAbout accept() 222 363 157 274 buttonBox rejected() DialogAbout reject() 290 369 286 274 buttonBox clicked(QAbstractButton*) DialogAbout accept() 371 367 410 391 kchmviewer-7.5/src/PaxHeaders.8614/kchmviewerapp.h0000644000000000000000000000012412321077735017025 xustar0027 mtime=1396998109.567818 27 atime=1447562193.163734 30 ctime=1447562193.163734145 kchmviewer-7.5/src/kchmviewerapp.h0000644000175000001440000000226212321077735017357 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef KCHMVIEWERAPP_H #define KCHMVIEWERAPP_H #include #include class KchmviewerApp : public QApplication { Q_OBJECT public: KchmviewerApp(int &argc, char **argv, int version= QT_VERSION); virtual ~KchmviewerApp(); bool event(QEvent*); private slots: void onTimer(); private: QString m_filePath; int m_nResend; }; #endif // KCHMVIEWERAPP_H kchmviewer-7.5/src/PaxHeaders.8614/qwebviewnetwork.cpp0000644000000000000000000000012412622003403017737 xustar0027 mtime=1447560963.701728 27 atime=1447562193.166734 30 ctime=1447562193.166734104 kchmviewer-7.5/src/qwebviewnetwork.cpp0000644000175000001440000000627112622003403020275 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include #include "qwebviewnetwork.h" #include "viewwindow.h" #include "config.h" #include "mainwindow.h" KCHMNetworkReply::KCHMNetworkReply( const QNetworkRequest &request, const QUrl &url ) { setRequest( request ); setOpenMode( QIODevice::ReadOnly ); m_data = loadResource( url ); m_length = m_data.length(); setHeader( QNetworkRequest::ContentLengthHeader, QByteArray::number(m_data.length()) ); QMetaObject::invokeMethod(this, "metaDataChanged", Qt::QueuedConnection); if ( m_length ) QMetaObject::invokeMethod(this, "readyRead", Qt::QueuedConnection); QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection); } qint64 KCHMNetworkReply::bytesAvailable() const { return m_data.length() + QNetworkReply::bytesAvailable(); } void KCHMNetworkReply::abort() { } qint64 KCHMNetworkReply::readData(char *buffer, qint64 maxlen) { qint64 len = qMin(qint64(m_data.length()), maxlen); if (len) { memcpy(buffer, m_data.constData(), len); m_data.remove(0, len); } return len; } QByteArray KCHMNetworkReply::loadResource( const QUrl &url ) { //qDebug("loadResource %s", qPrintable(url.toString()) ); bool htmlfile = url.path().endsWith( ".html" ) || url.path().endsWith( ".htm" ) || url.path().endsWith( ".xhtml" ); // Retreive the data from ebook file QByteArray buf; if ( !::mainWindow->chmFile()->getFileContentAsBinary( buf, url ) ) { qWarning( "Could not resolve file %s\n", qPrintable( url.toString() ) ); if ( htmlfile ) buf = (QString("Could not load file %1").arg( url.path())).toUtf8(); } if ( htmlfile ) setHeader( QNetworkRequest::ContentTypeHeader, QString( "text/html; charset=%1" ) .arg( ::mainWindow->chmFile()->currentEncoding() ) ); return buf; } KCHMNetworkAccessManager::KCHMNetworkAccessManager( QObject *parent ) : QNetworkAccessManager(parent) { } QNetworkReply * KCHMNetworkAccessManager::createRequest( Operation op, const QNetworkRequest &request, QIODevice *outgoingData ) { //qDebug("KCHMNetworkAccessManager::createRequest %s", qPrintable( request.url().toString()) ); if ( ::mainWindow->chmFile()->isSupportedUrl( request.url() ) ) return new KCHMNetworkReply( request, request.url() ); if ( pConfig->m_browserEnableRemoteContent ) return QNetworkAccessManager::createRequest( op, request, outgoingData ); else return QNetworkAccessManager::createRequest( QNetworkAccessManager::GetOperation, QNetworkRequest(QUrl()) ); } kchmviewer-7.5/src/PaxHeaders.8614/tab_bookmarks.cpp0000644000000000000000000000012212616066413017325 xustar0027 mtime=1446538507.448643 27 atime=1447562193.225733 28 ctime=1447562193.2257333 kchmviewer-7.5/src/tab_bookmarks.cpp0000644000175000001440000001450312616066413017662 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include "mainwindow.h" #include "viewwindow.h" #include "version.h" #include "config.h" #include "tab_bookmarks.h" class BookmarkItem : public QListWidgetItem { public: BookmarkItem( TabBookmarks * widget, QListWidget* parent, const QString& name, const QString& url, int pos ) : QListWidgetItem( parent ) { m_name = name; m_url = url; m_scroll_y = pos; m_action = new QAction( name, widget ); m_action->setData( qVariantFromValue( (void*) this ) ); QObject::connect( m_action, SIGNAL( triggered() ), widget, SLOT( actionBookmarkActivated() ) ); } void setName( const QString& name ) { m_name = name; } // Visualization virtual QVariant data ( int role ) const { switch ( role ) { case Qt::ToolTipRole: case Qt::WhatsThisRole: case Qt::DisplayRole: return m_name; } return QVariant(); } QString m_name; QString m_url; int m_scroll_y; QAction * m_action; }; TabBookmarks::TabBookmarks( QWidget *parent ) : QWidget( parent ), Ui::TabBookmarks() { // UIC code setupUi( this ); if ( pConfig->m_tabUseSingleClick ) { connect( list, SIGNAL( itemClicked(QListWidgetItem*)), this, SLOT( onItemActivated( QListWidgetItem*)) ); } else { connect( list, SIGNAL( itemActivated(QListWidgetItem*)), this, SLOT( onItemActivated( QListWidgetItem*)) ); } connect( btnAdd, SIGNAL( clicked () ), this, SLOT( onAddBookmarkPressed( ) ) ); connect( btnDel, SIGNAL( clicked () ), this, SLOT( onDelBookmarkPressed( ) ) ); connect( btnEdit, SIGNAL( clicked () ), this, SLOT( onEditBookmarkPressed( ) ) ); m_menuBookmarks = 0; m_contextMenu = 0; m_listChanged = false; // Activate custom context menu, and connect it list->setContextMenuPolicy( Qt::CustomContextMenu ); connect( list, SIGNAL( customContextMenuRequested ( const QPoint & ) ), this, SLOT( onContextMenuRequested( const QPoint & ) ) ); focus(); } void TabBookmarks::onAddBookmarkPressed( ) { bool ok; QString url = ::mainWindow->currentBrowser()->getOpenedPage().toString(); QString title = ::mainWindow->chmFile()->getTopicByUrl(url); QString name = QInputDialog::getText( this, i18n( "%1 - add a bookmark") . arg(QCoreApplication::applicationName()), i18n( "Enter the name for this bookmark:" ), QLineEdit::Normal, title, &ok ); if ( !ok || name.isEmpty() ) return; BookmarkItem * item = new BookmarkItem ( this, list, name, url, ::mainWindow->currentBrowser()->getScrollbarPosition() ); m_menuBookmarks->addAction( item->m_action ); m_listChanged = true; } void TabBookmarks::onDelBookmarkPressed( ) { BookmarkItem * item = (BookmarkItem *) list->currentItem(); if ( item ) { m_menuBookmarks->removeAction( item->m_action ); delete item; m_listChanged = true; } } void TabBookmarks::onEditBookmarkPressed( ) { BookmarkItem * item = (BookmarkItem *) list->currentItem(); if ( item ) { bool ok; QString name = QInputDialog::getText( this, i18n( "%1 - edit the bookmark name") . arg(QCoreApplication::applicationName()), i18n( "Enter the name for this bookmark:" ), QLineEdit::Normal, item->m_name, &ok ); if ( !ok || name.isEmpty() ) return; item->setName( name ); item->m_action->setText( name ); m_listChanged = true; update(); } } void TabBookmarks::restoreSettings( const Settings::bookmark_saved_settings_t & settings ) { for ( int i = 0; i < settings.size(); i++ ) { BookmarkItem * item = new BookmarkItem( this, list, settings[i].name, settings[i].url, settings[i].scroll_y ); m_menuBookmarks->addAction( item->m_action ); } } void TabBookmarks::saveSettings( Settings::bookmark_saved_settings_t & settings ) { settings.clear(); for ( int i = 0; i < list->count(); i++ ) { BookmarkItem * treeitem = (BookmarkItem *) list->item( i ); settings.push_back( Settings::SavedBookmark( treeitem->m_name, treeitem->m_url, treeitem->m_scroll_y) ); } } void TabBookmarks::invalidate( ) { for ( int i = 0; i < list->count(); i++ ) m_menuBookmarks->removeAction( ((BookmarkItem *) list->item( i ))->m_action ); list->clear(); } void TabBookmarks::focus() { if ( list->hasFocus() ) list->setFocus(); } void TabBookmarks::createMenu( QMenu * menuBookmarks ) { m_menuBookmarks = menuBookmarks; } void TabBookmarks::onItemActivated(QListWidgetItem * item) { if ( !item ) return; BookmarkItem * treeitem = (BookmarkItem *) item; if ( ::mainWindow->currentBrowser()->getOpenedPage().toString() != treeitem->m_url ) { ::mainWindow->openPage( treeitem->m_url, MainWindow::OPF_CONTENT_TREE ); ::mainWindow->currentBrowser()->setScrollbarPosition( treeitem->m_scroll_y ); } else { // Force the scroll since the page is not reloaded ::mainWindow->currentBrowser()->setScrollbarPosition( treeitem->m_scroll_y, true ); } } void TabBookmarks::actionBookmarkActivated() { QAction *action = qobject_cast< QAction * >(sender()); BookmarkItem * item = (BookmarkItem *) action->data().value< void* > (); onItemActivated( item ); } void TabBookmarks::onContextMenuRequested(const QPoint & point) { BookmarkItem * item = (BookmarkItem *) list->itemAt( point ); if( item ) { ::mainWindow->currentBrowser()->setTabKeeper( item->m_url ); ::mainWindow->tabItemsContextMenu()->popup( list->viewport()->mapToGlobal( point ) ); } } kchmviewer-7.5/src/PaxHeaders.8614/textencodings.h0000644000000000000000000000012412321077735017036 xustar0027 mtime=1396998109.567818 27 atime=1447562193.226733 30 ctime=1447562193.226733287 kchmviewer-7.5/src/textencodings.h0000644000175000001440000000211012321077735017360 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef TEXTENCODINGS_H #define TEXTENCODINGS_H #include class TextEncodings { public: TextEncodings(); static void getSupported( QStringList& languages, QStringList& qtcodecs ); static QString languageForCodec( const QString& qtcodec ); }; #endif // TEXTENCODINGS_H kchmviewer-7.5/src/PaxHeaders.8614/version.h0000644000000000000000000000012412622005553015636 xustar0027 mtime=1447562091.458661 27 atime=1447562193.227733 30 ctime=1447562193.227733274 kchmviewer-7.5/src/version.h0000644000175000001440000000166112622005553016172 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef INCLUDE_VERSION_H #define INCLUDE_VERSION_H #define APP_VERSION_MAJOR 7 #define APP_VERSION_MINOR 5 #endif /* INCLUDE_VERSION_H */ kchmviewer-7.5/src/PaxHeaders.8614/kde-qt.cpp0000644000000000000000000000012412321077735015700 xustar0027 mtime=1396998109.567818 27 atime=1447562193.163734 30 ctime=1447562193.163734145 kchmviewer-7.5/src/kde-qt.cpp0000644000175000001440000000305312321077735016231 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include "kde-qt.h" #if defined (USE_KDE) KQProgressModalDialog::KQProgressModalDialog ( const QString & captionText, const QString & labelText, const QString & cancelButtonText, int totalSteps, QWidget * creator ) : KProgressDialog( creator, captionText, labelText ) { setAllowCancel( true ); showCancelButton( true ); setAutoClose( true ); setButtonText( cancelButtonText ); progressBar()->setMaximum( totalSteps ); setMinimumDuration( 1 ); } #else KQProgressModalDialog::KQProgressModalDialog ( const QString & captionText, const QString & labelText, const QString & cancelButtonText, int totalSteps, QWidget * creator ) : QProgressDialog( labelText, cancelButtonText, 0, totalSteps, creator ) { setWindowTitle( captionText ); setMinimumDuration( 1 ); } #endif kchmviewer-7.5/src/PaxHeaders.8614/navigationpanel.h0000644000000000000000000000012412321077735017337 xustar0027 mtime=1396998109.567818 27 atime=1447562193.165734 30 ctime=1447562193.165734117 kchmviewer-7.5/src/navigationpanel.h0000644000175000001440000000461112321077735017671 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef NAVIGATIONPANEL_H #define NAVIGATIONPANEL_H #include #include "ui_navigatorpanel.h" #include "kde-qt.h" class EBook; // This class shows content, index, search and bookmark tabs class NavigationPanel : public QDockWidget, public Ui::NavigatorPanel { Q_OBJECT public: enum { TAB_CONTENTS, TAB_INDEX, TAB_SEARCH, TAB_BOOKMARK }; NavigationPanel( QWidget * parent ); // Sets the bookmark menu (maintained by bookmark tab) void setBookmarkMenu( QMenu * menu ); // Invalidate data in all tabs void invalidate(); // Update tabs content from CHM file data void updateTabs(EBook *file ); // Save/load current file settings void applySettings( Settings * settings ); void getSettings( Settings * settings ); // Active tab get/set int active() const; void setActive( int index ); // Refresh content and index tab contents void refresh(); // Locate URL or text in the contents tab bool findUrlInContents( const QUrl & url ); void findTextInContents( const QString & text ); // Find text in index tab void findInIndex( const QString& text ); // Find text in search tab void executeQueryInSearch( const QString& text ); // Just find text without using search tab QStringList searchQuery( const QString& text ); public slots: // Add a new bookmark void addBookmark(); // Show previous/next page in table of contents void showPrevInToc(); void showNextInToc(); private: TabContents * m_contentsTab; TabIndex * m_indexTab; TabSearch * m_searchTab; TabBookmarks * m_bookmarksTab; }; #endif // NAVIGATIONPANEL_H kchmviewer-7.5/src/PaxHeaders.8614/tab_contents.h0000644000000000000000000000012412321077735016643 xustar0027 mtime=1396998109.567818 27 atime=1447562193.226733 30 ctime=1447562193.226733287 kchmviewer-7.5/src/tab_contents.h0000644000175000001440000000266312321077735017202 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef TAB_CONTENTS_H #define TAB_CONTENTS_H #include "kde-qt.h" #include "treeitem_toc.h" #include "ui_tab_contents.h" class TabContents : public QWidget, public Ui::TabContents { Q_OBJECT public: TabContents( QWidget *parent = 0 ); ~TabContents(); void refillTableOfContents(); void showItem( TreeItem_TOC * item ); void search( const QString& text ); void focus(); TreeItem_TOC * getTreeItem(const QUrl &url ); public slots: void onContextMenuRequested ( const QPoint &point ); void onClicked ( QTreeWidgetItem * item, int column ); private: QMenu * m_contextMenu; }; #endif /* INCLUDE_KCHMCONTENTSWINDOW_H */ kchmviewer-7.5/src/PaxHeaders.8614/viewwindow.h0000644000000000000000000000012412616053773016365 xustar0027 mtime=1446533115.598158 27 atime=1447562193.227733 30 ctime=1447562193.227733274 kchmviewer-7.5/src/viewwindow.h0000644000175000001440000000673612616053773016731 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef VIEWWINDOW_H #define VIEWWINDOW_H #include #include "kde-qt.h" class ViewWindow : public QWebView { Q_OBJECT public: ViewWindow( QWidget * parent ); virtual ~ViewWindow(); //! Open a page from current chm archive bool openUrl (const QUrl& url ); QUrl getOpenedPage() const { return url(); } QUrl getNewTabLink() const { return m_newTabLinkKeeper; } signals: void dataLoaded( ViewWindow * window ); public: //! Invalidate current view, doing all the cleanups etc. void invalidate(); //! Popups the print dialog, and prints the current page on the printer. bool printCurrentPage(); //! Return current ZoomFactor. qreal getZoomFactor() const; //! Sets ZoomFactor. The value returned by getZoomFactor(), given to this function, should give the same result. void setZoomFactor( qreal zoom ); /*! * Return current scrollbar position in view window. Saved on program exit. * There is no restriction on returned value, except that giving this value to * setScrollbarPosition() should move the scrollbar in the same position. */ int getScrollbarPosition(); //! Sets the scrollbar position. void setScrollbarPosition(int pos, bool force = false); //! Select the content of the whole page void clipSelectAll(); //! Copies the selected content to the clipboard void clipCopy(); //! Updates the history toolbar icon status void updateHistoryIcons(); //! Returns the window title QString title() const; //! Navigation stuff void navigateBack(); void navigateHome(); void navigateForward(); //! Keeps the tab URL between link following void setTabKeeper ( const QUrl& link ); public slots: void zoomIncrease(); void zoomDecrease(); protected: bool openPage ( const QUrl& url ); void handleStartPageAsImage( QUrl& link ); QMenu * getContextMenu( const QUrl& link, QWidget * parent ); QMenu * createStandardContextMenu( QWidget * parent ); // Overriden to change the source void setSource ( const QUrl & name ); QString anchorAt( const QPoint & pos ); // Overloaded to provide custom context menu void contextMenuEvent( QContextMenuEvent *e ); void mouseReleaseEvent ( QMouseEvent * event ); private slots: // Used to restore the scrollbar position and the navigation button status void onLoadFinished ( bool ok ); private: QMenu * m_contextMenu; QMenu * m_contextMenuLink; // This member keeps a "open new tab" link between getContextMenu() // call and appropriate slot call QUrl m_newTabLinkKeeper; // Keeps the scrollbar position to move after the page is loaded int m_storedScrollbarPosition; }; #endif kchmviewer-7.5/src/PaxHeaders.8614/tab_index.cpp0000644000000000000000000000012412616066413016446 xustar0027 mtime=1446538507.448643 27 atime=1447562193.226733 30 ctime=1447562193.226733287 kchmviewer-7.5/src/tab_index.cpp0000644000175000001440000001425012616066413017000 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include "mainwindow.h" #include "treeitem_index.h" #include "tab_index.h" #include "config.h" TabIndex::TabIndex ( QWidget * parent ) : QWidget( parent ), Ui::TabIndex() { // UIC stuff setupUi( this ); tree->headerItem()->setHidden( true ); connect( text, SIGNAL( textChanged (const QString &) ), this, SLOT( onTextChanged(const QString &) ) ); connect( text, SIGNAL( returnPressed() ), this, SLOT( onReturnPressed() ) ); if ( pConfig->m_tabUseSingleClick ) { connect( tree, SIGNAL( itemClicked(QTreeWidgetItem*,int)), this, SLOT( onItemActivated( QTreeWidgetItem *, int ) ) ); } else { connect( tree, SIGNAL( itemActivated ( QTreeWidgetItem *, int ) ), this, SLOT( onItemActivated( QTreeWidgetItem *, int ) ) ); } // Activate custom context menu, and connect it tree->setContextMenuPolicy( Qt::CustomContextMenu ); connect( tree, SIGNAL( customContextMenuRequested ( const QPoint & ) ), this, SLOT( onContextMenuRequested( const QPoint & ) ) ); m_indexListFilled = false; m_lastSelectedItem = 0; m_contextMenu = 0; focus(); } void TabIndex::onTextChanged ( const QString & newvalue) { QList items = tree->findItems( newvalue, Qt::MatchStartsWith ); if ( !items.isEmpty() ) { m_lastSelectedItem = items[0]; tree->setCurrentItem( m_lastSelectedItem ); tree->scrollToItem( m_lastSelectedItem ); } else m_lastSelectedItem = 0; } void TabIndex::showEvent( QShowEvent * ) { if ( !::mainWindow->chmFile() || m_indexListFilled ) return; m_indexListFilled = true; refillIndex(); } void TabIndex::onReturnPressed( ) { if ( !m_lastSelectedItem ) return; TreeItem_Index * treeitem = (TreeItem_Index*) m_lastSelectedItem; ::mainWindow->activateUrl( treeitem->getUrl() ); } void TabIndex::invalidate( ) { tree->clear(); m_indexListFilled = false; m_lastSelectedItem = 0; } void TabIndex::onItemActivated ( QTreeWidgetItem * item, int ) { if ( !item ) return; TreeItem_Index * treeitem = (TreeItem_Index*) item; // Prevent opened index tree item from closing; because the tree open/close // procedure will be triggered after the slots are called, we change the tree // state to "collapsed", so the slot handler expands it again. if ( item->isExpanded() ) item->setExpanded( false ); QUrl url = treeitem->getUrl(); if ( !url.isValid() ) return; if ( treeitem->isSeeAlso() ) // 'see also' link { QList items = tree->findItems( treeitem->seeAlso(), Qt::MatchFixedString ); if ( !items.isEmpty() ) { m_lastSelectedItem = items[0]; tree->setCurrentItem( m_lastSelectedItem ); tree->scrollToItem( m_lastSelectedItem ); } else m_lastSelectedItem = 0; } else ::mainWindow->openPage( url, MainWindow::OPF_CONTENT_TREE ); } void TabIndex::refillIndex( ) { ShowWaitCursor wc; QList< EBookIndexEntry > data; if ( !::mainWindow->chmFile()->getIndex( data ) || data.size() == 0 ) { qWarning ("CHM index present but is empty; wrong parsing?"); return; } QVector< TreeItem_Index *> lastchild; QVector< TreeItem_Index *> rootentry; bool warning_shown = false; tree->clear(); for ( int i = 0; i < data.size(); i++ ) { int indent = data[i].indent; // Do we need to add another indent? if ( indent >= rootentry.size() ) { int maxindent = rootentry.size() - 1; // Resize the arrays lastchild.resize( indent + 1 ); rootentry.resize( indent + 1 ); if ( indent > 0 && maxindent < 0 ) qFatal("Invalid fisrt TOC indent (first entry has no root entry), aborting."); // And init the rest if needed if ( (indent - maxindent) > 1 ) { if ( !warning_shown ) { qWarning("Invalid TOC step, applying workaround. Results may vary."); warning_shown = true; } for ( int j = maxindent; j < indent; j++ ) { lastchild[j+1] = lastchild[j]; rootentry[j+1] = rootentry[j]; } } lastchild[indent] = 0; rootentry[indent] = 0; } // Create the node TreeItem_Index * item; if ( indent == 0 ) item = new TreeItem_Index( tree, lastchild[indent], data[i].name, data[i].urls, data[i].seealso ); else { // New non-root entry. It is possible (for some buggy CHMs) that there is no previous entry: previoous entry had indent 1, // and next entry has indent 3. Backtracking it up, creating missing entries. if ( rootentry[indent-1] == 0 ) qFatal("Child entry indented as %d with no root entry!", indent); item = new TreeItem_Index( rootentry[indent-1], lastchild[indent], data[i].name, data[i].urls, data[i].seealso ); } // Make it open item->setExpanded( true ); lastchild[indent] = item; rootentry[indent] = item; } tree->update(); } void TabIndex::search( const QString & index ) { if ( !::mainWindow->chmFile() ) return; if ( !m_indexListFilled ) { m_indexListFilled = true; refillIndex(); } text->setText( index ); onTextChanged( index ); } void TabIndex::focus() { if ( !tree->hasFocus() ) tree->setFocus(); } void TabIndex::onContextMenuRequested(const QPoint & point) { TreeItem_Index * treeitem = (TreeItem_Index *) tree->itemAt( point ); if( treeitem ) { ::mainWindow->currentBrowser()->setTabKeeper( treeitem->getUrl() ); ::mainWindow->tabItemsContextMenu()->popup( tree->viewport()->mapToGlobal( point ) ); } } kchmviewer-7.5/src/PaxHeaders.8614/src.pro0000644000000000000000000000012212616333137015314 xustar0027 mtime=1446622815.937622 27 atime=1447562193.225733 28 ctime=1447562193.2257333 kchmviewer-7.5/src/src.pro0000644000175000001440000000472212616333137015653 0ustar00timusers00000000000000INCLUDEPATH += ../lib/libebook HEADERS += config.h \ dbus_interface.h \ dialog_chooseurlfromlist.h \ dialog_setup.h \ kde-qt.h \ mainwindow.h \ recentfiles.h \ settings.h \ tab_bookmarks.h \ tab_contents.h \ tab_index.h \ tab_search.h \ version.h \ viewwindow.h \ viewwindowmgr.h \ navigationpanel.h \ checknewversion.h \ toolbarmanager.h \ toolbareditor.h \ qwebviewnetwork.h \ textencodings.h \ treeitem_toc.h \ treeitem_index.h SOURCES += config.cpp \ dbus_interface.cpp \ dialog_chooseurlfromlist.cpp \ dialog_setup.cpp \ kde-qt.cpp \ main.cpp \ mainwindow.cpp \ recentfiles.cpp \ settings.cpp \ tab_bookmarks.cpp \ tab_contents.cpp \ tab_index.cpp \ tab_search.cpp \ viewwindow.cpp \ viewwindowmgr.cpp \ navigationpanel.cpp \ checknewversion.cpp \ toolbarmanager.cpp \ toolbareditor.cpp \ qwebviewnetwork.cpp \ textencodings.cpp \ treeitem_toc.cpp \ treeitem_index.cpp POST_TARGETDEPS += ../lib/libebook/libebook.a LIBS += ../lib/libebook/libebook.a -lchm -lzip TARGET = ../bin/kchmviewer CONFIG += threads \ warn_on \ precompile_header \ xml \ dbus TEMPLATE = app FORMS += tab_bookmarks.ui \ tab_index.ui \ tab_contents.ui \ tab_search.ui \ dialog_setup.ui \ dialog_topicselector.ui \ mainwindow.ui \ window_browser.ui \ navigatorpanel.ui \ dialog_about.ui \ toolbareditor.ui RESOURCES += resources/images.qrc QT += webkit \ dbus \ xml \ network \ widgets \ webkitwidgets \ printsupport linux-g++*:{ LIBS += -lX11 } # This is used by cross-build on 64-bit when building a 32-bit version linux-g++-32: { LIBS += -L. } win32-g++*: { QT -= dbus HEADERS -= dbus_interface.h SOURCES -= dbus_interface.cpp CONFIG -= dbus LIBS -= ../lib/libebook/libebook.a POST_TARGETDEPS -= ../lib/libebook/libebook.a CONFIG( debug, debug|release ) { LIBS += "../lib/libebook/debug/libebook.a" } else { LIBS += "../lib/libebook/release/libebook.a" } LIBS += -lchm -lwsock32 -lzip -lz -loleaut32 } macx-g++: { HEADERS -= dbus_interface.h SOURCES -= dbus_interface.cpp CONFIG -= dbus HEADERS += kchmviewerapp.h SOURCES += kchmviewerapp.cpp QMAKE_INFO_PLIST=resources/Info.plist QMAKE_POST_LINK += cp resources/*.icns ${DESTDIR}/kchmviewer.app/Contents/Resources; } kchmviewer-7.5/src/PaxHeaders.8614/recentfiles.h0000644000000000000000000000012412321077735016463 xustar0027 mtime=1396998109.567818 27 atime=1447562193.166734 30 ctime=1447562193.166734104 kchmviewer-7.5/src/recentfiles.h0000644000175000001440000000463712321077735017025 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef RECENTFILES_H #define RECENTFILES_H #include #include #include #include // This class assumes QSettings object can be created using default constructor, i.e. // QCoreApplication::setOrganizationName( ... ); // QCoreApplication::setOrganizationDomain( ... ); // QCoreApplication::setApplicationName( ... ); // have been called. // // This class is based on Qt example // class RecentFiles : public QObject { Q_OBJECT public: // A constructor specifies the menu to add recent files to, and the action to add it before. RecentFiles( QMenu * menu, QAction * before, int maxfiles = 5, const QString& settingsname = QString::null ); virtual ~RecentFiles(); signals: void openRecentFile( const QString& file ); public slots: // Sets the current file to the recent file. Does the following: // - Adds it to the top of recent files list, or moves it to the top; // - Removes the last entry, if necessary; void setCurrentFile( const QString& file ); // Removes the current file from the recent files. Useful, for example, // when attempt to open a recent project failed. void removeRecentFile( const QString& file ); // Returns the last added recent file QString latestFile(); protected: // Override those functions in a derived class to store/load the // list of recent files from a different place QStringList loadRecentFiles(); void saveRecentFiles( const QStringList& files ); private slots: void actionRecent(); void updateMenu(); private: QString m_settingsName; QAction * m_separator; QVector< QAction* > m_actions; }; #endif // RECENTFILES_H kchmviewer-7.5/src/PaxHeaders.8614/viewwindowmgr.cpp0000644000000000000000000000012312616053773017425 xustar0027 mtime=1446533115.598158 27 atime=1447562193.228733 29 ctime=1447562193.22873326 kchmviewer-7.5/src/viewwindowmgr.cpp0000644000175000001440000002671512616053773017771 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include "config.h" #include "mainwindow.h" #include "viewwindow.h" #include "viewwindowmgr.h" // A small overriden class to handle a middle click class ViewWindowTabWidget : public QTabWidget { public: ViewWindowTabWidget( QWidget * parent ) : QTabWidget( parent ) {} protected: void mouseReleaseEvent ( QMouseEvent * event ) { if ( event->button() == Qt::MidButton) { int tab = tabBar()->tabAt( event->pos() ); if ( tab != -1 ) emit tabCloseRequested( tab ); } } }; ViewWindowMgr::ViewWindowMgr( QWidget *parent ) : QWidget( parent ), Ui::TabbedBrowser() { // UIC setupUi( this ); // Set up the initial settings applyBrowserSettings(); // Create the tab widget m_tabWidget = new ViewWindowTabWidget( this ); verticalLayout->insertWidget( 0, m_tabWidget, 10 ); // on current tab changed connect( m_tabWidget, SIGNAL( currentChanged(int) ), this, SLOT( onTabChanged(int) ) ); connect( m_tabWidget, SIGNAL( tabCloseRequested(int) ), this, SLOT( onCloseWindow(int) ) ); // Create a "new tab" button QToolButton * newButton = new QToolButton( this ); newButton->setCursor( Qt::ArrowCursor ); newButton->setAutoRaise( true ); newButton->setIcon( QIcon( ":/images/addtab.png" ) ); newButton->setToolTip( i18n("Add page") ); connect( newButton, SIGNAL( clicked() ), this, SLOT( openNewTab() ) ); // Put it there m_tabWidget->setCornerWidget( newButton, Qt::TopLeftCorner ); // Hide the search frame frameFind->setVisible( false ); // Search Line edit connect( editFind, SIGNAL( textEdited ( const QString & ) ), this, SLOT( editTextEdited( const QString & ) ) ); connect( editFind, SIGNAL(returnPressed()), this, SLOT(onFindNext()) ); // Search toolbar buttons toolClose->setShortcut( Qt::Key_Escape ); connect( toolClose, SIGNAL(clicked()), this, SLOT( closeSearch()) ); connect( toolPrevious, SIGNAL(clicked()), this, SLOT( onFindPrevious()) ); connect( toolNext, SIGNAL(clicked()), this, SLOT( onFindNext()) ); } ViewWindowMgr::~ViewWindowMgr( ) { } void ViewWindowMgr::createMenu( MainWindow *, QMenu * menuWindow, QAction * actionCloseWindow ) { m_menuWindow = menuWindow; m_actionCloseWindow = actionCloseWindow; } void ViewWindowMgr::invalidate() { closeAllWindows(); addNewTab( true ); } ViewWindow * ViewWindowMgr::current() { TabData * tab = findTab( m_tabWidget->currentWidget() ); if ( !tab ) abort(); return tab->window; } ViewWindow * ViewWindowMgr::addNewTab( bool set_active ) { ViewWindow * viewvnd = new ViewWindow( m_tabWidget ); editFind->installEventFilter( this ); // Create the tab data structure TabData tabdata; tabdata.window = viewvnd; tabdata.action = new QAction( "window", this ); // temporary name; real name is set in setTabName tabdata.widget = viewvnd; connect( tabdata.action, SIGNAL( triggered() ), this, SLOT( activateWindow() ) ); m_Windows.push_back( tabdata ); m_tabWidget->addTab( tabdata.widget, "" ); Q_ASSERT( m_Windows.size() == m_tabWidget->count() ); // Set active if it is the first tab if ( set_active || m_Windows.size() == 1 ) m_tabWidget->setCurrentWidget( tabdata.widget ); // Handle clicking on link in browser window connect( viewvnd, SIGNAL( linkClicked ( const QUrl& ) ), ::mainWindow, SLOT( activateUrl( const QUrl& ) ) ); connect( viewvnd, SIGNAL(dataLoaded(ViewWindow*)), this, SLOT(onWindowContentChanged(ViewWindow*))); // Set up the accelerator if we have room if ( m_Windows.size() < 10 ) tabdata.action->setShortcut( QKeySequence( i18n("Alt+%1").arg( m_Windows.size() ) ) ); // Add it to the "Windows" menu m_menuWindow->addAction( tabdata.action ); return viewvnd; } void ViewWindowMgr::closeAllWindows( ) { while ( m_Windows.begin() != m_Windows.end() ) closeWindow( m_Windows.first().widget ); } void ViewWindowMgr::setTabName( ViewWindow * window ) { TabData * tab = findTab( window ); if ( tab ) { QString title = window->title().trimmed(); // Trim too long string if ( title.length() > 25 ) title = title.left( 22 ) + "..."; m_tabWidget->setTabText( m_tabWidget->indexOf( window ), title ); tab->action->setText( title ); updateCloseButtons(); } } void ViewWindowMgr::onCloseCurrentWindow( ) { // Do not allow to close the last window if ( m_Windows.size() == 1 ) return; TabData * tab = findTab( m_tabWidget->currentWidget() ); closeWindow( tab->widget ); } void ViewWindowMgr::onCloseWindow( int num ) { // Do not allow to close the last window if ( m_Windows.size() == 1 ) return; TabData * tab = findTab( m_tabWidget->widget( num )); if ( tab ) closeWindow( tab->widget ); } void ViewWindowMgr::closeWindow( QWidget * widget ) { WindowsIterator it; for ( it = m_Windows.begin(); it != m_Windows.end(); ++it ) if ( it->widget == widget ) break; if ( it == m_Windows.end() ) qFatal( "ViewWindowMgr::closeWindow called with unknown widget!" ); m_menuWindow->removeAction( it->action ); m_tabWidget->removeTab( m_tabWidget->indexOf( it->widget ) ); delete it->window; delete it->action; m_Windows.erase( it ); updateCloseButtons(); // Change the accelerators, as we might have removed the item in the middle int count = 1; for ( WindowsIterator it = m_Windows.begin(); it != m_Windows.end() && count < 10; ++it, count++ ) (*it).action->setShortcut( QKeySequence( i18n("Alt+%1").arg( count ) ) ); } void ViewWindowMgr::restoreSettings( const Settings::viewindow_saved_settings_t & settings ) { // Destroy automatically created tab closeWindow( m_Windows.first().widget ); for ( int i = 0; i < settings.size(); i++ ) { ViewWindow * window = addNewTab( false ); window->openUrl( settings[i].url ); // will call setTabName() window->setScrollbarPosition( settings[i].scroll_y ); window->setZoomFactor( settings[i].zoom ); } } void ViewWindowMgr::saveSettings( Settings::viewindow_saved_settings_t & settings ) { settings.clear(); for ( int i = 0; i < m_tabWidget->count(); i++ ) { QWidget * p = m_tabWidget->widget( i ); TabData * tab = findTab( p ); if ( !tab ) abort(); settings.push_back( Settings::SavedViewWindow( tab->window->getOpenedPage().toString(), tab->window->getScrollbarPosition(), tab->window->getZoomFactor()) ); } } void ViewWindowMgr::updateCloseButtons( ) { bool enabled = m_Windows.size() > 1; m_actionCloseWindow->setEnabled( enabled ); m_tabWidget->setTabsClosable( enabled ); } void ViewWindowMgr::onTabChanged( int newtabIndex ) { if ( newtabIndex == -1 ) return; TabData * tab = findTab( m_tabWidget->widget( newtabIndex ) ); if ( tab ) { tab->window->updateHistoryIcons(); mainWindow->browserChanged( tab->window ); tab->widget->setFocus(); } } void ViewWindowMgr::openNewTab() { ::mainWindow->openPage( current()->getOpenedPage(), MainWindow::OPF_NEW_TAB | MainWindow::OPF_CONTENT_TREE ); } void ViewWindowMgr::activateWindow() { QAction *action = qobject_cast< QAction * >(sender()); for ( WindowsIterator it = m_Windows.begin(); it != m_Windows.end(); ++it ) { if ( it->action != action ) continue; QWidget *widget = it->widget; m_tabWidget->setCurrentWidget(widget); break; } } void ViewWindowMgr::closeSearch() { frameFind->hide(); m_tabWidget->currentWidget()->setFocus(); } ViewWindowMgr::TabData * ViewWindowMgr::findTab(QWidget * widget) { for ( WindowsIterator it = m_Windows.begin(); it != m_Windows.end(); ++it ) if ( it->widget == widget ) return (it.operator->()); return 0; } void ViewWindowMgr::setCurrentPage(int index) { m_tabWidget->setCurrentIndex( index ); } int ViewWindowMgr::currentPageIndex() const { return m_tabWidget->currentIndex(); } void ViewWindowMgr::onActivateFind() { frameFind->show(); labelWrapped->setVisible( false ); editFind->setFocus( Qt::ShortcutFocusReason ); editFind->selectAll(); } void ViewWindowMgr::find( bool backward ) { QWebPage::FindFlags webkitflags = 0; if ( checkCase->isChecked() ) webkitflags |= QWebPage::FindCaseSensitively; if ( backward ) webkitflags |= QWebPage::FindBackward; if ( pConfig->m_browserHighlightSearchResults ) { // From the doc: // If the HighlightAllOccurrences flag is passed, the // function will highlight all occurrences that exist // in the page. All subsequent calls will extend the // highlight, rather than replace it, with occurrences // of the new string. // If the search text is different, we run the empty string search // to discard old highlighting if ( m_lastSearchedWord != editFind->text() ) current()->findText( "", webkitflags | QWebPage::HighlightAllOccurrences ); m_lastSearchedWord = editFind->text(); // Now we call search with highlighting enabled, while the main search below will have // it disabled. This leads in both having the highlighting results AND working forward/ // backward buttons. current()->findText( editFind->text(), webkitflags | QWebPage::HighlightAllOccurrences ); } // Pre-hide the wrapper labelWrapped->hide(); bool found = current()->findText( editFind->text(), webkitflags ); // If we didn't find anything, enable the wrap and try again if ( !found ) { found = current()->findText( editFind->text(), webkitflags | QWebPage::FindWrapsAroundDocument ); if ( found ) labelWrapped->show(); } if ( !frameFind->isVisible() ) frameFind->show(); QPalette p = editFind->palette(); if ( !found ) p.setColor( QPalette::Active, QPalette::Base, QColor(255, 102, 102) ); else p.setColor( QPalette::Active, QPalette::Base, Qt::white ); editFind->setPalette( p ); } void ViewWindowMgr::editTextEdited(const QString &) { find(); } void ViewWindowMgr::onFindNext() { find(); } void ViewWindowMgr::onFindPrevious() { find( true ); } void ViewWindowMgr::onWindowContentChanged(ViewWindow *window) { setTabName( (ViewWindow*) window ); } void ViewWindowMgr::applyBrowserSettings() { QWebSettings * setup = QWebSettings::globalSettings(); setup->setAttribute( QWebSettings::AutoLoadImages, pConfig->m_browserEnableImages ); setup->setAttribute( QWebSettings::JavascriptEnabled, pConfig->m_browserEnableJS ); setup->setAttribute( QWebSettings::JavaEnabled, pConfig->m_browserEnableJava ); setup->setAttribute( QWebSettings::PluginsEnabled, pConfig->m_browserEnablePlugins ); setup->setAttribute( QWebSettings::OfflineStorageDatabaseEnabled, pConfig->m_browserEnableOfflineStorage ); setup->setAttribute( QWebSettings::LocalStorageDatabaseEnabled, pConfig->m_browserEnableLocalStorage ); setup->setAttribute( QWebSettings::LocalStorageEnabled, pConfig->m_browserEnableLocalStorage ); } kchmviewer-7.5/src/PaxHeaders.8614/textencodings.cpp0000644000000000000000000000012412321077735017371 xustar0027 mtime=1396998109.567818 27 atime=1447562193.226733 30 ctime=1447562193.226733287 kchmviewer-7.5/src/textencodings.cpp0000644000175000001440000000460212321077735017723 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include "textencodings.h" typedef struct { const char * language; const char * qtcodec; } TextEncodingEntry; static const TextEncodingEntry text_encoding_table [] = { { "Arabic", "CP1256" }, { "Baltic", "CP1257" }, { "Central European", "CP1250" }, { "Chinese Simplified", "GB18030" }, { "Chinese Simplified", "GBK" }, { "Chinese Simplified", "GB2313" }, { "Chinese Traditional", "Big5" }, { "Chinese Traditional", "Big5-HKSCS", }, { "Cyrillic", "CP1251", }, { "Cyrillic", "KOI8-R", }, { "Cyrillic Broken", "CP1251/KOI8-R", }, { "Cyrillic Broken", "KOI8-R/CP1251", }, { "Greek", "CP1253", }, { "Hebrew", "CP1255", }, { "Japanese", "Shift-JIS", }, { "Japanese", "eucJP", }, { "Japanese", "JIS7", }, { "Korean", "eucKR", }, { "Tamil", "TSCII", }, { "Thai", "TIS-620", }, { "Ukrainian", "KOI8-U" }, { "Turkish", "CP1254" }, { "Vietnamese", "CP1258" }, { "Unicode", "UTF-8" }, { "Unicode", "UTF-16", }, { "Western", "CP1252", }, { 0, 0 } }; TextEncodings::TextEncodings() { } void TextEncodings::getSupported(QStringList &languages, QStringList &qtcodecs) { for ( const TextEncodingEntry * e = text_encoding_table; e->language; e++ ) { languages.push_back( e->language ); qtcodecs.push_back( e->qtcodec ); } } QString TextEncodings::languageForCodec(const QString &qtcodec) { for ( const TextEncodingEntry * e = text_encoding_table; e->language; e++ ) { if ( e->qtcodec == qtcodec ) return e->language; } return "Unknown"; } kchmviewer-7.5/src/PaxHeaders.8614/viewwindowmgr.h0000644000000000000000000000012312616053773017072 xustar0027 mtime=1446533115.598158 27 atime=1447562193.228733 29 ctime=1447562193.22873326 kchmviewer-7.5/src/viewwindowmgr.h0000644000175000001440000000626612616053773017435 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef VIEWWINDOWMGR_H #define VIEWWINDOWMGR_H #include "kde-qt.h" #include "settings.h" #include "ui_window_browser.h" class ViewWindowTabWidget; class ViewWindowMgr : public QWidget, public Ui::TabbedBrowser { Q_OBJECT public: ViewWindowMgr( QWidget *parent ); ~ViewWindowMgr( ); // Returns a handle to a currently viewed window. // Guaranteeed to return a valid handle, or aborts. ViewWindow * current(); // Adds a new tab, creating a new browser window ViewWindow * addNewTab( bool set_active ); // Sets the tab name and updates Windows menu void setTabName( ViewWindow* window ); void invalidate(); // Creates a Window menu void createMenu( MainWindow * parent, QMenu * menuWindow, QAction * actionCloseWindow ); // Saves and restores current settings between sessions void restoreSettings( const Settings::viewindow_saved_settings_t& settings ); void saveSettings( Settings::viewindow_saved_settings_t& settings ); void setCurrentPage( int index ); int currentPageIndex() const; // Reloads all windows void reloadAllWindows(); // Set up the configuration settings void applyBrowserSettings(); public slots: void onCloseCurrentWindow(); void onCloseWindow( int num ); void onActivateFind(); void onFindNext(); void onFindPrevious(); void onWindowContentChanged(ViewWindow *window ); protected slots: void openNewTab(); void onTabChanged( int newtabIndex ); void updateCloseButtons(); void activateWindow(); void closeSearch(); void editTextEdited( const QString & text ); private: void find( bool backward = false ); typedef struct { QWidget * widget; ViewWindow * window; QAction * action; } TabData; void closeAllWindows(); void closeWindow( QWidget * widget ); TabData * findTab( QWidget * widget ); // Storage of all available windows QList< TabData > m_Windows; typedef QList< TabData >::iterator WindowsIterator; QMenu * m_menuWindow; QAction * m_actionCloseWindow; // Window menu actions. Contains one action per window. They are not // linked permanently - if a middle window is deleted, all the following // actions will be relinked and replaced. QList< QAction* > m_actions; // Last word searched QString m_lastSearchedWord; ViewWindowTabWidget * m_tabWidget; }; #endif /* INCLUDE_KCHMVIEWWINDOWMGR_H */ kchmviewer-7.5/src/PaxHeaders.8614/checknewversion.h0000644000000000000000000000012412321077735017355 xustar0027 mtime=1396998109.567818 27 atime=1447562193.159734 30 ctime=1447562193.160734185 kchmviewer-7.5/src/checknewversion.h0000644000175000001440000000757012321077735017716 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef CHECKNEWVERSION_H #define CHECKNEWVERSION_H // This class implements checking whether a new application version is available, // and reports its availability via signal. It does not use Qt networking stuff, // and therefore avoids linking with QtNetwork (savings of 1Mb!). // All processing is done in a separate thread, so it does not block the app. // It does not use GUI stuff, so should be safe. // // The proper way to use this class: // // CheckNewVersion * pN = new CheckNewVersion(); // connect( pN, SIGNAL( newVersionAvailable( const QMap&) ), this, SLOT( newVersionAvailable( const QMap&) ) ); // // pN->setUrl( "http://www.example.com/latestversion.txt" ); // pN->setCurrentVersion( "1.12" ); // pN->start(); // // The text file must have the following format: // : // Two field names are required (Signature and Version). Any other names are optional. Any name may be added. // A multiline value string should have all line feed characters replaced by \n, and all single backlashes replaced by two // Signature must be the first field, and must contain the "CheckNewVersion1" value // // An example file with extra fields "URL" and "Changes" added: // // Signature:CheckNewVersion1 // Version:1.12 // URL: http://example.com/latestversion.zip // Changes: new functionality added.\nA bar function added to package foo.\n\nZeta now works. // // #include #include #include typedef QMap NewVersionMetaMap; class CheckNewVersion : public QThread { Q_OBJECT public: enum { Status_Resolving, Status_Connecting, Status_SendingRequest, Status_ReceivingResponse, Status_Proceeding, Status_Finished, }; enum { Error_URL_Invalid, Error_Name_Lookup, Error_System, Error_Connecting, Error_Sending, Error_Receiving, Error_HTTPerror, Error_InvalidFormat, Error_InvalidSignature }; CheckNewVersion(); // Sets the full URL to get the latest version information from. void setUrl( const QString& url ); // Sets the current version. newVersionAvailable() will only be emitted // if current version does not match the version in the downloaded file. // If not called, newVersionAvailable() will be always emitted. void setCurrentVersion( const QString& version ); signals: void newVersionAvailable( const NewVersionMetaMap& metadata ); void statusChanged( int newstatus ); void error( int errorcode ); private: // Reimplemented void run(); // All those functions on error generate the event, and shut down the thread. void fatalError( int code ); // Read the line from socket (or m_inputBuffer). void reportStatus( int status ); // Read the data from socket up to length. May return less than length. QString readLine(); // Closing the socket void closeSocket(); private: QString m_url; QString m_currentversion; int m_sockfd; unsigned int m_timeout; int m_inputOffset; // in m_inputBuffer QByteArray m_inputBuffer; // for socket input }; Q_DECLARE_METATYPE(NewVersionMetaMap); #endif // CHECKNEWVERSION_H kchmviewer-7.5/src/PaxHeaders.8614/dialog_setup.cpp0000644000000000000000000000012412616066413017170 xustar0027 mtime=1446538507.448643 27 atime=1447562193.162734 30 ctime=1447562193.162734158 kchmviewer-7.5/src/dialog_setup.cpp0000644000175000001440000001661312616066413017527 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include "kde-qt.h" #include "config.h" #include "dialog_setup.h" #include "mainwindow.h" #include "version.h" DialogSetup::DialogSetup(QWidget *parent) : QDialog(parent), Ui::DialogSetup() { setupUi( this ); connect( btnBrowse, SIGNAL( clicked() ), this, SLOT( browseExternalEditor() ) ); // Set up the parameters switch ( pConfig->m_startupMode ) { case Config::STARTUP_DO_NOTHING: rbStartWithNothing->setChecked( true ); break; case Config::STARTUP_LOAD_LAST_FILE: m_radioOnBeginOpenLast->setChecked( true ); break; case Config::STARTUP_POPUP_OPENFILE: m_radioOnBeginOpenDialog->setChecked( true ); break; } m_historySize->setValue ( pConfig->m_numOfRecentFiles ); m_rememberHistoryInfo->setChecked ( pConfig->m_HistoryStoreExtra ); m_radioExtLinkOpenAlways->setChecked ( pConfig->m_onExternalLinkClick == Config::ACTION_ALWAYS_OPEN ); m_radioExtLinkAsk->setChecked ( pConfig->m_onExternalLinkClick == Config::ACTION_ASK_USER ); m_radioExtLinkOpenNever->setChecked ( pConfig->m_onExternalLinkClick == Config::ACTION_DONT_OPEN ); m_highlightSearchResults->setChecked( pConfig->m_browserHighlightSearchResults ); m_radioNewChmOpenAlways->setChecked ( pConfig->m_onNewChmClick == Config::ACTION_ALWAYS_OPEN ); m_radioNewChmAsk->setChecked ( pConfig->m_onNewChmClick == Config::ACTION_ASK_USER ); m_radioNewChmOpenNever->setChecked ( pConfig->m_onNewChmClick == Config::ACTION_DONT_OPEN ); m_advExternalProgramName->setText( pConfig->m_advExternalEditorPath ); m_advViewSourceExternal->setChecked ( !pConfig->m_advUseInternalEditor ); m_advViewSourceInternal->setChecked ( pConfig->m_advUseInternalEditor ); m_numOfRecentFiles = pConfig->m_numOfRecentFiles; boxAutodetectEncoding->setChecked( pConfig->m_advAutodetectEncoding ); boxLayoutDirectionRL->setChecked( pConfig->m_advLayoutDirectionRL ); // Browser settings m_enableImages->setChecked( pConfig->m_browserEnableImages ); m_enableJS->setChecked( pConfig->m_browserEnableJS ); m_enableJava->setChecked( pConfig->m_browserEnableJava ); m_enablePlugins->setChecked( pConfig->m_browserEnablePlugins ); m_enableOfflineStorage->setChecked( pConfig->m_browserEnableOfflineStorage ); m_enableLocalStorage->setChecked( pConfig->m_browserEnableLocalStorage ); m_openAllTOCEntries->setChecked( pConfig->m_tocOpenAllEntries ); boxUseSingleClick->setChecked( pConfig->m_tabUseSingleClick ); switch ( pConfig->m_toolbarMode ) { case Config::TOOLBAR_SMALLICONS: rbToolbarSmall->setChecked( true ); break; case Config::TOOLBAR_LARGEICONS: rbToolbarLarge->setChecked( true ); break; case Config::TOOLBAR_LARGEICONSTEXT: rbToolbarLargeText->setChecked( true ); break; case Config::TOOLBAR_TEXTONLY: rbToolbarText->setChecked( true ); break; } cbCheckForUpdates->setChecked( pConfig->m_advCheckNewVersion ); } DialogSetup::~DialogSetup() { } static void inline Check_Need_Restart( QCheckBox * box, bool * confsetting, bool * need_restart ) { if ( *confsetting != box->isChecked() ) { *need_restart = true; *confsetting = box->isChecked(); } } void DialogSetup::accept() { if ( rbStartWithNothing->isChecked() ) pConfig->m_startupMode = Config::STARTUP_DO_NOTHING; else if ( m_radioOnBeginOpenLast->isChecked() ) pConfig->m_startupMode = Config::STARTUP_LOAD_LAST_FILE; else pConfig->m_startupMode = Config::STARTUP_POPUP_OPENFILE; pConfig->m_numOfRecentFiles = m_historySize->value(); pConfig->m_HistoryStoreExtra = m_rememberHistoryInfo->isChecked(); pConfig->m_browserHighlightSearchResults = m_highlightSearchResults->isChecked(); pConfig->m_tocOpenAllEntries = m_openAllTOCEntries->isChecked(); if ( m_radioExtLinkOpenAlways->isChecked () ) pConfig->m_onExternalLinkClick = Config::ACTION_ALWAYS_OPEN; else if ( m_radioExtLinkAsk->isChecked () ) pConfig->m_onExternalLinkClick = Config::ACTION_ASK_USER; else pConfig->m_onExternalLinkClick = Config::ACTION_DONT_OPEN; if ( m_radioNewChmOpenAlways->isChecked () ) pConfig->m_onNewChmClick = Config::ACTION_ALWAYS_OPEN; else if ( m_radioNewChmAsk->isChecked () ) pConfig->m_onNewChmClick = Config::ACTION_ASK_USER; else pConfig->m_onNewChmClick = Config::ACTION_DONT_OPEN; // Check the changes bool need_restart = false; Check_Need_Restart( m_enableImages, &pConfig->m_browserEnableImages, &need_restart ); Check_Need_Restart( m_enableJS, &pConfig->m_browserEnableJS, &need_restart ); Check_Need_Restart( m_enableJava, &pConfig->m_browserEnableJava, &need_restart ); Check_Need_Restart( m_enablePlugins, &pConfig->m_browserEnablePlugins, &need_restart ); Check_Need_Restart( m_enableOfflineStorage, &pConfig->m_browserEnableOfflineStorage, &need_restart ); Check_Need_Restart( m_enableLocalStorage, &pConfig->m_browserEnableLocalStorage, &need_restart ); Check_Need_Restart( boxUseSingleClick, &pConfig->m_tabUseSingleClick, &need_restart ); Config::ToolbarMode newmode; if ( rbToolbarSmall->isChecked() ) newmode = Config::TOOLBAR_SMALLICONS; else if ( rbToolbarLarge->isChecked() ) newmode = Config::TOOLBAR_LARGEICONS; else if ( rbToolbarLargeText->isChecked() ) newmode = Config::TOOLBAR_LARGEICONSTEXT; else newmode = Config::TOOLBAR_TEXTONLY; if ( newmode != pConfig->m_toolbarMode ) { pConfig->m_toolbarMode = newmode; ::mainWindow->updateToolbars(); } pConfig->m_advExternalEditorPath = m_advExternalProgramName->text(); pConfig->m_advUseInternalEditor = m_advViewSourceExternal->isChecked(); pConfig->m_advUseInternalEditor = m_advViewSourceInternal->isChecked(); if ( pConfig->m_numOfRecentFiles != m_numOfRecentFiles ) need_restart = true; // Autodetect encoding Check_Need_Restart( boxAutodetectEncoding, &pConfig->m_advAutodetectEncoding, &need_restart ); pConfig->m_advCheckNewVersion = cbCheckForUpdates->isChecked(); // Layout direction management bool layout_rl = boxLayoutDirectionRL->isChecked(); if ( layout_rl != pConfig->m_advLayoutDirectionRL ) { pConfig->m_advLayoutDirectionRL = layout_rl; need_restart = true; } pConfig->save(); if ( need_restart ) QMessageBox::information( this, QCoreApplication::applicationName(), i18n( "Changing those options requires restarting the application to take effect." ) ); QDialog::accept(); } void DialogSetup::browseExternalEditor() { #if defined (USE_KDE) QString exec = KFileDialog::getOpenFileName( KUrl(), i18n("*|Executables"), this, i18n("Choose an editor executable")); #else QString exec = QFileDialog::getOpenFileName(this, i18n("Choose an editor executable"), QString::null, i18n( "Executables (*)") ); #endif if ( !exec.isEmpty() ) m_advExternalProgramName->setText( exec ); } kchmviewer-7.5/src/PaxHeaders.8614/tab_search.h0000644000000000000000000000012412321077735016253 xustar0027 mtime=1396998109.567818 27 atime=1447562193.226733 30 ctime=1447562193.226733287 kchmviewer-7.5/src/tab_search.h0000644000175000001440000000351212321077735016604 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef TAB_SEARCH_H #define TAB_SEARCH_H #include "kde-qt.h" #include "settings.h" #include "ui_tab_search.h" class EBookSearch; class TabSearch : public QWidget, public Ui::TabSearch { Q_OBJECT public: TabSearch( QWidget * parent = 0 ); void invalidate(); void restoreSettings (const Settings::search_saved_settings_t& settings); void saveSettings( Settings::search_saved_settings_t& settings ); void execSearchQueryInGui( const QString& query ); bool searchQuery(const QString& query, QList *results ); void focus(); private slots: void onContextMenuRequested ( const QPoint &point ); void onHelpClicked( const QString & ); void onReturnPressed (); void onItemActivated( QTreeWidgetItem * item, int ); // For index generation void onProgressStep( int value, const QString& stepName ); private: bool initSearchEngine(); private: QMenu * m_contextMenu; EBookSearch * m_searchEngine; bool m_searchEngineInitDone; // For index generation QProgressDialog * m_genIndexProgress; }; #endif kchmviewer-7.5/src/PaxHeaders.8614/navigatorpanel.ui0000644000000000000000000000012411311400213017333 xustar0027 mtime=1260781707.369914 27 atime=1447562193.166734 30 ctime=1447562193.166734104 kchmviewer-7.5/src/navigatorpanel.ui0000644000175000001440000000170011311400213017661 0ustar00timusers00000000000000 NavigatorPanel 0 0 400 300 Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Navigator panel 0 Tab 1 kchmviewer-7.5/src/PaxHeaders.8614/settings.cpp0000644000000000000000000000012212416601767016354 xustar0027 mtime=1413153783.882419 27 atime=1447562193.225733 28 ctime=1447562193.2257333 kchmviewer-7.5/src/settings.cpp0000644000175000001440000001470412416601767016714 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include #include #include #include #include "settings.h" #include "config.h" static qint32 SETTINGS_MAGIC = 0xD8AB4E76; static qint32 SETTINGS_VERSION = 4; /* * The order is important! * To be compatible with next versions, you may add items ONLY before the MARKER_END! */ enum marker_t { MARKER_FILESIZE = 1, MARKER_FILETIME, MARKER_ACTIVETABSYSTEM, MARKER_ACTIVETABWINDOW, MARKER_ACTIVEENCODING, MARKER_SEARCHHISTORY, MARKER_WINDOW_SIZE, MARKER_BOOKMARKS, MARKER_VIEWINDOWS, MARKER_CONTENTSDATA, MARKER_INDEXDATA, MARKER_ACTIVEENCODINGNAME, // This should be the last MARKER_END = 0x7FFF }; // Helpers for serialization of SavedBookmark through QDataStream static inline QDataStream& operator<< ( QDataStream& s, const Settings::SavedBookmark& b ) { s << b.name; s << b.url; s << b.scroll_y; return s; } static inline QDataStream& operator>> ( QDataStream& s, Settings::SavedBookmark& b ) { s >> b.name; s >> b.url; s >> b.scroll_y; return s; } // Helpers for serialization of SavedViewWindow through QDataStream static inline QDataStream& operator<< ( QDataStream& s, const Settings::SavedViewWindow& b ) { // Store the version first. Later we can increase it when adding new members. s << 2; s << b.url; s << b.scroll_y; s << b.zoom; return s; } static inline QDataStream& operator>> ( QDataStream& s, Settings::SavedViewWindow& b ) { qint32 version; s >> version; s >> b.url; s >> b.scroll_y; if ( version == 1 ) { // Old one; convert zoom int oldzoom; s >> oldzoom; b.zoom = 1.0 + oldzoom * 0.5; } else s >> b.zoom; return s; } Settings::Settings() { m_activetabsystem = 0; m_activetabwindow = 0; m_activeEncoding = "CP1252"; m_window_size_x = 700; m_window_size_y = 500; m_window_size_splitter = 200; } bool Settings::loadSettings( const QString & filename ) { m_activetabsystem = 0; m_activetabwindow = 0; m_activeEncoding = "CP1252"; m_searchhistory.clear(); m_bookmarks.clear(); m_viewwindows.clear(); QFileInfo finfo ( filename ); m_settingsFile = QString::null; m_searchIndex = QString::null; if ( !finfo.size() ) return false; // Init those params, as they'll be used during save the first time even if the file is not here m_currentfilesize = finfo.size(); m_currentfiledate = finfo.lastModified().toTime_t(); m_settingsFile = pConfig->getEbookSettingFile( filename ); m_searchIndex = pConfig->getEbookIndexFile( filename ); QFile file( m_settingsFile ); if ( !file.open (QIODevice::ReadOnly) ) return false; // it's ok, file may not exist QDataStream stream (&file); // Read and check header qint32 data; bool complete_read = false; stream >> data; // magic if ( data != SETTINGS_MAGIC ) { qWarning ("file %s has bad magic value, ignoring it.", qPrintable( file.fileName()) ); return false; } stream >> data; // version if ( data > SETTINGS_VERSION ) { qWarning ("file %s has unsupported data version %d, ignoring it.", qPrintable( file.fileName()), data); return false; } // Read everything by marker while ( 1 ) { stream >> data; // marker if ( data == MARKER_END ) { complete_read = true; break; } switch (data) { case MARKER_FILESIZE: stream >> m_currentfilesize; if ( m_currentfilesize != finfo.size() ) { m_currentfilesize = finfo.size(); return false; } break; case MARKER_FILETIME: stream >> m_currentfiledate; if ( m_currentfiledate != finfo.lastModified().toTime_t() ) { m_currentfiledate = finfo.lastModified().toTime_t(); return false; } break; case MARKER_ACTIVETABSYSTEM: stream >> m_activetabsystem; break; case MARKER_ACTIVETABWINDOW: stream >> m_activetabwindow; break; // Not used anymore case MARKER_ACTIVEENCODING: stream >> data; break; case MARKER_ACTIVEENCODINGNAME: stream >> m_activeEncoding; break; case MARKER_WINDOW_SIZE: stream >> m_window_size_x; stream >> m_window_size_y; stream >> m_window_size_splitter; break; case MARKER_SEARCHHISTORY: stream >> m_searchhistory; break; case MARKER_BOOKMARKS: stream >> m_bookmarks; break; case MARKER_VIEWINDOWS: stream >> m_viewwindows; break; } } return complete_read; } bool Settings::saveSettings( ) { QFile file( m_settingsFile ); if ( !file.open (QIODevice::WriteOnly) ) { qWarning ("Could not write settings into file %s: %s", qPrintable( file.fileName()), qPrintable( file.errorString() )); return false; } QDataStream stream (&file); // Save header stream << SETTINGS_MAGIC; stream << SETTINGS_VERSION; // Save size and last-modified stream << MARKER_FILESIZE; stream << m_currentfilesize; stream << MARKER_FILETIME; stream << m_currentfiledate; // Save generic settings stream << MARKER_ACTIVETABSYSTEM; stream << m_activetabsystem; // Save generic settings stream << MARKER_ACTIVETABWINDOW; stream << m_activetabwindow; stream << MARKER_ACTIVEENCODINGNAME; stream << m_activeEncoding; // Save search history vector stream << MARKER_SEARCHHISTORY; stream << m_searchhistory; // Save window size and splitter position stream << MARKER_WINDOW_SIZE; stream << m_window_size_x; stream << m_window_size_y; stream << m_window_size_splitter; stream << MARKER_BOOKMARKS; stream << m_bookmarks; stream << MARKER_VIEWINDOWS; stream << m_viewwindows; stream << MARKER_END; return true; } void Settings::removeSettings( const QString & filename ) { QString settingsfile = pConfig->getEbookSettingFile( filename ); QString idxfile = pConfig->getEbookIndexFile( filename ); QFile::remove( settingsfile ); QFile::remove( idxfile ); } kchmviewer-7.5/src/PaxHeaders.8614/config.h0000644000000000000000000000012412616066413015423 xustar0027 mtime=1446538507.448643 27 atime=1447562193.160734 30 ctime=1447562193.160734185 kchmviewer-7.5/src/config.h0000644000175000001440000000460512616066413015760 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef CONFIG_H #define CONFIG_H #include #include #include #include "recentfiles.h" class Config { public: enum choose_action_t { ACTION_ALWAYS_OPEN, ACTION_ASK_USER, ACTION_DONT_OPEN }; enum ToolbarMode { TOOLBAR_SMALLICONS, TOOLBAR_LARGEICONS, TOOLBAR_LARGEICONSTEXT, TOOLBAR_TEXTONLY }; enum StartupMode { STARTUP_DO_NOTHING, STARTUP_LOAD_LAST_FILE, STARTUP_POPUP_OPENFILE }; Config(); void save(); // Returns the setting filename for this ebook QString getEbookSettingFile( const QString& ebookfile ) const; // Returns the index filename for this ebook QString getEbookIndexFile( const QString& ebookfile ) const; public: QString m_lastOpenedDir; StartupMode m_startupMode; choose_action_t m_onNewChmClick; choose_action_t m_onExternalLinkClick; int m_numOfRecentFiles; bool m_HistoryStoreExtra; ToolbarMode m_toolbarMode; bool m_browserEnableJS; bool m_browserEnableJava; bool m_browserEnablePlugins; bool m_browserEnableImages; bool m_browserEnableOfflineStorage; bool m_browserEnableLocalStorage; bool m_browserEnableRemoteContent; bool m_browserHighlightSearchResults; bool m_tocOpenAllEntries; bool m_tabUseSingleClick; bool m_advUseInternalEditor; QString m_advExternalEditorPath; bool m_advLayoutDirectionRL; bool m_advAutodetectEncoding; bool m_advCheckNewVersion; private: QString m_datapath; }; extern Config * pConfig; #endif kchmviewer-7.5/src/PaxHeaders.8614/tab_index.h0000644000000000000000000000012412321077735016115 xustar0027 mtime=1396998109.567818 27 atime=1447562193.226733 30 ctime=1447562193.226733287 kchmviewer-7.5/src/tab_index.h0000644000175000001440000000271412321077735016451 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef TAB_INDEX_H #define TAB_INDEX_H #include "kde-qt.h" #include "ui_tab_index.h" class TabIndex : public QWidget, public Ui::TabIndex { Q_OBJECT public: TabIndex( QWidget * parent = 0 ); void invalidate(); void search( const QString& index ); void focus(); private slots: void onTextChanged ( const QString & newvalue); void onReturnPressed (); void onItemActivated ( QTreeWidgetItem * item, int column ); void onContextMenuRequested ( const QPoint &point ); private: void showEvent ( QShowEvent * ); void refillIndex(); QMenu * m_contextMenu; QTreeWidgetItem * m_lastSelectedItem; bool m_indexListFilled; }; #endif kchmviewer-7.5/src/PaxHeaders.8614/toolbareditor.h0000644000000000000000000000012412321077735017031 xustar0027 mtime=1396998109.567818 27 atime=1447562193.227733 30 ctime=1447562193.227733274 kchmviewer-7.5/src/toolbareditor.h0000644000175000001440000000557612321077735017376 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef TOOLBAREDITOR_H #define TOOLBAREDITOR_H #include #include #include #include #include #include #include "ui_toolbareditor.h" class ToolbarEditor : public QDialog, public Ui::ToolbarEditor { Q_OBJECT public: // Returns true if an action name in the list actionsForToolbar() is a separator static bool isSeparatorName( const QString& name ); public: ToolbarEditor( QWidget *parent = 0 ); ~ToolbarEditor(); // Add a toolbar to the list of toolbars to be editer void addToolbar( QToolBar * toolbar ); // Add toolbars to the list of toolbars to be editer void addToolbars( QList toolbars ); // Set the actions available to select in toolbars. Actions present in toolbars must be // present in this list, or they will not be shown. void setAvailableActions( QList availableActions ); // Enables or disables showing actions without icons in the available/selected lists. // Enabled by default. void setAllowActionsWithoutIcons( bool allow ); // Returns a list of selected actions for a specific toolbar QStringList actionsForToolbar( QToolBar * toolbar ); public slots: void toolbarSelected( int index ); void accept(); int exec(); private: friend class ActionListModel; QAction * findAction( const QString& objectname ) const; // Adds the existing toolbar actions into the internal storage void initToolbarActions( QToolBar * toolbar ); // Copies the changed toolbar actions from the list into the internal storage void updateToolbarActions( QToolBar * toolbar ); // Shows the current toolbar actions in views void setupViews( QToolBar * toolbar ); private: // A list of all available actions QList m_availableActions; // A vector of edited toolbars to preserve the order QList< QToolBar* > m_toolbars; // A map of edited toolbars with selected actions QMap< QToolBar*, QStringList > m_selected; // Currently shown actions for toolbar QToolBar * m_activeToolbar; // Params bool m_allowActionsWithoutIcons; }; #endif // TOOLBAREDITOR_H kchmviewer-7.5/src/PaxHeaders.8614/dialog_chooseurlfromlist.h0000644000000000000000000000012412321077735021262 xustar0027 mtime=1396998109.567818 27 atime=1447562193.161734 30 ctime=1447562193.161734172 kchmviewer-7.5/src/dialog_chooseurlfromlist.h0000644000175000001440000000270412321077735021615 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef DIALOG_CHOOSEURLFROMLIST_H #define DIALOG_CHOOSEURLFROMLIST_H #include #include "ui_dialog_topicselector.h" class DialogChooseUrlFromList : public QDialog, public Ui::DialogTopicSelector { Q_OBJECT public: DialogChooseUrlFromList( QWidget* parent ); // Shows the dialog with titles, and let the user to select the title. // Obviously urls.size() == titles.size(). Returns the appropriate URL // for the selected title, or empty string if no title selected, or dialog canceled. QUrl getSelectedItemUrl( const QList& urls, const QStringList& titles ); private slots: void onDoubleClicked( QListWidgetItem * item ); }; #endif kchmviewer-7.5/src/PaxHeaders.8614/toolbarmanager.cpp0000644000000000000000000000012412321077735017510 xustar0027 mtime=1396998109.567818 27 atime=1447562193.227733 30 ctime=1447562193.227733274 kchmviewer-7.5/src/toolbarmanager.cpp0000644000175000001440000000736012321077735020046 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include #include "toolbareditor.h" #include "toolbarmanager.h" QString ToolbarManager::separatorName() { return ".separator."; } QString ToolbarManager::actionName( QAction * action ) { if ( action->isSeparator() ) return ToolbarManager::separatorName(); else return action->objectName(); } bool ToolbarManager::hasAction( const QList& actions, QAction* action ) { foreach ( QAction* act, actions ) if ( ToolbarManager::actionName( act ) == ToolbarManager::actionName( action ) ) return true; return false; } ToolbarManager::ToolbarManager( QObject * parent, const QString& settingpath ) : QObject( parent ) { m_settingsRoot = settingpath; } ToolbarManager::~ToolbarManager() { } void ToolbarManager::setAvailableActions( QList availableActions ) { m_availableActions = availableActions; } void ToolbarManager::queryAvailableActions( QObject * source ) { m_availableActions.clear(); // Enumerate through all available actions, and add them QObjectList objs = source->children(); for ( QObjectList::const_iterator it = objs.begin(); it != objs.end(); ++it ) if ( !strcmp( (*it)->metaObject()->className(), "QAction" ) ) m_availableActions.push_back( (QAction*) *it ); } void ToolbarManager::addManaged( QToolBar * toolbar ) { m_toolbars.push_back( toolbar ); } void ToolbarManager::applyActions( QToolBar * toolbar, const QStringList& actions ) { // Apply the actions to the toolbar toolbar->clear(); foreach( QString name, actions ) { if ( name == separatorName() ) { toolbar->addSeparator(); continue; } foreach ( QAction* action, m_availableActions ) { if ( actionName( action ) == name ) { toolbar->addAction( action ); break; } } } } void ToolbarManager::load() { if ( m_availableActions.isEmpty() ) qWarning( "ToolbarManager::load(): available action list is empty, did you forget to call setAvailableActions()?" ); QSettings settings; foreach( QToolBar * toolbar, m_toolbars ) { QString settingName = m_settingsRoot + toolbar->objectName(); // Do we have stored settings for this toolbar? if ( !settings.contains( settingName ) ) continue; applyActions( toolbar, settings.value( settingName ).toStringList() ); } } void ToolbarManager::save() { QSettings settings; foreach( QToolBar * toolbar, m_toolbars ) { QString settingName = m_settingsRoot + toolbar->objectName(); QStringList names; foreach ( QAction* action, toolbar->actions() ) { if ( action->isSeparator() ) names.push_back( separatorName() ); else if ( hasAction( m_availableActions, action ) ) names.push_back( actionName( action ) ); } settings.setValue( settingName, names ); } } void ToolbarManager::editDialog() { ToolbarEditor dlg; dlg.setAvailableActions( m_availableActions ); dlg.addToolbars( m_toolbars ); if ( dlg.exec() == QDialog::Rejected ) return; foreach( QToolBar * toolbar, m_toolbars ) applyActions( toolbar, dlg.actionsForToolbar( toolbar ) ); } kchmviewer-7.5/src/PaxHeaders.8614/mainwindow.h0000644000000000000000000000012412446652463016341 xustar0027 mtime=1419466035.217369 27 atime=1447562193.165734 30 ctime=1447562193.165734117 kchmviewer-7.5/src/mainwindow.h0000644000175000001440000001423112446652463016672 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include "kde-qt.h" #include "ebook.h" #include "viewwindow.h" #include "checknewversion.h" #include "ui_mainwindow.h" //! Those events could be sent to main window to do useful things. See handleUserEvents() class UserEvent : public QEvent { public: UserEvent( const QString& action, const QStringList& args = QStringList() ) : QEvent( QEvent::User ), m_action(action), m_args(args) { } QString m_action; QStringList m_args; }; class RecentFiles; class ToolbarManager; class NavigationPanel; class MainWindow : public QMainWindow, public Ui::MainWindow { Q_OBJECT public: // "Open page" parameter flags enum { OPF_CONTENT_TREE = 1 << 0, //! Locate this page in the content tree OPF_NEW_TAB = 1 << 2, //! Open the page in a new tab OPF_BACKGROUND = 1 << 3 //! Open the page in a new tab in background }; public: MainWindow( const QStringList& arguments ); ~MainWindow(); bool openPage (const QUrl &url, unsigned int flags = OPF_CONTENT_TREE ); EBook * chmFile() const { return m_ebookFile; } const QString& getOpenedFileName () { return m_ebookFilename; } const QString& getOpenedFileBaseName () { return m_ebookFileBasename; } ViewWindow * currentBrowser() const; Settings * currentSettings() const { return m_currentSettings; } ViewWindowMgr* viewWindowMgr() const { return m_viewWindowMgr; } NavigationPanel * navigator() const { return m_navPanel; } void showInStatusBar (const QString& text); void setTextEncoding (const QString &enc); QMenu * tabItemsContextMenu(); void launch(); // Returns true if there's another instance running with the same token (assuming there's token); // also sends the command-line data there so it runs properly. bool hasSameTokenInstance(); // Called from WindowMgr when another browser tab is activated void browserChanged( ViewWindow * newbrowser ); // Adds some main window actions to the provided popup menu void setupPopupMenu( QMenu * menu ); // Returns true if currently opened file has TOC/index bool hasTableOfContents() const; bool hasIndex() const; // Gets the appropriate CHM pixmap icon (there are no icons in EPUB). const QPixmap * getEBookIconPixmap( EBookTocEntry::Icon imagenum ); public slots: // Navigation toolbar icons void navSetBackEnabled( bool enabled ); void navSetForwardEnabled( bool enabled ); void onOpenPageInNewTab(); void onOpenPageInNewBackgroundTab(); // Actions void actionOpenFile(); void actionPrint(); void actionEditCopy(); void actionEditSelectAll(); void actionFindInPage(); void actionExtractCHM(); void actionChangeSettings(); void actionFontSizeIncrease(); void actionFontSizeDecrease(); void actionViewHTMLsource(); void actionToggleFullScreen(); void actionShowHideNavigator(bool); void navigatorVisibilityChanged( bool visible ); void actionLocateInContentsTab(); void actionEditToolbars(); void actionNavigateBack(); void actionNavigateForward(); void actionNavigateHome(); void actionAboutApp(); void actionAboutQt(); void actionSwitchToContentTab(); void actionSwitchToIndexTab(); void actionSwitchToSearchTab(); void actionSwitchToBookmarkTab(); void actionOpenRecentFile( const QString& file ); void actionEncodingChanged( QAction * action ); // Link activation void activateUrl( const QUrl & link ); void updateToolbars(); void updateActions(); void checkNewVersionAvailable(); protected slots: // Called from the timer in main constructor void firstShow(); // checknewversion void newVerAvailError( int ); void newVerAvailable( NewVersionMetaMap metadata ); // single app mode void checkForSharedMemoryMessage(); protected: // Reimplemented functions void closeEvent ( QCloseEvent * e ); bool event ( QEvent * e ); private: bool parseCmdLineArgs(const QStringList &args, bool from_another_app = false ); void setupActions(); void setupLangEncodingMenu(); bool loadFile( const QString &fileName, bool call_open_page = true ); void closeFile(); void refreshCurrentBrowser(); bool handleUserEvent( const UserEvent * event ); void printHelpAndExit(); private: QString m_ebookFilename; QString m_ebookFileBasename; Settings * m_currentSettings; EBook * m_ebookFile; QList m_tempFileKeeper; QActionGroup * m_encodingActions; QMenu * m_contextMenu; RecentFiles * m_recentFiles; ViewWindowMgr * m_viewWindowMgr; NavigationPanel * m_navPanel; ToolbarManager * m_toolbarMgr; // For a single instance mode QSharedMemory * m_sharedMemory; // Storage for built-in icons QPixmap m_builtinIcons[ EBookTocEntry::MAX_BUILTIN_ICONS ]; // Storage for command-line arguments due to KDE really insisting to use its own way // for command-line parsing. QStringList m_arguments; private: // This is used for application automatic testing enum auto_test_state_t { STATE_OFF, STATE_INITIAL, STATE_OPEN_INDEX, STATE_SHUTDOWN }; auto_test_state_t m_autoteststate; private slots: void runAutoTest(); }; extern MainWindow * mainWindow; #endif // MAINWINDOW_H kchmviewer-7.5/src/PaxHeaders.8614/qwebviewnetwork.h0000644000000000000000000000012412321077735017423 xustar0027 mtime=1396998109.567818 27 atime=1447562193.166734 30 ctime=1447562193.166734104 kchmviewer-7.5/src/qwebviewnetwork.h0000644000175000001440000000322712321077735017757 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #ifndef QWEBVIEWNETWORK_H #define QWEBVIEWNETWORK_H #include #include // // A network reply to emulate data transfer from CHM file // class KCHMNetworkReply : public QNetworkReply { public: KCHMNetworkReply( const QNetworkRequest &request, const QUrl &url ); virtual qint64 bytesAvailable() const; virtual void abort(); protected: virtual qint64 readData(char *buffer, qint64 maxlen); QByteArray loadResource( const QUrl &url ); private: QByteArray m_data; qint64 m_length; }; // // A network manager to emulate data transfer from CHM file // class KCHMNetworkAccessManager : public QNetworkAccessManager { public: KCHMNetworkAccessManager( QObject *parent ); protected: virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData = 0); }; #endif // QWEBVIEWNETWORK_H kchmviewer-7.5/src/PaxHeaders.8614/resources0000644000000000000000000000012612622005721015734 xustar0028 mtime=1447562193.2257333 30 atime=1447562193.174733995 28 ctime=1447562193.2257333 kchmviewer-7.5/src/resources/0000755000175000001440000000000012622005721016337 5ustar00timusers00000000000000kchmviewer-7.5/src/resources/PaxHeaders.8614/icon_print.png0000644000000000000000000000012410664477035020700 xustar0027 mtime=1188199965.391948 27 atime=1447562193.220733 30 ctime=1447562193.220733369 kchmviewer-7.5/src/resources/icon_print.png0000644000175000001440000000246310664477035021235 0ustar00timusers00000000000000PNG  IHDR szz pHYs+IDATXW_LSWs/-mk-Fbeh&yxC}\\ {efh͈1f 9] +76Fۖ?{{WjKk/r;|.Ap/c%H)!( fff/^x[Wؽ{{pppWyc T wJ@4Mp9RxYQ 1EQʙcnI|gU ^,T)8ιqHrtבnw;H)(NVL]0ŁÇ+0J@ٳgo9:::9xZH$gCCCb1G/~i;[iEuuup\P(trjjꛊ ZZZzUUE (JP\.gg>Kl1@Ўoñ}}GCPok[v qaOLLL~֭߿mpϞ=/ew)DB;wn@MԩSK)5y3wJ"֯=r1Ș&g^-GIR: A7nܸ !L5s *8x 4 ׯ_Ϝ8q#9RWW0P UeYH)9~{ a1amm Rjg<+bsFTX۬j78!䍴kR0%*!DdYAʭ\;JD]YYyee4)%(p:oUR+9Rܣ( @:N/ie2ĕ+WZ3o#x<8|g/^@"XRXLBVWWqmC?4M<}_ sC&Co<ϗr9a;{H Amm-pv/R]`ϟ?UUF199 Ujۿ+V nHʥ{Wx1a_?x ]ݫ(JGccc>S u.]ѣ;Xl g*l;O closetab.png icon_add_bookmark.png icon_back.png icon_find_next.png icon_find_prev.png icon_font_decrease.png icon_font_increase.png icon_forward.png icon_home.png icon_locate_in_content.png icon_next_page.png icon_open_file.png icon_prev_page.png icon_print.png icon_view_source.png kchmviewer.png kchmviewer-7.5/src/resources/PaxHeaders.8614/icon_locate_in_content.png0000644000000000000000000000012410664477035023233 xustar0027 mtime=1188199965.391948 27 atime=1447562193.220733 30 ctime=1447562193.220733369 kchmviewer-7.5/src/resources/icon_locate_in_content.png0000644000175000001440000000141510664477035023564 0ustar00timusers00000000000000PNG  IHDR szz pHYs+IDATX͗=kA\c!`g N!`ig'K`+)-_aMa {wfwޛHp{惁lOkzΤETD%xDI T1(h ?z|i™eT -=HYǎI/05 ++ŷ|x=Wr e e q\f\$~ "' Jˀfdoe_s` .N6oV}3' s2_kMOHh 6ؖ틍ԃt.uI:bwg/,F8ܹ2]^~;y{{"贈u{&5}q1 -Â7kSj"d 4GuUՊ zܖU%׊^%̺RP`hؐE_؆1i mx8a2]hK|Z#ӫ@͟s~pk&XQM"Jچ͙__TλR tϧDw n@h4uvO#7gf69*=}4NY=fYq0QT S ߤ5<:8mKy,N3 }4SL/e%pp̘,rIENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/kchmviewer.png0000644000000000000000000000012210664477035020676 xustar0027 mtime=1188199965.391948 27 atime=1447562193.225733 28 ctime=1447562193.2257333 kchmviewer-7.5/src/resources/kchmviewer.png0000644000175000001440000001242110664477035021230 0ustar00timusers00000000000000PNG  IHDR@@iq pHYs+IDATxytŕ?ՋvjK%/,66 ILxɄ,B 0o83 ! !!dbc˛d$wVV7%;69=sT~[ު_ N 9!'+g_F4x?]>ȍ"lƑU%AB ~^ǝG Ywl! oSpox~86E&lDž{_-}>g_{_? B`X<((ᮋ|Mۈڛ_||^E0 P`kW+HgڶM'\* JX{S%KDh(YZj,T d ,ˡ7_vާYN72GS#*adYN{t1uh lG8^%E* ]Ckyp(LQf~_.}Gp/%:Fڂ v=Y*%\Bi C&2eP- o&=5$k/{;fp#׋p"F¶j/9{AmCwȢkDARh*jn' hwQ!`H07`;4,O??}`$b3? d`4`d1r _n.0n#lWw\|MMl|X=-Ae!s)WPO@ G }j$4,&&mlv,K`:Â~ ̄Ipɸņ V-EbFLiv>cCgaQ={rLz.t:{ 0iq."Y.i9@0( sROq ϣT{0$iKA,f6 le"Q/gh|2 ha/>B:GP’*G 'Ê) 3ǯ9U0-_oMb'G0۱1,B_sW1hcYY^+E{|,l?$a:-}؎sta#!Э8FM C|@d$.a6I&WK }1 vlASrrWRF$(4AқC]D7ˇ,˘E8E$B0,sGPUq2uܧaZ2<~N^3ID4edE$Avl-ؔ9d3'E^‚J<H$L7ӿRK11N:m|X(ţ#Krr0@W4lqxsM#Yŋx}HΪ3+Y4p?޾1"v/ 3F0V.s5.Ez4 4e{nv7|E<ؓifpy}HwNg8͛X걃], 03WyKz۷o;ZwL[tDUGUVj瑛!3y{GF r34HCʠ;cLk%?3MM0 O?DeN >s j_{Q<+ &dirm8f9~,FW4dI"a[Eb(_IVv&gֶ &3MrdƸ9n_j<\_iBl0 ͏훯YwYtiQbɝ7V6N61miL +Y'li0uHM !H "pr2ANn0cQe;C7]Q% >n$+Ωzv?h,N- ridh:`*aaXa$m8!DŜiXSMRlbpdqPD1NxlV5M'eYN>q n_vN◷?xTgnغc;~ 2U4VS/CFJtڴ4x˱1-6Ӟ{6wdjs5G$wvlx>wqn[w˒:{v$j TM>H"#24sYTR?+qVJ[5j:vI0``913i[!qqr2=gG1C@ $sx#Go7>hԹ {{J@W"yА͢ |.OzmL#" .I39 6Eeۘ~}LĢD8B8Tsar躞!V[ Wv!-w̖66˿K;澊PYܔf擯`/$Qt=>,zPʩ"',ȒȨ2GFd-'SdP,JdPf/`"'低Ѽ`^=FIfKg+Z_~#|8n; ,lF,Ki»rg|]Q((>0@v>`)kPնluBtO"KAέ]BUմ&#8\y誆Kq_kRfwoyP(| bgWHԶmc&7:q6BAOUa\.7Յe}epiM '6I(P[P94mHOg?7s+jqi:R){ 7[GQd O+nADދ8bvT=xm-vf. R3fS/]0l3AҡӱA@ 9z1.+SG"!V_.+,nH**) ?O7D2Ir[:[7LuTِspd1ý+v1}*+ȒPtݷP/L`|߽fW-g|}K;CÔri(MQdUUQU]gqLuCf geAע*![#}\Zbkz2P,x,LdY0,EQґ#U+B⛿9s=2)G:w S%gsV2Ò1R#`0>{Yԃ"\͕-D Tt?ܛܱWwMiV|4p,rnÑ1=>._ VP{Ph4MIx@+woh_44)I4cޭaff\?yS#t޿,#T"Ǔ5K8$}$on_y Mg17/p`UU@/frlu7[)._# p/xMSɣ&3k=-^x sg& j/1[6Z;Lq Xw=GS'|] FY{.X0n幭a8:×HeAɬm$h؏?3uwcs\n^Dkj.nhNN!4% x~kmN 3s˷|ʟ. r%qpD"=u^&5EsYV6g]~\/K_p?w%.mlƴ&hzV7wx 岰0Dq.ţwk+d\mZcfZۙ*)<߹.+vh V{tIg/3WDP, 8|>kgg"?o 9!'䄜OZ/7bIENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/icon_forward.png0000644000000000000000000000012410664477035021210 xustar0027 mtime=1188199965.391948 27 atime=1447562193.219733 30 ctime=1447562193.220733369 kchmviewer-7.5/src/resources/icon_forward.png0000644000175000001440000000333410664477035021543 0ustar00timusers00000000000000PNG  IHDR szz pHYs+IDATXŗmW>o+;, KE i`[SI Zf-qcI7kMP7YjS#1  lٙefaΰ Mm ֮>se꾫7 r̙ c vRWSTYIIלvc= ţ2 z:w)kحcBπFSc-˫ɻ- $SP־ YJL$!=^I,汕S$(C* qٲDt(fƺ)NU"2i,K⹟YZҹAgou 1NXđw%YJ1Q:fZ6>4}߷uTml].|'2Гdwj,ihTbuOދ{]DWJF1N|`r r"*T!Kˤ@ 'gM"rx\-\-[|$31XPJJ !tN93ߟ4kDs_5qSq\zH ?- tψ?3o [`Uv07p0DWV775?htf!pPqxa}Ց˦i:ŋi}ps1Ieh=ʂuTŹcYB7x|֫NO=d=7o7ǩ/ϋɼ^C.aY˲وK&w' _S`hO;Fm  _@8Wd̸innfsppP}KOk&Xnxl51 C;96{L14$C]ׅ)M2{>Dww}:ѫTy쓵T߶'n\.ϟߠEpׯAp0~P۶m[範a= ,[,1t.YP 9o!Yp eY&gQZ6Kʱp!51d=VZ( 5 F^p6l۾dɒIooLR !DK*zw̌&4cx<ssU^AK)3Rj\wPo(uĢSΖR߈4ۑZU07뫎\R恬˲!ejN{{{e:6ht*H@ϱkݑԞCEEj`3ihcg,y]߈xN3G)e~GV#U>>rTN_Y1kb,3>r9.P+$t_~ :x{{\K fR0 nNNBЪ5ttdo= ]Dks.m,HbO'O PaKmJ8o*sصn!Ŧ~poykӛjxehuz osk. 'w:.5ƕ+WDFC <ǡFgUe~}Kk7*"_{2MdR/@+G|kCU;%rSQ Fj ŸkMٵÇ{KMZPpʷT֯HT_) _J_e2[Kl-m!k °~(sGr?Py(4{khw.bt3As|6Oi*dὌ`hmi=w~U. wKgWC7784;=ϋJ.i{o[ΰZTVJ?YP eI0@UbPh< n; ^ (]PR vPn$B|Gv ]Z …m!j!ZK8C#!l˅|RJ t vV}?wXQql+n /;7 ~PgM.oeB8`Kd E) ȏ+Mq6 =ѝ5i/. #y阒OD[mټDC_?9j$R;3TJ]_LzzRe;7A4Z^E|w[MQc&PQ0C?}Y,D"{ 56NLx2[1'56^ ~^Ju'H$988Ѷ0YLLCDkޯu M ,^9!DZӴ'/"LƇ/G51>SO]]5q' ;A\o}ߟ0 cr``T٥СCa}\iw#IZKtɪ*ʿN?ȁeYZZZKiky__l?x =kض!"hDӌ1axgB<`T{x<~kݺu+U>NcBK)zw-X<5s0wZC۰`AO& es&a<ԩLxCm#7# wԮtYN岬V*/ps<IDATH_hE?3W\cҞZMAKF<y4iZ r E_@jbT/T 5-V(%Zl+K.ݽݝa[&Z/>HȒF5-mlmw>1t&y.V͢nM\;eH uDWͦLkjZѓ˲~5eXH(ze~πbm&҄8נ=93T:Xڃ@)YpĊ̓u5Bd*N1;>I$9N< ?k ELZ P4s}Ґ=Z@&H sg0˧Y9+ JD.@ڸ` aǡ,]*@8 _A l V4?RRE(}'I%i&iʉjHK@;G`4CrPL% 4A(4ZMXD70@πz xI>4=[q>!M]ܗ^%p]ywo{)tphzqFy@#uGa 6X!qV5 G@鶹EׁrVY HnGtn+ +@ @2iasW u_.-09e3(N vU$#h:4EK@=Q|FX-F2/~$IENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/icon_home.png0000644000000000000000000000012410664477035020474 xustar0027 mtime=1188199965.391948 27 atime=1447562193.220733 30 ctime=1447562193.220733369 kchmviewer-7.5/src/resources/icon_home.png0000644000175000001440000000350210664477035021024 0ustar00timusers00000000000000PNG  IHDR szz pHYs+IDATXŗo?3eC \І"ҼjFnڇVQkyKj")rժ?00>02fAݣ3{BxHuc9~}) G{|}fe&I::ZyGz$)cck0ITN2-uB*jΰsG}/ǎ ժz_ރhmmm|\lرf] [.551@mTWǭb#co!.?R)z>[lMLC5lW ~t-Rz0SBT__^S#'z~7!TrfkM }9vC ӹ!S@gc̻ `5vW8q/{*~4kXCW%mhb꫿[bMBV1^wҭglnfM ^7!El]ocW{S +lO2EkAW=ϳKå MX7OY>/&[kKRlSTOs;SӬd۲3~Md7@K}߯kڎ/ERSiJr4|OHT7M*e4L|ƉPhHsR^PiSg_|IZS?6tz XQWj!0]oHbU9V@Og5!\>c9F+.IQC5E/rKa%rRJ|*@ HS0tr[oQ*o_FQ=+u- 0F^s@޲,t &w'&9 C+}gn*z嬭(3'Lʜ뺹\;zf29lczܸ !*Y}t}:w^4-w騢%QO7nG]y?Ҏܚ(I&,tM<4\ky "?A0%JSz(V-ڑMc%*d">qX5,5U~933O$MMMŕm}&2B+zw/'Lh/l>Y8;{7I)sRjAoCק{Wcvv@]HsZ"U87oOH) @uݜeY*/8lq~`*IENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/addtab.png0000644000000000000000000000012410664477035017753 xustar0027 mtime=1188199965.391948 27 atime=1447562193.200733 30 ctime=1447562193.200733641 kchmviewer-7.5/src/resources/addtab.png0000644000175000001440000000056510664477035020311 0ustar00timusers00000000000000PNG  IHDR(-SgAMAOX2tEXtSoftwareAdobe ImageReadyqe<cPLTEjjj QWjof s+n+p+{+~+..69r9t9u9u9z999999999W&'tRNSWIDATmG  @@R@8SwU0y(۾o2Qic#FGA$Y.M6?H^/65@"`=@;]ttvJP7``s= +mkIENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/icon_font_increase.png0000644000000000000000000000012410664477035022363 xustar0027 mtime=1188199965.391948 27 atime=1447562193.219733 30 ctime=1447562193.219733382 kchmviewer-7.5/src/resources/icon_font_increase.png0000644000175000001440000000333410664477035022716 0ustar00timusers00000000000000PNG  IHDR szz pHYs+IDATXmlgri ökc,uA׆d!Dp#4&3Y24ĶM‹QBÍky)vyv~xBaWry]뺯!x:u6C)Z(EmiӔy(Ð t577#oi2 ݩIX°ZR J)R}wsA@;6mڸc8z{ |`'H&80%x~'_pjmm-]ȑ{3481B!(ࠌ3 5 wnԔnޱ$ MN$*+0 6e)JZp=PJJ%d Hjk+U J9Ԛ nYlD"a!a[H&l8 6.OBHRTŠZ`/i* 0]^tWv) ee ېu}$6 )`}R "%>Y[%(H; 2ђCrSJRBHT0B ,Z wBSEe%(`4jgY*  H!` ضt9`hi=\CGZz>~Hv,8| CsB@PimI.!e a z a_۷'atAE*i!02Ic R(@)Tqg<л#irje TTK 804ꗻjh؝[c!/ 79S@)yzxw(`f}\ HC0xzvWKp]XG.52<;V:nD,BPp 8qffHGc/gD.7,#xyZ#P x_CJ-%?>z&&&Q)q@B#~?NG{?DjF|n%,ӈ$Ѥl'L&aCn!r/0益d^]4l-?jI'ס32fOQy\8J]6|>sHv5"aqIumwyGm۷2B9/YTYƍq `~7:zzd' czWonJc&?tYצ<|&PGs޺5u[uot9\z. !x1==פq0oX>sޞt}}߉*n#WNs \F7O3 ozsBߌ ^< f#G!mĺ&їbAY[/A[/_?vmǻ AVEJX|5z U/,p}p׬󭭥:ƙ֪ ewm>9LJ}v>S8u҆u-_]ot#<\ = z^)񇡜Ϳ1C+UkpGįX ϯ||:͹qɧ*>,~~m݃},JT4T4nИ>ؿ.$~QIENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/find_close.png0000644000000000000000000000012410665224266020636 xustar0027 mtime=1188374710.480944 27 atime=1447562193.219733 30 ctime=1447562193.219733382 kchmviewer-7.5/src/resources/find_close.png0000644000175000001440000000024710665224266021171 0ustar00timusers00000000000000PNG  IHDRa pHYs  tIME  i=bKGD4IDAT8c`^?0)rX!+%N\ho!d&ld% Mi2IENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/images.qrc0000644000000000000000000000012412316223103017757 xustar0027 mtime=1396254275.533649 27 atime=1447562193.220733 30 ctime=1447562193.220733369 kchmviewer-7.5/src/resources/images.qrc0000644000175000001440000000560412316223103020314 0ustar00timusers00000000000000 addtab.png closetab.png find_close.png find_next.png find_previous.png find_wrap.png icon_add_bookmark.png icon_back.png icon_copy.png icon_find.png icon_find_next.png icon_find_prev.png icon_font_decrease.png icon_font_increase.png icon_forward.png icon_home.png icon_locate_in_content.png icon_next_page.png icon_open_file.png icon_prev_page.png icon_print.png icon_view_source.png kchmviewer.png dryicon_process.png dryicons_replace.png dryicons_save.png dryicons_window.png chm_icons/icon_0.png chm_icons/icon_1.png chm_icons/icon_2.png chm_icons/icon_3.png chm_icons/icon_4.png chm_icons/icon_5.png chm_icons/icon_6.png chm_icons/icon_7.png chm_icons/icon_8.png chm_icons/icon_9.png chm_icons/icon_17.png chm_icons/icon_18.png chm_icons/icon_19.png chm_icons/icon_20.png chm_icons/icon_21.png chm_icons/icon_22.png chm_icons/icon_23.png chm_icons/icon_24.png chm_icons/icon_25.png chm_icons/icon_10.png chm_icons/icon_11.png chm_icons/icon_12.png chm_icons/icon_26.png chm_icons/icon_27.png chm_icons/icon_28.png chm_icons/icon_29.png chm_icons/icon_13.png chm_icons/icon_14.png chm_icons/icon_15.png chm_icons/icon_16.png chm_icons/icon_30.png chm_icons/icon_31.png chm_icons/icon_32.png chm_icons/icon_33.png chm_icons/icon_34.png chm_icons/icon_35.png chm_icons/icon_36.png chm_icons/icon_37.png chm_icons/icon_38.png chm_icons/icon_39.png chm_icons/icon_40.png chm_icons/icon_41.png kchmviewer-7.5/src/resources/PaxHeaders.8614/find_wrap.png0000644000000000000000000000012410665224266020502 xustar0027 mtime=1188374710.480944 27 atime=1447562193.219733 30 ctime=1447562193.219733382 kchmviewer-7.5/src/resources/find_wrap.png0000644000175000001440000000076410665224266021041 0ustar00timusers00000000000000PNG  IHDR r| pHYs  tIME  + bKGDIDAT(ύ=KQǥXڐYC(.QZOo؋YӋ:Q)jE3yy8G4<;=w5)8Ϛoh@EyUхRe(ƽ;\xPN W]͡jK*Y̠Œ ctpq|Rb&n1{c]X0u\x@n niaZF0< g1>!b&6MyHr~4 wLaj)6RdK #~ ;GkɆ0Ӫ$ w7m[pIo{gM뗴N!kko5(8z|GhEIENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/icon_add_bookmark.png0000644000000000000000000000012410664477035022161 xustar0027 mtime=1188199965.391948 27 atime=1447562193.219733 30 ctime=1447562193.219733382 kchmviewer-7.5/src/resources/icon_add_bookmark.png0000644000175000001440000000266410664477035022521 0ustar00timusers00000000000000PNG  IHDR szz pHYs+fIDATXk, VD`Zقj IC U{K^>CЖ| )M5Ql!mUb#"$Vº}wf :+M{'y9&+H{>)_ ywQi 0Zy(0DRTY-pFCl*M^AD1^پ>(O@TP v;R|^OSu,&Sn,N)Et1Ğ\Ucf.aSFq2xh/ݮ3Y(>qmcxp\<uzIENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/chm_icons0000644000000000000000000000013212622005721017673 xustar0030 mtime=1447562193.218733396 30 atime=1447562193.200733641 30 ctime=1447562193.218733396 kchmviewer-7.5/src/resources/chm_icons/0000755000175000001440000000000012622005721020301 5ustar00timusers00000000000000kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_3.png0000644000000000000000000000012412316223103021625 xustar0027 mtime=1396254275.533649 27 atime=1447562193.215733 30 ctime=1447562193.215733437 kchmviewer-7.5/src/resources/chm_icons/icon_3.png0000644000175000001440000000043512316223103022157 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8A D?yWr7'Oml /BoƿeF0;֓4YttC,)$Ex\ 3σ*¸[,@Uh˾g t_Լ \mbuE讃%n8pItw Xթ7C uwQJ2%6̯>K i*IENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_17.png0000644000000000000000000000012412316223103021712 xustar0027 mtime=1396254275.533649 27 atime=1447562193.211733 30 ctime=1447562193.212733478 kchmviewer-7.5/src/resources/chm_icons/icon_17.png0000644000175000001440000000042612316223103022244 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8Q0DvG+,lѐXWɐ0 i~'WU[PJْB @eZjc*$P&Yj|2=0܁T'>K,peqW^?{П`r9IENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_29.png0000644000000000000000000000012412316223103021715 xustar0027 mtime=1396254275.533649 27 atime=1447562193.214733 30 ctime=1447562193.214733451 kchmviewer-7.5/src/resources/chm_icons/icon_29.png0000644000175000001440000000051512316223103022246 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8K wfin9g0o3P c0*}m1 Mrw-Ÿ " ;5Au#v /uE!"8Z|½Fƺf#i, X?}DŸo;/H.0CD= ̀)QJZ/{{-m5|~[w@ lp = ^ȴlK 0@ p)%U΅H\­-3}D44Z+[[v4 JH mr]@ԙVgVQfc.QK]`0,[oQ2]FtOQv~u#^+j)@ wſs"OZIENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_36.png0000644000000000000000000000012412316223103021713 xustar0027 mtime=1396254275.533649 27 atime=1447562193.216733 30 ctime=1447562193.216733423 kchmviewer-7.5/src/resources/chm_icons/icon_36.png0000644000175000001440000000047412316223103022250 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8SA L2hqf`Ifv=jЯw 8"Y"(k>qk A3N||QjyJTUwǔ{[Ht~\W%=̋b#Eʒ'"3Α- j8^0ϦUAB8L40ŭCdž&у.e)`saqS-IENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_27.png0000644000000000000000000000012412316223103021713 xustar0027 mtime=1396254275.533649 27 atime=1447562193.214733 30 ctime=1447562193.214733451 kchmviewer-7.5/src/resources/chm_icons/icon_27.png0000644000175000001440000000045712316223103022251 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8] ?vlɲOڐ1S+p8BR ns+܎Kr5乔m;i-s"x,Qf+- `wZ3k̢W04>Qa?f$ݖHIUcR_͠SXb+X`~]\˺z$?*!IENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_18.png0000644000000000000000000000012412316223103021713 xustar0027 mtime=1396254275.533649 27 atime=1447562193.212733 30 ctime=1447562193.212733478 kchmviewer-7.5/src/resources/chm_icons/icon_18.png0000644000175000001440000000037412316223103022247 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8Q DN͖LNF?;k;E&gd9Tk-":H |>NN\$C ݡΊ  * 2>S[mms%AFn0x *Grw nٟ~ZrIENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_23.png0000644000000000000000000000012412316223103021707 xustar0027 mtime=1396254275.533649 27 atime=1447562193.213733 30 ctime=1447562193.213733464 kchmviewer-7.5/src/resources/chm_icons/icon_23.png0000644000175000001440000000044612316223103022243 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8K C;͹z2uA Ӧjƃ`a0`I6̴ ngíX$= %׿[yDH&v7zA_c+Wn͢hѓ'37EfRJEy3dBR O@,A"sTwϳJ鼎,2 J@f"麃  /IENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_6.png0000644000000000000000000000012412316223103021630 xustar0027 mtime=1396254275.533649 27 atime=1447562193.218733 30 ctime=1447562193.218733396 kchmviewer-7.5/src/resources/chm_icons/icon_6.png0000644000175000001440000000034412316223103022161 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8RA 3}Yxw@VFjoűzƒj[yiPPuj,.$I<8tѹ5@֥Q$@!SO=c'W<5{,?H5>gyZ sIENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_28.png0000644000000000000000000000012412316223103021714 xustar0027 mtime=1396254275.533649 27 atime=1447562193.214733 30 ctime=1447562193.214733451 kchmviewer-7.5/src/resources/chm_icons/icon_28.png0000644000175000001440000000046612316223103022252 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8[ E32棾G3$&jrEb[#oc G_䳯StU+0*ĺ Rno!%A50{VD|0T钩 DqpP @0cX- ܽ[`2{@ dSΟw \*?-GN)eV@" y<f#WbF_};pWcGQe_U4BIENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_31.png0000644000000000000000000000012412316223103021706 xustar0027 mtime=1396254275.533649 27 atime=1447562193.215733 30 ctime=1447562193.215733437 kchmviewer-7.5/src/resources/chm_icons/icon_31.png0000644000175000001440000000055412316223103022242 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8Ar Crf7'sabb,K*qI}%%'ci;%冸% ۙ P~)X=gZ)=J)Zz+(=b;#2 lq]l'ϸ0\(־._1@)$L))m" $lKsU܇M^֑x|ls4On:AC }em?t>6n;$l}(q/v/5IENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_37.png0000644000000000000000000000012412316223103021714 xustar0027 mtime=1396254275.533649 27 atime=1447562193.216733 30 ctime=1447562193.216733423 kchmviewer-7.5/src/resources/chm_icons/icon_37.png0000644000175000001440000000046512316223103022251 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8SA s ~V2vZ$c;B0VUrnZ8WUI E>ߓI#Vfv Q83m;%z H!qn^g,3qZul AJ  Ax'Uu$? Dq7 9MrβGBZxu}O1Bl#<57-5PأTIIENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_14.png0000644000000000000000000000012412316223103021707 xustar0027 mtime=1396254275.533649 27 atime=1447562193.211733 30 ctime=1447562193.211733492 kchmviewer-7.5/src/resources/chm_icons/icon_14.png0000644000175000001440000000052012316223103022234 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8Rٍ 33S#dH(d6|鯂$K:r$A} Q{1i75mIm #,7R ZkxN9gRŭ ğ ` րU=7A%Ӣ 3RFD_ f K2Kv֊Hv[eB̝ၾc% ڞI&5h}aR.~5Jr IENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_1.png0000644000000000000000000000012412316223103021623 xustar0027 mtime=1396254275.533649 27 atime=1447562193.210733 30 ctime=1447562193.210733505 kchmviewer-7.5/src/resources/chm_icons/icon_1.png0000644000175000001440000000040412316223103022151 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8A0 79?g{ qRK$ @q-k%{?eHWl"3[5 &⧜G`C$j!xT2^L> ].Ġ΂ҷJTuEdSf3K#wL@_FVIENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_35.png0000644000000000000000000000012412316223103021712 xustar0027 mtime=1396254275.533649 27 atime=1447562193.216733 30 ctime=1447562193.216733423 kchmviewer-7.5/src/resources/chm_icons/icon_35.png0000644000175000001440000000046012316223103022242 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8Q0ClfdGV,U!il Hr wB(MXb!^}I("$,cCH rn\¸e }!)f$ Uy]Q "0(I^lۖ2~qP5Ik~"Vp>1=3( ԑdӜuRw?-W~F;W4຦IENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_10.png0000644000000000000000000000012412316223103021703 xustar0027 mtime=1396254275.533649 27 atime=1447562193.210733 30 ctime=1447562193.210733505 kchmviewer-7.5/src/resources/chm_icons/icon_10.png0000644000175000001440000000037212316223103022235 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8S[ ɼ4ic 66Rs@f&?5Yc,Ly !*iɀDe `f 7bRthQkc,"b5 ĉ[ Xtom>\}~290{X7c7bG7PqIENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_33.png0000644000000000000000000000012412316223103021710 xustar0027 mtime=1396254275.533649 27 atime=1447562193.215733 30 ctime=1447562193.216733423 kchmviewer-7.5/src/resources/chm_icons/icon_33.png0000644000175000001440000000047312316223103022244 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8[r0-k͸z 7TQ6jF@-3׻"¶M\KF6>Ee$MUȕzjh=3$2UfVܬ1pN)lpiIyZcԻ;@woaf."ZuFf.51\D_G6C.PIaҀ (E~S5֣lIENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_12.png0000644000000000000000000000012412316223103021705 xustar0027 mtime=1396254275.533649 27 atime=1447562193.210733 30 ctime=1447562193.210733505 kchmviewer-7.5/src/resources/chm_icons/icon_12.png0000644000175000001440000000050612316223103022236 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8Q0 D_VW|MN6ծj bfxc _VyאdI ".U8rlbt3Ӷ-ɶMb$d[k =3aGVVH%qb;oF5vSI h]$Tcad;$a%iؕ IRQs,Kb9yb:U{X,L3ܽ[)hن 59 3CD)Nh: k9` $JFݵR * Q,xܷTHFHPRweZ_kIENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_19.png0000644000000000000000000000012412316223103021714 xustar0027 mtime=1396254275.533649 27 atime=1447562193.212733 30 ctime=1447562193.212733478 kchmviewer-7.5/src/resources/chm_icons/icon_19.png0000644000175000001440000000042612316223103022246 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8Q1DfЛѓm_a:PA flMs8pw7xvSDH|Hv/ yJEq6Ud<"^mvó5iɶRa+Qfm^Խ~! Ų]`wPg\8;׳ܙً2 IENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_40.png0000644000000000000000000000012312316223103021705 xustar0027 mtime=1396254275.533649 27 atime=1447562193.217733 29 ctime=1447562193.21773341 kchmviewer-7.5/src/resources/chm_icons/icon_40.png0000644000175000001440000000050012316223103022231 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8˕0 yWܙʐd}lmr /ظؿڊ};"B:d'EH`62.4[?yD) 6vn?XLD8y-I Z{;3-q{Pf +7qe~0bZW/1dfDerHD$FU55n of^A%!i틂 i} x<{L5d{ !&Qkp%KqtHcI\LgIxpJ{2 =˟y^v[W>wIENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_2.png0000644000000000000000000000012412316223103021624 xustar0027 mtime=1396254275.533649 27 atime=1447562193.212733 30 ctime=1447562193.212733478 kchmviewer-7.5/src/resources/chm_icons/icon_2.png0000644000175000001440000000043512316223103022156 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8Q D^ܬҏ;IvK$7Jv\IFۍY> O"[N)5hM,vw86eh͇q݅P6f'=1wv Vߍ$̌}9ϳ3 BRDD{<|DD/~o x~ IENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_20.png0000644000000000000000000000012412316223103021704 xustar0027 mtime=1396254275.533649 27 atime=1447562193.212733 30 ctime=1447562193.212733478 kchmviewer-7.5/src/resources/chm_icons/icon_20.png0000644000175000001440000000037712316223103022243 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8S fh43h LGaeCL 9uZM1PJN_{眣CfMϭ4a&㼸psa+7})]s63Duۂ6dY'}盰.K`#d;~o)7y\IENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_15.png0000644000000000000000000000012412316223103021710 xustar0027 mtime=1396254275.533649 27 atime=1447562193.211733 30 ctime=1447562193.211733492 kchmviewer-7.5/src/resources/chm_icons/icon_15.png0000644000175000001440000000052412316223103022241 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8kn0?͌oFN68vt[HH0snJ{7_D|j86K_KHA "upJ)D\=PU@DpRH T˪:z63f3Rչ RJMm`xWGd=/ !ɌDލt`A0vaƿ ɫIIENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_4.png0000644000000000000000000000012312316223103021625 xustar0027 mtime=1396254275.533649 27 atime=1447562193.217733 29 ctime=1447562193.21773341 kchmviewer-7.5/src/resources/chm_icons/icon_4.png0000644000175000001440000000032412316223103022155 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+vIDAT8A _34e@$/Υ|$U &$%A1B[9s*0~)4@H~=z$f6u꿧)AXq6\ z Ń>2y {x{IENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_30.png0000644000000000000000000000012412316223103021705 xustar0027 mtime=1396254275.533649 27 atime=1447562193.215733 30 ctime=1447562193.215733437 kchmviewer-7.5/src/resources/chm_icons/icon_30.png0000644000175000001440000000052112316223103022233 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8A [3˼=r0`KH$AR>6s[e;W<IjNƜu)e;)ADZ#zSR dt+آUѓ9̼ y۠e`GlTJ$SJJ;-,)5($lSJY/FǀYe75M=m9wz`~'3m"31v%xT#E~{_MpVIENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_13.png0000644000000000000000000000012412316223103021706 xustar0027 mtime=1396254275.533649 27 atime=1447562193.211733 30 ctime=1447562193.211733492 kchmviewer-7.5/src/resources/chm_icons/icon_13.png0000644000175000001440000000050312316223103022234 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8[n@CU,dgяdQz{[ a0 ,VPw0ؾKBR|}l&$T>#hmFa4szؾ}(ĭvcZm)|*821UmTXc~1}A byw|%8NբVRk$y~¸oU+K휃IENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_5.png0000644000000000000000000000012412316223103021627 xustar0027 mtime=1396254275.533649 27 atime=1447562193.218733 30 ctime=1447562193.218733396 kchmviewer-7.5/src/resources/chm_icons/icon_5.png0000644000175000001440000000040112316223103022152 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8ŒA0 'UEϜ$!:Q^;I퇤/HJI1cff$Jq峫YLMtGْūul;ZdVՌ3DBҺukrЌp9{ ؗ)l$+d?:gw!n+IENDB`kchmviewer-7.5/src/resources/chm_icons/PaxHeaders.8614/icon_38.png0000644000000000000000000000012312316223103021714 xustar0027 mtime=1396254275.533649 27 atime=1447562193.217733 29 ctime=1447562193.21773341 kchmviewer-7.5/src/resources/chm_icons/icon_38.png0000644000175000001440000000044112316223103022244 0ustar00timusers00000000000000PNG  IHDRasBIT|d pHYs+IDAT8SA0?fhIA C+HPUy rIg'aǁD>0ٻo_w0B0P151QS*8]"9=G-!|>#GF9eYH=@HH˲ܟ;p;}o<񕯌Dlm9vGkF=;lrܲ,UBU*m&::Ιp\ _꩓{T*|Rdײ !@)8b8p7mjRTU9TUB{Y,CQס:KK*`+x?ox<B3RQw֭~EQ( >O[µ5FOnض qiJo]5ךqM)UUr5\~4ޮI)iZZZ|-(w* `~?ZWKRBbxg^yDJhni9}ۯRJ 8~!)Cϝ{%]`(UU f% ButVťT*9Q__}Gwwa׋T2y19 ݿĶmM|h90>66Sd0??)KFM8L&2*2 _4!dhGWܵ8dJٵ457}Gpho`wD"4X\\D[[bvpC40Pm#>UES,NR;vxlkJo]Lu~ Hnx^ܸq\zitzLeJ4"fgf\>RMMNhYִ4gg3y)pGU9cHH& 4q%^^Y^V0f?/#X{ duLӄQ6@)E8\ TZou˲&EsםRRj ˓/G~Prʕ+?\/:iZ1B\f2?YkbZ(tCAd2F[J&~z39ι4-( @ ! A)%<nB|n55%$2S9׷{h.^/Jp4@JRTrl`߾ܹM98|(B`e9@^3 TΑXZ:\.8sǟxE˶`6997l B!`Lpa,v(WR*)PfCH!&K*lۆp(%XYYAX@TB\iY eU+f <(%pZul<X* Nr\ ˶Aٜp$gzQ,Ac i"R_PI &T(L@!8wnEӴMm*]!׳,rKCCO׏$!<{y 5jjj/eV4nk:XZ|R=jFR olhc e@`a!k(%yYM-+Jy]JR\ՕjUB={~)ٰ[X;:;7 ICJ@0]/"ʥӫf%c%Sz{ eYޮBT* ׳\*hnnȤ\m(|cǎ/ݷT~r!D8>fiPZR}/wʬeи*Ƕ&x< ˲077T*%וDQbmcc#4MhY6VWV01>vԷKfYιݻ&''UREA% ۱H,.KCl񢧧BHB)~bf:jkkkG*@BJXP{Z3J_i?񸽦i&t-!e#[C!_aP,J077|n hniA*Ԅsܛ-ˎE"L48/1tmtyС=n&ν_<ۣbi, .fbx<b_˓c㟛~nii1 : 77i^V  ~ۯ͝朣.]ZZ%v ƪDfeRIE@A}}= |pȵWﻵp4 =X(eänzBJ?S,4MCRhkkwn-)p{ܘ~d.'n3C2E}b|<my>D"ulG*|s4rEQӖo۶|ow`**SgrŽ/zXzYՎ<ޡ ~ !PƆ%!TQnQY˲`U5UUo]p7oXgȪRB7\r11>wh[[x<~sH026l˂!N|'΋.$w}OlNc۷?{D2x[UN d5SUO@~KoD"4Q]'vǪ>~ZQ(U mّёcL$q2kY]VW3TIENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/icon_open_file.png0000644000000000000000000000012410664477035021504 xustar0027 mtime=1188199965.391948 27 atime=1447562193.220733 30 ctime=1447562193.220733369 kchmviewer-7.5/src/resources/icon_open_file.png0000644000175000001440000000347410664477035022044 0ustar00timusers00000000000000PNG  IHDR szz pHYs+IDATX[lgf]6j:Ц&j"iT}UU[5^#zyC+%<)4 W\ 0xY5{̹a6M>FhΜw9OSُ}yqL$v7s;< 2̯H/mz랡LTeu}Ojx}qw߻hN6$'dAn~ Q'|qރ=ϓ,g&C٭]o<`vFF[oX'{g/zlSoREkM#o{Ȟ~1׾.i|evأs:fm߸~9wՆW)Cq; Xn3krE e :&X2ˡM[y%fc,ֆMə5rvE}ce!6H9Un롳#`\yzaĔ$0)3bƂC9[aiX/Z-~D@`^oWE SXcP\:r D閏g?"\A<2$?Ne &1>2`@M4)Rm>[~~agP -kVdUYk:6e@jVx{;']RM? doр녚ߨxkK+?%s ha1nm7&r;He|ok{O@pq_>p"v\`P|( OwdI( 4E)ڢ H JY&fnSPn"d±A} 13 10'FY8MRff{3ZcTjDʍաҀJ*и=I1S G *|@xp7{dG+9~B P,C&g)T W>ŲTT  =UFP!s6Cһ@= BP):k 8ف i.fꈡX˚REShJ%EU}T#@eoA; } T"CLT\z{:HškL\q 2-RB¹P.7(8$"!B_7,ᱞP2E04# * )`TFPoh22UkI#b&B}@}RZAE Wa .pʢ 3@C6Wc$#)\wlf*c{ :{^–5sP!)rp] 2)8ĭtaޜfc}kcx&O8>.萁(gynMZ4jyR\)2H*tT ѻ$Jӏjop$E D%2.M[oq[Ȁq,B5Ѻ_x7$^:_2Z廏L_C7vqА:1٨: 8}l\8-0|qp!iƿw߫иf{!pqKNlAm8NT<=<^y2(6r0vՇٿL@ eW>0-z;D71 Jk6Qx5S0 ;HO^aM4fB|r1@D HFK,ɧs'C.7IENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/dryicons_replace.png0000644000000000000000000000012411311605470022043 xustar0027 mtime=1260849976.072692 27 atime=1447562193.218733 30 ctime=1447562193.218733396 kchmviewer-7.5/src/resources/dryicons_replace.png0000644000175000001440000000573111311605470022401 0ustar00timusers00000000000000PNG  IHDR szz pHYs  gAMA|Q cHRMz%u0`:o_F OIDATxڌWkpy~vG:ёe lLPc`Slgn;6Ni`ڙNi22$m͸L61wK2.nG>wv?l3cݝ}#Gp5Ue^|i9A$!%O*"p=Rlbr{׭>V^rί^h)Sl*#?Nc<wƐ{>Py ~ط/e;Hcc TE{tCe cp=-˻;kz@eEti*0ΝzgJ)oôkKe `]ppw`Y4,4$$B+S.G(Zє޵]K[.omE )(98`#.n単F]p +GS5D/ OR"?}9MU?ݾu[ʼn3m'\(p|.؁.~D[R0 @G޵#q=؎{J)IAA9gǃA}%[g3N4M(2JLнO_քwGDc"J*Nò3Eϱlq :7j]3ư@&'[k ˦k>ד~è(Cf.L6O(%ePss%H6"Y_ ea B@&.VTkWڳ5iEB@y4Ds00˿1+$7_XqA2gr8{ ʱ)P]Uz(RJx]װ#PPtfŢMUh&_zȩrF!AJ _2~^֎p8=swE18r0 9<߇tu5 kxؙlΐ>6H6ԁ / xϟXcۓR">r"5$KC:޷"D1cʼ24 m r!@6_X* dCݳۿixۖcLPQ"926١I0C[ki{ <$ p=a8r"Z {:1ϛ` -ּ{yБS7v: l=/{'P֦ێ PJ2BL&(>qidbWEYRv=3Wpf'@in, ޴mw]jM!/ J4BTUqU! ,p@emjplQŁT6\GӦ{JC}c&A>6>voelv*W0ұ(K_lYKsYrʛn"B^2׷%){W\|7qa1g?zg^=XD؎ USCc/L|/gmɾh *8BHMN5׽MGHh8?ZOK qH 45+vk_k{v!Է]]1S꽸'/OlՔ)!e!GQ6_ xDB9pߦ kR>MgV{.UB aNھC iH)D% D939*VnH%c|Z}:E8wwU([[O.ioOUUUՓR҅EIS)zDQE.a)}@5M}*\R.ioޫ ظ;3YDH)BbxךOX/!A9>l˄(m^hnp"StpO\+?%jߢi٨,۾m7~\HH+q T4&bCmW-À2 >C\U9*0M[ w[}? Nxm- ٜ}uB!p]sf)K< hR㢱>(Ǜ~dn0+ `0 !MU | T>xRt||sl|?l۵Xue'|$۶ wq%?fDѦ@Ji̟-2]&Z_2Wo\z4ٴIENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/icon_copy.png0000644000000000000000000000012410665677742020526 xustar0027 mtime=1188528098.330327 27 atime=1447562193.219733 30 ctime=1447562193.219733382 kchmviewer-7.5/src/resources/icon_copy.png0000644000175000001440000000255710665677742021067 0ustar00timusers00000000000000PNG  IHDRw=gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDAT]u3;;ZfV At!TzEDY݈AzTRvETDdd;ٮ_:33s|_ϓ"<{Mx]1RJ |nn;}9[p"/}?9p}_Vr(t_^}x g>ݟ[m=W>tϬ$!ڝ[PYO󰺙KYmr<|;O_|RDK|QtTu}ʡSsc3/Mk{gm7[=OY1 bb:aeIeq}yˇ>W~o4nܱa'm~{>h04DD6}NGu( '>4'ڶ]J)-ZbBH=ݲQy͙g,,;rhdڵ+,[) PѼKΔC WCzw I)g-?lvv^Ɏv+Z=7x Qأ:<0@3Gyhۛq-SeY;O=ڲzvn{~A ̑eJ b R(FL[^[WFxəKӋ`@!JԔ+XҝevEgZyퟶk8"2bLM('tnlWk_m^z:o@ ;Dg|z}ԋkNw>TufT[?$n2Z7NWUMon  1(X7toq[7?qe)c Èh E_=PUn9uɥ8u* E20NDdp/_IENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/dryicons_window.png0000644000000000000000000000012411311605470021737 xustar0027 mtime=1260849976.072692 27 atime=1447562193.219733 30 ctime=1447562193.219733382 kchmviewer-7.5/src/resources/dryicons_window.png0000644000175000001440000000174211311605470022273 0ustar00timusers00000000000000PNG  IHDR szzsBIT|d pHYs B4tEXtSoftwareAdobe FireworksON`IDATXŗnEs_F!+@V`E6*+x x@BIX$cssXtUf2;ңRMuUU]-λW6? T8<9l9Ν.|yOn߸%NR*Aq&?~=ro4:!ѽpČ{=8wv#6s= Se.l&Oy rŜ2f^.QaT/CB۵;ACAf,ΰh<<|/đ#Q RW- 7ch̷ ФZw r ,=@zyw9%ilGǣ)WP  0|wA.i4mqVhEZgf;*p26N^nDSwlGBcEWZXR sPIrAbwU_{2bt0<~3KDAzyu}E꤀ 0n8UkedbHf\[r\ fM ;Z SQ4m9 U 86JH^!-dYyaEVHmB7b idV(6Y:ٜKpsG)LDƭ/H۟6) r^XK 4DET JPxozILҤqE DsB Ю  ]B%*Ũ ,+2|&bxRZYp:p0tOfzOozea DƳsILK>&..̳AU>(*{䳻Ȼ<I8[IENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/icon_find_prev.png0000644000000000000000000000012410664477035021520 xustar0027 mtime=1188199965.391948 27 atime=1447562193.219733 30 ctime=1447562193.219733382 kchmviewer-7.5/src/resources/icon_find_prev.png0000644000175000001440000000327610664477035022060 0ustar00timusers00000000000000PNG  IHDR szz pHYs+pIDATXŗ]l\G3kןql7)!؍F IQ%%)ՒS՗J\@ PDPEATDVip#8MjS@:uw}nBG^{Ϝ33gE|s^-` R.XFPHzNΜ9#qQo ޢ 2VTB/>ht*H@ϱkݑԞCEEj`3ihcg,y]߈xN3G)e~GV#U>>rTN_Y1kb,3>r9.P+$t_~ :x{{\K fR0 nNNBЪ5ttdo= ]Dks.m,HbO'O PaKmJ8o*sصn!Ŧ~poykӛjxehuz osk. 'w:.5ƕ+WDFC <ǡFgUe~}Kk7*"_{2MdR/@+G|kCU;%rSQ Fj ŸkMٵÇ{KMZPpʷT֯HT_) _J_e2[Kl-m!k °~(sGr?Py(4{khw.bt3As|6Oi*dὌ`hmi=w~U. wKgWC7784;=ϋJ.i{o[ΰZTVJ?YP eI0@UbPh< n; ^ (]PR vPn$B|Gv ]Z …m!j!ZK8C#!l˅|RJ t vV}?wXQql+n /;7 ~PgM.oeB8`Kd E) ȏ+Mq6 =ѝ5i/. #y阒OD[mټDC_?9j$R;3TJ]_LzzRe;7A4Z^E|w[MQc&PQ0C?}Y,D"{ 56NLx2[1'56^ ~^Ju'H$988Ѷ0YLLCDkޯu M ,^9!DZӴ'/"LƇ/G51>SO]]5q' ;A\o}ߟ0 cr``T٥СCa}\iw#IZKtɪ*ʿN?ȁeYZZZKiky__l?x =kض!"hDӌ1axgB<`T{x<~kݺu+U>NcBK)zw-X<5s$ 8A,206 &C.7_w\4873= T0hV1=8G<2F)d봤T/908;G>$ =;4ɩyr*=676,7Q1?@8.[YTcUԤ/D4;/6//B\J91>+b RԸ2\-36I&8>H;25680L |/C(4-J\ |O,:7:<:97?)w<3J$=lk45-/02251Fvryp7 `_dX[TOIITRaxxtAAAǾu~|=BD  ٸrFK 翇\fңFO2 nڟfY貓JͥDQ‡nZ⧂FXݹP[r? (i1d]} D{-u QQ߬]= @h\"5jΚT Y\- M}&  #Xu; jn:3ne&*В~\% -㔃}L 7ּƃ{x %[~ߨŀы $Y]qařGUk|bbńssȘxsbZtʒXYXħiȹªzhǺv )Ǹº؁!"Ūӿ؇՗%Ȩɻ׊_ ٵѽԐ̴]s˨Ӛ˲p/חԵ\ Vօ95v|%.Ќa$ܳ[ (ȉ-!юW# '±T 6@ D[/ So]g[R--e^eif`RS  {_؀]lgt_H "pWYd\fjr_9 )hed^hdbaWfe G`nc\r_f]cZDctg]h[仱Z`bq8bkXrd^ace]y஻d[qcSeehfdch[ҷؾǨչgHKc[\]__b]tʬٓRs|~yvrpzvȘ`UlŽ\!¸diŬhsĘz۷juJ ګxêoٺQcǘ{黜\suŝzN @^y&_W vuvPi|̛H۲p}vB  r> ,0l8mk a)f' Kğ; Kؙ> Lۋ _>>YX KH >@? @I- `>>fC*_՟ L> K`* Kؙ> K> Up"it32SPzAMqb-/1,/>lP47O0-Ca8A7AV7V70*9T2^76Xs70Xx_74,-NnP79-+DlF977?m6J7 7,:h2X7׿7^|1`7 ˯78Z`0p778W\27ɲѯ76RL57ܲ}powwvjdh{ٰ7-+5TzA=7ﺏtvqZm΀ٯ7=1-+3Ps5L7}reUuЬ7 JIB91+**Gl.S7tztKg7BA?:3.*(hm0\7 rzϨqD`ఔ7 ==:987540EW5j7to ]@bǭ7 :8875421-=L27yf nlBAޯ7 5443110.,?E57hn~}{zywvtu Y\R3F㽭7 42210..-+)@z9?7o_pqonljigeb\XURO LLJ44ϭ7 00/.--/*)(E§OB-G7a]gdca_][YWUSQOMK\ @=;3*K٭7.-,++*?C*)HɣuO805,I7YXXURRQONMKIHECBDY 60/,$)ޱ7+ *?_D)OϠ wE4,3FI/P7qPHB<:9:?GMPPNMLM` *&$# ݸ7+ -D`U/Rҝ o>2,3G`qH2Z7[B2'" (A  ۻ7+ .LbX0UԚ gK/-5CXkso;17 M35 4ڼ7+ 4Vc]1W֗bJ+-3?Raffd_757J*' ٺ7++-A`ca8Zה\A*-2>JUZXXY\S3;7 S'᷷W ׵7+2Qfde@\֑vF:+,/8BKMNNOQRVH-<7 k&m   կ7+,A`edfHZ؏2''*1:ADDEFFHJJNE-?7#[   4έ7+6XhffhR_־K(-/29;<>>?BBCF>.A7%*)k?S% pé77+3Nhihii^fԴ##VE),-05889:<=@4.C7b*曀e Ҷ+1Iekijdxж#;'++-24577?0/@7 D:' &27 ]˭+2JfmkfmD ʑ>%**+/019/0?7(p$ z){2 "к++,6PhnmkmgkJ ˟C%''*.2.2=7A(]  Ǭ+.5~}|{R#"'xJC*,,+*Ŀ~}}||}|}J$")~J<.bfa\~ E$#)B-7D~{ F$#&<`wZ~@~ÿ D%$$8m,ҾȨ<¿ >%$#84,h +|һ:@%$,t?22-],wé5¿B&$-F.0-F1Yͺ1 ?&%-S,.,AF;HϽpck|¿<&%/o-++9FEBʩzPGPh8'&0/++5}PS:ֿa>4@[vÿ8'&15++-dD^2ϭ|R7/8On5(&4@+[C*ÑcE4-4Jkà5('7E*++OB*ϬvR>1,3Mr̡5('7D++,:A-^C8/+8Z~ӥ4)(905829?7ЩpK>5,/Fnۧ!4)(;̛~wzj.8En8ٿ[C;1-8]᪐%3)(=֭{}r4;F~SX=ϢoN@5.3T櫐'4))@޶}}~N7ZN/۾[G;21P뫑'2*)Bƚ~O1w> ҬmNB73Q׬1*)Dʢ G2;݉#YH<5W/**Hڪ~Ž;;,MԦoO@An.**J俑}yt϶0Mj0*2_]EW),+*Jŝ~taRWtצ,e X2,*@x'֥mQ{,+*Lѥ}eK9>[Ā ޡ,eN-*-H$q+,++NṖz^C24Kq*~p;+*3_Ѯ,-++NġvX=21=Y{3Y/+-./7C[AlxG.*,Hy't*++PZ5-2=Om; R9,*,L $n*++DQ3/9E\4 J2+*3a *j)*+774=Kn3 nC/+**)/NN,-+l ݣ_4)-Bz'1*.O^7**/NٳE,-+n q?+)8c 2*)T٧S6+*1T@,-+p njM-)5J"4+*KՏH1++37,-,s ԒS2)0Br4+)D?,,-,u n9),7f4+*?c9 }H.*1P4**= ыN.),=Y5*): a5)*7Q6*); o>,*5N|6,,; ͆P/*.@s6-,;ܠ\5*+9Z7-,7|=,+3T6-,5xB,*.Iy8-,2|L-)+Ah8--1ʊO.*+9U ;--.tR.*-5Q;-+,1Jq:--Ai}}|}~}Ն΅~ѐΈ ¾„ŵзƵַݸʏ̽˴ݶײȇ »ς̫մ ~~ѽγƵ~zxѻŰ且 ~ٽ ׼ʹ {꿳 îⶑ ~zґδ ᜡĵ }{ 񎖖մ ~}z§د 򄊋}ߵ~{ɣϭê {~xz㹌 {Ϡ ȭ񱡘р pyxusp⿳ ҝ ͧ젒rljkv isokki± Ԛ ǣ 钁f[XW[ nlkb]abñ ֗Ƞ v^WWVabef]WQXZה r_XXWbɀƶZY`^YUQQVT޽֑x obYXXaǀFIJKMQUXYXUSQQRURܷ؏ l]]fhdZXX[SVVYVTSRQRRdյƚ`acl%ee\YYauw^jjmqgbchgg`TRRK˰QIn_`al#`_Z[yʽ_RPJٽQ;37k]aak W`\\sV[_NdjmPF|ҴЇC90X ȗj]``k S][gƀ`W]deILՇE?5^ ˝m]a_j gR[YfJLMRVPMP MG>ϴډID;c ͢o^aj ZOYXTQSXYXWVRJ<ջ܈NJ?g Ϩra| _GUYZYX WUPF=°߉TMEkѫ }AJSWXY XWTPI;PƲWSJjѯײf>AIOPQPNIB8HijZVNoұӻ^H>9;APrҿ]YStӳ¿ɸb]Vxբ ؀ׁɺe_\ 藉ȿfb`6heb~>¿kfeJ_|lhgFό liiC nijψ~@ olj~< qli ɺ:qnpƂހϿ5ürnq̐υĶ0Ǿ ߃tos՗֑Ŭ ۂtqsǐFηـurv%Ǩx~øׂwrwƅCӹ|yÁxtzٌB~˥y|Ɓxu}⏀<~Ӹ|zǹсzw掁֊<ҁɤw|ɺт{xϊ(Թwx˻!Ђ}zò‰8Ǡu{̼Ё}z͹y|=Ӵxx}ͼς}{Խt}/ƞs{ͽ'̂~}´ø{} ָvv}‚ξȁ}ȷ {~̉#ʣ}vxā~~̸ſwӂִwt~ٽϼvȠsƒŶմv ͜'صy~ɹx€ ڵz$ɝ+vyzӺ'ǻ}u'vt隁({uy蔀 Ρ.wt鑇 ~1{s}凜'|wuშ Ϛ $~}ws|؂ ~ *}|us΁ Ө2}~ytzɈ Ǣ 휀xݸ;癀×{ݖ̀  Ԫ{|ͱ2Ӓ ݳ|{(~{}Ǝ ś{'~~ٹ ͧ{}ż ~}Ǚȫ ۸}}"~㹔 伕}}ֵ Ԧ{~~ʡ د~~~ 㷒~}~} ˟}~} է~ň ᶔ~ňƜ~ĉ԰~ƈת~NJخy{Ɗ Բ Nj ʋʊgrVVXUWdu[cqWVk`fcg{^wcYT`w[}c^xcZyc]WXstcaWVjlacޒcf`nc ܏cYf\zcےcZcۓc~Yc۔caz~[c ەcbwq]c ەcZX_wiec ݕcg^ZX]s̲_qc  ەc rpkd]XWUk[vcڔckjhd^YUQ[cݔc ggedba_]Zhz^c ڒc eccb`_][Wcr\c ܑc a``_]][YVdl_c َc `_^]][ZYWUdbgc ڍc ]]\[ZZ\WVRh§siXmc یc[\[ZZWhiUSjɣvaY_Ync  ݌cZ YhjSpϠ l]W\lqZvc ӊcZ XmzXsҝ f\W]oo\~cȺ ՊcZ [s~ZvԚ nYX`l}d[c ɮ ։cZZX`{[x֗nXX_ixc_cϿ؇ֱӈcZZXj`zהhWX^hr{~}}~y^fc˻ȸ˄cZ\wg|֑``VW\ckrtuuvwx{qZgc κ܂cZYjn{؏PCDK[djllmonprrtnXic۶ۀcZX`}xhFIKQbefhhikklniYkc%첱Ҹ˺ccZX]uӻ:7ceFHIP_bcdefgja[lc#᯦΂ZX\qм:)#)UDHHO]`abbi_\jc ⧬ި۲ڳہZX\r{.(!N ɔTCGGN[]^d\]ic(¤ܮ֭ӱҨZXY`vz0,$T ˟YCFEMZa]_gc몣ջ XYf}z1/)X ͢[BFQ][^c䢟pw53,[ Ϩ^E\[^c 㤘 ԍw850]ѫaZ]c鵒ؑv;93[ѯhZ\[c֧v=;6^ұgZ[Wcݼպu?=9cӳgZZcomЉwCA;gՑ^ZZWc~|ywuqomĉtDBAsZc~|yurqrɊqEDC|BxXZZ\¿ʻqFFECz\XZZ_¿nHGGFQVYWXWhIHIJe[ eIIJfW`D eJIKcpw@ eMKJ\ YͶ> aLKI_`W U¬:bLLQi^_X~V߀ɴ5cMLPżlY]ZkV\waNMQvW[[gȑSej£}_NNR؍WZZaFmf̱jhu\OOTWZZ_Pwaßv]\iƱ]ROU]XZZD[ѴiYX`ṯZSPXfXZZ~CTǜvaYW^pѵZSQ[kYZXtBTѳj^YW]r׵[TR^iZZWcɊAWƚq_][Ya~ܹ\US`Z^a\a?`Ҳc][YZl⺦!\VTcֱYak8Ön^^ZWa缨%[VTb޾[[cv{=ѭe^\X]x뽨'[VUeƩc[|s/”n_^Z\t𽩀'ZWVgѱ¸gXf Գ}d^[\v߾YYViַ bYc#ƙla[[|YWWl⼢žZaVrծf\dXYWnͪϺTl[W\ĕo^qWZYoҳqpÀ ֮R} }_YWg'خ~gVZYpڹp`]pÀ ܬT{t\WXn$œ+WZZuȭj[XdSfYW]Ҵ,XZXsѶ{f\X[nY|\XXd,XZZ{}e[YY_y]iYXXn-XZXsh\Y[[hy] bUW\v.WZXtr^XZ[_|sf {^UU_1VZXveXX\]men[WWm'WZXw}^WX\d{_ weYWWp $UZZnu\W[^m[ p_XU\ *TYZa^Y[b|[ ȍm^XWd2TWY_]_kd d[XWp WZY`f{էjl;u]ZW[y|W\[izYSY+`\XW_xY\[ ʒeTV^~ñ2b^_\WYktX\[ ՞lUS]w(ZY_`fWSVooY\X ~ZRWj'[WWp`WWXpٶhY\X cSS_ \WTtwbXWZuŧdY\Y ҤpUT\o"]XUoܦo^XX\_[\Y ݨuZSXh^XTi˟hY[Z[ Nj_RU`^XWdd ͗mVU\s^YWb ۢpVTWe|_WV_ 輁\SWbu`WV` njeUT_ubYY` ؠsWUXh`\[`}\TUb|aZY^ǗcUU^v`ZY\͒gUTXnb\[[ЖoSSUhb\\[ϠqXWYez d\\XsXWZbw dZ\XXZ^pcZZht8mk@icnV Bkchmviewer-7.5/src/resources/PaxHeaders.8614/icon_prev_page.png0000644000000000000000000000012410664477035021514 xustar0027 mtime=1188199965.391948 27 atime=1447562193.220733 30 ctime=1447562193.220733369 kchmviewer-7.5/src/resources/icon_prev_page.png0000644000175000001440000000322210664477035022043 0ustar00timusers00000000000000PNG  IHDR szz pHYs+DIDATXŗ_h\3{%[J j,H쇸N`\WK)B >-5P?%%ı]+v$LKR)WZnv޽+j]K6^^s7s̜O<}?sX(aBPӨ`:܋g!>O !) A S5P\;x<%`^E_Aj`l#aZ߽@ށ ؎ 8ˠգNӶˏxvַ4:M*`S+s. ^RO4xqz+vżUM_l*~!P[ 2%d~k Dr5 C)7 T0 P}J_ezbS""ZBPR$@pRő_?Dh ̇BGΞI""<,>N"P{~)̇ޞR84 >uM52NGJRTuu]K)"BYBB8aؾۦi:5ÀA1IENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/find_previous.png0000644000000000000000000000012410665224266021405 xustar0027 mtime=1188374710.480944 27 atime=1447562193.219733 30 ctime=1447562193.219733382 kchmviewer-7.5/src/resources/find_previous.png0000644000175000001440000000160210665224266021734 0ustar00timusers00000000000000PNG  IHDRw=gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATH͖kHaǏZ4 n&vS, i%`rf 2B@$dm]RDPT%NM7]1ܲ)ά7ޝFt5>ss "MH%`7Y<nxDC3&%@LI<<ҽ*)$XJ8,8x<^1:U/d "f$C^9(a)vB*I`Yy`cu/&sB| e; {1mPOa ⳛz%1.Nt'9ɒxmѐ@8 ~B+)ԕDcdh>g2(L!uhuoJѴl/fP%B9Lc_= 9U."B}Mc^PvmJyYR{| z0S4S % *ah]Q^; 1]9]%Ai3 UxiZqB̉\1P2XE֑ulF|~7b>Dm*~K`O<J"'4jO sL> <ā &YBK,j!=Öfhj:NiU[UK[m 5M\J rCC63syYk5|Q֧2XF~ZSk20 *po_jxO/OUJZkcEr҂4MjVZ~u<}[|Fkt]~-E AP`Z9?+]'6{s#O"bkgzq)Nw4!:IS@>-HZ~CeE>3C$p2=ru? 8̑1 Mey1]CߍFG'9q/Dh`+#"]j״@񞋄pjWc i$R;vo5}z3|'O~FΈ!a}aAjIg^Q~d +A"رv(++ټysݓO>YiӦ|̙3Q =, OuuV "ƅ+WHji;wۍvQ* mP"aBkTK&bS|r3*5 v0WGYe՘>QcSigsO_~g;Hj);<4J)X@lF][)[YG~rR$?S4M}cm۶8q@7cA-ӟ_"t:MotZ6Q\]E0TFnͲ ^4---@P hP`hhJ,#b0Rs=øeYD"P4hQ ~nD0L#">R_tww<0hRh!R04ԇPk,z\G6T]2b-XPvRFfeq,̙sj6Vё.={Bj7w(N:M4F9+W;w܂b;~A^||IRN,D6d2A۶}x1HZDk膴]vm bB 4st|xܕN8n*鍗  tqs->c~j2D@ĵ֮`ALK!b`Xb1qzT 7;dk(0)05;jF2Y k!y![@!Cn#wIH~ xۋҜ o;f냧GTw cil5!7yv$`hMy_j{K`Tw L]3[֮LMj-WƜX{.j/JEVVOz?:Xݎρ,J 30IENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/dryicons_save.png0000644000000000000000000000012411311605470021366 xustar0027 mtime=1260849976.072692 27 atime=1447562193.218733 30 ctime=1447562193.219733382 kchmviewer-7.5/src/resources/dryicons_save.png0000644000175000001440000000265011311605470021721 0ustar00timusers00000000000000PNG  IHDR szzsBIT|d pHYs B4tEXtSoftwareAdobe FireworksON&IDATXWKU[b 3&%BI 5011Fƅ$ QW0 0j3ӏ{9.&twU:=w>x]oJ)qDh5 XqcL0D 3C:YT ?tnSGO̼4uaÆzViVkEHX۷Oa 2uo~:3%(G9|G#$`f\CZEgC+ "PJA)~͛ 0Z[b|ca&(B-g9'NǦ$I)lRe14qn_|TT"^~Uƛ4MQ.E4şׯs?`ǟL0(lp֌eT XDPTpVr:fه=k 1km$ז:k519ɫ`osW^.Kq,fGp΁G E"JDt|/ @p;RZQ($|/B^Vץ"jPo4"kȲ WQ* T3QJmۧ@D(%%,זiL bd<Ř$ 1qLNNbPv?0{(/^0&^8ۦ" Zkd6û }jI`_."S[vasq`nCV]OB륍!ąbH熉@0J^h s伉@Cr8paYVxn^DQUP]:%:y$骈Bpak?}O}N|i|u4tJD`Ys87Ơh@k׸ Nny#j&, \V3{9Y;Q Du2qy7dV#>tDp0u> ôfwނdb,#`Zr]1 wDa"T8ku1Q 3DW $ ( T7:4ʬvxz(DȾRy`(U"k-%04NΛQ 6҃ap01 Z "$fMzkf 4GqUTJ/ 6W"}/n?ʲ z<^n]aNV;lZ)]JϜv "_(IENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/closetab.png0000644000000000000000000000012410664477035020330 xustar0027 mtime=1188199965.391948 27 atime=1447562193.218733 30 ctime=1447562193.218733396 kchmviewer-7.5/src/resources/closetab.png0000644000175000001440000000064110664477035020661 0ustar00timusers00000000000000PNG  IHDR(-SgAMAOX2tEXtSoftwareAdobe ImageReadyqe<PLTE888H M `cm p!q#s$s%t%x'z6~*,:,,../02@@3CF}龁tRNSWIDATe1nAgƜG" mAER% o$m2J.K(MZ0:A x+:@jAMv٤)^bT`W>G Io]͉w K:>D_^IENDB`kchmviewer-7.5/src/resources/PaxHeaders.8614/icon_find_next.png0000644000000000000000000000012410664477035021522 xustar0027 mtime=1188199965.391948 27 atime=1447562193.219733 30 ctime=1447562193.219733382 kchmviewer-7.5/src/resources/icon_find_next.png0000644000175000001440000000333410664477035022055 0ustar00timusers00000000000000PNG  IHDR szz pHYs+IDATXŗmW>o+;, KE i`[SI Zf-qcI7kMP7YjS#1  lٙefaΰ Mm ֮>se꾫7 r̙ c vRWSTYIIלvc= ţ2 z:w)kحcBπFSc-˫ɻ- $SP־ YJL$!=^I,汕S$(C* qٲDt(fƺ)NU"2i,K⹟YZҹAgou 1NXđw%YJ1Q:fZ6>4}߷uTml].|'2Гdwj,ihTbuOދ{]DWJF1N|`r r"*T!Kˤ@ 'gM"rx\-\-[|$31XPJJ !tN93ߟ4kDs_5qSq\zH ?- tψ?3o [`Uv07p0DWV775?htf!pPqxa}Ց˦i:ŋi}ps1Ieh=ʂuTŹcYB7x|֫NO=d=7o7ǩ/ϋɼ^C.aY˲وK&w' _S`hO;Fm  _@8Wd̸innfsppP}KOk&Xnxl51 C;96{L14$C]ׅ)M2{>Dww}:ѫTy쓵T߶'n\.ϟߠEpׯAp0~P۶m[範a= ,[,1t.YP 9o!Yp eY&gQZ6Kʱp!51d=VZ( 5 F^p6l۾dɒIooLR !DK*zw̌&4cx<ssU^AK)3Rj\wPo(uĢSΖR߈4ۑZU07뫎\R恬˲!ejN{{{e:6 CFBundleExecutable kchmviewer CFBundleIconFile kchmviewer.icns CFBundleIdentifier www.kchmviewer.net CFBundleInfoDictionaryVersion 5.2 CFBundleName kchmviewer CFBundlePackageType APPL CFBundleSignature ???? CFBundleVersion 5.2 SUFeedURL http://www.kchmviewer.net CFBundleDocumentTypes CFBundleTypeExtensions chm CHM CFBundleTypeIconFile kchmviewer.icns CFBundleTypeName CHM CFBundleTypeOSTypes CHM CFBundleTypeRole Viewer kchmviewer-7.5/src/resources/PaxHeaders.8614/icon_next_page.png0000644000000000000000000000012410664477035021516 xustar0027 mtime=1188199965.391948 27 atime=1447562193.220733 30 ctime=1447562193.220733369 kchmviewer-7.5/src/resources/icon_next_page.png0000644000175000001440000000323410664477035022050 0ustar00timusers00000000000000PNG  IHDR szz pHYs+NIDATXŗ]l\G3kNvi1ChdN4RJ i+ Ty!<K *"RJ mR&@Q^7kw]^{m׉8_3ĽtsA- PXFPHzvΌ FyjPdg+tRmʬBuww%+yjϲu ~C7>c_(D%^#EsM=Ϳ~ĉ^qVw"z/i,w"ȁ0PL,d2A)b3o5o_*&˗{0k>5_9C?+l/ .~bbjy"Z?dƔRQAM#`h ^č/xCK0. \v&7 ! ;wf {i KڹSڴ%Xc4* FW]7MǺxN)e|s*=3Cu&*ȃ;Ҕ  W7^}M~9jE]uiBij+yDEhy9˲K&^E;6>ch ~In4N.dqlcc_"DV Um< ?\G"oe$'*x"8g},8<93w0,,c? I=KEL&S#^;fVx~j^zϲ?D .deRp).`TVWfjM(65/jVڮ_M 5P|6"e m%)hY֪嶲hƝן*V&@x_X#%)$%,e~8ɖK$jςI'zR>pqz4@4d 0/B9=7mib=: QhC,GFr󴞾ѧyg=쳙f흍' xqᢏ|M澟bY{T psǖloܴ3oŸ+Ƈ9xkn߿xT¼]>yDlolB/^*Ծ5y!VnI&Aj?BS+tk+ߦ{Cv wP \k]c?f%=`uSV+%nO&f ֘nCzx'?>we~=}1!Hs[N]e~^==и>x ;4J|!W >޾:6П`|os}hd1;AC]~} "1vrؿ#a@,+IENDB`kchmviewer-7.5/src/PaxHeaders.8614/navigationpanel.cpp0000644000000000000000000000012412321077735017672 xustar0027 mtime=1396998109.567818 27 atime=1447562193.165734 30 ctime=1447562193.165734117 kchmviewer-7.5/src/navigationpanel.cpp0000644000175000001440000001263112321077735020225 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include "navigationpanel.h" #include "tab_contents.h" #include "tab_index.h" #include "tab_search.h" #include "tab_bookmarks.h" #include "settings.h" #include "mainwindow.h" NavigationPanel::NavigationPanel( QWidget * parent ) : QDockWidget( parent ), Ui::NavigatorPanel() { setupUi( this ); // There are tabs in UI-creared widget m_tabWidget->clear(); // Add the required tabs m_searchTab = new TabSearch(m_tabWidget); m_tabWidget->addTab( m_searchTab, i18n( "Search" ) ); m_bookmarksTab = new TabBookmarks( m_tabWidget ); m_tabWidget->addTab( m_bookmarksTab, i18n("Bookmarks") ); // Those tabs will be added later m_contentsTab = 0; m_indexTab = 0; } void NavigationPanel::setBookmarkMenu( QMenu * menu ) { m_bookmarksTab->createMenu( menu ); } void NavigationPanel::invalidate() { if ( m_contentsTab ) { m_tabWidget->removeTab( m_tabWidget->indexOf( m_contentsTab ) ); delete m_contentsTab; m_contentsTab = 0; } if ( m_indexTab ) { m_tabWidget->removeTab( m_tabWidget->indexOf( m_indexTab ) ); delete m_indexTab; m_indexTab = 0; } m_searchTab->invalidate(); m_bookmarksTab->invalidate(); } void NavigationPanel::updateTabs( EBook * file ) { invalidate(); // Insert index first if ( file->hasFeature( EBook::FEATURE_INDEX) ) { m_indexTab = new TabIndex(m_tabWidget); m_tabWidget->insertTab( 0, m_indexTab, i18n( "Index" ) ); } if ( file->hasFeature( EBook::FEATURE_TOC) ) { m_contentsTab = new TabContents( m_tabWidget ); m_tabWidget->insertTab( 0, m_contentsTab, i18n( "Contents" ) ); } } void NavigationPanel::applySettings( Settings * settings ) { m_searchTab->restoreSettings( settings->m_searchhistory ); m_bookmarksTab->restoreSettings( settings->m_bookmarks ); } void NavigationPanel::getSettings( Settings * settings ) { m_searchTab->saveSettings( settings->m_searchhistory ); m_bookmarksTab->saveSettings( settings->m_bookmarks ); } void NavigationPanel::refresh() { if ( m_contentsTab ) m_contentsTab->refillTableOfContents(); } bool NavigationPanel::findUrlInContents( const QUrl& url ) { if ( !m_contentsTab ) return false; TreeItem_TOC * treeitem = m_contentsTab->getTreeItem( url ); if ( treeitem ) { TreeItem_TOC * itemparent = treeitem; while ( (itemparent = (TreeItem_TOC*) itemparent->parent()) != 0 ) itemparent->setExpanded(true); m_contentsTab->showItem( treeitem ); return true; } return false; } void NavigationPanel::addBookmark() { m_bookmarksTab->onAddBookmarkPressed(); } void NavigationPanel::showPrevInToc() { if ( !m_contentsTab ) return; // Try to find current list item TreeItem_TOC * current = m_contentsTab->getTreeItem( ::mainWindow->currentBrowser()->getOpenedPage() ); if ( !current ) return; QTreeWidgetItemIterator lit( current ); lit--; if ( *lit ) ::mainWindow->openPage( ((TreeItem_TOC *) (*lit) )->getUrl(), MainWindow::OPF_CONTENT_TREE ); } void NavigationPanel::showNextInToc() { if ( !m_contentsTab ) return; // Try to find current list item TreeItem_TOC * current = m_contentsTab->getTreeItem( ::mainWindow->currentBrowser()->getOpenedPage() ); if ( !current ) return; QTreeWidgetItemIterator lit( current ); lit++; if ( *lit ) ::mainWindow->openPage( ((TreeItem_TOC *) (*lit) )->getUrl(),MainWindow::OPF_CONTENT_TREE ); } int NavigationPanel::active() const { QWidget * cur = m_tabWidget->currentWidget(); if ( cur == m_bookmarksTab ) return TAB_BOOKMARK; else if ( cur == m_searchTab ) return TAB_SEARCH; else if ( cur == m_indexTab ) return TAB_INDEX; return TAB_CONTENTS; } void NavigationPanel::setActive( int index ) { switch ( index ) { case TAB_CONTENTS: if ( m_contentsTab ) { m_tabWidget->setCurrentWidget( m_contentsTab ); m_contentsTab->focus(); } break; case TAB_INDEX: if ( m_indexTab ) { m_tabWidget->setCurrentWidget( m_indexTab ); m_indexTab->focus(); } break; case TAB_SEARCH: m_tabWidget->setCurrentWidget( m_searchTab ); m_searchTab->focus(); break; case TAB_BOOKMARK: m_tabWidget->setCurrentWidget( m_bookmarksTab ); m_bookmarksTab->focus(); break; } } void NavigationPanel::findTextInContents( const QString & text ) { if ( m_contentsTab ) m_contentsTab->search( text ); } void NavigationPanel::findInIndex( const QString& text ) { if ( m_indexTab ) m_indexTab->search( text ); } void NavigationPanel::executeQueryInSearch( const QString& text ) { m_searchTab->execSearchQueryInGui( text ); } QStringList NavigationPanel::searchQuery( const QString& text ) { QList< QUrl > res; QStringList result; m_searchTab->searchQuery( text, &res ); Q_FOREACH( QUrl u, res ) result.push_back( u.path() ); return result; } kchmviewer-7.5/src/PaxHeaders.8614/tab_index.ui0000644000000000000000000000012412315060266016275 xustar0027 mtime=1395941558.091219 27 atime=1447562193.226733 30 ctime=1447562193.226733287 kchmviewer-7.5/src/tab_index.ui0000644000175000001440000000257512315060266016636 0ustar00timusers00000000000000 TabIndex 0 0 173 382 Form1 F&ind: text 10 false true 1 1 kchmviewer-7.5/src/PaxHeaders.8614/toolbareditor.cpp0000644000000000000000000000012312446223156017361 xustar0026 mtime=1419322990.47456 27 atime=1447562193.227733 30 ctime=1447562193.227733274 kchmviewer-7.5/src/toolbareditor.cpp0000644000175000001440000002230012446223156017707 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include #include #include #include "toolbarmanager.h" #include "toolbareditor.h" static const char *ACTION_MIME_FORMAT = "application/vnd.action.list"; // // A subclassed list model which supports toolbars // class ActionListModel : public QAbstractListModel { public: ActionListModel( ToolbarEditor * editor, const QStringList& actions, bool actionSource ) : QAbstractListModel( editor ) { m_editor = editor; m_actions = actions; m_actionSource = actionSource; } int rowCount ( const QModelIndex & ) const { return m_actions.size(); } QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const { if ( !index.isValid() || index.row() < 0 || index.row() >= m_actions.size() ) return QVariant(); if ( m_actions[ index.row() ] == ToolbarManager::separatorName() ) { if ( role == Qt::DisplayRole ) return "--- separator ---"; return QVariant(); } QAction * action = m_editor->findAction( m_actions[ index.row() ] ); if ( !action ) return QVariant(); switch ( role ) { case Qt::DisplayRole: case Qt::ToolTipRole: return action->toolTip(); case Qt::DecorationRole: return action->icon(); } return QVariant(); } Qt::ItemFlags flags ( const QModelIndex& index ) const { if ( index.isValid() ) return Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled; else return Qt::ItemIsDropEnabled; } Qt::DropActions supportedDropActions() const { return Qt::MoveAction; } // Required for drag and drop bool insertRows ( int row, int count, const QModelIndex & parent = QModelIndex() ) { int start = row; int end = row + count - 1; emit beginInsertRows ( parent, start, end ); for ( ; count > 0; count-- ) m_actions.insert( row, 0 ); emit endInsertRows(); return true; } // Required for drag and drop bool removeRows ( int row, int count, const QModelIndex & parent = QModelIndex() ) { // Do not remove a row with separator if ( m_actionSource && m_actions[row ] == ToolbarManager::separatorName() ) return true; int start = row; int end = row + count - 1; emit beginRemoveRows( parent, start, end ); for ( ; count > 0; count-- ) m_actions.removeAt( row ); emit endRemoveRows(); return true; } // Set drag type for drag/drop QStringList mimeTypes() const { QStringList types; types << ACTION_MIME_FORMAT; return types; } QMimeData * mimeData( const QModelIndexList &indexes ) const { if ( indexes.size() != 1 || !indexes[0].isValid() ) return 0; QMimeData *mimeData = new QMimeData(); mimeData->setData( ACTION_MIME_FORMAT, m_actions[ indexes[0].row() ].toUtf8() ); return mimeData; } bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) { if (action == Qt::IgnoreAction) return true; if ( !data->hasFormat( ACTION_MIME_FORMAT ) ) return false; // Our list has only one column if ( column > 0 ) return false; // We initially examine the row number supplied to see if we can use it to insert items into the model, // regardless of whether the parent index is valid or not. // If the parent model index is valid, the drop occurred on an item. In this simple list model, we find // out the row number of the item and use that value to insert dropped items into the top level of the model. int beginRow; if ( row != -1 ) beginRow = row; else if ( parent.isValid() ) beginRow = parent.row(); else beginRow = rowCount(QModelIndex()); QByteArray actionName = data->data( ACTION_MIME_FORMAT ); // Do not add this_is_separator to the source actionlist again if ( m_actionSource && actionName == ToolbarManager::separatorName() ) return true; // The strings can then be inserted into the underlying data store. For consistency, this can be done // through the model's own interface. insertRows( beginRow, 1, QModelIndex() ); m_actions[ beginRow ] = actionName; emit dataChanged( index( beginRow, 0, QModelIndex() ), index( beginRow, 0, QModelIndex() ) ); return true; } QStringList actions() const { return m_actions; } private: ToolbarEditor * m_editor; QStringList m_actions; bool m_actionSource; }; ToolbarEditor::ToolbarEditor( QWidget *parent ) : QDialog(parent), Ui::ToolbarEditor() { setupUi( this ); m_allowActionsWithoutIcons = true; m_activeToolbar = 0; connect( boxToolbars, SIGNAL(activated(int)), this, SLOT(toolbarSelected(int)) ); } ToolbarEditor::~ToolbarEditor() { } void ToolbarEditor::addToolbar( QToolBar * toolbar ) { m_toolbars.push_back( toolbar ); } void ToolbarEditor::addToolbars( QList toolbars ) { foreach( QToolBar * t, toolbars ) m_toolbars.push_back( t ); } void ToolbarEditor::setAvailableActions( QList availableActions ) { m_availableActions = availableActions; } int ToolbarEditor::exec() { if ( m_toolbars.size() == 0 ) qFatal("ToolbarEditor::exec: no toolbars selected, and editing is disabled. Aborting."); // Hide the group allowing to edit toolbar list if we do not allow editing, and there // is only one toolbar if ( m_toolbars.size() == 1 ) groupEditToolbars->hide(); // Init the toolbar(s) actions foreach( QToolBar* toolbar, m_toolbars ) { initToolbarActions( toolbar ); // Add a toolbar into the combobox boxToolbars->addItem( toolbar->windowTitle() ); } m_activeToolbar = m_toolbars.front(); setupViews( m_activeToolbar ); return QDialog::exec(); } QAction * ToolbarEditor::findAction( const QString& objectname ) const { foreach ( QAction* action, m_availableActions ) if ( ToolbarManager::actionName( action ) == objectname ) return action; return 0; } void ToolbarEditor::initToolbarActions( QToolBar * toolbar ) { QStringList selected; foreach ( QAction* action, toolbar->actions() ) { if ( action->isSeparator() ) selected.push_back( ToolbarManager::separatorName() ); else if ( ToolbarManager::hasAction( m_availableActions, action ) ) selected.push_back( ToolbarManager::actionName( action ) ); } m_selected[ toolbar ] = selected; } void ToolbarEditor::setupViews( QToolBar * toolbar ) { if ( !m_selected.contains( toolbar ) ) qFatal("ToolbarEditor::setupViews: invalid toolbar"); QStringList actions = m_selected[ toolbar ]; // Create the list of available actions QStringList available; foreach( QAction* action, m_availableActions ) { if ( !actions.contains( ToolbarManager::actionName( action ) ) ) { if ( m_allowActionsWithoutIcons || !action->icon().isNull() ) available.push_back( ToolbarManager::actionName( action ) ); } } if ( !available.contains( ToolbarManager::separatorName() ) ) available.push_back( ToolbarManager::separatorName() ); // Init models for available and selected actions ActionListModel * newModelAvailable = new ActionListModel( this, available, true ); ActionListModel * newModelSelected = new ActionListModel( this, actions, false ); // Set them, and get the old models ActionListModel * oldModelAvailable = (ActionListModel*) listAvailable->model(); ActionListModel * oldModelSelected = (ActionListModel*) listActions->model(); listActions->setModel( newModelSelected ); listAvailable->setModel( newModelAvailable ); // Remove old models delete oldModelAvailable; delete oldModelSelected; m_activeToolbar = toolbar; } void ToolbarEditor::toolbarSelected( int index ) { if ( index == -1 ) return; QToolBar * selected = m_toolbars[ index ]; if ( selected == m_activeToolbar ) return; // Copy the settings from active toolbar, and switch to new toolbar updateToolbarActions( m_activeToolbar ); setupViews( selected ); } void ToolbarEditor::updateToolbarActions( QToolBar * toolbar ) { if ( !m_selected.contains( toolbar ) ) qFatal("ToolbarEditor::updateToolbarActions: invalid toolbar"); ActionListModel * model = (ActionListModel*) listActions->model(); m_selected[ toolbar ] = model->actions(); } QStringList ToolbarEditor::actionsForToolbar( QToolBar * toolbar ) { if ( !m_selected.contains( toolbar ) ) return QStringList(); else return m_selected[ toolbar ]; } void ToolbarEditor::accept() { // Copy the last settings updateToolbarActions( m_activeToolbar ); // Reset models delete listAvailable->model(); delete listActions->model(); listActions->setModel( 0 ); listAvailable->setModel( 0 ); QDialog::accept(); } kchmviewer-7.5/src/PaxHeaders.8614/kchmviewerapp.cpp0000644000000000000000000000012412321077735017360 xustar0027 mtime=1396998109.567818 27 atime=1447562193.163734 30 ctime=1447562193.163734145 kchmviewer-7.5/src/kchmviewerapp.cpp0000644000175000001440000000353212321077735017713 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include "kchmviewerapp.h" #include "mainwindow.h" KchmviewerApp::KchmviewerApp(int &argc, char **argv, int version) : QApplication(argc, argv, version) { } KchmviewerApp::~KchmviewerApp() { } bool KchmviewerApp::event(QEvent* ev) { if (ev->type() == QEvent::FileOpen) { m_nResend = 0; m_filePath = static_cast(ev)->file(); onTimer(); return true; } return QApplication::event(ev); } void KchmviewerApp::onTimer() { MainWindow *main; foreach (QWidget *widget, QApplication::topLevelWidgets()) { main = dynamic_cast(widget); if (main != 0) { break; } } if (main == 0) { qWarning("resending %s", m_filePath.toStdString().c_str()); if (m_nResend >= 30) { qWarning("aborting loading of %s", m_filePath.toStdString().c_str()); return; } QTimer::singleShot(250, this, SLOT(onTimer())); ++m_nResend; return; } main->loadFile(m_filePath); } kchmviewer-7.5/src/PaxHeaders.8614/dialog_setup.ui0000644000000000000000000000012412616066413017023 xustar0027 mtime=1446538507.448643 27 atime=1447562193.162734 30 ctime=1447562193.162734158 kchmviewer-7.5/src/dialog_setup.ui0000644000175000001440000005026212616066413017360 0ustar00timusers00000000000000 DialogSetup 0 0 630 441 0 0 KchmViewer settings false true 6 9 0 General behavior 6 9 6 0 If started with no arguments 6 9 Start with nothing loaded Pop up the "open file" dialog Open the &last used CHM file, if exist Alt+L History 6 9 6 0 Store history information for false 10 latest files false Remembers the information about the files, which were opened. Remembers last opened page, search history, font size, bookmarks and so on. R&emember extra information for history files Alt+E CHM security settings 6 9 When external link clicked 6 9 Alwa&ys open it in external browser Alt+Y Ask for confirmation Do not open the link When link pointed to a new CHM file clicked 6 9 Always open a new CHM file Ask for confirmation Do not open a new CHM file Qt::Vertical 20 40 Browser 6 9 HTML browser settings Load the &images Enable browser &plugins (i.e. Flash) Alt+P Enable &Java Alt+J Enable Java&Script Alt+S Enable &offline storage (HTML5) Alt+R Enable &local storage (HTML5) Highlight search results during in-page search Table of Contents and other windows Open all Table of Contents entries automatically Always use a single click to open the elements instead of OS-specific activation Qt::Vertical 20 40 Advanced View HTML source command uses 6 9 Built-in HTML source viewer E&xternal program, specified below Alt+X 6 0 External program: false &Browse Other Use right-to-left layout direction (Arabic and Hebrew layouts) Automatically detect encoding for KHTMLPart and WebKit browsers (not recommended) If this option is enabled, the application will check for updates (when new version of application is released). If a new version is available, the program will show a messagebox dialog informing you about new version. This check will only performed once in 24 hours. No user information is requested or transmitted from your computer during this check. Perform a check whether a new version is available (once a week) Toolbars Small icons Large icons Large icons and text Just text Qt::Horizontal 40 20 Qt::Vertical 567 21 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok m_radioOnBeginOpenDialog m_radioOnBeginOpenLast m_historySize m_rememberHistoryInfo m_radioExtLinkOpenAlways m_radioExtLinkAsk m_radioExtLinkOpenNever m_radioNewChmOpenAlways m_radioNewChmAsk m_radioNewChmOpenNever m_enableJava m_enablePlugins m_advViewSourceInternal m_advViewSourceExternal m_advExternalProgramName buttonBox tabWidget m_advViewSourceExternal toggled(bool) m_advExternalProgramName setEnabled(bool) 44 113 148 143 buttonBox accepted() DialogSetup accept() 481 326 445 346 buttonBox rejected() DialogSetup reject() 557 316 598 262 kchmviewer-7.5/src/PaxHeaders.8614/tab_contents.cpp0000644000000000000000000000012212616066413017172 xustar0027 mtime=1446538507.448643 27 atime=1447562193.225733 28 ctime=1447562193.2257333 kchmviewer-7.5/src/tab_contents.cpp0000644000175000001440000001366212616066413017534 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include "kde-qt.h" #include "mainwindow.h" #include "treeitem_toc.h" #include "tab_contents.h" #include "config.h" TabContents::TabContents( QWidget *parent ) : QWidget( parent ), Ui::TabContents() { setupUi( this ); m_contextMenu = 0; tree->header()->hide(); // Handle clicking on m_contentsWindow element if ( pConfig->m_tabUseSingleClick ) { connect( tree, SIGNAL( itemClicked(QTreeWidgetItem*,int)), this, SLOT( onClicked ( QTreeWidgetItem *, int ) ) ); } else { connect( tree, SIGNAL( itemActivated ( QTreeWidgetItem *, int ) ), this, SLOT( onClicked ( QTreeWidgetItem *, int ) ) ); } // Activate custom context menu, and connect it tree->setContextMenuPolicy( Qt::CustomContextMenu ); connect( tree, SIGNAL( customContextMenuRequested ( const QPoint & ) ), this, SLOT( onContextMenuRequested( const QPoint & ) ) ); if ( ::mainWindow->chmFile() ) refillTableOfContents(); focus(); } TabContents::~TabContents() { } void TabContents::refillTableOfContents( ) { ShowWaitCursor wc; QList< EBookTocEntry > data; if ( !::mainWindow->chmFile()->getTableOfContents( data ) || data.size() == 0 ) { qWarning ("CHM toc present but is empty; wrong parsing?"); return; } // Fill up the tree; we use a pretty complex routine to handle buggy CHMs QVector< TreeItem_TOC *> lastchild; QVector< TreeItem_TOC *> rootentry; bool warning_shown = false; tree->clear(); for ( int i = 0; i < data.size(); i++ ) { int indent = data[i].indent; // Do we need to add another indent? if ( indent >= rootentry.size() ) { int maxindent = rootentry.size() - 1; // Resize the arrays lastchild.resize( indent + 1 ); rootentry.resize( indent + 1 ); if ( indent > 0 && maxindent < 0 ) qFatal("Invalid fisrt TOC indent (first entry has no root entry), aborting."); // And init the rest if needed if ( (indent - maxindent) > 1 ) { if ( !warning_shown ) { qWarning("Invalid TOC step, applying workaround. Results may vary."); warning_shown = true; } for ( int j = maxindent; j < indent; j++ ) { lastchild[j+1] = lastchild[j]; rootentry[j+1] = rootentry[j]; } } lastchild[indent] = 0; rootentry[indent] = 0; } // Create the node TreeItem_TOC * item; if ( indent == 0 ) item = new TreeItem_TOC( tree, lastchild[indent], data[i].name, data[i].url, data[i].iconid ); else { // New non-root entry. It is possible (for some buggy CHMs) that there is no previous entry: previoous entry had indent 1, // and next entry has indent 3. Backtracking it up, creating missing entries. if ( rootentry[indent-1] == 0 ) qFatal("Child entry indented as %d with no root entry!", indent); item = new TreeItem_TOC( rootentry[indent-1], lastchild[indent], data[i].name, data[i].url, data[i].iconid ); } if ( pConfig->m_tocOpenAllEntries ) item->setExpanded( true ); lastchild[indent] = item; rootentry[indent] = item; } tree->update(); } static TreeItem_TOC * findTreeItem( TreeItem_TOC *item, const QUrl& url, bool ignorefragment ) { if ( item->containstUrl( url, ignorefragment ) ) return item; for ( int i = 0; i < item->childCount(); ++i ) { TreeItem_TOC * bitem = findTreeItem( (TreeItem_TOC *) item->child( i ), url, ignorefragment ); if ( bitem ) return bitem; } return 0; } TreeItem_TOC * TabContents::getTreeItem( const QUrl& url ) { // During the first iteraction we check for the fragment as well, so the URLs // like ch05.htm#app1 and ch05.htm#app2 could be handled as different TOC entries for ( int i = 0; i < tree->topLevelItemCount(); i++ ) { TreeItem_TOC * item = findTreeItem( (TreeItem_TOC*) tree->topLevelItem(i), url, false ); if ( item ) return item; } // During the second iteraction we ignore the fragment, so if there is no ch05.htm#app1 // but there is ch05.htm, we just use it for ( int i = 0; i < tree->topLevelItemCount(); i++ ) { TreeItem_TOC * item = findTreeItem( (TreeItem_TOC*) tree->topLevelItem(i), url, true ); if ( item ) return item; } return 0; } void TabContents::showItem( TreeItem_TOC * item ) { tree->setCurrentItem( item ); tree->scrollToItem( item ); } void TabContents::onClicked(QTreeWidgetItem * item, int) { if ( !item ) return; TreeItem_TOC * treeitem = (TreeItem_TOC*) item; ::mainWindow->activateUrl( treeitem->getUrl() ); } void TabContents::onContextMenuRequested(const QPoint & point) { TreeItem_TOC * treeitem = (TreeItem_TOC *) tree->itemAt( point ); if( treeitem ) { ::mainWindow->currentBrowser()->setTabKeeper( treeitem->getUrl() ); ::mainWindow->tabItemsContextMenu()->popup( tree->viewport()->mapToGlobal( point ) ); } } void TabContents::search( const QString & text ) { QList items = tree->findItems( text, Qt::MatchWildcard | Qt::MatchRecursive ); if ( items.isEmpty() ) return; TreeItem_TOC * treeitem = (TreeItem_TOC *) items.first(); ::mainWindow->activateUrl( treeitem->getUrl() ); } void TabContents::focus() { if ( !tree->hasFocus() ) tree->setFocus(); } kchmviewer-7.5/src/PaxHeaders.8614/dbus_interface.cpp0000644000000000000000000000012412321077735017470 xustar0027 mtime=1396998109.567818 27 atime=1447562193.160734 30 ctime=1447562193.160734185 kchmviewer-7.5/src/dbus_interface.cpp0000644000175000001440000000410112321077735020014 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include #include "dbus_interface.h" #include "mainwindow.h" #include "navigationpanel.h" #include "tab_search.h" DBusInterface::DBusInterface( QObject *parent ) : QObject( parent ) { QDBusConnection::sessionBus().registerObject( "/application", this, QDBusConnection::ExportScriptableSlots ); } DBusInterface::~DBusInterface() { } void DBusInterface::loadHelpFile( const QString & filename, const QString & page2open ) { QStringList args; args.push_back( filename ); args.push_back( page2open ); qApp->postEvent( ::mainWindow, new UserEvent( "loadAndOpen", args ) ); } void DBusInterface::openPage( const QString & page2open ) { QStringList args; args.push_back( page2open ); qApp->postEvent( ::mainWindow, new UserEvent( "openPage", args ) ); } void DBusInterface::guiFindInIndex( const QString & word ) { QStringList args; args.push_back( word ); qApp->postEvent( ::mainWindow, new UserEvent( "findInIndex", args ) ); } void DBusInterface::guiSearchQuery( const QString & query ) { QStringList args; args.push_back( query ); qApp->postEvent( ::mainWindow, new UserEvent( "searchQuery", args ) ); } QStringList DBusInterface::searchQuery( const QString & query ) { return ::mainWindow->navigator()->searchQuery( query ); } kchmviewer-7.5/src/PaxHeaders.8614/viewwindow.cpp0000644000000000000000000000012412616053773016720 xustar0027 mtime=1446533115.598158 27 atime=1447562193.227733 30 ctime=1447562193.227733274 kchmviewer-7.5/src/viewwindow.cpp0000644000175000001440000001471712616053773017262 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include #include #include #include #include #include #include #include "config.h" #include "viewwindow.h" #include "mainwindow.h" #include "viewwindowmgr.h" #include "qwebviewnetwork.h" static const qreal ZOOM_FACTOR_CHANGE = 0.1; ViewWindow::ViewWindow( QWidget * parent ) : QWebView ( parent ) { invalidate(); m_contextMenu = 0; m_contextMenuLink = 0; m_storedScrollbarPosition = 0; // Use our network emulation layer page()->setNetworkAccessManager( new KCHMNetworkAccessManager(this) ); // All links are going through us page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks ); connect( this, SIGNAL( loadFinished(bool)), this, SLOT( onLoadFinished(bool)) ); // Search results highlighter QPalette pal = palette(); pal.setColor( QPalette::Inactive, QPalette::Highlight, pal.color(QPalette::Active, QPalette::Highlight) ); pal.setColor( QPalette::Inactive, QPalette::HighlightedText, pal.color(QPalette::Active, QPalette::HighlightedText) ); setPalette( pal ); } ViewWindow::~ViewWindow() { } void ViewWindow::invalidate( ) { m_newTabLinkKeeper = QString::null; m_storedScrollbarPosition = 0; reload(); } bool ViewWindow::openUrl ( const QUrl& url ) { //qDebug("ViewWindow::openUrl %s", qPrintable(url.toString())); // Do not use setContent() here, it resets QWebHistory load( url ); m_newTabLinkKeeper.clear(); mainWindow->viewWindowMgr()->setTabName( this ); return true; } QMenu * ViewWindow::createStandardContextMenu( QWidget * parent ) { QMenu * contextMenu = new QMenu( parent ); contextMenu->addAction( "&Copy", ::mainWindow, SLOT(slotBrowserCopy()) ); contextMenu->addAction( "&Select all", ::mainWindow, SLOT(slotBrowserSelectAll()) ); return contextMenu; } QMenu * ViewWindow::getContextMenu( const QUrl & link, QWidget * parent ) { if ( link.isEmpty() ) { // standard context menu if ( !m_contextMenu ) m_contextMenu = createStandardContextMenu( parent ); return m_contextMenu; } else { // Open in New Tab context menu // standard context menu if ( !m_contextMenuLink ) { m_contextMenuLink = createStandardContextMenu( parent ); m_contextMenuLink->addSeparator(); m_contextMenuLink->addAction( "&Open this link in a new tab", ::mainWindow, SLOT(onOpenPageInNewTab()), QKeySequence("Shift+Enter") ); m_contextMenuLink->addAction( "&Open this link in a new background tab", ::mainWindow, SLOT(onOpenPageInNewBackgroundTab()), QKeySequence("Ctrl+Enter") ); } setTabKeeper( link ); return m_contextMenuLink; } } QString ViewWindow::title() const { QString title = ::mainWindow->chmFile()->getTopicByUrl( url() ); // If no title is found, use the path (without the first /) if ( title.isEmpty() ) title = url().path().mid( 1 ); return title; } void ViewWindow::navigateForward() { forward(); } void ViewWindow::navigateBack( ) { back(); } void ViewWindow::navigateHome( ) { ::mainWindow->openPage( ::mainWindow->chmFile()->homeUrl() ); } void ViewWindow::setTabKeeper( const QUrl& link ) { m_newTabLinkKeeper = link; } bool ViewWindow::printCurrentPage() { QPrinter printer( QPrinter::HighResolution ); QPrintDialog dlg( &printer, this ); if ( dlg.exec() != QDialog::Accepted ) { ::mainWindow->showInStatusBar( i18n( "Printing aborted") ); return false; } print( &printer ); ::mainWindow->showInStatusBar( i18n( "Printing finished") ); return true; } void ViewWindow::setZoomFactor(qreal zoom) { QWebView::setZoomFactor( zoom ); } qreal ViewWindow::getZoomFactor() const { return zoomFactor(); } void ViewWindow::zoomIncrease() { setZoomFactor( zoomFactor() + ZOOM_FACTOR_CHANGE ); } void ViewWindow::zoomDecrease() { setZoomFactor( zoomFactor() - ZOOM_FACTOR_CHANGE ); } int ViewWindow::getScrollbarPosition() { return page()->currentFrame()->scrollBarValue( Qt::Vertical ); } void ViewWindow::setScrollbarPosition(int pos, bool force) { if ( !force ) m_storedScrollbarPosition = pos; else page()->currentFrame()->setScrollBarValue( Qt::Vertical, pos ); } void ViewWindow::clipSelectAll() { triggerPageAction( QWebPage::SelectAll ); } void ViewWindow::clipCopy() { triggerPageAction( QWebPage::Copy ); } void ViewWindow::updateHistoryIcons() { if ( mainWindow ) { mainWindow->navSetBackEnabled( history()->canGoBack() ); mainWindow->navSetForwardEnabled( history()->canGoForward() ); } } QString ViewWindow::anchorAt(const QPoint & pos) { QWebHitTestResult res = page()->currentFrame()->hitTestContent( pos ); if ( !res.linkUrl().isValid() ) return QString::null; return res.linkUrl().path(); } void ViewWindow::mouseReleaseEvent ( QMouseEvent * event ) { if ( event->button() == Qt::MidButton ) { QString link = anchorAt( event->pos() ); if ( !link.isEmpty() ) { setTabKeeper( link ); ::mainWindow->onOpenPageInNewBackgroundTab(); return; } } QWebView::mouseReleaseEvent( event ); } void ViewWindow::contextMenuEvent(QContextMenuEvent *e) { // From Qt Assistant QMenu *m = new QMenu(0); QString link = anchorAt( e->pos() ); if ( !link.isEmpty() ) { m->addAction( i18n("Open Link in a new tab\tShift+LMB"), ::mainWindow, SLOT( onOpenPageInNewTab() ) ); m->addAction( i18n("Open Link in a new background tab\tCtrl+LMB"), ::mainWindow, SLOT( onOpenPageInNewBackgroundTab() ) ); m->addSeparator(); setTabKeeper( link ); } ::mainWindow->setupPopupMenu( m ); m->exec( e->globalPos() ); delete m; } void ViewWindow::onLoadFinished ( bool ) { if ( m_storedScrollbarPosition > 0 ) { page()->currentFrame()->setScrollBarValue( Qt::Vertical, m_storedScrollbarPosition ); m_storedScrollbarPosition = 0; } updateHistoryIcons(); emit dataLoaded( this ); } kchmviewer-7.5/src/PaxHeaders.8614/dialog_chooseurlfromlist.cpp0000644000000000000000000000012412321077735021615 xustar0027 mtime=1396998109.567818 27 atime=1447562193.161734 30 ctime=1447562193.161734172 kchmviewer-7.5/src/dialog_chooseurlfromlist.cpp0000644000175000001440000000303712321077735022150 0ustar00timusers00000000000000/* * Kchmviewer - a CHM and EPUB file viewer with broad language support * Copyright (C) 2004-2014 George Yunaev, gyunaev@ulduzsoft.com * * 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 . */ #include "kde-qt.h" #include "dialog_chooseurlfromlist.h" DialogChooseUrlFromList::DialogChooseUrlFromList( QWidget* parent ) : QDialog( parent ), Ui::DialogTopicSelector() { setupUi( this ); // List doubleclick connect( list, SIGNAL( itemDoubleClicked ( QListWidgetItem * ) ), this, SLOT( onDoubleClicked( QListWidgetItem * ) ) ); } void DialogChooseUrlFromList::onDoubleClicked( QListWidgetItem * item ) { if ( item ) accept(); } QUrl DialogChooseUrlFromList::getSelectedItemUrl(const QList &urls, const QStringList & titles ) { for ( int i = 0; i < urls.size(); i++ ) list->addItem( titles[i] ); if ( exec() == QDialog::Accepted && list->currentRow() != -1 ) return urls[ list->currentRow() ]; return QUrl(); } kchmviewer-7.5/PaxHeaders.8614/po0000644000000000000000000000013212622005721013546 xustar0030 mtime=1447562193.151734307 30 atime=1447562193.129734607 30 ctime=1447562193.151734307 kchmviewer-7.5/po/0000755000175000001440000000000012622005721014154 5ustar00timusers00000000000000kchmviewer-7.5/po/PaxHeaders.8614/CMakeLists.txt0000644000000000000000000000012411115117472016367 xustar0027 mtime=1228185402.911503 27 atime=1447562193.129734 30 ctime=1447562193.129734607 kchmviewer-7.5/po/CMakeLists.txt0000644000175000001440000000177711115117472016733 0ustar00timusers00000000000000FIND_PROGRAM(GETTEXT_MSGFMT_EXECUTABLE msgfmt) IF(NOT GETTEXT_MSGFMT_EXECUTABLE) MESSAGE( "------ NOTE: msgfmt not found. Translations will *not* be installed ------") ELSE(NOT GETTEXT_MSGFMT_EXECUTABLE) SET(catalogname kchmviewer) ADD_CUSTOM_TARGET(translations ALL) FILE(GLOB PO_FILES ${catalogname}*.po) FOREACH(_poFile ${PO_FILES}) GET_FILENAME_COMPONENT(_poFileName ${_poFile} NAME) STRING(REGEX REPLACE "^${catalogname}_?" "" _langCode ${_poFileName} ) STRING(REGEX REPLACE "\\.po$" "" _langCode ${_langCode} ) IF( _langCode ) GET_FILENAME_COMPONENT(_lang ${_poFile} NAME_WE) SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo) ADD_CUSTOM_COMMAND(TARGET translations COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --check -o ${_gmoFile} ${_poFile} DEPENDS ${_poFile}) INSTALL(FILES ${_gmoFile} DESTINATION ${LOCALE_INSTALL_DIR}/${_langCode}/LC_MESSAGES/ RENAME ${catalogname}.mo) ENDIF( _langCode ) ENDFOREACH(_poFile ${PO_FILES}) ENDIF(NOT GETTEXT_MSGFMT_EXECUTABLE) kchmviewer-7.5/po/PaxHeaders.8614/kchmviewer_sv.po0000644000000000000000000000012411513542712017044 xustar0027 mtime=1294910922.830977 27 atime=1447562193.146734 30 ctime=1447562193.146734376 kchmviewer-7.5/po/kchmviewer_sv.po0000644000175000001440000010573211513542712017404 0ustar00timusers00000000000000# Swedish translation for kchmviewer. # This file is put in the public domain. # Daniel Nylander , 2008. # msgid "" msgstr "" "Project-Id-Version: kchmviewer 4.0 beta2\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2008-09-16 22:18+0100\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - lägg till ett bokmärke" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Ange ett namn för detta bokmärke:" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - redigera bokmärkets namn" #: kchmmainwindow.cpp:96 #, fuzzy msgid "Bookmarks" msgstr "&Bokmärk denna sida" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - misslyckades med att läsa in chm-filen" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "Kunde inte läsa in chm-filen %1" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "Kunde inte läsa in filen %1" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - fjärrlänk klickad på - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "En fjärrlänk %1 kommer att öppnas i det externa programmet.\n" "\n" "Vill du fortsätta?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "&Ja" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&Nej" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - JavsScript-länk klickad på" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "Du har klickat på en JavaScript-länk.\n" "JavaScript-URLer är inaktiverade i CHM-filer för att förhindra " "säkerhetsrelaterade problem." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - länk till en ny CHM-fil klickades på" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "Du har klicka på en länk som leder till en ny CHM-fil, %1.\n" "Den aktuella filen kommer att stängas.\n" "\n" "Vill du fortsätta?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Index" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Sök" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Komprimerad hjälpmanual (*.chm)" #: kchmmainwindow.cpp:858 #, fuzzy msgid "Open a chm file" msgstr "Öppna fil" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Komprimerad hjälpmanual (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Inläsning avbröts" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "Välj en katalog att lagra CHM-innehåll i" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "Extrahering av CHM-innehåll" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Extraherar filer..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "Avbryt" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "Kunde inte hitta öppnat ämne i innehållsfönstret" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "Om %1" #: kchmmainwindow.cpp:1326 #, fuzzy msgid "&Help" msgstr "&Ta bort" #: kchmmainwindow.cpp:1327 #, fuzzy msgid "&About" msgstr "Avbryt" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "Om &Qt" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "Sökningen returnerade %1 sökträff(ar)" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "Sökningen returnerade inga träffar" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "Sökning misslyckades" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" "

Den förbättrade sökmotorn låter dig söka efter ett ord, symbol " "eller fras, som är en uppsättning ord och symboler inkluderade inom " "citattecken. Endast dokumenten som inkluderar alla söktermer i sökfältet " "kommer att visas; inga prefix behövs.

Till skillnad mot MS CHM interna " "sökindex indexerar min förbättrade sökmotor allting, inklusive " "specialsymboler. Därför är det möjligt att söka efter (och hitta!) någonting " "liknande $q = new ChmFile();. Denna sökning har även fullständigt " "stöd för Unicode, vilket betyder att du kan söka i icke-engelska dokument." "

Om du vill söka efter ett citattecken, använd citationstecken istället. " "Motorn behandlar ett citattecken och ett citationstecken som samma symbol, " "vilket innebär att de kan användas i fraser." #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "" #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "" #: kchmsetupdialog.cpp:183 #, fuzzy msgid "" "Changing those options requires restarting the application to take effect." msgstr "" "Ändring av visningsalternativ för webbläsare eller användning\n" "av sökmotor kräver att programmet startas om." #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "" #: kchmviewwindowmgr.cpp:70 #, fuzzy msgid "Add page" msgstr "Sök i sida" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 #, fuzzy msgid "Alt+%1" msgstr "Alt+E" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Utskriften avbröts" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 #, fuzzy msgid "Printing finished" msgstr "Utskriften avbröts" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "" #: main.cpp:45 msgid "Perform auto testing" msgstr "" #: main.cpp:46 msgid "Perform short auto testing" msgstr "" #: main.cpp:47 #, fuzzy msgid "A CHM file to show" msgstr "CHM-filvisare" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" "'--search ' anger sökfrågan att söka efter och aktiverar den första " "sökträffar, om hittad" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" "'--sindex ' anger ordet att söka efter i indexet och aktiverar det, om " "hittat" #: main.cpp:50 #, fuzzy msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" "'--sindex ' anger ordet att söka efter i indexet och aktiverar det, om " "hittat" #: main.cpp:56 msgid "CHM file viewer" msgstr "CHM-filvisare" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "Inställningar för KchmViewer" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "Allmänt beteende" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "Om inga argument anges vid inläsning" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "Öppna dialogrutan \"Öppna CHM-fil\"" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "Öppna s&enaste använda CHM-fil, om den finns" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, fuzzy, no-c-format msgid "Alt+L" msgstr "Alt+O" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "Historik" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "Lagra historikinformation för" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "senast filer" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "Kommer ihåg informationen om filerna, vilka som öppnades. Kommer ihåg " "senaste öppnade sida, sökhistorik, typsnittsstorlek, bokmärken och så vidare." #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "K&om ihåg extra information för historikfiler" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+O" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "CHM-säkerhetsinställningar" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "När en extern länk klickas på" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "Öppna alltid den i e&xtern webbläsare" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+X" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "Fråga efter bekräftelse" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "Öppna inte länken" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "När en länk som pekar till en ny CHM-fil klickas på" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "Öppna alltid en ny CHM-fil" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "Öppna inte en ny CHM-fil" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "Versionsspecifika inställningar" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "KDE versionsinställningar" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "För att visa HTML-innehåll, använd" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "&QTextBrowser-baserad widget" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "&KHTMLPart-baserad widget" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "KHTMLPart-säkerhet" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "Aktivera &uppdatering" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+U" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "Aktivera &Java" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "Aktivera ins&ticksmoduler" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+T" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "Aktivera Java&Script" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "Avancerat" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "Visa användning av HTML-källkommandon" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "Inbyggd HTML-källvisare" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "E&xterna program, ange nedan" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+X" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "Externa program:" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "&Bokmärk denna sida" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, fuzzy, no-c-format msgid "&File" msgstr "Titel" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, fuzzy, no-c-format msgid "&Windows" msgstr "&Fönster" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, fuzzy, no-c-format msgid "general toolbar" msgstr "Allmänt beteende" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, fuzzy, no-c-format msgid "navigation toolbar" msgstr "Navigering" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, fuzzy, no-c-format msgid "Print" msgstr "Skriv ut fil" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, fuzzy, no-c-format msgid "&Select All" msgstr "&Markera allt" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "E&xtrahera CHM-innehåll..." #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, fuzzy, no-c-format msgid "Extract the CHM content to the directory" msgstr "Extrahering av CHM-innehåll" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, fuzzy, no-c-format msgid "&Application settings..." msgstr "&Ändra inställningar..." #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, fuzzy, no-c-format msgid "Change the application settings" msgstr "&Ändra inställningar..." #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "&Lägg till bokmärke" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, fuzzy, no-c-format msgid "&Increase font size" msgstr "Öka typsnittsstorleken" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, fuzzy, no-c-format msgid "Increase the font size" msgstr "Öka typsnittsstorleken" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, fuzzy, no-c-format msgid "&Decrease font size" msgstr "Minska typsnittsstorleken" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, fuzzy, no-c-format msgid "Decrease the font size" msgstr "Minska typsnittsstorleken" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "&Visa HTML-källa" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "Visa användning av HTML-källkommandon" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, fuzzy, no-c-format msgid "Enable &full screen mode" msgstr "&Helskärm" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, fuzzy, no-c-format msgid "F11" msgstr "F1" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, no-c-format msgid "&Locate in contents window" msgstr "&Hitta i innehållsfönstret" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "Hitta detta ämne i innehållsfönstret" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, fuzzy, no-c-format msgid "Set &encoding" msgstr "An&ge codepage" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "Öppna fil" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "Öppna alltid en ny CHM-fil" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, fuzzy, no-c-format msgid "Navigate back" msgstr "Navigering" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, fuzzy, no-c-format msgid "Navigate back in navigation history" msgstr "Flytta bakåt i historiken" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, fuzzy, no-c-format msgid "Navigate forward" msgstr "Navigering" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, fuzzy, no-c-format msgid "Navigate forward in navigation history" msgstr "Flytta framåt i historiken" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, fuzzy, no-c-format msgid "Navigate home" msgstr "Navigering" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, fuzzy, no-c-format msgid "Previous page in Table of Context" msgstr "" "Klicka på denna knapp för att gå till föregående sida i " "innehållsförteckningen." #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, fuzzy, no-c-format msgid "Previous page in TOC" msgstr "Föreg sida i TOC" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, fuzzy, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "" "Klicka på denna knapp för att gå till föregående sida i " "innehållsförteckningen." #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, fuzzy, no-c-format msgid "Next page in Table of Context" msgstr "Nästa sida i TOC" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "Nästa sida i TOC" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, fuzzy, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "" "Klicka på denna knapp för att gå till nästa sida i innehållsförteckningen." #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, fuzzy, no-c-format msgid "&Close window" msgstr "&Fönster" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "&Visa innehållsfönstret" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" #~ msgid "Qt version settings" #~ msgstr "Qt versionsinställningar" #~ msgid "" #~ "Enter the path to the program, which will be used as a browser for " #~ "external links. A %s symbol will be replaced by the URL clicked." #~ msgstr "" #~ "Ange sökvägen till programmet som kommer att användas som en webbläsare " #~ "för externa länkar. En %s-symbol kommer att ersättas av den URL " #~ "som klickas på." #~ msgid "Search engine to use" #~ msgstr "Sökmotor att använda" #~ msgid "" #~ "Use the search based on internal CHM index. This engine cannot search for " #~ "any symbols except underscode, does not support multibyte languages, and " #~ "is not always available." #~ msgstr "" #~ "Använd sökningen baserade på interna CHM-indexet. Denna motor kan inte " #~ "söka efter några symboler förutom understreck, saknar stöd för multibyte-" #~ "språk och är inte alltid tillgänglig." #~ msgid "" #~ "Use new kchmviewer internal search engine (recommended). This engine " #~ "indexes symbols, so it is possible to search for special symbols (like \"C" #~ "++\"). All languages are supported. The index will be generated before " #~ "the first search." #~ msgstr "" #~ "Använd den nya interna sökmotorn i kchmviewer (rekommenderas). Denna " #~ "motor indexerar symboler så det är möjligt att söka efter specialsymboler " #~ "(som \"C++\"). Alla språk stöds. Indexet kommer att genereras innan " #~ "första sökningen." #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" #~ msgstr "Daniel Nylander" #~ msgid "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "Your emails" #~ msgstr "po@danielnylander.se" #~ msgid "&Add" #~ msgstr "&Lägg till" #~ msgid "Topics" #~ msgstr "Ämnen" #~ msgid "Please select one of the topics below:" #~ msgstr "Välj en av nedanstående ämnen:" #~ msgid "&Ok" #~ msgstr "&OK" #~ msgid "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2004-2007\n" #~ "http://www.kchmviewer.net\n" #~ "\n" #~ "Licensed under GNU GPL license.\n" #~ "\n" #~ "Please check my another project, http://www.transientmail.com - temporary " #~ "e-mail address, which expires automatically." #~ msgstr "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2004-2007\n" #~ "http://www.kchmviewer.net\n" #~ "\n" #~ "Licensierad under licensen GNU GPL.\n" #~ "\n" #~ "Se även mitt andra projekt, http://www.transientmail.com - temporära e-" #~ "postadresser som går ut automatiskt." #~ msgid "File Operations" #~ msgstr "Filåtgärder" #~ msgid "Click this button to open an existing chm file." #~ msgstr "Klicka på denna knapp för att öppna en befintlig chm-fil." #~ msgid "Click this button to print the current page" #~ msgstr "Klicka på denna knapp för att skriva ut den aktuella sidan" #~ msgid "" #~ "Click this button to extract the whole CHM file content into a specific " #~ "directory" #~ msgstr "" #~ "Klicka på denna knapp för att extrahera hela CHM-filens innehåll till en " #~ "specifik katalog" #~ msgid "&Recent files" #~ msgstr "&Tidigare filer" #~ msgid "What's &This" #~ msgstr "Vad är det &här" #~ msgid "Click this button to move backward in browser history" #~ msgstr "Klicka på denna knapp för att flytta bakåt i webbläsarens historik" #~ msgid "Click this button to move forward in browser history" #~ msgstr "Klicka på denna knapp för att flytta framåt i webbläsarens historik" #~ msgid "Go to the home page" #~ msgstr "Gå till hemsidan" #~ msgid "Click this button to move to the home page" #~ msgstr "Klicka på denna knapp för att flytta till hemsidan" #~ msgid "A closing quote character is missing." #~ msgstr "Ett avslutande citattecken saknas. " #~ msgid "Enter here the text to search in the current page." #~ msgstr "Ange text att söka efter i den aktuella sidan." #~ msgid "Previous search result" #~ msgstr "Föregående sökträff" #~ msgid "Click this button to find previous search result." #~ msgstr "Klicka på denna knapp för att hitta föregående sökträff." #~ msgid "Next search result" #~ msgstr "Nästa sökträff" #~ msgid "Click this button to find next search result." #~ msgstr "Klicka på denna knapp för att hitta nästa sökträff." #~ msgid "" #~ "Click this button to find current topic in the content window, and open " #~ "it." #~ msgstr "" #~ "Klicka på denna knapp för att hitta aktuellt ämne i innehållsfönstret och " #~ "öppna det." #~ msgid "Click this button to increase the font size." #~ msgstr "Klicka på denna knapp för att öka typsnittets storlek." #~ msgid "Click this button to decrease the font size." #~ msgstr "Klicka på denna knapp för att minska typsnittets storlek." #~ msgid "View HTML source" #~ msgstr "Visa HTML-källa" #~ msgid "" #~ "Click this button to open a separate window with the page HTML source." #~ msgstr "" #~ "Klicka på denna knapp för att öppna ett separat fönster med sidans HTML-" #~ "källa." #~ msgid "Add to bookmarks" #~ msgstr "Lägg till bokmärken" #~ msgid "Click this button to add the current page to the bookmarks list." #~ msgstr "" #~ "Klicka på denna knapp för att lägga till aktuell sida till " #~ "bokmärkeslistan." #~ msgid "&Increase font" #~ msgstr "S&törre typsnitt" #~ msgid "&Decrease font" #~ msgstr "&Mindre typsnitt" #~ msgid "&Set language" #~ msgstr "&Ange språk" #~ msgid "Type in word(s) to search for:" #~ msgstr "Skriv in ord att söka efter:" #~ msgid "
Help" #~ msgstr "Hjälp" #~ msgid "Go" #~ msgstr "Gå" #~ msgid "Location" #~ msgstr "Plats" #~ msgid "How to use search" #~ msgstr "Hur man använder sökning" #~ msgid "" #~ "The search query can contain a few prefixes.\n" #~ "A set of words inside the quote marks mean that you are searching for " #~ "exact phrase.\n" #~ "A word with minus sign means that it should be absent in the search " #~ "result.\n" #~ "A word with plus mark or without any mark means that it must be present " #~ "in the search result.\n" #~ "\n" #~ "Note that only letters and digits are indexed.\n" #~ "You cannot search for non-character symbols other than underscope, and " #~ "those symbols will be removed from the search query.\n" #~ "For example, search for 'C' will give the same result as searching for 'C+" #~ "+'." #~ msgstr "" #~ "Sökfrågan kan innehålla ett par prefix.\n" #~ "En uppsättning ord inom citattecken betyder att du söker efter en exakt " #~ "fras.\n" #~ "Ett ord med minustecken betyder att det inte ska tas med i " #~ "sökresultatet.\n" #~ "Ett ord med plustecken eller utan betyder att det måste finnas i " #~ "sökresultatet.\n" #~ "\n" #~ "Observera att endast bokstäver och siffror indexeras.\n" #~ "Du kan inte söka efter icke-tecken-symboler andra än understreck och " #~ "dessa symboler kommer att tas bort från sökfrågan.\n" #~ "Till exempel kommer en sökning efter 'C' att ge samma resultat som en " #~ "sökning efter 'C++'." #~ msgid "Search is not available" #~ msgstr "Sökning är inte tillgänglig" #~ msgid "" #~ "

The search feature is not avaiable for this chm file.

The old search " #~ "engine depends on indexes present in chm files itself. Not every chm file " #~ "has an index; it is set up during chm file creation. Therefore if the " #~ "search index was not created during chm file creation, this makes search " #~ "impossible.

Solution: use new search engine (menu Settings/Advanced), " #~ "which generates its own index." #~ msgstr "" #~ "

Sökfunktionen är inte tillgänglig för denna chm-fil.

Den äldra " #~ "sökmotorn är beroende av index som finns i själva chm-filerna. Inte alla " #~ "chm-filer har ett index; det konfigureras under skapandet av chm-filen. " #~ "Om sökindexet inte skapades samtidigt med chm-filen gör detta att en " #~ "sökning blir omöjlig..

Lösning: använd den nya sökmotorn (under " #~ "Inställningar/Avancerat) som genererar sina egna index." #~ msgid "Printing (page %1)..." #~ msgstr "Skriver ut (sida %1)..." #~ msgid "Printing completed" #~ msgstr "Utskriften färdigställdes" #~ msgid "%1 - could not print" #~ msgstr "%1 - kunde inte skriva ut" #~ msgid "" #~ "Could not print.\n" #~ "Your Qt library has been compiled without printing support" #~ msgstr "" #~ "Kunde inte skriva ut.\n" #~ "Ditt Qt-bibliotek har kompilerats utan stöd för utskrifter" kchmviewer-7.5/po/PaxHeaders.8614/kchmviewer_nl.po0000644000000000000000000000012411513542712017025 xustar0027 mtime=1294910922.830977 27 atime=1447562193.144734 30 ctime=1447562193.144734403 kchmviewer-7.5/po/kchmviewer_nl.po0000644000175000001440000007437011513542712017370 0ustar00timusers00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Sander Pientka , 2009. msgid "" msgstr "" "Project-Id-Version: kchmviewer\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2009-02-01 16:35+0100\n" "Last-Translator: Sander Pientka \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 0.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - een bladwijzer toevoegen" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Voer de naam in voor deze bladwijzer:" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - de bladwijzernaam bewerken" #: kchmmainwindow.cpp:96 msgid "Bookmarks" msgstr "Bladwijzers" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" "%1 versie %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Gelicenseerd onder de GNU GPL-licentie." #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "Gevonden bestandsdecodering: %1 ( %2 )" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - chm-bestand laden mislukt" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "Kan het chm-bestand %1 niet laden" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "Kon het bestand %1 niet laden" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - externe koppeling geopend - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "De externe koppeling %1 wordt in het betreffende programma geopend.\n" "\n" "Wilt u doorgaan?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "&Ja" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&Nee" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - JavaScript-koppeling geopend" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "U hebt een JavaScript-koppeling geopend.\n" "Wegens veiligheidsredenen zijn javaScript-URL's uitgeschakeld in CHM-" "bestanden." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - koppeling naar een nieuw CHM-bestand aangeklikt" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "U hebt een koppeling geopend, die naar het nieuwe CHM-bestand %1 leidt.\n" "Het huidige bestand wordt gesloten.\n" "\n" "Wilt u doorgaan?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "Inhoudsopgave" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Index" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Zoeken" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Gecomprimeerde gebruikershandleiding (*.chm)" #: kchmmainwindow.cpp:858 msgid "Open a chm file" msgstr "Een chm-bestand openen" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Gecomprimeerde gebruikershandleiding (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Laden afgebroken" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "kies een map om de CHM-inhoud op te slaan" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "CHM-inhoud uitpakken" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Bestanden uitpakken..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "Afbreken" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "Kon geopend onderwerp niet vinden in inhoudsopgave" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "Over" #: kchmmainwindow.cpp:1326 msgid "&Help" msgstr "&Help" #: kchmmainwindow.cpp:1327 msgid "&About" msgstr "&Over" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "Over &Qt" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "Ctrl+1" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "Ctrl+2" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "Ctrl+3" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "Ctrl+4" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "/" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "F3" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "Ctrl+Rechts" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "Ctrl+Links" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "%1 ( %2 )" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "Zoekopdracht heeft %1 resultaten gevonden" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "Zoekopdracht heeft geen resultaten gevonden" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "Zoekopdracht mislukt" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" "

Met de verbeterde zoekmachine kunt u woorden, symbolen of zinnen " "zoeken, die is ingesteld met woorden en symbolen, opgenomen in " "aanhalingstekens. Alleen de documenten die alle ingevoerde zoektermen " "bevatten, worden weergeven; er zijn geen voorvoegsels nodig.

In " "tegenstelling tot de interne zoekindex van MS CHM, indexeert deze " "zoekmachine letterlijk alles, inclusief symbolen. Zo is het mogelijk om " "tekst als $q = new ChmFile(); te vinden. Deze zoekmachine ondersteunt " "tevens de volledige Unicode-tekenset, zodat u kunt zoeken in niet-Westerse " "documenten.

Als u een citaatteken wilt zoeken, gebruik dan een " "aanhalingsteken. De zoekmachine behandelt deze hetzelfde, zodat u ze in " "zinnen kunt gebruiken." #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "Woordenboek lezen..." #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "Zoekindex opbouwen..." #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" "Een wijziging van deze opties wordt pas actief, nadat het programma is " "herstart." #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "*|Uitvoerbare bestanden" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "Kies een uitvoerbaar bestand van een editor" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "Uitvoerbare bestanden (*)" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "Huidige pagina sluiten" #: kchmviewwindowmgr.cpp:70 msgid "Add page" msgstr "Pagina toevoegen" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 msgid "Alt+%1" msgstr "Alt+%1" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Afdrukken afgebroken" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 msgid "Printing finished" msgstr "Afdrukken voltooid" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "Een koppeling in een nieuw tabblad openen\tShift+Linker muisknop" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "" "Een koppeling in een nieuw achtergrondtabblad openen\tCtrl+Linker muisknop" #: main.cpp:45 msgid "Perform auto testing" msgstr "Automatisch testen uitvoeren" #: main.cpp:46 msgid "Perform short auto testing" msgstr "Verkort automatisch testen uitvoeren" #: main.cpp:47 msgid "A CHM file to show" msgstr "Een te weergeven CHM-bestand" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" "'--search ' geeft de te zoeken zoekopdracht, en activeert het eerste " "resultaat wanneer gevonden" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" "'--sindex ' geeft het te zoeken woord in de index, en activeert het " "eerste resultaat wanneer gevonden" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" "'--stoc ' geeft de te zoeken woorden in de TOC, en activeert het " "eerste resultaat wanneer gevonden. Wildcards zijn toegestaan." #: main.cpp:56 msgid "CHM file viewer" msgstr "Weergaveprogramma voor CHM-bestanden" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "Meld bugs aan kchmviewer@ulduzsoft.com" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "Instellingen voor KchmViewer " #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "Algemeen gedrag" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "Wanneer geen argumenten zijn meegegeven bij starten" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "Open vensterdialoog 'CHM-bestand openen'" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "Open het &laatst geopende CHM-bestand, wanneer aanwezig" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, no-c-format msgid "Alt+L" msgstr "Alt+L" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "Geschiedenis" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "Bewaar geschiedenis voor" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "laatste bestanden" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "Bewaart informatie over geopende bestanden. Bewaart laatst geopende pagina, " "zoekgeschiedenis, lettergrootte, bladwijzers, enzovoorts." #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "&Onthoud extra informatie voor geschiedenis" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "CHM-veiligheidsinstellingen" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "Wanneer extrne koppeling geopend" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "&Altijd in externe browser openen" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+Y" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "Voor bevestiging vragen" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "Koppeling niet openen" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "Wanneer koppeling naar een nieuw CHM-bestand aangeklikt" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "Nieuw CHM-bestand altijd openen" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "Nieuw CHM-bestand niet openen" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "Versiespecifieke instellingen" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "KDE-versie-instellingen" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "Om HTML-inhoud te weergeven, gebruik" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "&QTextBrowser-gebaseerde widget" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "&KHTMLPart-gebaseerde widget" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "Qt &Webkit (vereist Qt 4.4 of hoger)" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "Beveiliging voor KHTMLPart" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "&Verversen inschakelen" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+R" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "&Java inschakelen" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "&Plugins inschakelen" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+P" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "Java&Script inschakelen" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "Geavanceerd" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "Mogelijkheid om HTML-broncode te weergeven, gebruikt" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "Ingebouwde HTML-broncodeweergave" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "E&xtern programma, hieronder opgegeven" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+X" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "Extern programma:" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "&Bladeren" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "Overig" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" "Gebruik recht-naar-links tekstvolgorde (Arabische en Hebreeuwse opmaak)" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, fuzzy, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "Decodering voor KHTMLPart- en WebKitbrowsers automatisch detecteren" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "KchmViewer" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "&Instellingen" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, no-c-format msgid "&Bookmarks" msgstr "&Bladwijzers" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, no-c-format msgid "&File" msgstr "B&estand" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "Be&werken" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "&Beeld" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, no-c-format msgid "&Windows" msgstr "&Vensters" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, no-c-format msgid "general toolbar" msgstr "hoofdwerkbalk" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, no-c-format msgid "navigation toolbar" msgstr "navigatiewerkbalk" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "actiewerkbalk" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "&Afdrukken..." #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, no-c-format msgid "Print" msgstr "Afdrukken" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "Huidige pagina afdrukken" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "Drukt de momenteel geopnde pagina af." #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "Ctrl+P" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "A&fsluiten" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "Afsluiten" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "Sluit het programma af." #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "Ctrl+Q" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "K&opiren" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "Kopiëren" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "Kopieert geselecteerde inhoud naar het klembord" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "Ctrl+C" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, no-c-format msgid "&Select All" msgstr "&Alles selecteren" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "Plakken" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "Selecteert alle inhoud van het document" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "Ctrl+V" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "&Zoeken..." #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "Zoeken" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "Tekst zoeken in de momenteel geopende pagina" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "Schakelt de 'In pagina zoeken'-modus in" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "Ctrl+F" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "CHM-inhoud &uitpakken..." #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, no-c-format msgid "Extract the CHM content to the directory" msgstr "Pakt de CHM-inhoud uit naar een map" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" "Pakt de CHM-archiefinhoud uit naar een map. Alle bestanden worden uitgepakt." #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, no-c-format msgid "&Application settings..." msgstr "&Programmainstellingen..." #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, no-c-format msgid "Change the application settings" msgstr "De programmainstellingen wijzigen" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "&Bladwijzer toevoegen" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "Voegt een bladwijzer voor de momenteel geopende pagina toe" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" "Voegt een bladwijzer voor de momenteel geopende pagina toe. Onthoudt de " "geopende pagina en scrollpositie. Bladwijzers zijn beschikbaar via het " "Bladwijzers-menu of -tabblad." #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "Ctrl+B" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, no-c-format msgid "&Increase font size" msgstr "Lettergrootte ver&groten" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, no-c-format msgid "Increase the font size" msgstr "Vergroot de lettergrootte" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" "Vergroot de lettergrootte van het document. De nieuwe lettergrootte wordt " "opgeslagen." #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "Ctrl++" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, no-c-format msgid "&Decrease font size" msgstr "Lettergrootte ver&kleinen" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, no-c-format msgid "Decrease the font size" msgstr "Verkleint de lettergrootte" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" "Verkleint de lettergrootte van het document. De nieuwe lettergrootte wordt " "opgeslagen." #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "Ctrl+-" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "HTML-bron &weergeven" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, no-c-format msgid "View HTML source of current page" msgstr "Weergeef de HTML-bron van de huidige pagina" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "Weergeeft de HTML-bron van de momenteel geopende pagina" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "Ctrl+U" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, no-c-format msgid "Enable &full screen mode" msgstr "Volledig &scherm inschakelen" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "Schakelt volledig scherm in of uit" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, no-c-format msgid "F11" msgstr "F11" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "&Zijvenster inschakelen" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" "Weergeeft of verbergt zijvenster (met de tabs Inhoudsopgave, Index, Zoeken " "en Bladwijzers)" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "F9" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, no-c-format msgid "&Locate in contents window" msgstr "In &inhoudsopgave opzoeken" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, no-c-format msgid "Locate the current page in contents window" msgstr "Zoek de momenteel geopende pagina op in de inhoudsopgave" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" "Als de momenteel geopende pagina aanwezig is in de inhoudsopgave, zoek hem " "dan daar op." #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "Ctrl+" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, no-c-format msgid "Set &encoding" msgstr "De&codering instellen" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "Wijzigt de huidige documentdecodering" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "&Openen..." #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, no-c-format msgid "Open a CHM file" msgstr "Een CHM-bestand openen" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, no-c-format msgid "Opens a new CHM file" msgstr "Opent een nieuw CHM-bestand" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "Terug" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, no-c-format msgid "Navigate back" msgstr "Terug bladeren" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, no-c-format msgid "Navigate back in navigation history" msgstr "Blader terug in de bladergeschiedenis" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "Vooruit" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, no-c-format msgid "Navigate forward" msgstr "Vooruit bladeren" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, no-c-format msgid "Navigate forward in navigation history" msgstr "Blader vooruit in de bladergeschiedenis" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "Home" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, no-c-format msgid "Navigate home" msgstr "Ga naar de homepage" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "ga naar de homepage, die opgegeven is in het document." #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, no-c-format msgid "Previous page in Table of Context" msgstr "Vorige pagina van Inhoudsopgave" #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, no-c-format msgid "Previous page in TOC" msgstr "Vorige pagina van TOC" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "Ga naar de vorige pagina van de Inhoudsopgave" #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" "Ga naar de vorige pagina in de Inhoudsopgave

Sneltoets: Ctrl" "+Linker pijltoets" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, no-c-format msgid "Next page in Table of Context" msgstr "Volgende pagina van Inhoudsopgave" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "Volgende pagina van TOC" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "Ga naar de vorige pagina van de Inhoudsopgave" #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" "Ga naar de volgende pagina in de Inhoudsopgave

Sneltoets: " "Ctrl+Rechter pijltoets" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, no-c-format msgid "&Close window" msgstr "Venster &sluiten" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, no-c-format msgid "Close current window" msgstr "Sluit het huidige venster" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "Sluit het momenteel geopende venster" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "Ctrl+W" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Sander Pientka" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "cumulus0007@gmail.com" #~ msgid "Multiple topics" #~ msgstr "Meerdere onderwerpen" #~ msgid "Please select the topic to open:" #~ msgstr "Kies een te openen onderwerp:" #~ msgid "&Add" #~ msgstr "&Toevoegen" #~ msgid "Edi&t" #~ msgstr "&Bewerken" #~ msgid "&Del" #~ msgstr "&Verwijderen" #~ msgid "Form1" #~ msgstr "Form1" #~ msgid "1" #~ msgstr "1" #~ msgid "Type in word(s) to search for:" #~ msgstr "Voer te zoeken woorden in:" #~ msgid "
Help" #~ msgstr "Help" #~ msgid "&Go" #~ msgstr "&Zoeken" #~ msgid "Title" #~ msgstr "Titel" #~ msgid "Location" #~ msgstr "Locatie" #~ msgid "TabbedBrowser" #~ msgstr "TabbedBrowser" #~ msgid "Untitled" #~ msgstr "Naamloos" #~ msgid "Previous" #~ msgstr "Vorige" #~ msgid "Next" #~ msgstr "Volgende" #~ msgid "Case Sensitive" #~ msgstr "Hoofdlettergevoelig" #~ msgid "Whole words" #~ msgstr "Hele woorden" #, fuzzy #~ msgid " Search wrapped" #~ msgstr " Search wrapped" kchmviewer-7.5/po/PaxHeaders.8614/kchmviewer_it.po0000644000000000000000000000012312472274501017032 xustar0026 mtime=1424587073.90466 27 atime=1447562193.143734 30 ctime=1447562193.144734403 kchmviewer-7.5/po/kchmviewer_it.po0000644000175000001440000010063412472274501017367 0ustar00timusers00000000000000# Italian translation for kchmviewer. # This file is put in the public domain. # Emilio Scalise , 2007 # msgid "" msgstr "" "Project-Id-Version: kchmviewer\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2007-09-09 23:11+0100\n" "Last-Translator: Emilio Scalise \n" "MIME-Version: 1.0\n" "Language-Team: \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - Aggiungi un bookmark" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Inserisci il nome per il bookmark:" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - modifica il nome del bookmark" #: kchmmainwindow.cpp:96 #, fuzzy msgid "Bookmarks" msgstr "Aggiungi la pagina ai &Bookmark" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - caricamento del file chm fallito" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "Non riesco a caricare il file chm %1" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "Non posso caricare il file %1" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - link remoto cliccato - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "Il link remoto %1 causera' l'esecuzione di un programma esterno.\n" "\n" "Vuoi continuare?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 #, fuzzy msgid "&Yes" msgstr "&Si" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&No" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - link JavaScript cliccato" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "Hai cliccato un link JavaScript.\n" " Per prevenire potenziali problemi di sicurezza le URL JavaScript sono " "disabilitate nei file CHM." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - link ad un nuovo file chm cliccato" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "Hai cliccato un link, che punta ad un altro file CHM %1.\n" "Il file corrente sara' chiuso.\n" "Vuoi continuare?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Indice" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Ricerca" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Manuale Help Compresso (*.chm)" #: kchmmainwindow.cpp:858 #, fuzzy msgid "Open a chm file" msgstr "Apri file" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Manuale Help Compresso (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Caricamento annullato" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "Scegli una directory per salvare il contenuto del CHM" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "Estrazione del contenuto del CHM" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Estrazione dei file in corso..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "Annulla" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "Non posso trovare l'argomento aperto nella finestra dei contenuti" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "Informazioni su %1" #: kchmmainwindow.cpp:1326 #, fuzzy msgid "&Help" msgstr "Cancella" #: kchmmainwindow.cpp:1327 #, fuzzy msgid "&About" msgstr "Annulla" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "Informazioni su &Qt" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "La ricerca ha restituito %1 risultato(i)" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "La ricerca non ha restituito risultati" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "Ricerca fallita" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "" #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "" #: kchmsetupdialog.cpp:183 #, fuzzy msgid "" "Changing those options requires restarting the application to take effect." msgstr "" "Il cambiamento delle impostazioni di visualizzazione o del motore di ricerca " "usato\n" "richiede il restart dell'applicazione per avere effetto." #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "" #: kchmviewwindowmgr.cpp:70 #, fuzzy msgid "Add page" msgstr "Trova nella pagina" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 #, fuzzy msgid "Alt+%1" msgstr "Alt+L" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Stampa annullata" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 #, fuzzy msgid "Printing finished" msgstr "Stampa annullata" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "" #: main.cpp:45 msgid "Perform auto testing" msgstr "" #: main.cpp:46 msgid "Perform short auto testing" msgstr "" #: main.cpp:47 #, fuzzy msgid "A CHM file to show" msgstr "visualizzatore di file CHM" #: main.cpp:48 #, fuzzy msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" "'--search ' specifica la query di ricerca da cercarem e seleziona il " "primo valore se trovato" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" "'--sindex ' specifica la prima parola da trovare nell'indice, e la " "seleziona se trovata" #: main.cpp:50 #, fuzzy msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" "'--sindex ' specifica la prima parola da trovare nell'indice, e la " "seleziona se trovata" #: main.cpp:56 msgid "CHM file viewer" msgstr "visualizzatore di file CHM" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "Settaggi di KchmViewer" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "Comportamento Generale" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "Se nessun parametro è stato passato all'avvio" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "Arpi la finestra di dialogo 'Apri file CHM'" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, fuzzy, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "Apri il l'u<imo CHM file usato, se esiste" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, fuzzy, no-c-format msgid "Alt+L" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "Cronologia" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "Salva la cronologia per" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "ultimi files" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "Ricorda le informazioni riguardo i files che sono stati aperti. Ricorda " "l'ultima pagina visualizzata, la cronologia delle ricerche, dimensione dei " "font ecc." #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, fuzzy, no-c-format msgid "R&emember extra information for history files" msgstr "Ricorda informazioni aggiuntiv&e per i files della cronologia" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "Settaggi di sicurezza CHM" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "Quando è cliccato un link esterno" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, fuzzy, no-c-format msgid "Alwa&ys open it in external browser" msgstr "Apri sempre in un browser esterno" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+Y" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "Chiedi conferma" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "Non aprire il link" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "Quando si clicca un link che punta ad un file CHM aperto" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "Apri sempre un nuovo file CHM" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "Non aprire un nuovo file CHM" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "Settaggi specifici della versione" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "Settaggi della versione KDE" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "Per visualizzare contenuto HTML, usa" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "Componente basato su &QTextBrowser" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "Componente basato su &KHTMLPart" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "Sicurezza KHTMLPart" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "Abilita &refresh" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+R" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "Abilita &Java" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "Abilita $plugins" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+P" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "Abilita Java&Script" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "Avanzate" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "Il comando 'vedi sorgente' usa" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "visualizzatore di sorgente HTML incorporato" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, fuzzy, no-c-format msgid "E&xternal program, specified below" msgstr "Programma esterno, specificato qui sotto" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+X" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "Programma esterno:" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "Aggiungi la pagina ai &Bookmark" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, fuzzy, no-c-format msgid "&File" msgstr "Titolo" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, fuzzy, no-c-format msgid "&Windows" msgstr "Finestra" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, fuzzy, no-c-format msgid "general toolbar" msgstr "Comportamento Generale" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, fuzzy, no-c-format msgid "navigation toolbar" msgstr "Navigazione" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, fuzzy, no-c-format msgid "Print" msgstr "Stampa file" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, fuzzy, no-c-format msgid "&Select All" msgstr "&Scegli tutto" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, fuzzy, no-c-format msgid "E&xtract CHM content..." msgstr "Estrai contenuto CHM..." #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, fuzzy, no-c-format msgid "Extract the CHM content to the directory" msgstr "Estrazione del contenuto del CHM" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, fuzzy, no-c-format msgid "&Application settings..." msgstr "&Cambia settaggi..." #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, fuzzy, no-c-format msgid "Change the application settings" msgstr "&Cambia settaggi..." #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "&Aggiungi bookmark" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, fuzzy, no-c-format msgid "&Increase font size" msgstr "Aumenta la dimensione del font" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, fuzzy, no-c-format msgid "Increase the font size" msgstr "Aumenta la dimensione del font" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, fuzzy, no-c-format msgid "&Decrease font size" msgstr "Diminuisci la dimensione del font" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, fuzzy, no-c-format msgid "Decrease the font size" msgstr "Diminuisci la dimensione del font" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "&Vedi il sorgente HTML" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "Il comando 'vedi sorgente' usa" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, fuzzy, no-c-format msgid "Enable &full screen mode" msgstr "Schermo intero" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, fuzzy, no-c-format msgid "F11" msgstr "F1" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, fuzzy, no-c-format msgid "&Locate in contents window" msgstr "Trova nella pagina dei contenuti" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "Trova questo argomento nella finestra dei contenuti" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, fuzzy, no-c-format msgid "Set &encoding" msgstr "Imposta codifica" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "Apri file" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "Apri sempre un nuovo file CHM" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, fuzzy, no-c-format msgid "Navigate back" msgstr "Navigazione" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, fuzzy, no-c-format msgid "Navigate back in navigation history" msgstr "Vai indietro nella cronologia" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, fuzzy, no-c-format msgid "Navigate forward" msgstr "Navigazione" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, fuzzy, no-c-format msgid "Navigate forward in navigation history" msgstr "Vai avanti nella cronologia" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, fuzzy, no-c-format msgid "Navigate home" msgstr "Navigazione" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, fuzzy, no-c-format msgid "Previous page in Table of Context" msgstr "Clicca questo bottone per andare alla pagina precedente nell'indice." #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, fuzzy, no-c-format msgid "Previous page in TOC" msgstr "Pagina precedente nell'indice" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, fuzzy, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "Clicca questo bottone per andare alla pagina precedente nell'indice." #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, fuzzy, no-c-format msgid "Next page in Table of Context" msgstr "Pagina successiva nell'indice" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "Pagina successiva nell'indice" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, fuzzy, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "Clicca questo bottone per andare alla pagina successiva nell'indice." #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, fuzzy, no-c-format msgid "&Close window" msgstr "Finestra" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "Visualizza la finestra dei contenuti" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" #~ msgid "Qt version settings" #~ msgstr "Settaggi della versione Qt" #~ msgid "" #~ "Enter the path to the program, which will be used as a browser for " #~ "external links. A %s symbol will be replaced by the URL clicked." #~ msgstr "" #~ "Inserisci il path del programma che sarà usato come browser per i link " #~ "esterni. Il simbolo %s sarà sostituito dalla URL cliccata." #~ msgid "Search engine to use" #~ msgstr "Motore di ricerca da utilizzare:" #~ msgid "" #~ "Use the search based on internal CHM index. This engine cannot search for " #~ "any symbols except underscode, does not support multibyte languages, and " #~ "is not always available." #~ msgstr "" #~ "Usa il motore di ricerca basato sull'indice interno del file CHM. Questo " #~ "motore non permette di cercare simboli a parte dell'underscore, non " #~ "supporta i linguaggi multibyte, e non è sempre disponibile." #~ msgid "" #~ "Use new kchmviewer internal search engine (recommended). This engine " #~ "indexes symbols, so it is possible to search for special symbols (like \"C" #~ "++\"). All languages are supported. The index will be generated before " #~ "the first search." #~ msgstr "" #~ "Usa il nuovo motore di ricerca interno di kchviewer (raccomandato). " #~ "Questo motore indicizza tutti i simboli, affinchè sia possibile " #~ "ricercarli (es. \"C++\"). Tutte le lingue sono supportate. L'indice sarà " #~ "generato alla prima ricerca." #, fuzzy #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" #~ msgstr "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" #, fuzzy #~ msgid "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "Your emails" #~ msgstr "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "Your emails" #~ msgid "&Add" #~ msgstr "&Aggiungi" #~ msgid "Topics" #~ msgstr "Argomenti" #~ msgid "Please select one of the topics below:" #~ msgstr "Per favore scegli uno degli argomenti seguenti:" #~ msgid "&Ok" #~ msgstr "&Ok" #~ msgid "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2004-2007\n" #~ "http://www.kchmviewer.net\n" #~ "\n" #~ "Licensed under GNU GPL license.\n" #~ "\n" #~ "Please check my another project, http://www.transientmail.com - temporary " #~ "e-mail address, which expires automatically." #~ msgstr "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2004-2007\n" #~ "http://www.kchmviewer.net\n" #~ "\n" #~ "Sotto licenza GNU GPL.\n" #~ "\n" #~ "Per favore visita anche il mio progetto, http://www.transientmail.com - " #~ "indirizzi email temporanei, che scadono automaticamente." #~ msgid "File Operations" #~ msgstr "Operazioni sui file" #~ msgid "Click this button to open an existing chm file." #~ msgstr "Clicca questo bottone per aprire un file chm esistente." #~ msgid "Click this button to print the current page" #~ msgstr "Clicca per stampare la pagina corrente" #~ msgid "" #~ "Click this button to extract the whole CHM file content into a specific " #~ "directory" #~ msgstr "" #~ "Clicca questo bottone per estrarre tutto il contenuto del file CHM in una " #~ "directory specifica" #~ msgid "&Recent files" #~ msgstr "File &Recenti" #, fuzzy #~ msgid "What's &This" #~ msgstr "Che cos'è?" #~ msgid "Click this button to move backward in browser history" #~ msgstr "" #~ "Clicca questo bottone per tornare indietro nella cronologia del browser" #~ msgid "Click this button to move forward in browser history" #~ msgstr "" #~ "Clicca questo bottone per andare avanti nella cronologia del browser" #~ msgid "Go to the home page" #~ msgstr "Vai alla pagina iniziale." #~ msgid "Click this button to move to the home page" #~ msgstr "Clicca questo bottone per andare alla pagina iniziale" #, fuzzy #~ msgid "A closing quote character is missing." #~ msgstr "Il carattere di chiusura virgolette è mancante." #~ msgid "Enter here the text to search in the current page." #~ msgstr "Immetti qui il testo da cercare nella pagina corrente." #~ msgid "Previous search result" #~ msgstr "Risultato della ricerca precedente" #~ msgid "Click this button to find previous search result." #~ msgstr "" #~ "Clicca questo bottone per andare al risultato della ricerca precedente." #~ msgid "Next search result" #~ msgstr "Prossimo risultato della ricerca" #~ msgid "Click this button to find next search result." #~ msgstr "" #~ "Clicca questo bottone per trovare il prossimo risultato della ricerca." #~ msgid "" #~ "Click this button to find current topic in the content window, and open " #~ "it." #~ msgstr "" #~ "Clicca questo bottone per trovare l'argomento corrente nella finestra dei " #~ "contenuti e aprirlo." #~ msgid "Click this button to increase the font size." #~ msgstr "Clicca questo bottone per aumentare la dimensione del font." #~ msgid "Click this button to decrease the font size." #~ msgstr "Clicca questo bottone per diminuire la dimensione del font." #~ msgid "View HTML source" #~ msgstr "Vedi il sorgente HTML" #~ msgid "" #~ "Click this button to open a separate window with the page HTML source." #~ msgstr "" #~ "Clicca questo bottone per aprire una finestra separata con il sorgente " #~ "della pagina HTML." #~ msgid "Add to bookmarks" #~ msgstr "Aggiungi ai bookmarks" #~ msgid "Click this button to add the current page to the bookmarks list." #~ msgstr "" #~ "Clicca questo bottone per aggiungere la pagina corrente alla lista dei " #~ "bookmarks." #, fuzzy #~ msgid "&Increase font" #~ msgstr "Aumenta font" #, fuzzy #~ msgid "&Decrease font" #~ msgstr "Diminuisci font" #, fuzzy #~ msgid "&Set language" #~ msgstr "Imposta lingua" #~ msgid "Type in word(s) to search for:" #~ msgstr "Scrivi delle parole da cercare:" #~ msgid "
Help" #~ msgstr "Aiuto" #~ msgid "Go" #~ msgstr "Vai" #~ msgid "Location" #~ msgstr "Posizione" #~ msgid "How to use search" #~ msgstr "Come usare la ricerca" #~ msgid "Search is not available" #~ msgstr "La ricerca non è disponibile" #~ msgid "Printing (page %1)..." #~ msgstr "Stampa in corso (pagina %1)..." #~ msgid "Printing completed" #~ msgstr "Stampa completata" #~ msgid "%1 - could not print" #~ msgstr "%1 - non posso stampare" #~ msgid "" #~ "Could not print.\n" #~ "Your Qt library has been compiled without printing support" #~ msgstr "" #~ "Non posso stampare.\n" #~ "La tua libreria Qt e' stata compilata senza supporto alla stampa" kchmviewer-7.5/po/PaxHeaders.8614/kchmviewer_ru.po0000644000000000000000000000012411513542712017042 xustar0027 mtime=1294910922.830977 27 atime=1447562193.145734 30 ctime=1447562193.145734389 kchmviewer-7.5/po/kchmviewer_ru.po0000644000175000001440000006616711513542712017412 0ustar00timusers00000000000000# translation of rus.po to # This file is put in the public domain. # # Ivan Bobrov , 2006. # George Yunaev , 2006. msgid "" msgstr "" "Project-Id-Version: rus\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2006-02-04 15:29-0800\n" "Last-Translator: George Yunaev \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.1\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - добавить закладку" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Введите имя для этой закладки" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - редактировать имя закладки" #: kchmmainwindow.cpp:96 #, fuzzy msgid "Bookmarks" msgstr "Добавить страницу в закладки" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "Кодировка файла определена автоматически: %1 ( %2 )" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - невозможно открыть CHM файл" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "Невозможно загрузить CHM файл %1" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "Нельзя открыть CHM файл %1" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - нажата внешняя ссылка - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "Для показа ссылки %1 будет запущена внешняя программа.\n" "\n" "Продолжить?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "Да" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "Нет" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - нажата ссылка на JavaScript" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "Вы нажали ссылку, которая вызывает JavaScript.\n" "Для обеспечения безопасности все ссылки на JavaScript отключены." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - нажата ссылка на новый CHM файл" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "Вы нажали на ссылку, которая ведет в другой CHM файл %1.\n" "Он будет открыт, а текущий файл будет закрыт.\n" "\n" "Продолжить??" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "Оглавление" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Индекс" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Поиск" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Compressed Help Manual (*.chm)" #: kchmmainwindow.cpp:858 #, fuzzy msgid "Open a chm file" msgstr "Открыть файл" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Compressed Help Manual (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Загрузка отменена" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "Выберите директорию для сохранения распакованного содержимого" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "Распаковываем содержимое CHM файла" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Распаковываем файлы..." #: kchmmainwindow.cpp:932 #, fuzzy msgid "Abort" msgstr "О программе %1" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "Невозможно найти открытую тему в окне содержания" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "О программе %1" #: kchmmainwindow.cpp:1326 #, fuzzy msgid "&Help" msgstr "Удалить" #: kchmmainwindow.cpp:1327 #, fuzzy msgid "&About" msgstr "О программе %1" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "О библиотеке Qt..." #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "Поиск вернул %1 результат(ов)" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "Поиск не нашел ничего" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "Поиск не удался" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" "

Улучшенный поиск позволяет искать слова, символы или фразу (которая " "представляет собой набор слов в кавычках). Найдены будут только те " "документы, которые содержат ВСЕ что указано в строке поиска, префиксы типа + " "или AND не нужны.

По сравнению со стандартным индексом для поиска, " "интегрированным в CHM файл, индекс встроенный в приложение индексирует все " "включая специальные символы. Это делает возможным искать и найти строки вида " "$q = new ChmFile();. Также новый поиск полностью поддерживает Юникод, " "позволяя успешно искать текст в документах на языках отличных от " "английского.

Поскольку кавычки используются поиском для обозначения фраз, " "используйте апостроф если вам нужно искать кавычку. Поиск интерпретирует " "апостроф и кавычку как одинаковый символ." #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "Считываем индекс поиска" #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "Идет генерация индекса поиска" #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" "Чтобы сделанные изменения вступили в силу, приложение необходимо " "перезапустить." #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "*|Программы" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "Выберите программу редактора" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "*|Программы" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "Закрыть активную вкладку" #: kchmviewwindowmgr.cpp:70 #, fuzzy msgid "Add page" msgstr "Добавить вкладку" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 msgid "Alt+%1" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Печать отменена" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 #, fuzzy msgid "Printing finished" msgstr "Печать завершена" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "Открыть ссылку в новой вкладке\tShift+LMB" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "Открыть ссылку в новой вкладке не активируя ее\tCtrl+LMB" #: main.cpp:45 msgid "Perform auto testing" msgstr "Включить режим автотестирования" #: main.cpp:46 msgid "Perform short auto testing" msgstr "Включить режим автотестирования" #: main.cpp:47 #, fuzzy msgid "A CHM file to show" msgstr "Просмотрщик CHM файлов" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" #: main.cpp:56 msgid "CHM file viewer" msgstr "Просмотрщик CHM файлов" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, no-c-format msgid "Alt+L" msgstr "" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, fuzzy, no-c-format msgid "When external link clicked" msgstr "%1 - нажата внешняя ссылка - %2" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, fuzzy, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "%1 - нажата ссылка на новый CHM файл" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, fuzzy, no-c-format msgid "Do not open a new CHM file" msgstr "%1 - нажата ссылка на новый CHM файл" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "Добавить страницу в закладки" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, no-c-format msgid "&File" msgstr "" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, no-c-format msgid "&Windows" msgstr "" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, no-c-format msgid "general toolbar" msgstr "" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, no-c-format msgid "navigation toolbar" msgstr "" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, no-c-format msgid "Print" msgstr "" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, fuzzy, no-c-format msgid "Print current page" msgstr "Закрыть активную вкладку" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, no-c-format msgid "&Select All" msgstr "" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, fuzzy, no-c-format msgid "E&xtract CHM content..." msgstr "Распаковываем содержимое CHM файла" #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, fuzzy, no-c-format msgid "Extract the CHM content to the directory" msgstr "Распаковываем содержимое CHM файла" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, no-c-format msgid "&Application settings..." msgstr "" #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, no-c-format msgid "Change the application settings" msgstr "" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, fuzzy, no-c-format msgid "&Add bookmark" msgstr "%1 - добавить закладку" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, no-c-format msgid "&Increase font size" msgstr "" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, no-c-format msgid "Increase the font size" msgstr "" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, no-c-format msgid "&Decrease font size" msgstr "" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, no-c-format msgid "Decrease the font size" msgstr "" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "Закрыть активную вкладку" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, no-c-format msgid "Enable &full screen mode" msgstr "" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, no-c-format msgid "F11" msgstr "" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, fuzzy, no-c-format msgid "&Locate in contents window" msgstr "Невозможно найти открытую тему в окне содержания" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "Невозможно найти открытую тему в окне содержания" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, no-c-format msgid "Set &encoding" msgstr "" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "Открыть файл" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "Открыть файл" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, no-c-format msgid "Navigate back" msgstr "" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, no-c-format msgid "Navigate back in navigation history" msgstr "" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, no-c-format msgid "Navigate forward" msgstr "" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, no-c-format msgid "Navigate forward in navigation history" msgstr "" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, no-c-format msgid "Navigate home" msgstr "" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, no-c-format msgid "Previous page in Table of Context" msgstr "" #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, no-c-format msgid "Previous page in TOC" msgstr "" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "" #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, no-c-format msgid "Next page in Table of Context" msgstr "" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "" #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, no-c-format msgid "&Close window" msgstr "" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "Закрыть активную вкладку" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, fuzzy, no-c-format msgid "Closes currently opened window" msgstr "Закрыть активную вкладку" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Georgy Yunaev" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" kchmviewer-7.5/po/PaxHeaders.8614/kchmviewer.pot0000644000000000000000000000012412314656223016523 xustar0027 mtime=1395874963.355176 27 atime=1447562193.129734 30 ctime=1447562193.130734593 kchmviewer-7.5/po/kchmviewer.pot0000644000175000001440000012050112314656223017052 0ustar00timusers00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2013-01-12 03:51-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: dialog_setup.cpp:196 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" #: dialog_setup.cpp:205 msgid "*|Executables" msgstr "" #: dialog_setup.cpp:205 dialog_setup.cpp:208 msgid "Choose an editor executable" msgstr "" #: dialog_setup.cpp:210 msgid "Executables (*)" msgstr "" #: main.cpp:55 msgid "Perform auto testing" msgstr "" #: main.cpp:56 msgid "Perform short auto testing" msgstr "" #: main.cpp:57 msgid "A CHM file to show" msgstr "" #: main.cpp:58 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" #: main.cpp:59 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" #: main.cpp:60 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" #: main.cpp:61 msgid "'--url ' specifies the URL to activate if found." msgstr "" #. i18n: file: mainwindow.ui:14 #. i18n: ectx: property (windowTitle), widget (QMainWindow, MainWindow) #: main.cpp:65 ui_mainwindow.h:302 rc.cpp:192 msgid "kchmviewer" msgstr "" #: main.cpp:67 msgid "CHM file viewer" msgstr "" #: main.cpp:69 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:70 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "" #: mainwindow.cpp:178 msgid "Detected file encoding: %1 ( %2 )" msgstr "" #: mainwindow.cpp:246 msgid "%1 - failed to load the chm file" msgstr "" #: mainwindow.cpp:247 msgid "Unable to load the chm file %1" msgstr "" #: mainwindow.cpp:255 msgid "Could not load file %1" msgstr "" #: mainwindow.cpp:320 msgid "%1 - remote link clicked - %2" msgstr "" #: mainwindow.cpp:321 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" #: mainwindow.cpp:322 mainwindow.cpp:357 msgid "&Yes" msgstr "" #: mainwindow.cpp:322 mainwindow.cpp:357 msgid "&No" msgstr "" #: mainwindow.cpp:344 msgid "%1 - JavsScript link clicked" msgstr "" #: mainwindow.cpp:345 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" #: mainwindow.cpp:355 msgid "%1 - link to a new CHM file clicked" msgstr "" #: mainwindow.cpp:356 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" #: mainwindow.cpp:716 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "" #: mainwindow.cpp:719 msgid "Open a chm file" msgstr "" #: mainwindow.cpp:721 msgid "Compressed Help Manual (*.chm)" msgstr "" #: mainwindow.cpp:766 mainwindow.cpp:770 msgid "Choose a directory to store CHM content" msgstr "" #: mainwindow.cpp:784 msgid "Extracting CHM content" msgstr "" #: mainwindow.cpp:785 msgid "Extracting files..." msgstr "" #: mainwindow.cpp:786 msgid "Abort" msgstr "" #: mainwindow.cpp:955 msgid "Could not locate opened topic in content window" msgstr "" #: mainwindow.cpp:961 msgid "" "kchmviewer version %1.%2

Copyright (C) George Yunaev, " "2004-2010
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license version 3." msgstr "" #. i18n: file: dialog_about.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, DialogAbout) #: mainwindow.cpp:970 ui_dialog_about.h:111 rc.cpp:3 msgid "About kchmviewer" msgstr "" #: mainwindow.cpp:1065 msgid "Ctrl+1" msgstr "" #: mainwindow.cpp:1071 msgid "Ctrl+2" msgstr "" #: mainwindow.cpp:1077 msgid "Ctrl+3" msgstr "" #: mainwindow.cpp:1083 msgid "Ctrl+4" msgstr "" #: mainwindow.cpp:1090 msgid "/" msgstr "" #: mainwindow.cpp:1097 msgid "F3" msgstr "" #: mainwindow.cpp:1104 msgid "Ctrl+Right" msgstr "" #: mainwindow.cpp:1111 msgid "Ctrl+Left" msgstr "" #: mainwindow.cpp:1196 msgid "%1 ( %2 )" msgstr "" #: navigationpanel.cpp:43 msgid "Search" msgstr "" #: navigationpanel.cpp:46 msgid "Bookmarks" msgstr "" #: navigationpanel.cpp:86 msgid "Index" msgstr "" #: navigationpanel.cpp:92 msgid "Contents" msgstr "" #: tab_bookmarks.cpp:120 msgid "%1 - add a bookmark" msgstr "" #: tab_bookmarks.cpp:121 tab_bookmarks.cpp:163 msgid "Enter the name for this bookmark:" msgstr "" #: tab_bookmarks.cpp:162 msgid "%1 - edit the bookmark name" msgstr "" #: tab_search.cpp:153 msgid "Search returned %1 result(s)" msgstr "" #: tab_search.cpp:156 msgid "Search returned no results" msgstr "" #: tab_search.cpp:159 msgid "Search failed" msgstr "" #: tab_search.cpp:192 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" #: tab_search.cpp:209 msgid "Reading dictionary..." msgstr "" #: tab_search.cpp:223 tab_search.cpp:224 msgid "Generating search index..." msgstr "" #. i18n: file: dialog_about.ui:46 #. i18n: ectx: property (text), widget (QLabel, lblAbout) #: ui_dialog_about.h:113 rc.cpp:9 msgid "About text" msgstr "" #. i18n: file: dialog_about.ui:24 #. i18n: ectx: attribute (title), widget (QWidget, tab) #: ui_dialog_about.h:114 rc.cpp:6 msgid "About appplication" msgstr "" #. i18n: file: dialog_about.ui:75 #. i18n: ectx: property (text), widget (QLabel, label_2) #: ui_dialog_about.h:115 rc.cpp:15 msgid "" "\n" "\n" "

I would like to thank:

\n" "

\n" "

- Trolltech (now Nokia) for Qt library;

\n" "

- Dryicons for nice free icons;

\n" "

- Jed " "Wing, the author of chmlib.

\n" "

- Razvan " "Cojocaru, the author of xchm.

\n" "

- Peter " "Volkov for significant QA (more than 20 reported bugs!)

\n" "

- And of " "course everyone, who report bugs, " "and suggest features.

\n" "

" msgstr "" #. i18n: file: dialog_about.ui:57 #. i18n: ectx: attribute (title), widget (QWidget, tab_2) #: ui_dialog_about.h:130 rc.cpp:12 msgid "Thanks" msgstr "" #. i18n: file: dialog_setup.ui:20 #. i18n: ectx: property (windowTitle), widget (QDialog, DialogSetup) #: ui_dialog_setup.h:463 rc.cpp:30 msgid "KchmViewer settings" msgstr "" #. i18n: file: dialog_setup.ui:62 #. i18n: ectx: property (title), widget (QGroupBox, buttonGroup1) #: ui_dialog_setup.h:464 rc.cpp:36 msgid "If started with no arguments" msgstr "" #. i18n: file: dialog_setup.ui:74 #. i18n: ectx: property (text), widget (QRadioButton, rbStartWithNothing) #: ui_dialog_setup.h:465 rc.cpp:39 msgid "Start with nothing loaded" msgstr "" #. i18n: file: dialog_setup.ui:81 #. i18n: ectx: property (text), widget (QRadioButton, m_radioOnBeginOpenDialog) #: ui_dialog_setup.h:466 rc.cpp:42 msgid "Pop up the \"open file\" dialog" msgstr "" #. i18n: file: dialog_setup.ui:88 #. i18n: ectx: property (text), widget (QRadioButton, m_radioOnBeginOpenLast) #: ui_dialog_setup.h:467 rc.cpp:45 msgid "Open the &last used CHM file, if exist" msgstr "" #. i18n: file: dialog_setup.ui:91 #. i18n: ectx: property (shortcut), widget (QRadioButton, m_radioOnBeginOpenLast) #: ui_dialog_setup.h:468 rc.cpp:48 msgid "Alt+L" msgstr "" #. i18n: file: dialog_setup.ui:101 #. i18n: ectx: property (title), widget (QGroupBox, buttonGroup2) #: ui_dialog_setup.h:469 rc.cpp:51 msgid "History" msgstr "" #. i18n: file: dialog_setup.ui:121 #. i18n: ectx: property (text), widget (QLabel, textLabel1) #: ui_dialog_setup.h:470 rc.cpp:54 msgid "Store history information for" msgstr "" #. i18n: file: dialog_setup.ui:141 #. i18n: ectx: property (text), widget (QLabel, textLabel2) #: ui_dialog_setup.h:472 rc.cpp:57 msgid "latest files" msgstr "" #. i18n: file: dialog_setup.ui:153 #. i18n: ectx: property (toolTip), widget (QCheckBox, m_rememberHistoryInfo) #: ui_dialog_setup.h:474 rc.cpp:60 msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" #. i18n: file: dialog_setup.ui:156 #. i18n: ectx: property (text), widget (QCheckBox, m_rememberHistoryInfo) #: ui_dialog_setup.h:476 rc.cpp:63 msgid "R&emember extra information for history files" msgstr "" #. i18n: file: dialog_setup.ui:159 #. i18n: ectx: property (shortcut), widget (QCheckBox, m_rememberHistoryInfo) #: ui_dialog_setup.h:477 rc.cpp:66 msgid "Alt+E" msgstr "" #. i18n: file: dialog_setup.ui:171 #. i18n: ectx: property (title), widget (QGroupBox, groupBox1) #: ui_dialog_setup.h:478 rc.cpp:69 msgid "CHM security settings" msgstr "" #. i18n: file: dialog_setup.ui:183 #. i18n: ectx: property (title), widget (QGroupBox, buttonGroup4) #: ui_dialog_setup.h:479 rc.cpp:72 msgid "When external link clicked" msgstr "" #. i18n: file: dialog_setup.ui:195 #. i18n: ectx: property (text), widget (QRadioButton, m_radioExtLinkOpenAlways) #: ui_dialog_setup.h:480 rc.cpp:75 msgid "Alwa&ys open it in external browser" msgstr "" #. i18n: file: dialog_setup.ui:198 #. i18n: ectx: property (shortcut), widget (QRadioButton, m_radioExtLinkOpenAlways) #: ui_dialog_setup.h:481 rc.cpp:78 msgid "Alt+Y" msgstr "" #. i18n: file: dialog_setup.ui:205 #. i18n: ectx: property (text), widget (QRadioButton, m_radioExtLinkAsk) #. i18n: file: dialog_setup.ui:244 #. i18n: ectx: property (text), widget (QRadioButton, m_radioNewChmAsk) #: ui_dialog_setup.h:482 ui_dialog_setup.h:487 rc.cpp:81 rc.cpp:93 msgid "Ask for confirmation" msgstr "" #. i18n: file: dialog_setup.ui:212 #. i18n: ectx: property (text), widget (QRadioButton, m_radioExtLinkOpenNever) #: ui_dialog_setup.h:483 rc.cpp:84 msgid "Do not open the link" msgstr "" #. i18n: file: dialog_setup.ui:225 #. i18n: ectx: property (title), widget (QGroupBox, buttonGroup5) #: ui_dialog_setup.h:485 rc.cpp:87 msgid "When link pointed to a new CHM file clicked" msgstr "" #. i18n: file: dialog_setup.ui:237 #. i18n: ectx: property (text), widget (QRadioButton, m_radioNewChmOpenAlways) #: ui_dialog_setup.h:486 rc.cpp:90 msgid "Always open a new CHM file" msgstr "" #. i18n: file: dialog_setup.ui:251 #. i18n: ectx: property (text), widget (QRadioButton, m_radioNewChmOpenNever) #: ui_dialog_setup.h:488 rc.cpp:96 msgid "Do not open a new CHM file" msgstr "" #. i18n: file: dialog_setup.ui:42 #. i18n: ectx: attribute (title), widget (QWidget, Widget8) #: ui_dialog_setup.h:489 rc.cpp:33 msgid "General behavior" msgstr "" #. i18n: file: dialog_setup.ui:290 #. i18n: ectx: property (title), widget (QGroupBox, m_groupKDEsettings) #: ui_dialog_setup.h:490 rc.cpp:102 msgid "HTML browser settings" msgstr "" #. i18n: file: dialog_setup.ui:296 #. i18n: ectx: property (text), widget (QCheckBox, m_enableImages) #: ui_dialog_setup.h:491 rc.cpp:105 msgid "Load the &images" msgstr "" #. i18n: file: dialog_setup.ui:303 #. i18n: ectx: property (text), widget (QCheckBox, m_enablePlugins) #: ui_dialog_setup.h:492 rc.cpp:108 msgid "Enable browser &plugins (i.e. Flash)" msgstr "" #. i18n: file: dialog_setup.ui:306 #. i18n: ectx: property (shortcut), widget (QCheckBox, m_enablePlugins) #: ui_dialog_setup.h:493 rc.cpp:111 msgid "Alt+P" msgstr "" #. i18n: file: dialog_setup.ui:313 #. i18n: ectx: property (text), widget (QCheckBox, m_enableJava) #: ui_dialog_setup.h:494 rc.cpp:114 msgid "Enable &Java" msgstr "" #. i18n: file: dialog_setup.ui:316 #. i18n: ectx: property (shortcut), widget (QCheckBox, m_enableJava) #: ui_dialog_setup.h:495 rc.cpp:117 msgid "Alt+J" msgstr "" #. i18n: file: dialog_setup.ui:323 #. i18n: ectx: property (text), widget (QCheckBox, m_enableJS) #: ui_dialog_setup.h:496 rc.cpp:120 msgid "Enable Java&Script" msgstr "" #. i18n: file: dialog_setup.ui:326 #. i18n: ectx: property (shortcut), widget (QCheckBox, m_enableJS) #: ui_dialog_setup.h:497 rc.cpp:123 msgid "Alt+S" msgstr "" #. i18n: file: dialog_setup.ui:333 #. i18n: ectx: property (text), widget (QCheckBox, m_enableOfflineStorage) #: ui_dialog_setup.h:498 rc.cpp:126 msgid "Enable &offline storage (HTML5)" msgstr "" #. i18n: file: dialog_setup.ui:336 #. i18n: ectx: property (shortcut), widget (QCheckBox, m_enableOfflineStorage) #: ui_dialog_setup.h:499 rc.cpp:129 msgid "Alt+R" msgstr "" #. i18n: file: dialog_setup.ui:343 #. i18n: ectx: property (text), widget (QCheckBox, m_enableLocalStorage) #: ui_dialog_setup.h:500 rc.cpp:132 msgid "Enable &local storage (HTML5)" msgstr "" #. i18n: file: dialog_setup.ui:278 #. i18n: ectx: attribute (title), widget (QWidget, Widget9) #: ui_dialog_setup.h:501 rc.cpp:99 msgid "Browser" msgstr "" #. i18n: file: dialog_setup.ui:373 #. i18n: ectx: property (title), widget (QGroupBox, buttonGroup7) #: ui_dialog_setup.h:502 rc.cpp:138 msgid "View HTML source command uses" msgstr "" #. i18n: file: dialog_setup.ui:385 #. i18n: ectx: property (text), widget (QRadioButton, m_advViewSourceInternal) #: ui_dialog_setup.h:503 rc.cpp:141 msgid "Built-in HTML source viewer" msgstr "" #. i18n: file: dialog_setup.ui:395 #. i18n: ectx: property (text), widget (QRadioButton, m_advViewSourceExternal) #: ui_dialog_setup.h:505 rc.cpp:144 msgid "E&xternal program, specified below" msgstr "" #. i18n: file: dialog_setup.ui:398 #. i18n: ectx: property (shortcut), widget (QRadioButton, m_advViewSourceExternal) #: ui_dialog_setup.h:506 rc.cpp:147 msgid "Alt+X" msgstr "" #. i18n: file: dialog_setup.ui:413 #. i18n: ectx: property (text), widget (QLabel, textLabel1_3) #: ui_dialog_setup.h:507 rc.cpp:150 msgid "External program:" msgstr "" #. i18n: file: dialog_setup.ui:426 #. i18n: ectx: property (text), widget (QPushButton, btnBrowse) #: ui_dialog_setup.h:508 rc.cpp:153 msgid "&Browse" msgstr "" #. i18n: file: dialog_setup.ui:438 #. i18n: ectx: property (title), widget (QGroupBox, groupBox) #: ui_dialog_setup.h:509 rc.cpp:156 msgid "Other" msgstr "" #. i18n: file: dialog_setup.ui:444 #. i18n: ectx: property (text), widget (QCheckBox, boxLayoutDirectionRL) #: ui_dialog_setup.h:510 rc.cpp:159 msgid "Use right-to-left layout direction (Arabic and Hebrew layouts)" msgstr "" #. i18n: file: dialog_setup.ui:451 #. i18n: ectx: property (text), widget (QCheckBox, boxAutodetectEncoding) #: ui_dialog_setup.h:511 rc.cpp:162 msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file: dialog_setup.ui:458 #. i18n: ectx: property (whatsThis), widget (QCheckBox, cbCheckForUpdates) #: ui_dialog_setup.h:513 rc.cpp:165 msgid "" "If this option is enabled, the application will check for updates (when new " "version of application is released). If a new version is available, the " "program will show a messagebox dialog informing you about new version. This " "check will only performed once in 24 hours. No user information is requested " "or transmitted from your computer during this check." msgstr "" #. i18n: file: dialog_setup.ui:461 #. i18n: ectx: property (text), widget (QCheckBox, cbCheckForUpdates) #: ui_dialog_setup.h:515 rc.cpp:168 msgid "Perform a check whether a new version is available (once a week)" msgstr "" #. i18n: file: dialog_setup.ui:471 #. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) #: ui_dialog_setup.h:516 rc.cpp:171 msgid "Toolbars" msgstr "" #. i18n: file: dialog_setup.ui:477 #. i18n: ectx: property (text), widget (QRadioButton, rbToolbarSmall) #: ui_dialog_setup.h:517 rc.cpp:174 msgid "Small icons" msgstr "" #. i18n: file: dialog_setup.ui:484 #. i18n: ectx: property (text), widget (QRadioButton, rbToolbarLarge) #: ui_dialog_setup.h:518 rc.cpp:177 msgid "Large icons" msgstr "" #. i18n: file: dialog_setup.ui:491 #. i18n: ectx: property (text), widget (QRadioButton, rbToolbarLargeText) #: ui_dialog_setup.h:519 rc.cpp:180 msgid "Large icons and text" msgstr "" #. i18n: file: dialog_setup.ui:498 #. i18n: ectx: property (text), widget (QRadioButton, rbToolbarText) #: ui_dialog_setup.h:520 rc.cpp:183 msgid "Just text" msgstr "" #. i18n: file: dialog_setup.ui:367 #. i18n: ectx: attribute (title), widget (QWidget, TabPage) #: ui_dialog_setup.h:521 rc.cpp:135 msgid "Advanced" msgstr "" #. i18n: file: dialog_topicselector.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, DialogTopicSelector) #: ui_dialog_topicselector.h:74 rc.cpp:186 msgid "Multiple topics" msgstr "" #. i18n: file: dialog_topicselector.ui:25 #. i18n: ectx: property (text), widget (QLabel, label) #: ui_dialog_topicselector.h:75 rc.cpp:189 msgid "Please select the topic to open:" msgstr "" #. i18n: file: mainwindow.ui:186 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:303 rc.cpp:225 msgid "&Print..." msgstr "" #. i18n: file: mainwindow.ui:189 #. i18n: ectx: property (iconText), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:304 rc.cpp:228 msgid "Print" msgstr "" #. i18n: file: mainwindow.ui:192 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:306 rc.cpp:231 msgid "Print current page" msgstr "" #. i18n: file: mainwindow.ui:195 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:309 rc.cpp:234 msgid "Prints currently opened page." msgstr "" #. i18n: file: mainwindow.ui:198 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:311 rc.cpp:237 msgid "Ctrl+P" msgstr "" #. i18n: file: mainwindow.ui:207 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:312 rc.cpp:240 msgid "&Quit" msgstr "" #. i18n: file: mainwindow.ui:210 #. i18n: ectx: property (iconText), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:313 rc.cpp:243 msgid "Exit" msgstr "" #. i18n: file: mainwindow.ui:213 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:315 rc.cpp:246 msgid "Exits the application" msgstr "" #. i18n: file: mainwindow.ui:216 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:317 rc.cpp:249 msgid "Ctrl+Q" msgstr "" #. i18n: file: mainwindow.ui:225 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:318 rc.cpp:252 msgid "C&opy" msgstr "" #. i18n: file: mainwindow.ui:228 #. i18n: ectx: property (iconText), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:319 rc.cpp:255 msgid "Copy" msgstr "" #. i18n: file: mainwindow.ui:231 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:321 rc.cpp:258 msgid "Copies selected content to clipboard" msgstr "" #. i18n: file: mainwindow.ui:234 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:323 rc.cpp:261 msgid "Ctrl+C" msgstr "" #. i18n: file: mainwindow.ui:243 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:324 rc.cpp:264 msgid "&Select All" msgstr "" #. i18n: file: mainwindow.ui:246 #. i18n: ectx: property (iconText), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:325 rc.cpp:267 msgid "Paste" msgstr "" #. i18n: file: mainwindow.ui:249 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:327 rc.cpp:270 msgid "Selects everything in the document" msgstr "" #. i18n: file: mainwindow.ui:252 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:329 rc.cpp:273 msgid "Ctrl+V" msgstr "" #. i18n: file: mainwindow.ui:261 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:330 rc.cpp:276 msgid "&Find..." msgstr "" #. i18n: file: mainwindow.ui:264 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:332 rc.cpp:279 msgid "Find text in currently opened page" msgstr "" #. i18n: file: mainwindow.ui:267 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:335 rc.cpp:282 msgid "Enters the Find in page mode" msgstr "" #. i18n: file: mainwindow.ui:270 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:337 rc.cpp:285 msgid "Ctrl+F" msgstr "" #. i18n: file: mainwindow.ui:279 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:338 rc.cpp:288 msgid "E&xtract CHM content..." msgstr "" #. i18n: file: mainwindow.ui:282 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:340 rc.cpp:291 msgid "Extract the CHM content to the directory" msgstr "" #. i18n: file: mainwindow.ui:285 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:343 rc.cpp:294 msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file: mainwindow.ui:294 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:345 rc.cpp:297 msgid "&Application settings..." msgstr "" #. i18n: file: mainwindow.ui:297 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #. i18n: file: mainwindow.ui:300 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:347 ui_mainwindow.h:350 rc.cpp:300 rc.cpp:303 msgid "Change the application settings" msgstr "" #. i18n: file: mainwindow.ui:309 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:352 rc.cpp:306 msgid "&Add bookmark" msgstr "" #. i18n: file: mainwindow.ui:312 #. i18n: ectx: property (iconText), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:353 rc.cpp:309 msgid "Bookmark" msgstr "" #. i18n: file: mainwindow.ui:315 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:355 rc.cpp:312 msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file: mainwindow.ui:318 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:358 rc.cpp:315 msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file: mainwindow.ui:321 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:360 rc.cpp:318 msgid "Ctrl+B" msgstr "" #. i18n: file: mainwindow.ui:330 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:361 rc.cpp:321 msgid "&Increase font size" msgstr "" #. i18n: file: mainwindow.ui:333 #. i18n: ectx: property (iconText), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:362 rc.cpp:324 msgid "Larger" msgstr "" #. i18n: file: mainwindow.ui:336 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:364 rc.cpp:327 msgid "Increase the font size" msgstr "" #. i18n: file: mainwindow.ui:339 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:367 rc.cpp:330 msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file: mainwindow.ui:342 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:369 rc.cpp:333 msgid "Ctrl+=" msgstr "" #. i18n: file: mainwindow.ui:351 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:370 rc.cpp:336 msgid "&Decrease font size" msgstr "" #. i18n: file: mainwindow.ui:354 #. i18n: ectx: property (iconText), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:371 rc.cpp:339 msgid "Smaller" msgstr "" #. i18n: file: mainwindow.ui:357 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:373 rc.cpp:342 msgid "Decrease the font size" msgstr "" #. i18n: file: mainwindow.ui:360 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:376 rc.cpp:345 msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file: mainwindow.ui:363 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:378 rc.cpp:348 msgid "Ctrl+-" msgstr "" #. i18n: file: mainwindow.ui:372 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:379 rc.cpp:351 msgid "See &HTML" msgstr "" #. i18n: file: mainwindow.ui:375 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:381 rc.cpp:354 msgid "View HTML source of current page" msgstr "" #. i18n: file: mainwindow.ui:378 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:384 rc.cpp:357 msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file: mainwindow.ui:381 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:386 rc.cpp:360 msgid "Ctrl+U" msgstr "" #. i18n: file: mainwindow.ui:393 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:387 rc.cpp:363 msgid "Enable &full screen mode" msgstr "" #. i18n: file: mainwindow.ui:396 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:389 rc.cpp:366 msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file: mainwindow.ui:399 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:391 rc.cpp:369 msgid "F11" msgstr "" #. i18n: file: mainwindow.ui:417 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:392 rc.cpp:372 msgid "Show &navigator window" msgstr "" #. i18n: file: mainwindow.ui:420 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:394 rc.cpp:375 msgid "Show navigator dock window" msgstr "" #. i18n: file: mainwindow.ui:423 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:397 rc.cpp:378 msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file: mainwindow.ui:426 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:399 rc.cpp:381 msgid "F9" msgstr "" #. i18n: file: mainwindow.ui:438 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:400 rc.cpp:384 msgid "&Locate" msgstr "" #. i18n: file: mainwindow.ui:441 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:402 rc.cpp:387 msgid "Locate the current page in contents window" msgstr "" #. i18n: file: mainwindow.ui:444 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:405 rc.cpp:390 msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file: mainwindow.ui:447 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:407 rc.cpp:393 msgid "Ctrl+L" msgstr "" #. i18n: file: mainwindow.ui:456 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:408 rc.cpp:396 msgid "Set &encoding" msgstr "" #. i18n: file: mainwindow.ui:459 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:410 rc.cpp:399 msgid "Changes the current document encoding. " msgstr "" #. i18n: file: mainwindow.ui:468 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:412 rc.cpp:402 msgid "&Open..." msgstr "" #. i18n: file: mainwindow.ui:471 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:414 rc.cpp:405 msgid "Open a CHM file" msgstr "" #. i18n: file: mainwindow.ui:474 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:417 rc.cpp:408 msgid "Opens a new CHM file" msgstr "" #. i18n: file: mainwindow.ui:483 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:419 rc.cpp:411 msgid "Back" msgstr "" #. i18n: file: mainwindow.ui:486 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:421 rc.cpp:414 msgid "Navigate back" msgstr "" #. i18n: file: mainwindow.ui:489 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:424 rc.cpp:417 msgid "Navigate back in navigation history" msgstr "" #. i18n: file: mainwindow.ui:498 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:426 rc.cpp:420 msgid "Forward" msgstr "" #. i18n: file: mainwindow.ui:501 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:428 rc.cpp:423 msgid "Navigate forward" msgstr "" #. i18n: file: mainwindow.ui:504 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:431 rc.cpp:426 msgid "Navigate forward in navigation history" msgstr "" #. i18n: file: mainwindow.ui:513 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:433 rc.cpp:429 msgid "Home" msgstr "" #. i18n: file: mainwindow.ui:516 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:435 rc.cpp:432 msgid "Navigate home" msgstr "" #. i18n: file: mainwindow.ui:519 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:438 rc.cpp:435 msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file: mainwindow.ui:528 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #. i18n: file: window_browser.ui:90 #. i18n: ectx: property (text), widget (QToolButton, toolPrevious) #: ui_mainwindow.h:440 ui_window_browser.h:169 rc.cpp:438 rc.cpp:544 msgid "Previous" msgstr "" #. i18n: file: mainwindow.ui:531 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:442 rc.cpp:441 msgid "Go to the previous page in the Table of Contents" msgstr "" #. i18n: file: mainwindow.ui:534 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:445 rc.cpp:444 msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file: mainwindow.ui:543 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #. i18n: file: window_browser.ui:113 #. i18n: ectx: property (text), widget (QToolButton, toolNext) #: ui_mainwindow.h:447 ui_window_browser.h:170 rc.cpp:447 rc.cpp:547 msgid "Next" msgstr "" #. i18n: file: mainwindow.ui:546 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:449 rc.cpp:450 msgid "Go to the next page in the Table of Contents" msgstr "" #. i18n: file: mainwindow.ui:549 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:452 rc.cpp:453 msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file: mainwindow.ui:558 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:454 rc.cpp:456 msgid "&Close window" msgstr "" #. i18n: file: mainwindow.ui:561 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:456 rc.cpp:459 msgid "Close current window" msgstr "" #. i18n: file: mainwindow.ui:564 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:459 rc.cpp:462 msgid "Closes currently opened window" msgstr "" #. i18n: file: mainwindow.ui:567 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:461 rc.cpp:465 msgid "Ctrl+W" msgstr "" #. i18n: file: mainwindow.ui:572 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:462 rc.cpp:468 msgid "About kchmviewer..." msgstr "" #. i18n: file: mainwindow.ui:577 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:463 rc.cpp:471 msgid "About Qt" msgstr "" #. i18n: file: mainwindow.ui:586 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:464 rc.cpp:474 msgid "Check for updates" msgstr "" #. i18n: file: mainwindow.ui:595 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:465 rc.cpp:477 msgid "Edit toolbars..." msgstr "" #. i18n: file: mainwindow.ui:28 #. i18n: ectx: property (title), widget (QMenu, menu_Settings) #: ui_mainwindow.h:466 rc.cpp:195 msgid "&Settings" msgstr "" #. i18n: file: mainwindow.ui:37 #. i18n: ectx: property (title), widget (QMenu, menu_Bookmarks) #: ui_mainwindow.h:467 rc.cpp:198 msgid "&Bookmarks" msgstr "" #. i18n: file: mainwindow.ui:44 #. i18n: ectx: property (title), widget (QMenu, menu_File) #: ui_mainwindow.h:468 rc.cpp:201 msgid "&File" msgstr "" #. i18n: file: mainwindow.ui:55 #. i18n: ectx: property (title), widget (QMenu, menu_Edit) #: ui_mainwindow.h:469 rc.cpp:204 msgid "&Edit" msgstr "" #. i18n: file: mainwindow.ui:64 #. i18n: ectx: property (title), widget (QMenu, menu_View) #: ui_mainwindow.h:470 rc.cpp:207 msgid "&View" msgstr "" #. i18n: file: mainwindow.ui:78 #. i18n: ectx: property (title), widget (QMenu, menu_Windows) #: ui_mainwindow.h:471 rc.cpp:210 msgid "&Windows" msgstr "" #. i18n: file: mainwindow.ui:85 #. i18n: ectx: property (title), widget (QMenu, menuHelp) #: ui_mainwindow.h:472 rc.cpp:213 msgid "Help" msgstr "" #. i18n: file: mainwindow.ui:100 #. i18n: ectx: property (windowTitle), widget (QToolBar, mainToolbar) #: ui_mainwindow.h:473 rc.cpp:216 msgid "General toolbar" msgstr "" #. i18n: file: mainwindow.ui:125 #. i18n: ectx: property (windowTitle), widget (QToolBar, navToolbar) #: ui_mainwindow.h:474 rc.cpp:219 msgid "Navigation toolbar" msgstr "" #. i18n: file: mainwindow.ui:151 #. i18n: ectx: property (windowTitle), widget (QToolBar, viewToolbar) #: ui_mainwindow.h:475 rc.cpp:222 msgid "View toolbar" msgstr "" #. i18n: file: navigatorpanel.ui:17 #. i18n: ectx: property (windowTitle), widget (QDockWidget, NavigatorPanel) #: ui_navigatorpanel.h:66 rc.cpp:480 msgid "Navigator panel" msgstr "" #. i18n: file: navigatorpanel.ui:28 #. i18n: ectx: attribute (title), widget (QWidget, tab) #: ui_navigatorpanel.h:67 rc.cpp:483 msgid "Tab 1" msgstr "" #. i18n: file: tab_bookmarks.ui:36 #. i18n: ectx: property (text), widget (QPushButton, btnAdd) #: ui_tab_bookmarks.h:84 rc.cpp:486 msgid "&Add" msgstr "" #. i18n: file: tab_bookmarks.ui:43 #. i18n: ectx: property (text), widget (QPushButton, btnEdit) #: ui_tab_bookmarks.h:85 rc.cpp:489 msgid "Edi&t" msgstr "" #. i18n: file: tab_bookmarks.ui:50 #. i18n: ectx: property (text), widget (QPushButton, btnDel) #: ui_tab_bookmarks.h:86 rc.cpp:492 msgid "&Del" msgstr "" #. i18n: file: tab_contents.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, TabContents) #. i18n: file: tab_index.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, TabIndex) #. i18n: file: tab_search.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, TabSearch) #: ui_tab_contents.h:55 ui_tab_index.h:66 ui_tab_search.h:117 rc.cpp:495 #: rc.cpp:498 rc.cpp:504 msgid "Form1" msgstr "" #. i18n: file: tab_index.ui:41 #. i18n: ectx: property (text), widget (QTreeWidget, tree) #: ui_tab_index.h:68 rc.cpp:501 msgid "1" msgstr "" #. i18n: file: tab_search.ui:33 #. i18n: ectx: property (text), widget (QLabel, label) #: ui_tab_search.h:118 rc.cpp:507 msgid "Type in word(s) to search for:" msgstr "" #. i18n: file: tab_search.ui:48 #. i18n: ectx: property (text), widget (QLabel, lblHelp) #: ui_tab_search.h:119 rc.cpp:510 msgid "Help" msgstr "" #. i18n: file: tab_search.ui:86 #. i18n: ectx: property (text), widget (QPushButton, btnGo) #: ui_tab_search.h:120 rc.cpp:513 msgid "&Go" msgstr "" #. i18n: file: tab_search.ui:116 #. i18n: ectx: property (text), widget (QTreeWidget, tree) #: ui_tab_search.h:122 rc.cpp:519 msgid "Location" msgstr "" #. i18n: file: tab_search.ui:111 #. i18n: ectx: property (text), widget (QTreeWidget, tree) #: ui_tab_search.h:123 rc.cpp:516 msgid "Title" msgstr "" #. i18n: file: toolbareditor.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ToolbarEditor) #: ui_toolbareditor.h:142 rc.cpp:522 msgid "Dialog" msgstr "" #. i18n: file: toolbareditor.ui:20 #. i18n: ectx: property (title), widget (QGroupBox, groupEditToolbars) #: ui_toolbareditor.h:143 rc.cpp:525 msgid "Select a toolbar" msgstr "" #. i18n: file: toolbareditor.ui:26 #. i18n: ectx: property (text), widget (QLabel, label) #: ui_toolbareditor.h:144 rc.cpp:528 msgid "Editing the toolbar " msgstr "" #. i18n: file: toolbareditor.ui:47 #. i18n: ectx: property (text), widget (QLabel, label_2) #: ui_toolbareditor.h:145 rc.cpp:531 msgid "" "Drag the actions to the toolbar list to add them to the toolbar. \n" "Drag them from toolbar list to remove them from the toolbar." msgstr "" #. i18n: file: toolbareditor.ui:65 #. i18n: ectx: property (title), widget (QGroupBox, groupBox) #: ui_toolbareditor.h:147 rc.cpp:535 msgid "Available actions" msgstr "" #. i18n: file: toolbareditor.ui:90 #. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) #: ui_toolbareditor.h:148 rc.cpp:538 msgid "Toolbar actions" msgstr "" #. i18n: file: window_browser.ui:36 #. i18n: ectx: property (windowTitle), widget (QWidget, TabbedBrowser) #: ui_window_browser.h:167 rc.cpp:541 msgid "TabbedBrowser" msgstr "" #. i18n: file: window_browser.ui:133 #. i18n: ectx: property (text), widget (QCheckBox, checkCase) #: ui_window_browser.h:171 rc.cpp:550 msgid "Case Sensitive" msgstr "" #. i18n: file: window_browser.ui:152 #. i18n: ectx: property (text), widget (QLabel, labelWrapped) #: ui_window_browser.h:172 rc.cpp:553 msgid " Search wrapped" msgstr "" #: viewwindow.cpp:342 msgid "Printing aborted" msgstr "" #: viewwindow.cpp:347 msgid "Printing finished" msgstr "" #: viewwindow.cpp:486 msgid "Open Link in a new tab\tShift+LMB" msgstr "" #: viewwindow.cpp:487 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "" #: viewwindowmgr.cpp:74 msgid "Add page" msgstr "" #: viewwindowmgr.cpp:155 viewwindowmgr.cpp:234 msgid "Alt+%1" msgstr "" #: rc.cpp:554 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:555 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" kchmviewer-7.5/po/PaxHeaders.8614/kchmviewer_cs.po0000644000000000000000000000012411513542712017021 xustar0027 mtime=1294910922.830977 27 atime=1447562193.130734 30 ctime=1447562193.130734593 kchmviewer-7.5/po/kchmviewer_cs.po0000644000175000001440000007567111513542712017371 0ustar00timusers00000000000000# translation of kchmviewer.po to # This file is put in the public domain. # # Hynek Fabian , 2006. msgid "" msgstr "" "Project-Id-Version: kchmviewer\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2006-08-31 20:54+0200\n" "Last-Translator: Hynek Fabian \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.2\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - vložení záložky" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Zadejte jméno záložky" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - změna názvu záložky" #: kchmmainwindow.cpp:96 #, fuzzy msgid "Bookmarks" msgstr "&Přidat záložku" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - načtení souboru s nápovědou se nezdařilo" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "Nepovedlo se načíst soubor nápovědy %1" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "Nelze číst soubor %1" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - aktivován externí odkaz - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "Odkaz %1 bude otevřen v externím prohlížeči.\n" "\n" "Přejete si pokračovat?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "&Ano" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&Ne" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - aktivován JavaScript odkaz" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "Kliknuli jste na JavaScriptový odkaz\n" "Z bezpečnostních důvodů je použití JavaScriptových adres v souborech " "nápovědy potlačeno." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - aktivován odkaz na CHM soubor" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "Kliknuli jste na odkaz ukazující na soubor nápovědy %1.\n" "Aktuální soubor bude uzavřen.\n" "\n" "Přejete si pokračovat ?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Obsah" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Hledání" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Soubory nápovědy (*.chm)" #: kchmmainwindow.cpp:858 #, fuzzy msgid "Open a chm file" msgstr "Otevřít" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Soubory nápovědy (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Načítaní přerušeno" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "Zvolte cílový adresář" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "Rozbaluji soubor nápovědy" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Extrakce souborů..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "Přerušit" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "Téma nebylo nalezeno" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "O aplikaci %1" #: kchmmainwindow.cpp:1326 #, fuzzy msgid "&Help" msgstr "O&dstranit" #: kchmmainwindow.cpp:1327 #, fuzzy msgid "&About" msgstr "Přerušit" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "O &Qt" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "Nalezeno %1 výsledků" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "Hledání nevedlo k žádnému výsledku" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "Hledání se nezdařilo" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "" #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "" #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "" #: kchmviewwindowmgr.cpp:70 #, fuzzy msgid "Add page" msgstr "Hledání na stránce" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 msgid "Alt+%1" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Tisk přerušen" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 #, fuzzy msgid "Printing finished" msgstr "Tisk přerušen" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "" #: main.cpp:45 msgid "Perform auto testing" msgstr "" #: main.cpp:46 msgid "Perform short auto testing" msgstr "" #: main.cpp:47 #, fuzzy msgid "A CHM file to show" msgstr "Prohlížeč CHM souborů" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" #: main.cpp:56 msgid "CHM file viewer" msgstr "Prohlížeč CHM souborů" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "Nastavení KchmViewer" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "Běžné chovaní" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "Bez parametrů při spučtení" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "Ukaž dialog 'Výběr CHM souboru'" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "Otevři pos&lední používaný CHM soubor" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, no-c-format msgid "Alt+L" msgstr "" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "Historie" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "Uschovat informace o historii posledních" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "souborů" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "Pamatuje si poslední otevřenou stránku, historii hledání, velikost písma, " "záložky a podobné informace o prohlížených souborech." #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "Pamatovat si &extra informace souborů historie" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "Bezpečnostní volby" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "Při kliknutí na externí odkaz" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "Vžd&y otevřít v externím prohlížeči" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "Vyžádat si potvrzení" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "Neotevírat odkaz" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "Při kliknutí na odkaz na jiný CHM soubor" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "Otevřít odkazovaný CHM soubor" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "Neotvírat odkazovaný soubor" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "Zvláštní nastavení verzí" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "Nastavení KDE verze" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "HTML obsah zobrazit pomocí" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "&QTextBrowser prvku" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "&KHTMLPart prvku" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "Zabezpečení KHTMLPart" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "Povolit obnovení" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "Povolit &Javu" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "&Povolit moduly" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "Povolit Java&Script" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "Rozšířené nastavení" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "Prohlížeč zdrojového kódu HTML" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "Zabudovaný prohlížeč zdrojového kódu" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "E&xterní program uvedený níže" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "Externí prohlížeč:" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "&Přidat záložku" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, fuzzy, no-c-format msgid "&File" msgstr "Titul" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, fuzzy, no-c-format msgid "&Windows" msgstr "&Okno" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, fuzzy, no-c-format msgid "general toolbar" msgstr "Běžné chovaní" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, fuzzy, no-c-format msgid "navigation toolbar" msgstr "Navigace" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, fuzzy, no-c-format msgid "Print" msgstr "Tisk" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, fuzzy, no-c-format msgid "&Select All" msgstr "&Vybrat vše" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "Ro&zbalit..." #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, fuzzy, no-c-format msgid "Extract the CHM content to the directory" msgstr "Rozbaluji soubor nápovědy" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, fuzzy, no-c-format msgid "&Application settings..." msgstr "&Změnit nastavení" #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, fuzzy, no-c-format msgid "Change the application settings" msgstr "&Změnit nastavení" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "Přid&at záložku" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, fuzzy, no-c-format msgid "&Increase font size" msgstr "Zvětšit písmo" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, fuzzy, no-c-format msgid "Increase the font size" msgstr "Zvětšit písmo" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, fuzzy, no-c-format msgid "&Decrease font size" msgstr "Zmenšit písmo" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, fuzzy, no-c-format msgid "Decrease the font size" msgstr "Zmenšit písmo" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "&Zobrazit zdroj" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "Prohlížeč zdrojového kódu HTML" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, fuzzy, no-c-format msgid "Enable &full screen mode" msgstr "&Celá obrazovka" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, no-c-format msgid "F11" msgstr "" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, no-c-format msgid "&Locate in contents window" msgstr "&Najít v obsahu" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "Vyhledej toto téma" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, fuzzy, no-c-format msgid "Set &encoding" msgstr "Vybrat &kódování" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "Otevřít" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "Otevřít odkazovaný CHM soubor" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, fuzzy, no-c-format msgid "Navigate back" msgstr "Navigace" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, fuzzy, no-c-format msgid "Navigate back in navigation history" msgstr "Předchozí" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, fuzzy, no-c-format msgid "Navigate forward" msgstr "Navigace" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, fuzzy, no-c-format msgid "Navigate forward in navigation history" msgstr "Vpřed" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, fuzzy, no-c-format msgid "Navigate home" msgstr "Navigace" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, fuzzy, no-c-format msgid "Previous page in Table of Context" msgstr "Přesun na obsahově předcházející stránku" #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, fuzzy, no-c-format msgid "Previous page in TOC" msgstr "Předchozí stránka" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, fuzzy, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "Přesun na obsahově předcházející stránku" #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, fuzzy, no-c-format msgid "Next page in Table of Context" msgstr "Následující stránka" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "Následující stránka" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, fuzzy, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "Přesun na obsahově následující stránku" #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, fuzzy, no-c-format msgid "&Close window" msgstr "&Okno" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "&Okno obsahu" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" #~ msgid "Qt version settings" #~ msgstr "Nastavení Qt verze" #~ msgid "" #~ "Enter the path to the program, which will be used as a browser for " #~ "external links. A %s symbol will be replaced by the URL clicked." #~ msgstr "" #~ "Cesta k externímu prohlížeči. Symbol %s bude nahrazen volanou URL." #, fuzzy #~ msgid "Search engine to use" #~ msgstr "Hledání nevedlo k žádnému výsledku" #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" #~ msgstr "Hynek Fabian" #~ msgid "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "Your emails" #~ msgstr "radonek@gmail.com" #~ msgid "&Add" #~ msgstr "Přid&at" #~ msgid "Topics" #~ msgstr "Témata" #~ msgid "Please select one of the topics below:" #~ msgstr "Zvolte si jedno z níže uvedených témat:" #, fuzzy #~ msgid "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2004-2007\n" #~ "http://www.kchmviewer.net\n" #~ "\n" #~ "Licensed under GNU GPL license.\n" #~ "\n" #~ "Please check my another project, http://www.transientmail.com - temporary " #~ "e-mail address, which expires automatically." #~ msgstr "" #~ "%1 verze %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2005-2006\n" #~ "www.kchmviewer.net\n" #~ "\n" #~ "Licencováno GNU GPL.\n" #~ "\n" #~ "Zkuste náš další projekt, www.transientmail.com - dočasná adresa " #~ "elektronické pošty která časem sama zaniká." #~ msgid "File Operations" #~ msgstr "Práce se soubory" #~ msgid "Click this button to open an existing chm file." #~ msgstr "Výběr existujícího souboru nápovědy k prohlížení" #~ msgid "Click this button to print the current page" #~ msgstr "Stiskem toho tlačítka vytisknete současnou stránku" #~ msgid "" #~ "Click this button to extract the whole CHM file content into a specific " #~ "directory" #~ msgstr "" #~ "Tímto tlačítkem extrahujete obsah souboru nápovědy do zadaného adresáře" #~ msgid "&Recent files" #~ msgstr "Ot&evřít nedávný" #~ msgid "What's &This" #~ msgstr "Co je &tohle ?" #~ msgid "Click this button to move backward in browser history" #~ msgstr "Přesun v historii o krok zpět" #~ msgid "Click this button to move forward in browser history" #~ msgstr "Přesun v historii o krok vpřed" #~ msgid "Go to the home page" #~ msgstr "Úvodní stránka" #~ msgid "Click this button to move to the home page" #~ msgstr "Přesun na úvodní stranu" #~ msgid "Enter here the text to search in the current page." #~ msgstr "Zde zadaný text bude vyhledán na aktuální stránce" #~ msgid "Previous search result" #~ msgstr "Předešlý výsledek hledání" #~ msgid "Click this button to find previous search result." #~ msgstr "Stiskem toho tlačítka se vrátíte předešlý nalezený výraz" #~ msgid "Next search result" #~ msgstr "Další výsledek hledání" #~ msgid "Click this button to find next search result." #~ msgstr "" #~ "Stiskem tohoto tlačítka se přesunete na další výskyt hledaného výrazu" #~ msgid "" #~ "Click this button to find current topic in the content window, and open " #~ "it." #~ msgstr "Stiskem tohoto tlačítka otevřete okno s obsahem na aktuálním tématu" #~ msgid "Click this button to increase the font size." #~ msgstr "Toto tlačítko zvětší velikost použitého písma" #~ msgid "Click this button to decrease the font size." #~ msgstr "Toto tlačítko zmenší velikost použítého písma" #~ msgid "View HTML source" #~ msgstr "Zobrazit zdrojový kód" #~ msgid "" #~ "Click this button to open a separate window with the page HTML source." #~ msgstr "" #~ "Stisknutím tohoto tlačítka otevřete okno s HTML zdrojovým kódem stránky" #~ msgid "Add to bookmarks" #~ msgstr "Přidat k záložkám" #~ msgid "Click this button to add the current page to the bookmarks list." #~ msgstr "Tímto čudlíkem přidáte aktuální stránku mezi záložky" #~ msgid "&Increase font" #~ msgstr "Z&většit písmo" #~ msgid "&Decrease font" #~ msgstr "Z&menšit písmo" #~ msgid "&Set language" #~ msgstr "Vybrat &jazyk" #~ msgid "Type in word(s) to search for:" #~ msgstr "Zadejte hledaná slova:" #~ msgid "Location" #~ msgstr "Umístění" #~ msgid "How to use search" #~ msgstr "Jak používat vyhledávání" #~ msgid "" #~ "The search query can contain a few prefixes.\n" #~ "A set of words inside the quote marks mean that you are searching for " #~ "exact phrase.\n" #~ "A word with minus sign means that it should be absent in the search " #~ "result.\n" #~ "A word with plus mark or without any mark means that it must be present " #~ "in the search result.\n" #~ "\n" #~ "Note that only letters and digits are indexed.\n" #~ "You cannot search for non-character symbols other than underscope, and " #~ "those symbols will be removed from the search query.\n" #~ "For example, search for 'C' will give the same result as searching for 'C+" #~ "+'." #~ msgstr "" #~ "Hledaný výraz může obsahovat několik prefixů.\n" #~ "Vložení několika slov do uvozovek značí že chcete najít přesnou frázi.\n" #~ "Slovo se znaménkem minus se ve výsledku nebude vyskytovat.\n" #~ "Slovo se znaménkem plus nebo bez znaménka musí být ve výsledku přítomno.\n" #~ "\n" #~ "Hledání bere v úvahu pouze písmena, číslice a znak podtržítka.\n" #~ "Ostatní znaky budou z hledaného výrazu odstraněny.\n" #~ "Například hledání 'C' povede ke stejným výsledkům jako hledaní 'C++'." #, fuzzy #~ msgid "Search is not available" #~ msgstr "Hledání se nezdařilo" #~ msgid "Printing (page %1)..." #~ msgstr "Probíhá tisk strany %1 ..." #~ msgid "Printing completed" #~ msgstr "Tisk dokončen" #~ msgid "%1 - could not print" #~ msgstr "%1 - nelze tisknout" #~ msgid "" #~ "Could not print.\n" #~ "Your Qt library has been compiled without printing support" #~ msgstr "" #~ "Není možné tisknout.\n" #~ "Vaše knihovna Qt byla přeložena bez podpory tisku." #~ msgid "Match similar words" #~ msgstr "Podobná slova" kchmviewer-7.5/po/PaxHeaders.8614/kchmviewer_de.po0000644000000000000000000000012412616060517017007 xustar0027 mtime=1446535503.061791 27 atime=1447562193.130734 30 ctime=1447562193.141734443 kchmviewer-7.5/po/kchmviewer_de.po0000644000175000001440000006741312616060517017352 0ustar00timusers00000000000000# German translation for kchmviewer. # This file is put in the public domain. # Markus Müller , 2015 # msgid "" msgstr "" "Project-Id-Version: kchmviewer\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2007-09-09 23:11+0100\n" "Last-Translator: Emilio Scalise \n" "MIME-Version: 1.0\n" "Language-Team: \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - Lesezeichen hinzuzufügen" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Namen des Lesezeichens eingeben:" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - Ändere Lesezeichen Name" #: kchmmainwindow.cpp:96 #, fuzzy msgid "Bookmarks" msgstr "Lesezeichen" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - konnte die CHM-Datei nicht laden" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "Kann die CHM-Datei %1 nicht öffnen" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "Kann die CHM-Datei %1 nicht laden" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - externer Link angeklickt - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "Der externe Link %1 will ein Programm starten.\n" "\n" "Möchten Sie fortfahren?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 #, fuzzy msgid "&Yes" msgstr "&Ja" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&Nein" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - JavaScript Link angeklickt" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "Der Link beinhaltet JavaScript.\n" "Aus Sicherheit sind alle JavaScripte in der CHM-Datei nicht ausführbar." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - Link zu einer anderen CHM-Datei angeklickt" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "Es wurde ein Link zu einer neuen CHM Datei %1 angeklickt.\n" "Die aktuelle CHM Datei wird geschlossen.\n" "Wollen Sie fortfahren?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "Inhalt" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Index" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Suche" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Komprimierte Hilfe-Datei (*.chm)" #: kchmmainwindow.cpp:858 #, fuzzy msgid "Open a chm file" msgstr "Öffne eine CHM-Datei" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Komprimierte Hilfe-Datei (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Abbruch beim Laden" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "Wähle ein Verzeichnis um das CHM Inhaltsverzeichnis zu speichern" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "Extrahiere CHM Inhaltsverzeichnis" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Extrahiere Dateien..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "Abbruch" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "Kann das Theman im Inhaltsfenster nicht finden" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "Über %1" #: kchmmainwindow.cpp:1326 #, fuzzy msgid "&Help" msgstr "&Hilfe" #: kchmmainwindow.cpp:1327 #, fuzzy msgid "&About" msgstr "Über" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "Über &Qt" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "Strg+1" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "Strg+2" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "Strg+3" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "Strg+4" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "Strg-Rechts" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "Strg-Links" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "Es wurden %1 Ergebisse gefunden" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "Es wurden keine Ergebnisse gefunden" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "Suche fehlgeschlagen" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "Lese Inhaltsverzeichnis..." #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "Erzeuge Such-Index..." #: kchmsetupdialog.cpp:183 #, fuzzy msgid "" "Changing those options requires restarting the application to take effect." msgstr "" "Änderung dieser Optionen benötigen einen Neustart des Programms." #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "*|Programme" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "Währe einen Editor aus" #: kchmsetupdialog.cpp:197 msgid "Programme (*)" msgstr "" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "Schließt aktuelle Seite" #: kchmviewwindowmgr.cpp:70 #, fuzzy msgid "Add page" msgstr "Seite hinzufügen" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 #, fuzzy msgid "Alt+%1" msgstr "Alt+L" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Druck abgebrochen" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 #, fuzzy msgid "Printing finished" msgstr "Druck fertig" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "Öffne Link in einem neuen Reiter\tShift+LMB" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "Öffne Link in einem neuen hintergrund Reiter\tStrg+LMB" #: main.cpp:45 msgid "Perform auto testing" msgstr "Automatische Überprüfung starten" #: main.cpp:46 msgid "Perform short auto testing" msgstr "Schnelle automatische Überprüfung starten" #: main.cpp:47 #, fuzzy msgid "A CHM file to show" msgstr "Eine CHM-Datei zum anzeigen" #: main.cpp:48 #, fuzzy msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" "'--search ' spezifiziere die Suchanfrage und aktiviere " "erster Eintrag wenn gefunden" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" "'--sindex ' spezifiziere das zu suchende Wort im Index und " "aktiviere es wenn gefunden" #: main.cpp:50 #, fuzzy msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" "'--sindex ' spezifiziere das/die Wort(e) in der Volltextsuche, und " "aktiviere wenn gefunden. Wirldcards sind erlaubt" #: main.cpp:56 msgid "CHM file viewer" msgstr "CHM-Datei Viewer" #: main.cpp:58 msgid "(c) 2004-2015 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "Bitte schreibt Bugs an kchmviewer@ulduzsoft.com (in englisch)" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "KchmViewer Optionen" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "Allgemeines Verhalten" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "Wenn keine Argumente beim Start angegeben" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "Öffne den 'Öffne CHM Datei' Dialog" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, fuzzy, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "Öffnet die &letzte CHM-Date, wenn existiert" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, fuzzy, no-c-format msgid "Alt+L" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "Chronik" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "Speichert Chronik für" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "letzte Dateien" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "Merken der Informationen der letzen geöffneten Dateien, geöffnete Seite, " "Chronik, Schriftgröße, Lesezeichen usw." #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, fuzzy, no-c-format msgid "R&emember extra information for history files" msgstr "M&erken extra Chronik in Dateien" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "CHM Sicherheitseinstellungen" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "Als externer Link geklickt" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, fuzzy, no-c-format msgid "Alwa&ys open it in external browser" msgstr "Immer mit externem Browser öffnen" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+Y" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "Bestätigungsabfragen" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "Den Link nicht öffnen" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "Wenn der auf eine neue CHM Datei zeigt, erlauben" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "Neue CHM-Dateien düren immer geöffnet werden" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "Öffne keine neue CHM Datei" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "Version spezifische Einstellungen" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "KDE Version Einstellungen" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "Um HTML-Inhalte anzeigen möchten, verwende" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "&QTextBrowser basiertes Wideget" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "&KHTMLPart basiertes Wideget" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "Qt &Webkit (benötigt Qt 4.4 oder höher)" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "KHTMLPart Sicherheit" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "Aktivieren und auffrischen" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+R" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "Aktiviere &Java" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "Aktiviere $plugins" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+P" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "Aktiviere Java&Script" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "Erweitert" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "Zeige HTML Quelle, benutze" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "Benutze eigenen HTML Viewer" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, fuzzy, no-c-format msgid "E&xternal program, specified below" msgstr "E&xternes Programm, benutze" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+X" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "Externes Programm:" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "Andere" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "Benutze rechts-zu-links layout (Arabisch/Hebräisch)" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "Erkenne automatisch die Codierung für KHTMLPart und WebKit " "Browsers (not recommended)" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "Einstellungen" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "Lesezeichen" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, fuzzy, no-c-format msgid "&File" msgstr "&Datei" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "&Ändern" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "&Ansicht" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, fuzzy, no-c-format msgid "&Windows" msgstr "&Fenster" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, fuzzy, no-c-format msgid "general toolbar" msgstr "Haupt Toolbar" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, fuzzy, no-c-format msgid "navigation toolbar" msgstr "Navigation Toolbar" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "Aktion Toolbar" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "Drucken..." #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, fuzzy, no-c-format msgid "Print" msgstr "Drucken" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "Drucke aktuelle Seite" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "Drucke aktuell offene Seite" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "Strg+P" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "Schließen" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "Schließen" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "Programm beenden" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "Strg+Q" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "Kopieren" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "Kopieren" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "Kopiere in Zwischenablage" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "Strg+C" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, fuzzy, no-c-format msgid "&Select All" msgstr "&Selektiere alles" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "Einfügen" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "Markiere gesammtes Dokument" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "Strg+V" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "Suchen..." #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "Suchen" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "Suche Text in aktiver Seite" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "Suche Seitenweise" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "Strg+F" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, fuzzy, no-c-format msgid "E&xtract CHM content..." msgstr "Extrahiere CHM Inhalt..." #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, fuzzy, no-c-format msgid "Extract the CHM content to the directory" msgstr "Extrahiere CHM Inhalt in das Verzeichnis" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "Extrahiere CHM Archiv Inhalt in das Verzeichnis, alle Dateien werden " "extrahiert." #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, fuzzy, no-c-format msgid "&Application settings..." msgstr "Programm Eigenschaften..." #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, fuzzy, no-c-format msgid "Change the application settings" msgstr "Änder die Programmeigenschaften..." #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "&Lesezeichen hinzufügen" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "Füge Lesezeichen für aktuelle Seite hinzu" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "Füge Lesezeichen für aktuelle Seite hinzu. Merke die offene Seite " "und Position. Das Lesezeichen ist über das Menü oder den Reiter erreichbar." #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "Strg+B" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, fuzzy, no-c-format msgid "&Increase font size" msgstr "Erhöhe Schriftgröße" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, fuzzy, no-c-format msgid "Increase the font size" msgstr "Erhöhe die Schriftgröße" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "Erhöhe die Schriftgröße des Dokument und speichere die neue Einstellung." #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "Strg++" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, fuzzy, no-c-format msgid "&Decrease font size" msgstr "Verkleinert Schriftgröße" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, fuzzy, no-c-format msgid "Decrease the font size" msgstr "Verkleinert die Schriftgröße" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "Verkleinert die Schriftgröße des Dokument und speichere die neue Einstellung." #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "Strg+-" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "Zeige HTML Quellcode" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "Zeige HTML Quellcode der aktuellen Seite" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "Zeige HTML Quellcode der aktuellen Seite" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "Strg+U" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, fuzzy, no-c-format msgid "Enable &full screen mode" msgstr "Vollbildschirm Modus aktivieren" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "Umschaltung Vollbildschirm Modus / Normal" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, fuzzy, no-c-format msgid "F11" msgstr "" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "Aktiviere Seitenfenster" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "Zeige/Verstecke das Seitenfenster (mit Inhaltsverzeichnis/Suche/" "Lesezeichen" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, fuzzy, no-c-format msgid "&Locate in contents window" msgstr "Suche in Inhaltsfenster" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "Suche in der aktuellen Seite im Inhaltsfenster" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "Wenn die aktuelle Seite im Inhaltsverzeichnis vorhanden ist, suche dort. " #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "Strg+" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, fuzzy, no-c-format msgid "Set &encoding" msgstr "Ändere Codierung" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "Ändert die Codierung des aktuellen Dokuments." #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "Öffnen..." #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "Öffne CHM Datei" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "Öffne neue CHM Datei" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "Zurück" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, fuzzy, no-c-format msgid "Navigate back" msgstr "EinSeite zurück" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, fuzzy, no-c-format msgid "Navigate back in navigation history" msgstr "Eine Seite zurück in der Chronik" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "Vorwärts" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, fuzzy, no-c-format msgid "Navigate forward" msgstr "Eine Seite vorwärts" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, fuzzy, no-c-format msgid "Navigate forward in navigation history" msgstr "Eine Seite vorwärts in der Chronik" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "Startseite" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, fuzzy, no-c-format msgid "Navigate home" msgstr "Gehe zur Startseite" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "Gehe zur Hauptseite, das in der CHM Datei definiert ist." #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, fuzzy, no-c-format msgid "Previous page in Table of Context" msgstr "Vorige Seite von der Index Tabelle" #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, fuzzy, no-c-format msgid "Previous page in TOC" msgstr "Vorige Seite vom Index" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, fuzzy, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "Gehe zur vorigen Seite vom Inhalt" #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" "Gehe zur vorigen Seite vom Inhalt

Kurztaste: " "Strg+Pfeil Links" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, fuzzy, no-c-format msgid "Next page in Table of Context" msgstr "Nächste Seite von der Index Tabelle" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "Nächste Seite vom Index" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, fuzzy, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "Gehe zur nächsten Seite vom Inhalt" #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" "Gehe zur nächsten Seite vom Inhalt

Kurztaste: " "Strg+Pfeil Rechts" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, fuzzy, no-c-format msgid "&Close window" msgstr "&Beenden" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "Schließe aktives Fenster" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "Schließe aktives Fenster" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "Strg+W" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Deine Namen" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "Deine E-Mails" kchmviewer-7.5/po/PaxHeaders.8614/kchmviewer_zh_TW.po0000644000000000000000000000012411364464257017462 xustar0027 mtime=1272080559.364557 27 atime=1447562193.148734 30 ctime=1447562193.151734307 kchmviewer-7.5/po/kchmviewer_zh_TW.po0000644000175000001440000007505111364464257020022 0ustar00timusers00000000000000# translation of zh_CN.po to # translation of kchmviewer.po to # This file is put in the public domain. # # 林俊 , 2006. msgid "" msgstr "" "Project-Id-Version: zh_TW\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2006-05-07 20:30-0400\n" "Last-Translator: 呂健 \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.2\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - 添加書籤" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "輸入書籤的名稱" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - 編輯書籤名稱" #: kchmmainwindow.cpp:96 #, fuzzy msgid "Bookmarks" msgstr "添加當前頁面為書籤(&B)" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - 載入CHM檔案失敗" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "無法載入CHM檔案%1" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "無法載入檔案%1" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - 點擊遠程鏈接 - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "%1將使用外部程式來打開遠程鏈接。 \n" "\n" "你要繼續嗎?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "是(&Y)" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "否(&N)" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - 點擊JavaScript鏈接" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "你點擊了JavaScript鏈接。\n" "為了了避免安全問題,在CHM檔案中不啟用JavaScript URLs支持。" #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - 點擊指向新的CHM檔案的鏈接。" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "你點擊了指向新的CHM檔案的鏈接%1。\n" "現在打開的檔案將被關閉。\n" "\n" "你要繼續嗎?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "索引" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "搜索" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|壓縮的幫助手冊 (*.chm)" #: kchmmainwindow.cpp:858 #, fuzzy msgid "Open a chm file" msgstr "打開檔案" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "壓縮的幫助手冊 (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "取消載入" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "選擇目錄來保存CHM目錄" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "提取CHM目錄" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "提取檔案..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "取消" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "無法在目錄窗口定位打開的主題" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "關於%1" #: kchmmainwindow.cpp:1326 #, fuzzy msgid "&Help" msgstr "刪除(&D)" #: kchmmainwindow.cpp:1327 #, fuzzy msgid "&About" msgstr "取消" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "關於QT(&Q)" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "搜索返回 %1 個結果" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "搜索沒有返回結果" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "搜索失敗" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms speficide in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "" #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "" #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "" #: kchmviewwindowmgr.cpp:70 #, fuzzy msgid "Add page" msgstr "在頁面中搜索" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 #, fuzzy msgid "Alt+%1" msgstr "Alt+L" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "列印被取消" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 #, fuzzy msgid "Printing finished" msgstr "列印被取消" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 #, fuzzy msgid "Open Link in a new tab\tShift+LMB" msgstr "在新的書籤頁打開此鏈接(&O)" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 #, fuzzy msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "在後臺書籤也打開此鏈接(&O)" #: main.cpp:45 msgid "Perform auto testing" msgstr "" #: main.cpp:46 msgid "Perform short auto testing" msgstr "" #: main.cpp:47 #, fuzzy msgid "A CHM file to show" msgstr "CHM檔案查看器" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" #: main.cpp:56 msgid "CHM file viewer" msgstr "CHM檔案查看器" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "KchmViewer設置" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "通用行為" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "如果載入時沒有參數" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "打開'打開CHM檔案'對話框" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "如果存在,打開最後使用的CHM檔案(&L)" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, fuzzy, no-c-format msgid "Alt+L" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "歷史" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "保存歷史信息" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "最近使用的檔案" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "記錄已經打開的檔案的相關信息。 記錄最後打開的頁面,搜索記錄,字體大小,書籤等" "信息。" #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "記錄歷史檔案額外信息(&E)" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "CHM 安全設置" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "當點擊外部鏈接時" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "總在外部瀏覽器中打開(&Y)" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+Y" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "請求确認" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "不打開鏈接" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "當點擊指向新的CHM檔案的鏈接時" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "總打開新的CHM檔案" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "不打開新的CHM檔案" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "版本指定設置" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "KDE 版本設置" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "要顯示HTML目錄,使用" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "基於QTextBrowser的組件(&Q)" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "基於KHTMLPart的組件(&K)" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "KHTMLPart 安全性" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "啟用刷新(&R)" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+R" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "啟用Java(&J)" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "啟用插件(&P)" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+P" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "啟用JavaScript(&S)" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "高級" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "查看HTML源碼使用" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "內建HTML源碼查看器" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "外部程式,在下面特別指定(&X)" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+x" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "外部程式" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "添加當前頁面為書籤(&B)" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, fuzzy, no-c-format msgid "&File" msgstr "標題" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, fuzzy, no-c-format msgid "&Windows" msgstr "窗口(&W)" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, fuzzy, no-c-format msgid "general toolbar" msgstr "通用行為" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, fuzzy, no-c-format msgid "navigation toolbar" msgstr "導航" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, fuzzy, no-c-format msgid "Print" msgstr "列印檔案" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, fuzzy, no-c-format msgid "&Select All" msgstr "選擇全部(&S)" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "提取CHM目錄(&X)" #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, fuzzy, no-c-format msgid "Extract the CHM content to the directory" msgstr "提取CHM目錄" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, fuzzy, no-c-format msgid "&Application settings..." msgstr "更改設置(&C)" #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, fuzzy, no-c-format msgid "Change the application settings" msgstr "更改設置(&C)" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "添加書籤(&A)" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, fuzzy, no-c-format msgid "&Increase font size" msgstr "增大字體大小" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, fuzzy, no-c-format msgid "Increase the font size" msgstr "增大字體大小" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, fuzzy, no-c-format msgid "&Decrease font size" msgstr "縮小字體大小" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, fuzzy, no-c-format msgid "Decrease the font size" msgstr "縮小字體大小" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "查看HTML源碼(&V)" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "查看HTML源碼使用" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, fuzzy, no-c-format msgid "Enable &full screen mode" msgstr "全屏(&F)" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, fuzzy, no-c-format msgid "F11" msgstr "F1" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, no-c-format msgid "&Locate in contents window" msgstr "目錄窗口&定位(&L)" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "在錄窗口定位主題" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, fuzzy, no-c-format msgid "Set &encoding" msgstr "設置編碼(&S)" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "打開檔案" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "總打開新的CHM檔案" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, fuzzy, no-c-format msgid "Navigate back" msgstr "導航" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, fuzzy, no-c-format msgid "Navigate back in navigation history" msgstr "在歷史中後退" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, fuzzy, no-c-format msgid "Navigate forward" msgstr "導航" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, fuzzy, no-c-format msgid "Navigate forward in navigation history" msgstr "在歷史中前進" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, fuzzy, no-c-format msgid "Navigate home" msgstr "導航" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, fuzzy, no-c-format msgid "Previous page in Table of Context" msgstr "點擊此按鈕前往目錄錶格中的前一頁" #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, fuzzy, no-c-format msgid "Previous page in TOC" msgstr "目錄錶格的前一頁" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, fuzzy, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "點擊此按鈕前往目錄錶格中的前一頁" #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, fuzzy, no-c-format msgid "Next page in Table of Context" msgstr "目錄錶格的後一頁" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "目錄錶格的後一頁" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, fuzzy, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "點擊此按鈕前往目錄錶格的後一頁" #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, fuzzy, no-c-format msgid "&Close window" msgstr "窗口(&W)" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "顯示目錄窗口(&S)" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" #~ msgid "Qt version settings" #~ msgstr "QT 版本設置" #~ msgid "" #~ "Enter the path to the program, which will be used as a browser for " #~ "external links. A %s symbol will be replaced by the URL clicked." #~ msgstr "" #~ "輸入打開外部鏈接的瀏覽器程式的路徑。%s 符號將被點擊的URL替換。" #, fuzzy #~ msgid "Search engine to use" #~ msgstr "搜索没有返回結果" #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" #~ msgstr "呂健" #~ msgid "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "Your emails" #~ msgstr "demonlinjun@163.com" #~ msgid "&Add" #~ msgstr "添加(&A)" #~ msgid "Topics" #~ msgstr "主題" #~ msgid "Please select one of the topics below:" #~ msgstr "請在下面選取一個主題" #~ msgid "&Ok" #~ msgstr "确定(&O)" #, fuzzy #~ msgid "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2004-2007\n" #~ "http://www.kchmviewer.net\n" #~ "\n" #~ "Licensed under GNU GPL license.\n" #~ "\n" #~ "Please check my another project, http://www.transientmail.com - temporary " #~ "e-mail address, which expires automatically." #~ msgstr "" #~ "%1 版本 %2\n" #~ "\n" #~ "版權所有 (C) George Yunaev,gyunaev@ulduzsoft.com, 2005-2006\n" #~ "www.kchmviewer.net\n" #~ "\n" #~ "在GNU GPL授權方式下發行。\n" #~ "\n" #~ "請嚐試我們的另一個項目,www.transientmail.com - 臨時 E-Mail地址。" #~ msgid "File Operations" #~ msgstr "檔案操作" #~ msgid "Click this button to open an existing chm file." #~ msgstr "點擊此按鈕打開存在的CHM檔案" #~ msgid "Click this button to print the current page" #~ msgstr "點擊此按鈕列印當前頁面" #~ msgid "" #~ "Click this button to extract the whole CHM file content into a specific " #~ "directory" #~ msgstr "點擊此按鈕提取整個CHM檔案的目錄到指定的目錄。" #~ msgid "&Recent files" #~ msgstr "最近打開的檔案(&R)" #~ msgid "What's &This" #~ msgstr "這是什麼(&T)" #~ msgid "Click this button to move backward in browser history" #~ msgstr "點擊此按鈕在瀏覽歷史中後退" #~ msgid "Click this button to move forward in browser history" #~ msgstr "點擊此按鈕在瀏覽歷史中前進" #~ msgid "Go to the home page" #~ msgstr "回到首頁" #~ msgid "Click this button to move to the home page" #~ msgstr "點擊此按钮回到主頁" #~ msgid "Enter here the text to search in the current page." #~ msgstr "輸入要在當前頁面搜索的内容" #~ msgid "Previous search result" #~ msgstr "前一個搜索的結果" #~ msgid "Click this button to find previous search result." #~ msgstr "點擊此按钮查看前一個搜索的結果" #~ msgid "Next search result" #~ msgstr "下一個搜索的結果" #~ msgid "Click this button to find next search result." #~ msgstr "點擊此按钮查看下一個搜索的結果" #~ msgid "" #~ "Click this button to find current topic in the content window, and open " #~ "it." #~ msgstr "點擊此按鈕在目錄窗口定位當前主題" #~ msgid "Click this button to increase the font size." #~ msgstr "點擊此按鈕增加字體大小" #~ msgid "Click this button to decrease the font size." #~ msgstr "點擊此按鈕縮小字體大小" #~ msgid "View HTML source" #~ msgstr "查看HTML源碼" #~ msgid "" #~ "Click this button to open a separate window with the page HTML source." #~ msgstr "點擊此按鈕在独立窗口查看當前頁面的HTML源碼" #~ msgid "Add to bookmarks" #~ msgstr "添加到書籤" #~ msgid "Click this button to add the current page to the bookmarks list." #~ msgstr "點擊此按鈕添加當前頁面到書籤列錶" #~ msgid "&Increase font" #~ msgstr "增大字體(&I)" #~ msgid "&Decrease font" #~ msgstr "縮小字體(&D)" #~ msgid "&Set language" #~ msgstr "設置語言(&S)" #~ msgid "Type in word(s) to search for:" #~ msgstr "輸入要搜索的詞" #~ msgid "Location" #~ msgstr "位置" #~ msgid "How to use search" #~ msgstr "如何使用搜索" #, fuzzy #~ msgid "" #~ "The search query can contain a few prefixes.\n" #~ "A set of words inside the quote marks mean that you are searching for " #~ "exact phrase.\n" #~ "A word with minus sign means that it should be absent in the search " #~ "result.\n" #~ "A word with plus mark or without any mark means that it must be present " #~ "in the search result.\n" #~ "\n" #~ "Note that only letters and digits are indexed.\n" #~ "You cannot search for non-character symbols other than underscope, and " #~ "those symbols will be removed from the search query.\n" #~ "For example, search for 'C' will give the same result as searching for 'C+" #~ "+'." #~ msgstr "" #~ "搜索查詢可以包含一些技巧。\n" #~ "在引號中包含的内容意味着你要精确的搜索。\n" #~ "带有減小的字錶示在搜索結果中不應包含这個内容。\n" #~ "带有加號或什麼也不带錶示在搜索結果中應當包含这個内容。\n" #~ "\n" #~ "注意只有字母和數字被索引。\n" #~ "你不能搜索符號,这些符耗将在搜索查詢中被移除。\n" #~ "例如,搜索 'C' 和搜索 'C++' ,将返回同样的結果." #, fuzzy #~ msgid "Search is not available" #~ msgstr "搜索失敗" #~ msgid "Printing (page %1)..." #~ msgstr "正在列印 (第 %1 頁)" #~ msgid "Printing completed" #~ msgstr "列印成功" #~ msgid "%1 - could not print" #~ msgstr "%1 - 不能列印" #~ msgid "" #~ "Could not print.\n" #~ "Your Qt library has been compiled without printing support" #~ msgstr "" #~ "不能列印。\n" #~ "你編譯QT没有加入列印支持" #~ msgid "Match similar words" #~ msgstr "匹配相似詞" kchmviewer-7.5/po/PaxHeaders.8614/update_translations.sh0000644000000000000000000000012311115116772020247 xustar0026 mtime=1228185082.89356 27 atime=1447562193.151734 30 ctime=1447562193.151734307 kchmviewer-7.5/po/update_translations.sh0000644000175000001440000000305311115116772020601 0ustar00timusers00000000000000#!/bin/sh # BASEDIR="../src/" # root of translatable sources PROJECT="kchmviewer" # project name BUGADDR="kchmviewer@ulduzsoft.com" # MSGID-Bugs WDIR=`pwd` # working dir echo "Preparing rc files" cd ${BASEDIR} # we use simple sorting to make sure the lines do not jump around too much from system to system # find . -name '*.rc' -o -name '*.ui' -o -name '*.kcfg' | sort > ${WDIR}/rcfiles.list xargs --arg-file=${WDIR}/rcfiles.list extractrc > ${WDIR}/rc.cpp # additional string for KAboutData echo 'i18nc("NAME OF TRANSLATORS","Your names");' >> ${WDIR}/rc.cpp echo 'i18nc("EMAIL OF TRANSLATORS","Your emails");' >> ${WDIR}/rc.cpp cd ${WDIR} echo "Done preparing rc files" # echo "Extracting messages" cd ${BASEDIR} # # see above on sorting # find . -name '*.cpp' -o -name '*.h' -o -name '*.c' | sort > ${WDIR}/infiles.list echo "rc.cpp" >> ${WDIR}/infiles.list cd ${WDIR} xgettext --from-code=UTF-8 -C -kde -ci18n -ki18n:1 -ki18nc:1c,2 -ki18np:1,2 -ki18ncp:1c,2,3 -ktr2i18n:1 \ -kI18N_NOOP:1 -kI18N_NOOP2:1c,2 -kaliasLocale -kki18n:1 -kki18nc:1c,2 -kki18np:1,2 -kki18ncp:1c,2,3 \ --msgid-bugs-address="${BUGADDR}" \ --files-from=infiles.list -D ${BASEDIR} -D ${WDIR} -o ${PROJECT}.pot || { echo "error while calling xgettext. aborting."; exit 1; } echo "Done extracting messages" # echo "Merging translations" catalogs=`find . -name '*.po'` for cat in $catalogs; do echo $cat msgmerge -o $cat.new $cat ${PROJECT}.pot mv $cat.new $cat done echo "Done merging translations" # echo "Cleaning up" cd ${WDIR} rm rcfiles.list rm infiles.list rm rc.cpp echo "Done" kchmviewer-7.5/po/PaxHeaders.8614/kchmviewer_tr.po0000644000000000000000000000012411513542712017041 xustar0027 mtime=1294910922.830977 27 atime=1447562193.146734 30 ctime=1447562193.147734362 kchmviewer-7.5/po/kchmviewer_tr.po0000644000175000001440000006355111513542712017403 0ustar00timusers00000000000000# translation of kchmview.pot to Turkish # This file is put in the public domain. # # Furkan Duman , 2006. # Ozan Çağlayan , 2009. msgid "" msgstr "" "Project-Id-Version: tr\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2009-02-11 11:03+0200\n" "Last-Translator: Ozan Çağlayan \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - yer imi ekle" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Bu yer imi için isim girin:" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - yer imi adını düzenle" #: kchmmainwindow.cpp:96 msgid "Bookmarks" msgstr "Yer imleri" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" "%1 sürüm %2

Copyright (C) George Yunaev, 2004-2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

GNU GPL " "lisansıyla lisanslanmıştır." #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "Tespit edilen dosya kodlaması: %1 ( %2 )" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - chm dosyası yüklenemedi" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "chm dosyası %1 yüklenemiyor" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "%1 dosyası yüklenemedi" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - uzak bağlantı tıklandı - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "%1 uzak bağlantısının açılması için harici uygulama başlatılacak.\n" "\n" "Devam etmek istiyor musunuz?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "&Evet" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&Hayır" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - JavaScript bağlantısı tıklandı" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "Bir JavaScript bağlantısına tıkladınız.\n" "Güvenlik sorunlarını önlemek için CHM dosyalarındaki JavaScript bağları " "etkisizleştirilmiştir." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - tıklanan yeni bir CHM dosyasına bağlantı" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "%1 dosyasını gösteren bir bağlantıya tıkladınız.\n" "Şimdiki dosya kapatılacaktır.\n" "\n" "Devam etmek istiyor musunuz?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "İçerik" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "İndeks" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Arama" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Sıkıştırılmış Yardım El Kitabı (*.chm)" #: kchmmainwindow.cpp:858 msgid "Open a chm file" msgstr "Dosya Aç" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Sıkıştırılmış Yardım El Kitabı (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Yükleme iptal edildi" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "CHM içeriğini kaydetmek için bir dizin seç" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "CHM içeriği açılıyor" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Dosyalar çıkarılıyor..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "İptal et" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "İçerik penceresinde açılan başlık bulunamadı" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "%1 hakkında" #: kchmmainwindow.cpp:1326 msgid "&Help" msgstr "&Yardım" #: kchmmainwindow.cpp:1327 msgid "&About" msgstr "&Hakkında" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "Q&t hakkında" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "Ctrl+Sağ" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "Ctrl+Sol" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "Arama %1 sonuç döndürdü" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "Arama sonuç döndürmedi" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "Arama başarısız" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" "

Geliştirilmiş arama motoru size bir kelimeyi, sembolü ya da cümleyi " "arama olanağı verir. Sadece arama sorgusunda belirtilen tüm terimleri içeren " "belgeler görüntülenir.

MS CHM arama indeksinin tersine, bu arama motoru " "özel sembolleri de kapsayan bir indeks oluşturur. Böylece, $q = new " "ChmFile(); gibi ifadeler de aranabilir. Arama motoru tam Unicode " "desteğiyle, İngilizce olmayan dillerde de arama yapmanızı sağlar.

Bir " "alıntı sembolünü aramak istiyorsanız tırnak işareti kullanın." #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "Sözlük okunuyor..." #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "Arama indeksi oluşturuluyor..." #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" "Değiştirilen ayarların etkin olması için uygulama yeniden başlatılmalıdır." #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "*|Çalıştırılabilir dosyalar" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "Bir metin düzenleyici seçin" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "Çalıştırılabilir dosyalar (*)" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "Şimdiki sayfayı kapat" #: kchmviewwindowmgr.cpp:70 msgid "Add page" msgstr "Sayfa ekle" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 msgid "Alt+%1" msgstr "Alt+%1" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Yazdırma iptal edildi" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 msgid "Printing finished" msgstr "Yazdırma sona erdi" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "Bağlantıyı yeni sekmede aç\tShift+LMB" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "Bağlantıyı yeni arkaplan sekmesinde aç\tCtrl+LMB" #: main.cpp:45 msgid "Perform auto testing" msgstr "Otomatik testi etkinleştir" #: main.cpp:46 msgid "Perform short auto testing" msgstr "Kısa otomatik testi etkinleştir" #: main.cpp:47 msgid "A CHM file to show" msgstr "Görüntülenebilecek bir CHM dosyası" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" "'--search ' gerçekleştirilecek arama sorgusunu belirtir ve ilk " "bulunan girdiyi etkinleştirir" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" "'--sindex ' indekste aranacak kelimeyi belirtir ve bulunursa " "etkinleştirir" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" "'--stoc ' İçindekiler bölümünde aranacak kelimeleri belirtir ve " "bulunursa etkinleştirir. Wildcard karakterleri kullanılabilir." #: main.cpp:56 msgid "CHM file viewer" msgstr "CHM dosya görüntüleyici" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "Lütfen hataları kchmviewer@ulduzsoft.com adresine bildirin" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, fuzzy, no-c-format msgid "Alt+L" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, fuzzy, no-c-format msgid "Alt+E" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, fuzzy, no-c-format msgid "When external link clicked" msgstr "%1 - uzak bağlantı tıklandı - %2" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, fuzzy, no-c-format msgid "Alt+Y" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, fuzzy, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "%1 - tıklanan yeni bir CHM dosyasına bağlantı" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, fuzzy, no-c-format msgid "Do not open a new CHM file" msgstr "%1 - tıklanan yeni bir CHM dosyasına bağlantı" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, fuzzy, no-c-format msgid "Alt+Q" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, fuzzy, no-c-format msgid "Alt+K" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, fuzzy, no-c-format msgid "Alt+R" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, fuzzy, no-c-format msgid "Alt+J" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, fuzzy, no-c-format msgid "Alt+P" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, fuzzy, no-c-format msgid "Alt+S" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, fuzzy, no-c-format msgid "Alt+X" msgstr "Alt+%1" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "Yer imleri" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, no-c-format msgid "&File" msgstr "" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, no-c-format msgid "&Windows" msgstr "" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, no-c-format msgid "general toolbar" msgstr "" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, no-c-format msgid "navigation toolbar" msgstr "" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, no-c-format msgid "Print" msgstr "" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, fuzzy, no-c-format msgid "Print current page" msgstr "Şimdiki sayfayı kapat" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, fuzzy, no-c-format msgid "Ctrl+P" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, fuzzy, no-c-format msgid "Ctrl+Q" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, fuzzy, no-c-format msgid "Ctrl+C" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, no-c-format msgid "&Select All" msgstr "" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, fuzzy, no-c-format msgid "Ctrl+V" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, fuzzy, no-c-format msgid "Ctrl+F" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, fuzzy, no-c-format msgid "E&xtract CHM content..." msgstr "CHM içeriği açılıyor" #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, fuzzy, no-c-format msgid "Extract the CHM content to the directory" msgstr "CHM içeriği açılıyor" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, no-c-format msgid "&Application settings..." msgstr "" #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, no-c-format msgid "Change the application settings" msgstr "" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, fuzzy, no-c-format msgid "&Add bookmark" msgstr "%1 - yer imi ekle" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, fuzzy, no-c-format msgid "Ctrl+B" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, no-c-format msgid "&Increase font size" msgstr "" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, no-c-format msgid "Increase the font size" msgstr "" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, fuzzy, no-c-format msgid "Ctrl++" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, no-c-format msgid "&Decrease font size" msgstr "" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, no-c-format msgid "Decrease the font size" msgstr "" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, fuzzy, no-c-format msgid "Ctrl+-" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "Şimdiki sayfayı kapat" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, fuzzy, no-c-format msgid "Ctrl+U" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, no-c-format msgid "Enable &full screen mode" msgstr "" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, no-c-format msgid "F11" msgstr "" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, fuzzy, no-c-format msgid "&Locate in contents window" msgstr "İçerik penceresinde açılan başlık bulunamadı" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "İçerik penceresinde açılan başlık bulunamadı" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, fuzzy, no-c-format msgid "Ctrl+" msgstr "Ctrl+Sol" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, no-c-format msgid "Set &encoding" msgstr "" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "Dosya Aç" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "Dosya Aç" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, no-c-format msgid "Navigate back" msgstr "" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, no-c-format msgid "Navigate back in navigation history" msgstr "" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, no-c-format msgid "Navigate forward" msgstr "" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, no-c-format msgid "Navigate forward in navigation history" msgstr "" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, no-c-format msgid "Navigate home" msgstr "" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, no-c-format msgid "Previous page in Table of Context" msgstr "" #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, no-c-format msgid "Previous page in TOC" msgstr "" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "" #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, no-c-format msgid "Next page in Table of Context" msgstr "" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "" #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, no-c-format msgid "&Close window" msgstr "" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "Şimdiki sayfayı kapat" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, fuzzy, no-c-format msgid "Closes currently opened window" msgstr "Şimdiki sayfayı kapat" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, fuzzy, no-c-format msgid "Ctrl+W" msgstr "Ctrl+Sol" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" kchmviewer-7.5/po/PaxHeaders.8614/kchmviewer_zh_CN.po0000644000000000000000000000012412314656223017420 xustar0027 mtime=1395874963.355176 27 atime=1447562193.147734 30 ctime=1447562193.148734348 kchmviewer-7.5/po/kchmviewer_zh_CN.po0000644000175000001440000016031612314656223017757 0ustar00timusers00000000000000# translation of zh_CN.po to # translation of kchmviewer.po to # This file is put in the public domain. # # 林俊 , 2006. # Henry Hu , 2013. msgid "" msgstr "" "Project-Id-Version: zh_CN\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2013-01-12 03:51-0500\n" "PO-Revision-Date: 2013-01-12 04:27-0500\n" "Last-Translator: Henry Hu \n" "Language-Team: Chinese Simplified \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.5\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: dialog_setup.cpp:196 msgid "" "Changing those options requires restarting the application to take effect." msgstr "对这些选项的修改需要重新启动应用程序才能生效。" #: dialog_setup.cpp:205 msgid "*|Executables" msgstr "*|可执行文件" #: dialog_setup.cpp:205 dialog_setup.cpp:208 msgid "Choose an editor executable" msgstr "选择编辑器的可执行文件" #: dialog_setup.cpp:210 msgid "Executables (*)" msgstr "可执行文件 (*)" #: main.cpp:55 msgid "Perform auto testing" msgstr "运行自动测试" #: main.cpp:56 msgid "Perform short auto testing" msgstr "运行较短的自动测试" #: main.cpp:57 msgid "A CHM file to show" msgstr "要显示的 CHM 文件" #: main.cpp:58 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" "'--search ' 用于指定要进行的搜索操作,并且搜索完成后会自动显示找到的一" "个项目" #: main.cpp:59 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "'--sindex ' 指定了要在索引中查找的词语,找到的话会自动显示" #: main.cpp:60 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" "'--stoc ' 指定了要在目录中查找的词语,找到的话会自动显示。可以使用通" "配符。" #: main.cpp:61 msgid "'--url ' specifies the URL to activate if found." msgstr "'--url ' 指定找到后需要激活的 URL" #. i18n: file: mainwindow.ui:14 #. i18n: ectx: property (windowTitle), widget (QMainWindow, MainWindow) #: main.cpp:65 ui_mainwindow.h:302 rc.cpp:192 msgid "kchmviewer" msgstr "kchmviewer" #: main.cpp:67 msgid "CHM file viewer" msgstr "CHM文件查看器" #: main.cpp:69 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" #: main.cpp:70 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "请将问题汇报到 kchmviewer@ulduzsoft.com" #: mainwindow.cpp:178 msgid "Detected file encoding: %1 ( %2 )" msgstr "检测到的文件编码:%1 ( %2 )" #: mainwindow.cpp:246 msgid "%1 - failed to load the chm file" msgstr "%1 - 载入CHM文件失败" #: mainwindow.cpp:247 msgid "Unable to load the chm file %1" msgstr "无法载入CHM文件%1" #: mainwindow.cpp:255 msgid "Could not load file %1" msgstr "无法载入文件%1" #: mainwindow.cpp:320 msgid "%1 - remote link clicked - %2" msgstr "%1 - 点击远程链接 - %2" #: mainwindow.cpp:321 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "%1将使用外部程序来打开远程链接。 \n" "\n" "你要继续吗?" #: mainwindow.cpp:322 mainwindow.cpp:357 msgid "&Yes" msgstr "是(&Y)" #: mainwindow.cpp:322 mainwindow.cpp:357 msgid "&No" msgstr "否(&N)" #: mainwindow.cpp:344 msgid "%1 - JavsScript link clicked" msgstr "%1 - 点击JavaScript链接" #: mainwindow.cpp:345 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "你点击了JavaScript链接。\n" "为了避免安全问题,在CHM文件中不启用JavaScript URLs支持。" #: mainwindow.cpp:355 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - 点击指向新的CHM文件的链接。" #: mainwindow.cpp:356 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "你点击了指向新的CHM文件的链接%1。\n" "现在打开的文件将被关闭。\n" "\n" "你要继续吗?" #: mainwindow.cpp:716 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|压缩的帮助手册 (*.chm)" #: mainwindow.cpp:719 msgid "Open a chm file" msgstr "打开 CHM 文件" #: mainwindow.cpp:721 msgid "Compressed Help Manual (*.chm)" msgstr "压缩的帮助手册 (*.chm)" #: mainwindow.cpp:766 mainwindow.cpp:770 msgid "Choose a directory to store CHM content" msgstr "选择目录来保存 CHM 的内容" #: mainwindow.cpp:784 msgid "Extracting CHM content" msgstr "提取 CHM 的内容" #: mainwindow.cpp:785 msgid "Extracting files..." msgstr "提取文件..." #: mainwindow.cpp:786 msgid "Abort" msgstr "取消" #: mainwindow.cpp:955 msgid "Could not locate opened topic in content window" msgstr "无法在目录窗口定位打开的主题" #: mainwindow.cpp:961 msgid "" "kchmviewer version %1.%2

Copyright (C) George Yunaev, " "2004-2010
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license version 3." msgstr "" "kchmviewer 版本 %1.%2

版权所有 (C) George Yunaev, 2004-2010
" "
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

以 GNU " "GPL 版本3授权。" #. i18n: file: dialog_about.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, DialogAbout) #: mainwindow.cpp:970 ui_dialog_about.h:111 rc.cpp:3 msgid "About kchmviewer" msgstr "关于kchmviewer" #: mainwindow.cpp:1065 msgid "Ctrl+1" msgstr "Ctrl+1" #: mainwindow.cpp:1071 msgid "Ctrl+2" msgstr "Ctrl+2" #: mainwindow.cpp:1077 msgid "Ctrl+3" msgstr "Ctrl+3" #: mainwindow.cpp:1083 msgid "Ctrl+4" msgstr "Ctrl+4" #: mainwindow.cpp:1090 msgid "/" msgstr "/" #: mainwindow.cpp:1097 msgid "F3" msgstr "F3" #: mainwindow.cpp:1104 msgid "Ctrl+Right" msgstr "Ctrl+右" #: mainwindow.cpp:1111 msgid "Ctrl+Left" msgstr "Ctrl+左" #: mainwindow.cpp:1196 msgid "%1 ( %2 )" msgstr "%1 ( %2 )" #: navigationpanel.cpp:43 msgid "Search" msgstr "搜索" #: navigationpanel.cpp:46 msgid "Bookmarks" msgstr "书签" #: navigationpanel.cpp:86 msgid "Index" msgstr "索引" #: navigationpanel.cpp:92 msgid "Contents" msgstr "内容" #: tab_bookmarks.cpp:120 msgid "%1 - add a bookmark" msgstr "%1 - 添加书签" #: tab_bookmarks.cpp:121 tab_bookmarks.cpp:163 msgid "Enter the name for this bookmark:" msgstr "输入书签的名称" #: tab_bookmarks.cpp:162 msgid "%1 - edit the bookmark name" msgstr "%1 - 编辑书签名称" #: tab_search.cpp:153 msgid "Search returned %1 result(s)" msgstr "搜索返回 %1 个结果" #: tab_search.cpp:156 msgid "Search returned no results" msgstr "搜索没有返回结果" #: tab_search.cpp:159 msgid "Search failed" msgstr "搜索失败" #: tab_search.cpp:192 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" "

改进了的搜索引擎使你可以搜索词语,符号,以及短语,其中短语指以引号扩" "起来的一组词语以及符号。只有包含查询中所有项目的文档才会被显示出来;不需要指" "定前缀。

不像 MS CHM 的内部索引,我的改进过的搜索引擎索引所有内容,包括特殊" "符号。因此你可以搜索(并且找到!)类似于$q = new ChmFile();这样的内容。" "搜索功能也支持 Unicode,因此你可以在非英语文档中搜索。

如果你想搜索双引号" "(\"),你可以搜索单引号(')。引擎将单引号和双引号视作同一个符号,因此它们可以被" "用在查询中。" #: tab_search.cpp:209 msgid "Reading dictionary..." msgstr "读取词典中..." #: tab_search.cpp:223 tab_search.cpp:224 msgid "Generating search index..." msgstr "生成搜索索引..." #. i18n: file: dialog_about.ui:46 #. i18n: ectx: property (text), widget (QLabel, lblAbout) #: ui_dialog_about.h:113 rc.cpp:9 msgid "About text" msgstr "关于文本" #. i18n: file: dialog_about.ui:24 #. i18n: ectx: attribute (title), widget (QWidget, tab) #: ui_dialog_about.h:114 rc.cpp:6 msgid "About appplication" msgstr "关于应用程序" #. i18n: file: dialog_about.ui:75 #. i18n: ectx: property (text), widget (QLabel, label_2) #: ui_dialog_about.h:115 rc.cpp:15 msgid "" "\n" "\n" "

I would like to thank:

\n" "

\n" "

- Trolltech (now Nokia) for Qt library;

\n" "

- Dryicons for nice free icons;

\n" "

- Jed " "Wing, the author of chmlib.

\n" "

- Razvan " "Cojocaru, the author of xchm.

\n" "

- Peter " "Volkov for significant QA (more than 20 reported bugs!)

\n" "

- And of " "course everyone, who report bugs, " "and suggest features.

\n" "

" msgstr "" "\n" "\n" "

我希望感谢:

\n" "

\n" "

- Trolltech (现在的 Nokia) 提供了 Qt 库;

\n" "

- Dryicons 提供了精美的免费图标;

\n" "

- Jed " "Wing,chmlib 的作者。

\n" "

- Razvan " "Cojocaru,xchm 的作者。

\n" "

- Peter " "Volkov 强大的质量控制 (报告了超过20个问题!)

\n" "

- 以及当然了, " "汇报问题,建议新功能的 所有人

\n" "

" #. i18n: file: dialog_about.ui:57 #. i18n: ectx: attribute (title), widget (QWidget, tab_2) #: ui_dialog_about.h:130 rc.cpp:12 msgid "Thanks" msgstr "感谢" #. i18n: file: dialog_setup.ui:20 #. i18n: ectx: property (windowTitle), widget (QDialog, DialogSetup) #: ui_dialog_setup.h:463 rc.cpp:30 msgid "KchmViewer settings" msgstr "KchmViewer设置" #. i18n: file: dialog_setup.ui:62 #. i18n: ectx: property (title), widget (QGroupBox, buttonGroup1) #: ui_dialog_setup.h:464 rc.cpp:36 msgid "If started with no arguments" msgstr "如果启动时没有指定参数" #. i18n: file: dialog_setup.ui:74 #. i18n: ectx: property (text), widget (QRadioButton, rbStartWithNothing) #: ui_dialog_setup.h:465 rc.cpp:39 msgid "Start with nothing loaded" msgstr "启动时不载入任何文档" #. i18n: file: dialog_setup.ui:81 #. i18n: ectx: property (text), widget (QRadioButton, m_radioOnBeginOpenDialog) #: ui_dialog_setup.h:466 rc.cpp:42 msgid "Pop up the \"open file\" dialog" msgstr "弹出 “打开CHM文件” 对话框" #. i18n: file: dialog_setup.ui:88 #. i18n: ectx: property (text), widget (QRadioButton, m_radioOnBeginOpenLast) #: ui_dialog_setup.h:467 rc.cpp:45 msgid "Open the &last used CHM file, if exist" msgstr "如果存在,打开最后使用的CHM文件(&L)" #. i18n: file: dialog_setup.ui:91 #. i18n: ectx: property (shortcut), widget (QRadioButton, m_radioOnBeginOpenLast) #: ui_dialog_setup.h:468 rc.cpp:48 msgid "Alt+L" msgstr "Alt+L" #. i18n: file: dialog_setup.ui:101 #. i18n: ectx: property (title), widget (QGroupBox, buttonGroup2) #: ui_dialog_setup.h:469 rc.cpp:51 msgid "History" msgstr "历史" #. i18n: file: dialog_setup.ui:121 #. i18n: ectx: property (text), widget (QLabel, textLabel1) #: ui_dialog_setup.h:470 rc.cpp:54 msgid "Store history information for" msgstr "保存历史信息" #. i18n: file: dialog_setup.ui:141 #. i18n: ectx: property (text), widget (QLabel, textLabel2) #: ui_dialog_setup.h:472 rc.cpp:57 msgid "latest files" msgstr "最近使用的文件" #. i18n: file: dialog_setup.ui:153 #. i18n: ectx: property (toolTip), widget (QCheckBox, m_rememberHistoryInfo) #: ui_dialog_setup.h:474 rc.cpp:60 msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "记录曾经打开的文件的相关信息。 记录最后打开的页面,搜索记录,字体大小,书签等" "信息。" #. i18n: file: dialog_setup.ui:156 #. i18n: ectx: property (text), widget (QCheckBox, m_rememberHistoryInfo) #: ui_dialog_setup.h:476 rc.cpp:63 msgid "R&emember extra information for history files" msgstr "记录历史中文件的额外信息(&E)" #. i18n: file: dialog_setup.ui:159 #. i18n: ectx: property (shortcut), widget (QCheckBox, m_rememberHistoryInfo) #: ui_dialog_setup.h:477 rc.cpp:66 msgid "Alt+E" msgstr "Alt+E" #. i18n: file: dialog_setup.ui:171 #. i18n: ectx: property (title), widget (QGroupBox, groupBox1) #: ui_dialog_setup.h:478 rc.cpp:69 msgid "CHM security settings" msgstr "CHM 安全设置" #. i18n: file: dialog_setup.ui:183 #. i18n: ectx: property (title), widget (QGroupBox, buttonGroup4) #: ui_dialog_setup.h:479 rc.cpp:72 msgid "When external link clicked" msgstr "当点击外部链接时" #. i18n: file: dialog_setup.ui:195 #. i18n: ectx: property (text), widget (QRadioButton, m_radioExtLinkOpenAlways) #: ui_dialog_setup.h:480 rc.cpp:75 msgid "Alwa&ys open it in external browser" msgstr "总在外部浏览器中打开(&Y)" #. i18n: file: dialog_setup.ui:198 #. i18n: ectx: property (shortcut), widget (QRadioButton, m_radioExtLinkOpenAlways) #: ui_dialog_setup.h:481 rc.cpp:78 msgid "Alt+Y" msgstr "Alt+Y" #. i18n: file: dialog_setup.ui:205 #. i18n: ectx: property (text), widget (QRadioButton, m_radioExtLinkAsk) #. i18n: file: dialog_setup.ui:244 #. i18n: ectx: property (text), widget (QRadioButton, m_radioNewChmAsk) #: ui_dialog_setup.h:482 ui_dialog_setup.h:487 rc.cpp:81 rc.cpp:93 msgid "Ask for confirmation" msgstr "请求确认" #. i18n: file: dialog_setup.ui:212 #. i18n: ectx: property (text), widget (QRadioButton, m_radioExtLinkOpenNever) #: ui_dialog_setup.h:483 rc.cpp:84 msgid "Do not open the link" msgstr "不打开链接" #. i18n: file: dialog_setup.ui:225 #. i18n: ectx: property (title), widget (QGroupBox, buttonGroup5) #: ui_dialog_setup.h:485 rc.cpp:87 msgid "When link pointed to a new CHM file clicked" msgstr "当点击指向新的CHM文件的链接时" #. i18n: file: dialog_setup.ui:237 #. i18n: ectx: property (text), widget (QRadioButton, m_radioNewChmOpenAlways) #: ui_dialog_setup.h:486 rc.cpp:90 msgid "Always open a new CHM file" msgstr "总打开新的CHM文件" #. i18n: file: dialog_setup.ui:251 #. i18n: ectx: property (text), widget (QRadioButton, m_radioNewChmOpenNever) #: ui_dialog_setup.h:488 rc.cpp:96 msgid "Do not open a new CHM file" msgstr "不打开新的CHM文件" #. i18n: file: dialog_setup.ui:42 #. i18n: ectx: attribute (title), widget (QWidget, Widget8) #: ui_dialog_setup.h:489 rc.cpp:33 msgid "General behavior" msgstr "通用行为" #. i18n: file: dialog_setup.ui:290 #. i18n: ectx: property (title), widget (QGroupBox, m_groupKDEsettings) #: ui_dialog_setup.h:490 rc.cpp:102 msgid "HTML browser settings" msgstr "HTML 浏览器设置" #. i18n: file: dialog_setup.ui:296 #. i18n: ectx: property (text), widget (QCheckBox, m_enableImages) #: ui_dialog_setup.h:491 rc.cpp:105 msgid "Load the &images" msgstr "载入图像(&I)" #. i18n: file: dialog_setup.ui:303 #. i18n: ectx: property (text), widget (QCheckBox, m_enablePlugins) #: ui_dialog_setup.h:492 rc.cpp:108 msgid "Enable browser &plugins (i.e. Flash)" msgstr "启用浏览器插件(例如Flash)(&P)" #. i18n: file: dialog_setup.ui:306 #. i18n: ectx: property (shortcut), widget (QCheckBox, m_enablePlugins) #: ui_dialog_setup.h:493 rc.cpp:111 msgid "Alt+P" msgstr "Alt+P" #. i18n: file: dialog_setup.ui:313 #. i18n: ectx: property (text), widget (QCheckBox, m_enableJava) #: ui_dialog_setup.h:494 rc.cpp:114 msgid "Enable &Java" msgstr "启用Java(&J)" #. i18n: file: dialog_setup.ui:316 #. i18n: ectx: property (shortcut), widget (QCheckBox, m_enableJava) #: ui_dialog_setup.h:495 rc.cpp:117 msgid "Alt+J" msgstr "Alt+J" #. i18n: file: dialog_setup.ui:323 #. i18n: ectx: property (text), widget (QCheckBox, m_enableJS) #: ui_dialog_setup.h:496 rc.cpp:120 msgid "Enable Java&Script" msgstr "启用JavaScript(&S)" #. i18n: file: dialog_setup.ui:326 #. i18n: ectx: property (shortcut), widget (QCheckBox, m_enableJS) #: ui_dialog_setup.h:497 rc.cpp:123 msgid "Alt+S" msgstr "Alt+S" #. i18n: file: dialog_setup.ui:333 #. i18n: ectx: property (text), widget (QCheckBox, m_enableOfflineStorage) #: ui_dialog_setup.h:498 rc.cpp:126 msgid "Enable &offline storage (HTML5)" msgstr "启用离线存储(HTML5)(&O)" #. i18n: file: dialog_setup.ui:336 #. i18n: ectx: property (shortcut), widget (QCheckBox, m_enableOfflineStorage) #: ui_dialog_setup.h:499 rc.cpp:129 msgid "Alt+R" msgstr "Alt+R" #. i18n: file: dialog_setup.ui:343 #. i18n: ectx: property (text), widget (QCheckBox, m_enableLocalStorage) #: ui_dialog_setup.h:500 rc.cpp:132 msgid "Enable &local storage (HTML5)" msgstr "启用本地存储(HTML5)(&L)" #. i18n: file: dialog_setup.ui:278 #. i18n: ectx: attribute (title), widget (QWidget, Widget9) #: ui_dialog_setup.h:501 rc.cpp:99 msgid "Browser" msgstr "浏览器" #. i18n: file: dialog_setup.ui:373 #. i18n: ectx: property (title), widget (QGroupBox, buttonGroup7) #: ui_dialog_setup.h:502 rc.cpp:138 msgid "View HTML source command uses" msgstr "查看HTML源码使用" #. i18n: file: dialog_setup.ui:385 #. i18n: ectx: property (text), widget (QRadioButton, m_advViewSourceInternal) #: ui_dialog_setup.h:503 rc.cpp:141 msgid "Built-in HTML source viewer" msgstr "内建HTML源码查看器" #. i18n: file: dialog_setup.ui:395 #. i18n: ectx: property (text), widget (QRadioButton, m_advViewSourceExternal) #: ui_dialog_setup.h:505 rc.cpp:144 msgid "E&xternal program, specified below" msgstr "外部程序,在下面指定(&X)" #. i18n: file: dialog_setup.ui:398 #. i18n: ectx: property (shortcut), widget (QRadioButton, m_advViewSourceExternal) #: ui_dialog_setup.h:506 rc.cpp:147 msgid "Alt+X" msgstr "Alt+X" #. i18n: file: dialog_setup.ui:413 #. i18n: ectx: property (text), widget (QLabel, textLabel1_3) #: ui_dialog_setup.h:507 rc.cpp:150 msgid "External program:" msgstr "外部程序:" #. i18n: file: dialog_setup.ui:426 #. i18n: ectx: property (text), widget (QPushButton, btnBrowse) #: ui_dialog_setup.h:508 rc.cpp:153 msgid "&Browse" msgstr "浏览(&B)" #. i18n: file: dialog_setup.ui:438 #. i18n: ectx: property (title), widget (QGroupBox, groupBox) #: ui_dialog_setup.h:509 rc.cpp:156 msgid "Other" msgstr "其他" #. i18n: file: dialog_setup.ui:444 #. i18n: ectx: property (text), widget (QCheckBox, boxLayoutDirectionRL) #: ui_dialog_setup.h:510 rc.cpp:159 msgid "Use right-to-left layout direction (Arabic and Hebrew layouts)" msgstr "使用从右向左排版方向 (阿拉伯以及希伯来版式)" #. i18n: file: dialog_setup.ui:451 #. i18n: ectx: property (text), widget (QCheckBox, boxAutodetectEncoding) #: ui_dialog_setup.h:511 rc.cpp:162 msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "对于 KHTMLPart 以及 WebKit 浏览器,自动检测编码(不推荐)" #. i18n: file: dialog_setup.ui:458 #. i18n: ectx: property (whatsThis), widget (QCheckBox, cbCheckForUpdates) #: ui_dialog_setup.h:513 rc.cpp:165 msgid "" "If this option is enabled, the application will check for updates (when new " "version of application is released). If a new version is available, the " "program will show a messagebox dialog informing you about new version. This " "check will only performed once in 24 hours. No user information is requested " "or transmitted from your computer during this check." msgstr "" "如果打开这个选项,应用程序会自动检查更新(当新版本应用程序发布时)。如果有新版本可用," "程序会向你显示一个消息对话框,提醒你有新版本了。这个检查在24小时内只会进行一次。" "在这个检查过程中不会有任何用户信息被请求或者传输。" #. i18n: file: dialog_setup.ui:461 #. i18n: ectx: property (text), widget (QCheckBox, cbCheckForUpdates) #: ui_dialog_setup.h:515 rc.cpp:168 msgid "Perform a check whether a new version is available (once a week)" msgstr "检查是否有新版本可用(每周一次)" #. i18n: file: dialog_setup.ui:471 #. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) #: ui_dialog_setup.h:516 rc.cpp:171 msgid "Toolbars" msgstr "工具栏" #. i18n: file: dialog_setup.ui:477 #. i18n: ectx: property (text), widget (QRadioButton, rbToolbarSmall) #: ui_dialog_setup.h:517 rc.cpp:174 msgid "Small icons" msgstr "小图标" #. i18n: file: dialog_setup.ui:484 #. i18n: ectx: property (text), widget (QRadioButton, rbToolbarLarge) #: ui_dialog_setup.h:518 rc.cpp:177 msgid "Large icons" msgstr "大图标" #. i18n: file: dialog_setup.ui:491 #. i18n: ectx: property (text), widget (QRadioButton, rbToolbarLargeText) #: ui_dialog_setup.h:519 rc.cpp:180 msgid "Large icons and text" msgstr "带文字的大图标" #. i18n: file: dialog_setup.ui:498 #. i18n: ectx: property (text), widget (QRadioButton, rbToolbarText) #: ui_dialog_setup.h:520 rc.cpp:183 msgid "Just text" msgstr "只有文字" #. i18n: file: dialog_setup.ui:367 #. i18n: ectx: attribute (title), widget (QWidget, TabPage) #: ui_dialog_setup.h:521 rc.cpp:135 msgid "Advanced" msgstr "高级" #. i18n: file: dialog_topicselector.ui:13 #. i18n: ectx: property (windowTitle), widget (QDialog, DialogTopicSelector) #: ui_dialog_topicselector.h:74 rc.cpp:186 msgid "Multiple topics" msgstr "多个主题" #. i18n: file: dialog_topicselector.ui:25 #. i18n: ectx: property (text), widget (QLabel, label) #: ui_dialog_topicselector.h:75 rc.cpp:189 msgid "Please select the topic to open:" msgstr "请选取要打开的主题:" #. i18n: file: mainwindow.ui:186 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:303 rc.cpp:225 msgid "&Print..." msgstr "打印...(&P)" #. i18n: file: mainwindow.ui:189 #. i18n: ectx: property (iconText), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:304 rc.cpp:228 msgid "Print" msgstr "打印" #. i18n: file: mainwindow.ui:192 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:306 rc.cpp:231 msgid "Print current page" msgstr "打印当前页" #. i18n: file: mainwindow.ui:195 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:309 rc.cpp:234 msgid "Prints currently opened page." msgstr "打印现在打开的页面。" #. i18n: file: mainwindow.ui:198 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:311 rc.cpp:237 msgid "Ctrl+P" msgstr "Ctrl+P" #. i18n: file: mainwindow.ui:207 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:312 rc.cpp:240 msgid "&Quit" msgstr "退出(&Q)" #. i18n: file: mainwindow.ui:210 #. i18n: ectx: property (iconText), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:313 rc.cpp:243 msgid "Exit" msgstr "退出" #. i18n: file: mainwindow.ui:213 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:315 rc.cpp:246 msgid "Exits the application" msgstr "退出应用程序" #. i18n: file: mainwindow.ui:216 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:317 rc.cpp:249 msgid "Ctrl+Q" msgstr "Ctrl+Q" #. i18n: file: mainwindow.ui:225 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:318 rc.cpp:252 msgid "C&opy" msgstr "复制(&C)" #. i18n: file: mainwindow.ui:228 #. i18n: ectx: property (iconText), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:319 rc.cpp:255 msgid "Copy" msgstr "复制" #. i18n: file: mainwindow.ui:231 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:321 rc.cpp:258 msgid "Copies selected content to clipboard" msgstr "将选中的内容复制到剪贴板" #. i18n: file: mainwindow.ui:234 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:323 rc.cpp:261 msgid "Ctrl+C" msgstr "Ctrl+C" #. i18n: file: mainwindow.ui:243 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:324 rc.cpp:264 msgid "&Select All" msgstr "选择全部(&S)" #. i18n: file: mainwindow.ui:246 #. i18n: ectx: property (iconText), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:325 rc.cpp:267 msgid "Paste" msgstr "粘帖" #. i18n: file: mainwindow.ui:249 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:327 rc.cpp:270 msgid "Selects everything in the document" msgstr "选中文档中的所有内容" #. i18n: file: mainwindow.ui:252 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:329 rc.cpp:273 msgid "Ctrl+V" msgstr "Ctrl+V" #. i18n: file: mainwindow.ui:261 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:330 rc.cpp:276 msgid "&Find..." msgstr "查找...(&F)" #. i18n: file: mainwindow.ui:264 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:332 rc.cpp:279 msgid "Find text in currently opened page" msgstr "在当前打开的页面中查找文本" #. i18n: file: mainwindow.ui:267 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:335 rc.cpp:282 msgid "Enters the Find in page mode" msgstr "进入“在页面中查找”模式" #. i18n: file: mainwindow.ui:270 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:337 rc.cpp:285 msgid "Ctrl+F" msgstr "Ctrl+F" #. i18n: file: mainwindow.ui:279 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:338 rc.cpp:288 msgid "E&xtract CHM content..." msgstr "提取CHM内容(&X)" #. i18n: file: mainwindow.ui:282 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:340 rc.cpp:291 msgid "Extract the CHM content to the directory" msgstr "将 CHM 的内容提取到目录中" #. i18n: file: mainwindow.ui:285 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:343 rc.cpp:294 msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "将 CHM 存档中的内容提取到指定的目录中。所有的文件都会被提取出来。" #. i18n: file: mainwindow.ui:294 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:345 rc.cpp:297 msgid "&Application settings..." msgstr "应用程序设置...(&A)" #. i18n: file: mainwindow.ui:297 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #. i18n: file: mainwindow.ui:300 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:347 ui_mainwindow.h:350 rc.cpp:300 rc.cpp:303 msgid "Change the application settings" msgstr "更改应用程序设置" #. i18n: file: mainwindow.ui:309 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:352 rc.cpp:306 msgid "&Add bookmark" msgstr "添加书签(&A)" #. i18n: file: mainwindow.ui:312 #. i18n: ectx: property (iconText), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:353 rc.cpp:309 msgid "Bookmark" msgstr "书签" #. i18n: file: mainwindow.ui:315 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:355 rc.cpp:312 msgid "Adds a bookmark for currently opened page" msgstr "把当前打开的页面加为书签" #. i18n: file: mainwindow.ui:318 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:358 rc.cpp:315 msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" "将当前打开的页面添加为书签。记录打开的页面以及在页面中的位置。书签可以通过书" "签菜单以及书签分页访问。" #. i18n: file: mainwindow.ui:321 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:360 rc.cpp:318 msgid "Ctrl+B" msgstr "Ctrl+B" #. i18n: file: mainwindow.ui:330 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:361 rc.cpp:321 msgid "&Increase font size" msgstr "增大字体大小(&I)" #. i18n: file: mainwindow.ui:333 #. i18n: ectx: property (iconText), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:362 rc.cpp:324 msgid "Larger" msgstr "更大" #. i18n: file: mainwindow.ui:336 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:364 rc.cpp:327 msgid "Increase the font size" msgstr "增大字体大小" #. i18n: file: mainwindow.ui:339 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:367 rc.cpp:330 msgid "Increases the document font size. The new font size will be stored." msgstr "增加文档的字体大小。新的字体大小会被保存。" #. i18n: file: mainwindow.ui:342 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:369 rc.cpp:333 msgid "Ctrl+=" msgstr "Ctrl+=" #. i18n: file: mainwindow.ui:351 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:370 rc.cpp:336 msgid "&Decrease font size" msgstr "缩小字体大小(&D)" #. i18n: file: mainwindow.ui:354 #. i18n: ectx: property (iconText), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:371 rc.cpp:339 msgid "Smaller" msgstr "更小" #. i18n: file: mainwindow.ui:357 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:373 rc.cpp:342 msgid "Decrease the font size" msgstr "缩小字体大小" #. i18n: file: mainwindow.ui:360 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:376 rc.cpp:345 msgid "Decreases the document font size. The new font size will be stored." msgstr "缩小文档的字体大小。新的字体大小会被保存。" #. i18n: file: mainwindow.ui:363 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:378 rc.cpp:348 msgid "Ctrl+-" msgstr "Ctrl+-" #. i18n: file: mainwindow.ui:372 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:379 rc.cpp:351 msgid "See &HTML" msgstr "查看 &HTML" #. i18n: file: mainwindow.ui:375 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:381 rc.cpp:354 msgid "View HTML source of current page" msgstr "查看当前页面的 HTML 源码" #. i18n: file: mainwindow.ui:378 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:384 rc.cpp:357 msgid "Shows the HTML source of currently opened page" msgstr "显示当前页面的 HTML 源码" #. i18n: file: mainwindow.ui:381 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:386 rc.cpp:360 msgid "Ctrl+U" msgstr "Ctrl+U" #. i18n: file: mainwindow.ui:393 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:387 rc.cpp:363 msgid "Enable &full screen mode" msgstr "进入全屏模式(&F)" #. i18n: file: mainwindow.ui:396 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:389 rc.cpp:366 msgid "Enters or leaves the fullscreen mode" msgstr "进入或退出全屏模式" #. i18n: file: mainwindow.ui:399 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:391 rc.cpp:369 msgid "F11" msgstr "F11" #. i18n: file: mainwindow.ui:417 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:392 rc.cpp:372 msgid "Show &navigator window" msgstr "显示导航栏(&N)" #. i18n: file: mainwindow.ui:420 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:394 rc.cpp:375 msgid "Show navigator dock window" msgstr "显示导航侧边栏" #. i18n: file: mainwindow.ui:423 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:397 rc.cpp:378 msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "显示或隐藏侧边栏(包含内容,索引,搜索和书签分页)" #. i18n: file: mainwindow.ui:426 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:399 rc.cpp:381 msgid "F9" msgstr "F9" #. i18n: file: mainwindow.ui:438 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:400 rc.cpp:384 msgid "&Locate" msgstr "定位(&L)" #. i18n: file: mainwindow.ui:441 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:402 rc.cpp:387 msgid "Locate the current page in contents window" msgstr "在内容窗口中定位当前页" #. i18n: file: mainwindow.ui:444 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:405 rc.cpp:390 msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "如果目录中存在当前页,那定位到这页。" #. i18n: file: mainwindow.ui:447 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:407 rc.cpp:393 msgid "Ctrl+L" msgstr "Ctrl+L" #. i18n: file: mainwindow.ui:456 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:408 rc.cpp:396 msgid "Set &encoding" msgstr "设置编码(&E)" #. i18n: file: mainwindow.ui:459 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:410 rc.cpp:399 msgid "Changes the current document encoding. " msgstr "改变当前文档的编码。" #. i18n: file: mainwindow.ui:468 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:412 rc.cpp:402 msgid "&Open..." msgstr "打开...(&O)" #. i18n: file: mainwindow.ui:471 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:414 rc.cpp:405 msgid "Open a CHM file" msgstr "打开 CHM 文件" #. i18n: file: mainwindow.ui:474 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:417 rc.cpp:408 msgid "Opens a new CHM file" msgstr "打开一个新的 CHM 文件" #. i18n: file: mainwindow.ui:483 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:419 rc.cpp:411 msgid "Back" msgstr "后退" #. i18n: file: mainwindow.ui:486 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:421 rc.cpp:414 msgid "Navigate back" msgstr "后退" #. i18n: file: mainwindow.ui:489 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:424 rc.cpp:417 msgid "Navigate back in navigation history" msgstr "在导航历史中后退" #. i18n: file: mainwindow.ui:498 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:426 rc.cpp:420 msgid "Forward" msgstr "前进" #. i18n: file: mainwindow.ui:501 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:428 rc.cpp:423 msgid "Navigate forward" msgstr "前进" #. i18n: file: mainwindow.ui:504 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:431 rc.cpp:426 msgid "Navigate forward in navigation history" msgstr "在导航历史中前进" #. i18n: file: mainwindow.ui:513 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:433 rc.cpp:429 msgid "Home" msgstr "主页" #. i18n: file: mainwindow.ui:516 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:435 rc.cpp:432 msgid "Navigate home" msgstr "导航到主页" #. i18n: file: mainwindow.ui:519 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:438 rc.cpp:435 msgid "Navigate to the document Home page, as specified in the document." msgstr "导航到文档所指定的主页。" #. i18n: file: mainwindow.ui:528 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #. i18n: file: window_browser.ui:90 #. i18n: ectx: property (text), widget (QToolButton, toolPrevious) #: ui_mainwindow.h:440 ui_window_browser.h:169 rc.cpp:438 rc.cpp:544 msgid "Previous" msgstr "上一页" #. i18n: file: mainwindow.ui:531 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:442 rc.cpp:441 msgid "Go to the previous page in the Table of Contents" msgstr "翻到目录中的上一页" #. i18n: file: mainwindow.ui:534 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:445 rc.cpp:444 msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "翻到目录中的上一页快捷键:Ctrl+左" #. i18n: file: mainwindow.ui:543 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #. i18n: file: window_browser.ui:113 #. i18n: ectx: property (text), widget (QToolButton, toolNext) #: ui_mainwindow.h:447 ui_window_browser.h:170 rc.cpp:447 rc.cpp:547 msgid "Next" msgstr "下一页" #. i18n: file: mainwindow.ui:546 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:449 rc.cpp:450 msgid "Go to the next page in the Table of Contents" msgstr "翻到目录中的下一页" #. i18n: file: mainwindow.ui:549 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:452 rc.cpp:453 msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "翻到目录中的下一页快捷键:Ctrl+右" #. i18n: file: mainwindow.ui:558 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:454 rc.cpp:456 msgid "&Close window" msgstr "关闭窗口(&C)" #. i18n: file: mainwindow.ui:561 #. i18n: ectx: property (toolTip), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:456 rc.cpp:459 msgid "Close current window" msgstr "关闭当前窗口" #. i18n: file: mainwindow.ui:564 #. i18n: ectx: property (whatsThis), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:459 rc.cpp:462 msgid "Closes currently opened window" msgstr "关闭当前打开的窗口" #. i18n: file: mainwindow.ui:567 #. i18n: ectx: property (shortcut), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:461 rc.cpp:465 msgid "Ctrl+W" msgstr "Ctrl+W" #. i18n: file: mainwindow.ui:572 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:462 rc.cpp:468 msgid "About kchmviewer..." msgstr "关于 kchmviewer..." #. i18n: file: mainwindow.ui:577 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:463 rc.cpp:471 msgid "About Qt" msgstr "关于QT" #. i18n: file: mainwindow.ui:586 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:464 rc.cpp:474 msgid "Check for updates" msgstr "检查更新" #. i18n: file: mainwindow.ui:595 #. i18n: ectx: property (text), widget (QStatusBar, mainStatusBar) #: ui_mainwindow.h:465 rc.cpp:477 msgid "Edit toolbars..." msgstr "编辑工具栏..." #. i18n: file: mainwindow.ui:28 #. i18n: ectx: property (title), widget (QMenu, menu_Settings) #: ui_mainwindow.h:466 rc.cpp:195 msgid "&Settings" msgstr "设置(&S)" #. i18n: file: mainwindow.ui:37 #. i18n: ectx: property (title), widget (QMenu, menu_Bookmarks) #: ui_mainwindow.h:467 rc.cpp:198 msgid "&Bookmarks" msgstr "书签(&B)" #. i18n: file: mainwindow.ui:44 #. i18n: ectx: property (title), widget (QMenu, menu_File) #: ui_mainwindow.h:468 rc.cpp:201 msgid "&File" msgstr "文件(&F)" #. i18n: file: mainwindow.ui:55 #. i18n: ectx: property (title), widget (QMenu, menu_Edit) #: ui_mainwindow.h:469 rc.cpp:204 msgid "&Edit" msgstr "编辑(E)" #. i18n: file: mainwindow.ui:64 #. i18n: ectx: property (title), widget (QMenu, menu_View) #: ui_mainwindow.h:470 rc.cpp:207 msgid "&View" msgstr "查看(&V)" #. i18n: file: mainwindow.ui:78 #. i18n: ectx: property (title), widget (QMenu, menu_Windows) #: ui_mainwindow.h:471 rc.cpp:210 msgid "&Windows" msgstr "窗口(&W)" #. i18n: file: mainwindow.ui:85 #. i18n: ectx: property (title), widget (QMenu, menuHelp) #: ui_mainwindow.h:472 rc.cpp:213 msgid "Help" msgstr "帮助" #. i18n: file: mainwindow.ui:100 #. i18n: ectx: property (windowTitle), widget (QToolBar, mainToolbar) #: ui_mainwindow.h:473 rc.cpp:216 msgid "General toolbar" msgstr "一般工具栏" #. i18n: file: mainwindow.ui:125 #. i18n: ectx: property (windowTitle), widget (QToolBar, navToolbar) #: ui_mainwindow.h:474 rc.cpp:219 msgid "Navigation toolbar" msgstr "导航工具栏" #. i18n: file: mainwindow.ui:151 #. i18n: ectx: property (windowTitle), widget (QToolBar, viewToolbar) #: ui_mainwindow.h:475 rc.cpp:222 msgid "View toolbar" msgstr "查看工具栏" #. i18n: file: navigatorpanel.ui:17 #. i18n: ectx: property (windowTitle), widget (QDockWidget, NavigatorPanel) #: ui_navigatorpanel.h:66 rc.cpp:480 msgid "Navigator panel" msgstr "导航栏" #. i18n: file: navigatorpanel.ui:28 #. i18n: ectx: attribute (title), widget (QWidget, tab) #: ui_navigatorpanel.h:67 rc.cpp:483 msgid "Tab 1" msgstr "标签页1" #. i18n: file: tab_bookmarks.ui:36 #. i18n: ectx: property (text), widget (QPushButton, btnAdd) #: ui_tab_bookmarks.h:84 rc.cpp:486 msgid "&Add" msgstr "添加(&A)" #. i18n: file: tab_bookmarks.ui:43 #. i18n: ectx: property (text), widget (QPushButton, btnEdit) #: ui_tab_bookmarks.h:85 rc.cpp:489 msgid "Edi&t" msgstr "编辑(&E)" #. i18n: file: tab_bookmarks.ui:50 #. i18n: ectx: property (text), widget (QPushButton, btnDel) #: ui_tab_bookmarks.h:86 rc.cpp:492 msgid "&Del" msgstr "删除(&D)" #. i18n: file: tab_contents.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, TabContents) #. i18n: file: tab_index.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, TabIndex) #. i18n: file: tab_search.ui:13 #. i18n: ectx: property (windowTitle), widget (QWidget, TabSearch) #: ui_tab_contents.h:55 ui_tab_index.h:66 ui_tab_search.h:117 rc.cpp:495 #: rc.cpp:498 rc.cpp:504 msgid "Form1" msgstr "表1" #. i18n: file: tab_index.ui:41 #. i18n: ectx: property (text), widget (QTreeWidget, tree) #: ui_tab_index.h:68 rc.cpp:501 msgid "1" msgstr "1" #. i18n: file: tab_search.ui:33 #. i18n: ectx: property (text), widget (QLabel, label) #: ui_tab_search.h:118 rc.cpp:507 msgid "Type in word(s) to search for:" msgstr "输入要搜索的词:" #. i18n: file: tab_search.ui:48 #. i18n: ectx: property (text), widget (QLabel, lblHelp) #: ui_tab_search.h:119 rc.cpp:510 msgid "Help" msgstr "帮助" #. i18n: file: tab_search.ui:86 #. i18n: ectx: property (text), widget (QPushButton, btnGo) #: ui_tab_search.h:120 rc.cpp:513 msgid "&Go" msgstr "搜索(&G)" #. i18n: file: tab_search.ui:116 #. i18n: ectx: property (text), widget (QTreeWidget, tree) #: ui_tab_search.h:122 rc.cpp:519 msgid "Location" msgstr "位置" #. i18n: file: tab_search.ui:111 #. i18n: ectx: property (text), widget (QTreeWidget, tree) #: ui_tab_search.h:123 rc.cpp:516 msgid "Title" msgstr "标题" #. i18n: file: toolbareditor.ui:14 #. i18n: ectx: property (windowTitle), widget (QDialog, ToolbarEditor) #: ui_toolbareditor.h:142 rc.cpp:522 msgid "Dialog" msgstr "对话框" #. i18n: file: toolbareditor.ui:20 #. i18n: ectx: property (title), widget (QGroupBox, groupEditToolbars) #: ui_toolbareditor.h:143 rc.cpp:525 msgid "Select a toolbar" msgstr "选择一个工具栏" #. i18n: file: toolbareditor.ui:26 #. i18n: ectx: property (text), widget (QLabel, label) #: ui_toolbareditor.h:144 rc.cpp:528 msgid "Editing the toolbar " msgstr "编辑工具栏" #. i18n: file: toolbareditor.ui:47 #. i18n: ectx: property (text), widget (QLabel, label_2) #: ui_toolbareditor.h:145 rc.cpp:531 msgid "" "Drag the actions to the toolbar list to add them to the toolbar. \n" "Drag them from toolbar list to remove them from the toolbar." msgstr "" "将操作拖到工具栏操作列表可将其加入工具栏。\n" "从工具栏操作列表将它们拖走可将其从工具栏移除。" #. i18n: file: toolbareditor.ui:65 #. i18n: ectx: property (title), widget (QGroupBox, groupBox) #: ui_toolbareditor.h:147 rc.cpp:535 msgid "Available actions" msgstr "可用操作列表" #. i18n: file: toolbareditor.ui:90 #. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) #: ui_toolbareditor.h:148 rc.cpp:538 msgid "Toolbar actions" msgstr "工具栏操作列表" #. i18n: file: window_browser.ui:36 #. i18n: ectx: property (windowTitle), widget (QWidget, TabbedBrowser) #: ui_window_browser.h:167 rc.cpp:541 msgid "TabbedBrowser" msgstr "分页浏览器" #. i18n: file: window_browser.ui:133 #. i18n: ectx: property (text), widget (QCheckBox, checkCase) #: ui_window_browser.h:171 rc.cpp:550 msgid "Case Sensitive" msgstr "大小写敏感" #. i18n: file: window_browser.ui:152 #. i18n: ectx: property (text), widget (QLabel, labelWrapped) #: ui_window_browser.h:172 rc.cpp:553 msgid " Search wrapped" msgstr " 已经搜索到末尾,从头开始" #: viewwindow.cpp:342 msgid "Printing aborted" msgstr "打印被取消" #: viewwindow.cpp:347 msgid "Printing finished" msgstr "打印完成" #: viewwindow.cpp:486 msgid "Open Link in a new tab\tShift+LMB" msgstr "在新的标签页打开此链接\tShift+左键" #: viewwindow.cpp:487 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "在后台标签页打开此链接\tCtrl+左键" #: viewwindowmgr.cpp:74 msgid "Add page" msgstr "添加页面" #: viewwindowmgr.cpp:155 viewwindowmgr.cpp:234 msgid "Alt+%1" msgstr "Alt+%1" #: rc.cpp:554 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "林俊, Henry Hu" #: rc.cpp:555 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "demonlinjun@163.com, henry.hu.sh@gmail.com" #~ msgid "Loading aborted" #~ msgstr "取消载入" #~ msgid "About %1" #~ msgstr "关于 %1" #~ msgid "&About" #~ msgstr "关于(&A)" #~ msgid "Close current page" #~ msgstr "关闭当前页面" #~ msgid "If no arguments given on load" #~ msgstr "如果载入时没有参数" #~ msgid "Version-specific settings" #~ msgstr "版本指定设置" #~ msgid "KDE version settings" #~ msgstr "KDE 版本设置" #~ msgid "To show HTML content, use" #~ msgstr "要显示HTML内容,使用" #~ msgid "&QTextBrowser-based widget" #~ msgstr "基于QTextBrowser的组件(&Q)" #~ msgid "Alt+Q" #~ msgstr "Alt+Q" #~ msgid "&KHTMLPart-based widget" #~ msgstr "基于KHTMLPart的组件(&K)" #~ msgid "Alt+K" #~ msgstr "Alt+K" #~ msgid "Qt &Webkit (requires Qt 4.4 or higher)" #~ msgstr "Qt Webkit (需要 Qt 4.4 或者更高版本) (&W)" #~ msgid "KHTMLPart security" #~ msgstr "KHTMLPart 安全性" #~ msgid "Enable &refresh" #~ msgstr "启用刷新(&R)" #~ msgid "Enable &plugins" #~ msgstr "启用插件(&P)" #~ msgid "Find" #~ msgstr "查找" #~ msgid "&View HTML source" #~ msgstr "查看HTML源码(&V)" #~ msgid "Enable &side window" #~ msgstr "启用侧边栏(&S)" #~ msgid "&Locate in contents window" #~ msgstr "在内容窗口中定位(&L)" #~ msgid "Previous page in Table of Context" #~ msgstr "目录中的前一页" #~ msgid "Previous page in TOC" #~ msgstr "目录中的前一页" #~ msgid "Next page in Table of Context" #~ msgstr "目录中的后一页" #~ msgid "Next page in TOC" #~ msgstr "目录中的后一页" #~ msgid "Qt version settings" #~ msgstr "QT 版本设置" #~ msgid "" #~ "Enter the path to the program, which will be used as a browser for " #~ "external links. A %s symbol will be replaced by the URL clicked." #~ msgstr "" #~ "输入打开外部链接的浏览器程序的路径。%s 符号将被点击的URL替换。" #, fuzzy #~ msgid "Search engine to use" #~ msgstr "搜索没有返回结果" #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" #~ msgstr "林俊" #~ msgid "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "Your emails" #~ msgstr "demonlinjun@163.com" #~ msgid "Topics" #~ msgstr "主题" #~ msgid "&Ok" #~ msgstr "确定(&O)" #, fuzzy #~ msgid "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2004-2007\n" #~ "http://www.kchmviewer.net\n" #~ "\n" #~ "Licensed under GNU GPL license.\n" #~ "\n" #~ "Please check my another project, http://www.transientmail.com - temporary " #~ "e-mail address, which expires automatically." #~ msgstr "" #~ "%1 版本 %2\n" #~ "\n" #~ "版权所有 (C) George Yunaev,gyunaev@ulduzsoft.com, 2005-2006\n" #~ "www.kchmviewer.net\n" #~ "\n" #~ "在GNU GPL授权方式下发行。\n" #~ "\n" #~ "请尝试我们的另一个项目,www.transientmail.com - 临时 E-Mail地址。" #~ msgid "Click this button to open an existing chm file." #~ msgstr "点击此按钮打开存在的CHM文件" #~ msgid "Click this button to print the current page" #~ msgstr "点击此按钮打印当前页面" #~ msgid "" #~ "Click this button to extract the whole CHM file content into a specific " #~ "directory" #~ msgstr "点击此按钮提取整个CHM文件的目录到指定的目录。" #~ msgid "&Recent files" #~ msgstr "最近打开的文件(&R)" #~ msgid "What's &This" #~ msgstr "这是什么(&T)" #~ msgid "Click this button to move backward in browser history" #~ msgstr "点击此按钮在浏览历史中后退" #~ msgid "Click this button to move forward in browser history" #~ msgstr "点击此按钮在浏览历史中前进" #~ msgid "Go to the home page" #~ msgstr "回到首页" #~ msgid "Click this button to move to the home page" #~ msgstr "点击此按钮回到主页" #~ msgid "Enter here the text to search in the current page." #~ msgstr "输入要在当前页面搜索的内容" #~ msgid "Previous search result" #~ msgstr "前一个搜索的结果" #~ msgid "Click this button to find previous search result." #~ msgstr "点击此按钮查看前一个搜索的结果" #~ msgid "Next search result" #~ msgstr "下一个搜索的结果" #~ msgid "Click this button to find next search result." #~ msgstr "点击此按钮查看下一个搜索的结果" #~ msgid "" #~ "Click this button to find current topic in the content window, and open " #~ "it." #~ msgstr "点击此按钮在目录窗口定位当前主题" #~ msgid "Click this button to increase the font size." #~ msgstr "点击此按钮增加字体大小" #~ msgid "Click this button to decrease the font size." #~ msgstr "点击此按钮缩小字体大小" #~ msgid "View HTML source" #~ msgstr "查看HTML源码" #~ msgid "" #~ "Click this button to open a separate window with the page HTML source." #~ msgstr "点击此按钮在独立窗口查看当前页面的HTML源码" #~ msgid "Add to bookmarks" #~ msgstr "添加到书签" #~ msgid "Click this button to add the current page to the bookmarks list." #~ msgstr "点击此按钮添加当前页面到书签列表" #~ msgid "&Increase font" #~ msgstr "增大字体(&I)" #~ msgid "&Decrease font" #~ msgstr "缩小字体(&D)" #~ msgid "&Set language" #~ msgstr "设置语言(&S)" #~ msgid "How to use search" #~ msgstr "如何使用搜索" #, fuzzy #~ msgid "" #~ "The search query can contain a few prefixes.\n" #~ "A set of words inside the quote marks mean that you are searching for " #~ "exact phrase.\n" #~ "A word with minus sign means that it should be absent in the search " #~ "result.\n" #~ "A word with plus mark or without any mark means that it must be present " #~ "in the search result.\n" #~ "\n" #~ "Note that only letters and digits are indexed.\n" #~ "You cannot search for non-character symbols other than underscope, and " #~ "those symbols will be removed from the search query.\n" #~ "For example, search for 'C' will give the same result as searching for 'C+" #~ "+'." #~ msgstr "" #~ "搜索查询可以包含一些技巧。\n" #~ "在引号中包含的内容意味着你要精确的搜索。\n" #~ "带有减号的字表示在搜索结果中不应包含这个内容。\n" #~ "带有加号或什么也不带表示在搜索结果中应当包含这个内容。\n" #~ "\n" #~ "注意只有字母和数字被索引。\n" #~ "你不能搜索符号,这些符号将在搜索查询中被移除。\n" #~ "例如,搜索 'C' 和搜索 'C++' ,将返回同样的结果." #, fuzzy #~ msgid "Search is not available" #~ msgstr "搜索失败" #~ msgid "Printing (page %1)..." #~ msgstr "正在打印 (第 %1 页)" #~ msgid "Printing completed" #~ msgstr "打印成功" #~ msgid "%1 - could not print" #~ msgstr "%1 - 不能打印" #~ msgid "" #~ "Could not print.\n" #~ "Your Qt library has been compiled without printing support" #~ msgstr "" #~ "不能打印。\n" #~ "你编译QT没有加入打印支持" #~ msgid "Match similar words" #~ msgstr "匹配相似词" kchmviewer-7.5/po/PaxHeaders.8614/kchmviewer_fr.po0000644000000000000000000000012411513542712017023 xustar0027 mtime=1294910922.830977 27 atime=1447562193.141734 30 ctime=1447562193.141734443 kchmviewer-7.5/po/kchmviewer_fr.po0000644000175000001440000010276711513542712017370 0ustar00timusers00000000000000# translation of kchmviewer.po to Fr_fr # This file is put in the public domain. # # Stephan Bellegy , 2006. # Sun Wukong , 2006. msgid "" msgstr "" "Project-Id-Version: kchmviewer\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2006-08-18 00:31+0200\n" "Last-Translator: Sun Wukong \n" "Language-Team: Fr_fr \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - ajouter un marque-page" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Entrer le nom du marque-page :" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - modifier le nom du marque-page" #: kchmmainwindow.cpp:96 #, fuzzy msgid "Bookmarks" msgstr "Ajouter un Marque-&Page" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - Échec lors de la lecture du fichier chm %1" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "Impossible de lire le fichier chm %1" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "Impossible de lire le fichier chm %1 " #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - un lien externe a été cliqué - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "Un clic sur un lien externe %1 lancera l'ouverture du navigateur externe.\n" "\n" "Voulez-vous continuer ?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "&Oui" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&Non" # Stéphan Bellegy : wrong spelling for JavaScript #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - un lien sur un JavaScript a été cliqué" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "Vous avez cliqué sur un lien JavaScript.\n" "Pour des raisons de sécurité, les URL JavaScript sont désactivées dans les " "fichiers CHM." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - un lien sur un nouveau fichier CHM a été cliqué" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "Vous avez cliqué sur un lien pointant sur un nouveau fichier CHM %1.\n" "Le fichier actuel sera fermé.\n" "\n" "Voulez-vous continuer ?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Index" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Chercher" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Manuel d'aide compressé (*.chm)" #: kchmmainwindow.cpp:858 #, fuzzy msgid "Open a chm file" msgstr "Ouvrir un fichier " #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Manuel d'aide compressé (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Chargement interrompu" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "Choisir un dossier pour y sauvegarder le contenu du fichier CHM" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "Extraction du contenu du fichier CHM" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Extraction des fichiers..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "Annuler" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "" "Impossible de trouver le sujet sélectionné dans le contenu de la fenêtre" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "A propos de %1" #: kchmmainwindow.cpp:1326 #, fuzzy msgid "&Help" msgstr "&Supprimer" #: kchmmainwindow.cpp:1327 #, fuzzy msgid "&About" msgstr "Annuler" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "A propos de &Qt" #: kchmmainwindow.cpp:1340 #, fuzzy msgid "Ctrl+1" msgstr "Contrôle+Entrée" #: kchmmainwindow.cpp:1346 #, fuzzy msgid "Ctrl+2" msgstr "Contrôle+Entrée" #: kchmmainwindow.cpp:1352 #, fuzzy msgid "Ctrl+3" msgstr "Contrôle+Entrée" #: kchmmainwindow.cpp:1358 #, fuzzy msgid "Ctrl+4" msgstr "Contrôle+Entrée" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 #, fuzzy msgid "Ctrl+Right" msgstr "Contrôle+Entrée" #: kchmmainwindow.cpp:1386 #, fuzzy msgid "Ctrl+Left" msgstr "Contrôle+Entrée" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "La recherche renvoie %1 occurrence(s)" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "La recherche ne renvoie pas de résultat" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "La recherche a échoué" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "" #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "" #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "" #: kchmviewwindowmgr.cpp:70 #, fuzzy msgid "Add page" msgstr "Chercher dans la page" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 #, fuzzy msgid "Alt+%1" msgstr "Alt+D" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Impression interrompue" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 #, fuzzy msgid "Printing finished" msgstr "Impression interrompue" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "" #: main.cpp:45 msgid "Perform auto testing" msgstr "" #: main.cpp:46 msgid "Perform short auto testing" msgstr "" #: main.cpp:47 #, fuzzy msgid "A CHM file to show" msgstr "Visionneur de fichiers CHM" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" #: main.cpp:56 msgid "CHM file viewer" msgstr "Visionneur de fichiers CHM" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "Paramétrage de KchmViewer" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "Comportement général" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "Si aucun argument n'a été spécifié au démarrage" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "Ouvrir la boîte de dialogue «Ouvrir un fichier CHM»" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "Ouvrir le &dernier fichier CHM s'il existe" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, fuzzy, no-c-format msgid "Alt+L" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "Historique" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "Mémoriser l'historique pour" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "les derniers fichiers" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "Se rappelle les informations concernant les fichiers précédemment ouverts. " "Se rappelle la dernière page consultée, la dernière recherche effectuée, la " "taille de la police, les marque-pages, etc." #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "Se rapp&eler les informations complémentaires pour l'historique" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "Paramètres de sécurité CHM" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "Quand un lien externe est cliqué" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "Toujours l'ouvrir dans un navigateur e&xterne" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+X" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "Demander la confirmation" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "Ne pas ouvrir le lien" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "Lorsqu'un lien sur un fichier externe est cliqué " #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "Toujours ouvrir un nouveau fichier CHM" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "Ne pas ouvrir un nouveau fichier CHM" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "Paramètres spécifiques à la version" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "Paramètres spécifiques à la version de KDE" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "Pour afficher le contenu HTML, utiliser" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "un widget basé sur &QTtextBrowser" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "un widget basé sur &KHTMLPart" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "Sécurité pour KHTMLPart" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "Permettre le &rafraîchissement" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+R" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "Activer le support &Java" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "Activer les &greffons" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+G" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "Activer le support Java&Script" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "Paramétrage avancé" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "Pour voir le source code HTML, utiliser : " #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "le visionneur intégré de code source HTML" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "Un programme e&xterne, spécifié ci-dessous" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+X" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "Programme externe :" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "Ajouter un Marque-&Page" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, fuzzy, no-c-format msgid "&File" msgstr "Titre" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, fuzzy, no-c-format msgid "&Windows" msgstr "&Fenêtre" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, fuzzy, no-c-format msgid "general toolbar" msgstr "Comportement général" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, fuzzy, no-c-format msgid "navigation toolbar" msgstr "Navigation" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, fuzzy, no-c-format msgid "Print" msgstr "Imprimer un fichier" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, fuzzy, no-c-format msgid "Ctrl+P" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, fuzzy, no-c-format msgid "Ctrl+Q" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, fuzzy, no-c-format msgid "Ctrl+C" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, fuzzy, no-c-format msgid "&Select All" msgstr "Tout &Sélectionner" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, fuzzy, no-c-format msgid "Ctrl+V" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, fuzzy, no-c-format msgid "Ctrl+F" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "E&xtraire le contenu du fichier CHM..." #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, fuzzy, no-c-format msgid "Extract the CHM content to the directory" msgstr "Extraction du contenu du fichier CHM" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, fuzzy, no-c-format msgid "&Application settings..." msgstr "&Modifier les paramètres..." #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, fuzzy, no-c-format msgid "Change the application settings" msgstr "&Modifier les paramètres..." #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "&Ajouter un marque-page" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, fuzzy, no-c-format msgid "Ctrl+B" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, fuzzy, no-c-format msgid "&Increase font size" msgstr "Augmenter la taille de la police de caractères" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, fuzzy, no-c-format msgid "Increase the font size" msgstr "Augmenter la taille de la police de caractères" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, fuzzy, no-c-format msgid "Ctrl++" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, fuzzy, no-c-format msgid "&Decrease font size" msgstr "Diminuer la taille de la police de caractères" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, fuzzy, no-c-format msgid "Decrease the font size" msgstr "Diminuer la taille de la police de caractères" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, fuzzy, no-c-format msgid "Ctrl+-" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "&Visionner le code source HTML" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "Pour voir le source code HTML, utiliser : " #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, fuzzy, no-c-format msgid "Ctrl+U" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, fuzzy, no-c-format msgid "Enable &full screen mode" msgstr "Pl&ein Écran" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, fuzzy, no-c-format msgid "F11" msgstr "F1" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, no-c-format msgid "&Locate in contents window" msgstr "&Chercher dans la fenêtre des contenus" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "Chercher ce sujet dans le contenu de la fenêtre" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, fuzzy, no-c-format msgid "Ctrl+" msgstr "Contrôle+Entrée" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, fuzzy, no-c-format msgid "Set &encoding" msgstr "Définir le &Codepage" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "Ouvrir un fichier " #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "Toujours ouvrir un nouveau fichier CHM" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, fuzzy, no-c-format msgid "Navigate back" msgstr "Navigation" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, fuzzy, no-c-format msgid "Navigate back in navigation history" msgstr "Revenir en arrière dans l'historique" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, fuzzy, no-c-format msgid "Navigate forward" msgstr "Navigation" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, fuzzy, no-c-format msgid "Navigate forward in navigation history" msgstr "Avancer dans l'historique" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, fuzzy, no-c-format msgid "Navigate home" msgstr "Navigation" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, fuzzy, no-c-format msgid "Previous page in Table of Context" msgstr "" "Cliquer sur ce bouton pour aller à la page précédente de la Table des " "Matières." #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, fuzzy, no-c-format msgid "Previous page in TOC" msgstr "Page précédente de la TdM" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, fuzzy, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "" "Cliquer sur ce bouton pour aller à la page précédente de la Table des " "Matières." #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, fuzzy, no-c-format msgid "Next page in Table of Context" msgstr "Page suivante de la TdM" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "Page suivante de la TdM" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, fuzzy, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "" "Cliquer sur ce bouton pour aller à la page suivante de la Table des Matières." #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, fuzzy, no-c-format msgid "&Close window" msgstr "&Fenêtre" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "A&fficher la fenêtre des contenus" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, fuzzy, no-c-format msgid "Ctrl+W" msgstr "Contrôle+Entrée" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" #~ msgid "Qt version settings" #~ msgstr "Paramètres spécifiques à la version de Qt" #~ msgid "" #~ "Enter the path to the program, which will be used as a browser for " #~ "external links. A %s symbol will be replaced by the URL clicked." #~ msgstr "" #~ "Entrer le chemin du navigateur qui sera utilisé pour afficher les liens " #~ "externes. Un symbole %s sera remplacé par l'URL cliquée." #, fuzzy #~ msgid "Search engine to use" #~ msgstr "La recherche ne renvoie pas de résultat" #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" #~ msgstr "" #~ "_: NAME OF TRANSLATORS\n" #~ "Stéphan BELLEGY" #~ msgid "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "Your emails" #~ msgstr "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "stephan@bellegy.org" #~ msgid "&Add" #~ msgstr "&Ajouter" #~ msgid "Topics" #~ msgstr "Thèmes" #~ msgid "Please select one of the topics below:" #~ msgstr "Choisissez l'un des thèmes suivants :" #~ msgid "&Ok" #~ msgstr "&Ok" #, fuzzy #~ msgid "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2004-2007\n" #~ "http://www.kchmviewer.net\n" #~ "\n" #~ "Licensed under GNU GPL license.\n" #~ "\n" #~ "Please check my another project, http://www.transientmail.com - temporary " #~ "e-mail address, which expires automatically." #~ msgstr "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2005-2006\n" #~ "www.kchmviewer.net\n" #~ "\n" #~ "Ce programme est distribué selon les termes de la licence GNU GPL.\n" #~ "\n" #~ "Essayez notre autre projet, www.transientmail.com - un distributeur " #~ "d'adresses électroniques temporaires qui expirent automatiquement." #~ msgid "File Operations" #~ msgstr "Opérations sur les fichiers" #~ msgid "Click this button to open an existing chm file." #~ msgstr "Cliquer sur ce bouton pour ouvrir un fichier CHM existant." #~ msgid "Click this button to print the current page" #~ msgstr "Cliquer sur ce bouton pour imprimer la page courante" #~ msgid "" #~ "Click this button to extract the whole CHM file content into a specific " #~ "directory" #~ msgstr "" #~ "Cliquer sur ce bouton pour extraire le contenu entier du fichier CHM dans " #~ "un dossier" #~ msgid "&Recent files" #~ msgstr "Fichiers &récents" #~ msgid "What's &This" #~ msgstr "Qu'es&t-ce que c'est" #~ msgid "Click this button to move backward in browser history" #~ msgstr "Cliquer sur ce bouton pour revenir en arrière dans l'historique" #~ msgid "Click this button to move forward in browser history" #~ msgstr "Cliquer sur ce bouton pour avancer dans l'historique" #~ msgid "Go to the home page" #~ msgstr "Aller à la page d'accueil" #~ msgid "Click this button to move to the home page" #~ msgstr "Cliquer sur ce bouton pour aller à la page d'accueil" #~ msgid "Enter here the text to search in the current page." #~ msgstr "Saisir ici le texte à rechercher dans la page courante." #~ msgid "Previous search result" #~ msgstr "Résultats de la recherche antérieure" #~ msgid "Click this button to find previous search result." #~ msgstr "" #~ "Cliquer sur ce bouton pour trouver les résultats de la recherche " #~ "antérieure." #~ msgid "Next search result" #~ msgstr "Résultats de la recherche suivante" #~ msgid "Click this button to find next search result." #~ msgstr "" #~ "Cliquer sur ce bouton pour trouver les résultats de la recherche suivante." #~ msgid "" #~ "Click this button to find current topic in the content window, and open " #~ "it." #~ msgstr "" #~ "Cliquer sur ce bouton pour trouver le sujet actuel dans le contenu de la " #~ "fenêtre et l'ouvrir." #~ msgid "Click this button to increase the font size." #~ msgstr "" #~ "Cliquer sur ce bouton pour augmenter la taille de la police de caractères." #~ msgid "Click this button to decrease the font size." #~ msgstr "" #~ "Cliquer sur ce bouton pour diminuer la taille de la police de caractères." #~ msgid "View HTML source" #~ msgstr "Visualiser le code source HTML" #~ msgid "" #~ "Click this button to open a separate window with the page HTML source." #~ msgstr "" #~ "Cliquer sur ce bouton pour ouvrir une nouvelle fenêtre contenant le code " #~ "source HTML de la page." #~ msgid "Add to bookmarks" #~ msgstr "Ajouter aux marque-pages" #~ msgid "Click this button to add the current page to the bookmarks list." #~ msgstr "Cliquer sur ce bouton pour ajouter un marque-page." #~ msgid "&Increase font" #~ msgstr "&Augmenter la taille de la police" #~ msgid "&Decrease font" #~ msgstr "&Diminuer la taille de la police" #~ msgid "&Set language" #~ msgstr "Définir le &Langage" #~ msgid "Type in word(s) to search for:" #~ msgstr "Entrer un/des mot(s) à rechercher :" #~ msgid "Location" #~ msgstr "Position" #~ msgid "How to use search" #~ msgstr "Comment effectuer une recherche" #~ msgid "" #~ "The search query can contain a few prefixes.\n" #~ "A set of words inside the quote marks mean that you are searching for " #~ "exact phrase.\n" #~ "A word with minus sign means that it should be absent in the search " #~ "result.\n" #~ "A word with plus mark or without any mark means that it must be present " #~ "in the search result.\n" #~ "\n" #~ "Note that only letters and digits are indexed.\n" #~ "You cannot search for non-character symbols other than underscope, and " #~ "those symbols will be removed from the search query.\n" #~ "For example, search for 'C' will give the same result as searching for 'C+" #~ "+'." #~ msgstr "" #~ "L'interrogation peut contenir quelques préfixes.\n" #~ "Un ensemble de mots entre côtes signifie que l'on recherche une phrase " #~ "exacte.\n" #~ "Un mot précédé du signe moins (-) indique que ce mot doit être absent du " #~ "résultat.\n" #~ "Un mot précédé du signe plus (+) ou précédé d'aucun signe indique qu'il " #~ "doit être présent dans le résultat.\n" #~ "\n" #~ "Seuls les chiffres et les lettres sont indexés pour la recherche.\n" #~ "Il est impossible de rechercher d'autres caractères que les chiffres, les " #~ "lettres et le souligné (_). Les autres caractères seront exclus de la " #~ "recherche.\n" #~ "Par exemple, une recherche sur 'C' donnera les mêmes résultats qu'une " #~ "recherche sur 'C++'." #, fuzzy #~ msgid "Search is not available" #~ msgstr "La recherche a échoué" #~ msgid "Printing (page %1)..." #~ msgstr "Impression (page %1)..." #~ msgid "Printing completed" #~ msgstr "Impression terminée" #~ msgid "%1 - could not print" #~ msgstr "%1 - impossible d'imprimer" #~ msgid "" #~ "Could not print.\n" #~ "Your Qt library has been compiled without printing support" #~ msgstr "" #~ "Impossible d'imprimer.\n" #~ "La librairie Qt de votre système a été compilée sans la capacité à " #~ "imprimer" #~ msgid "Match similar words" #~ msgstr "Ressemble aux mots " #~ msgid "Shift+Enter" #~ msgstr "Majuscule+Entrée" kchmviewer-7.5/po/PaxHeaders.8614/kchmviewer_hu.po0000644000000000000000000000012411513542712017030 xustar0027 mtime=1294910922.830977 27 atime=1447562193.142734 30 ctime=1447562193.143734417 kchmviewer-7.5/po/kchmviewer_hu.po0000644000175000001440000007500011513542712017362 0ustar00timusers00000000000000# translation of hu1.po to # translation of hu.po to # translation of kchmviewer.po to # This file is put in the public domain. # # Csaba Zakarias , 2006. msgid "" msgstr "" "Project-Id-Version: hu1\n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2006-04-11 13:44+0200\n" "Last-Translator: Csaba Zakarias \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.1\n" "Plural-Forms: nplurals=1; plural=0;\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - hozzáadás a könyvjelzőhöz" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Adja meg a könyvjelző nevét:" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - könyvjelző név szerkesztése" #: kchmmainwindow.cpp:96 #, fuzzy msgid "Bookmarks" msgstr "&Oldal berakása a könyvjelzőbe" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - hiba a chm fájl betöltésekor" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "%1 chm fájl nem tölthető be" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "%1 fájl nem tölthető be" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - távoli kapcsolatra kattintás - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "%1 távoli kapcsolat megnyitásához külső programot indít.\n" "\n" "Akarja folytatni?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "&Igen" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&Nem" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - JavaSzkriptre kattintás" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "JavaSzkriptet akart elindítani.\n" "Biztonsági okoból a JavaSzkript le van tiltva a CHM fájlokban." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - új CHM fájlra mutató kapcsolatra kattintás" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "A %1 új CHM fájlra mutató kapcsolatra kattintott.\n" "A jelenlegi fájl bezárul.\n" "\n" "Akarja folytatni?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Index" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Keresés" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "Tömörített Súgó Kézikönyv (*.chm)" #: kchmmainwindow.cpp:858 #, fuzzy msgid "Open a chm file" msgstr "Fájl megnyitása" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Tömörített Súgó Kézikönyv (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Betöltés sikertelen" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "" #: kchmmainwindow.cpp:932 #, fuzzy msgid "Abort" msgstr "%1 névjegye" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "Nem található a megnyitott téma a tartalom albakban" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "%1 névjegye" #: kchmmainwindow.cpp:1326 #, fuzzy msgid "&Help" msgstr "&Törlés" #: kchmmainwindow.cpp:1327 #, fuzzy msgid "&About" msgstr "%1 névjegye" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "&Qt névjegye" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "Keresés %1 eredményt adott" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "Keresés nem adott vissza eredményt" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "Keresés érvénytelen" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms specified in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "" #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "" #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "" #: kchmviewwindowmgr.cpp:70 #, fuzzy msgid "Add page" msgstr "Keresés az oldalon" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 #, fuzzy msgid "Alt+%1" msgstr "Alt+L" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Nyomtatás megszakítva" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 #, fuzzy msgid "Printing finished" msgstr "Nyomtatás megszakítva" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "" #: main.cpp:45 msgid "Perform auto testing" msgstr "" #: main.cpp:46 msgid "Perform short auto testing" msgstr "" #: main.cpp:47 #, fuzzy msgid "A CHM file to show" msgstr "CHM fájl megjelenítő" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" #: main.cpp:56 msgid "CHM file viewer" msgstr "CHM fájl megjelenítő" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "KchmViewer beállítások" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "Általános beállítások" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "Ha nem ad meg jellemzőt a betöltéskor" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "A 'CHM fájl megnyitása' dialógus ablak megnyitása" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "&Legutóbbi CHM fájl megnyitása, ha létezik" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, fuzzy, no-c-format msgid "Alt+L" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "Előzmények" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "Előzmény információ tárolása" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "legutóbbi fájlok" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "Emlékezzen a megnyitott fájlok információira. Emlékezzen az utoljára " "megnyitott oldalra, keresési előzményekre, betűméretre, könyvjelzőkre és így " "tovább." #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "&Emlékezzen az előzmények fájlok különleges információira" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "CHM biztonsági beállítások" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "Külső kapcsolatra kattintáskor" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "&Mindig külső böngészőben nyissa meg" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+Y" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "Megerősítés kérése" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "Kapcsolatot ne nyissa meg" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, fuzzy, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "%1 - új CHM fájlra mutató kapcsolatra kattintás" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "Mindig nyissa meg azúj CHM fájlt" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "Ne nyissa meg az új CHM fájlt" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "Verzió függő beállítások" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "KDE verzió beállítások" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "HTML tartalom megjelenítéséhez használja" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "&QTextBrowser-alapú widget" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "&KHTMLPart-alapú widget" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "KHTMLPart biztonság" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "&Frissítés engedélyezése" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+R" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "&Java engedélyezése" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "&Beépülő modulok engedélyezése" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+P" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "Java&Szkript engedélyezése" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "További" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "HTML forrás parancsok megtekintése" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "Beépített HTML forrás megjelenítő" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "&Külső program, alább adaj meg" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+X" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "Külső program:" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, fuzzy, no-c-format msgid "&Bookmarks" msgstr "&Oldal berakása a könyvjelzőbe" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, fuzzy, no-c-format msgid "&File" msgstr "Cím" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, fuzzy, no-c-format msgid "&Edit" msgstr "Szerkesztő" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, no-c-format msgid "&Windows" msgstr "" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, fuzzy, no-c-format msgid "general toolbar" msgstr "Általános beállítások" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, fuzzy, no-c-format msgid "navigation toolbar" msgstr "Navigáció" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "" #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, fuzzy, no-c-format msgid "Print" msgstr "Fájl nyomtatása" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "" #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, fuzzy, no-c-format msgid "Exit" msgstr "Szerkesztő" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, fuzzy, no-c-format msgid "&Select All" msgstr "&Minden kijelölése" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "" #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "" #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, no-c-format msgid "Extract the CHM content to the directory" msgstr "" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, fuzzy, no-c-format msgid "&Application settings..." msgstr "&Beállítások megváltoztatása" #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, fuzzy, no-c-format msgid "Change the application settings" msgstr "&Beállítások megváltoztatása" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, fuzzy, no-c-format msgid "&Add bookmark" msgstr "Hozzáadás a könyvjelzőhöz" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, fuzzy, no-c-format msgid "&Increase font size" msgstr "Betűméret növelése" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, fuzzy, no-c-format msgid "Increase the font size" msgstr "Betűméret növelése" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, fuzzy, no-c-format msgid "&Decrease font size" msgstr "Betűméret csökkentése" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, fuzzy, no-c-format msgid "Decrease the font size" msgstr "Betűméret csökkentése" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "&HTML forrás megtekintése" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, fuzzy, no-c-format msgid "View HTML source of current page" msgstr "HTML forrás parancsok megtekintése" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, fuzzy, no-c-format msgid "Enable &full screen mode" msgstr "&Teljes képernyő" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, fuzzy, no-c-format msgid "F11" msgstr "F1" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, fuzzy, no-c-format msgid "&Locate in contents window" msgstr "&Tartalom ablak mutatása" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, fuzzy, no-c-format msgid "Locate the current page in contents window" msgstr "Nem található a megnyitott téma a tartalom albakban" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, fuzzy, no-c-format msgid "Set &encoding" msgstr "&Kódlap beállítása" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "" #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "" #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, fuzzy, no-c-format msgid "Open a CHM file" msgstr "Fájl megnyitása" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, fuzzy, no-c-format msgid "Opens a new CHM file" msgstr "Mindig nyissa meg azúj CHM fájlt" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, fuzzy, no-c-format msgid "Navigate back" msgstr "Navigáció" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, fuzzy, no-c-format msgid "Navigate back in navigation history" msgstr "Az előzményekben hátrébb mozgatása" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, fuzzy, no-c-format msgid "Navigate forward" msgstr "Navigáció" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, fuzzy, no-c-format msgid "Navigate forward in navigation history" msgstr "Az előzményekben előrébb mozgatása" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, fuzzy, no-c-format msgid "Navigate home" msgstr "Navigáció" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, fuzzy, no-c-format msgid "Previous page in Table of Context" msgstr "" "A tartalomjegyzékben az előző oldalra ugráshoz kattintson erre a gombra." #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, fuzzy, no-c-format msgid "Previous page in TOC" msgstr "Előző oldal a tartalomjegyzékben" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, fuzzy, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "" "A tartalomjegyzékben az előző oldalra ugráshoz kattintson erre a gombra." #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, fuzzy, no-c-format msgid "Next page in Table of Context" msgstr "Következő oldal a tartalomjegyzékben" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "Következő oldal a tartalomjegyzékben" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, fuzzy, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "" "A tartalomjegyzékben a következő oldalra ugráshoz kattintson erre a gombra." #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, no-c-format msgid "&Close window" msgstr "" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, fuzzy, no-c-format msgid "Close current window" msgstr "&Tartalom ablak mutatása" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" #~ msgid "Qt version settings" #~ msgstr "Qt verzió beállítások" #~ msgid "" #~ "Enter the path to the program, which will be used as a browser for " #~ "external links. A %s symbol will be replaced by the URL clicked." #~ msgstr "" #~ "Adja meg a program elérési útját a belső linkek megnyitásához egy " #~ "böngésző ablakban. %s szimbólumot lecseréljük az URL-re " #~ "kattintáskor." #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" #~ msgstr "Zakariás Csaba" #~ msgid "" #~ "_: EMAIL OF TRANSLATORS\n" #~ "Your emails" #~ msgstr "csaba.zakarias@gmail.com" #~ msgid "&Add" #~ msgstr "&Hozzáadás" #~ msgid "Topics" #~ msgstr "Témák" #~ msgid "Please select one of the topics below:" #~ msgstr "Jelölje ki az egyik alábbi témát:" #~ msgid "&Ok" #~ msgstr "&OK" #~ msgid "" #~ "%1 version %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2005-2006\n" #~ "www.kchmviewer.net\n" #~ "\n" #~ "Licensed under GNU GPL license.\n" #~ "\n" #~ "Please try our another project, www.transientmail.com - temporary e-mail " #~ "address, which expires automatically." #~ msgstr "" #~ "%1 verzió %2\n" #~ "\n" #~ "Copyright (C) George Yunaev,gyunaev@ulduzsoft.com, 2005-2006\n" #~ "www.kchmviewer.net\n" #~ "\n" #~ "GNU GPL licensz.\n" #~ "\n" #~ "Kérem, próbálja ki más projektünket is, ww.transientmail.com." #~ msgid "File Operations" #~ msgstr "Fájl műveletek" #~ msgid "Click this button to open an existing chm file." #~ msgstr "Létező chm fájl megnyitásához kattintson erre a gombra." #~ msgid "Click this button to print the current page" #~ msgstr "Az aktuális oldal kinyomtatásához kattintson erre a gombra." #~ msgid "Click this button to move backward in browser history" #~ msgstr "" #~ "A böngésző előzmények közötti visszafelé mozgáshoz kattintson erre a " #~ "gombra." #~ msgid "Click this button to move forward in browser history" #~ msgstr "" #~ "A böngésző előzmények közötti előrefelé mozgáshoz kattintson erre a " #~ "gombra." #~ msgid "Go to the home page" #~ msgstr "Alapoldalra ugrás" #~ msgid "Click this button to move to the home page" #~ msgstr "Az alapoldalra ugráshoz kattintson erre a gombra." #~ msgid "&Recent files" #~ msgstr "&Legutóbbi fájlok" #~ msgid "&Setup" #~ msgstr "&Beállítás" #~ msgid "What's &This" #~ msgstr "&Mi ez?" #~ msgid "Enter here the text to search in the current page." #~ msgstr "Adja meg az aktuális oldalon keresendő szöveget." #~ msgid "Previous search result" #~ msgstr "Előző keresési eredmény" #~ msgid "Click this button to find previous search result." #~ msgstr "" #~ "Az előző keresési eredmény megjelenítéséhez kattintson erre a gombra." #~ msgid "Next search result" #~ msgstr "Következő keresési eredmény" #~ msgid "Click this button to find next search result." #~ msgstr "" #~ "A következő keresési eredmény megjelenítéséhez kattintson erre a gombra." #~ msgid "" #~ "Click this button to find current topic in the content window, and open " #~ "it." #~ msgstr "" #~ "Kattintson a gombra a jelenlegi témának a tartalom ablakban történő " #~ "megkereséséhez és megnyitásához." #~ msgid "Click this button to increase the font size." #~ msgstr "A betűméret növeléséhez kattinson erre a gombra." #~ msgid "Click this button to decrease the font size." #~ msgstr "A betűméret csökkentéséhez kattinson erre a gombra." #~ msgid "View HTML source" #~ msgstr "HTML forrás megtekintése" #~ msgid "" #~ "Click this button to open a separate window with the page HTML source." #~ msgstr "" #~ "Az oldal HTML forrásának külön ablakban történő megnyitásához kattintson " #~ "erre a gombra." #~ msgid "Click this button to add the current page to the bookmarks list." #~ msgstr "" #~ "Kattintson a gomba az aktuális oldal könyvjelző listához való " #~ "hozzáadására." #~ msgid "&Increase font" #~ msgstr "&Betűméret növelése" #~ msgid "&Decrease font" #~ msgstr "&Betűméret csökkentése" #~ msgid "&Set language" #~ msgstr "&Nyelv beállítása" #~ msgid "Type in word(s) to search for:" #~ msgstr "Adja meg a keresendő szavakat:" #~ msgid "Location" #~ msgstr "Hely" #~ msgid "Match similar words" #~ msgstr "Hasonló szavak keresése" #~ msgid "How to use search" #~ msgstr "Hogyan használja a keresőt" #~ msgid "Printing (page %1)..." #~ msgstr "Nyomtatás (%1 oldal)..." #~ msgid "Printing completed" #~ msgstr "Nyomtatás kész" #~ msgid "%1 - could not print" #~ msgstr "%1 - nem nyomtatható" #~ msgid "" #~ "Could not print.\n" #~ "Your Qt library has been compiled without printing support" #~ msgstr "" #~ "Nem nyomtatható.\n" #~ "A Qt könyvtár nyomtatás támogatás nélkül lett lefordítva." kchmviewer-7.5/po/PaxHeaders.8614/kchmviewer_uk.po0000644000000000000000000000012411513542334017033 xustar0027 mtime=1294910684.479557 27 atime=1447562193.147734 30 ctime=1447562193.147734362 kchmviewer-7.5/po/kchmviewer_uk.po0000644000175000001440000010254611513542334017373 0ustar00timusers00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Yatsenko Alexandr , 2010. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2010-06-23 19:03+0300\n" "Last-Translator: Yatsenko Alexandr \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - додати закладку" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Уведіть назву для цієї закладки:" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 — зміна назви закладки" #: kchmmainwindow.cpp:96 msgid "Bookmarks" msgstr "Закладки" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed under GNU GPL license." msgstr "" "%1 version %2

Авторські права © George Yunaev, 2004-" "2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Розповсюджується згідно ліцензії GNU GPL." #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "Визначено кодування файлу: %1 ( %2 )" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 — помилка при завантаженні файлу chm" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "Неможливо завантажити файл chm %1" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "Не вдалося завантажити файл %1" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 — вибрано зовнішнє посилання - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "Зовнішнє посилання %1 буде відкрито у зовнішній програмі.\n" "\n" "Бажаєте продовжити?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "&Так" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&Ні" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - обране посилання запустить JavsScript" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "Ви клацнули посилання на JavaScript \n" "Для запобігання виникненню загроз JavaScript URL заборонено у файлах CHM." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - натиснене посилання на інший файл CHM." #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "Ви натиснули на посилання, що відкриває інший файл CHM %1.\n" "Поточний файл буде закрито.\n" "\n" "Бажаєте продовжити?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "Зміст" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Індекс" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Пошук" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Стиснений файл довідки - Compressed Help Manual (*.chm)" #: kchmmainwindow.cpp:858 msgid "Open a chm file" msgstr "Відкрити файл chm" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Стиснений файл довідки - Compressed Help Manual (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Завантаження перервано" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "Оберіть теку для зберігання вмісту CHM" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "Витягування вмісту CHM" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Витягування файлів..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "Перервати" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "Неможливо знайти відкриту тему у вікні змісту" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "Про %1" #: kchmmainwindow.cpp:1326 msgid "&Help" msgstr "&Довідка" #: kchmmainwindow.cpp:1327 msgid "&About" msgstr "&Про програму" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "Про &Qt" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "Ctrl+1" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "Ctrl+2" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "Ctrl+3" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "Ctrl+4" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "/" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "F3" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "Ctrl+Стрілка вправо" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "Ctrl+Стрілка вліво" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "%1 ( %2 )" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "Знайдено %1 результат(ів)" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "Нічого не знайдено" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "Помилка пошуку" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms speficide in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in phrases." msgstr "" "

Покращений механізм пошуку дозволяє вам шукати слово, символ " "чи фразу, що є набором слів, поміщених в лапки. Буде показано " "лише ті документи, що відповідають усім умовам пошуку. Префікси не потрібні. " "

На відміну від пошуку MS CHM, мій покращений пошуковий рушій індексує " "все, " "навіть спеціальні символи. " "Тому стало можливим знаходити щось на зразок $q = new ChmFile();." "Також повністю підтримується Unicode, що означає можливість пошуку в " "документах різними мовами.

" "Якщо ви хочете знайти лапки, використайте позначення лапок замість них. " "Рушій розпізнає лапки та позначення лапок як один символ, що дозволяє " "використовувати їх у пошукових фразах." #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "Читання словника..." #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "Створення пошукового індексу..." #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "Щоб зміни набули чинності, слід перезапустити програму" #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "*|Виконувані файли" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "Оберіть виконуваний файл редактора" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "Виконувані файли (*)" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "Закрити поточну сторінку" #: kchmviewwindowmgr.cpp:70 msgid "Add page" msgstr "Додати сторінку" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 msgid "Alt+%1" msgstr "Alt+%1" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Друк перервано" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 msgid "Printing finished" msgstr "Друк завершено" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "Відкрити посилання у новій вкладці\tShift+ЛКМ" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "Відкрити посилання у фоновій вкладці\tCtrl+ЛКМ" #: main.cpp:45 msgid "Perform auto testing" msgstr "Виконати автоматичне тестування" #: main.cpp:46 msgid "Perform short auto testing" msgstr "Виконати швидке автоматичне тестування" #: main.cpp:47 msgid "A CHM file to show" msgstr "Файл CHM для показу" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" "'--search <запит>' задає запит для пошуку та обирає " "перший знайдений результат" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" "'--sindex <слово>' задає слово для пошуку в індексі та показує, якщо знайде" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" "'--stoc ' задає слово(а) для пошуку в таблиці змісту, та показує " "якщо " "є знайдені. Допускаються маски." #: main.cpp:56 msgid "CHM file viewer" msgstr "Переглядач файлів довідки CHM" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "© George Yunaev, gyunaev@ulduzsoft.com, 2004—2008" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "Будь ласка, повідомляйте про помилки на kchmviewer@ulduzsoft.com" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "Налаштування KchmViewer" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "Загальна поведінка" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "Якщо не задано параметрів при завантаженні" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "Показати вікно відкривання CHM файлів" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "Відкрити &попередній файл CHM, якщо доступний." #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, no-c-format msgid "Alt+L" msgstr "Alt+L" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "Журнал" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "Зберегти історію про" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "останні файли" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "Запам'ятовує інформацію про файли, що були відкриті. Запам'ятовує останню " "відкриту сторінку, історію пошуку, розмір шрифту, закладки та інше." #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "Зберігати додатков&у інформацію до файлів журналу" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "Налаштування безпеки CHM" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "Коли клацнуто зовнішнє посилання" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "Завжди відкривати в зов&нішньому браузері" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+Y" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "Запитати підтвердження" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "Не відкривати посилання" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "Коли обрано посилання на інший файл CHM" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "Завжди відкривати новий файл CHM" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "Не відкривати новий файл CHM" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "Налаштування даної версії" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "Налаштування даної версії KDE" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "Використовувати для показу вмісту HTML" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "віджет з &QTextBrowser" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "віджет з &KHTMLPart" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "Qt &Webkit (потребує Qt 4.4 або вище)" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "безпека KHTMLPart" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "Дозволити о&новлення" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+Y" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "Увімкнути &Java" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "Увімкнути &додатки" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+L" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "Увімкнути Java&Script" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "Додатково" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "Переглядати використані команди HTML" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "Вбудований переглядач HTML коду" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "&Зовнішня програма, вказана нижче" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+P" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "Зовнішня програма:" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "&Огляд" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "Інше" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "Використовувати напрямок справа вліво (Арабська мова та Іврит)" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" "Автоматично визначати кодування для браузерів KHTMLPart та WebKit " "(не рекомендується)" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "kchmviewer" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "&Налаштування" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, no-c-format msgid "&Bookmarks" msgstr "З&акладки" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, no-c-format msgid "&File" msgstr "&Файл" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "&Редагування" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "Пе&регляд" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, no-c-format msgid "&Windows" msgstr "&Вікно" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, no-c-format msgid "general toolbar" msgstr "загальна панель інструментів" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, no-c-format msgid "navigation toolbar" msgstr "панель навігації" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "панель дій" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "&Друкувати..." #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, no-c-format msgid "Print" msgstr "Друкувати" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "Друкувати поточну сторінку" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "Друкує поточну відкриту сторінку." #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "Ctrl+P" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "В&ийти" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "Вихід" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "Закриває програму" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "Ctrl+Q" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "К&опіювати" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "Копіювати" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "Копіює виділений фрагмент до кишені" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "Ctrl+C" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, no-c-format msgid "&Select All" msgstr "В&иділити все" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "Вставити" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "Виділяє весь вміст документа" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "Ctrl+V" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "Зн&айти..." #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "Знайти" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "Шукати текст по поточній відкритій сторінці" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "Показувати знайдене у вигляді сторінки" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "Ctrl+F" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "&Витягти вміст CHM..." #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, no-c-format msgid "Extract the CHM content to the directory" msgstr "Витягти вміст CHM до теки" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" "Витягує вміст CHM архіву до вказаної теки. Буде витягнуто " "всі файли." #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, no-c-format msgid "&Application settings..." msgstr "&Налаштування програми..." #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, no-c-format msgid "Change the application settings" msgstr "Змінити налаштування програми" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "&Додати закладку" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "Додає закладку на поточну відкриту сторінку" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" "Додає закладку на поточну відкриту сторінку. Запам'ятовує відкриту сторінку " "та позицію на екрані. Закладки доступні через меню закладок чи вкладку." #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "Ctrl+B" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, no-c-format msgid "&Increase font size" msgstr "Збільшити розмір &шрифту" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, no-c-format msgid "Increase the font size" msgstr "Збільшити розмір шрифту" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "Збільшує розмір шрифту в документі. Новий розмір буде збережено." #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "Ctrl++" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, no-c-format msgid "&Decrease font size" msgstr "&Зменшити розмір шрифту" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, no-c-format msgid "Decrease the font size" msgstr "Зменшити розмір шрифту" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "Зменшує розмір шрифту в документі. Новий розмір буде збережено." #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "Ctrl+-" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "&Переглянути джерело HTML" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, no-c-format msgid "View HTML source of current page" msgstr "Переглянути джерело HTML для поточної сторінки" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "Показує джерело HTML поточної відкритої сторінки" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "Ctrl+U" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, no-c-format msgid "Enable &full screen mode" msgstr "Увімкнути повноекр&анний режим" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "Увімкнути чи вимкнути повноекранний режим" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, no-c-format msgid "F11" msgstr "F11" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "Увімкнути бічне в&ікно" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" "Вмикає та вимикає бічне вікно (із змістом, індексом, пошуком та закладками)" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "F9" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, no-c-format msgid "&Locate in contents window" msgstr "&Знайти у вікні змісту" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, no-c-format msgid "Locate the current page in contents window" msgstr "Знаходить поточну сторінку у вікні змісту" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "Якщо поточна сторінка наявна у змісті, показує її там." #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "Ctrl+" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, no-c-format msgid "Set &encoding" msgstr "Встановити код&ування" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "Змінює кодування відкритого документа." #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "&Відкрити..." #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, no-c-format msgid "Open a CHM file" msgstr "Відкрити файл CHM" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, no-c-format msgid "Opens a new CHM file" msgstr "Відкриває новий файл CHM" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "Назад" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, no-c-format msgid "Navigate back" msgstr "Перейти назад" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, no-c-format msgid "Navigate back in navigation history" msgstr "Перейти назад згідно історії переходів" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "Вперед" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, no-c-format msgid "Navigate forward" msgstr "Перейти вперед" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, no-c-format msgid "Navigate forward in navigation history" msgstr "Перейти вперед згідно історії переходів" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "Початок" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, no-c-format msgid "Navigate home" msgstr "Перейти на початок" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "Перейти на початкову сторінку, визначену у документі." #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, no-c-format msgid "Previous page in Table of Context" msgstr "Попередня сторінку із змісту" #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, no-c-format msgid "Previous page in TOC" msgstr "Попередня сторінку із таблиці змісту" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "Перейти на попередню сторінку із таблиці змісту" #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" "Перейти до попередньої сторінки із таблиці змісту

" "Скорочення: " "Ctrl+Стрілка вліво" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, no-c-format msgid "Next page in Table of Context" msgstr "Наступна сторінка із таблиці змісту" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "Наступна сторінка із таблиці змісту" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "Перейти на наступну сторінку із таблиці змісту" #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: Ctrl" "+Right Arrow" msgstr "" "Перейти до наступної сторінки із таблиці змісту

Скорочення: " "Ctrl+Стрілка вправо" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, no-c-format msgid "&Close window" msgstr "&Закрити вікно" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, no-c-format msgid "Close current window" msgstr "Закрити поточне вікно" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "Закриває поточне відкрите вікно" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "Ctrl+W" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Олександр Яценко" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "yatsenko.alexandr@gmail.com" kchmviewer-7.5/po/PaxHeaders.8614/kchmviewer_pt_BR.po0000644000000000000000000000012411513542552017424 xustar0027 mtime=1294910826.616815 27 atime=1447562193.144734 30 ctime=1447562193.145734389 kchmviewer-7.5/po/kchmviewer_pt_BR.po0000644000175000001440000007330411513542552017763 0ustar00timusers00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Márcio Moraes , 2009. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: kchmviewer@ulduzsoft.com\n" "POT-Creation-Date: 2009-07-19 20:41-0700\n" "PO-Revision-Date: 2009-12-15 23:31-0300\n" "Last-Translator: Márcio Moraes \n" "Language-Team: Brazilian Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Language: pt_BR\n" #: kchmbookmarkwindow.cpp:113 msgid "%1 - add a bookmark" msgstr "%1 - adicionar um marcador" #: kchmbookmarkwindow.cpp:114 kchmbookmarkwindow.cpp:156 msgid "Enter the name for this bookmark:" msgstr "Digite o nome para este marcador:" #: kchmbookmarkwindow.cpp:155 msgid "%1 - edit the bookmark name" msgstr "%1 - editar o nome do marcador" #: kchmmainwindow.cpp:96 msgid "Bookmarks" msgstr "Marcadores" #: kchmmainwindow.cpp:121 msgid "" "%1 version %2

Copyright (C) George Yunaev, " "2004-2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licensed " "under GNU GPL license." msgstr "" "%1 versão %2

Copyright (C) George Yunaev, " "2004-2008
gyunaev@ulduzsoft.com
http://www.kchmviewer.net

Licenciado " "sob os termos da licença GPL GNU." #: kchmmainwindow.cpp:163 msgid "Detected file encoding: %1 ( %2 )" msgstr "Codificação do arquivo detectado: %1 ( %2 )" #: kchmmainwindow.cpp:254 msgid "%1 - failed to load the chm file" msgstr "%1 - falha ao carregar o arquivo chm" #: kchmmainwindow.cpp:255 msgid "Unable to load the chm file %1" msgstr "Não foi possível carregar o arquivo chm %1" #: kchmmainwindow.cpp:263 msgid "Could not load file %1" msgstr "Não foi possível carregar arquivo %1" #: kchmmainwindow.cpp:331 msgid "%1 - remote link clicked - %2" msgstr "%1 - link remoto clicado - %2" #: kchmmainwindow.cpp:332 msgid "" "A remote link %1 will start the external program to open it.\n" "\n" "Do you want to continue?" msgstr "" "Um link remoto %1 irá iniciar o programa externo para abri-lo.\n" "\n" "Você deseja continuar?" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&Yes" msgstr "&Sim" #: kchmmainwindow.cpp:333 kchmmainwindow.cpp:377 msgid "&No" msgstr "&Não" #: kchmmainwindow.cpp:355 msgid "%1 - JavsScript link clicked" msgstr "%1 - Link JavsScript clicado" #: kchmmainwindow.cpp:356 msgid "" "You have clicked a JavaScript link.\n" "To prevent security-related issues JavaScript URLs are disabled in CHM files." msgstr "" "Você clicou em um link JavaScript.\n" "Para evitar problemas de segurança relacionados com JavaScript, URLs são " "desativadas em arquivos CHM." #: kchmmainwindow.cpp:375 msgid "%1 - link to a new CHM file clicked" msgstr "%1 - link para um novo arquivo CHM clicado" #: kchmmainwindow.cpp:376 msgid "" "You have clicked a link, which leads to a new CHM file %1.\n" "The current file will be closed.\n" "\n" "Do you want to continue?" msgstr "" "Você clicou em um link, que leva a um novo arquivo CHM %1.\n" "O arquivo atual será fechado.\n" "\n" "Você deseja continuar?" #: kchmmainwindow.cpp:639 msgid "Contents" msgstr "Conteúdo" #: kchmmainwindow.cpp:664 msgid "Index" msgstr "Índice" #: kchmmainwindow.cpp:687 msgid "Search" msgstr "Pesquisar" #: kchmmainwindow.cpp:855 msgid "*.chm|Compressed Help Manual (*.chm)" msgstr "*.chm|Manual de Ajuda Comprimido (*.chm)" #: kchmmainwindow.cpp:858 msgid "Open a chm file" msgstr "Abrir um arquivo chm" #: kchmmainwindow.cpp:860 msgid "Compressed Help Manual (*.chm)" msgstr "Manual de Ajuda Comprimido (*.chm)" #: kchmmainwindow.cpp:872 msgid "Loading aborted" msgstr "Carregamento cancelado" #: kchmmainwindow.cpp:912 kchmmainwindow.cpp:916 msgid "Choose a directory to store CHM content" msgstr "Escolha um diretório para armazenar o conteúdo CHM" #: kchmmainwindow.cpp:930 msgid "Extracting CHM content" msgstr "Extraindo o conteúdo CHM" #: kchmmainwindow.cpp:931 msgid "Extracting files..." msgstr "Extraindo arquivos..." #: kchmmainwindow.cpp:932 msgid "Abort" msgstr "Cancelar" #: kchmmainwindow.cpp:1122 msgid "Could not locate opened topic in content window" msgstr "Não foi possível localizar tópico aberto na janela de conteúdo" #: kchmmainwindow.cpp:1164 msgid "About %1" msgstr "Sobre o %1" #: kchmmainwindow.cpp:1326 msgid "&Help" msgstr "A&juda" #: kchmmainwindow.cpp:1327 msgid "&About" msgstr "&Sobre" #: kchmmainwindow.cpp:1328 msgid "About &Qt" msgstr "Sobre o &Qt" #: kchmmainwindow.cpp:1340 msgid "Ctrl+1" msgstr "Ctrl+1" #: kchmmainwindow.cpp:1346 msgid "Ctrl+2" msgstr "Ctrl+2" #: kchmmainwindow.cpp:1352 msgid "Ctrl+3" msgstr "Ctrl+3" #: kchmmainwindow.cpp:1358 msgid "Ctrl+4" msgstr "Ctrl+4" #: kchmmainwindow.cpp:1365 msgid "/" msgstr "/" #: kchmmainwindow.cpp:1372 msgid "F3" msgstr "F3" #: kchmmainwindow.cpp:1379 msgid "Ctrl+Right" msgstr "Ctrl+Direito" #: kchmmainwindow.cpp:1386 msgid "Ctrl+Left" msgstr "Ctrl+Esquerdo" #: kchmmainwindow.cpp:1492 msgid "%1 ( %2 )" msgstr "%1 ( %2 )" #: kchmsearchwindow.cpp:151 msgid "Search returned %1 result(s)" msgstr "A pesquisa devolveu %1 resultado(s)" #: kchmsearchwindow.cpp:154 msgid "Search returned no results" msgstr "A pesquisa não devolveu resultados" #: kchmsearchwindow.cpp:157 msgid "Search failed" msgstr "A pesquisa falhou" #: kchmsearchwindow.cpp:190 msgid "" "

The improved search engine allows you to search for a word, symbol " "or phrase, which is set of words and symbols included in quotes. Only the " "documents which include all the terms speficide in th search query are " "shown; no prefixes needed.

Unlike MS CHM internal search index, my " "improved search engine indexes everything, including special symbols. " "Therefore it is possible to search (and find!) for something like $q = " "new ChmFile();. This search also fully supports Unicode, which means " "that you can search in non-English documents.

If you want to search for a " "quote symbol, use quotation mark instead. The engine treats a quote and a " "quotation mark as the same symbol, which allows to use them in " "phrases." msgstr "" "

A melhor engine de busca lhe permite procurar por uma palavra, " "frase ou símbolo, que é um conjunto de palavras e símbolos incluído entre " "aspas. Apenas os documentos que incluem todos os termos especificados na " "consulta da busca são mostrados; sem prefixos necessários.

Ao contrário " "do índice de pesquisa interna MS CHM, minha melhor engine de busca indexa " "tudo, incluindo símbolos especiais. Por isso, é possível pesquisar (e " "encontrar!) algo parecido com $q = new ChmFile ();. Esta pesquisa " "também suporta completamente Unicode, o que significa que você pode " "pesquisar em documentos não-Inglês.

Se você deseja procurar por um símbolo " "de cotação, use aspas em vez disso. A engine trata uma cotação e uma aspa " "como o mesmo símbolo, o que permite usá-los em frases. " #: kchmsearchwindow.cpp:207 msgid "Reading dictionary..." msgstr "Lendo diretório..." #: kchmsearchwindow.cpp:221 kchmsearchwindow.cpp:222 msgid "Generating search index..." msgstr "Gerando índice de pesquisa..." #: kchmsetupdialog.cpp:183 msgid "" "Changing those options requires restarting the application to take effect." msgstr "" "Alterar essas opções requer a reinicialização do programa para fazer efeito." #: kchmsetupdialog.cpp:192 msgid "*|Executables" msgstr "*|Executáveis" #: kchmsetupdialog.cpp:192 kchmsetupdialog.cpp:195 msgid "Choose an editor executable" msgstr "Escolha um editor executável" #: kchmsetupdialog.cpp:197 msgid "Executables (*)" msgstr "Executáveis (*)" #: kchmviewwindowmgr.cpp:58 msgid "Close current page" msgstr "Fechar página atual" #: kchmviewwindowmgr.cpp:70 msgid "Add page" msgstr "Adicionar página" #: kchmviewwindowmgr.cpp:171 kchmviewwindowmgr.cpp:238 msgid "Alt+%1" msgstr "Alt+%1" #: kchmviewwindow_qtextbrowser.cpp:121 kchmviewwindow_qtwebkit.cpp:256 msgid "Printing aborted" msgstr "Impressão cancelada" #: kchmviewwindow_qtextbrowser.cpp:126 kchmviewwindow_qtwebkit.cpp:261 msgid "Printing finished" msgstr "Impressão concluída" #: kchmviewwindow_qtextbrowser.cpp:317 kchmviewwindow_qtwebkit.cpp:375 msgid "Open Link in a new tab\tShift+LMB" msgstr "Abrir Link em uma nova aba\tShift+Botão esquerdo do mouse" #: kchmviewwindow_qtextbrowser.cpp:318 kchmviewwindow_qtwebkit.cpp:376 msgid "Open Link in a new background tab\tCtrl+LMB" msgstr "" "Abrir Link em uma nova aba em segundo plano\tCtrl+Botão esquerdo do mouse" #: main.cpp:45 msgid "Perform auto testing" msgstr "Realizar testes automaticamente" #: main.cpp:46 msgid "Perform short auto testing" msgstr "Realizar testes curtos automaticamente" #: main.cpp:47 msgid "A CHM file to show" msgstr "Um arquivo CHM para mostrar" #: main.cpp:48 msgid "" "'--search ' specifies the search query to search, and activate the " "first entry if found" msgstr "" "'--search ' especifica a consulta da pesquisa, e destaca a " "primeira entrada se encontrada" #: main.cpp:49 msgid "" "'--sindex ' specifies the word to find in index, and activate if found" msgstr "" "'--sindex ' especifica a palavra para encontrar no índice, e a " "destaca se encontrada" #: main.cpp:50 msgid "" "'--stoc ' specifies the word(s) to find in TOC, and activate if " "found. Wildcards allowed." msgstr "" "'--stoc ' especifica a(s) palavra(s) para localizar na Tabela " "de Conteúdo, e a(s) destaca(s) se encontrada(s). Caracteres especiais são " "permitidos." #: main.cpp:56 msgid "CHM file viewer" msgstr "Visualizador de arquivos CHM" #: main.cpp:58 msgid "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" msgstr "(c) 2004-2008 George Yunaev, gyunaev@ulduzsoft.com" #: main.cpp:59 msgid "Please report bugs to kchmviewer@ulduzsoft.com" msgstr "Por favor, relate falhas para kchmviewer@ulduzsoft.com" #. i18n: file ./dialog_setup.ui line 20 #: rc.cpp:3 #, no-c-format msgid "KchmViewer settings" msgstr "Configurações do KchmViewer" #. i18n: file ./dialog_setup.ui line 42 #: rc.cpp:6 #, no-c-format msgid "General behavior" msgstr "Comportamento geral" #. i18n: file ./dialog_setup.ui line 62 #: rc.cpp:9 #, no-c-format msgid "If no arguments given on load" msgstr "Se não houver argumentos apresentados na carregamento" #. i18n: file ./dialog_setup.ui line 74 #: rc.cpp:12 #, no-c-format msgid "Open the 'open CHM file' dialog" msgstr "Abrir o diálogo 'abrir arquivo CHM'" #. i18n: file ./dialog_setup.ui line 81 #: rc.cpp:15 #, no-c-format msgid "Open the &last used CHM file, if exist" msgstr "Abrir o ú<imo arquivo CHM usado, se existir" #. i18n: file ./dialog_setup.ui line 84 #: rc.cpp:18 #, no-c-format msgid "Alt+L" msgstr "Alt+L" #. i18n: file ./dialog_setup.ui line 94 #: rc.cpp:21 #, no-c-format msgid "History" msgstr "Histórico" #. i18n: file ./dialog_setup.ui line 114 #: rc.cpp:24 #, no-c-format msgid "Store history information for" msgstr "Armazenar informações do histórico para" #. i18n: file ./dialog_setup.ui line 134 #: rc.cpp:27 #, no-c-format msgid "latest files" msgstr "últimos arquivos" #. i18n: file ./dialog_setup.ui line 146 #: rc.cpp:30 #, no-c-format msgid "" "Remembers the information about the files, which were opened. Remembers last " "opened page, search history, font size, bookmarks and so on." msgstr "" "Lembrar-se das informações sobre os arquivos que foram abertos. Lembrar-se " "da última página aberta, do histórico de pesquisa, do tamanho da fonte, dos " "marcadores e assim por diante." #. i18n: file ./dialog_setup.ui line 149 #: rc.cpp:33 #, no-c-format msgid "R&emember extra information for history files" msgstr "L&embre-se de informações adicionais para os arquivos de histórico" #. i18n: file ./dialog_setup.ui line 152 #: rc.cpp:36 #, no-c-format msgid "Alt+E" msgstr "Alt+E" #. i18n: file ./dialog_setup.ui line 164 #: rc.cpp:39 #, no-c-format msgid "CHM security settings" msgstr "Configurações de segurança CHM" #. i18n: file ./dialog_setup.ui line 176 #: rc.cpp:42 #, no-c-format msgid "When external link clicked" msgstr "Quando clicado em um link externo" #. i18n: file ./dialog_setup.ui line 188 #: rc.cpp:45 #, no-c-format msgid "Alwa&ys open it in external browser" msgstr "Se&mpre abri-lo em um navegador externo" #. i18n: file ./dialog_setup.ui line 191 #: rc.cpp:48 #, no-c-format msgid "Alt+Y" msgstr "Alt+Y" #. i18n: file ./dialog_setup.ui line 198 #. i18n: file ./dialog_setup.ui line 237 #: rc.cpp:51 rc.cpp:63 #, no-c-format msgid "Ask for confirmation" msgstr "Solicitar confirmação" #. i18n: file ./dialog_setup.ui line 205 #: rc.cpp:54 #, no-c-format msgid "Do not open the link" msgstr "Não abrir o link" #. i18n: file ./dialog_setup.ui line 218 #: rc.cpp:57 #, no-c-format msgid "When link pointed to a new CHM file clicked" msgstr "Quando o link aponta para um novo arquivo CHM clicado" #. i18n: file ./dialog_setup.ui line 230 #: rc.cpp:60 #, no-c-format msgid "Always open a new CHM file" msgstr "Sempre abrir um novo arquivo CHM" #. i18n: file ./dialog_setup.ui line 244 #: rc.cpp:66 #, no-c-format msgid "Do not open a new CHM file" msgstr "Não abrir um novo arquivo CHM" #. i18n: file ./dialog_setup.ui line 271 #: rc.cpp:69 #, no-c-format msgid "Version-specific settings" msgstr "Configurações específicas da versão" #. i18n: file ./dialog_setup.ui line 283 #: rc.cpp:72 #, no-c-format msgid "KDE version settings" msgstr "Configurações da versão do KDE" #. i18n: file ./dialog_setup.ui line 295 #: rc.cpp:75 #, no-c-format msgid "To show HTML content, use" msgstr "Para mostrar o conteúdo HTML, utilize" #. i18n: file ./dialog_setup.ui line 307 #: rc.cpp:78 #, no-c-format msgid "&QTextBrowser-based widget" msgstr "Componente baseado no &QTextBrowser" #. i18n: file ./dialog_setup.ui line 310 #: rc.cpp:81 #, no-c-format msgid "Alt+Q" msgstr "Alt+Q" #. i18n: file ./dialog_setup.ui line 317 #: rc.cpp:84 #, no-c-format msgid "&KHTMLPart-based widget" msgstr "Componente baseado no &KHTMLPart" #. i18n: file ./dialog_setup.ui line 320 #: rc.cpp:87 #, no-c-format msgid "Alt+K" msgstr "Alt+K" #. i18n: file ./dialog_setup.ui line 327 #: rc.cpp:90 #, no-c-format msgid "Qt &Webkit (requires Qt 4.4 or higher)" msgstr "Qt &Webkit (requer Qt 4.4 ou superior)" #. i18n: file ./dialog_setup.ui line 337 #: rc.cpp:93 #, no-c-format msgid "KHTMLPart security" msgstr "Segurança KHTMLPart" #. i18n: file ./dialog_setup.ui line 349 #: rc.cpp:96 #, no-c-format msgid "Enable &refresh" msgstr "Habilitar &atualizar automaticamente" #. i18n: file ./dialog_setup.ui line 352 #: rc.cpp:99 #, no-c-format msgid "Alt+R" msgstr "Alt+R" #. i18n: file ./dialog_setup.ui line 359 #: rc.cpp:102 #, no-c-format msgid "Enable &Java" msgstr "Habilitar &Java" #. i18n: file ./dialog_setup.ui line 362 #: rc.cpp:105 #, no-c-format msgid "Alt+J" msgstr "Alt+J" #. i18n: file ./dialog_setup.ui line 369 #: rc.cpp:108 #, no-c-format msgid "Enable &plugins" msgstr "Habilitar &plug-ins" #. i18n: file ./dialog_setup.ui line 372 #: rc.cpp:111 #, no-c-format msgid "Alt+P" msgstr "Alt+P" #. i18n: file ./dialog_setup.ui line 379 #: rc.cpp:114 #, no-c-format msgid "Enable Java&Script" msgstr "Habilitar Java&Script" #. i18n: file ./dialog_setup.ui line 382 #: rc.cpp:117 #, no-c-format msgid "Alt+S" msgstr "Alt+S" #. i18n: file ./dialog_setup.ui line 409 #: rc.cpp:120 #, no-c-format msgid "Advanced" msgstr "Avançado" #. i18n: file ./dialog_setup.ui line 415 #: rc.cpp:123 #, no-c-format msgid "View HTML source command uses" msgstr "Exibir comandos utilizados no fonte do HTML" #. i18n: file ./dialog_setup.ui line 427 #: rc.cpp:126 #, no-c-format msgid "Built-in HTML source viewer" msgstr "Exibir fonte do HTML embutido" #. i18n: file ./dialog_setup.ui line 437 #: rc.cpp:129 #, no-c-format msgid "E&xternal program, specified below" msgstr "Programa e&xterno, especificado a seguir" #. i18n: file ./dialog_setup.ui line 440 #: rc.cpp:132 #, no-c-format msgid "Alt+X" msgstr "Alt+X" #. i18n: file ./dialog_setup.ui line 455 #: rc.cpp:135 #, no-c-format msgid "External program:" msgstr "Programa externo:" #. i18n: file ./dialog_setup.ui line 468 #: rc.cpp:138 #, no-c-format msgid "&Browse" msgstr "&Navegar" #. i18n: file ./dialog_setup.ui line 480 #: rc.cpp:141 #, no-c-format msgid "Other" msgstr "Outro" #. i18n: file ./dialog_setup.ui line 486 #: rc.cpp:144 #, no-c-format msgid "Use right-to-left layout direction (Arabic adn Hebrew layouts)" msgstr "" "Utilizar a direção do layout da direita para a esquerda (layouts Hebraico e " "Árabe)" #. i18n: file ./dialog_setup.ui line 493 #: rc.cpp:147 #, no-c-format msgid "" "Automatically detect encoding for KHTMLPart and WebKit browsers (not " "recommended)" msgstr "" "Detectar automaticamente a codificação para os navegadores Webkit e " "KHTMLPart (não recomendado)" #. i18n: file ./window_main.ui line 14 #: rc.cpp:150 #, no-c-format msgid "kchmviewer" msgstr "kchmviewer" #. i18n: file ./window_main.ui line 28 #: rc.cpp:153 #, no-c-format msgid "&Settings" msgstr "&Configurações" #. i18n: file ./window_main.ui line 34 #: rc.cpp:156 #, no-c-format msgid "&Bookmarks" msgstr "&Marcadores" #. i18n: file ./window_main.ui line 41 #: rc.cpp:159 #, no-c-format msgid "&File" msgstr "&Arquivo" #. i18n: file ./window_main.ui line 50 #: rc.cpp:162 #, no-c-format msgid "&Edit" msgstr "&Editar" #. i18n: file ./window_main.ui line 59 #: rc.cpp:165 #, no-c-format msgid "&View" msgstr "&Exibir" #. i18n: file ./window_main.ui line 73 #: rc.cpp:168 #, no-c-format msgid "&Windows" msgstr "&Janelas" #. i18n: file ./window_main.ui line 87 #: rc.cpp:171 #, no-c-format msgid "general toolbar" msgstr "Barra de ferramentas geral" #. i18n: file ./window_main.ui line 103 #: rc.cpp:174 #, no-c-format msgid "navigation toolbar" msgstr "Barra de ferramentas de navegação" #. i18n: file ./window_main.ui line 120 #: rc.cpp:177 #, no-c-format msgid "action toolbar" msgstr "Barra de ferramentas de ação" #. i18n: file ./window_main.ui line 146 #: rc.cpp:180 #, no-c-format msgid "&Print..." msgstr "&Imprimir..." #. i18n: file ./window_main.ui line 149 #: rc.cpp:183 #, no-c-format msgid "Print" msgstr "Imprimir" #. i18n: file ./window_main.ui line 152 #: rc.cpp:186 #, no-c-format msgid "Print current page" msgstr "Imprimir página atual" #. i18n: file ./window_main.ui line 155 #: rc.cpp:189 #, no-c-format msgid "Prints currently opened page." msgstr "Imprime a página aberta atualmente." #. i18n: file ./window_main.ui line 158 #: rc.cpp:192 #, no-c-format msgid "Ctrl+P" msgstr "Ctrl+P" #. i18n: file ./window_main.ui line 163 #: rc.cpp:195 #, no-c-format msgid "&Quit" msgstr "&Sair" #. i18n: file ./window_main.ui line 166 #: rc.cpp:198 #, no-c-format msgid "Exit" msgstr "Sair" #. i18n: file ./window_main.ui line 169 #: rc.cpp:201 #, no-c-format msgid "Exits the application" msgstr "Sai do programa" #. i18n: file ./window_main.ui line 172 #: rc.cpp:204 #, no-c-format msgid "Ctrl+Q" msgstr "Ctrl+Q" #. i18n: file ./window_main.ui line 181 #: rc.cpp:207 #, no-c-format msgid "C&opy" msgstr "C&opiar" #. i18n: file ./window_main.ui line 184 #: rc.cpp:210 #, no-c-format msgid "Copy" msgstr "Copiar" #. i18n: file ./window_main.ui line 187 #: rc.cpp:213 #, no-c-format msgid "Copies selected content to clipboard" msgstr "Copia o conteúdo selecionado para a área de transferência" #. i18n: file ./window_main.ui line 190 #: rc.cpp:216 #, no-c-format msgid "Ctrl+C" msgstr "Ctrl+C" #. i18n: file ./window_main.ui line 199 #: rc.cpp:219 #, no-c-format msgid "&Select All" msgstr "&Selecionar tudo" #. i18n: file ./window_main.ui line 202 #: rc.cpp:222 #, no-c-format msgid "Paste" msgstr "Colar" #. i18n: file ./window_main.ui line 205 #: rc.cpp:225 #, no-c-format msgid "Selects everything in the document" msgstr "Seleciona tudo no documento" #. i18n: file ./window_main.ui line 208 #: rc.cpp:228 #, no-c-format msgid "Ctrl+V" msgstr "Ctrl+V" #. i18n: file ./window_main.ui line 217 #: rc.cpp:231 #, no-c-format msgid "&Find..." msgstr "&Localizar..." #. i18n: file ./window_main.ui line 220 #: rc.cpp:234 #, no-c-format msgid "Find" msgstr "Localizar" #. i18n: file ./window_main.ui line 223 #: rc.cpp:237 #, no-c-format msgid "Find text in currently opened page" msgstr "Localizar texto na página aberta atualmente" #. i18n: file ./window_main.ui line 226 #: rc.cpp:240 #, no-c-format msgid "Enters the Find in page mode" msgstr "Entra no Localizar no modo de página" #. i18n: file ./window_main.ui line 229 #: rc.cpp:243 #, no-c-format msgid "Ctrl+F" msgstr "Ctrl+F" #. i18n: file ./window_main.ui line 234 #: rc.cpp:246 #, no-c-format msgid "E&xtract CHM content..." msgstr "E&xtrair conteúdo CHM..." #. i18n: file ./window_main.ui line 237 #: rc.cpp:249 #, no-c-format msgid "Extract the CHM content to the directory" msgstr "Extrair o conteúdo CHM para o diretório" #. i18n: file ./window_main.ui line 240 #: rc.cpp:252 #, no-c-format msgid "" "Exctracts the CHM archive content to the specified directory. All the files " "are extracted." msgstr "" "Extrai o conteúdo do arquivo CHM para o diretório especificado. Todos os " "arquivos são extraídos." #. i18n: file ./window_main.ui line 245 #: rc.cpp:255 #, no-c-format msgid "&Application settings..." msgstr "Configur&ações do programa..." #. i18n: file ./window_main.ui line 248 #. i18n: file ./window_main.ui line 251 #: rc.cpp:258 rc.cpp:261 #, no-c-format msgid "Change the application settings" msgstr "Altera as configurações do programa" #. i18n: file ./window_main.ui line 260 #: rc.cpp:264 #, no-c-format msgid "&Add bookmark" msgstr "&Adicionar marcador" #. i18n: file ./window_main.ui line 263 #: rc.cpp:267 #, no-c-format msgid "Adds a bookmark for currently opened page" msgstr "Adicionar um marcador para a página aberta atualmente" #. i18n: file ./window_main.ui line 266 #: rc.cpp:270 #, no-c-format msgid "" "Adds a bookmark for currently opened page. Remembers the opened page, and " "scroll position. Bookmarks are accessible through Bookmarks menu or tab." msgstr "" "Adiciona um marcador para a página aberta atualmente. Recorda a página " "aberta, e a posição de rolagem. Marcadores são acessíveis através da aba ou " "menu Marcadores." #. i18n: file ./window_main.ui line 269 #: rc.cpp:273 #, no-c-format msgid "Ctrl+B" msgstr "Ctrl+B" #. i18n: file ./window_main.ui line 278 #: rc.cpp:276 #, no-c-format msgid "&Increase font size" msgstr "&Aumentar o tamanho da fonte" #. i18n: file ./window_main.ui line 281 #: rc.cpp:279 #, no-c-format msgid "Increase the font size" msgstr "Aumentar o tamanho da fonte" #. i18n: file ./window_main.ui line 284 #: rc.cpp:282 #, no-c-format msgid "Increases the document font size. The new font size will be stored." msgstr "" "Aumenta o tamanho da fonte do documento. O tamanho da nova fonte será " "armazenada." #. i18n: file ./window_main.ui line 287 #: rc.cpp:285 #, no-c-format msgid "Ctrl++" msgstr "Ctrl++" #. i18n: file ./window_main.ui line 296 #: rc.cpp:288 #, no-c-format msgid "&Decrease font size" msgstr "&Diminuir o tamanho da fonte" #. i18n: file ./window_main.ui line 299 #: rc.cpp:291 #, no-c-format msgid "Decrease the font size" msgstr "Diminuir o tamanho da fonte" #. i18n: file ./window_main.ui line 302 #: rc.cpp:294 #, no-c-format msgid "Decreases the document font size. The new font size will be stored." msgstr "" "Diminui o tamanho da fonte do documento. O tamanho da nova fonte será " "armazenada." #. i18n: file ./window_main.ui line 305 #: rc.cpp:297 #, no-c-format msgid "Ctrl+-" msgstr "Ctrl+-" #. i18n: file ./window_main.ui line 314 #: rc.cpp:300 #, no-c-format msgid "&View HTML source" msgstr "&Exibir fonte do HTML" #. i18n: file ./window_main.ui line 317 #: rc.cpp:303 #, no-c-format msgid "View HTML source of current page" msgstr "Exibir fonte do HTML da página atual" #. i18n: file ./window_main.ui line 320 #: rc.cpp:306 #, no-c-format msgid "Shows the HTML source of currently opened page" msgstr "Mostra o fonte do HTML da página aberta atualmente" #. i18n: file ./window_main.ui line 323 #: rc.cpp:309 #, no-c-format msgid "Ctrl+U" msgstr "Ctrl+U" #. i18n: file ./window_main.ui line 331 #: rc.cpp:312 #, no-c-format msgid "Enable &full screen mode" msgstr "Habilitar modo &tela cheia" #. i18n: file ./window_main.ui line 334 #: rc.cpp:315 #, no-c-format msgid "Enters or leaves the fullscreen mode" msgstr "Entra ou sai do modo tela cheia" #. i18n: file ./window_main.ui line 337 #: rc.cpp:318 #, no-c-format msgid "F11" msgstr "F11" #. i18n: file ./window_main.ui line 351 #: rc.cpp:321 #, no-c-format msgid "Enable &side window" msgstr "Habilitar &janela lateral" #. i18n: file ./window_main.ui line 354 #: rc.cpp:324 #, no-c-format msgid "" "Shows or hides the size window (with Content, Index, Search and Bookmark " "tabs)" msgstr "" "Mostra ou oculta o tamanho da janela (como as abas Conteúdo, Índice, " "Pesquisar e Favoritos)" #. i18n: file ./window_main.ui line 357 #: rc.cpp:327 #, no-c-format msgid "F9" msgstr "F9" #. i18n: file ./window_main.ui line 369 #: rc.cpp:330 #, no-c-format msgid "&Locate in contents window" msgstr "&Localizar no conteúdo da janela" #. i18n: file ./window_main.ui line 372 #: rc.cpp:333 #, no-c-format msgid "Locate the current page in contents window" msgstr "Localizar a página atual no conteúdo da janela" #. i18n: file ./window_main.ui line 375 #: rc.cpp:336 #, no-c-format msgid "" "If the current page is present in the Table of Contents, locate it there. " msgstr "" "Se a página atual está presente na Tabela de Conteúdo, localize-a nessa " "Tabela." #. i18n: file ./window_main.ui line 378 #: rc.cpp:339 #, no-c-format msgid "Ctrl+" msgstr "Ctrl+" #. i18n: file ./window_main.ui line 383 #: rc.cpp:342 #, no-c-format msgid "Set &encoding" msgstr "D&efinir codificação" #. i18n: file ./window_main.ui line 386 #: rc.cpp:345 #, no-c-format msgid "Changes the current document encoding. " msgstr "Altera a codificação do documento atual." #. i18n: file ./window_main.ui line 395 #: rc.cpp:348 #, no-c-format msgid "&Open..." msgstr "&Abrir..." #. i18n: file ./window_main.ui line 398 #: rc.cpp:351 #, no-c-format msgid "Open a CHM file" msgstr "Abrir um arquivo CHM" #. i18n: file ./window_main.ui line 401 #: rc.cpp:354 #, no-c-format msgid "Opens a new CHM file" msgstr "Abre um novo arquivo CHM" #. i18n: file ./window_main.ui line 410 #: rc.cpp:357 #, no-c-format msgid "Back" msgstr "Voltar" #. i18n: file ./window_main.ui line 413 #: rc.cpp:360 #, no-c-format msgid "Navigate back" msgstr "Navegar para trás" #. i18n: file ./window_main.ui line 416 #: rc.cpp:363 #, no-c-format msgid "Navigate back in navigation history" msgstr "Navegar para trás no histórico da navegação" #. i18n: file ./window_main.ui line 425 #: rc.cpp:366 #, no-c-format msgid "Forward" msgstr "Avançar" #. i18n: file ./window_main.ui line 428 #: rc.cpp:369 #, no-c-format msgid "Navigate forward" msgstr "Navegar para frente" #. i18n: file ./window_main.ui line 431 #: rc.cpp:372 #, no-c-format msgid "Navigate forward in navigation history" msgstr "Navegar para frente no histórico da navegação" #. i18n: file ./window_main.ui line 440 #: rc.cpp:375 #, no-c-format msgid "Home" msgstr "Início" #. i18n: file ./window_main.ui line 443 #: rc.cpp:378 #, no-c-format msgid "Navigate home" msgstr "Navegar até o início" #. i18n: file ./window_main.ui line 446 #: rc.cpp:381 #, no-c-format msgid "Navigate to the document Home page, as specified in the document." msgstr "" "Navegar até a página Inicial do documento, conforme especificado no " "documento." #. i18n: file ./window_main.ui line 455 #: rc.cpp:384 #, no-c-format msgid "Previous page in Table of Context" msgstr "Página anterior na Tabela de Contexto" #. i18n: file ./window_main.ui line 458 #: rc.cpp:387 #, no-c-format msgid "Previous page in TOC" msgstr "Página anterior na TDC (Tabela de Contexto)" #. i18n: file ./window_main.ui line 461 #: rc.cpp:390 #, no-c-format msgid "Go to the previous page in the Table of Contents" msgstr "Ir para a página anterior na Tabela de Conteúdo" #. i18n: file ./window_main.ui line 464 #: rc.cpp:393 #, no-c-format msgid "" "Go to the previous page in the Table of Contents

Shortcut: " "Ctrl+Left Arrow" msgstr "" "Ir para a página anterior na Tabela de Conteúdo

Atalho: " "Ctrl+Seta para a esquerda" #. i18n: file ./window_main.ui line 473 #: rc.cpp:396 #, no-c-format msgid "Next page in Table of Context" msgstr "Próxima página na Tabela de Contexto" #. i18n: file ./window_main.ui line 476 #: rc.cpp:399 #, no-c-format msgid "Next page in TOC" msgstr "Próxima página na TDC" #. i18n: file ./window_main.ui line 479 #: rc.cpp:402 #, no-c-format msgid "Go to the next page in the Table of Contents" msgstr "Ir para a próxima página na Tabela de Conteúdo" #. i18n: file ./window_main.ui line 482 #: rc.cpp:405 #, no-c-format msgid "" "Go to the next page in the Table of Contents

Shortcut: " "Ctrl+Right Arrow" msgstr "" "Ir para a próxima página na Tabela de Conteúdo

Atalho: " "Ctrl+Seta para a direita" #. i18n: file ./window_main.ui line 487 #: rc.cpp:408 #, no-c-format msgid "&Close window" msgstr "Fe&char janela" #. i18n: file ./window_main.ui line 490 #: rc.cpp:411 #, no-c-format msgid "Close current window" msgstr "Fechar a janela atual" #. i18n: file ./window_main.ui line 493 #: rc.cpp:414 #, no-c-format msgid "Closes currently opened window" msgstr "Fecha a janela aberta atualmente" #. i18n: file ./window_main.ui line 496 #: rc.cpp:417 #, no-c-format msgid "Ctrl+W" msgstr "Ctrl+W" #: rc.cpp:418 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Márcio Moraes" #: rc.cpp:419 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "marciopanto@gmail.com" kchmviewer-7.5/PaxHeaders.8614/nsis0000644000000000000000000000013212622005721014104 xustar0030 mtime=1447562193.123734689 30 atime=1447562193.096735057 30 ctime=1447562193.123734689 kchmviewer-7.5/nsis/0000755000175000001440000000000012622005721014512 5ustar00timusers00000000000000kchmviewer-7.5/nsis/PaxHeaders.8614/license.txt0000644000000000000000000000012411270677072016361 xustar0027 mtime=1256422970.829794 27 atime=1447562193.122734 30 ctime=1447562193.123734689 kchmviewer-7.5/nsis/license.txt0000644000175000001440000010451311270677072016715 0ustar00timusers00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. 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 . 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 . kchmviewer-7.5/nsis/PaxHeaders.8614/installer-win.nsis0000644000000000000000000000012412472440607017661 xustar0027 mtime=1424638343.952181 27 atime=1447562193.121734 30 ctime=1447562193.121734717 kchmviewer-7.5/nsis/installer-win.nsis0000755000175000001440000000614412472440607020221 0ustar00timusers00000000000000; NSIS script file ;-------------------------------- ;Include Modern UI !include "MUI.nsh" ;-------------------------------- ;General ; The icon for the installer. ; MUI_ICON icon_file ; The icon for the uninstaller. ; MUI_UNICON icon_file Name "KchmViewer" OutFile "InstallKchmViewer.exe" InstallDir "$PROGRAMFILES\Ulduzsoft\KchmViewer" InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Ulduzsoft\KchmViewer" "" SetCompressor lzma ;-------------------------------- ;Variables Var MUI_TEMP Var STARTMENU_FOLDER ;-------------------------------- ;Interface Settings !define MUI_ABORTWARNING ;-------------------------------- ;Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "license.txt" !insertmacro MUI_PAGE_DIRECTORY ;Start Menu Folder Page Configuration !define MUI_STARTMENUPAGE_REGISTRY_ROOT HKEY_LOCAL_MACHINE !define MUI_STARTMENUPAGE_REGISTRY_KEY "SOFTWARE\Ulduzsoft\KchmViewer" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH ; Uninstaller pages !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ;-------------------------------- ;Languages !insertmacro MUI_LANGUAGE "English" ;-------------------------------- ;Installer Sections Section "General" General SetOutPath "$INSTDIR" ; Our files CreateDirectory "$INSTDIR" File kchmviewer.exe File QtGui4.dll File QtCore4.dll File QtNetwork4.dll File QtWebKit4.dll File QtXml4.dll File libgcc_s_dw2-1.dll File libstdc++-6.dll File libwinpthread-1.dll File kchmviewer.exe.manifest ;Store installation folder WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Ulduzsoft\KchmViewer" "" "$INSTDIR" ;Create uninstaller WriteUninstaller "$INSTDIR\uninst.exe" !insertmacro MUI_STARTMENU_WRITE_BEGIN Application ;Create shortcuts CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\kchmviewer.lnk" "$INSTDIR\kchmviewer.exe" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\uninst.exe" !insertmacro MUI_STARTMENU_WRITE_END SectionEnd ;-------------------------------- ;Uninstaller Section Section "Uninstall" ; Our files Delete "$INSTDIR\kchmviewer.exe" Delete "$INSTDIR\QtGui4.dll" Delete "$INSTDIR\QtCore4.dll" Delete "$INSTDIR\QtNetwork4.dll" Delete "$INSTDIR\QtWebKit4.dll" Delete "$INSTDIR\QtXml.dll" Delete "$INSTDIR\libgcc_s_dw2-1.dll" Delete "$INSTDIR\libstdc++-6.dll" Delete "$INSTDIR\libwinpthread-1.dll" Delete "$INSTDIR\kchmviewer.exe.manifest" Delete "$INSTDIR\uninst.exe" RMDir "$INSTDIR" !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" Delete "$SMPROGRAMS\$MUI_TEMP\kchmviewer.lnk" Delete "$SMPROGRAMS\$MUI_TEMP" DeleteRegKey /ifempty HKEY_LOCAL_MACHINE "SOFTWARE\Ulduzsoft\KchmViewer" DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\KchmViewer" SectionEnd kchmviewer-7.5/nsis/PaxHeaders.8614/kchmviewer.exe.manifest0000644000000000000000000000012411022327557020645 xustar0027 mtime=1212788591.264176 27 atime=1447562193.122734 30 ctime=1447562193.122734702 kchmviewer-7.5/nsis/kchmviewer.exe.manifest0000644000175000001440000000073211022327557021177 0ustar00timusers00000000000000 Windows Forms Common Control manifest kchmviewer-7.5/nsis/PaxHeaders.8614/installer.nsis0000644000000000000000000000012412322442447017064 xustar0027 mtime=1397376295.658107 27 atime=1447562193.122734 30 ctime=1447562193.122734702 kchmviewer-7.5/nsis/installer.nsis0000644000175000001440000000774712322442447017433 0ustar00timusers00000000000000; NSIS script file ;-------------------------------- ;Include Modern UI !include "MUI.nsh" ;-------------------------------- ;General ; The icon for the installer. ; MUI_ICON icon_file ; The icon for the uninstaller. ; MUI_UNICON icon_file Name "KchmViewer" OutFile "InstallKchmViewer.exe" InstallDir "$PROGRAMFILES\Ulduzsoft\KchmViewer" InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Ulduzsoft\KchmViewer" "" SetCompressor lzma ;-------------------------------- ;Variables Var MUI_TEMP Var STARTMENU_FOLDER ;-------------------------------- ;Interface Settings !define MUI_ABORTWARNING ;-------------------------------- ;Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "license.txt" !insertmacro MUI_PAGE_DIRECTORY ;Start Menu Folder Page Configuration !define MUI_STARTMENUPAGE_REGISTRY_ROOT HKEY_LOCAL_MACHINE !define MUI_STARTMENUPAGE_REGISTRY_KEY "SOFTWARE\Ulduzsoft\KchmViewer" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH ; Uninstaller pages !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ;-------------------------------- ;Languages !insertmacro MUI_LANGUAGE "English" ;-------------------------------- ;Installer Sections Section "General" General SetOutPath "$INSTDIR" ; Our files CreateDirectory "$INSTDIR\imageformats" CreateDirectory "$INSTDIR\codecs" CreateDirectory "$INSTDIR\iconengines" File /oname=$INSTDIR\imageformats\qgif4.dll qgif4.dll File /oname=$INSTDIR\imageformats\qico4.dll qico4.dll File /oname=$INSTDIR\imageformats\qjpeg4.dll qjpeg4.dll File /oname=$INSTDIR\imageformats\qsvg4.dll qsvg4.dll File /oname=$INSTDIR\imageformats\qtiff4.dll qtiff4.dll File /oname=$INSTDIR\iconengines\qsvgicon4.dll qsvgicon4.dll File kchmviewer.exe File QtGui4.dll File QtCore4.dll File QtNetwork4.dll File QtWebKit4.dll File QtXmlPatterns4.dll File QtXml4.dll ; File mingwm10.dll File kchmviewer.exe.manifest ;Store installation folder WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Ulduzsoft\KchmViewer" "" "$INSTDIR" ;Create uninstaller WriteUninstaller "$INSTDIR\uninst.exe" !insertmacro MUI_STARTMENU_WRITE_BEGIN Application ;Create shortcuts CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\kchmviewer.lnk" "$INSTDIR\kchmviewer.exe" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\uninst.exe" !insertmacro MUI_STARTMENU_WRITE_END SectionEnd ;-------------------------------- ;Uninstaller Section Section "Uninstall" ; Our files Delete "$INSTDIR\imageformats\qgif4.dll" Delete "$INSTDIR\imageformats\qico4.dll" Delete "$INSTDIR\imageformats\qjpeg4.dll" Delete "$INSTDIR\imageformats\qmng4.dll" Delete "$INSTDIR\imageformats\qsvg4.dll" Delete "$INSTDIR\imageformats\qtiff4.dll" Delete "$INSTDIR\iconengines\qsvgicon4.dll" Delete "$INSTDIR\codecs\qcncodecs4.dll" Delete "$INSTDIR\codecs\qjpcodecs4.dll" Delete "$INSTDIR\codecs\qkrcodecs4.dll" Delete "$INSTDIR\codecs\qtwcodecs4.dll" Delete "$INSTDIR\kchmviewer.exe" Delete "$INSTDIR\QtGui4.dll" Delete "$INSTDIR\QtCore4.dll" Delete "$INSTDIR\QtNetwork4.dll" Delete "$INSTDIR\QtWebKit4.dll" Delete "$INSTDIR\QtXmlPatterns4.dll" Delete "$INSTDIR\mingwm10.dll" Delete "$INSTDIR\kchmviewer.exe.manifest" Delete "$INSTDIR\uninst.exe" RMDir "$INSTDIR\imageformats" RMDir "$INSTDIR\iconengines" RMDir "$INSTDIR\codecs" RMDir "$INSTDIR" !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" Delete "$SMPROGRAMS\$MUI_TEMP\kchmviewer.lnk" Delete "$SMPROGRAMS\$MUI_TEMP" DeleteRegKey /ifempty HKEY_LOCAL_MACHINE "SOFTWARE\Ulduzsoft\KchmViewer" DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\KchmViewer" SectionEnd kchmviewer-7.5/nsis/PaxHeaders.8614/create_installer.sh0000644000000000000000000000012312446223156020045 xustar0026 mtime=1419322990.47456 27 atime=1447562193.121734 30 ctime=1447562193.121734717 kchmviewer-7.5/nsis/create_installer.sh0000644000175000001440000000301412446223156020374 0ustar00timusers00000000000000#!/bin/sh # File to get the version from FILE_VERSION=../src/version.h # Generated binary BINARY=../src/bin/kchmviewer.exe # Qt libs QT=/usr/toolchains/windows-x86-complete/i686-w64-mingw32.static/qt4-shared/ QTPATH=${QT}/bin QTPLUGPATH=${QT}/plugins # Start the mojo QTLIBS="QtGui4.dll QtCore4.dll QtNetwork4.dll QtWebKit4.dll QtXml4.dll QtXmlPatterns4.dll QtSvg4.dll" QTPLUGINS="imageformats/qgif4.dll imageformats/qico4.dll imageformats/qjpeg4.dll imageformats/qmng4.dll imageformats/qsvg4.dll \ imageformats/qtiff4.dll iconengines/qsvgicon4.dll" find . -type l -delete for lib in $QTLIBS; do if [ ! -f "$QTPATH/$lib" ]; then echo "Error: file $QTPATH/$lib not found" exit 1 fi ln -s $QTPATH/$lib $lib || exit 1 echo "Added Qt library $lib" done for plug in $QTPLUGINS; do if [ ! -f "$QTPLUGPATH/$plug" ]; then echo "Error: plugin $QTPLUGPATH/$plug not found" exit 1 fi file=`basename $plug` ln -s "$QTPLUGPATH/$plug" $file || exit 1 echo "Added Qt plugin $plug" done cp $BINARY kchmviewer.exe || exit 1 export NSISDIR=/home/tim/bin/nsis # Get current, and save the next version VERSION_MAJOR=`sed -n 's/^\#define\s\+APP_VERSION_MAJOR\s\+\([0-9]\+\)/\1/p' $FILE_VERSION` VERSION_MINOR=`sed -n 's/^\#define\s\+APP_VERSION_MINOR\s\+\"\?\([0-9a-z]\+\)\"\?/\1/p' $FILE_VERSION` VERSION="$VERSION_MAJOR.$VERSION_MINOR" INSTNAME="InstallKchmviewer-$VERSION.exe" echo "Creating $INSTNAME" makensis installer.nsis || exit 1 # Remove stuff rm kchmviewer.exe find . -type l -delete mv InstallKchmViewer.exe $INSTNAME kchmviewer-7.5/PaxHeaders.8614/FindLibchm.cmake0000644000000000000000000000012311023347400016203 xustar0027 mtime=1213058816.373073 27 atime=1447562193.031735 29 ctime=1447562193.03173594 kchmviewer-7.5/FindLibchm.cmake0000644000175000001440000000121011023347400016526 0ustar00timusers00000000000000# Tries to find libchm FIND_PATH(LIBCHM_INCLUDE_DIR chm_lib.h /usr/include /usr/local/include) FIND_LIBRARY(LIBCHM_LIBRARY NAMES chm PATH /usr/lib /usr/local/lib) IF (LIBCHM_INCLUDE_DIR AND LIBCHM_LIBRARY) SET(LIBCHM_FOUND TRUE) ENDIF (LIBCHM_INCLUDE_DIR AND LIBCHM_LIBRARY) IF (LIBCHM_FOUND) IF (NOT Libchm_FIND_QUIETLY) MESSAGE(STATUS "Found libchm: ${LIBCHM_LIBRARY}") ENDIF (NOT Libchm_FIND_QUIETLY) ELSE (LIBCHM_FOUND) IF (Libchm_FIND_REQUIRED) MESSAGE(FATAL_ERROR "Could not find libchm. Please install chmlib-devel package (may be also called libchm-devel)") ENDIF (Libchm_FIND_REQUIRED) ENDIF (LIBCHM_FOUND) kchmviewer-7.5/PaxHeaders.8614/README0000644000000000000000000000012312622003272014064 xustar0027 mtime=1447560890.329712 27 atime=1447562193.031735 29 ctime=1447562193.03173594 kchmviewer-7.5/README0000644000175000001440000001026212622003272014416 0ustar00timusers000000000000001. OVERVIEW KchmViewer is a chm (MS HTML help file format) viewer, written in C++. Unlike most existing CHM viewers for Unix, it uses Trolltech Qt widget library, and does not depend on KDE or GNOME. It has full KDE4 support. The main advantage of KchmViewer is extended support for non-English languages. Unlike others, KchmViewer in most cases correctly detects chm file encoding, correctly shows tables of context of Russian, Korean, Chinese and Japanese help files. It also correctly searches text in non-English help files, including Korean, Chinese and Japanese. KchmViewer is written by Georgy Yunaev (gyunaev@ulduzsoft.com), and is licensed under GNU GPL license. Please do NOT use this email for bug reporting; see below. 2. FEATURES - Standalone viewer, depends on Qt4 only. Does not require KDE, GNOME or wxWidgets toolkit. - Could be optionally built with KDE4 support, using KHTML and KDE dialogs. - Completely safe and harmless. Does not support JavaScript in any way, optionally warns you before opening an external web page, or switching to another help file. - Correctly detects and shows encoding of any valid chm file. - Correctly shows non-English chm files, including Cyrillic, Chinese, Japanese and others. - Correctly searches in non-English chm files using chm built-in search index. - Shows an appropriate image for every TOC entry. - Has complete chm index support, including multiple index entries, cross-links and parent/child entries in index. - Persistent bookmarks support. Allows to store bookmarks even if "Favorites" window was not enabled for this chm file. Also stores the screen position for every bookmark. You can also edit/delete bookmarks. - For any opened chm file, stores the last opened window, search history, bookmark history, font size and so on, so when you open this file again, everything is always on the place. - Has easy and powerful search-in-page support. - Allows to increase or decrease the font size, so physically handicapped people can read texts easily. - Has standard Back/Forward/Home navigation. - Can print the opened pages on a standard printer (usually via CUPS). - Has complex search query support. You can use search queries like "lazy people" +learn -not. 3. INSTALLATION Usually kchmviewer is distributed in source code archive, so you need to compile it first. It requires Qt version 4.4 or higher. Note that you need to install qt4-devel and qt4-tools packages (the last one might be included in qt4-devel in your distribution), not just qt package. Also make sure you have chmlib-devel (some distros have it as libchm-devel) package installed. KDE build will check for its presence, but qmake does not have necessary functionality to do so. If you are getting errors regarding missing chm_lib.h file this means chmlib-devel is not installed. 3.1. Qt-only version To compile Qt-only version of kchmviewer, follow the procedure: > tar zxf kchmviewer-.tar.gz > cd kchmviewer- > qmake > make The compiled binary is in bin/kchmviewer. You could copy it somewhere, or use it as-is. It does not require installation. If QtWebKit module is not found, you will get the following error: > kchmviewwindow_qtwebkit.h:25:21: error: QWebView: No such file or directory then you need to install the QtWebKit module. 3.2 KDE4 version To compile the version of kchmviewer with KDE4 support, follow the procedure: > tar zxf kchmviewer-.tar.gz > mkdir build > cd build > cmake .. > make > sudo make install For KDE version the installation is required, since the KHTML KIO slave cannot be used in place. 4. USAGE Usage of kchmviewer is simple: kchmviewer mychmfile.chm for the rest of command-line options, see kchmviewer --help 5. BUG REPORTING Please use kchmviewer@ulduzsoft.com for bug reporting. 6. THANKS Thanks to: - Jed Wing, the author of chmlib. This library is used by kchmviewer to access chm content. - Razvan Cojocaru, the author of xchm. I used some ideas and chm processing code from xchm. - Peter Volkov for various bug reports and improvement suggestions. - All the users, who report bugs, and suggest features. You help making kchmviewer better. 7. LICENSE kchmviewer is distributed under GNU GPL license version 3.