././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1643920524.1925159 ReText-7.2.3/0000755000175000017500000000000000000000000012341 5ustar00dmitrydmitry././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1630777591.0 ReText-7.2.3/LICENSE_GPL0000644000175000017500000010575700000000000014067 0ustar00dmitrydmitry 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 . ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642949280.0 ReText-7.2.3/MANIFEST.in0000644000175000017500000000035600000000000014103 0ustar00dmitrydmitryinclude LICENSE_GPL include README.md include changelog.md include configuration.md include data/retext-kde5.png recursive-include tests *.py *.md *.rst recursive-include locale retext_*.ts retext_*.qm recursive-include icons *.png *.svg ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1643920524.1925159 ReText-7.2.3/PKG-INFO0000644000175000017500000000226300000000000013441 0ustar00dmitrydmitryMetadata-Version: 2.1 Name: ReText Version: 7.2.3 Summary: Simple editor for Markdown and reStructuredText Home-page: https://github.com/retext-project/retext Author: Dmitry Shachnev Author-email: mitya57@gmail.com License: GPL 2+ Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: X11 Applications :: Qt Classifier: License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+) Classifier: Programming Language :: Python :: 3 :: Only Classifier: Topic :: Text Editors Classifier: Topic :: Text Processing :: Markup Requires: docutils Requires: Markdown Requires: Markups(>=2.0) Requires: pyenchant Requires: Pygments Requires: PyQt5(>=5.11) Requires-Python: >=3.6 Provides-Extra: spellcheck License-File: LICENSE_GPL ReText is simple text editor that supports Markdown and reStructuredText markup languages. It is written in Python using PyQt libraries. It supports live preview, tabs, math formulas, export to various formats including PDF and HTML. For more details, please go to the `home page`_ or to the `wiki`_. .. _`home page`: https://github.com/retext-project/retext .. _`wiki`: https://github.com/retext-project/retext/wiki ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642949574.0 ReText-7.2.3/README.md0000644000175000017500000000455400000000000013630 0ustar00dmitrydmitryWelcome to ReText! ================== [![GitHub Actions status][GitHub Actions SVG]][GitHub Actions] ReText is a simple but powerful editor for Markdown and reStructuredText markup languages. One can also add support for [custom markups] using Python modules. ![ReText on Plasma 5 desktop](data/retext-kde5.png) To install ReText, make sure that you have [Python] (3.6 or later) installed, and run `pip3 install ReText`. By default it installs system wide, pass `--user` for installing into the user’s home directory. You can also manually download the tarball from [PyPI]. ReText requires the following Python modules to run (`pip` will install them automatically): * [PyQt5](https://riverbankcomputing.com/software/pyqt/intro) (5.11 or later) * [Markups](https://pypi.org/project/Markups/) (2.0 or later) We also recommend having these packages installed: * [Markdown](https://pypi.org/project/Markdown/) — for Markdown support * [docutils](https://pypi.org/project/docutils/) — for reStructuredText support * [pyenchant](https://pypi.org/project/pyenchant/) — for spell checking support * [PyQtWebEngine](https://pypi.org/project/PyQtWebEngine/) — a more powerful preview engine with JavaScript support Translation files are already compiled for release tarballs and will be automatically loaded. For development snapshots, compile translations using `lrelease locale/*.ts` command (on Debian-based systems, `lrelease` is available in `qttools5-dev-tools` package). Translation files can also be loaded from `/usr/share/retext/` directory. You can translate ReText into your language on [Transifex]. ReText is Copyright 2011–2021 [Dmitry Shachnev](https://mitya57.me), 2011–2017 [Maurice van der Pot](mailto:griffon26@kfk4ever.com), and is licensed under GNU GPL (v2+) license, the current version is available in `LICENSE_GPL` file. ReText icon is based on `accessories-text-editor` icon from the Faenza theme. You can read more about ReText in the [wiki]. [wiki]: https://github.com/retext-project/retext/wiki [PyPI]: https://pypi.org/project/ReText/ [Transifex]: https://www.transifex.com/mitya57/ReText/ [GitHub Actions]: https://github.com/retext-project/retext/actions [GitHub Actions SVG]: https://github.com/retext-project/retext/workflows/tests/badge.svg [custom markups]: https://pymarkups.readthedocs.io/en/latest/custom_markups.html [Python]: https://www.python.org/ ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1643920524.1765156 ReText-7.2.3/ReText/0000755000175000017500000000000000000000000013554 5ustar00dmitrydmitry././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643919566.0 ReText-7.2.3/ReText/__init__.py0000644000175000017500000001255300000000000015673 0ustar00dmitrydmitry# vim: ts=8:sts=8:sw=8:noexpandtab # This file is part of ReText # Copyright: 2012-2021 Dmitry Shachnev # # 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, see . import sys import markups import markups.common from os.path import dirname, exists, join, expanduser from PyQt5.QtCore import QByteArray, QLocale, QSettings, QStandardPaths from PyQt5.QtGui import QFont, QFontDatabase app_version = "7.2.3" settings = QSettings('ReText project', 'ReText') if not str(settings.fileName()).endswith('.conf'): # We are on Windows probably settings = QSettings(QSettings.Format.IniFormat, QSettings.Scope.UserScope, 'ReText project', 'ReText') datadirs = [] def initializeDataDirs(): assert not datadirs try: datadirs.append(dirname(dirname(__file__))) except NameError: pass dataLocations = QStandardPaths.standardLocations(QStandardPaths.StandardLocation.GenericDataLocation) datadirs.extend(join(d, 'retext') for d in dataLocations) if sys.platform == "win32": # Windows compatibility: Add "PythonXXX\share\" path datadirs.append(join(dirname(sys.executable), 'share', 'retext')) # For virtualenvs datadirs.append(join(dirname(dirname(sys.executable)), 'share', 'retext')) _iconPath = None def getBundledIcon(iconName): global _iconPath if _iconPath is None: for dir in ['icons'] + datadirs: _iconPath = join(dir, 'icons') if exists(_iconPath): break return join(_iconPath, iconName + '.png') configOptions = { 'appStyleSheet': '', 'autoSave': False, 'defaultCodec': '', 'defaultMarkup': markups.MarkdownMarkup.name, 'defaultPreviewState': 'editor', 'detectEncoding': True, 'directoryPath': expanduser("~"), 'documentStatsEnabled': False, 'editorFont': QFont(), 'font': QFont(), 'handleWebLinks': False, 'hideToolBar': False, 'highlightCurrentLine': 'disabled', 'iconTheme': '', 'lastTabIndex': 0, 'lineNumbersEnabled': False, 'markdownDefaultFileExtension': '.mkd', 'openFilesInExistingWindow': True, 'openLastFilesOnStartup': False, 'orderedListMode': 'increment', 'paperSize': '', 'pygmentsStyle': 'default', 'recentDocumentsCount': 10, 'relativeLineNumbers': False, 'restDefaultFileExtension': '.rst', 'rightMargin': 0, 'rightMarginWrap': False, 'saveWindowGeometry': False, 'showDirectoryTree': False, 'spellCheck': False, 'spellCheckLocale': '', 'styleSheet': '', 'syncScroll': True, 'tabBarAutoHide': False, 'tabInsertsSpaces': True, 'tabWidth': 4, 'uiLanguage': QLocale.system().name(), 'useFakeVim': False, 'useWebEngine': False, 'useWebKit': False, 'wideCursor': False, 'windowGeometry': QByteArray(), 'windowTitleFullPath': False, } def readFromSettings(key, keytype, settings=settings, default=None): if isinstance(default, QFont): family = readFromSettings(key, str, settings, default.family()) size = readFromSettings(key + 'Size', int, settings, 0) return QFont(family, size) if not settings.contains(key): return default try: value = settings.value(key, type=keytype) if isinstance(value, keytype): return value return keytype(value) except TypeError as error: # Type mismatch print('Warning: '+str(error)) # Return an instance of keytype return default if (default is not None) else keytype() def readListFromSettings(key, settings=settings): if not settings.contains(key): return [] value = settings.value(key) if isinstance(value, str): return [value] else: return value def writeToSettings(key, value, default, settings=settings): if isinstance(value, QFont): writeToSettings(key, value.family(), '', settings) writeToSettings(key + 'Size', max(value.pointSize(), 0), 0, settings) elif value == default: settings.remove(key) else: settings.setValue(key, value) def writeListToSettings(key, value, settings=settings): if len(value) > 1: settings.setValue(key, value) elif len(value) == 1: settings.setValue(key, value[0]) else: settings.remove(key) def getSettingsFilePath(settings=settings): return settings.fileName() class ReTextSettings(object): def __init__(self): for option in configOptions: value = configOptions[option] object.__setattr__(self, option, readFromSettings( option, type(value), default=value)) def __setattr__(self, option, value): if not option in configOptions: raise AttributeError('Unknown attribute') object.__setattr__(self, option, value) writeToSettings(option, value, configOptions[option]) def __getattribute__(self, option): value = object.__getattribute__(self, option) # Choose a font just-in-time, because when the settings are # loaded it is too early to work. if option == 'font' and not value.family(): value = QFont() if option == 'editorFont' and not value.family(): value = QFontDatabase.systemFont(QFontDatabase.SystemFont.FixedFont) return value globalSettings = ReTextSettings() markups.common.PYGMENTS_STYLE = globalSettings.pygmentsStyle ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643655647.0 ReText-7.2.3/ReText/__main__.py0000755000175000017500000001251100000000000015651 0ustar00dmitrydmitry#!/usr/bin/env python3 # vim: ts=8:sts=8:sw=8:noexpandtab # ReText # Copyright 2011-2021 Dmitry Shachnev # # 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, see . import ctypes import multiprocessing import sys import signal import markups from os import devnull from os.path import join from ReText import datadirs, settings, globalSettings, app_version from ReText import initializeDataDirs from ReText.window import ReTextWindow from PyQt5.QtCore import QCommandLineOption, QCommandLineParser, QFile, \ QFileInfo, QIODevice, QLibraryInfo, QTextStream, QTranslator, Qt from PyQt5.QtWidgets import QApplication from PyQt5.QtNetwork import QNetworkProxyFactory from PyQt5.QtDBus import QDBusConnection, QDBusInterface def canonicalize(option): if option == '-': return option return QFileInfo(option).canonicalFilePath() def main(): multiprocessing.set_start_method('spawn') if markups.__version_tuple__ < (2, ): sys.exit('Error: ReText needs PyMarkups 2.0 or newer to run.') # If we're running on Windows without a console, then discard stdout # and save stderr to a file to facilitate debugging in case of crashes. if sys.executable.endswith('pythonw.exe'): sys.stdout = open(devnull, 'w') sys.stderr = open('stderr.log', 'w') try: # See https://github.com/retext-project/retext/issues/399 # and https://launchpad.net/bugs/941826 ctypes.CDLL('libGL.so.1', ctypes.RTLD_GLOBAL) except OSError: pass # Needed for Qt WebEngine on Windows QApplication.setAttribute(Qt.ApplicationAttribute.AA_ShareOpenGLContexts) QApplication.setAttribute(Qt.ApplicationAttribute.AA_UseHighDpiPixmaps) app = QApplication(sys.argv) app.setOrganizationName("ReText project") app.setApplicationName("ReText") app.setApplicationDisplayName("ReText") app.setApplicationVersion(app_version) app.setOrganizationDomain('mitya57.me') app.setDesktopFileName('me.mitya57.ReText.desktop') QNetworkProxyFactory.setUseSystemConfiguration(True) initializeDataDirs() RtTranslator = QTranslator() for path in datadirs: if RtTranslator.load('retext_' + globalSettings.uiLanguage, join(path, 'locale')): break QtTranslator = QTranslator() QtTranslator.load("qtbase_" + globalSettings.uiLanguage, QLibraryInfo.location(QLibraryInfo.LibraryLocation.TranslationsPath)) app.installTranslator(RtTranslator) app.installTranslator(QtTranslator) parser = QCommandLineParser() parser.addHelpOption() parser.addVersionOption() previewOption = QCommandLineOption('preview', QApplication.translate('main', 'Open the files in preview mode')) newWindowOption = QCommandLineOption('new-window', QApplication.translate('main', 'Create a new window even if there is an existing one')) parser.addOption(previewOption) parser.addOption(newWindowOption) parser.addPositionalArgument('files', QApplication.translate('main', 'List of files to open'), '[files...]') parser.process(app) filesToOpen = parser.positionalArguments() print('Using configuration file:', settings.fileName()) if globalSettings.appStyleSheet: sheetfile = QFile(globalSettings.appStyleSheet) sheetfile.open(QIODevice.OpenModeFlag.ReadOnly) app.setStyleSheet(QTextStream(sheetfile).readAll()) sheetfile.close() window = ReTextWindow() openInExistingWindow = (globalSettings.openFilesInExistingWindow and not parser.isSet(newWindowOption)) connection = QDBusConnection.sessionBus() if connection.isConnected() and openInExistingWindow: connection.registerObject('/', window, QDBusConnection.RegisterOption.ExportAllSlots) serviceName = 'me.mitya57.ReText' if not connection.registerService(serviceName) and filesToOpen: print('Opening the file(s) in the existing window of ReText.') iface = QDBusInterface(serviceName, '/', '', connection) for fileName in filesToOpen: iface.call('openFileWrapper', fileName) qWidgetIface = QDBusInterface(serviceName, '/', 'org.qtproject.Qt.QWidget', connection) qWidgetIface.call('raise') sys.exit(0) window.show() # ReText can change directory when loading files, so we # need to have a list of canonical names before loading fileNames = list(map(canonicalize, filesToOpen)) readStdIn = False if globalSettings.openLastFilesOnStartup: window.restoreLastOpenedFiles() for fileName in fileNames: if QFile.exists(fileName): window.openFileWrapper(fileName) if parser.isSet(previewOption): window.actionPreview.setChecked(True) window.preview(True) elif fileName == '-': readStdIn = True inputData = '' if readStdIn and sys.stdin is not None: if sys.stdin.isatty(): print('Reading stdin, press ^D to end...') inputData = sys.stdin.read() if inputData or not window.tabWidget.count(): window.createNew(inputData) signal.signal(signal.SIGINT, lambda sig, frame: window.close()) sys.exit(app.exec()) if __name__ == '__main__': main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642949280.0 ReText-7.2.3/ReText/config.py0000644000175000017500000002607400000000000015404 0ustar00dmitrydmitry# This file is part of ReText # Copyright: 2013-2021 Dmitry Shachnev # # 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, see . import sys from ReText import globalSettings, getBundledIcon, getSettingsFilePath from ReText.icontheme import get_icon_theme from markups.common import CONFIGURATION_DIR from os.path import join from PyQt5.QtCore import pyqtSignal, QFile, QFileInfo, QUrl, Qt from PyQt5.QtGui import QDesktopServices, QIcon from PyQt5.QtWidgets import QCheckBox, QDialog, QDialogButtonBox, \ QFileDialog, QGridLayout, QLabel, QLineEdit, QPushButton, QSpinBox, \ QComboBox, QTabWidget, QVBoxLayout, QWidget MKD_EXTS_FILE = join(CONFIGURATION_DIR, 'markdown-extensions.txt') class FileDialogButton(QPushButton): def __init__(self, parent, fileName): QPushButton.__init__(self, parent) self.fileName = fileName self.defaultText = self.tr('(none)') self.updateButtonText() self.clicked.connect(self.processClick) def processClick(self): pass def updateButtonText(self): if self.fileName: self.setText(QFileInfo(self.fileName).fileName()) else: self.setText(self.defaultText) class FileSelectButton(FileDialogButton): def processClick(self): startDir = (QFileInfo(self.fileName).absolutePath() if self.fileName else '') self.fileName = QFileDialog.getOpenFileName( self, self.tr('Select file to open'), startDir)[0] self.updateButtonText() class DirectorySelectButton(FileDialogButton): def processClick(self): startDir = (QFileInfo(self.fileName).absolutePath() if self.fileName else '') self.fileName = QFileDialog.getExistingDirectory( self, self.tr('Select directory to open'), startDir) self.updateButtonText() class ClickableLabel(QLabel): clicked = pyqtSignal() def mousePressEvent(self, event): self.clicked.emit() super().mousePressEvent(event) def setIconThemeFromSettings(): QIcon.setThemeName(globalSettings.iconTheme) if QIcon.themeName() in ('hicolor', ''): if not QFile.exists(getBundledIcon('document-new')): QIcon.setThemeName(get_icon_theme()) if QIcon.themeName() == 'Yaru' and not QIcon.hasThemeIcon('document-new'): # Old Yaru does not have non-symbolic action icons, so all # document-* icons fall back to mimetypes/document.png. # See https://github.com/ubuntu/yaru/issues/1294 QIcon.setThemeName('Humanity') class ConfigDialog(QDialog): def __init__(self, parent): QDialog.__init__(self, parent) self.parent = parent self.initConfigOptions() self.layout = QVBoxLayout(self) path = getSettingsFilePath() pathLabel = QLabel(self.tr('Using configuration file at:') + ' %(path)s' % {'path': path}, self) pathLabel.linkActivated.connect(self.openLink) self.layout.addWidget(pathLabel) self.tabWidget = QTabWidget(self) self.layout.addWidget(self.tabWidget) buttonBox = QDialogButtonBox(self) buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Apply | QDialogButtonBox.StandardButton.Cancel) buttonBox.accepted.connect(self.acceptSettings) buttonBox.button(QDialogButtonBox.StandardButton.Apply).clicked.connect(self.saveSettings) buttonBox.rejected.connect(self.close) self.initWidgets() self.configurators['rightMargin'].valueChanged.connect(self.handleRightMarginSet) self.configurators['rightMarginWrap'].stateChanged.connect(self.handleRightMarginWrapSet) self.layout.addWidget(buttonBox) def initConfigOptions(self): self.tabs = ( (self.tr('Behavior'), ( (self.tr('Automatically save documents'), 'autoSave'), (self.tr('Automatically open last documents on startup'), 'openLastFilesOnStartup'), (self.tr('Number of recent documents'), 'recentDocumentsCount'), (self.tr('Restore window geometry'), 'saveWindowGeometry'), (self.tr('Default preview state'), 'defaultPreviewState'), (self.tr('Open external links in ReText window'), 'handleWebLinks'), (self.tr('Markdown syntax extensions (comma-separated)'), 'markdownExtensions'), (None, 'markdownExtensions'), (self.tr('Enable synchronized scrolling for Markdown'), 'syncScroll'), # (self.tr('Default Markdown file extension'), 'markdownDefaultFileExtension'), # (self.tr('Default reStructuredText file extension'), 'restDefaultFileExtension'), )), (self.tr('Editor'), ( (self.tr('Highlight current line'), 'highlightCurrentLine'), (self.tr('Show line numbers'), 'lineNumbersEnabled'), (self.tr('Line numbers are relative to current line'), 'relativeLineNumbers'), (self.tr('Tab key inserts spaces'), 'tabInsertsSpaces'), (self.tr('Tabulation width'), 'tabWidth'), (self.tr('Draw vertical line at column'), 'rightMargin'), (self.tr('Enable soft wrap'), 'rightMarginWrap'), (self.tr('Show document stats'), 'documentStatsEnabled'), (self.tr('Ordered list mode'), 'orderedListMode'), )), (self.tr('Interface'), ( (self.tr('Hide toolbar'), 'hideToolBar'), (self.tr('Icon theme name'), 'iconTheme'), (self.tr('Stylesheet file'), 'styleSheet', True), (self.tr('Hide tabs bar when there is only one tab'), 'tabBarAutoHide'), (self.tr('Show full path in window title'), 'windowTitleFullPath'), (self.tr('Show directory tree'), 'showDirectoryTree', False), (self.tr('Working directory'), 'directoryPath', True), )) ) def initWidgets(self): self.configurators = {} for tabTitle, options in self.tabs: page = self.getPageWidget(options) self.tabWidget.addTab(page, tabTitle) def getPageWidget(self, options): page = QWidget(self) layout = QGridLayout(page) for index, option in enumerate(options): displayname, name = option[:2] fileselector = option[2] if len(option) > 2 else False if name is None: header = QLabel('

%s

' % displayname, self) layout.addWidget(header, index, 0, 1, 2, Qt.AlignmentFlag.AlignHCenter) continue if displayname: label = ClickableLabel(displayname + ':', self) if name == 'markdownExtensions': if displayname: url = QUrl('https://github.com/retext-project/retext/wiki/Markdown-extensions') helpButton = QPushButton(self.tr('Help'), self) helpButton.clicked.connect(lambda: QDesktopServices.openUrl(url)) layout.addWidget(label, index, 0) layout.addWidget(helpButton, index, 1) continue try: extsFile = open(MKD_EXTS_FILE) value = extsFile.read().rstrip().replace(extsFile.newlines, ', ') extsFile.close() except Exception: value = '' self.configurators[name] = QLineEdit(self) self.configurators[name].setText(value) layout.addWidget(self.configurators[name], index, 0, 1, 2) continue value = getattr(globalSettings, name) if name == 'defaultPreviewState': self.configurators[name] = QComboBox(self) self.configurators[name].addItem(self.tr('Editor'), 'editor') self.configurators[name].addItem(self.tr('Live preview'), 'live-preview') self.configurators[name].addItem(self.tr('Normal preview'), 'normal-preview') comboBoxIndex = self.configurators[name].findData(value) self.configurators[name].setCurrentIndex(comboBoxIndex) elif name == 'highlightCurrentLine': self.configurators[name] = QComboBox(self) self.configurators[name].addItem(self.tr('Disabled'), 'disabled') self.configurators[name].addItem(self.tr('Cursor Line'), 'cursor-line') self.configurators[name].addItem(self.tr('Wrapped Line'), 'wrapped-line') comboBoxIndex = self.configurators[name].findData(value) self.configurators[name].setCurrentIndex(comboBoxIndex) elif name == 'orderedListMode': self.configurators[name] = QComboBox(self) self.configurators[name].addItem(self.tr('Increment'), 'increment') self.configurators[name].addItem(self.tr('Repeat'), 'repeat') comboBoxIndex = self.configurators[name].findData(value) self.configurators[name].setCurrentIndex(comboBoxIndex) elif name == 'directoryPath': self.configurators[name] = DirectorySelectButton(self, value) elif isinstance(value, bool): self.configurators[name] = QCheckBox(self) self.configurators[name].setChecked(value) label.clicked.connect(self.configurators[name].nextCheckState) elif isinstance(value, int): self.configurators[name] = QSpinBox(self) if name == 'tabWidth': self.configurators[name].setRange(1, 10) elif name == 'recentDocumentsCount': self.configurators[name].setRange(5, 20) else: self.configurators[name].setMaximum(200) self.configurators[name].setValue(value) elif isinstance(value, str) and fileselector: self.configurators[name] = FileSelectButton(self, value) elif isinstance(value, str): self.configurators[name] = QLineEdit(self) self.configurators[name].setText(value) layout.addWidget(label, index, 0) layout.addWidget(self.configurators[name], index, 1, Qt.AlignmentFlag.AlignRight) return page def handleRightMarginSet(self, value): if value < 10: self.configurators['rightMarginWrap'].setChecked(False) def handleRightMarginWrapSet(self, state): if state == Qt.CheckState.Checked and self.configurators['rightMargin'].value() < 10: self.configurators['rightMargin'].setValue(80) def saveSettings(self): for name, configurator in self.configurators.items(): if name == 'markdownExtensions': continue if isinstance(configurator, QCheckBox): value = configurator.isChecked() elif isinstance(configurator, QSpinBox): value = configurator.value() elif isinstance(configurator, QLineEdit): value = configurator.text() elif isinstance(configurator, QComboBox): value = configurator.currentData() elif isinstance(configurator, FileDialogButton): value = configurator.fileName setattr(globalSettings, name, value) self.applySettings() def applySettings(self): setIconThemeFromSettings() try: extsFile = open(MKD_EXTS_FILE, 'w') for ext in self.configurators['markdownExtensions'].text().split(','): if ext.strip(): extsFile.write(ext.strip() + '\n') extsFile.close() except Exception as e: print(e, file=sys.stderr) for tab in self.parent.iterateTabs(): tab.editBox.updateFont() tab.editBox.setWrapModeAndWidth() tab.editBox.viewport().update() self.parent.updateStyleSheet() self.parent.tabWidget.setTabBarAutoHide(globalSettings.tabBarAutoHide) self.parent.toolBar.setVisible(not globalSettings.hideToolBar) self.parent.editBar.setVisible(not globalSettings.hideToolBar) self.parent.initDirectoryTree(globalSettings.showDirectoryTree, globalSettings.directoryPath) def acceptSettings(self): self.saveSettings() self.close() def openLink(self, link): QDesktopServices.openUrl(QUrl.fromLocalFile(link)) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642949280.0 ReText-7.2.3/ReText/converterprocess.py0000644000175000017500000001545000000000000017541 0ustar00dmitrydmitry# This file is part of ReText # Copyright: 2016 Maurice van der Pot # # 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, see . import markups import multiprocessing as mp import os import pickle import signal from socket import socketpair import struct import traceback import weakref from PyQt5.QtCore import pyqtSignal, QObject, QSocketNotifier def recvall(sock, remaining): alldata = bytearray() while remaining > 0: data = sock.recv(remaining) if len(data) == 0: raise EOFError('Received 0 bytes from socket while more bytes were expected. Did the sender process exit unexpectedly?') alldata.extend(data) remaining -= len(data) return alldata def receiveObject(sock): sizeBuf = recvall(sock, 4) size = struct.unpack('I', sizeBuf)[0] message = recvall(sock, size) obj = pickle.loads(message) return obj def sendObject(sock, obj): message = pickle.dumps(obj) sizeBuf = struct.pack('I', len(message)) sock.sendall(sizeBuf) sock.sendall(message) class ConversionError(Exception): pass class MarkupNotAvailableError(Exception): pass def _indent(text, prefix): return ''.join(('%s%s\n' % (prefix, line) for line in text.splitlines())) def _converter_process_func(conn_parent, conn_child): conn_parent.close() # Ignore ctrl-C. The main application will also receive the signal and # determine if the application should be stopped or not. signal.signal(signal.SIGINT, signal.SIG_IGN) current_markup = None while True: job = receiveObject(conn_child) if job['command'] == 'quit': break elif job['command'] == 'convert': try: os.chdir(job['current_dir']) if (not current_markup or current_markup.name != job['markup_name'] or current_markup.filename != job['filename']): markup_class = markups.find_markup_class_by_name(job['markup_name']) if not markup_class.available(): raise MarkupNotAvailableError('The specified markup was not available') current_markup = markup_class(job['filename']) current_markup.requested_extensions = job['requested_extensions'] converted = current_markup.convert(job['text']) result = ('ok', converted) except MarkupNotAvailableError as e: result = ('markupnotavailableerror', e.args) except Exception: result = ('conversionerror', 'The background markup conversion process received this exception:\n%s' % _indent(traceback.format_exc(), ' ')) try: sendObject(conn_child, result) except BrokenPipeError: # Continue despite the broken pipe because we expect that a # 'quit' command will have been sent. If it has been then we # should terminate without any error messages. If no command # was queued we will get an EOFError from the read, giving us a # second chance to show that something went wrong by exiting # with a traceback. continue class ConverterProcess(QObject): conversionDone = pyqtSignal() def __init__(self): super().__init__() conn_parent, conn_child = socketpair() # TODO: figure out which of the two sockets should be set to # inheritable and which should be passed to the child if hasattr(conn_child, 'set_inheritable'): conn_child.set_inheritable(True) # Use a local variable for child so that we can talk to the child in # on_finalize without needing a reference to self child = mp.Process(target=_converter_process_func, args=(conn_parent, conn_child)) child.daemon = True child.start() self.child = child conn_child.close() self.conn = conn_parent self.busy = False self.notificationPending = False self.conversionNotifier = QSocketNotifier(self.conn.fileno(), QSocketNotifier.Type.Read) self.conversionNotifier.activated.connect(self._conversionNotifierActivated) def on_finalize(conn): sendObject(conn_parent, {'command':'quit'}) conn_parent.close() child.join() weakref.finalize(self, on_finalize, conn_parent) def _conversionNotifierActivated(self): # The ready-for-read signal on the socket may be triggered multiple # times, but we only send a single notification to the client as soon # as the results of the conversion are starting to come in. This makes # it easy for clients to avoid multiple calls to get_result for the # same conversion. if self.notificationPending: self.notificationPending = False # Set the socket to blocking before waking up any interested parties, # because it has been set to unblocking by QSocketNotifier self.conn.setblocking(True) self.conversionDone.emit() def start_conversion(self, markup_name, filename, requested_extensions, text, current_dir): if self.busy: raise RuntimeError('Already converting') sendObject(self.conn, {'command': 'convert', 'markup_name' : markup_name, 'filename' : filename, 'current_dir': current_dir, 'requested_extensions' : requested_extensions, 'text' : text}) self.busy = True self.notificationPending = True def get_result(self): if not self.busy: raise RuntimeError('No ongoing conversion') self.busy = False status, result = receiveObject(self.conn) if status == 'markupnotavailableerror': raise MarkupNotAvailableError(result) elif status == 'conversionerror': raise ConversionError(result) return result def stop(self): sendObject(self.conn, {'command': 'quit'}) self.conn.close() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642949280.0 ReText-7.2.3/ReText/dialogs.py0000644000175000017500000000434400000000000015555 0ustar00dmitrydmitry# This file is part of ReText # Copyright: 2012-2021 Dmitry Shachnev # # 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, see . from ReText import globalSettings from ReText.highlighter import ReTextHighlighter from PyQt5.QtWidgets import QCheckBox, QDialog, QDialogButtonBox, \ QLabel, QLineEdit, QTextEdit, QVBoxLayout class HtmlDialog(QDialog): def __init__(self, parent=None): QDialog.__init__(self, parent) self.resize(700, 600) verticalLayout = QVBoxLayout(self) self.textEdit = QTextEdit(self) self.textEdit.setReadOnly(True) self.textEdit.setFont(globalSettings.editorFont) self.hl = ReTextHighlighter(self.textEdit.document()) self.hl.docType = 'html' verticalLayout.addWidget(self.textEdit) buttonBox = QDialogButtonBox(self) buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Close) buttonBox.rejected.connect(self.close) verticalLayout.addWidget(buttonBox) class LocaleDialog(QDialog): def __init__(self, parent, defaultText=None): QDialog.__init__(self, parent) verticalLayout = QVBoxLayout(self) self.label = QLabel(self) self.label.setText(self.tr('Enter locale name (example: en_US)')) verticalLayout.addWidget(self.label) self.localeEdit = QLineEdit(self) if defaultText: self.localeEdit.setText(defaultText) verticalLayout.addWidget(self.localeEdit) self.checkBox = QCheckBox(self.tr('Set as default'), self) verticalLayout.addWidget(self.checkBox) buttonBox = QDialogButtonBox(self) buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Cancel | QDialogButtonBox.StandardButton.Ok) verticalLayout.addWidget(buttonBox) buttonBox.accepted.connect(self.accept) buttonBox.rejected.connect(self.reject) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642949280.0 ReText-7.2.3/ReText/editor.py0000644000175000017500000005520400000000000015422 0ustar00dmitrydmitry# vim: ts=8:sts=8:sw=8:noexpandtab # # This file is part of ReText # Copyright: 2012-2021 Dmitry Shachnev # # 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, see . import os import re import weakref from markups import MarkdownMarkup, ReStructuredTextMarkup, TextileMarkup from ReText import globalSettings, settings, tablemode from PyQt5.QtCore import pyqtSignal, QFileInfo, QPoint, QRect, QSize, Qt from PyQt5.QtGui import QColor, QImage, QKeyEvent, QMouseEvent, QPainter, \ QPalette, QTextCursor, QTextFormat, QWheelEvent, QGuiApplication from PyQt5.QtWidgets import QAction, QApplication, QFileDialog, QLabel, QTextEdit, QWidget try: from ReText.fakevimeditor import ReTextFakeVimHandler except ImportError: ReTextFakeVimHandler = None colors = { # Editor 'marginLine': {'light': '#dcd2dc', 'dark': '#3daee9'}, 'currentLineHighlight': {'light': '#ffffc8', 'dark': '#31363b'}, 'infoArea': {'light': '#aaaaff55', 'dark': '#aa557f2a'}, 'statsArea': {'light': '#aaffaa55', 'dark': '#aa7f552a'}, 'lineNumberArea': {'light': '#00ffff', 'dark': '#31363b'}, 'lineNumberAreaText': {'light': '#008080', 'dark': '#bdc3c7'}, # Highlighter 'htmlTags': {'light': '#800080', 'dark': '#d070d0'}, 'htmlSymbols': {'light': '#008080', 'dark': '#70d0a0'}, 'htmlStrings': {'light': '#808000', 'dark': '#d0d070'}, 'htmlComments': {'light': '#a0a0a4', 'dark': '#b0b0aa'}, 'codeSpans': {'light': '#505050', 'dark': '#afafaf'}, 'markdownLinks': {'light': '#000090', 'dark': '#8080ff'}, 'blockquotes': {'light': '#808080', 'dark': '#b0b0b0'}, 'restDirectives': {'light': '#800080', 'dark': '#d070d0'}, 'restRoles': {'light': '#800000', 'dark': '#d07070'}, 'whitespaceOnEnd': {'light': '#80e1e1a5', 'dark': '#8096966e'}, } colorValues = {} def updateColorScheme(settings=settings): palette = QApplication.palette() windowColor = palette.color(QPalette.ColorRole.Window) themeVariant = 'light' if windowColor.lightness() > 150 else 'dark' settings.beginGroup('ColorScheme') for key in colors: if settings.contains(key): colorValues[key] = settings.value(key, type=QColor) else: colorValues[key] = QColor(colors[key][themeVariant]) settings.endGroup() def getColor(colorName): if not colorValues: updateColorScheme() return colorValues[colorName] def documentIndentMore(document, cursor, globalSettings=globalSettings): if cursor.hasSelection(): block = document.findBlock(cursor.selectionStart()) end = document.findBlock(cursor.selectionEnd()).next() cursor.beginEditBlock() while block != end: cursor.setPosition(block.position()) if globalSettings.tabInsertsSpaces: cursor.insertText(' ' * globalSettings.tabWidth) else: cursor.insertText('\t') block = block.next() cursor.endEditBlock() else: indent = globalSettings.tabWidth - (cursor.positionInBlock() % globalSettings.tabWidth) if globalSettings.tabInsertsSpaces: cursor.insertText(' ' * indent) else: cursor.insertText('\t') def documentIndentLess(document, cursor, globalSettings=globalSettings): if cursor.hasSelection(): block = document.findBlock(cursor.selectionStart()) end = document.findBlock(cursor.selectionEnd()).next() else: block = document.findBlock(cursor.position()) end = block.next() cursor.beginEditBlock() while block != end: cursor.setPosition(block.position()) if document.characterAt(cursor.position()) == '\t': cursor.deleteChar() else: pos = 0 while document.characterAt(cursor.position()) == ' ' \ and pos < globalSettings.tabWidth: pos += 1 cursor.deleteChar() block = block.next() cursor.endEditBlock() class ReTextEdit(QTextEdit): resized = pyqtSignal(QRect) scrollLimitReached = pyqtSignal(QWheelEvent) returnBlockPattern = re.compile("^[\\s]*([*>-]|\\d+\\.) ") orderedListPattern = re.compile("^([\\s]*)(\\d+)\\. $") wordPattern = re.compile(r"\w+") nonAlphaNumPattern = re.compile(r"\W") surroundKeysSelfClose = [ Qt.Key.Key_Underscore, Qt.Key.Key_Asterisk, Qt.Key.Key_QuoteDbl, Qt.Key.Key_Apostrophe ] surroundKeysOtherClose = { Qt.Key.Key_ParenLeft: ')', Qt.Key.Key_BracketLeft: ']' } def __init__(self, parent, settings=globalSettings): QTextEdit.__init__(self) self.tab = weakref.proxy(parent) self.parent = parent.p self.undoRedoActive = False self.tableModeEnabled = False self.setAcceptRichText(False) self.lineNumberArea = LineNumberArea(self) self.infoArea = LineInfoArea(self) self.statistics = (0, 0, 0) self.statsArea = TextInfoArea(self) self.updateFont() self.setWrapModeAndWidth() self.document().blockCountChanged.connect(self.updateLineNumberAreaWidth) self.cursorPositionChanged.connect(self.highlightCurrentLine) self.document().contentsChange.connect(self.contentsChange) self.settings = settings if globalSettings.useFakeVim: self.installFakeVimHandler() def setWrapModeAndWidth(self): if globalSettings.rightMarginWrap and (self.rect().topRight().x() > self.marginx): self.setLineWrapMode(QTextEdit.LineWrapMode.FixedPixelWidth) self.setLineWrapColumnOrWidth(self.marginx) else: self.setLineWrapMode(QTextEdit.LineWrapMode.WidgetWidth) def updateFont(self): self.setFont(globalSettings.editorFont) metrics = self.fontMetrics() self.marginx = (int(self.document().documentMargin()) + metrics.horizontalAdvance(' ' * globalSettings.rightMargin)) self.setTabStopDistance(globalSettings.tabWidth * metrics.horizontalAdvance(' ')) self.updateLineNumberAreaWidth() self.infoArea.updateTextAndGeometry() self.updateTextStatistics() self.statsArea.updateTextAndGeometry() if globalSettings.wideCursor: self.setCursorWidth(metrics.averageCharWidth()) def paintEvent(self, event): if not globalSettings.rightMargin: return super().paintEvent(event) painter = QPainter(self.viewport()) painter.setPen(getColor('marginLine')) y1 = self.rect().topLeft().y() y2 = self.rect().bottomLeft().y() painter.drawLine(self.marginx, y1, self.marginx, y2) super().paintEvent(event) def wheelEvent(self, event): modifiers = QGuiApplication.keyboardModifiers() if modifiers == Qt.KeyboardModifier.ControlModifier: font = globalSettings.editorFont size = font.pointSize() scroll = event.angleDelta().y() if scroll > 0: size += 1 elif scroll < 0: size -= 1 else: return font.setPointSize(size) self.parent.setEditorFont(font) else: super().wheelEvent(event) if event.angleDelta().y() < 0: scrollBarLimit = self.verticalScrollBar().maximum() else: scrollBarLimit = self.verticalScrollBar().minimum() if self.verticalScrollBar().value() == scrollBarLimit: self.scrollLimitReached.emit(event) def scrollContentsBy(self, dx, dy): super().scrollContentsBy(dx, dy) self.lineNumberArea.update() def contextMenuEvent(self, event): # Create base menu menu = self.createStandardContextMenu() if self.parent.actionPasteImage.isEnabled(): actions = menu.actions() actionPaste = menu.findChild(QAction, "edit-paste") actionNextAfterPaste = actions[actions.index(actionPaste) + 1] menu.insertAction(actionNextAfterPaste, self.parent.actionPasteImage) text = self.toPlainText() if not text: menu.exec(event.globalPos()) return # Check word under the cursor oldcursor = self.textCursor() cursor = self.cursorForPosition(event.pos()) curchar = self.document().characterAt(cursor.position()) isalpha = curchar.isalpha() dictionary = self.tab.highlighter.dictionary word = None if isalpha and not (oldcursor.hasSelection() and oldcursor.selectedText() != cursor.selectedText()): cursor.select(QTextCursor.SelectionType.WordUnderCursor) word = cursor.selectedText() if word is not None and dictionary and not dictionary.check(word): self.setTextCursor(cursor) suggestions = dictionary.suggest(word) actions = [self.parent.act(sug, trig=self.fixWord(sug)) for sug in suggestions] menu.insertSeparator(menu.actions()[0]) for action in actions[::-1]: menu.insertAction(menu.actions()[0], action) menu.insertSeparator(menu.actions()[0]) menu.insertAction(menu.actions()[0], self.parent.act(self.tr('Add to dictionary'), trig=self.learnWord(word))) menu.addSeparator() menu.addAction(self.parent.actionMoveUp) menu.addAction(self.parent.actionMoveDown) menu.exec(event.globalPos()) def fixWord(self, correctword): return lambda: self.insertPlainText(correctword) def learnWord(self, newword): return lambda: self.addNewWord(newword) def addNewWord(self, newword): cursor = self.textCursor() block = cursor.block() cursor.clearSelection() self.setTextCursor(cursor) dictionary = self.tab.highlighter.dictionary if (dictionary is None) or not newword: return dictionary.add(newword) self.tab.highlighter.rehighlightBlock(block) def isSurroundKey(self, key): return key in self.surroundKeysSelfClose or key in self.surroundKeysOtherClose def getCloseKey(self, event, key): if key in self.surroundKeysSelfClose: return event.text() if key in self.surroundKeysOtherClose: return self.surroundKeysOtherClose[key] def surroundText(self, cursor, event, key): text = cursor.selectedText() keyStr = event.text() keyClose = self.getCloseKey(event, key) cursor.insertText(keyStr + text + keyClose) def keyPressEvent(self, event): key = event.key() cursor = self.textCursor() if key == Qt.Key.Key_Backspace and event.modifiers() & Qt.KeyboardModifier.GroupSwitchModifier: # Workaround for https://bugreports.qt.io/browse/QTBUG-49771 event = QKeyEvent(event.type(), event.key(), event.modifiers() ^ Qt.KeyboardModifier.GroupSwitchModifier) if key == Qt.Key.Key_Tab: documentIndentMore(self.document(), cursor) elif key == Qt.Key.Key_Backtab: documentIndentLess(self.document(), cursor) elif key == Qt.Key.Key_Return: markupClass = self.tab.getActiveMarkupClass() if event.modifiers() & Qt.KeyboardModifier.ControlModifier: cursor.insertText('\n') self.ensureCursorVisible() elif self.tableModeEnabled and tablemode.handleReturn(cursor, markupClass, newRow=(event.modifiers() & Qt.KeyboardModifier.ShiftModifier)): self.setTextCursor(cursor) self.ensureCursorVisible() else: if event.modifiers() & Qt.KeyboardModifier.ShiftModifier and markupClass == MarkdownMarkup: # Insert Markdown-style line break cursor.insertText(' ') self.handleReturn(cursor) elif cursor.selectedText() and self.isSurroundKey(key): self.surroundText(cursor, event, key) else: if event.text() and self.tableModeEnabled: cursor.beginEditBlock() super().keyPressEvent(event) if event.text() and self.tableModeEnabled: cursor.endEditBlock() def handleReturn(self, cursor): # Select text between the cursor and the line start cursor.movePosition(QTextCursor.MoveOperation.StartOfBlock, QTextCursor.MoveMode.KeepAnchor) text = cursor.selectedText() length = len(text) match = self.returnBlockPattern.search(text) if match is not None: matchedText = match.group(0) if len(matchedText) == length: cursor.removeSelectedText() matchedText = '' else: matchOL = self.orderedListPattern.match(matchedText) if matchOL is not None: matchedPrefix = matchOL.group(1) matchedNumber = int(matchOL.group(2)) nextNumber = matchedNumber if self.settings.orderedListMode == 'repeat' else matchedNumber + 1 matchedText = matchedPrefix + str(nextNumber) + ". " else: matchedText = '' # Reset the cursor cursor = self.textCursor() cursor.insertText('\n' + matchedText) self.ensureCursorVisible() def moveLineUp(self): self.moveLine(QTextCursor.MoveOperation.PreviousBlock) def moveLineDown(self): self.moveLine(QTextCursor.MoveOperation.NextBlock) def moveLine(self, direction): cursor = self.textCursor() # Select the current block cursor.movePosition(QTextCursor.MoveOperation.StartOfBlock, QTextCursor.MoveMode.MoveAnchor) cursor.movePosition(QTextCursor.MoveOperation.NextBlock, QTextCursor.MoveMode.KeepAnchor) text = cursor.selectedText() # Remove it cursor.removeSelectedText() # Move to the wanted block cursor.movePosition(direction, QTextCursor.MoveMode.MoveAnchor) # Paste the line cursor.insertText(text) # Move to the pasted block cursor.movePosition(QTextCursor.MoveOperation.PreviousBlock, QTextCursor.MoveMode.MoveAnchor) # Update cursor self.setTextCursor(cursor) def lineNumberAreaWidth(self): if not globalSettings.lineNumbersEnabled: return 0 cursor = QTextCursor(self.document()) cursor.movePosition(QTextCursor.MoveOperation.End) if globalSettings.relativeLineNumbers: digits = len(str(cursor.blockNumber())) + 1 else: digits = len(str(cursor.blockNumber() + 1)) return 5 + self.fontMetrics().horizontalAdvance('9') * digits def updateLineNumberAreaWidth(self, blockcount=0): self.setViewportMargins(self.lineNumberAreaWidth(), 0, 0, 0) def resizeEvent(self, event): super().resizeEvent(event) rect = self.contentsRect() self.resized.emit(rect) self.lineNumberArea.setGeometry(rect.left(), rect.top(), self.lineNumberAreaWidth(), rect.height()) self.infoArea.updateTextAndGeometry() self.statsArea.updateTextAndGeometry() self.setWrapModeAndWidth() self.ensureCursorVisible() def highlightCurrentLine(self): if globalSettings.relativeLineNumbers: self.lineNumberArea.update() if globalSettings.highlightCurrentLine == 'disabled': return self.setExtraSelections([]) selection = QTextEdit.ExtraSelection() selection.format.setBackground(getColor('currentLineHighlight')) selection.format.setProperty(QTextFormat.Property.FullWidthSelection, True) selection.cursor = self.textCursor() selection.cursor.clearSelection() selections = [selection] if globalSettings.highlightCurrentLine == 'wrapped-line': selections.append(QTextEdit.ExtraSelection()) selections[0].cursor.movePosition(QTextCursor.MoveOperation.StartOfBlock) selections[0].cursor.movePosition(QTextCursor.MoveOperation.EndOfBlock, QTextCursor.MoveMode.KeepAnchor) selections[1].format.setBackground(getColor('currentLineHighlight')) selections[1].format.setProperty(QTextFormat.Property.FullWidthSelection, True) selections[1].cursor = self.textCursor() selections[1].cursor.movePosition(QTextCursor.MoveOperation.EndOfBlock) elif selection.cursor.block().textDirection() == Qt.LayoutDirection.RightToLeft: # FullWidthSelection does not work correctly for RTL direction selection.cursor.movePosition(QTextCursor.MoveOperation.StartOfLine) selection.cursor.movePosition(QTextCursor.MoveOperation.EndOfLine, QTextCursor.MoveMode.KeepAnchor) self.setExtraSelections(selections) def enableTableMode(self, enable): self.tableModeEnabled = enable def backupCursorPositionOnLine(self): return self.textCursor().positionInBlock() def restoreCursorPositionOnLine(self, positionOnLine): cursor = self.textCursor() cursor.setPosition(cursor.block().position() + positionOnLine) self.setTextCursor(cursor) def contentsChange(self, pos, removed, added): if self.tableModeEnabled: markupClass = self.tab.getActiveMarkupClass() cursorPosition = self.backupCursorPositionOnLine() tablemode.adjustTableToChanges(self.document(), pos, added - removed, markupClass) self.restoreCursorPositionOnLine(cursorPosition) self.lineNumberArea.update() self.updateTextStatistics() def findNextImageName(self, filenames): highestNumber = 0 for filename in filenames: m = re.match(r'image(\d+).png', filename, re.IGNORECASE) if m: number = int(m.group(1)) highestNumber = max(number, highestNumber) return 'image%04d.png' % (highestNumber + 1) def getImageFilename(self): if self.tab.fileName: saveDir = os.path.dirname(self.tab.fileName) else: saveDir = os.getcwd() imageFileName = self.findNextImageName(os.listdir(saveDir)) return QFileDialog.getSaveFileName(self, self.tr('Save image'), os.path.join(saveDir, imageFileName), self.tr('Images (*.png *.jpg)'))[0] def makeFileNameRelative(self, fileName): """Tries to make the given fileName relative. If the document is not saved, or the fileName is on a different root, returns the original fileName. """ if self.tab.fileName: currentDir = os.path.dirname(self.tab.fileName) try: return os.path.relpath(fileName, currentDir) except ValueError: # different roots return fileName return fileName def getImageMarkup(self, fileName): """Returns markup for image in the current markup language. This method is also accessed in ReTextWindow.insertImage. """ link = self.makeFileNameRelative(fileName) markupClass = self.tab.getActiveMarkupClass() if markupClass == MarkdownMarkup: return '![%s](%s)' % (QFileInfo(link).baseName(), link) elif markupClass == ReStructuredTextMarkup: return '.. image:: %s' % link elif markupClass == TextileMarkup: return '!%s!' % link def pasteImage(self): mimeData = QApplication.instance().clipboard().mimeData() fileName = self.getImageFilename() if not fileName or not mimeData.hasImage(): return image = QImage(mimeData.imageData()) image.save(fileName) imageText = self.getImageMarkup(fileName) self.textCursor().insertText(imageText) def installFakeVimHandler(self): if ReTextFakeVimHandler: fakeVimEditor = ReTextFakeVimHandler(self, self.parent) fakeVimEditor.setSaveAction(self.parent.actionSave) fakeVimEditor.setQuitAction(self.parent.actionQuit) self.parent.actionFakeVimMode.triggered.connect(fakeVimEditor.remove) def updateTextStatistics(self): if not globalSettings.documentStatsEnabled: return text = self.toPlainText() wordCount = len(self.wordPattern.findall(text)) alphaNums = self.nonAlphaNumPattern.sub('', text) alphaNumCount = len(alphaNums) characterCount = len(text) self.statistics = (wordCount, alphaNumCount, characterCount) class LineNumberArea(QWidget): def __init__(self, editor): QWidget.__init__(self, editor) self.editor = editor def sizeHint(self): return QSize(self.editor.lineNumberAreaWidth(), 0) def paintEvent(self, event): if not globalSettings.lineNumbersEnabled: return super().paintEvent(event) painter = QPainter(self) painter.fillRect(event.rect(), getColor('lineNumberArea')) painter.setPen(getColor('lineNumberAreaText')) cursor = self.editor.cursorForPosition(QPoint(0, 0)) atEnd = False fontHeight = self.fontMetrics().height() height = self.editor.height() if globalSettings.relativeLineNumbers: relativeTo = self.editor.textCursor().blockNumber() else: relativeTo = -1 while not atEnd: rect = self.editor.cursorRect(cursor) if rect.top() >= height: break number = str(cursor.blockNumber() - relativeTo).replace('-', '−') painter.drawText(0, rect.top(), self.width() - 2, fontHeight, Qt.AlignmentFlag.AlignRight, number) cursor.movePosition(QTextCursor.MoveOperation.EndOfBlock) atEnd = cursor.atEnd() if not atEnd: cursor.movePosition(QTextCursor.MoveOperation.NextBlock) class InfoArea(QLabel): def __init__(self, editor, baseColor): QWidget.__init__(self, editor) self.editor = editor self.editor.cursorPositionChanged.connect(self.updateTextAndGeometry) self.updateTextAndGeometry() self.setAutoFillBackground(True) self.baseColor = baseColor palette = self.palette() palette.setColor(QPalette.ColorRole.Window, self.baseColor) self.setPalette(palette) self.setCursor(Qt.CursorShape.IBeamCursor) def updateTextAndGeometry(self): text = self.getText() (w, h) = self.getAreaSize(text) (x, y) = self.getAreaPosition(w, h) self.setText(text) self.resize(w, h) self.move(x, y) self.setVisible(not globalSettings.useFakeVim) def getAreaSize(self, text): metrics = self.fontMetrics() width = metrics.horizontalAdvance(text) height = metrics.height() return width, height def getAreaPosition(self, width, height): return 0, 0 def getText(self): return "" def enterEvent(self, event): palette = self.palette() windowColor = QColor(self.baseColor) windowColor.setAlpha(0x20) palette.setColor(QPalette.ColorRole.Window, windowColor) textColor = palette.color(QPalette.ColorRole.WindowText) textColor.setAlpha(0x20) palette.setColor(QPalette.ColorRole.WindowText, textColor) self.setPalette(palette) def leaveEvent(self, event): palette = self.palette() palette.setColor(QPalette.ColorRole.Window, self.baseColor) palette.setColor(QPalette.ColorRole.WindowText, self.editor.palette().color(QPalette.ColorRole.WindowText)) self.setPalette(palette) def mousePressEvent(self, event): pos = self.mapToParent(event.pos()) pos.setX(pos.x() - self.editor.lineNumberAreaWidth()) newEvent = QMouseEvent(event.type(), pos, event.button(), event.buttons(), event.modifiers()) self.editor.mousePressEvent(newEvent) mouseReleaseEvent = mousePressEvent mouseDoubleClickEvent = mousePressEvent mouseMoveEvent = mousePressEvent class LineInfoArea(InfoArea): def __init__(self, editor): InfoArea.__init__(self, editor, getColor('infoArea')) def getAreaPosition(self, width, height): viewport = self.editor.viewport() rightSide = viewport.width() + self.editor.lineNumberAreaWidth() if globalSettings.documentStatsEnabled: return rightSide - width, viewport.height() - (2 * height) else: return rightSide - width, viewport.height() - height def getText(self): template = '%d : %d' cursor = self.editor.textCursor() block = cursor.blockNumber() + 1 position = cursor.positionInBlock() return template % (block, position) class TextInfoArea(InfoArea): def __init__(self, editor): InfoArea.__init__(self, editor, getColor('statsArea')) def getAreaPosition(self, width, height): viewport = self.editor.viewport() rightSide = viewport.width() + self.editor.lineNumberAreaWidth() return rightSide - width, viewport.height() - height def getText(self): if not globalSettings.documentStatsEnabled: return template = self.tr('%d w | %d a | %d c', 'count of words, alphanumeric characters, all characters') words, alphaNums, characters = self.editor.statistics return template % (words, alphaNums, characters) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1633978476.0 ReText-7.2.3/ReText/fakevimeditor.py0000644000175000017500000002126100000000000016761 0ustar00dmitrydmitry# This file is part of ReText # Copyright: 2014 Lukas Holecek # # 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, see . from FakeVim import FakeVimProxy, FakeVimHandler, FAKEVIM_PYQT_VERSION, \ MessageError if FAKEVIM_PYQT_VERSION != 5: raise ImportError("FakeVim must be compiled with Qt 5") from PyQt5.QtCore import QDir, QRegExp, QObject, Qt from PyQt5.QtGui import QPainter, QPen, QTextCursor from PyQt5.QtWidgets import QWidget, QLabel, QLineEdit, \ QMessageBox, QStatusBar, QTextEdit class FakeVimMode: @staticmethod def init(window): window.setStatusBar(StatusBar()) @staticmethod def exit(window): window.statusBar().deleteLater() class Proxy (FakeVimProxy): """ Used by FakeVim to modify or retrieve editor state. """ def __init__(self, window, editor, handler): super(Proxy, self).__init__(handler.handler()) self.__handler = handler self.__window = window self.__editor = editor self.__statusMessage = "" self.__statusData = "" self.__cursorPosition = -1 self.__cursorAnchor = -1 self.__eventFilter = None self.__lastSavePath = "" def showMessage(self, messageLevel, message): self.__handler.handler().showMessage(messageLevel, message) def needSave(self): return self.__editor.document().isModified() def maybeCloseEditor(self): if self.needSave(): self.showMessage( MessageError, self.tr("No write since last change (add ! to override)") ) self.__updateStatusBar() return False return True def commandQuit(self): self.__handler.quit() def commandWrite(self): self.__handler.save() return not self.needSave() def handleExCommand(self, cmd): if cmd.matches("q", "quit"): if cmd.hasBang or self.maybeCloseEditor(): self.commandQuit() elif cmd.matches("w", "write"): self.commandWrite() elif cmd.cmd == "wq": self.commandWrite() and self.commandQuit() else: return False return True def enableBlockSelection(self, cursor): self.__handler.setBlockSelection(True) self.__editor.setTextCursor(cursor) def disableBlockSelection(self): self.__handler.setBlockSelection(False) def blockSelection(self): self.__handler.setBlockSelection(True) return self.__editor.textCursor() def hasBlockSelection(self): return self.__handler.hasBlockSelection() def commandBufferChanged(self, msg, cursorPosition, cursorAnchor, messageLevel, eventFilter): # Give focus back to editor if closing command line. if self.__cursorPosition != -1 and cursorPosition == -1: self.__editor.setFocus() self.__cursorPosition = cursorPosition self.__cursorAnchor = cursorAnchor self.__statusMessage = msg self.__updateStatusBar(); self.__eventFilter = eventFilter def statusDataChanged(self, msg): self.__statusData = msg self.__updateStatusBar() def extraInformationChanged(self, msg): QMessageBox.information(self.__window, self.tr("Information"), msg) def highlightMatches(self, pattern): self.__handler.highlightMatches(pattern) def __updateStatusBar(self): self.__window.statusBar().setStatus( self.__statusMessage, self.__statusData, self.__cursorPosition, self.__cursorAnchor, self.__eventFilter) class BlockSelection (QWidget): def __init__(self, editor): super(BlockSelection, self).__init__(editor.viewport()) self.__editor = editor self.__lineWidth = 4 def updateSelection(self, tc): # block selection rectagle rect = self.__editor.cursorRect(tc) w = rect.width() tc2 = QTextCursor(tc) tc2.setPosition(tc.anchor()) rect = rect.united( self.__editor.cursorRect(tc2) ) x = self.__lineWidth / 2 rect.adjust(-x, -x, x - w, x) self.setGeometry(rect) def paintEvent(self, paintEvent): painter = QPainter(self) painter.setClipRect(paintEvent.rect()) color = self.__editor.palette().text() painter.setPen(QPen(color, self.__lineWidth)) painter.drawRect(self.rect()) class ReTextFakeVimHandler (QObject): """ Editor widget driven by FakeVim. """ def __init__(self, editor, window): super(ReTextFakeVimHandler, self).__init__(window) self.__window = window self.__editor = editor self.__blockSelection = BlockSelection(self.__editor) self.__blockSelection.hide() self.__searchSelections = [] fm = self.__editor.fontMetrics() self.__cursorWidth = fm.averageCharWidth() self.__oldCursorWidth = self.__editor.cursorWidth() self.__editor.setCursorWidth(self.__cursorWidth) self.__handler = FakeVimHandler(self.__editor, self) self.__proxy = Proxy(self.__window, self.__editor, self) self.__handler.installEventFilter() self.__handler.setupWidget() self.__handler.handleCommand( 'source {home}/.vimrc'.format(home = QDir.homePath())) self.__saveAction = None self.__quitAction = None # Update selections if cursor changes because of current line can be highlighted. self.__editor.cursorPositionChanged.connect(self.__updateSelections) def remove(self): self.__editor.setOverwriteMode(False) self.__editor.setCursorWidth(self.__oldCursorWidth) self.__blockSelection.deleteLater() self.__updateSelections([]) self.deleteLater() def handler(self): return self.__handler def setBlockSelection(self, enabled): self.__editor.setCursorWidth(self.__cursorWidth) self.__blockSelection.setVisible(enabled) if enabled: self.__blockSelection.updateSelection(self.__editor.textCursor()) # Shift text cursor into the block selection. tc = self.__editor.textCursor() if self.__columnForPosition(tc.anchor()) < self.__columnForPosition(tc.position()): self.__editor.setCursorWidth(-self.__cursorWidth) def setSaveAction(self, saveAction): self.__saveAction = saveAction def setQuitAction(self, quitAction): self.__quitAction = quitAction def save(self): if self.__saveAction: self.__saveAction.trigger() def quit(self): if self.__quitAction: self.__quitAction.trigger() def hasBlockSelection(self): return self.__blockSelection.isVisible() def highlightMatches(self, pattern): cur = self.__editor.textCursor() re = QRegExp(pattern) cur = self.__editor.document().find(re) a = cur.position() searchSelections = [] while not cur.isNull(): if cur.hasSelection(): selection = QTextEdit.ExtraSelection() selection.format.setBackground(Qt.GlobalColor.yellow) selection.format.setForeground(Qt.GlobalColor.black) selection.cursor = cur searchSelections.append(selection) else: cur.movePosition(QTextCursor.MoveOperation.NextCharacter) cur = self.__editor.document().find(re, cur) b = cur.position() if a == b: cur.movePosition(QTextCursor.MoveOperation.NextCharacter) cur = self.__editor.document().find(re, cur) b = cur.position() if (a == b): break a = b self.__updateSelections(searchSelections) def __updateSelections(self, searchSelections = None): oldSelections = self.__editor.extraSelections() for selection in self.__searchSelections: for i in range(len(oldSelections) - 1, 0, -1): if selection.cursor == oldSelections[i].cursor: oldSelections.pop(i) break if searchSelections != None: self.__searchSelections = searchSelections self.__editor.setExtraSelections(oldSelections + self.__searchSelections) def __columnForPosition(self, position): return position - self.__editor.document().findBlock(position).position() class StatusBar (QStatusBar): def __init__(self): super(StatusBar, self).__init__() self.__statusMessageLabel = QLabel(self) self.__statusDataLabel = QLabel(self) self.__commandLine = QLineEdit(self) self.addPermanentWidget(self.__statusMessageLabel, 1) self.addPermanentWidget(self.__commandLine, 1) self.addPermanentWidget(self.__statusDataLabel) self.__commandLine.hide() def setStatus(self, statusMessage, statusData, cursorPosition, cursorAnchor, eventFilter): commandMode = cursorPosition != -1 self.__commandLine.setVisible(commandMode) self.__statusMessageLabel.setVisible(not commandMode) if commandMode: self.__commandLine.installEventFilter(eventFilter) self.__commandLine.setFocus() self.__commandLine.setText(statusMessage) self.__commandLine.setSelection(cursorPosition, cursorAnchor - cursorPosition) else: self.__statusMessageLabel.setText(statusMessage) self.__statusDataLabel.setText(statusData) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642949280.0 ReText-7.2.3/ReText/highlighter.py0000644000175000017500000001625000000000000016430 0ustar00dmitrydmitry# This file is part of ReText # Copyright: 2012-2021 Dmitry Shachnev # # 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, see . from ReText.editor import getColor from enum import IntFlag, auto import re from PyQt5.QtCore import Qt from PyQt5.QtGui import QFont, QSyntaxHighlighter, QTextCharFormat reHtmlTags = re.compile('<[^<>@]*>') reHtmlSymbols = re.compile(r'&#?\w+;') reHtmlStrings = re.compile('"[^"<]*"(?=[^<]*>)') reHtmlComments = re.compile('') reAsterisks = re.compile(r'(?.+') reReSTDirects = re.compile(r'\.\. [a-z]+::') reReSTRoles = re.compile('(:[a-z-]+:)(`.+?`)') reReSTLinks = re.compile('(`.+?<)(.+?)(>`__?)') reReSTLinkRefs = re.compile(r'\.\. _`?(.*?)`?: (.*)') reReSTFldLists = re.compile('^ *:(.*?):') reTextileHdrs = re.compile(r'^h[1-6][()<>=]*\.\s.+') reTextileQuot = re.compile(r'^bq\.\s.+') reMkdCodeSpans = re.compile('`[^`]*`') reMkdMathSpans = re.compile(r'\\[\(\[].*?\\[\)\]]') reReSTCodeSpan = re.compile('``.+?``') reWords = re.compile('[^_\\W]+') reSpacesOnEnd = re.compile(r'\s+$') class Formatter: def __init__(self, funcs=None): self._funcs = funcs or [] def __or__(self, other): result = Formatter(self._funcs.copy()) if isinstance(other, Formatter): result._funcs.extend(other._funcs) elif isinstance(other, QFont.Weight): result._funcs.append(lambda f: f.setFontWeight(other)) return result def format(self, charFormat): for func in self._funcs: func(charFormat) NF = Formatter() ITAL = Formatter([lambda f: f.setFontItalic(True)]) UNDL = Formatter([lambda f: f.setFontUnderline(True)]) def FG(colorName): func = lambda f: f.setForeground(getColor(colorName)) return Formatter([func]) def QString_length(text): # In QString, surrogate pairs are represented using multiple QChars, # so the length of QString is not always equal to the number of graphemes # in it (which is the case with Python strings). return sum(2 if ord(char) > 65535 else 1 for char in text) class Markup(IntFlag): Mkd = auto() ReST = auto() Textile = auto() HTML = auto() # Special value which means that no other markup is allowed inside this pattern CodeSpan = auto() docTypesMapping = { 'Markdown': Markup.Mkd, 'reStructuredText': Markup.ReST, 'Textile': Markup.Textile, 'html': Markup.HTML, } class ReTextHighlighter(QSyntaxHighlighter): dictionary = None docType = None patterns = ( # regex, color, markups (reMkdCodeSpans, FG('codeSpans'), Markup.Mkd | Markup.CodeSpan), (reMkdMathSpans, FG('codeSpans'), Markup.Mkd | Markup.CodeSpan), (reReSTCodeSpan, FG('codeSpans'), Markup.ReST | Markup.CodeSpan), (reHtmlTags, FG('htmlTags') | QFont.Weight.Bold, Markup.Mkd | Markup.Textile | Markup.HTML), (reHtmlSymbols, FG('htmlSymbols') | QFont.Weight.Bold, Markup.Mkd | Markup.HTML), (reHtmlStrings, FG('htmlStrings') | QFont.Weight.Bold, Markup.Mkd | Markup.HTML), (reHtmlComments, FG('htmlComments'), Markup.Mkd | Markup.HTML), (reAsterisks, ITAL, Markup.Mkd | Markup.ReST), (reUnderline, ITAL, Markup.Mkd | Markup.Textile), (reDblAsterisks, NF | QFont.Weight.Bold, Markup.Mkd | Markup.ReST | Markup.Textile), (reDblUnderline, NF | QFont.Weight.Bold, Markup.Mkd), (reTrpAsterisks, ITAL | QFont.Weight.Bold, Markup.Mkd), (reTrpUnderline, ITAL | QFont.Weight.Bold, Markup.Mkd), (reMkdHeaders, NF | QFont.Weight.Black, Markup.Mkd), (reMkdLinksImgs, FG('markdownLinks'), Markup.Mkd), (reMkdLinkRefs, ITAL | UNDL, Markup.Mkd), (reBlockQuotes, FG('blockquotes'), Markup.Mkd), (reReSTDirects, FG('restDirectives') | QFont.Weight.Bold, Markup.ReST), (reReSTRoles, NF, FG('restRoles') | QFont.Weight.Bold, FG('htmlStrings'), Markup.ReST), (reTextileHdrs, NF | QFont.Weight.Black, Markup.Textile), (reTextileQuot, FG('blockquotes'), Markup.Textile), (reAsterisks, NF | QFont.Weight.Bold, Markup.Textile), (reDblUnderline, ITAL, Markup.Textile), (reReSTLinks, NF, NF, ITAL | UNDL, NF, Markup.ReST), (reReSTLinkRefs, NF, FG('markdownLinks'), ITAL | UNDL, Markup.ReST), (reReSTFldLists, NF, FG('restDirectives'), Markup.ReST), ) def highlightBlock(self, text): # Syntax highlighter codeSpans = set() if self.docType in docTypesMapping: markup = docTypesMapping[self.docType] for pattern, *formatters, markups in self.patterns: if not (markup & markups): continue for match in pattern.finditer(text): start, end = match.start(), match.end() if markups & Markup.CodeSpan: codeSpans.add((start, end)) elif any(start < codeEnd and end > codeStart for codeStart, codeEnd in codeSpans): # Ignore any syntax if its match intersects with code spans. # See https://github.com/retext-project/retext/issues/529 continue for i, formatter in enumerate(formatters): charFormat = QTextCharFormat() formatter.format(charFormat) self.setFormat(QString_length(text[:match.start(i)]), QString_length(match.group(i)), charFormat) for match in reSpacesOnEnd.finditer(text): charFormat = QTextCharFormat() charFormat.setBackground(getColor('whitespaceOnEnd')) self.setFormat(QString_length(text[:match.start()]), QString_length(match.group(0)), charFormat) # Spell checker if self.dictionary: charFormat = QTextCharFormat() charFormat.setUnderlineColor(Qt.GlobalColor.red) charFormat.setUnderlineStyle(QTextCharFormat.UnderlineStyle.SpellCheckUnderline) for match in reWords.finditer(text): finalFormat = QTextCharFormat() finalFormat.merge(charFormat) finalFormat.merge(self.format(match.start())) if not self.dictionary.check(match.group(0)): self.setFormat(QString_length(text[:match.start()]), QString_length(match.group(0)), finalFormat) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1630777591.0 ReText-7.2.3/ReText/icontheme.py0000644000175000017500000000321200000000000016077 0ustar00dmitrydmitry# This file is part of ReText # Copyright: 2015-2016 Dmitry Shachnev # # 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, see . def get_from_xsettings(): from ReText.xsettings import get_xsettings, XSettingsError try: xsettings = get_xsettings() except XSettingsError: return if b'Net/IconThemeName' in xsettings: return xsettings[b'Net/IconThemeName'].decode() if b'Net/FallbackIconTheme' in xsettings: return xsettings[b'Net/FallbackIconTheme'].decode() def get_from_gsettings(): try: from gi.repository import Gio except ImportError: return schema = 'org.gnome.desktop.interface' if schema in Gio.Settings.list_schemas(): settings = Gio.Settings.new(schema) return settings.get_string('icon-theme') def get_from_gtk(): try: from gi import require_version require_version('Gtk', '3.0') from gi.repository import Gtk except (ImportError, ValueError): return settings = Gtk.Settings.get_default() return settings.get_property('gtk-icon-theme-name') def get_icon_theme(): return (get_from_xsettings() or get_from_gsettings() or get_from_gtk()) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1630777591.0 ReText-7.2.3/ReText/mdx_posmap.py0000644000175000017500000001042300000000000016275 0ustar00dmitrydmitry''' Position Map Extension for Python-Markdown ========================================== This extension adds data-posmap attributes to the generated HTML elements that can be used to relate HTML elements to the corresponding lines in the markdown input file. Note: the line number stored in the data-posmap attribute corresponds to the empty line *after* the markdown block that the HTML was generated from. Copyright 2016 [Maurice van der Pot](griffon26@kfk4ever.com) License: [BSD](http://www.opensource.org/licenses/bsd-license.php) ''' from __future__ import unicode_literals import re from xml.etree.ElementTree import SubElement from markdown.blockprocessors import BlockProcessor from markdown.extensions import Extension from markdown.extensions.codehilite import CodeHilite from markdown.preprocessors import Preprocessor from markdown.util import HTML_PLACEHOLDER_RE try: from pymdownx.highlight import Highlight except ImportError: Highlight = None POSMAP_MARKER_RE = re.compile(r'__posmapmarker__\d+\n\n') class PosMapExtension(Extension): """ Position Map Extension for Python-Markdown. """ def extendMarkdown(self, md): """ Insert the PosMapExtension blockprocessor before any other extensions to make sure our own markers, inserted by the preprocessor, are removed before any other extensions get confused by them. """ md.preprocessors.register(PosMapMarkPreprocessor(md), 'posmap_mark', 50) md.preprocessors.register(PosMapCleanPreprocessor(md), 'posmap_clean', 5) md.parser.blockprocessors.register(PosMapBlockProcessor(md.parser), 'posmap', 150) # Monkey patch CodeHilite constructor to remove the posmap markers from # text before highlighting it orig_codehilite_init = CodeHilite.__init__ def new_codehilite_init(self, src=None, *args, **kwargs): src = POSMAP_MARKER_RE.sub('', src) orig_codehilite_init(self, src=src, *args, **kwargs) CodeHilite.__init__ = new_codehilite_init # Same for PyMdown Extensions if it is available if Highlight is not None: orig_highlight_highlight = Highlight.highlight def new_highlight_highlight(self, src, *args, **kwargs): src = POSMAP_MARKER_RE.sub('', src) return orig_highlight_highlight(self, src, *args, **kwargs) Highlight.highlight = new_highlight_highlight class PosMapMarkPreprocessor(Preprocessor): """ PosMapMarkPreprocessor - insert __posmapmarker__linenr entries at each empty line """ def run(self, lines): new_text = [] for i, line in enumerate(lines): new_text.append(line) if line == '': new_text.append('__posmapmarker__%d' % i) new_text.append('') return new_text class PosMapCleanPreprocessor(Preprocessor): """ PosMapCleanPreprocessor - remove __posmapmarker__linenr entries that accidentally ended up in the htmlStash. This could have happened because they were inside html tags or a fenced code block. """ def run(self, lines): for i in range(self.md.htmlStash.html_counter): block = self.md.htmlStash.rawHtmlBlocks[i] block = re.sub(POSMAP_MARKER_RE, '', block) self.md.htmlStash.rawHtmlBlocks[i] = block return lines class PosMapBlockProcessor(BlockProcessor): """ PosMapBlockProcessor - remove each marker and add a data-posmap attribute to the previous HTML element """ def test(self, parent, block): return block.startswith('__posmapmarker__') def run(self, parent, blocks): block = blocks.pop(0) line_nr = block.split('__')[2] last_child = self.lastChild(parent) if last_child != None: # Avoid setting the attribute on HTML placeholders, because it # would interfere with later replacement with literal HTML # fragments. In this case just add an empty

with the attribute. if last_child.text and re.match(HTML_PLACEHOLDER_RE, last_child.text): last_child = SubElement(parent, 'p') last_child.set('data-posmap', line_nr) def makeExtension(*args, **kwargs): return PosMapExtension(*args, **kwargs) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642949280.0 ReText-7.2.3/ReText/preview.py0000644000175000017500000001105300000000000015607 0ustar00dmitrydmitry# vim: ts=8:sts=8:sw=8:noexpandtab # # This file is part of ReText # Copyright: 2017-2021 Dmitry Shachnev # # 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, see . from os.path import exists import time from PyQt5.QtCore import QDir, QUrl, Qt from PyQt5.QtGui import QDesktopServices, QGuiApplication, QTextCursor, QTextDocument from PyQt5.QtWidgets import QTextBrowser from ReText import globalSettings class ReTextPreview(QTextBrowser): def __init__(self, tab): QTextBrowser.__init__(self) self.tab = tab # if set to True, links to other files will unsuccessfully be opened as anchors self.setOpenLinks(False) self.anchorClicked.connect(self.openInternal) self.lastRenderTime = 0 self.distToBottom = None self.verticalScrollBar().rangeChanged.connect(self.updateScrollPosition) def disconnectExternalSignals(self): pass def openInternal(self, link): url = link.url() if url.startswith('#'): self.scrollToAnchor(url[1:]) return elif link.isRelative(): fileToOpen = QDir.current().filePath(url) else: fileToOpen = link.toLocalFile() if link.isLocalFile() else None if fileToOpen is not None: if exists(fileToOpen): link = QUrl.fromLocalFile(fileToOpen) if globalSettings.handleWebLinks and fileToOpen.endswith('.html'): self.setSource(link) return # This is outside the "if exists" block because we can prompt for # creating the file if self.tab.openSourceFile(fileToOpen): return QDesktopServices.openUrl(link) def findText(self, text, flags, wrap=False): cursor = self.textCursor() if wrap and flags & QTextDocument.FindFlag.FindBackward: cursor.movePosition(QTextCursor.MoveOperation.End) elif wrap: cursor.movePosition(QTextCursor.MoveOperation.Start) newCursor = self.document().find(text, cursor, flags) if not newCursor.isNull(): self.setTextCursor(newCursor) return True if not wrap: return self.findText(text, flags, wrap=True) return False def updateScrollPosition(self, minimum, maximum): """Called when vertical scroll bar range changes. If this happened during preview rendering (less than 0.5s since it was started), set the position such that distance to bottom is the same as before refresh. """ timeSinceRender = time.time() - self.lastRenderTime if timeSinceRender < 0.5 and self.distToBottom is not None and maximum: newValue = maximum - self.distToBottom if newValue >= minimum: self.verticalScrollBar().setValue(newValue) class ReTextWebPreview: """This is a common class shared between WebKit and WebEngine based previews.""" def __init__(self, editBox): self.editBox = editBox self.settings().setDefaultTextEncoding('utf-8') # Events relevant to sync scrolling self.editBox.cursorPositionChanged.connect(self._handleCursorPositionChanged) self.editBox.verticalScrollBar().valueChanged.connect(self.syncscroll.handleEditorScrolled) self.editBox.resized.connect(self._handleEditorResized) # Scroll the preview when the mouse wheel is used to scroll # beyond the beginning/end of the editor self.editBox.scrollLimitReached.connect(self._handleWheelEvent) def disconnectExternalSignals(self): self.editBox.cursorPositionChanged.disconnect(self._handleCursorPositionChanged) self.editBox.verticalScrollBar().valueChanged.disconnect(self.syncscroll.handleEditorScrolled) self.editBox.resized.disconnect(self._handleEditorResized) self.editBox.scrollLimitReached.disconnect(self._handleWheelEvent) def _handleCursorPositionChanged(self): editorCursorPosition = self.editBox.verticalScrollBar().value() + \ self.editBox.cursorRect().top() self.syncscroll.handleCursorPositionChanged(editorCursorPosition) def _handleEditorResized(self, rect): self.syncscroll.handleEditorResized(rect.height()) def wheelEvent(self, event): if QGuiApplication.keyboardModifiers() == Qt.KeyboardModifier.ControlModifier: zoomFactor = self.zoomFactor() zoomFactor *= 1.001 ** event.angleDelta().y() self.setZoomFactor(zoomFactor) return super().wheelEvent(event) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642950213.0 ReText-7.2.3/ReText/syncscroll.py0000644000175000017500000001552300000000000016327 0ustar00dmitrydmitry# This file is part of ReText # Copyright: 2016 Maurice van der Pot # # 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, see . from PyQt5.QtCore import QPoint class SyncScroll: def __init__(self, previewFrame, editorPositionToSourceLineFunc, sourceLineToEditorPositionFunc): self.posmap = {} self.frame = previewFrame self.editorPositionToSourceLine = editorPositionToSourceLineFunc self.sourceLineToEditorPosition = sourceLineToEditorPositionFunc self.previewPositionBeforeLoad = QPoint() self.contentIsLoading = False self.editorViewportHeight = 0 self.editorViewportOffset = 0 self.editorCursorPosition = 0 self.frame.contentsSizeChanged.connect(self._handlePreviewResized) self.frame.loadStarted.connect(self._handleLoadStarted) self.frame.loadFinished.connect(self._handleLoadFinished) def isActive(self): return bool(self.posmap) def handleEditorResized(self, editorViewportHeight): self.editorViewportHeight = editorViewportHeight self._updatePreviewScrollPosition() def handleEditorScrolled(self, editorViewportOffset): self.editorViewportOffset = editorViewportOffset return self._updatePreviewScrollPosition() def handleCursorPositionChanged(self, editorCursorPosition): self.editorCursorPosition = editorCursorPosition return self._updatePreviewScrollPosition() def _handleLoadStarted(self): # Store the current scroll position so it can be restored when the new # content is presented self.previewPositionBeforeLoad = self.frame.scrollPosition() self.contentIsLoading = True def _handleLoadFinished(self): self.frame.setScrollPosition(self.previewPositionBeforeLoad) self.contentIsLoading = False self._recalculatePositionMap() def _handlePreviewResized(self): self._recalculatePositionMap() self._updatePreviewScrollPosition() if not self.posmap and self.frame.scrollPosition().y() == 0: self.frame.setScrollPosition(self.previewPositionBeforeLoad) def _linearScale(self, fromValue, fromMin, fromMax, toMin, toMax): fromRange = fromMax - fromMin toRange = toMax - toMin toValue = toMin if fromRange: toValue += ((fromValue - fromMin) * toRange) / float(fromRange) return toValue def _updatePreviewScrollPosition(self): if not self.posmap: # Loading new content resets the scroll position to the top. If we # don't have a posmap to calculate the new best position, then # restore the position stored at the beginning of the load. if self.contentIsLoading: self.frame.setScrollPosition(self.previewPositionBeforeLoad) return textedit_pixel_to_scroll_to = self.editorCursorPosition if textedit_pixel_to_scroll_to < self.editorViewportOffset: textedit_pixel_to_scroll_to = self.editorViewportOffset last_viewport_pixel = self.editorViewportOffset + self.editorViewportHeight if textedit_pixel_to_scroll_to > last_viewport_pixel: textedit_pixel_to_scroll_to = last_viewport_pixel line_to_scroll_to = self.editorPositionToSourceLine(textedit_pixel_to_scroll_to) # Do a binary search through the posmap to find the nearest line above # and below the line to scroll to for which the rendered position is # known. posmap_lines = [0] + sorted(self.posmap.keys()) min_index = 0 max_index = len(posmap_lines) - 1 while max_index - min_index > 1: current_index = int((min_index + max_index) / 2) if posmap_lines[current_index] > line_to_scroll_to: max_index = current_index else: min_index = current_index # number of nearest line above and below for which we have a position min_line = posmap_lines[min_index] max_line = posmap_lines[max_index] min_textedit_pos = self.sourceLineToEditorPosition(min_line) max_textedit_pos = self.sourceLineToEditorPosition(max_line) # rendered pixel position of nearest line above and below min_preview_pos = self.posmap[min_line] max_preview_pos = self.posmap[max_line] # calculate rendered pixel position of line corresponding to cursor # (0 == top of document) preview_pixel_to_scroll_to = self._linearScale(textedit_pixel_to_scroll_to, min_textedit_pos, max_textedit_pos, min_preview_pos, max_preview_pos) distance_to_top_of_viewport = textedit_pixel_to_scroll_to - self.editorViewportOffset preview_scroll_offset = preview_pixel_to_scroll_to - distance_to_top_of_viewport pos = self.frame.scrollPosition() # scrollPosition() returns QPoint for WebKit and QPointF for WebEngine if isinstance(pos, QPoint): preview_scroll_offset = int(preview_scroll_offset) pos.setY(preview_scroll_offset) self.frame.setScrollPosition(pos) def _setPositionMap(self, posmap): self.posmap = posmap if posmap: self.posmap[0] = 0 def _recalculatePositionMap(self): if hasattr(self.frame, 'getPositionMap'): # For WebEngine the update has to be asynchronous self.frame.getPositionMap(self._setPositionMap) return # Create a list of input line positions mapped to vertical pixel positions in the preview self.posmap = {} elements = self.frame.findAllElements('[data-posmap]') if elements: # If there are posmap attributes, then build a posmap # dictionary from them that will be used whenever the # cursor is moved. for el in elements: value = el.attribute('data-posmap', 'invalid') bottom = el.geometry().bottom() # Ignore data-posmap entries that do not have integer values try: self.posmap[int(value)] = bottom except ValueError: pass self.posmap[0] = 0 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642949280.0 ReText-7.2.3/ReText/tab.py0000644000175000017500000004706100000000000014704 0ustar00dmitrydmitry# vim: ts=8:sts=8:sw=8:noexpandtab # # This file is part of ReText # Copyright: 2015-2021 Dmitry Shachnev # # 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, see . from os.path import exists, splitext import time from markups import get_markup_for_file_name, find_markup_class_by_name from markups.common import MODULE_HOME_PAGE from ReText import app_version, globalSettings, converterprocess from ReText.editor import ReTextEdit from ReText.highlighter import ReTextHighlighter from ReText.preview import ReTextPreview try: import enchant except ImportError: enchant = None from PyQt5.QtCore import pyqtSignal, Qt, QDir, QFile, QFileInfo, QPoint, QTextStream, QTimer, QUrl from PyQt5.QtGui import QPalette, QTextCursor, QTextDocument from PyQt5.QtWidgets import QApplication, QTextEdit, QSplitter, QMessageBox try: from ReText.webkitpreview import ReTextWebKitPreview except ImportError: ReTextWebKitPreview = None try: from ReText.webenginepreview import ReTextWebEnginePreview except ImportError: ReTextWebEnginePreview = None PreviewDisabled, PreviewLive, PreviewNormal = range(3) class ReTextTab(QSplitter): fileNameChanged = pyqtSignal() modificationStateChanged = pyqtSignal() activeMarkupChanged = pyqtSignal() # Make _fileName a read-only property to make sure that any # modification happens through the proper functions. These functions # will make sure that the fileNameChanged signal is emitted when # applicable. @property def fileName(self): return self._fileName def __init__(self, parent, fileName, previewState=PreviewDisabled): super().__init__(Qt.Orientation.Horizontal, parent=parent) self.p = parent self._fileName = fileName self.editBox = ReTextEdit(self) self.previewBox = self.createPreviewBox(self.editBox) self.activeMarkupClass = None self.markup = None self.converted = None self.previewState = previewState self.previewOutdated = False self.conversionPending = False self.cssFileExists = False self.converterProcess = converterprocess.ConverterProcess() self.converterProcess.conversionDone.connect(self.updatePreviewBox) textDocument = self.editBox.document() self.highlighter = ReTextHighlighter(textDocument) if enchant is not None and parent.actionEnableSC.isChecked(): self.highlighter.dictionary = enchant.Dict(parent.sl or None) # Rehighlighting is tied to the change in markup class that # happens at the end of this function self.editBox.textChanged.connect(self.triggerPreviewUpdate) self.editBox.undoAvailable.connect(parent.actionUndo.setEnabled) self.editBox.redoAvailable.connect(parent.actionRedo.setEnabled) self.editBox.copyAvailable.connect(parent.enableCopy) # Give both boxes a minimum size so the minimumSizeHint will be # ignored when splitter.setSizes is called below for widget in self.editBox, self.previewBox: widget.setMinimumWidth(125) self.addWidget(widget) self.setSizes((50, 50)) self.setChildrenCollapsible(False) textDocument.modificationChanged.connect(self.handleModificationChanged) self.updateActiveMarkupClass() def handleModificationChanged(self): self.modificationStateChanged.emit() def createPreviewBox(self, editBox): # Use closures to avoid a hard reference from ReTextWebKitPreview # to self, which would keep the tab and its resources alive # even after other references to it have disappeared. def editorPositionToSourceLine(editorPosition): viewportPosition = editorPosition - editBox.verticalScrollBar().value() sourceLine = editBox.cursorForPosition(QPoint(0,viewportPosition)).blockNumber() return sourceLine def sourceLineToEditorPosition(sourceLine): doc = editBox.document() block = doc.findBlockByNumber(sourceLine) rect = doc.documentLayout().blockBoundingRect(block) return rect.top() if ReTextWebKitPreview and globalSettings.useWebKit: preview = ReTextWebKitPreview(self, editorPositionToSourceLine, sourceLineToEditorPosition) elif ReTextWebEnginePreview and globalSettings.useWebEngine: preview = ReTextWebEnginePreview(self, editorPositionToSourceLine, sourceLineToEditorPosition) else: preview = ReTextPreview(self) return preview def getActiveMarkupClass(self): ''' Return the currently active markup class for this tab. No objects should be created of this class, it should only be used to retrieve markup class specific information. ''' return self.activeMarkupClass def updateActiveMarkupClass(self): ''' Update the active markup class based on the default class and the current filename. If the active markup class changes, the highlighter is rerun on the input text, the markup object of this tab is replaced with one of the new class and the activeMarkupChanged signal is emitted. ''' previousMarkupClass = self.activeMarkupClass self.activeMarkupClass = find_markup_class_by_name(globalSettings.defaultMarkup) if self._fileName: markupClass = get_markup_for_file_name( self._fileName, return_class=True) if markupClass: self.activeMarkupClass = markupClass if self.activeMarkupClass != previousMarkupClass: self.highlighter.docType = self.activeMarkupClass.name if self.activeMarkupClass else None self.highlighter.rehighlight() self.activeMarkupChanged.emit() self.triggerPreviewUpdate() def getDocumentTitleFromConverted(self, converted): if converted: try: return converted.get_document_title() except Exception: self.p.printError() return self.getBaseName() def getBaseName(self): if self._fileName: fileinfo = QFileInfo(self._fileName) basename = fileinfo.completeBaseName() return (basename if basename else fileinfo.fileName()) return self.tr("New document") def getHtmlFromConverted(self, converted, includeStyleSheet=True, webenv=False): if converted is None: markupClass = self.getActiveMarkupClass() errMsg = self.tr('Could not parse file contents, check if ' 'you have the necessary module ' 'installed!') try: errMsg %= markupClass.attributes[MODULE_HOME_PAGE] except (AttributeError, KeyError): # Remove the link if markupClass doesn't have the needed attribute errMsg = errMsg.replace('', '').replace('', '') return '

%s

' % errMsg headers = '' if includeStyleSheet and self.p.ss is not None: headers += '\n' elif includeStyleSheet: style = 'td, th { border: 1px solid #c3c3c3; padding: 0 3px 0 3px; }\n' style += 'table { border-collapse: collapse; }\n' style += 'img { max-width: 100%; }\n' # QTextDocument seems to use media=screen even for printing if not isinstance(self.previewBox, QTextEdit) and not webenv: # https://github.com/retext-project/retext/pull/187 palette = QApplication.palette() fgColor = palette.color(QPalette.ColorRole.Text).name() bgColor = palette.color(QPalette.ColorRole.Base).name() linkColor = palette.color(QPalette.ColorRole.Link).name() visitedLinkColor = palette.color(QPalette.ColorRole.LinkVisited).name() style += ('@media screen {\n' f' html {{ color: {fgColor}; background-color: {bgColor}; }}\n' f' a, a * {{ color: {linkColor}; }}\n' f' a:visited, a:visited * {{ color: {visitedLinkColor}; }}\n' '}\n') # https://github.com/retext-project/retext/issues/408 style += '@media print { html { background-color: white; } }\n' headers += '\n' baseName = self.getBaseName() if self.cssFileExists: headers += ('\n' % baseName) headers += ('\n' % app_version) return converted.get_whole_html( custom_headers=headers, include_stylesheet=includeStyleSheet, fallback_title=baseName, webenv=webenv) def getDocumentForExport(self, includeStyleSheet=True, webenv=False): markupClass = self.getActiveMarkupClass() if markupClass and markupClass.available(): exportMarkup = markupClass(filename=self._fileName) text = self.editBox.toPlainText() converted = exportMarkup.convert(text) else: converted = None return (self.getDocumentTitleFromConverted(converted), self.getHtmlFromConverted(converted, includeStyleSheet=includeStyleSheet, webenv=webenv), self.previewBox) def updatePreviewBox(self): self.conversionPending = False try: self.converted = self.converterProcess.get_result() except converterprocess.MarkupNotAvailableError: self.converted = None except converterprocess.ConversionError: return self.p.printError() if isinstance(self.previewBox, QTextEdit): scrollbar = self.previewBox.verticalScrollBar() scrollbarValue = scrollbar.value() # If scrollbar was not on top, save its distance to bottom so that # it will be restored in previewBox.updateScrollPosition() later. if scrollbarValue: self.previewBox.distToBottom = scrollbar.maximum() - scrollbarValue else: self.previewBox.distToBottom = None try: html = self.getHtmlFromConverted(self.converted) except Exception: return self.p.printError() if isinstance(self.previewBox, QTextEdit): self.previewBox.lastRenderTime = time.time() self.previewBox.setHtml(html) self.previewBox.document().setDefaultFont(globalSettings.font) self.previewBox.updateScrollPosition(scrollbar.minimum(), scrollbar.maximum()) else: self.previewBox.updateFontSettings() # Always provide a baseUrl otherwise QWebView will # refuse to show images or other external objects if self._fileName: baseUrl = QUrl.fromLocalFile(self._fileName) else: baseUrl = QUrl.fromLocalFile(QDir.currentPath()) self.previewBox.setHtml(html, baseUrl) if self.previewOutdated: self.triggerPreviewUpdate() def triggerPreviewUpdate(self): self.previewOutdated = True if self.previewState == PreviewDisabled: return if not self.conversionPending: self.conversionPending = True QTimer.singleShot(500, self.startPendingConversion) def startPendingConversion(self): self.previewOutdated = False requested_extensions = ['ReText.mdx_posmap'] if globalSettings.syncScroll else [] self.converterProcess.start_conversion(self.getActiveMarkupClass().name, self.fileName, requested_extensions, self.editBox.toPlainText(), QDir.currentPath()) def updateBoxesVisibility(self): self.editBox.setVisible(self.previewState < PreviewNormal) self.previewBox.setVisible(self.previewState > PreviewDisabled) def rebuildPreviewBox(self): self.previewBox.disconnectExternalSignals() self.previewBox.setParent(None) self.previewBox.deleteLater() self.previewBox = self.createPreviewBox(self.editBox) self.previewBox.setMinimumWidth(125) self.addWidget(self.previewBox) self.setSizes((50, 50)) self.triggerPreviewUpdate() self.updateBoxesVisibility() def detectFileEncoding(self, fileName): ''' Detect content encoding of specific file. It will return None if it can't determine the encoding. ''' try: import chardet except ImportError: return with open(fileName, 'rb') as inputFile: raw = inputFile.read(2048) result = chardet.detect(raw) if result['confidence'] > 0.9: if result['encoding'].lower() in ('ascii', 'utf-8-sig'): # UTF-8 files can be falsely detected as ASCII files if they # don't contain non-ASCII characters in first 2048 bytes. # We map ASCII to UTF-8 to avoid such situations. # Also map UTF-8-SIG to UTF-8 because Qt does not understand it. return 'utf-8' return result['encoding'] def readTextFromFile(self, fileName=None, encoding=None): previousFileName = self._fileName if fileName: self._fileName = fileName # Only try to detect encoding if it is not specified if encoding is None and globalSettings.detectEncoding: encoding = self.detectFileEncoding(self._fileName) # TODO: why do we open the file twice: for detecting encoding # and for actual read? Can we open it just once? openfile = QFile(self._fileName) openfile.open(QFile.OpenModeFlag.ReadOnly) stream = QTextStream(openfile) encoding = encoding or globalSettings.defaultCodec if encoding: stream.setCodec(encoding) # If encoding is specified or detected, we should save the file with # the same encoding self.editBox.document().setProperty("encoding", encoding) text = stream.readAll() openfile.close() if previousFileName != self._fileName: self.updateActiveMarkupClass() self.editBox.setPlainText(text) self.editBox.document().setModified(False) self.handleModificationChanged() cssFileName = self.getBaseName() + '.css' self.cssFileExists = QFile.exists(cssFileName) if previousFileName != self._fileName: self.fileNameChanged.emit() def writeTextToFile(self, fileName=None): # Just writes the text to file, without any changes to tab object # Used directly for e.g. export extensions # Get text from the cursor to avoid tweaking special characters, # see https://bugreports.qt.io/browse/QTBUG-57552 and # https://github.com/retext-project/retext/issues/216 cursor = self.editBox.textCursor() cursor.select(QTextCursor.SelectionType.Document) text = cursor.selectedText().replace('\u2029', '\n') savefile = QFile(fileName or self._fileName) result = savefile.open(QFile.OpenModeFlag.WriteOnly) if result: savestream = QTextStream(savefile) # Save the file with original encoding encoding = self.editBox.document().property("encoding") encoding = encoding or globalSettings.defaultCodec if encoding is not None: savestream.setCodec(encoding) savestream << text savefile.close() return result def saveTextToFile(self, fileName=None): # Sets fileName as tab fileName and writes the text to that file if self._fileName: self.p.fileSystemWatcher.removePath(self._fileName) result = self.writeTextToFile(fileName) if result: self.editBox.document().setModified(False) self.p.fileSystemWatcher.addPath(fileName or self._fileName) if fileName and self._fileName != fileName: self._fileName = fileName self.updateActiveMarkupClass() self.fileNameChanged.emit() return result def goToLine(self,line): block = self.editBox.document().findBlockByLineNumber(line) if block.isValid(): newCursor = QTextCursor(block) self.editBox.setTextCursor(newCursor) def find(self, text, flags, replaceText=None, wrap=False): if self.previewState == PreviewNormal and replaceText is None: return self.previewBox.findText(text, flags) cursor = self.editBox.textCursor() if wrap and flags & QTextDocument.FindFlag.FindBackward: cursor.movePosition(QTextCursor.MoveOperation.End) elif wrap: cursor.movePosition(QTextCursor.MoveOperation.Start) if replaceText is not None and cursor.selectedText() == text: newCursor = cursor else: newCursor = self.editBox.document().find(text, cursor, flags) if not newCursor.isNull(): if replaceText is not None: newCursor.insertText(replaceText) newCursor.movePosition(QTextCursor.MoveOperation.Left, QTextCursor.MoveMode.MoveAnchor, len(replaceText)) newCursor.movePosition(QTextCursor.MoveOperation.Right, QTextCursor.MoveMode.KeepAnchor, len(replaceText)) self.editBox.setTextCursor(newCursor) if self.editBox.cursorRect().bottom() >= self.editBox.height() - 3: scrollValue = self.editBox.verticalScrollBar().value() areaHeight = self.editBox.fontMetrics().height() self.editBox.verticalScrollBar().setValue(scrollValue + areaHeight) return True if not wrap: return self.find(text, flags, replaceText, True) return False def replaceAll(self, text, replaceText): cursor = self.editBox.textCursor() cursor.beginEditBlock() cursor.movePosition(QTextCursor.MoveOperation.Start) flags = QTextDocument.FindFlags() cursor = lastCursor = self.editBox.document().find(text, cursor, flags) while not cursor.isNull(): cursor.insertText(replaceText) lastCursor = cursor cursor = self.editBox.document().find(text, cursor, flags) if not lastCursor.isNull(): lastCursor.movePosition(QTextCursor.MoveOperation.Left, QTextCursor.MoveMode.MoveAnchor, len(replaceText)) lastCursor.movePosition(QTextCursor.MoveOperation.Right, QTextCursor.MoveMode.KeepAnchor, len(replaceText)) self.editBox.setTextCursor(lastCursor) self.editBox.textCursor().endEditBlock() return not lastCursor.isNull() def openSourceFile(self, linkPath): """Finds and opens the source file for link target fileToOpen. When links like [test](test) are clicked, the file test.md is opened. It has to be located next to the current opened file. Relative paths like [test](../test) or [test](folder/test) are also possible. """ fileToOpen = self.resolveSourceFile(linkPath) if exists(fileToOpen) and get_markup_for_file_name(fileToOpen, return_class=True): self.p.openFileWrapper(fileToOpen) return fileToOpen if get_markup_for_file_name(fileToOpen, return_class=True): if not QFile.exists(fileToOpen) and QFileInfo(fileToOpen).dir().exists(): if self.promptFileCreation(fileToOpen): self.p.openFileWrapper(fileToOpen) return fileToOpen def promptFileCreation(self, fileToCreate): """ Prompt user if a file should be created for the clicked link, and try to create it. Return True on success. """ buttonReply = QMessageBox.question(self, self.tr('Create missing file?'), self.tr("The file '%s' does not exist.\n\nDo you want to create it?") % fileToCreate, QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No, QMessageBox.StandardButton.No) if buttonReply == QMessageBox.StandardButton.Yes: return self.createFile(fileToCreate) elif buttonReply == QMessageBox.StandardButton.No: return False def resolveSourceFile(self, linkPath): """ Finds the actual path of the file to open in a new tab. When the link has no extension, eg: [Test](test), the extension of the current file is assumed (eg test.md for a markdown file). When the link is an html file eg: [Test](test.html), the extension of the current file is assumed (eg test.md for a markdown file). Relative paths like [test](../test) or [test](folder/test) are also possible. """ basename, ext = splitext(linkPath) if self.fileName: currentExt = splitext(self.fileName)[1] if ext in ('.html', '') and (exists(basename+currentExt) or not exists(linkPath)): ext = currentExt return basename+ext def createFile(self, fileToCreate): """Try to create file, return True if successful""" try: # Create file: open(fileToCreate, 'x').close() return True except OSError as err: QMessageBox.warning(self, self.tr("File could not be created"), self.tr("Could not create file '%s': %s") % (fileToCreate, err)) return False ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1633978476.0 ReText-7.2.3/ReText/tabledialog.py0000644000175000017500000000627700000000000016411 0ustar00dmitrydmitry# This file is part of ReText # Copyright: 2018 Changhee Kim, 2018-2021 Dmitry Shachnev # # 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, see . from markups import ReStructuredTextMarkup from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QGridLayout, QLabel, \ QSpinBox class InsertTableDialog(QDialog): def __init__(self, parent): QDialog.__init__(self, parent) self.parent = parent self.setWindowTitle(self.tr('Insert table')) buttonBox = QDialogButtonBox(self) buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel) buttonBox.accepted.connect(self.makeTable) buttonBox.rejected.connect(self.close) layout = QGridLayout(self) rowsLabel = QLabel(self.tr('Number of rows') + ':', self) columnsLabel = QLabel(self.tr('Number of columns') + ':', self) self.rowsSpinBox = QSpinBox(self) self.columnsSpinBox = QSpinBox(self) self.rowsSpinBox.setRange(1, 10) self.columnsSpinBox.setRange(1, 10) self.rowsSpinBox.setValue(3) self.columnsSpinBox.setValue(3) layout.addWidget(rowsLabel, 0, 0) layout.addWidget(self.rowsSpinBox, 0, 1, Qt.AlignmentFlag.AlignRight) layout.addWidget(columnsLabel, 1, 0) layout.addWidget(self.columnsSpinBox, 1, 1, Qt.AlignmentFlag.AlignRight) layout.addWidget(buttonBox, 2, 0, 1, 2) def makeTable(self): rowsCount = self.rowsSpinBox.value() columnsCount = self.columnsSpinBox.value() + 1 tab = self.parent.currentTab cursor = tab.editBox.textCursor() tableCode = '' if cursor.atBlockStart() else '\n\n' if tab.activeMarkupClass == ReStructuredTextMarkup: # Insert reStructuredText grid table tableCode += '-----'.join('+' * columnsCount) + '\n' tableCode += ' '.join('|' * columnsCount) + '\n' tableCode += '====='.join('+' * columnsCount) + '\n' tableCode += (' '.join('|' * columnsCount) + '\n' + '-----'.join('+' * columnsCount) + '\n') * rowsCount else: # Insert Markdown table tableCode += ' '.join('|' * columnsCount) + '\n' tableCode += '-----'.join('|' * columnsCount) + '\n' tableCode += (' '.join('|' * columnsCount) + '\n') * rowsCount cursor.insertText(tableCode) self.close() # Activate the Table editing mode self.parent.actionTableMode.setChecked(True) tab.editBox.tableModeEnabled = True ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1633978476.0 ReText-7.2.3/ReText/tablemode.py0000644000175000017500000002166500000000000016074 0ustar00dmitrydmitry# vim: ts=8:sts=8:sw=8:noexpandtab # # This file is part of ReText # Copyright: 2014, 2017 Maurice van der Pot # # 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, see . import sys from markups import MarkdownMarkup, ReStructuredTextMarkup from PyQt5.QtGui import QTextCursor LARGER_THAN_ANYTHING = sys.maxsize class Row: def __init__(self, block=None, text=None, separatorline=False, paddingchar=' '): self.block = block self.text = text self.separatorline = separatorline self.paddingchar = paddingchar def __repr__(self): return "" % (self.text, self.separatorline, self.paddingchar) def _getTableLines(doc, pos, markupClass): startblock = doc.findBlock(pos) editedlineindex = 0 offset = pos - startblock.position() rows = [ Row(block = startblock, text = startblock.text()) ] block = startblock.previous() while any(c in block.text() for c in '+|'): rows.insert(0, Row(block = block, text = block.text())) editedlineindex += 1 block = block.previous() block = startblock.next() while any(c in block.text() for c in '+|'): rows.append(Row(block = block, text = block.text())) block = block.next() if markupClass == MarkdownMarkup: for i, row in enumerate(rows): if i == 1: row.separatorline = True row.paddingchar = '-' elif markupClass == ReStructuredTextMarkup: for row in rows: if row.text.strip().startswith(('+-','+=')): row.separatorline = True row.paddingchar = row.text.strip()[1] row.text = row.text.replace('+', '|') return rows, editedlineindex, offset # Modify the edited line to put the table borders after the edition in their original positions. # It does not matter that this function changes the position of table borders before the edition, # because table editing mode only ever changes the table to the right of the cursor position. def _sortaUndoEdit(rows, editedlineindex, offset, editsize): aftertext = rows[editedlineindex].text if editsize < 0: beforetext = ' ' * -editsize + aftertext else: beforetext = aftertext[:offset] + aftertext[offset + editsize:] rows[editedlineindex].text = beforetext # Given text and the position of the n-th edge, returns n - 1 def _getEdgeIndex(text, edge): return text[:edge].count('|') def _determineRoomInCell(row, edge, edgeIndex, shrinking, startposition=0): if len(row.text) > edge and row.text[edge] == '|' and \ (not edgeIndex or _getEdgeIndex(row.text, edge) == edgeIndex): clearance = 0 cellwidth = 0 afterContent = True for i in range(edge - 1, startposition - 1, -1): if row.text[i] == '|': break else: if row.text[i] == row.paddingchar and afterContent: clearance += 1 else: afterContent = False cellwidth += 1 if row.separatorline: if shrinking: # do not shrink separator cells below 3 room = max(0, cellwidth - 3) else: # start expanding the cell if only the space for a right-align marker is left room = max(0, cellwidth - 1) else: room = clearance else: room = LARGER_THAN_ANYTHING return room # Add an edit for a row to match the specified shift if it has an edge on the # specified position def _performShift(row, rowShift, edge, edgeIndex, shift): editlist = [] # Any row that has an edge on the specified position and that doesn't # already have edits that shift it 'shift' positions, will get an # additional edit if len(row.text) > edge and row.text[edge] == '|' and rowShift != shift and \ (not edgeIndex or _getEdgeIndex(row.text, edge) == edgeIndex): editsize = -(rowShift - shift) rowShift = shift # Insert one position further to the left on separator lines, because # there may be a space (for esthetical reasons) or an alignment marker # on the last position before the edge and that should stay next to the # edge. if row.separatorline: edge -= 1 editlist.append((edge, editsize)) return editlist, rowShift # Finds the next edge position starting at offset in any row that is shifting. # Rows that are not shifting when we are searching for an edge starting at # offset, are rows that (upto offset) did not have any edges that aligned with # shifting edges on other rows. def _determineNextEdge(rows, rowShifts, offset): nextedge = None nextedgerow = None for row, rowShift in zip(rows, rowShifts): if rowShift != 0: edge = row.text.find('|', offset) if edge != -1 and (nextedge is None or edge < nextedge): nextedge = edge nextedgerow = row return nextedge, _getEdgeIndex(nextedgerow.text, nextedge) if nextedge else None # Return a list of edits to be made in other lines to adapt the table lines to # a single edit in the edited line. def _determineEditLists(rows, editedlineindex, offset, editsize, alignWithAnyEdge): # rowShift represents how much the characters on a line will shift as a # result of the already collected edits to be made. rowShifts = [0 for _ in rows] rowShifts[editedlineindex] = editsize editLists = [[] for _ in rows] # Find the next edge position on the edited row currentedge, currentedgeindex = _determineNextEdge(rows, rowShifts, offset) firstEdge = True while currentedge: if alignWithAnyEdge: # Ignore what column the edge belongs to currentedgeindex = None if editsize < 0: # How much an edge shifts to the left depends on how much room # there is in the cells on any row that shares this edge. leastLeftShift = min((-rowShift + _determineRoomInCell(row, currentedge, currentedgeindex, True) for row, rowShift in zip(rows, rowShifts))) shift = max(editsize, -leastLeftShift) else: # When shifting right, determine how much only once based on how # much the edited cell needs to expand if firstEdge: room = _determineRoomInCell(rows[editedlineindex], currentedge, currentedgeindex, False, offset) shift = max(0, editsize - room) for i, row in enumerate(rows): editList, newRowShift = _performShift(row, rowShifts[i], currentedge, currentedgeindex, shift) rowShifts[i] = newRowShift editLists[i].extend(editList) currentedge, currentedgeindex = _determineNextEdge(rows, rowShifts, currentedge + 1) firstEdge = False return editLists def _performEdits(cursor, rows, editLists, linewithoffset, offset): cursor.joinPreviousEditBlock() for i, (row, editList) in enumerate(zip(rows, editLists)): for editpos, editsize in sorted(editList, reverse=True): if i == linewithoffset: editpos += offset cursor.setPosition(row.block.position() + editpos) if editsize > 0: cursor.insertText(editsize * row.paddingchar) else: for _ in range(-editsize): cursor.deletePreviousChar() cursor.endEditBlock() def adjustTableToChanges(doc, pos, editsize, markupClass): if markupClass in (MarkdownMarkup, ReStructuredTextMarkup): # This is needed because in ReSt cells can span multiple columns # and we can therefore not determine which edges in other rows # are supposed to be aligned with the edges in the edited row. alignWithAnyEdge = (markupClass == ReStructuredTextMarkup) rows, editedlineindex, offset = _getTableLines(doc, pos, markupClass) _sortaUndoEdit(rows, editedlineindex, offset, editsize) editLists = _determineEditLists(rows, editedlineindex, offset, editsize, alignWithAnyEdge) cursor = QTextCursor(doc) _performEdits(cursor, rows, editLists, editedlineindex, editsize) def handleReturn(cursor, markupClass, newRow): if markupClass not in (MarkdownMarkup, ReStructuredTextMarkup): return False positionInBlock = cursor.positionInBlock() cursor.select(QTextCursor.SelectionType.BlockUnderCursor) oldLine = cursor.selectedText().lstrip('\u2029') if not ('| ' in oldLine or ' |' in oldLine): cursor.setPosition(cursor.block().position() + positionInBlock) return False indent = 0 while oldLine[indent] in ' \t': indent += 1 indentChars, oldLine = oldLine[:indent], oldLine[indent:] newLine = ''.join('|' if c in '+|' else ' ' for c in oldLine).rstrip() cursor.movePosition(QTextCursor.MoveOperation.EndOfBlock) if newRow and markupClass == MarkdownMarkup: sepLine = ''.join(c if c in ' |' else '-' for c in oldLine) cursor.insertText('\n' + indentChars + sepLine) elif newRow: sepLine = ''.join('+' if c in '+|' else '-' for c in oldLine) cursor.insertText('\n' + indentChars + sepLine) cursor.insertText('\n' + indentChars + newLine) positionInBlock = min(positionInBlock, len(indentChars + newLine)) cursor.setPosition(cursor.block().position() + positionInBlock) return True ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642949280.0 ReText-7.2.3/ReText/webenginepreview.py0000644000175000017500000001330400000000000017474 0ustar00dmitrydmitry# vim: ts=4:sw=4:expandtab # This file is part of ReText # Copyright: 2017-2021 Dmitry Shachnev # # 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, see . from ReText import globalSettings from ReText.preview import ReTextWebPreview from ReText.syncscroll import SyncScroll from PyQt5.QtCore import QEvent, Qt from PyQt5.QtGui import QDesktopServices, QGuiApplication, QTextDocument from PyQt5.QtWebEngineCore import QWebEngineUrlRequestInfo, QWebEngineUrlRequestInterceptor from PyQt5.QtWebEngineWidgets import QWebEnginePage, QWebEngineView, QWebEngineSettings class ReTextWebEngineUrlRequestInterceptor(QWebEngineUrlRequestInterceptor): def interceptRequest(self, info): if (info.resourceType() == QWebEngineUrlRequestInfo.ResourceType.ResourceTypeXhr and info.requestUrl().isLocalFile()): # For security reasons, disable XMLHttpRequests to local files info.block(True) class ReTextWebEnginePage(QWebEnginePage): def __init__(self, parent, tab): QWebEnginePage.__init__(self, parent) self.tab = tab self.interceptor = ReTextWebEngineUrlRequestInterceptor(self) if hasattr(self, 'setUrlRequestInterceptor'): # Available since Qt 5.13 self.setUrlRequestInterceptor(self.interceptor) else: self.profile().setRequestInterceptor(self.interceptor) def setScrollPosition(self, pos): self.runJavaScript("window.scrollTo(%s, %s);" % (pos.x(), pos.y())) def getPositionMap(self, callback): def resultCallback(result): if result: return callback({int(a): b for a, b in result.items()}) script = """ var elements = document.querySelectorAll('[data-posmap]'); var result = {}; var bodyTop = document.body.getBoundingClientRect().top; for (var i = 0; i < elements.length; ++i) { var element = elements[i]; value = element.getAttribute('data-posmap'); bottom = element.getBoundingClientRect().bottom - bodyTop; result[value] = bottom; } result; """ self.runJavaScript(script, resultCallback) def javaScriptConsoleMessage(self, level, message, lineNumber, sourceId): print("level=%r message=%r lineNumber=%r sourceId=%r" % (level, message, lineNumber, sourceId)) def acceptNavigationRequest(self, url, type, isMainFrame): if url.scheme() == "data": return True if url.isLocalFile(): localFile = url.toLocalFile() if localFile == self.tab.fileName: self.tab.startPendingConversion() return False if self.tab.openSourceFile(localFile): return False if globalSettings.handleWebLinks: return True QDesktopServices.openUrl(url) return False class ReTextWebEnginePreview(ReTextWebPreview, QWebEngineView): def __init__(self, tab, editorPositionToSourceLineFunc, sourceLineToEditorPositionFunc): QWebEngineView.__init__(self, parent=tab) webPage = ReTextWebEnginePage(self, tab) self.setPage(webPage) self.syncscroll = SyncScroll(webPage, editorPositionToSourceLineFunc, sourceLineToEditorPositionFunc) ReTextWebPreview.__init__(self, tab.editBox) def updateFontSettings(self): settings = self.settings() settings.setFontFamily(QWebEngineSettings.FontFamily.StandardFont, globalSettings.font.family()) settings.setFontSize(QWebEngineSettings.FontSize.DefaultFontSize, globalSettings.font.pointSize()) def setHtml(self, html, baseUrl): # A hack to prevent WebEngine from stealing the focus self.setEnabled(False) super().setHtml(html, baseUrl) self.setEnabled(True) def _handleWheelEvent(self, event): # Only pass wheelEvents on to the preview if syncscroll is # controlling the position of the preview if self.syncscroll.isActive(): QGuiApplication.sendEvent(self.focusProxy(), event) def event(self, event): # Work-around https://bugreports.qt.io/browse/QTBUG-43602 if event.type() == QEvent.Type.ChildAdded: event.child().installEventFilter(self) elif event.type() == QEvent.Type.ChildRemoved: event.child().removeEventFilter(self) return super().event(event) def eventFilter(self, object, event): if event.type() == QEvent.Type.Wheel: if QGuiApplication.keyboardModifiers() == Qt.KeyboardModifier.ControlModifier: self.wheelEvent(event) return True return False def findText(self, text, flags): options = QWebEnginePage.FindFlags() if flags & QTextDocument.FindFlag.FindBackward: options |= QWebEnginePage.FindFlag.FindBackward if flags & QTextDocument.FindFlag.FindCaseSensitively: options |= QWebEnginePage.FindFlag.FindCaseSensitively super().findText(text, options) return True ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642949280.0 ReText-7.2.3/ReText/webkitpreview.py0000644000175000017500000000635400000000000017025 0ustar00dmitrydmitry# vim: ts=8:sts=8:sw=8:noexpandtab # # This file is part of ReText # Copyright: 2015-2021 Dmitry Shachnev # # 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, see . from ReText import globalSettings from ReText.syncscroll import SyncScroll from ReText.preview import ReTextWebPreview from PyQt5.QtCore import QStandardPaths from PyQt5.QtGui import QDesktopServices, QTextDocument from PyQt5.QtNetwork import QNetworkDiskCache from PyQt5.QtWebKit import QWebSettings from PyQt5.QtWebKitWidgets import QWebPage, QWebView class ReTextWebKitPreview(ReTextWebPreview, QWebView): def __init__(self, tab, editorPositionToSourceLineFunc, sourceLineToEditorPositionFunc): QWebView.__init__(self) self.tab = tab self.syncscroll = SyncScroll(self.page().mainFrame(), editorPositionToSourceLineFunc, sourceLineToEditorPositionFunc) ReTextWebPreview.__init__(self, tab.editBox) self.page().setLinkDelegationPolicy(QWebPage.LinkDelegationPolicy.DelegateAllLinks) self.page().linkClicked.connect(self._handleLinkClicked) self.settings().setAttribute(QWebSettings.WebAttribute.LocalContentCanAccessFileUrls, False) # Avoid caching of CSS self.settings().setObjectCacheCapacities(0,0,0) self.cache = QNetworkDiskCache() cacheDirectory = QStandardPaths.writableLocation(QStandardPaths.StandardLocation.CacheLocation) self.cache.setCacheDirectory(cacheDirectory) self.page().networkAccessManager().setCache(self.cache) def updateFontSettings(self): settings = self.settings() settings.setFontFamily(QWebSettings.FontFamily.StandardFont, globalSettings.font.family()) settings.setFontSize(QWebSettings.FontSize.DefaultFontSize, globalSettings.font.pointSize()) def _handleWheelEvent(self, event): # Only pass wheelEvents on to the preview if syncscroll is # controlling the position of the preview if self.syncscroll.isActive(): self.wheelEvent(event) def _handleLinkClicked(self, url): if url.isLocalFile(): localFile = url.toLocalFile() if localFile == self.tab.fileName and url.hasFragment(): self.page().mainFrame().scrollToAnchor(url.fragment()) return if self.tab.openSourceFile(localFile): return if globalSettings.handleWebLinks: self.load(url) else: QDesktopServices.openUrl(url) def findText(self, text, flags): options = QWebPage.FindFlag.FindWrapsAroundDocument if flags & QTextDocument.FindFlag.FindBackward: options |= QWebPage.FindFlag.FindBackward if flags & QTextDocument.FindFlag.FindCaseSensitively: options |= QWebPage.FindFlag.FindCaseSensitively return super().findText(text, options) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643919520.0 ReText-7.2.3/ReText/window.py0000644000175000017500000014426500000000000015451 0ustar00dmitrydmitry# vim: ts=8:sts=8:sw=8:noexpandtab # # This file is part of ReText # Copyright: 2012-2021 Dmitry Shachnev # # 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, see . import markups import sys import os from subprocess import Popen import warnings from ReText import (getBundledIcon, app_version, globalSettings, readListFromSettings, writeListToSettings, datadirs) from ReText.tab import (ReTextTab, ReTextWebKitPreview, ReTextWebEnginePreview, PreviewDisabled, PreviewNormal, PreviewLive) from ReText.dialogs import HtmlDialog, LocaleDialog from ReText.config import ConfigDialog, setIconThemeFromSettings from ReText.tabledialog import InsertTableDialog try: from ReText.fakevimeditor import ReTextFakeVimHandler, FakeVimMode except ImportError: ReTextFakeVimHandler = None try: import enchant except ImportError: enchant = None from PyQt5.QtCore import QDir, QFile, QFileInfo, QFileSystemWatcher, \ QIODevice, QLocale, QMarginsF, QTextCodec, QTextStream, QTimer, QUrl, Qt, pyqtSlot from PyQt5.QtGui import QColor, QDesktopServices, QIcon, \ QKeySequence, QPageLayout, QPageSize, QPagedPaintDevice, QPalette, \ QTextDocument, QTextDocumentWriter from PyQt5.QtWidgets import QAction, QActionGroup, QApplication, QCheckBox, \ QComboBox, QDialog, QFileDialog, QFileSystemModel, QFontDialog, \ QInputDialog, QLineEdit, QMainWindow, QMenu, QMessageBox, QSplitter, QTabWidget, \ QToolBar, QToolButton, QTreeView from PyQt5.QtPrintSupport import QPrintDialog, QPrintPreviewDialog, QPrinter class ReTextWindow(QMainWindow): def __init__(self, parent=None): QMainWindow.__init__(self, parent) self.resize(950, 700) qApp = QApplication.instance() if hasattr(self, 'screen'): # Available since Qt 5.14 screenRect = self.screen().geometry() else: screenRect = qApp.desktop().screenGeometry() if globalSettings.windowGeometry: self.restoreGeometry(globalSettings.windowGeometry) else: self.move((screenRect.width() - self.width()) // 2, (screenRect.height() - self.height()) // 2) if not screenRect.contains(self.geometry()): self.showMaximized() if sys.platform.startswith('darwin'): # https://github.com/retext-project/retext/issues/198 searchPaths = QIcon.themeSearchPaths() searchPaths.append('/opt/local/share/icons') searchPaths.append('/usr/local/share/icons') QIcon.setThemeSearchPaths(searchPaths) setIconThemeFromSettings() if QFile.exists(getBundledIcon('retext')): self.setWindowIcon(QIcon(getBundledIcon('retext'))) elif QFile.exists('/usr/share/pixmaps/retext.png'): self.setWindowIcon(QIcon('/usr/share/pixmaps/retext.png')) else: self.setWindowIcon(QIcon.fromTheme('retext', QIcon.fromTheme('accessories-text-editor'))) self.splitter = QSplitter(self) self.treeView = QTreeView(self.splitter) self.treeView.doubleClicked.connect(self.treeItemSelected) self.tabWidget = QTabWidget(self.splitter) self.initTabWidget() self.splitter.setSizes([self.width() // 5, self.width() * 4 // 5]) self.initDirectoryTree(globalSettings.showDirectoryTree, globalSettings.directoryPath) self.setCentralWidget(self.splitter) self.tabWidget.currentChanged.connect(self.changeIndex) self.tabWidget.tabCloseRequested.connect(self.closeTab) self.toolBar = QToolBar(self.tr('File toolbar'), self) self.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.toolBar) self.editBar = QToolBar(self.tr('Edit toolbar'), self) self.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.editBar) self.searchBar = QToolBar(self.tr('Search toolbar'), self) self.addToolBar(Qt.ToolBarArea.BottomToolBarArea, self.searchBar) self.toolBar.setVisible(not globalSettings.hideToolBar) self.editBar.setVisible(not globalSettings.hideToolBar) self.actionNew = self.act(self.tr('New'), 'document-new', self.createNew, shct=QKeySequence.StandardKey.New) self.actionOpen = self.act(self.tr('Open'), 'document-open', self.openFile, shct=QKeySequence.StandardKey.Open) self.actionSetEncoding = self.act(self.tr('Set encoding'), trig=self.showEncodingDialog) self.actionSetEncoding.setEnabled(False) self.actionReload = self.act(self.tr('Reload'), 'view-refresh', lambda: self.currentTab.readTextFromFile()) self.actionReload.setEnabled(False) self.actionSave = self.act(self.tr('Save'), 'document-save', self.saveFile, shct=QKeySequence.StandardKey.Save) self.actionSave.setEnabled(False) self.actionSaveAs = self.act(self.tr('Save as'), 'document-save-as', self.saveFileAs, shct=QKeySequence.StandardKey.SaveAs) self.actionNextTab = self.act(self.tr('Next tab'), 'go-next', lambda: self.switchTab(1), shct=Qt.Modifier.CTRL+Qt.Key.Key_PageDown) self.actionPrevTab = self.act(self.tr('Previous tab'), 'go-previous', lambda: self.switchTab(-1), shct=Qt.Modifier.CTRL+Qt.Key.Key_PageUp) self.actionCloseCurrentTab = self.act(self.tr('Close tab'), 'window-close', lambda: self.closeTab(self.ind), shct=QKeySequence.StandardKey.Close) self.actionPrint = self.act(self.tr('Print'), 'document-print', self.printFile, shct=QKeySequence.StandardKey.Print) self.actionPrintPreview = self.act(self.tr('Print preview'), 'document-print-preview', self.printPreview) self.actionViewHtml = self.act(self.tr('View HTML code'), 'text-html', self.viewHtml) self.actionChangeEditorFont = self.act(self.tr('Change editor font'), trig=self.changeEditorFont) self.actionChangePreviewFont = self.act(self.tr('Change preview font'), trig=self.changePreviewFont) self.actionSearch = self.act(self.tr('Find text'), 'edit-find', self.search, shct=QKeySequence.StandardKey.Find) self.actionGoToLine = self.act(self.tr('Go to line'), trig=self.goToLine, shct=Qt.Modifier.CTRL+Qt.Key.Key_G) self.searchBar.visibilityChanged.connect(self.searchBarVisibilityChanged) self.actionPreview = self.act(self.tr('Preview'), shct=Qt.Modifier.CTRL+Qt.Key.Key_E, trigbool=self.preview) if QIcon.hasThemeIcon('document-preview'): self.actionPreview.setIcon(QIcon.fromTheme('document-preview')) elif QIcon.hasThemeIcon('preview-file'): self.actionPreview.setIcon(QIcon.fromTheme('preview-file')) elif QIcon.hasThemeIcon('x-office-document'): self.actionPreview.setIcon(QIcon.fromTheme('x-office-document')) else: self.actionPreview.setIcon(QIcon(getBundledIcon('document-preview'))) self.actionLivePreview = self.act(self.tr('Live preview'), shct=Qt.Modifier.CTRL+Qt.Key.Key_L, trigbool=self.enableLivePreview) menuPreview = QMenu() menuPreview.addAction(self.actionLivePreview) self.actionInsertTable = self.act(self.tr('Insert table'), trig=lambda: self.insertFormatting('table')) self.actionTableMode = self.act(self.tr('Table editing mode'), shct=Qt.Modifier.CTRL+Qt.Key.Key_T, trigbool=lambda x: self.currentTab.editBox.enableTableMode(x)) self.actionInsertImages = self.act(self.tr('Insert images by file path'), trig=lambda: self.insertImages()) if ReTextFakeVimHandler: self.actionFakeVimMode = self.act(self.tr('FakeVim mode'), shct=Qt.Modifier.CTRL+Qt.Modifier.ALT+Qt.Key.Key_V, trigbool=self.enableFakeVimMode) if globalSettings.useFakeVim: self.actionFakeVimMode.setChecked(True) self.enableFakeVimMode(True) self.actionFullScreen = self.act(self.tr('Fullscreen mode'), 'view-fullscreen', shct=QKeySequence.StandardKey.FullScreen, trigbool=self.enableFullScreen) self.actionFullScreen.setChecked(self.isFullScreen()) self.actionConfig = self.act(self.tr('Preferences'), icon='preferences-system', trig=self.openConfigDialog) self.actionConfig.setMenuRole(QAction.MenuRole.PreferencesRole) self.actionSaveHtml = self.act('HTML', 'text-html', self.saveFileHtml) self.actionPdf = self.act('PDF', 'application-pdf', self.savePdf) self.actionOdf = self.act('ODT', 'x-office-document', self.saveOdf) self.getExportExtensionsList() self.actionQuit = self.act(self.tr('Quit'), 'application-exit', shct=QKeySequence.StandardKey.Quit) self.actionQuit.setMenuRole(QAction.MenuRole.QuitRole) self.actionQuit.triggered.connect(self.close) self.actionUndo = self.act(self.tr('Undo'), 'edit-undo', lambda: self.currentTab.editBox.undo(), shct=QKeySequence.StandardKey.Undo) self.actionRedo = self.act(self.tr('Redo'), 'edit-redo', lambda: self.currentTab.editBox.redo(), shct=QKeySequence.StandardKey.Redo) self.actionCopy = self.act(self.tr('Copy'), 'edit-copy', lambda: self.currentTab.editBox.copy(), shct=QKeySequence.StandardKey.Copy) self.actionCut = self.act(self.tr('Cut'), 'edit-cut', lambda: self.currentTab.editBox.cut(), shct=QKeySequence.StandardKey.Cut) self.actionPaste = self.act(self.tr('Paste'), 'edit-paste', lambda: self.currentTab.editBox.paste(), shct=QKeySequence.StandardKey.Paste) self.actionPasteImage = self.act(self.tr('Paste image'), 'edit-paste', lambda: self.currentTab.editBox.pasteImage(), shct=Qt.Modifier.CTRL+Qt.Modifier.SHIFT+Qt.Key.Key_V) self.actionMoveUp = self.act(self.tr('Move line up'), 'go-up', lambda: self.currentTab.editBox.moveLineUp(), shct=Qt.Modifier.ALT+Qt.Key.Key_Up) self.actionMoveDown = self.act(self.tr('Move line down'), 'go-down', lambda: self.currentTab.editBox.moveLineDown(), shct=Qt.Modifier.ALT+Qt.Key.Key_Down) self.actionUndo.setEnabled(False) self.actionRedo.setEnabled(False) self.actionCopy.setEnabled(False) self.actionCut.setEnabled(False) qApp.clipboard().dataChanged.connect(self.clipboardDataChanged) self.clipboardDataChanged() if enchant is not None: self.actionEnableSC = self.act(self.tr('Enable'), trigbool=self.enableSpellCheck) self.actionSetLocale = self.act(self.tr('Set locale'), trig=self.changeLocale) self.actionWebKit = self.act(self.tr('Use WebKit renderer'), trigbool=self.enableWebKit) if ReTextWebKitPreview is None: globalSettings.useWebKit = False self.actionWebKit.setEnabled(False) self.actionWebKit.setChecked(globalSettings.useWebKit) self.actionWebEngine = self.act(self.tr('Use WebEngine (Chromium) renderer'), trigbool=self.enableWebEngine) if ReTextWebEnginePreview is None: globalSettings.useWebEngine = False self.actionWebEngine.setChecked(globalSettings.useWebEngine) self.actionShow = self.act(self.tr('Show directory'), 'system-file-manager', self.showInDir) self.actionFind = self.act(self.tr('Next'), 'go-next', self.find, shct=QKeySequence.StandardKey.FindNext) self.actionFindPrev = self.act(self.tr('Previous'), 'go-previous', lambda: self.find(back=True), shct=QKeySequence.StandardKey.FindPrevious) self.actionReplace = self.act(self.tr('Replace'), 'edit-find-replace', lambda: self.find(replace=True)) self.actionReplaceAll = self.act(self.tr('Replace all'), trig=self.replaceAll) menuReplace = QMenu() menuReplace.addAction(self.actionReplaceAll) self.actionCloseSearch = self.act(self.tr('Close'), 'window-close', lambda: self.searchBar.setVisible(False), shct=QKeySequence.StandardKey.Cancel) self.actionCloseSearch.setPriority(QAction.Priority.LowPriority) self.actionHelp = self.act(self.tr('Get help online'), 'help-contents', self.openHelp) self.aboutWindowTitle = self.tr('About ReText') self.actionAbout = self.act(self.aboutWindowTitle, 'help-about', self.aboutDialog) self.actionAbout.setMenuRole(QAction.MenuRole.AboutRole) self.actionAboutQt = self.act(self.tr('About Qt')) self.actionAboutQt.setMenuRole(QAction.MenuRole.AboutQtRole) self.actionAboutQt.triggered.connect(qApp.aboutQt) availableMarkups = markups.get_available_markups() if not availableMarkups: print('Warning: no markups are available!') if len(availableMarkups) > 1: self.chooseGroup = QActionGroup(self) markupActions = [] for markup in availableMarkups: markupAction = self.act(markup.name, trigbool=self.markupFunction(markup)) if markup.name == globalSettings.defaultMarkup: markupAction.setChecked(True) self.chooseGroup.addAction(markupAction) markupActions.append(markupAction) self.actionBold = self.act(self.tr('Bold'), shct=QKeySequence.StandardKey.Bold, trig=lambda: self.insertFormatting('bold')) self.actionItalic = self.act(self.tr('Italic'), shct=QKeySequence.StandardKey.Italic, trig=lambda: self.insertFormatting('italic')) self.actionUnderline = self.act(self.tr('Underline'), shct=QKeySequence.StandardKey.Underline, trig=lambda: self.insertFormatting('underline')) self.usefulTags = ('header', 'italic', 'bold', 'underline', 'numbering', 'bullets', 'image', 'link', 'inline code', 'code block', 'blockquote', 'table') self.usefulChars = ('deg', 'divide', 'euro', 'hellip', 'laquo', 'larr', 'lsquo', 'mdash', 'middot', 'minus', 'nbsp', 'ndash', 'raquo', 'rarr', 'rsquo', 'times') self.formattingBox = QComboBox(self.editBar) self.formattingBox.addItem(self.tr('Formatting')) self.formattingBox.addItems(self.usefulTags) if hasattr(self.formattingBox, 'textActivated'): # Available since Qt 5.14 self.formattingBox.textActivated.connect(self.insertFormatting) else: self.formattingBox.activated[str].connect(self.insertFormatting) self.symbolBox = QComboBox(self.editBar) self.symbolBox.addItem(self.tr('Symbols')) self.symbolBox.addItems(self.usefulChars) self.symbolBox.activated.connect(self.insertSymbol) self.updateStyleSheet() menubar = self.menuBar() menuFile = menubar.addMenu(self.tr('&File')) menuEdit = menubar.addMenu(self.tr('&Edit')) menuHelp = menubar.addMenu(self.tr('&Help')) menuFile.addAction(self.actionNew) menuFile.addAction(self.actionOpen) self.menuRecentFiles = menuFile.addMenu(self.tr('Open recent')) self.menuRecentFiles.aboutToShow.connect(self.updateRecentFiles) menuFile.addAction(self.actionShow) menuFile.addAction(self.actionSetEncoding) menuFile.addAction(self.actionReload) menuFile.addSeparator() menuFile.addAction(self.actionSave) menuFile.addAction(self.actionSaveAs) menuFile.addSeparator() menuFile.addAction(self.actionNextTab) menuFile.addAction(self.actionPrevTab) menuFile.addAction(self.actionCloseCurrentTab) menuFile.addSeparator() menuExport = menuFile.addMenu(self.tr('Export')) menuExport.addAction(self.actionSaveHtml) menuExport.addAction(self.actionOdf) menuExport.addAction(self.actionPdf) if self.extensionActions: menuExport.addSeparator() for action, mimetype in self.extensionActions: menuExport.addAction(action) menuExport.aboutToShow.connect(self.updateExtensionsVisibility) menuFile.addAction(self.actionPrint) menuFile.addAction(self.actionPrintPreview) menuFile.addSeparator() menuFile.addAction(self.actionQuit) menuEdit.addAction(self.actionUndo) menuEdit.addAction(self.actionRedo) menuEdit.addSeparator() menuEdit.addAction(self.actionCut) menuEdit.addAction(self.actionCopy) menuEdit.addAction(self.actionPaste) menuEdit.addAction(self.actionPasteImage) menuEdit.addSeparator() menuEdit.addAction(self.actionMoveUp) menuEdit.addAction(self.actionMoveDown) menuEdit.addSeparator() if enchant is not None: menuSC = menuEdit.addMenu(self.tr('Spell check')) menuSC.addAction(self.actionEnableSC) menuSC.addAction(self.actionSetLocale) menuEdit.addAction(self.actionSearch) menuEdit.addAction(self.actionGoToLine) menuEdit.addAction(self.actionChangeEditorFont) menuEdit.addAction(self.actionChangePreviewFont) menuEdit.addSeparator() if len(availableMarkups) > 1: self.menuMode = menuEdit.addMenu(self.tr('Default markup')) for markupAction in markupActions: self.menuMode.addAction(markupAction) menuFormat = menuEdit.addMenu(self.tr('Formatting')) menuFormat.addAction(self.actionBold) menuFormat.addAction(self.actionItalic) menuFormat.addAction(self.actionUnderline) if ReTextWebKitPreview is not None or ReTextWebEnginePreview is None: menuEdit.addAction(self.actionWebKit) else: menuEdit.addAction(self.actionWebEngine) menuEdit.addSeparator() menuEdit.addAction(self.actionViewHtml) menuEdit.addAction(self.actionPreview) menuEdit.addAction(self.actionLivePreview) menuEdit.addAction(self.actionInsertTable) menuEdit.addAction(self.actionTableMode) menuEdit.addAction(self.actionInsertImages) if ReTextFakeVimHandler: menuEdit.addAction(self.actionFakeVimMode) menuEdit.addSeparator() menuEdit.addAction(self.actionFullScreen) menuEdit.addAction(self.actionConfig) menuHelp.addAction(self.actionHelp) menuHelp.addSeparator() menuHelp.addAction(self.actionAbout) menuHelp.addAction(self.actionAboutQt) self.toolBar.addAction(self.actionNew) self.toolBar.addSeparator() self.toolBar.addAction(self.actionOpen) self.toolBar.addAction(self.actionSave) self.toolBar.addAction(self.actionPrint) self.toolBar.addSeparator() previewButton = QToolButton(self.toolBar) previewButton.setDefaultAction(self.actionPreview) previewButton.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon) previewButton.setPopupMode(QToolButton.ToolButtonPopupMode.MenuButtonPopup) previewButton.setMenu(menuPreview) self.toolBar.addWidget(previewButton) self.toolBar.addAction(self.actionFullScreen) self.editBar.addAction(self.actionUndo) self.editBar.addAction(self.actionRedo) self.editBar.addSeparator() self.editBar.addAction(self.actionCut) self.editBar.addAction(self.actionCopy) self.editBar.addAction(self.actionPaste) self.editBar.addSeparator() self.editBar.addWidget(self.formattingBox) self.editBar.addWidget(self.symbolBox) self.searchEdit = QLineEdit(self.searchBar) self.searchEdit.setPlaceholderText(self.tr('Search')) self.searchEdit.returnPressed.connect(self.find) self.replaceEdit = QLineEdit(self.searchBar) self.replaceEdit.setPlaceholderText(self.tr('Replace with')) self.replaceEdit.returnPressed.connect(self.find) self.csBox = QCheckBox(self.tr('Case sensitively'), self.searchBar) self.searchBar.addWidget(self.searchEdit) self.searchBar.addWidget(self.replaceEdit) self.searchBar.addSeparator() self.searchBar.addWidget(self.csBox) self.searchBar.addAction(self.actionFindPrev) self.searchBar.addAction(self.actionFind) replaceButton = QToolButton(self.searchBar) replaceButton.setDefaultAction(self.actionReplace) replaceButton.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon) replaceButton.setPopupMode(QToolButton.ToolButtonPopupMode.MenuButtonPopup) replaceButton.setMenu(menuReplace) self.searchBar.addWidget(replaceButton) self.searchBar.addAction(self.actionCloseSearch) self.searchBar.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon) self.searchBar.setVisible(False) self.autoSaveEnabled = globalSettings.autoSave if self.autoSaveEnabled: timer = QTimer(self) timer.start(60000) timer.timeout.connect(self.saveAll) self.ind = None if enchant is not None: self.sl = globalSettings.spellCheckLocale try: enchant.Dict(self.sl or None) except enchant.errors.Error as e: warnings.warn(str(e), RuntimeWarning) globalSettings.spellCheck = False if globalSettings.spellCheck: self.actionEnableSC.setChecked(True) self.fileSystemWatcher = QFileSystemWatcher() self.fileSystemWatcher.fileChanged.connect(self.fileChanged) def restoreLastOpenedFiles(self): for file in readListFromSettings("lastFileList"): self.openFileWrapper(file) # Show the tab of last opened file lastTabIndex = globalSettings.lastTabIndex if lastTabIndex >= 0 and lastTabIndex < self.tabWidget.count(): self.tabWidget.setCurrentIndex(lastTabIndex) def iterateTabs(self): for i in range(self.tabWidget.count()): yield self.tabWidget.widget(i) def updateStyleSheet(self): self.ss = None if globalSettings.styleSheet: sheetfile = QFile(globalSettings.styleSheet) sheetfile.open(QIODevice.OpenModeFlag.ReadOnly) self.ss = QTextStream(sheetfile).readAll() sheetfile.close() def initTabWidget(self): def dragEnterEvent(e): e.acceptProposedAction() def dropEvent(e): fn = bytes(e.mimeData().data('text/plain')).decode().rstrip() if fn.startswith('file:'): fn = QUrl(fn).toLocalFile() self.openFileWrapper(fn) self.tabWidget.setTabsClosable(True) self.tabWidget.setAcceptDrops(True) self.tabWidget.setMovable(True) self.tabWidget.dragEnterEvent = dragEnterEvent self.tabWidget.dropEvent = dropEvent self.tabWidget.setTabBarAutoHide(globalSettings.tabBarAutoHide) def initDirectoryTree(self, visible, path): if visible: self.fileSystemModel = QFileSystemModel(self.treeView) self.fileSystemModel.setRootPath(path) supportedExtensions = ['.txt'] for markup in markups.get_all_markups(): supportedExtensions += markup.file_extensions filters = ["*" + s for s in supportedExtensions] self.fileSystemModel.setNameFilters(filters) self.fileSystemModel.setNameFilterDisables(False) self.treeView.setModel(self.fileSystemModel) self.treeView.setRootIndex(self.fileSystemModel.index(path)) self.treeView.setColumnHidden(1, True) self.treeView.setColumnHidden(2, True) self.treeView.setColumnHidden(3, True) self.treeView.setHeaderHidden(True) self.treeView.setVisible(visible) def treeItemSelected(self, signal): file_path = self.fileSystemModel.filePath(signal) if os.path.isdir(file_path): return self.openFileWrapper(file_path) def act(self, name, icon=None, trig=None, trigbool=None, shct=None): if not isinstance(shct, QKeySequence): shct = QKeySequence(shct) if icon: action = QAction(self.actIcon(icon), name, self) else: action = QAction(name, self) if trig: action.triggered.connect(trig) elif trigbool: action.setCheckable(True) action.triggered[bool].connect(trigbool) if shct: action.setShortcut(shct) return action def actIcon(self, name): return QIcon.fromTheme(name, QIcon(getBundledIcon(name))) def printError(self): import traceback print('Exception occurred while parsing document:', file=sys.stderr) traceback.print_exc() def updateTabTitle(self, ind, tab): changed = tab.editBox.document().isModified() if changed and not self.autoSaveActive(tab): title = tab.getBaseName() + '*' else: title = tab.getBaseName() self.tabWidget.setTabText(ind, title) def tabFileNameChanged(self, tab): ''' Perform all UI state changes that need to be done when the filename of the current tab has changed. ''' if tab == self.currentTab: if tab.fileName: self.setWindowTitle("") if globalSettings.windowTitleFullPath: self.setWindowTitle(tab.fileName + '[*]') self.setWindowFilePath(tab.fileName) self.updateTabTitle(self.ind, tab) self.tabWidget.setTabToolTip(self.ind, tab.fileName) QDir.setCurrent(QFileInfo(tab.fileName).dir().path()) else: self.setWindowFilePath('') self.setWindowTitle(self.tr('New document') + '[*]') canReload = bool(tab.fileName) and not self.autoSaveActive(tab) self.actionSetEncoding.setEnabled(canReload) self.actionReload.setEnabled(canReload) def tabActiveMarkupChanged(self, tab): ''' Perform all UI state changes that need to be done when the active markup class of the current tab has changed. ''' if tab == self.currentTab: markupClass = tab.getActiveMarkupClass() dtMarkdown = (markupClass == markups.MarkdownMarkup) dtMkdOrReST = dtMarkdown or (markupClass == markups.ReStructuredTextMarkup) self.formattingBox.setEnabled(dtMarkdown) self.symbolBox.setEnabled(dtMarkdown) self.actionUnderline.setEnabled(dtMarkdown) self.actionBold.setEnabled(dtMkdOrReST) self.actionItalic.setEnabled(dtMkdOrReST) def tabModificationStateChanged(self, tab): ''' Perform all UI state changes that need to be done when the modification state of the current tab has changed. ''' if tab == self.currentTab: changed = tab.editBox.document().isModified() if self.autoSaveActive(tab): changed = False self.actionSave.setEnabled(changed) self.updateTabTitle(self.ind, tab) self.setWindowModified(changed) def createTab(self, fileName): previewStatesByName = { 'editor': PreviewDisabled, 'normal-preview': PreviewNormal, 'live-preview': PreviewLive, } previewState = previewStatesByName.get(globalSettings.defaultPreviewState, PreviewDisabled) if previewState == PreviewNormal and not fileName: previewState = PreviewDisabled # Opening empty document in preview mode makes no sense self.currentTab = ReTextTab(self, fileName, previewState) self.currentTab.fileNameChanged.connect(lambda: self.tabFileNameChanged(self.currentTab)) self.currentTab.modificationStateChanged.connect(lambda: self.tabModificationStateChanged(self.currentTab)) self.currentTab.activeMarkupChanged.connect(lambda: self.tabActiveMarkupChanged(self.currentTab)) self.tabWidget.addTab(self.currentTab, self.tr("New document")) self.currentTab.updateBoxesVisibility() if previewState > 0: QTimer.singleShot(500, self.currentTab.triggerPreviewUpdate) def closeTab(self, ind): if self.maybeSave(ind): if self.tabWidget.count() == 1: self.createTab("") closedTab = self.tabWidget.widget(ind) if closedTab.fileName: self.fileSystemWatcher.removePath(closedTab.fileName) self.tabWidget.removeTab(ind) closedTab.deleteLater() def changeIndex(self, ind): ''' This function is called when a different tab is selected. It changes the state of the window to mirror the current state of the newly selected tab. Future changes to this state will be done in response to signals emitted by the tab, to which the window was subscribed when the tab was created. The window is subscribed to all tabs like this, but only the active tab will logically generate these signals. Aside from the above this function also calls the handlers for the other changes that are implied by a tab switch: filename change, modification state change and active markup change. ''' self.currentTab = self.tabWidget.currentWidget() editBox = self.currentTab.editBox previewState = self.currentTab.previewState self.actionUndo.setEnabled(editBox.document().isUndoAvailable()) self.actionRedo.setEnabled(editBox.document().isRedoAvailable()) self.actionCopy.setEnabled(editBox.textCursor().hasSelection()) self.actionCut.setEnabled(editBox.textCursor().hasSelection()) self.actionPreview.setChecked(previewState >= PreviewLive) self.actionLivePreview.setChecked(previewState == PreviewLive) self.actionTableMode.setChecked(editBox.tableModeEnabled) self.editBar.setEnabled(previewState < PreviewNormal) self.ind = ind editBox.setFocus(Qt.FocusReason.OtherFocusReason) self.tabFileNameChanged(self.currentTab) self.tabModificationStateChanged(self.currentTab) self.tabActiveMarkupChanged(self.currentTab) def changeEditorFont(self): font, ok = QFontDialog.getFont(globalSettings.editorFont, self) if ok: self.setEditorFont(font) def setEditorFont(self, font): globalSettings.editorFont = font for tab in self.iterateTabs(): tab.editBox.updateFont() def changePreviewFont(self): font, ok = QFontDialog.getFont(globalSettings.font, self) if ok: self.setPreviewFont(font) def setPreviewFont(self, font): globalSettings.font = font for tab in self.iterateTabs(): tab.triggerPreviewUpdate() def preview(self, viewmode): self.currentTab.previewState = viewmode * 2 self.actionLivePreview.setChecked(False) self.editBar.setDisabled(viewmode) self.currentTab.updateBoxesVisibility() self.currentTab.triggerPreviewUpdate() def enableLivePreview(self, livemode): self.currentTab.previewState = int(livemode) self.actionPreview.setChecked(livemode) self.editBar.setEnabled(True) self.currentTab.updateBoxesVisibility() self.currentTab.triggerPreviewUpdate() def enableWebKit(self, enable): globalSettings.useWebKit = enable globalSettings.useWebEngine = False for tab in self.iterateTabs(): tab.rebuildPreviewBox() def enableWebEngine(self, enable): globalSettings.useWebKit = False globalSettings.useWebEngine = enable for tab in self.iterateTabs(): tab.rebuildPreviewBox() def enableCopy(self, copymode): self.actionCopy.setEnabled(copymode) self.actionCut.setEnabled(copymode) def enableFullScreen(self, yes): if yes: self.showFullScreen() else: self.showNormal() def openConfigDialog(self): dlg = ConfigDialog(self) dlg.setWindowTitle(self.tr('Preferences')) dlg.show() def enableFakeVimMode(self, yes): globalSettings.useFakeVim = yes if yes: FakeVimMode.init(self) for tab in self.iterateTabs(): tab.editBox.installFakeVimHandler() else: FakeVimMode.exit(self) def enableSpellCheck(self, yes): try: dict = enchant.Dict(self.sl or None) except enchant.errors.Error as e: QMessageBox.warning(self, '', str(e)) self.actionEnableSC.setChecked(False) yes = False self.setAllDictionaries(dict if yes else None) globalSettings.spellCheck = yes def setAllDictionaries(self, dictionary): for tab in self.iterateTabs(): hl = tab.highlighter hl.dictionary = dictionary hl.rehighlight() def changeLocale(self): localedlg = LocaleDialog(self, defaultText=self.sl) if localedlg.exec() != QDialog.DialogCode.Accepted: return sl = localedlg.localeEdit.text() try: enchant.Dict(sl or None) except enchant.errors.Error as e: QMessageBox.warning(self, '', str(e)) else: self.sl = sl or None self.enableSpellCheck(self.actionEnableSC.isChecked()) if localedlg.checkBox.isChecked(): globalSettings.spellCheckLocale = sl def search(self): self.searchBar.setVisible(True) self.searchEdit.setFocus(Qt.FocusReason.ShortcutFocusReason) def goToLine(self): line, ok = QInputDialog.getInt(self, self.tr("Go to line"), self.tr("Type the line number")) if ok: self.currentTab.goToLine(line-1) def searchBarVisibilityChanged(self, visible): if visible: self.searchEdit.setFocus(Qt.FocusReason.ShortcutFocusReason) def find(self, back=False, replace=False): flags = QTextDocument.FindFlags() if back: flags |= QTextDocument.FindFlag.FindBackward if self.csBox.isChecked(): flags |= QTextDocument.FindFlag.FindCaseSensitively text = self.searchEdit.text() replaceText = self.replaceEdit.text() if replace else None found = self.currentTab.find(text, flags, replaceText=replaceText) self.setSearchEditColor(found) def replaceAll(self): text = self.searchEdit.text() replaceText = self.replaceEdit.text() found = self.currentTab.replaceAll(text, replaceText) self.setSearchEditColor(found) def setSearchEditColor(self, found): palette = self.searchEdit.palette() palette.setColor(QPalette.ColorGroup.Active, QPalette.ColorRole.Base, Qt.GlobalColor.white if found else QColor(255, 102, 102)) self.searchEdit.setPalette(palette) def showInDir(self): if self.currentTab.fileName: path = QFileInfo(self.currentTab.fileName).path() QDesktopServices.openUrl(QUrl.fromLocalFile(path)) else: QMessageBox.warning(self, '', self.tr("Please, save the file somewhere.")) def moveToTopOfRecentFileList(self, fileName): if fileName: files = readListFromSettings("recentFileList") if fileName in files: files.remove(fileName) files.insert(0, fileName) recentCount = globalSettings.recentDocumentsCount if len(files) > recentCount: del files[recentCount:] writeListToSettings("recentFileList", files) def createNew(self, text=None): self.createTab("") self.ind = self.tabWidget.count()-1 self.tabWidget.setCurrentIndex(self.ind) if text: self.currentTab.editBox.textCursor().insertText(text) def switchTab(self, shift=1): self.tabWidget.setCurrentIndex((self.ind + shift) % self.tabWidget.count()) def updateRecentFiles(self): self.menuRecentFiles.clear() self.recentFilesActions = [] filesOld = readListFromSettings("recentFileList") files = [] for f in filesOld: if QFile.exists(f): files.append(f) self.recentFilesActions.append(self.act(f, trig=self.openFunction(f))) writeListToSettings("recentFileList", files) for action in self.recentFilesActions: self.menuRecentFiles.addAction(action) def markupFunction(self, markup): return lambda: self.setDefaultMarkup(markup) def openFunction(self, fileName): return lambda: self.openFileWrapper(fileName) def extensionFunction(self, data): return lambda: \ self.runExtensionCommand(data['Exec'], data['FileFilter'], data['DefaultExtension']) def getExportExtensionsList(self): extensions = [] for extsprefix in datadirs: extsdir = QDir(extsprefix+'/export-extensions/') if extsdir.exists(): for fileInfo in extsdir.entryInfoList(['*.desktop', '*.ini'], QDir.Filter.Files | QDir.Filter.Readable): extensions.append(self.readExtension(fileInfo.filePath())) locale = QLocale.system().name() self.extensionActions = [] for extension in extensions: try: if ('Name[%s]' % locale) in extension: name = extension['Name[%s]' % locale] elif ('Name[%s]' % locale.split('_')[0]) in extension: name = extension['Name[%s]' % locale.split('_')[0]] else: name = extension['Name'] data = {} for prop in ('FileFilter', 'DefaultExtension', 'Exec'): if 'X-ReText-'+prop in extension: data[prop] = extension['X-ReText-'+prop] elif prop in extension: data[prop] = extension[prop] else: data[prop] = '' action = self.act(name, trig=self.extensionFunction(data)) if 'Icon' in extension: action.setIcon(self.actIcon(extension['Icon'])) mimetype = extension['MimeType'] if 'MimeType' in extension else None except KeyError: print('Failed to parse extension: Name is required', file=sys.stderr) else: self.extensionActions.append((action, mimetype)) def updateExtensionsVisibility(self): markupClass = self.currentTab.getActiveMarkupClass() for action in self.extensionActions: if markupClass is None: action[0].setEnabled(False) continue mimetype = action[1] if mimetype is None: enabled = True elif markupClass == markups.MarkdownMarkup: enabled = (mimetype == "text/markdown") elif markupClass == markups.ReStructuredTextMarkup: enabled = (mimetype == "text/x-rst") else: enabled = False action[0].setEnabled(enabled) def readExtension(self, fileName): extFile = QFile(fileName) extFile.open(QIODevice.OpenModeFlag.ReadOnly) extension = {} stream = QTextStream(extFile) while not stream.atEnd(): line = stream.readLine() if '=' in line: index = line.index('=') extension[line[:index].rstrip()] = line[index+1:].lstrip() extFile.close() return extension def openFile(self): supportedExtensions = ['.txt'] for markup in markups.get_all_markups(): supportedExtensions += markup.file_extensions fileFilter = ' (' + str.join(' ', ['*'+ext for ext in supportedExtensions]) + ');;' fileNames = QFileDialog.getOpenFileNames(self, self.tr("Select one or several files to open"), QDir.currentPath(), self.tr("Supported files") + fileFilter + self.tr("All files (*)")) for fileName in fileNames[0]: self.openFileWrapper(fileName) @pyqtSlot(str) def openFileWrapper(self, fileName): if not fileName: return fileName = QFileInfo(fileName).canonicalFilePath() exists = False for i, tab in enumerate(self.iterateTabs()): if tab.fileName == fileName: exists = True ex = i if exists: self.tabWidget.setCurrentIndex(ex) elif QFile.exists(fileName): noEmptyTab = ( (self.ind is None) or self.currentTab.fileName or self.currentTab.editBox.toPlainText() or self.currentTab.editBox.document().isModified() ) if noEmptyTab: self.createTab(fileName) self.ind = self.tabWidget.count()-1 self.tabWidget.setCurrentIndex(self.ind) if fileName: self.fileSystemWatcher.addPath(fileName) self.currentTab.readTextFromFile(fileName) self.moveToTopOfRecentFileList(self.currentTab.fileName) def showEncodingDialog(self): if not self.maybeSave(self.ind): return codecsSet = set(bytes(QTextCodec.codecForName(alias).name()) for alias in QTextCodec.availableCodecs()) encoding, ok = QInputDialog.getItem(self, '', self.tr('Select file encoding from the list:'), [bytes(b).decode() for b in sorted(codecsSet)], 0, False) if ok: self.currentTab.readTextFromFile(None, encoding) def saveFileAs(self): self.saveFile(dlg=True) def saveAll(self): for tab in self.iterateTabs(): if (tab.fileName and tab.editBox.document().isModified() and QFileInfo(tab.fileName).isWritable()): tab.saveTextToFile() def saveFile(self, dlg=False): fileNameToSave = self.currentTab.fileName if (not fileNameToSave) or dlg: proposedFileName = "" markupClass = self.currentTab.getActiveMarkupClass() if (markupClass is None) or not hasattr(markupClass, 'default_extension'): defaultExt = self.tr("Plain text (*.txt)") ext = ".txt" else: defaultExt = self.tr('%s files', 'Example of final string: Markdown files') \ % markupClass.name + ' (' + str.join(' ', ('*'+extension for extension in markupClass.file_extensions)) + ')' if markupClass == markups.MarkdownMarkup: ext = globalSettings.markdownDefaultFileExtension elif markupClass == markups.ReStructuredTextMarkup: ext = globalSettings.restDefaultFileExtension else: ext = markupClass.default_extension if fileNameToSave is not None: proposedFileName = fileNameToSave fileNameToSave = QFileDialog.getSaveFileName(self, self.tr("Save file"), proposedFileName, defaultExt)[0] if fileNameToSave: if not QFileInfo(fileNameToSave).suffix(): fileNameToSave += ext # Make sure we don't overwrite a file opened in other tab for tab in self.iterateTabs(): if tab is not self.currentTab and tab.fileName == fileNameToSave: QMessageBox.warning(self, "", self.tr("Cannot save to file which is open in another tab!")) return False self.actionSetEncoding.setDisabled(self.autoSaveActive()) if fileNameToSave: if self.currentTab.saveTextToFile(fileNameToSave): self.moveToTopOfRecentFileList(self.currentTab.fileName) return True else: QMessageBox.warning(self, '', self.tr("Cannot save to file because it is read-only!")) return False def saveHtml(self, fileName): if not QFileInfo(fileName).suffix(): fileName += ".html" try: _, htmltext, _ = self.currentTab.getDocumentForExport(webenv=True) except Exception: return self.printError() htmlFile = QFile(fileName) result = htmlFile.open(QIODevice.OpenModeFlag.WriteOnly) if not result: QMessageBox.warning(self, '', self.tr("Cannot save to file because it is read-only!")) return html = QTextStream(htmlFile) if globalSettings.defaultCodec: html.setCodec(globalSettings.defaultCodec) html << htmltext htmlFile.close() def textDocument(self, title, htmltext): td = QTextDocument() td.setMetaInformation(QTextDocument.MetaInformation.DocumentTitle, title) td.setHtml(htmltext) td.setDefaultFont(globalSettings.font) return td def saveOdf(self): title, htmltext, _ = self.currentTab.getDocumentForExport() try: document = self.textDocument(title, htmltext) except Exception: return self.printError() fileName = QFileDialog.getSaveFileName(self, self.tr("Export document to ODT"), self.currentTab.getBaseName() + ".odt", self.tr("OpenDocument text files (*.odt)"))[0] if not QFileInfo(fileName).suffix(): fileName += ".odt" writer = QTextDocumentWriter(fileName) writer.setFormat(b"odf") writer.write(document) def saveFileHtml(self): fileName = QFileDialog.getSaveFileName(self, self.tr("Save file"), self.currentTab.getBaseName() + ".html", self.tr("HTML files (*.html *.htm)"))[0] if fileName: self.saveHtml(fileName) def getDocumentForPrint(self, title, htmltext, preview): if globalSettings.useWebKit: return preview try: return self.textDocument(title, htmltext) except Exception: self.printError() def standardPrinter(self, title): printer = QPrinter(QPrinter.PrinterMode.HighResolution) printer.setDocName(title) printer.setCreator('ReText %s' % app_version) if globalSettings.paperSize: pageSize = self.getPageSizeByName(globalSettings.paperSize) if pageSize is not None: printer.setPaperSize(pageSize) else: QMessageBox.warning(self, '', self.tr('Unrecognized paperSize setting "%s".') % globalSettings.paperSize) return printer def getPageSizeByName(self, pageSizeName): """ Returns a validated PageSize instance corresponding to the given name. Returns None if the name is not a valid PageSize. """ pageSize = None lowerCaseNames = {pageSize.lower(): pageSize for pageSize in self.availablePageSizes()} if pageSizeName.lower() in lowerCaseNames: pageSize = getattr(QPagedPaintDevice, lowerCaseNames[pageSizeName.lower()]) return pageSize def availablePageSizes(self): """ List available page sizes. """ sizes = [x for x in dir(QPagedPaintDevice) if type(getattr(QPagedPaintDevice, x)) == QPagedPaintDevice.PageSize] return sizes def savePdf(self): fileName = QFileDialog.getSaveFileName(self, self.tr("Export document to PDF"), self.currentTab.getBaseName() + ".pdf", self.tr("PDF files (*.pdf)"))[0] if fileName: if not QFileInfo(fileName).suffix(): fileName += ".pdf" title, htmltext, preview = self.currentTab.getDocumentForExport() if globalSettings.useWebEngine: pageSize = self.getPageSizeByName(globalSettings.paperSize) if pageSize is None: pageSize = QPageSize(QPageSize.PageSizeId.A4) margins = QMarginsF(20, 20, 13, 20) # left, top, right, bottom (in millimeters) layout = QPageLayout(pageSize, QPageLayout.Orientation.Portrait, margins, QPageLayout.Unit.Millimeter) preview.page().printToPdf(fileName, layout) return printer = self.standardPrinter(title) printer.setOutputFormat(QPrinter.OutputFormat.PdfFormat) printer.setOutputFileName(fileName) document = self.getDocumentForPrint(title, htmltext, preview) if document != None: document.print(printer) def printFile(self): title, htmltext, preview = self.currentTab.getDocumentForExport() printer = self.standardPrinter(title) dlg = QPrintDialog(printer, self) dlg.setWindowTitle(self.tr("Print document")) if (dlg.exec() == QDialog.DialogCode.Accepted): document = self.getDocumentForPrint(title, htmltext, preview) if document != None: document.print(printer) def printPreview(self): title, htmltext, preview = self.currentTab.getDocumentForExport() document = self.getDocumentForPrint(title, htmltext, preview) if document is None: return printer = self.standardPrinter(title) preview = QPrintPreviewDialog(printer, self) preview.paintRequested.connect(document.print) preview.exec() def runExtensionCommand(self, command, filefilter, defaultext): import shlex of = ('%of' in command) html = ('%html' in command) if of: if defaultext and not filefilter: filefilter = '*'+defaultext fileName = QFileDialog.getSaveFileName(self, self.tr('Export document'), '', filefilter)[0] if not fileName: return if defaultext and not QFileInfo(fileName).suffix(): fileName += defaultext else: fileName = 'out' + defaultext basename = '.%s.retext-temp' % self.currentTab.getBaseName() if html: tmpname = basename+'.html' self.saveHtml(tmpname) else: tmpname = basename + self.currentTab.getActiveMarkupClass().default_extension self.currentTab.writeTextToFile(tmpname) command = command.replace('%of', shlex.quote(fileName)) command = command.replace('%html' if html else '%if', shlex.quote(tmpname)) try: Popen(str(command), shell=True).wait() except Exception as error: errorstr = str(error) QMessageBox.warning(self, '', self.tr('Failed to execute the command:') + '\n' + errorstr) QFile(tmpname).remove() def autoSaveActive(self, tab=None): tab = tab if tab else self.currentTab return bool(self.autoSaveEnabled and tab.fileName and QFileInfo(tab.fileName).isWritable()) def clipboardDataChanged(self): mimeData = QApplication.instance().clipboard().mimeData() if mimeData is not None: self.actionPaste.setEnabled(mimeData.hasText()) self.actionPasteImage.setEnabled(mimeData.hasImage()) def insertFormatting(self, formatting): if formatting == 'table': dialog = InsertTableDialog(self) dialog.show() self.formattingBox.setCurrentIndex(0) return cursor = self.currentTab.editBox.textCursor() text = cursor.selectedText() moveCursorTo = None def c(cursor): nonlocal moveCursorTo moveCursorTo = cursor.position() def ensurenl(cursor): if not cursor.atBlockStart(): cursor.insertText('\n\n') toinsert = { 'header': (ensurenl, '# ', text), 'italic': ('*', text, c, '*'), 'bold': ('**', text, c, '**'), 'underline': ('', text, c, ''), 'numbering': (ensurenl, ' 1. ', text), 'bullets': (ensurenl, ' * ', text), 'image': ('![', text or self.tr('Alt text'), c, '](', self.tr('URL'), ')'), 'link': ('[', text or self.tr('Link text'), c, '](', self.tr('URL'), ')'), 'inline code': ('`', text, c, '`'), 'code block': (ensurenl, ' ', text), 'blockquote': (ensurenl, '> ', text), } if formatting not in toinsert: return cursor.beginEditBlock() for token in toinsert[formatting]: if callable(token): token(cursor) else: cursor.insertText(token) cursor.endEditBlock() self.formattingBox.setCurrentIndex(0) # Bring back the focus on the editor self.currentTab.editBox.setFocus(Qt.FocusReason.OtherFocusReason) if moveCursorTo: cursor.setPosition(moveCursorTo) self.currentTab.editBox.setTextCursor(cursor) def insertSymbol(self, num): if num: self.currentTab.editBox.insertPlainText('&'+self.usefulChars[num-1]+';') self.symbolBox.setCurrentIndex(0) def fileChanged(self, fileName): tab = None for testtab in self.iterateTabs(): if testtab.fileName == fileName: tab = testtab if tab is None: self.fileSystemWatcher.removePath(fileName) return if not QFile.exists(fileName): self.tabWidget.setCurrentWidget(tab) tab.editBox.document().setModified(True) QMessageBox.warning(self, '', self.tr( 'This file has been deleted by other application.\n' 'Please make sure you save the file before exit.')) elif not tab.editBox.document().isModified(): # File was not modified in ReText, reload silently tab.readTextFromFile() else: self.tabWidget.setCurrentWidget(tab) text = self.tr( 'This document has been modified by other application.\n' 'Do you want to reload the file (this will discard all ' 'your changes)?\n') if self.autoSaveEnabled: text += self.tr( 'If you choose to not reload the file, auto save mode will ' 'be disabled for this session to prevent data loss.') messageBox = QMessageBox(QMessageBox.Icon.Warning, '', text) reloadButton = messageBox.addButton(self.tr('Reload'), QMessageBox.ButtonRole.YesRole) messageBox.addButton(QMessageBox.StandardButton.Cancel) messageBox.exec() if messageBox.clickedButton() is reloadButton: tab.readTextFromFile() else: self.autoSaveEnabled = False tab.editBox.document().setModified(True) if fileName not in self.fileSystemWatcher.files(): # https://github.com/retext-project/retext/issues/137 self.fileSystemWatcher.addPath(fileName) def maybeSave(self, ind): tab = self.tabWidget.widget(ind) if self.autoSaveActive(tab): tab.saveTextToFile() return True if not tab.editBox.document().isModified(): return True self.tabWidget.setCurrentIndex(ind) ret = QMessageBox.warning(self, '', self.tr("The document has been modified.\nDo you want to save your changes?"), QMessageBox.StandardButton.Save | QMessageBox.StandardButton.Discard | QMessageBox.StandardButton.Cancel) if ret == QMessageBox.StandardButton.Save: return self.saveFile(False) elif ret == QMessageBox.StandardButton.Cancel: return False return True def closeEvent(self, closeevent): for ind in range(self.tabWidget.count()): if not self.maybeSave(ind): return closeevent.ignore() if globalSettings.saveWindowGeometry: globalSettings.windowGeometry = self.saveGeometry() if globalSettings.openLastFilesOnStartup: files = [tab.fileName for tab in self.iterateTabs()] writeListToSettings("lastFileList", files) globalSettings.lastTabIndex = self.tabWidget.currentIndex() closeevent.accept() def viewHtml(self): htmlDlg = HtmlDialog(self) try: _, htmltext, _ = self.currentTab.getDocumentForExport(includeStyleSheet=False) except Exception: return self.printError() winTitle = self.currentTab.getBaseName() htmlDlg.setWindowTitle(winTitle+" ("+self.tr("HTML code")+")") htmlDlg.textEdit.setPlainText(htmltext.rstrip()) htmlDlg.hl.rehighlight() htmlDlg.show() htmlDlg.raise_() htmlDlg.activateWindow() def insertImages(self): supportedExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.bmp'] fileFilter = ' (%s);;' % ' '.join('*' + ext for ext in supportedExtensions) fileNames, _selectedFilter = QFileDialog.getOpenFileNames(self, self.tr("Select one or several images to open"), QDir.currentPath(), self.tr("Supported files") + fileFilter + self.tr("All files (*)")) cursor = self.currentTab.editBox.textCursor() imagesMarkup = '\n'.join( self.currentTab.editBox.getImageMarkup(fileName) for fileName in fileNames) cursor.insertText(imagesMarkup) self.formattingBox.setCurrentIndex(0) self.currentTab.editBox.setFocus(Qt.FocusReason.OtherFocusReason) def openHelp(self): QDesktopServices.openUrl(QUrl('https://github.com/retext-project/retext/wiki')) def aboutDialog(self): QMessageBox.about(self, self.aboutWindowTitle, '

' + (self.tr('ReText %s (using PyMarkups %s)') % (app_version, markups.__version__)) +'

' + self.tr('Simple but powerful editor' ' for Markdown and reStructuredText') +'

'+self.tr('Author: Dmitry Shachnev, 2011').replace('2011', '2011–2021') +'
GitHub | ' +'' +self.tr('Markdown syntax') +' | ' +self.tr('reStructuredText syntax')+'

') def setDefaultMarkup(self, markupClass): globalSettings.defaultMarkup = markupClass.name for tab in self.iterateTabs(): if not tab.fileName: tab.updateActiveMarkupClass() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1633978476.0 ReText-7.2.3/ReText/xsettings.py0000644000175000017500000001550400000000000016163 0ustar00dmitrydmitry# This file is part of ReText # Copyright: 2015-2017 Dmitry Shachnev # # 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, see . # This is implementation of XSettings specification, described at # import ctypes import ctypes.util import struct class _xcb_reply_t(ctypes.Structure): # this can be used instead of xcb_intern_atom_reply_t, # xcb_get_selection_owner_reply_t, etc _fields_ = [('response_type', ctypes.c_uint8), ('pad0', ctypes.c_uint8), ('sequence', ctypes.c_uint16), ('length', ctypes.c_uint32), ('payload', ctypes.c_uint32)] class _xcb_cookie_t(ctypes.Structure): # this can be used instead of xcb_intern_atom_cookie_t, # xcb_get_selection_owner_cookie_t, etc _fields_ = [('sequence', ctypes.c_uint)] _xcb_error_messages = [ None, 'XCB error: socket, pipe and other stream error', 'XCB connection closed: extension unsupported', 'XCB connection closed: insufficient memory', 'XCB connection closed: request length exceeded', 'XCB connection closed: DISPLAY parse error', 'XCB connection closed: invalid screen' ] class XSettingsError(RuntimeError): pass class XSettingsParseError(XSettingsError): pass def get_raw_xsettings(display=0): # initialize the libraries xcb_library_name = ctypes.util.find_library('xcb') if xcb_library_name is None: raise XSettingsError('Xcb library not found') xcb = ctypes.CDLL(xcb_library_name) c_library_name = ctypes.util.find_library('c') if c_library_name is None: raise XSettingsError('C library not found') c = ctypes.CDLL(c_library_name) # set some args and return types c.free.argtypes = [ctypes.c_void_p] c.free.restype = None xcb.xcb_connect.argtypes = [ctypes.c_char_p, ctypes.POINTER(ctypes.c_int)] xcb.xcb_connect.restype = ctypes.c_void_p xcb.xcb_connection_has_error.argtypes = [ctypes.c_void_p] xcb.xcb_connection_has_error.restype = ctypes.c_int xcb.xcb_disconnect.argtypes = [ctypes.c_void_p] xcb.xcb_disconnect.restype = None xcb.xcb_intern_atom.argtypes = [ctypes.c_void_p, ctypes.c_uint8, ctypes.c_uint16, ctypes.c_char_p] xcb.xcb_intern_atom.restype = _xcb_cookie_t xcb.xcb_intern_atom_reply.argtypes = [ctypes.c_void_p, _xcb_cookie_t, ctypes.c_void_p] xcb.xcb_intern_atom_reply.restype = ctypes.POINTER(_xcb_reply_t) xcb.xcb_get_selection_owner.argtypes = [ctypes.c_void_p, ctypes.c_uint32] xcb.xcb_get_selection_owner.restype = _xcb_cookie_t xcb.xcb_get_selection_owner_reply.argtypes = [ctypes.c_void_p, _xcb_cookie_t, ctypes.c_void_p] xcb.xcb_get_selection_owner_reply.restype = ctypes.POINTER(_xcb_reply_t) xcb.xcb_get_property.argtypes = [ctypes.c_void_p, ctypes.c_uint8, ctypes.c_uint32, ctypes.c_uint32, ctypes.c_uint32, ctypes.c_uint32, ctypes.c_uint32] xcb.xcb_get_property.restype = _xcb_cookie_t xcb.xcb_get_property_reply.argtypes = [ctypes.c_void_p, _xcb_cookie_t, ctypes.c_void_p] xcb.xcb_get_property_reply.restype = ctypes.c_void_p xcb.xcb_get_property_value_length.argtypes = [ctypes.c_void_p] xcb.xcb_get_property_value_length.restype = ctypes.c_int xcb.xcb_get_property_value.argtypes = [ctypes.c_void_p] xcb.xcb_get_property_value.restype = ctypes.c_void_p # open the connection connection = xcb.xcb_connect(None, None) error = xcb.xcb_connection_has_error(connection) if error: raise XSettingsError(_xcb_error_messages[error]) # get selection atom cookie buffer = ('_XSETTINGS_S%d' % display).encode() cookie = xcb.xcb_intern_atom(connection, 0, len(buffer), buffer) # get selection atom reply reply = xcb.xcb_intern_atom_reply(connection, cookie, None) selection_atom = reply.contents.payload c.free(reply) # get selection owner cookie cookie = xcb.xcb_get_selection_owner(connection, selection_atom) # get selection owner reply reply = xcb.xcb_get_selection_owner_reply(connection, cookie, None) window = reply.contents.payload c.free(reply) # get settings atom cookie buffer = b'_XSETTINGS_SETTINGS' cookie = xcb.xcb_intern_atom(connection, 0, len(buffer), buffer) # get settings atom reply reply = xcb.xcb_intern_atom_reply(connection, cookie, None) settings_atom = reply.contents.payload c.free(reply) # get property cookie cookie = xcb.xcb_get_property(connection, 0, window, settings_atom, 0, 0, 0x2000) # get property reply reply = xcb.xcb_get_property_reply(connection, cookie, None) if reply is not None: length = xcb.xcb_get_property_value_length(reply) pointer = xcb.xcb_get_property_value(reply) if length else None result = ctypes.string_at(pointer, length) c.free(reply) # close the connection xcb.xcb_disconnect(connection) # handle possible errors if reply is None or not length: raise XSettingsError('XSettings not available') return result def parse_xsettings(raw_xsettings): if len(raw_xsettings) < 12: raise XSettingsParseError('length < 12') if raw_xsettings[0] not in (0, 1): raise XSettingsParseError('wrong order byte: %d' % raw_xsettings[0]) byte_order = '<>'[raw_xsettings[0]] settings_count = struct.unpack(byte_order + 'I', raw_xsettings[8:12])[0] TypeInteger, TypeString, TypeColor = range(3) result = {} raw_xsettings = raw_xsettings[12:] offset = 0 for i in range(settings_count): setting_type = raw_xsettings[offset] offset += 2 name_length = struct.unpack(byte_order + 'H', raw_xsettings[offset:offset + 2])[0] offset += 2 name = raw_xsettings[offset:offset + name_length] offset += name_length if offset & 3: offset += 4 - (offset & 3) offset += 4 # skip last-change-serial if setting_type == TypeInteger: value = struct.unpack(byte_order + 'I', raw_xsettings[offset:offset + 4])[0] offset += 4 elif setting_type == TypeString: value_length = struct.unpack(byte_order + 'I', raw_xsettings[offset:offset + 4])[0] offset += 4 value = raw_xsettings[offset:offset + value_length] offset += value_length if offset & 3: offset += 4 - (offset & 3) elif setting_type == TypeColor: value = struct.unpack(byte_order + 'HHHH', raw_xsettings[offset:offset + 8]) offset += 8 else: raise XSettingsParseError('Wrong setting type: %d' % setting_type) result[name] = value return result def get_xsettings(display=0): raw_xsettings = get_raw_xsettings(display) return parse_xsettings(raw_xsettings) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1643920524.1765156 ReText-7.2.3/ReText.egg-info/0000755000175000017500000000000000000000000015246 5ustar00dmitrydmitry././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920524.0 ReText-7.2.3/ReText.egg-info/PKG-INFO0000644000175000017500000000226300000000000016346 0ustar00dmitrydmitryMetadata-Version: 2.1 Name: ReText Version: 7.2.3 Summary: Simple editor for Markdown and reStructuredText Home-page: https://github.com/retext-project/retext Author: Dmitry Shachnev Author-email: mitya57@gmail.com License: GPL 2+ Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: X11 Applications :: Qt Classifier: License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+) Classifier: Programming Language :: Python :: 3 :: Only Classifier: Topic :: Text Editors Classifier: Topic :: Text Processing :: Markup Requires: docutils Requires: Markdown Requires: Markups(>=2.0) Requires: pyenchant Requires: Pygments Requires: PyQt5(>=5.11) Requires-Python: >=3.6 Provides-Extra: spellcheck License-File: LICENSE_GPL ReText is simple text editor that supports Markdown and reStructuredText markup languages. It is written in Python using PyQt libraries. It supports live preview, tabs, math formulas, export to various formats including PDF and HTML. For more details, please go to the `home page`_ or to the `wiki`_. .. _`home page`: https://github.com/retext-project/retext .. _`wiki`: https://github.com/retext-project/retext/wiki ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920524.0 ReText-7.2.3/ReText.egg-info/SOURCES.txt0000644000175000017500000000540500000000000017136 0ustar00dmitrydmitryLICENSE_GPL MANIFEST.in README.md changelog.md configuration.md setup.py ReText/__init__.py ReText/__main__.py ReText/config.py ReText/converterprocess.py ReText/dialogs.py ReText/editor.py ReText/fakevimeditor.py ReText/highlighter.py ReText/icontheme.py ReText/mdx_posmap.py ReText/preview.py ReText/syncscroll.py ReText/tab.py ReText/tabledialog.py ReText/tablemode.py ReText/webenginepreview.py ReText/webkitpreview.py ReText/window.py ReText/xsettings.py ReText.egg-info/PKG-INFO ReText.egg-info/SOURCES.txt ReText.egg-info/dependency_links.txt ReText.egg-info/entry_points.txt ReText.egg-info/requires.txt ReText.egg-info/top_level.txt data/me.mitya57.ReText.appdata.xml data/me.mitya57.ReText.desktop data/retext-kde5.png icons/COPYING icons/README.md icons/application-exit.png icons/application-pdf.png icons/document-new.png icons/document-open-recent.png icons/document-open.png icons/document-preview.png icons/document-print-preview.png icons/document-print.png icons/document-save-as.png icons/document-save.png icons/edit-copy.png icons/edit-cut.png icons/edit-find.png icons/edit-paste.png icons/edit-redo.png icons/edit-undo.png icons/go-next.png icons/go-previous.png icons/help-about.png icons/internet-web-browser.png icons/retext.ico icons/retext.png icons/retext.svg icons/system-file-manager.png icons/text-html.png icons/view-fullscreen.png icons/x-office-document.png locale/retext_ar.qm locale/retext_ar.ts locale/retext_ca.qm locale/retext_ca.ts locale/retext_cs.qm locale/retext_cs.ts locale/retext_cy.qm locale/retext_cy.ts locale/retext_da.qm locale/retext_da.ts locale/retext_de.qm locale/retext_de.ts locale/retext_es.qm locale/retext_es.ts locale/retext_es_CO.qm locale/retext_es_CO.ts locale/retext_et.qm locale/retext_et.ts locale/retext_eu.qm locale/retext_eu.ts locale/retext_fa.qm locale/retext_fa.ts locale/retext_fi.qm locale/retext_fi.ts locale/retext_fr.qm locale/retext_fr.ts locale/retext_hr.qm locale/retext_hr.ts locale/retext_hu.qm locale/retext_hu.ts locale/retext_it.qm locale/retext_it.ts locale/retext_ja.qm locale/retext_ja.ts locale/retext_ko.qm locale/retext_ko.ts locale/retext_nl.qm locale/retext_nl.ts locale/retext_pl.qm locale/retext_pl.ts locale/retext_pt.qm locale/retext_pt.ts locale/retext_pt_BR.qm locale/retext_pt_BR.ts locale/retext_ru.qm locale/retext_ru.ts locale/retext_sk.qm locale/retext_sk.ts locale/retext_sr.qm locale/retext_sr.ts locale/retext_sr@latin.qm locale/retext_sr@latin.ts locale/retext_sv.qm locale/retext_sv.ts locale/retext_uk.qm locale/retext_uk.ts locale/retext_zh_CN.qm locale/retext_zh_CN.ts locale/retext_zh_TW.qm locale/retext_zh_TW.ts tests/__init__.py tests/test_editor.py tests/test_posmap.py tests/test_settings.py tests/test_tablemode.py tests/test_window.py tests/testdata/existing_file.md tests/testdata/existing_file.rst././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920524.0 ReText-7.2.3/ReText.egg-info/dependency_links.txt0000644000175000017500000000000100000000000021314 0ustar00dmitrydmitry ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920524.0 ReText-7.2.3/ReText.egg-info/entry_points.txt0000644000175000017500000000005500000000000020544 0ustar00dmitrydmitry[gui_scripts] retext = ReText.__main__:main ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920524.0 ReText-7.2.3/ReText.egg-info/requires.txt0000644000175000017500000000013600000000000017646 0ustar00dmitrydmitrydocutils Markdown>=3.0 Markups>=2.0 Pygments chardet>=2.3 PyQt5>=5.11 [spellcheck] pyenchant ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920524.0 ReText-7.2.3/ReText.egg-info/top_level.txt0000644000175000017500000000000700000000000017775 0ustar00dmitrydmitryReText ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920402.0 ReText-7.2.3/changelog.md0000644000175000017500000003467400000000000014630 0ustar00dmitrydmitry## ReText 7.2.3 (2022-02-03) * Issues #573, #574 — Fixed TypeError crash with Python 3.10 and Qt WebKit. * Translations updated: - Chinese (China) (contributed by liulitchi). - Portuguese (Brazil) (contributed by Igor Garcia and Christiano Morais). - Slovak (contributed by Jose Riha). ## ReText 7.2.2 (2021-10-11) * Issue #552 — Fixed bad Spanish translation causing a crash. * Fixed `TypeError: index 0 has type 'float' but 'int' is expected` with Python 3.10. * Fixed `RuntimeError: ffi_prep_cif_var failed` in XSettings code. ## ReText 7.2.1 (2021-03-06) * Issues #255, #492 — Improved support for dark Qt themes. * Fixed preview jumping to top during MathJax rendering. * Issue #544 — Fixed QTextBrowser-based preview jumping. * Issue #548 — Fixed opening files with spaces from QTextBrowser-based preview. * Issue #549 — Use `defaultCodec` setting by default when saving files; correctly detect encoding for UTF-8 files with BOM. ## ReText 7.2.0 (2021-02-08) * Dependency changes: - Python ≥ 3.6 is now required. - Qt and PyQt ≥ 5.11 are now required. * General improvements: - Added ability to show a side panel with directory tree (contributed by Xavier Gouchet in #531). - Added support for searching in the preview mode. - When some text is selected and a quote, bracket or emphasis key is pressed, the text is surrounded rather than replaced (contributed by Daniel Venturini in #520). - Added an option to fully highlight wrapped lines (contributed by nihillum in #523). - Improved current line highlighting for right-to-left text layout. - Ordered list behavior can now be configured to repeat or increment the list item number (contributed by Binokkio in #527). - Added mnemonics to open the menus from keyboard (contributed by David Hebbeker in #528). - Added Apply button to the Preferences dialog (contributed by Amos Kong in #543). - Removed use of deprecated Python, Python-Markdown, Qt and PyQt API. * Bugs fixed: - Issue #507 — Improved the error message when trying to build ReText as a wheel package. - Issue #529 — Markup that intersects with code blocks is no longer highlighted. - PR #530 — Preview is no longer updated when it is not shown (contributed by rhn in #530). - Issue #533 — Fixed showing local images with Qt WebEngine 5.15. * Translations updated: - Arabic (contributed by ZamanOof). - Chinese (China) (contributed by liulitchi). - Dutch (contributed by Heimen Stoffels). - Japanese (contributed by YAMADA Shinichirou). - Persian (contributed by Hadi F). - Polish (contributed by Maciej Haudek). - Russian. - Spanish (contributed by Félix Fischer). - Swedish (contributed by Philip Andersen). ## ReText 7.1.0 (2020-04-04) * General improvements: - New files are now opened in new tabs by default, not new windows (contributed by Daniele Scasciafratte in #476). This can be disabled using `openFilesInExistingWindow` configuration option. - Preferences dialog improvements: it now uses tabs; added a link to configuration file (contributed by Xavier Gouchet in #327); clicking on checkbox label now changes checkbox state. - Return key now automatically continues quote blocks and ordered lists (contributed by Xavier Gouchet in #298 and #326). - It is now possible to close the current tab with Ctrl+W (contributed by Xavier Gouchet in #283). - Ctrl+wheel on editor now increases/decreases font size (contributed by Xavier Gouchet in #328). Ctrl+wheel in preview zooms in/out (#400). - Alt+Up/Down arrow now moves the current line up/down (contributed by Xavier Gouchet in #337). - Added “Jump to Line” feature, with Ctrl+G shortcut (contributed by Xavier Gouchet in #382). - Table mode improvements (contributed by Maurice van der Pot). - “Paste Image” moved to a separate action, with Ctrl+Shift+V shortcut. - Added “Insert table” dialog (contributed by Changhee Kim in #431). - Clicking a link to nonexistent file now prompts the user to create it (contributed by red-kite in #436 and Xavier Gouchet in #459). - Added a menu action to insert images from filesystem (contributed by Daniel Venturini in #500). * New options added: - `relativeLineNumbers` — count line numbers as relative to the current line (contributed by Xavier Gouchet in #270). - `documentStatsEnabled` — show text statistics in the lower left corner of the editor (contributed by Xavier Gouchet in #268 and #338). - `rightMarginWrap` — soft-wrap text at user specified margin line (contributed by Oğuzhan Öğreden in #313). - `paperSize` — set the default paper size for print or PDF export (contributed by mray271 in #335). - `recentDocumentsCount` — number of recent files to show in the menu (contributed by red-kite in #407). - `windowTitleFullPath` — show full path in window title (contributed by red-kite in #429). - `defaultPreviewState` — mode for new tabs: `editor`, `normal-preview` or `live-preview` (contributed by red-kite in #435). It replaces the old `livePreviewByDefault` option. - `wideCursor` — make cursor as wide as characters. * Bugs fixed: - Issue #252 — Limit max-width of images to 100%. - Issue #267 — setup.py now installs retext.svg icon. - Issues #281, #469 — Autofill current filename for PDF export and Save As dialogs (the Save As part contributed by Xavier Gouchet in #474). - Issue #291 — Make sure search result does not overlap with stats/info areas. - Issue #301 — Made the Markdown include extension working. - PR #315 — Fixed handling multi-line rows in reStructuredText tables in table mode (contributed by R1dO). - Issue #346 — Ctrl+F now focuses the search field, not closes the search bar. To close the search bar, now the Escape key can be used. - Issue #378 — Ensure that cursor is visible after resizes. - Issue #397 — Only check whether .css file exists on initial page load. - Issue #399 — Try to load libGL.so.1 before creating QApplication. - Issue #408 — Fix printing with dark themes. - Issue #409 — Make the WebKit renderer use disk cache. - PRs #411, #417, #426, #494 — AppData file improvements (contributed by scx). - Issue #441 — Files reloading no longer triggers tab change. - Issue #445 — Implemented PDF export for the WebEngine renderer. - Issue #451 — Make the synchronized scroll implementation not break the pymdownx.highlight extension. - Issues #452, #497, #499 — Prevent pip from building wheels, as that results in broken desktop files. - Issues #467, #488 — WebEngine renderer broken with new Qt versions. - Issue #468 — Include the stylesheet in exported HTML. - Issue #479 — Display `*` in tab title when document is modified and unsaved (contributed by Xavier Gouchet in #480). - Issue #487 — Added a workaround for missing icons in Ubuntu 19.10 Yaru theme. - PR #496 — Enable HiDPI icons (contributed by Guo Yunhe). * Translations updated: - Chinese (China) (contributed by liulitchi and the Chinese team). - Czech (contributed by David Kolibáč). - Danish (contributed by scootergrisen). - Dutch (contributed by Heimen Stoffels). - Finnish (contributed by elguitar). - German (contributed by Oliver A. Gubler in #370, Carsten Beck). - Italian (contributed by Alessandro Menti). - Korean (contributed by MukKim in #415). - Portuguese (Brazil) (contributed by EdemarSantos). - Portuguese (European) (contributed by Ricardo Simões in #278). - Russian (contributed by Vladislav Glinsky, Виктор Ерухин). - Serbian (contributed by Slobodan Simić). - Spanish (contributed by Félix Fischer, Fito JB). - Swedish (contributed by Philip Andersen). - Ukrainian (contributed by Vladislav Glinsky). ## ReText 7.0 (2017-02-11) * It is now possible to install ReText on Windows and macOS using a simple `pip install ReText` command. This will pull PyQt5 wheels from PyPI, and also download and extract the icons pack needed on this platforms. Setup now also generates a wrapper batch script (this was contributed by Hong-She Liang). * Added experimental Qt WebEngine renderer, in addition to the existing Qt WebKit one. * The highlighter got support for reStructuredText links, field lists and for Markdown and reStructuredText code spans. * The replace option was added to the search toolbar. * The WebKit and WebEngine previewers can now detect links to local HTML files and open the corresponding source files in new tab if those are found. * The table mode is now able to insert inter-cell line breaks and new rows, when Return and Shift-Return are pressed (respectively). * ReText can now automatically detect files encoding when `chardet` module is present (contributed by Hong-She Liang). * A configuration option for automatically opening last files was added (contributed by Hong-She Liang). * A configuration option for hiding the tabs bar when there is only one tab was added. *Bugfix update 7.0.1 was released on 2017-06-25 with improved installation procedure in setup.py, some crash fixes, and updated translations.* *Bugfix update 7.0.2 was released on 2018-06-05, fixing many bugs. Most importantly, issues with installation (#324, #363, #365), with synchronized scrolling breaking code blocks highlighting (#299), with emoji support (#357, #368), and with some lines disappearing after opening files (#345).* *Bugfix update 7.0.3 was released on 2018-06-06 with minor changes and fixed tarball contents.* *Bugfix update 7.0.4 was released on 2018-09-23 with improved editor performance (#360), fixed crash on Windows when pasting images (#385), support for Python-Markdown 3.0, and updated translations.* ## ReText 6.0 (2016-05-10) * The live preview now automatically scrolls to match its position with the editor (only for Markdown). * Markup conversion is now performed in a background process, improving responsiveness of the editor. * Images can now be copied and pasted into ReText (contributed by Bart Clephas). * Added a button to quickly close the search bar. * Added basic CSS styling for tables. * Replaced the tags box with the new “Formatting” box for Markdown (contributed by Donato Marrazzo). * Hitting return twice now ends the Markdown list. * ReText now depends on version 2.0 or higher of pymarkups. * The QtWebKit dependency is now optional (though still recommended). *Bugfix update 6.0.1 was released on 2016-06-25, fixing some crashes and making auto-save work again.* *Bugfix update 6.0.2 was released on 2016-10-03, fixing an issue with startup on Plasma and adding some new translations.* ## ReText 5.3 (2015-12-20) * Tabs are now reorderable. * All colors used in editor and highlighter are now configurable via the configuration file. * Links referencing other source files are now opened in ReText as new tabs (feature contributed by Jan Korte). * Code refactoring: some code moved to the new tab.py module, and some old hacks dropped. * The ReText logo is now installed to the data directory. * Appstream metadata updated to a newer format. * The desktop file no longer hardcodes the executable path (fix contributed by Buo-Ren Lin). ## ReText 5.2 (2015-09-23) * ReText now tries to load the icon theme from system settings if Qt cannot auto-detect it. * Added a GUI option to change the editor font. * Added appdata file for appstream. ## ReText 5.1 (2015-06-30) * Editor now displays cursor position in bottom-right corner. * Added FakeVim mode (contributed by Lukas Holecek). * ReText now shows a notification when the file was modified by another application, to prevent data loss. * WebPages generator removed (as better alternatives exist). * Plain text mode removed. * Added ability to configure file extensions for Markdown and reStructuredText. ## ReText 5.0 (2014-07-26) * Table editing mode. * New settings: `colorSchemeFile` and `uiLanguage`. * More settings are now configurable from GUI. * Code base simplification and modernization. * Dropped support for Qt 4. * Added testsuite. ## ReText 4.1 (2013-08-18) * Added configuration dialog. * Added current line highlighting and line numbers support. * Added support for PyQt5 and PySide libraries. * Use new signals/slots syntax. * Added option to select file encoding. * Dropped support for Python 2 and support for running without WebKit installed. ## ReText 4.0 (2012-12-06) * Switch to pymarkups backend. * Switch to Python 3 by default. * Split `retext.py` to smaller files. * MathJax support. * Tab now inserts 4 spaces by default. * Automatic indentation of new lines. * External links are now opened in a web browser by default. * Support for per-document CSS stylesheets. ## ReText 3.1 (2012-06-07) * Spell checker suggestions. * Markup-specific highlighting. * Re-written parser and document-type logic. * Lots of code clean-up. ## ReText 3.0 (2012-03-08) * Python 3 support. * Improved highlighter. * Export extensions. * Recent files menu. * Spell checking improvements. * Shortcuts for formatting. * WebKit engine improvements. ## ReText 2.1 (2011-10-02) * Ability to use QtWebKit. * Splitter between edit and preview boxes. * Support for opening several files via command-line. * Support for GData 3 API and replacing existing document in Google Docs. * Help page. ## ReText 2.0 (2011-08-04) * Support for reStructuredText, with a GUI option to switch between Markdown and reStructuredText. * Text search. * Global CSS file support. * File auto-save support. * WpGen 0.4, also with reST support. * Getting title from ReST title or Markdown metadata. * Changed the default extension for Markdown to `.mkd`. * New “About” dialog. ## ReText 1.1 (2011-05-28) * Added spell checker based on enchant. * Added fullscreen mode. ## ReText 1.0 (2011-04-24) * First stable release. * Add “Select default font” option. * Use HTML input when Markdown is not loaded. * Add Ctrl+Shift+E sequence for Live preview. ## ReText 0.8 (2011-04-09) * Add “Show folder”, “Markdown syntax examples” actions. * Start even if Python-Markdown is not installed. * Do not highlight quotes outside the tags. * Save plain text documents with `*.txt` format. ## ReText 0.7 (2011-04-05) * Tabs support. * GUI for WpGen. * Launching preview on Ctrl+E shortcut. ## ReText 0.4 (2011-03-13) * First public beta release. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642950205.0 ReText-7.2.3/configuration.md0000644000175000017500000001661100000000000015537 0ustar00dmitrydmitryReText stores all of its configuration in a text file. A path to that file is printed to stdout during ReText startup. Possible configuration options ============================== Configuration options that you can set to improve your experience: option name | type | description ----------- | ---- | ----------- `appStyleSheet` | file path | file containing a [Qt stylesheet file] `autoSave` | boolean | whether to automatically save documents (default: false) `defaultCodec` | string | name of encoding to use by default (default: use system encoding) `defaultMarkup` | string | name of markup to use for unknown files `defaultPreviewState` | string | mode for new tabs: `editor`, `normal-preview` or `live-preview` (default: `editor`) `detectEncoding` | boolean | whether to automatically detect files encoding; needs chardet package (default: true) `directoryPath` | string | the path to the root directory to display in the side panel if `showDirectoryTree` is true (default: `~`) `documentStatsEnabled` | boolean | whether to show document stats (word count, character count) (default: false) `editorFont` | string | font to use for editor: name (default: `monospace`) `editorFontSize` | integer | font to use for editor: font size `font` | string | font to use for previews: name `fontSize` | integer | font to use for previews: font size `handleWebLinks` | boolean | whether to use ReText preview area to open external links (default: false) `hideToolBar` | boolean | whether to hide the toolbars from the UI (default: false) `highlightCurrentLine` | string | current line highlight mode: `disabled`, `cursor-line` or `wrapped-line` (default: `disabled`) `iconTheme` | string | name of the system icon theme to use (see below) `lineNumbersEnabled` | boolean | whether to show column with line numbers in editor (default: false) `markdownDefaultFileExtension` | string | default file extension for Markdown files (default: `.mkd`) `openFilesInExistingWindow` | boolean | whether to open new files in the existing window (default: true) `openLastFilesOnStartup` | boolean | whether to automatically open last documents on startup (default: false) `orderedListMode` | string | editor behavior for lists continuation: `increment` or `repeat` (default: `increment`) `paperSize` | string | name of default page size to use for print and export (e.g. A4, Letter) `pygmentsStyle` | string | name of Pygments syntax highlighting style to use (default: `default`) `recentDocumentsCount` | integer | number of recent files to show in the menu (default: 10) `relativeLineNumbers` | boolean | whether to show line numbers as relative from the current line (default: false) `restDefaultFileExtension` | string | default file extension for reStructuredText files (default: `.rst`) `rightMargin` | integer | enable drawing of vertical line on defined position (or 0 to disable) `rightMarginWrap` | boolean | enable soft wrap at specified margin line (default: false) `saveWindowGeometry` | boolean | whether to restore window geometry from previous session (default: false) `showDirectoryTree` | boolean | whether to show a directory tree on the left side of the window (default: false) `spellCheck` | boolean | whether to enable spell checking `spellCheckLocale` | string | short name of spell check locale to use (examples: `en_US`, `ru`, `pt_BR`) `styleSheet` | file path | CSS file to use in preview area `syncScroll` | boolean | whether to enable synchronized scrolling for Markdown (default: true) `tabBarAutoHide` | boolean | whether to hide the tabs bar when only one tab is open (default: false) `tabInsertsSpaces` | boolean | whether Tab key should insert spaces instead of tabs (default: true) `tabWidth` | integer | the width of tab character (default: 4) `uiLanguage` | string | short name of locale to use for interface (examples: `en_US`, `ru`, `pt_BR`) `useFakeVim` | boolean | whether to use the FakeVim editor, if available (default: false) `useWebEngine` | boolean | whether to use the WebEngine (Chromium) as HTML previewer (default: false) `useWebKit` | boolean | whether to use the WebKit instead of QTextEdit as HTML previewer (default: false) `wideCursor` | boolean | make cursor as wide as characters (default: false) `windowTitleFullPath` | boolean | whether the window title should show the full path of file (default: false) [Qt stylesheet file]: https://doc.qt.io/qt-5/stylesheet-reference.html If the type is 'file path', then the value should be an absolute path to a file. These options can be set internally by ReText and should never be set manually: `recentFileList`, `lastFileList`, `lastTabIndex` and `windowGeometry`. Icon themes =========== If ReText starts and does not show icons, go to Preferences dialog and fill the "icon theme" field with the icon theme being used. By default Qt (the toolkit used by ReText) can correctly detect icon theme only on KDE and on a fixed list of Gtk+-based environments (when the gtk platformtheme is used). If you don't know name of your icon theme, look at the names of subdirectories in `/usr/share/icons/` directory. Color scheme setting ==================== It is possible to configure ReText highlighter to use custom colors set, by providing these colors in a separate section in the configuration file. The example of such section is: [ColorScheme] htmlTags=green htmlSymbols=#ff8800 htmlComments=#abc Color names for the text editor: color name | main setting | description ---------- | ------------ | ----------- `marginLine` | `rightMargin` | the vertical right margin line `currentLineHighlight` | `highlightCurrentLine` | highlighting of the text line being edited `infoArea` | | the info box in the bottom-right corner `statsArea` | `documentStatsEnabled` | the stats box in the bottom-right corner `lineNumberArea` | `lineNumbersEnabled` | the line numbers area background `lineNumberAreaText` | `lineNumbersEnabled` | the line numbers area foreground Color names for the highlighter: color name | description ---------- | ----------- `htmlTags` | HTML tags, e.g. `` `htmlStrings` | string properties inside HTML tags, e.g. `"baz"` inside `` `htmlSymbols` | HTML symbols, e.g. `&bar;` `htmlComments` | HTML comments, e.g. `` `markdownLinks` | Markdown links and images text, e.g. `foo` inside `[foo](http://example.com)` `blockquotes` | blockquotes, e.g. `> quote` in Markdown `codeSpans` | code spans, e.g. `` `code` `` in Markdown `restDirectives` | reStructuredText directives, e.g. `.. math::` `restRoles` | reStructuredText roles, e.g. `:math:` `whitespaceOnEnd` | whitespace at line endings ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1643920524.1765156 ReText-7.2.3/data/0000755000175000017500000000000000000000000013252 5ustar00dmitrydmitry././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643919590.0 ReText-7.2.3/data/me.mitya57.ReText.appdata.xml0000644000175000017500000001712600000000000020525 0ustar00dmitrydmitry me.mitya57.ReText ReText Simple text editor for Markdown and reStructuredText محرر نصوص بسيط لمارك داون Markdown  و ريستكرجر تيكست reStructuredText Editor de Markdown i reStructuredText senzill alhora que potent Jednoduchý editor pro Markdown a reStructuredText Golygydd testun syml ar gyfer Markdown a reStructuredText Enkel editor til Markdown og reStructuredText Einfacher Texteditor für Markdown und reStructuredText Απλός επεξεργαστής κειμένου για Markdown και ReStructuredText Editor básico de texto para Markdown y reStructuredText Lihtne tekstiredaktor Markdown ning reStructuredText süntaksitele Markdown et reStructuredText-erako editore sinple یک ویرایشگر متن ساده برای متن های قالب Markdown و reStructuredText Yksinkertainen tekstieditori Markdownille ja reStructuredTextille Éditeur de texte simple pour Markdown et reStructuredText Egyszerű Markdown és reStructuredText szövegszerkesztő Semplice editor di testo per Markdown e reStructuredText MarkdownとreStructuredTextのためのシンプルで強力なエディタ Eenvoudige teksteditor voor Markdown en reStructuredText Prosty edytor Markdown i reStructuredText Editor simples para Markdown e reStructuredText Простой редактор для Markdown и reStructuredText Jednoduchý textový editor pre Markdown a reStructuredText Једноставан уређивач за Markdown и reStructuredText Jednostavan uređivač za Markdown i reStructuredText Enkel textredigerare för Markdown och reStructuredText Простий текстовий редактор для Markdown та reStructuredText 支持 Markdown 和 reStructuredText 语法的简易文本编辑器 簡單高效的 Markdown 與 reStructuredText 編輯器

ReText is a text editor for plain text markup languages, such as Markdown and reStructuredText.

It supports tabs, live text preview, synchronized scrolling (for Markdown) and syntax highlighting.

ReText can export to HTML, ODT and PDF formats. It is also possible to write custom export extensions.

ReText ist ein Texteditor für vereinfachten Auszeichnungssprachen wie Markdown und reStructuredText.

Er unterstützt Reiter, Live-Vorschau, synchrones Scrollen (für Markdown) und Syntaxhervorhebung.

ReText kann Dokumente in HTML, ODT und PDF exportieren. Es ist auch möglich, benutzerdefinierte Export-Erweiterungen zu schreiben.

ReText — это текстовый редактор для языков разметки, таких как Markdown и reStructuredText.

Он поддерживает вкладки, живой просмотр, синхронную прокрутку (для Markdown) и подсветку синтаксиса.

ReText может экспортировать в форматы HTML, ODT и PDF. Также возможно написание собственных расширений экспорта.

https://github.com/retext-project/retext CC0 GPL-2.0+ retext me.mitya57.ReText.desktop https://raw.githubusercontent.com/retext-project/retext/master/data/retext-kde5.png retext Dmitry Shachnev mitya57_AT_gmail.com
././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642949280.0 ReText-7.2.3/data/me.mitya57.ReText.desktop0000644000175000017500000000446600000000000017770 0ustar00dmitrydmitry[Desktop Entry] Version=1.0 Name=ReText Comment=Simple text editor for Markdown and reStructuredText Comment[ar]=محرر نصوص بسيط لمارك داون Markdown  و ريستكرجر تيكست reStructuredText Comment[ca]=Editor de Markdown i reStructuredText senzill alhora que potent Comment[cs]=Jednoduchý editor pro Markdown a reStructuredText Comment[cy]=Golygydd testun syml ar gyfer Markdown a reStructuredText Comment[da]=Enkel editor til Markdown og reStructuredText Comment[de]=Einfacher Texteditor für Markdown und reStructuredText Comment[el]=Απλός επεξεργαστής κειμένου για Markdown και ReStructuredText Comment[es]=Editor básico de texto para Markdown y reStructuredText Comment[et]=Lihtne tekstiredaktor Markdown ning reStructuredText süntaksitele Comment[eu]=Markdown et reStructuredText-erako editore sinple Comment[fa]=یک ویرایشگر متن ساده برای متن های قالب Markdown و reStructuredText Comment[fi]=Yksinkertainen tekstieditori Markdownille ja reStructuredTextille Comment[fr]=Éditeur de texte simple pour Markdown et reStructuredText Comment[hu]=Egyszerű Markdown és reStructuredText szövegszerkesztő Comment[it]=Semplice editor di testo per Markdown e reStructuredText Comment[ja]=MarkdownとreStructuredTextのためのシンプルで強力なエディタ Comment[nl]=Eenvoudige teksteditor voor Markdown en reStructuredText Comment[pl]=Prosty edytor Markdown i reStructuredText Comment[pt_BR]=Editor simples para Markdown e reStructuredText Comment[ru]=Простой редактор для Markdown и reStructuredText Comment[sk]=Jednoduchý textový editor pre Markdown a reStructuredText Comment[sr]=Једноставан уређивач за Markdown и reStructuredText Comment[sr@latin]=Jednostavan uređivač za Markdown i reStructuredText Comment[sv]=Enkel textredigerare för Markdown och reStructuredText Comment[uk]=Простий текстовий редактор для Markdown та reStructuredText Comment[zh_CN]=支持 Markdown 和 reStructuredText 语法的简易文本编辑器 Comment[zh_TW]=簡單高效的 Markdown 與 reStructuredText 編輯器 Categories=Office;WordProcessor; Exec=retext %F Type=Application Icon=retext StartupWMClass=ReText MimeType=text/markdown;text/x-rst; Keywords=Text;Editor;Markdown;reStructuredText; ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1630777591.0 ReText-7.2.3/data/retext-kde5.png0000644000175000017500000037400400000000000016131 0ustar00dmitrydmitryPNG  IHDRBpzTXtRaw profile type exifxU 0D#f*JnTNp skҠ=D ^uqwkt 3v<45V=oB,&7 iTXtXML:com.adobe.xmp :AsBIT|d IDATxwtUwҀ$R=4" MPTP(V*v,(`Q@DAB RIv# 96;3wf̖y;ooШF-io2*!"""""""b6ӳ2җm]bejԔ>U"""""""_Ψ0"""""""bL&J噱NDmT̆M[hXdeeۨdb=4kҐpvvJ@6mFzuHKK'&6ժAH DvN[lumXfǎг[Wl^T$.ٳ]paک=[&UT&sպ`A(ZE7'*"_,ii'rZb B\]pw'6>̣$&'g~RRص{G df$&yĤd38p0Bqsu3Z2LTDxiAUT ;#6>3frHyovmgOWݍ4|#=5g,||+I~~ddfa<cE4W7mɑpv`^Nrs!VR0sZVT*UTO>k׎^{+VбcATt& nRAȍ7\lL&y祏7^g@n>Qg|?l)scϼ@zuz3u/""y͛4`톍|Q%)8V{NaăCmevF>zS>siP7۶s]B!ޖ4|||hҤ ;w}%>-VL&q TN Yj-͚0888^-`›2/4?pyhX> \]]2jXa!Ya`0nk StHIMcgIع Oz?¼ӏ_ JݨH  __/\̊UkJl>x?>/.Y?71a4R1y&&GzuprrjOT݆/ ֘XLJ?@`OHb!$*OZeiczt̫o_ǘG aDم-X1L-f>2c ZWJl"-=*2*x'Z ︍ZaX,~V^(wϼ4|}y'Ϲout?zqؑp 4_c5ƙB \P*ymP>aȉdăCKiݼ\A<dXJ+,,ĐAJ吐>̊+SN5+ۢ?.tlDz/(P"d{]|~4/ynwZH-zƽTbw7}%1Gy⹗4jP6ӤQCF^f<# 6o^HD5&T fD7kc䩼Gw@L_v]yz+Gܟ%5-2c [m''7$Tcy..nά?aZcԉYs#Æʺ "6m9k`pjP ATo)`ʴ}2J};et­} `b"_=7f:u BDDb3B+d?+ҩ)% =#l B| aZY"hVk֨NDx-~exa4:j/5-Ϸɩ%IIMϗS-$։?R-8f֘_l6'C NNN%[2x|,lNVQbhѬ G:z#I'9YbrO6m u عgCBXbɵ=>VXH~~~&9TJt&uܵ֍T[mΰ{>G<ߌ&\]\H?z|+aX~m] cҿ^""bsj(q"(+T!ȹ[3Xwm9UH^NNԩ{#Fلr=SV,kTp&ǃK2vԳaꌙ3s֮M{g-;#3&Lbϲw~m#;'ՊUmt|9t9??SS1-ܵZIcݰAcXwʟ/ϿQ;LJc$Kػ` g/ս+cƿMNN.a5xdF ErJ*];wSz3uϥfмI#֬HZz$).#-4Ol.5Ǜn]:_˸[pfRr Vҩcp=^rn''GZhFNn.;w`nߗoza bx)i%~ZG7c*/''O^^gZtŃ{@&M>}zQr B=Plz[zek %*9go/X"~s!쟘1k*c!#dž_V xóvFޝ8c*[Ojs,9cqʗ!kNptth4r3w\7nc_HDDD l9^5?rHLJ1qZǾyGxi|o:}rV^;EKŅW_z"t`su{@6nb+ϷV_~]s|_>֘j ?[@6xaC﹓_,un ^^~-zЅ,ڟ땲fڟuw?;o[obs7Y˘6c&w[FSd6G~N៕2t\^| ~wlQe%e0x'PpDq۶`{\EDDr9|$'L!呓Lr/cUfpsq&YS\]]myyyE`` ԨQOOrZsttEDD1"DDDJIMcͺ Ԭ^ ?L j_^#Xzu#2<6Z`(_Nsnf+F'Y9#@QnNp۸iilO`l֪ B"rqvrnXYNJB\l𕑞?ϻf_c:EDDDDDDbo.88,wcggL+/KX<=lVw,5oRr2sb붘ŗNT-]mm֤ 7]'F>ˍ=ѵK.xɟPZ5"""""""epƿ6ڵJ<ϓ?ZavAK e1 ǵk؇}Sk(C$1?p2icP+ʇ L8xz}2᫯eӖ-ylpݯZ|l.-x`%Bn4G㷅1͸3_DDDDDD,gE=1#|loV?ۋ33Yv]9vj֨o瞾j!LNBbR"/yXYf-}7ܙɧ:EDDDDDn]tgg&Mx]OO:PHKK_ܟ~}-G7,Ӌ|vUbK˶f~w?̶N2IcOa4qqqaC>T-^6F%C{ D*<}U݊@LLժ`u̞ iǧԡQ"ènEX^~v '~ T'EDDC5GPDDB)1""":!"""""""b7XwyA+*6ߟ~_;gDZi8vWձc.hQΝc;yqX;#}Bի l󑘘bjժeN?rUT_smӕ0Wk^]hxr9^0/s)w~~> ~w6mXz-/ESy]E9fj\hxbo7<1^^nqq|8q"~uXXVeVW= fT\dCB–͛ bPDDDD.9s9?-/{r/BB+ש!Hݺu+l}Ӳe TVؑ@DDdi;w1רn2ZwtDVXE"EDD0!'K>Kxb䳸ar0ahs%[]1*Ծhωs!ǘ4iYYY1u/ooDEѳWojԨqE+3#xRSS(/(ի֭;&ԛu%f6W Qn]*L akw~;9y/ָ .!CSre&#ΛvG>a899R'2!MHH%)?Q B$xɟ BDDDņ!EEE|)6 *+!55ƌQxyzZ *?$$;ݮ2pttG)";MN{M\jVXvMDxxyy֛ªU+nyBBCCٽk[nylٲ-L!ń%ײzYf37؇ EVDm}Zzy,N֭ؼe+nnnNNs1[ M7qͷ\tHpƗSM0Ko@=ӫUC! AKiKIS0L  ~󣨨п__6i|旼3 = IDATj5lAH[\ۺ>3駞 00-g^BCٲu5d-T^}P-$䲆 :7*9p" Y fÏ0jԋ4iu`e v0! TZM6w\]~>\Kwqpp`wZɌyٸi33gLɉg~Evv6Pܵ?`0vɷ7)uϊiݝv׵ѯ04jT vZrwm\_uɱ>0 71;7f4;wf+lۜxDx~wzOߏ?jֻ3OyJmɐ{cZȼu("" Nh sE{dk4jccqswiHfVM7g;k֮UwJZ&00mZDE@Xh(cx`}L){Ȏ; ׉y0$22iՋy~tgx"# A+d5hؐŋAٺRUBkڞ_-\je% XV˗Պa 4i_JGV-y٧/֟}}+yͷkղ\<<=oy)ލ~7h4,X;ڶ!9%$7jȡGpvvKXVBk 7/n7tjT I{-7cZ1Lэ ~S,_~m{ヒ{{GV[K] 9R֡0gP>Hgg6Ylt;u&:l oo7jȺh2cl/-=ĤeB"yi 'GG|}+NJj* ;wҫGw.Bxxͻl姦qUNNNj1đEs_a.2b Z<=4ܜ\6_:Q"W= x)-s I }AK\B^P90_-yQ˲ ooV獥C5s6nLz;5jƍ9|ժ_ rw󚫗Xv;baÆvy~}J"d{lϞo ֻXV|||HMMosss[:P| h԰i1]ʨc.DE2lNu''PkZadfdhG_n[dhٲ~~X,222`0Z3~_ĈÝF ;Qz5R;tϕىTf$;;];wS+W&!>-ŵ4`jFF[٦u؞si8880{O2Ze3y_iӪչ$eÜޭ+~VXmݻ1≧Zgggw7EEE2ڷ͍6[e}wcZ; uH"nxzzu}9PDDDAHTN4m,NNx!59?h$fMc0hٲ.$8 `'a61oזڶnHGP1K||$2"B"%$u'5%B!yyy_n__3^t6lXh$#=J*ѴY3\|%eܙhތK2fkҰA-oۛԴ4{?t///ǘ0q.&:v\K/#=#JV-g+T*7tr]+ࠪ >"3Z7#2u:<4 g}wZ&5jTcO0x{{1b01^""" BkENU0AF'z w:/Tc#q^7iAn Р~}ԯ_kKw<8gGVsZɼy9˶Ȉ]/!ժUر6֯[7͚7'!! k6QF_y$$$azڴm{շiw˕:[w_.1db%mӇ{7C6Y?ꊫ+o>뾚.]w ,ǎq:\ժU3m8ןm;::800н[Rpuu-s^x>xo!1OAtz7wyƮ/gVQtԙ.ic6C||{F:;`y_[7jEDDH B`2r}ݻ?|ͷ PR }mΝ;s*vRTTľ}HHg޼yt܅>}^߾7%K "<??mJ*@xx8 %BJ{C"W"/ZL5U#7/.⑇լI؝+)A*JsS+?Z1gv5j[vj!q^5z"u'FO//9T:TR)/jVM5c,^___4mzA\DRK]bШAWFS-$qZשT|s~oڼF z\]+)>n ;T1QDxk[zV\MfMn֮@ըZԡ1 DDDDDDD^8 DDDơ:!"""""""b7P =_ƺk36׊4\\\l_C{ D*ƈP""""""""v1B 58(**dr _!%8;;^FR(3ILJJDZZW!%sU"""""QOyyy;aŪDGAZ KAÈ:P""""""""vAUpm#)%,;^Js'$p!rzFpPTJ aXطɥ哗ϑ#IT@juS;d6Yf-qeffEX"#nɤJsM_-g=ҿb!.>tcX*~M>Ck?Ů]=̢.6.El6DDDDD\p0jNqE6>==?>/`[γo>bZVQɶ!Ï9mkoЧ *w:.f /d5krH"gĴGYfEDDDD\TTm5$&RXXxyy FS>|hڸ- ILJ"/7lRMrJ 7n[- n};VxILOϰqpp[o&ZHBp7ظ83.("""""vۻ'?ϛO:uZJlϿ̧c0j4o:F]w;³OSz5f3Ͻ87^|v{ё-[Xזeޯ^6II|;{RSpvvOx{{>n 'ѱC{_Q+,Ĥ$32clٺIh԰oEff.16BY prr"//4tDfMYBv x\]Kvd{l1ٱkkbΝdc{rJwdj֨~'IQsWEsL=WĘk乧"$$`y6juع^|7_G0wg|NQa!QQ 'do^ۛxoY<{L&[0| |'k׭󸻹خ ~Yc4qcXrKZW_7fk4o 6Bvv6IIztԁ_}M[HKKgc#Xa#}%E`ҽ 9v32rC9Ukl6O0!4iܨ6'$r Yl9۷c8-9\QQ)etsݸ!~>28|_Q/DpP{5d- j!!sG3Okvaw/z;δ3HOOмYS۲Ϲv&(*|[Ąas9`)-G=ϝo狙_Z=lظn7\CeCvX,ztUܩ#3TŃ\*#=;wRV-|*A2Nu?++$Eoז[?ۻEǏ}b_̘NmnR?2|۞?Ȩѯ0x | n ׬رc|yԇMg/Y26O\|EEE\yi5m|2gKZbf3?Ǔ'ŧҋxyzҩC{bbn ֭HN{? x+iMfܟؽ{||xчyuҠ~R!CJ}`R-Dr"9A ***AzԨQy.(5+i2ڶiqԉ".qzl; /Qjevݡu'׵r%[+$8 jZbpssMV;m4tsrretq hӦRҰX,lݍM/ppt$38Ĩ]> F22REnYaHxڄ!9Ӳv8::ҧwO[m 5 ~, 6`cT M%^hؠ>KEv@t֬u庶mdm]ظxͦ{ll޲Mݽ 'vX1HF#NNN,s)yyy΋.;,_[4&iPAh$%5̺ 77Wj Yv^^C+-+ ԡ=iYKr[7ަa%nۚNbbMn{xỌMV89:[ wwwRRSIع^=XGnn.VOOOs*gQb_Jb H·mUp;jh0`Z1ͤUb?-f na49Vx B a.*={p;='Ə{j< ~[%?fyO I*1䏦R_PCjjZ#'(TJӪTLbRq͚~Fnќ&M3iXVvCdɀsd4__\ ?ŗUh}!ݫ'/xɟҿrI v ]mofόѱž#""""""v8;;3;˯~_} Z7v/L9|7o~4jԀ7s6أܼ<[sr]>>X&--|||H-y''G,]z{}||C/5-aγ.k8Ej"%DwekS9ZGaQ& ڶnWLHHpq`2Qd6 Al\<5.^={Z^b{i&*ؾώ|g_x6b2qnf~5;+[.T'w51QDDDDDD댗Za4i܈_\-g [BZZ0f(! ǟK Z`0Ьiw5kiݒVZ\~bb1ci݂H32XvV|})**"#JbR u"IIM-qWr-V"9W!ȉ1CN}Im jZnpmd\TDFFxzz8_J6f||8#E%;;}cGqѼ))<~ <}{,jﰵj׶5g|F&{OtrttOOtc9[]xzxy[TzFaadddw>۴իЪe4?Zf'>N3zp) ul;>1L3f3Fw['TjE7^DFDYmnog1i F7k®{lw ibǧ8 x|7_Sx /^f qp0QATOĈYOFjdsNwߕ?* ?#G[@M&jja CXq1,SBX䠢& nE1ѸQCFSSOcO/ۻÇ= /??_nV5 '1mL&i; Zjkom|l#իWOyqX#rsxwD/WFCeGS  ёsMرE`+WUtɻ%E=pcJ!YmwwA+LO'PT {!11XʸC*RgLT`m|4u:S>pշeUaȩ=թӢ"#i*߰6QUPUV6BSyyyQz5Ue --S g ANVJ[4A Z8HF#T <缕8AAuОΝ:Vm1Lt Q7*2]غ;Uh4Rf *LVV&ǎ߂ //o*ʺBNj3LnMTd ;8x 9@a]mEDDDDD셂k+5kTWEUC@sUiBDDDDDDD솂 BDDDDDDDn(Q`dvbV%gdu6U\S\]] X!=#z[nqF9h IDATLڵJMSOK^~~p(LiE '| '!"""d`f;wN>WTTDLv,*HDDD.hn:88;(W2|65&%"{|YÜ.bbS+&  ))lNF 9o䛹!؟n\7b(Z֥#DDDDDDDD솂 BDDDDDDDn( DDDDDDDD솂;pZG,[ТM^zUU&Z@6{T!"""""q{/`xxZ4QZ^׉.fiծ3YGڦZ@rr c_{\fff1ftygvaiEP@PykwwwwAݤ bбXً~|sٙa|O5zt܃=#uRRuv ([:{o&?ٍ2cFAA hj+ԭݫ^@ť3rI˽||qrt _>c|\Z9*w΂E8MEiټyq̗!ɸr2L:kѰ~]   m%[XxЫ[=wq=pUk7H\6G9~ff=}2669j /fFBBBΖP(hԬqq9y=]]^ѬU{vbƵL2SҪE3y^@.3r`j$%%5H9u,Nɣf߁C;pH ;90jxًc&\׮dϾ_Z53g}'<ضsaᘛѵsԫKZZ=,]4Wl׉7obٸv%ZACGHLL rȱ4oru IyCPp0..L8#߬wJJ koyO޽{=Ch3ob!ʖq{Cvٶcg{R^{^DSSzuGGʖve<}Gbb:4Wv&hPO}8Ȅ1#'==N=J\ΐ}>-D&1w4a\_aƌYJ:s9v Rœ#2i Sli:oXѾM+oB jѾmkRSS9s<>WYt=A6L\.cx^LMIII!==*W@:nb ?,##ϋ8v܃/_:܆d g*U(?+ ڶ {;.;|83f5k~[}utS߆|4|omy 6oN̙1DGE   ƏU[fjjsز7ob9yy nfΛ%κ |9 KAcFҬɧ싗/iE;( vUH"Μ}ILLۗe\y qq@HrJ%==3fDRD D/GHFAf>4Hz/R.% BrVq FFcdDZZujTchhHڵ(VH4|x%˙p .^FGG{{[d2MM,Gcɲ<| Xm֫Gν{<㜧'{z L6ŊFWWG|wzzz89:ТYnݾˡ#TD*~Μ;-GqfF-\\.88{Δ*Y߫8@HJj* a=zhkK[`+Us8ooݹG9~C`l'Gbb:Jz=--M!))KyYcnٺ'Ϟc:,t˛Pۭ&ƌ({S>ٽ7?]K\셓/!89CGELgWYM5#N`w.]J%&yh?k ~QXYΖ& TZ+P+RIæ-y7C\'ۻZ䲷g]ʵkݒݻp1.{c㼴jޔvmZ}q8uN?}FDx:::åd wvluz6;#_s9IXX8Ο"0(}Cյy>怪7Q} ;۳sNx"É}Qn ,HmRtdwD[KFZpެl=[>v?"_PA WyK9u2{5oݞWaڷe?%/Nz&s^GEK~SS֧Ejר޽N:Y8ov66lߵn-ʔa&& ʵ넾 ֆ\Ttٛ3gs-&E lڶ{!.ӳ;?ǒ9rU6ʍ-uj gb߾֏G7<Ws_t %ٵg׮T |^[6g!AAy4u? {gRn#i"3c7ߧ1e,N9@fM([ڕh]]X0g&sHnXm&6{;[^GEgA!;#Ab9TXAG3Rr۶.]L1#s4]\߯7.%G5^֛ BFMP ̤f݆-Sge$''ӪES*/OPp0l'!1mmm!l֪=> VX?:g|O/_T S4}nH+VYǹ^ M7ť #MMM7#a:}VITT4CF?u9sEcc6 y}ρCG8|8+_MݽSCTϟ#̙m;tQUjmeIL]ԂASʖkR\TRQ@xx/H'0l|J,6Jh̻Xb)Ϟgj*\f%{vlA.^8tT n\?Ȉʀ# ǵ ڵ&6-ySzU@?L6Sʁ3kjըk 9{;;F Ha'oN9x(fmmmm?DPp0zzz_ {{ӧ~̘3O֮M+B˗!0xLObEglLRR#L͛QÇHoܼ*uKg~tO ,Grfe˔f߁Cҹ0G!AtS̢E ?[̛5]y~s-m92pnݾ!M?)wϖ/>'k,{\4ν޻G`/ C ڵnvޱK6oX\#A:oQéVCӳ{nݾy uV.]D:: 'V-gҌ`nwkV,a)ү7 Y=zs擜̬S׻'5`X[Y~gbEey2DZv˛h/ZB*RjU+ӵs'uU_INNVirB̙)= dj9 kn)Zy=CF&25^Ӽic+J3M{?WǍsgJص#N (JOOWe¥jU]@vr$*:EPJ%8zp/}zvޟȈqcFwV6[vrGy T*10g٢mݒAmKOWŤ˗!Rf\2#p]:q!`BYr)d!Ro/^JC оmk̳%j֠}ִoۚu.)`meIUhĝiS>$5cV ?֦WkwTCv>.sfLKfܵw?EOO kVС]Z6oʒs$$$0m\2220̕reK3is;>~WfQԨVU/^pYX0gt{ XZbˆ5vW̬'Odݪy*`![K8}<-ٵmZO s̝9V1x@?tttczjAyϋܺ}n]:1x@?ڵnɜSsQ~7޳ajbcE o/׭-=NJpoޚk֩U"2,[ѶZJ3:sNJ`I>}%K8ӸQ\J:Ӭ;t$)H-q-BZ51ӐWն9@2HII!%%4Q MHL֭;'SVM<ѡjojӲ9jTVꘚ|\S@ 4Kss3 /=d,[<'X|1e˔KIIa`͙tk?jܨ%K8=Tuuu`,nZvKIgNree5W{C\J:ӦU Zh圣:6(+PjeSv̟=wK9j=ec)fDi~GA4E̜*TPDC'˙:i5kTcيx6mX`aK92ʲt3l~6.SR ~CSv-1qݺ{^[W|ʽ3?i( @ll/?ۢk)_Xt!fY*Ν = ޿/=.\<[""_cV ?rq )ܹ{@xxf˶r-沷wHUr\Ǭ ---lml &##=ҡ]tꀽ-K(]ʅB- }g~`oR؉r*uw9FrLPo>oihh0y8:uAJj*֬GKKAͩV3r:_91 OO|\xSlm:u `҄ق0w'&qӶzd;~~PliP A9))z"W(ha.⟳mIL4 RRRؼu;wn4oXy4kҘe+W^!;GD~9R֝?k7x6VכEKWHu]t>hܨ͛5{- v\OK5R$& DK炠`<^HmG_K3d2l@HNyVօ[T*y} jJ wwCcAAh˩S{oQ)",,k7n% b9O?))ɿYo>\yLF]O3g=9s}*V(2N=O&-8y/^0l@Ν:_v&+׬/_6[nO59e_Vre\2pɋ ʢ3 o߾GTZ峳jv6lݸ>=K ~߾}ܽOd K"y>Cjj*G o322z Ν}Ck+K^"+V#11)޽{h۱+vd gn\˩Ԇhf hL&OlٰF'/:u6c @  GKr\V{=wnCN"!)Y|,;H#_GIy/~ ;Ԭ^-G?)G##6[E&R_|2=@_4; }od[!.N!sJ@smģE ;7n/_|\ET~Н·8iѿo/'@S['o<ԨVU 8KiҸq+eM &CfY8o6}zv@9*/>>1&QQAry IyUkw^@]4~ E ;})aYrXBb" vrd[R%UIJ% /6 @  NJj*/^d[ҹڹX14 RJKS*Jo5S0KB~R^9Zts\?8D'r9-i_(ƞ}r|yio36jMÜ5)T)jf/hl߉a\t{UW]E];wRKigI`2Rh_-!>AϤ>J~WbyG0iXƏ)-5wg|NbE`/9%Z&55[ryI u?۟+J$ߓ3?͛Xi\NcRҙI=FIIIE7!|9̘KhmAA[.:ۏSZVTffֹdG^jԟ%5|Бc]X97vɛ'eJѺzzmKfeiI^=s/ҩ3?Gy: /o_?rqf;$ͩRTʕ*d^Pt))Y{?rR?!3Qpiʖqt㙔D_%/[ MAw_GRՅfMU9e t}NA s:k#=:}%>^5vLUێP-p2ʖvyfj$$$Hǟn>p{te+cUf9WԾ#\.岱Q"gA~_Dpw{AO\]E c'c)tfff9w^Qѳ[6n16+%UreKEJ*H洹Y}? }Edk7%99YL-%6m!** [cbؾs75W\NSFZͳ' MHL$$$,R?yJ"E!**!_HP>qȈܹ Y`.vRQT)^GE\.'<ʒnݾâ+e`@j>W?:rIJ%/c^63ٍW\EJj*.`20!uy151!..'O2}u_kx&?ݻAG5^JcA_N{jSlJ/^rEnݺëpbccXcY ͛6\_LV{G 0(H Zccc[ԪY]G@*5 01#5wV9z%We[6x@?:uh'=`2$y`Y e˔Yc&j*$-tӥ\m;v%(8uKC6F9r9׼Uܻ ԄhӪVsWUw)l߹GWL66ٱcӖDEeo6,9t3W[q*%+V5o!Nֱdmt:O {;[6n$i3pId2Gbl>аcESSsGĥ_ۏ p$Ox0elգ+{tbٶs7>Ux8(wn 4icwԫŞ)QѸ7k G f歬^!z}4iцlo^),eRRRojKIgjՠbrGDp2n޾.v7[t[-0ԺesBC_ImмulbJpf=GG Y!ƏQ(¿JN!dNAPfAA7}V-ɕˀ6-ABoBCsgIjAAWȠaҺes9q( ¿ xzB@*#2  &%jwJZWHMM%$4,*=/)q/&j~_s:tMMHKS AAR(5yP ~ɴLXm;vfXضcV#D >nc"  /ިH/`/#·@\&AAAEd/AAA_CBAAAAAAAA5D DAAA AAA_CBAAAA ?x&-Pݭ>s,߮    j~_ ,aB󴴯RϽ/\m;o77٪ESKzuk>sБ_Z )[:e+UrڴnG  nߥ{[   S"E|yӃw`Յ5^ J|[?AKiRRRa|2_]gx̏}sr6T%WAAA!֟gd6ȿڊm:`mm¹BrG`2=x6-5kdU+$KGQ+sfN@T~ !1%3f0LMMe꒜Lصg?e˸2}_?]h}nvlـWSjPnR ku v( @<ž}сceiIRR]zufj1oBBBY` <޾}Ghܨ!ݻ!PAAA9B^yTJN, $%'-IIMXXs~֯^ x>$$&o,- qxnNOGqV.[#1̕SKٸn&&&rxn} 2CvQXQΡ}8ozzz9x)^(OlشS'qU*Wb񤧧ÜSY~#\%/oN\.ܜCv1mDrK[AAAA@HЧj@@!V ɓgv-Eega:vh=tl׆7o,1t0Ŭ 5m2FF  -1GAAA)tBhQptr ʒ?yJ0̕K^d2 ȏkҦC,7)(GDbnf Ct`/<111154r Ӊ}7OoPsFXd9ǎ{PFu{DD$YzZfj,[B \>AAArHO[{chhȾ,T\N15۾ZBIZZmOXx8J|)1bllLD/n/r\o6LFFU26΋q^&MKjJ?]ӮM+֯,\ G{""^c^:oCjȯXx&Q+   }o)51 : 8njoL%8Q¹8<reJ~HOO癟?7nV+ښzJd,_$9qZZVǎ{*d6lB%r"u3u;#ܴm݂Uk6uoѬ 7o? >p)RSS8u>WrN-tlˤ߸9r};Sum۰{~{^[͟{ƍHOOgDFDOҥ_6ϙ3!K0W. sb0[6thۚ="iĝ=mg89:`og+\AAAb߾6 G7<Ws_o AOͣ1)ݻXd۩\K^+Zi&/DAG\z]-q=&Gh*AAi&NΙѡvL7$j7hLvm߷'~#5- 22>d˕E,[IDd$ٴn-#tfؐAL2m`ajM$ =BAAG*Z ===P mx) сNxyǼ%!>B Fɕ+{ofܾ{%W~q[cY:KRXQ\͛Xs0޾{ǦuذfeKҥGBBBQ(4_h۫mP̚}}.sx1;wbn޺u8gyeq(ʯ-C3( IDAT cٺq- >S+W/gˆ5yKϾHKK ##3s=ꏆO]-t, /cִݱ[2l""#]W,FGG;[455)^긱nr89~ 2L*ha!&AABAAե$7nۇʕ*PJ%nݹKBB=ť' ~NݐdSByN=(JV@U(V e͓#NݺH?:CSS57P(#blժ-zzzq-ex@9vNڢL&[M  6[v=tVjÞݻNx东Waatޛ0o͛EM忢J+VS^,- Pv-RRSp2݃ټm{bܘ9*LFA sq0 jAAʔv !TʕXa3Wf* M.;r&)) &6;[5θtVwvvrmmm, q/]kZpC222ؽw?G ))XYBK)?y9 "uZ޽{ϸ&3vdvl 3u *:0h*AA sSRkӊ/bZ6]n"" ?Baxƍ-. B- yNNˇ/A]E2"ݺ݉]("bݍشJ3@geEwݟy|vg{μ˽gNҤQ>Jezzz,[<_4?刎NaOCHƌNY%11k4#FFL0&-۲! ԪySڵiv Y-!]ݰQ;i%zB71g΀DZ!,} *W=khhPRΜ@@@`  <<FlVr6"౷꽘xIv ,W(jgˋQ7w5Ks+7hޭ)cF.]v]P&(.T5脇qbcc y6^Wv-iۨhI|\ !!Nɟ/o^3ILL$ B {ܻ@KKzsE88='.{&}8n4ڵƦHafΙGdTT1y s,bYr" !HqSf``[}byQێTРÃPJM&uS!E)굿9Ξ;ObEɟ71;(::/QVMJ*)'B^z-?,Y\F]]hwޣg5x߸ٳ4m ޽_W!B>j nFk/[T(_V#BtxJ /[~en34&$^:u$B!B9AD̛iӠgOȞ]"/B!BiMI CcB!B!I B!B!~LCHBD!B!:"B!B߆4!B!! !B!B!mHCB!B!~"B!B߆4!B!! !hڲ-Sl>.XLMQ!7nzy*WwWkۋдe[p2W!G?q=M88:1fd B!]`ڴBCS%00SgRZm))]NȞ-/q8]vpÍ%.X[޳92q)щ+i_Ež}t[[)s!B@JZךq!损dhMY[tԁnzP*B%B!܆~l~~,\[w!CZ5oFћ3Yɛ'7`tMpH g䴶V+mlپ??Q # FWWWM 2?nG D8;b)7nz|Z=9JjUkzQQ1|@*V(@xx8-khiiQF5 臎Kރz… b93'NҧmR%FGGӭg?ڴjNIb_/_d\ EqM+/]aYTV'>DGGӧTVEV'"޿gƬy\yek̝iE}i֬@``9s0|@L:Ȩ(""ӢMM@Q;4 --M|}C O̞1 ##C;G*qGRL)#"6c6w'2*ٳ1?*OnGptrf#~n=2 J/wz  &&0UM5G.^y$[jub;`|}eU^Skt~2BmpپٳZ' iXώ-ɛ'7J thF25K{STIβ,Y_aȞS,2O^0 OCUfuȟc'XމoߢKV-޵ZנЬU{NsGOO7gcOptڙkyA=ƍS6c6'Na% ӧNpr$B;Gh_^ 6.CG-fv?cɶKLLlڰw3b L)xr=Ʉq9~ԕ[7r6}64ᯛ̘6{vz9ttxS?ʸ#8e:^Q+k7ng6_I7.a|e~ M[TgV"̛5.{))I-̝e~Sr9LDP;laӧNbҴ;v"4, }.x9ĨCɠֱ=)6xǏYF 9lme;#"WΜs>j5|Ҡn=~ IY̬\'2w=km /sϞ˒sU87mڶ %XXQr;'k x%kWّc'yvBAF9~TH0ru͞[HLLe>թ>kۊJ*ʬlRI)][7rӝV-1vd"##hܰ>J`1~4tf#@6++lgIklt\Uv?,nՉCe;6Eۻi5ȞvPw1٪ҺFGdTu\B:n<`fjʌ#2LŰ!8q[6RXQA) 9>ʹtOU>()KPv-9DEYr9 !BBRT$tݺA wk~ݠ 4ad7޽c?‚V-r !}{ C _vO(?tjߖoZjX.v6E"kG_lצU ,-,T72dÔ+SڵjP((Q(eJ3qq<}XYY~9U*8yn;a``@f33ڶn=̑==]2+gNrdNHp75%i5WNkF˜=o!OHwmmm6Hꑐ7On ǙsH ""+lXc8y;[*+&-7EWO+WӬFx;ׯ)ۓ#{6444(REl&N҅(كԉSghբ&&d63MҪŋν{IbcƳݻ(Q&644$o<>KдQC._FH[܏RFuTԮY}== ŋZiоM+LQ(hքxxf>{N~135k?۱}[ 3e"o,?YԭߣiㆸvăPkTz?R?|j|^ zzdȐ͚~񽿷ӒTP(xfDBwx1;ܻOBBu6 N…~HmlP|YtttS&O=C! ɗ73{u,{UW`1Ѷc7նqdL P`} &{~Z_lpċWHT*!B |&֝nׯQɓKvsf3?k,Ph&yijjB /5%ĵF,_9c Ҋkjyh`]`ddzMo;ulGLL N' +2vp Ҟ#8$$Y@pvPZ~8twy.%KU_?|sCz?mYU-;)XXQZKLL AA%44 l\3fBELLLY-)Q(ж5Gg~>_˷ǚu=( HlljZ6oYdyCN['Gՙh)>BKKׯPf Dz`5k@< kq∋'66yZ2dٶÅu6b93V KߥŊrUn߹K֬\xXlF[['!BiI&(jmjjjJ,檇O,--b;6y[ZZоmkُ֯cQ1P(X^U5%իVf1-Ѻe3"=o!KVbyfB[[s$=o_HL~:q]d9?wѩCoNttj ʗ-lsmm- oλe`1h(;Hi싥LCBTs((C[dJ֮\ρCI$Qɤqc051K>.UJʫ[Xxjа0UsFH%U _.\H5_Dzt|ҴqC6mNN54%ECAb◱ܼu׮d%@u?|5ֹ#3g_ɒMcԭ ԭ]7IsԬBk߿W;CM5ٳ]]]nzݢ?CfQo]ҥ(SJ=b?P(TXQop+Ճ7A7Y*B!7oBXDGãGIs)Ö-43$$$7WPk͛afn%&&…P(qL7mԀNs+<B<;ǣ& 2}jT|vޫ*?;G<<9S'g)lظwBR{M[ <}Fʕm;w.ݸkZyt*_ 11] hh.5U\|RR'3G```@\9y0>/4a:}AA@ G=P*z=Y#dZxѢlܼSb6mI6\ =R;WTeS*~^ s s>#o׎pZbjj$ {>&&1&ӽkgK22mWURNۜа0~J077籷wži9dCSԩrZseEJˣDEEl̓.εٲj<~ou"B@GG=}=UMz.ɝظ8NcOZ=b(.yhijQF5ws,J깒)21jNVgGLOqqԪ3SOHVKdՃ SZ>yrqZuի7̝BӥV4kH2>u 1/q[by\@n=144$kVo7jט0Ş5+ЭKGѩ[O ț'wcbEu ;[rdΌ(^4u@pukgAΝiԩU'OѤE4554~ ʕKL>NzGR%5],tjtS=r`M[[g5خ {CPмicՉ.1~6@PmZClm016&&6İ!5g>]ȟ/sޤF__']Z#!!RJA# f%ESKҥJs؈A2dhSrdRڽ&_l̞1]РXQ[444֦Jr y%+VDҥNLOLOb߼!GloZنwi𡃾XJ*[4W,Z]7q-^ݏej{w}qo7]Mbb"٬ѽ M7ҹC;EF ՞_|u=}#ʔJlV)]NA]h{?*=g[dǫZ)x g &7o+]T 6 ["j5ΈW!-2>93}qϾ̙ VcgSD*~r_>cqd4Ȉ jmu,_' ԟ%|#7oMc*2*j3dѰY+*/q6bxw^Ͼf}035e9}ܸ8Z>FVg_`ql@B2na9*g/+ٳ-7`@<4kH!?ؓ'>ԕ#{6lN9${Zחs/ߤy;޾]KL;YځPf Ԫ!Az9_ E Wljy?!22e0b`45lܼ#g IDATԪQ\9Yl%uba)Cop| KKKNUVna뎝p}a?k7ns`3gw:reKX|% `gg,)@ҤWsb!˛HV]SP,JR5><|hlդqqq88nsa% Ǐ&UMmߕkg>|]ۛ? 7k¨CR3;m tґ[u6Y̳0r`޻DZ~Gu?f$aag[W#|IF :߹wUxJdd$m۴RHlR Μ=L WԬ^ IfxݺCRY^.^3 jn*W'O-~8oʱ'6y<._aL0J*$;Ϊشe;ff <5{ٻ Zhii]ڱb\ryr3xTP'7i*‚.{pڸl٬1trI79w"FFL?R%÷o1wb sg1c<.]JܹЯ7UTщ;](TeT~񓦢T*1===ڶnI9q4&&&g_PlƏZNj ˞}7oY:ƍV Lщxț'WŘqR93ɘl߹}}B¨U:=wAPpEv͝;8}jZQ?re˰aj7<а0֭qJʔ*I}y4_`bbb׻';6o$G̞,[4% r}\S9o]uٳs+ 5U&}̈́1#(XɓÇ0j4clٌŋE a? y3PBy6:w?I 3eP޼֦ ̤~صM[R./_߀!jٜ[6hVZ1MZ.Xa,[4+0b MǞӧLԄڵjsFA֪BP  :GLa 2RJ%}S&sdgj׬e+q޴&m6mpXXd\)W +ĩ=ڷi1gCL|{дI#fLLl\, ,W+K"{6_]ۈCCCan" RJDݻvĄeofaL4qä%njLeXb)+qu&4?y%2ebQ4n<}F:Ҡ^]768iC BcZq̘р#G1ul KXx>b<$˖ASSS8Ĵ9l0+.֦Wwi1|*)vcF&M"gΝO3mu5&kSJ.ĸ1Isoۚ(JN=7oT ٧9sZ3qh3SΆhq*вyS'O$::9  B_صg/~ _gP|9DOOV-mL0ЯOTK&J`̨k mm͋(Y8vIcnjFYr)F,[ꨖS&qqK:Gvx 8tۡuj੯/O|_uS&UTbwr&!>͚cLTJ(aL˛["SPAh(iϓVZȝ+'U*Up5"ٲm' )cٲCܹ8zxeNZhiw)YҥJbtO\ijjB29Ibb"qqqpի~sΑ#jvmZѯOOfOJɎ9̲4?.{[gݱҢL\att4_z*N?t133%{6+-7LTPu먽zׯ 44 fO1 piCg\J*kVLGe΁>/^)s'=C)°P(<}L:]iQTlʖ.E`937㠫ϞSd͝;zzzjATjU*cS~YժT0ӨA=lmgRψOԨԮ1]bSCozݦ\2s.\LMeܬI#J+Jiڨ!Ϟ?W!g1B! g~uL6C^hXFFDGG~}88:c'gg'(8k7n2x( iΆ٬M5:::כkcuZSoyϐ!9spvKkkk}=Uc;wILLdǮ8xX=W}ǎNێ]پ+򯥝N4&/W4??9gs۷IHHP[1I7R6u @\z??o~0~&7nAEaufY@UCqnBTbI 5ʗeńs *WHN̞h.^EfH{jhٶ#m[Khk'թ ivN>Cu9t؝!;m##C5M[^wőtE--45OO9AԫS+y(DܽGJ?޾{Cbv/fM呼~[Ғ?k: Qʖx8ֹ#/]M?{T*Չ!D!yJezzz,[< &&gcH?1z$B޾M=͏㭚7]Vߜn.Vk;(=}*_T^8%j7fpGk``_ԯW']1^nuS(;%El7k:SnpKժcGдIZ?w%^~õ7hѴgG\\\:XT,_D߼'ѽ ͉OHի\x{zQL)lgl޶'@ƌΝ… v%KT77 cc#GQTi*^etLtgKֵ)-˕I޾{M[6hL̻P=} B!^G~4/SL?U*=UV2eȥW9͐?yܹs1g4'-}=<bE[K}_D6-R" ,Ǖ7޽dHqB p_鹓Z٤SO${cod1"K_O+y$!O)ٲYajj^( >>kii]C.eА /5GzԮ1]Q|YYbEԤ\2hii [j]ܥ! LjXrkиE-]A<~k"~H^c P!j+Lb/-Ç?|?C Syn~9w"kx?p=RoyT7:::Ν ]]]5muUC@6oAb?.T5脇g\A8o٦S}]EV-7j Y(]1'Nq%60?bccv&KLlR7On7Ϟ} Qo^qa!TZ)Uq~Tgb\v]5lbv,M[Е/_vă r(?[jJT?n]D|dQ͋I:P(= u~\yO1GTT&>O}Iڹ=iC:iM[i6GB?rMVڳ-7!6kJ%'>ε̻PԤ_oE1l޺kV0z0J,GxOҥR= ݻvgTPnC~ٽkұu !Q^|1,Yy?ACCC5݆ٹ{߿;ȑܹrRZU|伅 79 ʊ)A<}KI7uZ)/o([[ϟ.{xƏ7 ",,-vȞ-{)\:ƪ58ቑ!͛5A/{8?ɶ.>{&1ԫ] [wprތCBX0w&9g'(8xdjoprLhXO|Q s%TTXXjG^MԨV%եfT]x7AGҥJ N9ˣGM=H1::qp$88gϞSdq~!!!DFFRΖkcblDj"U-\[w!CZ5oF>k>s;Q4v=NP@~ƍjE6sQQ̞1 HZ+zeluv$22CFK۷XeM nF ѽ !jq0UnQ|Y Gu3SS/#6m6j@ϞQ.^-_#]h(7nck Pl\ [6+5+8~:AW7i?OCTT'9g_g=o!bblL6++lgԤIrlgviB!7;|}ûQ 1MwD^p5޽{ǐP(UuZ2I!BP*$($͘=mmmBCC޵D(C~Ɇ)ȗ'r͝b)Ѷc7նqdl PjؾӅ\Uikk_+[[T✿xMI B!?3p{cמl(ALPvăm[Sj Q !XXdo\v2?d1븖o:#iټ)6nI!_`E̴„x;ܜа0FPP0-t`RB!B_/RL) džaE<~BU 3'Zu5iDv0ŞjӾSw._ь?n]:agSfϘM[yٳYѱ]GfpptJF||<^!<"BjB!BB!?Y>W!?B!B!?@!'Or/_&GhkC$YhݲR8S,,z޽wcc#g2kIЅB߄B!/V>zcFvn݈9sY5h@_֭ij*Wzmg[co%'B!D! ѵ3\Uk bSp7n@;$=J%[D)'!W'CcByfdﻺaN!1CSli:k5i`X#'DFFRlF L@` 7,7{tj21}D܏(tmmm׮B!~A"B`V]O|yiݪ#Ghr6_u;Qcٳk+j;>>CFPd vnHdd$]zaU5еGbcȕm--ga2)\ w#Sƌ,[<_ K!!BVYG6hԬ5F8;0S& iHʲk_9S&qq=@CC*/chii1i^z%˙2}S'G___ H!=B.^+W "U+ !BmV8u `~'(8k7n2xXDdfELlixݺ6PRPA:o˖m;Я7B!~^Cȕ+p<4m ٲAx8IąB]jVFF عk7{tGOOeB7]V}l2==4dfB':C[[[ F!yCc.^ڵ@00YX".BVNmb{VVYɔ1#._Mq ,@xx8>Jq x9띜&>>>wraJB9 !QQ >ep!ݛB!?J/EvއRDKKzsE88='.{Vͱʄ)𐸸8|2{B>|@tt4`򄱔-Sy{aϠ#1{'NJ !qi;?=yB%B!HQf̙5E&s IDAT`x?eN=w-3yXN9K-ܽOPV ^N~8s:3e,)U&ϛW U!Eh Kwޣxb =sE,X[M{+,^!B>j nFk/[T(_V#BtxJ /[|b`R B!B!RmmyAbb5ȗO".B!B[>N8|. $B!B!hB",B!B_BB B!B߅4!B!! !B!B!mHCB!B!~"B!B߆4!B![5L>-RJM<%iվ3Lj㗫\;r4i=rkдe[yc B33MΜHٻwP3;~=2Sggo?ͫ&{h;7hڲ-fϾ)nk^͘R@B!rpX--ow9fϞg;cȠIhݾ?hώ-~_S9;`ukפUfJ-sp5رC'O02 4Ѐ_ym4$~>NNJll4 {{¶mݻ *[))Y8W)n˛'4ve>6mpߐ011a?Z89oM//YA%޵Tf!B_!&LHަMP`͙9 2|Ըdd^MMyȑF5ᫍ '+Vc[vce=Z*c ,ty `,_<gϔ&B?_޾7ox4v{g5ww$( B)Z)-Ekq-n~,,l"HoI=sf;sF r !/^2pH5]n:r싊:vI=f > ?/'NѥG4hB&-=w:sk?x8wUNi 6oAiަNʖLIIT^ISӸyC]֫2mƯ5kMVefK6`~8FZѢmG6mَ$;dI߼u-'ٺ 2nͩӠ Gi۱+fJtt m;vmǮlܼ-[ed9m;vYQ{~?>ܽFZѸyt}"<{&^=MXKb ֭{Fr WW#GM1˗km.c˖߅=fehą 2jԐce@ ?quU`jHmʱS+r9#bzӄͫV-9!!כ?њyԮ-K;+WdX[u <~,#>^mѹn(ZTAr"#5&$رr(G9ooo -Qa~nM,_.mv,[zQC&͚im}Yyd$)V1c|xLruVn$IxyL^Yύi3~ߍՃr vJNHHH!j/Yf=m;ve8f)t՗GѱkOvw֎]{([4%gnjz솱x{@ . !rQ*0qQ~1%Vp/"'ٰi sfMcԬQqvv'W(:ygώ<{20fi=ch`@LL,cƵe*/%%%%ۛڲ{~J\fܸuˡ};ٺi->bْ-Udqq~֯p̹{d&{N+:w>K~OJgکJ%ݻv=yK f]ȓ'7о]퓽/Fо]*YAj711OBB"cA:}"9B6rՃ4mS3~+W4ʕ%<=XXMb==ӨVMc1BK޽ժf>Ѫ1c$x0=[geH~}ǏӈNc`Ν張}6}qp4.سGm&G;\FXXfI(ٿiCY\Γ'i͋ 1lG֭4|}HLqto^^2]Ss~{ʸ~]sn.61BYm֠-MNԜ{|(A3۷Ӹ|ϞÓ" Mz6[yO;VفX}8w'oY׭b_enqx<$^ި*͞Ɏ-P%v٧#'ɟ/_IJ{~[w& ڈ7@   *|vQ= OQDqj׮{u)B{NDFF@&n.Y===,-iؠؾ-6X[chh>MPl Lpt,c0קj.^B155ҒNqlv=5|X[ӾmON=m~Y~+K_kQl_\[&Ҷu+=<(w iҸNȪ?~CJZI'W~6m$:t++){Hk 1iBr HML?pvMƄ j4a͛K[H9"c25u%; ....,ahE@PÎ2-ؕLIf}h䵰R$g3ԫZ ʘ0A"W.%2cfn@酹Ǐ%9xuZZ>4dxxRԥH0| dtr$((XJs6a[jʸ)k7зw/ @ Wǚ7vgϟDD;W. ۬,-y6s aמ}>r\M__Ȩ(> ZMBB"Ŋ{'&&&Sd2RRR-B.GPhÄr9iiiƑT^, Ȗl!*ԭ{2[==m~= :q%2  au<{JDT)zza'ꏟCPXZ[;?T>]Ή2F.TB>JHfb0)PmhJVzל_ˠP*|J IУ콁bbq0>$%}{FFjʱt{ܧ~hblLbBL^TX^{ [[CG…1!#C<ɟ? 9WDFFqlXkoMV[@ rD_,-%UԾІGD`eerP_1ƚ.:Ь[IRɨ0n ͚!Yq =`"%v$\',<GG`q!3llɟϊ}59Ntmi'b7=brԨV5[r| 88sx1K.E.)V2돟-DDh&&AANNi.Z$%8w. kk\N9"wss`қ|_ߌsC&@d$pt}L |e2 I}^e2rܟ-,d-*}VHa^QrtƊ =Es3So2Oz잡!(.>1ol˽i6׭MA' m`?j@ pUK"H]J/nGR;W^~:9*ٹ  1l*,}yAMov{ڹSϢN&tއw!033eL2ٔ/[i FcnfN]gʖO:KC]hФ%s-$9IwE@>Jd䧅fL8+WS~c,_-s-7jJL>+IF4f$! 1'ֹ#}Yݰ)Gٽ3OӤe[n]"+2돟:VУyԯe&kVMYZƁ2 Vqʗ8tH2ll4ޅC V葌 4e ]&:*TSYΘ]ȝ[Aժٿmڤu+GNZRiWWYS2EvYYܹjZSȉʕj5eͫI/rhQ RYY:o訠iSy|25y@Ѣ *WVP&ʗu/x%oB.VY~#цU ,A̜3f9|PȿG;p(-v.[Nz1vnK>߅/)_f·ħsړˮl |h:K/eߍs·|/[*~ޛ+o2OǍ ."YNR渍Ȣc|>}F&sm/~qXBr:._K[w2}2_G0{>d-5QÿL)))nЄ/U [~۹ӯ&sYέ{NOlcUs1}ɓ[ÓYӧְ'ˑbiB ̛@V^㿟pȁ/VnPP0c'Lښ?nK&<;[o*glknG9"Sθ. QȒu_u'zoOҶGw>$15}*fyZx=S!7ڔq]BR8(W^p~dMsCCHs[wtl=Tp,6cjJ9qX(BlcԧWw}|135$#hmN)C#hg)Ճ%KPCoǁdli)u4q.ӛk<.v+c2E򙡯\~sC?F}L>wqc%_Vu} ~X 0V4桦cTW^c/r|W߷e)YGh _Z]{r<˗\&}z"6 vOXW#_`$?P@yg*W _ڹc[|XT)\șqG+WORd\vRur`78~4CR$1nt3}.YJb-\͉^MUf]ZRӾMkcܽdѭ =v`\z \AgÚ`ʴjf͞1:ӆ)UJ8G ~Ly%Omĩ3,[U.aLy'OͰ*U*amU˗diعg+Vcl\U0vp *JuL E bHM/?OfƵ:_cnnΔIiѼ)OҕY1GkY6(Dt)Ǟhҫ#5 [bLjCTqolYCbif@603N< fMZ$e׬W ebԣ9,qp`JfIO/Itx憜V?VbPMgc#q}շ rZʴ K$^01S^SSX$RhVҚ*ӮHf4/ξd,=`bQR\ 0|cb1L͒iJbXBLr+lK~37,>UqLlv5K/2aȰ:7њ&%)er_e<6ΪY?2\FzLoVe84^$@ ɪQ(trP(߷7/_qĩGGΘ hԠ/^rҹS{ )\o(_,KiAL?=fRJ,N2?+U(OjUi?lB tkQciiAڵX<&&&T,_~kPlj*W@geE69z$?*s/80N2"䔗O" 7g!H^Mj:ۉy|fN/zVqdZK5' :Ik)kPOE>y/zΨπ IDATrB!13/8(0z+GshzAK 6%fz(m@5!15 [2"Q3%|hQ' ͒MJZgerkU]Ցrо%lyQ%[6[=BsC#.h-erkf%@ Bc@ gyo `A̢.I㿟жuH9r8L&qgMۇ|VZ͛ ?sEc `ioW  ",<ƍtW)Z$3 :9f(s`P0a{c Ivkm(ɐ$… Ņ;wCGYl\;;[]7$]NV8CO@V̌c 䶘^F}OX\j*ʮo:7QIݪ%9*+>=h:$}&F:'x 髁BN[O@t2q)y]c@^cRUkF Y [ǘ^a\ 2A3Fsjp>d62^K0d7n%=狕݃Gqܩ gYv= kJ-SVSQ3V.%k?6Z|>z)siwΰf)iT.>&ƍ99%S'}qHc/U,!@"CVyz04&7=;j8̈́ӈN#UGt.ڷiE}~d>1o8vܹ{ʕ*doiX$*:7o&˪fJ)3U!CISr2ݵ_?Ck;3Eq< YP'ˠLSk Oi۷Tn |Ѳ1wJgTD&r7C"47ۮ̌?HJ% gŬXgOMMMMeؐM9~`ѱGeA14oژRVMw&`ƯU4j֊-/OL0Du?N4lڒ'Ok5}kivF_n˶$Ꮵ~tR!ҥ@J縼w[d˜xiS&RV~Iy{{;,,-)]Gϵ̌[~H;ͥ5ڰt)^>>?>llYj9E]6W"#%K)2]SwrzNV}03:hR q:!y>?|O@$/*9ЭRL >Eg+S!!5-S=G&zoplYCO+Ӿ>1Fze VLiJ~sLQk} ̠(0-@6*޼u"E SCԡ ϏT *Y{yq*ST|̮{o]0ۯ4$e #dz +4DG=kTrd/3~a"C1i87#c'N1a4V@B|?YS7 ˛_falش{PByLMש{oٴu;mdԫS\ٴe;e韫033T:nܼ Ql۹?WӋki{`_ظy #Rf5,-,8x(S¥q18D 56=3>ks,Бcj'ÓHXǷƘ `Mԭ]+ ibb"K\ň!077v;|GӖP(\עnbʴ,^'/_ťw6lن7xzygܻOF us9tc޻YJpp?'Onjת9|8sfN0S9<>\Rz5RRRٵw?n,Qzuj\Љ`v;@@`  #&&;/sޞ;wfFyʏr=vKll,޾4_ȐQҌ3/_wBWE+j^PzG0y1j+ԳP"RKSzJC5 7e2{T1+(fcN=|7E)aiǞs/"Rzlx^'`ˈ/" cwS OFa?Lu.#f (&DJؚse$OX<秴}nrsq.rYyPގ9(D%~I4*W^p#TRTrʋ9<^a51I k? O8"q4Գ#)<)\gϽ7xbm8>4_Eer3j߼H$86+S+ҩC,@x&@ǖB#w ).>Au0DBOR]v]ۨ3)55UL\RPpRnܒqKJHHbbbHs-О/UZK;`IRI_(JFFҽu$\CZfRp|RCGIZ||_H !#5J:_:pHST҈?IkoL=3_~#wk.m۱KJLJ<}&ըHT*菥RuKWJ*JZ~ּR$rWr߾sOۨG߱'jK7nޖT*tr.]*iT~㦔";pHrkZJMMcN&^wAҎ]{tU!۰YRTRTtTn#\~CP4k<)..^RTҋ/zۨtITJ6oܚNwTJz㿟h%''K &O!EDDJaRnjY~ԢMGyotdSTҐᣥ;w7R: K*J޻N-kwB¤J}[H-T*csw)55UzOӰt̹lĩ3RHi1БcȨl?WQz %&%IM&<]RTRێ]31)ILzy/""RUMȓ^'9vBy Q&hoٶ4lX)!!AR*Rn\cҘ&e؏7o.~ )JKR5а0IRI)))RNݤOjDæk+cǮ=R^}s$aldDZZ6lbĐAtrАʕ*P\xzygVz*t}}skQ릇[6VT(WpgVzEPPȹ`r?ww'Ÿ{xQN-m2B&۴Jb=b(U+WBPкes""" q,⯛ mVtmiiA]Mn++K2{xzaooDŽq1~nkc+2իN\|uQT:9Z=Add$3~LܹK:5y^X87nᗩ_mRb~Nxx8Ijrk :wEJțT5qCO 1) ۷-7Kr9)7酑!=$O<,Y4\xe6Σٱ{/S'}}TeQϟ]{ŋqvrkLDZ;Z2.E HE]4I!33Mh "/zzzқkQ&~{IR=<u^?4rxL&[ll,AAAq<1uOs^nܺ3ևKm9t8^E ujJ(=PB a 66r)^̕pڽ wxoTd91:POO/zu!JJ"<޵(O=q<|7eJbzzzeqφɞ+W.lmm8xۇTʕ-]b;89ܻ6f[o&bjI2L.$D;z1x_!%5"xxxѡm\\7Q*IIIznL'{vR07QΘN<>M˛[Ѷu+CFG.t؞Ȩ(V]I cc5,,CGг{W@ &@ ! 5Svnޫg7/\ɓ7(\PT+\3=yfh&xzywڶnŏ{Nddι^ԩF^p!ȝ+7G.RD͛~%WTtRILf)V:QHa/fdصw?z  93b`aV\tkR.kl;gμԪ{;vo߬@,_/ELi~uVS=<)\P zg`)c L1?.ŔI?ӡ}f6}6iĈ=4:COh"""ک-uF!Ӿmkc|țW'TCS&dJfΞKBXh6!LJ^=l1tAێHSK˗c~L6g`pժrq7o7"/11޻/Șc||4@ @ _/GHs'̛dIPAh\ @ 7xHl 0y2J%<(4.@ u !qq10([<=@ @ |3!Lcx 5<@ |\rf۳f/ZnDD$sNmhվ3hަW]M ߄cˡ[7 aACq@ =O&,,}!I)3,, FVcp)JĞ 䩳 C>B@ r̮=Xt ɟ?˕Op*oբ^޴iLEc C[5UŹ`A OL&k?yV-.o\@ FN8vh>=s^̚J'4l$1_k󋔗+ge@϶QTt4ܚyێGCjUEG7AB@ |wd2[k֩ŘQMɭ;w  DT```o4\{@O@ ac{T*:©3x&2[@V-t8w";+?$[[5iL]s>{,cιO=gӖmxzyK Oe2;L6CǮ/իǢy<|wKRbEe&4oLJ{>{+W1z0jըΈ1?c'8{"셓#;˛%3c ر{.^&<Xb)^^ޜ8u??\0}d2FFFivnܺMhh~ Ā0@ o⥟ ~5s/ҸQΛ6s6s-ı˕L5;;[\uz/z[x1QvvֹGXx c'0rxFɣ2x0e82 ysfbgkwaQ-}ǿt (؊vc`(6(yQDccqu<9ٳ{wfe-]AL?tt{ѬZ]M#yMV.4k @^s,tuu2}Oc^ @5*VLJ]N?kdje",^L&cGQLiۖLRRRmblLbŔ+F6*T/Xr #BX[1q;k7([4׬0}Ѵq#d e@6>~c4= kWqM|y{r?y܏)\ۦ/wD454(Yu 43<,aC62HB]ܦ&*PSzɂ9xnέi{>nwxb?=QSSK 吣H ,T*.sẢ!TbcBGG[T7~*r_,_\T*sC[UK$MBb"˛hhh\VCSvq .D7W\]hҸ$''cddHʕ(S$cG`65:z$HRWU[Y'9!=~TץS{\ z?h#HH$8Գc@!իڲ!ssmIFNd"HNNV懧r4I$jTȱƑ*6dd2E%Onq ";{ ŵes9짗elIT[r6=zKKKA)\;6 +-/}.9F [ـ~󞃇r @=FZZ}{2!,Z}1lЀ =(zJ|xnGŇ ƹA2szX|NG['CG䟥kjjr58ŝ{UN::l{ԲA\FDGcٍ;wmJT(_N0 \Hش f΄sYT~I {ժ9rk'{eKW'<QFu&SHJdE&Q`tPd5tv, dK 0h!wn(_=J|ѧCÏ]MuC}{VcPļܺ}m;<ٶ^1gT֩MţMkBC8t116fמ}ڳ %l9lrs/j:_eb,^0mmmѠqsz2%˹} .YcF)'3|vɓ[94S/.Y3Lsڵ%mݔw<̴shټ)/^==]znQTfG]ӎȨ(&CBb"W^We< f\oj*s֩MbEy1A! <,^k+K:kA߁CQJiފ7o3R455iBڲ9͚8A>zw7W^ `8ԫ߳gѣktuuYz-Lm3yX.]ƩgiѬ +U@?}ӯۓL2=1fulپ-Rpa.XרY:zzz<}F r\e(N: пX[)@NBJk玬] +::L9͛R6iii(zdO?OHLP?))I9xbR2M.#H;\xW&qe?85OnSBBC9|hkԠ>,,+Z=_?n鶫, @v4rr7m܈]xġ\. 3otMcbAM3wM[ڦ= kԨVf2LL tjߎOp2=:Ң9IL:^MG.pk畿`̨=rew"J1uR=O:€Õ JO^ѕsgR`AKa X ;5QΙtj95VnWPP0k׳nf߼Qcj/5w>?uIHHd̨TPW@GGs>ҥ{o;A)T rKDFE)^Y^d[84"2R񔚵7ңO?I0oĩ30Yԅ[wr#p0{\[6ȐPFXA\ww8r##([V MZ(8Tа) bQʴOtڋMljeScEOEK:srŘILLbמ}4ccc*U,φ8|QQ*%%%cϘQYz͜@3c _]orJfWH"=[L144 4=SE μT"H/]ƺ xZe6"DOOq᥮H] ))(_YE V/ <ڴVUͮҡ][ʕ*0j!}wd'Hhټ7=)&;ײA-Y/f3dzϟ?ϝ4F ʨC33ߺz!CZ2ٻsk*/mjOJLL mZSƚ6ԫ[͛ҩkOSRzÔADij :ЧB_|E(acMX<.۳r"J*% PWW*Lz}.$cyU oyyzTrrœj&Lƛ7A1U)},Rx]khh:!z |Z axNTTTְbA+z܁BmC.s"55{>4pR΍8q e˔r ߴqql߹dN< cjjjO}  !#S s33e[[K Oe_I9 SB9,¥ˌ;,x];wR ?t(6pd_XfQQܼuLkf?PK$(]iK%poOHH-DWW&)zA?r$+z@"_|K7{C%y)::/f)ꔰfӖ.UBzQ5R'Oܩ7ov_T n-h抺:ڵ܍jU(? ZZZ߸w11Ь3͛6V6w٧\ϝs>&&4paђܽׯcmeY[Y=q _N< %2.R ؤ$%dq_e}Yo2_IBAA$HR%Yr)Q : "߷W*(+ IDAT\a_\u+N:CpHW˼|r5~~'$uNڷkNqHhZZ,]4Tx͜DzuGڵ]jըy92}ʥ79%lUҺtl۝'6F[Cʺn`. Mhc)ACcAA-Iצ&4k {v~Mk?\LXzr"P"aHAg(a_zUYdٱڻw'o_J' ¿" ?F\|<yUr?D{ +g@^3γu'm/.%&LF|B؉hhhr!r9aDFEClޔljbϜ ahjj2b@v;hTB]&G ss3k??Z4k|0sQ?Are4/vx}n .ȒsJ<|e+Vөzq9BCøyU*WSmx[̚6 rq8?{ xŊUk񡸅sgMCMM}qU|Я79%&1Eq'5--HOhɭh.EKWMKb[$swXҦ~޳ѧgwe5nfvH{Oמ}}.;mrɖ;Yd96`٢hjjG>xydufȠL9͛ac9Tf˔鳘>k.riAR%ҽ7R5)E03˃/H4j؀-Z;055mt4X[[fȻp2Ϝc1?A?zпo/ںaQ(?23ڕSն2ϜcYg޲eJܨ/^ڪ8 8>~Z-55Le@,,U;uN#˙8eq,Y0mmm7?Rŋg) ?a̝9 /'$Ã?{;Dqisri2ǵBO I2vʿ~=5iܢtc~;;)7JTK7~-hꎭ=/^eܨ1cқsUϥ׫nи>GfwR/_ޟ ޾*TPy! P B 3^^_N[[w7l?G?EVrJ5޾sM;ghf̻wF|~Զ(Se˔4Ūtj]K٭/B~^.ZZZthז>6kou⟬zyo)ٽc3woClZZ B*r=xBace{eKwn *^ BeoϾJO^<|D%ާG"{|tQ.d8_:57Pc֭^FddC\\/; )i?7k"bXz92Av DOT,(R- FFPG c;qUkǘQ(_,][2iLB7a ڥJ9͛6SA²iN}& 6o}W]Um@ѣv$py2M.Ԯߐ6pIEZnڍ$%%ԥ5vxrMlYBq5mliӾK-SCDd;weuөGzM&>󧄍ZZZʴ Gf]H?΄GDpk<~'Nm[\Z{ڃdkpuoGæ-qh,C'29fĥfAE6lƽ}gSR2ݿٶÓ=e]^檒~=uꊽC#OBACK_Wv8}Jo9_RRR̨1r3SphԌNM;`{D&vFn8Pwc՚u9f<ظe;̓Oz(|^W2YZu.6H$#"U^)Te}v|ZɏB>zBTbET'1I1뇡yV/^a||H$X4HHLp޽!<"b,[4`||~9&n΅RVEܬ޲Kz?iii<Acdhx@l\Ϟ?'.}*-MM~ѧh ի@߸ ÷lj6lފE7k̍[?xIII_ݶ8ƌohܐ'OӅl0yX140`L0ҥw7N9Ǥi3ա_IӸ~L<]]]-YΆ[ oʪ8'c}Z4k c߷g-S^ ÇԄnq^^ޔ|jj*$>!=;uw=T,c}V8 7l])[=]ٷk;Um+gkuut빍f Cl\,S&cώ-@܁Ty!سS1.~۵۔]ãѹC;IINag#ĶJeN2%d '>~~[2*.CB;a#CFz|GSI|EF*7oذAR2y ޽zr ;a{@RRR4|| ƾv-N=@2ع֬`ڤah`݊3ٷk;nը<v(̌EfiN> ~pM˳ayTeNR< 5=qQ˭wU9T  gI\\oy*Us`?|c'u?UknΡ;9qd?nZ赱zz.\ڕK9y::ʠzz1ʕr:[6%!!gY2y-w+/9mZ"55M[#//_^ںGMo~Y[YR|Yd2 eO֮ȫWk,u3͵% 7pU֮H>҃ Xt9ƍSj֨]űw0^>x= +[cRSS9}.ĘysfPӮ:?T)Gjہgөj ٷ&&,3ڲ9AA\K|q#'F ̩ijTsC' ZZ87t¹y]whܐC;G g!?_7Qն2NʻQeJ¹ke޲[9婗7C}mZrK<~TbX.ǗҟQQQL'FFS׾ι{5WW,>>2/C}l,1_H$H$ttqs_!111;u/^ KK[UV ZZZQbRSU/.vE>f䉘w.Uŋ)f򏈈@.d2TP?&k][N\lӭ[%t a*|ەj4542Ǘ<\˛mϺ"3^޾ >~(mJpHHW,sۦL6:]{;sBpi\%}݆M4rrNHRԲS6tƹzU ѡ`Ɵ39T*e+ŋ#(8{۵7RPA鉮.ԯk6oٺÓGM VKvWؘd7rB]M}2'zvό9xԋF\۠1дq#V.] ؏Cq5ZjÈ?ЉBWW0~T@1bQH$fMBua#P`YjP\YbcXt9Ϟ` M _ĜxAṛ}̭wH$+zZNًKs֮HPHH7hÉSgThքAFҽw_3~(nܺ3ս+z4p&HRZ6o†[8t$>>b'73{B\CJJ ޾~*555lXa3mؔrSt͉ӊ2ޞ1x@?di 9+׮cjbebL6+ObHդ9n"TۋҽW?""#2͚:YdfP~Fsʴ>>!ݷޣ{ ޭ z}y5sE+/)d> xʡG!rzeUT-RcGl(ZQ Vb57*;oeYa "p1c``kٴe;zriN|BŋCMM1Ӈ1!a_ݶo" 1M;Ahr޾ťELǦfkz)fT/??&&ȟ?\dI՞ gϝ}lr@bR:Ȑ2?NLLH2(|Uم t8/o/aS\9z$oIMIm;!ecmg9[#"TN\x {YN0XLizƢ #CWngv?|N55%ǀJeY-GrJ )))h|ҫ"!!WQ/5kT,9e||hڤQU(?e2_;ٱqVjײј֬Uzd2_SiȟOe=VAǯ_׏eJ) 88zٛX#Ӽn`HxFDFbjb6__<+> ۋW;psmkl-+JqwsrhOUߝqH1OQI.kW.͐F{L'^/]$mTҶmZaѴq+V(勳WSSc̨aͲE*sfQÇ2jЯ*i?݆|s9M8ӴJZ1 ~~7W8}JZܡJZ3|洱lˬ!j:4,:]1ӌ;A+;,7;˼Umɗ//+q1N:MNMPiii~6JYqڗ8" *w=Ti{Ȟ`Κ~Xx)QobddȂKZʝlfToIuj̺q퍡ah s'MNNf1XZΝ{\vZv5TG>q{CCƥJ $Dve#c.,7nK̚6|򒒒Bnl%(#Oܘ7>y>.ԟxN]{QˮJcklyȩVMu%8;g?bQ x23455Uzx{ҽk gZvLL !YN7nFCCJ*|1JDd$fˆ柿pX}֨#11ܦ/]2ᏜK_W_g*;w)fQTc׏$ -7%*-Faђ|yͩQE FCC /c9ƻw1T(W]]];30;Ŧ-9|䘲'K 򍛶Oٽo?׮+\t{PqGO&S=~rSL'I+Q†c'NZ9Gjj*#Əwn,^"øа0tuU&}QvV>0ұ IDATeoC!eE-44<f[Ep bb24f{T\txC?y`bPpb17 U#%uu e7ٟmmml+W;>'֟< b2̇'Ct3q} go뎎v]{pk1I Z(yj:zt򁁾>FF\L:ؙs9ul{\Z //obbbxquiA{x9yLڑc'3&$rEe@X1 Dqqq_P(HHH$lQ89UA{d0m[(/`'3N0fLH$P#+ۿo/9y =J O\b}{1k\Z#M&#_^sں!H$LT*iFiEYF0 D]C-f1OHLL")) Jٱy::x{P_%~ѓ?H||͕ܵOChȉ9 q ,P5g>w#q. *H1&Bl֊i3gS~C ώ-HMMŽ}gRSRxXZWNٹC;iߩ))(һ2G{L5m-‚313/A__ax 95k*҃aH 'Cr֬HIrNӡӧed-ڕ+*hpۇ"E g#ĭUK&O&΍0ooe^"EQnmdԭSDFFF36IriAN߸u cCB9z$;ntO>KLF$ FdC 024T~\Z2h߹KؘAp]:Ž=j4oڄ^pzE|215w>Fr娝>JiѬ ]B&öJe-:OzQ@~=҃O|G֫  e%}4AT h2 ~ >X.M=D#8y,!vʅ͛au'"]4׬̴@io v^yss[?e,9lpݺt!  M AAAAAAAA3D DAAA JMM#~EeWaيբ"AAAf.\z-G>tm=))AR̢/0`Sh`֬K|||=ػ !CAA_y.PJXH>9VϠ+jjj{ƱeNwo__ *ᑤx:IZv{@|c   =}<+WKf<|hers޽R s$& a'$Ah֤1]t +/ZʽedD]h޴1~޻?wl&O܄GнOZlA[WF.##\n{ Hؼ~ zzz_ݯ"Jd`hh0ΕK{4j xHbb"ZNy ==]:whG֭}xw;b w혵K⫵j֪Yժ]{ڵV#vXAdH$$2ܤ1b#usss]s]x)\Mʗ-èCiGNs3fqY'ON2?/ŽM=ygqUg7q+v;͛:}fř_nj޽{L2vPӣ{th4nٶi3fq'$@Ϛ0۾,Q%K0{tAj(f9s۷d¹\)8|(S3_'LfԈ!dvrb}!>#{-wڴGq%:u[8g'kNLPH<xa>z%W0I/uO;5b%e8c43s*'}٧W,NPnLL {S&\tٗkӨAիRzUKi^kN._JDD$)R$׿""""""rj̙sV2M4`0`0Ț5 |}Yt9?slX[[Sv-OJp3&6eJѼgX[Y/oͩgy:w]}n)]%(bcqqv~k{4`0=7o29wC Sdʔk++.Z[4iH!JWuן~3v<-?oJU֖jU+'_pK$k$ӘF<ݾtXXXP:s; ϒ;WfwH&5ӧRxJ=8}s-Uʔ`P!"""""{?G=G-߹/,--շXLL vv֭S3kҧ珧s 'eZllR!#%3gə3OM{r WF8::39?9s&n䔨vmܽ] r'$$۵kL:{_֯Uk?{Kӓ> f `C$O>] Y˶c"V5- {n ")mS_ BޜG_J ϛ(-$$n<ݻܼy+ї͜鿙EoꚓcfAʗ-/9/oԴ'Zs۵Me`| 4=ٵ/2f̐h-/@ڴiowK Rg{{z'LY>gΜ-BݨU陳dɒ >{ 2fH4{75sdGGz98~fbccyo E M:52edDGGϩu0v`ҤNK&Nl~a~u+Wp_~{a7 Hpys?=Аř&L_%z3̹ɓ+Kslذj: e  pvk7lJI=͕˕۷wx߿Ͼ\{~~Mu͛M[q]vy$۷!>>WEDDDDDDymgΞ#3FԮGtړO֠W9{\`@)[|N^sڏ#s1ժGͺ 07,--cА 6H5d굉ڰmNj}ڈ%=r<-5k>~9=*:Ky'bZ :oG;wb+/7[[[~5k7PzmZi-e<_g͝OMj89ez{% qPZM~ւ5k7$yѤqF#5foǻ}ݑSTQo&p;! 탻{_<_zTUqpu5jڂ^=R\wrm~7nТ,_3}.Z•!"T^Fk.yyLy-'exy01޾.A$n%{gAg jxMzED#ٻCbZj `Zkt Woϫڵ| 847Z,Dي~WW;ACFףoힳ|xN>8 Ȱyv֬`~\rWuNDDD^{yWDDDxr~09qk++(Zĝ[5K.p!7fMLZz|iF+Z[}'*/ǚuȜ z DDD MMn2~/Zv2FJLL,kocW펏N]֕ʒى% 10_(W"gP DDDD;kk٦%S TX^=Gޫvoظ2 -$""<9&$4"իl޲M[:u*~3>l޺mwRã}zv{z]cYx^=Mȟ// {L>{:^}co~GDd$ʗ0{K/ǃݻwwH&[mG9tGgͺ صIo=#""_n3 )[V=."""/-}t8gl߹,m떤N 5~j!eJ۷)S2yXsNHcMd]L4'g{7(7o4iL#HDDDD^kNvP`9@Frq &S~,,,ƯyAΝ@ϥ|Ѳ9'9ϩG||x;uh4UDDDހ3g`meE֬YH.-`zkyNUu/cM"""ҜG>?@Ċ?WaRHNNk<( Kp=("""Ov .@֠WHh ڵuv @4})Zh+rpv` aw}@쉊~bz?1=+wmmmM/|7 CiҼE u++W2x8gN\9Xo{Z}%.(:F2y-fɜ ϒe+Yb%6m!((ۻ; GCh("""""""" B$P""""""d.x3ζ;6%m4u|..,c{ӶGbcc^ٳecŒ""""""#Ba;˗o&ȑ믦$}7,R+yv6lB UfNk~JH@@ #FkqШYK4iISToeڔ([e+Inׁtn:?޷gwnIS([Gy/jۛmy^=b0+4k|/o_hΟ}TC-S}^؍ԩR?@ܹcA>)_.{B^ƍDϓ:U*zJ͸rL;/%.^'NҾsW~u-ZI*6cXr1{.w¸xɗ#Gh2-Y@.=ǑTB.ˆ>66lkOr&m6۷Ӡ E3}ʄ7r3oĂEKq&N2Ѷu j **rm޲[Ϟ򲚵l%__N5g>׭'8SrO׷;i $){!"J埛=Kv~=GRjefogүo/hoOd?i =u3xQ|ݽxuO|zz:RNMLa>Q4*a¤߸v:퓤&KbKbEjWݼ@6_&8~\46lہa[ݽ>hfҦU J*I.6i{}CF pgoaP2agɓ˸ ԟpߌ>{$73ydD7p;wXQw,--1]ý{zM """aeeB` IDATё7nOHi2QyX[=۫w:~+V^:˛獴MDDDDDD]x@HLFli"#QӛcR7:!QĽ07oݢHҖxlY?^rа~]:JJr9ri68::po/V^հJҵ=m7osq1~&*UγjZ+JT)1< z$bMDDDDDDQ.4n58tIʴ^ Kvݏл,oSH9\>$op1Mp˛шϩӴi/nXNh.=MէYFtҙ?NE9"=sʗ-cՃGpqV bbbYtgz_VZxʗ+uGwfQQL9 Pf :kkLDDHM9XlݭKg}n_pttjJU)""= [>jU*1jP7m ҧ@NRNJyC.o:BDD=Scaz3miΉEDDRfScjxr.\ÈcѤHMQvMNⷩ3iYcZ5o:};vLű)ҹWXYYfΜ=GܹuhҤIlڲKW`kcCHh(U+W]/0=7/'-_ISʏ#`@tt43fc}DGё~Kf''=8""z!Bf_guku?:uAF Xp#ζ;VMyɒȚ% nj%-?s+W%-lcգ+S'g⸟Yv? ɬ :oG9 (4fx;μSsO $..N|^=bk ŋCƌAiy/Y[[ѭK'6]ɦ+֥}c̴ɒ93ժTL.lٶ+++7On2dp.=>@Ex"d˚+W8&NF(R4nP7rU  {X[[Ѫy3 rA͓+W{ kmUf`0^2|}p`5Pܿ?K^ߘa0ySYn$ 0ի&8;+9{gĘ^oAԦd*=ɘѴh< ?A˜[ɚ%u wf{ )S$vqo/nɞH6 %D GCh("""""""" Ku|̢>s66oNtl%VWgn/[O'.Uk1$5)o߽M`߽-ADDDDIF߯}i!P8dҍ`i`xaݻv&0(W2}RLI͓$5VVVX[[۵LLeuٗ5b>k=jөk\ hԬ%~gͿ` Q .۹{M[Rڴ#'9iN;v܋j>eނ?hݮu4a݆MIj.o!""{k;ǏCԦ O|ɓ'БȟL2vs̜ LK1kodLu 9sx |; ~KΣg~p+Pnqnݗ\廡3v,^56ЫoVԩRzG~37Vdɒ=mzEDD^Q5L]˹p#..#G"E 6iD59sߦNHߧgiռgYؽ2JǾF_aeeŚu8syr1I&KAܽC3 ݻtlRl߱n22f2w2gv◟F>]:6m+!$4+ѮZs_DD>Lo`EBCM뉜Cݨ\5nH-~G:W\Mȝ Z~ޔ`Ν@"k8gFɱKO`` ޹kn PTI,,,hԠS$DDFr?ImWӱn{{;hݲ9A)2CsfPvM]S4nԀ% ?2l۾+++j Щ,Y0Y0zXR21>Xr+Qz'lll(Ue˔LkF?kLڴiyHҧK-hz8gV]?GDD>XooDm;;u 5WNNإOOf''2;9θu˟Kz;w0>yaaaaa4Z²pKpΎA濮F D%m"""j֥sG}f&KTR̖m;^ Zg28P xPhe•^C%%DFFrU*}RIܼoCO\\Ldb)\{{7ϴis->> !11ȱ} oooȑ%+W j|Ott41DGE`T{Ξ;ÿ<ҨA=[@.לrݰ0ڻ?WQbfΙÔ*QkAŒtfpqXyQȭ c~-eK">>c͎h Б#=K}ط=uygHX%Yb%~aIrL:&LzKھs7 `:a2Žs_Hvط\]6yo~D 8::)IFHD{0q" +W+Kϡ#Gu4k̩ZIa kod1Q\Y|;Xeݏ`̩888pEVX} |a}zvc,۱jbV-_ E DGG'8u?"""ɗ7kodM6i׬ uT >ROKx;Lϝ/6i O=u {vr |ָ!m[;+WӲE3rr‚7%88s/)cȚ%3ٳ"ErZ:9e"M4=wSPJ [XZZmN>[Y2,Y2_E;zEDDDDDDpj %K>Siqx4 &vӓɉI\`uݺYfbe6-,ha1: G9} wB`oooog@PPӥӓ,""""""o'bk ɓVT(.`0xƌijHwgu R587AAi4ks%v}SpLPDDDDDDDD$ _x4"6ִ[~pi]Q[fޢxyFtT4QQQ98sD5ǜy 8"wXqs;^'{!?5 r%.^ƭ`Vĺw0{|. """""""/GQ.4nzuذ&LrZŜ9{:kmyսݻtfL<9\4ZX -lmm)V5=6~ѲCG 1,_;̑(J,@y1 HaYӠ^]nSDDDR`F NOK0 M4Qw[WKAlHi:A%1"""Z<N:A,dTWBh("""""""" BDDDDDDD䣡@|4^@@ ,^Fv(W۶h?ᣨXZcNk>4mنktEDe.9dɒ=-⥜=wkkkg.٥'>>3gϱyvnA" }:ڷu6aiiɔXVaccePd 2evlشeBidzg ?'St)K_uJ.r^mo?h(.^`0j^oLcL ƚccMW@` EDD$RJm ~fN|E__dv\z*{6|ߍhdJRy ex'9I6_Ҹa}:o?DD?!qq0j M۷''ѣ7I@ߍ?uzu??v|y%лDGG0÷.İ$JH$mۛ`0٭ eJb\?WcnΜS&=""}~ƍ"""J_k`^/Z$A: IDATx6oֲ(_L>qʔk8u3,pv!ǫ2m{ΝT(WEa#wqVj&AG#EDD>`ZJDDDKmhν{\LSIz芍M-Q&gβn&ا|ɯ^ ۷5g>洨h?:Z˴M8|(S6}(4Q z,Xm=""{DDD佔6m&iwFKCYf6)RнkgjH46MEyAr۵w~EKaaabbc|lY?_^Z,fٻ|y)PlVgRy=kTITt4޽㑑Oݾr*Z{B;Sϐ>]:*W|,--ai^ƒQ|+BWDD>Ho1cFͯ1䉿aZ|[d}ҥuI6 ׮mvC\\?))^9K4jڂG;΢%hҰyϔ)mI^FHH(iҤuIvxO*ޞR%3 wBBz͏k׮"Er5Ϸ{beeI9 Yt99s-kVsےR˶>ښ1^i6)^x<8IJ(!qdZʊs{sNٳedbo}ꎈ˸~/A,-3 Mݽyp6t|㍌5BDDDDDDD䣡@$YLL !!DDD3DDDDDD䃤@[r%Vd/XCSlEOHHSkc)""""""Az@Hx8,YcprwMc/5Q|e6oΆM[(] wO dĨ?n5k @&͓=66Q>*Uk>\4A꘷J_y@Ь׮x tص+IE<@2طH*9}ɝ {{;{w*+enH,3g˰[A>JϾ/Z;u"]WD1Ào mmxqyzP XY~r珮:q֨knKVȴ1/W r7,|9r,cђet҃IO*85tɒl޺Fkft$%%ѡ];AJjjJCNGnwoΑc'ӳ;K$ /_PD1N/r[6Ǿr咧O!B!(Ҡl^.[?z}FeX}J˷u^ɛ7O355a?HHLǗ3`E4o---2SB!B=TU  ݸM]EӽKgr2$== )Q:ؐ7/J 뇑5ȐF9hđ=)_,|9m[d < XYYf)Z5iVV]O2k7_- iРiiiܹ{Ŋa[o-5aOex%W}|}o*TCQT)ΞIxb\˨SS=7oq Aȑƍ}Q)] Uz:̑C0u96yQNmyB!B|% fxiP! sA[,-?- 8$xʕ-sRhѡtlN23mlKD[[[ݫ_ġ#G =ƌBPdzlʕ_iԘGMQ*p߶+נ5-eC166愧'O[R,P\ o8/\ ؾ-zޅr%NvTbϡ#رkf?o?}011qϗٳXYZ23]nԪ/~(ZBB!B㴞ƥʛ7Ynvgۚgɕ[!Q tFR0B!,/]FreOnB!B!7C!B!B!fH D!B! !B!!!B!B|3$"B!BoBB!B#_!4Twoy=&<< , ttre_ԅB!B!ZZP8t۷  }J !B!_CCR xwۋ 5k[AŊp㆔B!z'Nѽw?֬K6pvY""B|%1BbbąBq߶ZӐN1u2];u`䰟5F [RB! p"BT5HJB!q/_dq8,!%%Կ<8wBRI=X'//]cB񯈊ᆿ?a>boSPTL> }}}:uhGfMen<%!!Nӣkgp] SQJŹ @ʠ?˾ܹ{R%K[ʮm111a T*TB!ZQ*!-M9-M^XHHP ժI !K9s/w[E4jPPLqOtuuto @*100JJXYZT*.ǡ=*V ۴fC< |X[YKX4EWW=H{ {BTt4NfX_dqӹqk3gNJ9߸Izz:[d~(\ !j}z D[&Or?B!0U 1g愯Z禓Y#)^H!RB!%%%c> ȖJsR%F?4{^…011߽wmmmʗ/tJ* ?/KB"!B|v˜ ;agS?'WH/^dܯyAJJ W}|Yx˝6C/>~Dİk>ڵiUұ-]F z-NxBdd7m኷T!_-Ÿq( (Y0 [l?tB!7fD,G`iQ;ҪE3:R3N-j׬i'N1"b>%q Ԩ1>~;0ΛUj_/bMBB۷%MƔ3  !<< ԯ[WUph\+YEllX|%=w6-[0hhiiu.Yl!4WpcbHIMr%j׬Arr w궚+W)[ƖuP(2 !feG`nn~ZbމFܼ鏝]Erc/8<3€_B!o?C4~~רQA F!b~~(W.5F!B! !B!!!B!B|3t>7%==(Y!ztJ[@{{h>>{+W֝$$$plM[5:ҥذ-ú5}#6VRCB!BOoj?C^ !!0x0 >>Lȑ֭Z0A~ݺt ЏŋqqVX*@!B!F|zZ|62;;u ׮_W12z5uː([Ɩelxr_6zzz{BOO/,6!GH 11e+VrU:cF}PlK"'N2t.K:u+%#L p[[111;1uDlK4oB!B!xȶBCP!9\cn_taYʞ,^8=;5A?lX]IJJef{޼yصu3>~(^93uǮ,q`'Ocx9@1zϟkٺigYΛB!B!+^NIQ#ܽ ?^JHL &&o<}bcm11YJiʗ+Kj( ڵiEN\|UO 尲r%=~ !B!sƼv>9=z@)F QXQ:vINѭfۨӫ˖WKɇB1wй3}C S?WO{Ti*J%)))f'**{i餤ig{33קSc-XDLSy^r#׭7eT*'11wM!M9ܩ=bea?rwQ@_ׯKɇB%!˗zuZZ0isÆKB-rLa#5˵5F_?'g)ǁAtړa?tx2CGaJWMP~QzJZ54뾫]#N`_қ_2G}| :&]{ѮMK[BtB!ZPpdz}[mŊt)ؖ&w\TR9Ki:p߾ȨhFX6qzvBF Xd!KK>ӣFuzvJTt43f`~Ph+ؽw?'Oe\ q[h>Pwٺ}']Z,Z\3>k-7%>.(ϟKY*BL+Bԗ0}B!{:}q.](Ӄ%rbNAXYJvيxzdKlڲ%ٖ.ņ5nUr IDATY< F h߶b!B!"}z $>j HJݻ!hU:P2+f9ϟ3)bͽ;ayM}ݺtSvlܲOS[S !B!!jldvv".y/%;vHUb_ k׳% BOO/,6!GH-[ϐL3r,^;b[8uSvmŜ;ȨhiV6_ͼ051ay(C|.y*:::4_!sB!B!ķ,f B5sJ{Pƶ?RkVg;cwMwVvqvYٞ7ovm݌%cilݱ+K5|{vSl~ߗ=;ٳ*U䆿;ܸOreQ(uv!.>=;a޾~ݰIjB!B C@89ek/\Liצտ^P >zC~}ӓ'5X[Z3SSl &:mW}ƍhԘ礤Ts)B!B!K>/p8ݻCٖe+Vre.r&w\xhiiqVLa*tnm-bWTѬ= \[%*:++Kc0{+0"B!Bs.;(vt:J?`ɲ; gT*3Mێ]ٽw_ʲJ"%%4 RSS/_>3޻a>M3o"bbΓ/_>ݿJvؼuժVNߴR%K3gN_;o˗/a4_OjB!BOor<| WY&?ƍo͘0aLKKc-4mfUYYT* #-[U\^clKb <+XĕbEx<2+AajfJMޙSgѤe[ٱeUU: "!vv52j8s/MǮ(thP.}zu.B!BEYl;1n ζ5gB!!7]_QB!>K32Q\wӖB!B!ķB!B!B!fH D!B! !B!!!B!B|3$"B!BoBB!B#o܀K * dIpt9۽-\jזB!B!Ŀ!PXX@R Av퉉Т};@RB!B!W|zטZL02ss7ۛ704bŠHۅB!g_S#!R ?oͺ8hCTt7y!L6Zq1B|lK)4 z6J*fM)q!Bdj¤:J¡=K]U;а'ԭSL˪ *r8_'YFhXҩ:Ӽwl9|[w#7-̓Eܾs'MQ}|IIMELu;5vg]@KK*=c*'N׏4+WbtttM'Q|qlGae`NN~UH !"S3Nc6 0ixjTs`Yҕ+]]f|2hiih\lmKSxqΞ;RpބܽGEf3rby*Ykk-r Ȩ(~}zqc/}+W.C,--޲u;6n/->?r:ѣ: $vmF!Y|7,[R.22;w3R@?Fu~p{fM5C:5"../eij׬nQ@_%5/_dR"|^{ xwJ@K^$%%ѯO/v:u}«RX+WIKK#99r%Wf];qßӞGp߶7oM&Gٺ}'ZZZ<{KN޵}RJHOgTsȼӧϘ=oahhȲE x.:::9ŊjԨJK?˾ܹ{R%K{ej*͙8 ;'ʬn:E& ,E/~׈pBX[plof⥤)ӈ|̜:9y v"q G`޻\r];AX66L`RvދݺvO<2U2q//[[Y|%)))$%%QhF Q'߸'}.y=87ji `Ū9{#$'Ǟ׎;00'66ƍգ+ݷsQLMMXpLɑYp璘WfqӋeq߸el9g*,, ;TXS&QXQ\,66s߾s&Qݡ*˗tr9q{u R͡ Wf+y|dTwB x AAL#a7<Ǐ/aGp1Mat؞c.^/Xj9o!%5dJ%? Il\kWzRWw AWWM&99u:,-,5g> Y}FTfP;wnq[\N-rfcRas.W`7͞>{;g1zP8Sl/[gϨY]$|=-7YD 7'55kk+V,uaq\auޕQr%]2p0ڷkMpK#ܼ|[iղ9DJj .VEWWSg:uhdž5n1sB}KXfxٶiB!L_?'~ߵu20A@}V`_َ*XJ/!M###,-޿k @{2b`v#zQ+EXJ%4ni]|Wvӳ{W dTw %аWOTiy|cbla]"6kQTܽwPwݳ;*EKĩ1VV4nԀTN:i9AllZZZ̚6c;A@c~7 ݻÊUkZ?9&UT*+aeiA`Ppգ[g Ңq< GY?.K\֫_57~ĩ1)))x<c'pl{63%4,5k뉍5V< Jy(4L9mJ-Xy_=խS#/VM(_, 4oDX]=tBPн[gM0ꇾ xYz6,--hP;:wl9u2uj|Bc'ucFjZ+̞JrԭSeݰ:92QSM.%Kps|52BGGAU{sب!9sƚB b;7NDī rX.n*V G{bQv+ЮM+WV4qlL`&3~{N1}~$ 'K !⳵m݂kcddDɽv{7@%|ś'O133߸@E4:9j>Wgؾs7׮kk53CLyѼ~³XRSSIȱڶ3|Nҿo32-B ~VyUwuj1"Nb_َ0cHOOǢp!SR2Mw`~27uFٽ ]?o]S9LOWW=4- ߸Izz:[d~(\ϳ\~D2۵gur._  q1ZlǙ9;ze-7Jy㧁q]wѻgwZ6om{R~HjU155#TᣴhDu,3tG+Y{m)4>g=aOxY4*RL_(u#= u4Ͻz --ܿ޻} BB! ###rNh_u+n_n#ng@>6a,1BBeo͛RTI;61q b<}K\R(̟=.궊?c8T}Vt/P՞;ٸŝ[rӋ ;xOkϹׁGfcKı1m`meQTBȟPk7yZTٝkbZϚåWV!mmm:6f9c=Y43S|Ljj*LZkeIIx٪TT(_93ek+c[Z?RB!Z/W{dX}Q@~ ZZZ(Stҥ4lIxnܱ;feͺ 0LM3;˗ thך-נP(5III\{}2{ ..l/ҥJwM3fx~{w(BBRhZ4k®=o_F  …8w"IT*>Kaz޻ۉ&$4M[3'ڤplFCT**G$q/M]]ؖ. J׫q=3 z?G)Ŷt)ttti`]r</^r vړyWZ//9եX"n++KV]iqVU 'mR4jPk9v“"#Xi W}omemRɬ#$<KJr aOpC(Qva=CDOO2)X<lJ;A4{CR1x(nzKkA ڵn6zaߺMBKxq(u4yyS1>~;0Λ&M^-cKtt +VelrʥWѡxb*S9y-[wp9cmX̀}g<|@՘ocҢ|+ADDDbjbBя񶤤d5|H`޼yN-vޫښO&gYz6 ;!QQiY0Ծ.^bܻU9}!O(bcE}ʖ`>ru7y4RZ5tuu(QW}Xf=>rY"""ɛ7/W}|ٷ߃8ChP.S;DEG'OXt91<ƶt)+FUʜx+װ}nؾ->b5DEGq +qU6o'>>ҨA=dN9x0lo ˩Zw)Ё nB-Wum 辳ضRDDGֹc{Ma˶:rMk#rkiis^,9yݻߵo*(MAB <|tu=bG ڬfPZ!7'Y)FF`nvvf [A) ƍ9s#jy(? c3uƞ}4ۼ}hԴe4ծ  e_qjކN-;MTaC݆Mhؤ%g0y՚uٸٝ~?Eێ19Qc'Լ u8ѭW_.^_`I4jڒ@"""TnJ.[fS߱?5p1-vqVL6/_~R Yhe /0]g:}hAL't O?Dߎ`{|| xס#q߶C|ծϩgܽt`1Yߓ~:<{;#gCؾs7n&tYwPBb"UkeܯqjކMhӡ+z#>>^ص'1aՏ`R~>vӐũ=zܓm.Οoxk?~‹]z9Zg݆MۅB!,d e\w= kgL iؠ /#8$~@24oIJEܽwv} 2F 677/ R%cl΀~k fӶc7QbLϭT*ZŞ!{`ܯ8|`7evb8gzzzܾszH]e}o\y>BHJJlc|#"ٰ }}}~> g%6alnpmڻ7sNN&Al{3޵Bik֬U[{SFA"dON~NABs]<{yǟHC^Q:sn*΅%8>8Ε)ӽ %;ĠO6qqls%II 2EKn(S'ӨykE}:8q ۶[0d?|7:kgŒ8뮕K/KGēb>*e_N8Jp,hPyv䌓l݄qncJv(Iepn.c=ݠg G;tܮ1)t؁ʕ*R*?g~0stAWr%֮XB_K;k:)))TU<ޞ :l$}`bb8S';vw9ڹkKycyzz:bd Ș?//3~kA?>u ֮Uk8u:}N?rߏo5jTg9ǎGҿϗbjjJ&7OagkO^ʹ'[ZZRPA1m]ATҪE3R5nݾc؁T(yqŸMPI?s|zTQ*+SJsaYoeT_~WDt+i?'h{GV7m^20x 5APy-RM#§Q3ύ7_꼨]']j\]\gmDN(Z0*Ο':::S6:173CTRlioV_Z-J[neB![ΝХ XY_p.j6䱢dSU#X?֖аp͋9]x_`ᢥ !]%>>3O\2*Ȉd;55__cIJLtDn:";u 99oGxx5{1bWXXXz+_,tŋ1rW <,t~ =Zj='W.n὇cWR})T =q,HąBφm]w5Aҝ+* JRD@XX/eJp@xp*ceq,툥shx W/W\rʅCi8y%;qn5kC~ﶰvMouz7p;Ѥ!%%5}l k)'1JBAra׹OZL6+W12Rq=֩GRI~gUЦe's33Eπ!Xq ]:f[o?g_m[m$$&2aTf̞̩qtu;s/]/hFne_vϏ>)١$:B'2^^4/>嵗sf6fxvMq,m--sV.]6ɉZ5? PK}*Yf-&M(֢}Kf~bn6;d}SE:l( \HxܪxȶK/x7 . n^Jgtƍ +,Ԕspȿlz-LMMS022nZt066FѣC^ +_ll~;\Ky {ʕ*=ٗkёO۷}DxJAJ+PbZ-Ș?q`KףB!x;^)Uز:t;;h2 eiZGڰxr4 9|(ujSsqv&99Y?{/j^UP(̞I$''}zJr ),QRIlvޓc"a:acc r?{>{.Su6阚Pd3zNvt:.hPaR"az<IOO'4,={ oF?1ڄT6Mº5\\~n׋!12͚6 3g J5kd ㉌b ԭ]ˠr7o҈q_9T&*b`kgkRBMne(ӭ 17cP(ܸ0%ڔ /ԄT\rce͊AaL::b2NtlPy ̝;ߏ ŋer5 ^D_u3x%Xۯ;.>Q)=s^bnkɒP3 Nٵsƌ@fP*r)|=d o.TF**V(i=.OX΅Oޗ|zѵ>>´-UzJEl4GꭔgI!9%O0:2?'Na6?.[nO·Ǘʕre3]Kڵ`?q{{{?G-5!--KxX8TPNf߁4kJwSʤkYnOm\ϸrvwB!o"&A.PƻqC5!;|/׶\O@lÊWs77nf9MGx_ZSJe!B'Nee?g,If!Qrx^c 䰘XNVKbb[mZ*M/^shDB!H@w'C>Jx4f̚CxxffNNދѧ?7n3dPWJ>,B!@#cooǪe˲>o@!B!^tB!B!GC!B!B!hH D!B! !B!R/^'}06E~}05ͼ\Z̟0jԸB!֮]{xdž5+x ѤQC5 ,?G*S!x[Ajп?½{uÇGB!^`lۑJ^5iݾkm[xZWMu>zIe!]<#HOvtI7`WLi9aBW^EHj[ZBٲ"O k6mB!A|‚_ _/[~^]div$Jz|E.LӬ,۲>˲CoL1{7V7s'd9aBWr.Gݻ/_g6oF@)HB!ޔ=v~Z{!+ ዧ;NNWHM !n'99nݦJJ1 cYj gΞAYj !wQb7b6lɆ153v@& gO?Ēe+ؾc>ujB}IJJgw_:vh/Xt9,,8q4)\EAN>!o;wB.`eOCzRB!x\eT\_g9}.HEZZ }ĩ|8,s&:&{B,a}V]Ǣ173cQ5u݄vښ_O6r'. M떬^iS&2{|}9:]6YUE VPA oGto4mܐ5Iskqqq&,<++SMB9{1ґiS&S077:O\ (# \[@κOÇ0y2YCBօBaɷgKeZ&_޼v$U*Wsssn߹@wsXM&(R0oKm9},] Kܸȏw5/J/ƈa_QңW!-- RII:t^UQ˯-Y"q{vYs]z>u1 4 t$SNԨE j-S;ݻts(iiixUuvpq·B!+5Uغ>@T*ɫ6F;'UeN:w?H_$'BjĈ{bD}J~F KX~\!%W\(uAXX8.nw!WP(9<.^ƚuy.B5p7B\ %=JpiΝ'{hբ)B`\zOM\ ̰!U;SLMxŊR@ *}!k@BBڴƚʕ*m~޻K( .^!**B 2 KhX8+Z[kΞ;9t(yt;OdT11*&pNaaFa_[oYkkN:;Xl%obe:9`###8H"iѬBJHLp1̻"&AhĥK-[FGickH ![KyVƿw欹ߴv=w_bkc'f~H&(3Ӈ`Ӗm\'VqM.[I@n\B!IO8OϒY1T) Cp?\EKV .89:Rݫ*#%%9B!{FRB!hj_-WՒ}~'LFVKwd=:;av56iY0 !# !ʙ}}aiٶ#ƏX"?x(#ۓKdَRon:oKqHNn={윗\S>uBA@$%%jeuvfϝOTt4c),B<Nj155AU^'G~ `IDAT4B!>XxNT7|kB``u 3q&-۲zb t#8vhq@ ,9WM\ݞ9fol+W%{0`pw/8t(3~ÃqԬQ=KטJ^5د7%<"^U1+stBCèQ:nݦ}V4mH!x˶w KΔj- P[1  Eɜd!)A߿]Q=zAB!w!_Μguu`oǜ_✏+W@J/NmGP#ʍt7V-Xl!Xq3#7T*iڤ!wB\%,<j5fffDEESݝy(W4;vcڳ?`P5JNRRSM޼yo`ʕ+ @ddvy "uukH`H!DHh zOC.,4-N,iyq }>J"/otXW:(P!X 5غ:wlzU@5h66688g \_ȌYs?ZL:vqq$%%axT\I??BMsvŒlnaa?2y fΞG)^( e8YTt4W[7B!\p,*#iy/Fq}Wِi`M8RB! Y.] S]B~đV9BI9~&LogΟ=w>3n̷/e+8~hOm;2|R U+I!rIL6ϹQ sK]DT2RrFѡ ȃB#KnilsKGvK/]Fʩ}[P(u D<vDW?TRYB!^;&t,y<=KfYH*~fq=x"E acmѿ(%K !o6-=ˮ~*90`VuR2P Y{KAF'w}f 8hJ:$?B!BBB!Bѐ!B!;*B!0EJD-!B;ɘ)JGFJ!EDDTŠ!K-~IghAk˱B!>**KkfG .rM !BRA4 ue(U!B<###J)%!BB !B!@R;B!B!xDGEcfnyj DI*B!B)L@B!B!ćHr!B!⣡LNJjB!B!ć.1!!V !B!B|/^8:_Ae˗sq0RͤZB!B!ILH=s.:?'ҫ!SIENDB`././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1643920524.1845157 ReText-7.2.3/icons/0000755000175000017500000000000000000000000013454 5ustar00dmitrydmitry././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/COPYING0000664000175000017500000002271600000000000014521 0ustar00dmitrydmitryThe Oxygen Icon Theme Copyright (C) 2007 Nuno Pinheiro Copyright (C) 2007 David Vignoni Copyright (C) 2007 David Miller Copyright (C) 2007 Johann Ollivier Lapeyre Copyright (C) 2007 Kenneth Wimer Copyright (C) 2007 Riccardo Iaconelli and others This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . Clarification: The GNU Lesser General Public License or LGPL is written for software libraries in the first place. We expressly want the LGPL to be valid for this artwork library too. KDE Oxygen theme icons is a special kind of software library, it is an artwork library, it's elements can be used in a Graphical User Interface, or GUI. Source code, for this library means: - where they exist, SVG; - otherwise, if applicable, the multi-layered formats xcf or psd, or otherwise png. The LGPL in some sections obliges you to make the files carry notices. With images this is in some cases impossible or hardly useful. With this library a notice is placed at a prominent place in the directory containing the elements. You may follow this practice. The exception in section 5 of the GNU Lesser General Public License covers the use of elements of this art library in a GUI. kde-artists [at] kde.org ----- GNU LESSER 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. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser 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 Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/README.md0000664000175000017500000000074200000000000014740 0ustar00dmitrydmitryKDE Oxygen theme icons ---------------------- The icons in this directory are a subset of the [KDE Oxygen theme icons][1]. See the COPYING file for a copy of the LGPL and some notes about how the license applies to these icons. The SVG source format of these icons is available from the [KDE GitHub Mirror][2]. KDE Homepage: [http://www.kde.org/][3] [1]: https://github.com/KDE/oxygen-icons [2]: https://github.com/KDE/oxygen-icons/tree/master/scalable [3]: http://www.kde.org/ ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/application-exit.png0000664000175000017500000000215600000000000017442 0ustar00dmitrydmitryPNG  IHDRĴl; pHYsϐtIME  ҡabKGDIDATxڵ_hUƿgfw6ِ MIMI`#DHE҆C4(J+bOyRԧXi(H$&6knSEnٝٹ3lZ"ss࿨ B W sv{קzT6˃w{ ܿ{|<%A-/M]]pDV?=! N=oU.ߔceiT_F&sg1t]@ϝ=9^X;hLm{$wc!N$0}IN\K /"n*WHP`EJK>]4nm*;KtקtW{*cUBe™3i kc[o/ e$zzyR(RC^ ։VASbQº:1 ٮnܔ\>BuVV079u9ľz0w}7wbaJ-%?ʭ<ϡlw$k#f!j$O=Ͽ 2@'2qzҳ֑=O\XQx}dbZ_ĥp.J)!bUć)<UwX)t 딤-'{V D IK^ 1H e} Bzu7P|8@#F߄Ik3l`368Sŷ $Mt#0'FАY$uᣨ} |?'fEgBR?B<Qk8}5h4 4~iIFxeNu{d:`lS4(=H$557߂Jb ~L#eWKpK6 (:@8e:>53owk/…$Y~0#8+cPbA gs(@/ bF "V [SXr}{ۣ/&"0 J I#,=@Iә2 j<Xf<) fy56؅'>Z?(!3*?lIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/application-pdf.png0000664000175000017500000000216400000000000017241 0ustar00dmitrydmitryPNG  IHDRĴl;sRGBbKGD pHYs cytIME xIDAT8˅MhTWyLjTbDB"XˊK]DEB1 \ ܈ЄV,(tU1R*&$ڗ1.&3h\.ssn_6̲,%uoOkeDV߁mG1DZq,n$?7RuT$IXժ$q8#mi0S [9γglڵ|g'ol^°F&|G@DNej҅ y,"mۤi, 1ƠVɰTRd zo&ûa*׮b Y@a~=ֹs <1;0@#$A{^PKX#Rr:; ð_| C`&ڻ?n(D)RIbupp&'Yy'&纘b1l A& CwzoBكھto̟:IkKm z >\ܕ+޸ӨL$Ik5ݻWqttxZ fT._B lc `q~SwW ٳTA'3 G?G"C.|{ٲQ(N _s8|$/@W]R-'UHa~74Xףk8omoUѽ&r(ʶk{ چ4"Sw5 "Tj+Pmq=yo' Nw"~w>!vI)lvBЀfwV&wSeuiv;,˒."t%#7 #̂n¾I,// aT*NժNԱs}||G}kڧlW(PxzҼvL6MM4KDtr98xB<~"7ZlŋRt_/E Y_pa^~0~߲8Gxxo eTZ}gp`8w,KKEA,Ǩ[sC~"NQPcIZ;3jN27пnN@HT%Vv2q733ol7Y#*,m<*b*j5rfVQH8GVߪUqd+tfr[|[_Yg7]]N}s]bYUzA}i ("CSrρp*DB)8t& J5 .mHb19Nj3K p &fFJ4mOt2Ts2CVsKHjRwt@YU#fNVtJ H'y\ s fV8iJD3 (lM45 ]Iغq;k+w}҅zXb}*3Fa/5D 'OuL  }r**[griw lf f4bW=DS,hl1~Q]IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/document-preview.png0000664000175000017500000000213200000000000017457 0ustar00dmitrydmitryPNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxڵ]H[g䜓sLmaT-mݨl`7e7BVW,K;/v3X֡v!%Ft][hj|{+ vic<=|}#0H בߴA L3E b? Ereg@ *N E`龹I(0 οa&|{{[EO{?;|ktԇ hxud2>srurfW?M"go ~y4vQs@]P%TTB ~Kȥz&g 2 { UadTFR4G.݊[[P [i&V쒅Q7jAʦHCKkjjNQ{ Z%$f!# 0гj `PH1C:sdqiSa8aZQrx /*5)di]͹ aj&Z[[Wi0~:;ڢÑD1!ҡ>SF+t˸MTTFQ/@ $ rJC,-- $ۭsooMw/]`/v;(b1LMM!Lu6x<.<)f"K,0*eYn ;66Z}L"opS)EQ١SBq~uիqs0UijYY##׻gffG"ϼw`vv288@ljD?yłMR),ޟ ;B__"x`0pR;ONgnbb"D3o QBQ d1^kIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/document-print-preview.png0000664000175000017500000000255200000000000020617 0ustar00dmitrydmitryPNG  IHDRj sRGB pHYs B(xtIME  lRjPLTE666::: 111aa^aaa><9sssѐǧы̌䎎==;=== l~t6F$$$%%$&'''((())))Q**)++*--,333555;;;;<51<<<===CCCDDDEEEEIIIIcKKKLKILLLONMPPQSSRSjUUUXYYYZq[[[]aa`bfmbeeegjjjjkkkklllmmmnnmnnnppprrrsnlsssttsv~wwwxxx{{z|هȈ݊–욚ޜ񝧶¯óƣ/9tRNS%((.0345aFJ@~FNT' > n1fU|Dn+ |vԕӏЄRrlkj.[Pޠe\K5i[3NO{k~5Mٷx^Ma6BeSjф!ҼrՐxUdc%J1״Ф'"p@IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/document-print.png0000664000175000017500000000156000000000000017136 0ustar00dmitrydmitryPNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxڵ=H[Qߛ{O!Ak%өCpP;wŭ"Y+th5m!b41?{x/|\8s~hJ)i80UE.Fojv'3sjڻT*T* ]7$# 뎊 n\08||rL +@(EpĊ ?|>;9k/* Ny&s[-6-;ܲsF>5MPGIlb-B'p8ihs[T*8u x`Zlmm DB ##~\&auuiNu(&ILNN( C[XGY2-#[g_a\01+++-ax#tw?a5ՏѤX..ED*Qjxv^@uB%hC Xa}Jiڭ  :mEWW9w5^g2)Ӭ(]ɑS7IU0 VAAA^7*0%* >ԥaIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/document-save-as.png0000664000175000017500000000232100000000000017335 0ustar00dmitrydmitryPNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<NIDATxڵmlE{* J[l b@LK/Z*؊Zb%! /@BP 1AH  UFP- \KKzwۻٻu6Yf63>8t]`ieUO ȱm}s=N%~C((J 7[عm H`NCC]ݔc~\ ]ะ0b3veeb{#yi:!( Wҭ D.1԰g{W+oM_&<Ӏ?\D$*k]Op,LWC dYú Rlm0XZC$GoX茅g; TmcaS-o9+9_U$` `9=13i?:#&uJ.=qgzV,QXE (3y[lfױs3ޢy&xf*65A!I\Ī-R>EF~&ol%A&+ޱ,sBV^⦪du]2nL0$28"R̚ZH<4iΟ"+/;n~LKNK/OSiڗjG͵YHE D~*Sn1M|guR\m s]_ҥ%0<lLZRJ[hig2YJ3NR`st>6>uqݼ09R(DBsA8p<\C097Y+$ƱEKM,qsѕ)d2'qXc:`fI`ݚոڗCqjQ8ma8{ʂ5'wt BPi>9ɍ S;~v\4ĹaV:r#dd̰\fw0:[dp}@VQl4?O!0T8) C<}iZًr^z{{%~!"8ȢvaCpN@XX z S pnh_o4us1c~"IIQQs[,fjoLv}/3 [ kʃHyoRO58@~;Bb4T[woN JX< zٿ 6C0s$ftJb`{fi v//F٫/Ds!UՍ4`Ҽ8j\(l+P7>v yhũL0o{͑WxR/)E}JIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/edit-cut.png0000664000175000017500000000110000000000000015672 0ustar00dmitrydmitryPNG  IHDRnsBITUF pHYs B(xtEXtSoftwarewww.inkscape.org<IDATxڕOHqtahKCCRz AyPt < g#b a%f[Pα-7(lsH;1HnbsG}| 7'ű3ƔM6 ӝ黣aPA^٭Ic?T =B)lEJK˸ki\mKR-C-C^>>AAAD GGGIIIK( N( RD9RRRTTTUUUX(YVT]]]_<"`-`?%dH0fbagREic`l4ooopVFtG!w8xDxxx{]C|A |eP`4b9c:rKyUgFtRNS #'.3CYfaڴ*IDATxڵMR0F$m!H-Pʀٸrƅ'p9qԊEhJ6:зo=DeZZ>duؠY鯆ӶaFշ6zBT?SmN( vxTzp*˥Ȼo$uS=ұq]/9)>Q}=x|YO]O&do+3FL+[+r:esT-;L?UvE3`,XLsC!]# fh| isƷtj2B-6_29, IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/edit-paste.png0000664000175000017500000000140300000000000016221 0ustar00dmitrydmitryPNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<IDATxڝOQ㪌aDPA^[ $[7/A.]cREl![-Z렸uF~agx;od/x|0NJZ*PL&mDFF3T$IAk+˗r;ʸ\.|kNͮ/Q5 zTzĂE! ݋D" $ fbSpXۇA^N#aJvҧ93fn[K/ (+0D͘*i͑^.@/fOi>x<~[Sh˲ D~E&]52k Jd?IEGpAL 34'9T.V, 48:Taj1.>טx<~{R>1ica߯uczـV.`Ʊh4*_YsZG]]}:]=vfvkBV7^\=yX.,\Ԟwv@apƓ5_YЯH;"+ a{ 73e3z l6o`Љq ̥CwCI&^t</cKc͡L?~xvsFDf,IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/edit-redo.png0000664000175000017500000000233500000000000016043 0ustar00dmitrydmitryPNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<ZIDATxڵk\Uǿw&L&GټZhE+VBPх΍_Tp!pP(RRE6&ih$޹Ð6pq؉>񘒹R]~sfyx'Љx8܄0I\ҋwroI)9 z![Oaݡ"z"0.SuX.azX& '{w N ONT; v !lm XMhDkwǞD\;~D#8`@B TiKqվz]UV dPHA`|2 7aHP@jt4ّHD) lVAF97P/bhM ef ~T?;FU*WtTX$EETP_eM\b֕Rp;Q JFIxG.\.P2U8~] o+>S&"}`H~XȤحmSqip؃dp<Iԕ ZyAUg# yH6O~[;4"WZ_^5"oA)BC4uaΝ l*A[vT "(% k:/#PQ\zV`|Imh"ճeak({bÖ}7X ԬόR:CBK9Cq) kJ$ WVh#Qb!r وlahWCW;6IW Tp[Y0p"c<7n) d}:|8 #9G+qռR'x[e͎=EX'LFib2_/EJZI fM#sqp476fNc&BJA*'CG- Ȃ$qY [Z[JvWámK';"aUGp&DU*l| aUO r[ :EM7n'AA!ʵۋ~>p#2FZARyUxRX=9An~"@IئtuͼV*s[٤tdl0?.ԁOmGG yIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/go-next.png0000664000175000017500000000165400000000000015553 0ustar00dmitrydmitryPNG  IHDRĴl;bKGD pHYs cytIME /9IDATxݔohVUǿ}={ 4*(i$6E %T,|")Bd( ^:TЬ)D)ksϞ{ۓ=̦"}/ps3t\o_'܇`,Z_/'=O]7uS׷ ^W4It1>.Q K^7mhX{-J=_@b,KF1t!O.\x㶯ZUel") iUE %;fLfsa7~GԼ]q]@*l k [kћ1rlnͷ%|GE&H<Ц^?l{[^GNˢq9p] !Pk!]B> cwy6켲D ߲D ? U$]"V #?([au|ԱH [0B@?gᆫrG/;aD:p4#-{Mr{hfD,ݺȾ\lo(:q4} ]ge֟޼AIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/go-previous.png0000664000175000017500000000161300000000000016444 0ustar00dmitrydmitryPNG  IHDRĴl;bKGD pHYs cytIME 4$z,IDATxݓIhA_UwLY-&* x4ADA<EozS8B\.ndzz;&*z5 _S7_XZ1nJSɋ-UN4ͮntu/ 5"(7ͪ]c]Υo*ҚaWϮi;s͌xق'Əl^5V A0,fQ1oA bТ?nT%,^~h۪z(܂E^c!K D)h$P>}'h7gTvضBL˚+6PČlqtϙOА0`J?s<\3Ҷ}CVɪ&8N';;4_yy>aanف8nh=\SϾڊ|޾yM/BzɁTW`sS㘘Lͻ[u#}ZB>/VD:*&|3춚AσKOۻs5vu5X4Sjj;+Utٳ9GV}WQ:B{*yF,ijlrAMyZK `Mmjie](n:^JY!R*<QK b@UiUٞ?ÃC.+3ڏvUnl+=K^Xl v[^ Ft"~G̏r$`4DJPXX]d < VlGFc.c`Tsc!$"VۍuHm+]Hq;f)T bo:u} R5е I;8Rk G6 斀y ~A[RCAMp=kHh; l t=#drԕcH .$;\IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/internet-web-browser.png0000664000175000017500000000173400000000000020255 0ustar00dmitrydmitryPNG  IHDRĴl;bKGD pHYs^tIME  4Q?iIDATxՔKlUyx<؎[v[qS$Ef1@ODY\+ZfeR">b}s3Gn32$c4]ذ{\ 'a; ' 'fW6cV/W`ڨ4D (*KhX]e9Uq=M !?&kvJ"v$1QoӖe*R:T'IGAd~B&৒"UEiQ;"igB,f/Sh"-zTI-oooR\o`H=bQCft$ПG9esG$}c0N"+.** **.II]~~www~~MIC**% **1IIe~~~~UIG**(**4IIj~~eee~~ZII+****5IIl}}[[[}}]II-****6IIm}}}}^II.****6IIm}}}}^II.****6IIm}}}}^II.****6HHl}}}}^HH.****6HHl}}}}^HH.****6HHl}}[[[}}^HH.*)**6HHl}} }}^HH.*)**6HHl}};;;PPPGGG^^^}}^HH.*)**6HHl}}###}}^HH.*)**6HHl}}GGGBBB___444}}^HH.*)**6HHl}}+++}}^HH.*)**6HHl}}\\\ }}^HH.*)**6HHl}}kkkOOO}}^HH.*)**6HHl}} ^^^}}^HH.*)))5GGj||zzzxxxJJJ;;;||]GG-)())5GGj||EEE:::||]GG-)())5GGj||---@@@||]GG-)())5GGj||EEE111{{{||]GG-)())4FFj{{ RRR^^^iiiooosssssssssnnn555{{\FF,)())4FFj{{pppJJJfffffffffffffffffffffggg>>>999{{\FF,)())4FFj{{PPPaaaffffffffffffffffffffffffVVVBBBVVV___{{\FF,)())4FFizz...oooffffffffffffffffffffffffqqqxxxiiizz[FF,)())4FFizz tttffffffffffffffffffffffffhhhzz[FF,)())4FFizzpppfffffffffffffffffffffffffff\\\888 zz[FF,)(((3FFiyy gggfffffffffffffffffffffffffffxxx%%%yyZFF+('((3FFiyy---ffffffffffffffffffffffffffffffkkkBBByyZFF+('((3FFiyyzzzFFFfffffffffffffffffffffffffffffffffQQQLLL~~~yyZFF+('((3FFiyyeeeWWWfffffffffffffffffffffffffffffffffsss YYYyyZFF+('((3FFiyyPPPeeefffffffffffffffffffffffffffffffffnnn'''IIIyyZFF+('((3FFhyy:::nnnffffffffffffffffffffffffffffffffffffBBB]]]lll"""yyZFF+((((3FFhyy%%%rrrffffffffffffffffffffffffffffffffffffooo yyZFF+((((3FFhyyvvvfffffffffffffffffflllsssvvvvvvtttqqq___aaa...yyZFF+((((3FFhyyJJJKKK===---:::___yyZFF+((((3EEhxx'''%%%xxYEE+((((3EEhxx$7!!J''[++i++Y CCCxxYEE+((((3EEhxx00m444422--''!!uuuxxYEE+((''2DDgww""&&&"""wwXDD*''''2DDgww**2wwXDD*''''2DDgww00''SyyyZZZwwXDD*''''2DDgww%%%4400n\\\mmmwwXDD*''''2DDgww8886644???wwXDD*''''2DDgwwKKK55|22"""PPP555wwXDD*''''2DDgww^^^22m**wwXDD*''''2DDgwwqqq,,[JJJJJJwwXDD*''''2DDfvv$$H vvXDD*''''2DDfvv29HHHbbbvvXDD*''''2DDfvv))Xsss vvXDD*''''2DDfvv22sVVVFFFnnnvvXDD*''''2DDfvv!!44999 vvXDD*''''2DDevv))11EEEqqqvvWDD*''''2DDevv//(( vvWDD*''''2DDduu&&&33CCCtttuuWDD*''&&1CCcuu99955 uuWCC)&&&&1CCcuuLLL44|?AAAvvvuuWCC)&&&&1CCcuu___11m,,^mmmuuWCC)&&&&1CCcuurrr,,]22vPPP555zzzuuWCC)&&&&1CCcuu$$H44333uuWCC)&&&&1CCcuu211,,,}}}uuWCC)&&&&0BBctt''ttVBB(&&&&0BBcssssUBB(&&&&0BBcss!!"ssUBB(&&&&0BBcss))##EssUBB(&&&&0BBcss//..bhhhggg"""ssUBB(&&&&0BBcss&&&2244{JJJssUBB(&&&&0AAcrr9994444---AAA...rrTAA(&&&&0AAcrrMMM44}//rrTAA(&&&&0AAbqq```11n%%KKKqqTAA(&&&&0AAbqqsss,,\aaaqqTAA(&&&&0AAbqq$$J)nnnqqTAA(&&&&0AAbqq3%%JqqTAA(&&&&0AAbqq00gbbbSSSqqTAA(&&&&0AAbqq55DDD===qqTAA(&&&&0AAbqq44((( qqTAA(&&&&0AAbqq((.. }}}qqTAA(&&&&0AAapp..##+++666ppSAA(&&&&0AAapp(((22 BBBppSAA(&&&&0AAapp;;;441LLLppSAA(&&&&0AAappNNN44}))RzzzMMMaaappSAA(&&&&0AAappaaa11n22m\\\EEE444ppSAA(&&&&0@@`ppttt,,^55???999ppR@@(&&%%/??_pp$$J33!!!$$$ppR??'%% $$.>>^nn4,, nnQ>>&$$ $$.>>^nn ^^^nnQ>>&$$ $$.>>^nn &&&wwwnnQ>>&$$ $$.>>^nn8\\\vvvnnQ>>&$$ $$.>>^nn''++XtttnnQ>>&$$ $$.>>^nn--33sWWW$$$nnQ>>&$$ $$.>>^nn(((2255999nnQ>>&$$ $$.>>^nn;;;4422nnnnnQ>>&$$ $$.>>]mmOOO33~**666IIImmQ>>&$$ $$.>>]mmbbb11o>>> 555JJJbbbuuummQ>>&$$ $$.>>]mmuuu++^ 777[[[mmQ>>&$$ $$.>>]mm##J9 BBBzzzmmQ>>&$$ $$.>>]mm4--^ <<>&$$ $$.==]ll 33w!!!kkkllP==&$$ $$.==]ll 55bbbllP==&$$ $$.==]kk22,,,kkP==&$$ $$.==]kk&&((ccckkP==&$$ $$.==]kk--OOOkkP==&$$ $$.==]kk(((22"\\\kkP==&$$ $$.==]kk<<<33$$FIII```tttnnnWWW???hhhkkP==&$$ $$.==]kkOOO33~//eiiioooKKK kkP==&$$ ##-==\kkccc00p44|KKK```&&&EEEkkO==&## ##-==\kkwww++_55---QQQ kkO==&## ##-==\kk$$K//QQQ [[[kkO==&## ##-==\kk5$$///111kkO==&## ##-==\kk  WWWkkO==&## ##-==\kk ,jjjkkO==&## ##-==\kk''NNNNkkO==&## ##,<<[jj&&00kcccKKKjjN<<&## ""+;;[ii--44EEEiiN;;%"" ""+;;Zii)))1133&&&WWWiiM;;%"" ""+;;Zii<<<33,, iiM;;%"" ""+;;ZiiQQQ33 888iiM;;%"" ""+;;Ziiddd00p777[[[iiM;;%"" ""+;;Ziiwww++_5555iiM;;%"" ""+;;Zii$$K))U{{{777&&&iiM;;%"" ""+;;Zii422q]]]555tttiiM;;%"" ""+;;Zii 44>>>iiM;;%"" ""+;;Yhh 22 dddhhM;;%"" ""+;;Yhh** hhM;;%"" ""+;;Yhh''333~~~hhM;;%"" ""+;;Yhh-- hhM;;%"" ""+;;Yhh)))22=___hhM;;%"" !!*99Wff>>>33++]uuummmffK99$!! !!*99WffQQQ33~22vWWWHHH***ffK99$!! !!*99Weeeee00o44888eeK99$!! !!*99Weeyyy++^00eeK99$!! !!*99Wee##J&&AAA{{{eeK99$!! !!*99Wee4{{{___eeK99$!! !!*99Wee !DDDeeK99$!! !!*99Wee !!E)))eeK99$!! !!*99Wee,,coooeeK99$!! !!*99Wee''22|QQQeeK99$!! !!*99Wee--33333%%%eeK99$!! !!*99Wee+++22--777eeK99$!! !!*99Wee>>>44##vvvNNNeeK99$!! !!*99WeeRRR33~ HHHwwweeK99$!! !!*99Weefff11o*eeK99$!!  )88Wddyyy++^##MddJ88#   (88Vdd##J..ijjjMMMddI88#   (88Ucc344KKK]]]ccI88#   (88Ucc 33---UUUccI88#   (88Ucc--ccI88#   (88Ucc""uuuccI88#   (88Ucc'' HHH ccI88#   (88Ucc...~~~kkkccI88#  '77Tbb+++22''P bbH77" '77Tbb???4411lcccbbH77" '77TaaSSS33}66EEE000aaG77" '77Taahhh11o55&&&mmmaaG77" '77Taa{{{++^.. KKKaaG77" '77Taa##I##kkkaaG77" '77Taa3 QQQ???aaG77" '77Taa 2999aaG77" '66S``++R|||%%%999``G66" '66R__44n]]]$$$888__G66" '66R__''99???"""NNN__G66" '66R__//77 WWW ooo__G66" '66R__,,,3300iii__G66" '66R__@@@44%%NNN @@@__G66" '66R__TTT44} lll000__G66" '66R__hhh11n5OOO\\\__G66" '66R__|||++]..Tvvv|||XXX444'''__G66" '66Q__##H88oWWWvvvcccMMM999&&&+++__G66" '66Q__2;;222__G66" '66Q__ 99CCC__G66" '66Q__11!!!{{{__G66" &55P^^%% WWW^^F55! &44P^^(( ddd^^E44  &44O]]//##7<<<]]D44 &44O\\,,,4411WDDDxxx\\C44 &44O\\BBB55((..4488::====;;x99l0"""FFFbbb\\C44 &44O\\VVV,,V777766y44m00`**Q$$A0;;;___\\C44 &44O\\iii """000000;;;@@@AAAVVVjjj\\C44 &44O\\}}} 000???OOO^^^mmm|||\\C44 &44O\\,,,;;;JJJYYYhhhxxx\\C44 &44O\\\\C44 &44O\\\\C44 &44O[[[[C44 &44O[[[[C44 &44O[[[[C44 &44O[[[[C44 &44O[[[[C44 &44O[[[[C44 &33NZZZZB33 &33MZZZZB33 &33MZZk8---"ooo7fԬَK```-AAA'EɅk8---"{{{4]ܦՐK```-AAA'C۸o8---"{{{4]ɘS\\\/AAA'CӀZZB33 &33MZZxxx3#333<Πh  _ߦxxx3KKK)ԛ޼n R֭ccc>KKK)ۖޮw/ RZZB33 &33MZZߙA 1CCCAڑ ,yᗗBRRR5ʛ#nuuuS&ddd.ʛ4,lZZB33 &33MZZ```- "26ձm /]\\\/ -ױz% Q???A* !z3/ KZZB33 %22LYY退4 (27׋ #2oooo< 5Ȕ+ i\\\H0 555"Ø22# `YYA22 %22LYYH  12===G  ,2ǓV  &DDD@ݻ2    ǓY2&  ccc,22+  ؉YYA22 %22LYY  *22F  %2(((:ٳ'  2pppP.  +++6Զ22  ȃZZZc22%  >>>%YYA22 %22LXX4  %22 Oժ  22\\\H"  .5ԫ2'  'VVVJ2.  %A22  sXXA22 %22LXX  #22Hd  22777J2   +2Тf2%  %@@@@32+   Уxxx=22  ___+XXA22 $11KXXlj   11Dppp/  /191  (1a41$  $111(  b Z91/  XX@11 $11KXXb  !11F^.  01;h1  *1---911% %1Ūsss11*  ,,,:X;10  ƪXX@11 $11JXXmmmT  %11KX1  11@eeeX1"  .1611'  '1HHHx51.  "2X@11  XX?11 #11HXX444S  *11Ta1"  %11I111S1'  11H41-  .1!!!s=11  ';XI11%  "XX=11 !00DWWGGGl$  008Wm:)  +01UDDDm0.  &00bG00   !03555H00&  .K`S10+  ,WW80/  00>VVggg2  '00GVP0   #00<f___40%  /04g00+  +0DWWWX30/  %0gpV<00#   DVV40+  .06VVP( #005Uf[[[g5- .01P}Q0/  *00W[[[=00% %01gpE00*  /DhhhZP10.  .`VQ00(  )00SVh:& !/00KYhhhU0+ -00Bkx90. (00;^^^o200$ $00J"""]700( .4b^^^uVA00, +I'''uVG00$ %00FVEEE~_3( %000DVu mE0, !.009_888j30/# *004q [000& &00;z777}R400* #/0VwgU800-! ,;gV;00 008Vj[3.# ,000CVqFFFmC00& (0009]e300* %/004mCCCX100-! !-00;vyQ400/% *00RrCCCdT8000(&0:duȻS10+  )00Mnnnm^80!.001GYv999pI00&)000>ckkkm800,$000;s999b300//00Dzkkk|W7000$,04Xv888lU>000)&0BepB00$  !00:888vfJ'"00:Qe{]9-005Otzzz666}Q00*01VvF00%%04`zzz666lE10*0Ciy^K5003Tk{{{{gggt30.  *00~~~u:::hh*#00HV{nM.00=cvvv888v20 +03{f00%%0A~vvv999X30+ 0]vnV=00@hnvvv?00%   004zzzh*#00GUzEEEvM.00=clllv20 +03{EEEf00%%0AlllW30+ 0]KKKmU=00@ jֿ00-  &00ϣ-#00GU򈈈~.00=HHHy40 +03vvv00%%0^^^\X30+ 0qqqU=00aaa\Z00!  ,0999:%%%0#00GU.00= 80 +0300%%0|[30+ 0U=00|00&  .0ϕ%%%0#00GU.00= 80 +0300%%0|[30+ 0U=00|S0*  -0&&&/"//GU-//< 7/*/2//$$/{[2/*/U<//{Ҙ/*  -YYYB&&&/"//GUí-//< 7/*/2//$$/~[2/*/U<//~/)  )O5550!..GT,..;...8.).1..$$.\1.).T;..1&  %nnnH5550!..GS,..;...8.).1..$$.[1.).S;../!  111/666/!..=Gܼ,..7...7.).0..$$.M0.).G7..ώ&  [999-....(+..Ņ///6-&....  .Ņ+++5..&-...+΂eee:  TGGG$$...,.Ņ0005" *..& &Ņ+++5.*"..,}ܗttt7  jjj)[ׁۅݕݕݕݕݕݕݕݕݕ))) !!Հݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕޔ^  Hݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕޔ'''! Հݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕb Dݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕ$ ޔݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕݕb!  Dޔݕݕݕݕݕݕݕݕܒ؃zL000                                                       ??~??????????????????????????????(     $$$###################################################################################################"  %+,-000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/,,* %,3>HKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJB8-+*1BKSeqvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwskZLG7,#+3IUr{_K<," +5J]mM@,(1J_SSSϧxxx rL:* ,BT"""[[[eI/#'3Jr+++ooo~P>+ +=UMMMgG+*FdwI1$ ,InZZZ~L7' 0ItLLL~Q:* 0Iurrr}T;* 0Iu}T;* 0Ht}S;* 0Hsxxx TTT}R;* 0Hs 333}R;* 0HsJJJ&&& $$$}R;*!0Hsrrr}R;* /Gs'''ddd^^^|Q:) /GsjjjTTT|Q:) /Fs@@@sssuuusssqqqZZZbbb@@@{Q:) /Fs!!!CCCffffffffffffDDDwwwVVV{Q:) /Fs___ffffffffffffrrrzQ:)/FroooffffffffffffoooWWW ~~~yP9(/FrsssfffffffffffffffCCC+++^^^yP9(/FqvvvfffffffffffffffpppXXXRRRyP9(/Fq}}}uuuffffffjjjrrrxxxxxxLLL(((yP9(/Fqhhh&&&&&&yP9(/EpTTT++W22m55}9988884411dpppxO9(.Dnlll 99 ///wN8'.Dn**88RRRwN8'.Dn22..kkkwN8'.Dn88nnnAAAwN8'.Dn:: QQQvN8'.Dn;; @444==="""vN8'-Dm9900evM7'-Dm44o88@@@ vM7',Cl!!!++Y;;uL6&,Cl555 @88888&&&uL6&,ClHHH&..uL6&+BjZZZ iii***(((sK5&+BjnnnKKKsK5&+Bj))$$G...333sK5&+Ai2233looorJ5&+Ai88::FFFqJ5&+Ai::<<)))qJ5&+Ai;;77jjjnnnqJ5&+Ai99++$$$qJ5&+Ai33pcccpJ5&+Ai""",,['EEEyyypJ5&+@h555!!B((P))) HHHpI4&*?hHHH&55r ///pH3%)>g\\\ <<LLLnG2$)>gooo;;)))nG2$)>g((55$$$111nG2$)>f11''{{{mmmQQQmG2$)>f77///EEEXXXrrrmG2$)>f:: 222fffmG2$)=e;;=DDDlG1$)=d9922o ___kG1$)=d33q<<BBBkG1$)=d###,,[99nnnjjjDDDTTTkG1$(=c666 B22XXXkF1#(=cJJJ'##vvvZZZ ZZZkF1#(=c]]] YYY444kF1#(=cppp9:::$$$kF1#';a''.._NNN%%%iD0"';a1199EEEiD0"';a77==|||iD0"';a:::: iD0"';`;;11MMMhC0"';`99""qqqjjjhC0"';`44r SSSmmmhC0"&9_###,,\!!?555'''fA.!&9^777 B11deA. &9^KKK';;...eA. &9^^^^ ??RRReA. &9^sss<<aaaeA. &9^((11VVVeA. &9^22 kkk///eA.  %8]88MMMd@- %8\;;''F///}}}!!!d?- %8[<<55ktttc?- %8[::??OOOc?- $7Z44q@@[[[b?, $7Z$$$--\;; a?, $7Z888!!B00hhha?, $7ZLLL&ggg000iiia?, $6Z``` "HHHiiiXXX`?+ $6Yttt++M)))ggg XXX_>+ $6Y))99r ???_>+ $6Y33@@AAA***_>+ $6Y88AAccc888 _>+ $6Y<<;;IIIpppddd```XXXCCC+++ttt_>+ $6Y==//###~~~_>+ "4W:: ddd^<) "4W44r*LLL];) "4V&&&((N44::<><<99{55n..[''J  ---PPPttt\;) "4V999!!!000???---\;) "4V\;) "4U[;) "4U[;) "4U[;) "4U[;) "3S֔ΌצԏяܱܨьԓמЉؘԕъۣݹёҎZ:( "3Sē@ &zݟ```-@@@,˙}'''!}}};޼孭`QɃHmѧLLL9FFF(ڏZ:( !2S(((  &{{{U҈ #|X !֯eee: OOO*. D- oY9' !2SMMM(  0  -εǍ  -] |||D333< s2"  ީY9' !2Rˍ *>T'YYYP'''.  %~,  "Ѷ/   rrrp2  7X9'  1QK  (<&  &6'  $GGGA*  {iiif. dzK1 X8& 1O888;  ,B'  )<+ &<. $wwwi$$$\1  !O1  X6& 0KSSS_   0N;  /O3  .Z0!  +}}}@@@|2%  )a4&  -W2$ .C* ,9f---g) *5vQ+ (4WWWF- &8uuuD/ #D"""F0" !WP0! '6X*!-5[888K+,3bVVV@- *1j<."(3sv;/$&9===l>0%%DD.   0_3/<c IIIY0.:k333Q/*;qlll}L0'?uxI0!%F yGGGrH1$%P9994&*)))>I0O[[[=0QDDD///1-Ypppy0!* cm2$'###tTTTb6&.NNN/  .0Oe0GGGe 3-0!*2$'ccc6&hhhG6669% !eeeG0Op0WWWl3-0!*2$'uuu6&{{{OƎ'  !q˲/Ny/iiip3,/ )1#'6%U'  d׻.G.xxxq2+«.(/"&4%Zݤ   OOO*+.u)[.'֛,$-"y. QġL  lll-H]]]]\< X]]]]]]]]]]nnn, MMM(]]]]]]]]]]] 9]]]]]]]]]]O G]]]]]]]]]]?V]]]]]]]]]]ggg/UUU$\]]]]R9                ?????????????(@ @ '9<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:-6Vpu\;!7dFFFƁ܅݆݈݇ފދތߎߎߏᔔᖖᗗᘘ♙⛛✜㝝㞞㟟䡡䢢䢢䡡䟟䞞㝝㜜㜜♙☘◗▖ᖖᓓᓓߎߍߋފވއ݆݄݅WWWm< )U%%%_/ 7o;;JJJD>>???}}}C9SSS```55**4___}}}C9TTTsss;;))K???~~~C8UUU>>44mggg~~~B7UUU@@>>000 A7WWW>>@@nnn@6WWW99};;ttt@6XXX11e00VVV[[[@6XXX((N999:::@6YYY))@**8@3[[[,,2++Rsss=3___<<<77u,,,=3```OOO))::UUU eee=3```ccc4444+++aaa=3cccvvv::::}}}<3ccc??,,BBBiii999!!!<2cccAA557%%%fff<1ddd>>**>LLL:1ggg::..X***}}}:1hhh11f;;~''':1kkk))PBB[[[:0mmm**AAAIII 90mmm,,4::jjj90mmm>>>++LLL80nnnQQQ))114{{{8.rrreee55))@"""'''6.rrryyy;;11]ppp6-sss@@??ggg+++5-rrrAACC6665,uuu??BBIII,,,5,uuu::::eeexxxNNN lll5,www22f))((())) aaa5*|||**QXXX3*|||##.>>}77m..Z))L++CEEESSS```ppp3*}}}3*~~~3)3)򸸸Vqqq?֛..."""Țچ;Vnfff(ӺCCC* x덍SA3(y WWWO  $~~~Cy GGG+###,̯s K2'```55 !# ...7|||i% o@/%SSSS!G +4 +++Yooo!(3  W% 1)n5"@bbb[!,httt4BM#*GGG~444{3IK%,$ .&iii:::9F%'aaadGGGe"/kkkLDŽ&zzzKDDDO$'!.̺٭ t$αP___Kع"%Ǝ)ؐ -FF: zzz.FFFFFIII///FFFFF.:FFFFA uuu%FFFFFccc$BFFFF6 /FF4?x8<<|~>>?|~~??|~>>?x|<>>08 08 08 (0` $#BZ______________________________________\D' $S QQQfffgggiiikkkmmmnnnpppqqqrrruuuuuuxxxxxx{{{|||}}}Հււր}}}|||{{{xxxxxxuuuuuurrrqqqpppnnnmmmkkkiiigggfffXXXY(@###888FUa ^ m%^wwws$^:::yyys$]...222NNNbbb r$\kkkfff\\\}}}q$ssfffttt o#ESPPhEElVVX&&&n#Y;;OOd333l"Y??FFrk"XAA>>qqqZZZk"X>>@@j!V>>>>ggg```i UEEz77h UJJq))vvv***~~~h TQQhZZ^SSS>>> i RVV]OOhNNN!!!fRiiiEEw!!!fQ|||))**Z $$$BBBbbb!!!fP4400v111###eO;;<>BBEE 3 555aaa000ZE000ZD000ZC՘rԾ۸pΝŷϋtөqةvҍ111XCv ҿGGG$ uuu?W Ȣ%U222W>OOO- 111C!%mmmg ] 555V4nnnt4"$ccc5H000_.';DDDV&&&D!\\\K%rrrFFFc -,,,@[[[xnnnm)@@@4& Q$!***1|||aª(Yk 2ޙĿXЎՌ`+++$ĉCޣvwޡ<➢?        AxǞyx 0 0A 0( @ **************************!:FFFHHHKKKLLLNNNPPPRRRTTTUUUWWWZZZ[[[\\\]]][[[ZZZWWWVVVTTTRRRPPPNNNNNNKKKHHHHHH? 999GGG")1*}}}4)UUU---rrrnnn3'zzzmmm3'aaennwhhp3'QQRR???===1'ZZFF0'ee>>555QQQ/&nn11-&xx ooo-%||"""888-$[[y^^^ ###+%**++F HHH+$55OOZZZ ///+#<<FFCCC)#BB==<<> AAA%yyzz$${ fɮyyy;GGG]]]!mmm*999K řze"ZZZ31o۪  "}}}X=!!!ʺ"pppIII?VVVVcccg4441!.ggg4ͼsçV"蛛= $ ((... {{{((ZZZhhh((vvvUUU(( ''#  ffqgqfb!D"#(  h)))v+++w---w///x111x000y000y111x///x---w+++w)))vjVVV}]]]sss|||vvvvvv==IIIzzz))nnn|||cccAAJrrr**WWW66{{CCeeRRQQMMM{{bbYYYxxxʸ̿ȴyyyNk{^nnnCӣgʨvƜĔȢpͭ`Ѧ(T././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642949280.0 ReText-7.2.3/icons/retext.png0000644000175000017500000004467700000000000015517 0ustar00dmitrydmitryPNG  IHDR\rfsBIT|d IDATxy|U[IB ayX]@ 62#˸3(8*Jt aAFxF ;. IHBNY{}KUwUϧ:}ԭ{=w;`0 }p^WpHI=%=y4ssyϽy.:J" -T`rcr> 됴$O8ϓH| '4?䘖C*S0R\wC_D @ߋW 7F0z#<2ʁ|! !Ox!_1zdinxD6ee%%%\J':e9KS[O^|"=m?nƍ&\.ZntV<_>c$'֏[@雠dF:bPڍ۰a#FLLLh4vFݺu[Q4y>ݻs/U_/Fux@׿_eddQml6PB^Wu ݺuk2Ֆ=2E !W^ʋ%%% I @z8SNF-b*)#c)G^0nܸ{wgggPINxp=(r+f |AfO>dLyyΩSnLIIj43ܣ G*?*EF %<ϓn2OCB\讟 M€ɯ@rxMmmm$3|xѢE{ Ν;$u³gA!r n ęq3\s5kN~||@OaI?=ED]55j!UXp84WUUх-jkk5JޜD)VTT$=EZ)))x]GyҡAPA?Hߊ^\?im)))ce\/];@d,uɢwU*\iA,-4Qުt:-?dѐZO^!hllT5/834hKСC ]" `/H:z4Sx/G111J" {]rpi?"&ta^ѱc1gΜGjjjր"mB @d>?YfΟ?^LHDJUUU?$E7AyyyܴEEEUNgXӱ!ҼXȪTϋ˗/-))*/ ɔ r) ^N#!!~yΝWA#d51EyHHGۉ0L&ohyn;Tk1r-pk<)ů,Z=t:]͜~qݚ%yvION^'ѱc_|Aq\p:ZTbf2ލ5X;祗^ ߴ4'tZ  Ѝ1"O>Iy^ ;f4R83xJ^GFh@zWXG^/_|N:uD߿tuQSSS}ϯػwoaQQQ2<rٝȜjEuu}Ϟ=ȕo/...V;/;vFv+wv }"4[>ٓ_VVVI}yq1LJJ=Ռxlv^@^iѣD|bѡcֺmK,I^k&##cqo@H"p 96-Z4+33R_SSSs9ar66=Dn"Cv;6nw+11 }|b6\e M/ +t#Fl5555SLǁl !/TwHr:vn?~ŷ3f?^XLS푃qA(?Wn^)S6wBi@zZwn7n޼ow$y!ok@m}#n@(oTy^4Uh0bs:ng 5P&2={ز{EI^<$/j|9z6·$푩@tы%P)|>ED =oW Ay~7oᆔ=z.|Ƽ庸aÆSM9BL~W%U: Ǐ_ekI!h_%.@iNNNŧ~\n'\T_kLvjT8 49svWWW!#GXbiO{; <3- =5p1?zq>E;JR)̙Ka^1k i.|{d< >]޿ƍ͋sYhO9Mz&Cm": |]KO+>tCEY+ oB>_K>!*{Ѡ 2/O[:×_~y/@˧MZ5 7n+G3G#~KO;(U᫯ ҝXب֟F5zґY `˗+6mڴO pWr/;)g !^/7/>!~r]!V}Ѵŕ:-ͯ,92#͋J >}_:\U8JӰd@X{9*uoV@z رcAx645e ]Ј7iZBK[n 9wPf͚ x/O6mzf6I@dpܹsyyy# #搊/t|J裏8EC 6pv[ZxdXA \~i݇bT~"j!Vy]v %d J~NIHf:uŋÚ"}V^jީҫaϞ=U>TMEףiA}gC-),,(ӧO穵8@Sv~H+ıZ? zm^yDHբGZMl**=էQHM?j=VPP3|_̤ }LD!pt Lrp eee,!m1;R3ܷ8 OB%-8QROhus(--o<䃴%U:g(]&K%%%dzW5xK{ifm6%2&t#H_P҃RNU A$:/GZp}LWJ߇.Ffh >&D>@򢡡iGz |_i LWZŧ$ PZZZ->.>DyyH6p8zyE.\ZA!9[DID Mj222QCt,r^oĉ׆ddgg_GG{xU"9]gI]vL={4@̌])]8jԨԑ#G%Wn IQ%1Sfo{y111)rHKKҥKf!لO,E~oAQ?BK\[]իWc4ʑ1~ɒ%kN7ލj;wnR޽+q'xR.Iʕ+j֣pW;(.qsѢE=!NH58oq|t]v5]vYlll&w Bbb'ŅGB.|䈃bt1(q_c AQIKC"rпw-qڵo EB߿|^eȇ@F's-[&_q=t;5K ].뮻._i^c7|uR3Nǥy_Ν;k{AzZ|`0z衷|A2-b8 =8*=f`NIIر/~"33sC訶Ҹk@%t4@«:`e2R,X{c.BD(ҽӭ;wbJ п?lݺu &7y^ڬZ1cڵF2̋%K,3fL$ s~)#}Ϟ= 7n|%..nR`Ȑ!ߺuWV,# -clܸqȐ!C^Gַڴ !111^yГV8[=x7.ѣ+333D +x̙3 fTc=ѕO3gZ9pի r}3EZm&TE;:rrrrN_M)))ccc5 Nujnn].T66؈zԠN[quQTTDA}A޽ѧOݻw2~⩛AZ LYYxٌM_c0:) 8044QӡQG-Z{ + QRR۷O`@nлwodffbذa6l˺fLIgG==ص'vUMt"//yyyuʀ|Z4`:1+#lURYY]va׮]^Çcܸq?~< ъ`TyQ,rt:R2vrw^C|x1mZ2`._lV޽wMΝ1i$,^wO?7|&MBBB*--C=S!E ͐ rXmmF#t!-- 3g?9s[l?4_c̘1Uf{G.@b|ЫňɄ#Gbɒ%8y$lقӧl6G|R~xob&uuT>WPc-a+AaȑXj;^xz<7ߏZ&Px6*++EUVhZIZZ}Q8pVB>}";5|ODKBtoA}Zx0Rz=OwA߾}þVNNMƔ (dz %6V}ngEE]vm pwow$&|6mv{?SkE`2X2rP -ZRt:^`ԩa]c5kl޳.J -.NkY,il~o 5k`Æ P|7|ŋk Y% ޖ_Ʌ z Umֺίk۷'NT|[oO?T?P P{@ k׮+b裏*~'|I~a @%h`UyKkUړ^+WTة śP`.S*A+-t[] ӦMڵka4esqZJCa)6Zī\-ZzX|"K^8<[[oȣs.iӦ/X|~P <˽cTP!f~֭[>bǎү]Uݕ\0 @p)!Q8@qVX!2c'b"]:TܭVIHLL8|IIIx뭷dOp%AlЕ3}11HR1(x׮]Un[$++ wqسg}XnBUhlm@sSO`7tk,Mۇ)g:=z[nvK:Q{/#HQyj{w{t)B0U<M2 @`ĈHNNXV:,Pq@Nz0^ǵ^++c4v`fV *h3qSC ~XV:J@n;Sqlsrr2hG(**bv;#7dx4) Mbu"ԌPdRGsA˷~++]ffƒ>KfVjIzz:L*ocSciZ%X3"m(*-$ C`޽u8\{QwMfDhﵡLiq6(tGΝ5mC\1D@^Z86#77;wv̘1K:,0HRJP1Q3o;Vci> !@*p.S?#>CYi322Dm"vkdB )!,X <(P@TVVz NEw& \-n:9rDVڸ8̚5KcZ/lm둤R@;K.Qߒ۷>3f̈ Ja UhWnmL&̝;WcZ7JV*Z 4"w * JDk^GQQs}Ѩ3)^`6m:$}bJPl0|P"%{qw+!;;FcUn* eQ< ^!7c̙*?}ݸ4MBU'8(C.ǣZOMр:ѣGBvvFRoXdb@EBwlFJJJWn|'; @JJ VZLȪl .ZhW]vbֈf7lذAF.t颁dm%]t"@H*/<㥗^¶mo0rJL<]博nV2Go/@yy9VXkrшe˖a*JQ"i]&Ը^<*][,])))Xz5!@ :V4^}-QbmÖ-[~z|\ꫯڵk? `]0-Ը8Z.xMLLDbbbl{nlݺ`ܙE̙3/3H(f)XU@5U[{_VVc۶mWzX,x0c U,0b@k^TToӧ57ozU}8BK)ݎ\>}Oƙ3gp ={V{'''cŸ5W{lh 5Q ={:uBJJ Ҽ)))0^GBBBYYJKKQTTR\|(**ӧqEF>1110o:x{c0uTĵlE( _Wi@e;߹sgr-1tЖnd@)HTA!P%ٳ'&N'ꫯnLLmtJHQ}T+؜f :ÇDŽ 0`(j@@JN\wuBVV*拯ö( B)cǎ۷/郾}z3331GҭnF( >vƢV馛p!ԩeK.@jj*ӑN:!55ի:t}Z$"Zp_؈[?ơCTSW^y%^uXVUh}D2IoraP@*xzz:  Oӧ#??| ># ۷ɓxѷoHEg"MNr,*CjQkٳ'~iL! Sp0͸o>Z*UUU9sfX9%{B(&Pa `0`ʔ)ؽ{7ѩSp8?ovX3Z5|p8EсmaDUϯ+qb00k,|ט5kVX+xǢEl22Z'*BhߨӡC95dZ-[+KW_}oFX2.@4D@f$F8x).u]/:?;;qgSf(LX2r;ok2bbb+߆ŢYx'sΈd`Rl @ {kp- i Hcʕ3f{1?^#-"1NgD׺dZJUX}Nuu5?)fh9'f(v itE9ի50>K7hiҰn:fP*Fsz ]j3h Ex駵؀ qqH09]HΜ9/Yك-[nX2F ࢱHI+*3xuA^yԫ )|{`]qȧ܉7jŊ+dCp/_T)]tk5:t(WZR-XC/>"P… eO :+KPuY 0=.;XxX,v! _|X%eY2Uf,)!33Sv(W\I&NtR a(EQpPߓk/DPimTu'DLP_|D kMP3Vz @k.?0RSSe---/Dщ,HD xx<#oذGP"fps0TpMٳqWJv㏣e4?L6kz=[7qbE&xT9 ۛx j(#:=!%%%HNNFee%N'<~o:`dɱ`2j0x-xaǏرck.Y/_ǣo߾KUP,2h Xҽ{w,@ x\56L-m P8*j# xᇱuV-B`kT-܂'bĈfT^ChRۖ;d2jzddzqp:(//Mׯ_?oafΜM6ᅲǨQd{fAZZd@cc#v;l6l6P[[:xӤgTր^ǫ*xGpi%c0 zɗ?=?~| ~aܹ`ܹ|&0%:Jb跱믽'L\mG}TQ'// .T!FXw)h4zZVdee*[k'66o̔7Pl߾_4A` @!//{|M797jЧO,X@91 2pflN(ZHII_tIyFQE'G>3F9/ƦM4]#ۥ_Xm=@FF̙3bxz О8on ,G}dHwr$@Ϟ=uuu.\_{h$>>o&8Vy߰m6 %kȪJ}rѶ,wPN?^aSL< D~/NCuu5OmpI=rf({n40yd<䓊q\xꩧOAh(ZݻX&B~+$&&j"W[eܹ6m~m#p aƍæMr5\)(Ξ=;jABB֭[ ^IDAT'u~EE,Xٳgܹs*Kצ' 4 ..wuWTS$F,_)))"/JJطo&L;v[n*KQP 4H8KEDzevz7GeW"l0j1 Sł|$jL2֭CǎgZ3h$U"Vt]Qoې. .d+Tg}>g…"/Nц&uV[ 8p n怿33fhF?شi瞐wСlUXhH{ҥKق s=>:u`0ॗ^rG FRSS駟o^^m݆O?hi-[`M~1c 1; N(޽;QIzz:VZ<38{,l焪Fl@6U> 2d[Z6"vz!E`eR{-z6`D':?Aa# F끮n6i (^?LL0l%(`1S F끮r d n`0Z§_~v.@ 59r9؍ F"r/"ǁ رcGdY F "yyyeeeN=IH7'Nt:_ꫯ.DiK[ A)X"3}P[[8a„.D[N킓zW]]?xCCC'%u*;__ϊ% 8zY F3@W~7NWR?7P$[iH)?.>Oұ@ m :vҥ|@=PsXV.@() СC>qL 0*BZ@mN> Yg!$q:a\ AkzNH|yҥ\~,#GOh^6)BxpSrN89)9O=NyrJvK߯["|-9; X__(@FFq5T]N;ܹC ILLL4zH 9S)<8PP:œP|R8 jkk]UUU.?? ӣQZ"l|}*UzJB0AP'A03. F4@E/ޫp>K@1|ʁ6c  (RMZy='A0na03Q1}|7^_e|oK DB@)ua+|`?5`O%{}WЂ?#֜"9 a `O- ^߼>k٫ѕZYx3HdH,$<%eϒ0!g0Ch!Tv;5*?=&PaQbZ p/&iX0 !T|h;c5;iiX+=? m  #|Lz]\B V f?yb#%@Oh_O}2`0| Qi,  Bu <!TzW$0 t*|%?S FxA'߈Bŗ D` H-t7N'!Z/_&Z#X }B͖Z}C}%? {e%5PX:H+`0QnO8ԾU]@IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642949280.0 ReText-7.2.3/icons/retext.svg0000644000175000017500000006132200000000000015514 0ustar00dmitrydmitry ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/system-file-manager.png0000664000175000017500000000144200000000000020036 0ustar00dmitrydmitryPNG  IHDRĴl;sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATxڥ=hqƟK#05kVTtp n" f[h@E4 $.q2[KHub3]>OHm+I-9(4]X,aop|3LT*=bu]_rZ$.D\SUcM|T*s|8L& !?1Wj('8@u%/ 70rq .EA<,0zzTz w@UJة,w lҵz: -W%`B)f_kg, Po4{ikC!;5U6No X4vfM*xao* `W+ʤ1ϟK-@M7i+ˮݔ:_-hJeIk!5狿\H,NܿhIӦ[fYIXOMT!oo1;!IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/text-html.png0000664000175000017500000000226200000000000016114 0ustar00dmitrydmitryPNG  IHDRĴl;sRGBbKGD pHYs cytIME ,JC2IDAT8˝oE]KZlQ Ĩ}DbBQ  > O 6hK Xڦt{n޾63>Ж[MqbIƇ]#e|q:k>6ZȱӃ4Zc;Ib>$_L} 5x~fx3}$[8<Ռ6 Z%ذgOة8Ҷ(2SEr3.X,8u Y"HUq.O)/HCMu[VsuH>_m ͅI .E7@KКe Sl d$2`.ИIS_Gof%f [S1YʼnN"#"JFt1ض |}]mM M6QF! QC>*qK)-cC\KJ#^ ~Q)5j Y( +vmD)<laU[O<&/?' gr\÷Ɖ ^l۾H)/?BήgKě`mKaȈedJ4|&)%2 8qT0رַ`R'u9L؊H-l }J3>|$I@5[gv.mc;ITlBvH*f4RI|ϣR.s>S*N, &v7ٹaBcj% 4T+{u"4@)Fml>;^mU|ٳA| sȶw};PJSBJUE2 Nu썢Rŭ--HJj7o0ΗKF/,T#S FIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/view-fullscreen.png0000664000175000017500000000057500000000000017305 0ustar00dmitrydmitryPNG  IHDRj sRGB pHYs B(xtIME '" WPLTECCKKbbއފ䜜堠'@rttRNS-.1jy]bKGDAIDATxuQ0@]7[c BG3|2݂}AFzy S0. z)&'?tuB ww@L \f]תH%kڭϖ({W(OS^qU ScIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1505230503.0 ReText-7.2.3/icons/x-office-document.png0000664000175000017500000000204100000000000017475 0ustar00dmitrydmitryPNG  IHDRĴl;sRGBbKGD pHYs cytIME /IDAT8˝k\U3'ghHjIcJ UZ $?K|Jhh\cJJnfs;̜˜!rF{ַEaY֛0,*l'">`d+~lmm>Ӄv߁B1j\x!Ϸ9\q.]pH4]׉:B"y-6[ 4.×YlFF,-.b2M8p6l> zbo  ( RJ6~ׇ|'=HL&w<#0$]Gժ8J>B GQ @DR 탨1?(M/7@J&!KVu]0oz}7ֈFB]~6p2$JH$H$v]Z槌Iz1jgpƌSaNQhmmq,"~W1LX=74JU$ IENDB`././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1643920524.1925159 ReText-7.2.3/locale/0000755000175000017500000000000000000000000013600 5ustar00dmitrydmitry././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_ar.qm0000644000175000017500000003400000000000000016131 0ustar00dmitrydmitryRb&dy Yc'gtK 8zr#$gfl)$WD! by%v ћr w#S4J,Pm.r25t%#&Fr01w LW9 ' 0BM2e -d0 E):u!yk 5+?ϗ"'D°ϡ % )ET E)d+I!9'>(B~v'%`"7- n @ h> C j3 lai v&J W 9 $w # 2/1&3*{4Ez e)I tU9GKx[ˏ*)  O+.i3S8'A*- '.1 E3*F/'* 9F/ 'D*4:JD,Automatically open last documents on startup ConfigDialog&-A8 'DE3*F/'* "DJ'KAutomatically save documents ConfigDialog 'D3DHCBehavior ConfigDialog0-'D) 'DE9'JF) 'D'A*1'6J)Default preview state ConfigDialog0'13E .7 9EH/J 9F/ 'D9EH/Draw vertical line at column ConfigDialog 'DE-11Editor ConfigDialogB*A9JD 'D*E1J1 'DE*2'EF DE'1C /'HF*Enable synchronized scrolling for Markdown ConfigDialog E3'9/)Help ConfigDialog\'.A'! 41J7 'D*(HJ('* 9F/E' GF'DC *(H( H'-/ AB7(Hide tabs bar when there is only one tab ConfigDialog$'.A'! 41J7 'D'/H'* Hide toolbar ConfigDialog$*EEJ2 'D371 'D-'DJHighlight current line ConfigDialog"'3E 'JBHF) 'DB'D(Icon theme name ConfigDialog'DH',G) Interface ConfigDialogF'F '1B'E 'D371 E1*(7) ('D371 'D-'DJ)Line numbers are relative to current line ConfigDialogE9'JF) E('41) Live preview ConfigDialog\'6'A'* E'1C /'HF D*1CJ( 'D,ED) (EA5HD) (AH'5D),Markdown syntax extensions (comma-separated) ConfigDialogE9'JF) 7(J9J)Normal preview ConfigDialog(9// EF '.1 'DE3*F/'*Number of recent documents ConfigDialogJA*- 'D1H'(7 'D.'1,J) AJ F'A0) 1J*JC3*$Open external links in ReText window ConfigDialog"'8G1 -'D) 'DE3*F/Show document stats ConfigDialogF'8G1 'DE3'1 'DC'ED AJ 9FH'F 'DF'A0)Show full path in window title ConfigDialog'8G1 1BE 'D371Show line numbers ConfigDialogEDA StylesheetStylesheet file ConfigDialog621 'D*'( (Tab) J/1, E3'-'* Tab key inserts spaces ConfigDialog9P16 'D,/HD)Tabulation width ConfigDialog0'3*./'E '9/'/ 'DEDA 9F/:Using configuration file at: ConfigDialog(D' 4J&)(none)FileDialogButton '.*1 'DEDA DA*-GSelect file to openFileSelectButton'/1, 'D,/HD Insert tableInsertTableDialog9// 'D'9E/)Number of columnsInsertTableDialog9// 'D5AHANumber of rowsInsertTableDialog6'/.D '3E 'DD:) (E+D' en_US)"Enter locale name (example: en_US) LocaleDialogH69G C'A*1'6JSet as default LocaleDialog E9DHE) InformationProxy`D' 'EC'FJ) 'DC*'() EF0 '.1 *:JJ1 ('6A ! D*,'H2G).No write since last change (add ! to override)Proxy'6A 'DB'EH3Add to dictionary ReTextEdit&'D5H1 (*.png *.jpg)Images (*.png *.jpg) ReTextEdit'-A8 'D5H1) Save image ReTextEdit8DE JO3*79 'F4'! EDA '%s': %sCould not create file '%s': %s ReTextTab*901 *-DJD E-*HJ'* 'DEDA *AB/ '0' CF* *E*DC 'D<a href="%s"> 'DH-/) 'DD'2E) </a> EF5()!aCould not parse file contents, check if you have the necessary module installed! ReTextTab 'F4'! EDA EABH/Create missing file? ReTextTab,'DEDA DE JO3*79 'F4'!GFile could not be created ReTextTabE3*F/ ,/J/ New document ReTextTabJ'DEDA '%s' :J1 EH,H/ GD *1J/ 'F4'&G8The file '%s' does not exist. Do you want to create it? ReTextTab%s EDA'* %s files ReTextWindow9F CJH *J QTAbout Qt ReTextWindow&9F 1J*JC3* (ReText) About ReText ReTextWindow ,EJ9 'DEDA'* (*) All files (*) ReTextWindowF5 (/JDAlt text ReTextWindow4'DE-11: /JE*1 4'CFJA 2011Author: Dmitry Shachnev, 2011 ReTextWindow:'EBBold ReTextWindowXD' J3*7J9 'D-A8 DDEDA D'FG (H69 'DB1'!) AB7!,Cannot save to file because it is read-only! ReTextWindowLD'JECF -A8 'DEDA 'D0J A*- AJ *(HJ( '.11Cannot save to file which is open in another tab! ReTextWindow<-3'3J) 'D-1HA 'DC(J1) H'D5:J1)Case sensitively ReTextWindow *:JJ1 .7 'DE-11 Change editor font ReTextWindow *:JJ1 .7 'DE9'JFChange preview font ReTextWindow:DBClose ReTextWindow:DB 'D*(HJ( Close tab ReTextWindowF3.Copy ReTextWindowB79Cut ReTextWindow"'D*1EJ2 'D'A*1'6JDefault markup ReTextWindow$*9/JD 41J7 'D'/H'* Edit toolbar ReTextWindow *A9JDEnable ReTextWindow *5/J1Export ReTextWindow*5/J1 E3*F/Export document ReTextWindow4*5/J1 'DE3*F/ 'DI 5J:) ODTExport document to ODT ReTextWindow6*5/J1 'DEDA 'DI (J/J 'A PDFExport document to PDF ReTextWindow&A4D AJ *FAJ0 'D'E1:Failed to execute the command: ReTextWindow,H69 AJC AJ 'E FakeVim  FakeVim mode ReTextWindow EDA 41J7 'D'/H'* File toolbar ReTextWindow'J,'/ F5 Find text ReTextWindow'D*F3JB Formatting ReTextWindowH69 C'ED 'D4'4)Fullscreen mode ReTextWindow07D( E3'9/) 9DI 'D'F*1FJ*Get help online ReTextWindow'0G( 'DI 371 Go to line ReTextWindowF5 'D HTML HTML code ReTextWindow4EDA'* HTML (*.html *.htm) HTML files (*.html *.htm) ReTextWindow'0' '.*1* 9/E '9'/) *-EJD 'DEDA H69 'D-A8 'D0'*J 3J*HBA *A9JDG DG0G 'D,D3) DEF9 AB/'F 'D(J'F'*.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindow:'/1', 'D5H1 (H'37) E3'1 'DEDAInsert images by file path ReTextWindow'/1, ,/HD Insert table ReTextWindowE'&DItalic ReTextWindowF5 'D1'(7 Link text ReTextWindowE9'JF) E('41) Live preview ReTextWindowB(F'! 'D,ED) D E'1C /'HF MarkdownMarkdown syntax ReTextWindow *-1JC 371 DD'3ADMove line down ReTextWindow *-1JC 371 DD'9DI Move line up ReTextWindow,/J/New ReTextWindowE3*F/ ,/J/ New document ReTextWindow 'D*'DJNext ReTextWindow'D*(HJ( 'D*'DJNext tab ReTextWindowA*-Open ReTextWindowA*- 'DE$.1 Open recent ReTextWindow4A*- E3*F/ F5 EDA'* (*.odt)OpenDocument text files (*.odt) ReTextWindow"EDA'* PDF (*.pdf)PDF files (*.pdf) ReTextWindowD5BPaste ReTextWindowD5B 5H1) Paste image ReTextWindowF5 9'/J (*.txt)Plain text (*.txt) ReTextWindow61,'!'K -A8 'DEDA (EC'F E'. Please, save the file somewhere. ReTextWindow'D*A6JD'* Preferences ReTextWindow E9'JF)Preview ReTextWindow 'D3'(BPrevious ReTextWindow'D*(HJ( 'DE'6J Previous tab ReTextWindow7('9Print ReTextWindow7('9) E3*F/Print document ReTextWindowE9'JF) 'D7('9) Print preview ReTextWindow.1H,Quit ReTextWindowR1J *JC3* ReText %s (J3*./E PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindow'9/ 'D*:JJ1Redo ReTextWindow'9'/) *-EJDReload ReTextWindow'3*(/'DReplace ReTextWindow'3*(/'D 'D,EJ9 Replace all ReTextWindow'3*(/'D E9 Replace with ReTextWindow-A8Save ReTextWindow-A8 C@@@Save as ReTextWindow-A8 'DEDA Save file ReTextWindow(-+Search ReTextWindow*'D(-+ 9F 41J7 'D'/H'*Search toolbar ReTextWindow8'.*1 EDA 'D*1EJ2 EF 'DB'&E):#Select file encoding from the list: ReTextWindow>*-/J/ H'-/ 'H 9/Q) EDA'* DA*-G'#Select one or several files to open ReTextWindow8'.*1 H'-/ 'H 9/Q) 5H1 DA*-G'$Select one or several images to open ReTextWindow*9JJF 'D*4AJ1 Set encoding ReTextWindow*9JJF E-DJ Set locale ReTextWindow'8G'1 'D/DJDShow directory ReTextWindow(3J7 DCF E-11 BHJ D E'1C /'HF Markdown H 1J3*1C,1 *JC3* reStructuredText'3*./E HJ( C* (WebKit ) 'DE9'D,Use WebKit renderer ReTextWindow"916 *1EJ2 'D HTMLView HTML code ReTextWindowZ(F'! 'D,ED) D 1J3*C1,1*JC3* reStructuredText reStructuredText syntax ReTextWindowH'F4'! F'A0) ,/J/) -*I '0' H,/* H'-/)4Create a new window even if there is an existing onemain(B'&E) 'DEDA'* DA*-G'List of files to openmain(A*- 'DEDA (H69 'D916Open the files in preview modemain$ * ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643654476.0 ReText-7.2.3/locale/retext_ar.ts0000644000175000017500000010133000000000000016143 0ustar00dmitrydmitry ConfigDialog Using configuration file at: استخدام اعداد الملف عند: Behavior السلوك Automatically save documents حفظ المستندات آلياً Automatically open last documents on startup افتح اخر مستندات عند التشغيل Number of recent documents عدد من اخر المستندات Restore window geometry Default preview state حالة المعاينة الافتراضية Open external links in ReText window فتح الروابط الخارجية في نافذة ريتيكست Markdown syntax extensions (comma-separated) اضافات مارك داون لتركيب الجملة (مفصولة بفواصل) Enable synchronized scrolling for Markdown تفعيل التمرير المتزامن لمارك داون Editor المحرر Highlight current line تمميز السطر الحالي Show line numbers اظهر رقم السطر Line numbers are relative to current line ان ارقام السطر مرتبطة بالسطر الحالي Tab key inserts spaces زر التاب (Tab) يدرج مساحات Tabulation width عِرض الجدولة Draw vertical line at column ارسم خط عمودي عند العمود Enable soft wrap Show document stats اظهر حالة المستند Interface الواجهة Hide toolbar اخفاء شريط الادوات Icon theme name اسم ايقونة القالب Stylesheet file ملف Stylesheet  Hide tabs bar when there is only one tab اخفاء شريط التبويبات عندما هنالك تبوب واحد فقط Show full path in window title اظهر المسار الكامل في عنوان النافذة Help مساعدة Live preview معاينة مباشرة Normal preview معاينة طبيعية Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (لا شيئ) FileSelectButton Select file to open اختر الملف لفتحه InsertTableDialog Insert table ادرج الجدول Number of rows عدد الصفوف Number of columns عدد الاعمدة LocaleDialog Enter locale name (example: en_US) ادخل اسم اللغة (مثلا en_US) Set as default وضعه كافتراضي Proxy No write since last change (add ! to override) لا امكانية الكتابة منذ اخر تغيير (اضف ! لتجاوزه) Information معلومة ReTextEdit Add to dictionary اضف القاموس Save image احفظ الصورة Images (*.png *.jpg) الصور (*.png *.jpg) ReTextTab New document مستند جديد Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! تعذر تحليل محتويات الملف، تفقد اذا كنت تمتلك ال<a href="%s"> الوحدة اللازمة </a> منصبة! Create missing file? انشاء ملف مفقود؟ The file '%s' does not exist. Do you want to create it? الملف '%s' غير موجود هل تريد انشائه؟ File could not be created الملف لم يُستطع انشاءه Could not create file '%s': %s لم يُستطع انشاء ملف '%s': %s ReTextWindow File toolbar ملف شريط الادوات Edit toolbar تعديل شريط الادوات Search toolbar البحث عن شريط الادوات New جديد Open فتح Set encoding تعيين التشفير Reload اعادة تحميل Save حفظ Save as حفظ كـــ Next tab التبويب التالي Previous tab التبويب الماضي Close tab غلق التبويب Print طباع Print preview معاينة الطباعة View HTML code عرض ترميز ال HTML Change editor font تغيير خط المحرر Change preview font تغيير خط المعاين Find text ايجاد نص Go to line اذهب الى سطر Preview معاينة Live preview معاينة مباشرة Insert table ادرج جدول Table editing mode وضع تحرير الجدول Insert images by file path ادراج الصور بواسطة مسار الملف FakeVim mode وضع فيك في ام FakeVim Fullscreen mode وضع كامل الشاشة Preferences التفضيلات Quit خروج Undo الغاء التغيير Redo اعد التغيير Copy نسخ Cut قطع Paste لصق Paste image لصق صورة Move line up تحريك سطر للاعلى Move line down تحريك سطر للاسفل Enable تفعيل Set locale تعيين محلي Use WebKit renderer استخدم ويب كت (WebKit ) المعالج Use WebEngine (Chromium) renderer استخدم ويب اينجن (WebEngine) كروميموم المعالج Show directory اظهار الدليل Next التالي Previous السابق Replace استبدال Replace all استبدال الجميع Close غلق Get help online طلب مساعدة على الانترنيت About ReText عن ريتيكست (ReText) About Qt عن كيو تي QT Bold غامق Italic مائل Underline تحت الخط Formatting التنسيق Symbols رموز Open recent فتح المؤخر Export تصدير Spell check تفقد الاملاء Default markup الترميز الافتراضي Search بحث Replace with استبدال مع Case sensitively حساسية الحروف الكبيرة والصغيرة New document مستند جديد Type the line number نوع رقم السطر Please, save the file somewhere. رجاءاً، حفظ الملف بمكان ما. Select one or several files to open تحديد واحد او عدّة ملفات لفتحها Supported files الملفات المدعومة All files (*) جميع الملفات (*) Select file encoding from the list: اختر ملف الترميز من القائمة: Plain text (*.txt) نص عادي (*.txt) %s files Example of final string: Markdown files %s ملفات Save file حفظ الملف Cannot save to file which is open in another tab! لايمكن حفظ الملف الذي فتح في تبويب اخر Cannot save to file because it is read-only! لا يستطيع الحفظ للملف لانه بوضع القراءة فقط! Export document to ODT تصدير المستند الى صيغة ODT OpenDocument text files (*.odt) فتح مستند نص ملفات (*.odt) HTML files (*.html *.htm) ملفات HTML (*.html *.htm) Unrecognized paperSize setting "%s". غير واضح اعدادات حجم الورقة "%s". Export document to PDF تصدير الملف الى بيدي اف PDF PDF files (*.pdf) ملفات PDF (*.pdf) Print document طباعة مستند Export document تصدير مستند Failed to execute the command: فشل في تنفيذ الامر: Alt text نص بديل URL رابط Link text نص الرابط This file has been deleted by other application. Please make sure you save the file before exit. هذا الملف تم مسحه من تطبيق اخر تأكد من حفظ هذا الملف قبل الخروج This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? هذا الملف تم التعديل عليه من تطبيق اخر هل تريد اعادة تحميل الملف (سيلغي جميع تعديلاتك)؟ If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. اذا اخترت عدم اعادة تحميل الملف، وضع الحفظ الذاتي سيتوقف تفعيله لهذه الجلسة لمنع فقدان البيانات. The document has been modified. Do you want to save your changes? المستند تم التعديل عليه. هل تريد حفظ تعديلاتك؟ HTML code نص ال HTML Select one or several images to open اختر واحد او عدّة صور لفتحها ReText %s (using PyMarkups %s) ري تيكست ReText  %s (يستخدم PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText بسيط لكن محرر قوي ل مارك داون Markdown  و ريستركجر تيكست reStructuredText Author: Dmitry Shachnev, 2011 المحرر: ديمتر شاكنيف، 2011 Markdown syntax بناء الجملة ل مارك داون Markdown  reStructuredText syntax بناء الجملة ل ريستكرجرتيكست reStructuredText &File &Edit &Help TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters main Open the files in preview mode فتح الملف بوضع العرض Create a new window even if there is an existing one انشاء نافذة جديدة حتى اذا وجدت واحدة List of files to open قائمة الملفات لفتحها ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_ca.qm0000644000175000017500000001450500000000000016122 0ustar00dmitrydmitrymdul necessari</a>.aCould not parse file contents, check if you have the necessary module installed! ReTextTabDocument nou New document ReTextTab%s fitxers%s files ReTextWindow &Edita&Edit ReTextWindow&Fitxer&File ReTextWindow &Ajuda&Help ReTextWindowSobre QtAbout Qt ReTextWindowSobre ReText About ReText ReTextWindow(Tots els fitxers (*) All files (*) ReTextWindow8Autor: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindowNegretaBold ReTextWindowpNo s'ha pogut desar el fitxer perqu noms s de lectura,Cannot save to file because it is read-only! ReTextWindow.Majscules i minsculesCase sensitively ReTextWindow CopiaCopy ReTextWindowRetallaCut ReTextWindow&Barra d'eines Edita Edit toolbar ReTextWindow ActivaEnable ReTextWindowExportaExport ReTextWindow Exporta documentExport document ReTextWindow2Exporta el document a ODTExport document to ODT ReTextWindow4Exporta document com a PDFExport document to PDF ReTextWindowdS'ha produt un error a l'executar el comandament:Failed to execute the command: ReTextWindow(Barra d'eines Fitxer File toolbar ReTextWindowCerca el text Find text ReTextWindowFormata Formatting ReTextWindow2Mode de pantalla completaFullscreen mode ReTextWindow0Obtingueu ajuda en lniaGet help online ReTextWindowCodi HTML HTML code ReTextWindow4Fitxers HTML (*.html *htm)HTML files (*.html *.htm) ReTextWindowCursivaItalic ReTextWindow.Vista prvia en directe Live preview ReTextWindow Sintaxi markdownMarkdown syntax ReTextWindowNouNew ReTextWindowDocument nou New document ReTextWindowSegentNext ReTextWindowObreOpen ReTextWindowObre recents Open recent ReTextWindowHFitxers de text OpenDocument (*.odt)OpenDocument text files (*.odt) ReTextWindow&Fitxers PDF (*.pdf)PDF files (*.pdf) ReTextWindowEnganxaPaste ReTextWindow Text pla (*.txt)Plain text (*.txt) ReTextWindowDdeseu el fitxer en algun directori Please, save the file somewhere. ReTextWindowVista prviaPreview ReTextWindow PreviPrevious ReTextWindowImprimeixPrint ReTextWindow$Imprimeix documentPrint document ReTextWindow2Imprimeix la vista prvia Print preview ReTextWindowSurtQuit ReTextWindow RefsRedo ReTextWindowDesaSave ReTextWindowAnomena i desaSave as ReTextWindowDesa el fitxer Save file ReTextWindow CercaSearch ReTextWindow,Barra d'eines de CercaSearch toolbar ReTextWindowLSeleccioneu un o ms fitxers per obrir#Select one or several files to open ReTextWindow$Estableix l'idioma Set locale ReTextWindow&Mostra el directoriShow directory ReTextWindow~Editor de Markdown i reStructuredText senzill alhora que potent ConfigDialog Behavior Automatically save documents Restore window geometry Open external links in ReText window Editor Highlight current line Show line numbers Tab key inserts spaces Tabulation width Interface Icon theme name Stylesheet file Markdown syntax extensions (comma-separated) Help Ajuda Enable synchronized scrolling for Markdown Draw vertical line at column Automatically open last documents on startup Using configuration file at: Number of recent documents Default preview state Line numbers are relative to current line Enable soft wrap Show document stats Hide toolbar Hide tabs bar when there is only one tab Show full path in window title Live preview Vista prèvia en directe Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) FileSelectButton Select file to open InsertTableDialog Insert table Number of rows Number of columns LocaleDialog Enter locale name (example: en_US) Set as default Proxy No write since last change (add ! to override) Information ReTextEdit Save image Images (*.png *.jpg) Add to dictionary ReTextTab New document Document nou Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! No s'ha pogut analitzar el contingut del fitxer. Comproveu que teniu instal·lat el <a href="%s">mòdul necessari</a>. Create missing file? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow File toolbar Barra d'eines Fitxer Edit toolbar Barra d'eines Edita Search toolbar Barra d'eines de Cerca New Nou Open Obre Save Desa Save as Anomena i desa Print Imprimeix Print preview Imprimeix la vista prèvia View HTML code Veure el codi HTML Find text Cerca el text Preview Vista prèvia Live preview Vista prèvia en directe Fullscreen mode Mode de pantalla completa Quit Surt Undo Desfés Redo Refés Copy Copia Cut Retalla Paste Enganxa Enable Activa Set locale Estableix l'idioma Use WebKit renderer Utilitza el renderitzador WebKit Next Següent Previous Previ Get help online Obtingueu ajuda en línia About ReText Sobre ReText About Qt Sobre Qt Bold Negreta Italic Cursiva Underline Subratllat Symbols Símbols &File &Fitxer &Edit &Edita &Help &Ajuda Open recent Obre recents Export Exporta Spell check Comprova l'ortografia Formatting Formata Search Cerca Case sensitively Majúscules i minúscules New document Document nou Please, save the file somewhere. deseu el fitxer en algun directori Show directory Mostra el directori Select one or several files to open Seleccioneu un o més fitxers per obrir Supported files Fitxers suportats All files (*) Tots els fitxers (*) Plain text (*.txt) Text pla (*.txt) %s files Example of final string: Markdown files %s fitxers Save file Desa el fitxer Cannot save to file because it is read-only! No s'ha pogut desar el fitxer perquè només és de lectura Export document to ODT Exporta el document a ODT OpenDocument text files (*.odt) Fitxers de text OpenDocument (*.odt) HTML files (*.html *.htm) Fitxers HTML (*.html *htm) Export document to PDF Exporta document com a PDF PDF files (*.pdf) Fitxers PDF (*.pdf) Print document Imprimeix document Export document Exporta document Failed to execute the command: S'ha produït un error a l'executar el comandament: The document has been modified. Do you want to save your changes? S'ha modificat el document. Voleu desar els canvis? HTML code Codi HTML Simple but powerful editor for Markdown and reStructuredText Editor de Markdown i reStructuredText senzill alhora que potent Author: Dmitry Shachnev, 2011 Autor: Dmitry Shachnev, 2011 Markdown syntax Sintaxi markdown reStructuredText syntax Sintaxi reStructuredText Default markup Preferences Set encoding Select file encoding from the list: Reload Next tab Previous tab Table editing mode FakeVim mode This file has been deleted by other application. Please make sure you save the file before exit. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Change editor font Change preview font ReText %s (using PyMarkups %s) Close Alt text URL Link text Replace Replace all Replace with Cannot save to file which is open in another tab! Use WebEngine (Chromium) renderer Close tab Go to line Insert table Insert images by file path Paste image Move line up Move line down Type the line number Unrecognized paperSize setting "%s". Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_cs.qm0000644000175000017500000003177400000000000016153 0ustar00dmitrydmitryNb$dy =Yc'gtzr DVgl)"D! by%v(C #S4J)mNr5t"$yFr-. x'0B 0 E&fk ~5(ϗ `$°oϡ #E &T)d+IP9%~y'#  7+2  @ h> la- v# $ ~>/.3'zeI UeO*)  O).i/|PYi spuatn automaticky otevYt naposledy zobrazen dokumenty,Automatically open last documents on startup ConfigDialog:Automaticky ukldat dokumentyAutomatically save documents ConfigDialogChovnBehavior ConfigDialog*Svisl  ra v sloupciDraw vertical line at column ConfigDialog EditorEditor ConfigDialogPPovolit zalamovn na mst blch znakoEnable soft wrap ConfigDialogTZapnout synchronizovan posun pro Markdown*Enable synchronized scrolling for Markdown ConfigDialogNpovdaHelp ConfigDialog4ZvrazHovat aktuln YdekHighlight current line ConfigDialog"Nzev motivu ikonIcon theme name ConfigDialogRozhran Interface ConfigDialog^ slovn Ydko je odvozen od aktulnho Ydku)Line numbers are relative to current line ConfigDialog}iv nhled Live preview ConfigDialogVPYpony syntaxe Markdown (oddlen  rkami),Markdown syntax extensions (comma-separated) ConfigDialogLOtevrat extern odkazy v okn ReTextu$Open external links in ReText window ConfigDialog(Obnovit rozmry oknaRestore window geometry ConfigDialog>Zobrazovat statistiky dokumentuShow document stats ConfigDialog,Zobrazovat  sla YdkoShow line numbers ConfigDialog Soubor stylopisuStylesheet file ConfigDialog>Klvesa Tabultor vkld mezeryTab key inserts spaces ConfigDialog `Yka tabultoruTabulation width ConfigDialog>Pou~v se konfigura n soubor:Using configuration file at: ConfigDialog(przd)(none)FileDialogButtonFVyberte soubor, kter se m otevYtSelect file to openFileSelectButtonNZadejte nzev lokalizace (napY.: cs_CZ)"Enter locale name (example: en_US) LocaleDialog*Nastavit jako vchozSet as default LocaleDialogInformace InformationProxyn}dn zpis od posledn zmny (pYidejte ! pro pYepsn).No write since last change (add ! to override)Proxy$PYidat do slovnkuAdd to dictionary ReTextEdit*Obrzky (*.png *.jpg)Images (*.png *.jpg) ReTextEditUlo~it obrzek Save image ReTextEditNelze analyzovat obsah souboru, zkontrolujte, zda mte nainstalovn <a href="%s">nezbytn modul</a>!aCould not parse file contents, check if you have the necessary module installed! ReTextTabNov dokument New document ReTextTabSoubory %s%s files ReTextWindow&Upravit&Edit ReTextWindow&Soubor&File ReTextWindow&Npovda&Help ReTextWindowO QtAbout Qt ReTextWindow"O programu ReText About ReText ReTextWindow&Vaechny soubory (*) All files (*) ReTextWindow"Alternativn textAlt text ReTextWindow8Autor: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindow Tu nBold ReTextWindow`Nelze ulo~it, proto~e soubor je pouze pro  ten!,Cannot save to file because it is read-only! ReTextWindowtNelze ulo~it do souboru, kter je otevYen v jin zlo~ce!1Cannot save to file which is open in another tab! ReTextWindow4Rozliaovat velikost psmenCase sensitively ReTextWindow,Zmnit psmo v editoruChange editor font ReTextWindow,Zmnit psmo v nhleduChange preview font ReTextWindow ZavYtClose ReTextWindowZavYt kartu Close tab ReTextWindowKoprovatCopy ReTextWindowVyjmoutCut ReTextWindowVchoz syntaxDefault markup ReTextWindowLiata prav Edit toolbar ReTextWindowPovolitEnable ReTextWindowExportovatExport ReTextWindow&Exportovat dokumentExport document ReTextWindow4Exportovat dokument do ODTExport document to ODT ReTextWindow4Exportovat dokument do PDFExport document to PDF ReTextWindow:NepodaYilo se spustit pYkaz:Failed to execute the command: ReTextWindowRe~im FakeVim FakeVim mode ReTextWindowLiata souboru File toolbar ReTextWindowNajt text Find text ReTextWindowFormtovn Formatting ReTextWindow*Celoobrazovkov re~imFullscreen mode ReTextWindow0Zskejte npovdu onlineGet help online ReTextWindowKd HTML HTML code ReTextWindow6Soubory HTML (*.html *.htm)HTML files (*.html *.htm) ReTextWindowPokud se rozhodnete, ~e soubor nechcete znovu na st, automatick ukldn bude v tomto sezen vypnuto, aby se zabrnilo ztrt dat.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindowKurzvaItalic ReTextWindowText odkazu Link text ReTextWindow}iv nhled Live preview ReTextWindowSyntax MarkdownMarkdown syntax ReTextWindow,PYesunout o Ydek n~eMove line down ReTextWindow,PYesunout o Ydek vae Move line up ReTextWindowNovNew ReTextWindowNov dokument New document ReTextWindowNsledujcNext ReTextWindow"Nsledujc kartaNext tab ReTextWindowOtevYtOpen ReTextWindowOtevYt nedvn Open recent ReTextWindowHTextov soubory OpenDocument (*.odt)OpenDocument text files (*.odt) ReTextWindow&Soubory PDF (*.pdf)PDF files (*.pdf) ReTextWindow Vlo~itPaste ReTextWindow&Prost text (*.txt)Plain text (*.txt) ReTextWindow8Prosm, soubor nkam ulo~te. Please, save the file somewhere. ReTextWindowNastaven Preferences ReTextWindow NhledPreview ReTextWindowPYedchozPrevious ReTextWindowPYedchoz karta Previous tab ReTextWindowTisknoutPrint ReTextWindow"Tisknout dokumentPrint document ReTextWindowNhled tisku Print preview ReTextWindowUkon itQuit ReTextWindowFReText %s (s pou~itm PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindow ZnovuRedo ReTextWindowZnovu na stReload ReTextWindowNahraditReplace ReTextWindowNahradit vae Replace all ReTextWindowNahradit Replace with ReTextWindow Ulo~itSave ReTextWindowUlo~it jakoSave as ReTextWindowUlo~it soubor Save file ReTextWindow NajtSearch ReTextWindowLiata hlednSearch toolbar ReTextWindowHVyberte ze seznamu kdovn souboru:#Select file encoding from the list: ReTextWindowTVyberte jeden nebo vce souboro k otevYen#Select one or several files to open ReTextWindow"Nastavit kdovn Set encoding ReTextWindow&Nastavit lokalizaci Set locale ReTextWindowZobrazit slo~kuShow directory ReTextWindowxJednoduch, ale mocn editor pro Markdown a reStructuredText ConfigDialog Using configuration file at: Používá se konfigurační soubor: Behavior Chování Automatically save documents Automaticky ukládat dokumenty Automatically open last documents on startup Při spuštění automaticky otevřít naposledy zobrazené dokumenty Restore window geometry Obnovit rozměry okna Open external links in ReText window Otevírat externí odkazy v okně ReTextu Markdown syntax extensions (comma-separated) Přípony syntaxe Markdown (oddělené čárkami) Enable synchronized scrolling for Markdown Zapnout synchronizovaný posun pro Markdown Editor Editor Highlight current line Zvýrazňovat aktuální řádek Show line numbers Zobrazovat čísla řádků Line numbers are relative to current line Číslování řádků je odvozené od aktuálního řádku Tab key inserts spaces Klávesa Tabulátor vkládá mezery Tabulation width Šířka tabulátoru Draw vertical line at column Svislá čára v sloupci Enable soft wrap Povolit zalamování na místě bílých znaků Show document stats Zobrazovat statistiky dokumentu Interface Rozhraní Icon theme name Název motivu ikon Stylesheet file Soubor stylopisu Help Nápověda Number of recent documents Default preview state Hide toolbar Hide tabs bar when there is only one tab Show full path in window title Live preview Živý náhled Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (prázdý) FileSelectButton Select file to open Vyberte soubor, který se má otevřít InsertTableDialog Insert table Number of rows Number of columns LocaleDialog Enter locale name (example: en_US) Zadejte název lokalizace (např.: cs_CZ) Set as default Nastavit jako výchozí Proxy No write since last change (add ! to override) Žádný zápis od poslední změny (přidejte ! pro přepsání) Information Informace ReTextEdit Add to dictionary Přidat do slovníku Save image Uložit obrázek Images (*.png *.jpg) Obrázky (*.png *.jpg) ReTextTab New document Nový dokument Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Nelze analyzovat obsah souboru, zkontrolujte, zda máte nainstalován <a href="%s">nezbytný modul</a>! Create missing file? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow File toolbar Lišta souboru Edit toolbar Lišta úprav Search toolbar Lišta hledání New Nový Open Otevřít Set encoding Nastavit kódování Reload Znovu načíst Save Uložit Save as Uložit jako Next tab Následující karta Previous tab Předchozí karta Close tab Zavřít kartu Print Tisknout Print preview Náhled tisku View HTML code Zobrazit kód HTML Change editor font Změnit písmo v editoru Change preview font Změnit písmo v náhledu Find text Najít text Preview Náhled Live preview Živý náhled Table editing mode Režim úpravy tabulek FakeVim mode Režim FakeVim Fullscreen mode Celoobrazovkový režim Preferences Nastavení Quit Ukončit Undo Zpět Redo Znovu Copy Kopírovat Cut Vyjmout Paste Vložit Move line up Přesunout o řádek výše Move line down Přesunout o řádek níže Enable Povolit Set locale Nastavit lokalizaci Use WebKit renderer Použít WebKit k vykreslování Use WebEngine (Chromium) renderer Použít WebEngine (Chromium) k vykreslování Show directory Zobrazit složku Next Následující Previous Předchozí Replace Nahradit Replace all Nahradit vše Close Zavřít Get help online Získejte nápovědu online About ReText O programu ReText About Qt O Qt Bold Tučné Italic Kurzíva Underline Podtržené Formatting Formátování Symbols Symboly &File &Soubor &Edit &Upravit &Help &Nápověda Open recent Otevřít nedávné Export Exportovat Spell check Kontrola pravopisu Default markup Výchozí syntax Search Najít Replace with Nahradit Case sensitively Rozlišovat velikost písmen New document Nový dokument Please, save the file somewhere. Prosím, soubor někam uložte. Select one or several files to open Vyberte jeden nebo více souborů k otevření Supported files Podporované soubory All files (*) Všechny soubory (*) Select file encoding from the list: Vyberte ze seznamu kódování souboru: Plain text (*.txt) Prostý text (*.txt) %s files Example of final string: Markdown files Soubory %s Save file Uložit soubor Cannot save to file which is open in another tab! Nelze uložit do souboru, který je otevřený v jiné záložce! Cannot save to file because it is read-only! Nelze uložit, protože soubor je pouze pro čtení! Export document to ODT Exportovat dokument do ODT OpenDocument text files (*.odt) Textové soubory OpenDocument (*.odt) HTML files (*.html *.htm) Soubory HTML (*.html *.htm) Unrecognized paperSize setting "%s". Nerozpoznané nastavení paperSize "%s". Export document to PDF Exportovat dokument do PDF PDF files (*.pdf) Soubory PDF (*.pdf) Print document Tisknout dokument Export document Exportovat dokument Failed to execute the command: Nepodařilo se spustit příkaz: Alt text Alternativní text URL URL Link text Text odkazu This file has been deleted by other application. Please make sure you save the file before exit. Soubor byl smazán jinou aplikací. Před zavřením programu se prosím ujistěte, že jste soubor uložili. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? Tento dokument byl změněn jinou aplikací. Chcete načíst novou verzi? (Tímto se zruší všechny změny.) If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Pokud se rozhodnete, že soubor nechcete znovu načíst, automatické ukládání bude v tomto sezení vypnuto, aby se zabránilo ztrátě dat. The document has been modified. Do you want to save your changes? Dokument byl změněn. Chcete uložit své změny? HTML code Kód HTML ReText %s (using PyMarkups %s) ReText %s (s použitím PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText Jednoduchý, ale mocný editor pro Markdown a reStructuredText Author: Dmitry Shachnev, 2011 Autor: Dmitry Shachnev, 2011 Markdown syntax Syntax Markdown reStructuredText syntax Syntax reStructuredText Go to line Insert table Paste image Type the line number Insert images by file path Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters %d slov | %d písmen/číslic | %d znaků main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_cy.qm0000644000175000017500000001406600000000000016154 0ustar00dmitrydmitrymodiwl hanfodol</a>.aCould not parse file contents, check if you have the necessary module installed! ReTextTabDogfen newydd New document ReTextTab%s ffeil%s files ReTextWindow&Golygu&Edit ReTextWindow &Ffeil&File ReTextWindow&Cymorth&Help ReTextWindowYnghylch QtAbout Qt ReTextWindowTua ReText About ReText ReTextWindowPob ffeil (*) All files (*) ReTextWindow8Awdur: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindowBrasBold ReTextWindowfMethu chadw i ffeil gan ei bod yn darllen yn unig,Cannot save to file because it is read-only! ReTextWindowGan casCase sensitively ReTextWindowCopiCopy ReTextWindow TorriCut ReTextWindow Bar offer golygu Edit toolbar ReTextWindowGalluogiEnable ReTextWindowAllforioExport ReTextWindowAllforio dogfenExport document ReTextWindow*Allforio dogfen i ODTExport document to ODT ReTextWindow*Allforio dogfen i PDFExport document to PDF ReTextWindow:Methwyd rhedeg y gorchymyn:Failed to execute the command: ReTextWindow$Bar offer ffeiliau File toolbar ReTextWindowCanfod testun Find text ReTextWindowFformatio Formatting ReTextWindow Modd sgrin llawnFullscreen mode ReTextWindowCymorth ar-leinGet help online ReTextWindowCod HTML HTML code ReTextWindow8Ffeiliau HTML (*.html *.htm)HTML files (*.html *.htm) ReTextWindow ItaligItalic ReTextWindowRhagolwg byw Live preview ReTextWindow$Cystrawen markdownMarkdown syntax ReTextWindow NewyddNew ReTextWindowDogfen newydd New document ReTextWindow NesafNext ReTextWindowAgorOpen ReTextWindowAgor diweddar Open recent ReTextWindowHFfeiliau testun OpenDocument (*.odt)OpenDocument text files (*.odt) ReTextWindow(Ffeiliau PDF (*.pdf)PDF files (*.pdf) ReTextWindow GludoPaste ReTextWindow(Testun plaen (*.txt)Plain text (*.txt) ReTextWindow>Cadwch y ffeil i leoliad arall. Please, save the file somewhere. ReTextWindowRhagolwgPreview ReTextWindowCyntPrevious ReTextWindowArgraffuPrint ReTextWindowArgraffu dogfenPrint document ReTextWindow"Rhagolwg argraffu Print preview ReTextWindow GadaelQuit ReTextWindowAilwneudRedo ReTextWindowCadwSave ReTextWindowCadw felSave as ReTextWindowCadw ffeil Save file ReTextWindowChwilioSearch ReTextWindow"Bar offer chwilioSearch toolbar ReTextWindowBDewis un neu sawl ffeil i'w hagor#Select one or several files to open ReTextWindowGosod iaith Set locale ReTextWindow$Dangos cyfeiriadurShow directory ReTextWindowzGolygydd syml ond pwerus ar gyfer Markdown a reStructuredText ConfigDialog Behavior Automatically save documents Restore window geometry Open external links in ReText window Editor Highlight current line Show line numbers Tab key inserts spaces Tabulation width Interface Icon theme name Stylesheet file Markdown syntax extensions (comma-separated) Help Cymorth Enable synchronized scrolling for Markdown Draw vertical line at column Automatically open last documents on startup Using configuration file at: Number of recent documents Default preview state Line numbers are relative to current line Enable soft wrap Show document stats Hide toolbar Hide tabs bar when there is only one tab Show full path in window title Live preview Rhagolwg byw Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) FileSelectButton Select file to open InsertTableDialog Insert table Number of rows Number of columns LocaleDialog Enter locale name (example: en_US) Set as default Proxy No write since last change (add ! to override) Information ReTextEdit Save image Images (*.png *.jpg) Add to dictionary ReTextTab New document Dogfen newydd Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Methu â dosrannu cynnwys y ffeil. Gwiriwch os ydych chi wedi arsefydlu'r <a href="%s">modiwl hanfodol</a>. Create missing file? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow File toolbar Bar offer ffeiliau Edit toolbar Bar offer golygu Search toolbar Bar offer chwilio New Newydd Open Agor Save Cadw Save as Cadw fel Print Argraffu Print preview Rhagolwg argraffu View HTML code Dangos cod HTML Find text Canfod testun Preview Rhagolwg Live preview Rhagolwg byw Fullscreen mode Modd sgrin llawn Quit Gadael Undo Dadwneud Redo Ailwneud Copy Copi Cut Torri Paste Gludo Enable Galluogi Set locale Gosod iaith Use WebKit renderer Defnyddio rendrydd Webkit Next Nesaf Previous Cynt Get help online Cymorth ar-lein About ReText Tua ReText About Qt Ynghylch Qt Bold Bras Italic Italig Underline Tanlinellu Symbols Symbolau &File &Ffeil &Edit &Golygu &Help &Cymorth Open recent Agor diweddar Export Allforio Spell check Gwirio sillafu Formatting Fformatio Search Chwilio Case sensitively Gan cas New document Dogfen newydd Please, save the file somewhere. Cadwch y ffeil i leoliad arall. Show directory Dangos cyfeiriadur Select one or several files to open Dewis un neu sawl ffeil i'w hagor Supported files Ffeiliau a gynhaliwyd All files (*) Pob ffeil (*) Plain text (*.txt) Testun plaen (*.txt) %s files Example of final string: Markdown files %s ffeil Save file Cadw ffeil Cannot save to file because it is read-only! Methu â chadw i ffeil gan ei bod yn darllen yn unig Export document to ODT Allforio dogfen i ODT OpenDocument text files (*.odt) Ffeiliau testun OpenDocument (*.odt) HTML files (*.html *.htm) Ffeiliau HTML (*.html *.htm) Export document to PDF Allforio dogfen i PDF PDF files (*.pdf) Ffeiliau PDF (*.pdf) Print document Argraffu dogfen Export document Allforio dogfen Failed to execute the command: Methwyd â rhedeg y gorchymyn: The document has been modified. Do you want to save your changes? Cafodd y ddogfen hon ei haddasu. Ydych chi am gadw'ch newidiadau? HTML code Cod HTML Simple but powerful editor for Markdown and reStructuredText Golygydd syml ond pwerus ar gyfer Markdown a reStructuredText Author: Dmitry Shachnev, 2011 Awdur: Dmitry Shachnev, 2011 Markdown syntax Cystrawen markdown reStructuredText syntax Cystrawen reStructuredText Default markup Preferences Set encoding Select file encoding from the list: Reload Next tab Previous tab Table editing mode FakeVim mode This file has been deleted by other application. Please make sure you save the file before exit. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Change editor font Change preview font ReText %s (using PyMarkups %s) Close Alt text URL Link text Replace Replace all Replace with Cannot save to file which is open in another tab! Use WebEngine (Chromium) renderer Close tab Go to line Insert table Insert images by file path Paste image Move line up Move line down Type the line number Unrecognized paperSize setting "%s". Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_da.qm0000644000175000017500000003142100000000000016117 0ustar00dmitrydmitryb#dyYc'gt{zr =DVgnl)!D!  by%v #S4J)m r5t"<#[Fr,.2 '&0B~ 0 E%k 5'ϗ$G°ϡ " %Tf)+I9$~5'"u 7*  [ @ h> f la v#Y $ b/-3'zlexI UY*)  O(:.hi.Tbn automatisk sidste dokument ved opstart,Automatically open last documents on startup ConfigDialog2Gem automatisk dokumenterAutomatically save documents ConfigDialogOpfrselBehavior ConfigDialog:Tegn lodret linje ved kolonneDraw vertical line at column ConfigDialogTekstbehandlerEditor ConfigDialog.Aktivr bld ombrydningEnable soft wrap ConfigDialogTAktivr synkroniseret rulning for Markdown*Enable synchronized scrolling for Markdown ConfigDialog HjlpHelp ConfigDialog.Fremhv nuvrende linjeHighlight current line ConfigDialogIkontemanavnIcon theme name ConfigDialogGrnseflade Interface ConfigDialog\Linjenumre er relative til den nuvrende linje)Line numbers are relative to current line ConfigDialog(Live-forhndsvisning Live preview ConfigDialogVMarkdown-syntaksudvidelser (kommasepareret),Markdown syntax extensions (comma-separated) ConfigDialogFbn eksterne links i ReText-vinduet$Open external links in ReText window ConfigDialog,Gendan vinduesgeometriRestore window geometry ConfigDialog*Vis dokumentstatistikShow document stats ConfigDialogVis linjenumreShow line numbers ConfigDialogTypografiarkfilStylesheet file ConfigDialogBTabulatortast indstter mellemrumTab key inserts spaces ConfigDialogTabulatorbreddeTabulation width ConfigDialog:Bruger konfigurationsfil ved:Using configuration file at: ConfigDialog(ingen)(none)FileDialogButton6Vlg en fil, der skal bnesSelect file to openFileSelectButtonJIndtast lokalitetsnavn (f.eks. da_DK)"Enter locale name (example: en_US) LocaleDialog St som standardSet as default LocaleDialogInformation InformationProxyIntet skrevet siden sidste ndring (tilfj ! for at tilsidestte).No write since last change (add ! to override)Proxy"Tilfj til ordbogAdd to dictionary ReTextEdit,Billeder (*.png *.jpg)Images (*.png *.jpg) ReTextEditGem billede Save image ReTextEditKunne ikke indlse filens indhold, kontroller at du har det <a href="%s">ndvendige modul</a> installeret.aCould not parse file contents, check if you have the necessary module installed! ReTextTabNyt dokument New document ReTextTab%s-filer%s files ReTextWindow&Rediger&Edit ReTextWindow&Fil&File ReTextWindow &Hjlp&Help ReTextWindow Om QtAbout Qt ReTextWindowOm ReText About ReText ReTextWindowAlle filer (*) All files (*) ReTextWindow Alternativ tekstAlt text ReTextWindow@Forfatter: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindowFedBold ReTextWindowfKan ikke gemme filen, fordi den er skrivebeskyttet!,Cannot save to file because it is read-only! ReTextWindownKan ikke gemme til fil som er ben i et andet faneblad!1Cannot save to file which is open in another tab! ReTextWindowJSkelnen mellem store og sm bogstaverCase sensitively ReTextWindowHSkift skrifttype til tekstbehandlingChange editor font ReTextWindowHSkift skrifttype til forhndsvisningChange preview font ReTextWindowLukClose ReTextWindowLuk faneblad Close tab ReTextWindow KopierCopy ReTextWindowKlipCut ReTextWindowStandardmarkupDefault markup ReTextWindow0Redigering-vrktjslinje Edit toolbar ReTextWindowAktivrEnable ReTextWindowEksportExport ReTextWindow$Eksporter dokumentExport document ReTextWindow4Eksporter dokument til ODTExport document to ODT ReTextWindow4Eksporter dokument til PDFExport document to PDF ReTextWindow:Kunne ikke udfre kommandoen:Failed to execute the command: ReTextWindow FakeVim-tilstand FakeVim mode ReTextWindow"Fil-vrktjslinje File toolbar ReTextWindowFind tekst Find text ReTextWindowFormatering Formatting ReTextWindow"FuldskrmsvisningFullscreen mode ReTextWindowF hjlp onlineGet help online ReTextWindowHTML-kode HTML code ReTextWindow2HTML-filer (*.html *.htm)HTML files (*.html *.htm) ReTextWindowHvis du vlger ikke er genindlse filen, deaktiveres automatisk gem-tilstand for denne session for at undg tab af data.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindow KursivItalic ReTextWindowLink-tekst Link text ReTextWindow(Live-forhndsvisning Live preview ReTextWindow Markdown-syntaksMarkdown syntax ReTextWindowFlyt linje nedMove line down ReTextWindowFlyt linje op Move line up ReTextWindowNyNew ReTextWindowNyt dokument New document ReTextWindow NsteNext ReTextWindowNste fanebladNext tab ReTextWindowbnOpen ReTextWindowbn seneste Open recent ReTextWindow>OpenDocument-tekstfiler (*.odt)OpenDocument text files (*.odt) ReTextWindow"PDF-filer (*.pdf)PDF files (*.pdf) ReTextWindow IndstPaste ReTextWindow"Ren tekst (*.txt)Plain text (*.txt) ReTextWindow6Gem venligst filen et sted. Please, save the file somewhere. ReTextWindowPrferencer Preferences ReTextWindowForhndsvisningPreview ReTextWindowForegendePrevious ReTextWindow Forrige faneblad Previous tab ReTextWindowUdskriftPrint ReTextWindow Udskriv dokumentPrint document ReTextWindow Udskriftsvisning Print preview ReTextWindow AfslutQuit ReTextWindow>ReText %s (bruger PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindow GendanRedo ReTextWindowGenindlsReload ReTextWindow ErstatReplace ReTextWindowErstart alle Replace all ReTextWindowErstat med Replace with ReTextWindowGemSave ReTextWindowGem somSave as ReTextWindowGem fil Save file ReTextWindowSgSearch ReTextWindow$Sge-vrktjslinjeSearch toolbar ReTextWindow6Vlg filkodning fra listen:#Select file encoding from the list: ReTextWindowRVlg en eller flere filer, der skal bnes#Select one or several files to open ReTextWindowIndstil kodning Set encoding ReTextWindow,St sprogindstillinger Set locale ReTextWindowVis mappeShow directory ReTextWindownEnkel men strk editor til Markdown og reStructuredText ConfigDialog Using configuration file at: Bruger konfigurationsfil ved: Behavior Opførsel Automatically save documents Gem automatisk dokumenter Automatically open last documents on startup Åbn automatisk sidste dokument ved opstart Restore window geometry Gendan vinduesgeometri Open external links in ReText window Åbn eksterne links i ReText-vinduet Markdown syntax extensions (comma-separated) Markdown-syntaksudvidelser (kommasepareret) Enable synchronized scrolling for Markdown Aktivér synkroniseret rulning for Markdown Editor Tekstbehandler Highlight current line Fremhæv nuværende linje Show line numbers Vis linjenumre Line numbers are relative to current line Linjenumre er relative til den nuværende linje Tab key inserts spaces Tabulatortast indsætter mellemrum Tabulation width Tabulatorbredde Draw vertical line at column Tegn lodret linje ved kolonne Enable soft wrap Aktivér blød ombrydning Show document stats Vis dokumentstatistik Interface Grænseflade Icon theme name Ikontemanavn Stylesheet file Typografiarkfil Help Hjælp Number of recent documents Default preview state Hide toolbar Hide tabs bar when there is only one tab Show full path in window title Live preview Live-forhåndsvisning Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (ingen) FileSelectButton Select file to open Vælg en fil, der skal åbnes InsertTableDialog Insert table Number of rows Number of columns LocaleDialog Enter locale name (example: en_US) Indtast lokalitetsnavn (f.eks. da_DK) Set as default Sæt som standard Proxy No write since last change (add ! to override) Intet skrevet siden sidste ændring (tilføj ! for at tilsidesætte) Information Information ReTextEdit Add to dictionary Tilføj til ordbog Save image Gem billede Images (*.png *.jpg) Billeder (*.png *.jpg) ReTextTab New document Nyt dokument Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Kunne ikke indlæse filens indhold, kontroller at du har det <a href="%s">nødvendige modul</a> installeret. Create missing file? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow File toolbar Fil-værktøjslinje Edit toolbar Redigering-værktøjslinje Search toolbar Søge-værktøjslinje New Ny Open Åbn Set encoding Indstil kodning Reload Genindlæs Save Gem Save as Gem som Next tab Næste faneblad Previous tab Forrige faneblad Close tab Luk faneblad Print Udskrift Print preview Udskriftsvisning View HTML code Vis HTML-kode Change editor font Skift skrifttype til tekstbehandling Change preview font Skift skrifttype til forhåndsvisning Find text Find tekst Preview Forhåndsvisning Live preview Live-forhåndsvisning Table editing mode Tabelredigeringstilstand FakeVim mode FakeVim-tilstand Fullscreen mode Fuldskærmsvisning Preferences Præferencer Quit Afslut Undo Fortryd Redo Gendan Copy Kopier Cut Klip Paste Indsæt Move line up Flyt linje op Move line down Flyt linje ned Enable Aktivér Set locale Sæt sprogindstillinger Use WebKit renderer Anvend WebKit-fremviser Use WebEngine (Chromium) renderer Brug WebEngine-fremviser (Chromium) Show directory Vis mappe Next Næste Previous Foregående Replace Erstat Replace all Erstart alle Close Luk Get help online Få hjælp online About ReText Om ReText About Qt Om Qt Bold Fed Italic Kursiv Underline Understregning Formatting Formatering Symbols Symboler &File &Fil &Edit &Rediger &Help &Hjælp Open recent Åbn seneste Export Eksport Spell check Stavekontrol Default markup Standardmarkup Search Søg Replace with Erstat med Case sensitively Skelnen mellem store og små bogstaver New document Nyt dokument Please, save the file somewhere. Gem venligst filen et sted. Select one or several files to open Vælg en eller flere filer, der skal åbnes Supported files Understøttede filer All files (*) Alle filer (*) Select file encoding from the list: Vælg filkodning fra listen: Plain text (*.txt) Ren tekst (*.txt) %s files Example of final string: Markdown files %s-filer Save file Gem fil Cannot save to file which is open in another tab! Kan ikke gemme til fil som er åben i et andet faneblad! Cannot save to file because it is read-only! Kan ikke gemme filen, fordi den er skrivebeskyttet! Export document to ODT Eksporter dokument til ODT OpenDocument text files (*.odt) OpenDocument-tekstfiler (*.odt) HTML files (*.html *.htm) HTML-filer (*.html *.htm) Unrecognized paperSize setting "%s". Ukendt papirstørrelse "%s". Export document to PDF Eksporter dokument til PDF PDF files (*.pdf) PDF-filer (*.pdf) Print document Udskriv dokument Export document Eksporter dokument Failed to execute the command: Kunne ikke udføre kommandoen: Alt text Alternativ tekst URL URL Link text Link-tekst This file has been deleted by other application. Please make sure you save the file before exit. Denne fil er blevet slettet af et andet program. Sørg for at du gemmer filen inden afslutning. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? Dette dokument er blevet ændret af et andet program. Vil du genindlæse filen (dette fil kasserer alle finde ændringer)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Hvis du vælger ikke er genindlæse filen, deaktiveres automatisk gem-tilstand for denne session for at undgå tab af data. The document has been modified. Do you want to save your changes? Dokumentet er blevet ændret. Ønsker du at gemme dine ændringer? HTML code HTML-kode ReText %s (using PyMarkups %s) ReText %s (bruger PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText Enkel men stærk editor til Markdown og reStructuredText Author: Dmitry Shachnev, 2011 Forfatter: Dmitry Shachnev, 2011 Markdown syntax Markdown-syntaks reStructuredText syntax reStructuredText-syntaks Go to line Insert table Paste image Type the line number Insert images by file path Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters %d o | %d a | %d t main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_de.qm0000644000175000017500000003326100000000000016127 0ustar00dmitrydmitryxb&dy Yc'gtqzr"DV9gl)$D!  by%vA #S (4J,`mr5t$&[Fr01 ' 0Bp 0 E(k 5+ϗ"h'#°wϡ %? (T)+I!H9'~'%"7. - @/ h>  la v& $ j/13*/z eI YU+a*) 8 O+t.xi2Zuletzt bearbeitete Dokumente automatisch bei Programmstart ffnen,Automatically open last documents on startup ConfigDialog>Dokumente automatisch speichernAutomatically save documents ConfigDialogVerhaltenBehavior ConfigDialogBZeichne vertikale Linie in SpalteDraw vertical line at column ConfigDialog EditorEditor ConfigDialogFlexiblen Zeilenumbruch aktivieren. Der Umbruch richtet sich hierbei nach der Fenstergre und nicht nach Steuerzeichen im Text.Enable soft wrap ConfigDialogTAktiviere fr Markdown synchrones Scrollen*Enable synchronized scrolling for Markdown ConfigDialog HilfeHelp ConfigDialog4Aktuelle Zeile hervorhebenHighlight current line ConfigDialog"Symbolschema-NameIcon theme name ConfigDialogOberflche Interface ConfigDialogpZeilennummern verstehen sich relativ zur aktuellen Zeile)Line numbers are relative to current line ConfigDialogLive-Vorschau Live preview ConfigDialogtErweiterungen fr Markdown-Syntax (durch Kommata getrennt),Markdown syntax extensions (comma-separated) ConfigDialogRExterne Verweise im ReText-Fenster ffnen$Open external links in ReText window ConfigDialog<Fenster-Dimensionierung merkenRestore window geometry ConfigDialogDStatistiken zum Dokument anzeigen.Show document stats ConfigDialog,Zeilennummern anzeigenShow line numbers ConfigDialog"Stilvorlage-DateiStylesheet file ConfigDialog<Tabulator fgt Leerzeichen einTab key inserts spaces ConfigDialog Tabulator-BreiteTabulation width ConfigDialoghNutze Konfigurationsdatei aus folgendem Verzeichnis:Using configuration file at: ConfigDialog(keine)(none)FileDialogButton6Zu ffnende Datei auswhlenSelect file to openFileSelectButtonNEingabe der Lokalisierung (z.B.: de_DE)"Enter locale name (example: en_US) LocaleDialog&Als Standard setzenSet as default LocaleDialogInformation InformationProxyNichts geschrieben seit der letzten nderung (! zum berschreiben).No write since last change (add ! to override)Proxy4Zum Wrterbuch hinzufgen.Add to dictionary ReTextEdit$Bild (*.png *.jpg)Images (*.png *.jpg) ReTextEdit$Als Bild speichern Save image ReTextEditKonnte den Dateiinhalt nicht parsen. berprfen Sie, ob das <a href="%s">bentigte Modul</a> installiert ist!aCould not parse file contents, check if you have the necessary module installed! ReTextTabNeues Dokument New document ReTextTab%s-Dateien%s files ReTextWindow&Bearbeiten&Edit ReTextWindow &Datei&File ReTextWindow &Hilfe&Help ReTextWindowber QtAbout Qt ReTextWindowber ReText About ReText ReTextWindow Alle Dateien (*) All files (*) ReTextWindowAlt-TextAlt text ReTextWindow8Autor: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindowFettBold ReTextWindowpSpeichern ist nicht mglich, Datei ist schreibgeschtzt.,Cannot save to file because it is read-only! ReTextWindowSpeichern in eine Datei, die in einem anderen Tab geffnet ist, ist nicht mglich!1Cannot save to file which is open in another tab! ReTextWindow*Gro-/KleinschreibungCase sensitively ReTextWindow:Schriftart des Editors ndernChange editor font ReTextWindow<Schriftart der Vorschau ndernChange preview font ReTextWindowSchlieenClose ReTextWindow Reiter schlieen Close tab ReTextWindowKopierenCopy ReTextWindowAusschneidenCut ReTextWindowStandard-MarkupDefault markup ReTextWindow6Werkzeugleiste 'Bearbeiten' Edit toolbar ReTextWindowAktivierenEnable ReTextWindowExportierenExport ReTextWindow(Dokument exportierenExport document ReTextWindow8Dokument als ODT exportierenExport document to ODT ReTextWindow8Dokument als PDF exportierenExport document to PDF ReTextWindowLAusfhrung des Befehls fehlgeschlagen:Failed to execute the command: ReTextWindow Pseudo-Vim-Modus FakeVim mode ReTextWindow,Werkzeugleiste 'Datei' File toolbar ReTextWindow Suche Find text ReTextWindowFormatieren Formatting ReTextWindowVollbildmodusFullscreen mode ReTextWindow*Online Hilfe bekommenGet help online ReTextWindowHTML-Code HTML code ReTextWindow6HTML-Dateien (*.html *.htm)HTML files (*.html *.htm) ReTextWindowWenn Sie die Datei nicht neu laden, wird das automatische Speichern fr diese Sitzung deaktiviert, um Datenverlust zu vermeiden. lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindow KursivItalic ReTextWindowLinktext Link text ReTextWindowLive-Vorschau Live preview ReTextWindowMarkdown-SyntaxMarkdown syntax ReTextWindow8Zeile nach unten verschiebenMove line down ReTextWindow6Zeile nach oben verschieben Move line up ReTextWindowNeuNew ReTextWindowNeues Dokument New document ReTextWindow WeiterNext ReTextWindowNchster ReiterNext tab ReTextWindow ffnenOpen ReTextWindow Zuletzt geffnet Open recent ReTextWindow8OpenDocument-Dateien (*.odt)OpenDocument text files (*.odt) ReTextWindow&PDF-Dateien (*.pdf)PDF files (*.pdf) ReTextWindowEinfgenPaste ReTextWindow Klartext (*.txt)Plain text (*.txt) ReTextWindowFBitte die Datei irgendwo speichern. Please, save the file somewhere. ReTextWindowEinstellungen Preferences ReTextWindowVorschauPreview ReTextWindow ZurckPrevious ReTextWindowVoriger Reiter Previous tab ReTextWindowDruckenPrint ReTextWindow Dokument druckenPrint document ReTextWindowDruckvorschau Print preview ReTextWindowBeendenQuit ReTextWindow8ReText %s (mit PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindowWiederholenRedo ReTextWindowNeu ladenReload ReTextWindowErsetzenReplace ReTextWindowAlle ersetzen Replace all ReTextWindowErsetzen durch Replace with ReTextWindowSpeichernSave ReTextWindowSpeichern unterSave as ReTextWindowDatei speichern Save file ReTextWindow SuchenSearch ReTextWindow.Werkzeugleiste 'Suchen'Search toolbar ReTextWindowDZeichenkodierung aus Liste whlen:#Select file encoding from the list: ReTextWindow\Eine oder mehrere Dateien zum ffnen auswhlen#Select one or several files to open ReTextWindow4Zeichenkodierung festlegen Set encoding ReTextWindow"Spracheinstellung Set locale ReTextWindow(Verzeichnis anzeigenShow directory ReTextWindowEinfacher aber mchtiger Editor fr Markdown and reStructuredText ConfigDialog Using configuration file at: Nutze Konfigurationsdatei aus folgendem Verzeichnis: Behavior Verhalten Automatically save documents Dokumente automatisch speichern Automatically open last documents on startup Zuletzt bearbeitete Dokumente automatisch bei Programmstart öffnen Number of recent documents Restore window geometry Fenster-Dimensionierung merken Default preview state Open external links in ReText window Externe Verweise im ReText-Fenster öffnen Markdown syntax extensions (comma-separated) Erweiterungen für Markdown-Syntax (durch Kommata getrennt) Enable synchronized scrolling for Markdown Aktiviere für Markdown synchrones Scrollen Editor Editor Highlight current line Aktuelle Zeile hervorheben Show line numbers Zeilennummern anzeigen Line numbers are relative to current line Zeilennummern verstehen sich relativ zur aktuellen Zeile Tab key inserts spaces Tabulator fügt Leerzeichen ein Tabulation width Tabulator-Breite Draw vertical line at column Zeichne vertikale Linie in Spalte Enable soft wrap Flexiblen Zeilenumbruch aktivieren. Der Umbruch richtet sich hierbei nach der Fenstergröße und nicht nach Steuerzeichen im Text. Show document stats Statistiken zum Dokument anzeigen. Interface Oberfläche Hide toolbar Icon theme name Symbolschema-Name Stylesheet file Stilvorlage-Datei Hide tabs bar when there is only one tab Show full path in window title Help Hilfe Live preview Live-Vorschau Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (keine) FileSelectButton Select file to open Zu öffnende Datei auswählen InsertTableDialog Insert table Number of rows Number of columns LocaleDialog Enter locale name (example: en_US) Eingabe der Lokalisierung (z.B.: de_DE) Set as default Als Standard setzen Proxy No write since last change (add ! to override) Nichts geschrieben seit der letzten Änderung (! zum Überschreiben) Information Information ReTextEdit Add to dictionary Zum Wörterbuch hinzufügen. Save image Als Bild speichern Images (*.png *.jpg) Bild (*.png *.jpg) ReTextTab New document Neues Dokument Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Konnte den Dateiinhalt nicht parsen. Überprüfen Sie, ob das <a href="%s">benötigte Modul</a> installiert ist! Create missing file? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow File toolbar Werkzeugleiste 'Datei' Edit toolbar Werkzeugleiste 'Bearbeiten' Search toolbar Werkzeugleiste 'Suchen' New Neu Open Öffnen Set encoding Zeichenkodierung festlegen Reload Neu laden Save Speichern Save as Speichern unter Next tab Nächster Reiter Previous tab Voriger Reiter Close tab Reiter schließen Print Drucken Print preview Druckvorschau View HTML code HTML-Code anzeigen Change editor font Schriftart des Editors ändern Change preview font Schriftart der Vorschau ändern Find text Suche Go to line Preview Vorschau Live preview Live-Vorschau Insert table Table editing mode Tabellenbearbeitungsmodus FakeVim mode Pseudo-Vim-Modus Fullscreen mode Vollbildmodus Preferences Einstellungen Quit Beenden Undo Rückgängig Redo Wiederholen Copy Kopieren Cut Ausschneiden Paste Einfügen Paste image Move line up Zeile nach oben verschieben Move line down Zeile nach unten verschieben Enable Aktivieren Set locale Spracheinstellung Use WebKit renderer WebKit-Renderer benutzen Use WebEngine (Chromium) renderer WebEngine (Chromium) Renderer benutzen Show directory Verzeichnis anzeigen Next Weiter Previous Zurück Replace Ersetzen Replace all Alle ersetzen Close Schließen Get help online Online Hilfe bekommen About ReText Über ReText About Qt Über Qt Bold Fett Italic Kursiv Underline Unterstrichen Formatting Formatieren Symbols Symbole &File &Datei &Edit &Bearbeiten &Help &Hilfe Open recent Zuletzt geöffnet Export Exportieren Spell check Rechtschreibprüfung Default markup Standard-Markup Search Suchen Replace with Ersetzen durch Case sensitively Groß-/Kleinschreibung New document Neues Dokument Type the line number Please, save the file somewhere. Bitte die Datei irgendwo speichern. Select one or several files to open Eine oder mehrere Dateien zum Öffnen auswählen Supported files Unterstützte Dateien All files (*) Alle Dateien (*) Select file encoding from the list: Zeichenkodierung aus Liste wählen: Plain text (*.txt) Klartext (*.txt) %s files Example of final string: Markdown files %s-Dateien Save file Datei speichern Cannot save to file which is open in another tab! Speichern in eine Datei, die in einem anderen Tab geöffnet ist, ist nicht möglich! Cannot save to file because it is read-only! Speichern ist nicht möglich, Datei ist schreibgeschützt. Export document to ODT Dokument als ODT exportieren OpenDocument text files (*.odt) OpenDocument-Dateien (*.odt) HTML files (*.html *.htm) HTML-Dateien (*.html *.htm) Unrecognized paperSize setting "%s". Unerkannte paperSize Einstellung »%s«. Export document to PDF Dokument als PDF exportieren PDF files (*.pdf) PDF-Dateien (*.pdf) Print document Dokument drucken Export document Dokument exportieren Failed to execute the command: Ausführung des Befehls fehlgeschlagen: Alt text Alt-Text URL URL Link text Linktext This file has been deleted by other application. Please make sure you save the file before exit. Diese Datei wurde durch eine andere Anwendung gelöscht. Bitte sichern Sie die Datei vor dem Beenden. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? Dieses Dokument wurde durch eine andere Anwendung geändert. Wollen Sie die Datei neu laden (wobei alle Ihre Änderungen verworfen werden)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Wenn Sie die Datei nicht neu laden, wird das automatische Speichern für diese Sitzung deaktiviert, um Datenverlust zu vermeiden. The document has been modified. Do you want to save your changes? Das Dokument wurde verändert. Möchten Sie Ihre Änderungen speichern ? HTML code HTML-Code ReText %s (using PyMarkups %s) ReText %s (mit PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText Einfacher aber mächtiger Editor für Markdown and reStructuredText Author: Dmitry Shachnev, 2011 Autor: Dmitry Shachnev, 2011 Markdown syntax Markdown-Syntax reStructuredText syntax reStructuredText-Syntax Insert images by file path Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters %d w | %d a | %d c main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_es.qm0000644000175000017500000004072100000000000016145 0ustar00dmitrydmitry7J6uS;oV(bWT*kZSUP&6ʇ0B3 :s8L" bnun);AI95 UF)!=O7zyΩ0%N$4b> b.dy Yc'gtX #zr*DVgl),D!  bzy%v+ћr$C $#S 4J4mr5t,.spFr9K: QW9!'(0BM<~e o-d,0 E1!:u(k53ϗ*.°%ϡ -# 1T'2)+I(9/>01~!',*`76e e @  h> j3L lap v- W| $ , </:[324E bz e$IUNGKx#BFˏ*) O3.i=fAl inicio, reabrir documentos de la sesin anterior,Automatically open last documents on startup ConfigDialogDGuardar documentos automticamenteAutomatically save documents ConfigDialogComportamientoBehavior ConfigDialogLEstado de previsualizacin por defectoDefault preview state ConfigDialogBDibujar linea vertical en columnaDraw vertical line at column ConfigDialog EditorEditor ConfigDialogNActivar enrollamiento suave de prrafosEnable soft wrap ConfigDialogZActivar desplazamiento sncrono para Markdown*Enable synchronized scrolling for Markdown ConfigDialog AyudaHelp ConfigDialoglEsconder barra de pestaas cuando slo hay una pestaa(Hide tabs bar when there is only one tab ConfigDialog<Esconder barra de herramientas Hide toolbar ConfigDialog*Resaltar lnea actualHighlight current line ConfigDialog2Nombre del tema de conosIcon theme name ConfigDialogInterfaz Interface ConfigDialog`Nmeros de lnea son relativos a la lnea actual)Line numbers are relative to current line ConfigDialog>Previsualizacin en tiempo real Live preview ConfigDialogrExtensiones de sintaxis de Markdown (separadas por comas),Markdown syntax extensions (comma-separated) ConfigDialog.Previsualizacin normalNormal preview ConfigDialog<Nmero de documentos recientesNumber of recent documents ConfigDialog^Abrir enlaces externos en una ventana de ReText$Open external links in ReText window ConfigDialogLRestaurar forma y tamao de la ventanaRestore window geometry ConfigDialogDMostrar estadsticas del documentoShow document stats ConfigDialog`Mostrar ruta completa en el ttulo de la ventanaShow full path in window title ConfigDialog0Mostrar nmeros de lneaShow line numbers ConfigDialog4Archivo de hoja de estilosStylesheet file ConfigDialog8Tecla "Tab" inserta espaciosTab key inserts spaces ConfigDialog*Anchura de tabulacinTabulation width ConfigDialogFUsando archivo de configuracin en:Using configuration file at: ConfigDialog(ninguno)(none)FileDialogButtonJSeleccione el archivo que desea abrirSelect file to openFileSelectButtonInsertar tabla Insert tableInsertTableDialog$Nmero de columnasNumber of columnsInsertTableDialogNmero de filasNumber of rowsInsertTableDialog^Escriba el nombre de la regin (ejemplo: es_MX)"Enter locale name (example: en_US) LocaleDialog<Establecer como predeterminadoSet as default LocaleDialogInformacin InformationProxy~No guardado desde el ltimo cambio (aada ! para sobreescribir).No write since last change (add ! to override)Proxy*Aadir al diccionarioAdd to dictionary ReTextEdit,Imgenes (*.png *.jpg)Images (*.png *.jpg) ReTextEditGuardar imagen Save image ReTextEditPNo fue posible crear el archivo '%s': %sCould not create file '%s': %s ReTextTabNo fue posible entender el contenido del archivo, compruebe si tiene el <a href="%s">mdulo necesario</a> instaladoaCould not parse file contents, check if you have the necessary module installed! ReTextTab0Crear archivo faltante?Create missing file? ReTextTab>No fue posible crear el archivoFile could not be created ReTextTabDocumento nuevo New document ReTextTabVEl archivo '%s' no existe. Desea crearlo?8The file '%s' does not exist. Do you want to create it? ReTextTab%s archivos%s files ReTextWindow&Editar&Edit ReTextWindow&Archivo&File ReTextWindow A&yuda&Help ReTextWindowAcerca de QtAbout Qt ReTextWindow Acerca de ReText About ReText ReTextWindow,Todos los archivos (*) All files (*) ReTextWindow"Texto alternativoAlt text ReTextWindow8Autor: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindowNegritaBold ReTextWindowrNo se puede guardar el archivo porque es de solo lectura.,Cannot save to file because it is read-only! ReTextWindowNo se puede guardar esto en el archivo porque lo tiene abierto en otra pestaa!1Cannot save to file which is open in another tab! ReTextWindowDDistinguir maysculas y minsculasCase sensitively ReTextWindowFCambiar el tipo de letra del editorChange editor font ReTextWindowXCambiar el tipo de letra de previsualizacinChange preview font ReTextWindow CerrarClose ReTextWindowCerrar pestaa Close tab ReTextWindow CopiarCopy ReTextWindow CortarCut ReTextWindow,Marcado predeterminadoDefault markup ReTextWindow Barra de edicin Edit toolbar ReTextWindowActivarEnable ReTextWindowExportarExport ReTextWindow$Exportar documentoExport document ReTextWindow0Exportar documento a ODTExport document to ODT ReTextWindow0Exportar documento a PDFExport document to PDF ReTextWindow>No se pudo ejecutar el comando:Failed to execute the command: ReTextWindowModo FakeVIM FakeVim mode ReTextWindow"Barra de archivos File toolbar ReTextWindowBuscar texto Find text ReTextWindowFormato Formatting ReTextWindow"Pantalla completaFullscreen mode ReTextWindow,Obtener ayuda en lneaGet help online ReTextWindowIr a lnea Go to line ReTextWindowCdigo HTML HTML code ReTextWindow8Archivos HTML (*.html *.htm)HTML files (*.html *.htm) ReTextWindowSi elige no recargar el archivo, se desactivar el modo de guardado automtico durante esta sesin para evitar la prdida de datos.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindowHInserte imgenes por ruta de archivoInsert images by file path ReTextWindowInsertar tabla Insert table ReTextWindowCursivaItalic ReTextWindowTexto de enlace Link text ReTextWindow>Previsualizacin en tiempo real Live preview ReTextWindow(Sintaxis de MarkdownMarkdown syntax ReTextWindow.Mover lnea hacia abajoMove line down ReTextWindow0Mover lnea hacia arriba Move line up ReTextWindow NuevoNew ReTextWindowDocumento nuevo New document ReTextWindowSiguienteNext ReTextWindow"Pestaa siguienteNext tab ReTextWindow AbrirOpen ReTextWindowAbrir recientes Open recent ReTextWindowLArchivos de texto OpenDocument (*.odt)OpenDocument text files (*.odt) ReTextWindow(Archivos PDF (*.pdf)PDF files (*.pdf) ReTextWindow PegarPaste ReTextWindowPegar imagen Paste image ReTextWindow2Texto sin formato (*.txt)Plain text (*.txt) ReTextWindowXPor favor, guarde el archivo en algn lugar. Please, save the file somewhere. ReTextWindowPreferencias Preferences ReTextWindow PrevisualizacinPreview ReTextWindowAnteriorPrevious ReTextWindow Pestaa anterior Previous tab ReTextWindowImprimirPrint ReTextWindow$Imprimir documentoPrint document ReTextWindow:Previsualizacin de impresin Print preview ReTextWindow SalirQuit ReTextWindow8ReText %s (usa PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindowRehacerRedo ReTextWindowRecargarReload ReTextWindowReemplazarReplace ReTextWindow Reemplazar todas Replace all ReTextWindowReemplazar con Replace with ReTextWindowGuardarSave ReTextWindowGuardar comoSave as ReTextWindowGuardar archivo Save file ReTextWindow BuscarSearch ReTextWindow"Barra de bsquedaSearch toolbar ReTextWindowbSeleccionar codificacin del archivo en la lista:#Select file encoding from the list: ReTextWindowPSeleccione uno o varios archivos a abrir#Select one or several files to open ReTextWindowPSeleccione una o varias imgenes a abrir$Select one or several images to open ReTextWindow.Establecer codificacin Set encoding ReTextWindowBEstablecer configuracin regional Set locale ReTextWindow$Mostrar directorioShow directory ReTextWindow|Editor para Markdown y reStructuredText sencillo pero poderoso ConfigDialog Using configuration file at: Usando archivo de configuración en: Behavior Comportamiento Automatically save documents Guardar documentos automáticamente Automatically open last documents on startup Al inicio, reabrir documentos de la sesión anterior Number of recent documents Número de documentos recientes Restore window geometry Restaurar forma y tamaño de la ventana Default preview state Estado de previsualización por defecto Open external links in ReText window Abrir enlaces externos en una ventana de ReText Markdown syntax extensions (comma-separated) Extensiones de sintaxis de Markdown (separadas por comas) Enable synchronized scrolling for Markdown Activar desplazamiento síncrono para Markdown Editor Editor Highlight current line Resaltar línea actual Show line numbers Mostrar números de línea Line numbers are relative to current line Números de línea son relativos a la línea actual Tab key inserts spaces Tecla "Tab" inserta espacios Tabulation width Anchura de tabulación Draw vertical line at column Dibujar linea vertical en columna Enable soft wrap Activar enrollamiento suave de párrafos Show document stats Mostrar estadísticas del documento Interface Interfaz Hide toolbar Esconder barra de herramientas Icon theme name Nombre del tema de íconos Stylesheet file Archivo de hoja de estilos Hide tabs bar when there is only one tab Esconder barra de pestañas cuando sólo hay una pestaña Show full path in window title Mostrar ruta completa en el título de la ventana Help Ayuda Live preview Previsualización en tiempo real Normal preview Previsualización normal Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (ninguno) FileSelectButton Select file to open Seleccione el archivo que desea abrir InsertTableDialog Insert table Insertar tabla Number of rows Número de filas Number of columns Número de columnas LocaleDialog Enter locale name (example: en_US) Escriba el nombre de la región (ejemplo: es_MX) Set as default Establecer como predeterminado Proxy No write since last change (add ! to override) No guardado desde el último cambio (añada ! para sobreescribir) Information Información ReTextEdit Add to dictionary Añadir al diccionario Save image Guardar imagen Images (*.png *.jpg) Imágenes (*.png *.jpg) ReTextTab New document Documento nuevo Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! No fue posible entender el contenido del archivo, compruebe si tiene el <a href="%s">módulo necesario</a> instalado Create missing file? ¿Crear archivo faltante? The file '%s' does not exist. Do you want to create it? El archivo '%s' no existe. ¿Desea crearlo? File could not be created No fue posible crear el archivo Could not create file '%s': %s No fue posible crear el archivo '%s': %s ReTextWindow File toolbar Barra de archivos Edit toolbar Barra de edición Search toolbar Barra de búsqueda New Nuevo Open Abrir Set encoding Establecer codificación Reload Recargar Save Guardar Save as Guardar como Next tab Pestaña siguiente Previous tab Pestaña anterior Close tab Cerrar pestaña Print Imprimir Print preview Previsualización de impresión View HTML code Ver código HTML Change editor font Cambiar el tipo de letra del editor Change preview font Cambiar el tipo de letra de previsualización Find text Buscar texto Go to line Ir a línea Preview Previsualización Live preview Previsualización en tiempo real Insert table Insertar tabla Table editing mode Modo de edición de tablas Insert images by file path Inserte imágenes por ruta de archivo FakeVim mode Modo FakeVIM Fullscreen mode Pantalla completa Preferences Preferencias Quit Salir Undo Deshacer Redo Rehacer Copy Copiar Cut Cortar Paste Pegar Paste image Pegar imagen Move line up Mover línea hacia arriba Move line down Mover línea hacia abajo Enable Activar Set locale Establecer configuración regional Use WebKit renderer Usar representador WebKit Use WebEngine (Chromium) renderer Usar motor de renderizado de WebEngine (de Chromium) Show directory Mostrar directorio Next Siguiente Previous Anterior Replace Reemplazar Replace all Reemplazar todas Close Cerrar Get help online Obtener ayuda en línea About ReText Acerca de ReText About Qt Acerca de Qt Bold Negrita Italic Cursiva Underline Subrayado Formatting Formato Symbols Símbolos Open recent Abrir recientes Export Exportar Spell check Revisar ortografía Default markup Marcado predeterminado Search Buscar Replace with Reemplazar con Case sensitively Distinguir mayúsculas y minúsculas New document Documento nuevo Type the line number Escriba el número de línea Please, save the file somewhere. Por favor, guarde el archivo en algún lugar. Select one or several files to open Seleccione uno o varios archivos a abrir Supported files Archivos compatibles All files (*) Todos los archivos (*) Select file encoding from the list: Seleccionar codificación del archivo en la lista: Plain text (*.txt) Texto sin formato (*.txt) %s files Example of final string: Markdown files %s archivos Save file Guardar archivo Cannot save to file which is open in another tab! No se puede guardar esto en el archivo porque lo tiene abierto en otra pestaña! Cannot save to file because it is read-only! No se puede guardar el archivo porque es de solo lectura. Export document to ODT Exportar documento a ODT OpenDocument text files (*.odt) Archivos de texto OpenDocument (*.odt) HTML files (*.html *.htm) Archivos HTML (*.html *.htm) Unrecognized paperSize setting "%s". Configuración de paperSize no conocido "%s" Export document to PDF Exportar documento a PDF PDF files (*.pdf) Archivos PDF (*.pdf) Print document Imprimir documento Export document Exportar documento Failed to execute the command: No se pudo ejecutar el comando: Alt text Texto alternativo URL URL Link text Texto de enlace This file has been deleted by other application. Please make sure you save the file before exit. Este archivo ha sido eliminado por otra aplicación. Asegúrese de guardar el archivo antes de salir. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? Este documento ha sido modificado por otra aplicación. ¿Quiere recargar el archivo? (esto descartará todos sus cambios). If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Si elige no recargar el archivo, se desactivará el modo de guardado automático durante esta sesión para evitar la pérdida de datos. The document has been modified. Do you want to save your changes? Se ha modificado el documento. ¿Quiere guardar sus cambios? HTML code Código HTML Select one or several images to open Seleccione una o varias imágenes a abrir ReText %s (using PyMarkups %s) ReText %s (usa PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText Editor para Markdown y reStructuredText sencillo pero poderoso Author: Dmitry Shachnev, 2011 Autor: Dmitry Shachnev, 2011 Markdown syntax Sintaxis de Markdown reStructuredText syntax Sintaxis de reStructuredText &File &Archivo &Edit &Editar &Help A&yuda TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters %d p | %d a | %d c main Open the files in preview mode Abrir archivos en modo de vista previa Create a new window even if there is an existing one Crear una ventana nueva, incluso si ya existe una List of files to open Lista de archivos a abrir ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_es_CO.qm0000644000175000017500000003046600000000000016533 0ustar00dmitrydmitry=b#>dyYc'gtzr5g~l) D!6 by%v- #S4J(m rn5t!J# ,' #0 E%pk 5'ϗ#ϡ ! %TP)+I9$_~c'!7*  3 @ h> la v" 1/,3&eI US*)~ O(*.Xi-kfAbrir ltimos documentos automticamente al iniciar,Automatically open last documents on startup ConfigDialogDGuardar documentos automticamenteAutomatically save documents ConfigDialogComportamientoBehavior ConfigDialogHDibujar lnea vertical en la columnaDraw vertical line at column ConfigDialog EditorEditor ConfigDialogbActivar desplazamiento sincronizado para Markdown*Enable synchronized scrolling for Markdown ConfigDialog AyudaHelp ConfigDialog*Resaltar lnea actualHighlight current line ConfigDialog2Nombre del tema de conosIcon theme name ConfigDialogInterfaz Interface ConfigDialog*Previsualizar en vivo Live preview ConfigDialogpExtensiones de sintaxis de Markdown (separadas por coma),Markdown syntax extensions (comma-separated) ConfigDialog\Abrir enlaces externos en la ventana de ReText$Open external links in ReText window ConfigDialogFRestablecer geometra de la ventanaRestore window geometry ConfigDialog0Mostrar nmeros de lneaShow line numbers ConfigDialog2Archivo de hoja de estiloStylesheet file ConfigDialog:La tecla Tab inserta espaciosTab key inserts spaces ConfigDialog&Ancho de tabulacinTabulation width ConfigDialog(ninguno)(none)FileDialogButton@Seleccione el archivo para abrirSelect file to openFileSelectButtonbEscriba el nombre del locale (por ejemplo: en_US)"Enter locale name (example: en_US) LocaleDialog<Establecer como predeterminadoSet as default LocaleDialogInformacin InformationProxy~Sin escritura desde el ltimo cambio (agregue ! para controlar).No write since last change (add ! to override)Proxy,Imgenes (*.png *.jpg)Images (*.png *.jpg) ReTextEditGuardar imagen Save image ReTextEditNo se pudo leer el contenido del archivo, revise si tiene instalado el <a href="%s">mdulo necesario</a>!aCould not parse file contents, check if you have the necessary module installed! ReTextTabDocumento nuevo New document ReTextTab%s archivos%s files ReTextWindow&Editar&Edit ReTextWindow&Archivo&File ReTextWindow A&yuda&Help ReTextWindowSobre QtAbout Qt ReTextWindowSobre ReText About ReText ReTextWindow,Todos los archivos (*) All files (*) ReTextWindow"Texto alternativoAlt text ReTextWindow8Autor: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindowNegritaBold ReTextWindowtNo se puede guardar el archivo porque es de solo lectura!,Cannot save to file because it is read-only! ReTextWindowNo se puede guardar a un archivo que ya est abierto en otra pestaa!1Cannot save to file which is open in another tab! ReTextWindowNTener en cuenta maysculas y minsculasCase sensitively ReTextWindow0Cambiar letra del editorChange editor font ReTextWindow@Cambiar letra de la vista previaChange preview font ReTextWindow CerrarClose ReTextWindow CopiarCopy ReTextWindow CortarCut ReTextWindow,Marcado predeterminadoDefault markup ReTextWindow@Barra de herramientas de edicin Edit toolbar ReTextWindowActivarEnable ReTextWindowExportarExport ReTextWindow$Exportar documentoExport document ReTextWindow0Exportar documento a ODTExport document to ODT ReTextWindow0Exportar documento a PDFExport document to PDF ReTextWindow:No se pudo ejecutar la orden:Failed to execute the command: ReTextWindowModo FaveVim FakeVim mode ReTextWindow@Barra de herramientas de archivo File toolbar ReTextWindowBuscar texto Find text ReTextWindowFormato Formatting ReTextWindow,Modo pantalla completaFullscreen mode ReTextWindow,Obtener ayuda en lneaGet help online ReTextWindowCdigo HTML HTML code ReTextWindow8Archivos HTML (*.html *.htm)HTML files (*.html *.htm) ReTextWindowSi elige no recargar el archivo, el modo de guardado automtico se va a desactivar durante esta sesin para evitar prdida de datos.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindowCursivaItalic ReTextWindow Texto del enlace Link text ReTextWindow*Previsualizar en vivo Live preview ReTextWindow(Sintaxis de MarkdownMarkdown syntax ReTextWindow NuevoNew ReTextWindowDocumento nuevo New document ReTextWindowSiguienteNext ReTextWindow"Pestaa siguienteNext tab ReTextWindow AbrirOpen ReTextWindowAbrir reciente Open recent ReTextWindow:Archivos OpenDocument (*.odt)OpenDocument text files (*.odt) ReTextWindow(Archivos PDF (*.pdf)PDF files (*.pdf) ReTextWindow PegarPaste ReTextWindow&Texto plano (*.txt)Plain text (*.txt) ReTextWindowBGuarde el archivo en algn lugar. Please, save the file somewhere. ReTextWindowPreferencias Preferences ReTextWindowVista previaPreview ReTextWindowAnteriorPrevious ReTextWindow Pestaa anterior Previous tab ReTextWindowImprimirPrint ReTextWindow$Imprimir documentoPrint document ReTextWindow2Vista previa de impresin Print preview ReTextWindow SalirQuit ReTextWindow>ReText %s (usando PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindowRehacerRedo ReTextWindowRecargarReload ReTextWindowReemplazarReplace ReTextWindowReemplazar todo Replace all ReTextWindowReemplazar por Replace with ReTextWindowGuardarSave ReTextWindowGuardar comoSave as ReTextWindowGuardar archivo Save file ReTextWindow BuscarSearch ReTextWindowBBarra de herramientas de bsquedaSearch toolbar ReTextWindowlSeleccione una codificacin de caracteres de la lista:#Select file encoding from the list: ReTextWindowVSeleccione uno o varios archivos para abrir#Select one or several files to open ReTextWindowJEstablecer codificacin de caracteres Set encoding ReTextWindow"Establecer locale Set locale ReTextWindow$Mostrar directorioShow directory ReTextWindow|Editor sencillo pero poderoso para Markdown y reStructuredText ConfigDialog Behavior Comportamiento Automatically save documents Guardar documentos automáticamente Automatically open last documents on startup Abrir últimos documentos automáticamente al iniciar Restore window geometry Restablecer geometría de la ventana Open external links in ReText window Abrir enlaces externos en la ventana de ReText Markdown syntax extensions (comma-separated) Extensiones de sintaxis de Markdown (separadas por coma) Enable synchronized scrolling for Markdown Activar desplazamiento sincronizado para Markdown Editor Editor Highlight current line Resaltar línea actual Show line numbers Mostrar números de línea Tab key inserts spaces La tecla Tab inserta espacios Tabulation width Ancho de tabulación Draw vertical line at column Dibujar línea vertical en la columna Interface Interfaz Icon theme name Nombre del tema de íconos Stylesheet file Archivo de hoja de estilo Help Ayuda Using configuration file at: Number of recent documents Default preview state Line numbers are relative to current line Enable soft wrap Show document stats Hide toolbar Hide tabs bar when there is only one tab Show full path in window title Live preview Previsualizar en vivo Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (ninguno) FileSelectButton Select file to open Seleccione el archivo para abrir InsertTableDialog Insert table Number of rows Number of columns LocaleDialog Enter locale name (example: en_US) Escriba el nombre del locale (por ejemplo: en_US) Set as default Establecer como predeterminado Proxy No write since last change (add ! to override) Sin escritura desde el último cambio (agregue ! para controlar) Information Información ReTextEdit Save image Guardar imagen Images (*.png *.jpg) Imágenes (*.png *.jpg) Add to dictionary ReTextTab New document Documento nuevo Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! No se pudo leer el contenido del archivo, ¡revise si tiene instalado el <a href="%s">módulo necesario</a>! Create missing file? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow File toolbar Barra de herramientas de archivo Edit toolbar Barra de herramientas de edición Search toolbar Barra de herramientas de búsqueda New Nuevo Open Abrir Set encoding Establecer codificación de caracteres Reload Recargar Save Guardar Save as Guardar como Next tab Pestaña siguiente Previous tab Pestaña anterior Print Imprimir Print preview Vista previa de impresión View HTML code Ver código HTML Change editor font Cambiar letra del editor Change preview font Cambiar letra de la vista previa Find text Buscar texto Preview Vista previa Live preview Previsualizar en vivo Table editing mode Modo de edición de tablas FakeVim mode Modo FaveVim Fullscreen mode Modo pantalla completa Preferences Preferencias Quit Salir Undo Deshacer Redo Rehacer Copy Copiar Cut Cortar Paste Pegar Enable Activar Set locale Establecer locale Use WebKit renderer Usar renderizador WebKit Show directory Mostrar directorio Next Siguiente Previous Anterior Replace Reemplazar Replace all Reemplazar todo Close Cerrar Get help online Obtener ayuda en línea About ReText Sobre ReText About Qt Sobre Qt Bold Negrita Italic Cursiva Underline Subrayado Formatting Formato Symbols Símbolos &File &Archivo &Edit &Editar &Help A&yuda Open recent Abrir reciente Export Exportar Spell check Revisar ortografía Default markup Marcado predeterminado Search Buscar Replace with Reemplazar por Case sensitively Tener en cuenta mayúsculas y minúsculas New document Documento nuevo Please, save the file somewhere. Guarde el archivo en algún lugar. Select one or several files to open Seleccione uno o varios archivos para abrir Supported files Archivos admitidos All files (*) Todos los archivos (*) Select file encoding from the list: Seleccione una codificación de caracteres de la lista: Plain text (*.txt) Texto plano (*.txt) %s files Example of final string: Markdown files %s archivos Save file Guardar archivo Cannot save to file which is open in another tab! ¡No se puede guardar a un archivo que ya está abierto en otra pestaña! Cannot save to file because it is read-only! ¡No se puede guardar el archivo porque es de solo lectura! Export document to ODT Exportar documento a ODT OpenDocument text files (*.odt) Archivos OpenDocument (*.odt) HTML files (*.html *.htm) Archivos HTML (*.html *.htm) Export document to PDF Exportar documento a PDF PDF files (*.pdf) Archivos PDF (*.pdf) Print document Imprimir documento Export document Exportar documento Failed to execute the command: No se pudo ejecutar la orden: Alt text Texto alternativo URL URL Link text Texto del enlace This file has been deleted by other application. Please make sure you save the file before exit. Otra aplicación borró este archivo. Asegúrese de guardar el archivo antes de salir. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? Otra aplicación modificó este documento. ¿Quiere recargar el archivo (esto eliminará los cambios que usted haya hecho)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Si elige no recargar el archivo, el modo de guardado automático se va a desactivar durante esta sesión para evitar pérdida de datos. The document has been modified. Do you want to save your changes? El documento fue modificado. ¿Quiere guardar los cambios? HTML code Código HTML ReText %s (using PyMarkups %s) ReText %s (usando PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText Editor sencillo pero poderoso para Markdown y reStructuredText Author: Dmitry Shachnev, 2011 Autor: Dmitry Shachnev, 2011 Markdown syntax Sintaxis de Markdown reStructuredText syntax Sintaxis de reStructuredText Use WebEngine (Chromium) renderer Close tab Go to line Insert table Insert images by file path Paste image Move line up Move line down Type the line number Unrecognized paperSize setting "%s". Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_et.qm0000644000175000017500000001342000000000000016142 0ustar00dmitrydmitryf s3bįp **%)*0Y7QV WT 1z BL"nun K5UF)+ 04*bPzng0y%v m!`' f0 E/ϗ  pT )+I 9 @ la v ConfigDialog Behavior Automatically save documents Restore window geometry Open external links in ReText window Editor Highlight current line Show line numbers Tab key inserts spaces Tabulation width Interface Icon theme name Stylesheet file Markdown syntax extensions (comma-separated) Help Abi Enable synchronized scrolling for Markdown Draw vertical line at column Automatically open last documents on startup Using configuration file at: Number of recent documents Default preview state Line numbers are relative to current line Enable soft wrap Show document stats Hide toolbar Hide tabs bar when there is only one tab Show full path in window title Live preview Aktiivne eelvaade Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) FileSelectButton Select file to open InsertTableDialog Insert table Number of rows Number of columns LocaleDialog Enter locale name (example: en_US) Set as default Proxy No write since last change (add ! to override) Information ReTextEdit Save image Images (*.png *.jpg) Add to dictionary ReTextTab New document Uus dokument Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Create missing file? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow File toolbar Faili tööriistariba Edit toolbar Muuda tööriistariba Search toolbar Otsingu tööriistariba New Uus Open Ava Save Salvesta Save as Salvesta kui... Print Prindi Print preview Printimise eelvaade View HTML code Vaata HTML koodi Find text Leia tekst Preview Eelvaade Live preview Aktiivne eelvaade Fullscreen mode Täisekraani režiim Quit Välju Undo Võta tagasi Redo Korda Copy Kopeeri Cut Lõika Paste Aseta Enable Luba Set locale Sea regioon Use WebKit renderer Kasuta WebKit renderdajat Next Järgmine Previous Eelmine Get help online Saa abi internetist About ReText ReText kohta About Qt Qt kohta Bold Rasvane Italic Kaldu Underline Allajoonitud Symbols Sümbolid &File &Fail &Edit &Muuda &Help &Abi Open recent Ava hiljutine Export Ekspordi Spell check Õigekirjakontroll Formatting Vormindus Search Otsi Case sensitively Tõstutundeliselt New document Uus dokument Please, save the file somewhere. Palun salvesta fail kuhugi. Show directory Näita kataloogi Select one or several files to open Vali avamiseks üks või mitu faili Supported files Toetatud failid All files (*) Kõik failid (*) Plain text (*.txt) Tavaline tekst (*.txt) Save file Salvesta fail Cannot save to file because it is read-only! Ei saa faili salvestada, kuna see fail on ainult lugemiseks! Export document to ODT Ekspordi dokument ODT formaati OpenDocument text files (*.odt) OpenDocument tekstifailid (.*odt) HTML files (*.html *.htm) HTML failid (*.html *.htm) Export document to PDF Ekspordi dokument PDF'ina PDF files (*.pdf) PDF failid (*.pdf) Print document Prindi dokument Export document Ekspordi dokument Failed to execute the command: Järgmise käsu täitmine ebaõnnestus: The document has been modified. Do you want to save your changes? Dokumenti on muudetud. Soovid salvestada oma muudatused? HTML code HTML kood Simple but powerful editor for Markdown and reStructuredText Lihtne aga võimas Markdown ja reStructuredText redaktor Author: Dmitry Shachnev, 2011 Autor: Dmitry Shachnev, 2011 Markdown syntax Markdown süntaks reStructuredText syntax reStructuredText süntaks %s files Example of final string: Markdown files %s failid Default markup Preferences Set encoding Select file encoding from the list: Reload Next tab Previous tab Table editing mode FakeVim mode This file has been deleted by other application. Please make sure you save the file before exit. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Change editor font Change preview font ReText %s (using PyMarkups %s) Close Alt text URL Link text Replace Replace all Replace with Cannot save to file which is open in another tab! Use WebEngine (Chromium) renderer Close tab Go to line Insert table Insert images by file path Paste image Move line up Move line down Type the line number Unrecognized paperSize setting "%s". Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_eu.qm0000644000175000017500000001275000000000000016150 0ustar00dmitrydmitry4?bgy%vmf' 0 Eϗ  T )+I @9+ \ @ la v HTML fitxategiak (*.html *.htm)HTML files (*.html *.htm) ReTextWindow&Aurrebista zuzenean Live preview ReTextWindow"Markdown sintaxiaMarkdown syntax ReTextWindow BerriaNew ReTextWindow Dokumentu berria New document ReTextWindowHurrengoaNext ReTextWindow IrekiOpen ReTextWindow"Azken dokumentuak Open recent ReTextWindowXIreki OpenDocument testu fitxategiak (*.odt)OpenDocument text files (*.odt) ReTextWindow.PDF fitxategiak (*.pdf)PDF files (*.pdf) ReTextWindowItsatsiPaste ReTextWindow*Testu arrunta (*.txt)Plain text (*.txt) ReTextWindowBGorde fitxategia edonon, mesedez. Please, save the file somewhere. ReTextWindowAurrebistaPreview ReTextWindowAurrekoaPrevious ReTextWindowInprimatuPrint ReTextWindow(Inprimatu dokumentuaPrint document ReTextWindow.Inprimatzeko aurrebista Print preview ReTextWindow KenduQuit ReTextWindowBerreginRedo ReTextWindow GordeSave ReTextWindowGorde honela...Save as ReTextWindow Gorde fitxategia Save file ReTextWindow BilatuSearch ReTextWindow&Bilakera menu barraSearch toolbar ReTextWindowLAukeratu fitzategi bat(zuk) irekitzeko#Select one or several files to open ReTextWindowLokala aukeratu Set locale ReTextWindow Karpeta erakutsiShow directory ReTextWindowMarkdown et reStructuredText-erako editore sinple baina boteretsua ConfigDialog Behavior Automatically save documents Restore window geometry Open external links in ReText window Editor Highlight current line Show line numbers Tab key inserts spaces Tabulation width Interface Icon theme name Stylesheet file Markdown syntax extensions (comma-separated) Help Laguntza Enable synchronized scrolling for Markdown Draw vertical line at column Automatically open last documents on startup Using configuration file at: Number of recent documents Default preview state Line numbers are relative to current line Enable soft wrap Show document stats Hide toolbar Hide tabs bar when there is only one tab Show full path in window title Live preview Aurrebista zuzenean Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) FileSelectButton Select file to open InsertTableDialog Insert table Number of rows Number of columns LocaleDialog Enter locale name (example: en_US) Set as default Proxy No write since last change (add ! to override) Information ReTextEdit Save image Images (*.png *.jpg) Add to dictionary ReTextTab New document Dokumentu berria Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Create missing file? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow New document Dokumentu berria File toolbar Fitxategi menu barra Edit toolbar Edizio menu barra Search toolbar Bilakera menu barra New Berria Open Ireki Save Gorde Save as Gorde honela... Print Inprimatu Print preview Inprimatzeko aurrebista View HTML code HTML iturburua ikusi Find text Bilatu testua Preview Aurrebista Live preview Aurrebista zuzenean Fullscreen mode Pantaila osoa Quit Kendu Undo Desegin Redo Berregin Copy Kopiatu Cut Ebaki Paste Itsatsi Enable Gaitu Set locale Lokala aukeratu Open recent Azken dokumentuak Next Hurrengoa Previous Aurrekoa Get help online Laguntza on-line About Qt Qt-i buruz Symbols Sinboloak &File &Fitxategia &Edit &Editatu &Help &Laguntza Export Esportatu Spell check Egiaztatu ortografia Search Bilatu Case sensitively Maiuskulak/minuskulak Please, save the file somewhere. Gorde fitxategia edonon, mesedez. Select one or several files to open Aukeratu fitzategi bat(zuk) irekitzeko Supported files Onartutako formatuak All files (*) Fitxategi guztiak (*) Plain text (*.txt) Testu arrunta (*.txt) Save file Gorde fitxategia Export document to ODT Esportatu ODT gisa OpenDocument text files (*.odt) Ireki OpenDocument testu fitxategiak (*.odt) HTML files (*.html *.htm) HTML fitxategiak (*.html *.htm) Export document to PDF Esportatu PDF gisa PDF files (*.pdf) PDF fitxategiak (*.pdf) Print document Inprimatu dokumentua Export document Esportatu dokumentua The document has been modified. Do you want to save your changes? Dokumentua aldatu da. Aldaketak gorde nahi duzu? HTML code HTML iturburua Simple but powerful editor for Markdown and reStructuredText Markdown et reStructuredText-erako editore sinple baina boteretsua Author: Dmitry Shachnev, 2011 Egilea: Dmitry Shachnev, 2011 Markdown syntax Markdown sintaxia reStructuredText syntax reStructuredText sintaxia Show directory Karpeta erakutsi Cannot save to file because it is read-only! Ezin da gorde fitxategia irakurtzeko-soilik delako! Bold Italic Underline Formatting About ReText ReText-i buruz Use WebKit renderer Failed to execute the command: %s files Example of final string: Markdown files %s fitxategiak Default markup Preferences Set encoding Select file encoding from the list: Reload Next tab Previous tab Table editing mode FakeVim mode This file has been deleted by other application. Please make sure you save the file before exit. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Change editor font Change preview font ReText %s (using PyMarkups %s) Close Alt text URL Link text Replace Replace all Replace with Cannot save to file which is open in another tab! Use WebEngine (Chromium) renderer Close tab Go to line Insert table Insert images by file path Paste image Move line up Move line down Type the line number Unrecognized paperSize setting "%s". Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_fa.qm0000644000175000017500000003636100000000000016131 0ustar00dmitrydmitry b*dy Yc'gt 9 mzr&WDVUgYl)'vD!U by%vћr  #S [4J/mr 5t(.)Fr4e5 W9 {'$ 0BwM7e -dB0 E,q:u$k5.ϗ%*g°!ϡ ( ,T#H) +I$9*>+~c'(s&&71 { @ h> j3z la v)a W $  7N/53.4E Hz e!ZI1UGKx6ˏ_*)  O/'.ei8=f('2 1/F .H/'1 ".1F '3F'/ /1 GF'E H1H/ (G (1F'EG,Automatically open last documents on startup ConfigDialog(0.1G  .H/'1 3F/G'Automatically save documents ConfigDialog 1A*'1Behavior ConfigDialog(H69Q* FE'4 ~4 A16Default preview state ConfigDialog84/F .7 9EH/ /1 3*HF 4E'1Draw vertical line at column ConfigDialogH1'41Editor ConfigDialognA9Q'D 3'2 -'D* F,'F/F E*F *E'E E*F /1 E-7 B'(D FE'4Enable soft wrap ConfigDialogPA9Q'D 3'2 ~E'4 GE 2E'F (1' Markdown*Enable synchronized scrolling for Markdown ConfigDialogEHelp ConfigDialog\FGA*F FH'1 31(1 G' GF'E G AB7  31(1 G3*(Hide tabs bar when there is only one tab ConfigDialog FGA*F FH'1 '(2'1 Hide toolbar ConfigDialog(E4.Q5 1/F 371 FHFHighlight current line ConfigDialogF'E E6EHF "HFIcon theme name ConfigDialog8'G1 Interface ConfigDialogJFE'4 4E'1G  371G' F3(* (G 371 FHF)Line numbers are relative to current line ConfigDialog~4 FE'4 2F/G Live preview ConfigDialogz'A2HFG G' BH'9/ Markdown ( (' 'E' , '2 GE ,/' FH4*G 4HF/),Markdown syntax extensions (comma-separated) ConfigDialog~4 FE'4 9'/Normal preview ConfigDialogB*9/'/ '3F'/ (G .'71 3~1/G  '.1Number of recent documents ConfigDialogR('2 1/F ~HF/G' .'1, /1 ~F,1G  ReText$Open external links in ReText window ConfigDialog2('2'( 'F/'2G B(D ~F,1GRestore window geometry ConfigDialogFE'4 "E'1 3F/Show document stats ConfigDialog:FE'4 E31 'ED /1 FH'1 9FH'FShow full path in window title ConfigDialog&FE'4 4E'1G  371G'Show line numbers ConfigDialogA'D B'D(Stylesheet file ConfigDialog<*F8E Tab (1' B1'1 /'/F A'5DGTab key inserts spaces ConfigDialog916 ,/HD (F/Tabulation width ConfigDialogB'3*A'/G '2 A'D *F8E'* /1 F4'F:Using configuration file at: ConfigDialog (G)(none)FileDialogButton2'F*.'( A'D (1' ('2 1/FSelect file to openFileSelectButton/1, ,/HD Insert tableInsertTableDialog4E'1 3*HF G'Number of columnsInsertTableDialog4E'1 1/A G'Number of rowsInsertTableDialogHH1H/ F'E 2('F E-DQ ( E+D'K: en_US )"Enter locale name (example: en_US) LocaleDialog,*9F (G 9FH'F ~4 A16Set as default LocaleDialog'7QD'9'* InformationProxy'2 2E'F 0.1G  B(D 2 FH4*G F4/G ( (1' F'//G 1A*F 2 '6'AG F/!).No write since last change (add ! to override)Proxy&'A2H/F (G A1GF D:*Add to dictionary ReTextEdit(*5'H1 (*.png *.jpg)Images (*.png *.jpg) ReTextEdit0.1G  *5H1 Save image ReTextEdit<'E'F ','/ A'D '%s': %s F(H/Could not create file '%s': %s ReTextTab'E'F *,2G H *-DD E-*H' A'D F(H/. (113 F/ G "' <a href="%s">~E'FG 61H1 </a> 'F '1 1' F5( 1/G '/ ' FG.aCould not parse file contents, check if you have the necessary module installed! ReTextTab,A'D E 4/G ','/ 4H/Create missing file? ReTextTab,'E'F ','/ A'D F(H/.File could not be created ReTextTab3F/ ,// New document ReTextTabnA'D '%s' H,H/ F/'1/. "' E .H'G/ "F 1' ','/ F/8The file '%s' does not exist. Do you want to create it? ReTextTabA'D %s%s files ReTextWindow/1('1G  QtAbout Qt ReTextWindow/1('1G  ReText About ReText ReTextWindow$GEG  A'D G' (*) All files (*) ReTextWindowE*F ,'2FAlt text ReTextWindow<F'1F/G: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindow6.EBold ReTextWindowl'E'F 0.1G A'D F3* HF /'1' (13( AB7 .H'F/F '3*!,Cannot save to file because it is read-only! ReTextWindowf'E'F 0.1G  A'D G /1 31(1 /1 ('2 4/G F3*!1Cannot save to file which is open in another tab! ReTextWindowB-3Q'3Q* F3(* (G -1HA (21 H HCase sensitively ReTextWindow0*:1 13E 'D.7Q H1'41Change editor font ReTextWindow2*:1 13E 'D.7Q ~4 FE'4Change preview font ReTextWindow(3*FClose ReTextWindow(3*F 31(1 Close tab ReTextWindow 1HFH4*Copy ReTextWindow(14Cut ReTextWindow&F4'FG 0'1 ~4 A16Default markup ReTextWindow"FH'1 '(2'1 H1'4 Edit toolbar ReTextWindowA9Q'D 3'2Enable ReTextWindow5/H1 .1H,Export ReTextWindow.1H, 3F/Export document ReTextWindow>5/H1 .1H, 3F/ (G B'D( A'D ODTExport document to ODT ReTextWindow 5/H1 (G B'D( PDFExport document to PDF ReTextWindow8',1' 'F /3*H1 F'EHAQB (H/:Failed to execute the command: ReTextWindow4-'D* *BD/ '2 H1'41 Vim FakeVim mode ReTextWindowFH'1 '(2'1 A'D File toolbar ReTextWindow'A*F E*F Find text ReTextWindowB'D( (F/ Formatting ReTextWindow-'D* *E'E 5A-GFullscreen mode ReTextWindow/1'A* E (1.7Get help online ReTextWindow$1A*F (G .7 4E'1G  Go to line ReTextWindowHTML code HTML code ReTextWindow2HTML files (*.html *.htm)HTML files (*.html *.htm) ReTextWindow'1 9/E ('10'1 A'D 1' 'F*.'( F/ -'D* 0.1G  .H/'1 (1' 'F /H1G :1A9Q'D .H'G/ 4/ *' ,DH '2 /3* 1A*F /'/G G' 1A*G 4H/.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindowB/1, *5H1 (' '3*A'/G '2 E31 A'DInsert images by file path ReTextWindow/1, ,/HD Insert table ReTextWindow,Italic ReTextWindowE*F ~HF/ Link text ReTextWindow~4 FE'4 2F/G Live preview ReTextWindowBH'9/ MarkdownMarkdown syntax ReTextWindow  .7 ~'F 1A*FMove line down ReTextWindow .7 ('D' 1A*F Move line up ReTextWindow,//New ReTextWindow3F/ ,// New document ReTextWindow(9/Next ReTextWindow31(1 (9/Next tab ReTextWindow('2 1/FOpen ReTextWindow&('2 1/F EH'1/ '.1 Open recent ReTextWindow2A'D E*F / ('2 (*.odt)OpenDocument text files (*.odt) ReTextWindow"PDF files (*.pdf)PDF files (*.pdf) ReTextWindow3('F/FPaste ReTextWindow3('F/F *5H1 Paste image ReTextWindow E*F 3'/G (*.txt)Plain text (*.txt) ReTextWindowDD7A'K A'D 1' /1 E-DQ 0.1G F/. Please, save the file somewhere. ReTextWindow*F8E'* Preferences ReTextWindow~4 FE'4Preview ReTextWindowB(DPrevious ReTextWindow31(1 B(D Previous tab ReTextWindow'~Print ReTextWindow'~ 3F/Print document ReTextWindow~4 FE'4 '~ Print preview ReTextWindow.1H,Quit ReTextWindow<ReText %s (using PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindow'F,'E /H('1GRedo ReTextWindow('10'1 /H('1GReload ReTextWindow,'2FReplace ReTextWindow,'2F GEG Replace all ReTextWindow,'2F (' Replace with ReTextWindow 0.1GSave ReTextWindow0.1G (G 9FH'FSave as ReTextWindow0.1G  A'D Save file ReTextWindow ,3*,HSearch ReTextWindow FH'1 '(2'1 ,3*,HSearch toolbar ReTextWindowH/0'1 A'D 1' '2 D3* 'F*.'( F/:#Select file encoding from the list: ReTextWindowV ' F/ A'D 1' (1' ('2 1/F 'F*.'( F/#Select one or several files to open ReTextWindowX ' F/ *5H1 1' (1' ('2 1/F 'F*.'( F/$Select one or several images to open ReTextWindow*9F /0'1 Set encoding ReTextWindow *9F 2('F E-DQ Set locale ReTextWindowFE'4 /'1*H1Show directory ReTextWindow H1'41 E*F 3'/G HD *H'FEF/ (1' E*F G' B'D( Markdown H reStructuredText ConfigDialog Using configuration file at: استفاده از فایل تنظیمات در نشانی: Behavior رفتار Automatically save documents ذخیره ی خودکار سندها Automatically open last documents on startup باز کردن خودکار آخرین اسناد در هنگام ورود به برنامه Number of recent documents تعداد اسناد به خاطر سپرده ی اخیر Restore window geometry بازیابی اندازه قبلی پنجره Default preview state وضعیّت نمایش پیش فرض Open external links in ReText window باز کردن پیوندهای خارجی در پنجره ی ReText Markdown syntax extensions (comma-separated) افزونه های قواعد Markdown ( با کاما «,» از هم جدا نوشته شوند) Enable synchronized scrolling for Markdown فعّال سازی پیمایش هم زمان برای Markdown  Editor ویرایشگر Highlight current line مشخّص کردن سطر کنونی Show line numbers نمایش شماره ی سطرها Line numbers are relative to current line نمایش شماره ی سطرها نسبت به سطر کنونی Tab key inserts spaces تنظیم Tab برای قرار دادن فاصله Tabulation width عرض جدول بندی Draw vertical line at column کشیدن خط عمودی در ستون شمارۀ Enable soft wrap فعّال سازی حالت گنجاندن متن تمام متن در محیط قابل نمایش Show document stats نمایش آمار سند Interface ظاهر Hide toolbar نهفتن نوار ابزار Icon theme name نام مضمون آیکون Stylesheet file فایل قالب Hide tabs bar when there is only one tab نهفتن نوار سربرگ ها هنگامی که فقط یک سربرگ هست Show full path in window title نمایش مسیر کامل در نوار عنوان Help کمک Live preview پیش نمایش زنده Normal preview پیش نمایش عادی Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (هیچی) FileSelectButton Select file to open انتخاب فایل برای باز کردن InsertTableDialog Insert table درج جدول Number of rows شمار ردیف ها Number of columns شمار ستون ها LocaleDialog Enter locale name (example: en_US) ورود نام زبان محلّی ( مثلاً: en_US ) Set as default تعیین به عنوان پیش فرض Proxy No write since last change (add ! to override) از زمان ذخیره ی قبلی چیزی نوشته نشده ( برای نادیده گرفتن چیزی اضافه کنید!) Information اطّلاعات ReTextEdit Add to dictionary افزودن به فرهنگ لغت Save image ذخیره ی تصویر Images (*.png *.jpg) تصاویر (*.png *.jpg) ReTextTab New document سند جدید Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! امکان تجزیه و تحلیل محتوای فایل نبود. بررسی کنید که آیا <a href="%s">پیمانه ضروری </a> این کار را نصب کرده اید یا نه. Create missing file? فایل گم شده ایجاد شود؟ The file '%s' does not exist. Do you want to create it? فایل '%s' وجود ندارد. آیا می خواهید آن را ایجاد کنید؟ File could not be created امکان ایجاد فایل نبود. Could not create file '%s': %s امکان ایجاد فایل '%s': %s نبود ReTextWindow File toolbar نوار ابزار فایل Edit toolbar نوار ابزار ویرایش Search toolbar نوار ابزار جستجو New جدید Open باز کردن Set encoding تعیین کدگذاری Reload بارگذاری دوباره Save ذخیره Save as ذخیره به عنوان Next tab سربرگ بعدی Previous tab سربرگ قبلی Close tab بستن سربرگ Print چاپ Print preview پیش نمایش چاپ View HTML code نمایش کد HTML  Change editor font تغییر رسم الخطّ ویرایشگر Change preview font تغییر رسم الخطّ پیش نمایش Find text یافتن متن Go to line رفتن به خط شماره ی Preview پیش نمایش Live preview پیش نمایش زنده Insert table درج جدول Table editing mode حالت ویرایش جدول Insert images by file path درج تصویر با استفاده از مسیر فایل FakeVim mode حالت تقلید از ویرایشگر Vim Fullscreen mode حالت تمام صفحه Preferences تنظیمات Quit خروج Undo باطل کردن Redo انجام دوباره Copy رونوشت Cut برش Paste چسباندن Paste image چسباندن تصویر Move line up یک خط بالا رفتن Move line down یک خط پایین رفتن Enable فعّال سازی Set locale تعیین زبان محلّی Use WebKit renderer استفاده از موتور WebKit برای تهیّه ی خروجی Use WebEngine (Chromium) renderer استفاده از موتور WebEngine (Chromium) برای تهیّه ی خروجی Show directory نمایش دایرکتوری Next بعدی Previous قبلی Replace جایگزینی Replace all جایگزینی همه Close بستن Get help online دریافت کمک برخط About ReText درباره ی ReText About Qt درباره ی Qt Bold ضخیم Italic کج Underline زیر خط دار Formatting قالب بندی Symbols نمادها Open recent باز کردن موارد اخیر Export صدور خروجی Spell check بررسی املایی Default markup نشانه گذاری پیش فرض Search جستجو Replace with جایگزینی با Case sensitively حسّاسیّت نسبت به حروف بزرگ و کوچک New document سند جدید Type the line number تایپ شماره ی سطر Please, save the file somewhere. لطفاً فایل را در محلّی ذخیره کنید. Select one or several files to open یک یا چند فایل را برای باز کردن انتخاب کنید Supported files فایل های پشتیبانی شده All files (*) همه ی فایل ها (*) Select file encoding from the list: کدگذاری فایل را از لیست انتخاب کنید: Plain text (*.txt) متن ساده (*.txt) %s files Example of final string: Markdown files فایل %s Save file ذخیره ی فایل Cannot save to file which is open in another tab! امکان ذخیره ی فایلی که در سربرگ دیگری باز شده نیست! Cannot save to file because it is read-only! امکان ذخیره فایل نیست چون دارای برچسب فقط خواندنی است! Export document to ODT صدور خروجی سند به قالب فایل ODT OpenDocument text files (*.odt) فایل متنی کد باز (*.odt) HTML files (*.html *.htm) HTML files (*.html *.htm) Unrecognized paperSize setting "%s". اندازه ی صفحه ی نامشخّص در تنظیمات "%s". Export document to PDF صدور به قالب PDF PDF files (*.pdf) PDF files (*.pdf) Print document چاپ سند Export document خروج سند Failed to execute the command: اجرای این دستور ناموفّق بود: Alt text متن جایگزین URL نشانی وبگاه Link text متن پیوند This file has been deleted by other application. Please make sure you save the file before exit. این فایل را برنامه ی دیگری جذف کرده است. لطفاً قبل از خروج خاطر جمع شوید که فایل را ذخیره کرده اید. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? این سند را برنامه ی دیگری تغییر داده است. می خواهید آن ها را دوباره بارگذاری کنید (این کار همه تغییرات شما را از بین می برد)؟ If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. اگر عدم بارگذاری فایل را انتخاب کنید، حالت ذخیره ی خودکار برای این دوره غیرفعّال خواهد شد تا جلوی از دست رفتن داده ها گرفته شود. The document has been modified. Do you want to save your changes? سند تغییر کرده است. می خواهید آن ها را ذخیره کنید؟ HTML code HTML code Select one or several images to open یک یا چند تصویر را برای باز کردن انتخاب کنید ReText %s (using PyMarkups %s) ReText %s (using PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText یک ویرایشگر متن ساده ولی توانمند برای متن های قالب Markdown و reStructuredText Author: Dmitry Shachnev, 2011 نگارنده: Dmitry Shachnev, 2011 Markdown syntax قواعد Markdown reStructuredText syntax قواعد reStructuredText &File &Edit &Help TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters %d w | %d a | %d c main Open the files in preview mode باز کردن فایل ها در حالت پیش نمایش Create a new window even if there is an existing one ایجاد یک پنجره ی جدید حتّی اگر یکی از قبل باشد List of files to open لیست فایل های مورد نظر برای باز شدن ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_fi.qm0000644000175000017500000003137400000000000016140 0ustar00dmitrydmitryb$"dyYc'gtzBr DVgl)!tD! by%Evw :#S4J)Dm rh5t"4#Fr-I. '0B 0 E%k 5(ϗ$u°ϡ " &-T()+I9$~'"y7*  R @} h> a la v#a $ ȗ t,E Q 5 F l c' ) ??eb \&z p wl N J UW Px v# Y \ U 2 " Ix ~>//.=3']zieI U*) } O(x.i.~Avaa viimeksi kytetyt asiakirjat automaattisesti kynnistess,Automatically open last documents on startup ConfigDialogFTallenna asiakirjat automaattisestiAutomatically save documents ConfigDialogKyttytyminenBehavior ConfigDialogEditoriEditor ConfigDialog6Ota kyttn pehme rivitysEnable soft wrap ConfigDialog`Ota kyttn synkronisoitu vieritys Markdownille*Enable synchronized scrolling for Markdown ConfigDialogApuaHelp ConfigDialog*Korosta nykyinen riviHighlight current line ConfigDialog"Kuvaketeeman nimiIcon theme name ConfigDialogKyttliittym Interface ConfigDialog^Rivinumerointi on suhteellinen nykyiseen riviin)Line numbers are relative to current line ConfigDialogLive-esikatselu Live preview ConfigDialog^Markdown syntaksilisosat (pilkulla eroteltuna),Markdown syntax extensions (comma-separated) ConfigDialogRAvaa ulkopuoliset linkit ReText ikkunassa$Open external links in ReText window ConfigDialog*Palauta ikkunan mitatRestore window geometry ConfigDialog2Nyt dokumentin tilastotShow document stats ConfigDialog(Nyt rivinumerointiShow line numbers ConfigDialog"TyyliohjetiedostoStylesheet file ConfigDialog8Sarkain asettaa vlilyntejTab key inserts spaces ConfigDialog Sarkaimen leveysTabulation width ConfigDialog4Kytetn asetustiedostoa:Using configuration file at: ConfigDialog(tyhj)(none)FileDialogButton2Valitse avattava tiedostoSelect file to openFileSelectButtonPSyt lokaalin nimi (esimerkiksi: fi_FI)"Enter locale name (example: en_US) LocaleDialog"Aseta oletukseksiSet as default LocaleDialogInformaatio InformationProxyEi kirjoitusta viime tallennuksen jlkeen (lis ! yliajaaksesi).No write since last change (add ! to override)Proxy"Lis sanakirjaanAdd to dictionary ReTextEdit&Kuvat (*.png *.jpg)Images (*.png *.jpg) ReTextEditTallenna kuva Save image ReTextEditTiedoston sislt ei voitu jsent, tarkista, ett sinulla on <a href="%s">tarvittava moduuli</a> asennettuna! aCould not parse file contents, check if you have the necessary module installed! ReTextTabUusi asiakirja New document ReTextTab%s-tiedostot%s files ReTextWindow&Muokkaa&Edit ReTextWindow&Tiedosto&File ReTextWindow &Ohje&Help ReTextWindowTietoa Qt:staAbout Qt ReTextWindow"Tietoa ReTextist About ReText ReTextWindow(Kaikki tiedostot (*) All files (*) ReTextWindow*Vaihtoehtoinen tekstiAlt text ReTextWindow:Tekij: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindowLihavointiBold ReTextWindowEi voitu tallentaa tiedostoa, joka on auki toisessa vlilehdess!1Cannot save to file which is open in another tab! ReTextWindow.MerkkikokoriippuvaisuusCase sensitively ReTextWindow,Vaihda editorin fonttiChange editor font ReTextWindow2Vaihda esikatselun fonttiChange preview font ReTextWindow SuljeClose ReTextWindowSulje vlilehti Close tab ReTextWindow KopioiCopy ReTextWindowLeikkaaCut ReTextWindow&OletusmerkintkieliDefault markup ReTextWindow*Muokkaa-tykalupalkki Edit toolbar ReTextWindowOta kyttnEnable ReTextWindowVieExport ReTextWindowVie asiakirjaExport document ReTextWindow:Vie asiakirja ODT-tiedostoksiExport document to ODT ReTextWindow:Vie asiakirja PDF-tiedostoksiExport document to PDF ReTextWindowFKomennon suorittaminen eponnistui:Failed to execute the command: ReTextWindowFakeVim-tila FakeVim mode ReTextWindow,Tiedosto-tykalupalkki File toolbar ReTextWindowEtsi teksti Find text ReTextWindowMuotoilu Formatting ReTextWindow Koko nytn tilaFullscreen mode ReTextWindowHTML-koodi HTML code ReTextWindow:HTML-tiedostot (*.html *.htm)HTML files (*.html *.htm) ReTextWindow.Jos valitset olla lataamatta tiedostoa uudelleen, automaattitallennustila poistetaan kytst tmn istunnon ajaksi tietojen menetyksen ehkisemiseksi.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindowKursivointiItalic ReTextWindowLinkin teksti Link text ReTextWindowLive-esikatselu Live preview ReTextWindow"Markdown syntaksiMarkdown syntax ReTextWindow(Siirry rivi alaspinMove line down ReTextWindow(Siirry rivi ylspin Move line up ReTextWindowUusiNew ReTextWindowUusi asiakirja New document ReTextWindowSeuraavaNext ReTextWindow$Seuraava vlilehtiNext tab ReTextWindowAvaaOpen ReTextWindow$Avaa viimeaikainen Open recent ReTextWindowHOpenDocument tekstitiedostot (*.odt)OpenDocument text files (*.odt) ReTextWindow*PDF-tiedostot (*.pdf)PDF files (*.pdf) ReTextWindow LiitPaste ReTextWindow&Selkoteksti (*.txt)Plain text (*.txt) ReTextWindow6Tallenna tiedosto johonkin. Please, save the file somewhere. ReTextWindowAsetukset Preferences ReTextWindowEsikatseluPreview ReTextWindowEdellinenPrevious ReTextWindow&Edellinen vlilehti Previous tab ReTextWindowTulostaPrint ReTextWindow"Tulosta asiakirjaPrint document ReTextWindow,Tulostuksen esikatselu Print preview ReTextWindow PoistuQuit ReTextWindowBReText %s (kytten PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindowTee uudelleenRedo ReTextWindowLataa uudelleenReload ReTextWindow KorvaaReplace ReTextWindowKorvaa kaikki Replace all ReTextWindow Korvaa Replace with ReTextWindowTallennaSave ReTextWindow Tallenna nimellSave as ReTextWindow"Tallenna tiedosto Save file ReTextWindowHaeSearch ReTextWindow$Haku-tykalupalkkiSearch toolbar ReTextWindowFValitse tiedoston koodaus listasta:#Select file encoding from the list: ReTextWindowZValitse yksi tai useampi tiedosto avattavaksi#Select one or several files to open ReTextWindowAseta enkoodaus Set encoding ReTextWindowAseta lokaali Set locale ReTextWindowNyt hakemistoShow directory ReTextWindowYksinkertainen, mutta tehokas Markdown- ja reStructuredText-editori ConfigDialog Using configuration file at: Käytetään asetustiedostoa: Behavior Käyttäytyminen Automatically save documents Tallenna asiakirjat automaattisesti Automatically open last documents on startup Avaa viimeksi käytetyt asiakirjat automaattisesti käynnistäessä Restore window geometry Palauta ikkunan mitat Open external links in ReText window Avaa ulkopuoliset linkit ReText ikkunassa Markdown syntax extensions (comma-separated) Markdown syntaksilisäosat (pilkulla eroteltuna) Enable synchronized scrolling for Markdown Ota käyttöön synkronisoitu vieritys Markdownille Editor Editori Highlight current line Korosta nykyinen rivi Show line numbers Näytä rivinumerointi Line numbers are relative to current line Rivinumerointi on suhteellinen nykyiseen riviin Tab key inserts spaces Sarkain asettaa välilyöntejä Tabulation width Sarkaimen leveys Draw vertical line at column Enable soft wrap Ota käyttöön pehmeä rivitys Show document stats Näytä dokumentin tilastot Interface Käyttöliittymä Icon theme name Kuvaketeeman nimi Stylesheet file Tyyliohjetiedosto Help Apua Number of recent documents Default preview state Hide toolbar Hide tabs bar when there is only one tab Show full path in window title Live preview Live-esikatselu Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (tyhjä) FileSelectButton Select file to open Valitse avattava tiedosto InsertTableDialog Insert table Number of rows Number of columns LocaleDialog Enter locale name (example: en_US) Syötä lokaalin nimi (esimerkiksi: fi_FI) Set as default Aseta oletukseksi Proxy No write since last change (add ! to override) Ei kirjoitusta viime tallennuksen jälkeen (lisää ! yliajaaksesi) Information Informaatio ReTextEdit Add to dictionary Lisää sanakirjaan Save image Tallenna kuva Images (*.png *.jpg) Kuvat (*.png *.jpg) ReTextTab New document Uusi asiakirja Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Tiedoston sisältöä ei voitu jäsentää, tarkista, että sinulla on <a href="%s">tarvittava moduuli</a> asennettuna! Create missing file? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow File toolbar Tiedosto-työkalupalkki Edit toolbar Muokkaa-työkalupalkki Search toolbar Haku-työkalupalkki New Uusi Open Avaa Set encoding Aseta enkoodaus Reload Lataa uudelleen Save Tallenna Save as Tallenna nimellä Next tab Seuraava välilehti Previous tab Edellinen välilehti Close tab Sulje välilehti Print Tulosta Print preview Tulostuksen esikatselu View HTML code Katsele HTML-koodia Change editor font Vaihda editorin fontti Change preview font Vaihda esikatselun fontti Find text Etsi tekstiä Preview Esikatselu Live preview Live-esikatselu Table editing mode Taulukonmuokkaustila FakeVim mode FakeVim-tila Fullscreen mode Koko näytön tila Preferences Asetukset Quit Poistu Undo Kumoa Redo Tee uudelleen Copy Kopioi Cut Leikkaa Paste Liitä Move line up Siirry rivi ylöspäin Move line down Siirry rivi alaspäin Enable Ota käyttöön Set locale Aseta lokaali Use WebKit renderer Käytä WebKit-renderöijää Use WebEngine (Chromium) renderer Käytä WebEngine (Chromium) -renderöijää Show directory Näytä hakemisto Next Seuraava Previous Edellinen Replace Korvaa Replace all Korvaa kaikki Close Sulje Get help online About ReText Tietoa ReTextistä About Qt Tietoa Qt:sta Bold Lihavointi Italic Kursivointi Underline Alleviivaus Formatting Muotoilu Symbols Merkit &File &Tiedosto &Edit &Muokkaa &Help &Ohje Open recent Avaa viimeaikainen Export Vie Spell check Oikoluku Default markup Oletusmerkintäkieli Search Hae Replace with Korvaa Case sensitively Merkkikokoriippuvaisuus New document Uusi asiakirja Please, save the file somewhere. Tallenna tiedosto johonkin. Select one or several files to open Valitse yksi tai useampi tiedosto avattavaksi Supported files Tuetut tiedostot All files (*) Kaikki tiedostot (*) Select file encoding from the list: Valitse tiedoston koodaus listasta: Plain text (*.txt) Selkoteksti (*.txt) %s files Example of final string: Markdown files %s-tiedostot Save file Tallenna tiedosto Cannot save to file which is open in another tab! Ei voitu tallentaa tiedostoa, joka on auki toisessa välilehdessä! Cannot save to file because it is read-only! Export document to ODT Vie asiakirja ODT-tiedostoksi OpenDocument text files (*.odt) OpenDocument tekstitiedostot (*.odt) HTML files (*.html *.htm) HTML-tiedostot (*.html *.htm) Unrecognized paperSize setting "%s". Tunnistamaton paperin koko -asetus "%s". Export document to PDF Vie asiakirja PDF-tiedostoksi PDF files (*.pdf) PDF-tiedostot (*.pdf) Print document Tulosta asiakirja Export document Vie asiakirja Failed to execute the command: Komennon suorittaminen epäonnistui: Alt text Vaihtoehtoinen teksti URL URL Link text Linkin teksti This file has been deleted by other application. Please make sure you save the file before exit. Toinen sovellus on poistanut tämän tiedoston. Varmista, että tallennat tiedoston ennen sulkemista. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? Tätä asiakirjaa on muokattu toisella sovelluksella. Haluatko ladata tiedoston uudelleen (tämä hylkää nykyiset muutoksesi)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Jos valitset olla lataamatta tiedostoa uudelleen, automaattitallennustila poistetaan käytöstä tämän istunnon ajaksi tietojen menetyksen ehkäisemiseksi. The document has been modified. Do you want to save your changes? Asiakirjaa on muokattu. Haluatko tallentaa muutokset? HTML code HTML-koodi ReText %s (using PyMarkups %s) ReText %s (käyttäen PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText Yksinkertainen, mutta tehokas Markdown- ja reStructuredText-editori Author: Dmitry Shachnev, 2011 Tekijä: Dmitry Shachnev, 2011 Markdown syntax Markdown syntaksi reStructuredText syntax reStructuredText-syntaksi Go to line Insert table Paste image Type the line number Insert images by file path Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_fr.qm0000644000175000017500000003270600000000000016151 0ustar00dmitrydmitryb&&dyYc'gttzr!gl)#VD!1 by%v #S4J+mr5t$%Z Fr/0 '0Bi 20 E(k G5*cϗ!~&ϡ $ (ST)+I B9'~'$G!7-6  @< h> la v%M $C O/03)zeeVI UXx*)  O*.gi1tOuvrir automatiquement les derniers documents au dmarrage,Automatically open last documents on startup ConfigDialogHSauvegarde automatique des documentsAutomatically save documents ConfigDialogComportementBehavior ConfigDialogVDessiner une ligne verticale sur la colonneDraw vertical line at column ConfigDialogditeurEditor ConfigDialog^Activer le dfilement synchronis pour Markdown*Enable synchronized scrolling for Markdown ConfigDialogAideHelp ConfigDialog6Surligner la ligne couranteHighlight current line ConfigDialog*Nom du thme d icnesIcon theme name ConfigDialogInterface Interface ConfigDialog Aperu dynamique Live preview ConfigDialog\Extensions Markdown (spares par une virgule),Markdown syntax extensions (comma-separated) ConfigDialogfOuvrir les liens externes dans la fentre de ReText$Open external links in ReText window ConfigDialogBRestaurer la taille de la fentreRestore window geometry ConfigDialogJAfficher les statistiques du documentShow document stats ConfigDialog:Afficher les numros de ligneShow line numbers ConfigDialog6Fichier de feuille de styleStylesheet file ConfigDialog@La touche Tab insre des espacesTab key inserts spaces ConfigDialog*Largeur de tabulationTabulation width ConfigDialogDFichier de configuration situ :Using configuration file at: ConfigDialog(aucun)(none)FileDialogButton6Choisir le fichier ouvrirSelect file to openFileSelectButtonbEntrez le prfixe pour la langue (exemple: fr_FR)"Enter locale name (example: en_US) LocaleDialog$Dfinir par dfautSet as default LocaleDialogInformation InformationProxyPas d'criture depuis le dernier changement (ajoutez ! pour craser).No write since last change (add ! to override)Proxy,Ajouter au dictionaireAdd to dictionary ReTextEdit(Images (*.png *.jpg)Images (*.png *.jpg) ReTextEdit&Enregistrer l'image Save image ReTextEditImpossible d'analyser le contenu du fichier, vrifier si les <a href="%s">modules ncessaires</a> sont installs!aCould not parse file contents, check if you have the necessary module installed! ReTextTab8Crer le document manquant ?Create missing file? ReTextTab Nouveau document New document ReTextTabFichiers %s%s files ReTextWindow&dition&Edit ReTextWindow&Fichier&File ReTextWindow &Aide&Help ReTextWindow propos de QtAbout Qt ReTextWindow$ propos de ReText About ReText ReTextWindow*Tous les fichiers (*) All files (*) ReTextWindow Texte alternatifAlt text ReTextWindow:Auteur: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindowGrasBold ReTextWindowImpossible d'enregistrer le fichier car il est en lecture seule !,Cannot save to file because it is read-only! ReTextWindowImpossible d'enregistrer un fichier ouvert dans un autre onglet!1Cannot save to file which is open in another tab! ReTextWindow&Sensible la casseCase sensitively ReTextWindow<Changer la police de l'diteurChange editor font ReTextWindow:Changer la police de l'aperuChange preview font ReTextWindow FermerClose ReTextWindowFermer l'onglet Close tab ReTextWindow CopierCopy ReTextWindow CouperCut ReTextWindow&Balisage par dfautDefault markup ReTextWindow*Barre d'outil dition Edit toolbar ReTextWindowActiverEnable ReTextWindowExporterExport ReTextWindow(Exporter le documentExport document ReTextWindowDExporter le document au format ODTExport document to ODT ReTextWindowDExporter le document au format PDFExport document to PDF ReTextWindowTchec lors de l'excution de la commande :Failed to execute the command: ReTextWindow Imitation de Vim FakeVim mode ReTextWindow*Barre d'outil Fichier File toolbar ReTextWindow&Rechercher un texte Find text ReTextWindowFormatage Formatting ReTextWindow Mode plein cranFullscreen mode ReTextWindow&Assistance en ligneGet help online ReTextWindow Aller la ligne Go to line ReTextWindowCode HTML HTML code ReTextWindow8Fichiers HTML (*.html *.htm)HTML files (*.html *.htm) ReTextWindow&Si vous choisissez de ne pas recharger le fichier, la sauvegarde automatique sera dsactive pour cette session afin d'viter une perte de donnes.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindowItaliqueItalic ReTextWindowTexte du lien Link text ReTextWindow Aperu dynamique Live preview ReTextWindow Syntaxe MarkdownMarkdown syntax ReTextWindowNouveauNew ReTextWindow Nouveau document New document ReTextWindowSuivantNext ReTextWindowOnglet suivantNext tab ReTextWindow OuvrirOpen ReTextWindow6Ouvrir les fichiers rcents Open recent ReTextWindowFFichiers OpenDocument texte (*.odt)OpenDocument text files (*.odt) ReTextWindow(Fichiers PDF (*.pdf)PDF files (*.pdf) ReTextWindow CollerPaste ReTextWindow,Fichiers texte (*.txt)Plain text (*.txt) ReTextWindowZVeuillez enregistrer le fichier quelque part. Please, save the file somewhere. ReTextWindowPrfrences Preferences ReTextWindow AperuPreview ReTextWindowPrcdentPrevious ReTextWindow Onglet prcdent Previous tab ReTextWindowImprimerPrint ReTextWindow(Imprimer le documentPrint document ReTextWindow.Aperu avant impression Print preview ReTextWindowQuitterQuit ReTextWindowDReText %s (utilisant PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindowRtablirRedo ReTextWindowRechargerReload ReTextWindowRemplacerReplace ReTextWindowRemplacer tout Replace all ReTextWindowRemplacer avec Replace with ReTextWindowEnregistrerSave ReTextWindow Enregistrer SousSave as ReTextWindow,Enregistrer le fichier Save file ReTextWindowRechercherSearch ReTextWindow.Barre d'outil RechercheSearch toolbar ReTextWindowXChoisir l'encodage du fichier dans la liste:#Select file encoding from the list: ReTextWindowRChoisir un ou plusieurs fichiers ouvrir#Select one or several files to open ReTextWindow$Dfinir l'encodage Set encoding ReTextWindow"Choisir la langue Set locale ReTextWindow,Afficher le rpertoireShow directory ReTextWindowxditeur de Markdown et reStructuredText simple mais puissant ConfigDialog Behavior Comportement Automatically save documents Sauvegarde automatique des documents Restore window geometry Restaurer la taille de la fenêtre Open external links in ReText window Ouvrir les liens externes dans la fenêtre de ReText Markdown syntax extensions (comma-separated) Extensions Markdown (séparées par une virgule) Editor Éditeur Highlight current line Surligner la ligne courante Show line numbers Afficher les numéros de ligne Tab key inserts spaces La touche Tab insère des espaces Tabulation width Largeur de tabulation Interface Interface Icon theme name Nom du thème d’icônes Stylesheet file Fichier de feuille de style Show document stats Afficher les statistiques du document Help Aide Enable synchronized scrolling for Markdown Activer le défilement synchronisé pour Markdown Draw vertical line at column Dessiner une ligne verticale sur la colonne Automatically open last documents on startup Ouvrir automatiquement les derniers documents au démarrage Using configuration file at: Fichier de configuration situé à : Number of recent documents Default preview state Line numbers are relative to current line Enable soft wrap Hide toolbar Hide tabs bar when there is only one tab Show full path in window title Live preview Aperçu dynamique Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (aucun) FileSelectButton Select file to open Choisir le fichier à ouvrir InsertTableDialog Insert table Number of rows Number of columns LocaleDialog Enter locale name (example: en_US) Entrez le préfixe pour la langue (exemple: fr_FR) Set as default Définir par défaut Proxy No write since last change (add ! to override) Pas d'écriture depuis le dernier changement (ajoutez ! pour écraser) Information Information ReTextEdit Save image Enregistrer l'image Images (*.png *.jpg) Images (*.png *.jpg) Add to dictionary Ajouter au dictionaire ReTextTab New document Nouveau document Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Impossible d'analyser le contenu du fichier, vérifier si les <a href="%s">modules nécessaires</a> sont installés! Create missing file? Créer le document manquant ? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow File toolbar Barre d'outil Fichier Edit toolbar Barre d'outil Édition Search toolbar Barre d'outil Recherche New Nouveau Open Ouvrir Set encoding Définir l'encodage Reload Recharger Save Enregistrer Save as Enregistrer Sous Next tab Onglet suivant Previous tab Onglet précédent Close tab Fermer l'onglet Print Imprimer Print preview Aperçu avant impression View HTML code Voir le code HTML Find text Rechercher un texte Preview Aperçu Live preview Aperçu dynamique Table editing mode Mode édition table FakeVim mode Imitation de Vim Fullscreen mode Mode plein écran Preferences Préférences Quit Quitter Undo Annuler Redo Rétablir Copy Copier Cut Couper Paste Coller Enable Activer Set locale Choisir la langue Use WebKit renderer Utiliser le rendu de WebKit Show directory Afficher le répertoire Next Suivant Previous Précédent Get help online Assistance en ligne About ReText À propos de ReText About Qt À propos de Qt Bold Gras Italic Italique Underline Souligné Symbols Symboles &File &Fichier &Edit &Édition &Help &Aide Open recent Ouvrir les fichiers récents Export Exporter Spell check Vérifier l'orthographe Default markup Balisage par défaut Formatting Formatage Search Rechercher Case sensitively Sensible à la casse New document Nouveau document Go to line Aller à la ligne Type the line number Entrer le numéro de ligne Please, save the file somewhere. Veuillez enregistrer le fichier quelque part. Select one or several files to open Choisir un ou plusieurs fichiers à ouvrir Supported files Formats acceptés All files (*) Tous les fichiers (*) Select file encoding from the list: Choisir l'encodage du fichier dans la liste: Plain text (*.txt) Fichiers texte (*.txt) %s files Example of final string: Markdown files Fichiers %s Save file Enregistrer le fichier Cannot save to file because it is read-only! Impossible d'enregistrer le fichier car il est en lecture seule ! Export document to ODT Exporter le document au format ODT OpenDocument text files (*.odt) Fichiers OpenDocument texte (*.odt) HTML files (*.html *.htm) Fichiers HTML (*.html *.htm) Export document to PDF Exporter le document au format PDF PDF files (*.pdf) Fichiers PDF (*.pdf) Print document Imprimer le document Export document Exporter le document Failed to execute the command: Échec lors de l'exécution de la commande : This file has been deleted by other application. Please make sure you save the file before exit. Ce fichier a été supprimé par une autre application. Pensez à vérifier que vous sauvegardez le fichier avant de quitter. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? Ce document a été modifié par une autre application. Voulez-vous recharger le fichier (vos modifications seront perdues) ? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Si vous choisissez de ne pas recharger le fichier, la sauvegarde automatique sera désactivée pour cette session afin d'éviter une perte de données. The document has been modified. Do you want to save your changes? Le document a été modifié. Voulez vous enregistrer vos changements ? HTML code Code HTML Simple but powerful editor for Markdown and reStructuredText Éditeur de Markdown et reStructuredText simple mais puissant Author: Dmitry Shachnev, 2011 Auteur: Dmitry Shachnev, 2011 Markdown syntax Syntaxe Markdown reStructuredText syntax Syntaxe reStructuredText Change editor font Changer la police de l'éditeur Change preview font Changer la police de l'aperçu ReText %s (using PyMarkups %s) ReText %s (utilisant PyMarkups %s) Close Fermer Alt text Texte alternatif URL URL Link text Texte du lien Replace Remplacer Replace all Remplacer tout Replace with Remplacer avec Cannot save to file which is open in another tab! Impossible d'enregistrer un fichier ouvert dans un autre onglet! Use WebEngine (Chromium) renderer Utiliser le rendu de WebEngine (Chromium) Insert table Insert images by file path Paste image Move line up Move line down Unrecognized paperSize setting "%s". Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters %d m | %d a | %d c main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_hr.qm0000644000175000017500000003100700000000000016144 0ustar00dmitrydmitryIb#PdyYc'gt{zr[gvl) D!T by%vW "#S4J(m rV5t!j#Fr,-I'\0B 0 E%6k 5'ϗ#ϡ ! %Tb)$+I9$G~'! 7*R  3 @ h> R la v" $ +/,3&eI U1W*)^ O(.~i. tOtvaranje zadnje ureivanoga dokumenta prilikom pokretanja,Automatically open last documents on startup ConfigDialog>Automatsko spremanje dokumenataAutomatically save documents ConfigDialogPonaaanjeBehavior ConfigDialog@Prika~i okomitu liniju na stupcuDraw vertical line at column ConfigDialogUreiva Editor ConfigDialogPKoristi sinkroniziran kliza za Markdown*Enable synchronized scrolling for Markdown ConfigDialog PomoHelp ConfigDialog*Istakni aktivni redakHighlight current line ConfigDialog Naziv teme ikonaIcon theme name ConfigDialogSu elje Interface ConfigDialogPregled u~ivo Live preview ConfigDialog`Proairenje sintakse Markdowna (odvajati zarezom),Markdown syntax extensions (comma-separated) ConfigDialogFOtvaraj vanjske poveznice u ReTextu$Open external links in ReText window ConfigDialog4Pamenje dimenzije prozoraRestore window geometry ConfigDialogLPrikaz statisti kih podataka dokumentaShow document stats ConfigDialog,Prika~i brojeve redakaShow line numbers ConfigDialog,Datoteka lista stilovaStylesheet file ConfigDialog"Tab umee bjelineTab key inserts spaces ConfigDialog"`irina tabulatoraTabulation width ConfigDialog(niata)(none)FileDialogButton>Odaberite datoteku za otvaranjeSelect file to openFileSelectButton^Unesite naziv lokalizacijske datoteke (npr. hr)"Enter locale name (example: en_US) LocaleDialog$Postavi kao zadanoSet as default LocaleDialogInformacije InformationProxyjNema unosa od zadnje izmjene (dodajte ! da pregazite).No write since last change (add ! to override)Proxy*Dodaj rije u rje nikAdd to dictionary ReTextEdit&Slike (*.png *.jpg)Images (*.png *.jpg) ReTextEditSpremi sliku Save image ReTextEditNije mogue raa laniti sadr~aj datoteke. Provjerite imate li instaliran <a href="%s">potreban modul</a>!aCould not parse file contents, check if you have the necessary module installed! ReTextTabNovi dokument New document ReTextTab%s datoteke%s files ReTextWindow&Ureivanje&Edit ReTextWindow&Datoteka&File ReTextWindow &Pomo&Help ReTextWindow O Qt-uAbout Qt ReTextWindowO ReTextu About ReText ReTextWindow.Sve tipovi datoteka (*) All files (*) ReTextWindow*Tekst kao alternativaAlt text ReTextWindow8Autor: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindowPodebljanoBold ReTextWindowDatoteku nije mogue spremiti jer je dozvoljeno samo njezino  itanje.,Cannot save to file because it is read-only! ReTextWindow~Datoteku nije mogue spremiti jer je otvorena u drugoj kartici.1Cannot save to file which is open in another tab! ReTextWindow8Razlikuj velika i mala slovaCase sensitively ReTextWindow0Promjena fonta ureiva aChange editor font ReTextWindow.Promjena fonta pregledaChange preview font ReTextWindowZatvoriClose ReTextWindowZatvori karticu Close tab ReTextWindowKopirajCopy ReTextWindow Izre~iCut ReTextWindowZadana sintaksaDefault markup ReTextWindow.Alatna traka ureivanja Edit toolbar ReTextWindowOmoguiEnable ReTextWindow IzvozExport ReTextWindowIzvezi dokumentExport document ReTextWindow.Izvezi datoteku kao ODTExport document to ODT ReTextWindow.Izvezi datoteku kao PDFExport document to PDF ReTextWindow,Naredba nije izvraena:Failed to execute the command: ReTextWindow0La~ni Vim kao na in rada FakeVim mode ReTextWindow*Alatna traka datoteka File toolbar ReTextWindowTra~i u tekstu Find text ReTextWindowOblikovanje Formatting ReTextWindowXPrikaz preko cijeloga zaslona kao na in radaFullscreen mode ReTextWindow8Tra~enje pomoi na internetuGet help online ReTextWindowHTML kod HTML code ReTextWindow8HTML datoteka (*.html *.htm)HTML files (*.html *.htm) ReTextWindowAko ne u itate ponovno datoteku, automatsko e spremanje biti onemogueno za ovu sesiju kako bi se sprije io gubitak podataka.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindowUkoaenoItalic ReTextWindow$Poveznica na tekst Link text ReTextWindowPregled u~ivo Live preview ReTextWindow$Sintaksa MarkdownaMarkdown syntax ReTextWindowNovoNew ReTextWindowNovi dokument New document ReTextWindowSljedeeNext ReTextWindow Sljedea karticaNext tab ReTextWindow OtvoriOpen ReTextWindowDOtvori nedavno ureivane dokumente Open recent ReTextWindowJOpenDocument tekstna datoteka (*.odt)OpenDocument text files (*.odt) ReTextWindow(PDF datoteke (*.pdf)PDF files (*.pdf) ReTextWindow UmetniPaste ReTextWindow(Obi an tekst (*.txt)Plain text (*.txt) ReTextWindow$Spremite datoteku. Please, save the file somewhere. ReTextWindowPodeaavanja Preferences ReTextWindowPregledPreview ReTextWindowPrethodnoPrevious ReTextWindow"Prethodna kartica Previous tab ReTextWindow IspisPrint ReTextWindowIspis dokumentaPrint document ReTextWindowPrikaz ispisa Print preview ReTextWindowZatvoriQuit ReTextWindowDReText %s (koristei PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindow Ponovi prethodnoRedo ReTextWindowPonovno u itajReload ReTextWindowZamijeniReplace ReTextWindowZamijeni sve Replace all ReTextWindowZamijeni s Replace with ReTextWindow SpremiSave ReTextWindowSpremi kaoSave as ReTextWindowSpremi datoteku Save file ReTextWindow Tra~iSearch ReTextWindow*Alatna traka tra~enjaSearch toolbar ReTextWindowZOdaberite vrstu kodiranja znakova u datoteci:#Select file encoding from the list: ReTextWindow\Odaberite jednu ili viae datoteka za otvaranje#Select one or several files to open ReTextWindow"Postavi kodiranje Set encoding ReTextWindow&Postavljanje jezika Set locale ReTextWindow(Prika~i sadr~aj mapeShow directory ReTextWindowxJednostavan ali moan ureiva Markdowna i reStructuredTexta ConfigDialog Behavior Ponašanje Automatically save documents Automatsko spremanje dokumenata Automatically open last documents on startup Otvaranje zadnje uređivanoga dokumenta prilikom pokretanja Restore window geometry Pamćenje dimenzije prozora Open external links in ReText window Otvaraj vanjske poveznice u ReTextu Markdown syntax extensions (comma-separated) Proširenje sintakse Markdowna (odvajati zarezom) Enable synchronized scrolling for Markdown Koristi sinkroniziran klizač za Markdown Editor Uređivač Highlight current line Istakni aktivni redak Show line numbers Prikaži brojeve redaka Tab key inserts spaces Tab umeće bjeline Tabulation width Širina tabulatora Draw vertical line at column Prikaži okomitu liniju na stupcu Interface Sučelje Icon theme name Naziv teme ikona Stylesheet file Datoteka lista stilova Show document stats Prikaz statističkih podataka dokumenta Help Pomoć Using configuration file at: Number of recent documents Default preview state Line numbers are relative to current line Enable soft wrap Hide toolbar Hide tabs bar when there is only one tab Show full path in window title Live preview Pregled uživo Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (ništa) FileSelectButton Select file to open Odaberite datoteku za otvaranje InsertTableDialog Insert table Number of rows Number of columns LocaleDialog Enter locale name (example: en_US) Unesite naziv lokalizacijske datoteke (npr. hr) Set as default Postavi kao zadano Proxy No write since last change (add ! to override) Nema unosa od zadnje izmjene (dodajte ! da pregazite) Information Informacije ReTextEdit Save image Spremi sliku Images (*.png *.jpg) Slike (*.png *.jpg) Add to dictionary Dodaj riječ u rječnik ReTextTab New document Novi dokument Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Nije moguće raščlaniti sadržaj datoteke. Provjerite imate li instaliran <a href="%s">potreban modul</a>! Create missing file? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow File toolbar Alatna traka datoteka Edit toolbar Alatna traka uređivanja Search toolbar Alatna traka traženja New Novo Open Otvori Set encoding Postavi kodiranje Reload Ponovno učitaj Save Spremi Save as Spremi kao Next tab Sljedeća kartica Previous tab Prethodna kartica Close tab Zatvori karticu Print Ispis Print preview Prikaz ispisa View HTML code Pregled HTML koda Change editor font Promjena fonta uređivača Change preview font Promjena fonta pregleda Find text Traži u tekstu Preview Pregled Live preview Pregled uživo Table editing mode Uređivanje tablica kao način rada FakeVim mode Lažni Vim kao način rada Fullscreen mode Prikaz preko cijeloga zaslona kao način rada Preferences Podešavanja Quit Zatvori Undo Vrati prethodno Redo Ponovi prethodno Copy Kopiraj Cut Izreži Paste Umetni Enable Omogući Set locale Postavljanje jezika Use WebKit renderer Koristi WebKit crtač Use WebEngine (Chromium) renderer Koristi WebEngine (Chromium) crtač Show directory Prikaži sadržaj mape Next Sljedeće Previous Prethodno Replace Zamijeni Replace all Zamijeni sve Close Zatvori Get help online Traženje pomoći na internetu About ReText O ReTextu About Qt O Qt-u Bold Podebljano Italic Ukošeno Underline Podvučeno Formatting Oblikovanje Symbols Simboli &File &Datoteka &Edit &Uređivanje &Help &Pomoć Open recent Otvori nedavno uređivane dokumente Export Izvoz Spell check Provjera pravopisa Default markup Zadana sintaksa Search Traži Replace with Zamijeni s Case sensitively Razlikuj velika i mala slova New document Novi dokument Please, save the file somewhere. Spremite datoteku. Select one or several files to open Odaberite jednu ili više datoteka za otvaranje Supported files Podržani tipovi datoteka All files (*) Sve tipovi datoteka (*) Select file encoding from the list: Odaberite vrstu kodiranja znakova u datoteci: Plain text (*.txt) Običan tekst (*.txt) %s files Example of final string: Markdown files %s datoteke Save file Spremi datoteku Cannot save to file which is open in another tab! Datoteku nije moguće spremiti jer je otvorena u drugoj kartici. Cannot save to file because it is read-only! Datoteku nije moguće spremiti jer je dozvoljeno samo njezino čitanje. Export document to ODT Izvezi datoteku kao ODT OpenDocument text files (*.odt) OpenDocument tekstna datoteka (*.odt) HTML files (*.html *.htm) HTML datoteka (*.html *.htm) Export document to PDF Izvezi datoteku kao PDF PDF files (*.pdf) PDF datoteke (*.pdf) Print document Ispis dokumenta Export document Izvezi dokument Failed to execute the command: Naredba nije izvršena: Alt text Tekst kao alternativa URL URL Link text Poveznica na tekst This file has been deleted by other application. Please make sure you save the file before exit. Datoteku izbrisala neka druga aplikacija. Spremite datoteku prije zatvaranja. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? Datoteka je izmijenjena i nekom drugom aplikacijom. Želite li je ponovno učitati? Ovo će poništiti vaše izmjene. If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Ako ne učitate ponovno datoteku, automatsko će spremanje biti onemogućeno za ovu sesiju kako bi se spriječio gubitak podataka. The document has been modified. Do you want to save your changes? Dokument je izmijenjen. Želite li spremiti izmjene? HTML code HTML kod ReText %s (using PyMarkups %s) ReText %s (koristeći PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText Jednostavan ali moćan uređivač Markdowna i reStructuredTexta Author: Dmitry Shachnev, 2011 Autor: Dmitry Shachnev, 2011 Markdown syntax Sintaksa Markdowna reStructuredText syntax Sintaksa reStructuredTexta Go to line Insert table Insert images by file path Paste image Move line up Move line down Type the line number Unrecognized paperSize setting "%s". Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters %d m | %d a | %d c main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_hu.qm0000644000175000017500000002013600000000000016150 0ustar00dmitrydmitrysbYc'`zkg# by% v  #Sm,r'_ 0 Eϗ!, T) +I9Y  @ la v Nyelv megadsa (pldul: hu_HU)"Enter locale name (example: en_US) LocaleDialog:Bellts alaprtelmezettkntSet as default LocaleDialogNem tudtuk elemezni a fjl tartalmt, krjk ellenQrizze, hogy a <a href="%s">szksges modul</a> teleptve van-e!aCould not parse file contents, check if you have the necessary module installed! ReTextTabj dokumentum New document ReTextTab%s fjlok%s files ReTextWindow&Szerkeszts&Edit ReTextWindow &Fjl&File ReTextWindow S&g&Help ReTextWindowNvjegy: QtAbout Qt ReTextWindowNvjegy: ReText About ReText ReTextWindowMinden fjl (*) All files (*) ReTextWindow:SzerzQ: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindowFlkvrBold ReTextWindowJNem menthetQ, mert a fjl rsvdett!,Cannot save to file because it is read-only! ReTextWindowBetqrzkenyCase sensitively ReTextWindowMsolsCopy ReTextWindowKivgsCut ReTextWindow0Alaprtelmezett formtumDefault markup ReTextWindow*Szerkeszts eszkztr Edit toolbar ReTextWindowEngedlyezsEnable ReTextWindowExportlsExport ReTextWindow,Dokumentum exportlsaExport document ReTextWindowJDokumentum exportlsa ODT formtumbaExport document to ODT ReTextWindow:Dokumentum exportlsa PDF-beExport document to PDF ReTextWindowPNem tudtuk vgrehajtani ezt a parancsot:Failed to execute the command: ReTextWindowFjl eszkztr File toolbar ReTextWindowSzveg keresse Find text ReTextWindowFormzs Formatting ReTextWindowTeljes kpernyQFullscreen mode ReTextWindowOnline sgGet help online ReTextWindowHTML kd HTML code ReTextWindow4HTML fjlok (*.html *.htm)HTML files (*.html *.htm) ReTextWindowDQltItalic ReTextWindowlQ elQnzet Live preview ReTextWindow$Markdown szintaxisMarkdown syntax ReTextWindowjNew ReTextWindowj dokumentum New document ReTextWindowKvetkezQNext ReTextWindowMegnyitsOpen ReTextWindow(Legutbbi megnyitsa Open recent ReTextWindowDOpenDocument szveg fjlok (*.odt)OpenDocument text files (*.odt) ReTextWindow$PDF fjlok (*.pdf)PDF files (*.pdf) ReTextWindowBeillesztsPaste ReTextWindow.Egyszerq szveg (*.txt)Plain text (*.txt) ReTextWindowLKrjk mentse el a fjlt msik helyre. Please, save the file somewhere. ReTextWindowBelltsok Preferences ReTextWindowElQnzetPreview ReTextWindow ElQzQPrevious ReTextWindowNyomtatsPrint ReTextWindow*Dokumentum nyomtatsaPrint document ReTextWindow&Nyomtatsi elQnzet Print preview ReTextWindowKilpsQuit ReTextWindow jra vgrehajtsRedo ReTextWindow MentsSave ReTextWindow"Ments msknt...Save as ReTextWindowFjl mentse Save file ReTextWindowKeressSearch ReTextWindow"Keress eszkztrSearch toolbar ReTextWindowDVlassza ki a kdolst a listbl:#Select file encoding from the list: ReTextWindowVJelljn ki egy vagy tbb fjlt megnyitsra#Select one or several files to open ReTextWindowKdols Set encoding ReTextWindow Nyelv belltsa Set locale ReTextWindowMappa mutatsaShow directory ReTextWindowEgyszerq, de nagy tuds Markdown s reStructuredText szerkesztQHasznlja a WebKit megjelentQtUse WebKit renderer ReTextWindow*HTML kd megtekintseView HTML code ReTextWindow4reStructuredText szintaxisreStructuredText syntax ReTextWindow././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643654515.0 ReText-7.2.3/locale/retext_hu.ts0000644000175000017500000007540700000000000016174 0ustar00dmitrydmitry ConfigDialog Behavior Működés Automatically save documents Automatikusan mentse a dokumentumokat Restore window geometry Az ablak méretének visszaállítása Open external links in ReText window Külső hivatkozások megnyitása a ReText-ben Editor Szerkesztő Highlight current line Aktuális sor kiemelése Show line numbers Sorszámok megjelenítése Tab key inserts spaces A tabulátor szóközöket használ Tabulation width Tabulátorszélesség Interface Program felület Icon theme name Ikontéma neve Stylesheet file Markdown syntax extensions (comma-separated) Help Súgó Enable synchronized scrolling for Markdown Draw vertical line at column Automatically open last documents on startup Using configuration file at: Number of recent documents Default preview state Line numbers are relative to current line Enable soft wrap Show document stats Hide toolbar Hide tabs bar when there is only one tab Show full path in window title Live preview Élő előnézet Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) FileSelectButton Select file to open InsertTableDialog Insert table Number of rows Number of columns LocaleDialog Enter locale name (example: en_US) Nyelv megadása (például: hu_HU) Set as default Beállítás alapértelmezettként Proxy No write since last change (add ! to override) Information ReTextEdit Save image Images (*.png *.jpg) Add to dictionary ReTextTab New document Új dokumentum Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Nem tudtuk elemezni a fájl tartalmát, kérjük ellenőrizze, hogy a <a href="%s">szükséges modul</a> telepítve van-e! Create missing file? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow File toolbar Fájl eszköztár Edit toolbar Szerkesztés eszköztár Search toolbar Keresés eszköztár New Új Open Megnyitás Save Mentés Set encoding Kódolás Save as Mentés másként... Print Nyomtatás Print preview Nyomtatási előnézet View HTML code HTML kód megtekintése Find text Szöveg keresése Preview Előnézet Live preview Élő előnézet Fullscreen mode Teljes képernyő Preferences Beállítások Quit Kilépés Undo Visszavonás Redo Újra végrehajtás Copy Másolás Cut Kivágás Paste Beillesztés Enable Engedélyezés Set locale Nyelv beállítása Use WebKit renderer Használja a WebKit megjelenítőt Next Következő Previous Előző Get help online Online súgó About ReText Névjegy: ReText About Qt Névjegy: Qt Bold Félkövér Italic Dőlt Underline Aláhúzás Symbols Szimbólumok &File &Fájl &Edit &Szerkesztés &Help Sú&gó Open recent Legutóbbi megnyitása Export Exportálás Spell check Helyesírás-ellenőrzés Default markup Alapértelmezett formátum Formatting Formázás Search Keresés Case sensitively Betűérzékeny New document Új dokumentum Please, save the file somewhere. Kérjük mentse el a fájlt másik helyre. Show directory Mappa mutatása Select one or several files to open Jelöljön ki egy vagy több fájlt megnyitásra Supported files Támogatott fájltípusok All files (*) Minden fájl (*) Select file encoding from the list: Válassza ki a kódolást a listából: Plain text (*.txt) Egyszerű szöveg (*.txt) %s files Example of final string: Markdown files %s fájlok Save file Fájl mentése Cannot save to file because it is read-only! Nem menthető, mert a fájl írásvédett! Export document to ODT Dokumentum exportálása ODT formátumba OpenDocument text files (*.odt) OpenDocument szöveg fájlok (*.odt) HTML files (*.html *.htm) HTML fájlok (*.html *.htm) Export document to PDF Dokumentum exportálása PDF-be PDF files (*.pdf) PDF fájlok (*.pdf) Print document Dokumentum nyomtatása Export document Dokumentum exportálása Failed to execute the command: Nem tudtuk végrehajtani ezt a parancsot: The document has been modified. Do you want to save your changes? Ezt a dokumentumot ön módosította. El kívánja menteni a változtatásokat? HTML code HTML kód Simple but powerful editor for Markdown and reStructuredText Egyszerű, de nagy tudású Markdown és reStructuredText szerkesztő Author: Dmitry Shachnev, 2011 Szerző: Dmitry Shachnev, 2011 Markdown syntax Markdown szintaxis reStructuredText syntax reStructuredText szintaxis Reload Next tab Previous tab Table editing mode FakeVim mode This file has been deleted by other application. Please make sure you save the file before exit. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Change editor font Change preview font ReText %s (using PyMarkups %s) Close Alt text URL Link text Replace Replace all Replace with Cannot save to file which is open in another tab! Use WebEngine (Chromium) renderer Close tab Go to line Insert table Insert images by file path Paste image Move line up Move line down Type the line number Unrecognized paperSize setting "%s". Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_it.qm0000644000175000017500000003705000000000000016153 0ustar00dmitrydmitry*,į6*<*H*%*07!J6V'CWT)kZSUP/%5ʇ.B1:s6L"nun("AI85 /UF) O5zΩ $e#4> b-gdy Yc'gt w"zgr)lDVg'l)*D! bvy%8vkћr#h #3#S {4J2mru5t+w-6bFr7w8 W9 '&0Bew  -d0 E/?:u'wk:51ϗ(-°$ϡ + /T&))K+I'9.j~!?'+)374  @ h>j j3 la v, W$ $ /8a304E z Ke$IU\ˏ*)v O1.i9}|Apri automaticamente gli ultimi documenti utilizzati all'avvio,Automatically open last documents on startup ConfigDialog>Salva automaticamente documentiAutomatically save documents ConfigDialogComportamentoBehavior ConfigDialog6Stato predefinito anteprimaDefault preview state ConfigDialogFTraccia riga verticale alla colonnaDraw vertical line at column ConfigDialog EditorEditor ConfigDialogBAbilita ritorno a capo automaticoEnable soft wrap ConfigDialog\Abilita scorrimento sincronizzato per Markdown*Enable synchronized scrolling for Markdown ConfigDialog AiutoHelp ConfigDialoglNascondi barra delle schede quando c' solo una scheda(Hide tabs bar when there is only one tab ConfigDialog<Nascondi barra degli strumenti Hide toolbar ConfigDialog.Evidenzia riga correnteHighlight current line ConfigDialogNome tema iconeIcon theme name ConfigDialogInterfaccia Interface ConfigDialogbI numeri di riga sono relativi alla riga corrente)Line numbers are relative to current line ConfigDialog0Anteprima in tempo reale Live preview ConfigDialognEstensioni alla sintassi Markdown (separate da virgole),Markdown syntax extensions (comma-separated) ConfigDialog"Anteprima normaleNormal preview ConfigDialog6Numero di documenti recentiNumber of recent documents ConfigDialogdApri collegamenti esterni nella finestra di ReText$Open external links in ReText window ConfigDialog<Ripristina dimensioni finestraRestore window geometry ConfigDialog@Visualizza statistiche documentoShow document stats ConfigDialogfVisualizza percorso completo nella barra del titoloShow full path in window title ConfigDialog2Visualizza numeri di rigaShow line numbers ConfigDialog(File foglio di stileStylesheet file ConfigDialog8Il tasto Tab inserisce spaziTab key inserts spaces ConfigDialog0Larghezza di tabulazioneTabulation width ConfigDialogDFile di configurazione utilizzato:Using configuration file at: ConfigDialog(nessuno)(none)FileDialogButton6Seleziona il file da aprireSelect file to openFileSelectButton"Inserisci tabella Insert tableInsertTableDialog"Numero di colonneNumber of columnsInsertTableDialogNumero di righeNumber of rowsInsertTableDialogRInserisci localizzazione (esempio: en_US)"Enter locale name (example: en_US) LocaleDialog0Imposta come predefinitoSet as default LocaleDialogInformazione InformationProxyNessuna scrittura dall'ultima modifica (aggiungi ! per salvare comunque).No write since last change (add ! to override)Proxy,Aggiungi al dizionarioAdd to dictionary ReTextEdit,Immagini (*.png *.jpg)Images (*.png *.jpg) ReTextEditSalva immagine Save image ReTextEditFImpossibile creare il file '%s': %sCould not create file '%s': %s ReTextTabImpossibile interpretare i contenuti del file, controlla che il <a href="%s">modulo richiesto</a> sia installato!aCould not parse file contents, check if you have the necessary module installed! ReTextTab0Creare il file mancante?Create missing file? ReTextTab4Impossibile creare il fileFile could not be created ReTextTabNuovo documento New document ReTextTabDIl file '%s' non esiste. Crearlo?8The file '%s' does not exist. Do you want to create it? ReTextTabFile %s%s files ReTextWindow&Modifica&Edit ReTextWindow &File&File ReTextWindow &Aiuto&Help ReTextWindow$Informazioni su QtAbout Qt ReTextWindow,Informazioni su ReText About ReText ReTextWindow Tutti i file (*) All files (*) ReTextWindow"Testo alternativoAlt text ReTextWindow:Autore: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindowGrassettoBold ReTextWindowjImpossibile salvare il file perch in sola lettura!,Cannot save to file because it is read-only! ReTextWindowrImpossibile salvare in un file aperto in un'altra scheda!1Cannot save to file which is open in another tab! ReTextWindow:Distingui maiuscole/minuscoleCase sensitively ReTextWindow2Modifica carattere editorChange editor font ReTextWindow8Modifica carattere anteprimaChange preview font ReTextWindow ChiudiClose ReTextWindowChiudi scheda Close tab ReTextWindow CopiaCopy ReTextWindow TagliaCut ReTextWindowDLinguaggio a marcatori predefinitoDefault markup ReTextWindow<Barra degli strumenti Modifica Edit toolbar ReTextWindow AttivaEnable ReTextWindowEsportaExport ReTextWindow"Esporta documentoExport document ReTextWindowBEsporta documento nel formato ODTExport document to ODT ReTextWindowBEsporta documento nel formato PDFExport document to PDF ReTextWindow@Impossibile eseguire il comando:Failed to execute the command: ReTextWindow6Modalit di inserimento Vim FakeVim mode ReTextWindow4Barra degli strumenti File File toolbar ReTextWindowTrova testo Find text ReTextWindowFormattazione Formatting ReTextWindowSchermo interoFullscreen mode ReTextWindow(Ottieni aiuto onlineGet help online ReTextWindowVai alla riga Go to line ReTextWindowCodice HTML HTML code ReTextWindow0File HTML (*.html *.htm)HTML files (*.html *.htm) ReTextWindowSe scegli di non ricaricare il file, la modalit salvataggio automatico sar disabilitata per questa sessione per prevenire perdite di dati.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindow"Inserisci tabella Insert table ReTextWindowCorsivoItalic ReTextWindow$Testo collegamento Link text ReTextWindow0Anteprima in tempo reale Live preview ReTextWindow"Sintassi MarkdownMarkdown syntax ReTextWindow$Sposta riga in giMove line down ReTextWindow"Sposta riga in su Move line up ReTextWindow NuovoNew ReTextWindowNuovo documento New document ReTextWindow AvantiNext ReTextWindow"Scheda successivaNext tab ReTextWindowApriOpen ReTextWindowApri recente Open recent ReTextWindowDFile di testo OpenDocument (*.odt)OpenDocument text files (*.odt) ReTextWindow File PDF (*.pdf)PDF files (*.pdf) ReTextWindowIncollaPaste ReTextWindow Incolla immagine Paste image ReTextWindow,Testo semplice (*.txt)Plain text (*.txt) ReTextWindowVPer favore, salva il file da qualche parte. Please, save the file somewhere. ReTextWindowPreferenze Preferences ReTextWindowAnteprimaPreview ReTextWindowIndietroPrevious ReTextWindow"Scheda precedente Previous tab ReTextWindow StampaPrint ReTextWindow Stampa documentoPrint document ReTextWindow&Anteprima di stampa Print preview ReTextWindowEsciQuit ReTextWindowBReText %s (utilizza PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindowRipristinaRedo ReTextWindowRicaricaReload ReTextWindowSostituisciReplace ReTextWindow"Sostituisci tutto Replace all ReTextWindowSostituisci con Replace with ReTextWindow SalvaSave ReTextWindowSalva con nomeSave as ReTextWindowSalva file Save file ReTextWindow CercaSearch ReTextWindow:Barra degli strumenti RicercaSearch toolbar ReTextWindowVSeleziona la codifica del file dall'elenco:#Select file encoding from the list: ReTextWindowDSeleziona uno o pi file da aprire#Select one or several files to open ReTextWindow Imposta codifica Set encoding ReTextWindow,Imposta localizzazione Set locale ReTextWindowMostra cartellaShow directory ReTextWindowzUn editor semplice ma potente per Markdown e reStructuredText ConfigDialog Using configuration file at: File di configurazione utilizzato: Behavior Comportamento Automatically save documents Salva automaticamente documenti Automatically open last documents on startup Apri automaticamente gli ultimi documenti utilizzati all'avvio Number of recent documents Numero di documenti recenti Restore window geometry Ripristina dimensioni finestra Default preview state Stato predefinito anteprima Open external links in ReText window Apri collegamenti esterni nella finestra di ReText Markdown syntax extensions (comma-separated) Estensioni alla sintassi Markdown (separate da virgole) Enable synchronized scrolling for Markdown Abilita scorrimento sincronizzato per Markdown Editor Editor Highlight current line Evidenzia riga corrente Show line numbers Visualizza numeri di riga Line numbers are relative to current line I numeri di riga sono relativi alla riga corrente Tab key inserts spaces Il tasto Tab inserisce spazi Tabulation width Larghezza di tabulazione Draw vertical line at column Traccia riga verticale alla colonna Enable soft wrap Abilita ritorno a capo automatico Show document stats Visualizza statistiche documento Interface Interfaccia Hide toolbar Nascondi barra degli strumenti Icon theme name Nome tema icone Stylesheet file File foglio di stile Hide tabs bar when there is only one tab Nascondi barra delle schede quando c'è solo una scheda Show full path in window title Visualizza percorso completo nella barra del titolo Help Aiuto Live preview Anteprima in tempo reale Normal preview Anteprima normale Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (nessuno) FileSelectButton Select file to open Seleziona il file da aprire InsertTableDialog Insert table Inserisci tabella Number of rows Numero di righe Number of columns Numero di colonne LocaleDialog Enter locale name (example: en_US) Inserisci localizzazione (esempio: en_US) Set as default Imposta come predefinito Proxy No write since last change (add ! to override) Nessuna scrittura dall'ultima modifica (aggiungi ! per salvare comunque) Information Informazione ReTextEdit Add to dictionary Aggiungi al dizionario Save image Salva immagine Images (*.png *.jpg) Immagini (*.png *.jpg) ReTextTab New document Nuovo documento Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Impossibile interpretare i contenuti del file, controlla che il <a href="%s">modulo richiesto</a> sia installato! Create missing file? Creare il file mancante? The file '%s' does not exist. Do you want to create it? Il file '%s' non esiste. Crearlo? File could not be created Impossibile creare il file Could not create file '%s': %s Impossibile creare il file '%s': %s ReTextWindow File toolbar Barra degli strumenti File Edit toolbar Barra degli strumenti Modifica Search toolbar Barra degli strumenti Ricerca New Nuovo Open Apri Set encoding Imposta codifica Reload Ricarica Save Salva Save as Salva con nome Next tab Scheda successiva Previous tab Scheda precedente Close tab Chiudi scheda Print Stampa Print preview Anteprima di stampa View HTML code Visualizza codice HTML Change editor font Modifica carattere editor Change preview font Modifica carattere anteprima Find text Trova testo Go to line Vai alla riga Preview Anteprima Live preview Anteprima in tempo reale Insert table Inserisci tabella Table editing mode Modalità modifica tabella FakeVim mode Modalità di inserimento Vim Fullscreen mode Schermo intero Preferences Preferenze Quit Esci Undo Annulla Redo Ripristina Copy Copia Cut Taglia Paste Incolla Paste image Incolla immagine Move line up Sposta riga in su Move line down Sposta riga in giù Enable Attiva Set locale Imposta localizzazione Use WebKit renderer Usa il motore WebKit Use WebEngine (Chromium) renderer Utilizza renderer WebEngine (Chromium) Show directory Mostra cartella Next Avanti Previous Indietro Replace Sostituisci Replace all Sostituisci tutto Close Chiudi Get help online Ottieni aiuto online About ReText Informazioni su ReText About Qt Informazioni su Qt Bold Grassetto Italic Corsivo Underline Sottolineato Formatting Formattazione Symbols Simboli &File &File &Edit &Modifica &Help &Aiuto Open recent Apri recente Export Esporta Spell check Correttore ortografico Default markup Linguaggio a marcatori predefinito Search Cerca Replace with Sostituisci con Case sensitively Distingui maiuscole/minuscole New document Nuovo documento Type the line number Digitare il numero di riga Please, save the file somewhere. Per favore, salva il file da qualche parte. Select one or several files to open Seleziona uno o più file da aprire Supported files File supportati All files (*) Tutti i file (*) Select file encoding from the list: Seleziona la codifica del file dall'elenco: Plain text (*.txt) Testo semplice (*.txt) %s files Example of final string: Markdown files File %s Save file Salva file Cannot save to file which is open in another tab! Impossibile salvare in un file aperto in un'altra scheda! Cannot save to file because it is read-only! Impossibile salvare il file perché è in sola lettura! Export document to ODT Esporta documento nel formato ODT OpenDocument text files (*.odt) File di testo OpenDocument (*.odt) HTML files (*.html *.htm) File HTML (*.html *.htm) Unrecognized paperSize setting "%s". Impostazione paperSize "%s" non riconosciuta. Export document to PDF Esporta documento nel formato PDF PDF files (*.pdf) File PDF (*.pdf) Print document Stampa documento Export document Esporta documento Failed to execute the command: Impossibile eseguire il comando: Alt text Testo alternativo URL URL Link text Testo collegamento This file has been deleted by other application. Please make sure you save the file before exit. Questo file è stato eliminato da un'altra applicazione. Assicurati di salvare il file prima di uscire. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? Questo documento è stato modificato da un'altra applicazione. Vuoi ricaricare il file (ciò comporterà la perdita di tutti i cambiamenti)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Se scegli di non ricaricare il file, la modalità salvataggio automatico sarà disabilitata per questa sessione per prevenire perdite di dati. The document has been modified. Do you want to save your changes? Il documento è stato modificato. Vuoi salvare le modifiche? HTML code Codice HTML ReText %s (using PyMarkups %s) ReText %s (utilizza PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText Un editor semplice ma potente per Markdown e reStructuredText Author: Dmitry Shachnev, 2011 Autore: Dmitry Shachnev, 2011 Markdown syntax Sintassi Markdown reStructuredText syntax Sintassi reStructuredText Insert images by file path Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters %d p | %d a | %d c main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_ja.qm0000644000175000017500000003012700000000000016127 0ustar00dmitrydmitryMb!dyYc'gt\ =zrDVgml)D! by%Fvqћr #S4J&kmr5t R!p jFr)*W9 w'0B7M+DeG _-d 0 E#:u.k 5%ϗP"°ϡ  #T)++Ih9">#~;' 7'k  g @ h> j3 la v!A W $  +/*a3$4EzkeXI UGKx*.ˏ!*)  O%. i+(g_0k0D0f0D0_ef0wRfB0kR0g0O,Automatically open last documents on startup ConfigDialogef0RO[X0Y0Automatically save documents ConfigDialogRO\-[Behavior ConfigDialog000000n000000nraKDefault preview state ConfigDialogc[0W0_R0k~&}0hy:0Y0Draw vertical line at column ConfigDialog 00000Editor ConfigDialogRe9L0g R0k0Y0Enable soft wrap ConfigDialog.Markdown 0nT g000000g R0k0Y0*Enable synchronized scrolling for Markdown ConfigDialog000Help ConfigDialog 000LN0d0n0h0M0o000000Y(Hide tabs bar when there is only one tab ConfigDialog0000000Y Hide toolbar ConfigDialog0000L000000Ȉhy:0Y0Highlight current line ConfigDialog0000000T Icon theme name ConfigDialogY Interface ConfigDialog$sW(0nL0wp0k0W0fLujS0hy:0Y0)Line numbers are relative to current line ConfigDialog00000000 Live preview ConfigDialog.Markdown l0nb_5 (000S:R0),Markdown syntax extensions (comma-separated) ConfigDialog^80n00000Normal preview ConfigDialoggOu(0W0_00000nhy:epNumber of recent documents ConfigDialog.Y0000 ReText 00000Q0g0O$Open external links in ReText window ConfigDialog000000nhy:OMn0a0Y0Restore window geometry ConfigDialogef0n}q0hy:0Y0Show document stats ConfigDialog 0000000k00000hy:0Y0Show full path in window title ConfigDialogLujS0hy:0Y0Show line numbers ConfigDialog00000000000Stylesheet file ConfigDialog$00e[W0nN000k00000QeR0Y0Tab key inserts spaces ConfigDialog 000nhAepTabulation width ConfigDialogOu(N-0n-[00000nX4b@:Using configuration file at: ConfigDialog(0j0W)(none)FileDialogButton000000OSelect file to openFileSelectButtonh0c?Qe Insert tableInsertTableDialogRepNumber of columnsInsertTableDialogLepNumber of rowsInsertTableDialog20000T 0QeR0W0f0O0`0U0D (O: ja_JP)"Enter locale name (example: en_US) LocaleDialog000000k0Y0Set as default LocaleDialog`X1 InformationProxy4g_0nY f0LO[X0U00f0D0~0[0 (! 0gY f0x4h).No write since last change (add ! to override)Proxy f0kRAdd to dictionary ReTextEdit u;P (*.png *.jpg)Images (*.png *.jpg) ReTextEdit u;P0O[X Save image ReTextEdit('%s' 0O\b0g0M0~0[00g0W0_: %sCould not create file '%s': %s ReTextTab00000nQ[0g0g0M0~0[00g0W0_0<a href="%s">_ʼn0j00000</a>0L0000000U00f0D00Kx0W0f0O0`0U0D0aCould not parse file contents, check if you have the necessary module installed! ReTextTab$0d0K00j0D00000O\b0W0~0Y0KCreate missing file? ReTextTab00000O\b0g0M0~0[00g0W0_File could not be created ReTextTabeef New document ReTextTab,'%s' 0o[XW(0W0~0[00 O\b0W0~0Y0K8The file '%s' does not exist. Do you want to create it? ReTextTab%s 0000%s files ReTextWindow }(&E)&Edit ReTextWindow0000(&F)&File ReTextWindow000(&H)&Help ReTextWindowQt 0k0d0D0fAbout Qt ReTextWindowReText 0k0d0D0f About ReText ReTextWindow0Y0y0f0n0000 (*) All files (*) ReTextWindowAlt \^`'0ne[WRAlt text ReTextWindow2O\: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindowY*[WBold ReTextWindow*0S0\u(00000n0_0O[X0g0M0~0[00,Cannot save to file because it is read-only! ReTextWindow0N0n000g0D0f0D000000k0oO[X0g0M0~0[001Cannot save to file which is open in another tab! ReTextWindowY'e[W0h\e[W0S:R%Case sensitively ReTextWindow000000n00000Y fChange editor font ReTextWindow000000n00000Y fChange preview font ReTextWindow0X0Close ReTextWindow 0000X0 Close tab ReTextWindow000Copy ReTextWindowR0S0Cut ReTextWindow000000n000000Default markup ReTextWindow}00000 Edit toolbar ReTextWindowg REnable ReTextWindow 000000Export ReTextWindowef0000000Export document ReTextWindowef0 ODT 0k000000Export document to ODT ReTextWindowef0 PDF 0k000000Export document to PDF ReTextWindow00000n[L0kY1eW0W0~0W0_:Failed to execute the command: ReTextWindowdO< Vim 000 FakeVim mode ReTextWindow000000000 File toolbar ReTextWindow00000i}" Find text ReTextWindowf_ Formatting ReTextWindow0000000000Fullscreen mode ReTextWindow000000g00000Get help online ReTextWindow c[L0xyR Go to line ReTextWindowHTML 000 HTML code ReTextWindow0HTML 0000 (*.html *.htm)HTML files (*.html *.htm) ReTextWindowbQ000W0j0DX4T00000nmY100Q00_00k00S0n000000g0nRO[Xj_0oq!R0k0j00~0Y0lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindowu;P (000000) 0c?QeInsert images by file path ReTextWindowh0c?Qe Insert table ReTextWindoweOSItalic ReTextWindow0000ne[WR Link text ReTextWindow00000000 Live preview ReTextWindowMarkdown lMarkdown syntax ReTextWindow L0N 0kyRMove line down ReTextWindow L0N 0kyR Move line up ReTextWindoweNew ReTextWindoweef New document ReTextWindowk!0xNext ReTextWindow k!0n000xNext tab ReTextWindow0OOpen ReTextWindowgOu(0W0_0000 Open recent ReTextWindow:OpenDocument 00000000 (*.odt)OpenDocument text files (*.odt) ReTextWindow PDF 0000 (*.pdf)PDF files (*.pdf) ReTextWindow0N0QPaste ReTextWindowu;P000d0Q Paste image ReTextWindow 00000000 (*.txt)Plain text (*.txt) ReTextWindow$0i0S0K0k00000O[X0W0f0O0`0U0D0 Please, save the file somewhere. ReTextWindow-[ Preferences ReTextWindow 00000Preview ReTextWindowRM0xPrevious ReTextWindow RM0n000x Previous tab ReTextWindowSpR7Print ReTextWindow ef0SpR7Print document ReTextWindowSpR700000 Print preview ReTextWindow}BNQuit ReTextWindow8ReText %s (PyMarkups %s 0Ou()ReText %s (using PyMarkups %s) ReTextWindow00v0YRedo ReTextWindow Q00Reload ReTextWindowncReplace ReTextWindow 0Y0y0fnc Replace all ReTextWindowncQH Replace with ReTextWindowO[XSave ReTextWindowT RM0N0Q0fO[XSave as ReTextWindow00000O[X Save file ReTextWindowi}"Search ReTextWindowi}"00000Search toolbar ReTextWindow200000ne[W000000000xb0W0f0O0`0U0D:#Select file encoding from the list: ReTextWindow.0M0_0D00000xb0W0f0O0`0U0D (epS)#Select one or several files to open ReTextWindow*0M0_0Du;P0xb0W0f0O0`0U0D (epS)$Select one or several images to open ReTextWindowe[W00000000 Set encoding ReTextWindow00000n-[ Set locale ReTextWindow0000000hy:Show directory ReTextWindow^Markdown 0h reStructuredText 0n0_00n00000g00000j00000 ConfigDialog Using configuration file at: 使用中の設定ファイルの場所: Behavior 動作設定 Automatically save documents 文書を自動保存する Automatically open last documents on startup 最後に開いていた文書を起動時に自動で開く Number of recent documents 最近使用したファイルの表示数 Restore window geometry ウィンドウの表示位置を記憶する Default preview state デフォルトのプレビューの状態 Open external links in ReText window 外部リンクを ReText ウィンドウ内で開く Markdown syntax extensions (comma-separated) Markdown 記法の拡張 (カンマ区切り) Enable synchronized scrolling for Markdown Markdown の同期スクロールを有効にする Editor エディター Highlight current line カーソル行をハイライト表示する Show line numbers 行番号を表示する Line numbers are relative to current line 現在の行を起点にして行番号を表示する Tab key inserts spaces タブ文字の代わりにスペースを入力する Tabulation width タブの桁数 Draw vertical line at column 指定した列に縦線を表示する Enable soft wrap 自動改行を有効にする Show document stats 文書の統計を表示する Interface 外観 Hide toolbar ツールバーを隠す Icon theme name アイコンテーマ名 Stylesheet file スタイルシートファイル Hide tabs bar when there is only one tab タブが一つのときはタブバーを隠す Show full path in window title タイトルバーにフルパスを表示する Help ヘルプ Live preview ライブプレビュー Normal preview 通常のプレビュー Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (なし) FileSelectButton Select file to open ファイルを開く InsertTableDialog Insert table 表を挿入 Number of rows 行数 Number of columns 列数 LocaleDialog Enter locale name (example: en_US) ロケール名を入力してください (例: ja_JP) Set as default デフォルトにする Proxy No write since last change (add ! to override) 最後の変更が保存されていません (! で変更を破棄) Information 情報 ReTextEdit Add to dictionary 辞書に追加 Save image 画像を保存 Images (*.png *.jpg) 画像 (*.png *.jpg) ReTextTab New document 新規文書 Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! ファイルの内容を解析できませんでした。<a href="%s">必要なモジュール</a>がインストールされているか確認してください。 Create missing file? 見つからないファイルを作成しますか? The file '%s' does not exist. Do you want to create it? '%s' は存在しません。 作成しますか? File could not be created ファイルを作成できませんでした Could not create file '%s': %s '%s' を作成できませんでした: %s ReTextWindow File toolbar ファイルツールバー Edit toolbar 編集ツールバー Search toolbar 検索ツールバー New 新規 Open 開く Set encoding 文字エンコーディング Reload 再読み込み Save 保存 Save as 名前を付けて保存 Next tab 次のタブへ Previous tab 前のタブへ Close tab タブを閉じる Print 印刷 Print preview 印刷プレビュー View HTML code HTML コードを表示 Change editor font エディターのフォントを変更 Change preview font プレビューのフォントを変更 Find text テキストを検索 Go to line 指定行へ移動 Preview プレビュー Live preview ライブプレビュー Insert table 表を挿入 Table editing mode 表編集モード Insert images by file path 画像 (ファイルパス) を挿入 FakeVim mode 擬似 Vim モード Fullscreen mode フルスクリーンモード Preferences 設定 Quit 終了 Undo 元に戻す Redo やり直す Copy コピー Cut 切り取り Paste 貼り付け Paste image 画像を貼りつけ Move line up 行を上に移動 Move line down 行を下に移動 Enable 有効 Set locale ロケールの設定 Use WebKit renderer WebKit レンダラーを使用 Use WebEngine (Chromium) renderer WebEngine (Chromium) レンダラーを使用 Show directory ディレクトリを表示 Next 次へ Previous 前へ Replace 置換 Replace all すべて置換 Close 閉じる Get help online オンラインでヘルプを読む About ReText ReText について About Qt Qt について Bold 太字 Italic 斜体 Underline 下線 Formatting 書式 Symbols シンボル Open recent 最近使用したファイル Export エクスポート Spell check スペルチェック Default markup デフォルトのマークアップ Search 検索 Replace with 置換先 Case sensitively 大文字と小文字を区別 New document 新規文書 Type the line number 行番号を入力してください Please, save the file somewhere. どこかにファイルを保存してください。 Select one or several files to open 開きたいファイルを選択してください (複数可) Supported files サポートしているファイル All files (*) すべてのファイル (*) Select file encoding from the list: ファイルの文字エンコーディングを選択してください: Plain text (*.txt) プレーンテキスト (*.txt) %s files Example of final string: Markdown files %s ファイル Save file ファイルを保存 Cannot save to file which is open in another tab! 他のタブで開いているファイルには保存できません。 Cannot save to file because it is read-only! 読み取り専用ファイルのため保存できません。 Export document to ODT 文書を ODT にエクスポート OpenDocument text files (*.odt) OpenDocument テキストファイル (*.odt) HTML files (*.html *.htm) HTML ファイル (*.html *.htm) Unrecognized paperSize setting "%s". "%s" は認識されない用紙サイズ設定です。 Export document to PDF 文書を PDF にエクスポート PDF files (*.pdf) PDF ファイル (*.pdf) Print document 文書を印刷 Export document 文書をエクスポート Failed to execute the command: コマンドの実行に失敗しました: Alt text Alt 属性の文字列 URL URL Link text リンクの文字列 This file has been deleted by other application. Please make sure you save the file before exit. このファイルは他のアプリケーションによって削除されました。 終了する前にファイルを保存してください。 This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? この文書は他のアプリケーションによって変更されました。 すべての変更を破棄して再読み込みしますか? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. 再読み込みしない場合、データの消失を避けるために、このセッションでの自動保存機能は無効になります。 The document has been modified. Do you want to save your changes? 文書は変更されています。 変更内容を保存しますか? HTML code HTML コード Select one or several images to open 開きたい画像を選択してください (複数可) ReText %s (using PyMarkups %s) ReText %s (PyMarkups %s を使用) Simple but powerful editor for Markdown and reStructuredText Markdown と reStructuredText のためのシンプルでパワフルなエディター Author: Dmitry Shachnev, 2011 作者: Dmitry Shachnev, 2011 Markdown syntax Markdown 記法 reStructuredText syntax reStructuredText 記法 &File ファイル(&F) &Edit 編集(&E) &Help ヘルプ(&H) TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters main Open the files in preview mode ファイルをプレビューモードで開く Create a new window even if there is an existing one List of files to open 開くファイルの一覧 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_ko.qm0000644000175000017500000002204000000000000016141 0ustar00dmitrydmitrybdyYc'Fgt zvrgBl)D!  b&y% Uv  #S_4Jmjr$5th Fr$ $' 0 E:k5ϗj3ϡ  oT~) +I9~'7 G @ h> la  va S/3IeVI5U  *)f O(. i WՉ 8 ǐ0,Automatically open last documents on startup ConfigDialogǐǥAutomatically save documents ConfigDialogՉBehavior ConfigDialog 8\ 0Draw vertical line at column ConfigDialogе0Editor ConfigDialog ¤ld \1T*Enable synchronized scrolling for Markdown ConfigDialogHelp ConfigDialogǬ  pX0Highlight current line ConfigDialogDtX L tIcon theme name ConfigDialog x0Әt¤ Interface ConfigDialogܬ 0 Live preview ConfigDialog"lƴ l8 Uǥ (Ƚ),Markdown syntax extensions (comma-separated) ConfigDialogx l\ 0$Open external links in ReText window ConfigDialog= Restore window geometry ConfigDialog 8 t0Show line numbers ConfigDialog¤|Ҹ |Stylesheet file ConfigDialogФ\ ¤Әt¤ #0Tab key inserts spaces ConfigDialog \ Ǒ1 Tabulation width ConfigDialog( mL)(none)FileDialogButton | Select file to openFileSelectButton$t Dž% (: en_US)"Enter locale name (example: en_US) LocaleDialog0<\ $Set as default LocaleDialog InformationProxy@  m L(nŴ$t !D ͔X8Ɣ).No write since last change (add ! to override)Proxy"t (*.png *.jpg)Images (*.png *.jpg) ReTextEdit t ǥ Save image ReTextEditr | ƩD `  µȲ. <a href="%s">D </a> Lj $XX8Ɣ!aCould not parse file contents, check if you have the necessary module installed! ReTextTab 8 New document ReTextTab %s |%s files ReTextWindowеҸ&Edit ReTextWindow |&File ReTextWindow&Help ReTextWindowQt?About Qt ReTextWindowReText? About ReText ReTextWindow | (*) All files (*) ReTextWindowAlt1 M¤ҸAlt text ReTextWindow6Ǒǐ : Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindow u@ 4Bold ReTextWindowǥ [}0 Ʃ],Cannot save to file because it is read-only! ReTextWindow2x $Lj |@ ǥX iȲ.1Cannot save to file which is open in another tab! ReTextWindow8ǐ lCase sensitively ReTextWindowе0 4 Change editor font ReTextWindow0 4 0Change preview font ReTextWindow0Close ReTextWindowCopy ReTextWindowǘ|0Cut ReTextWindow 0t lDefault markup ReTextWindow 4 еҸ Edit toolbar ReTextWindow\1TEnable ReTextWindow0Export ReTextWindow8 0Export document ReTextWindowODT\ 0Export document to ODT ReTextWindowPDF\ 0Export document to PDF ReTextWindow9Չ (Failed to execute the command: ReTextWindowӘtlT  FakeVim mode ReTextWindow | 4 File toolbar ReTextWindow 8ǐ >0 Find text ReTextWindow   Formatting ReTextWindow̴TtFullscreen mode ReTextWindow (|x Get help online ReTextWindowHTML T HTML code ReTextWindow.HTML | (*.html *.htm)HTML files (*.html *.htm) ReTextWindowh |D \ X Jt, pt0 )| t 8X ǐǥܬ D\1T)Ȳ.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindowt乭̴Italic ReTextWindow l M¤Ҹ Link text ReTextWindowܬ 0 Live preview ReTextWindowlƴ l8Markdown syntax ReTextWindow ȸ\ 0New ReTextWindow ȸ\ƴ 8 New document ReTextWindowLNext ReTextWindowL Next tab ReTextWindow0Open ReTextWindow\8 0 Open recent ReTextWindow"M¤Ҹ |\ 0 (*.odt)OpenDocument text files (*.odt) ReTextWindowPDF | (*.pdf)PDF files (*.pdf) ReTextWindow#0Paste ReTextWindow| M¤Ҹ (*.txt)Plain text (*.txt) ReTextWindow |D ǥt$ Please, save the file somewhere. ReTextWindow  Preferences ReTextWindow0Preview ReTextWindowtPrevious ReTextWindowt  Previous tab ReTextWindow͜%Print ReTextWindow 8 ͜%Print document ReTextWindow0 ͜% Print preview ReTextWindow0Quit ReTextWindow6ReText %s (PyMarkups %s Ʃ)ReText %s (using PyMarkups %s) ReTextWindowX0Redo ReTextWindow\Reload ReTextWindow0Replace ReTextWindow P0 Replace all ReTextWindow~<\ 0 Replace with ReTextWindowǥX0Save ReTextWindowxt<\ ǥSave as ReTextWindow | ǥ Save file ReTextWindow>0Search ReTextWindow 4 >0Search toolbar ReTextWindow] | xT) #Select file encoding from the list: ReTextWindow*0| ` |, |D X$#Select one or several files to open ReTextWindow xT) $ Set encoding ReTextWindow ŸŴ $ Set locale ReTextWindow Ѡ 0Show directory ReTextWindow@lƴ ¤ҸҸM¤Ҹ| \ X %\ е0 ConfigDialog Behavior 행동 Automatically save documents 자동저장 Restore window geometry 창 복원 Open external links in ReText window 외부 링크로 열기 Editor 에디터 Highlight current line 현재 줄 강조하기 Show line numbers 줄 번호 보이기 Tab key inserts spaces 탭키로 스페이스 넣기 Tabulation width 표 작성 폭 Interface 인터페이스 Icon theme name 아이콘 테마 이름 Stylesheet file 스타일시트 파일 Markdown syntax extensions (comma-separated) 마크다운 구문 확장 (컴마분리) Help 도움 Enable synchronized scrolling for Markdown 동시 스크롤 활성화 Draw vertical line at column 세로줄 긋기 Automatically open last documents on startup 실행시 마지막 문서 자동열기 Using configuration file at: Number of recent documents Default preview state Line numbers are relative to current line Enable soft wrap Show document stats Hide toolbar Hide tabs bar when there is only one tab Show full path in window title Live preview 실시간 미리보기 Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (선택사항없음) FileSelectButton Select file to open 파일 선택 InsertTableDialog Insert table Number of rows Number of columns LocaleDialog Enter locale name (example: en_US) 지역이름 입력 (예: en_US) Set as default 기본값으로 설정 Proxy No write since last change (add ! to override) 마지막 수정 후 변경사항 없음(덮어쓰려면 !을 추가하세요) Information 정보 ReTextEdit Save image 이미지 저장 Images (*.png *.jpg) 이미지 (*.png *.jpg) Add to dictionary ReTextTab New document 새 문서 Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! 파일 내용을 파싱할 수 업습니다. <a href="%s">필수 모듈</a> 가 있는지 보고 설치하세요! Create missing file? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow New document 새로운 문서 File toolbar 파일 툴바 Edit toolbar 툴바 에디트 Search toolbar 툴바 찾기 New 새로 열기 Open 열기 Save 저장하기 Save as 다른이름으로 저장 Print 출력 Print preview 미리보기 출력 View HTML code HTML 코드 보기 Find text 문자 찾기 Preview 미리보기 Live preview 실시간 미리보기 Fullscreen mode 전체화면 Quit 나가기 Undo 되돌리기 Redo 다시하기 Copy 복사 Cut 잘라내기 Paste 붙여넣기 Enable 활성화 Set locale 언어 설정 Open recent 최근문서 열기 Next 다음 Previous 이전 Get help online 온라인 도움 About Qt Qt란? Symbols 심볼 &File 파일 &Edit 에디트 &Help 도움 Export 내보내기 Spell check 스펠링 체크 Search 찾기 Case sensitively 대소문자 구분 Please, save the file somewhere. 파일을 저장해주십시오 Select one or several files to open 열기를 할 파일, 파일들을 선택하십시오 Supported files 파일 서포팅 All files (*) 모든 파일들 (*) Plain text (*.txt) 일반 텍스트 (*.txt) Save file 파일 저장 Export document to ODT ODT로 내보내기 OpenDocument text files (*.odt) 텍스트파일로 열기 (*.odt) HTML files (*.html *.htm) HTML 파일들 (*.html *.htm) Export document to PDF PDF로 내보내기 PDF files (*.pdf) PDF파일 (*.pdf) Print document 문서 출력 Export document 문서 내보내기 The document has been modified. Do you want to save your changes? 문서가 변경되었습니다. 저장하시겠습니까? HTML code HTML 코드 Simple but powerful editor for Markdown and reStructuredText 마크다운과 리스트럭트텍스트를 위한 심플하지만 강력한 에디터 Author: Dmitry Shachnev, 2011 원작자 : Dmitry Shachnev, 2011 Markdown syntax 마크다운 구문 reStructuredText syntax 리스트럭트텍스트 구문 Show directory 디렉토리 보기 Cannot save to file because it is read-only! 저장 불가[읽기 전용] Bold 굵은 글꼴 Italic 이탤릭체 Underline 밑줄 Formatting 서식 지정 About ReText ReText란? Use WebKit renderer 웹킷 렌더러 사용 Failed to execute the command: 명령수행에 실패 %s files Example of final string: Markdown files %s 파일 Default markup 기존 마크업 Preferences 선택 Set encoding 인코딩 설정 Select file encoding from the list: 목록에서 파일 인코딩 선택 Reload 리로드 Next tab 다음 탭 Previous tab 이전 탭 Table editing mode 표에디트모드 FakeVim mode 페이크빔 모드 This file has been deleted by other application. Please make sure you save the file before exit. 이 파일은 다른 앱에 의해 삭제되었습니다. 종료 전에 저장을 꼭 해주십시오. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? 이 파일은 다른 앱에 의해 삭제되었습니다. 이 파일을 리로드 하길 원합니까(이것은 당신의 변경사항을 버릴겁니다)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. 파일을 리로드 하지 않는다면, 데이터 손실 방지를 위해 세션에서 자동저장모드가 비활성화됩니다. Change editor font 에디터 글꼴 변경 Change preview font 미리보기 글꼴 바꾸기 ReText %s (using PyMarkups %s) ReText %s (PyMarkups %s 사용) Close 닫기 Alt text Alt속성 텍스트 URL Link text 링크 텍스트 Replace 바꾸기 Replace all 모두바꾸기 Replace with ~으로 바꾸기 Cannot save to file which is open in another tab! 다른 탭에 열려있는 파일은 저장하지 못합니다. Use WebEngine (Chromium) renderer 웹 엔진(크로뮴) 렌더러 Close tab Go to line Insert table Insert images by file path Paste image Move line up Move line down Type the line number Unrecognized paperSize setting "%s". Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_nl.qm0000644000175000017500000004127600000000000016155 0ustar00dmitrydmitry'Wʇ1B3:s9gL"!nun*fAIJ:~5"4XU F)"pO8Wze sΩ{&m*%4> b/dyYc'gtN%z!r+DVg x?l),D!z by% vJћrG% %]#S S4J5mBr5t-k /jQFr9;7_W9')+0BM=!e -d0 E2 :u)k54mϗ+/°&ϡ . 2eT(O)>+I* 90v>1 ~"'-+]77  @!S h>- j3u la! v. W $ w </:334E 4% z e&IfUmGKx$ ˏ*)= O4.i=dRecentste document automatisch openen na opstarten,Automatically open last documents on startup ConfigDialog<Documenten automatisch opslaanAutomatically save documents ConfigDialog GedragBehavior ConfigDialogCursorregel Cursor Line ConfigDialog:Standaard voorvertoningsmodusDefault preview state ConfigDialogUitgeschakeldDisabled ConfigDialog<Verticale lijn maken bij kolomDraw vertical line at column ConfigDialogBewerkerEditor ConfigDialogBLichte regelafbreking inschakelenEnable soft wrap ConfigDialogXSynchroon scrollen inschakelen voor Markdown*Enable synchronized scrolling for Markdown ConfigDialogHulpHelp ConfigDialogfTabbladbalk verbergen als er slechts n tabblad is(Hide tabs bar when there is only one tab ConfigDialog$Werkbalk verbergen Hide toolbar ConfigDialog,Huidige regel markerenHighlight current line ConfigDialog.Naam van pictogramthemaIcon theme name ConfigDialogVerhogen Increment ConfigDialogVormgeving Interface ConfigDialog`Regelnummers zijn gekoppeld aan de huidige regel)Line numbers are relative to current line ConfigDialog$Live-voorvertoning Live preview ConfigDialogTMarkdown-syntaxextensies (kommagescheiden),Markdown syntax extensions (comma-separated) ConfigDialog*Normale voorvertoningNormal preview ConfigDialog2Aantal recente documentenNumber of recent documents ConfigDialogLExterne links openen in ReText-venster$Open external links in ReText window ConfigDialog(Geordende lijstmodusOrdered list mode ConfigDialogHerhalenRepeat ConfigDialog8Vensterafmetingen herstellenRestore window geometry ConfigDialog$Mapstructuur tonenShow directory tree ConfigDialog4Documentstatistieken tonenShow document stats ConfigDialogHVolledige pad tonen in venstertitielShow full path in window title ConfigDialog$Regelnummers tonenShow line numbers ConfigDialogStijlbladStylesheet file ConfigDialog4Tab-toets voegt spaties inTab key inserts spaces ConfigDialog TabulatiebreedteTabulation width ConfigDialogfGebruikmakend van het volgende configuratiebestand:Using configuration file at: ConfigDialogWerkmapWorking directory ConfigDialog Afgebroken regel Wrapped Line ConfigDialog*Kies de te openen mapSelect directory to openDirectorySelectButton (geen)(none)FileDialogButton4Kies het te openen bestandSelect file to openFileSelectButtonTabel invoegen Insert tableInsertTableDialogAantal kolommenNumber of columnsInsertTableDialogAantal rijenNumber of rowsInsertTableDialogPVoer de landinstelling in (bijv.: en_US)"Enter locale name (example: en_US) LocaleDialog.Instellen als standaardSet as default LocaleDialogInformatie InformationProxyNiet weggeschreven sinds recentste aanpassing (voeg ! toe om te overschrijven).No write since last change (add ! to override)Proxy2Toevoegen aan woordenboekAdd to dictionary ReTextEdit4Afbeeldingen (*.png *.jpg)Images (*.png *.jpg) ReTextEdit$Afbeelding opslaan Save image ReTextEdit^Het bestand '%s' kan niet worden aangemaakt: %sCould not create file '%s': %s ReTextTabDe bestandsinhoud kan niet worden verwerkt. Controleer de <a href="%s">vereiste module</a> genstalleerd is!aCould not parse file contents, check if you have the necessary module installed! ReTextTab8Ontbrekend bestand aanmaken?Create missing file? ReTextTabLHet bestand kan niet worden aangemaaktFile could not be created ReTextTabNieuw document New document ReTextTabhHet bestand '%s' bestaat niet. Wil je het aanmaken?8The file '%s' does not exist. Do you want to create it? ReTextTab%s bestanden%s files ReTextWindowB&ewerken&Edit ReTextWindow&Bestand&File ReTextWindow &Hulp&Help ReTextWindowOver QtAbout Qt ReTextWindowOver ReText About ReText ReTextWindow$Alle bestanden (*) All files (*) ReTextWindowAlt-tekstAlt text ReTextWindow8Maker: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindowVetgedruktBold ReTextWindowVKan niet opslaan omdat het alleen-lezen is!,Cannot save to file because it is read-only! ReTextWindowrKan niet opslaan als het geopend is op een ander tabblad!1Cannot save to file which is open in another tab! ReTextWindow&HoofdlettergevoeligCase sensitively ReTextWindowBLettertype van bewerker aanpassenChange editor font ReTextWindowLLettertype van voorvertoning aanpassenChange preview font ReTextWindowSluitenClose ReTextWindowTabblad sluiten Close tab ReTextWindowKopirenCopy ReTextWindowKnippenCut ReTextWindowStandaardopmaakDefault markup ReTextWindow&Aanpassingswerkbalk Edit toolbar ReTextWindowInschakelenEnable ReTextWindowExporterenExport ReTextWindow&Document exporterenExport document ReTextWindow8Document exporteren naar odtExport document to ODT ReTextWindow8Document exporteren naar pdfExport document to PDF ReTextWindowNDe opdracht kan niet worden uitgevoerd:Failed to execute the command: ReTextWindowFakeVim-modus FakeVim mode ReTextWindow Bestandswerkbalk File toolbar ReTextWindowTekst zoeken Find text ReTextWindow Opmaak Formatting ReTextWindowBeeldvullendFullscreen mode ReTextWindow$Online-hulp openenGet help online ReTextWindowGa naar regel Go to line ReTextWindowHTML-code HTML code ReTextWindow:HTML-bestanden (*.html *.htm)HTML files (*.html *.htm) ReTextWindowAls je er voor kiest het bestand niet te herladen, dan wordt automatisch opslaan in deze sessie uitgeschakeld om gegevensverlies te voorkomen. lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindowJAfbeeldingen invoegen via bestandspadInsert images by file path ReTextWindowTabel invoegen Insert table ReTextWindowCursiefItalic ReTextWindowLinktekst Link text ReTextWindow$Live-voorvertoning Live preview ReTextWindowMarkdown-syntaxMarkdown syntax ReTextWindow0Regel omlaag verplaatsenMove line down ReTextWindow0Regel omhoog verplaatsen Move line up ReTextWindow NieuwNew ReTextWindowNieuw document New document ReTextWindowVolgende Next ReTextWindowVolgend tabbladNext tab ReTextWindow OpenenOpen ReTextWindow*Recent bestand openen Open recent ReTextWindowFOpenDocument-tekstbestanden (*.odt)OpenDocument text files (*.odt) ReTextWindow*PDF-bestanden (*.pdf)PDF files (*.pdf) ReTextWindowPlakkenPaste ReTextWindow$Afbeelding plakken Paste image ReTextWindow(Platte tekst (*.txt)Plain text (*.txt) ReTextWindow4Sla het bestand ergens op. Please, save the file somewhere. ReTextWindowVoorkeuren Preferences ReTextWindowVoorvertoningPreview ReTextWindow VorigePrevious ReTextWindowVorig tabblad Previous tab ReTextWindowAfdrukkenPrint ReTextWindow$Document afdrukkenPrint document ReTextWindowAfdrukvoorbeeld Print preview ReTextWindowAfsluitenQuit ReTextWindowTReText %s (gebruikmakend van PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindowOpnieuwRedo ReTextWindowHerladenReload ReTextWindowVervangenReplace ReTextWindowAlles vervangen Replace all ReTextWindowVervangen door Replace with ReTextWindowOpslaanSave ReTextWindowOpslaan alsSave as ReTextWindowBestand opslaan Save file ReTextWindow ZoekenSearch ReTextWindowZoekwerkbalkSearch toolbar ReTextWindowNKies een bestandscodering uit de lijst:#Select file encoding from the list: ReTextWindowZSelecteer n of meerdere te openen bestanden#Select one or several files to open ReTextWindow`Selecteer n of meerdere te openen afbeeldingen$Select one or several images to open ReTextWindow$Codering instellen Set encoding ReTextWindow0Landinstelling instellen Set locale ReTextWindowMap tonenShow directory ReTextWindowEenvoudige, maar krachtige bewerker voor Markdown en reStructuredText ConfigDialog Using configuration file at: Gebruikmakend van het volgende configuratiebestand: Behavior Gedrag Automatically save documents Documenten automatisch opslaan Automatically open last documents on startup Recentste document automatisch openen na opstarten Number of recent documents Aantal recente documenten Restore window geometry Vensterafmetingen herstellen Default preview state Standaard voorvertoningsmodus Open external links in ReText window Externe links openen in ReText-venster Markdown syntax extensions (comma-separated) Markdown-syntaxextensies (kommagescheiden) Enable synchronized scrolling for Markdown Synchroon scrollen inschakelen voor Markdown Editor Bewerker Highlight current line Huidige regel markeren Show line numbers Regelnummers tonen Line numbers are relative to current line Regelnummers zijn gekoppeld aan de huidige regel Tab key inserts spaces Tab-toets voegt spaties in Tabulation width Tabulatiebreedte Draw vertical line at column Verticale lijn maken bij kolom Enable soft wrap Lichte regelafbreking inschakelen Show document stats Documentstatistieken tonen Ordered list mode Geordende lijstmodus Interface Vormgeving Hide toolbar Werkbalk verbergen Icon theme name Naam van pictogramthema Stylesheet file Stijlblad Hide tabs bar when there is only one tab Tabbladbalk verbergen als er slechts één tabblad is Show full path in window title Volledige pad tonen in venstertitiel Show directory tree Mapstructuur tonen Working directory Werkmap Help Hulp Live preview Live-voorvertoning Normal preview Normale voorvertoning Disabled Uitgeschakeld Cursor Line Cursorregel Wrapped Line Afgebroken regel Increment Verhogen Repeat Herhalen DirectorySelectButton Select directory to open Kies de te openen map FileDialogButton (none) (geen) FileSelectButton Select file to open Kies het te openen bestand InsertTableDialog Insert table Tabel invoegen Number of rows Aantal rijen Number of columns Aantal kolommen LocaleDialog Enter locale name (example: en_US) Voer de landinstelling in (bijv.: en_US) Set as default Instellen als standaard Proxy No write since last change (add ! to override) Niet weggeschreven sinds recentste aanpassing (voeg ! toe om te overschrijven) Information Informatie ReTextEdit Add to dictionary Toevoegen aan woordenboek Save image Afbeelding opslaan Images (*.png *.jpg) Afbeeldingen (*.png *.jpg) ReTextTab New document Nieuw document Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! De bestandsinhoud kan niet worden verwerkt. Controleer de <a href="%s">vereiste module</a> geïnstalleerd is! Create missing file? Ontbrekend bestand aanmaken? The file '%s' does not exist. Do you want to create it? Het bestand '%s' bestaat niet. Wil je het aanmaken? File could not be created Het bestand kan niet worden aangemaakt Could not create file '%s': %s Het bestand '%s' kan niet worden aangemaakt: %s ReTextWindow File toolbar Bestandswerkbalk Edit toolbar Aanpassingswerkbalk Search toolbar Zoekwerkbalk New Nieuw Open Openen Set encoding Codering instellen Reload Herladen Save Opslaan Save as Opslaan als Next tab Volgend tabblad Previous tab Vorig tabblad Close tab Tabblad sluiten Print Afdrukken Print preview Afdrukvoorbeeld View HTML code HTML-code bekijken Change editor font Lettertype van bewerker aanpassen Change preview font Lettertype van voorvertoning aanpassen Find text Tekst zoeken Go to line Ga naar regel Preview Voorvertoning Live preview Live-voorvertoning Insert table Tabel invoegen Table editing mode Tabel-bewerkmodus Insert images by file path Afbeeldingen invoegen via bestandspad FakeVim mode FakeVim-modus Fullscreen mode Beeldvullend Preferences Voorkeuren Quit Afsluiten Undo Ongedaan maken Redo Opnieuw Copy Kopiëren Cut Knippen Paste Plakken Paste image Afbeelding plakken Move line up Regel omhoog verplaatsen Move line down Regel omlaag verplaatsen Enable Inschakelen Set locale Landinstelling instellen Use WebKit renderer WebKit-weergave gebruiken Use WebEngine (Chromium) renderer WebEngine (Chromium)-weergave gebruiken Show directory Map tonen Next Volgende Previous Vorige Replace Vervangen Replace all Alles vervangen Close Sluiten Get help online Online-hulp openen About ReText Over ReText About Qt Over Qt Bold Vetgedrukt Italic Cursief Underline Onderstrepen Formatting Opmaak Symbols Symbolen &File &Bestand &Edit B&ewerken &Help &Hulp Open recent Recent bestand openen Export Exporteren Spell check Spellingcontrole Default markup Standaardopmaak Search Zoeken Replace with Vervangen door Case sensitively Hoofdlettergevoelig New document Nieuw document Type the line number Voer een regelnummer in Please, save the file somewhere. Sla het bestand ergens op. Select one or several files to open Selecteer één of meerdere te openen bestanden Supported files Ondersteunde bestanden All files (*) Alle bestanden (*) Select file encoding from the list: Kies een bestandscodering uit de lijst: Plain text (*.txt) Platte tekst (*.txt) %s files Example of final string: Markdown files %s bestanden Save file Bestand opslaan Cannot save to file which is open in another tab! Kan niet opslaan als het geopend is op een ander tabblad! Cannot save to file because it is read-only! Kan niet opslaan omdat het alleen-lezen is! Export document to ODT Document exporteren naar odt OpenDocument text files (*.odt) OpenDocument-tekstbestanden (*.odt) HTML files (*.html *.htm) HTML-bestanden (*.html *.htm) Unrecognized paperSize setting "%s". Niet-herkend papierformaat: '%s'. Export document to PDF Document exporteren naar pdf PDF files (*.pdf) PDF-bestanden (*.pdf) Print document Document afdrukken Export document Document exporteren Failed to execute the command: De opdracht kan niet worden uitgevoerd: Alt text Alt-tekst URL URL Link text Linktekst This file has been deleted by other application. Please make sure you save the file before exit. Dit bestand is verwijderd door een andere toepassing. Sla het bestand op voordat je afsluit. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? Dit document is aangepast door een andere toepassing. Wil je het bestand herladen (dit verwerpt al je aanpassingen)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Als je er voor kiest het bestand niet te herladen, dan wordt automatisch opslaan in deze sessie uitgeschakeld om gegevensverlies te voorkomen. The document has been modified. Do you want to save your changes? Dit document is aangepast. Wil je je aanpassingen opslaan? HTML code HTML-code Select one or several images to open Selecteer één of meerdere te openen afbeeldingen ReText %s (using PyMarkups %s) ReText %s (gebruikmakend van PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText Eenvoudige, maar krachtige bewerker voor Markdown en reStructuredText Author: Dmitry Shachnev, 2011 Maker: Dmitry Shachnev, 2011 Markdown syntax Markdown-syntax reStructuredText syntax reStructuredText-syntax TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters %d w | %d a | %d c main Open the files in preview mode Bestanden openen in voorvertoningsmodus Create a new window even if there is an existing one Nieuw venster openen, zelfs als er al een geopend venster is List of files to open Lijst met te openen bestanden ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_pl.qm0000644000175000017500000003641400000000000016155 0ustar00dmitrydmitry b*dy Yc')gt0  z r&DVgl)(0D! bly%Xvћr!3 #S 4J0amr95t(*$Fr46 W9 '$0BM7e -d>0 E-:u%k5/>ϗ&t+ °"eϡ )M -RT#)+I%\9+>,)~')&72  @P h>> j3 lan v* W  $   7`/53.d4E z oe!IwUGKx <ˏ{*) l O/.i81|Automatycznie otwieraj ostatnie dokumenty podczas uruchamiania,Automatically open last documents on startup ConfigDialog>Automatycznie zapisuj dokumentyAutomatically save documents ConfigDialogZachowanieBehavior ConfigDialog,Domy[lny stan podglduDefault preview state ConfigDialogLRysuj pionow lini w podanej kolumnieDraw vertical line at column ConfigDialog EdytorEditor ConfigDialog>WBcz mikkie zawijanie wierszyEnable soft wrap ConfigDialog^WBcz zsynchronizowane przewijanie dla Markdown*Enable synchronized scrolling for Markdown ConfigDialog PomocHelp ConfigDialogLUkryj nagBwek jedynej widocznej karty(Hide tabs bar when there is only one tab ConfigDialog(Ukryj pasek narzdzi Hide toolbar ConfigDialog2Pod[wietlaj bie|c liniHighlight current line ConfigDialog"Nazwa motywu ikonIcon theme name ConfigDialogInterfejs Interface ConfigDialogTNumery linii s wzgldne do bie|cej linii)Line numbers are relative to current line ConfigDialogPodgld na |ywo Live preview ConfigDialoglRozszerzenia skBadni Markdown (oddzielone przecinkami),Markdown syntax extensions (comma-separated) ConfigDialog Normalny podgldNormal preview ConfigDialog6Liczba ostatnich dokumentwNumber of recent documents ConfigDialogDOtwieraj linki zewntrzne w ReText$Open external links in ReText window ConfigDialog.Przywr geometri oknaRestore window geometry ConfigDialog4Poka| statystyk dokumentuShow document stats ConfigDialogBPoka| peBn [cie|k w tytule oknaShow full path in window title ConfigDialog$Poka| numery liniiShow line numbers ConfigDialog&Plik arkusza stylwStylesheet file ConfigDialog4Klawisz Tab wstawia spacjeTab key inserts spaces ConfigDialog&GBboko[ tabulacjiTabulation width ConfigDialog8U|ywany plik konfiguracyjny:Using configuration file at: ConfigDialog (brak)(none)FileDialogButton0Wybierz plik do otwarciaSelect file to openFileSelectButtonWstaw tabel Insert tableInsertTableDialogLiczba kolumnNumber of columnsInsertTableDialogLiczba rzdwNumber of rowsInsertTableDialog:Podaj kod jzyka (np.: pl_PL)"Enter locale name (example: en_US) LocaleDialog&Ustaw jako domy[lneSet as default LocaleDialoginformacje InformationProxyRNic nie zmieniono (dodaj ! |eby nadpisa).No write since last change (add ! to override)Proxy"Dodaj do sBownikaAdd to dictionary ReTextEdit(Obrazy (*.png *.jpg)Images (*.png *.jpg) ReTextEditZapisz obraz Save image ReTextEditJNie udaBo si utworzy pliku '%s': %sCould not create file '%s': %s ReTextTabNie mo|na przeanalizowa zawarto[ci pliku, sprawdz czy masz zainstalowany <a href="%s">odpowiedni moduB</a>!aCould not parse file contents, check if you have the necessary module installed! ReTextTab0Utworzy brakujcy plik?Create missing file? ReTextTab0Nie mo|na utworzy plikuFile could not be created ReTextTabNowy dokument New document ReTextTab`Plik '%s' nie istnieje. Czy chcesz go utworzy?8The file '%s' does not exist. Do you want to create it? ReTextTab%s pliki%s files ReTextWindow&Edycja&Edit ReTextWindow &Plik&File ReTextWindow P&omoc&Help ReTextWindowO QtAbout Qt ReTextWindowO ReText About ReText ReTextWindow&Wszystkie pliki (*) All files (*) ReTextWindow$tekst alternatywnyAlt text ReTextWindow8Autor: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindowPogrubienieBold ReTextWindowvNie mo|na zapisa pliku, poniewa| jest on tylko do odczytu!,Cannot save to file because it is read-only! ReTextWindowvNie mo|na zapisa pliku, ktry jest otwarty w innej karcie!1Cannot save to file which is open in another tab! ReTextWindow:Rozr|nianie wielko[ci znakwCase sensitively ReTextWindow,ZmieD czcionk edytoraChange editor font ReTextWindow.ZmieD czcionk podglduChange preview font ReTextWindowZamknijClose ReTextWindowZamknij kart Close tab ReTextWindowSkopiujCopy ReTextWindow WytnijCut ReTextWindow$Domy[lne znacznikiDefault markup ReTextWindowPasek edycji Edit toolbar ReTextWindow WBczEnable ReTextWindowEksportujExport ReTextWindow$Eksportuj dokumentExport document ReTextWindow Eksportuj do ODTExport document to ODT ReTextWindow Eksportuj do PDFExport document to PDF ReTextWindow@Nie udaBo si wykona polecenia:Failed to execute the command: ReTextWindowTryb FakeVim FakeVim mode ReTextWindowPasek pliku File toolbar ReTextWindowZnajdz tekst Find text ReTextWindowFormatowanie Formatting ReTextWindowPeBny ekranFullscreen mode ReTextWindowPomoc onlineGet help online ReTextWindowIdz do linii Go to line ReTextWindowKod HTML HTML code ReTextWindow2Pliki HTML (*.html *.htm)HTML files (*.html *.htm) ReTextWindowJe[li wybierzesz nie przeBadowywanie dokumentu, automatyczny zapis zostanie wyBczony, |eby zapobiec utracie danych.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindowBWstaw obrazy wedBug [cie|ki plikuInsert images by file path ReTextWindowWstaw tabel Insert table ReTextWindowKursywaItalic ReTextWindowtekst linku Link text ReTextWindowPodgld na |ywo Live preview ReTextWindow"SkBadnia MarkdownMarkdown syntax ReTextWindow&PrzesuD lini w dBMove line down ReTextWindow(PrzesuD lini w gr Move line up ReTextWindowNowyNew ReTextWindowNowy dokument New document ReTextWindowNastpnyNext ReTextWindowNowa kartaNext tab ReTextWindow OtwrzOpen ReTextWindowOtwrz ostatnie Open recent ReTextWindow<Dokumenty OpenDocument (*.odt)OpenDocument text files (*.odt) ReTextWindow"Pliki PDF (*.pdf)PDF files (*.pdf) ReTextWindow WklejPaste ReTextWindowWklej obraz Paste image ReTextWindow(ZwykBy tekst (*.txt)Plain text (*.txt) ReTextWindow:Prosz najpierw zapisa plik. Please, save the file somewhere. ReTextWindowPreferencje Preferences ReTextWindowPodgldPreview ReTextWindowPoprzedniPrevious ReTextWindow Poprzednia karta Previous tab ReTextWindow DrukujPrint ReTextWindowDrukuj dokumentPrint document ReTextWindowPodgld wydruku Print preview ReTextWindowZakoDczQuit ReTextWindowBReText %s (u|ywajc PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindow PonwRedo ReTextWindowPrzeBadujReload ReTextWindow ZastpReplace ReTextWindow Zastp wszystkie Replace all ReTextWindow Zastp Replace with ReTextWindow ZapiszSave ReTextWindowZapisz jakoSave as ReTextWindowZapisz plik Save file ReTextWindowWyszukajSearch ReTextWindow$Pasek wyszukiwaniaSearch toolbar ReTextWindow@Wybierz kodowanie pliku z listy:#Select file encoding from the list: ReTextWindowVZaznacz jeden lub wicej plikw do otwarcia#Select one or several files to open ReTextWindowXZaznacz jeden lub wicej obrazw do otwarcia$Select one or several images to open ReTextWindowUstaw kodowanie Set encoding ReTextWindowUstaw jzyk Set locale ReTextWindowPoka| katalogShow directory ReTextWindowlProsty, ale pot|ny edytor Markdown i RestructuredText ConfigDialog Using configuration file at: Używany plik konfiguracyjny: Behavior Zachowanie Automatically save documents Automatycznie zapisuj dokumenty Automatically open last documents on startup Automatycznie otwieraj ostatnie dokumenty podczas uruchamiania Number of recent documents Liczba ostatnich dokumentów Restore window geometry Przywróć geometrię okna Default preview state Domyślny stan podglądu Open external links in ReText window Otwieraj linki zewnątrzne w ReText Markdown syntax extensions (comma-separated) Rozszerzenia składni Markdown (oddzielone przecinkami) Enable synchronized scrolling for Markdown Włącz zsynchronizowane przewijanie dla Markdown Editor Edytor Highlight current line Podświetlaj bieżącą linię Show line numbers Pokaż numery linii Line numbers are relative to current line Numery linii są względne do bieżącej linii Tab key inserts spaces Klawisz Tab wstawia spacje Tabulation width Głębokość tabulacji Draw vertical line at column Rysuj pionową linię w podanej kolumnie Enable soft wrap Włącz miękkie zawijanie wierszy Show document stats Pokaż statystykę dokumentu Interface Interfejs Hide toolbar Ukryj pasek narzędzi Icon theme name Nazwa motywu ikon Stylesheet file Plik arkusza stylów Hide tabs bar when there is only one tab Ukryj nagłówek jedynej widocznej karty Show full path in window title Pokaż pełną ścieżkę w tytule okna Help Pomoc Live preview Podgląd na żywo Normal preview Normalny podgląd Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (brak) FileSelectButton Select file to open Wybierz plik do otwarcia InsertTableDialog Insert table Wstaw tabelę Number of rows Liczba rzędów Number of columns Liczba kolumn LocaleDialog Enter locale name (example: en_US) Podaj kod języka (np.: pl_PL) Set as default Ustaw jako domyślne Proxy No write since last change (add ! to override) Nic nie zmieniono (dodaj ! żeby nadpisać) Information informacje ReTextEdit Add to dictionary Dodaj do słownika Save image Zapisz obraz Images (*.png *.jpg) Obrazy (*.png *.jpg) ReTextTab New document Nowy dokument Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Nie można przeanalizować zawartości pliku, sprawdź czy masz zainstalowany <a href="%s">odpowiedni moduł</a>! Create missing file? Utworzyć brakujący plik? The file '%s' does not exist. Do you want to create it? Plik '%s' nie istnieje. Czy chcesz go utworzyć? File could not be created Nie można utworzyć pliku Could not create file '%s': %s Nie udało się utworzyć pliku '%s': %s ReTextWindow File toolbar Pasek pliku Edit toolbar Pasek edycji Search toolbar Pasek wyszukiwania New Nowy Open Otwórz Set encoding Ustaw kodowanie Reload Przeładuj Save Zapisz Save as Zapisz jako Next tab Nowa karta Previous tab Poprzednia karta Close tab Zamknij kartę Print Drukuj Print preview Podgląd wydruku View HTML code Zobacz źródło HTML Change editor font Zmień czcionkę edytora Change preview font Zmień czcionkę podglądu Find text Znajdź tekst Go to line Idź do linii Preview Podgląd Live preview Podgląd na żywo Insert table Wstaw tabelę Table editing mode Tryb edycji tabeli Insert images by file path Wstaw obrazy według ścieżki pliku FakeVim mode Tryb FakeVim Fullscreen mode Pełny ekran Preferences Preferencje Quit Zakończ Undo Cofnij Redo Ponów Copy Skopiuj Cut Wytnij Paste Wklej Paste image Wklej obraz Move line up Przesuń linię w górę Move line down Przesuń linię w dół Enable Włącz Set locale Ustaw język Use WebKit renderer Używaj silnika WebKit Use WebEngine (Chromium) renderer Używaj silnika WebEngine (Chromium) Show directory Pokaż katalog Next Następny Previous Poprzedni Replace Zastąp Replace all Zastąp wszystkie Close Zamknij Get help online Pomoc online About ReText O ReText About Qt O Qt Bold Pogrubienie Italic Kursywa Underline Podkreślenie Formatting Formatowanie Symbols Symbole Open recent Otwórz ostatnie Export Eksportuj Spell check Sprawdzanie pisowni Default markup Domyślne znaczniki Search Wyszukaj Replace with Zastąp Case sensitively Rozróżnianie wielkości znaków New document Nowy dokument Type the line number Podaj numer linii Please, save the file somewhere. Proszę najpierw zapisać plik. Select one or several files to open Zaznacz jeden lub więcej plików do otwarcia Supported files Obsługiwane pliki All files (*) Wszystkie pliki (*) Select file encoding from the list: Wybierz kodowanie pliku z listy: Plain text (*.txt) Zwykły tekst (*.txt) %s files Example of final string: Markdown files %s pliki Save file Zapisz plik Cannot save to file which is open in another tab! Nie można zapisać pliku, który jest otwarty w innej karcie! Cannot save to file because it is read-only! Nie można zapisać pliku, ponieważ jest on tylko do odczytu! Export document to ODT Eksportuj do ODT OpenDocument text files (*.odt) Dokumenty OpenDocument (*.odt) HTML files (*.html *.htm) Pliki HTML (*.html *.htm) Unrecognized paperSize setting "%s". Nierozpoznane ustawienie paperSize "%s". Export document to PDF Eksportuj do PDF PDF files (*.pdf) Pliki PDF (*.pdf) Print document Drukuj dokument Export document Eksportuj dokument Failed to execute the command: Nie udało się wykonać polecenia: Alt text tekst alternatywny URL URL Link text tekst linku This file has been deleted by other application. Please make sure you save the file before exit. Ten plik został usunięty przez inną aplikację. Upewnij się, że zapisałeś plik zanim zamkniesz. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? Ten dokument został zmodyfikowany przez inną aplikację. Czy chcesz przeładować ten plik (to może spowodować cofnięcie twoich zmian)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Jeśli wybierzesz nie przeładowywanie dokumentu, automatyczny zapis zostanie wyłączony, żeby zapobiec utracie danych. The document has been modified. Do you want to save your changes? Dokument został zmieniony. Czy chcesz zapisać zmiany? HTML code Kod HTML Select one or several images to open Zaznacz jeden lub więcej obrazów do otwarcia ReText %s (using PyMarkups %s) ReText %s (używając PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText Prosty, ale potężny edytor Markdown i RestructuredText Author: Dmitry Shachnev, 2011 Autor: Dmitry Shachnev, 2011 Markdown syntax Składnia Markdown reStructuredText syntax Składnia reStructuredText &File &Plik &Edit &Edycja &Help P&omoc TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters %d w | %d a | %d c main Open the files in preview mode Otwórz pliki w trybie podglądu Create a new window even if there is an existing one Utwórz nowe okno, nawet jeśli istnieje List of files to open Lista plików do otwarcia ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_pt.qm0000644000175000017500000000704100000000000016157 0ustar00dmitrydmitry ConfigDialog Behavior Automatically save documents Restore window geometry Open external links in ReText window Editor Highlight current line Show line numbers Tab key inserts spaces Tabulation width Interface Icon theme name Stylesheet file Markdown syntax extensions (comma-separated) Help Ajuda Enable synchronized scrolling for Markdown Draw vertical line at column Automatically open last documents on startup Using configuration file at: Number of recent documents Default preview state Line numbers are relative to current line Enable soft wrap Show document stats Hide toolbar Hide tabs bar when there is only one tab Show full path in window title Live preview Pré-visualizar Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) FileSelectButton Select file to open InsertTableDialog Insert table Number of rows Number of columns LocaleDialog Enter locale name (example: en_US) Set as default Proxy No write since last change (add ! to override) Information ReTextEdit Save image Images (*.png *.jpg) Add to dictionary ReTextTab New document Novo documento Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Create missing file? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow New document Novo documento File toolbar Barra de Ferramentas de Ficheiros Edit toolbar Editar barra de ferramentas New Novo Open Abrir Save Guardar Save as Guardar como Print Imprimir Print preview Pré-visualizar impressão View HTML code Ver código HTML Preview Pré-visualizar Live preview Pré-visualizar Quit Sair Undo Anular Redo Refazer Copy Copiar Cut Cortar Paste Colar Open recent Abrir recentes About Qt So o Qt Symbols Símbolos &File &Ficheiro &Edit &Editar &Help &Ajuda Export Exportar Please, save the file somewhere. Guarde o ficheiro noutro lugar por favor. Supported files Ficheiros Suportados All files (*) Todos os ficheiros (*) Plain text (*.txt) Texto Simples (*.txt) HTML files (*.html *.htm) Ficheiros HTML (*.html *.htm) Save file Guardar Ficheiro Export document to ODT Exportar para ODT OpenDocument text files (*.odt) Abrir ficheros OpenDocument (*.odt) Export document to PDF Exportar para PDF PDF files (*.pdf) Ficheiros PDF (*.pdf) Print document Imprimir documento The document has been modified. Do you want to save your changes? O documernto foi alterado Deseja gravar as alterações? HTML code Código HTML Export document Enable Set locale Spell check Fullscreen mode Search toolbar Find text Next Previous Search Case sensitively Author: Dmitry Shachnev, 2011 Markdown syntax reStructuredText syntax Simple but powerful editor for Markdown and reStructuredText Select one or several files to open Get help online Show directory Cannot save to file because it is read-only! Bold Italic Underline Formatting About ReText Sobre ReText Use WebKit renderer Failed to execute the command: %s files Example of final string: Markdown files Ficheiros %s Default markup Preferences Set encoding Select file encoding from the list: Reload Next tab Previous tab Table editing mode FakeVim mode This file has been deleted by other application. Please make sure you save the file before exit. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Change editor font Change preview font ReText %s (using PyMarkups %s) Close Alt text URL Link text Replace Replace all Replace with Cannot save to file which is open in another tab! Use WebEngine (Chromium) renderer Close tab Go to line Insert table Insert images by file path Paste image Move line up Move line down Type the line number Unrecognized paperSize setting "%s". Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_pt_BR.qm0000644000175000017500000004141100000000000016541 0ustar00dmitrydmitry b/dy'Yc' gt%^z!pr+DV&g!(xl)-%D! by%QvћrU% %#S 4J5mlr5t-k /Fr:,;bW9&')O0BM=ge p-d 0 E2V:u)kw54ϗ+_0:°'ϡ .L 2T(})+I*90>1j~#<'.+77` D @! h> j3 laG v/ W $  J U w N^t Px & v/P Y,O + UW 2( . I( ~> =/;0334E |%\z e&{IUGKx$ ˏ*) O5 .i=rAbrir ltimos documentos automaticamente na inicializao,Automatically open last documents on startup ConfigDialogBSalvar documentos automaticamenteAutomatically save documents ConfigDialogComportamentoBehavior ConfigDialogLinha de Cursor Cursor Line ConfigDialog2Estado de previso padroDefault preview state ConfigDialogDesabilitadoDisabled ConfigDialogBDesenhar linha vertical na colunaDraw vertical line at column ConfigDialog EditorEditor ConfigDialog2Habilitar quebra de linhaEnable soft wrap ConfigDialogRAtivar rolagem sincronizada para Markdown*Enable synchronized scrolling for Markdown ConfigDialog AjudaHelp ConfigDialogTOcultar barra de abas quando s h uma aba(Hide tabs bar when there is only one tab ConfigDialog8Ocultar barra de ferramentas Hide toolbar ConfigDialog(Destacar linha atualHighlight current line ConfigDialog$Nome do cone temaIcon theme name ConfigDialogIncrementar Increment ConfigDialogInterface Interface ConfigDialog^Os nmeros de linha so relativos linha atual)Line numbers are relative to current line ConfigDialog$Visualizao atual Live preview ConfigDialoglExtenses de sintxe Markdown (separadas por vrgulas),Markdown syntax extensions (comma-separated) ConfigDialog&Visualizao normalNormal preview ConfigDialog:Nmero de documentos recentesNumber of recent documents ConfigDialogJAbrir links externos na janela ReText$Open external links in ReText window ConfigDialog,Modo de lista ordenadaOrdered list mode ConfigDialogRepetirRepeat ConfigDialog>Restaurar a geometria da janelaRestore window geometry ConfigDialog8Mostrar rvore de diretriosShow directory tree ConfigDialogBMostrar estatsticas do documentoShow document stats ConfigDialogXMostrar caminho completo no ttulo da janelaShow full path in window title ConfigDialog2Mostrar nmeros de linhasShow line numbers ConfigDialog$Arquivo de estilosStylesheet file ConfigDialog$Tab insere espaosTab key inserts spaces ConfigDialog(Tamanho da tabulaoTabulation width ConfigDialogDUsando arquivo de configurao em:Using configuration file at: ConfigDialog*Diretrio de trabalhoWorking directory ConfigDialogLinha Envolvida Wrapped Line ConfigDialog>Selecionar diretrio para abrirSelect directory to openDirectorySelectButton(nenhum)(none)FileDialogButton>Selecione um arquivo para abrirSelect file to openFileSelectButtonInserir tabela Insert tableInsertTableDialog"Nmero de colunasNumber of columnsInsertTableDialog Nmero de linhasNumber of rowsInsertTableDialogZFornea o nome da localidade (exemplo: pt_BR)"Enter locale name (example: en_US) LocaleDialog&Definir como padroSet as default LocaleDialogInformao InformationProxyvO arquivo no foi salvo (adicione um '!' para sobrescrever).No write since last change (add ! to override)Proxy.Adicionar ao dicionrioAdd to dictionary ReTextEdit*Imagens (*.png *.jpg)Images (*.png *.jpg) ReTextEditSalvar imagem Save image ReTextEditNNo foi possvel criar arquivo '%s': %sCould not create file '%s': %s ReTextTabNo foi possvel analisar o contedo do arquivo, verifique se voc tem o <a href="%s">mdulo necessrio</a> instalado!aCould not parse file contents, check if you have the necessary module installed! ReTextTab,Criar arquivo ausente?Create missing file? ReTextTab6Arquivo no pode ser criadoFile could not be created ReTextTabNovo documento New document ReTextTabVO arquivo '%s' no existe. Deseja cri-lo?8The file '%s' does not exist. Do you want to create it? ReTextTab%s arquivos%s files ReTextWindow&Editar&Edit ReTextWindow&Arquivo&File ReTextWindow A&juda&Help ReTextWindowSobre QtAbout Qt ReTextWindowSobre ReText About ReText ReTextWindow*Todos os arquivos (*) All files (*) ReTextWindow"Texto alternativoAlt text ReTextWindow8Autor: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindowNegritoBold ReTextWindow\No possvel salvar arquivo somente leitura!,Cannot save to file because it is read-only! ReTextWindow~No possvel salvar no arquivo que est aberto em outra guia!1Cannot save to file which is open in another tab! ReTextWindowJDiferenciando maisculas e minsculasCase sensitively ReTextWindow*Mudar fonte do editorChange editor font ReTextWindow6Mudar fonte da visualizaoChange preview font ReTextWindow FecharClose ReTextWindowFechar aba Close tab ReTextWindow CopiarCopy ReTextWindowRecortarCut ReTextWindowMarcao padroDefault markup ReTextWindow6Barra de ferramentas Editar Edit toolbar ReTextWindowHabilitarEnable ReTextWindowExportarExport ReTextWindow$Exportar documentoExport document ReTextWindow8Exportar documento para ODT Export document to ODT ReTextWindow6Exportar documento para PDFExport document to PDF ReTextWindow8Falha ao executar o comando:Failed to execute the command: ReTextWindow.Modo de entrada FakeVim FakeVim mode ReTextWindow8Barra de ferramentas Arquivo File toolbar ReTextWindowEncontrar texto Find text ReTextWindowFormatar Formatting ReTextWindowModo tela cheiaFullscreen mode ReTextWindowAjuda onlineGet help online ReTextWindowIr para a linha Go to line ReTextWindowCdigo HTML HTML code ReTextWindow8Arquivos HTML (*.html *.htm)HTML files (*.html *.htm) ReTextWindowSo voc escolher por no recarregar o arquivo, o modo de autossalvamento ser desabilitado nessa sesso para prevenir a perda de dados.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindowLInserir imagens por caminho de arquivoInsert images by file path ReTextWindowInserir tabela Insert table ReTextWindowItlicoItalic ReTextWindowTexto de link Link text ReTextWindow.Visualizao automtica Live preview ReTextWindow Sintaxe MarkdownMarkdown syntax ReTextWindow Mover para baixoMove line down ReTextWindowMover para cima Move line up ReTextWindowNovoNew ReTextWindowNovo documento New document ReTextWindowSeguinteNext ReTextWindowPrxima abaNext tab ReTextWindow AbrirOpen ReTextWindowAbrir recente Open recent ReTextWindowLArquivos de texto OpenDocument (*.odt)OpenDocument text files (*.odt) ReTextWindow(Arquivos PDF (*.pdf)PDF files (*.pdf) ReTextWindow ColarPaste ReTextWindowColar imagem Paste image ReTextWindow*Texto simples (*.txt)Plain text (*.txt) ReTextWindow`Por favor, salve o arquivo em outra localizao. Please, save the file somewhere. ReTextWindowPreferncias Preferences ReTextWindowVisualizarPreview ReTextWindowAnteriorPrevious ReTextWindowAba anterior Previous tab ReTextWindowImprimirPrint ReTextWindow$Imprimir documentoPrint document ReTextWindow(Visualizar impresso Print preview ReTextWindowSairQuit ReTextWindow>ReText %s (usando PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindowRefazerRedo ReTextWindowRecarregarReload ReTextWindowSubstituirReplace ReTextWindow Substituir todos Replace all ReTextWindowSubstituir por Replace with ReTextWindow SalvarSave ReTextWindowSalvar comoSave as ReTextWindowSalvar arquivo Save file ReTextWindowPesquisarSearch ReTextWindow<Barra de ferramentas PesquisarSearch toolbar ReTextWindowXSelecione a codificao de arquivo da lista:#Select file encoding from the list: ReTextWindowPSelecione um ou mais arquivos para abrir#Select one or several files to open ReTextWindowTSelecione uma ou vrias imagens para abrir$Select one or several images to open ReTextWindow&Definir codificao Set encoding ReTextWindow$Definir localidade Set locale ReTextWindow Exibir diretrioShow directory ReTextWindowtSimples e poderoso editor para Markdown e reStructuredText ConfigDialog Using configuration file at: Usando arquivo de configuração em: Behavior Comportamento Automatically save documents Salvar documentos automaticamente Automatically open last documents on startup Abrir últimos documentos automaticamente na inicialização Number of recent documents Número de documentos recentes Restore window geometry Restaurar a geometria da janela Default preview state Estado de previsão padrão Open external links in ReText window Abrir links externos na janela ReText Markdown syntax extensions (comma-separated) Extensões de sintáxe Markdown (separadas por vírgulas) Enable synchronized scrolling for Markdown Ativar rolagem sincronizada para Markdown Editor Editor Highlight current line Destacar linha atual Show line numbers Mostrar números de linhas Line numbers are relative to current line Os números de linha são relativos à linha atual Tab key inserts spaces Tab insere espaços Tabulation width Tamanho da tabulação Draw vertical line at column Desenhar linha vertical na coluna Enable soft wrap Habilitar quebra de linha Show document stats Mostrar estatísticas do documento Ordered list mode Modo de lista ordenada Interface Interface Hide toolbar Ocultar barra de ferramentas Icon theme name Nome do ícone tema Stylesheet file Arquivo de estilos Hide tabs bar when there is only one tab Ocultar barra de abas quando só há uma aba Show full path in window title Mostrar caminho completo no título da janela Show directory tree Mostrar árvore de diretórios Working directory Diretório de trabalho Help Ajuda Live preview Visualização atual Normal preview Visualização normal Disabled Desabilitado Cursor Line Linha de Cursor Wrapped Line Linha Envolvida Increment Incrementar Repeat Repetir DirectorySelectButton Select directory to open Selecionar diretório para abrir FileDialogButton (none) (nenhum) FileSelectButton Select file to open Selecione um arquivo para abrir InsertTableDialog Insert table Inserir tabela Number of rows Número de linhas Number of columns Número de colunas LocaleDialog Enter locale name (example: en_US) Forneça o nome da localidade (exemplo: pt_BR) Set as default Definir como padrão Proxy No write since last change (add ! to override) O arquivo não foi salvo (adicione um '!' para sobrescrever) Information Informação ReTextEdit Add to dictionary Adicionar ao dicionário Save image Salvar imagem Images (*.png *.jpg) Imagens (*.png *.jpg) ReTextTab New document Novo documento Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Não foi possível analisar o conteúdo do arquivo, verifique se você tem o <a href="%s">módulo necessário</a> instalado! Create missing file? Criar arquivo ausente? The file '%s' does not exist. Do you want to create it? O arquivo '%s' não existe. Deseja criá-lo? File could not be created Arquivo não pode ser criado Could not create file '%s': %s Não foi possível criar arquivo '%s': %s ReTextWindow File toolbar Barra de ferramentas Arquivo Edit toolbar Barra de ferramentas Editar Search toolbar Barra de ferramentas Pesquisar New Novo Open Abrir Set encoding Definir codificação Reload Recarregar Save Salvar Save as Salvar como Next tab Próxima aba Previous tab Aba anterior Close tab Fechar aba Print Imprimir Print preview Visualizar impressão View HTML code Visualizar código HTML Change editor font Mudar fonte do editor Change preview font Mudar fonte da visualização Find text Encontrar texto Go to line Ir para a linha Preview Visualizar Live preview Visualização automática Insert table Inserir tabela Table editing mode Modo de edição de tabelas Insert images by file path Inserir imagens por caminho de arquivo FakeVim mode Modo de entrada FakeVim Fullscreen mode Modo tela cheia Preferences Preferências Quit Sair Undo Desfazer Redo Refazer Copy Copiar Cut Recortar Paste Colar Paste image Colar imagem Move line up Mover para cima Move line down Mover para baixo Enable Habilitar Set locale Definir localidade Use WebKit renderer Utilizar renderizador WebKit Use WebEngine (Chromium) renderer Utilizar renderizador WebEngine (Chromium)' Show directory Exibir diretório Next Seguinte Previous Anterior Replace Substituir Replace all Substituir todos Close Fechar Get help online Ajuda online About ReText Sobre ReText About Qt Sobre Qt Bold Negrito Italic Itálico Underline Sublinhado Formatting Formatar Symbols Símbolos &File &Arquivo &Edit &Editar &Help A&juda Open recent Abrir recente Export Exportar Spell check Correção ortográfica Default markup Marcação padrão Search Pesquisar Replace with Substituir por Case sensitively Diferenciando maiúsculas e minúsculas New document Novo documento Type the line number Digite o número da linha Please, save the file somewhere. Por favor, salve o arquivo em outra localização. Select one or several files to open Selecione um ou mais arquivos para abrir Supported files Arquivos suportados All files (*) Todos os arquivos (*) Select file encoding from the list: Selecione a codificação de arquivo da lista: Plain text (*.txt) Texto simples (*.txt) %s files Example of final string: Markdown files %s arquivos Save file Salvar arquivo Cannot save to file which is open in another tab! Não é possível salvar no arquivo que está aberto em outra guia! Cannot save to file because it is read-only! Não é possível salvar arquivo somente leitura! Export document to ODT Exportar documento para ODT OpenDocument text files (*.odt) Arquivos de texto OpenDocument (*.odt) HTML files (*.html *.htm) Arquivos HTML (*.html *.htm) Unrecognized paperSize setting "%s". Ajuste de tamanho do papel não reconhecido "%s". Export document to PDF Exportar documento para PDF PDF files (*.pdf) Arquivos PDF (*.pdf) Print document Imprimir documento Export document Exportar documento Failed to execute the command: Falha ao executar o comando: Alt text Texto alternativo URL URL Link text Texto de link This file has been deleted by other application. Please make sure you save the file before exit. O arquivo foi apagado por outro programa. Certifique-se de salvá-lo antes de sair. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? O documento foi modificado por outro programa. Gostaria de recarregar o arquivo? (isso descartará suas alterações) If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. So você escolher por não recarregar o arquivo, o modo de autossalvamento será desabilitado nessa sessão para prevenir a perda de dados. The document has been modified. Do you want to save your changes? O documento foi modificado. Deseja salvar as alterações? HTML code Código HTML Select one or several images to open Selecione uma ou várias imagens para abrir ReText %s (using PyMarkups %s) ReText %s (usando PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText Simples e poderoso editor para Markdown e reStructuredText Author: Dmitry Shachnev, 2011 Autor: Dmitry Shachnev, 2011 Markdown syntax Sintaxe Markdown reStructuredText syntax Sintaxe reStructuredText TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters %d p | %d a | %d c main Open the files in preview mode Abra os arquivos no modo de visualização Create a new window even if there is an existing one Criar uma nova janela, mesmo que já exista uma janela List of files to open Lista de arquivos para abrir ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_ru.qm0000644000175000017500000004124400000000000016165 0ustar00dmitrydmitryS;V)UWT+kZS5UPʆ '3ʇ1B3&:s9CL"!ynun*<AIb:p5"*UF)"dO81ze uΩo&K&%4M> b/dyYc'gt$z r+^DV.g xml),D!X by%vћrS%l %9#S 4J5fmr5t-k /Xw5Fr9;+u(W9')0BrM=eD -d0 E1:u)k54Gϗ*/°&ϡ . 2KT(1)$+I)90\>0 ~"'-+!76  @!# h>k j3u la v. W9 $  </:33g4E Z% z Ce%IU'GKx$u Uˏ*) O4.i=~n2B><0B8G5A:8 >B:@K20BL ?>A;54=85 4>:C<5=BK ?@8 70?CA:5,Automatically open last documents on startup ConfigDialogB2B><0B8G5A:8 A>E@0=OBL 4>:C<5=BKAutomatically save documents ConfigDialog>2545=85Behavior ConfigDialog"!B@>:0 A :C@A>@>< Cursor Line ConfigDialog< 568< >B>1@065=8O ?> C<>;G0=8NDefault preview state ConfigDialogB:;NG5=>Disabled ConfigDialogJ 8A>20BL 25@B8:0;L=CN ;8=8N 2 AB>;1F5Draw vertical line at column ConfigDialog 540:B>@Editor ConfigDialog"5@5=>A8BL AB@>:8Enable soft wrap ConfigDialogT:;NG8BL A8=E@>==CN ?@>:@CB:C 4;O Markdown*Enable synchronized scrolling for Markdown ConfigDialog!?@02:0Help ConfigDialog\!:@KBL ?0=5;L 2:;04>:, 5A;8 2:;04:0 2A53> >4=0(Hide tabs bar when there is only one tab ConfigDialog4!:@KBL ?0=5;L 8=AB@C<5=B>2 Hide toolbar ConfigDialog6>4A25G820BL B5:CICN AB@>:CHighlight current line ConfigDialog"5<0 7=0G:>2Icon theme name ConfigDialog#25;8G8BL Increment ConfigDialog=5H=89 284 Interface ConfigDialogR0G8=0BL =C<5@0F8N AB@>: A B5:CI59 AB@>:8)Line numbers are relative to current line ConfigDialog82>9 ?@>A<>B@ Live preview ConfigDialogj 0AH8@5=8O A8=B0:A8A0 Markdown (@0745;Q==K5 70?OBK<8),Markdown syntax extensions (comma-separated) ConfigDialog 1KG=K9 ?@>A<>B@Normal preview ConfigDialog4'8A;> ?>A;54=8E 4>:C<5=B>2Number of recent documents ConfigDialogLB:@K20BL 2=5H=85 AAK;:8 2 >:=5 ReText$Open external links in ReText window ConfigDialog< 568< 4;O =C<5@>20==KE A?8A:>2Ordered list mode ConfigDialog>2B>@8BLRepeat ConfigDialog0!>E@0=OBL 35><5B@8N >:=0Restore window geometry ConfigDialog0>:070BL AB@C:BC@C ?0?:8Show directory tree ConfigDialog>B>1@060BL AB0B8AB8:C 4>:C<5=B0Show document stats ConfigDialogN>:07K20BL ?>;=K9 ?CBL 2 703>;>2:5 >:=0Show full path in window title ConfigDialog.>:07K20BL =><5@0 AB@>:Show line numbers ConfigDialog$09; AB8;O QtStylesheet file ConfigDialog*Tab 2AB02;O5B ?@>15;KTab key inserts spaces ConfigDialog (8@8=0 B01C;OF88Tabulation width ConfigDialog@A?>;L7CNBAO =0AB@>9:8 87 D09;0:Using configuration file at: ConfigDialog 01>G0O ?0?:0Working directory ConfigDialog4>;=0O AB@>:0 A ?5@5=>A0<8 Wrapped Line ConfigDialog6K15@8B5 ?0?:C 4;O >B:@KB8OSelect directory to openDirectorySelectButton(=5 2K1@0=>)(none)FileDialogButton4K15@8B5 D09; 4;O >B:@KB8OSelect file to openFileSelectButton AB028BL B01;8FC Insert tableInsertTableDialog'8A;> AB>;1F>2Number of columnsInsertTableDialog'8A;> AB@>:Number of rowsInsertTableDialogH2548B5 :>4 ;>:0;8 (=0?@8<5@: en_US)"Enter locale name (example: en_US) LocaleDialog.#AB0=>28BL ?> C<>;G0=8NSet as default LocaleDialog=D>@<0F8O InformationProxyvABL =5A>E@0=Q==K5 87<5=5=8O (4>102LB5 ! 4;O 83=>@8@>20=8O).No write since last change (add ! to override)Proxy$>1028BL 2 A;>20@LAdd to dictionary ReTextEdit27>1@065=8O (*.png *.jpg)Images (*.png *.jpg) ReTextEdit*!>E@0=8BL 87>1@065=85 Save image ReTextEdit@5 C40;>AL A>740BL D09; %s: %sCould not create file '%s': %s ReTextTab5 C40;>AL >1@01>B0BL A>45@68<>5 D09;0, C1548B5AL, GB> CAB0=>2;5= <a href="%s">=5>1E>48<K9 <>4C;L</a>!aCould not parse file contents, check if you have the necessary module installed! ReTextTab2!>740BL =54>AB0NI89 D09;?Create missing file? ReTextTab.5 C40;>AL A>740BL D09;File could not be created ReTextTab>2K9 4>:C<5=B New document ReTextTabb$09;0 %s =5 ACI5AB2C5B. K E>B8B5 A>740BL 53>?8The file '%s' does not exist. Do you want to create it? ReTextTab$09;K %s%s files ReTextWindow&@02:0&Edit ReTextWindow &$09;&File ReTextWindow&!?@02:0&Help ReTextWindow QtAbout Qt ReTextWindow ReText About ReText ReTextWindowA5 D09;K (*) All files (*) ReTextWindow(;LB5@=0B82=K9 B5:ABAlt text ReTextWindow82B>@: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindow>;C68@=K9Bold ReTextWindow52>7<>6=> A>E@0=8BL 2 D09;, B0: :0: >= 4>ABC?5= B>;L:> 4;O GB5=8O!,Cannot save to file because it is read-only! ReTextWindowz52>7<>6=> A>E@0=8BL 2 D09;, :>B>@K9 >B:@KB 2 4@C3>9 2:;04:5!1Cannot save to file which is open in another tab! ReTextWindow"#G8BK20BL @538AB@Case sensitively ReTextWindow07<5=8BL H@8DB @540:B>@0Change editor font ReTextWindow07<5=8BL H@8DB ?@>A<>B@0Change preview font ReTextWindow0:@KBLClose ReTextWindow0:@KBL 2:;04:C Close tab ReTextWindow>?8@>20BLCopy ReTextWindowK@570BLCut ReTextWindow4/7K: @07<5B:8 ?> C<>;G0=8NDefault markup ReTextWindow*0=5;L @540:B8@>20=8O Edit toolbar ReTextWindow:;NG8BLEnable ReTextWindow-:A?>@BExport ReTextWindow.-:A?>@B8@>20BL 4>:C<5=BExport document ReTextWindow>-:A?>@B8@>20BL 4>:C<5=B :0: ODTExport document to ODT ReTextWindow>-:A?>@B8@>20BL 4>:C<5=B :0: PDFExport document to PDF ReTextWindow:52>7<>6=> 70?CAB8BL :><0=4C:Failed to execute the command: ReTextWindow 568< FakeVim FakeVim mode ReTextWindow0=5;L D09;0 File toolbar ReTextWindow>8A: B5:AB0 Find text ReTextWindow$>@<0B8@>20=85 Formatting ReTextWindow&>;=>M:@0==K9 @568<Fullscreen mode ReTextWindow6>;CG8BL ?><>IL 2 8=B5@=5B5Get help online ReTextWindow 5@59B8 : AB@>:5 Go to line ReTextWindow:>4 HTML HTML code ReTextWindow2$09;K HTML (*.html *.htm)HTML files (*.html *.htm) ReTextWindowA;8 2K @5H8B5 =5 ?5@5703@C60BL D09;, @568< 02B><0B8G5A:>3> A>E@0=5=8O 1C45B >B:;NGQ= 4;O MB>3> A50=A0 2 F5;OE ?@54>B2@0I5=8O ?>B5@8 40==KE.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindow<AB028BL 87>1@065=8O 87 D09;>2Insert images by file path ReTextWindow AB028BL B01;8FC Insert table ReTextWindow C@A82Italic ReTextWindow"5:AB AAK;:8 Link text ReTextWindow82>9 ?@>A<>B@ Live preview ReTextWindow$!8=B0:A8A MarkdownMarkdown syntax ReTextWindow.5@5<5AB8BL AB@>:C 2=87Move line down ReTextWindow05@5<5AB8BL AB@>:C 225@E Move line up ReTextWindow >2K9New ReTextWindow>2K9 4>:C<5=B New document ReTextWindow!;54CNI55Next ReTextWindow"!;54CNI0O 2:;04:0Next tab ReTextWindowB:@KBLOpen ReTextWindow"B:@KBL ?>A;54=85 Open recent ReTextWindowB$09;K B5:AB0 OpenDocument (*.odt)OpenDocument text files (*.odt) ReTextWindow"$09;K PDF (*.pdf)PDF files (*.pdf) ReTextWindowAB028BLPaste ReTextWindow(AB028BL 87>1@065=85 Paste image ReTextWindow*@>AB>9 B5:AB (*.txt)Plain text (*.txt) ReTextWindow.!=0G0;0 A>E@0=8B5 D09;. Please, save the file somewhere. ReTextWindow0AB@>9:8 Preferences ReTextWindow@>A<>B@Preview ReTextWindow@54K4CI55Previous ReTextWindow$@54K4CI0O 2:;04:0 Previous tab ReTextWindow 0A?5G0B0BLPrint ReTextWindow( 0A?5G0B0BL 4>:C<5=BPrint document ReTextWindow&@54?@>A<>B@ ?5G0B8 Print preview ReTextWindow KE>4Quit ReTextWindowFReText %s (8A?>;L7C5B PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindow$>2B>@8BL 459AB285Redo ReTextWindow 03@C78BL 70=>2>Reload ReTextWindow0<5=8BLReplace ReTextWindow0<5=8BL 2A5 Replace all ReTextWindow0<5=8BL =0 Replace with ReTextWindow!>E@0=8BLSave ReTextWindow!>E@0=8BL :0:Save as ReTextWindow!>E@0=8BL D09; Save file ReTextWindow >8A:Search ReTextWindow0=5;L ?>8A:0Search toolbar ReTextWindowFK15@8B5 :>48@>2:C D09;0 87 A?8A:0:#Select file encoding from the list: ReTextWindow^K15@8B5 >48= 8;8 =5A:>;L:> D09;>2 4;O >B:@KB8O#Select one or several files to open ReTextWindowfK15@8B5 >4=> 8;8 =5A:>;L:> 87>1@065=89 4;O 2AB02:8$Select one or several images to open ReTextWindow(#AB0=>28BL :>48@>2:C Set encoding ReTextWindow"#AB0=>28BL ;>:0;L Set locale ReTextWindowB:@KBL ?0?:CShow directory ReTextWindowv@>AB>9, => <>I=K9 @540:B>@ 4;O Markdown 8 reStructuredText25@:0 >@D>3@0D88 Spell check ReTextWindow(>445@68205<K5 D09;KSupported files ReTextWindow!8<2>;KSymbols ReTextWindow6 568< @540:B8@>20=8O B01;8FTable editing mode ReTextWindowT>:C<5=B 1K; 87<5=Q=. !>E@0=8BL 87<5=5=8O?AThe document has been modified. Do you want to save your changes? ReTextWindow-B>B 4>:C<5=B 1K; 87<5=Q= 4@C38< ?@8;>65=85<. %>B8B5 ;8 2K 703@C78BL D09; 70=>2> (MB> >B<5=8B 2A5 20H8 87<5=5=8O)? {This document has been modified by other application. Do you want to reload the file (this will discard all your changes)?  ReTextWindow-B>B D09; 1K; C40;Q= 4@C38< ?@8;>65=85<. >60;C9AB0, C1548B5AL ?5@54 2KE>4><, GB> 2K A>E@0=8;8 D09;.`This file has been deleted by other application. Please make sure you save the file before exit. ReTextWindow(2548B5 =><5@ AB@>:8Type the line number ReTextWindowURLURL ReTextWindow>4GQ@:820=85 Underline ReTextWindow"B<5=8BL 459AB285Undo ReTextWindowV525@=>5 7=0G5=85 ?0@0<5B@0 paperSize: %s$Unrecognized paperSize setting "%s". ReTextWindowPA?>;L7>20BL 4286>: WebEngine (Chromium)!Use WebEngine (Chromium) renderer ReTextWindow4A?>;L7>20BL 4286>: WebKitUse WebKit renderer ReTextWindow$@>A<>B@ :>40 HTMLView HTML code ReTextWindow4!8=B0:A8A reStructuredTextreStructuredText syntax ReTextWindow$%d w | %d a | %d c%d w | %d a | %d c TextInfoArea^!>740BL =>2>5 >:=>, 4065 5A;8 5ABL ACI5AB2CNI554Create a new window even if there is an existing onemain<5@5G8A;8B5 D09;K 4;O >B:@KB8OList of files to openmainDB:@K20BL D09;K 2 @568<5 ?@>A<>B@0Open the files in preview modemain ) , ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643654541.0 ReText-7.2.3/locale/retext_ru.ts0000644000175000017500000010435300000000000016177 0ustar00dmitrydmitry ConfigDialog Using configuration file at: Используются настройки из файла: Behavior Поведение Automatically save documents Автоматически сохранять документы Automatically open last documents on startup Автоматически открывать последние документы при запуске Number of recent documents Число последних документов Restore window geometry Сохранять геометрию окна Default preview state Режим отображения по умолчанию Open external links in ReText window Открывать внешние ссылки в окне ReText Markdown syntax extensions (comma-separated) Расширения синтаксиса Markdown (разделённые запятыми) Enable synchronized scrolling for Markdown Включить синхронную прокрутку для Markdown Editor Редактор Highlight current line Подсвечивать текущую строку Show line numbers Показывать номера строк Line numbers are relative to current line Начинать нумерацию строк с текущей строки Tab key inserts spaces Tab вставляет пробелы Tabulation width Ширина табуляции Draw vertical line at column Рисовать вертикальную линию в столбце Enable soft wrap Переносить строки Show document stats Отображать статистику документа Ordered list mode Режим для нумерованных списков Interface Внешний вид Hide toolbar Скрыть панель инструментов Icon theme name Тема значков Stylesheet file Файл стиля Qt Hide tabs bar when there is only one tab Скрыть панель вкладок, если вкладка всего одна Show full path in window title Показывать полный путь в заголовке окна Show directory tree Показать структуру папки Working directory Рабочая папка Help Справка Live preview Живой просмотр Normal preview Обычный просмотр Disabled Отключено Cursor Line Строка с курсором Wrapped Line Полная строка с переносами Increment Увеличить Repeat Повторить DirectorySelectButton Select directory to open Выберите папку для открытия FileDialogButton (none) (не выбрано) FileSelectButton Select file to open Выберите файл для открытия InsertTableDialog Insert table Вставить таблицу Number of rows Число строк Number of columns Число столбцов LocaleDialog Enter locale name (example: en_US) Введите код локали (например: en_US) Set as default Установить по умолчанию Proxy No write since last change (add ! to override) Есть несохранённые изменения (добавьте ! для игнорирования) Information Информация ReTextEdit Add to dictionary Добавить в словарь Save image Сохранить изображение Images (*.png *.jpg) Изображения (*.png *.jpg) ReTextTab New document Новый документ Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Не удалось обработать содержимое файла, убедитесь, что установлен <a href="%s">необходимый модуль</a>! Create missing file? Создать недостающий файл? The file '%s' does not exist. Do you want to create it? Файла «%s» не существует. Вы хотите создать его? File could not be created Не удалось создать файл Could not create file '%s': %s Не удалось создать файл «%s»: %s ReTextWindow File toolbar Панель файла Edit toolbar Панель редактирования Search toolbar Панель поиска New Новый Open Открыть Set encoding Установить кодировку Reload Загрузить заново Save Сохранить Save as Сохранить как Next tab Следующая вкладка Previous tab Предыдущая вкладка Close tab Закрыть вкладку Print Распечатать Print preview Предпросмотр печати View HTML code Просмотр кода HTML Change editor font Изменить шрифт редактора Change preview font Изменить шрифт просмотра Find text Поиск текста Go to line Перейти к строке Preview Просмотр Live preview Живой просмотр Insert table Вставить таблицу Table editing mode Режим редактирования таблиц Insert images by file path Вставить изображения из файлов FakeVim mode Режим FakeVim Fullscreen mode Полноэкранный режим Preferences Настройки Quit Выход Undo Отменить действие Redo Повторить действие Copy Копировать Cut Вырезать Paste Вставить Paste image Вставить изображение Move line up Переместить строку вверх Move line down Переместить строку вниз Enable Включить Set locale Установить локаль Use WebKit renderer Использовать движок WebKit Use WebEngine (Chromium) renderer Использовать движок WebEngine (Chromium) Show directory Открыть папку Next Следующее Previous Предыдущее Replace Заменить Replace all Заменить все Close Закрыть Get help online Получить помощь в интернете About ReText О ReText About Qt О Qt Bold Полужирный Italic Курсив Underline Подчёркивание Formatting Форматирование Symbols Символы &File &Файл &Edit &Правка &Help &Справка Open recent Открыть последние Export Экспорт Spell check Проверка орфографии Default markup Язык разметки по умолчанию Search Поиск Replace with Заменить на Case sensitively Учитывать регистр New document Новый документ Type the line number Введите номер строки Please, save the file somewhere. Сначала сохраните файл. Select one or several files to open Выберите один или несколько файлов для открытия Supported files Поддерживаемые файлы All files (*) Все файлы (*) Select file encoding from the list: Выберите кодировку файла из списка: Plain text (*.txt) Простой текст (*.txt) %s files Example of final string: Markdown files Файлы %s Save file Сохранить файл Cannot save to file which is open in another tab! Невозможно сохранить в файл, который открыт в другой вкладке! Cannot save to file because it is read-only! Невозможно сохранить в файл, так как он доступен только для чтения! Export document to ODT Экспортировать документ как ODT OpenDocument text files (*.odt) Файлы текста OpenDocument (*.odt) HTML files (*.html *.htm) Файлы HTML (*.html *.htm) Unrecognized paperSize setting "%s". Неверное значение параметра paperSize: «%s» Export document to PDF Экспортировать документ как PDF PDF files (*.pdf) Файлы PDF (*.pdf) Print document Распечатать документ Export document Экспортировать документ Failed to execute the command: Невозможно запустить команду: Alt text Альтернативный текст URL URL Link text Текст ссылки This file has been deleted by other application. Please make sure you save the file before exit. Этот файл был удалён другим приложением. Пожалуйста, убедитесь перед выходом, что вы сохранили файл. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? Этот документ был изменён другим приложением. Хотите ли вы загрузить файл заново (это отменит все ваши изменения)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Если вы решите не перезагружать файл, режим автоматического сохранения будет отключён для этого сеанса в целях предотвращения потери данных. The document has been modified. Do you want to save your changes? Документ был изменён. Сохранить изменения? HTML code код HTML Select one or several images to open Выберите одно или несколько изображений для вставки ReText %s (using PyMarkups %s) ReText %s (использует PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText Простой, но мощный редактор для Markdown и reStructuredText Author: Dmitry Shachnev, 2011 Автор: Dmitry Shachnev, 2011 Markdown syntax Синтаксис Markdown reStructuredText syntax Синтаксис reStructuredText TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters %d w | %d a | %d c main Open the files in preview mode Открывать файлы в режиме просмотра Create a new window even if there is an existing one Создать новое окно, даже если есть существующее List of files to open Перечислите файлы для открытия ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_sk.qm0000644000175000017500000003114400000000000016152 0ustar00dmitrydmitryb%_dy Yc'<gt z4r!gx p by%Cvx  #S Nm:r5t#qk/% #-# %W9 '0B -d0 E':u kX5*Eϗ!v%°Aϡ # (=T)|+I `9&Z>& '#! @w h> n j3 la v$ W 0 $4 adDefault preview state ConfigDialogVypnutDisabled ConfigDialog EditorEditor ConfigDialogPomocnkHelp ConfigDialog*Skrye panel nstrojov Hide toolbar ConfigDialog2Zvraznie aktulny riadokHighlight current line ConfigDialog"Nzov motvu ikonIcon theme name ConfigDialogPrrastok Increment ConfigDialogRozhranie Interface ConfigDialogX slovanie riadkov za ne na aktulnom riadku)Line numbers are relative to current line ConfigDialog Priebe~n nh>ad Live preview ConfigDialog\Rozarenia syntaxe markdown ( iarkou oddelen),Markdown syntax extensions (comma-separated) ConfigDialogNormlny nh>adNormal preview ConfigDialog6Po et poslednch dokumentovNumber of recent documents ConfigDialogLOtvrae extern odkazy v okne ReText-u$Open external links in ReText window ConfigDialog0Re~im zoradenho zoznamuOrdered list mode ConfigDialogOpakovaeRepeat ConfigDialog0Obnovie umiestnenie oknaRestore window geometry ConfigDialog2Zobrazie adresrov stromShow directory tree ConfigDialog:Zobrazie atatistiku dokumentuShow document stats ConfigDialog,Zobrazie  sla riadkovShow line numbers ConfigDialogSbor so atlomStylesheet file ConfigDialog2Klves Tab vklad medzeryTab key inserts spaces ConfigDialog*Sbor s nastaveniami:Using configuration file at: ConfigDialog Pracovn adresrWorking directory ConfigDialog8Vyberte adresr na otvorenieSelect directory to openDirectorySelectButton(~iadny)(none)FileDialogButton4Vyberte sbor na otvorenieSelect file to openFileSelectButtonVlo~ie tabu>ku Insert tableInsertTableDialogPo et st:pcovNumber of columnsInsertTableDialogPo et riadkovNumber of rowsInsertTableDialogPZadajte nzov lokalizcie (napr.: sk_SK)"Enter locale name (example: en_US) LocaleDialog.Nastavie ako predvolenSet as default LocaleDialogInformcie InformationProxy$Pridae do slovnkuAdd to dictionary ReTextEdit*Obrzky (*.png *.jpg)Images (*.png *.jpg) ReTextEditUlo~ie obrzok Save image ReTextEditJNepodarilo sa vytvorie sbor '%s': %sCould not create file '%s': %s ReTextTab2Vytvorie chbajci sbor?Create missing file? ReTextTab8Sbor sa nepodarilo vytvorieFile could not be created ReTextTabNov dokument New document ReTextTabSbory %s%s files ReTextWindow&Upravie&Edit ReTextWindow &Sbor&File ReTextWindow&Pomocnk&Help ReTextWindowO QtAbout Qt ReTextWindow"O programe ReText About ReText ReTextWindow"Vaetky sbory (*) All files (*) ReTextWindowAlt textAlt text ReTextWindow8Autor: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindow Tu nBold ReTextWindowlNie je mo~n ulo~ie, preto~e sbor je len nna  tanie!,Cannot save to file because it is read-only! ReTextWindow8Rozliaovanie ve>kosti psmenCase sensitively ReTextWindow(Zmenie psmo editoraChange editor font ReTextWindow(Zmenie psmo nh>aduChange preview font ReTextWindowZavrieeClose ReTextWindowZavriee kartu Close tab ReTextWindowKoprovaeCopy ReTextWindowVystrihneCut ReTextWindow0Predvolen markup syntaxDefault markup ReTextWindow4Panel nstrojov pre pravy Edit toolbar ReTextWindowPovolieEnable ReTextWindow ExportExport ReTextWindow&Exportovae dokumentExport document ReTextWindow4Exportovae dokument do ODTExport document to ODT ReTextWindow4Exportovae dokument do PDFExport document to PDF ReTextWindow:Nepodarilo sa spustie prkaz:Failed to execute the command: ReTextWindowRe~im FakeVim FakeVim mode ReTextWindow2Panel nstrojov pre sbor File toolbar ReTextWindowNjse text Find text ReTextWindowFormtovanie Formatting ReTextWindow*Celoobrazovkov re~imFullscreen mode ReTextWindow&Zskae online pomocGet help online ReTextWindow Prejse na riadok Go to line ReTextWindowHTML kd HTML code ReTextWindow4HTML sbory (*.html *.htm)HTML files (*.html *.htm) ReTextWindow8Vlo~ie obrzky zadanm cestyInsert images by file path ReTextWindowVlo~ie tabu>ku Insert table ReTextWindowKurzvaItalic ReTextWindowText odkazu Link text ReTextWindow Priebe~n nh>ad Live preview ReTextWindowSyntax MarkdownMarkdown syntax ReTextWindow,Presune riadok ni~aieMove line down ReTextWindow,Presune riadok vyaaie Move line up ReTextWindowNovNew ReTextWindowNov dokument New document ReTextWindowNasledujciNext ReTextWindowalaia kartaNext tab ReTextWindowOtvorieOpen ReTextWindowOtvorie nedvne Open recent ReTextWindowFOpenDocument textov sbory (*.odt)OpenDocument text files (*.odt) ReTextWindow$PDF sbory (*.pdf)PDF files (*.pdf) ReTextWindow Vlo~iePaste ReTextWindow Prilepie obrzok Paste image ReTextWindow.Jednoduch text (*.txt)Plain text (*.txt) ReTextWindow6Ulo~te prosm niekam sbor. Please, save the file somewhere. ReTextWindowPredvo>by Preferences ReTextWindow Nh>adPreview ReTextWindowPredchdzajciPrevious ReTextWindow(Predchdzajca karta Previous tab ReTextWindow Tla iePrint ReTextWindowTla ie dokumentPrint document ReTextWindow$Uk~ka pred tla ou Print preview ReTextWindowQuitQuit ReTextWindow ZnovaRedo ReTextWindowZnovu na taeReload ReTextWindowNahradieReplace ReTextWindowNahradie vaetko Replace all ReTextWindowNahradie Replace with ReTextWindow Ulo~ieSave ReTextWindowUlo~ie akoSave as ReTextWindowUlo~ie sbor Save file ReTextWindowVyh>advanieSearch ReTextWindow@Panel nstrojov pre vyh>advanieSearch toolbar ReTextWindowHVyberte kdovanie sboru zo zoznamu:#Select file encoding from the list: ReTextWindowZVyberte jeden alebo viac sborov na otvorenie#Select one or several files to open ReTextWindow\Vyberte jeden alebo viac obrzkov na otvorenie$Select one or several images to open ReTextWindow$Nastavie kdovanie Set encoding ReTextWindow(Nastavie lokalizciu Set locale ReTextWindow$Zobrazie prie inokShow directory ReTextWindow~Jednoduch, no efektvny editor pre Markdown a ReStructuredTextkyTable editing mode ReTextWindow^Dokument bol zmenen. Chcete ulo~ie vaae zmeny?AThe document has been modified. Do you want to save your changes? ReTextWindow(Zadajte  slo riadkaType the line number ReTextWindowURL adresaURL ReTextWindowPod iarknut Underline ReTextWindowSpeUndo ReTextWindow:Pou~ie k vykres>ovaniu WebKitUse WebKit renderer ReTextWindow"Zobrazie HTML kdView HTML code ReTextWindow.Syntax reStructuredTextreStructuredText syntax ReTextWindow6Zoznam sborov na otvorenieList of files to openmain././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643654573.0 ReText-7.2.3/locale/retext_sk.ts0000644000175000017500000007533000000000000016170 0ustar00dmitrydmitry ConfigDialog Using configuration file at: Súbor s nastaveniami: Behavior Správanie Automatically save documents Automaticky ukladať dokumenty Automatically open last documents on startup Pri spustení automaticky otvoriť posledné dokumenty Number of recent documents Počet posledných dokumentov Restore window geometry Obnoviť umiestnenie okna Default preview state Predvolený náhľad Open external links in ReText window Otvárať externé odkazy v okne ReText-u Markdown syntax extensions (comma-separated) Rozšírenia syntaxe markdown (čiarkou oddelené) Enable synchronized scrolling for Markdown Editor Editor Highlight current line Zvýrazniť aktuálny riadok Show line numbers Zobraziť čísla riadkov Line numbers are relative to current line Číslovanie riadkov začne na aktuálnom riadku Tab key inserts spaces Kláves Tab vkladá medzery Tabulation width Draw vertical line at column Enable soft wrap Show document stats Zobraziť štatistiku dokumentu Ordered list mode Režim zoradeného zoznamu Interface Rozhranie Hide toolbar Skryť panel nástrojov Icon theme name Názov motívu ikon Stylesheet file Súbor so štýlom Hide tabs bar when there is only one tab Show full path in window title Show directory tree Zobraziť adresárový strom Working directory Pracovný adresár Help Pomocník Live preview Priebežný náhľad Normal preview Normálny náhľad Disabled Vypnuté Cursor Line Wrapped Line Increment Prírastok Repeat Opakovať DirectorySelectButton Select directory to open Vyberte adresár na otvorenie FileDialogButton (none) (žiadny) FileSelectButton Select file to open Vyberte súbor na otvorenie InsertTableDialog Insert table Vložiť tabuľku Number of rows Počet riadkov Number of columns Počet stĺpcov LocaleDialog Enter locale name (example: en_US) Zadajte názov lokalizácie (napr.: sk_SK) Set as default Nastaviť ako predvolené Proxy No write since last change (add ! to override) Information Informácie ReTextEdit Add to dictionary Pridať do slovníku Save image Uložiť obrázok Images (*.png *.jpg) Obrázky (*.png *.jpg) ReTextTab New document Nový dokument Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Create missing file? Vytvoriť chýbajúci súbor? The file '%s' does not exist. Do you want to create it? File could not be created Súbor sa nepodarilo vytvoriť Could not create file '%s': %s Nepodarilo sa vytvoriť súbor '%s': %s ReTextWindow File toolbar Panel nástrojov pre súbor Edit toolbar Panel nástrojov pre úpravy Search toolbar Panel nástrojov pre vyhľadávanie New Nový Open Otvoriť Set encoding Nastaviť kódovanie Reload Znovu načítať Save Uložiť Save as Uložiť ako Next tab Ďalšia karta Previous tab Predchádzajúca karta Close tab Zavrieť kartu Print Tlačiť Print preview Ukážka pred tlačou View HTML code Zobraziť HTML kód Change editor font Zmeniť písmo editora Change preview font Zmeniť písmo náhľadu Find text Nájsť text Go to line Prejsť na riadok Preview Náhľad Live preview Priebežný náhľad Insert table Vložiť tabuľku Table editing mode Režim úpravy tabuľky Insert images by file path Vložiť obrázky zadaním cesty FakeVim mode Režim FakeVim Fullscreen mode Celoobrazovkový režim Preferences Predvoľby Quit Quit Undo Späť Redo Znova Copy Kopírovať Cut Vystrihnúť Paste Vložiť Paste image Prilepiť obrázok Move line up Presunúť riadok vyššie Move line down Presunúť riadok nižšie Enable Povoliť Set locale Nastaviť lokalizáciu Use WebKit renderer Použiť k vykresľovaniu WebKit Use WebEngine (Chromium) renderer Show directory Zobraziť priečinok Next Nasledujúci Previous Predchádzajúci Replace Nahradiť Replace all Nahradiť všetko Close Zavrieť Get help online Získať online pomoc About ReText O programe ReText About Qt O Qt Bold Tučné Italic Kurzíva Underline Podčiarknuté Formatting Formátovanie Symbols Symboly &File &Súbor &Edit &Upraviť &Help &Pomocník Open recent Otvoriť nedávne Export Export Spell check Kontrola pravopisu Default markup Predvolená markup syntax Search Vyhľadávanie Replace with Nahradiť Case sensitively Rozlišovanie veľkosti písmen New document Nový dokument Type the line number Zadajte číslo riadka Please, save the file somewhere. Uložte prosím niekam súbor. Select one or several files to open Vyberte jeden alebo viac súborov na otvorenie Supported files Podporované súbory All files (*) Všetky súbory (*) Select file encoding from the list: Vyberte kódovanie súboru zo zoznamu: Plain text (*.txt) Jednoduchý text (*.txt) %s files Example of final string: Markdown files Súbory %s Save file Uložiť súbor Cannot save to file which is open in another tab! Cannot save to file because it is read-only! Nie je možné uložiť, pretože súbor je len nna čítanie! Export document to ODT Exportovať dokument do ODT OpenDocument text files (*.odt) OpenDocument textové súbory (*.odt) HTML files (*.html *.htm) HTML súbory (*.html *.htm) Unrecognized paperSize setting "%s". Export document to PDF Exportovať dokument do PDF PDF files (*.pdf) PDF súbory (*.pdf) Print document Tlačiť dokument Export document Exportovať dokument Failed to execute the command: Nepodarilo sa spustiť príkaz: Alt text Alt text URL URL adresa Link text Text odkazu This file has been deleted by other application. Please make sure you save the file before exit. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. The document has been modified. Do you want to save your changes? Dokument bol zmenený. Chcete uložiť vaše zmeny? HTML code HTML kód Select one or several images to open Vyberte jeden alebo viac obrázkov na otvorenie ReText %s (using PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText Jednoduchý, no efektívny editor pre Markdown a ReStructuredText Author: Dmitry Shachnev, 2011 Autor: Dmitry Shachnev, 2011 Markdown syntax Syntax Markdown reStructuredText syntax Syntax reStructuredText TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters main Open the files in preview mode Create a new window even if there is an existing one List of files to open Zoznam súborov na otvorenie ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_sr.qm0000644000175000017500000003107000000000000016157 0ustar00dmitrydmitryTb#dy Yc'gtizr DVgl)!dD! bLy%3vfK #S4J)@mr\5t"#/Fr,f- W9 ;' a0 E%k 5(ϗ$Iϡ " &TF)+I9$~'"[7*  C @7 h> j3 la v#A W $ /-V3'=eI U}gˏ*)  O(p.i.`0 ?>G5B:C, 0CB><0BA:8 >B2>@8 ?>A;54Z5 4>:C<5=B5,Automatically open last documents on startup ConfigDialog8CB><0BA:8 A0GC20X 4>:C<5=B5Automatically save documents ConfigDialog>=0H0Z5Behavior ConfigDialog8>4@07C<520=> AB0Z5 ?@53;540Default preview state ConfigDialogFAF@B0X 25@B8:0;=C ;8=8XC =0 :>;>=8Draw vertical line at column ConfigDialog#@5R820GEditor ConfigDialog$#:YCG8 <5:8 ?@5;><Enable soft wrap ConfigDialogR#:YCG8 A8=E@>=87>20=> :;870Z5 70 0@:40C=*Enable synchronized scrolling for Markdown ConfigDialog ><>[Help ConfigDialog&!0:@8X B@0:C 0;0B:8 Hide toolbar ConfigDialog.AB0:=8 B@5=CB=C ;8=8XCHighlight current line ConfigDialog 0782 B5<5 8:>=0Icon theme name ConfigDialog !CG5Y5 Interface ConfigDialog`@>X528 ;8=8X0 AC @5;0B82=8 C >4=>AC =0 B@5=CB=C)Line numbers are relative to current line ConfigDialog "@5=CB=8 ?@53;54 Live preview ConfigDialog\0@:40C= ?@>H8@5Z0 A8=B0:A5 (>42>X5=> 70?5B><),Markdown syntax extensions (comma-separated) ConfigDialog2@>X A:>@0HZ8E 4>:C<5=0B0Number of recent documents ConfigDialogJB20@0X A?>Y=5 2575 C  5"5:AB ?@>7>@C$Open external links in ReText window ConfigDialog2#?0<B8 35><5B@8XC ?@>7>@0Restore window geometry ConfigDialog8@8:068 AB0B8AB8:C 4>:C<5=B0Show document stats ConfigDialog,@8:068 1@>X525 ;8=8X0Show line numbers ConfigDialog$0X; @0A?>@540Stylesheet file ConfigDialog&"01 C10FCX5 @07<0:5Tab key inserts spaces ConfigDialog"(8@8=0 B01C;0F8X5Tabulation width ConfigDialog(=8HB0)(none)FileDialogButton7015@8B5 D0X;Select file to openFileSelectButton@>X :>;>=0Number of columnsInsertTableDialog@>X @54>20Number of rowsInsertTableDialogL#=5A8B5 >7=0:C ;>:0;8B5B0 (=?@. sr_RS)"Enter locale name (example: en_US) LocaleDialog2>AB028 :0> ?>4@07C<520=>Set as default LocaleDialog >40F8 InformationProxyl5<0 C?8A0 >4 ?>A;54Z5 87<5=5 (4>40XB5 ! 40 ?@53078B5).No write since last change (add ! to override)Proxy&!;8:5 (*.png *.jpg)Images (*.png *.jpg) ReTextEdit!0GC20X A;8:C Save image ReTextEdit5 <>3C 40 @0HG;0=8< A04@60X D0X;0. @>25@8B5 8<0B5 ;8 8=AB0;8@0= <a href="%s">=5>?E>4a= <>4C;</a>!aCould not parse file contents, check if you have the necessary module installed! ReTextTab>28 4>:C<5=B New document ReTextTab%s D0X;>28%s files ReTextWindow&#@5R820Z5&Edit ReTextWindow &$0X;&File ReTextWindow &><>[&Help ReTextWindow C"-CAbout Qt ReTextWindow  5"5:ABC About ReText ReTextWindow!28 D0X;>28 (*) All files (*) ReTextWindow;B B5:ABAlt text ReTextWindowZCB>@: <8B@8X (0G=52 (Dmitry Shachnev), 2011Author: Dmitry Shachnev, 2011 ReTextWindow>451Y0=>Bold ReTextWindow\5 <>3C 40 A0GC20< X5@ X5 D0X; A0<> 70 G8B0Z5!,Cannot save to file because it is read-only! ReTextWindowf5 <>3C 40 A0GC20< X5@ X5 >B2>@5= C 4@C3>< X578G:C!1Cannot save to file which is open in another tab! ReTextWindow*A5BY82 =0 25;. A;>20Case sensitively ReTextWindow*7<5=8 D>=B C@5R820G0Change editor font ReTextWindow(7<5=8 D>=B ?@53;540Change preview font ReTextWindow0B2>@8Close ReTextWindow>?8@0XCopy ReTextWindow A5F8Cut ReTextWindow.>4@07C<520=0 <0@:0F8X0Default markup ReTextWindow,;0B=0 B@0:0 C@5R820Z0 Edit toolbar ReTextWindow #:YCG8Enable ReTextWindow 72578Export ReTextWindow72578 4>:C<5=BExport document ReTextWindow*72578 4>:C<5=B C "Export document to ODT ReTextWindow*72578 4>:C<5=B C $Export document to PDF ReTextWindow45CA?5;> 872@H5Z5 :><0=45:Failed to execute the command: ReTextWindow06=8 8< @568< FakeVim mode ReTextWindow$;0B=0 B@0:0 D0X;0 File toolbar ReTextWindow0R8 B5:AB Find text ReTextWindow$>@<0B8@0Z5 Formatting ReTextWindow$ 568< ?C=>3 5:@0=0Fullscreen mode ReTextWindow8>B@068B5 ?><>[ =0 8=B5@=5BCGet help online ReTextWindow%" :>4 HTML code ReTextWindow6%" D0X;>28 (*.html *.htm)HTML files (*.html *.htm) ReTextWindow:> 87015@5B5 40 =5 CG8B0B5 ?>=>2>, 0CB><0BA:> GC20Z5 18[5 8A:YCG5=> 70 >2C A5A8XC 40 18 A5 A?@5G8> 3C18B0: ?>40B0:0.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindowC@782=>Italic ReTextWindow"5:AB 2575 Link text ReTextWindow "@5=CB=8 ?@53;54 Live preview ReTextWindow"0@:40C= A8=B0:A0Markdown syntax ReTextWindow>2>New ReTextWindow>28 4>:C<5=B New document ReTextWindow!;545[5Next ReTextWindow!;545[8 X578G0:Next tab ReTextWindow B2>@8Open ReTextWindowB2>@8 =5402=5 Open recent ReTextWindowH?5=>:C<5=B B5:ABC0;=8 D0X; (*.odt)OpenDocument text files (*.odt) ReTextWindow&$ D0X;>28 (*.pdf)PDF files (*.pdf) ReTextWindow 0;5?8Paste ReTextWindow(18G0= B5:AB (*.txt)Plain text (*.txt) ReTextWindow*!0GC20XB5 D0X; =5345. Please, save the file somewhere. ReTextWindow>45H020Z0 Preferences ReTextWindow@53;54Preview ReTextWindow@5BE>4=>Previous ReTextWindow"@5BE>4=8 X578G0: Previous tab ReTextWindow(B0<?0XPrint ReTextWindow (B0<?0X 4>:C<5=BPrint document ReTextWindow@8:07 HB0<?5 Print preview ReTextWindow0?CAB8Quit ReTextWindowF 5"5:AB %s (:>@8AB5[8 PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindow >=>28Redo ReTextWindow#G8B0X ?>=>2>Reload ReTextWindow 0<5=8Replace ReTextWindow0<5=8 A25 Replace all ReTextWindow0<5=8 A0 Replace with ReTextWindow!0GC20XSave ReTextWindow!0GC20X :0>Save as ReTextWindow!0GC20X D0X; Save file ReTextWindow "@068Search ReTextWindow(;0B=0 B@0:0 B@065Z0Search toolbar ReTextWindowD!0 ;8AB5 87015@8B5 :>48@0Z5 D0X;0:#Select file encoding from the list: ReTextWindowX7015@8B5 X540= 8;8 28H5 D0X;>20 70 >B20@0Z5#Select one or several files to open ReTextWindow >AB028 :>48@0Z5 Set encoding ReTextWindow">AB028 ;>:0;8B5B Set locale ReTextWindow(@8:068 48@5:B>@8XC<Show directory ReTextWindow54=>AB020= 0;8 <>[0= C@5R820G 70 0@:40C= 8 @5AB@C:BC8@0=8 B5:AB25@0 ?@02>?8A0 Spell check ReTextWindow >4@60=8 D0X;>28Supported files ReTextWindow!8<1>;8Symbols ReTextWindow, 568< C@5R820Z0 B015;5Table editing mode ReTextWindown>:C<5=B X5 87<5Z5=. 5;8B5 ;8 40 A0GC20B5 20H5 87<5=5?AThe document has been modified. Do you want to save your changes? ReTextWindow20X 4>:C<5=B X5 87<5=8;0 4@C30 0?;8:0F8X0. 5;8B5 ;8 40 30 ?>=>2> CG8B0B5? (>2> [5 ?>=8HB8B8 A25 20H5 87<5=5){This document has been modified by other application. Do you want to reload the file (this will discard all your changes)?  ReTextWindow20X D0X; X5 >1@8A0;0 4@C30 0?;8:0F8X5. !0GC20XB5 30 ?@5 =53> HB> 870R5B5.`This file has been deleted by other application. Please make sure you save the file before exit. ReTextWindow# URL ReTextWindow>42CG5=> Underline ReTextWindow>=8HB8Undo ReTextWindowJ>@8AB8 51>B>@ (%@><8XC<) 8AF@B020G!Use WebEngine (Chromium) renderer ReTextWindow0>@8AB8 518B 8AF@B020GUse WebKit renderer ReTextWindow">3;540X %" :>4View HTML code ReTextWindow>!8=B0:A0 @5AB@C:BC8@0=>3 B5:AB0reStructuredText syntax ReTextWindow ) , ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643654548.0 ReText-7.2.3/locale/retext_sr.ts0000644000175000017500000010172200000000000016172 0ustar00dmitrydmitry ConfigDialog Using configuration file at: Behavior Понашање Automatically save documents Аутоматски сачувај документе Automatically open last documents on startup На почетку, аутоматски отвори последње документе Number of recent documents Број скорашњих докумената Restore window geometry Упамти геометрију прозора Default preview state Подразумевано стање прегледа Open external links in ReText window Отварај спољне везе у РеТекст прозору Markdown syntax extensions (comma-separated) Маркдаун проширења синтаксе (одвојено запетом) Enable synchronized scrolling for Markdown Укључи синхронизовано клизање за Маркдаун Editor Уређивач Highlight current line Истакни тренутну линију Show line numbers Прикажи бројеве линија Line numbers are relative to current line Бројеви линија су релативни у односу на тренутну Tab key inserts spaces Таб убацује размаке Tabulation width Ширина табулације Draw vertical line at column Исцртај вертикалну линију на колони Enable soft wrap Укључи меки прелом Show document stats Прикажи статистику документа Interface Сучеље Hide toolbar Сакриј траку алатки Icon theme name Назив теме икона Stylesheet file Фајл распореда Hide tabs bar when there is only one tab Show full path in window title Help Помоћ Live preview Тренутни преглед Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (ништа) FileSelectButton Select file to open Изаберите фајл InsertTableDialog Insert table Number of rows Број редова Number of columns Број колона LocaleDialog Enter locale name (example: en_US) Унесите ознаку локалитета (нпр. sr_RS) Set as default Постави као подразумевано Proxy No write since last change (add ! to override) Нема уписа од последње измене (додајте ! да прегазите) Information Подаци ReTextEdit Add to dictionary Save image Сачувај слику Images (*.png *.jpg) Слике (*.png *.jpg) ReTextTab New document Нови документ Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Не могу да рашчланим садржај фајла. Проверите имате ли инсталиран <a href="%s">неопходaн модул</a>! Create missing file? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow File toolbar Алатна трака фајла Edit toolbar Алатна трака уређивања Search toolbar Алатна трака тражења New Ново Open Отвори Set encoding Постави кодирање Reload Учитај поново Save Сачувај Save as Сачувај као Next tab Следећи језичак Previous tab Претходни језичак Close tab Print Штампај Print preview Приказ штампе View HTML code Погледај ХТМЛ код Change editor font Измени фонт уређивача Change preview font Измени фонт прегледа Find text Нађи текст Go to line Preview Преглед Live preview Тренутни преглед Insert table Table editing mode Режим уређивања табеле FakeVim mode Лажни Вим режим Fullscreen mode Режим пуног екрана Preferences Подешавања Quit Напусти Undo Поништи Redo Понови Copy Копирај Cut Исеци Paste Налепи Paste image Move line up Move line down Enable Укључи Set locale Постави локалитет Use WebKit renderer Користи ВебКит исцртавач Use WebEngine (Chromium) renderer Користи ВебМотор (Хромијум) исцртавач Show directory Прикажи директоријум Next Следеће Previous Претходно Replace Замени Replace all Замени све Close Затвори Get help online Потражите помоћ на интернету About ReText О РеТексту About Qt О КуТ-у Bold Подебљано Italic Курзивно Underline Подвучено Formatting Форматирање Symbols Симболи &File &Фајл &Edit &Уређивање &Help &Помоћ Open recent Отвори недавне Export Извези Spell check Провера правописа Default markup Подразумевана маркација Search Тражи Replace with Замени са Case sensitively Осетљив на вел. слова New document Нови документ Type the line number Please, save the file somewhere. Сачувајте фајл негде. Select one or several files to open Изаберите један или више фајлова за отварање Supported files Подржани фајлови All files (*) Сви фајлови (*) Select file encoding from the list: Са листе изаберите кодирање фајла: Plain text (*.txt) Обичан текст (*.txt) %s files Example of final string: Markdown files %s фајлови Save file Сачувај фајл Cannot save to file which is open in another tab! Не могу да сачувам јер је отворен у другом језичку! Cannot save to file because it is read-only! Не могу да сачувам јер је фајл само за читање! Export document to ODT Извези документ у ОДТ OpenDocument text files (*.odt) ОпенДокумент текстуални фајл (*.odt) HTML files (*.html *.htm) ХТМЛ фајлови (*.html *.htm) Unrecognized paperSize setting "%s". Export document to PDF Извези документ у ПДФ PDF files (*.pdf) ПДФ фајлови (*.pdf) Print document Штампај документ Export document Извези документ Failed to execute the command: Неуспело извршење команде: Alt text Алт текст URL УРЛ Link text Текст везе This file has been deleted by other application. Please make sure you save the file before exit. Овај фајл је обрисала друга апликације. Сачувајте га пре него што изађете. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? Овај документ је изменила друга апликација. Желите ли да га поново учитате? (ово ће поништити све ваше измене) If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Ако изаберете да не учитате поново, аутоматско чување биће искључено за ову сесију да би се спречио губитак података. The document has been modified. Do you want to save your changes? Документ је измењен. Желите ли да сачувате ваше измене? HTML code ХТМЛ код ReText %s (using PyMarkups %s) РеТекст %s (користећи PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText Једноставан али моћан уређивач за Маркдаун и реструктуирани текст Author: Dmitry Shachnev, 2011 Аутор: Дмитриј Шачнев (Dmitry Shachnev), 2011 Markdown syntax Маркдаун синтакса reStructuredText syntax Синтакса реструктуираног текста Insert images by file path Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_sr@latin.qm0000644000175000017500000002736600000000000017324 0ustar00dmitrydmitryʇ"]B$}L"qnun)5 UvF)Ω#s4}>b dy!Yc'gt Mzrgl)PD! by%vJ5 #Sq4J&6m rN5t Fr)\*Z' =0 E"k 5%ϗ!5ϡ y "T0)+I9!~'E7'  ! @ h> la v + /*N3$/eIUgM*) O%d.i+bNa po etku, automatski otvori poslednje dokumente,Automatically open last documents on startup ConfigDialog8Automatski sa uvaj dokumenteAutomatically save documents ConfigDialogPonaaanjeBehavior ConfigDialogFIscrtaj vertikalnu liniju na koloniDraw vertical line at column ConfigDialogUreiva Editor ConfigDialogVUklju i sinhronizovano klizanje za Markdown*Enable synchronized scrolling for Markdown ConfigDialog PomoHelp ConfigDialog.Istakni trenutnu linijuHighlight current line ConfigDialog Naziv teme ikonaIcon theme name ConfigDialogSu elje Interface ConfigDialog Trenutni pregled Live preview ConfigDialog^Markdaun proairenja sintakse (odvojeno zapetom),Markdown syntax extensions (comma-separated) ConfigDialogJOtvaraj spoljne veze u ReText prozoru$Open external links in ReText window ConfigDialog2Upamti geometriju prozoraRestore window geometry ConfigDialog,Prika~i brojeve linijaShow line numbers ConfigDialogFajl rasporedaStylesheet file ConfigDialog&Tab ubacuje razmakeTab key inserts spaces ConfigDialog"`irina tabulacijeTabulation width ConfigDialog(niata)(none)FileDialogButtonIzaberite fajlSelect file to openFileSelectButtonLUnesite oznaku lokaliteta (npr. sr_RS)"Enter locale name (example: en_US) LocaleDialog2Postavi kao podrazumevanoSet as default LocaleDialog Podaci InformationProxynNema upisa od poslednje izmene (dodajte ! da pregazite).No write since last change (add ! to override)Proxy&Slike (*.png *.jpg)Images (*.png *.jpg) ReTextEditSa uvaj sliku Save image ReTextEditNe mogu da raa lanim sadr~aj fajla. Proverite da li imate instaliran <a href="%s">neophodan modul</a>!aCould not parse file contents, check if you have the necessary module installed! ReTextTabNovi dokument New document ReTextTab%s fajlovi%s files ReTextWindow&Ureivanje&Edit ReTextWindow &Fajl&File ReTextWindow &Pomo&Help ReTextWindow O QT-uAbout Qt ReTextWindowO ReText-u About ReText ReTextWindowSvi fajlovi (*) All files (*) ReTextWindowAlt tekstAlt text ReTextWindowZAutor: Dmitrij `a nev (Dmitry Shachnev), 2011Author: Dmitry Shachnev, 2011 ReTextWindowPodebljanoBold ReTextWindow^Ne mogu da sa uvam jer je fajl samo za  itanje!,Cannot save to file because it is read-only! ReTextWindowfNe mogu da sa uvam jer je otvoren u drugom jezi ku!1Cannot save to file which is open in another tab! ReTextWindow,Osetljiv na vel. slovaCase sensitively ReTextWindow*Izmeni font ureiva aChange editor font ReTextWindow(Izmeni font pregledaChange preview font ReTextWindowZatvoriClose ReTextWindowKopirajCopy ReTextWindow IseciCut ReTextWindow.Podrazumevana markacijaDefault markup ReTextWindow$Uredi alatna traka Edit toolbar ReTextWindowUklju iEnable ReTextWindow IzveziExport ReTextWindowIzvezi dokumentExport document ReTextWindow*Izvezi dokument u ODTExport document to ODT ReTextWindow*Izvezi dokument u PDFExport document to PDF ReTextWindow6Neuspelo izvraenje komande:Failed to execute the command: ReTextWindowLa~ni Vim re~im FakeVim mode ReTextWindow"Fajl alatna traka File toolbar ReTextWindowNai tekst Find text ReTextWindowFormatiranje Formatting ReTextWindow$Re~im punog ekranaFullscreen mode ReTextWindow8Potra~ite pomo na internetuGet help online ReTextWindowHTML kod HTML code ReTextWindow6HTML fajlovi (*.html *.htm)HTML files (*.html *.htm) ReTextWindowAko izaberete da ne u itate ponovo, automatsko  uvanje bie isklju eno za ovu sesiju da bi se spre io gubitak podataka.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindowKurzivnoItalic ReTextWindowTekst veze Link text ReTextWindow Trenutni pregled Live preview ReTextWindow"Markdaun sintaksaMarkdown syntax ReTextWindowNovoNew ReTextWindowNovi dokument New document ReTextWindowSledeeNext ReTextWindowSledei jezi akNext tab ReTextWindow OtvoriOpen ReTextWindowOtvori nedavne Open recent ReTextWindowHOpenDocument tekstualni fajl (*.odt)OpenDocument text files (*.odt) ReTextWindow&PDF fajlovi (*.pdf)PDF files (*.pdf) ReTextWindow NalepiPaste ReTextWindow(Obi an tekst (*.txt)Plain text (*.txt) ReTextWindow*Sa uvajte fajl negde. Please, save the file somewhere. ReTextWindowPodeaavanja Preferences ReTextWindowPregledPreview ReTextWindowPrethodnoPrevious ReTextWindow"Prethodni jezi ak Previous tab ReTextWindow`tampajPrint ReTextWindow `tampaj dokumentPrint document ReTextWindowPrikaz atampe Print preview ReTextWindowNapustiQuit ReTextWindowDReText %s (koristei PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindow PonoviRedo ReTextWindowU itaj ponovoReload ReTextWindow ZameniReplace ReTextWindowZameni sve Replace all ReTextWindowZameni sa Replace with ReTextWindowSa uvajSave ReTextWindowSa uvaj kaoSave as ReTextWindowSa uvaj fajl Save file ReTextWindow Tra~iSearch ReTextWindow*Alatna traka tra~enjaSearch toolbar ReTextWindowFSa liste izaberite kodiranje fajla:#Select file encoding from the list: ReTextWindowZIzaberite jedan ili viae fajlova za otvaranje#Select one or several files to open ReTextWindow"Postavi kodiranje Set encoding ReTextWindow"Postavi lokalitet Set locale ReTextWindow(Prika~i direktorijumShow directory ReTextWindowJednostavan ali moan ureiva za Markdaun i restruktuirani tekstSintaksa restruktuiranog tekstareStructuredText syntax ReTextWindow ) , ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643654546.0 ReText-7.2.3/locale/retext_sr@latin.ts0000644000175000017500000007555100000000000017334 0ustar00dmitrydmitry ConfigDialog Behavior Ponašanje Automatically save documents Automatski sačuvaj dokumente Automatically open last documents on startup Na početku, automatski otvori poslednje dokumente Restore window geometry Upamti geometriju prozora Open external links in ReText window Otvaraj spoljne veze u ReText prozoru Markdown syntax extensions (comma-separated) Markdaun proširenja sintakse (odvojeno zapetom) Enable synchronized scrolling for Markdown Uključi sinhronizovano klizanje za Markdown Editor Uređivač Highlight current line Istakni trenutnu liniju Show line numbers Prikaži brojeve linija Tab key inserts spaces Tab ubacuje razmake Tabulation width Širina tabulacije Draw vertical line at column Iscrtaj vertikalnu liniju na koloni Interface Sučelje Icon theme name Naziv teme ikona Stylesheet file Fajl rasporeda Help Pomoć Using configuration file at: Number of recent documents Default preview state Line numbers are relative to current line Enable soft wrap Show document stats Hide toolbar Hide tabs bar when there is only one tab Show full path in window title Live preview Trenutni pregled Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (ništa) FileSelectButton Select file to open Izaberite fajl InsertTableDialog Insert table Number of rows Number of columns LocaleDialog Enter locale name (example: en_US) Unesite oznaku lokaliteta (npr. sr_RS) Set as default Postavi kao podrazumevano Proxy No write since last change (add ! to override) Nema upisa od poslednje izmene (dodajte ! da pregazite) Information Podaci ReTextEdit Save image Sačuvaj sliku Images (*.png *.jpg) Slike (*.png *.jpg) Add to dictionary ReTextTab New document Novi dokument Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Ne mogu da raščlanim sadržaj fajla. Proverite da li imate instaliran <a href="%s">neophodan modul</a>! Create missing file? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow File toolbar Fajl alatna traka Edit toolbar Uredi alatna traka Search toolbar Alatna traka traženja New Novo Open Otvori Set encoding Postavi kodiranje Reload Učitaj ponovo Save Sačuvaj Save as Sačuvaj kao Next tab Sledeći jezičak Previous tab Prethodni jezičak Print Štampaj Print preview Prikaz štampe View HTML code Pogledaj HTML kod Change editor font Izmeni font uređivača Change preview font Izmeni font pregleda Find text Nađi tekst Preview Pregled Live preview Trenutni pregled Table editing mode Režim uređivanja tabele FakeVim mode Lažni Vim režim Fullscreen mode Režim punog ekrana Preferences Podešavanja Quit Napusti Undo Poništi Redo Ponovi Copy Kopiraj Cut Iseci Paste Nalepi Enable Uključi Set locale Postavi lokalitet Use WebKit renderer Koristi WebKit iscrtavač Use WebEngine (Chromium) renderer Koristi WebEngine (Chromium) iscrtavač Show directory Prikaži direktorijum Next Sledeće Previous Prethodno Replace Zameni Replace all Zameni sve Close Zatvori Get help online Potražite pomoć na internetu About ReText O ReText-u About Qt O QT-u Bold Podebljano Italic Kurzivno Underline Podvučeno Formatting Formatiranje Symbols Simboli &File &Fajl &Edit &Uređivanje &Help &Pomoć Open recent Otvori nedavne Export Izvezi Spell check Provera pravopisa Default markup Podrazumevana markacija Search Traži Replace with Zameni sa Case sensitively Osetljiv na vel. slova New document Novi dokument Please, save the file somewhere. Sačuvajte fajl negde. Select one or several files to open Izaberite jedan ili više fajlova za otvaranje Supported files Podržani fajlovi All files (*) Svi fajlovi (*) Select file encoding from the list: Sa liste izaberite kodiranje fajla: Plain text (*.txt) Običan tekst (*.txt) %s files Example of final string: Markdown files %s fajlovi Save file Sačuvaj fajl Cannot save to file which is open in another tab! Ne mogu da sačuvam jer je otvoren u drugom jezičku! Cannot save to file because it is read-only! Ne mogu da sačuvam jer je fajl samo za čitanje! Export document to ODT Izvezi dokument u ODT OpenDocument text files (*.odt) OpenDocument tekstualni fajl (*.odt) HTML files (*.html *.htm) HTML fajlovi (*.html *.htm) Export document to PDF Izvezi dokument u PDF PDF files (*.pdf) PDF fajlovi (*.pdf) Print document Štampaj dokument Export document Izvezi dokument Failed to execute the command: Neuspelo izvršenje komande: Alt text Alt tekst URL URL Link text Tekst veze This file has been deleted by other application. Please make sure you save the file before exit. Ovaj fajl je obrisala druga aplikacije. Sačuvajte ga pre nego što izađete. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? Ovaj dokument je izmenila druga aplikacija. Želite li da ga ponovo učitate? (ovo će poništiti sve vaše izmene) If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Ako izaberete da ne učitate ponovo, automatsko čuvanje biće isključeno za ovu sesiju da bi se sprečio gubitak podataka. The document has been modified. Do you want to save your changes? Dokument je izmenjen. Želite li da sačuvate vaše izmene? HTML code HTML kod ReText %s (using PyMarkups %s) ReText %s (koristeći PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText Jednostavan ali moćan uređivač za Markdaun i restruktuirani tekst Author: Dmitry Shachnev, 2011 Autor: Dmitrij Šačnev (Dmitry Shachnev), 2011 Markdown syntax Markdaun sintaksa reStructuredText syntax Sintaksa restruktuiranog teksta Close tab Go to line Insert table Insert images by file path Paste image Move line up Move line down Type the line number Unrecognized paperSize setting "%s". Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_sv.qm0000644000175000017500000003667700000000000016205 0ustar00dmitrydmitry b+dy Yc'gt$ !!zr'+DVgl)(D! bFy%(v_ћr!{ !H#S S4J0mr5t)@*Fr5 6T W9 m'$0BM8pe -d00 E-:u%Xk5/\ϗ&+=°"ϡ ) -dT$)+I%9+>,C~')w&72 s @\ h> j3 lah v*] W $  8/6 3.4E Hz e"IUGKx ˏQ*)  O/.i8hppna de senaste dokumenten automatiskt vid uppstart,Automatically open last documents on startup ConfigDialog4Spara dokument automatisktAutomatically save documents ConfigDialogBeteendeBehavior ConfigDialog8Frvalt frhandsvisningslgeDefault preview state ConfigDialog<Visa vertikal linje vid kolumnDraw vertical line at column ConfigDialogTextredigerareEditor ConfigDialog(Aktivera radbrytningEnable soft wrap ConfigDialogXAktivera synkroniserad rullning fr Markdown*Enable synchronized scrolling for Markdown ConfigDialog HjlpHelp ConfigDialogTDlj flikfltet nr det bara finns en flik(Hide tabs bar when there is only one tab ConfigDialog"Dlj verktygsflt Hide toolbar ConfigDialog&Markera aktuell radHighlight current line ConfigDialogIkon-temaIcon theme name ConfigDialogGrnssnitt Interface ConfigDialogZLinjenummer r i frhllande till aktuell rad)Line numbers are relative to current line ConfigDialog(Live frhandsvisning Live preview ConfigDialogjInsticksmoduler fr Markdown-syntax (kommaseparerade),Markdown syntax extensions (comma-separated) ConfigDialog,Normal frhandsvisningNormal preview ConfigDialog,Antal senaste dokumentNumber of recent documents ConfigDialogLppna externa lnkar i ReText-fnstret$Open external links in ReText window ConfigDialog0terstll fnsterstorlekRestore window geometry ConfigDialog,Visa dokumentstatistikShow document stats ConfigDialog>Visa full skvg i fnstertitelShow full path in window title ConfigDialogVisa radnummerShow line numbers ConfigDialogStilmallStylesheet file ConfigDialog@Konvertera tabbar till blankstegTab key inserts spaces ConfigDialogTabb-breddTabulation width ConfigDialog6Anvnd konfigurationsfilen:Using configuration file at: ConfigDialog(inget)(none)FileDialogButton.Vlj fil som ska ppnasSelect file to openFileSelectButtonInfoga tabell Insert tableInsertTableDialogAntal kolumnerNumber of columnsInsertTableDialogAntal raderNumber of rowsInsertTableDialog>Ange landsnamn (exempel: en_US)"Enter locale name (example: en_US) LocaleDialog"Ange som standardSet as default LocaleDialogInformation InformationProxyIngen verskrift av fil efter senaste ndring (lgg till ! fr att tvinga verskrift).No write since last change (add ! to override)Proxy(Lgg till i ordbokenAdd to dictionary ReTextEdit(Bilder (*.png *.jpg)Images (*.png *.jpg) ReTextEditSpara bild Save image ReTextEdit>Kunde inte skapa filen '%s': %sCould not create file '%s': %s ReTextTabMisslyckades att analysera filinnehllet, kontrollera att du har installerat den <a href="%s">ndvndiga modulen</a>!aCould not parse file contents, check if you have the necessary module installed! ReTextTab"Skapa saknad fil?Create missing file? ReTextTab6Filen kunde inte bli skapadFile could not be created ReTextTabNytt dokument New document ReTextTab\Filen '%s' existerar inte. Vill du skapa den?8The file '%s' does not exist. Do you want to create it? ReTextTab%s filer%s files ReTextWindow&Redigera&Edit ReTextWindow &Arkiv&File ReTextWindow &Hjlp&Help ReTextWindow Om QtAbout Qt ReTextWindowOm ReText About ReText ReTextWindowAlla filer (*) All files (*) ReTextWindowAlt textbildAlt text ReTextWindowBUpphovsman: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindowFetBold ReTextWindowjKan inte spara till fil eftersom den r skrivskyddad!,Cannot save to file because it is read-only! ReTextWindowjKan inte spara till fil som r ppen i en annan flik!1Cannot save to file which is open in another tab! ReTextWindow$SkiftlgesknsligtCase sensitively ReTextWindow:ndra typsnitt fr redigeringChange editor font ReTextWindowJndra typsnitt fr frhandsgranskningChange preview font ReTextWindow StngClose ReTextWindowStng flik Close tab ReTextWindowKopieraCopy ReTextWindowKlipp utCut ReTextWindowStandardtypDefault markup ReTextWindowRedigeringsflt Edit toolbar ReTextWindowAktiveraEnable ReTextWindowExporteraExport ReTextWindow$Exportera dokumentExport document ReTextWindow4Exportera dokument som ODTExport document to ODT ReTextWindow4Exportera dokument som PDFExport document to PDF ReTextWindowLMisslyckades med att utfra kommandot:Failed to execute the command: ReTextWindowFakeVim-lge FakeVim mode ReTextWindowFilverktygsflt File toolbar ReTextWindowHitta ord Find text ReTextWindowFormattering Formatting ReTextWindowFullskrmslgeFullscreen mode ReTextWindowF hjlp onlineGet help online ReTextWindowG till linje Go to line ReTextWindowHTML-kllkod HTML code ReTextWindow8HTML-dokument (*.html *.htm)HTML files (*.html *.htm) ReTextWindowOm du vljer att inte ladda om filen, kommer 'automatisk sparlge' att avaktiveras fr den hr sessionen fr att frhindra frlust av data.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindow4Infoga bilder efter skvgInsert images by file path ReTextWindowInfoga tabell Insert table ReTextWindow KursivItalic ReTextWindowLnktext Link text ReTextWindow.Live frhandsgranskning Live preview ReTextWindowMarkdown-syntaxMarkdown syntax ReTextWindow Flytta linje nerMove line down ReTextWindow Flytta linje upp Move line up ReTextWindowNyttNew ReTextWindowNytt dokument New document ReTextWindow NstaNext ReTextWindowNsta flikNext tab ReTextWindow ppnaOpen ReTextWindowppna senaste Open recent ReTextWindow<OpenDocument textfiler (*.odt)OpenDocument text files (*.odt) ReTextWindow"PDF-filer (*.pdf)PDF files (*.pdf) ReTextWindowKlistra inPaste ReTextWindowKlistra in bild Paste image ReTextWindow Ren text (*.txt)Plain text (*.txt) ReTextWindow,Vnligen, spara filen. Please, save the file somewhere. ReTextWindowInstllningar Preferences ReTextWindowFrhandsgranskaPreview ReTextWindowFregendePrevious ReTextWindowFregende flik Previous tab ReTextWindowSkriv utPrint ReTextWindow"Skriv ut dokumentPrint document ReTextWindow0Frhandsgranska utskrift Print preview ReTextWindowAvslutaQuit ReTextWindowBReText %s (anvnder PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindow Gr omRedo ReTextWindowLadda omReload ReTextWindow ErsttReplace ReTextWindowErstt alla Replace all ReTextWindowErstt med Replace with ReTextWindow SparaSave ReTextWindowSpara somSave as ReTextWindowSpara fil Save file ReTextWindowSkSearch ReTextWindowSkfltSearch toolbar ReTextWindow8Vlj filkodning frn listan:#Select file encoding from the list: ReTextWindowFVlj en eller flera filer att ppna#Select one or several files to open ReTextWindowHVlj en eller flera bilder att ppna$Select one or several images to open ReTextWindowTeckenkodning Set encoding ReTextWindow"Ange lokalisering Set locale ReTextWindowVisa ordbokShow directory ReTextWindowEnkel men kraftfull textredigerare fr Markdown och reStructuredText ConfigDialog Using configuration file at: Använd konfigurationsfilen: Behavior Beteende Automatically save documents Spara dokument automatiskt Automatically open last documents on startup Öppna de senaste dokumenten automatiskt vid uppstart Number of recent documents Antal senaste dokument Restore window geometry Återställ fönsterstorlek Default preview state Förvalt förhandsvisningsläge Open external links in ReText window Öppna externa länkar i ReText-fönstret Markdown syntax extensions (comma-separated) Insticksmoduler för Markdown-syntax (kommaseparerade) Enable synchronized scrolling for Markdown Aktivera synkroniserad rullning för Markdown Editor Textredigerare Highlight current line Markera aktuell rad Show line numbers Visa radnummer Line numbers are relative to current line Linjenummer är i förhållande till aktuell rad Tab key inserts spaces Konvertera tabbar till blanksteg Tabulation width Tabb-bredd Draw vertical line at column Visa vertikal linje vid kolumn Enable soft wrap Aktivera radbrytning Show document stats Visa dokumentstatistik Interface Gränssnitt Hide toolbar Dölj verktygsfält Icon theme name Ikon-tema Stylesheet file Stilmall Hide tabs bar when there is only one tab Dölj flikfältet när det bara finns en flik Show full path in window title Visa full sökväg i fönstertitel Help Hjälp Live preview Live förhandsvisning Normal preview Normal förhandsvisning Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (inget) FileSelectButton Select file to open Välj fil som ska öppnas InsertTableDialog Insert table Infoga tabell Number of rows Antal rader Number of columns Antal kolumner LocaleDialog Enter locale name (example: en_US) Ange landsnamn (exempel: en_US) Set as default Ange som standard Proxy No write since last change (add ! to override) Ingen överskrift av fil efter senaste ändring (lägg till ! för att tvinga överskrift) Information Information ReTextEdit Add to dictionary Lägg till i ordboken Save image Spara bild Images (*.png *.jpg) Bilder (*.png *.jpg) ReTextTab New document Nytt dokument Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Misslyckades att analysera filinnehållet, kontrollera att du har installerat den <a href="%s">nödvändiga modulen</a>! Create missing file? Skapa saknad fil? The file '%s' does not exist. Do you want to create it? Filen '%s' existerar inte. Vill du skapa den? File could not be created Filen kunde inte bli skapad Could not create file '%s': %s Kunde inte skapa filen '%s': %s ReTextWindow File toolbar Filverktygsfält Edit toolbar Redigeringsfält Search toolbar Sökfält New Nytt Open Öppna Set encoding Teckenkodning Reload Ladda om Save Spara Save as Spara som Next tab Nästa flik Previous tab Föregående flik Close tab Stäng flik Print Skriv ut Print preview Förhandsgranska utskrift View HTML code Visa HTML-kod Change editor font Ändra typsnitt för redigering Change preview font Ändra typsnitt för förhandsgranskning Find text Hitta ord Go to line Gå till linje Preview Förhandsgranska Live preview Live förhandsgranskning Insert table Infoga tabell Table editing mode Tabellredigeringsläge Insert images by file path Infoga bilder efter sökväg FakeVim mode FakeVim-läge Fullscreen mode Fullskärmsläge Preferences Inställningar Quit Avsluta Undo Ångra Redo Gör om Copy Kopiera Cut Klipp ut Paste Klistra in Paste image Klistra in bild Move line up Flytta linje upp Move line down Flytta linje ner Enable Aktivera Set locale Ange lokalisering Use WebKit renderer Använd WebKit som renderare Use WebEngine (Chromium) renderer Använd WebEngine (Chromium) som renderare Show directory Visa ordbok Next Nästa Previous Föregående Replace Ersätt Replace all Ersätt alla Close Stäng Get help online Få hjälp online About ReText Om ReText About Qt Om Qt Bold Fet Italic Kursiv Underline Understrykning Formatting Formattering Symbols Symboler Open recent Öppna senaste Export Exportera Spell check Stavningskontroll Default markup Standardtyp Search Sök Replace with Ersätt med Case sensitively Skiftlägeskänsligt New document Nytt dokument Type the line number Skriv ut radnummer Please, save the file somewhere. Vänligen, spara filen. Select one or several files to open Välj en eller flera filer att öppna Supported files Stödda filer All files (*) Alla filer (*) Select file encoding from the list: Välj filkodning från listan: Plain text (*.txt) Ren text (*.txt) %s files Example of final string: Markdown files %s filer Save file Spara fil Cannot save to file which is open in another tab! Kan inte spara till fil som är öppen i en annan flik! Cannot save to file because it is read-only! Kan inte spara till fil eftersom den är skrivskyddad! Export document to ODT Exportera dokument som ODT OpenDocument text files (*.odt) OpenDocument textfiler (*.odt) HTML files (*.html *.htm) HTML-dokument (*.html *.htm) Unrecognized paperSize setting "%s". Kan inte läsa av inställningar för pappersstorlek "%s" Export document to PDF Exportera dokument som PDF PDF files (*.pdf) PDF-filer (*.pdf) Print document Skriv ut dokument Export document Exportera dokument Failed to execute the command: Misslyckades med att utföra kommandot: Alt text Alt textbild URL Webbadress URL Link text Länktext This file has been deleted by other application. Please make sure you save the file before exit. Den här filen har raderats av en annan applikation. Se till att du sparar filen innan du avslutar. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? Detta dokument har ändrats av en annan applikation. Vill du ladda om filen (det här förkastar alla dina ändringar)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Om du väljer att inte ladda om filen, kommer 'automatisk sparläge' att avaktiveras för den här sessionen för att förhindra förlust av data. The document has been modified. Do you want to save your changes? Dokumentet har ändrats. Vill du spara dina ändringar? HTML code HTML-källkod Select one or several images to open Välj en eller flera bilder att öppna ReText %s (using PyMarkups %s) ReText %s (använder PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText Enkel men kraftfull textredigerare för Markdown och reStructuredText Author: Dmitry Shachnev, 2011 Upphovsman: Dmitry Shachnev, 2011 Markdown syntax Markdown-syntax reStructuredText syntax reStructuredText-syntax &File &Arkiv &Edit &Redigera &Help &Hjälp TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters %d ord | %d alfanumeriska tecken | %d tecken totalt main Open the files in preview mode Öppna filerna i förhandsvisningsläge Create a new window even if there is an existing one Skapa ett nytt fönster även om det finns ett befintligt List of files to open Lista över filer att öppna ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_uk.qm0000644000175000017500000003220000000000000016146 0ustar00dmitrydmitrydb$dy ]Yc'gtzr DV/gVl)"8D!z by%v #S4J**mBr5t#$Fr./R '0Bz 0 E&k f5)ϗ N%5°Kϡ #} &T)0+I(9%~/'#E 7+  @ h> la v$9 $ /.3(zeI U/O*)  O)f.|i0Uh2B><0B8G=> 2V4:@820B8 >AB0==V 4>:C<5=B8 ?@8 70?CA:C,Automatically open last documents on startup ConfigDialog>2B><0B8G=> 715@V30B8 4>:C<5=B8Automatically save documents ConfigDialog>254V=:0Behavior ConfigDialogL0;N20B8 25@B8:0;L=C ;V=VN C AB>2?G8:CDraw vertical line at column ConfigDialog 5403C20B8Editor ConfigDialog 5@5=>A8B8 B5:ABEnable soft wrap ConfigDialogR#2V<:=CB8 A8=E@>==5 3>@B0==O 4;O Markdown*Enable synchronized scrolling for Markdown ConfigDialog>2V4:0Help ConfigDialog.84V;OB8 ?>B>G=89 @O4>:Highlight current line ConfigDialog2AB0=>28B8 B5<C ?V:B>3@0<Icon theme name ConfigDialog=B5@D59A Interface ConfigDialogJ>G8=0B8 =C<5@0FVN @O4:V2 7 ?>B>G=>3>)Line numbers are relative to current line ConfigDialog&4=>G0A=89 ?5@53;O4 Live preview ConfigDialogb >7H8@5==O A8=B0:A8AC Markdown (@>74V;5=V :><0<8),Markdown syntax extensions (comma-separated) ConfigDialogTV4:@8BV 7>2=VH=V ?>A8;0==O C 2V:=V ReText$Open external links in ReText window ConfigDialog8V4=>2;N20B8 35><5B@VN 2V:=0Restore window geometry ConfigDialog>>:07C20B8 AB0B8AB8:C 4>:C<5=B0Show document stats ConfigDialog0>:07C20B8 =><5@8 @O4:V2Show line numbers ConfigDialog$09; AB8;N QtStylesheet file ConfigDialog8;02VH0 Tab 2AB02;OT ?@>1V;8Tab key inserts spaces ConfigDialog$(8@8=0 B01C;N20==OTabulation width ConfigDialogL8:>@8AB>2CNBLAO =0;0HBC20==O 7 D09;C:Using configuration file at: ConfigDialog(=5 >1@0=89)(none)FileDialogButton6815@VBL D09; 4;O 2V4:@8BBOSelect file to openFileSelectButtonF254VBL :>4 <>28 (=0?@8:;04: uk_UA)"Enter locale name (example: en_US) LocaleDialog "8?>2>Set as default LocaleDialog=D>@<0FVO InformationProxy\ =5715@565=V 7<V=8 (4>409B5 ! 4;O =5EBC20==O).No write since last change (add ! to override)Proxy$>40B8 4> A;>2=8:0Add to dictionary ReTextEdit0>1@065==O (*.png *.jpg)Images (*.png *.jpg) ReTextEdit&15@53B8 7>1@065==O Save image ReTextEdit5 240;>AO >?@0FN20B8 2<VAB D09;C, ?5@5:>=09B5AO, I> 2AB0=>2;5=> <a href="%s">=5>1EV4=89 <>4C;L</a>!aCould not parse file contents, check if you have the necessary module installed! ReTextTab>289 4>:C<5=B New document ReTextTab$09;8 %s%s files ReTextWindow& 5403C20==O&Edit ReTextWindow &$09;&File ReTextWindow&>2V4:0&Help ReTextWindow @> QtAbout Qt ReTextWindow@> ReText About ReText ReTextWindowAV D09;8 (*) All files (*) ReTextWindow(;LB5@=0B82=89 B5:ABAlt text ReTextWindow82B>@: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindow 8@=89Bold ReTextWindowX5<>6;82> 715@53B8, D09; BV;L:8 4;O G8B0==O!,Cannot save to file because it is read-only! ReTextWindowd5<>6;82> 715@53B8 D09; 2V4:@8B89 2 V=HV9 2:;04FV!1Cannot save to file which is open in another tab! ReTextWindow"@0EC20B8 @53VAB@Case sensitively ReTextWindow.<V=8B8 H@8DB @540:B>@0Change editor font ReTextWindow.<V=8B8 H@8DB ?5@53;O4CChange preview font ReTextWindow0:@8B8Close ReTextWindow0:@8B8 2:;04:C Close tab ReTextWindow!:>?VN20B8Copy ReTextWindow8@V70B8Cut ReTextWindow"8?>20 @>7<VB:0Default markup ReTextWindow$0=5;L @5403C20==O Edit toolbar ReTextWindow#2V<:=CB8Enable ReTextWindow:A?>@BExport ReTextWindow*:A?>@BC20B8 4>:C<5=BExport document ReTextWindow&:A?>@BC20B8 O: ODTExport document to ODT ReTextWindow&:A?>@BC20B8 O: PDFExport document to PDF ReTextWindow<><8;:0 ?@8 28:>=0==V :><0=48:Failed to execute the command: ReTextWindow 568< FakeVim FakeVim mode ReTextWindow0=5;L D09;C File toolbar ReTextWindow=09B8 B5:AB Find text ReTextWindow$>@<0BC20==O Formatting ReTextWindow0 C25AL 5:@0=Fullscreen mode ReTextWindow2B@8<0B8 4>2V4:C 2 <5@56VGet help online ReTextWindow>4 HTML HTML code ReTextWindow2$09;8 HTML (*.html *.htm)HTML files (*.html *.htm) ReTextWindow/:I> 28 28@VH8B5 =5 ?5@57020=B06C20B8 D09;, @568< 02B><0B8G=>3> 715@565==O 1C45 28<:=5=> 4;O FL>3> A50=AC 7 <5B>N ?>?5@5465==O 2B@0B8 40=8E.lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindow C@A82Italic ReTextWindow"5:AB ?>A8;0==O Link text ReTextWindow&4=>G0A=89 ?5@53;O4 Live preview ReTextWindow$!8=B0:A8A MarkdownMarkdown syntax ReTextWindow&>AC=CB8 @O4>: 2=87Move line down ReTextWindow(>AC=CB8 @O4>: 23>@C Move line up ReTextWindow >289New ReTextWindow>289 4>:C<5=B New document ReTextWindow0ABC?=5Next ReTextWindow 0ABC?=0 2:;04:0Next tab ReTextWindowV4:@8B8Open ReTextWindow"V4:@8B8 >AB0==V9 Open recent ReTextWindowF"5:AB>2V D09;8 OpenDocument (*.odt)OpenDocument text files (*.odt) ReTextWindow"$09;8 PDF (*.pdf)PDF files (*.pdf) ReTextWindowAB028B8Paste ReTextWindow*@>AB89 B5:AB (*.txt)Plain text (*.txt) ReTextWindowDC4L ;0A:0, 715@56VBL :C48AL D09;. Please, save the file somewhere. ReTextWindow0;0HBC20==O Preferences ReTextWindow5@53;O4Preview ReTextWindow>?5@54=TPrevious ReTextWindow">?5@54=O 2:;04:0 Previous tab ReTextWindow@C:C20B8Print ReTextWindow$@C:C20B8 4>:C<5=BPrint document ReTextWindow@>?5@54=V9 ?5@53;O4 ?5@54 4@C:>< Print preview ReTextWindow 89B8Quit ReTextWindowJReText %s (28:>@8AB>2CT PyMarkups %s)ReText %s (using PyMarkups %s) ReTextWindow>2B>@8B8 4VNRedo ReTextWindow5@57020=B068B8Reload ReTextWindow0<V=8B8Replace ReTextWindow0<V=8B8 2A5 Replace all ReTextWindow0<V=8B8 =0 Replace with ReTextWindow15@53B8Save ReTextWindow15@53B8 O:Save as ReTextWindow15@53B8 D09; Save file ReTextWindow >HC:Search ReTextWindow0=5;L ?>HC:CSearch toolbar ReTextWindowL815@VBL <5B>4C :>4C20==O V7 ?5@5;V:C:#Select file encoding from the list: ReTextWindow>815@VBL >48= 01> :V;L:0 D09;V2#Select one or several files to open ReTextWindow(AB0=>28B8 :>4C20==O Set encoding ReTextWindow81@0B8 <>2C Set locale ReTextWindow 5@53;O=CB8 B5:CShow directory ReTextWindow@>AB89 0;5 ?>BC6=89 B5:AB>289 @540:B>@ 4;O Markdown B0 reStructuredText ?8AC Spell check ReTextWindow,$09;8 I> ?V4B@8<CNBLAOSupported files ReTextWindow!8<2>;8Symbols ReTextWindow2 568< @5403C20==O B01;8FLTable editing mode ReTextWindowb>:C<5=B 1C;> 7<V=5=>. 060TB5 715@53B8 FV 7<V=8?AThe document has been modified. Do you want to save your changes? ReTextWindow&59 4>:C<5=B 1C2 7<V=5=89 V=H8< 70AB>AC=:><. 060TB5 ?5@57020=B068B8 D09; V 2B@0B8B8 =5715@565=V 7<V=8? {This document has been modified by other application. Do you want to reload the file (this will discard all your changes)?  ReTextWindow&59 D09; 1C2 2840;5=89 V=H8< 4>40B:><. C4L ;0A:0, ?5@5:>=09B5AO ?5@54 28E>4><, I> 28 715@53;8 D09;.`This file has been deleted by other application. Please make sure you save the file before exit. ReTextWindowURLURL ReTextWindowV4:@5A;5==O Underline ReTextWindow!:0AC20B8 4VNUndo ReTextWindowB5@>7?V7=0=89 @>7<V@ ?0?5@C "%s".$Unrecognized paperSize setting "%s". ReTextWindowH8:>@8AB>2C20B8 WebEngine (Chromium)!Use WebEngine (Chromium) renderer ReTextWindow,8:>@8AB>2C20B8 WebKitUse WebKit renderer ReTextWindow(5@53;O=CB8 :>4 HTMLView HTML code ReTextWindow4!8=B0:A8A reStructuredTextreStructuredText syntax ReTextWindowd%d A;V2 | %d F8D@>1C:25==8E A8<2>;V2 | %d A8<2>;V2%d w | %d a | %d c TextInfoArea ) , ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643654553.0 ReText-7.2.3/locale/retext_uk.ts0000644000175000017500000010240300000000000016162 0ustar00dmitrydmitry ConfigDialog Using configuration file at: Використовуються налаштування з файлу: Behavior Поведінка Automatically save documents Автоматично зберігати документи Automatically open last documents on startup Автоматично відкривати останні документи при запуску Restore window geometry Відновлювати геометрію вікна Open external links in ReText window Відкриті зовнішні посилання у вікні ReText Markdown syntax extensions (comma-separated) Розширення синтаксису Markdown (розділені комами) Enable synchronized scrolling for Markdown Увімкнути синхронне гортання для Markdown Editor Редагувати Highlight current line Виділяти поточний рядок Show line numbers Показувати номери рядків Line numbers are relative to current line Починати нумерацію рядків з поточного Tab key inserts spaces Клавіша Tab вставляє пробіли Tabulation width Ширина табулювання Draw vertical line at column Малювати вертикальну лінію у стовпчику Enable soft wrap Переносити текст Show document stats Показувати статистику документа Interface Інтерфейс Icon theme name Встановити тему піктограм Stylesheet file Файл стилю Qt Help Довідка Number of recent documents Default preview state Hide toolbar Hide tabs bar when there is only one tab Show full path in window title Live preview Одночасний перегляд Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) (не обраний) FileSelectButton Select file to open Виберіть файл для відкриття InsertTableDialog Insert table Number of rows Number of columns LocaleDialog Enter locale name (example: en_US) Введіть код мови (наприклад: uk_UA) Set as default Типово Proxy No write since last change (add ! to override) Є незбережені зміни (додайте ! для нехтування) Information Інформація ReTextEdit Add to dictionary Додати до словника Save image Зберегти зображення Images (*.png *.jpg) Зображення (*.png *.jpg) ReTextTab New document Новий документ Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Не вдалося опрацювати вміст файлу, переконайтеся, що встановлено <a href="%s">необхідний модуль</a>! Create missing file? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow File toolbar Панель файлу Edit toolbar Панель редагування Search toolbar Панель пошуку New Новий Open Відкрити Set encoding Встановити кодування Reload Перезавантажити Save Зберегти Save as Зберегти як Next tab Наступна вкладка Previous tab Попередня вкладка Close tab Закрити вкладку Print Друкувати Print preview Попередній перегляд перед друком View HTML code Переглянути код HTML Change editor font Змінити шрифт редактора Change preview font Змінити шрифт перегляду Find text Знайти текст Preview Перегляд Live preview Одночасний перегляд Table editing mode Режим редагування таблиць FakeVim mode Режим FakeVim Fullscreen mode На увесь екран Preferences Налаштування Quit Вийти Undo Скасувати дію Redo Повторити дію Copy Скопіювати Cut Вирізати Paste Вставити Move line up Посунути рядок вгору Move line down Посунути рядок вниз Enable Увімкнути Set locale Вибрати мову Use WebKit renderer Використовувати WebKit Use WebEngine (Chromium) renderer Використовувати WebEngine (Chromium) Show directory Переглянути теку Next Наступне Previous Попереднє Replace Замінити Replace all Замінити все Close Закрити Get help online Отримати довідку в мережі About ReText Про ReText About Qt Про Qt Bold Жирний Italic Курсив Underline Підкреслення Formatting Форматування Symbols Символи &File &Файл &Edit &Редагування &Help &Довідка Open recent Відкрити останній Export Експорт Spell check Перевірка правопису Default markup Типова розмітка Search Пошук Replace with Замінити на Case sensitively Врахувати регістр New document Новий документ Please, save the file somewhere. Будь ласка, збережіть кудись файл. Select one or several files to open Виберіть один або кілька файлів Supported files Файли що підтримуються All files (*) Всі файли (*) Select file encoding from the list: Виберіть методу кодування із переліку: Plain text (*.txt) Простий текст (*.txt) %s files Example of final string: Markdown files Файли %s Save file Зберегти файл Cannot save to file which is open in another tab! Неможливо зберегти файл відкритий в іншій вкладці! Cannot save to file because it is read-only! Неможливо зберегти, файл тільки для читання! Export document to ODT Експортувати як ODT OpenDocument text files (*.odt) Текстові файли OpenDocument (*.odt) HTML files (*.html *.htm) Файли HTML (*.html *.htm) Unrecognized paperSize setting "%s". Нерозпізнаний розмір паперу "%s". Export document to PDF Експортувати як PDF PDF files (*.pdf) Файли PDF (*.pdf) Print document Друкувати документ Export document Експортувати документ Failed to execute the command: Помилка при виконанні команди: Alt text Альтернативний текст URL URL Link text Текст посилання This file has been deleted by other application. Please make sure you save the file before exit. Цей файл був видалений іншим додатком. Будь ласка, переконайтеся перед виходом, що ви зберегли файл. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? Цей документ був змінений іншим застосунком. Бажаєте перезавантажити файл і втратити незбережені зміни? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Якщо ви вирішите не перезавантажувати файл, режим автоматичного збереження буде вимкнено для цього сеансу з метою попередження втрати даних. The document has been modified. Do you want to save your changes? Документ було змінено. Бажаєте зберегти ці зміни? HTML code Код HTML ReText %s (using PyMarkups %s) ReText %s (використовує PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText Простий але потужний текстовий редактор для Markdown та reStructuredText Author: Dmitry Shachnev, 2011 Автор: Dmitry Shachnev, 2011 Markdown syntax Синтаксис Markdown reStructuredText syntax Синтаксис reStructuredText Go to line Insert table Paste image Type the line number Insert images by file path Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters %d слів | %d цифробуквенних символів | %d символів main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_zh_CN.qm0000644000175000017500000002743400000000000016545 0ustar00dmitrydmitryb dy Yc'gt 8zLrDVgx ul)D! by%3v^ћrF #S/4J$m,r5tSko Fr'f(o W9 r'0B>M)e L-dC0 E"J:u[k 5#ϗe!°&ϡ  "T9)V+I9!^>! ~'7%  2 @ h> j3 la v > W $$ - )/(,3#a4Eh% BzeI UGKxUˏ0*)  O$>.i*T/ReRbS_N NN*ehc,Automatically open last documents on startup ConfigDialog RO[XeNAutomatically save documents ConfigDialogLN:Behavior ConfigDialogQIh~ Cursor Line ConfigDialog ؋N k!r`Default preview state ConfigDialogykbDisabled ConfigDialogu;QWvuL~Draw vertical line at column ConfigDialogEditor ConfigDialog T/u(oSEnable soft wrap ConfigDialog*[Markdown_T/NvT kenR*Enable synchronized scrolling for Markdown ConfigDialog^.RHelp ConfigDialogSg NN* ySaeϐ ySah(Hide tabs bar when there is only one tab ConfigDialog hh Hide toolbar ConfigDialogNf>y:_SRMLHighlight current line ConfigDialog VhN;T yIcon theme name ConfigDialogX Increment ConfigDialogNNuLb Interface ConfigDialogLSN_SRMLvQs)Line numbers are relative to current line ConfigDialog[e Live preview ConfigDialog(Markdown lbi\U (SR),Markdown syntax extensions (comma-separated) ConfigDialogkc^8Normal preview ConfigDialog geNepNumber of recent documents ConfigDialog$W( ReText zSN-bS_Yc$Open external links in ReText window ConfigDialog g ^Rhj!_Ordered list mode ConfigDialogY Repeat ConfigDialog`bY zSOMnY'\Restore window geometry ConfigDialogf>y:eNY9~gShow directory tree ConfigDialogf>y:ehc~ߋO`oShow document stats ConfigDialogzShf>y:Qh_Show full path in window title ConfigDialogf>y:LSShow line numbers ConfigDialog h7_heNStylesheet file ConfigDialogOu( zzh< fcb TabTab key inserts spaces ConfigDialogTab .[^Tabulation width ConfigDialogOu(MneNUsing configuration file at: ConfigDialog]O\v_UWorking directory ConfigDialogS~ Wrapped Line ConfigDialog b鉁bS_vv_USelect directory to openDirectorySelectButtone (none)FileDialogButtonbS_eNSelect file to openFileSelectButtoncQehh< Insert tableInsertTableDialogRepNumber of columnsInsertTableDialogLepNumber of rowsInsertTableDialog$QeT y (OY: zh_CN)"Enter locale name (example: en_US) LocaleDialogN:؋Set as default LocaleDialogO`o InformationProxy&]Oe9OF\g*O[XSu( ! _:R6bgL .No write since last change (add ! to override)Proxy mRR0QxAdd to dictionary ReTextEdit VrG (*.png *.jpg)Images (*.png *.jpg) ReTextEditO[XVrG Save image ReTextEditelR^eN '%s': %sCould not create file '%s': %s ReTextTabRN |4eNQ[ hgN f/T&[N <a href="%s">_ʼnj!WW</a> aCould not parse file contents, check if you have the necessary module installed! ReTextTabR^N"Y1eNCreate missing file? ReTextTab elR^eNFile could not be created ReTextTabe^ehc New document ReTextTab'%s' N [XW(0 f/T&R^8The file '%s' does not exist. Do you want to create it? ReTextTab %s eN%s files ReTextWindow (&E)&Edit ReTextWindow eN(&F)&File ReTextWindow ^.R(&H)&Help ReTextWindow QsN QtAbout Qt ReTextWindowQsN ReText About ReText ReTextWindowQheN (*) All files (*) ReTextWindowfcbeg,Alt text ReTextWindow2O\: Dmitry Shachnev, 2011Author: Dmitry Shachnev, 2011 ReTextWindow|OSBold ReTextWindow&N O[XeNVN:_SRMeNbeNY9S,Cannot save to file because it is read-only! ReTextWindow"]W(Qv[h{~YbS_ _SRMelO[X01Cannot save to file which is open in another tab! ReTextWindow [Y'\QeOaCase sensitively ReTextWindowOe9Vh[WOSChange editor font ReTextWindow Oe9[WOSChange preview font ReTextWindowQsClose ReTextWindowQsh{~ Close tab ReTextWindowY R6Copy ReTextWindowRjRCut ReTextWindow ؋j!_Default markup ReTextWindow ]Qwh Edit toolbar ReTextWindowom;Enable ReTextWindow[QExport ReTextWindow[QeNExport document ReTextWindow[QN: ODT ehcExport document to ODT ReTextWindow[Qh<_N: PDFExport document to PDF ReTextWindowN bgLT}N:Failed to execute the command: ReTextWindowFakeVim j!_ FakeVim mode ReTextWindow eN]Qwh File toolbar ReTextWindowgb~eg, Find text ReTextWindow[W{&h7_ Formatting ReTextWindowQh\Oj!_Fullscreen mode ReTextWindowW(~S^.Re Get help online ReTextWindowR0LY Go to line ReTextWindowHTML Nx HTML code ReTextWindow,HTML eN (*.html *.htm)HTML files (*.html *.htm) ReTextWindow@YgN e}QeeN N:2kbepcnN"Y1 \yu(OvRO[Xj!_0lIf you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. ReTextWindoweN_cQeVrGInsert images by file path ReTextWindowcQehh< Insert table ReTextWindoweOSItalic ReTextWindowceg, Link text ReTextWindow[e Live preview ReTextWindowMarkdown lMarkdown syntax ReTextWindowN yMove line down ReTextWindowN y Move line up ReTextWindowe^New ReTextWindoweeN New document ReTextWindowN NyNext ReTextWindow N NN*h{~Next tab ReTextWindowbS_Open ReTextWindow bS_gOu( Open recent ReTextWindow2OpenDocument eg,eN (*.odt)OpenDocument text files (*.odt) ReTextWindowPDF eN (*.pdf)PDF files (*.pdf) ReTextWindow|4Paste ReTextWindow|4VrG Paste image ReTextWindowfneg,ehc (*.txt)Plain text (*.txt) ReTextWindowO[XR0R+Y Please, save the file somewhere. ReTextWindow N*NPOY}[ Preferences ReTextWindowPreview ReTextWindowN NyPrevious ReTextWindow N NN*h{~ Previous tab ReTextWindowbSSpPrint ReTextWindowbSSpeNPrint document ReTextWindowbSSp Print preview ReTextWindowQQuit ReTextWindow4ReText %sOu( PyMarkups %s ReText %s (using PyMarkups %s) ReTextWindowPZRedo ReTextWindoweR}Reload ReTextWindowfcbReplace ReTextWindowfcbb@g  Replace all ReTextWindowfcbN: Replace with ReTextWindowO[XSave ReTextWindowS[XN:Save as ReTextWindowO[XeN Save file ReTextWindowd}"Search ReTextWindow d}"]QwhSearch toolbar ReTextWindowNRhN- beNxe_#Select file encoding from the list: ReTextWindow bNN*bYN*eNbS_#Select one or several files to open ReTextWindow b鉁bS_vVrG$Select one or several images to open ReTextWindowneg,xh<_ Set encoding ReTextWindow buLb Set locale ReTextWindow f>y:eNY9Show directory ReTextWindowJ{SUeHv Markdown N ReStructuredText Vh__SRMb@g Oe9 T {This document has been modified by other application. Do you want to reload the file (this will discard all your changes)?  ReTextWindow.eN]Qv[z ^R d0 xnW(QRMO[X0`This file has been deleted by other application. Please make sure you save the file before exit. ReTextWindowQeep[WType the line number ReTextWindowcURL ReTextWindowN R~ Underline ReTextWindowSmUndo ReTextWindow elՋR+v~_ Y'\n "%s"$Unrecognized paperSize setting "%s". ReTextWindow8Ou( WebEngine (Chromium) n2gVh!Use WebEngine (Chromium) renderer ReTextWindowOu( WebKit n2gUse WebKit renderer ReTextWindowgw HTML NxView HTML code ReTextWindow&reStructuredText lreStructuredText syntax ReTextWindow$%d w | %d a | %d c%d w | %d a | %d c TextInfoAreaR^NN*ezS4Create a new window even if there is an existing onemain_bS_veNRhList of files to openmainW(j!_N bS_eNOpen the files in preview modemain././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643654555.0 ReText-7.2.3/locale/retext_zh_CN.ts0000644000175000017500000007505100000000000016554 0ustar00dmitrydmitry ConfigDialog Using configuration file at: 使用配置文件: Behavior 行为 Automatically save documents 自动保存文件 Automatically open last documents on startup 启动时自动打开上一个文档 Number of recent documents 最近文件数 Restore window geometry 恢复窗口位置大小 Default preview state 默认上次状态 Open external links in ReText window 在 ReText 窗口中打开外部链接 Markdown syntax extensions (comma-separated) Markdown 语法扩展 (逗号分隔) Enable synchronized scrolling for Markdown 对Markdown开启编辑与预览的同步滚动 Editor 编辑 Highlight current line 高亮显示当前行 Show line numbers 显示行号 Line numbers are relative to current line 行号与当前行相关 Tab key inserts spaces 使用 空格 替换 Tab Tabulation width Tab 键宽度 Draw vertical line at column 画出垂直边界线 Enable soft wrap 启用软包装 Show document stats 显示文档统计信息 Ordered list mode 有序列表模式 Interface 交互界面 Hide toolbar 隐藏标题栏 Icon theme name 图标主题名称 Stylesheet file 样式表文件 Hide tabs bar when there is only one tab 只有一个选项卡时隐藏选项卡栏 Show full path in window title 窗口标题显示全部路径 Show directory tree 显示文件夹结构 Working directory 工作目录 Help 帮助 Live preview 实时预览 Normal preview 正常预览 Disabled 禁止 Cursor Line 光标线 Wrapped Line 包装线 Increment 增量 Repeat 重复 DirectorySelectButton Select directory to open 选择要打开的目录 FileDialogButton (none) (无) FileSelectButton Select file to open 打开文件 InsertTableDialog Insert table 插入表格 Number of rows 行数 Number of columns 列数 LocaleDialog Enter locale name (example: en_US) 输入语言名称 (例如: zh_CN) Set as default 设为默认 Proxy No write since last change (add ! to override) 已修改但尚未保存(可用 ! 强制执行) Information 信息 ReTextEdit Add to dictionary 添加到词典 Save image 保存图片 Images (*.png *.jpg) 图片 (*.png *.jpg) ReTextTab New document 新建文档 Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! 不能粘贴文件内容,检查下是否安装了 <a href="%s">必要模块</a> ! Create missing file? 创建丢失文件? The file '%s' does not exist. Do you want to create it? '%s' 不存在。 是否创建? File could not be created 无法创建文件 Could not create file '%s': %s 无法创建文件 '%s': %s ReTextWindow File toolbar 文件工具栏 Edit toolbar 编辑工具栏 Search toolbar 搜索工具栏 New 新建 Open 打开 Set encoding 设置文本编码格式 Reload 重新加载 Save 保存 Save as 另存为 Next tab 下一个标签 Previous tab 上一个标签 Close tab 关闭标签 Print 打印 Print preview 打印预览 View HTML code 查看 HTML 代码 Change editor font 修改编辑器字体 Change preview font 修改预览字体 Find text 查找文本 Go to line 到行处 Preview 预览 Live preview 实时预览 Insert table 插入表格 Table editing mode 表格编辑模式 Insert images by file path 通过文件路径插入图片 FakeVim mode FakeVim 模式 Fullscreen mode 全屏模式 Preferences 个人偏好设定 Quit 退出 Undo 取消 Redo 重做 Copy 复制 Cut 剪切 Paste 粘贴 Paste image 粘贴图片 Move line up 上移 Move line down 下移 Enable 激活 Set locale 选择界面语言 Use WebKit renderer 使用 WebKit 渲染 Use WebEngine (Chromium) renderer 使用 WebEngine (Chromium) 渲染器 Show directory 显示文件夹 Next 下一项 Previous 上一项 Replace 替换 Replace all 替换所有 Close 关闭 Get help online 在线获取帮助(英文) About ReText 关于 ReText About Qt 关于 Qt Bold 粗体 Italic 斜体 Underline 下划线 Formatting 字符样式 Symbols 符号 &File 文件(&F) &Edit 编辑(&E) &Help 帮助(&H) Open recent 打开最近使用 Export 导出 Spell check 拼写检查 Default markup 默认编辑模式 Search 搜索 Replace with 替换为 Case sensitively 对大小写敏感 New document 新文件 Type the line number 输入数字 Please, save the file somewhere. 请保存到别处! Select one or several files to open 选择一个或多个文件打开 Supported files 支持的文件类型 All files (*) 全部文件 (*) Select file encoding from the list: 从列表中选择文件编码方式 Plain text (*.txt) 普通文本文档 (*.txt) %s files Example of final string: Markdown files %s 文件 Save file 保存文件 Cannot save to file which is open in another tab! 已在其它标签处打开,当前无法保存。 Cannot save to file because it is read-only! 不能保存文件因为当前文件或文件夹只读! Export document to ODT 导出为 ODT 文档 OpenDocument text files (*.odt) OpenDocument 文本文件 (*.odt) HTML files (*.html *.htm) HTML 文件 (*.html *.htm) Unrecognized paperSize setting "%s". 无法识别的纸张大小设置 "%s" Export document to PDF 导出格式为 PDF PDF files (*.pdf) PDF 文件 (*.pdf) Print document 打印文件 Export document 导出文件 Failed to execute the command: 不能执行命令: Alt text 替换文本 URL 链接 Link text 链接文本 This file has been deleted by other application. Please make sure you save the file before exit. 该文件已被其它程序删除。 请确认在退出前保存。 This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? 文件已被其它程序修改。 要重新载入文件(放弃当前所有修改)吗? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. 如果不重新载入文件,为防止数据丢失,将禁用该会话的自动保存模式。 The document has been modified. Do you want to save your changes? 文件已更改,确认保存吗? HTML code HTML 代码 Select one or several images to open 选择要打开的图片 ReText %s (using PyMarkups %s) ReText %s(使用 PyMarkups %s) Simple but powerful editor for Markdown and reStructuredText 简单高效的 Markdown 与 ReStructuredText 编辑器 Author: Dmitry Shachnev, 2011 作者: Dmitry Shachnev, 2011 Markdown syntax Markdown 语法 reStructuredText syntax reStructuredText 语法 TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters %d w | %d a | %d c main Open the files in preview mode 在预览模式下打开文件 Create a new window even if there is an existing one 创建一个新窗口 List of files to open 待打开的文件列表 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920522.0 ReText-7.2.3/locale/retext_zh_TW.qm0000644000175000017500000001105000000000000016562 0ustar00dmitrydmitry ConfigDialog Behavior Automatically save documents Restore window geometry Open external links in ReText window Editor Highlight current line Show line numbers Tab key inserts spaces Tabulation width Interface Icon theme name Stylesheet file Markdown syntax extensions (comma-separated) Help 說明 Enable synchronized scrolling for Markdown Draw vertical line at column Automatically open last documents on startup Using configuration file at: Number of recent documents Default preview state Line numbers are relative to current line Enable soft wrap Show document stats Hide toolbar Hide tabs bar when there is only one tab Show full path in window title Live preview 同步預覽 Normal preview Ordered list mode Show directory tree Working directory Disabled Cursor Line Wrapped Line Increment Repeat DirectorySelectButton Select directory to open FileDialogButton (none) FileSelectButton Select file to open InsertTableDialog Insert table Number of rows Number of columns LocaleDialog Enter locale name (example: en_US) Set as default Proxy No write since last change (add ! to override) Information ReTextEdit Save image Images (*.png *.jpg) Add to dictionary ReTextTab New document 新檔 Could not parse file contents, check if you have the <a href="%s">necessary module</a> installed! Create missing file? The file '%s' does not exist. Do you want to create it? File could not be created Could not create file '%s': %s ReTextWindow Open 開啟 Save 儲存 Print 列印 Preview 預覽 Symbols 特殊符號 HTML files (*.html *.htm) HTML 檔案 (*.html *.htm) Save file 儲存檔案 Save as 另存新檔 Quit 離開 About Qt 關於 Qt &File 檔案 &Edit 編輯 &Help 說明 Export 匯出 File toolbar 檔案工具列 Edit toolbar 編輯工具列 Export document to PDF 匯出檔案到 PDF PDF files (*.pdf) PDF 檔案 (*.pdf) The document has been modified. Do you want to save your changes? 檔案已變更,確定儲存嗎? Undo 復原 Redo 重做 Copy 複製 Cut 剪下 Paste 貼上 New document 新檔 All files (*) 所有檔案 (*) New 新增 Open recent 開啟最近的 OpenDocument text files (*.odt) Libreoffice 檔案 (*.odt) Export document to ODT 匯出檔案到 ODT View HTML code 檢視 HTML 程式碼 HTML code HTML 程式碼 Print preview 列印預覽 Print document 列印檔案 Live preview 同步預覽 Please, save the file somewhere. 請,儲存到別的地方呦! Plain text (*.txt) 純文本 (*.txt) Supported files 支持的檔案格式 Export document 匯出檔案 Enable 啟用 Set locale 選擇程式語言 Spell check 拼寫檢查 Fullscreen mode 全螢幕 Search toolbar 尋找工具列 Find text 尋找文本 Next 下一條 Previous 上一條 Search 尋找 Case sensitively 對大小写敏感 Author: Dmitry Shachnev, 2011 作者: Dmitry Shachnev, 2011 Markdown syntax Markdown 句法 reStructuredText syntax reStructuredText 句法 Simple but powerful editor for Markdown and reStructuredText 簡單高效的 Markdown 與 reStructuredText 編輯器 Select one or several files to open 選擇一個或多個檔案以開啟 Get help online 在線擷取幫助(英文) Show directory 顯示目錄 Cannot save to file because it is read-only! 不能儲存檔案因为它是只讀的! Bold 加粗 Italic 傾斜 Underline 下劃線 Formatting 樣式 About ReText 關於 ReText Use WebKit renderer 使用WebKit渲染 Failed to execute the command: 不能執行指令: %s files Example of final string: Markdown files %s 檔案 Default markup Preferences Set encoding Select file encoding from the list: Reload Next tab Previous tab Table editing mode FakeVim mode This file has been deleted by other application. Please make sure you save the file before exit. This document has been modified by other application. Do you want to reload the file (this will discard all your changes)? If you choose to not reload the file, auto save mode will be disabled for this session to prevent data loss. Change editor font Change preview font ReText %s (using PyMarkups %s) Close Alt text URL Link text Replace Replace all Replace with Cannot save to file which is open in another tab! Use WebEngine (Chromium) renderer Close tab Go to line Insert table Insert images by file path Paste image Move line up Move line down Type the line number Unrecognized paperSize setting "%s". Select one or several images to open TextInfoArea %d w | %d a | %d c count of words, alphanumeric characters, all characters main Open the files in preview mode Create a new window even if there is an existing one List of files to open ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1643920524.1925159 ReText-7.2.3/setup.cfg0000644000175000017500000000004600000000000014162 0ustar00dmitrydmitry[egg_info] tag_build = tag_date = 0 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1643920333.0 ReText-7.2.3/setup.py0000755000175000017500000001210600000000000014056 0ustar00dmitrydmitry#!/usr/bin/env python3 VERSION = '7.2.3' long_description = '''\ ReText is simple text editor that supports Markdown and reStructuredText markup languages. It is written in Python using PyQt libraries. It supports live preview, tabs, math formulas, export to various formats including PDF and HTML. For more details, please go to the `home page`_ or to the `wiki`_. .. _`home page`: https://github.com/retext-project/retext .. _`wiki`: https://github.com/retext-project/retext/wiki''' import os import sys from os.path import join, basename from setuptools import setup, Command from setuptools.command.sdist import sdist from setuptools.command.install import install from distutils import log from distutils.command.build import build from subprocess import check_call from glob import glob, iglob if sys.version_info[0] < 3: sys.exit('Error: Python 3.x is required.') if len(sys.argv) > 1 and sys.argv[1] == 'bdist_wheel': sys.exit('Building wheels is disabled, because it breaks .desktop files. ' 'See issues #452 and #497 for details.\n' 'If you are using pip, please ignore this error, installation ' 'should still succeed.') def bundle_icons(): import urllib.request import tarfile from io import BytesIO icons_tgz = 'https://github.com/retext-project/retext/archive/icons.tar.gz' response = urllib.request.urlopen(icons_tgz) tario = BytesIO(response.read()) tar = tarfile.open(fileobj=tario, mode='r') for member in tar: if member.isfile(): member.path = basename(member.path) log.info('bundling icons/%s', member.path) tar.extract(member, 'icons') tar.close() class retext_build_translations(Command): description = 'Build .qm files from .ts files using lrelease' user_options = [] def initialize_options(self): pass def finalize_options(self): pass def run(self): environment = dict(os.environ, QT_SELECT='5') for ts_file in glob(join('locale', '*.ts')): try: check_call(('lrelease', ts_file), env=environment) except Exception as e: log.warn('Failed to build translations: %s', e) break class retext_build(build): sub_commands = build.sub_commands + [('build_translations', None)] class retext_sdist(sdist): def run(self): self.run_command('build_translations') bundle_icons() sdist.run(self) class retext_install(install): def change_roots(self, *names): self.orig_install_scripts = self.install_scripts self.orig_install_data = self.install_data install.change_roots(self, *names) def run(self): install.run(self) if self.root is None: self.orig_install_scripts = self.install_scripts self.orig_install_data = self.install_data retext = join(self.orig_install_scripts, 'retext') # Fix Exec and Icon fields in the desktop file desktop_file_path = join(self.install_data, 'share', 'applications', 'me.mitya57.ReText.desktop') icon_path = join(self.orig_install_data, 'share', 'retext', 'icons', 'retext.svg') with open(desktop_file_path, encoding="utf-8") as desktop_file: desktop_contents = desktop_file.read() log.info('fixing Exec line in %s', desktop_file_path) desktop_contents = desktop_contents.replace('Exec=retext', 'Exec=%s' % retext) if self.orig_install_data != '/usr': log.info('fixing Icon line in %s', desktop_file_path) desktop_contents = desktop_contents.replace('Icon=retext', 'Icon=%s' % icon_path) with open(desktop_file_path, 'w', encoding="utf-8") as desktop_file: desktop_file.write(desktop_contents) classifiers = [ 'Development Status :: 5 - Production/Stable', 'Environment :: X11 Applications :: Qt', 'License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)', 'Programming Language :: Python :: 3 :: Only', 'Topic :: Text Editors', 'Topic :: Text Processing :: Markup' ] setup(name='ReText', version=VERSION, description='Simple editor for Markdown and reStructuredText', long_description=long_description, author='Dmitry Shachnev', author_email='mitya57@gmail.com', url='https://github.com/retext-project/retext', packages=['ReText'], entry_points={ 'gui_scripts': ['retext = ReText.__main__:main'], }, data_files=[ ('share/applications', ['data/me.mitya57.ReText.desktop']), ('share/icons/hicolor/scalable/apps', ['icons/retext.svg']), ('share/metainfo', ['data/me.mitya57.ReText.appdata.xml']), ('share/retext/icons', iglob('icons/*')), ('share/retext/locale', iglob('locale/*.qm')) ], python_requires='>=3.6', requires=['docutils', 'Markdown', 'Markups(>=2.0)', 'pyenchant', 'Pygments', 'PyQt5(>=5.11)'], install_requires=[ 'docutils', 'Markdown>=3.0', 'Markups>=2.0', 'Pygments', 'chardet>=2.3', 'PyQt5>=5.11', ], extras_require={ 'spellcheck': ['pyenchant'], }, cmdclass={ 'build_translations': retext_build_translations, 'build': retext_build, 'sdist': retext_sdist, 'install': retext_install, }, test_suite='tests', classifiers=classifiers, license='GPL 2+' ) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1643920524.1925159 ReText-7.2.3/tests/0000755000175000017500000000000000000000000013503 5ustar00dmitrydmitry././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1630777591.0 ReText-7.2.3/tests/__init__.py0000644000175000017500000000014600000000000015615 0ustar00dmitrydmitry#!/usr/bin/env python3 from unittest.main import main if __name__ == '__main__': main(module=None) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1633978476.0 ReText-7.2.3/tests/test_editor.py0000644000175000017500000002216400000000000016407 0ustar00dmitrydmitry# vim: ts=8:sts=8:sw=8:noexpandtab # This file is part of ReText # Copyright: 2014-2021 Dmitry Shachnev # # 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, see . import sys import unittest from unittest.mock import patch from ReText.editor import ReTextEdit from ReText.editor import documentIndentMore, documentIndentLess from PyQt5.QtGui import QImage, QTextCursor, QTextDocument, QKeyEvent from PyQt5.QtCore import Qt, QMimeData, QEvent from PyQt5.QtWidgets import QApplication from PyQt5.QtTest import QTest from markups import MarkdownMarkup, ReStructuredTextMarkup QApplication.setAttribute(Qt.ApplicationAttribute.AA_ShareOpenGLContexts) # Keep a reference so it is not garbage collected app = QApplication.instance() or QApplication(sys.argv) class SettingsMock: tabWidth = 4 tabInsertsSpaces = True class TestIndentation(unittest.TestCase): def setUp(self): self.document = QTextDocument() self.document.setPlainText('foo\nbar\nbaz') self.settings = SettingsMock() def test_indentMore(self): cursor = QTextCursor(self.document) cursor.setPosition(4) documentIndentMore(self.document, cursor, self.settings) self.assertEqual('foo\n bar\nbaz', self.document.toPlainText()) cursor.setPosition(3) documentIndentMore(self.document, cursor, self.settings) self.assertEqual('foo \n bar\nbaz', self.document.toPlainText()) def test_indentMoreWithTabs(self): cursor = QTextCursor(self.document) self.settings.tabInsertsSpaces = False documentIndentMore(self.document, cursor, self.settings) self.assertEqual('\tfoo\nbar\nbaz', self.document.toPlainText()) def test_indentMoreWithSelection(self): cursor = QTextCursor(self.document) cursor.setPosition(1) cursor.setPosition(6, QTextCursor.MoveMode.KeepAnchor) self.assertEqual('oo\u2029ba', # \u2029 is paragraph separator cursor.selectedText()) documentIndentMore(self.document, cursor, self.settings) self.assertEqual(' foo\n bar\nbaz', self.document.toPlainText()) def test_indentLess(self): self.document.setPlainText(' foo') cursor = QTextCursor(self.document) cursor.setPosition(10) documentIndentLess(self.document, cursor, self.settings) self.assertEqual(' foo', self.document.toPlainText()) documentIndentLess(self.document, cursor, self.settings) self.assertEqual('foo', self.document.toPlainText()) def test_indentLessWithSelection(self): self.document.setPlainText(' foo\n bar\nbaz') cursor = QTextCursor(self.document) cursor.setPosition(5) cursor.setPosition(11, QTextCursor.MoveMode.KeepAnchor) documentIndentLess(self.document, cursor, self.settings) self.assertEqual('foo\nbar\nbaz', self.document.toPlainText()) class TestClipboardHandling(unittest.TestCase): class DummyReTextTab(): def __init__(self): self.markupClass = None def getActiveMarkupClass(self): return self.markupClass def setUp(self): self.p = self self.editor = ReTextEdit(self) self.dummytab = self.DummyReTextTab() self.editor.tab = self.dummytab def _create_image(self): image = QImage(80, 60, QImage.Format.Format_RGB32) image.fill(Qt.GlobalColor.green) return image def test_pasteText(self): mimeData = QMimeData() mimeData.setText('pasted text') self.editor.insertFromMimeData(mimeData) self.assertTrue('pasted text' in self.editor.toPlainText()) @patch.object(ReTextEdit, 'getImageFilename', return_value='/tmp/myimage.jpg') @patch.object(QImage, 'save') def test_pasteImage_Markdown(self, _mock_image, _mock_editor): mimeData = QMimeData() mimeData.setImageData(self._create_image()) app.clipboard().setMimeData(mimeData) self.dummytab.markupClass = MarkdownMarkup self.dummytab.fileName = '/tmp/foo.md' self.editor.pasteImage() self.assertTrue('![myimage](myimage.jpg)' in self.editor.toPlainText()) @patch.object(ReTextEdit, 'getImageFilename', return_value='/tmp/myimage.jpg') @patch.object(QImage, 'save') def test_pasteImage_RestructuredText(self, _mock_image, _mock_editor): mimeData = QMimeData() mimeData.setImageData(self._create_image()) app.clipboard().setMimeData(mimeData) self.dummytab.markupClass = ReStructuredTextMarkup self.dummytab.fileName = '/tmp/foo.rst' self.editor.pasteImage() self.assertTrue('.. image:: myimage.jpg' in self.editor.toPlainText()) class TestSurround(unittest.TestCase): def setUp(self): self.p = self self.editor = ReTextEdit(self) self.document = QTextDocument() self.document.setPlainText('foo bar baz qux corge grault') self.cursor = QTextCursor(self.document) def getText(self, key): if key == Qt.Key.Key_ParenLeft: return '(' if key == Qt.Key.Key_BracketLeft: return '[' if key == Qt.Key.Key_Underscore: return '_' if key == Qt.Key.Key_Asterisk: return '*' if key == Qt.Key.Key_QuoteDbl: return '"' if key == Qt.Key.Key_Apostrophe: return '\'' def getEvent(self, key): return QKeyEvent(QEvent.Type.KeyPress, key, Qt.KeyboardModifier.NoModifier, text=self.getText(key)) def test_isSurroundKey(self): # close keys should not start a surrounding self.assertFalse(self.editor.isSurroundKey(Qt.Key.Key_ParenRight)) self.assertFalse(self.editor.isSurroundKey(Qt.Key.Key_BracketRight)) self.assertTrue(self.editor.isSurroundKey(Qt.Key.Key_ParenLeft)) self.assertTrue(self.editor.isSurroundKey(Qt.Key.Key_BracketLeft)) self.assertTrue(self.editor.isSurroundKey(Qt.Key.Key_Underscore)) self.assertTrue(self.editor.isSurroundKey(Qt.Key.Key_Asterisk)) self.assertTrue(self.editor.isSurroundKey(Qt.Key.Key_QuoteDbl)) self.assertTrue(self.editor.isSurroundKey(Qt.Key.Key_Apostrophe)) def test_getCloseKey(self): self.assertEqual(self.editor.getCloseKey(self.getEvent(Qt.Key.Key_Underscore), Qt.Key.Key_Underscore), '_') self.assertEqual(self.editor.getCloseKey(self.getEvent(Qt.Key.Key_Asterisk), Qt.Key.Key_Asterisk), '*') self.assertEqual(self.editor.getCloseKey(self.getEvent(Qt.Key.Key_QuoteDbl), Qt.Key.Key_QuoteDbl), '"') self.assertEqual(self.editor.getCloseKey(self.getEvent(Qt.Key.Key_Apostrophe), Qt.Key.Key_Apostrophe), '\'') self.assertEqual(self.editor.getCloseKey(self.getEvent(Qt.Key.Key_ParenLeft), Qt.Key.Key_ParenLeft), ')') self.assertEqual(self.editor.getCloseKey(self.getEvent(Qt.Key.Key_BracketLeft), Qt.Key.Key_BracketLeft), ']') def changeCursor(self, posI, posF): self.cursor.setPosition(posI) self.cursor.setPosition(posF, QTextCursor.MoveMode.KeepAnchor) def test_surroundText(self): self.changeCursor(0, 3) self.editor.surroundText(self.cursor, self.getEvent(Qt.Key.Key_Underscore), Qt.Key.Key_Underscore) self.assertEqual(self.document.toPlainText(), '_foo_ bar baz qux corge grault') self.changeCursor(6, 9) self.editor.surroundText(self.cursor, self.getEvent(Qt.Key.Key_Asterisk), Qt.Key.Key_Asterisk) self.assertEqual(self.document.toPlainText(), '_foo_ *bar* baz qux corge grault') self.changeCursor(12, 15) self.editor.surroundText(self.cursor, self.getEvent(Qt.Key.Key_QuoteDbl), Qt.Key.Key_QuoteDbl) self.assertEqual(self.document.toPlainText(), '_foo_ *bar* "baz" qux corge grault') self.changeCursor(18, 21) self.editor.surroundText(self.cursor, self.getEvent(Qt.Key.Key_Apostrophe), Qt.Key.Key_Apostrophe) self.assertEqual(self.document.toPlainText(), '_foo_ *bar* "baz" \'qux\' corge grault') self.changeCursor(24, 29) self.editor.surroundText(self.cursor, self.getEvent(Qt.Key.Key_ParenLeft), Qt.Key.Key_ParenLeft) self.assertEqual(self.document.toPlainText(), '_foo_ *bar* "baz" \'qux\' (corge) grault') self.changeCursor(32, 38) self.editor.surroundText(self.cursor, self.getEvent(Qt.Key.Key_BracketLeft), Qt.Key.Key_BracketLeft) self.assertEqual(self.document.toPlainText(), '_foo_ *bar* "baz" \'qux\' (corge) [grault]') class TestOrderedListMode(unittest.TestCase): class DummyReTextTab(): def __init__(self): self.markupClass = None def getActiveMarkupClass(self): return self.markupClass def setUp(self): self.p = self def test_increment(self): editor = ReTextEdit(self) editor.tab = self.DummyReTextTab() QTest.keyClicks(editor, '1. Hello') QTest.keyClick(editor, Qt.Key.Key_Return) QTest.keyClicks(editor, 'World') self.assertEqual(editor.document().toPlainText(), '1. Hello\n2. World') def test_repeat(self): class TestSettings: orderedListMode = 'repeat' useFakeVim = False editor = ReTextEdit(self, settings=TestSettings()) editor.tab = self.DummyReTextTab() QTest.keyClicks(editor, '1. Hello') QTest.keyClick(editor, Qt.Key.Key_Return) QTest.keyClicks(editor, 'World') self.assertEqual(editor.document().toPlainText(), '1. Hello\n1. World') if __name__ == '__main__': unittest.main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1633977861.0 ReText-7.2.3/tests/test_posmap.py0000644000175000017500000001070100000000000016412 0ustar00dmitrydmitry# vim: ts=4:sw=4:expandtab # This file is part of ReText # Copyright: 2018-2019 Dmitry Shachnev # # 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, see . from textwrap import dedent from unittest import skipIf, TestCase from markdown import markdown from markdown.extensions.codehilite import CodeHiliteExtension from markdown.extensions.fenced_code import FencedCodeExtension try: from pymdownx.superfences import SuperFencesCodeExtension except ImportError: SuperFencesCodeExtension = None from ReText.mdx_posmap import PosMapExtension class PosMapTest(TestCase): maxDiff = None extensionsPosMap = [ CodeHiliteExtension(), FencedCodeExtension(), PosMapExtension() ] extensionsNoPosMap = [ CodeHiliteExtension(), FencedCodeExtension() ] def test_normalUse(self): text = dedent("""\ # line 1 - line 3 - line 4 - line 5 line 7 line 8 code block, line 10 """) html = markdown(text, extensions=[PosMapExtension()]) self.assertIn('

line 1

', html) self.assertIn('
    ', html) self.assertIn('

    ', html) self.assertIn('

    code block, line 10', html)
            self.assertNotIn("posmapmarker", html)
    
        def test_highlightC(self):
            text = dedent("""\
            ```c
            #include 
    
            int main(int argc, char **argv)
            {
                printf("Hello, world!\\n");
            }
            ```""")
            html = markdown(text, extensions=self.extensionsPosMap)
            expected = markdown(text, extensions=self.extensionsNoPosMap)
            self.assertIn('
    ', html) self.assertMultiLineEqual(html, expected) def test_highlightEmptyC(self): text = dedent("""\ ```c ```""") html = markdown(text, extensions=self.extensionsPosMap) expected = markdown(text, extensions=self.extensionsNoPosMap) self.assertIn('
    ', html) self.assertMultiLineEqual(html, expected) def test_highlightPython(self): text = dedent("""\ ```python if __name__ == "__main__": print("Hello, world!") ```""") html = markdown(text, extensions=self.extensionsPosMap) expected = markdown(text, extensions=self.extensionsNoPosMap) self.assertIn('
    ', html) self.assertMultiLineEqual(html, expected) def test_highlightEmptyPython(self): text = dedent("""\ ```python ```""") html = markdown(text, extensions=self.extensionsPosMap) expected = markdown(text, extensions=self.extensionsNoPosMap) self.assertIn('
    ', html) self.assertMultiLineEqual(html, expected) def test_traditionalCodeBlock(self): text = dedent("""\ :::python if __name__ == "__main__": print("Hello, world!") a paragraph following the code block, line 5 """) extensions = [CodeHiliteExtension(), PosMapExtension()] html = markdown(text, extensions=extensions) self.assertNotIn('posmapmarker', html) self.assertIn('
    ', html) self.assertIn('

    ', html) @skipIf(SuperFencesCodeExtension is None, "pymdownx module is not available") def test_superFences(self): text = dedent("""\ ```bash tee ~/test << EOF A B C EOF ```""") extensions = [SuperFencesCodeExtension(), PosMapExtension()] html = markdown(text, extensions=extensions) self.assertNotIn("posmapmarker", html) expected = markdown(text, extensions=[SuperFencesCodeExtension()]) self.assertMultiLineEqual(html, expected) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642949280.0 ReText-7.2.3/tests/test_settings.py0000644000175000017500000000734000000000000016760 0ustar00dmitrydmitry# This file is part of ReText # Copyright: 2014-2021 Dmitry Shachnev # # 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, see . import unittest import tempfile import sys from os.path import basename, dirname, splitext from PyQt5.QtCore import Qt, QSettings from PyQt5.QtGui import QColor, QFont from PyQt5.QtWidgets import QApplication from ReText import readListFromSettings, writeListToSettings, \ readFromSettings, writeToSettings from ReText.editor import getColor, updateColorScheme # For this particular test, QCoreApplication is enough. However, we should # only have one QCoreApplication instance for all tests in a process. As # other tests need QApplication, we should not create a bare QCoreApplication # here. Also, keep a reference so it is not garbage collected. QApplication.setAttribute(Qt.ApplicationAttribute.AA_ShareOpenGLContexts) app = QApplication.instance() or QApplication(sys.argv) class TestSettings(unittest.TestCase): def setUp(self): self.tempFile = tempfile.NamedTemporaryFile(prefix='retext-', suffix='.ini') baseName = splitext(basename(self.tempFile.name))[0] QSettings.setPath(QSettings.Format.IniFormat, QSettings.Scope.UserScope, dirname(self.tempFile.name)) self.settings = QSettings(QSettings.Format.IniFormat, QSettings.Scope.UserScope, baseName) def tearDown(self): del self.settings # this should be deleted before tempFile def test_storingLists(self): data = ( ['1', '2', '3', 'test'], [], ['1'], ['true'], ['foo, bar', 'foo, bar'] ) for l in data: writeListToSettings('testList', l, self.settings) lnew = readListFromSettings('testList', self.settings) self.assertListEqual(lnew, l) def test_storingBooleans(self): writeToSettings('testBool', 1, None, self.settings) self.assertTrue(readFromSettings('testBool', bool, self.settings)) writeToSettings('testBool', 'false', None, self.settings) self.assertFalse(readFromSettings('testBool', bool, self.settings)) writeToSettings('testBool', 0, None, self.settings) self.assertFalse(readFromSettings('testBool', bool, self.settings)) def test_storingFonts(self): font = QFont() font.setFamily('my family') font.setPointSize(20) writeToSettings('testFont', font, None, self.settings) family = readFromSettings('testFont', str, self.settings) size = readFromSettings('testFontSize', int, self.settings) self.assertEqual(family, 'my family') self.assertEqual(size, 20) newFont = readFromSettings('testFont', QFont, self.settings, QFont()) self.assertEqual(newFont.family(), family) self.assertEqual(newFont.pointSize(), size) def test_storingColors(self): self.settings.setValue('ColorScheme/htmlTags', 'green') self.settings.setValue('ColorScheme/htmlSymbols', '#ff8800') self.settings.setValue('ColorScheme/htmlComments', '#abc') updateColorScheme(self.settings) self.assertEqual(getColor('htmlTags'), QColor(0x00, 0x80, 0x00)) self.assertEqual(getColor('htmlSymbols'), QColor(0xff, 0x88, 0x00)) self.assertEqual(getColor('htmlStrings'), Qt.GlobalColor.darkYellow) # default self.assertEqual(getColor('htmlComments'), QColor(0xaa, 0xbb, 0xcc)) if __name__ == '__main__': unittest.main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1630777591.0 ReText-7.2.3/tests/test_tablemode.py0000644000175000017500000003771100000000000017061 0ustar00dmitrydmitry# vim: noexpandtab:ts=4:sw=4 # # This file is part of ReText # Copyright: 2014 Maurice van der Pot # # 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, see . import unittest from ReText import tablemode class TestTableMode(unittest.TestCase): def performEdit(self, text, offset, editSize, paddingchar=None, fragment=None): if editSize < 0: text = text[:offset + editSize] + text[offset:] else: fragment = paddingchar * editSize if not fragment else fragment text = text[:offset] + fragment + text[offset:] return text def checkDetermineEditLists(self, paddingChars, before, edit, after, alignWithAnyEdge): class Row(): def __init__(self, text, separatorLine, paddingChar): self.text = text self.separatorline = separatorLine self.paddingchar = paddingChar # Do some sanity checks on the test data to catch simple mistakes self.assertEqual(len(paddingChars), len(before), 'The number of padding chars should be equal to the number of rows') self.assertEqual(len(before), len(after), 'The number of rows before and after should be the same') # Apart from spacing edit only contains a's or d's self.assertTrue(edit[1].strip(' d') == '' or edit[1].strip(' a') == '', "An edit should be a sequence of a's or d's surrounded by spaces") rows = [] for paddingChar, text in zip(paddingChars, before): rows.append(Row(text, (paddingChar != ' '), paddingChar)) editedline = edit[0] editstripped = edit[1].strip() editsize = len(editstripped) # The offset passed to _determineEditLists is the one received from the # contentsChange signal and is always the start of the set of chars # that are added or removed. contentsChangeOffset = edit[1].index(editstripped[0]) # However, the editoffset indicates the position before which chars # must be deleted or after which they must be added (just like the # offset used in the edits returned by _determineEditLists), # so for deletions we'll need to add the size of the edit to it if editstripped[0] == 'd': editsize = -editsize editoffset = contentsChangeOffset + len(editstripped) else: editoffset = contentsChangeOffset editLists = tablemode._determineEditLists(rows, edit[0], contentsChangeOffset, editsize, alignWithAnyEdge) editedRows = [] self.assertEqual(len(editLists), len(rows)) for i, (row, editList) in enumerate(zip(rows, editLists)): editedText = row.text for editEntry in editList: editedText = self.performEdit(editedText, editEntry[0], editEntry[1], paddingchar=row.paddingchar) editedRows.append(editedText) editedRows[editedline] = self.performEdit(editedRows[editedline], editoffset, editsize, fragment=editstripped) if editedRows != after: if alignWithAnyEdge: alignmentScenario = "when aligning any edge with another" else: alignmentScenario = "when only aligning edges of cells in the same column" assertMessage = ["Output differs %s." % alignmentScenario, "", "Input:"] + \ ["%3d '%s'" % (i, line) for i, line in enumerate(before)] + \ ["", "Edit:", "%3d '%s'" % edit, "", "Expected output:"] + \ ["%3d '%s'" % (i, line) for i, line in enumerate(after)] + \ ["", "Actual output:"] + \ ["%3d '%s'" % (i, line) for i, line in enumerate(editedRows)] self.fail('\n'.join(assertMessage)) def test_simpleInsert(self): # Insert at the start of a cell so it doesn't need to grow separatorChars = ' ' before = ['| |', '| |'] edit = (0, ' a ') after = ['|a |', '| |'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Insert at the last position in a cell where it doesn't need to grow separatorChars = ' ' before = ['| |', '| |'] edit = (0, ' a') after = ['| a|', '| |'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Insert at the end of a cell so it will have to grow separatorChars = ' ' before = ['| |', '| |'] edit = (0, ' a') after = ['| a|', '| |'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) def test_insertPushAhead(self): # Insert with enough room to push without growing the cell separatorChars = ' ' before = ['| x |', '| |'] edit = (0, ' a ') after = ['|a x|', '| |'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Insert without enough room to push, so the cell will have to grow separatorChars = ' ' before = ['| x|', '| |'] edit = (0, ' a ') after = ['|a x|', '| |'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) # Insert without enough room to push, so the cell will have to grow, # but the edge of the cell below it does not move with it because it is # of an earlier column separatorChars = ' ' before = ['| | x|', ' | |'] edit = (0, ' a ') after = ['| |a x|', ' | |'] self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Insert without enough room to push, so the cell will have to grow, # but the edge of the cell below it does not move with it because it is # of a later column separatorChars = ' ' before = [' | x|', '| | |'] edit = (0, ' a ') after = [' |a x|', '| | |'] self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Insert multiple characters forcing a partial grow separatorChars = ' ' before = ['| |', '| |'] edit = (0, ' aaaaaa') after = ['| aaaaaa|', '| |'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Insert multiple characters forcing a partial grow through pushing other chars ahead separatorChars = ' ' before = ['| bb |', '| |'] edit = (0, ' aaaaaaa') after = ['| aaaaaaabb|', '| |'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) def test_insertInSeparatorCell(self): # Insert in a cell on a separator line separatorChars = ' -' before = ['| |', '|----|'] edit = (1, ' a ') after = ['| |', '|--a-|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Insert in a cell on a separator line forcing it to grow separatorChars = ' -' before = ['| |', '|----|'] edit = (1, ' a ') after = ['| |', '|---a-|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Insert in a cell on a separator line with an alignment marker separatorChars = ' -' before = ['| |', '|---:|'] edit = (1, ' a ') after = ['| |', '|--a:|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Insert in a cell on a separator line with an alignment marker forcing it to grow separatorChars = ' -' before = ['| |', '|---:|'] edit = (1, ' a ') after = ['| |', '|---a:|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Insert in a cell on a separator line after the alignment marker forcing it to grow separatorChars = ' -' before = ['| |', '|---:|'] edit = (1, ' a') after = ['| |', '|---:a|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) def test_insertAboveSeparatorLine(self): # Insert on another line, without growing the cell separatorChars = ' -' before = ['| |', '|----|'] edit = (0, ' a') after = ['| a|', '|----|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Insert on another line, forcing the separator cell to grow separatorChars = ' -' before = ['| |', '|----|'] edit = (0, ' a') after = ['| a|', '|-----|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Insert on another line, without growing the cell with alignment marker separatorChars = ' -' before = ['| |', '|---:|'] edit = (0, ' a') after = ['| a|', '|---:|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Insert on another line, forcing the separator cell with alignment marker to grow separatorChars = ' -' before = ['| |', '|---:|'] edit = (0, ' a') after = ['| a|', '|----:|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Insert on another line, forcing the separator cell that ends with a regular char to grow separatorChars = ' -' before = ['| |', '|--- |'] edit = (0, ' a') after = ['| a|', '|---- |'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) def test_insertCascade(self): # Test if growing of cells cascades onto other lines through edges that are shifted separatorChars = ' ' before = ['| |', ' | |', ' | |', ' |'] edit = (0, ' a') after = ['| a|', ' | |', ' | |', ' |'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) # Test if growing of cells cascades onto other lines but does not affect unconnected edges separatorChars = ' ' before = ['| |', ' | |', ' | | |'] edit = (0, ' a') after = ['| a|', ' | |', ' | | |'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) def test_simpleDelete(self): # Delete at start of cell separatorChars = ' ' before = ['|abcd|', '| |'] edit = (0, ' d ') after = ['|bcd|', '| |'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Delete at end of cell separatorChars = ' ' before = ['|abcd|', '| |'] edit = (0, ' d') after = ['|abc|', '| |'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) def test_deleteShrinking(self): # Shrinking limited by cell on other row separatorChars = ' ' before = ['|abc |', '|efgh|'] edit = (0, ' d ') after = ['|bc |', '|efgh|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Shrinking limited by cell on other row (cont'd) separatorChars = ' ' before = ['|abcd|', '|efgh|'] edit = (0, ' d') after = ['|abc |', '|efgh|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Shrinking of next cell limited by cell on other row separatorChars = ' ' before = ['|abc | |', '|efghi|klm|'] edit = (0, ' d ') after = ['|bc | |', '|efghi|klm|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Shrink current cell fully, grow next cell a partially separatorChars = ' ' before = ['| aabb| |', '|xxxxxx|x |'] edit = (0, ' dddd') after = ['| | |', '|xxxxxx|x|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Shrink current cell fully, do not change next cell separatorChars = ' ' before = ['| aabb| |', '|xxxxxxxx |'] edit = (0, ' dddd') after = ['| | |', '|xxxxxxxx |'] self.checkDetermineEditLists(separatorChars, before, edit, after, False) def test_deleteShrinkingSeparatorRow(self): # Shrinking not limited by size of separator cell separatorChars = ' -' before = ['|abcd|', '|----|'] edit = (0, ' d ') after = ['|acd|', '|---|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Shrinking limited by size of separator cell separatorChars = ' -' before = ['|abc|', '|---|'] edit = (0, ' d ') after = ['|ac |', '|---|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Shrinking not limited by size of separator cell with alignment markers separatorChars = ' -' before = ['|abcd|', '|:--:|'] edit = (0, ' d ') after = ['|acd|', '|:-:|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Shrinking limited by size of separator cell with alignment markers separatorChars = ' -' before = ['|abc|', '|:-:|'] edit = (0, ' d ') after = ['|ac |', '|:-:|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) # Shrinking partially limited by size of separator cell with alignment markers separatorChars = ' -' before = ['|abcde|', '|:---:|'] edit = (0, ' dddd') after = ['|a |', '|:-:|'] self.checkDetermineEditLists(separatorChars, before, edit, after, True) self.checkDetermineEditLists(separatorChars, before, edit, after, False) if __name__ == '__main__': unittest.main() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1642949280.0 ReText-7.2.3/tests/test_window.py0000644000175000017500000004145200000000000016431 0ustar00dmitrydmitry# vim: ts=4:sw=4:expandtab # This file is part of ReText # Copyright: 2016 Maurice van der Pot # # 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, see . from contextlib import suppress import markups import os import sys import tempfile import unittest from unittest.mock import patch, MagicMock import warnings from markups.abstract import ConvertedMarkup from PyQt5.QtCore import pyqtSignal, QObject, Qt from PyQt5.QtWidgets import QApplication import ReText from ReText.window import ReTextWindow path_to_testdata = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'testdata') QApplication.setAttribute(Qt.ApplicationAttribute.AA_ShareOpenGLContexts) app = QApplication.instance() or QApplication(sys.argv) ReText.initializeDataDirs() def handle_timer_event(): print('timer event received') class FakeConverterProcess(QObject): conversionDone = pyqtSignal() def start_conversion(self, name, filename, extensions, text, current_dir): self.conversionDone.emit() def get_result(self): return ConvertedMarkup('') @patch('ReText.tab.converterprocess.ConverterProcess', FakeConverterProcess) class TestWindow(unittest.TestCase): def setUp(self): warnings.simplefilter("ignore", Warning) self.readListFromSettingsMock = patch('ReText.window.readListFromSettings', return_value=[]).start() self.writeListToSettingsMock = patch('ReText.window.writeListToSettings').start() self.globalSettingsMock = patch('ReText.window.globalSettings', MagicMock(**ReText.configOptions)).start() self.fileSystemWatcherMock = patch('ReText.window.QFileSystemWatcher').start() ReText.tab.globalSettings = self.globalSettingsMock def tearDown(self): patch.stopall() # # Helper functions # @staticmethod def get_ui_enabled_states(window): enabled = set([]) disabled = set([]) for item in ('actionBold', 'actionCopy', 'actionCut', 'actionItalic', 'actionUnderline', 'actionUndo', 'actionRedo', 'actionReload', 'actionSave', 'actionSetEncoding', 'editBar', 'formattingBox', 'symbolBox'): if getattr(window, item).isEnabled(): enabled.add(item) else: disabled.add(item) return enabled, disabled def check_widget_state(self, window, expected_enabled, expected_disabled): actually_enabled, actually_disabled = self.get_ui_enabled_states(window) self.assertEqual(expected_enabled - actually_enabled, set(), 'These widgets are unexpectedly disabled') self.assertEqual(expected_disabled - actually_disabled, set(), 'These widgets are unexpectedly enabled') def check_widgets_enabled_for_markdown(self, window): self.check_widget_state(window, set(['actionBold', 'actionItalic', 'actionUnderline', 'formattingBox', 'symbolBox']), set()) def check_widgets_enabled_for_restructuredtext(self, window): self.check_widget_state(window, set(['actionBold', 'actionItalic']), set(['actionUnderline', 'formattingBox', 'symbolBox'])) def check_widgets_enabled(self, window, widgets): self.check_widget_state(window, set(widgets), set()) def check_widgets_disabled(self, window, widgets): self.check_widget_state(window, set(), set(widgets)) # # Tests # def test_windowTitleAndTabs_afterStartWithEmptyTab(self): self.window = ReTextWindow() self.window.createNew('') app.processEvents() self.assertEqual(1, self.window.tabWidget.count()) self.assertEqual('New document[*]', self.window.windowTitle()) self.assertFalse(self.window.currentTab.fileName) @patch('ReText.window.QFileDialog.getOpenFileNames', return_value=([os.path.join(path_to_testdata, 'existing_file.md')], None)) def test_windowTitleAndTabs_afterLoadingFile(self, getOpenFileNamesMock): self.window = ReTextWindow() self.window.createNew('') self.window.actionOpen.trigger() app.processEvents() # Check that file is opened in the existing empty tab self.assertEqual(1, self.window.tabWidget.count()) self.assertEqual('existing_file.md[*]', self.window.windowTitle()) self.assertTrue(self.window.currentTab.fileName.endswith('tests/testdata/existing_file.md')) self.assertEqual(self.window.tabWidget.tabText(0), 'existing_file') self.assertFalse(self.window.isWindowModified()) @patch('ReText.window.QFileDialog.getOpenFileNames', return_value=([os.path.join(path_to_testdata, 'existing_file.md')], None)) def test_windowTitleAndTabs_afterSwitchingTab(self, getOpenFileNamesMock): self.window = ReTextWindow() self.window.createNew('') self.window.actionOpen.trigger() app.processEvents() tab_with_file = self.window.currentTab self.window.createNew('bla') app.processEvents() tab_with_unsaved_content = self.window.currentTab self.assertEqual('New document[*]', self.window.windowTitle()) self.assertIs(self.window.currentTab, tab_with_unsaved_content) self.assertIs(self.window.tabWidget.currentWidget(), tab_with_unsaved_content) self.assertEqual(self.window.ind, 1) self.assertEqual(self.window.tabWidget.tabText(0), 'existing_file') self.assertEqual(self.window.tabWidget.tabText(1), 'New document*') self.window.switchTab() app.processEvents() self.assertEqual('existing_file.md[*]', self.window.windowTitle()) self.assertIs(self.window.currentTab, tab_with_file) self.assertIs(self.window.tabWidget.currentWidget(), tab_with_file) @patch('ReText.window.QFileDialog.getOpenFileNames', return_value=([os.path.join(path_to_testdata, 'existing_file.md')], None)) def test_activeTab_afterLoadingFileThatIsAlreadyOpenInOtherTab(self, getOpenFileNamesMock): self.window = ReTextWindow() self.window.createNew('') self.window.actionOpen.trigger() app.processEvents() tab_with_file = self.window.currentTab self.window.createNew('') app.processEvents() # Make sure that the newly created tab is the active one self.assertFalse(self.window.currentTab.fileName) # Load the same document again self.window.actionOpen.trigger() app.processEvents() # Check that we have indeed been switched back to the previous tab self.assertIs(self.window.currentTab, tab_with_file) self.assertTrue(self.window.currentTab.fileName.endswith('tests/testdata/existing_file.md')) def test_markupDependentWidgetStates_afterStartWithEmptyTabAndMarkdownAsDefaultMarkup(self): self.window = ReTextWindow() self.window.createNew('') app.processEvents() # markdown is the default markup self.check_widgets_enabled_for_markdown(self.window) def test_markupDependentWidgetStates_afterStartWithEmptyTabAndRestructuredtextAsDefaultMarkup(self): self.globalSettingsMock.defaultMarkup = 'reStructuredText' self.window = ReTextWindow() self.window.createNew('') app.processEvents() self.check_widgets_enabled_for_restructuredtext(self.window) def test_markupDependentWidgetStates_afterChangingDefaultMarkup(self): self.window = ReTextWindow() self.window.createNew('') app.processEvents() self.window.setDefaultMarkup(markups.ReStructuredTextMarkup) self.check_widgets_enabled_for_restructuredtext(self.window) @patch('ReText.window.QFileDialog.getOpenFileNames', return_value=([os.path.join(path_to_testdata, 'existing_file.md')], None)) def test_markupDependentWidgetStates_afterLoadingMarkdownDocument(self, getOpenFileNamesMock): self.window = ReTextWindow() self.window.createNew('') self.window.actionOpen.trigger() app.processEvents() self.check_widgets_enabled_for_markdown(self.window) @patch('ReText.window.QFileDialog.getOpenFileNames', return_value=([os.path.join(path_to_testdata, 'existing_file.rst')], None)) def test_markupDependentWidgetStates_afterLoadingRestructuredtextDocument(self, getOpenFileNamesMock): self.window = ReTextWindow() self.window.createNew('') self.window.actionOpen.trigger() app.processEvents() self.check_widgets_enabled_for_restructuredtext(self.window) @patch('ReText.window.QFileDialog.getOpenFileNames', side_effect=[ ([os.path.join(path_to_testdata, 'existing_file.md')], None), ([os.path.join(path_to_testdata, 'existing_file.rst')], None) ]) def test_markupDependentWidgetStates_afterSwitchingTab(self, getOpenFileNamesMock): self.window = ReTextWindow() self.window.createNew('') self.window.actionOpen.trigger() self.window.actionOpen.trigger() app.processEvents() # Just to make sure that sending two actionOpen triggers has had the desired effect self.assertIn('.rst', self.window.windowTitle()) self.window.switchTab() app.processEvents() self.assertIn('.md', self.window.windowTitle()) self.check_widgets_enabled_for_markdown(self.window) @patch('ReText.window.QFileDialog.getOpenFileNames', return_value=([os.path.join(path_to_testdata, 'existing_file.md')], None)) @patch('ReText.window.QFileDialog.getSaveFileName', return_value=(os.path.join(path_to_testdata, 'not_existing_file.rst'), None)) def test_markupDependentWidgetStates_afterSavingDocumentAsDifferentMarkup(self, getOpenFileNamesMock, getSaveFileNameMock): self.window = ReTextWindow() self.window.createNew('') self.window.actionOpen.trigger() app.processEvents() try: self.window.actionSaveAs.trigger() app.processEvents() finally: os.remove(os.path.join(path_to_testdata, 'not_existing_file.rst')) self.check_widgets_enabled_for_restructuredtext(self.window) @patch('ReText.window.QFileDialog.getOpenFileNames', return_value=([os.path.join(path_to_testdata, 'existing_file.md')], None)) @patch('ReText.window.QFileDialog.getSaveFileName', return_value=(os.path.join(path_to_testdata, 'not_existing_file.md'), None)) def test_saveWidgetStates(self, getOpenFileNamesMock, getSaveFileNameMock): self.window = ReTextWindow() # check if save is disabled at first self.window.createNew('') app.processEvents() self.check_widgets_disabled(self.window, ('actionSave',)) self.assertFalse(self.window.isWindowModified()) self.assertEqual(self.window.tabWidget.tabText(0), 'New document') # check if it's enabled after inserting some text self.window.currentTab.editBox.textCursor().insertText('some text') app.processEvents() self.check_widgets_enabled(self.window, ('actionSave',)) self.assertTrue(self.window.isWindowModified()) self.assertEqual(self.window.tabWidget.tabText(0), 'New document*') # check if it's disabled again after loading a file in a second tab and switching to it self.window.actionOpen.trigger() app.processEvents() self.check_widgets_disabled(self.window, ('actionSave',)) self.assertFalse(self.window.isWindowModified()) self.assertEqual(self.window.tabWidget.tabText(0), 'New document*') self.assertEqual(self.window.tabWidget.tabText(1), 'existing_file') # check if it's enabled again after switching back self.window.switchTab() app.processEvents() self.check_widgets_enabled(self.window, ('actionSave',)) self.assertTrue(self.window.isWindowModified()) self.assertEqual(self.window.tabWidget.tabText(0), 'New document*') self.assertEqual(self.window.tabWidget.tabText(1), 'existing_file') # check if it's disabled after saving try: self.window.actionSaveAs.trigger() app.processEvents() self.check_widgets_disabled(self.window, ('actionSave',)) self.assertFalse(self.window.isWindowModified()) self.assertEqual(self.window.tabWidget.tabText(0), 'not_existing_file') self.assertEqual(self.window.tabWidget.tabText(1), 'existing_file') finally: os.remove(os.path.join(path_to_testdata, 'not_existing_file.md')) @patch('ReText.window.QFileDialog.getOpenFileNames', return_value=([os.path.join(path_to_testdata, 'existing_file.md')], None)) @patch('ReText.window.QFileDialog.getSaveFileName', return_value=(os.path.join(path_to_testdata, 'not_existing_file.md'), None)) def test_saveWidgetStates_autosaveEnabled(self, getOpenFileNamesMock, getSaveFileNameMock): self.globalSettingsMock.autoSave = True self.window = ReTextWindow() # check if save is disabled at first self.window.createNew('') app.processEvents() self.check_widgets_disabled(self.window, ('actionSave',)) # check if it stays enabled after inserting some text (because autosave # can't save without a filename) self.window.currentTab.editBox.textCursor().insertText('some text') app.processEvents() self.check_widgets_enabled(self.window, ('actionSave',)) # check if it's disabled after saving try: self.window.actionSaveAs.trigger() app.processEvents() self.check_widgets_disabled(self.window, ('actionSave',)) # check if it is still disabled after inserting some text (because # autosave will take care of saving now that the filename is known) self.window.currentTab.editBox.textCursor().insertText('some text') app.processEvents() self.check_widgets_disabled(self.window, ('actionSave',)) finally: os.remove(os.path.join(path_to_testdata, 'not_existing_file.md')) @patch('ReText.window.QFileDialog.getOpenFileNames', return_value=([os.path.join(path_to_testdata, 'existing_file.md')], None)) def test_encodingAndReloadWidgetStates(self, getOpenFileNamesMock): self.window = ReTextWindow() # check if reload/set encoding is disabled for a tab without filename set self.window.createNew('') app.processEvents() self.check_widgets_disabled(self.window, ('actionReload','actionSetEncoding')) self.window.actionOpen.trigger() app.processEvents() self.check_widgets_enabled(self.window, ('actionReload','actionSetEncoding')) @patch('ReText.window.QFileDialog.getOpenFileNames', return_value=([os.path.join(path_to_testdata, 'existing_file.md')], None)) def test_encodingAndReloadWidgetStates_alwaysDisabledWhenAutosaveEnabled(self, getOpenFileNamesMock): self.globalSettingsMock.autoSave = True self.window = ReTextWindow() # check if reload/set encoding is disabled for a tab without filename set self.window.createNew('') app.processEvents() self.check_widgets_disabled(self.window, ('actionReload','actionSetEncoding')) self.window.actionOpen.trigger() app.processEvents() self.check_widgets_disabled(self.window, ('actionReload','actionSetEncoding')) def test_doesNotTweakSpecialCharacters(self): fileName = tempfile.mkstemp(suffix='.mkd')[1] content = 'Non-breaking\u00a0space\n\nLine\u2028separator\n' with open(fileName, 'w', encoding='utf-8') as tempFile: tempFile.write(content) window = ReTextWindow() window.openFileWrapper(fileName) self.assertTrue(window.saveFile()) with open(fileName, encoding='utf-8') as tempFile: self.assertMultiLineEqual(content, tempFile.read()) with suppress(PermissionError): os.remove(fileName) if __name__ == '__main__': unittest.main() ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1643920524.1925159 ReText-7.2.3/tests/testdata/0000755000175000017500000000000000000000000015314 5ustar00dmitrydmitry././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1630777591.0 ReText-7.2.3/tests/testdata/existing_file.md0000644000175000017500000000002600000000000020465 0ustar00dmitrydmitryexisting_file_content ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1630777591.0 ReText-7.2.3/tests/testdata/existing_file.rst0000644000175000017500000000002600000000000020675 0ustar00dmitrydmitryexisting_file_content