diff --git a/.travis.yml b/.travis.yml index b8b5de3..3f3d545 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,25 @@ -sudo: required -dist: trusty +# Tests +# Verify the install script -before_install: - - echo 'deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse' | sudo tee -a /etc/apt/sources.list - - sudo apt-get -qq update - - sudo apt-get install -y shellcheck +os: linux +dist: bionic +language: shell git: depth: 3 + quiet: true -script: ./shellcheck.sh +branches: + only: +# - master + - themify + +before_install: + - sudo add-apt-repository -y "deb http://archive.ubuntu.com/ubuntu bionic-backports bionic-proposed restricted main multiverse universe" + - sudo apt-get update -qq -y + # nano version <= 4.6 (2019/12/18 = 2.9.3) + - sudo apt-get install -qq -y nano=\* + # shellcheck version >= 0.6.0 (2019/12/18 = 0.6.0) + - sudo apt-get install -qq -y shellcheck=\* + +script: ./tests.sh diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..adada48 --- /dev/null +++ b/LICENSE @@ -0,0 +1,557 @@ +GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 + +Copyright © 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 diff --git a/readme.md b/README.md similarity index 80% rename from readme.md rename to README.md index 2aea067..35e53b4 100644 --- a/readme.md +++ b/README.md @@ -4,6 +4,8 @@ This repository holds ``{lang}.nanorc`` files that have improved definitions of ## Installation +For readability will use `$install_path` for the path of your choose (in *system wide* the path is always `/usr/share/nano-syntax-highlighting/`). + There are three ways to install this repo. ### 1. Automatic installer @@ -38,11 +40,9 @@ Feel free to add your official package manager. ### 3. Clone repo (copy the files) -The files should be placed inside of the `~/.nano/` directory. - -You can put the files in another directory inside the correct `.nano` folder. -For example: `~/.nano/nanorc/`. -For readability will use `$install_path` for the path of your choose (in *system wide* the path is always `/usr/share/nano-syntax-highlighting/`). +The files should be placed inside of the `~/.nano/` directory. +You can put the files in another directory inside the correct `.nano` folder. +For example: `~/.nano/nanorc/`. For user, only run: @@ -86,6 +86,13 @@ include "~/.nano/c.nanorc" ## Tricks & Tweaks +### Themes - WIP + +There are three themes you can use: +- original: only nano's approximate default highlight. +- project: only scopatz's highlight. +- custom: highlight, GUI and shortcuts. + ### MacOS `\<` and `\>` are regular character escapes on MacOS. @@ -106,6 +113,17 @@ But if some original nanorc file needs an update, feel free to [patch it](https: Please see this [issue](https://savannah.gnu.org/bugs/?56994). +### New Features + +Sometimes new features are pending in nano's project issues or in a superior version of nano. +A view in that issues it can be helpful or upgrade the nano's version. +See GNU Project link in the end. + ## Acknowledgements -Some of these files are derived from the original [Nano](https://www.nano-editor.org) editor [repo](https://git.savannah.gnu.org/cgit/nano.git) +- [Nano Editor](https://www.nano-editor.org) for some `nanorc` files. +- [GNU Project](https://savannah.gnu.org/projects/nano/) for hosting the `nano`'s git and issues. +- [nanorc-mac](https://github.com/richrad/nanorc-mac) for the themes idea. +- [Bruce Barnert](http://www.grymoire.com/Unix/Sed.html) for good `sed` documentation. + +- And to all contributors! diff --git a/install.sh b/install.sh index c26cc80..278a1bb 100755 --- a/install.sh +++ b/install.sh @@ -1,52 +1,272 @@ #!/bin/sh -# check for unzip before we continue -if [ ! "$(command -v unzip)" ]; then - echo 'unzip is required but was not found. Install unzip first and then run this script again.' >&2 +# IMPROVED NANO SYNTAX HIGHLIGHTING FILES +# Get nano editor better to use and see. + +# Copyright (C) 2014+ Anthony Scopatz et al. +# 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 . +# https://spdx.org/licenses/GPL-3.0-or-later.html + +# Help: +# Sed: http://www.grymoire.com/Unix/Sed.html + +# Bash Variables +# Ativate or not the erros (1=activated) +OPTERR=1 +# Separator (useful for simulate arrays) +G_IFS=" " +# Debugging variables +set -e +set -x + +# Global Variables +G_VERSION="2019.10.17" +G_DEPS="unzip sed" +G_FILE="${HOME}/.nanorc" +G_REPO_MASTER="https://github.com/scopatz/nanorc/archive/master.zip" +G_REPO_RELEASE="https://github.com/scopatz/nanorc/archive/${G_VERSION}.zip" +# G_NANO_VERSION="4.6.0" +# G_NANO_NRC_DIR="" +unset G_LITE G_UNSTABLE G_VERBOSE G_DIR G_THEME + +# Exit Values Help +# 0 - OK +# 1 - Big problem + +# Functions + +# Show the usage/help +f_menu_usage(){ + printf "\n Usage: %s [ -h|-l|-u|-v|-w ] [ -d DIR ] [ -t THEME ]" "$0" + printf "\n" + printf "\n IMPROVED NANO SYNTAX HIGHLIGHTING FILES" + printf "\n Get nano editor better to use and see." + printf "\n" + printf "\n -h Show help or usage." + printf "\n -l Activate lite installation." + printf "\n We will take account your existing .nanorc files." + printf "\n -u Use the unstable branch (master)." + printf "\n -v Show version, license and other info." + printf "\n -w Turn the script more verbose, often to tests." + printf "\n" + printf "\n -d DIR" + printf "\n Give other directory for installation." + printf "\n Default: ~/.nano/nanorc/" + printf "\n" + printf "\n -t THEME" + printf "\n Give other theme for installation." + printf "\n Default: scopatz" + printf "\n Options: nano, scopatz, tpro" + exit 1 +} + +# Show version, license and other file. +f_menu_version(){ + printf "\n IMPROVED NANO SYNTAX HIGHLIGHTING FILES" + printf "\n Version %s" "${G_VERSION}" + printf "\n" + printf "\n Copyright (C) 2014+ Anthony Scopatz et al." + printf "\n License GPLv3+: GNU GPL version 3 or later ." + printf "\n This is free software: you are free to change and redistribute it." + printf "\n There is NO WARRANTY, to the extent permitted by law." + printf "\n" + printf "\n Written by Anthony Scopatz and others." + printf "\n" + printf "\n For bugs report, please fill an issue at https://github.com/scopatz/nanorc" + + exit 0 +} + +# Check dependencies +f_check_deps(){ + DEPS_MISSED="" + + # If there isn't the dependency the $DEPS_MISSED will be populated. + for DEP in $G_DEPS; do + if [ ! "$(command -v "$DEP")" ]; then + DEPS_MISSED="${DEP} ${DEPS_MISSED}" + fi + done + + # Error if $DEPS_MISSED is populated. + if [ "$DEPS_MISSED" = "" ]; then + return 0 + else + for DEP in $DEPS_MISSED; do + printf "\n The '%s' program is required but was not found. Install '${DEP}' first and then run this script again." "${DEP}" >&2 + done + return 1 + fi +} + +# Set IFS +f_set_ifs(){ + temp=$IFS + IFS=$G_IFS + G_IFS=temp +} + +# Set Variable +# Receives two parameters: +# 1. the variable name +# 2. a value +# Sources: https://unix.stackexchange.com/questions/23111/what-is-the-eval-command-in-bash +f_set_variable(){ + varname=$1 + varvalue="" + shift + + # Because 'sh' do not recognize indirect expansion "${!#}" like bash. + # Alert! The backslash "\" is needed! + eval varvalue="\$${varname}" + + if [ -z "${varvalue}" ]; then + eval "$varname=${*}" + else + printf "\n Error: '%s' is already set." "${varname}" + usage + fi +} + +# Get Nanorc's +# Get the not installed Nano's files. +# This function is only called in lite installation. +# Sources: +# http://mywiki.wooledge.org/ParsingLs +# https://unix.stackexchange.com/questions/70614/how-to-output-only-file-names-with-spaces-in-ls-al +# https://stackoverflow.com/questions/25156902/how-to-check-if-find-command-didnt-find-anything-bash-opensus +# https://stackoverflow.com/questions/59110820/find-operator-cant-go-up-in-directory +f_get_nanorcs(){ + lite="" + + if cd nanorc/; then + printf "\n Error: Cannot open or access '%s' directory." "nanorc/" + exit 1 + fi + + for file in *; do + [ -e "$file" ] || continue + + if [ -z "$(find "../original/" -name "$file")" ]; then + lite="$(printf "%s\ninclude %s" "$lite" "$file")" + fi + + done + cd .. + + return "$lite" +} + +# Install +# Sources: +# https://www.cyberciti.biz/faq/download-a-file-with-curl-on-linux-unix-command-line/ +f_install(){ + temp="temp.zip" + begin="# BEGIN" + end="# END" + theme="${G_DIR}/themes/${G_THEME}/" + # Sed rules : skip over the line "$begin" tag and before "$end" tag + sed_lite="$(printf "/%s/,/%s/{ /%s/n /%s/ !{ s/*// r '%s/config' r '%s' d }}" "$begin" "$end" "$begin" "$end" "$theme" "$(f_get_nanorc)")" + sed_no_lite="$(printf "/%s/,/%s/{ /%s/n /%s/ !{ s/*// r '%s/config' r 'include /nanorc/*' d }}" "$begin" "$end" "$begin" "$end" "$theme")" + + if cd "$HOME"; then + printf "\n Error: Cannot open or access '%s' directory." "${HOME}" + exit 1 + fi + + mkdir -p "$G_DIR" + + if [ ! -d "$G_DIR" ]; then + printf "\n Error: '%s' is not a directory or cannot be accessed or created." "${G_DIR}" + usage + fi + + if [ "$G_UNSTABLE" = true ]; then + curl -L -o $temp $G_REPO_MASTER + else + curl -L -o $temp $G_REPO_RELEASE + fi + + unzip -u $temp + rm $temp + + if [ "$G_UNSTABLE" = true ]; then + mv "nanorc-master/*" "$G_DIR" + rm -rf "nanorc-master" + else + mv "nanorc-${G_VERSION}" "$G_DIR" + rm -rf "nanorc-${G_VERSION}" + fi + + if [ ! -d "$theme" ]; then + printf "\n Error: '%s' is not a theme or cannot be accessed." "${G_THEME}" + usage + fi + + touch "$G_FILE" + + printf "\n %s \n %s \n" "$begin" "$end" >> "$G_FILE" + + if [ "$G_LITE" = true ]; then + sed -n -i.bkp "$sed_lite" "$G_FILE" + else + sed -n -i.bkp "$sed_no_lite" "$G_FILE" + _update_nanorc + fi +} + +# big change: update all nanorc's +# big change: install "only" the themed nanorc files and .nanorc + +# next: + +# ============================ +# +# MAIN / Init of script +# +# ============================= + +# Pre-check +f_set_ifs +f_check_deps && exit 1 + +# Menu +# Getopts: https://www.shellscript.sh/tips/getopts/ +while getopts "d:hlt:uvw" c; do + case $c in + d) f_set_variable G_DIR "$OPTARG" ;; + h) f_menu_usage ;; + l) f_set_variable G_LITE true ;; + t) f_set_variable G_THEME "$OPTARG" ;; + u) f_set_variable G_UNSTABLE true ;; + v) f_menu_version ;; + w) f_set_variable G_VERBOSE true ;; + *) f_menu_usage ;; + esac +done + +# Set defaults if there is not. +[ -z "$G_DIR" ] && G_DIR="${HOME}/.nano/nanorc/" +[ -z "$G_THEME" ] && G_THEME="scopatz" + +# Set verbose +if [ "$G_VERBOSE" = true ]; then + set -x fi -_fetch_sources(){ - wget -O /tmp/nanorc.zip https://github.com/scopatz/nanorc/archive/master.zip - mkdir -p ~/.nano/ +# Install +f_install - cd ~/.nano/ || exit - unzip -o "/tmp/nanorc.zip" - mv nanorc-master/* ./ - rm -rf nanorc-master - rm /tmp/nanorc.zip -} - -_update_nanorc(){ - touch ~/.nanorc - - # add all includes from ~/.nano/nanorc if they're not already there - while read -r inc; do - if ! grep -q "$inc" "${NANORC_FILE}"; then - echo "$inc" >> "$NANORC_FILE" - fi - done < ~/.nano/nanorc -} - -_update_nanorc_lite(){ - sed -i '/include "\/usr\/share\/nano\/\*\.nanorc"/i include "~\/.nano\/*.nanorc"' "${NANORC_FILE}" -} - -NANORC_FILE=~/.nanorc - -case "$1" in - -l|--lite) - UPDATE_LITE=1;; - -h|--help) - echo "Install script for nanorc syntax highlights" - echo "Call with -l or --lite to update .nanorc with secondary precedence to existing .nanorc includes" - ;; -esac - -_fetch_sources; -if [ $UPDATE_LITE ]; -then - _update_nanorc_lite -else - _update_nanorc -fi +# Post-check +f_set_ifs +exit 0 diff --git a/license b/license deleted file mode 100644 index 9032bab..0000000 --- a/license +++ /dev/null @@ -1,15 +0,0 @@ - nano run control files - Copyright (C) 2014+ Anthony Scopatz et al. - - 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 . diff --git a/Dockerfile.nanorc b/nanorc/Dockerfile.nanorc similarity index 100% rename from Dockerfile.nanorc rename to nanorc/Dockerfile.nanorc diff --git a/apacheconf.nanorc b/nanorc/apacheconf.nanorc similarity index 100% rename from apacheconf.nanorc rename to nanorc/apacheconf.nanorc diff --git a/arduino.nanorc b/nanorc/arduino.nanorc similarity index 100% rename from arduino.nanorc rename to nanorc/arduino.nanorc diff --git a/asciidoc.nanorc b/nanorc/asciidoc.nanorc similarity index 100% rename from asciidoc.nanorc rename to nanorc/asciidoc.nanorc diff --git a/asm.nanorc b/nanorc/asm.nanorc similarity index 100% rename from asm.nanorc rename to nanorc/asm.nanorc diff --git a/awk.nanorc b/nanorc/awk.nanorc similarity index 100% rename from awk.nanorc rename to nanorc/awk.nanorc diff --git a/c.nanorc b/nanorc/c.nanorc similarity index 100% rename from c.nanorc rename to nanorc/c.nanorc diff --git a/clojure.nanorc b/nanorc/clojure.nanorc similarity index 100% rename from clojure.nanorc rename to nanorc/clojure.nanorc diff --git a/cmake.nanorc b/nanorc/cmake.nanorc similarity index 100% rename from cmake.nanorc rename to nanorc/cmake.nanorc diff --git a/coffeescript.nanorc b/nanorc/coffeescript.nanorc similarity index 100% rename from coffeescript.nanorc rename to nanorc/coffeescript.nanorc diff --git a/colortest.nanorc b/nanorc/colortest.nanorc similarity index 100% rename from colortest.nanorc rename to nanorc/colortest.nanorc diff --git a/conf.nanorc b/nanorc/conf.nanorc similarity index 100% rename from conf.nanorc rename to nanorc/conf.nanorc diff --git a/conky.nanorc b/nanorc/conky.nanorc similarity index 100% rename from conky.nanorc rename to nanorc/conky.nanorc diff --git a/csh.nanorc b/nanorc/csh.nanorc similarity index 100% rename from csh.nanorc rename to nanorc/csh.nanorc diff --git a/csharp.nanorc b/nanorc/csharp.nanorc similarity index 100% rename from csharp.nanorc rename to nanorc/csharp.nanorc diff --git a/css.nanorc b/nanorc/css.nanorc similarity index 100% rename from css.nanorc rename to nanorc/css.nanorc diff --git a/csv.nanorc b/nanorc/csv.nanorc similarity index 100% rename from csv.nanorc rename to nanorc/csv.nanorc diff --git a/cython.nanorc b/nanorc/cython.nanorc similarity index 100% rename from cython.nanorc rename to nanorc/cython.nanorc diff --git a/dot.nanorc b/nanorc/dot.nanorc similarity index 100% rename from dot.nanorc rename to nanorc/dot.nanorc diff --git a/dotenv.nanorc b/nanorc/dotenv.nanorc similarity index 100% rename from dotenv.nanorc rename to nanorc/dotenv.nanorc diff --git a/elixir.nanorc b/nanorc/elixir.nanorc similarity index 100% rename from elixir.nanorc rename to nanorc/elixir.nanorc diff --git a/email.nanorc b/nanorc/email.nanorc similarity index 100% rename from email.nanorc rename to nanorc/email.nanorc diff --git a/erb.nanorc b/nanorc/erb.nanorc similarity index 100% rename from erb.nanorc rename to nanorc/erb.nanorc diff --git a/etc-hosts.nanorc b/nanorc/etc-hosts.nanorc similarity index 100% rename from etc-hosts.nanorc rename to nanorc/etc-hosts.nanorc diff --git a/fish.nanorc b/nanorc/fish.nanorc similarity index 100% rename from fish.nanorc rename to nanorc/fish.nanorc diff --git a/fortran.nanorc b/nanorc/fortran.nanorc similarity index 100% rename from fortran.nanorc rename to nanorc/fortran.nanorc diff --git a/fsharp.nanorc b/nanorc/fsharp.nanorc similarity index 100% rename from fsharp.nanorc rename to nanorc/fsharp.nanorc diff --git a/genie.nanorc b/nanorc/genie.nanorc similarity index 100% rename from genie.nanorc rename to nanorc/genie.nanorc diff --git a/gentoo.nanorc b/nanorc/gentoo.nanorc similarity index 100% rename from gentoo.nanorc rename to nanorc/gentoo.nanorc diff --git a/git.nanorc b/nanorc/git.nanorc similarity index 100% rename from git.nanorc rename to nanorc/git.nanorc diff --git a/gitcommit.nanorc b/nanorc/gitcommit.nanorc similarity index 100% rename from gitcommit.nanorc rename to nanorc/gitcommit.nanorc diff --git a/glsl.nanorc b/nanorc/glsl.nanorc similarity index 100% rename from glsl.nanorc rename to nanorc/glsl.nanorc diff --git a/go.nanorc b/nanorc/go.nanorc similarity index 100% rename from go.nanorc rename to nanorc/go.nanorc diff --git a/groff.nanorc b/nanorc/groff.nanorc similarity index 100% rename from groff.nanorc rename to nanorc/groff.nanorc diff --git a/haml.nanorc b/nanorc/haml.nanorc similarity index 100% rename from haml.nanorc rename to nanorc/haml.nanorc diff --git a/haskell.nanorc b/nanorc/haskell.nanorc similarity index 100% rename from haskell.nanorc rename to nanorc/haskell.nanorc diff --git a/hcl.nanorc b/nanorc/hcl.nanorc similarity index 100% rename from hcl.nanorc rename to nanorc/hcl.nanorc diff --git a/html.j2.nanorc b/nanorc/html.j2.nanorc similarity index 100% rename from html.j2.nanorc rename to nanorc/html.j2.nanorc diff --git a/html.nanorc b/nanorc/html.nanorc similarity index 100% rename from html.nanorc rename to nanorc/html.nanorc diff --git a/i3.nanorc b/nanorc/i3.nanorc similarity index 100% rename from i3.nanorc rename to nanorc/i3.nanorc diff --git a/ical.nanorc b/nanorc/ical.nanorc similarity index 100% rename from ical.nanorc rename to nanorc/ical.nanorc diff --git a/ini.nanorc b/nanorc/ini.nanorc similarity index 100% rename from ini.nanorc rename to nanorc/ini.nanorc diff --git a/inputrc.nanorc b/nanorc/inputrc.nanorc similarity index 100% rename from inputrc.nanorc rename to nanorc/inputrc.nanorc diff --git a/jade.nanorc b/nanorc/jade.nanorc similarity index 100% rename from jade.nanorc rename to nanorc/jade.nanorc diff --git a/java.nanorc b/nanorc/java.nanorc similarity index 100% rename from java.nanorc rename to nanorc/java.nanorc diff --git a/javascript.nanorc b/nanorc/javascript.nanorc similarity index 100% rename from javascript.nanorc rename to nanorc/javascript.nanorc diff --git a/js.nanorc b/nanorc/js.nanorc similarity index 100% rename from js.nanorc rename to nanorc/js.nanorc diff --git a/json.nanorc b/nanorc/json.nanorc similarity index 100% rename from json.nanorc rename to nanorc/json.nanorc diff --git a/keymap.nanorc b/nanorc/keymap.nanorc similarity index 100% rename from keymap.nanorc rename to nanorc/keymap.nanorc diff --git a/kickstart.nanorc b/nanorc/kickstart.nanorc similarity index 100% rename from kickstart.nanorc rename to nanorc/kickstart.nanorc diff --git a/ledger.nanorc b/nanorc/ledger.nanorc similarity index 100% rename from ledger.nanorc rename to nanorc/ledger.nanorc diff --git a/lisp.nanorc b/nanorc/lisp.nanorc similarity index 100% rename from lisp.nanorc rename to nanorc/lisp.nanorc diff --git a/lua.nanorc b/nanorc/lua.nanorc similarity index 100% rename from lua.nanorc rename to nanorc/lua.nanorc diff --git a/makefile.nanorc b/nanorc/makefile.nanorc similarity index 100% rename from makefile.nanorc rename to nanorc/makefile.nanorc diff --git a/man.nanorc b/nanorc/man.nanorc similarity index 100% rename from man.nanorc rename to nanorc/man.nanorc diff --git a/markdown.nanorc b/nanorc/markdown.nanorc similarity index 100% rename from markdown.nanorc rename to nanorc/markdown.nanorc diff --git a/mpdconf.nanorc b/nanorc/mpdconf.nanorc similarity index 100% rename from mpdconf.nanorc rename to nanorc/mpdconf.nanorc diff --git a/mutt.nanorc b/nanorc/mutt.nanorc similarity index 100% rename from mutt.nanorc rename to nanorc/mutt.nanorc diff --git a/nanorc b/nanorc/nanorc similarity index 100% rename from nanorc rename to nanorc/nanorc diff --git a/nanorc.nanorc b/nanorc/nanorc.nanorc similarity index 100% rename from nanorc.nanorc rename to nanorc/nanorc.nanorc diff --git a/nginx.nanorc b/nanorc/nginx.nanorc similarity index 100% rename from nginx.nanorc rename to nanorc/nginx.nanorc diff --git a/nmap.nanorc b/nanorc/nmap.nanorc similarity index 100% rename from nmap.nanorc rename to nanorc/nmap.nanorc diff --git a/ocaml.nanorc b/nanorc/ocaml.nanorc similarity index 100% rename from ocaml.nanorc rename to nanorc/ocaml.nanorc diff --git a/octave.nanorc b/nanorc/octave.nanorc similarity index 100% rename from octave.nanorc rename to nanorc/octave.nanorc diff --git a/patch.nanorc b/nanorc/patch.nanorc similarity index 100% rename from patch.nanorc rename to nanorc/patch.nanorc diff --git a/peg.nanorc b/nanorc/peg.nanorc similarity index 100% rename from peg.nanorc rename to nanorc/peg.nanorc diff --git a/perl.nanorc b/nanorc/perl.nanorc similarity index 100% rename from perl.nanorc rename to nanorc/perl.nanorc diff --git a/perl6.nanorc b/nanorc/perl6.nanorc similarity index 100% rename from perl6.nanorc rename to nanorc/perl6.nanorc diff --git a/php.nanorc b/nanorc/php.nanorc similarity index 100% rename from php.nanorc rename to nanorc/php.nanorc diff --git a/pkg-config.nanorc b/nanorc/pkg-config.nanorc similarity index 100% rename from pkg-config.nanorc rename to nanorc/pkg-config.nanorc diff --git a/pkgbuild.nanorc b/nanorc/pkgbuild.nanorc similarity index 100% rename from pkgbuild.nanorc rename to nanorc/pkgbuild.nanorc diff --git a/po.nanorc b/nanorc/po.nanorc similarity index 100% rename from po.nanorc rename to nanorc/po.nanorc diff --git a/pov.nanorc b/nanorc/pov.nanorc similarity index 100% rename from pov.nanorc rename to nanorc/pov.nanorc diff --git a/privoxy.nanorc b/nanorc/privoxy.nanorc similarity index 100% rename from privoxy.nanorc rename to nanorc/privoxy.nanorc diff --git a/prolog.nanorc b/nanorc/prolog.nanorc similarity index 100% rename from prolog.nanorc rename to nanorc/prolog.nanorc diff --git a/pug.nanorc b/nanorc/pug.nanorc similarity index 100% rename from pug.nanorc rename to nanorc/pug.nanorc diff --git a/puppet.nanorc b/nanorc/puppet.nanorc similarity index 100% rename from puppet.nanorc rename to nanorc/puppet.nanorc diff --git a/python.nanorc b/nanorc/python.nanorc similarity index 100% rename from python.nanorc rename to nanorc/python.nanorc diff --git a/reST.nanorc b/nanorc/reST.nanorc similarity index 100% rename from reST.nanorc rename to nanorc/reST.nanorc diff --git a/rpmspec.nanorc b/nanorc/rpmspec.nanorc similarity index 100% rename from rpmspec.nanorc rename to nanorc/rpmspec.nanorc diff --git a/ruby.nanorc b/nanorc/ruby.nanorc similarity index 100% rename from ruby.nanorc rename to nanorc/ruby.nanorc diff --git a/rust.nanorc b/nanorc/rust.nanorc similarity index 100% rename from rust.nanorc rename to nanorc/rust.nanorc diff --git a/scala.nanorc b/nanorc/scala.nanorc similarity index 100% rename from scala.nanorc rename to nanorc/scala.nanorc diff --git a/sed.nanorc b/nanorc/sed.nanorc similarity index 100% rename from sed.nanorc rename to nanorc/sed.nanorc diff --git a/sh.nanorc b/nanorc/sh.nanorc similarity index 100% rename from sh.nanorc rename to nanorc/sh.nanorc diff --git a/sls.nanorc b/nanorc/sls.nanorc similarity index 100% rename from sls.nanorc rename to nanorc/sls.nanorc diff --git a/sql.nanorc b/nanorc/sql.nanorc similarity index 100% rename from sql.nanorc rename to nanorc/sql.nanorc diff --git a/svn.nanorc b/nanorc/svn.nanorc similarity index 100% rename from svn.nanorc rename to nanorc/svn.nanorc diff --git a/swift.nanorc b/nanorc/swift.nanorc similarity index 100% rename from swift.nanorc rename to nanorc/swift.nanorc diff --git a/systemd.nanorc b/nanorc/systemd.nanorc similarity index 100% rename from systemd.nanorc rename to nanorc/systemd.nanorc diff --git a/tcl.nanorc b/nanorc/tcl.nanorc similarity index 100% rename from tcl.nanorc rename to nanorc/tcl.nanorc diff --git a/tex.nanorc b/nanorc/tex.nanorc similarity index 100% rename from tex.nanorc rename to nanorc/tex.nanorc diff --git a/ts.nanorc b/nanorc/ts.nanorc similarity index 100% rename from ts.nanorc rename to nanorc/ts.nanorc diff --git a/vala.nanorc b/nanorc/vala.nanorc similarity index 100% rename from vala.nanorc rename to nanorc/vala.nanorc diff --git a/verilog.nanorc b/nanorc/verilog.nanorc similarity index 100% rename from verilog.nanorc rename to nanorc/verilog.nanorc diff --git a/vi.nanorc b/nanorc/vi.nanorc similarity index 100% rename from vi.nanorc rename to nanorc/vi.nanorc diff --git a/x11basic.nanorc b/nanorc/x11basic.nanorc similarity index 100% rename from x11basic.nanorc rename to nanorc/x11basic.nanorc diff --git a/xml.nanorc b/nanorc/xml.nanorc similarity index 100% rename from xml.nanorc rename to nanorc/xml.nanorc diff --git a/xresources.nanorc b/nanorc/xresources.nanorc similarity index 100% rename from xresources.nanorc rename to nanorc/xresources.nanorc diff --git a/yaml.nanorc b/nanorc/yaml.nanorc similarity index 100% rename from yaml.nanorc rename to nanorc/yaml.nanorc diff --git a/yum.nanorc b/nanorc/yum.nanorc similarity index 100% rename from yum.nanorc rename to nanorc/yum.nanorc diff --git a/zsh.nanorc b/nanorc/zsh.nanorc similarity index 100% rename from zsh.nanorc rename to nanorc/zsh.nanorc diff --git a/zshrc.nanorc b/nanorc/zshrc.nanorc similarity index 100% rename from zshrc.nanorc rename to nanorc/zshrc.nanorc diff --git a/original/asm.nanorc b/original/asm.nanorc new file mode 100644 index 0000000..d85226c --- /dev/null +++ b/original/asm.nanorc @@ -0,0 +1,25 @@ +## Here is an example for assembler. + +syntax asm "\.(S|s|asm)$" +magic "assembler source" +comment "//" + +color red "\<[A-Z_]{2,}\>" +color brightgreen "\.(data|subsection|text)" +color green "\.(align|file|globl|global|hidden|section|size|type|weak)" +color brightyellow "\.(ascii|asciz|byte|double|float|hword|int|long|short|single|struct|word)" +color brightred "^[[:space:]]*[.0-9A-Za-z_]*:" +color brightcyan "^[[:space:]]*#[[:space:]]*(define|undef|include|ifn?def|endif|elif|else|if|warning|error)" + +# Strings. +color brightyellow "<[^= ]*>" ""(\\.|[^"])*"" +# Multiline strings. This regex is VERY resource intensive, +# and sometimes colours things that shouldn't be coloured. +###color brightyellow start=""(\\.|[^"])*\\[[:space:]]*$" end="^(\\.|[^"])*"" + +# Comments. +color brightblue "//.*" +color brightblue start="/\*" end="\*/" + +# Trailing whitespace. +color ,green "[[:space:]]+$" diff --git a/original/autoconf.nanorc b/original/autoconf.nanorc new file mode 100644 index 0000000..a5e839f --- /dev/null +++ b/original/autoconf.nanorc @@ -0,0 +1,32 @@ +## Here is an example for Autoconf. + +syntax autoconf "\.(ac|m4)$" +comment "#" + +# Keywords: +color yellow "\<(if|test|then|elif|else|fi|for|in|do|done)\>" +color yellow "(=|!=|&&|\|\|)" + +# Macros: +color cyan "\<[[:upper:]_[:digit:]]+\>" + +# Version numbers: +color red "\<[-_.0-9]+\>" + +# Strings: +color red "\"[^"]*\"" "\'[^']*\'" + +# Backticks: +color green "`[^`]*`" + +# Error lines: +color brightred "^[[:space:]]*\*\*\*.*" + +# Brackets: +color magenta "\[|\]|\(|\)" + +# Comments: +color blue "^[[:blank:]]*#.*" "\" +color red "\<(FILENAME|FNR|FS|IGNORECASE|LINT|NF|NR|OFMT|OFS|ORS)\>" +color red "\<(PROCINFO|RS|RT|RSTART|RLENGTH|SUBSEP|TEXTDOMAIN)\>" +# Function declarations and special patterns. +color brightgreen "\<(function|extension|BEGIN|END)\>" +# Operators. +color green "(\{|\}|\(|\)|\;|\]|\[|\\|<|>|!|=|&|\+|-|\*|%|/|\?:|\^|\|)" +# Flow control. +color brightyellow "\<(for|if|while|do|else|in|delete|exit)\>" +color brightyellow "\<(break|continue|return)\>" +# I/O statements. +color brightgreen "\<(close|fflush|getline|next|nextfile|print|printf|system)\>" +# Standard functions. +color magenta "\<(atan2|cos|exp|int|log|rand|sin|sqrt|srand)\>" +color magenta "\<(asort|asorti|gensub|gsub|index|length|match)\>" +color magenta "\<(split|sprintf|strtonum|sub|substr|tolower|toupper)\>" +color magenta "\<(mktime|strftime|systime)\>" +color magenta "\<(and|compl|lshift|or|rshift|xor)\>" +color magenta "\<(bindtextdomain|dcgettext|dcngettext)\>" + +# Strings. +color brightyellow "<[^= ]*>" ""(\\.|[^"])*"" +# Comments. +color brightblue "(^|[[:space:]])#.*$" + +# Trailing whitespace. +color ,green "[[:space:]]+$" diff --git a/original/c.nanorc b/original/c.nanorc new file mode 100644 index 0000000..3537480 --- /dev/null +++ b/original/c.nanorc @@ -0,0 +1,42 @@ +## Here is an example for C/C++. + +syntax c "\.([ch](pp|xx)?|C|cc|c\+\+|cu|H|hh|ii?)$" +magic "^(C|C\+\+) (source|program)" +comment "//" + +# Constants. +color brightred "\<[A-Z_][0-9A-Z_]+\>" +# Labels. +color brightmagenta "^[[:space:]]*[A-Z_a-z]+:[[:space:]]*$" + +color green "\<(float|double|bool|char|int|short|long|sizeof|enum|void|auto|static|const|struct|union|typedef|extern|(un)?signed|inline)\>" +color green "\<([[:lower:]][[:lower:]_]*|(u_?)?int(8|16|32|64))_t\>" +color green "\<(class|namespace|template|public|protected|private|typename|this|friend|virtual|override|using|mutable|volatile|register|explicit)\>" +color brightyellow "\<(for|if|while|do|else|case|default|switch)\>" +color brightyellow "\<(try|throw|catch|operator|new|delete)\>" +color magenta "\<(goto|continue|break|return)\>" +color brightmagenta "'([^'\]|(\\["'abfnrtv\\]))'" "'\\(([0-3]?[0-7]{1,2}))'" "'\\x[0-9A-Fa-f]{1,2}'" + +# GCC builtins. +color cyan "__attribute__[[:space:]]*\(\([^)]*\)\)" "__(aligned|asm|builtin|hidden|inline|packed|restrict|section|typeof|weak)__" + +# Strings. In general you will want your strings and comments to come last, +# because highlighting rules are applied in the order they are read in. +color brightyellow ""([^"]|\\")*"" "#[[:space:]]*include[[:space:]]+<[^[:blank:]=]*>" +# Multiline strings. This regex is VERY resource intensive, +# and sometimes colours things that shouldn't be coloured. +###color brightyellow start=""(\\.|[^"])*\\[[:space:]]*$" end="^(\\.|[^"])*"" + +# Preprocessor directives. +color brightcyan start="^[[:space:]]*#[[:space:]]*(if(n?def)?|elif|warning|error|pragma)\>" end="(\`|[^\\])$" +color brightcyan "^[[:space:]]*#[[:space:]]*(define|else|endif|include(_next)?|undef)\>" + +# Comments. +color brightblue "//.*" +color brightblue start="/\*" end="\*/" + +# Reminders. +color brightwhite,yellow "\<(FIXME|TODO|XXX)\>" + +# Trailing whitespace. +color ,green "[[:space:]]+$" diff --git a/original/changelog.nanorc b/original/changelog.nanorc new file mode 100644 index 0000000..bf44242 --- /dev/null +++ b/original/changelog.nanorc @@ -0,0 +1,28 @@ +## Colouring for Changelogs. + +syntax changelog "Change[Ll]og[^/]*$" + +# Author lines. +color green "^(19|20).*" +# Dates. +color red "^(19|20)[0-9-]{8}" +# Email addresses. +color yellow "<[^>]*@[^>]*>" + +# Command-line options. +color cyan "[[:space:]]-[a-zA-Z\$]" "--[8a-z-]+" +# Bug and patch numbers. +color cyan "(BZ|bug|patch) #[0-9]+" "PR [[:alnum:]]+/[0-9]+" +# Probable constants, for variety. +color brightred "\<[A-Z_][0-9A-Z_]+\>" +# Key sequences. +color brightblue "\^[A-Z^\]" "\" + +icolor brightgreen "^[[:space:]]*((else|end)?if|else|(end)?while|(end)?foreach|break)\>" +color brightgreen "\<(NOT|COMMAND|POLICY|TARGET|EXISTS|IS_(DIRECTORY|ABSOLUTE)|DEFINED)[[:space:]]" +color brightgreen "[[:space:]](OR|AND|IS_NEWER_THAN|MATCHES|(STR|VERSION_)?(LESS|GREATER|EQUAL))[[:space:]]" + +icolor brightred "^[[:space:]]*((end)?(function|macro)|return)" + +icolor cyan start="\$(ENV)?\{" end="\}" +color magenta "\<(APPLE|UNIX|WIN32|CYGWIN|BORLAND|MINGW|MSVC(_IDE|60|71|80|90)?)\>" + +color brightblue "(^|[[:space:]])#.*" +color ,green "[[:space:]]+$" diff --git a/original/css.nanorc b/original/css.nanorc new file mode 100644 index 0000000..2780164 --- /dev/null +++ b/original/css.nanorc @@ -0,0 +1,11 @@ +## Here is an example for CSS files. + +syntax css "\.css$" +comment "/*|*/" + +color brightred "." +color brightyellow start="\{" end="\}" +color brightwhite start=":" end="([;^\{]|$)" +color brightblue ":active|:focus|:hover|:link|:visited|:link|:after|:before|$" +color brightblue start="\/\*" end="\\*/" +color green ";|:|\{|\}" diff --git a/original/debian.nanorc b/original/debian.nanorc new file mode 100644 index 0000000..3ec1393 --- /dev/null +++ b/original/debian.nanorc @@ -0,0 +1,21 @@ +## Here is an example for apt's sources.list. + +syntax sources.list "sources\.list(\.d/.*\.list)?(~|\.old|\.save)?$" +comment "#" + +# Coloring the deb lines, working from tail to head. First the +# components -- well, everything, and thus also the components. +color brightmagenta "^deb.*" +# Distribution -- well, everything, except the components. +color brightred "^deb(-src)?\s+.*((ftp|https?|rsh|ssh|copy|file|spacewalk|tor):/\S+|cdrom:\[.+\]/)\s+\S+" +# URIs. +color brightgreen "^deb(-src)?\s+.*(ftp|https?|rsh|ssh|copy|file|spacewalk|tor):/\S+" +# CDroms. +color brightgreen "^deb(-src)?\s+.*cdrom:\[.+\]/" +# Options. +color brightcyan "^deb(-src)?\s+\[.+\]\s+" +# And finally the initial deb tag. +color yellow "^deb(-src)?" + +# Comments. +color brightblue "#.*" diff --git a/original/default.nanorc b/original/default.nanorc new file mode 100644 index 0000000..b23d029 --- /dev/null +++ b/original/default.nanorc @@ -0,0 +1,20 @@ +## An example of a default syntax. The default syntax is used for +## files that do not match any other syntax. + +syntax default +comment "#" + +# Comments. +color cyan "^[[:space:]]*#.*" + +# Spaces in front of tabs. +color ,red " + +" + +# Nano's name, including version. +color brightred "(GNU )?[Nn]ano [1-4]\.[0-9][-.[:alnum:]]*\>" + +# Email addresses. +color magenta "<[[:alnum:].%_+-]+@[[:alnum:].-]+\.[[:alpha:]]{2,}>" + +# Bracketed captions in certain config files. +color brightgreen "^\[.*\]$" diff --git a/original/elisp.nanorc b/original/elisp.nanorc new file mode 100644 index 0000000..0622bd6 --- /dev/null +++ b/original/elisp.nanorc @@ -0,0 +1,33 @@ +## Here is an example for Emacs Lisp. + +syntax elisp "\.el$" +magic "Lisp/Scheme program" +comment ";" + +# Basic functions/macros +color brightcyan "\<(if|when|unless|cond|and|or|lambda|let|progn|while|dolist|dotimes)\>" +color brightcyan "\" +color brightcyan "\" +# Defining functions +color brightcyan "\" +color brightcyan "\" +color brightcyan "\" +# Defining variables +color brightcyan "\" +# Customization functions +color brightcyan "\" +# Setting values +color brightcyan "\<(setq(-default|-local)?|setf|push|pop|declare(-function)?)\>" +# Feature functions +color brightcyan "\<(require|provide)\>" +# Quoted symbols +color brightyellow "#?'\<(\w|-)+\>" +# Booleans +color brightred "\<(t|nil)\>" +# Keywords +color blue ":(\w|[?-])+" +# Strings +color yellow start="^[[:blank:]]+\"" end="[^\]\"" +color yellow ""(\\.|[^"])*"" +# Comments +color cyan "(^|[[:space:]]);.*" diff --git a/original/fortran.nanorc b/original/fortran.nanorc new file mode 100644 index 0000000..fb2ff0b --- /dev/null +++ b/original/fortran.nanorc @@ -0,0 +1,40 @@ +## Here is an example for Fortran 90/95. + +syntax fortran "\.(f|f90|f95)$" +comment "!" + +color red "\<[0-9]+\>" + +icolor green "\<(action|advance|all|allocatable|allocated|any|apostrophe)\>" +icolor green "\<(append|asis|assign|assignment|associated|character|common)\>" +icolor green "\<(complex|data|default|delim|dimension|double precision)\>" +icolor green "\<(elemental|epsilon|external|file|fmt|form|format|huge)\>" +icolor green "\<(implicit|include|index|inquire|integer|intent|interface)\>" +icolor green "\<(intrinsic|iostat|kind|logical|module|none|null|only)>" +icolor green "\<(operator|optional|pack|parameter|pointer|position|private)\>" +icolor green "\<(program|public|real|recl|recursive|selected_int_kind)\>" +icolor green "\<(selected_real_kind|subroutine|status)\>" + +icolor cyan "\<(abs|achar|adjustl|adjustr|allocate|bit_size|call|char)\>" +icolor cyan "\<(close|contains|count|cpu_time|cshift|date_and_time)\>" +icolor cyan "\<(deallocate|digits|dot_product|eor|eoshift|function|iachar)\>" +icolor cyan "\<(iand|ibclr|ibits|ibset|ichar|ieor|iolength|ior|ishft|ishftc)\>" +icolor cyan "\<(lbound|len|len_trim|matmul|maxexponent|maxloc|maxval|merge)\>" +icolor cyan "\<(minexponent|minloc|minval|mvbits|namelist|nearest|nullify)\>" +icolor cyan "\<(open|pad|present|print|product|pure|quote|radix)\>" +icolor cyan "\<(random_number|random_seed|range|read|readwrite|replace)\>" +icolor cyan "\<(reshape|rewind|save|scan|sequence|shape|sign|size|spacing)\>" +icolor cyan "\<(spread|sum|system_clock|target|transfer|transpose|trim)\>" +icolor cyan "\<(ubound|unpack|verify|write|tiny|type|use|yes)\>" + +icolor yellow "\<(.and.|case|do|else|else?if|else?where|end|end?do|end?if)\>" +icolor yellow "\<(end?select|.eqv.|forall|if|lge|lgt|lle|llt|.neqv.|.not.)\>" +icolor yellow "\<(.or.|repeat|select case|then|where|while)\>" + +icolor magenta "\<(continue|cycle|exit|go?to|result|return)\>" + +# Strings. +color yellow "<[^= ]*>" ""(\\.|[^"])*"" + +# Comments. +color blue "!.*" diff --git a/original/gentoo.nanorc b/original/gentoo.nanorc new file mode 100644 index 0000000..e9d178d --- /dev/null +++ b/original/gentoo.nanorc @@ -0,0 +1,74 @@ +## Here is an example for Gentoo ebuilds/eclasses, +## and (further down) one for Portage control files. + +syntax ebuild "\.e(build|class|blit)$" +comment "#" + +## All the standard portage functions: +color brightgreen "(^|\" +color brightgreen "^pkg_(config|nofetch|info|pretend|setup|(pre|post)(inst|rm))\>" +color brightgreen "\" +## Bash-related syntax: +color green "\<(break|case|continue|do|done|elif|else|esac|exit|fi|for|function|if|in|read|return|select|shift|then|time|until|while)\>" +color green "\<(declare|eval|exec|export|let|local)\>" +color green "[{}():;|`$<>!=&\\]" "(\]|\[)" +color green "-[defhnrsuwxzL]\>" +color green "-(eq|ne|gt|lt|ge|le)\>" +## Variables... official portage ones in red, all others in bright red: +color brightred "\$[-0-9@*#?$!]" "\$[[:alpha:]_][[:alnum:]_]*" +color brightred "\$\{[#!]?([-@*#?$!]|[0-9]+|[[:alpha:]_][[:alnum:]_]*)(\[([[:digit:]]|@)+\])?(([#%/]|:?[-=?+])[^}]*\}|\[|\})" +color red "\<(EAPI|ARCH|HOMEPAGE|DESCRIPTION|IUSE|SRC_URI|LICENSE|SLOT|KEYWORDS|[HPR]?DEPEND|PROVIDE|PROPERTIES|REQUIRED_USE|RESTRICT|USERLAND)\>" +color red "\<(S|E?D|T|PV|PF|P|PN|PR|PVR|A|CATEGORY|DISTDIR|FILESDIR|EPREFIX|E?ROOT|WORKDIR)\>" +color red "\<(AS|C(PP|XX)?|LD)FLAGS\>" "\" "\<(MERGE_TYPE|REPLACING_VERSIONS|REPLACED_BY_VERSION)\>" +color red "\" +color red "\" +color red "\<(PATCHES|(HTML_)?DOCS)\>" "\" "\" +## Portage commands: +color magenta "\<(use(_(with|enable|if_iuse)|x)?|in_iuse) [!a-zA-Z0-9_+ -]*" "inherit.*" +color brightblue "\" +color brightblue "\" "\" +color brightblue "\" "\" +color brightblue "\" "\" +color brightblue "\<(die|hasv?|inherit|nonfatal)\>" "\<(use(_(with|enable|if_iuse)|x)?|in_iuse)\>" "\<(has|best)_version\>" +color brightblue "\<(do|new)(ins|(games)?s?bin|doc|lib(\.so|\.a)?|man|info|exe|initd|confd|envd|pam|menu|icon)\>" +color brightblue "\" "\" +color brightblue "\" "\" +color brightblue "\<(doc|ins|exe)?into\>" "\<(f|games)(owners|perms)\>" "\<(exe|ins|dir)opts\>" +color brightblue "\" +color brightblue "\" +## Common commands used in ebuilds: +color blue "\<(awk|cat|cd|chmod|chown|cp|echo|env|find|e?grep|ln|make|mkdir|mv|popd|printf|pushd|rm|rmdir|sed|set|tar|touch|unset|xargs)\>" +## Comments (doesn't work that well): +color yellow "(^|[[:space:]])#.*" +## Strings (doesn't work that well): +color brightyellow ""(\\.|[^\"])*"" "'(\\.|[^'])*'" +## Trailing space is bad! +color ,green "[[:space:]]+$" +## Mixed whitespace is also bad. +color ,green " " + + +syntax /etc/portage "\.(accept_keywords|env|keywords|mask|unmask|use)(/.+)?$" +comment "#" + +## Base text: +color green ".+" +## Likely version and slot numbers: +color magenta "-[[:digit:].]+(_(alpha|beta|pre|rc|p)[[:digit:]]*)*(-r[[:digit:]]+)?([:[:space:]]|$)" +color magenta ":[^[:space:]]+([[:space:]]|$)" +## Use flags (must come after version/slot): +color brightred "[[:space:]]+\+?[A-Za-z0-9+_@-]+" +color brightblue "[[:space:]]+-[A-Za-z0-9+_@-]+" +## Accepted arches: +color white "[~-]?\<(alpha|amd64|arm(64)?|hppa|ia64|m68k|mips|nios2|ppc(64)?|riscv|s390|sh|sparc|x86)(-(aix|(f|free|net|open)bsd|cygwin|hpux|interix|linux|macos|mint|solaris|winnt))?\>" +color white "[[:space:]][*~-]?\*" +## Categories: +color cyan "^[[:space:]]*[^/]*/" +## Masking regulators: +color brightmagenta "^[[:space:]]*(=|~|<|<=|>|>=)" +## Comments: +color yellow "#.*" +## Trailing space is bad! +color ,green "[[:space:]]+$" +## Mixed whitespace is also bad. +color ,green " " diff --git a/original/go.nanorc b/original/go.nanorc new file mode 100644 index 0000000..f8b61e0 --- /dev/null +++ b/original/go.nanorc @@ -0,0 +1,41 @@ +## Here is an example for Go. + +syntax go "\.go$" +comment "//" + +# Types. +color green "\<(bool|u?int(8|16|32|64)?|float(32|64)|complex(64|128)|byte|rune|uintptr|string|error)\>" +color green "\<((<-[[:space:]]*)chan|chan[[:space:]]*<-|const|func|interface|map|struct|type|var)\>" + +# Predefined functions. +color blue "\<(append|cap|close|complex|copy|delete|imag|len|make|new|panic|print|println|real|recover)\>" + +# Control structures. +color brightyellow "\<(case|default|defer|else|for|go|if|range|select|switch)\>" + +# Control flow. +color magenta "\<(break|continue|fallthrough|goto|return)\>" + +# Declarations. +color brightcyan "\<(package|import)\>" +color brightcyan "//[[:space:]]*\+build[[:space:]]+(([a-zA-Z_0-9]+[[:space:]]*)+,[[:space:]]*)*[a-zA-Z_0-9]+" + +# Literals. +color red "\<([1-9][0-9]*|0[0-7]*|0[xX][0-9A-Fa-f]+)\>" +color red "\<[0-9]+\.[0-9]*([eE][+-]?[0-9]+)?i?\>" +color red "\<[0-9]+[eE][+-]?[0-9]+i?\>" +color red "\B\.[0-9]+([eE][+-]?[0-9]+)?i?\>" +color red "\<[0-9]+i\>" + +# Strings and characters; slightly fuzzy. +color red "\<(true|false|nil|iota|_)\>" +color red "'(\\.|[^'])+'" +color red ""(\\.|[^"])*"" +color red start=""(\\.|[^"])*\\[[:space:]]*$" end="^(\\.|[^"])*"" + +# Comments. +color brightblue "//.*" +color brightblue start="/\*" end="\*/" + +# Trailing whitespace. +color ,green "[[:space:]]+$" diff --git a/original/groff.nanorc b/original/groff.nanorc new file mode 100644 index 0000000..a24c40b --- /dev/null +++ b/original/groff.nanorc @@ -0,0 +1,26 @@ +## Here is an example for groff. + +syntax groff "(/tmac\.[^/]+$|\.(m[ems]|rof|tmac)$)" +comment ".\"" + +# The argument of .ds or .nr +color cyan "^\.(ds|nr) [^[:space:]]*" +# Single-character escapes +color brightmagenta "\\." +# The argument of \f or \s in the same color +color brightmagenta "\\f." "\\f\(.." "\\s(\+|\-)?[0-9]" +# Newlines +color cyan "(\\|\\\\)n(.|\(..)" +color cyan start="(\\|\\\\)n\[" end="]" +# Requests +color brightgreen "^\.[[:space:]]*[^[:space:]]*" +# Comments +color yellow "^\.\\".*" +# Strings +color green "(\\|\\\\)\*(.|\(..)" +color green start="(\\|\\\\)\*\[" end="]" +# Characters +color brightred "\\\(.." +color brightred start="\\\[" end="]" +# Macro arguments +color brightcyan "\\\\\$[1-9]" diff --git a/original/guile.nanorc b/original/guile.nanorc new file mode 100644 index 0000000..c7db3de --- /dev/null +++ b/original/guile.nanorc @@ -0,0 +1,24 @@ +## Here is an example for Guile Scheme. + +syntax guile "\.scm$" +header "^#!.*guile" +comment ";" + +# Basic scheme functions +color green "\<(do|if|lambda|let(rec)?|map|unless|when)\>" +# Defining things +color brightcyan "\" +# Quoted symbols +color brightyellow "'\<(\w|-)+\>" +# Chars +color brightmagenta "#\\." +color brightmagenta "#\\\w+\>" +# Booleans +color brightred "(#t|#f)\>" +# Keywords +color blue "#?:(\w|[?-])+" +# Strings +color yellow start="^[[:blank:]]+\"" end="[^\]\"" +color yellow ""(\\.|[^"])*"" +# Comments +color cyan "(^|[[:space:]]);.*" diff --git a/original/html.nanorc b/original/html.nanorc new file mode 100644 index 0000000..0507512 --- /dev/null +++ b/original/html.nanorc @@ -0,0 +1,28 @@ +## Here is an example for HTML. + +syntax html "\.html?$" +magic "HTML document" +comment "" + +# Tags: +color cyan "<[[:alpha:]/!?][^>]*>" +# Bold, italic, and underlined: +color brightmagenta "" + +# Named character references: +color red "&[^;[:space:]]*;" +# Strings: +color green ""(\\.|[^"])*"" + +# Attributes: +color red "(abbr|accept(-charset)?|accesskey|action|alink|align|alt|archive|axis|background|bgcolor|border)=" +color red "(cell(padding|spacing)|char(off|set)?|checked|cite|class(id)?|compact|code(base|tag)?|cols(pan)?)=" +color red "(content(editable)?|contextmenu|coords|data|datetime|declare|defer|dir|disabled|enctype)=" +color red "(for|frame(border)?|headers|height|hidden|href(lang)?|hspace|http-equiv|id|ismap)=" +color red "(label|lang|link|longdesc|margin(height|width)|maxlength|media|method|multiple)=" +color red "(name|nohref|noresize|noshade|object|onclick|onfocus|onload|onmouseover|profile|readonly|rel|rev)=" +color red "(rows(pan)?|rules|scheme|scope|scrolling|selected|shape|size|span|src|standby|start|style|summary)=" +color red "(tabindex|target|text|title|type|usemap|valign|value(type)?|vlink|vspace|width|xmlns|xml:space)=" + +# Comments: +color yellow start="" diff --git a/original/java.nanorc b/original/java.nanorc new file mode 100644 index 0000000..5bb294f --- /dev/null +++ b/original/java.nanorc @@ -0,0 +1,16 @@ +## Here is an example for Java. + +syntax java "\.java$" +magic "Java " +comment "//" + +color green "\<(boolean|byte|char|double|float|int|long|new|short|this|transient|void)\>" +color red "\<(break|case|catch|continue|default|do|else|finally|for|if|return|switch|throw|try|while)\>" +color cyan "\<(abstract|class|extends|final|implements|import|instanceof|interface|native)\>" +color cyan "\<(package|private|protected|public|static|strictfp|super|synchronized|throws|volatile)\>" +color red ""[^"]*"" +color yellow "\<(true|false|null)\>" +color blue "//.*" +color blue start="/\*" end="\*/" +color brightblue start="/\*\*" end="\*/" +color ,green "[[:space:]]+$" diff --git a/original/javascript.nanorc b/original/javascript.nanorc new file mode 100644 index 0000000..1fe7551 --- /dev/null +++ b/original/javascript.nanorc @@ -0,0 +1,24 @@ +## Syntax highlighting for Javascript. + +syntax javascript "\.js$" +comment "//" + +# Declarational stuff. +color green "\<(async|class|const|extends|function|let|this|typeof|var|void)\>" +# Flow control and special keywords. +color brightyellow "\<(do|while|if|else|switch|case|default|for|each|in|of|with)\>" +color brightyellow "\<(await|export|import|throw|try|catch|finally|new|delete)\>" +# "Exit" points. +color magenta "\<(break|continue|return|yield)\>" + +# Octal/decimal and hexadecimal numbers. +color cyan "\<[0-9]+\>" "\<0x[0-9A-Fa-f]+\>" + +# Strings. +color brightmagenta ""(\\.|[^"])*"" "'(\\.|[^'])*'" "`(\\.|[^`])*`" +# Comments. +color brightblue "(^|[[:space:]])//.*" +color brightblue start="/\*" end="\*/" + +# Trailing whitespace. +color ,green "[[:space:]]+$" diff --git a/original/json.nanorc b/original/json.nanorc new file mode 100644 index 0000000..185c08f --- /dev/null +++ b/original/json.nanorc @@ -0,0 +1,34 @@ +## Syntax highlighting for JSON files. + +# See: http://www.json.org/ +# Original author: Aapo Rantalainen +# License: GPLv3 or newer + +syntax json "\.json$" +# No comments are permitted in JSON. +comment "" + +# Numbers (used as value). +color green ":[[:space:]]*\-?(0|[1-9][0-9]*)(\.[0-9]+)?([Ee]?[-+]?[0-9]+)?" +# Values (well, any string). +color brightmagenta "\".+\"" +# Hex numbers (used as value). +color green ":[[:space:]]*\"#[0-9abcdefABCDEF]+\"" +# Escapes. +color green "\\\\" "\\\"" "\\[bfnrt]" "\\u[0-9abcdefABCDEF]{4})" +# Special words. +color green "(true|false|null)" + +# Names (very unlikely to contain a quote). +color brightblue "\"[^"]+\"[[:space:]]*:" + +# Brackets, braces, and separators. +color brightblue "\[" "\]" +color brightred "\{" "\}" +color brightred "," ":" + +# Comments. +color cyan "(^|[[:space:]]+)(//|#).*" + +# Trailing whitespace. +color ,green "[[:space:]]+$" diff --git a/original/lua.nanorc b/original/lua.nanorc new file mode 100644 index 0000000..7c66a52 --- /dev/null +++ b/original/lua.nanorc @@ -0,0 +1,60 @@ +## Syntax highlighting for Lua. +# +## Original author: Matthew Wild +## License: GPL 3 or later + +syntax lua "\.lua$" +magic "Lua script" +linter "luacheck --no-color" +comment "--" + +color brightwhite "\[\[.*\]\]" + +# Operators +color brightyellow ":|\*|/|%|\+|-|\^|>|>=|<|<=|~=|=|\.\.|#|\<(not|and|or)\>" +# Don't partially color ... as an operator +color normal "\.\.\." + +# Statements +color brightblue "\<(do|end|while|repeat|until|if|elseif|then|else|for|in|function|local|return|break)\>" + +# Keywords +color brightyellow "\<(_G|_VERSION|assert|collectgarbage|dofile|error|getfenv|getmetatable|ipairs|load|loadfile|module|next|pairs|pcall|print|rawequal|rawget|rawlen|rawset|require|select|setfenv|setmetatable|tonumber|tostring|type|unpack|xpcall)\s*\(" + +# Standard library +color brightyellow "\" +color brightyellow "\" +color brightyellow "\" +color brightyellow "\" +color brightyellow "\" +color brightyellow "\" +color brightyellow "\" +color brightyellow "\" +color brightyellow "\" +color brightyellow "\" + +# File handle methods +color brightyellow ":(close|flush|lines|read|seek|setvbuf|write)\>" + +# External files +color brightgreen "\<(dofile|require)\>" + +# Special words +color brightmagenta "\<(false|nil|true)\>" + +# Decimal and hexadecimal numbers +color red "\<[0-9]+(\.[0-9]*)?([Ee][+-]?[0-9]+)?\>" +color red "\<0x[0-9A-Fa-f]+(\.[0-9A-Fa-f]*)?([Pp][+-]?[0-9]+)?\>" + +# Brackets +color brightmagenta "\(|\)|\[|\]|\{|\}" + +# Shebang +color brightcyan "^#!.*" + +# Strings +color red ""(\\.|[^"\])*"|'(\\.|[^'\])*'" + +# Simple comments and multiline comments +color green "--.*" +color green start="--\[\[" end="\]\]" diff --git a/original/makefile.nanorc b/original/makefile.nanorc new file mode 100644 index 0000000..a1c116c --- /dev/null +++ b/original/makefile.nanorc @@ -0,0 +1,24 @@ +## Here is an example for Makefiles. + +syntax makefile "(/((GNU)?m|M)akefile[^/]*$|\.(make|mk)$)" +magic "makefile script" +comment "#" + +# Assignments. +color red " (:?:|\+|\?)?= " + +# Keywords. +color magenta "^(if|ifn?def|ifn?eq|else|endif|(-|s)?include)\>" +color magenta "^((override +)?(un)?define|endef|(un)?export|private|vpath)\>" + +# Variable expansions. +color blue "\$+[{(][a-zA-Z0-9_-]+[})]" + +# Targets. +color brightblue "^[^ ]+:" + +# Comments. +color green "(^|[[:space:]]+)#.*" + +# Trailing whitespace. +color ,green "[[:space:]]+$" diff --git a/original/man.nanorc b/original/man.nanorc new file mode 100644 index 0000000..0639612 --- /dev/null +++ b/original/man.nanorc @@ -0,0 +1,23 @@ +## Syntax highlighting for man pages. + +syntax man "\.[1-9]x?$" +magic "troff or preprocessor input" +comment ".\"" + +# Section headers, title line, and indented paragraphs. +color green "^\.(SH|SS|TH) .*" +color brightgreen "^\.(SH|SS|TH) " "^\.([HIT]P)" +# Type faces, and normal paragraphs. +color brightred "^\.(B[IR]?|I[BR]?|R[BI]|S[BM]) .*" +color brightblue "^\.(B[IR]?|I[BR]?|R[BI]|S[BM]) " "^\.([LP]?P)$" +# Inline type faces. +color magenta "\\f[BIPR]" +# Relative margins, hyperlinks, and various other stuff. +color yellow "^\.(RS|RE|UR|UE|PD|DT)" +color yellow "^\.(ad|bp|br|ce|de|ds|el|ie|if|fi|ft|hy|ig|in|na|ne|nf|nh|ps|so|sp|ti|tr)" + +# Comments. +color cyan "(^\.)?\\\".*" + +# Trailing whitespace. +color ,green "[[:space:]]+$" diff --git a/original/mgp.nanorc b/original/mgp.nanorc new file mode 100644 index 0000000..20503d2 --- /dev/null +++ b/original/mgp.nanorc @@ -0,0 +1,9 @@ +## Here is an example for Magicpoint presentations. + +syntax mgp "\.mgp$" +header "^%include.*" +comment "#" + +color green "^%[A-Za-z].*" +color cyan "(^|[[:space:]])(#|%%).*" +color ,green "[[:space:]]+$" diff --git a/original/mutt.nanorc b/original/mutt.nanorc new file mode 100644 index 0000000..97cfcd1 --- /dev/null +++ b/original/mutt.nanorc @@ -0,0 +1,9 @@ +## Here is an example for quoted emails (under e.g. mutt). + +syntax mutt + +# Quoted lines. +color green "^>.*" + +# Signatures, even quoted ones. +color yellow start="^>* ?-- $" end="^>* ?$" diff --git a/original/nanohelp.nanorc b/original/nanohelp.nanorc new file mode 100644 index 0000000..426b23c --- /dev/null +++ b/original/nanohelp.nanorc @@ -0,0 +1,11 @@ +## This is meant for highlighting key combos in a nano help text. + +# It should not apply to any normal file, so no fileregex. +syntax nanohelp + +# Key combos: +color cyan "\^[]4-8A-Z^\_◀▶▲▼]" "[◀▶▲▼]" "\" + +# Quoted indicators: +color brightred "'(\^|M-)'" diff --git a/original/nanorc.nanorc b/original/nanorc.nanorc new file mode 100644 index 0000000..bf31e92 --- /dev/null +++ b/original/nanorc.nanorc @@ -0,0 +1,32 @@ +## Here is an example for nanorc files. + +syntax nanorc "\.?nanorc$" +comment "#" + +# Possible errors and parameters +icolor brightred "^[[:space:]]*((un)?(bind|set)|include|syntax|header|magic|comment|linter|i?color|extendsyntax).*" + +# Keywords +icolor brightgreen "^[[:space:]]*(set|unset)[[:space:]]+(afterends|allow_insecure_backup|atblanks|autoindent|backup|backwards|boldtext|breaklonglines|casesensitive|constantshow|cutfromcursor|emptyline|finalnewline|historylog|jumpyscrolling|linenumbers|locking|morespace|mouse|multibuffer|noconvert|nohelp|nopauses|nonewlines|nowrap|positionlog|preserve|quickblank|quiet|rebinddelete|rebindkeypad|regexp|showcursor|smarthome|smooth|softwrap|suspend|tabstospaces|tempfile|trimblanks|unix|view|wordbounds|zap)\>" +icolor yellow "^[[:space:]]*set[[:space:]]+((error|function|key|number|selected|status|stripe|title)color)[[:space:]]+(bright)?(white|black|red|blue|green|yellow|magenta|cyan|normal)?(,(white|black|red|blue|green|yellow|magenta|cyan|normal))?\>" +icolor brightgreen "^[[:space:]]*set[[:space:]]+(backupdir|brackets|errorcolor|functioncolor|keycolor|matchbrackets|numbercolor|operatingdir|punct|quotestr|selectedcolor|speller|statuscolor|stripecolor|titlecolor|whitespace|wordchars)[[:space:]]+" +icolor brightgreen "^[[:space:]]*set[[:space:]]+(fill[[:space:]]+-?[[:digit:]]+|(guidestripe|tabsize)[[:space:]]+[1-9][0-9]*)\>" +icolor brightgreen "^[[:space:]]*bind[[:space:]]+((\^([[:alpha:]]|[]@\^_]|Space)|M-([[:alpha:]]|[]!"#$%&'()*+,./0-9:;<=>?@\^_`{|}~-]|Space))|F([1-9]|1[0-6])|Ins|Del)[[:space:]]+([[:alpha:]]+|".*")[[:space:]]+(all|main|search|replace(with)?|yesno|gotoline|writeout|insert|ext(ernal)?cmd|help|spell|linter|browser|whereisfile|gotodir)([[:space:]]+#|[[:space:]]*$)" +icolor brightgreen "^[[:space:]]*unbind[[:space:]]+((\^([[:alpha:]]|[]@\^_]|Space)|M-([[:alpha:]]|[]!"#$%&'()*+,./0-9:;<=>?@\^_`{|}~-]|Space))|F([1-9]|1[0-6])|Ins|Del)[[:space:]]+(all|main|search|replace(with)?|yesno|gotoline|writeout|insert|ext(ernal)?cmd|help|spell|linter|browser|whereisfile|gotodir)([[:space:]]+#|[[:space:]]*$)" +icolor brightgreen "^[[:space:]]*extendsyntax[[:space:]]+[[:alpha:]]+[[:space:]]+(i?color|header|magic|comment|linter)[[:space:]]+.*" +icolor brightgreen "^[[:space:]]*(syntax|linter)[[:space:]]+[^[:blank:]]+" +icolor green "^[[:space:]]*((un)?(bind|set)|include|syntax|header|magic|comment|linter|extendsyntax)\>" + +# Strings +color brightmagenta "([[:space:]]|(start|end)=)".+"([[:space:]]|$)" + +# Colors +icolor yellow "^[[:space:]]*i?color[[:space:]]*(bright)?(white|black|red|blue|green|yellow|magenta|cyan|normal)?(,(white|black|red|blue|green|yellow|magenta|cyan|normal))?\>" +icolor magenta "^[[:space:]]*i?color\>" "\<(start|end)=" + +# Comments +color brightblue "(^|[[:space:]]+)#.*" +color cyan "^[[:space:]]*##.*" + +# Trailing whitespace +color ,green "[[:space:]]+$" diff --git a/original/nftables.nanorc b/original/nftables.nanorc new file mode 100644 index 0000000..328f31e --- /dev/null +++ b/original/nftables.nanorc @@ -0,0 +1,30 @@ +## Here is an example for nftables. + +syntax nftables "\.(nft|nftables)$" +header "^#!.*(nft|nftables)" +comment "#" + +# Objects and operations +color green "\<(chain|hook|policy|priority|ruleset|set|table|type|v?map)\>" +color green "\<(define|include)\>" +color red "\<(add|delete|flush|insert|remove|replace)\>" + +# Families +color yellow "\<(arp|bridge|inet|ingress|ip6?|netdev)\>" + +# Terminal statements +color red "\<(drop|reject)\>" +color brightblue "\<(accept|continue|(d|s)nat|goto|jump|masquerade|return)\>" + +# Comments +color cyan "(^|[[:space:]])#.*" + +# Trailing whitespace +color ,green "[[:space:]]+$" + +# Strings and others +color yellow ""(\\.|[^"])*"" "'(\\.|[^'])*'" +color green "[{}():;|`$<>!=&\\]" "(\]|\[)" + +# Basic variable names +color brightred "(\$|@)[[:alpha:]_-][[:alnum:]_.-]*" diff --git a/original/objc.nanorc b/original/objc.nanorc new file mode 100644 index 0000000..7fb0bd7 --- /dev/null +++ b/original/objc.nanorc @@ -0,0 +1,42 @@ +## Here is an example for C/C++/Obj-C. + +syntax m "\.m$" +magic "Objective-C source" +comment "//" + +# Stuffs, +color brightwhite "\<[A-Z_][0-9A-Z_]+\>" +color green "\<(float|double|BOOL|bool|char|int|short|long|id|sizeof|enum|void|static|const|struct|union|typedef|extern|(un)?signed|inline)\>" +color green "\<[[:alpha:]_][[:alnum:]_]*_t\>" +color green "\<(class|namespace|template|public|protected|private|typename|this|friend|virtual|using|mutable|volatile|register|explicit)\>" +color brightgreen "\<(for|if|while|do|else|case|default|switch)\>" +color brightgreen "\<(try|throw|catch|operator|new|delete)\>" +color brightgreen "\<(goto|continue|break|return)\>" +color brightgreen "@(encode|end|implementation|interface)|selector)\>" + +# GCC builtins. +color cyan "__attribute__[[:space:]]*\(\([^)]*\)\)" "__(aligned|asm|builtin|hidden|inline|packed|restrict|section|typeof|weak)__" + +# Selector/method. +color brightmagenta "(^|[[:space:]])\[.*[[:space:]].*\]" +color white ":[[:alnum:]]*" +color magenta "[[:alnum:]]*:" +color white "\[[^][:space:]]*\]" + +# Strings. +color brightblack "'([^'\]|(\\["'abfnrtv\\]))'" "'\\(([0-3]?[0-7]{1,2}))'" "'\\x[0-9A-Fa-f]{1,2}'" +color brightblack "<[^= ]*>" ""(\\.|[^"])*"" +color brightblue "@"(\\.|[^"])*"" +# Multiline strings. This regex is VERY resource intensive, +# and sometimes colours things that shouldn't be coloured. +###color brightyellow start=""(\\.|[^"])*\\[[:space:]]*$" end="^(\\.|[^"])*"" + +# Preprocessor commands. +color brightblue "^[[:space:]]*#[[:space:]]*(define|include|import|(un|ifn?)def|endif|el(if|se)|if|warning|error)" + +# Comments. +color yellow "//.*" +color yellow start="/\*" end="\*/" + +# Trailing whitespace. +color ,green "[[:space:]]+$" diff --git a/original/ocaml.nanorc b/original/ocaml.nanorc new file mode 100644 index 0000000..26b20b9 --- /dev/null +++ b/original/ocaml.nanorc @@ -0,0 +1,30 @@ +## Syntax highlighting for OCaml. + +syntax ocaml "\.mli?$" +magic "OCaml" +comment "(*|*)" + +# Uid: +color red "\<[A-Z][0-9a-z_]{2,}\>" +# Declarations: +color green "\<(let|val|method|in|and|rec|private|virtual|constraint)\>" +# Structure items: +color red "\<(type|open|class|module|exception|external)\>" +# Patterns: +color blue "\<(fun|function|functor|match|try|with)\>" +# Pattern modifiers: +color yellow "\<(as|when|of)\>" +# Conditions: +color cyan "\<(if|then|else)\>" +# Blocks: +color magenta "\<(begin|end|object|struct|sig|for|while|do|done|to|downto)\>" +# Constants: +color green "\<(true|false)\>" +# Modules/classes: +color green "\<(include|inherit|initializer)\>" +# Expression modifiers: +color yellow "\<(new|ref|mutable|lazy|assert|raise)\>" +# Comments: +color white start="\(\*" end="\*\)" +# Strings: (no multiline handling yet) +color brightblack ""[^\"]*"" diff --git a/original/patch.nanorc b/original/patch.nanorc new file mode 100644 index 0000000..8d9e0aa --- /dev/null +++ b/original/patch.nanorc @@ -0,0 +1,26 @@ +## Here is an example for patch files. + +syntax patch "\.(patch|diff|debdiff)$" +magic "diff output" +# There is no official support for comments in patch files. +comment "" + +# Added lines. +color brightgreen "^\+.*" +# Show trailing whitespace only on added lines. +color ,green "[[:space:]]+$" +# Context lines. +color brightblue "^ .*" +# Deleted lines. +color brightred "^-.*" + +# Header lines. +color magenta "^(Index:|diff)[[:blank:]].*" +# File names and dates. +color red "^---.*" +color green "^\+\+\+.*" +# Line numbers. +color brightyellow "^@@.*" + +# Statistics. +color cyan start="^---$" end="^$" diff --git a/original/perl.nanorc b/original/perl.nanorc new file mode 100644 index 0000000..f5657ae --- /dev/null +++ b/original/perl.nanorc @@ -0,0 +1,24 @@ +## Here is an example for Perl. + +syntax perl "\.p[lm]$" +header "^#!.*perl" +magic "Perl script" +comment "#" + +color red "\<(accept|alarm|atan2|bin(d|mode)|c(aller|h(dir|mod|op|own|root)|lose(dir)?|onnect|os|rypt)|d(bm(close|open)|efined|elete|ie|o|ump)|e(ach|of|val|x(ec|ists|it|p))|f(cntl|ileno|lock|ork))\>" "\<(get(c|login|peername|pgrp|ppid|priority|pwnam|(host|net|proto|serv)byname|pwuid|grgid|(host|net)byaddr|protobynumber|servbyport)|([gs]et|end)(pw|gr|host|net|proto|serv)ent|getsock(name|opt)|gmtime|goto|grep|hex|index|int|ioctl|join)\>" "\<(keys|kill|last|length|link|listen|local(time)?|log|lstat|m|mkdir|msg(ctl|get|snd|rcv)|next|oct|open(dir)?|ord|pack|pipe|pop|printf?|push|q|qq|qx|rand|re(ad(dir|link)?|cv|do|name|quire|set|turn|verse|winddir)|rindex|rmdir|s|scalar|seek(dir)?)\>" "\<(se(lect|mctl|mget|mop|nd|tpgrp|tpriority|tsockopt)|shift|shm(ctl|get|read|write)|shutdown|sin|sleep|socket(pair)?|sort|spli(ce|t)|sprintf|sqrt|srand|stat|study|substr|symlink|sys(call|read|tem|write)|tell(dir)?|time|tr(y)?|truncate|umask)\>" "\<(un(def|link|pack|shift)|utime|values|vec|wait(pid)?|wantarray|warn|write)\>" +color magenta "\<(continue|else|elsif|do|for|foreach|if|unless|until|while|eq|ne|lt|gt|le|ge|cmp|x|my|sub|use|package|can|isa)\>" + +# Variable names. +color cyan "[$%&@]([A-Za-z_][0-9A-Za-z_]*|\^[][A-Z?\^_]|[0-9]+)\>" +color cyan "[$%&@]\{(\^?[A-Za-z_][0-9A-Za-z_]*|\^[][?\^][0-9]+)\}" +color cyan "[$%&@]([][!"#'()*+,.:;<=>?`|~-]|\{[][!-/:-@\`|~]\})|\$[$%&@]" +color cyan "(^|[[:space:]])[$%@][/\]" + +color yellow "".*"|qq\|.*\|" +color white "[sm]/.*/" +color white start="(^use| = new)" end=";" + +# Comments. +color green "(^|[[:space:]])#.*" + +color yellow start="<< 'STOP'" end="STOP" diff --git a/original/php.nanorc b/original/php.nanorc new file mode 100644 index 0000000..1a61f06 --- /dev/null +++ b/original/php.nanorc @@ -0,0 +1,35 @@ +## Here is an example for PHP. + +syntax php "\.(php[23457s~]?|phtml|ctp)$" +magic "PHP script" +comment "//" + +# PHP markings. +color brightgreen "(<\?(php)?|\?>)" + +# Function names. +color white "\<[A-Za-z_][A-Za-z_0-9]*\(" +# Variable names. +color cyan "\$[A-Za-z_][A-Za-z_0-9]*" + +# Types. +color green "\<(array|bool|callable|const|float|global|int|object|string|var)\>" + +# Directives and structure. +color brightcyan "\<(abstract|as|class|clone|(end)?declare|extends|function|implements|include(_once)?|inst(ance|ead)of|interface|namespace|new|private|protected|public|require(_once)?|static|trait|use|yield)\>" +color brightcyan "\<(case|catch|default|do|echo|else(if)?|end(for(each)?|if|switch|while)|final(ly)?|for(each)?|if|print|switch|throw|try|while)\>" +# Operators. +color brightcyan "\<(and|or|xor)\>" + +# Control flow. +color magenta "\<(break|continue|goto|return)\>" + +# Strings. +color brightyellow ""(\.|[^"])*"" "'(\.|[^'])*'" + +# Comments. +color brightblue "(^|[[:space:]]+)//.*" +color brightblue start="/\*" end="\*/" + +# Trailing whitespace. +color ,green "[[:space:]]+$" diff --git a/original/po.nanorc b/original/po.nanorc new file mode 100644 index 0000000..ecbfb7d --- /dev/null +++ b/original/po.nanorc @@ -0,0 +1,29 @@ +## Colouring for PO files. + +syntax po "\.pot?$" +comment "#" + +# Comments. +color green "^#.*$" +color yellow "Copyright|\(C\)" +# Header fields. +color brightred "^\"X-Bugs:.*\"$" +color brightmagenta "\<(Project\-Id\-Version|Report\-Msgid\-Bugs\-To|Last\-Translator|Language(\-Team)?|X-Bugs|X-Generator|Plural\-Forms)\>" +color cyan "\<(POT\-Creation\-Date|PO\-Revision\-Date|MIME\-Version|Content\-Type|Content\-Transfer\-Encoding)\>" +# Encodings and numbers. +color yellow "\<(UTF|ISO|Windows|Mac|IBM)-[0-9]+" +color yellow "\<((pre|rc)?[0-9]+|[0-9]bit)\>" +# Msgids. +color brightblue "^(msgid|msgid_plural|msgstr)\>" +# Tags. +color red " fuzzy(,|$)" +color yellow " (no-)?[-[:alpha:]]+-format(,|$)" +# Format specifiers. +color brightmagenta "%([1-9]\$)?[a-z]*" +# Quotes and escaped characters. +color yellow "\"" +color cyan "\\([abcefnrtv"\]|x[0-9abcdefABCDEF]{2}|[0-7]{3})" +# Reminders. +color brightwhite,yellow "(FIXME|TODO|XXX)" +# Obsolete strings. +color red "#~.*" diff --git a/original/postgresql.nanorc b/original/postgresql.nanorc new file mode 100644 index 0000000..d90344a --- /dev/null +++ b/original/postgresql.nanorc @@ -0,0 +1,74 @@ +## Here is an example for PostgreSQL. + +syntax sql "\.sql[2345s~]?$" +comment "-- " + +# Functions. +color white "\<[a-z_]*\(" + +# Types. +color green "\<(int2|smallint|int4|int|integer|int8|bigint|decimal|numeric|real|double precision|(small|big)?serial)\>" +color green "\<(bit( varying)?|boolean|bytea|enum|money|tsvector|uuid)\>" +color green "\<(char|varchar|character( varying)?|text)\>" +color green "\<(date|interval|time(stamp)?( with time zone| without time zone)?)\>" +color green "\<(point|line|lseg|path|box|polygon|circle)\>" +color green "\<(cidr|inet|macaddr)\>" +color green "\<(daterange|int4range|int8range|numrange|tsrange|tstzrange)\>" + +# Structure. +color brightyellow "\<(CASE|CLASS|DEFAULT|DO|ELSE|ELSEIF|FOR|FOREACH|FUNCTION|IF|IS NULL)\>" +color brightyellow "\<(NEW|PRIVATE|PUBLIC|RETURN|RETURNS|SETOF|SWITCH|THEN|WHEN|WHILE)>" + +# Control flow. +color magenta "\<(EXCEPTION|NOTICE|RAISE|RETURN)\>" + +# SQL keywords. +color blue "\<(ABORT|AGGREGATE|ALTER|ANALYZE|AND|AS|AUTHORIZATION|BEGIN|CAST|CHECKPOINT|CLASS|CLOSE)\>" +color blue "\<(CLUSTER|COLLATION|COMMENT|COMMIT|CONFIGURATION|CONSTRAINTS|CONVERSION|COPY|CREATE)\>" +color blue "\<(DATA|DATABASE|DEALLOCATE|DECLARE|DEFAULT|DELETE|DICTIONARY|DISCARD|DO|DOMAIN|DROP)\>" +color blue "\<(END|EVENT|EXECUTE|EXPLAIN|EXTENSION|FAMILY|FETCH|FOREIGN|FROM|FUNCTION)\>" +color blue "\<(GRANT|GROUP|IF NOT EXISTS|IMMUTABLE|INDEX|INSERT|INTO|LABEL|LANGUAGE|LARGE|LOAD|LOCK)\>" +color blue "\<(MAPPING FOR|MATERIALIZED|MOVE|NOTIFY|OBJECT|OPERATOR|OPTIONS|OWNED|OWNER)\>" +color blue "\<(PARSER|PREPARED?|PRIVILEGES|REASSIGN|REFRESH|RELEASE|RESET|REVOKE|ROLE|ROLLBACK|RULE)\>" +color blue "\<(SAVEPOINT|SCHEMA|SEARCH|SECURITY|SELECT|SEQUENCE|SERVER|SESSION|SET|SHOW|SPACE|START|SYSTEM)\>" +color blue "\<(TABLE|TEXT|TO|TRANSACTION|TYPE|UPDATE|USER|VACUUM|VALUES|VIEW|WHERE|WITH|WRAPPER)\>" + +# Strings. +color brightyellow "<[^= ]*>" ""(\.|[^"])*"" + +# Trailing whitespace. +color ,green "[[:space:]]+$" + +# Regular expressions. +color brightmagenta "/([^/]|(\\/))*/[iomx]*" "%r\{([^}]|(\\}))*\}[iomx]*" + +# Shell command expansion is in `backticks` or like %x{this}. These are +# "double-quotish" (to use a perlism). +color brightblue "`[^`]*`" "%x\{[^}]*\}" + +# Strings, double-quoted. +color green ""([^"]|(\\"))*"" "%[QW]?\{[^}]*\}" "%[QW]?\([^)]*\)" "%[QW]?<[^>]*>" +color green "%[QW]?\[[^]]*\]" "%[QW]?\$[^$]*\$" "%[QW]?\^[^^]*\^" "%[QW]?![^!]*!" + +# Expression substitution. These go inside double-quoted strings, +# "like #{this}". +color brightgreen "#\{[^}]*\}" + +# Strings, single-quoted. +color green "'([^']|(\\'))*'" "%[qw]\{[^}]*\}" "%[qw]\([^)]*\)" "%[qw]<[^>]*>" +color green "%[qw]\[[^]]*\]" "%[qw]\$[^$]*\$" "%[qw]\^[^^]*\^" "%[qw]![^!]*!" + +# Comments. +color red "##?[^{].*" "##?$" +color red "--[^{].*" "--$" +color brightblue "//.*" +color brightblue start="/\*" end="\*/" + +# PostgreSQL markings. +color red "(--)" + +# PostgreSQL default schemas. +color brightred "(pg_catalog|public)" + +# PostgreSQL PLs. +color brightblue "(pljava|plperlu?|plpgsql|plpy|plpythonu?|plr|plruby|plsh|pltcl|plscheme)" diff --git a/original/pov.nanorc b/original/pov.nanorc new file mode 100644 index 0000000..ad1e4e7 --- /dev/null +++ b/original/pov.nanorc @@ -0,0 +1,16 @@ +## Here is an example for POV-Ray. + +syntax pov "\.(pov|POV|povray|POVRAY)$" +comment "//" + +color brightcyan "^[[:space:]]*#[[:space:]]*(declare)" +color brightyellow "\<(sphere|cylinder|translate|matrix|rotate|scale)\>" +color brightyellow "\<(orthographic|location|up|right|direction|clipped_by)\>" +color brightyellow "\<(fog_type|fog_offset|fog_alt|rgb|distance|transform)\>" +color brightred "\<(background|camera|fog|light_source|object|texture)\>" +color green "(\{|\}|\(|\)|\;|\]|\[|`|\\|\$|<|>|!|=|&|\|)" +color brightmagenta "\<(union|group|subgroup)\>" + +# Comments. +color brightblue "//.*" +color brightblue start="/\*" end="\*/" diff --git a/original/python.nanorc b/original/python.nanorc new file mode 100644 index 0000000..bc6b84f --- /dev/null +++ b/original/python.nanorc @@ -0,0 +1,39 @@ +## Here is an example for Python. + +syntax python "\.py$" +header "^#!.*python" +magic "Python script" +linter pyflakes +comment "#" + +# Function definitions. +color brightblue "def [0-9A-Za-z_]+" +# Keywords. +color brightcyan "\<(and|as|assert|async|await|break|class|continue)\>" +color brightcyan "\<(def|del|elif|else|except|finally|for|from)\>" +color brightcyan "\<(global|if|import|in|is|lambda|nonlocal|not|or)\>" +color brightcyan "\<(pass|raise|return|try|while|with|yield)\>" + +# These two are keywords in Python 2, but functions in Python 3, +# so only color them when they are followed by whitespace, assuming +# that print(x) is a function invocation and print (x) is a statement. +color brightcyan "\<(exec|print)([[:blank:]]|$)" + +# Special values. +color brightmagenta "\<(False|None|True)\>" + +# Mono-quoted strings. +color brightgreen "'([^'\]|\\.)*'|'''" +color brightgreen ""([^"\]|\\.)*"|"""" +color normal "'''|"""" +# Comments. +color brightred "(^|[[:blank:]])#.*" +# Triple-quoted strings. +color brightgreen start="'''([^'),]|$)" end="(^|[^(\])'''" +color brightgreen start=""""([^"),]|$)" end="(^|[^(\])"""" + +# Reminders. +color brightwhite,yellow "(FIXME|TODO|XXX)" + +# Trailing whitespace. +color ,green "[[:space:]]+$" diff --git a/original/ruby.nanorc b/original/ruby.nanorc new file mode 100644 index 0000000..c331723 --- /dev/null +++ b/original/ruby.nanorc @@ -0,0 +1,36 @@ +## Here is an example for Ruby. + +syntax ruby "\.rb$" +header "^#!.*ruby" +magic "Ruby script" +linter ruby -w -c +comment "#" + +# Reserved words. +color yellow "\<(BEGIN|END|alias|and|begin|break|case|class|def|defined\?|do|else|elsif|end|ensure|false|for|if|in|module)\>" +color yellow "\<(next|nil|not|or|redo|rescue|retry|return|self|super|then|true|undef|unless|until|when|while|yield)\>" +# Constants. +color brightblue "(\$|@|@@)?\<[A-Z]+[0-9A-Z_a-z]*" +# Ruby "symbols". +color magenta "([ ]|^):[0-9A-Za-z_]+\>" +# Some unique things we want to stand out. +color brightyellow "\<(__FILE__|__LINE__)\>" +# Regular expressions. +color brightmagenta "/([^/]|(\\/))*/[iomx]*" "%r\{([^}]|(\\}))*\}[iomx]*" +# Shell command expansion is in `backticks` or like %x{this}. These are +# "double-quotish" (to use a perlism). +color brightblue "`[^`]*`" "%x\{[^}]*\}" +# Strings, double-quoted. +color green ""([^"]|(\\"))*"" "%[QW]?\{[^}]*\}" "%[QW]?\([^)]*\)" "%[QW]?<[^>]*>" "%[QW]?\[[^]]*\]" "%[QW]?\$[^$]*\$" "%[QW]?\^[^^]*\^" "%[QW]?![^!]*!" +# Expression substitution. These go inside double-quoted strings, +# "like #{this}". +color brightgreen "#\{[^}]*\}" +# Strings, single-quoted. +color green "'([^']|(\\'))*'" "%[qw]\{[^}]*\}" "%[qw]\([^)]*\)" "%[qw]<[^>]*>" "%[qw]\[[^]]*\]" "%[qw]\$[^$]*\$" "%[qw]\^[^^]*\^" "%[qw]![^!]*!" +# Comments. +color cyan "#[^{].*" "#$" +color brightcyan "##[^{].*" "##$" +# "Here" docs. +color green start="<<-?'?EOT'?" end="^EOT" +# Some common markers. +color brightcyan "(XXX|TODO|FIXME|\?\?\?)" diff --git a/original/rust.nanorc b/original/rust.nanorc new file mode 100644 index 0000000..aca2b9c --- /dev/null +++ b/original/rust.nanorc @@ -0,0 +1,39 @@ +## Syntax highlighting for Rust. +## Copyright 2015 Luke Francl. +## Licensed under GPL version 3. + +## NOTE: Rules are applied in order: later rules re-colorize matching text. + +syntax rust "\.(rlib|rs)$" +comment "//" + +# Function definitions +color magenta "fn [a-z_0-9]+" + +# Reserved words +color yellow "\<(abstract|alignof|as|become|box|break|const|continue|crate|do|else|enum|extern|false|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|offsetof|override|priv|pub|pure|ref|return|sizeof|static|self|struct|super|true|trait|type|typeof|unsafe|unsized|use|virtual|where|while|yield)\>" + +# Macros +color red "[a-z_]+!" + +# Constants +color magenta "[A-Z][A-Z_0-9]+" + +# Traits/Enums/Structs/Types/... +color magenta "[A-Z][A-Za-z0-9]+" + +# Strings +color green "\".*\"" +color green start="\".*\\$" end=".*\"" +## NOTE: This isn't accurate, but matching "#{0,} for the end of the string is too liberal. +color green start="r#+\"" end="\"#+" + +# Comments +color blue "//.*" +color blue start="/\*" end="\*/" + +# Attributes +color magenta start="#!\[" end="\]" + +# Some common markers +color brightcyan "(XXX|TODO|FIXME|\?\?\?)" diff --git a/original/sh.nanorc b/original/sh.nanorc new file mode 100644 index 0000000..10de221 --- /dev/null +++ b/original/sh.nanorc @@ -0,0 +1,37 @@ +## Here is an example for Bourne shell scripts. + +syntax sh "(\.sh|\.(a|ba|c|da|k|mk|pdk|tc|z)(sh|shrc|sh_profile)|/(etc/|\.)profile)$" +header "^#!.*/(((a|ba|c|da|k|mk|pdk|tc|z)?sh)|(busybox|env) +sh|openrc-run|runscript)" +magic "(POSIX|Bourne-Again) shell script.*text" +linter dash -n +comment "#" + +# Function declarations. +color brightgreen "^[A-Za-z0-9_-]+\(\)" + +# Keywords, symbols, and comparisons. +color green "\<(break|case|continue|do|done|elif|else|esac|exit|fi|for|function|if|in|read|return|select|shift|then|time|until|while)\>" +color green "\<(declare|eval|exec|export|let|local)\>" +color green "[{}():;|`$<>!=&\\]" "(\]|\[)" +color green "-(eq|ne|gt|lt|ge|le|ef|ot|nt)\>" + +# Short and long options. +color brightmagenta "[[:blank:]]-[A-Za-z]\>" "[[:blank:]]--[A-Za-z-]+\>" + +# Common commands. +color brightblue "\<(awk|cat|cd|ch(grp|mod|own)|cp|cut|echo|env|grep|head|install|ln|make|mkdir|mv|popd|printf|pushd|rm|rmdir|sed|set|sort|tail|tar|touch|umask|unset)\>" +color normal "[.-]tar\>" + +# Basic variable names (no braces). +color brightred "\$[-0-9@*#?$!]" "\$[[:alpha:]_][[:alnum:]_]*" +# More complicated variable names; handles braces and replacements and arrays. +color brightred "\$\{[#!]?([-@*#?$!]|[0-9]+|[[:alpha:]_][[:alnum:]_]*)(\[([[:space:]]*[[:alnum:]_]+[[:space:]]*|@)\])?(([#%/]|:?[-=?+])[^}]*\}|\[|\})" + +# Comments. +color cyan "(^|[[:space:]])#.*" + +# Strings. +color brightyellow ""(\\.|[^"])*"" "'(\\.|[^'])*'" + +# Trailing whitespace. +color ,green "[[:space:]]+$" diff --git a/original/spec.nanorc b/original/spec.nanorc new file mode 100644 index 0000000..fb9170c --- /dev/null +++ b/original/spec.nanorc @@ -0,0 +1,40 @@ +## Syntax highlighting for RPM spec files. + +syntax spec "\.spec(\.[^/]+)?$" +comment "#" + +# Main tags. +color brightblue "((Icon|ExclusiveOs|ExcludeOs)[[:space:]]*:)" +color brightblue "((BuildArch|BuildArchitectures|ExclusiveArch|ExcludeArch)[[:space:]]*:)" +color brightblue "((Conflicts|Obsoletes|Provides|Requires|Requires\(.*\)|Enhances|Suggests|BuildConflicts|BuildRequires|Recommends|PreReq|Supplements)[[:space:]]*:)" +color brightblue "((Epoch|Serial|Nosource|Nopatch)[[:space:]]*:)" +color brightblue "((AutoReq|AutoProv|AutoReqProv)[[:space:]]*:)" +color brightblue "((Copyright|License|Summary|Summary\(.*\)|Distribution|Vendor|Packager|Group|Source\d*|Patch\d*|BuildRoot|Prefix)[[:space:]]*:)" +color brightblue "((Name|Version|Release|Url|URL)[[:space:]]*:)" +color brightblue start="^Source" end=":" start="^Patch" end=":" +# Architectures. +color brightred "(i386|i486|i586|i686|athlon|ia64|alpha|alphaev5|alphaev56|alphapca56|alphaev6|alphaev67|sparc|sparcv9|sparc64armv3l|armv4b|armv4lm|ips|mipsel|ppc|ppc|iseries|ppcpseries|ppc64|m68k|m68kmint|Sgi|rs6000|i370|s390x|s390|noarch)" +# Architecture conditionals. +color brightred "(ifarch|ifnarch)" +# OS conditionals. +color brightred "(ifos|ifnos)" +# %* strings. +color green "%([A-Z_a-z_0-9_]*)" +color magenta "%_([A-Z_a-z_0-9_]*)" +color yellow start="%__" end="\ " +color magenta start="%\{" end="\}" +color yellow start="%\{__" end="\}" +# Sections. +color red "^%(build$|changelog|check$|clean$|description|files|install$|package|pre|prep$|pretrans|preun)" +color red "^%(post|posttrans|postun|trigger|triggerin|triggerpostun|triggerun|verifyscript)" +# Conditionals and defines. +color brightred "%(if|else|endif|define|global|undefine)" + +# Comments. +color cyan "#.*" +# Special case: "# norootforbuild" is handled as main tag. +color brightblue "^# norootforbuild" +# %changelog date entries. +color brightyellow "^\* .*\)$" +# Trailing whitespace. +color ,green "[[:space:]]+$" diff --git a/original/tcl.nanorc b/original/tcl.nanorc new file mode 100644 index 0000000..958b597 --- /dev/null +++ b/original/tcl.nanorc @@ -0,0 +1,22 @@ +## Syntax highlighting for Tcl files. + +syntax tcl "\.tcl$" +magic "Tcl(/Tk)? script" +comment "#" + +# Standard Tcl [info commands]: +color green "\<(after|append|array|auto_execok|auto_import|auto_load|auto_load_index|auto_qualify|binary|break|case|catch|cd|clock|close|concat|continue|encoding|eof|error|eval|exec|exit|expr|fblocked|fconfigure|fcopy|file|fileevent|flush|for|foreach|format|gets|glob|global|history|if|incr|info|interp|join|lappend|lindex|linsert|list|llength|load|lrange|lreplace|lsearch|lset|lsort|namespace|open|package|pid|puts|pwd|read|regexp|regsub|rename|return|scan|seek|set|socket|source|split|string|subst|switch|tclLog|tell|time|trace|unknown|unset|update|uplevel|upvar|variable|vwait|while)\>" +# Basic Tcl subcommands: +color green "\" +color green "\" +# Extended TclX [info commands]: +color green "\<(alarm|auto_load_pkg|bsearch|catclose|catgets|catopen|ccollate|cconcat|cequal|chgrp|chmod|chown|chroot|cindex|clength|cmdtrace|commandloop|crange|csubstr|ctoken|ctype|dup|echo|execl|fcntl|flock|fork|fstat|ftruncate|funlock|host_info|id|infox|keyldel|keylget|keylkeys|keylset|kill|lassign|lcontain|lempty|lgets|link|lmatch|loadlibindex|loop|lvarcat|lvarpop|lvarpush|max|min|nice|pipe|profile|random|readdir|replicate|scancontext|scanfile|scanmatch|select|server_accept|server_create|signal|sleep|sync|system|tclx_findinit|tclx_fork|tclx_load_tndxs|tclx_sleep|tclx_system|tclx_wait|times|translit|try_eval|umask|wait)\>" +# Syntax: +color brightblue "proc[[:space:]]" "(\{|\})" +color green "(\(|\)|\;|`|\\|\$|<|>|!|=|&|\|)" +color brightyellow ""(\\.|[^"])*"" "'(\\.|[^'])*'" +color brightred "\$\{?[0-9A-Za-z_!@#$*?-]+\}?" +# Trailing whitespace: +color ,green "[[:space:]]+$" +# Comments: +color cyan "^[[:space:]]*#.*" diff --git a/original/tex.nanorc b/original/tex.nanorc new file mode 100644 index 0000000..4ddec06 --- /dev/null +++ b/original/tex.nanorc @@ -0,0 +1,10 @@ +## Here is a short example for TeX files. + +syntax tex "\.tex$" +magic "(La)?TeX document" +linter chktex -v0 -q -I +comment "%" + +color green "\\.|\\[A-Za-z]*" +color magenta "[{}]" +color blue "(^|[^\])%.*" diff --git a/original/texinfo.nanorc b/original/texinfo.nanorc new file mode 100644 index 0000000..2b8251b --- /dev/null +++ b/original/texinfo.nanorc @@ -0,0 +1,21 @@ +## Here is an example for Texinfo files. + +syntax texinfo "\.texi$" +header "^\\input texinfo" +magic "Texinfo source" +comment "@c " + +# Command arguments, trailing and enclosed. +color cyan "^@[a-z]+[[:space:]]+.*$" +color brightmagenta "@[a-zA-Z]+\{[^}]*\}" +# Commands themselves. +color yellow "@[a-zA-Z]+\{?" "\}" + +# Menu items. +color brightred "^\*[[:space:]]+.*::.*" + +# Comments. +color green "@c[[:space:]]+.*" + +# Trailing whitespace. +color ,green "[[:space:]]+$" diff --git a/original/xml.nanorc b/original/xml.nanorc new file mode 100644 index 0000000..c13c5eb --- /dev/null +++ b/original/xml.nanorc @@ -0,0 +1,22 @@ +## Here is an example for XML files. + +syntax xml "\.([jrsx]html?|jnlp|mml|pom|rng|sgml?|svg|w[as]dl|wsdd|xjb|xml|xs(d|lt?)|xul)$" +header "<\?xml.*version=.*\?>" +magic "(XML|SGML) (sub)?document" +comment "" + +# The entire content of the tag: +color green start="<" end=">" + +# The start and the end of the tag: +color cyan "<[^> ]+" ">" + +# The strings inside the tag: +color magenta "\"[^"]*\"" + +# Comments: +color yellow start="" +color yellow start="" + +# Escapes: +color red "&[^;]*;" diff --git a/shellcheck.sh b/shellcheck.sh deleted file mode 100755 index 22ad42b..0000000 --- a/shellcheck.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -ev -# Shellcheck the script - -shellcheck install.sh diff --git a/tests.sh b/tests.sh new file mode 100755 index 0000000..ddc8cac --- /dev/null +++ b/tests.sh @@ -0,0 +1,69 @@ +#!/usr/bin/env bash +# Shellcheck the script +# Note: using bash for more power in testing (the final user doesn't need it). + +# Global Variables +readonly G_NANO_VERSION="4.6.0" +readonly G_SHELLCHECK_VERSION="0.6.0" + +# Functions + +# Compare Version +# Compare the first version (x.x.x format) against second one. +# Returns 0 if $1 => $2, 1 otherwise. +# In error returns 2. +# Sources: +# https://unix.stackexchange.com/questions/285924/how-to-compare-a-programs-version-in-a-shell-script +# https://stackoverflow.com/questions/4023830/how-to-compare-two-strings-in-dot-separated-version-format-in-bash +# Test table: +# req | get | test | res +# -------+-------+-------+----------- +# 2.0.0 | 1.0.0 | 1.0.0 | true = 0 +# 1.0.0 | 2.0.0 | 1.0.0 | false = 1 +# 0.5.3 | 0.5.3 | 0.5.3 | true = 0 +f_compare_version(){ + local required_v="$1" + local getted_v="$2" + + # First: check if equal + if [ "$required_v" = "$getted_v" ]; then + return 0; + fi + + # Second: check if greater or lesser + local test_v + test_v="$(printf "%s\n%s" "$required_v" "$getted_v" | sort -V | head -n 1)" + case $test_v in + $getted_v) return 0 ;; + $required_v) return 1 ;; + *) return 2 ;; + esac +} + +# Test Functions + +f_test_nano_version(){ + local version + version="$(nano --version | cut -d ' ' -f 5 | head -n 1)" + f_compare_version "$G_NANO_VERSION" "$version" + return $? +} + +f_test_shellcheck_version(){ + local version + version="$(shellcheck --version | cut -d ' ' -f 2 | head -n 2 | tail -n 1)" + f_compare_version "$G_SHELLCHECK_VERSION" "$version" + return $? +} + +# MAIN TESTS + +printf "=================\n" +printf "TESTS\n" +printf "=================\n" +f_test_nano_version +printf "Nano Version ok? %s (0 = ok)\n" "$?" +f_test_shellcheck_version +printf "Shellcheck Version ok? %s (0 = ok)\n" "$?" +# ....shellcheck -f diff *.sh | git apply | git commit -a -m "Shellcheck fast corrections" +shellcheck -- *.sh diff --git a/themes/nano/config b/themes/nano/config new file mode 100644 index 0000000..3e2fae3 --- /dev/null +++ b/themes/nano/config @@ -0,0 +1,6 @@ +# NANO +# ===================== +# NANORC Nano +# ===================== + +# This configuration is empty to mantain the original configuration. diff --git a/themes/nano/rules b/themes/nano/rules new file mode 100755 index 0000000..e457f4d --- /dev/null +++ b/themes/nano/rules @@ -0,0 +1,45 @@ +#!/usr/bin/sed -f + + +# NANO +# ===================== +# NANORC Nano +# ===================== + +## Best approach to the original 'nanorc' files. +## If you want the original, uninstall these files, +## but you will lose many highlight instructions... + +# Text Colors +## Strings and Comments: +## In general you will want your strings and comments to come last, +## because highlighting rules are applied in the order they are read in. +## The words should be in singular. +## BTICKS = backtick +## TSPACE = trailing whitespace +## VERSION = version numbers +## REMINDERS = fixme, todo, xxx + +s|CONSTANT|brightred| +s|FUNCTION|brightmagenta| +s|KEYWORD1|brightgreen| +s|KEYWORD2|green| +s|DIRECTIVE|brightcyan| +s|STRING1|red| +s|STRING2|magenta| +s|COMMENT1|brightblue| +s|COMMENT2|cyan| +s|COLOR|yellow| +s|MACRO|cyan| +s|ERROR|brightred| +s|OPERATORS|green| +s|BOOLEAN|brightmagenta| +s|BRACKET|magenta| +s|BTICKS|green| +s|TSPACE|,green| +s|VERSION|red| +s|REMINDERS|brightwhite,yellow| +s|EMAIL|magenta| + +# Macros +## No Macros in original ... diff --git a/themes/scopatz/config b/themes/scopatz/config new file mode 100644 index 0000000..6373530 --- /dev/null +++ b/themes/scopatz/config @@ -0,0 +1,7 @@ +# SCOPATZ +# ===================== +# NANORC Scopatz +# https://github.com/scopatz +# ===================== + +# This configuration have nothing, yet ... diff --git a/themes/scopatz/rules b/themes/scopatz/rules new file mode 100755 index 0000000..7f0ccee --- /dev/null +++ b/themes/scopatz/rules @@ -0,0 +1,44 @@ +#!/usr/bin/sed -f + +# SCOPATZ +# ===================== +# NANORC Scopatz +# https://github.com/scopatz +# ===================== + +# Text Colors +## Strings and Comments: +## In general you will want your strings and comments to come last, +## because highlighting rules are applied in the order they are read in. +## The words should be in singular. +## BTICKS = backtick +## TSPACE = trailing whitespace +## VERSION = version numbers +## REMINDERS = fixme, todo, xxx + +s|CONSTANT|brightred| +s|FUNCTION|brightmagenta| +s|KEYWORD1|brightgreen| +s|KEYWORD2|green| +s|DIRECTIVE|brightcyan| +s|STRING1|red| +s|STRING2|magenta| +s|COMMENT1|brightblue| +s|COMMENT2|cyan| +s|COLOR|yellow| +s|MACRO|cyan| +s|ERROR|brightred| +s|OPERATORS|green| +s|BOOLEAN|brightmagenta| +s|BRACKET|magenta| +s|BTICKS|green| +s|TSPACE|,green| +s|VERSION|red| +s|REMINDERS|brightwhite,yellow| +s|EMAIL|magenta| + +# Macros + +# s|^+TODO|color brightcyan "TODO:?"| +# s|^+LINT|color ,green "[[:space:]]+$"\ncolor ,red "\t*"| +# s|^+LONG-LINE-WARNING|color ,red "^.{81,}$"| diff --git a/themes/tpro/config b/themes/tpro/config new file mode 100644 index 0000000..3b3948a --- /dev/null +++ b/themes/tpro/config @@ -0,0 +1,107 @@ +# TPRO +# ===================== +# NANORC TiagoProgrammer +# https://github.com/TJProgrammer +# ===================== + +# This configuration activates some IDE-ish features: +# - the autoindent, +# - a emptyline in the end of files, +# - justify a big text at 50th character, +# - a guidestripe at 80th character, +# - the linenumbers, +# - the multibuffer to opens several files at same time, +# - the positionlog to continue where stay, +# - the suspend (like minimising), +# - no tabs, only spaces, +# - save on quit, +# - no save the changes in WriteOut menu (Discard Buffer), +# - no trail blanks, +# - save in unix format when possible, +# - delete the marked region without touch the cut buffer. +# And some rebindings to the most natural and usual shortcuts! + +# Nano Options +set afterends +set atblanks +set autoindent +set brackets ""')>»]}" +set emptyline +set fill 70 +set guidestripe 80 +set historylog +set linenumbers +set matchbrackets "(<«"“[{)>»"”]}" +set mouse +set multibuffer +set noconvert +set positionlog +set punct "!.?" +set quickblank +set smarthome +set softwrap +set suspend +set tabsize 2 +set tabstospaces +set tempfile +set trimblanks +set unix +set zap + +# Nano GUI Colors +# set ... fgcolor,bgcolor +# Colors are: white, black, blue, green, red, cyan, yellow, magenta and normal. +set errorcolor red +set functioncolor blue +set keycolor white +set numbercolor white +set selectedcolor ,cyan +set statuscolor magenta +set stripecolor ,blue +set titlecolor brightwhite,blue + +# Nano Rebindings +# bind key function menu/all +# unbind key menu/all +# ^ Ctrl ; M- Alt ; F function + +bind M-H help all +bind ^Q exit all +bind ^Q exit browser +bind M-S writeout all +bind ^S savefile all +# Note: "O" from "Open a new file" +bind ^O insert all + +bind ^F whereis main +bind ^D wherewas main +bind M-D findprevious main +bind M-F findnext main + +bind ^X cut main +bind ^C copy main +bind ^V paste main + +bind M-M mark main +bind ^W wordcount main + +bind ^J justify main +bind M-J fulljustify main + +bind M-/ comment main +bind ^Space complete all + +bind M-R recordmacro all +bind ^R runmacro all + +bind ^Z undo all +bind M-Z redo all + +bind F5 refresh all +bind ^T suspend all +bind ^D discardbuffer writeout +bind ^E browser all + + +# Nano Highlights +# include ~/.nano/nanorc/nanorc/*.nanorc diff --git a/themes/tpro/rules b/themes/tpro/rules new file mode 100755 index 0000000..1d16fb4 --- /dev/null +++ b/themes/tpro/rules @@ -0,0 +1,41 @@ +#!/usr/bin/sed -f + +# TPRO +# ===================== +# NANORC TiagoProgrammer +# https://github.com/TJProgrammer +# ===================== + +# Text Colors +## Strings and Comments: +## In general you will want your strings and comments to come last, +## because highlighting rules are applied in the order they are read in. +## The words should be in singular. +## BTICKS = backtick +## TSPACE = trailing whitespace +## VERSION = version numbers +## REMINDERS = fixme, todo, xxx + +s|CONSTANT|brightred| +s|FUNCTION|brightmagenta| +s|KEYWORD1|brightgreen| +s|KEYWORD2|green| +s|DIRECTIVE|brightcyan| +s|STRING1|red| +s|STRING2|magenta| +s|COMMENT1|brightblue| +s|COMMENT2|cyan| +s|COLOR|yellow| +s|MACRO|cyan| +s|ERROR|brightred| +s|OPERATORS|green| +s|BOOLEAN|brightmagenta| +s|BRACKET|magenta| +s|BTICKS|green| +s|TSPACE|,green| +s|VERSION|red| +s|REMINDERS|brightwhite,yellow| +s|EMAIL|magenta| + +# Macros +## No Macros yet ... diff --git a/todo.md b/todo.md new file mode 100644 index 0000000..ee223e8 --- /dev/null +++ b/todo.md @@ -0,0 +1,15 @@ +# TODO + +0. Create the other theme files accordingly the original. +0. The themes files is only for sed. +0. Make nanorc more beautiful. +0. sed - how to substitute a string with the contents of a file. +1. Combine original files with project files. +2. See if there is any command to check the atual version of nano (to update the files BEFORE a release). +4. Make the install file the oficial installaton and update it accordingly. + +0. make the installation with more plesant wait +0. maybe begin with version system 1.0.0 +0. make a function for error output/echo +0. make a library for functions (it is necessary #! ?) +0. check the latest version of nno in travisCi