From: Reto Zingg Date: Thu, 6 Dec 2012 15:35:33 +0000 (+0200) Subject: remove, rename and delete X-Git-Url: https://git.rmz.fi/?a=commitdiff_plain;h=711aadc3d5fdfd3a88a2585712154663bb14f0ac;p=libqmvoc.git remove, rename and delete --- diff --git a/AUTHORS b/AUTHORS deleted file mode 100644 index ac809ea..0000000 --- a/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -Developers: -* Scott Wheeler - Original author and current maintainer diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 3ea4ee2..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -project(LibKdeEdu) - -#add_definitions( -Wall -fprofile-arcs -ftest-coverage ) - -find_package(KDE4 REQUIRED) -include(KDE4Defaults) -include_directories (${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${KDE4_INCLUDES}) - -add_definitions(-DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS) - -add_subdirectory(keduvocdocument) -add_subdirectory(data) -#add_subdirectory(widgets) -add_subdirectory(qtmmlwidget) -add_subdirectory(icons) - - -configure_file( "${LibKdeEdu_SOURCE_DIR}/LibKdeEduConfig.cmake.in" "${LibKdeEdu_BINARY_DIR}/LibKdeEduConfig.cmake" @ONLY ) - -if(KDE4_USE_COMMON_CMAKE_PACKAGE_CONFIG_DIR) - set(_LibKdeEdu_CONFIG_DEST "${LIB_INSTALL_DIR}/cmake/libkdeedu") -else(KDE4_USE_COMMON_CMAKE_PACKAGE_CONFIG_DIR) - set(_LibKdeEdu_CONFIG_DEST "${LIB_INSTALL_DIR}/libkdeedu") -endif(KDE4_USE_COMMON_CMAKE_PACKAGE_CONFIG_DIR) - -install( FILES - "${LibKdeEdu_BINARY_DIR}/LibKdeEduConfig.cmake" - DESTINATION "${_LibKdeEdu_CONFIG_DEST}" ) -install( EXPORT LibKdeEduTargets - DESTINATION "${_LibKdeEdu_CONFIG_DEST}" - NAMESPACE LibKdeEduImport__ - FILE LibKdeEduTargets.cmake ) diff --git a/COPYING b/COPYING deleted file mode 100644 index d159169..0000000 --- a/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) 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 -this service 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 make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. 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. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -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 -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the 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 a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE 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. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/COPYING-CMAKE-SCRIPTS b/COPYING-CMAKE-SCRIPTS deleted file mode 100644 index 4b41776..0000000 --- a/COPYING-CMAKE-SCRIPTS +++ /dev/null @@ -1,22 +0,0 @@ -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/COPYING.LIB b/COPYING.LIB deleted file mode 100644 index 5bc8fb2..0000000 --- a/COPYING.LIB +++ /dev/null @@ -1,481 +0,0 @@ - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Library General Public License, applies to some -specially designated Free Software Foundation software, and to any -other libraries whose authors decide to use it. You can use it for -your libraries, 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 -this service 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 make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if -you distribute copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide -complete object files to the recipients so that they can relink them -with the library, after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright -the library, and (2) offer you this license which gives you legal -permission to copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain -that everyone understands that there is no warranty for this free -library. If the library is modified by someone else and passed on, we -want its recipients to know that what they have is not the original -version, so that any problems introduced by others will not reflect on -the original authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that companies distributing free -software will individually obtain patent licenses, thus in effect -transforming the program into proprietary software. To prevent this, -we have made it clear that any patent must be licensed for everyone's -free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary -GNU General Public License, which was designed for utility programs. This -license, the GNU Library General Public License, applies to certain -designated libraries. This license is quite different from the ordinary -one; be sure to read it in full, and don't assume that anything in it is -the same as in the ordinary license. - - The reason we have a separate public license for some libraries is that -they blur the distinction we usually make between modifying or adding to a -program and simply using it. Linking a program with a library, without -changing the library, is in some sense simply using the library, and is -analogous to running a utility program or application program. However, in -a textual and legal sense, the linked executable is a combined work, a -derivative of the original library, and the ordinary General Public License -treats it as such. - - Because of this blurred distinction, using the ordinary General -Public License for libraries did not effectively promote software -sharing, because most developers did not use the libraries. We -concluded that weaker conditions might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the -users of those programs of all benefit from the free status of the -libraries themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while -preserving your freedom as a user of such programs to change the free -libraries that are incorporated in them. (We have not seen how to achieve -this as regards changes in header files, but we have achieved it as regards -changes in the actual functions of the Library.) The hope is that this -will lead to faster development of free libraries. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, while the latter only -works together with the library. - - Note that it is possible for a library to be covered by the ordinary -General Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which -contains a notice placed by the copyright holder or other authorized -party saying it may be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - d) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the source code distributed need not include anything that is normally -distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -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 -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Library General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "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 -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY 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 -LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/LibKdeEduConfig.cmake.in b/LibKdeEduConfig.cmake.in deleted file mode 100644 index 91363d1..0000000 --- a/LibKdeEduConfig.cmake.in +++ /dev/null @@ -1,45 +0,0 @@ -######################################################################### -# -# LibKdeEdu Configuration File -# -# This file sets various CMake Variables -# -# LIBKDEEDU_INCLUDE_DIR - The Include Directory for all LIBKDEEDU libraries -# LIBKDEEDU_KEDUVOCDOCUMENT_LIBRARIES - the keduvocdocument library -# LIBKDEEDU_KDEEDUUI_LIBRARIES - the kdeeduui library -# -# Copyright 2008 Andreas Pakulat -# Copyright 2010 Niko Sams -# Redistribution and use is allowed according to the terms of the BSD license. -###################################################################### - -get_filename_component(_LIBKDEEDU_CURRENT_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) - -if(NOT WIN32) -# This is needed on non-win32 platforms, as lib-install-dir might be in a -# totally different prefix than include-install-dir. So instead hardcode the -# absolute path during buildtime -set( LIBKDEEDU_INCLUDE_DIR "@INCLUDE_INSTALL_DIR@/libkdeedu" ) - -else(NOT WIN32) - -set( LIBKDEEDU_INCLUDE_DIR "${_LIBKDEEDU_CURRENT_DIR}/../../../include/libkdeedu" ) - -endif(NOT WIN32) - -if( NOT TARGET LibKdeEduImport__keduvocdocument ) - include("${_LIBKDEEDU_CURRENT_DIR}/LibKdeEduTargets.cmake") -endif( NOT TARGET LibKdeEduImport__keduvocdocument ) - -macro( _libkdeedu_set_lib_vars _prefix _lib ) - set( LIBKDEEDU_${_prefix}_LIBRARIES LibKdeEduImport__${_lib} ) -endmacro( _libkdeedu_set_lib_vars ) - -_libkdeedu_set_lib_vars( KEDUVOCDOCUMENT keduvocdocument ) -_libkdeedu_set_lib_vars( KDEEDUUI kdeeduui ) -_libkdeedu_set_lib_vars( QTMMLWIDGET qtmmlwidget ) - - -mark_as_advanced( - KEDUVOCDOCUMENT -) diff --git a/Mainpage.dox b/Mainpage.dox deleted file mode 100644 index 280c349..0000000 --- a/Mainpage.dox +++ /dev/null @@ -1,15 +0,0 @@ -/** @mainpage libkdeedu - -libkdeedu is a set of shared libraries used by the KDE Education Project applications. - -It consists of several parts: - -User interface parts: Glossary - -ExtDate for KStars - -libscience for Kalzium containing chemical classes - -KEduVocDocument is a library for reading and writing vocabulary files used by Parley, Kanagram, KHangman and KWordQuiz. - -*/ diff --git a/Messages.sh b/Messages.sh deleted file mode 100644 index 62bec1f..0000000 --- a/Messages.sh +++ /dev/null @@ -1,6 +0,0 @@ -#! /bin/sh -find keduvocdocument -maxdepth 1 -name \*.cpp -o -name \*.h >>list_libkdeedu - -$XGETTEXT --files-from=list_libkdeedu --from-code=UTF-8 -o $podir/libkdeedu.pot - -rm -f list_libkdeedu diff --git a/README b/README deleted file mode 100644 index 7f5783e..0000000 --- a/README +++ /dev/null @@ -1,21 +0,0 @@ -Contents of libkdeedu as of Feb 2006, and brief description of each module: - -extdate: -Contains a reimplementation of QDate named ExtDate which eliminates the -limitation on the year (1752-8000) imposed by QDate. Also contains -related reimplemented classes such as ExtDateTime, ExtDatePicker, -ExtDateTimeEdit, and ExtCalendarSystem. -Currently used by: kstars - -kdeeducore: -Contains KEduVocDocument and its related class for reading from/writing to the -KVTML format (and others too). -Currently used by: kanagram, khangman, klatin, kvoctrain, kwordquiz - -libscience: -Contains some classes related to scientific data, like chemical Element's, -spectra, temperature units and Isotope's. -Currently used by: kalzium - -ideas: stub directory, contains generic README and TODO files. - diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt deleted file mode 100644 index f2bf4ae..0000000 --- a/data/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -add_subdirectory( kvtml ) - diff --git a/data/README_packagers b/data/README_packagers deleted file mode 100644 index 6be7dd5..0000000 --- a/data/README_packagers +++ /dev/null @@ -1,14 +0,0 @@ -******** At the attention of packagers ********* - -KHangMan, Kanagram, Parley and KWordQuiz depend on /kdeedu/data/kvtml! - -Please do not ship Kanagram and KHangMan without those files, thanks! - -KHangMan and Kanagram depend on those files, Parley and KWordQuiz can use them. - --------------------------------------- -Anne-Marie Mahfouf -kdeedu module maintainer -annma at kde dot org - -November 2008 \ No newline at end of file diff --git a/data/kvtml/CMakeLists.txt b/data/kvtml/CMakeLists.txt deleted file mode 100644 index a59a057..0000000 --- a/data/kvtml/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ - -FILE(GLOB datafiles *.kvtml) -install( FILES ${datafiles} DESTINATION ${DATA_INSTALL_DIR}/kvtml/en ) -add_custom_target( kvtml_data ) - diff --git a/data/kvtml/README_packagers b/data/kvtml/README_packagers deleted file mode 100644 index 6be7dd5..0000000 --- a/data/kvtml/README_packagers +++ /dev/null @@ -1,14 +0,0 @@ -******** At the attention of packagers ********* - -KHangMan, Kanagram, Parley and KWordQuiz depend on /kdeedu/data/kvtml! - -Please do not ship Kanagram and KHangMan without those files, thanks! - -KHangMan and Kanagram depend on those files, Parley and KWordQuiz can use them. - --------------------------------------- -Anne-Marie Mahfouf -kdeedu module maintainer -annma at kde dot org - -November 2008 \ No newline at end of file diff --git a/data/kvtml/animals.kvtml b/data/kvtml/animals.kvtml deleted file mode 100644 index eac48be..0000000 --- a/data/kvtml/animals.kvtml +++ /dev/null @@ -1,368 +0,0 @@ - - - - - converter - Animals - Animals from across the planet - - - - en - - - - - false - false - - bear - Large heavy animal with thick fur - - - - false - false - - dolphin - Sea mammal - - - - false - false - - zebra - African animal with black and white stripes - - - - false - false - - kangaroo - Australian jumping animal - - - - false - false - - whale - Very large sea mammal - - - - false - false - - horse - Four-legged animal used for riding - - - - false - false - - monkey - Closely related to humans - - - - false - false - - woodpecker - Bird that drills through wood - - - - false - false - - snake - Reptile with no legs - - - - false - false - - giraffe - Long-necked African animal - - - - false - false - - elephant - Largest living land animal with a trunk - - - - false - false - - mouse - Small rodent with a long tail - - - - false - false - - worm - Animal with no backbone or limbs - - - - false - false - - dragonfly - Large insect with transparent wings - - - - false - false - - penguin - Sea bird of the Antarctic regions - - - - false - false - - rabbit - Burrowing animal with long ears - - - - false - false - - hamster - Small mouse-like rodent, kept as pets - - - - false - false - - wolf - Fierce, wild animal of the dog family - - - - false - false - - lion - Large, powerful animal of the cat family - - - - false - false - - tiger - Large Asian animal of the cat family - - - - false - false - - octopus - Sea animal with eight long tentacles - - - - false - false - - rhinoceros - Large, thick-skinned animal of Africa - - - - false - false - - hedgehog - Small, with a back covered in stiff spines - - - - false - false - - reindeer - Deer with large antlers - - - - false - false - - squirrel - Small tree-climbing animal with a bushy tail - - - - false - false - - tortoise - A slow-moving, four-footed reptile - - - - false - false - - hippopotamus - Large African river animal - - - - false - false - - dinosaur - Extinct reptile - - - - false - false - - eagle - Large bird of prey - - - - false - false - - shark - Large sea fish with a triangular fin - - - - false - false - - duck - Swimming bird - - - - false - false - - fish - Live in water - - - - false - false - - parrot - Can repeat your words - - - - false - false - - frog - Small green jumping animal - - - - false - false - - snail - Slow-moving, has a spiral shell - - - - false - false - - camel - Can survive a long time in the desert - - - - false - false - - alligator - Reptile of the crocodile family - - - - false - false - - mosquito - Its bite spreads malaria - - - - false - false - - sheep - Grass-eating animal with a thick fleecy coat - - - - false - false - - shellfish - Water animal that has a shell - - - - false - false - - kitten - the young of a cat, ferret, etc. - - - - false - false - - kingfisher - Small bird with bright bluish plumage - - - - false - false - - piglet - young pig - - - - false - false - - turkey - Large bird reared for its flesh - - - - diff --git a/data/kvtml/clothing.kvtml b/data/kvtml/clothing.kvtml deleted file mode 100644 index 15f8306..0000000 --- a/data/kvtml/clothing.kvtml +++ /dev/null @@ -1,152 +0,0 @@ - - - - - converter - Clothing - Things humans wear - - - - en - - - - - false - false - - sneakers - Athletic shoes - - - - false - false - - boots - Shoes meant for working - - - - false - false - - pants - Leg coverings - - - - false - false - - shorts - Short leg coverings - - - - false - false - - skirt - The bottom half of a dress - - - - false - false - - dress - A full-body covering - - - - false - false - - parka - A cold-weather full-body covering - - - - false - false - - jacket - A light upper-body warmer - - - - false - false - - coat - Heavy upper-body covering - - - - false - false - - hat - A head covering - - - - false - false - - tobogan - Cold-weather head covering - - - - false - false - - earmuffs - Ear warmer - - - - false - false - - sunglasses - Sunny weather eyewear - - - - false - false - - socks - Foot protection - - - - false - false - - sandals - Beach footwear - - - - false - false - - gloves - Warmers for the hands - - - - false - false - - belt - Keeps your pants from falling down - - - - diff --git a/data/kvtml/computers.kvtml b/data/kvtml/computers.kvtml deleted file mode 100644 index c9b1224..0000000 --- a/data/kvtml/computers.kvtml +++ /dev/null @@ -1,128 +0,0 @@ - - - - - converter - Computers - Items surrounding your computer - - - - en - - - - - false - false - - monitor - A device to visualize bits - - - - false - false - - speakers - Creates waves through the air - - - - false - false - - printer - Used to visualize bits on paper - - - - false - false - - mouse - A way to instruct a computer - - - - false - false - - keyboard - A standard input device - - - - false - false - - joystick - Input device used for games - - - - false - false - - modem - Used to communicate over the Internet - - - - false - false - - caffeine - A substance ensuring alertness - - - - false - false - - floppy - An ancient storage device - - - - false - false - - tape - Used for software backups - - - - false - false - - scanner - Creates a digital representation of a flat object - - - - false - false - - headphones - For listening to sound privately - - - - false - false - - webcam - Sends moving images over the Internet - - - - false - false - - microphone - Allows you to record sound - - - - diff --git a/data/kvtml/currencies.kvtml b/data/kvtml/currencies.kvtml deleted file mode 100644 index ce92cc6..0000000 --- a/data/kvtml/currencies.kvtml +++ /dev/null @@ -1,184 +0,0 @@ - - - - - converter - Currencies - Modern World currencies - - - - en - - - - - false - false - - dinar - Algeria, Bahrain, Kuwait, etc. - - - - false - false - - dollar - USA, Canada, Australia, etc. - - - - false - false - - drachma - Greece (until 2002) - - - - false - false - - euro - 17 European Union countries, etc. - - - - false - false - - franc - France (until 1998), Switzerland, etc. - - - - false - false - - guilder - The Netherlands (until 1998) - - - - false - false - - koruna - Czech Republic, Slovakia (until 2008) - - - - false - false - - krona - Sweden - - - - false - false - - krone - Denmark, Greenland, Norway - - - - false - false - - lira - Italy (until 1998) - - - - false - false - - mark - Germany (until 1998) - - - - false - false - - peseta - Spain (until 2002) - - - - false - false - - peso - Argentina, Chile, Mexico, Cuba, Colombia, etc. - - - - false - false - - pound - UK, Cyprus (until 2008), Egypt, etc. - - - - false - false - - rand - South Africa - - - - false - false - - renminbi - China - - - - false - false - - ruble - Russia, Belarus, etc. - - - - false - false - - rupee - India, Pakistan, Sri Lanka, etc. - - - - false - false - - shilling - Kenya, Tanzania, etc. - - - - false - false - - yen - Japan - - - - false - false - - zloty - Poland - - - - diff --git a/data/kvtml/easy.kvtml b/data/kvtml/easy.kvtml deleted file mode 100644 index 57672f2..0000000 --- a/data/kvtml/easy.kvtml +++ /dev/null @@ -1,454 +0,0 @@ - - - - - converter - Easy - Easy Words - - - - en - - - - - Noun - noun - - Male - noun:male - - - Female - noun:female - - - Neutral - noun:neutral - - - - Verb - verb - - Regular - verb:regular - - - Irregular - verb:irregular - - - - Adjective - adjective - - - Adverb - adverb - - - Question - - - Name - - - Article - - Definite - - - Indefinite - - - - Pronoun - - Possessive - - - Personal - - - - Phrase - - - Numeral - - Ordinal - - - Cardinal - - - - Conjunction - - - Preposition - - - Informal - - - Figuratively - - - - - false - false - - playtime - time assigned for children to play - - - - false - false - - furniture - objects in a room - - - - false - false - - garden - a piece of cultivated ground - - - - false - false - - pupil - a person taught by another - - - - false - false - - vegetables - a plant of which some part is used as food - - - - false - false - - apple - a round firm fruit - - - - false - false - - plate - almost flat usually circular ustensil - - - - false - false - - sweet - tasting as if containing sugar - - - - false - false - - kitchen - room in which meals are prepared - - - - false - false - - chocolate - made from cocoa - - - - false - false - - computer - an electronic machine - - - - false - false - - carrot - rabbits like them - - - - false - false - - indication - show you an information - - - - false - false - - banana - a yellow fruit - - - - false - false - - information - knowledge - - - - false - false - - money - coins and banknotes - - - - false - false - - adventure - an exciting experiment - - - - false - false - - driver - person at the wheel - - - - false - false - - policeman - member of a police force - - - - false - false - - pineapple - tropical fruit with tough segmented skin - - - - false - false - - stamp - affix it to an envelop - - - - false - false - - lunch - midday meal - - - - false - false - - limousine - car for celebrities - - - - false - false - - escalator - moving staircase - - - - false - false - - breakfast - first meal of the day - - - - false - false - - flower - part of the plant from which seeds develop - - - - false - false - - education - systematic training - - - - false - false - - table - has a flat top with one or more legs - - - - false - false - - classroom - where students are taught - - - - false - false - - television - receives and displays images - - - - false - false - - mistake - incorrect idea or opinion - - - - false - false - - yesterday - the day before today - - - - false - false - - people - large group of persons - - - - false - false - - children - young humans - - - - false - false - - surprise - something sudden or unexpected - - - - false - false - - jacket - a short coat - - - - false - false - - cheese - solid food made from milk - - - - false - false - - chicken - a young bird, especially of the domestic fowl - - - - false - false - - dinner - evening meal - - - - false - false - - mountain - mass of land that rises to a great height - - - - false - false - - forest - set of trees - - - - false - false - - potato - plant with starchy edible tubers - - - - false - false - - water - H2O - - - - false - false - - river - a large natural stream of water - - - - diff --git a/data/kvtml/fruits.kvtml b/data/kvtml/fruits.kvtml deleted file mode 100644 index 6dbd346..0000000 --- a/data/kvtml/fruits.kvtml +++ /dev/null @@ -1,208 +0,0 @@ - - - - - converter - Fruits - Fruits of the Earth - - - - en - - - - - false - false - - apple - One a day keeps the doctor away - - - - false - false - - apricot - Resembles a small Peach - - - - false - false - - banana - A long yellow fruit that bends along its length - - - - false - false - - blackberry - A Shiny black berry - - - - false - false - - blueberry - Sweet edible dark-blue berries - - - - false - false - - cherry - Red fruit with a single hard stone - - - - false - false - - coconut - Has a hard brown outer husk and creamy white flesh - - - - false - false - - cranberry - A bright red berry - - - - false - false - - grape - Used to make wine - - - - false - false - - grapefruit - Large yellow citrus fruit with acidic, juicy pulp - - - - false - false - - kiwi - Fuzzy brown egg-shaped fruit with slightly green flesh - - - - false - false - - lemon - Yellow oval fruit with juicy acidic flesh - - - - false - false - - lime - Small, green citrus fruit that resembles a lemon - - - - false - false - - mandarin - Reddish-orange loose-skinned citrus of China - - - - false - false - - mango - Large oval smooth-skinned fruit from the tropics - - - - false - false - - olive - Small fruit with a high oil content - - - - false - false - - orange - Round citrus fruit, associated with a color - - - - false - false - - peach - Juicy fruit with sweet yellowish flesh - - - - false - false - - pear - Small, bell-shaped juicy, gritty-textured fruit - - - - false - false - - pineapple - Resembling a pine cone, with a tangy sweet taste - - - - false - false - - plum - Sweet, juicy, purple fruit with smooth skin - - - - false - false - - raspberry - Strongly-flavored berry of several colors - - - - false - false - - strawberry - Small, sweet and fleshy red fruit - - - - false - false - - watermelon - This melon from Africa has a moist red flesh - - - - diff --git a/data/kvtml/hard.kvtml b/data/kvtml/hard.kvtml deleted file mode 100644 index b08dc6b..0000000 --- a/data/kvtml/hard.kvtml +++ /dev/null @@ -1,454 +0,0 @@ - - - - - converter - Hard - Hard Words - - - - en - - - - - Noun - noun - - Male - noun:male - - - Female - noun:female - - - Neutral - noun:neutral - - - - Verb - verb - - Regular - verb:regular - - - Irregular - verb:irregular - - - - Adjective - adjective - - - Adverb - adverb - - - Question - - - Name - - - Article - - Definite - - - Indefinite - - - - Pronoun - - Possessive - - - Personal - - - - Phrase - - - Numeral - - Ordinal - - - Cardinal - - - - Conjunction - - - Preposition - - - Informal - - - Figuratively - - - - - false - false - - knuckle - - - - - false - false - - catalysis - - - - - false - false - - jewelry - - - - - false - false - - lighthouse - - - - - false - false - - enhancement - - - - - false - false - - federalism - - - - - false - false - - dogmatism - - - - - false - false - - dilettantism - - - - - false - false - - chloroform - - - - - false - false - - ethnography - - - - - false - false - - calligraphy - - - - - false - false - - brainstorm - - - - - false - false - - belladonna - - - - - false - false - - boomerang - - - - - false - false - - accordionist - - - - - false - false - - afterthought - - - - - false - false - - ornithology - - - - - false - false - - osteopathy - - - - - false - false - - rattlesnake - - - - - false - false - - exhibition - - - - - false - false - - radiography - - - - - false - false - - surrealism - - - - - false - false - - syllogism - - - - - false - false - - symposium - - - - - false - false - - theologian - - - - - false - false - - taxidermist - - - - - false - false - - trigonometry - - - - - false - false - - translucence - - - - - false - false - - truthfulness - - - - - false - false - - troposphere - - - - - false - false - - uprightness - - - - - false - false - - upholstery - - - - - false - false - - workaholic - - - - - false - false - - withdrawal - - - - - false - false - - zoology - - - - - false - false - - wheelbarrow - - - - - false - false - - xenophobia - - - - - false - false - - yachtsman - - - - - false - false - - astonishment - - - - - false - false - - xylophone - - - - - false - false - - pseudonym - - - - - false - false - - prosperity - - - - - false - false - - psychiatrist - - - - - false - false - - protagonist - - - - - diff --git a/data/kvtml/inventions.kvtml b/data/kvtml/inventions.kvtml deleted file mode 100644 index ffd2f2b..0000000 --- a/data/kvtml/inventions.kvtml +++ /dev/null @@ -1,240 +0,0 @@ - - - - - converter - Inventions - Greatest inventions of humans - - - - en - - - - - false - false - - aircraft - Achieve flight through fixed wings - - - - false - false - - antibiotics - Drugs that kill bacteria - - - - false - false - - automobile - A motor vehicle for passengers - - - - false - false - - batteries - Store electrical energy - - - - false - false - - bicycle - Efficient human powered vehicle with 2 wheels - - - - false - false - - boomerang - When thrown, it returns - - - - false - false - - clocks - Accurately displays the time - - - - false - false - - computers - One is in front of you right now - - - - false - false - - dynamite - A powerful high explosive - - - - false - false - - electricity - The flow of electrons - - - - false - false - - elevator - Allows for speedy vertical travels within tall buildings - - - - false - false - - email - Fast method of sending mail through the internet - - - - false - false - - helicopter - Rotating blades on this craft allow flight - - - - false - false - - hovercraft - Vessel that floats on a cushion of air - - - - false - false - - internet - The global computer communications network - - - - false - false - - lasers - Intense beam of light - - - - false - false - - paperclip - Holds paper objects together temporarily - - - - false - false - - photography - Snapshots of moments in time - - - - false - false - - plastics - Petroleum-based polymers with a range of properties - - - - false - false - - radar - Radio waves provide the spatial location of objects - - - - false - false - - radio - Sound recieved from electromagnetic waves - - - - false - false - - steamengine - The pressure of water vapor drives this engine - - - - false - false - - telephone - A vocal communication device - - - - false - false - - television - Electrical device that displays moving images - - - - false - false - - tetris - Puzzle game made famous by the Gameboy console - - - - false - false - - transistor - Foundation of modern electronics - - - - false - false - - velcro - Hook and loop fasteners - - - - false - false - - wheel - Circular object that allows for low-friction motion - - - - diff --git a/data/kvtml/medium.kvtml b/data/kvtml/medium.kvtml deleted file mode 100644 index 6c2d5da..0000000 --- a/data/kvtml/medium.kvtml +++ /dev/null @@ -1,462 +0,0 @@ - - - - - converter - Medium - Medium Words - - - - en - - - - - Noun - noun - - Male - noun:male - - - Female - noun:female - - - Neutral - noun:neutral - - - - Verb - verb - - Regular - verb:regular - - - Irregular - verb:irregular - - - - Adjective - adjective - - - Adverb - adverb - - - Question - - - Name - - - Article - - Definite - - - Indefinite - - - - Pronoun - - Possessive - - - Personal - - - - Phrase - - - Numeral - - Ordinal - - - Cardinal - - - - Conjunction - - - Preposition - - - Informal - - - Figuratively - - - - - false - false - - machine - apparatus for applying mechanical power - - - - false - false - - bedroom - a room for sleeping in - - - - false - false - - magistrate - an official with authority to administer the law - - - - false - false - - gymnasium - a building equipped for gymnastics - - - - false - false - - appointment - an arrangement to meet at a particular time - - - - false - false - - antibiotic - a substance capable of destroying a bacteria - - - - false - false - - delegation - a body of delegates - - - - false - false - - pharmacist - a person who is skilled in pharmacy - - - - false - false - - cheeseburger - a hamburger with cheese - - - - false - false - - assessment - the amount or value is fixed - - - - false - false - - surroundings - the things or conditions around - - - - false - false - - supermarket - a large self-service shop - - - - false - false - - indication - a sign to show the presence of something - - - - false - false - - radiography - the production of X-ray photographs - - - - false - false - - information - facts told or discovered - - - - false - false - - mincemeat - a mixture used in pies - - - - false - false - - signature - a person's name written by himself - - - - false - false - - enthusiasm - a feeling of eager liking for something - - - - false - false - - asparagus - a plant whose young shoots are cooked and eaten as vegetable - - - - false - false - - vocabulary - a list of words with their meanings - - - - false - false - - government - the organization governing a country - - - - false - false - - conservatory - a greenhouse attached to a house - - - - false - false - - bookshelf - a piece of furniture where you put books - - - - false - false - - photograph - a picture formed by the chemical action of light on a sensitive surface - - - - false - false - - intelligence - mental ability - - - - false - false - - lawnmower - a machine for cutting lawns - - - - false - false - - arithmetic - the science of numbers - - - - false - false - - membership - being a member - - - - false - false - - tranquility - calm and undisturbed - - - - false - false - - contribution - given jointly with others - - - - false - false - - apostrophe - a punctuation mark - - - - false - false - - amusement - for entertainments - - - - false - false - - umbrella - protect you from the rain - - - - false - false - - illumination - a decoration with lights - - - - false - false - - millimetre - 0.04 inch - - - - false - false - - milligram - one-thousandth of a gram - - - - false - false - - aquarium - a tank in which fish are kept for display - - - - false - false - - miscount - an incorrect count - - - - false - false - - population - the number of people - - - - false - false - - innovation - introduction of a new process - - - - false - false - - innuendo - an unpleasant insinuation - - - - false - false - - strawberry - a red fruit delicious with cream - - - - false - false - - nephew - the son of your brother or sister - - - - false - false - - countryside - rural areas - - - - false - false - - collection - a set - - - - diff --git a/data/kvtml/numbers.kvtml b/data/kvtml/numbers.kvtml deleted file mode 100644 index c0a858e..0000000 --- a/data/kvtml/numbers.kvtml +++ /dev/null @@ -1,296 +0,0 @@ - - - - - converter - Numbers - Written words for numbers - - - - en - - - - - false - false - - zero - 0 - - - - false - false - - one - 1 - - - - false - false - - two - 2 - - - - false - false - - three - 3 - - - - false - false - - four - 4 - - - - false - false - - five - 5 - - - - false - false - - six - 6 - - - - false - false - - seven - 7 - - - - false - false - - eight - 8 - - - - false - false - - nine - 9 - - - - false - false - - ten - 10 - - - - false - false - - eleven - 11 - - - - false - false - - twelve - 12 - - - - false - false - - thirteen - 13 - - - - false - false - - fourteen - 14 - - - - false - false - - fifteen - 15 - - - - false - false - - sixteen - 16 - - - - false - false - - seventeen - 17 - - - - false - false - - eighteen - 18 - - - - false - false - - nineteen - 19 - - - - false - false - - twenty - 20 - - - - false - false - - thirty - 30 - - - - false - false - - fourty - 40 - - - - false - false - - fifty - 50 - - - - false - false - - sixty - 60 - - - - false - false - - seventy - 70 - - - - false - false - - eighty - 80 - - - - false - false - - ninety - 90 - - - - false - false - - hundred - 100 - - - - false - false - - thousand - 1000 - - - - false - false - - million - 1,000,000 - - - - false - false - - billion - 1,000,000,000 - - - - false - false - - first - 1st - - - - false - false - - second - 2nd - - - - false - false - - third - 3rd - - - - diff --git a/data/kvtml/objects.kvtml b/data/kvtml/objects.kvtml deleted file mode 100644 index 3bc0329..0000000 --- a/data/kvtml/objects.kvtml +++ /dev/null @@ -1,248 +0,0 @@ - - - - - converter - Objects - Everyday objects from the home - - - - en - - - - - true - false - - television - Electrical device that displays moving images - - - - true - false - - chair - For sitting down on - - - - true - false - - freezer - Used to keep food items extra cold - - - - true - false - - fridge - To keep food cool - - - - true - false - - cooker - Used to cook food - - - - true - false - - fireplace - Keep warm by flame in cold weather - - - - true - false - - table - Holds items above the floor - - - - true - false - - drawers - Storage for personal items - - - - true - false - - mirror - Reflects the area in front of it - - - - true - false - - clock - Keeps the time - - - - true - false - - wardrobe - Stores clothing items upright - - - - true - false - - bookcase - Storage for books - - - - true - false - - blender - Liquidates food items - - - - true - false - - settee - For comfortable seating - - - - true - false - - washbasin - To wash the hands and face - - - - true - false - - shower - To clean your body whilst standing - - - - true - false - - bath - To clean the body whilst lying horizontally - - - - true - false - - kettle - Dedicated to boiling water - - - - true - false - - telephone - A vocal communication device - - - - true - false - - radiator - Increase the temperature of the house - - - - true - false - - radio - Plays audio from the airwaves - - - - true - false - - computer - Interactive electronic device - - - - true - false - - pets - Alive, and often cuddly - - - - true - false - - pictures - Images in frames - - - - true - false - - toothbrush - To brush teeth - - - - true - false - - carpet - Soft floor covering - - - - true - false - - toys - Things to play with - - - - true - false - - ornaments - Objects with no obvious function - - - - true - false - - cupboards - Larger storage areas - - - - diff --git a/data/kvtml/people.kvtml b/data/kvtml/people.kvtml deleted file mode 100644 index 106c777..0000000 --- a/data/kvtml/people.kvtml +++ /dev/null @@ -1,152 +0,0 @@ - - - - - converter - People - Influential people of history - - - - en - - - - - false - false - - aristotle - Influential Greek philosopher - - - - false - false - - beethoven - Composer - - - - false - false - - columbus - This explorer discovered the Americas - - - - false - false - - darwin - Theory of Evolution - - - - false - false - - edison - Inventor of the Light Bulb - - - - false - false - - einstein - Theory of Relativity - - - - false - false - - fleming - Discovered Penicillin - - - - false - false - - galileo - 'The Earth revolves around the Sun' - - - - false - false - - gandhi - Non-violent independence for India - - - - false - false - - gorbachev - Helped end Communism in USSR - - - - false - false - - mandela - Ended apartheid in South Africa - - - - false - false - - marconi - Inventor of radio - - - - false - false - - michelangelo - A painter, sculptor and architect - - - - false - false - - napoleon - French conqueror - - - - false - false - - newton - Discovered Gravity - - - - false - false - - pasteur - Invented Vaccination - - - - false - false - - washington - First president of United States - - - - diff --git a/data/kvtml/professions.kvtml b/data/kvtml/professions.kvtml deleted file mode 100644 index f1a4b6d..0000000 --- a/data/kvtml/professions.kvtml +++ /dev/null @@ -1,328 +0,0 @@ - - - - - converter - Professions - The jobs people do - - - - en - - - - - false - true - - doctor - One who helps the sick - - - - false - true - - fireman - One who puts out fires - - - - false - true - - fisherman - A catcher of ocean creatures - - - - false - true - - soldier - One who defends his country - - - - false - false - - astronaut - An extra-terrestrial traveler - - - - false - false - - electrician - A person that maintains an electrical system - - - - false - false - - plumber - Someone that repairs water systems - - - - false - false - - psychiatrist - A doctor for the mind - - - - false - false - - policeman - An officer of the law - - - - false - false - - author - One who writes for a living - - - - false - false - - journalist - A news writer - - - - false - false - - programmer - A maker of computer software - - - - false - false - - actor - One who performs for an audience - - - - false - false - - musician - A player of music - - - - false - false - - comedian - One who invokes laughter - - - - false - false - - chemist - Scientist who specializes in chemistry - - - - false - false - - teacher - One who instructs students - - - - false - false - - mechanic - A person that repairs machinery - - - - false - false - - farmer - Someone that grows crops - - - - false - false - - artist - One who practices art - - - - false - false - - salesman - A door-to-door seller - - - - false - false - - tailor - Makes and alteres clothes - - - - false - false - - blacksmith - Crafter of iron and steel - - - - false - false - - dentist - Specializes in oral medical care - - - - false - false - - designer - Develops and communicates ideas - - - - false - false - - scientist - Expert in an area of science - - - - false - false - - inventor - The first to think of or make something - - - - false - false - - engineer - Uses scientific knowledge to solve practical problems - - - - false - false - - accountant - Look after the finances in an organisastion - - - - false - false - - baker - Bake bread - - - - false - false - - builder - Involved in the construction of buildings - - - - false - false - - carpenter - Crafts furniture - - - - false - false - - chef - Prepare and cook food - - - - false - false - - hairdresser - Cut and style people's hair - - - - false - false - - lawyer - Defend and prosecute people - - - - false - false - - optician - Look after people's eye sight - - - - false - false - - reporter - Find and report the news - - - - false - false - - secretary - Arrange appointments and organise meetings - - - - false - false - - architect - Designs the blueprints for new structures - - - - diff --git a/data/kvtml/space.kvtml b/data/kvtml/space.kvtml deleted file mode 100644 index 3bf0e8b..0000000 --- a/data/kvtml/space.kvtml +++ /dev/null @@ -1,248 +0,0 @@ - - - - - converter - Space - Space objects, terms and missions - - - - en - - - - - false - false - - apollo - The American moon program - - - - false - false - - asteroid - Small planetary body in orbit around the Sun - - - - false - false - - astronaut - Person from the USA who travels into space - - - - false - false - - buran - Russian reusable spacecraft program - - - - false - false - - comet - Medium-sized icy object orbiting the Sun - - - - false - false - - constellation - Grouping of stars which can form a shape or pattern - - - - false - false - - cosmonaut - Person from Russia who travels into space - - - - false - false - - earth - The planet on which we live - - - - false - false - - eclipse - When one celestial body obscures another - - - - false - false - - galaxy - Very large cluster of stars - - - - false - false - - jupiter - Fifth from the Sun, the largest planet - - - - false - false - - mars - Fourth planet from the Sun - - - - false - false - - mercury - The smallest planet and nearest the Sun - - - - false - false - - meteor - The visible track of a Meteoroid entering the Earth's atmosphere - - - - false - false - - meteorite - Matter that has reached Earth from outer space - - - - false - false - - mir - Russian space station, launched in 1986 - - - - false - false - - moon - The natural satellite of the Earth - - - - false - false - - neptune - Giant planet, eighth from the sun - - - - false - false - - orbit - Path an object makes around another - - - - false - false - - pluto - Second-largest known dwarf planet - - - - false - false - - satellite - An object that revolves around a planet - - - - false - false - - saturn - Giant planet with rings, sixth from the Sun - - - - false - false - - skylab - The first American space station, launched in 1973 - - - - false - false - - sputnik - The first artificial Earth satellite, launched in 1957 - - - - false - false - - sun - The star at the center of the Solar System - - - - false - false - - taikonaut - Person from China who travels into space - - - - false - false - - uranus - Seventh planet from the Sun - - - - false - false - - venus - Second planet from the Sun - - - - false - false - - voyager - Twin space probes launched in 1977 - - - - diff --git a/data/kvtml/sports.kvtml b/data/kvtml/sports.kvtml deleted file mode 100644 index bf3563a..0000000 --- a/data/kvtml/sports.kvtml +++ /dev/null @@ -1,264 +0,0 @@ - - - - - converter - Sports - Events of the Olympics - - - - en - - - - - false - false - - aquatics - Water sports - - - - false - false - - archery - Shooting arrows with a bow - - - - false - false - - athletics - Track and field events - - - - false - false - - badminton - Hit the shuttlecock over the net - - - - false - false - - baseball - 4 bases arranged in a diamond - - - - false - false - - basketball - Throw the ball through the hoop - - - - false - false - - boxing - Fighting with the fists - - - - false - false - - canoe - Small boat propelled with a paddle - - - - false - false - - cycling - Riding bicycles - - - - false - false - - equestrian - Horseback riding - - - - false - false - - fencing - Fighting with swords - - - - false - false - - football - Kick the ball into the opponent's goal - - - - false - false - - gymnastics - Graceful display of athletic ability - - - - false - false - - handball - Using hands and a rubber ball - - - - false - false - - hockey - Curved sticks and a ball or puck - - - - false - false - - judo - A martial art - - - - false - false - - pentathlon - 5 athletic events - - - - false - false - - rowing - Propelling a boat with oars - - - - false - false - - sailing - Boating propelled by wind - - - - false - false - - shooting - Firing projectiles from a weapon - - - - false - false - - softball - A game resembling baseball - - - - false - false - - taekwondo - Korean martial art - - - - false - false - - tennis - Played with rackets on a court - - - - false - false - - triathlon - 3 athletic events - - - - false - false - - volleyball - Hit an inflated ball over a high net - - - - false - false - - weightlifting - Lifting heavy weights - - - - false - false - - wrestling - Grappling between 2 opponents - - - - false - false - - bobsleigh - A sled racing down an icy track - - - - false - false - - curling - Stones slid across ice - - - - false - false - - skating - Gliding on ice - - - - false - false - - skiing - Downhill on snow using flat feet - - - - diff --git a/data/kvtml/translations.txt b/data/kvtml/translations.txt deleted file mode 100644 index 0140ed7..0000000 --- a/data/kvtml/translations.txt +++ /dev/null @@ -1,14 +0,0 @@ -translations of data files I know are done -feel free to add to this list if you do translations of these files :) - -ca -da -de -en_GB -es -ga -gl -it -ru -uk - diff --git a/data/kvtml/transportation.kvtml b/data/kvtml/transportation.kvtml deleted file mode 100644 index 8755301..0000000 --- a/data/kvtml/transportation.kvtml +++ /dev/null @@ -1,176 +0,0 @@ - - - - - converter - Transportation - Ways of getting around - - - - en - - - - - false - false - - automobile - Four-wheeled vehicle - - - - false - false - - motorcycle - Motorized two-wheeled vehicle - - - - false - false - - train - A vehicle that travels on tracks - - - - false - false - - airplane - A flying machine - - - - false - false - - helicopter - A vertical takeoff aircraft - - - - false - false - - bicycle - A two-wheeled human-powered vehicle - - - - false - false - - streetcar - An electrified bus - - - - false - false - - elevator - It goes up, it comes down - - - - false - false - - ship - A sea-faring vehicle - - - - false - false - - submarine - For underwater transportation - - - - false - false - - trolley - Open-air bus - - - - false - false - - truck - Heavy duty with four wheels - - - - false - false - - bus - For transporting several people at once - - - - false - false - - subway - An underground train - - - - false - false - - moped - A two-wheeled scooter - - - - false - false - - speedboat - A fast sea-faring vehicle - - - - false - false - - snowmobile - Motorized transport over snow - - - - false - false - - rollerskates - Strap wheels to your feet - - - - false - false - - unicycle - One-wheeled, often seen in the circus - - - - false - false - - airship - Filled with a lighter-than-air gas - - - - diff --git a/data/kvtml/vegetables.kvtml b/data/kvtml/vegetables.kvtml deleted file mode 100644 index 95ea2c3..0000000 --- a/data/kvtml/vegetables.kvtml +++ /dev/null @@ -1,248 +0,0 @@ - - - - - converter - Vegetables - Vegetables of the Earth - - - - en - - - - - false - false - - asparagus - Succulent young shoots - - - - false - false - - broccoli - Dense clusters of tight green buds grow from a thick stalk - - - - false - false - - cabbage - Has leaves that form a characteristic compact head - - - - false - false - - carrot - Orange root vegetable that grows underground - - - - false - false - - cauliflower - Type of Cabbage, with bunches of creamy white florets - - - - false - false - - celery - Crisp, green vegetable - - - - false - false - - chickpeas - Also known as garbanzo beans, with a nut-like flavor - - - - false - false - - cucumber - Long, green, cylinder-shaped vegetable - - - - false - false - - garlic - A bulb made up of sections of cloves - - - - false - false - - leek - Long narrow white bulb and long dark-green leaves - - - - false - false - - lentils - Small brown beans that cook quickly - - - - false - false - - lettuce - Leafy greens enjoyed in salads - - - - false - false - - mushrooms - A type of fungi - - - - false - false - - onion - Its odor can make you cry - - - - false - false - - paprika - Spicy seasoning ground from red pepper - - - - false - false - - parsley - Fresh-flavored bright green herb - - - - false - false - - parsnip - Root vegetable that looks like a white carrot - - - - false - false - - peanuts - Small light brown nuts, often served salted - - - - false - false - - peas - Small round green seed which grows in a pod - - - - false - false - - potato - Mid-sized, yellow, and grown underground - - - - false - false - - pumpkin - Popular at Halloween - - - - false - false - - rhubarb - Celery-like vegetable - - - - false - false - - soybeans - High-protein, used in tofu - - - - false - false - - spinach - Crisp, dark green leafy vegetable - - - - false - false - - sweetcorn - The yellow seeds of a type of maize - - - - false - false - - tabasco - Very hot red peppers - - - - false - false - - tomato - Red, technically considered a fruit - - - - false - false - - turnip - Vegetable with a succulent, bulbous root - - - - false - false - - watercress - Green leafy little plant, only grows in running water - - - - diff --git a/data/kvtml/worldcapitals.kvtml b/data/kvtml/worldcapitals.kvtml deleted file mode 100644 index 61e4663..0000000 --- a/data/kvtml/worldcapitals.kvtml +++ /dev/null @@ -1,432 +0,0 @@ - - - - - converter - World Capitals - Capital cities of the World - - - - en - - - - - true - false - - london - Capital of England - - - - true - false - - paris - Capital of France - - - - false - false - - berlin - Capital of Germany - - - - false - false - - dublin - Capital of Ireland - - - - false - false - - cardiff - Capital of Wales - - - - false - false - - madrid - Capital of Spain - - - - false - false - - moscow - Capital of Russia - - - - false - false - - kabul - Capital of Afganistan - - - - false - false - - khartoum - Capital of Sudan - - - - false - false - - washington - Capital of the USA - - - - false - false - - canberra - Capital of Australia - - - - false - false - - tokyo - Capital of Japan - - - - false - false - - lisbon - Capital of Portugal - - - - false - false - - edinburgh - Capital of Scotland - - - - false - false - - baghdad - Capital of Iraq - - - - false - false - - beijing - Capital of China - - - - false - false - - seoul - Capital of South Korea - - - - false - false - - tehran - Capital of Iran - - - - false - false - - ottawa - Capital of Canada - - - - false - false - - athens - Capital of Greece - - - - false - false - - stockholm - Capital of Sweden - - - - false - false - - oslo - Capital of Norway - - - - false - false - - sofia - Capital of Bulgaria - - - - false - false - - amsterdam - Capital of the Netherlands - - - - false - false - - rome - Capital of Italy - - - - false - false - - vienna - Capital of Austria - - - - false - false - - santiago - Capital of Chile - - - - false - false - - tirana - Capital of Albania - - - - false - false - - brussels - Capital of Belgium - - - - false - false - - zagreb - Capital of Croatia - - - - false - false - - tallinn - Capital of Estonia - - - - false - false - - helsinki - Capital of Finland - - - - false - false - - reykjavik - Capital of Iceland - - - - false - false - - budapest - Capital of Hungary - - - - false - false - - ankara - Capital of Turkey - - - - false - false - - jakarta - Capital of Indonesia - - - - false - false - - kingston - Capital of Jamaica - - - - false - false - - nairobi - Capital of Kenya - - - - false - false - - riga - Capital of Latvia - - - - false - false - - beirut - Capital of Lebanon - - - - false - false - - tripoli - Capital of Libya - - - - false - false - - skopje - Capital of Macedonia - - - - false - false - - kathmandu - Capital of Nepal - - - - false - false - - lima - Capital of Peru - - - - false - false - - warsaw - Capital of Poland - - - - false - false - - bucharest - Capital of Romania - - - - false - false - - bratislava - Capital of Slovakia - - - - false - false - - mogadishu - Capital of Somalia - - - - false - false - - damascus - Capital of Syria - - - - false - false - - bern - Capital of Switzerland - - - - false - false - - bangkok - Capital of Thailand - - - - false - false - - copenhagen - Capital of Denmark - - - - diff --git a/icons/CMakeLists.txt b/icons/CMakeLists.txt deleted file mode 100644 index 106884f..0000000 --- a/icons/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -kde4_install_icons( ${ICON_INSTALL_DIR} ) diff --git a/icons/hi16-action-editplots.png b/icons/hi16-action-editplots.png deleted file mode 100644 index fe8191f..0000000 Binary files a/icons/hi16-action-editplots.png and /dev/null differ diff --git a/icons/hi16-action-functionhelp.png b/icons/hi16-action-functionhelp.png deleted file mode 100644 index ec3ffc8..0000000 Binary files a/icons/hi16-action-functionhelp.png and /dev/null differ diff --git a/icons/hi16-action-maximum.png b/icons/hi16-action-maximum.png deleted file mode 100644 index ccfcac6..0000000 Binary files a/icons/hi16-action-maximum.png and /dev/null differ diff --git a/icons/hi16-action-minimum.png b/icons/hi16-action-minimum.png deleted file mode 100644 index 31b15d0..0000000 Binary files a/icons/hi16-action-minimum.png and /dev/null differ diff --git a/icons/hi16-action-newdifferential.png b/icons/hi16-action-newdifferential.png deleted file mode 100644 index bc062f9..0000000 Binary files a/icons/hi16-action-newdifferential.png and /dev/null differ diff --git a/icons/hi16-action-newfunction.png b/icons/hi16-action-newfunction.png deleted file mode 100644 index 70fe8fe..0000000 Binary files a/icons/hi16-action-newfunction.png and /dev/null differ diff --git a/icons/hi16-action-newimplicit.png b/icons/hi16-action-newimplicit.png deleted file mode 100644 index 3d70d1e..0000000 Binary files a/icons/hi16-action-newimplicit.png and /dev/null differ diff --git a/icons/hi16-action-newparametric.png b/icons/hi16-action-newparametric.png deleted file mode 100644 index 9cbf41d..0000000 Binary files a/icons/hi16-action-newparametric.png and /dev/null differ diff --git a/icons/hi16-action-newpolar.png b/icons/hi16-action-newpolar.png deleted file mode 100644 index a86a71e..0000000 Binary files a/icons/hi16-action-newpolar.png and /dev/null differ diff --git a/icons/hi16-action-resetview.png b/icons/hi16-action-resetview.png deleted file mode 100644 index 85e14d0..0000000 Binary files a/icons/hi16-action-resetview.png and /dev/null differ diff --git a/icons/hi22-action-editplots.png b/icons/hi22-action-editplots.png deleted file mode 100644 index 95244fc..0000000 Binary files a/icons/hi22-action-editplots.png and /dev/null differ diff --git a/icons/hi22-action-functionhelp.png b/icons/hi22-action-functionhelp.png deleted file mode 100644 index d97647b..0000000 Binary files a/icons/hi22-action-functionhelp.png and /dev/null differ diff --git a/icons/hi22-action-maximum.png b/icons/hi22-action-maximum.png deleted file mode 100644 index 701c01b..0000000 Binary files a/icons/hi22-action-maximum.png and /dev/null differ diff --git a/icons/hi22-action-minimum.png b/icons/hi22-action-minimum.png deleted file mode 100644 index 69c1f85..0000000 Binary files a/icons/hi22-action-minimum.png and /dev/null differ diff --git a/icons/hi22-action-newdifferential.png b/icons/hi22-action-newdifferential.png deleted file mode 100644 index 2db7306..0000000 Binary files a/icons/hi22-action-newdifferential.png and /dev/null differ diff --git a/icons/hi22-action-newfunction.png b/icons/hi22-action-newfunction.png deleted file mode 100644 index b2f004a..0000000 Binary files a/icons/hi22-action-newfunction.png and /dev/null differ diff --git a/icons/hi22-action-newimplicit.png b/icons/hi22-action-newimplicit.png deleted file mode 100644 index a2add27..0000000 Binary files a/icons/hi22-action-newimplicit.png and /dev/null differ diff --git a/icons/hi22-action-newparametric.png b/icons/hi22-action-newparametric.png deleted file mode 100644 index 1e703ce..0000000 Binary files a/icons/hi22-action-newparametric.png and /dev/null differ diff --git a/icons/hi22-action-newpolar.png b/icons/hi22-action-newpolar.png deleted file mode 100644 index 3ea48f7..0000000 Binary files a/icons/hi22-action-newpolar.png and /dev/null differ diff --git a/icons/hi22-action-resetview.png b/icons/hi22-action-resetview.png deleted file mode 100644 index f355552..0000000 Binary files a/icons/hi22-action-resetview.png and /dev/null differ diff --git a/icons/hi32-action-coords.png b/icons/hi32-action-coords.png deleted file mode 100644 index fe7f09b..0000000 Binary files a/icons/hi32-action-coords.png and /dev/null differ diff --git a/icons/hi32-action-deriv_func.png b/icons/hi32-action-deriv_func.png deleted file mode 100644 index 23964ba..0000000 Binary files a/icons/hi32-action-deriv_func.png and /dev/null differ diff --git a/icons/hi32-action-editconstants.png b/icons/hi32-action-editconstants.png deleted file mode 100644 index d3a085c..0000000 Binary files a/icons/hi32-action-editconstants.png and /dev/null differ diff --git a/icons/hi32-action-editplots.png b/icons/hi32-action-editplots.png deleted file mode 100644 index 51595ae..0000000 Binary files a/icons/hi32-action-editplots.png and /dev/null differ diff --git a/icons/hi32-action-func.png b/icons/hi32-action-func.png deleted file mode 100644 index 6b95aa6..0000000 Binary files a/icons/hi32-action-func.png and /dev/null differ diff --git a/icons/hi32-action-functionhelp.png b/icons/hi32-action-functionhelp.png deleted file mode 100644 index ebe2ea5..0000000 Binary files a/icons/hi32-action-functionhelp.png and /dev/null differ diff --git a/icons/hi32-action-integral_func.png b/icons/hi32-action-integral_func.png deleted file mode 100644 index 6f2f6d2..0000000 Binary files a/icons/hi32-action-integral_func.png and /dev/null differ diff --git a/icons/hi32-action-lessen.png b/icons/hi32-action-lessen.png deleted file mode 100644 index e2e5ae6..0000000 Binary files a/icons/hi32-action-lessen.png and /dev/null differ diff --git a/icons/hi32-action-magnify.png b/icons/hi32-action-magnify.png deleted file mode 100644 index d684a82..0000000 Binary files a/icons/hi32-action-magnify.png and /dev/null differ diff --git a/icons/hi32-action-maximum.png b/icons/hi32-action-maximum.png deleted file mode 100644 index 6890d57..0000000 Binary files a/icons/hi32-action-maximum.png and /dev/null differ diff --git a/icons/hi32-action-minimum.png b/icons/hi32-action-minimum.png deleted file mode 100644 index c936daf..0000000 Binary files a/icons/hi32-action-minimum.png and /dev/null differ diff --git a/icons/hi32-action-newdifferential.png b/icons/hi32-action-newdifferential.png deleted file mode 100644 index f5b7641..0000000 Binary files a/icons/hi32-action-newdifferential.png and /dev/null differ diff --git a/icons/hi32-action-newfunction.png b/icons/hi32-action-newfunction.png deleted file mode 100644 index 90e8bca..0000000 Binary files a/icons/hi32-action-newfunction.png and /dev/null differ diff --git a/icons/hi32-action-newimplicit.png b/icons/hi32-action-newimplicit.png deleted file mode 100644 index 7d4de32..0000000 Binary files a/icons/hi32-action-newimplicit.png and /dev/null differ diff --git a/icons/hi32-action-newparametric.png b/icons/hi32-action-newparametric.png deleted file mode 100644 index 3aaa20a..0000000 Binary files a/icons/hi32-action-newparametric.png and /dev/null differ diff --git a/icons/hi32-action-newpolar.png b/icons/hi32-action-newpolar.png deleted file mode 100644 index 590182b..0000000 Binary files a/icons/hi32-action-newpolar.png and /dev/null differ diff --git a/icons/hi32-action-resetview.png b/icons/hi32-action-resetview.png deleted file mode 100644 index 0b2316a..0000000 Binary files a/icons/hi32-action-resetview.png and /dev/null differ diff --git a/icons/hi48-action-editplots.png b/icons/hi48-action-editplots.png deleted file mode 100644 index e29f723..0000000 Binary files a/icons/hi48-action-editplots.png and /dev/null differ diff --git a/icons/hi48-action-functionhelp.png b/icons/hi48-action-functionhelp.png deleted file mode 100644 index 627ddf2..0000000 Binary files a/icons/hi48-action-functionhelp.png and /dev/null differ diff --git a/icons/hi48-action-integral_func.png b/icons/hi48-action-integral_func.png deleted file mode 100644 index bb04239..0000000 Binary files a/icons/hi48-action-integral_func.png and /dev/null differ diff --git a/icons/hi48-action-maximum.png b/icons/hi48-action-maximum.png deleted file mode 100644 index fba5195..0000000 Binary files a/icons/hi48-action-maximum.png and /dev/null differ diff --git a/icons/hi48-action-minimum.png b/icons/hi48-action-minimum.png deleted file mode 100644 index e095ab6..0000000 Binary files a/icons/hi48-action-minimum.png and /dev/null differ diff --git a/icons/hi48-action-newdifferential.png b/icons/hi48-action-newdifferential.png deleted file mode 100644 index c513a30..0000000 Binary files a/icons/hi48-action-newdifferential.png and /dev/null differ diff --git a/icons/hi48-action-newfunction.png b/icons/hi48-action-newfunction.png deleted file mode 100644 index 250baeb..0000000 Binary files a/icons/hi48-action-newfunction.png and /dev/null differ diff --git a/icons/hi48-action-newimplicit.png b/icons/hi48-action-newimplicit.png deleted file mode 100644 index c9add9e..0000000 Binary files a/icons/hi48-action-newimplicit.png and /dev/null differ diff --git a/icons/hi48-action-newparametric.png b/icons/hi48-action-newparametric.png deleted file mode 100644 index 2d1fd9c..0000000 Binary files a/icons/hi48-action-newparametric.png and /dev/null differ diff --git a/icons/hi48-action-newpolar.png b/icons/hi48-action-newpolar.png deleted file mode 100644 index acc6ea0..0000000 Binary files a/icons/hi48-action-newpolar.png and /dev/null differ diff --git a/icons/hi48-action-resetview.png b/icons/hi48-action-resetview.png deleted file mode 100644 index 9399413..0000000 Binary files a/icons/hi48-action-resetview.png and /dev/null differ diff --git a/icons/hi64-action-maximum.png b/icons/hi64-action-maximum.png deleted file mode 100644 index f6dddc6..0000000 Binary files a/icons/hi64-action-maximum.png and /dev/null differ diff --git a/icons/hi64-action-minimum.png b/icons/hi64-action-minimum.png deleted file mode 100644 index 2988490..0000000 Binary files a/icons/hi64-action-minimum.png and /dev/null differ diff --git a/icons/hisc-action-deriv_func.svgz b/icons/hisc-action-deriv_func.svgz deleted file mode 100644 index 64320b7..0000000 Binary files a/icons/hisc-action-deriv_func.svgz and /dev/null differ diff --git a/icons/hisc-action-editconstants.svgz b/icons/hisc-action-editconstants.svgz deleted file mode 100644 index 51fc464..0000000 Binary files a/icons/hisc-action-editconstants.svgz and /dev/null differ diff --git a/icons/hisc-action-editplots.svgz b/icons/hisc-action-editplots.svgz deleted file mode 100644 index e8d99f6..0000000 Binary files a/icons/hisc-action-editplots.svgz and /dev/null differ diff --git a/icons/hisc-action-functionhelp.svgz b/icons/hisc-action-functionhelp.svgz deleted file mode 100644 index 93f4889..0000000 Binary files a/icons/hisc-action-functionhelp.svgz and /dev/null differ diff --git a/icons/hisc-action-integral_func.svgz b/icons/hisc-action-integral_func.svgz deleted file mode 100644 index 782da6f..0000000 Binary files a/icons/hisc-action-integral_func.svgz and /dev/null differ diff --git a/icons/hisc-action-maximum.svgz b/icons/hisc-action-maximum.svgz deleted file mode 100644 index dd9ae3d..0000000 Binary files a/icons/hisc-action-maximum.svgz and /dev/null differ diff --git a/icons/hisc-action-minimum.svgz b/icons/hisc-action-minimum.svgz deleted file mode 100644 index a482b4d..0000000 Binary files a/icons/hisc-action-minimum.svgz and /dev/null differ diff --git a/icons/hisc-action-newfunction.svgz b/icons/hisc-action-newfunction.svgz deleted file mode 100644 index 202d7be..0000000 Binary files a/icons/hisc-action-newfunction.svgz and /dev/null differ diff --git a/icons/hisc-action-newparametric.svgz b/icons/hisc-action-newparametric.svgz deleted file mode 100644 index 04546e6..0000000 Binary files a/icons/hisc-action-newparametric.svgz and /dev/null differ diff --git a/icons/hisc-action-newpolar.svgz b/icons/hisc-action-newpolar.svgz deleted file mode 100644 index f135c0f..0000000 Binary files a/icons/hisc-action-newpolar.svgz and /dev/null differ diff --git a/icons/hisc-action-resetview.svgz b/icons/hisc-action-resetview.svgz deleted file mode 100644 index 2c0808a..0000000 Binary files a/icons/hisc-action-resetview.svgz and /dev/null differ diff --git a/keduvocdocument/keduvocarticle.cpp b/keduvocarticle.cpp similarity index 100% rename from keduvocdocument/keduvocarticle.cpp rename to keduvocarticle.cpp diff --git a/keduvocdocument/keduvocarticle.h b/keduvocarticle.h similarity index 100% rename from keduvocdocument/keduvocarticle.h rename to keduvocarticle.h diff --git a/keduvocdocument/keduvoccommon_p.h b/keduvoccommon_p.h similarity index 100% rename from keduvocdocument/keduvoccommon_p.h rename to keduvoccommon_p.h diff --git a/keduvocdocument/keduvocconjugation.cpp b/keduvocconjugation.cpp similarity index 100% rename from keduvocdocument/keduvocconjugation.cpp rename to keduvocconjugation.cpp diff --git a/keduvocdocument/keduvocconjugation.h b/keduvocconjugation.h similarity index 100% rename from keduvocdocument/keduvocconjugation.h rename to keduvocconjugation.h diff --git a/keduvocdocument/keduvoccontainer.cpp b/keduvoccontainer.cpp similarity index 100% rename from keduvocdocument/keduvoccontainer.cpp rename to keduvoccontainer.cpp diff --git a/keduvocdocument/keduvoccontainer.h b/keduvoccontainer.h similarity index 100% rename from keduvocdocument/keduvoccontainer.h rename to keduvoccontainer.h diff --git a/keduvocdocument/keduvoccsvreader.cpp b/keduvoccsvreader.cpp similarity index 100% rename from keduvocdocument/keduvoccsvreader.cpp rename to keduvoccsvreader.cpp diff --git a/keduvocdocument/keduvoccsvreader.h b/keduvoccsvreader.h similarity index 100% rename from keduvocdocument/keduvoccsvreader.h rename to keduvoccsvreader.h diff --git a/keduvocdocument/keduvoccsvwriter.cpp b/keduvoccsvwriter.cpp similarity index 100% rename from keduvocdocument/keduvoccsvwriter.cpp rename to keduvoccsvwriter.cpp diff --git a/keduvocdocument/keduvoccsvwriter.h b/keduvoccsvwriter.h similarity index 100% rename from keduvocdocument/keduvoccsvwriter.h rename to keduvoccsvwriter.h diff --git a/keduvocdocument/keduvocdeclension.cpp b/keduvocdeclension.cpp similarity index 100% rename from keduvocdocument/keduvocdeclension.cpp rename to keduvocdeclension.cpp diff --git a/keduvocdocument/keduvocdeclension.h b/keduvocdeclension.h similarity index 100% rename from keduvocdocument/keduvocdeclension.h rename to keduvocdeclension.h diff --git a/keduvocdocument/keduvocdocument.cpp b/keduvocdocument.cpp similarity index 100% rename from keduvocdocument/keduvocdocument.cpp rename to keduvocdocument.cpp diff --git a/keduvocdocument/keduvocdocument.h b/keduvocdocument.h similarity index 100% rename from keduvocdocument/keduvocdocument.h rename to keduvocdocument.h diff --git a/keduvocdocument/CMakeLists.txt b/keduvocdocument/CMakeLists.txt deleted file mode 100644 index 97ead8c..0000000 --- a/keduvocdocument/CMakeLists.txt +++ /dev/null @@ -1,74 +0,0 @@ -add_subdirectory(tests) - -########### next target ############### - -set(keduvocdocument_LIB_SRCS - keduvocdocument.cpp - keduvocidentifier.cpp - keduvocexpression.cpp - keduvoctranslation.cpp - keduvoccontainer.cpp - keduvoclesson.cpp - keduvocleitnerbox.cpp - keduvoctext.cpp - keduvocarticle.cpp - keduvocconjugation.cpp - keduvocpersonalpronoun.cpp - keduvocdeclension.cpp - keduvocwordtype.cpp - keduvockvtmlcompability.cpp - keduvockvtmlreader.cpp - keduvockvtml2reader.cpp - keduvockvtml2writer.cpp - keduvoccsvreader.cpp - keduvoccsvwriter.cpp - keduvocpaukerreader.cpp - keduvocvokabelnreader.cpp - keduvocwqlreader.cpp - keduvocxdxfreader.cpp - sharedkvtmlfiles.cpp -) - -kde4_add_library(keduvocdocument SHARED ${keduvocdocument_LIB_SRCS}) - -target_link_libraries(keduvocdocument ${KDE4_KIO_LIBS} ${QT_QTXML_LIBRARY}) - -set_target_properties(keduvocdocument - PROPERTIES VERSION ${GENERIC_LIB_VERSION} - SOVERSION ${GENERIC_LIB_SOVERSION} -) - -# if we want to set our own version instead of following kde generic -#set(LIB_KEDUVOCDOCUMENT_VERSION "5.0.0") -#set(LIB_KEDUVOCDOCUMENT_SOVERSION "5") -#set_target_properties(keduvocdocument -# PROPERTIES VERSION ${LIB_KEDUVOCDOCUMENT_VERSION} -# SOVERSION ${LIB_KEDUVOCDOCUMENT_SOVERSION} -#) - -install(TARGETS keduvocdocument EXPORT LibKdeEduTargets ${INSTALL_TARGETS_DEFAULT_ARGS}) - - -########### install files ############### - -install(FILES - libkeduvocdocument_export.h - keduvocdocument.h - keduvocidentifier.h - keduvocexpression.h - keduvoctext.h - keduvocarticle.h - keduvocconjugation.h - keduvoclesson.h - keduvocleitnerbox.h - keduvoccontainer.h - keduvocwordflags.h - keduvocmultiplechoice.h - keduvoctranslation.h - keduvocwordtype.h - keduvocpersonalpronoun.h - sharedkvtmlfiles.h - keduvocdeclension.h - keduvockvtml2writer.h - DESTINATION ${INCLUDE_INSTALL_DIR}/libkdeedu COMPONENT Devel -) diff --git a/keduvocdocument/Mainpage.dox b/keduvocdocument/Mainpage.dox deleted file mode 100644 index 0e29282..0000000 --- a/keduvocdocument/Mainpage.dox +++ /dev/null @@ -1,36 +0,0 @@ -/** @mainpage KEduVocDocument - -KEduVocDocument is a library for reading and writing vocabulary files used by Parley, Kanagram, KHangMan and KWordQuiz. - -At this date no binary compability is guaranteed. Please update this lib when updating the applications mentioned above. - -Important classes are: - - KEduVocExpression to hold an abstract entry. It contains translations in KEduVocTranslation. - - Lessons are organized by KEduVocLesson. - -Grammatical terms are part of KEduVocTranslation and also contained in: - - KEduVocArticle (articles of a language) - - KEduVocConjugation (conjugations and personal pronouns) - - KEduVocWordType (word type management) - -Grammar is accessed by using an instance of KEduVocDocument. - -Grades can be stored using the KEduVocGrade class (part of a KEduVocTranslation). - -KEduVocDocument supports reading and writing of different file formats. KVTML (version 2) is the default. - -Readers: - - KEduVocKvtml2Reader the current default file format since KDE4 - - KEduVocKvtmlReader for compability (pre KDE4) - - KEduVocCsvReader Comma separated values (text files) - - KEduVocPaukerReader Pauker file format - - KEduVocVokabelnReader Vokabeln file format - - KEduVocXdxfReader XDXF file format - -Writers: - - KEduVocKvtml2Writer - - KEduVocKvtmlWriter - - KEduVocCsvWriter - - -*/ diff --git a/keduvocdocument/TODO b/keduvocdocument/TODO deleted file mode 100644 index c369fd4..0000000 --- a/keduvocdocument/TODO +++ /dev/null @@ -1,10 +0,0 @@ -Things to improve in KEduVocDocument ------------------------------------- - - * Check if all copy constructors are ok or disable copies - -Binary incompatible: - * Tenses should be per language as different languages have a different set of tenses - - - diff --git a/keduvocdocument/docs/basic_vocabulary_en2de.kvtml b/keduvocdocument/docs/basic_vocabulary_en2de.kvtml deleted file mode 100644 index 9567876..0000000 --- a/keduvocdocument/docs/basic_vocabulary_en2de.kvtml +++ /dev/null @@ -1,1352 +0,0 @@ - - - - - - Parley - basic vocabulary German-English - Markus Büchele, Norbert Behrendt - GPL - - - - English - en - - - - - - German - de - - - - - - - - Noun - noun - - Male - male - - - Female - female - - - Neutral - neutral - - - - Verb - verb - - Regular - - - Irregular - - - - Adjective - adjective - - - Adverb - adverb - - - Question - - - Name - - - Article - - Definite - - - Indefinite - - - - Pronoun - - Possessive - - - Personal - - - - Phrase - - - Numeral - - Ordinal - - - Cardinal - - - - Conjunction - - - Preposition - - - - - Past Progressive - Simple Past - will future - going to future - Present Perfect - Present Progressive - Plusquamperfekt - Simple Present - - - - false - - also - - - auch, außerdem - - - - false - - although - - - obwohl - - - - false - - and - - - und - - - - false - - because - - - weil - - - - false - - besides - - - außerdem - - - - false - - but - - - aber, sondern - - - - false - - despite - - - trotz - - - - false - - either ... or - - - entweder ... oder - - - - false - - however - - - jedoch, aber - - - - false - - if - - - wenn, ob - - - - false - - instead of - - - anstatt - - - - false - - like - - - wie - - - - false - - neither ... nor - - - weder ... noch - - - - false - - not yet - - - noch nicht - - - - false - - or - - - oder - - - - false - - such as - - - wie zum Beispiel - - - - false - - than - - - als - - - - false - - therefore - - - deshalb, daher - - - - false - - though - - - obwohl, trotzdem - - - - false - - unless - - - wenn nicht, es sei denn - - - - false - - until - - - bis - - - - false - - when - - - wann, als - - - - false - - whether - - - ob - - - - false - - black - - Adjective - - - black - blacker - the blackest - - - - schwarz - - Adjective - - - - - false - - blue - - Adjective - - - blue - bluer - the bluest - - - - blau - - Adjective - - - - - false - - brown - - Adjective - - - brown - browner - the brownest - - - - braun - - Adjective - - - - - false - - eight - - - acht - - - - false - - five - - - fünf - - - - false - - four - - - vier - - - - false - - green - - - grün - - - - false - - grey - - - grau - - - - false - - hundred - - - hundert - - - - false - - million - - - die Million - - - - false - - nine - - - neun - - - - false - - one - - - eins - - - - false - - red - - Adjective - - - red - redder - the reddest - - - - rot - - Adjective - - - - - false - - seven - - - sieben - - - - false - - six - - - sechs - - - - false - - ten - - - zehn - - - - false - - thousand - - - tausend - - - - false - - three - - - drei - - - - false - - two - - - zwei - - - - false - - white - - Adjective - - - white - whiter - the whitest - - - - weiß - - Adjective - - - - - false - - yellow - - Adjective - - - yellow - yellower - the yellowest - - - - gelb - - Adjective - - - - - false - - about - - - über, etwa - - - - false - - above - - - über, oben - - - - false - - according to - - - laut, nach - - - - false - - across - - - über, hinüber, durch - - - - false - - after - - - nach, nachdem - - - - false - - against - - - gegen - - - - false - - ago - - - vor - - - - false - - among - - - unter - - - - false - - at - - - an, bei - - - - false - - because of - - - wegen - - - - false - - behind - - - hinter, hinten - - - - false - - between - - - zwischen - - - - false - - by - - - bei, von, durch - - - - false - - close to - - - in der Nähe, nahe - - - - false - - due to - - - wegen - - - - false - - during - - - während - - - - false - - except - - - außer - - - - false - - for - - - für, seit - - - - false - - from - - - von - - - - false - - in - - - in - - - - false - - in front of - - - vor - - - - false - - into - - - in ... hinein - - - - false - - near - - - nahe - - - - false - - next to - - - neben - - - - false - - of - - - von - - - - false - - on - - - an, auf - - - - false - - on top of - - - oben auf - - - - false - - since - - - seit - - - - false - - through - - - durch - - - - false - - to - - - zu, nach - - - - false - - toward - - - auf ... zu - - - - false - - under - - - unter - - - - false - - up - - - oben, hinauf - - - - false - - up to - - - bis - - - - false - - with - - - mit - - - - false - - without - - - ohne - - - - false - - bed - - - das Bett - - - - false - - bread - - - das Brot - - - - false - - no - - - nein - - - - false - - please - - - bitte - - - - false - - sorry - - - Entschuldigung - - - - false - - thank you - - - danke - - - - false - - to be - - - sein - - - - false - - to do - - - tun, machen - - - - false - - to have - - - haben - - - - false - - water - - - das Wasser - - - - false - - yes - - - ja - - - - false - - autumn - - - der Herbst - - - - false - - century - - - das Jahrhundert - - - - false - - day - - - der Tag - - - - false - - east - - - der Osten, östlich - - - - false - - hour - - - die Stunde - - - - false - - inch - - - der Zoll (Längenmaß) - - - - false - - kilometre - - - der Kilometer - - - - false - - left - - - links - - - - false - - metre - - - der Meter - - - - false - - mile - - - die Meile - - - - false - - minute - - - die Minute - - - - false - - month - - - der Monat - - - - false - - north - - - der Norden, nördlich - - - - false - - right - - - das Recht, rechts, richtig - - - - false - - season - - - die Jahreszeit, die Saison - - - - false - - south - - - der Süden, südlich - - - - false - - spring - - - der Frühling - - - - false - - square - - - das Quadrat, der Platz - - - - false - - summer - - - der Sommer - - - - false - - triangle - - - das Dreieck - - - - false - - week - - - die Woche - - - - false - - west - - - der Westen, westlich - - - - false - - winter - - - der Winter - - - - false - - year - - - das Jahr - - - - - - time and space - 91 - 92 - 93 - 94 - 95 - 96 - 97 - 98 - 99 - 100 - 101 - 102 - 103 - 104 - 105 - 106 - 107 - 108 - 109 - 110 - 111 - 112 - 113 - 114 - - - survival training - 80 - 81 - 82 - 83 - 84 - 85 - 86 - 87 - 88 - 89 - 90 - - - numbers and colours - 23 - 24 - 25 - 26 - 27 - 28 - 29 - 30 - 31 - 32 - 33 - 34 - 35 - 36 - 37 - 38 - 39 - 40 - 41 - 42 - 43 - - - conjunctions - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 - 20 - 21 - 22 - - - prepositions - true - 44 - 45 - 46 - 47 - 48 - 49 - 50 - 51 - 52 - 53 - 54 - 55 - 56 - 57 - 58 - 59 - 60 - 61 - 62 - 63 - 64 - 65 - 66 - 67 - 68 - 69 - 70 - 71 - 72 - 73 - 74 - 75 - 76 - 77 - 78 - 79 - - - diff --git a/keduvocdocument/docs/elek.lex b/keduvocdocument/docs/elek.lex deleted file mode 100644 index 46b23aa..0000000 --- a/keduvocdocument/docs/elek.lex +++ /dev/null @@ -1,191 +0,0 @@ -Vocabulary Trainer V5.0 -LEX|Deutsch|Englisch| 259 260 1 1 1 0 0 268 0 1 1 1 1 145 6 23 1999 255 1 1 653 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 1 1 0 0 | --11 700 -System -Energie- und Automatisierungstechnik. V. Manuela Lutz. Danke. -1 1 der die das|he she it| -1 1 eine einer eines einen einem|has have had is be| -1 1 er sie es|his him her its| -1 1 wir ihr euch|in to into on at too| -1 1 in an auf bei|the a an| -1 1 zu um zur zum|out by with of off| -1 1 ist sind seid|something someone some| -1 1 dies dieser dieses|under below| -1 1 || -1 1 || -der die das ein eine einer eines einen einem|the a an| -| -| -| -| -| -| -| -| -| -| -| -| -| -| -| -| -| -| -| -| -Sachgebiete| -| -| -| -| -| -| -| -| -32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 -1 0 255 255 255 255 255 255 0 0 1 Abbildung||||mapping|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abblendkappe||||anti-dazzle device|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abdeckblech||||cover sheet|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abfallstoffe|products|||waste|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abfalltechnik||||waste engineering|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abfangblech||||locating plate|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abfrageprotokoll||||inquiry log|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abgabeleistung||||power output|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abgang||||outgoing circuit|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abgangsbaugruppe||||outgoing unit|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abgas||||exhaust gas|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abgasdruck||||exhaust gas pressure|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abgasemission||||exhaust gas emission|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abgasgegendruck||||exhaust gas back pressure|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abgaskatalysator||||exhaust gas catalytic converter|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abgaskomponenten||||exhaust gas components|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abgasmeßgerät||||exhaust gas measuring equipment|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abgasrückführung||||exhaust gas recycling|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 abgedeckter Druckknopf||||covered pushbutton|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 abgedichtete Kunststoffleuchte||||sealed plastic luminaire|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 abgehende Leitung||||outgoing feeder|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 abgeschirmte Drucktaste||||shrouded pushbutton|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 abgesichert||||fused|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 abgetastet||||sampled|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 abgeteilt||||segregated|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abgleich||||adjustment|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 abisolieren||||to strip|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 abklemmen||||disconnect|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Ablauf||||sequence|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Ablaufplan||||flow diagram|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Ableiter||||surge arrester|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Ableitung||||terminal lead|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Ablenkung||||deflection|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abluft||||exhaust air|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abschaltautomatic bei Spannungsabfall||||automatic loss-of-voltage tripping equipment|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abschirmung||||screening|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Absolutwert||||absolute value|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abstand||||distance|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abstraktionsebene||||level of abstraction|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abteilung||||department|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abwasseraufbereitung||||effluent treatment|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abwasserbehandlung||||waste water treatment|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abwassertechnik||||sewage technology|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Abweichung||||deviation|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 abzählbar||||countable|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Achse||||axis|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 adaptiver||||adaptive|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Aggregate||||aggregates|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Aktoren|Aktuatoren|||actuators|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Akustik||||acoustics|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Alterungsbeständig||||durability|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Altlasten||||polluted areas|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Analogeingabe||||analog input|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Arbeitswissenschaften||||ergonomics|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Aufbau- und Verbindungstechnik||||packaging of integrated circuits|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Aufbereitung||||preparation|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Auflösung||||resolution|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Aufspannplatte||||mounting plate|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Auftragsabwicklung||||order transaction|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Auftragsbearbeitung||||order processing|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Ausführung||||conducting|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Beleuchtungstechnik||||illumination engineering|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Bildcodierung||||image coding|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Bilderkennungssystem||||image recognition system|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Bildkommunikation||||image communication|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Bildmenge||||image set|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Bildschirmanzeige||||screen diplay|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Bildverarbeitung||||image processing|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Borhmaschine||||drilling machine|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -0 47 255 255 255 255 255 255 0 0 1 Datenübertragung||||data transmission|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Druckluft||||compressed air|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Druckluftanlage||||compressed-air system|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Drucktaster||||pushbutton|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Einbautechnik|Einbausystem|||packaging system|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Einheit||||unit|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 elektrisch||||electrical|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Elektrizitätszähler||||electricity meter|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 elektromechanische Bauelemente||||electromechanical components|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Elektromotor||||electric motor|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 elektronische Steuerung||||electronic control|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Endschalter||||limit switch|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Fernwirktechnik||||telecontrol|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Freiluftanlage||||outdoor installation|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Gebäudeinstallation||||wiring practice|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 gedruckte Schaltung||||printed circuit|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Gleichrichter||||rectifier|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Grenzwert||||limiting value|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Halbleiter||||semiconductor|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Halbleiterbauelement||||semiconductor component|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Hebezeug||||hoisting gear|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Hilfsstromschalter||||control switch|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Innenraumanlage||||indoor installation|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Installationskanal||||trunking and duct system|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Installationsmaterial||||wiring accessoires|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Installationstechnik||||electrical installation|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Isolation|Isolierung|||insulation|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Klimatechnik||||air conditioning|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Kommutator||||commutator|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Kraftwerk||||power station|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Kupplung||||coupling|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Lager||||bearing|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Leistungselektronik||||power electronic|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Leistungsschalter|Leistungsschutzschalter|||circuit-breaker|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Leittechnik||||control engineering|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Lichttechnik||||lightning engineering|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Linearmotor||||linear motor|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 magnetisch||||magnetic|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Magnetschwebebahn||||magnetic levitation system|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Maschine||||machine|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 mechanisch||||mechanical|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Meßgerät||||measuring instrument|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Näherungsschalter||||proximity switch|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Oszilloskop||||oscilloscope|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Positionsschalter||||position switch|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 programmierbares Meßgerät||||programmable measuring apparatus|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 programmierbares Steuergerät||||programmable controller|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Prozeßleittechnik||||process control technology|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Prüfung||||testing|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Regelung||||automatic control|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Relais||||relay|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 rotierende Maschine||||rotating machine|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Rundsteueranlage||||ripple control system|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Röntgenanalyse||||x-ray analysis|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Rückkopplung||||feedback|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Sammelschiene||||busbar|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Schallmessung||||sound measurement|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Schaltanlage|Schaltgerät|||switchgear|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Schaltschrank||||switchgear|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Schalttafel||||switchboard|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Schieneninstallationsrohr||||buselectric wiring conduit|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Sicherung|Schmelzsicherung|||fuse|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Steckvorrichtung||||plug-and-socket device|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Steuergerät||||controller|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Stromrichter||||static converter|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Supraleiter||||superconductor|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Supraleitung||||superconductivity|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Thyristor||||thyristor|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Vakuumschalter|circuit-breaker|||vacuum swith|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Wasserkraftgenerator||||water-wheel generator|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Wasserkraftwerk||||hydroelectric power station|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Werkzeug||||tool|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Werkzeugmaschine||||machine tool|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 0 255 255 255 255 255 255 0 0 1 Wert||||value|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Wicklung||||winding|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -1 47 255 255 255 255 255 255 0 0 1 Zugangskontrollsystem||||access control system|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| diff --git a/keduvocdocument/docs/kvtml-structure.txt b/keduvocdocument/docs/kvtml-structure.txt deleted file mode 100644 index 3a28920..0000000 --- a/keduvocdocument/docs/kvtml-structure.txt +++ /dev/null @@ -1,258 +0,0 @@ - - - - - generator="kvoctrain v0.7.0pre3" - cols="3" - lines="3" - title="Beispieldatei: Deutsch - Englisch/Französisch" - author="Ewald Arnold" - license="OpenContent" - remark="Beispieldatei mit allen Eigenschaften"> - - - Lektion eins - Lektion zwei - Lektion drei - Lektion vier - - -
- - die - eine - der - einer - das - ein - - - fd en - fi en - md en - mi en - nd en - ni en - - - la - une - le - un - -
- - - - ich - du - sie - er - es - wir - ihr - sie - sie - sie - - - I - you - he - she - it - we - you - they - - - je - tu - elle - il - nous - vous - elles - ils - - - - - - - - - Mein Typ 1 - Mein Typ 2 - Mein Typ 3 - - - - Benutzer-Konjugation 1 - - - - Benutzersprachebene 1 - - - - s="1" - t="v"> - - - l="de" - charset="ISO 8859-1" - y="laufen"> - - - - > - - gehe - gehst - geht - gehen - gehen - gehen - schwammschwammst - - gehen - - - - - width="208" - l="en" - g="1;2" - c="2;0" - b="1;0" - d="12312;123123" - ff="falscher Freund" - tf="Freund falscher"> - - - went - have gone - - go - - - l="fr" - charset="Unicode" - >aller - - - s="1" - t="aj"> - - - a="schlecht"> - - - gut - besser - am besten - - gut - - goodbetterbest - - good - - bonmeilleurle meilleur - - bon - - - u="anat" - >Knöchel - - - knucklescheville - - - - - \ No newline at end of file diff --git a/keduvocdocument/docs/kvtml-version1.dtd b/keduvocdocument/docs/kvtml-version1.dtd deleted file mode 100644 index 9a23f34..0000000 --- a/keduvocdocument/docs/kvtml-version1.dtd +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/keduvocdocument/docs/kvtml_html_stylesheet.xsl b/keduvocdocument/docs/kvtml_html_stylesheet.xsl deleted file mode 100644 index 8cd2037..0000000 --- a/keduvocdocument/docs/kvtml_html_stylesheet.xsl +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - <xsl:value-of select="kvtml/information/title"/> - - - - - - - -

- -
- - - - - -
-
- - -
- - -

Lesson:

- - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - -
-
-
-
- - - - - - diff --git a/keduvocdocument/docs/lex-aufbau1.txt b/keduvocdocument/docs/lex-aufbau1.txt deleted file mode 100644 index cbdcf36..0000000 --- a/keduvocdocument/docs/lex-aufbau1.txt +++ /dev/null @@ -1,58 +0,0 @@ -From: Michael Werner - -Hallo Ewald, - -es freut mich, daß Dir mein VT zusagt. Wobei ich mir nicht ganz im Klaren -bin, ob es eher mein Programm oder die beigefügten Lexika sind. ;-) - -Du hast völlig Recht, daß ich der Opensource-Bewegung positiv gegenüber -stehe. - -Viele Grüße -Michael - - -----------kleine Format-Beschreibung (bitte mit Font Courier -"nichtproportional" ansehen)---------- - -Lexikon-Format-Beschreibung: - -Format eines minimalen Eintrags (mit zwei Dummy-Einträgen x und y) - 0 255 255 255 255 255 255 0 0 1 -x||||y|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| - | | | | | | - | |___________________| | | Lektionszugehörigkeit (1-9) - | | | | - | | beide Sprachseiten sind ungelernt - | | - | diese Nummern bitte unverändert übernehmen - | -Attribut: 0 für --NONE-- - -Format eines maximalen Eintrags - 0 255 255 255 255 255 255 0 0 1 -MAIN#0|SYNONYM#1|SYNONYM#2|SYNONYM#3|MAIN#1|SYNONYM#1|SYNONYM#2|SYNONYM#3|| -||||||||||||||||||||||||||||||||||||||||||||||||||||||| - - -Eine Konvertierung (zur Erstellung einer LEX-Datei) könnte nun -folgendermaßen aussehen: - -erster Schritt: -Formatkopf einer bestehenden Lexikon-Datei nehmen und vor die erste -Vokabelzeile kopieren. - - -zweiter Schritt: -0 255 255 255 255 255 255 0 0 1 an den Anfang jeder Vokabelzeile -(entspricht einem Vokabeleintrag) schreiben. Wortbestandteile durch | -trennen. Minimal muß ein MAIN#0 und ein MAIN#1 existieren und mindestens 1 -Vokabelzeile. - - -dritter Schritt: -neues Lexikon laden. Dadurch werden beim nächsten Abspeichern die Anzahl -der Vokabeleinträge und das Datum korrekt gesetzt. Die Vokabelliste wird -hierbei auch sortiert. - - diff --git a/keduvocdocument/docs/lex-aufbau2.txt b/keduvocdocument/docs/lex-aufbau2.txt deleted file mode 100644 index ea7f358..0000000 --- a/keduvocdocument/docs/lex-aufbau2.txt +++ /dev/null @@ -1,127 +0,0 @@ -# Format eines minimalen Eintrags (mit zwei Dummy-Einträgen x und y) -# 0 255 255 255 255 255 255 0 0 1 x||||y|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -# | | | | | | -# | |___________________| | | Lektionszugehörigkeit (1-9) - -? maximal 9 Lektionen? "Namen" der -Lektionen? -Das Lektionenmaximum ist auf 9 festgelegt. Die Lektionsbezeichnungen werden -weiter oben abgespeichert! Ausprobieren, dann siehst Du wo. - -# | | | | -# | | beide Sprachseiten sind ungelernt - -? 1..x = Note? -0..2 (0=ungelernt, 1=unsicher, 2=gelernt) - -# | | -# | diese Nummern bitte unverändert übernehmen - -? was bedeuten sie? - -# | -# Attribut: 0 für --NONE-- - -? weitere Attribute? -Alle aus der Eingabemaske "Edit Entry" ersichtlichen + 20 extra zu -definierenden Attributen - -# Format eines maximalen Eintrags -# 0 255 255 255 255 255 255 0 0 1 -MAIN#0|SYNONYM#1|SYNONYM#2|SYNONYM#3|MAIN#1|SYNONYM#1|SYNONYM#2|SYNONYM#3||||||||||||||||||||||||||||||||||||||||||||||||||||||||| - -? Das Lexikon beinhaltet immer 2 Sprachen, MAIN ist der "normale" Ausdruck -und -? es folgen bis zu 3 Synonyme jeweils für beide Sprachen. Was folgt -hierauf? -Alle Konjugationsformen die evtl. für das Konjugationstraining eingegeben -wurden. (siehe ITALIAN.LEX) -? Ich speichere jeweils das letzte Abfragedatum, die Anzahl der Abfragen -? und Fehler sowie eine Art Note. Gibt es dies bei dir ebenfalls? -Nein, wozu? Meiner Meinung nach, ist der Anwender am Lernen interessiert -und nicht an einer Statistikreiterei. - -? Hier der Anfang von elek.lex mit meinen Vermutungen: - -# Vocabulary Trainer V5.0 - -? 1. Zeile: Version - -# LEX|Deutsch|Englisch| 259 260 1 1 1 0 0 268 0 1 1 1 1 145 6 23 1999 255 1 1 653 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 1 1 0 0 | - -? 2. Zeile: Kennung, Sprachen 1+2 und viele Daten (aber welche ? ;-) -Programminterne: Abspeicherung der Trainingsoptionen und viele andere Infos -die meiner Meinung nach Lexikaspezifisch abgespeichert werden sollen. - -# -11 700 -verwendeter Zeichensatz -? 3. Zeile: nochmal 2 Daten -# System -? 4. Zeile: Beschreibung ? -Nein! Nochmals verwendeter Zeichensatz - -# Energie- und Automatisierungstechnik. V. Manuela Lutz. Danke. - -? 5. Zeile: nochmal Beschreibung/Herkunft ? -Eigentliche Lexikonbeschreibung - -? danach ein Stück Wörterbuch, allerdings ein anderer Aufbau als oben --> siehe Trainingsoptionen -# 1 1 der die das|he she it| -# 1 1 eine einer eines einen einem|has have had is be| -# 1 1 er sie es|his him her its| -# 1 1 wir ihr euch|in to into on at too| -# 1 1 in an auf bei|the a an| -# 1 1 zu um zur zum|out by with of off| -# 1 1 ist sind seid|something someone some| -# 1 1 dies dieser dieses|under below| -# 1 1 || -# 1 1 || - -? Zeile ohne Zahlen? --> siehe ebenfalls Trainingsoptionen -# der die das ein eine einer eines einen einem|the a an| - -? viele Leerzeilen ? --> eigene selbst zu definierende Attribute -# | -# | -# | -# | -# | -# | -# | -# | -# | -# | -# | -# | -# | -# | -# | -# | -# | -# | -# | -# | -# Sachgebiete| -# | -# | -# | -# | -# | -# | -# | -# | - -# 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 -? ab hier scheint das Lexikon zu starten, aber was bedeuten die 32 32 ... -Funktionstastenbelegungen - -# 1 0 255 255 255 255 255 255 0 0 1 Abbildung||||mapping||||||||||||||||||||||||||||||||||||||||||||||||||||||| -||||| -# 1 0 255 255 255 255 255 255 0 0 1 Abblendkappe||||anti-dazzle device|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| - -Mein Tip für Dich: Verwende das Lexikon ITALIAN.LEX von mir. Dort findest -Du die meisten Funktionen verwendet und vielleicht wird für Dich vieles -klarer, wenn Du Dich mehr mit der VT-Funktionalität auseinandersetzt. diff --git a/keduvocdocument/kvtml_empty_sample.kvtml b/keduvocdocument/kvtml_empty_sample.kvtml deleted file mode 100644 index 2267d7c..0000000 --- a/keduvocdocument/kvtml_empty_sample.kvtml +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - - - - - language - en - - - 250 - -
- - der - die - das - - - ein - eine - ein - -
- - - ich - du - - er - sie - es - - - - wir - ihr - - sie - - - -
-
- - - - grammar type a - grammer type b - - - Special tense - - - - slang usage - professional usage - - - - - true to deactivate an entry (won't be queried) - true - 25 - - Kniebeugen - - - - - - - - - - - 1 - regular - - ich - du - - er - sie - es - - - - wir - ihr - - sie - - - - - gut - besser - am besten - - - - - - - - - - 1 - 1 - 1 - 949757271 - - - - genuflect - - 0.8 - 6 - 1 - 949757271 - - - - - - - Lesson with grades example - true - true - 0 - - -
- diff --git a/keduvocdocument/tests/CMakeLists.txt b/keduvocdocument/tests/CMakeLists.txt deleted file mode 100644 index f05b787..0000000 --- a/keduvocdocument/tests/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} ) - - -kde4_add_unit_test(keduvocdocumentvalidatortest keduvocdocumentvalidatortest.cpp) -target_link_libraries(keduvocdocumentvalidatortest keduvocdocument - ${KDE4_KDECORE_LIBS} ${QT_QTGUI_LIBRARY} ${QT_QTTEST_LIBRARY} ${QT_QTXML_LIBRARY}) - - -# CONVERTER: - - -include_directories( .. ) - - -########### next target ############### - -set(converter_SRCS - converter.cpp ) - - -kde4_add_executable(converter ${converter_SRCS}) - -target_link_libraries(converter keduvocdocument ${KDE4_KDECORE_LIBS}) - - - - - diff --git a/keduvocdocument/tests/converter.cpp b/keduvocdocument/tests/converter.cpp deleted file mode 100644 index d7730fd..0000000 --- a/keduvocdocument/tests/converter.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2007 by Jeremy Whiting * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - ***************************************************************************/ - -/** @file - * \brief kvtml document reader/writer - * partly to test the document class, partly to convert - * old kvtml files to the new format - * @author Jeremy Whiting - */ - -#include "keduvocdocument.h" - -#include - -#include -#include -#include -#include -#include - -int main( int argc, char ** argv ) -{ - KAboutData about( "kvtml-converter", 0, ki18n( "Kvtml-Converter" ), "0.1", ki18n( "kvtml file converter" ), KAboutData::License_GPL, ki18n( "© 2007 Jeremy Whiting" ) ); - KCmdLineOptions options; - options.add( "f ", ki18n("file format to write out (kvtml1, kvtml2, or csv)")); - options.add( "+infile", ki18n( "file to read in" ) ); - options.add( "+outfile", ki18n( "file to write to" ) ); - - KCmdLineArgs::init( argc, argv, &about ); - KCmdLineArgs::addCmdLineOptions( options ); - QCoreApplication app( KCmdLineArgs::qtArgc(), KCmdLineArgs::qtArgv() ); - - KCmdLineArgs * arguments = KCmdLineArgs::parsedArgs(); - if ( arguments != NULL && arguments->count() > 0 ) { - KUrl infile( arguments->url( 0 ) ); - if ( arguments->count() > 1 ) { - KUrl outfile( arguments->url( 1 ) ); - - KEduVocDocument document; - kDebug() << "Reading " << infile; - document.open( infile ); - kDebug() << "Writing to " << outfile; - if (arguments->getOption("f") == "kvtml1") - { - document.saveAs( outfile, KEduVocDocument::Kvtml1, "converter" ); - } - else if (arguments->getOption("f") == "csv") - { - document.saveAs( outfile, KEduVocDocument::Csv, "converter" ); - } - else - { - document.saveAs( outfile, KEduVocDocument::Kvtml, "converter" ); - } - } - } - else - { - arguments->usage(); - } - - arguments->clear(); - - return 0; -} diff --git a/keduvocdocument/tests/keduvocdocumentvalidatortest.cpp b/keduvocdocument/tests/keduvocdocumentvalidatortest.cpp deleted file mode 100644 index 834564c..0000000 --- a/keduvocdocument/tests/keduvocdocumentvalidatortest.cpp +++ /dev/null @@ -1,253 +0,0 @@ -/* - Copyright 2007-2008 Frederik Gladhorn - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 - USA -*/ - -#include "keduvocdocument.h" -#include "keduvoclesson.h" -#include "keduvocexpression.h" -#include "keduvoctranslation.h" -#include "keduvocconjugation.h" -#include "keduvocdeclension.h" -#include "keduvocwordtype.h" - - -#include - -#include - -#include -#include -#include - -class KEduVocDocumentValidatorTest - : public QObject -{ - Q_OBJECT - -private slots: - void testDocumentAboutInfo(); - void testLessons(); - void testWordTypes(); - void testTranslations(); - void testConjugations(); - void testDeclensions(); - void testAddRemoveLanguage(); - -}; - -void KEduVocDocumentValidatorTest::testDocumentAboutInfo() -{ - KTemporaryFile temp; - temp.setSuffix(".kvtml"); - temp.open(); - KUrl fileName = KUrl(temp.fileName()); - temp.close(); - - const QString generator = QString::fromLatin1( "Validator Unit Tests" ); - const QString author = QString::fromLatin1( "Validator Test" ); - const QString license = QString::fromLatin1( "test license" ); - const QString comment = QString::fromLatin1( "comment" ); - const QString category = QString::fromLatin1( "test document" ); - const QString title = QString::fromLatin1( "Validator Test Title" ); - - KEduVocDocument doc; - doc.setAuthor( author ); - doc.setLicense( license ); - doc.setDocumentComment( comment ); - doc.setCategory( category ); - doc.setTitle( title ); - - doc.saveAs(fileName, KEduVocDocument::Kvtml, generator); - - KEduVocDocument docRead; - docRead.open(fileName); - - QCOMPARE( docRead.generator(), generator ); - QCOMPARE( docRead.author(), author ); - QCOMPARE( docRead.license(), license ); - QCOMPARE( docRead.documentComment(), comment ); - QCOMPARE( docRead.category(), category ); - QCOMPARE( docRead.title(), title ); -} - -void KEduVocDocumentValidatorTest::testLessons() -{ - QString lesson1 = QString::fromLatin1( "Lesson 1" ); - QString lesson1child1 = QString::fromLatin1( "Lesson 1.1" ); - QString lesson1child2 = QString::fromLatin1( "Lesson 1.2" ); - QString lesson2 = QString::fromLatin1( "Lesson 2" ); - QString lesson3 = QString::fromLatin1( "Lesson 3" ); - - KEduVocDocument doc; - doc.lesson()->appendChildContainer(new KEduVocLesson(lesson1, doc.lesson())); - QCOMPARE(doc.lesson()->childContainerCount(), 1); - QCOMPARE(doc.lesson()->childContainer(0)->containerType(), KEduVocContainer::Lesson); - QCOMPARE(doc.lesson()->childContainer(0)->parent(), doc.lesson()); - QCOMPARE(doc.lesson()->childContainer(0)->name(), lesson1); - - doc.lesson()->appendChildContainer(new KEduVocLesson(lesson2, doc.lesson())); - doc.lesson()->appendChildContainer(new KEduVocLesson(lesson3, doc.lesson())); - QCOMPARE(doc.lesson()->childContainerCount(), 3); - - doc.lesson()->childContainer(0)->appendChildContainer(new KEduVocLesson(lesson1child1, doc.lesson()->childContainer(0))); - doc.lesson()->childContainer(0)->appendChildContainer(new KEduVocLesson(lesson1child2, doc.lesson()->childContainer(0))); - QCOMPARE(doc.lesson()->childContainer(0)->childContainerCount(), 2); - - -} - - -void KEduVocDocumentValidatorTest::testWordTypes() -{ - KEduVocDocument doc; - // create doc - has no word types yet - QCOMPARE(doc.wordTypeContainer()->childContainerCount(), 0); - - KEduVocWordType *noun; - KEduVocWordType *nounMale; - KEduVocWordType *nounFemale; - KEduVocWordType *verb; - - noun = new KEduVocWordType("Noun", doc.wordTypeContainer()); - doc.wordTypeContainer()->appendChildContainer(noun); - QCOMPARE(doc.wordTypeContainer()->childContainerCount(), 1); - nounMale = new KEduVocWordType("Male", noun); - noun->appendChildContainer(nounMale); - nounFemale = new KEduVocWordType("Female", noun); - noun->appendChildContainer(nounFemale); - verb = new KEduVocWordType("Verb", doc.wordTypeContainer()); - doc.wordTypeContainer()->appendChildContainer(verb); - QCOMPARE(doc.wordTypeContainer()->childContainerCount(), 2); - QCOMPARE(doc.wordTypeContainer()->childContainer(0)->childContainerCount(), 2); - - // create some entries - for(int i = 0; i < 20; i++) { - KEduVocExpression *e = - new KEduVocExpression(QStringList() << QString("lang1 %1").arg(i) << QString("lang2 %1").arg(i)); - doc.lesson()->appendEntry(e); - e->translation(0)->setWordType(noun); - e->translation(1)->setWordType(noun); - } - QCOMPARE(doc.lesson()->entryCount(), 20); - QCOMPARE(noun->entryCount(), 20); - QCOMPARE(verb->entryCount(), 0); - doc.lesson()->entry(0)->translation(0)->setWordType(verb); - // translation 1 is still noun, so it needs to be in both now - QCOMPARE(noun->entryCount(), 20); - QCOMPARE(verb->entryCount(), 1); - doc.lesson()->entry(0)->translation(1)->setWordType(verb); - QCOMPARE(noun->entryCount(), 19); - QCOMPARE(verb->entryCount(), 1); - - // delete word type - doc.wordTypeContainer()->deleteChildContainer(1); - // the word type is set to 0 when removed - QVERIFY(doc.lesson()->entry(0)->translation(0)->wordType() == 0); - QVERIFY(doc.lesson()->entry(0)->translation(1)->wordType() == 0); - QCOMPARE(doc.wordTypeContainer()->childContainerCount(), 1); -} - -void KEduVocDocumentValidatorTest::testTranslations() -{ - KEduVocTranslation *trans1 = new KEduVocTranslation(0, QString("My word")); - QCOMPARE(trans1->text(), QString("My word")); - - // copy ctor - KEduVocTranslation *trans2 = new KEduVocTranslation(*trans1); - QCOMPARE(trans2->text(), QString("My word")); - - // operator = - KEduVocTranslation *trans3 = new KEduVocTranslation(0); - trans3 = new KEduVocTranslation(*trans1); - QCOMPARE(trans3->text(), QString("My word")); - - QCOMPARE((int)trans1->grade(), 0); - trans1->incGrade(); - QCOMPARE((int)trans1->grade(), 1); - QCOMPARE((int)trans3->grade(), 0); -} - -void KEduVocDocumentValidatorTest::testDeclensions() -{ - KEduVocTranslation translation(0); - QVERIFY(translation.declension() == 0); - KEduVocDeclension* declension = new KEduVocDeclension; - translation.setDeclension(declension); - QCOMPARE(translation.declension(), declension); -} - -void KEduVocDocumentValidatorTest::testConjugations() -{ - KEduVocConjugation conjugation; - conjugation.setConjugation(KEduVocText("first-singular"), KEduVocWordFlag::First | KEduVocWordFlag::Singular); - QCOMPARE(conjugation.conjugation(KEduVocWordFlag::First | KEduVocWordFlag::Singular).text(), QString("first-singular")); - - QDomDocument doc = QDomDocument("test doc"); - QDomElement root = doc.createElement( "kvtml" ); - doc.appendChild(root); - conjugation.toKVTML2(root, "tense"); - - qDebug() << root.text(); - - KEduVocConjugation *con2 = KEduVocConjugation::fromKVTML2(root); - - QCOMPARE(conjugation.conjugation(KEduVocWordFlag::First | KEduVocWordFlag::Singular).text(), con2->conjugation(KEduVocWordFlag::First | KEduVocWordFlag::Singular).text()); - delete con2; -} - -void KEduVocDocumentValidatorTest::testAddRemoveLanguage() -{ - KEduVocDocument doc; - // create some initial languages - doc.appendIdentifier(); - doc.appendIdentifier(); - doc.appendIdentifier(); - doc.appendIdentifier(); - doc.identifier(0).setName("0"); - doc.identifier(1).setName("1"); - doc.identifier(2).setName("2"); - doc.identifier(3).setName("3"); - - QCOMPARE(doc.identifierCount(), 4); - KEduVocLesson* lesson = new KEduVocLesson("lesson", doc.lesson()); - doc.lesson()->appendChildContainer(lesson); - lesson->appendEntry(new KEduVocExpression); - lesson->entry(0)->setTranslation(0, "0"); - lesson->entry(0)->setTranslation(1, "1"); - lesson->entry(0)->setTranslation(2, "2"); - lesson->entry(0)->setTranslation(3, "3"); - QCOMPARE(lesson->entry(0)->translationIndices().size(), 4); - - // throw away the second language - doc.removeIdentifier(1); - - QCOMPARE(doc.identifierCount(), 3); - QCOMPARE(doc.identifier(0).name(), QString("0")); - QCOMPARE(doc.identifier(1).name(), QString("2")); - QCOMPARE(doc.identifier(2).name(), QString("3")); - - QCOMPARE(lesson->entry(0)->translationIndices().size(), 3); - QCOMPARE(lesson->entry(0)->translation(0)->text(), QString("0")); - QCOMPARE(lesson->entry(0)->translation(1)->text(), QString("2")); - QCOMPARE(lesson->entry(0)->translation(2)->text(), QString("3")); -} - - -QTEST_KDEMAIN_CORE( KEduVocDocumentValidatorTest ) - -#include "keduvocdocumentvalidatortest.moc" diff --git a/keduvocdocument/tests/loader.cpp b/keduvocdocument/tests/loader.cpp deleted file mode 100644 index 4f18664..0000000 --- a/keduvocdocument/tests/loader.cpp +++ /dev/null @@ -1,18 +0,0 @@ -/*************************************************************************** - Copyright 2002 Ewald Arnold - Copyright 2007 Frederik Gladhorn - ***************************************************************************/ - -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -int main( void ) -{ - return 0; -} diff --git a/keduvocdocument/keduvocexpression.cpp b/keduvocexpression.cpp similarity index 100% rename from keduvocdocument/keduvocexpression.cpp rename to keduvocexpression.cpp diff --git a/keduvocdocument/keduvocexpression.h b/keduvocexpression.h similarity index 100% rename from keduvocdocument/keduvocexpression.h rename to keduvocexpression.h diff --git a/keduvocdocument/keduvocidentifier.cpp b/keduvocidentifier.cpp similarity index 100% rename from keduvocdocument/keduvocidentifier.cpp rename to keduvocidentifier.cpp diff --git a/keduvocdocument/keduvocidentifier.h b/keduvocidentifier.h similarity index 100% rename from keduvocdocument/keduvocidentifier.h rename to keduvocidentifier.h diff --git a/keduvocdocument/keduvockvtml2reader.cpp b/keduvockvtml2reader.cpp similarity index 100% rename from keduvocdocument/keduvockvtml2reader.cpp rename to keduvockvtml2reader.cpp diff --git a/keduvocdocument/keduvockvtml2reader.h b/keduvockvtml2reader.h similarity index 100% rename from keduvocdocument/keduvockvtml2reader.h rename to keduvockvtml2reader.h diff --git a/keduvocdocument/keduvockvtml2writer.cpp b/keduvockvtml2writer.cpp similarity index 100% rename from keduvocdocument/keduvockvtml2writer.cpp rename to keduvockvtml2writer.cpp diff --git a/keduvocdocument/keduvockvtml2writer.h b/keduvockvtml2writer.h similarity index 100% rename from keduvocdocument/keduvockvtml2writer.h rename to keduvockvtml2writer.h diff --git a/keduvocdocument/keduvockvtmlcompability.cpp b/keduvockvtmlcompability.cpp similarity index 100% rename from keduvocdocument/keduvockvtmlcompability.cpp rename to keduvockvtmlcompability.cpp diff --git a/keduvocdocument/keduvockvtmlcompability.h b/keduvockvtmlcompability.h similarity index 100% rename from keduvocdocument/keduvockvtmlcompability.h rename to keduvockvtmlcompability.h diff --git a/keduvocdocument/keduvockvtmlreader.cpp b/keduvockvtmlreader.cpp similarity index 100% rename from keduvocdocument/keduvockvtmlreader.cpp rename to keduvockvtmlreader.cpp diff --git a/keduvocdocument/keduvockvtmlreader.h b/keduvockvtmlreader.h similarity index 100% rename from keduvocdocument/keduvockvtmlreader.h rename to keduvockvtmlreader.h diff --git a/keduvocdocument/keduvockvtmlwriter.cpp b/keduvockvtmlwriter.cpp similarity index 100% rename from keduvocdocument/keduvockvtmlwriter.cpp rename to keduvockvtmlwriter.cpp diff --git a/keduvocdocument/keduvockvtmlwriter.h b/keduvockvtmlwriter.h similarity index 100% rename from keduvocdocument/keduvockvtmlwriter.h rename to keduvockvtmlwriter.h diff --git a/keduvocdocument/keduvocleitnerbox.cpp b/keduvocleitnerbox.cpp similarity index 100% rename from keduvocdocument/keduvocleitnerbox.cpp rename to keduvocleitnerbox.cpp diff --git a/keduvocdocument/keduvocleitnerbox.h b/keduvocleitnerbox.h similarity index 100% rename from keduvocdocument/keduvocleitnerbox.h rename to keduvocleitnerbox.h diff --git a/keduvocdocument/keduvoclesson.cpp b/keduvoclesson.cpp similarity index 100% rename from keduvocdocument/keduvoclesson.cpp rename to keduvoclesson.cpp diff --git a/keduvocdocument/keduvoclesson.h b/keduvoclesson.h similarity index 100% rename from keduvocdocument/keduvoclesson.h rename to keduvoclesson.h diff --git a/keduvocdocument/keduvocmultiplechoice.cpp b/keduvocmultiplechoice.cpp similarity index 100% rename from keduvocdocument/keduvocmultiplechoice.cpp rename to keduvocmultiplechoice.cpp diff --git a/keduvocdocument/keduvocmultiplechoice.h b/keduvocmultiplechoice.h similarity index 100% rename from keduvocdocument/keduvocmultiplechoice.h rename to keduvocmultiplechoice.h diff --git a/keduvocdocument/keduvocpaukerreader.cpp b/keduvocpaukerreader.cpp similarity index 100% rename from keduvocdocument/keduvocpaukerreader.cpp rename to keduvocpaukerreader.cpp diff --git a/keduvocdocument/keduvocpaukerreader.h b/keduvocpaukerreader.h similarity index 100% rename from keduvocdocument/keduvocpaukerreader.h rename to keduvocpaukerreader.h diff --git a/keduvocdocument/keduvocpersonalpronoun.cpp b/keduvocpersonalpronoun.cpp similarity index 100% rename from keduvocdocument/keduvocpersonalpronoun.cpp rename to keduvocpersonalpronoun.cpp diff --git a/keduvocdocument/keduvocpersonalpronoun.h b/keduvocpersonalpronoun.h similarity index 100% rename from keduvocdocument/keduvocpersonalpronoun.h rename to keduvocpersonalpronoun.h diff --git a/keduvocdocument/keduvoctext.cpp b/keduvoctext.cpp similarity index 100% rename from keduvocdocument/keduvoctext.cpp rename to keduvoctext.cpp diff --git a/keduvocdocument/keduvoctext.h b/keduvoctext.h similarity index 100% rename from keduvocdocument/keduvoctext.h rename to keduvoctext.h diff --git a/keduvocdocument/keduvoctranslation.cpp b/keduvoctranslation.cpp similarity index 100% rename from keduvocdocument/keduvoctranslation.cpp rename to keduvoctranslation.cpp diff --git a/keduvocdocument/keduvoctranslation.h b/keduvoctranslation.h similarity index 100% rename from keduvocdocument/keduvoctranslation.h rename to keduvoctranslation.h diff --git a/keduvocdocument/keduvocvokabelnreader.cpp b/keduvocvokabelnreader.cpp similarity index 100% rename from keduvocdocument/keduvocvokabelnreader.cpp rename to keduvocvokabelnreader.cpp diff --git a/keduvocdocument/keduvocvokabelnreader.h b/keduvocvokabelnreader.h similarity index 100% rename from keduvocdocument/keduvocvokabelnreader.h rename to keduvocvokabelnreader.h diff --git a/keduvocdocument/keduvocwordflags.h b/keduvocwordflags.h similarity index 100% rename from keduvocdocument/keduvocwordflags.h rename to keduvocwordflags.h diff --git a/keduvocdocument/keduvocwordtype.cpp b/keduvocwordtype.cpp similarity index 100% rename from keduvocdocument/keduvocwordtype.cpp rename to keduvocwordtype.cpp diff --git a/keduvocdocument/keduvocwordtype.h b/keduvocwordtype.h similarity index 100% rename from keduvocdocument/keduvocwordtype.h rename to keduvocwordtype.h diff --git a/keduvocdocument/keduvocwqlreader.cpp b/keduvocwqlreader.cpp similarity index 100% rename from keduvocdocument/keduvocwqlreader.cpp rename to keduvocwqlreader.cpp diff --git a/keduvocdocument/keduvocwqlreader.h b/keduvocwqlreader.h similarity index 100% rename from keduvocdocument/keduvocwqlreader.h rename to keduvocwqlreader.h diff --git a/keduvocdocument/keduvocxdxfreader.cpp b/keduvocxdxfreader.cpp similarity index 100% rename from keduvocdocument/keduvocxdxfreader.cpp rename to keduvocxdxfreader.cpp diff --git a/keduvocdocument/keduvocxdxfreader.h b/keduvocxdxfreader.h similarity index 100% rename from keduvocdocument/keduvocxdxfreader.h rename to keduvocxdxfreader.h diff --git a/keduvocdocument/kvtml2.dtd b/kvtml2.dtd similarity index 100% rename from keduvocdocument/kvtml2.dtd rename to kvtml2.dtd diff --git a/keduvocdocument/kvtml2.xsd b/kvtml2.xsd similarity index 100% rename from keduvocdocument/kvtml2.xsd rename to kvtml2.xsd diff --git a/keduvocdocument/kvtml2defs.h b/kvtml2defs.h similarity index 100% rename from keduvocdocument/kvtml2defs.h rename to kvtml2defs.h diff --git a/keduvocdocument/kvtml2todo b/kvtml2todo similarity index 100% rename from keduvocdocument/kvtml2todo rename to kvtml2todo diff --git a/keduvocdocument/kvtmldefs.h b/kvtmldefs.h similarity index 100% rename from keduvocdocument/kvtmldefs.h rename to kvtmldefs.h diff --git a/keduvocdocument/libkeduvocdocument_export.h b/libkeduvocdocument_export.h similarity index 100% rename from keduvocdocument/libkeduvocdocument_export.h rename to libkeduvocdocument_export.h diff --git a/qtmmlwidget/CMakeLists.txt b/qtmmlwidget/CMakeLists.txt deleted file mode 100644 index a6e4eda..0000000 --- a/qtmmlwidget/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -set(qtmmlwidget_LIB_SRCS - qtmmlwidget.cpp -) - -kde4_add_library(qtmmlwidget STATIC ${qtmmlwidget_LIB_SRCS}) - -target_link_libraries(qtmmlwidget ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTXML_LIBRARY}) - -install(TARGETS qtmmlwidget ${INSTALL_TARGETS_DEFAULT_ARGS}) -install(FILES QtMmlDocument QtMmlWidget qtmmlwidget.h DESTINATION ${INCLUDE_INSTALL_DIR}/libkdeedu/qtmml/ COMPONENT Devel) - diff --git a/qtmmlwidget/LICENSE.GPL b/qtmmlwidget/LICENSE.GPL deleted file mode 100644 index 94a9ed0..0000000 --- a/qtmmlwidget/LICENSE.GPL +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/qtmmlwidget/LICENSE.LGPL b/qtmmlwidget/LICENSE.LGPL deleted file mode 100644 index 4362b49..0000000 --- a/qtmmlwidget/LICENSE.LGPL +++ /dev/null @@ -1,502 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -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 this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -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 -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "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 -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY 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 -LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/qtmmlwidget/QtMmlDocument b/qtmmlwidget/QtMmlDocument deleted file mode 100644 index ef69b7f..0000000 --- a/qtmmlwidget/QtMmlDocument +++ /dev/null @@ -1 +0,0 @@ -#include "qtmmlwidget.h" diff --git a/qtmmlwidget/QtMmlWidget b/qtmmlwidget/QtMmlWidget deleted file mode 100644 index ef69b7f..0000000 --- a/qtmmlwidget/QtMmlWidget +++ /dev/null @@ -1 +0,0 @@ -#include "qtmmlwidget.h" diff --git a/qtmmlwidget/qtmmlwidget.cpp b/qtmmlwidget/qtmmlwidget.cpp deleted file mode 100644 index d97117e..0000000 --- a/qtmmlwidget/qtmmlwidget.cpp +++ /dev/null @@ -1,6370 +0,0 @@ -/**************************************************************************** -** -** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of a Qt Solutions component. -** -** Commercial Usage -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Solutions Commercial License Agreement provided -** with the Software or, alternatively, in accordance with the terms -** contained in a written agreement between you and Nokia. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** Please note Third Party Software included with Qt Solutions may impose -** additional restrictions and it is the user's responsibility to ensure -** that they have met the licensing requirements of the GPL, LGPL, or Qt -** Solutions Commercial license and the relevant license of the Third -** Party Software they are using. -** -** If you are unsure which license is appropriate for your use, please -** contact Nokia at qt-info@nokia.com. -** -****************************************************************************/ - -#include -#include -#include -#include -#include -#include - -#include "qtmmlwidget.h" - -// ******************************************************************* -// Declarations -// ******************************************************************* - -#define ROUND(a) (int)((a)+.5) - -static bool g_draw_frames = false; -static const double g_mfrac_spacing = 0.1; -static const double g_mroot_base_margin = 0.1; -static const double g_script_size_multiplier = 0.7071; // sqrt(1/2) -static const int g_min_font_point_size = 8; -static const QChar g_radical_char = QChar(0x1A, 0x22); -static const unsigned g_oper_spec_rows = 9; - -struct Mml -{ - enum NodeType { - NoNode = 0, MiNode, MnNode, MfracNode, MrowNode, MsqrtNode, - MrootNode, MsupNode, MsubNode, MsubsupNode, MoNode, - MstyleNode, TextNode, MphantomNode, MfencedNode, - MtableNode, MtrNode, MtdNode, MoverNode, MunderNode, - MunderoverNode, MerrorNode, MtextNode, MpaddedNode, - MspaceNode, MalignMarkNode, UnknownNode - }; - - enum MathVariant { - NormalMV = 0x0000, - BoldMV = 0x0001, - ItalicMV = 0x0002, - DoubleStruckMV = 0x0004, - ScriptMV = 0x0008, - FrakturMV = 0x0010, - SansSerifMV = 0x0020, - MonospaceMV = 0x0040 - }; - - enum FormType { PrefixForm, InfixForm, PostfixForm }; - enum ColAlign { ColAlignLeft, ColAlignCenter, ColAlignRight }; - enum RowAlign { RowAlignTop, RowAlignCenter, RowAlignBottom, - RowAlignAxis, RowAlignBaseline }; - enum FrameType { FrameNone, FrameSolid, FrameDashed }; - - struct FrameSpacing { - FrameSpacing(int hor = 0, int ver = 0) - : m_hor(hor), m_ver(ver) {} - int m_hor, m_ver; - }; -}; - -struct OperSpec { - enum StretchDir { NoStretch, HStretch, VStretch, HVStretch }; - - const char *name; - Mml::FormType form; - const char *attributes[g_oper_spec_rows]; - StretchDir stretch_dir; -}; - -struct NodeSpec -{ - Mml::NodeType type; - const char *tag; - const char *type_str; - int child_spec; - const char *child_types; - const char *attributes; - - enum ChildSpec { - ChildAny = -1, // any number of children allowed - ChildIgnore = -2, // do not build subexpression of children - ImplicitMrow = -3 // if more than one child, build mrow - }; -}; - -struct EntitySpec -{ - const char *name; - const char *value; -}; - -typedef QMap MmlAttributeMap; -class MmlNode; - -class MmlDocument : public Mml -{ - public: - MmlDocument(); - ~MmlDocument(); - void clear(); - - bool setContent(QString text, QString *errorMsg = 0, - int *errorLine = 0, int *errorColumn = 0); - void paint(QPainter *p, const QPoint &pos) const; - void dump() const; - QSize size() const; - void layout(); - - QString fontName(QtMmlWidget::MmlFont type) const; - void setFontName(QtMmlWidget::MmlFont type, const QString &name); - - int baseFontPointSize() const - { return m_base_font_point_size; } - void setBaseFontPointSize(int size) - { m_base_font_point_size = size; } - QColor foregroundColor() const - { return m_foreground_color; } - void setForegroundColor(const QColor &color) - { m_foreground_color = color; } - QColor backgroundColor() const - { return m_background_color; } - void setBackgroundColor(const QColor &color) - { m_background_color = color; } - - private: - void _dump(const MmlNode *node, QString &indent) const; - bool insertChild(MmlNode *parent, MmlNode *new_node, QString *errorMsg); - - MmlNode *domToMml(const QDomNode &dom_node, bool *ok, QString *errorMsg); - MmlNode *createNode(NodeType type, const MmlAttributeMap &mml_attr, - const QString &mml_value, QString *errorMsg); - MmlNode *createImplicitMrowNode(const QDomNode &dom_node, bool *ok, - QString *errorMsg); - - void insertOperator(MmlNode *node, const QString &text); - - MmlNode *m_root_node; - - QString m_normal_font_name; - QString m_fraktur_font_name; - QString m_sans_serif_font_name; - QString m_script_font_name; - QString m_monospace_font_name; - QString m_doublestruck_font_name; - int m_base_font_point_size; - QColor m_foreground_color; - QColor m_background_color; -}; - -class MmlNode : public Mml -{ - friend class MmlDocument; - - public: - MmlNode(NodeType type, MmlDocument *document, const MmlAttributeMap &attribute_map); - virtual ~MmlNode(); - - // Mml stuff - NodeType nodeType() const - { return m_node_type; } - - virtual QString toStr() const; - - void setRelOrigin(const QPoint &rel_origin); - QPoint relOrigin() const - { return m_rel_origin; } - void stretchTo(const QRect &rect); - bool isStretched() const - { return m_stretched; } - QPoint devicePoint(const QPoint &p) const; - - QRect myRect() const - { return m_my_rect; } - QRect parentRect() const; - virtual QRect deviceRect() const; - void updateMyRect(); - virtual void setMyRect(const QRect &rect) - { m_my_rect = rect; } - - virtual void stretch(); - virtual void layout(); - virtual void paint(QPainter *p); - - int basePos() const; - int overlinePos() const; - int underlinePos() const; - int em() const; - int ex() const; - - QString explicitAttribute(const QString &name, const QString &def = QString::null) const; - QString inheritAttributeFromMrow(const QString &name, const QString &def = QString::null) const; - - virtual QFont font() const; - virtual QColor color() const; - virtual QColor background() const; - virtual int scriptlevel(const MmlNode *child = 0) const; - - - // Node stuff - MmlDocument *document() const - { return m_document; } - MmlNode *parent() const - { return m_parent; } - MmlNode *firstChild() const - { return m_first_child; } - MmlNode *nextSibling() const - { return m_next_sibling; } - MmlNode *previousSibling() const - { return m_previous_sibling; } - MmlNode *lastSibling() const; - MmlNode *firstSibling() const; - bool isLastSibling() const - { return m_next_sibling == 0; } - bool isFirstSibling() const - { return m_previous_sibling == 0; } - bool hasChildNodes() const - { return m_first_child != 0; } - - protected: - virtual void layoutSymbol(); - virtual void paintSymbol(QPainter *p) const; - virtual QRect symbolRect() const - { return QRect(0, 0, 0, 0); } - - MmlNode *parentWithExplicitAttribute(const QString &name, NodeType type = NoNode); - int interpretSpacing(const QString &value, bool *ok) const; - - private: - MmlAttributeMap m_attribute_map; - bool m_stretched; - QRect m_my_rect, m_parent_rect; - QPoint m_rel_origin; - - NodeType m_node_type; - MmlDocument *m_document; - - MmlNode *m_parent, - *m_first_child, - *m_next_sibling, - *m_previous_sibling; -}; - -class MmlTokenNode : public MmlNode -{ - public: - MmlTokenNode(NodeType type, MmlDocument *document, - const MmlAttributeMap &attribute_map) - : MmlNode(type, document, attribute_map) {} - - QString text() const; -}; - -class MmlMphantomNode : public MmlNode -{ - public: - MmlMphantomNode(MmlDocument *document, - const MmlAttributeMap &attribute_map) - : MmlNode(MphantomNode, document, attribute_map) {} - - virtual void paint(QPainter *) {} -}; - -class MmlUnknownNode : public MmlNode -{ - public: - MmlUnknownNode(MmlDocument *document, - const MmlAttributeMap &attribute_map) - : MmlNode(UnknownNode, document, attribute_map) {} -}; - -class MmlMfencedNode : public MmlNode -{ - public: - MmlMfencedNode(MmlDocument *document, - const MmlAttributeMap &attribute_map) - : MmlNode(MfencedNode, document, attribute_map) {} -}; - -class MmlMalignMarkNode : public MmlNode -{ - public: - MmlMalignMarkNode(MmlDocument *document) - : MmlNode(MalignMarkNode, document, MmlAttributeMap()) {} -}; - -class MmlMfracNode : public MmlNode -{ - public: - MmlMfracNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlNode(MfracNode, document, attribute_map) {} - - MmlNode *numerator() const; - MmlNode *denominator() const; - - protected: - virtual void layoutSymbol(); - virtual void paintSymbol(QPainter *p) const; - virtual QRect symbolRect() const; -}; - -class MmlMrowNode : public MmlNode -{ - public: - MmlMrowNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlNode(MrowNode, document, attribute_map) {} -}; - -class MmlRootBaseNode : public MmlNode -{ - public: - MmlRootBaseNode(NodeType type, MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlNode(type, document, attribute_map) {} - - MmlNode *base() const; - MmlNode *index() const; - - virtual int scriptlevel(const MmlNode *child = 0) const; - - protected: - virtual void layoutSymbol(); - virtual void paintSymbol(QPainter *p) const; - virtual QRect symbolRect() const; - int tailWidth() const; -}; - -class MmlMrootNode : public MmlRootBaseNode -{ - public: - MmlMrootNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlRootBaseNode(MrootNode, document, attribute_map) {} -}; - -class MmlMsqrtNode : public MmlRootBaseNode -{ - public: - MmlMsqrtNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlRootBaseNode(MsqrtNode, document, attribute_map) {} - -}; - - -class MmlTextNode : public MmlNode -{ - public: - MmlTextNode(const QString &text, MmlDocument *document); - - virtual QString toStr() const; - QString text() const - { return m_text; } - - // TextNodes are not xml elements, so they can't have attributes of - // their own. Everything is taken from the parent. - virtual QFont font() const - { return parent()->font(); } - virtual int scriptlevel(const MmlNode* = 0) const - { return parent()->scriptlevel(this); } - virtual QColor color() const - { return parent()->color(); } - virtual QColor background() const - { return parent()->background(); } - - protected: - virtual void paintSymbol(QPainter *p) const; - virtual QRect symbolRect() const; - - QString m_text; -}; - -class MmlMiNode : public MmlTokenNode -{ - public: - MmlMiNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlTokenNode(MiNode, document, attribute_map) {} -}; - -class MmlMnNode : public MmlTokenNode -{ - public: - MmlMnNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlTokenNode(MnNode, document, attribute_map) {} -}; - -class MmlSubsupBaseNode : public MmlNode -{ - public: - MmlSubsupBaseNode(NodeType type, MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlNode(type, document, attribute_map) {} - - MmlNode *base() const; - MmlNode *sscript() const; - - virtual int scriptlevel(const MmlNode *child = 0) const; -}; - -class MmlMsupNode : public MmlSubsupBaseNode -{ - public: - MmlMsupNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlSubsupBaseNode(MsupNode, document, attribute_map) {} - - protected: - virtual void layoutSymbol(); -}; - -class MmlMsubNode : public MmlSubsupBaseNode -{ - public: - MmlMsubNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlSubsupBaseNode(MsubNode, document, attribute_map) {} - - protected: - virtual void layoutSymbol(); -}; - -class MmlMsubsupNode : public MmlNode -{ - public: - MmlMsubsupNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlNode(MsubsupNode, document, attribute_map) {} - - MmlNode *base() const; - MmlNode *superscript() const; - MmlNode *subscript() const; - - virtual int scriptlevel(const MmlNode *child = 0) const; - - protected: - virtual void layoutSymbol(); -}; - -class MmlMoNode : public MmlTokenNode -{ - public: - MmlMoNode(MmlDocument *document, const MmlAttributeMap &attribute_map); - - QString dictionaryAttribute(const QString &name) const; - virtual void stretch(); - virtual int lspace() const; - virtual int rspace() const; - - virtual QString toStr() const; - - protected: - virtual void layoutSymbol(); - virtual QRect symbolRect() const; - - virtual FormType form() const; - - private: - const OperSpec *m_oper_spec; -}; - -class MmlMstyleNode : public MmlNode -{ - public: - MmlMstyleNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlNode(MstyleNode, document, attribute_map) {} -}; - -class MmlTableBaseNode : public MmlNode -{ - public: - MmlTableBaseNode(NodeType type, MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlNode(type, document, attribute_map) {} -}; - -class MmlMtableNode : public MmlTableBaseNode -{ - public: - MmlMtableNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlTableBaseNode(MtableNode, document, attribute_map) {} - - int rowspacing() const; - int columnspacing() const; - int framespacing_hor() const; - int framespacing_ver() const; - FrameType frame() const; - FrameType columnlines(int idx) const; - FrameType rowlines(int idx) const; - - protected: - virtual void layoutSymbol(); - virtual QRect symbolRect() const; - virtual void paintSymbol(QPainter *p) const; - - private: - struct CellSizeData - { - void init(const MmlNode *first_row); - QList col_widths, row_heights; - int numCols() const { return col_widths.count(); } - int numRows() const { return row_heights.count(); } - uint colWidthSum() const; - uint rowHeightSum() const; - }; - - CellSizeData m_cell_size_data; - int m_content_width, m_content_height; -}; - -class MmlMtrNode : public MmlTableBaseNode -{ - public: - MmlMtrNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlTableBaseNode(MtrNode, document, attribute_map) {} - void layoutCells(const QList &col_widths, int col_spc); -}; - -class MmlMtdNode : public MmlTableBaseNode -{ - public: - MmlMtdNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlTableBaseNode(MtdNode, document, attribute_map) - { m_scriptlevel_adjust = 0; } - virtual void setMyRect(const QRect &rect); - - ColAlign columnalign(); - RowAlign rowalign(); - uint colNum(); - uint rowNum(); - virtual int scriptlevel(const MmlNode *child = 0) const; - - private: - int m_scriptlevel_adjust; // added or subtracted to scriptlevel to - // make contents fit the cell -}; - -class MmlMoverNode : public MmlNode -{ - public: - MmlMoverNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlNode(MoverNode, document, attribute_map) {} - virtual int scriptlevel(const MmlNode *node = 0) const; - - protected: - virtual void layoutSymbol(); -}; - -class MmlMunderNode : public MmlNode -{ - public: - MmlMunderNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlNode(MunderNode, document, attribute_map) {} - virtual int scriptlevel(const MmlNode *node = 0) const; - - protected: - virtual void layoutSymbol(); -}; - -class MmlMunderoverNode : public MmlNode -{ - public: - MmlMunderoverNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlNode(MunderoverNode, document, attribute_map) {} - virtual int scriptlevel(const MmlNode *node = 0) const; - - protected: - virtual void layoutSymbol(); -}; - -class MmlMerrorNode : public MmlNode -{ - public: - MmlMerrorNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlNode(MerrorNode, document, attribute_map) {} -}; - -class MmlMtextNode : public MmlNode -{ - public: - MmlMtextNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlNode(MtextNode, document, attribute_map) {} -}; - -class MmlMpaddedNode : public MmlNode -{ - public: - MmlMpaddedNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlNode(MpaddedNode, document, attribute_map) {} - - public: - int lspace() const; - int width() const; - int height() const; - int depth() const; - - protected: - int interpretSpacing(QString value, int base_value, bool *ok) const; - virtual void layoutSymbol(); - virtual QRect symbolRect() const; -}; - -class MmlMspaceNode : public MmlNode -{ - public: - MmlMspaceNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlNode(MspaceNode, document, attribute_map) {} -}; - -static const NodeSpec *mmlFindNodeSpec(Mml::NodeType type); -static const NodeSpec *mmlFindNodeSpec(const QString &tag); -static bool mmlCheckChildType(Mml::NodeType parent_type, - Mml::NodeType child_type, QString *error_str); -static bool mmlCheckAttributes(Mml::NodeType child_type, - const MmlAttributeMap &attr, QString *error_str); -static QString mmlDictAttribute(const QString &name, const OperSpec *spec); -static const OperSpec *mmlFindOperSpec(const QString &name, Mml::FormType form); -static int interpretSpacing(QString name, int em, int ex, bool *ok); -static int interpretPercentSpacing(QString value, int base, bool *ok); -static uint interpretMathVariant(const QString &value, bool *ok); -static Mml::FormType interpretForm(const QString &value, bool *ok); -static Mml::FrameType interpretFrameType(const QString &value_list, uint idx, bool *ok); -static Mml::FrameSpacing interpretFrameSpacing(const QString &value_list, int em, int ex, bool *ok); -static Mml::ColAlign interpretColAlign(const QString &value_list, uint colnum, bool *ok); -static Mml::RowAlign interpretRowAlign(const QString &value_list, uint rownum, bool *ok); -static Mml::FrameType interpretFrameType(const QString &value_list, uint idx, bool *ok); -static QFont interpretDepreciatedFontAttr(const MmlAttributeMap &font_attr, QFont &fn, int em, int ex); -static QFont interpretMathSize(QString value, QFont &fn, int em, int ex, bool *ok); -static QString interpretListAttr(const QString &value_list, int idx, const QString &def); -static QString rectToStr(const QRect &rect); -static QString entityDeclarations(); - - -#define MML_ATT_COMMON " class style id xref actiontype " -#define MML_ATT_FONTSIZE " fontsize fontweight fontstyle fontfamily color " -#define MML_ATT_MATHVARIANT " mathvariant mathsize mathcolor mathbackground " -#define MML_ATT_FONTINFO MML_ATT_FONTSIZE MML_ATT_MATHVARIANT -#define MML_ATT_OPINFO " form fence separator lspace rspace stretchy symmetric " \ - " maxsize minsize largeop movablelimits accent " -#define MML_ATT_SIZEINFO " width height depth " -#define MML_ATT_TABLEINFO " align rowalign columnalign columnwidth groupalign " \ - " alignmentscope side rowspacing columnspacing rowlines " \ - " columnlines width frame framespacing equalrows " \ - " equalcolumns displaystyle " -#define MML_ATT_MFRAC " bevelled numalign denomalign linethickness " -#define MML_ATT_MSTYLE MML_ATT_FONTINFO MML_ATT_OPINFO \ - " scriptlevel lquote rquote linethickness displaystyle " \ - " scriptsizemultiplier scriptminsize background " \ - " veryverythinmathspace verythinmathspace thinmathspace " \ - " mediummathspace thickmathspace verythickmathspace " \ - " veryverythickmathspace open close separators " \ - " subscriptshift superscriptshift accentunder tableinfo " \ - " rowspan columnspan edge selection bevelled " -#define MML_ATT_MTABLE " align rowalign columnalign groupalign alignmentscope " \ - " columnwidth width rowspacing columnspacing rowlines columnlines " \ - " frame framespacing equalrows equalcolumns displaystyle side " \ - " minlabelspacing " - -static const NodeSpec g_node_spec_data[] = { - -// type tag type_str child_spec child_types attributes ""=none, 0=any -// ----------------------- --------------- ------------------- ----------------------- ------------------------ ------------------------------------ - { Mml::MiNode, "mi", "MiNode", NodeSpec::ChildAny, " TextNode MalignMark ", MML_ATT_COMMON MML_ATT_FONTINFO }, - { Mml::MnNode, "mn", "MnNode", NodeSpec::ChildAny, " TextNode MalignMark ", MML_ATT_COMMON MML_ATT_FONTINFO }, - { Mml::MfracNode, "mfrac", "MfracNode", 2, 0, MML_ATT_COMMON MML_ATT_MFRAC }, - { Mml::MrowNode, "mrow", "MrowNode", NodeSpec::ChildAny, 0, MML_ATT_COMMON " display mode " }, - { Mml::MsqrtNode, "msqrt", "MsqrtNode", NodeSpec::ImplicitMrow, 0, MML_ATT_COMMON }, - { Mml::MrootNode, "mroot", "MrootNode", 2, 0, MML_ATT_COMMON }, - { Mml::MsupNode, "msup", "MsupNode", 2, 0, MML_ATT_COMMON " subscriptshift " }, - { Mml::MsubNode, "msub", "MsubNode", 2, 0, MML_ATT_COMMON " superscriptshift " }, - { Mml::MsubsupNode, "msubsup", "MsubsupNode", 3, 0, MML_ATT_COMMON " subscriptshift superscriptshift " }, - { Mml::MoNode, "mo", "MoNode", NodeSpec::ChildAny, " TextNode MalignMark ", MML_ATT_COMMON MML_ATT_FONTINFO MML_ATT_OPINFO }, - { Mml::MstyleNode, "mstyle", "MstyleNode", NodeSpec::ImplicitMrow, 0, MML_ATT_COMMON MML_ATT_MSTYLE }, - { Mml::MphantomNode, "mphantom", "MphantomNode", NodeSpec::ImplicitMrow, 0, MML_ATT_COMMON }, - { Mml::MalignMarkNode, "malignmark", "MalignMarkNode", 0, 0, "" }, - { Mml::MfencedNode, "mfenced", "MfencedNode", NodeSpec::ChildAny, 0, MML_ATT_COMMON " open close separators " }, - { Mml::MtableNode, "mtable", "MtableNode", NodeSpec::ChildAny, " MtrNode ", MML_ATT_COMMON MML_ATT_MTABLE }, - { Mml::MtrNode, "mtr", "MtrNode", NodeSpec::ChildAny, " MtdNode ", MML_ATT_COMMON " rowalign columnalign groupalign " }, - { Mml::MtdNode, "mtd", "MtdNode", NodeSpec::ImplicitMrow, 0, MML_ATT_COMMON " rowspan columnspan rowalign columnalign groupalign " }, - { Mml::MoverNode, "mover", "MoverNode", 2, 0, MML_ATT_COMMON " accent " }, - { Mml::MunderNode, "munder", "MunderNode", 2, 0, MML_ATT_COMMON " accentunder " }, - { Mml::MunderoverNode, "munderover", "MunderoverNode", 3, 0, MML_ATT_COMMON " accentunder accent " }, - { Mml::MerrorNode, "merror", "MerrorNode", NodeSpec::ImplicitMrow, 0, MML_ATT_COMMON }, - { Mml::MtextNode, "mtext", "MtextNode", 1, " TextNode ", MML_ATT_COMMON " width height depth linebreak " }, - { Mml::MpaddedNode, "mpadded", "MpaddedNode", NodeSpec::ImplicitMrow, 0, MML_ATT_COMMON " width height depth lspace " }, - { Mml::MspaceNode, "mspace", "MspaceNode", NodeSpec::ImplicitMrow, 0, MML_ATT_COMMON " width height depth linebreak " }, - { Mml::TextNode, 0, "TextNode", NodeSpec::ChildIgnore, 0, "" }, - { Mml::UnknownNode, 0, "UnknownNode", NodeSpec::ChildAny, 0, 0 }, - { Mml::NoNode, 0, 0, 0, 0, 0 } -}; - -static const char *g_oper_spec_names[g_oper_spec_rows] = { "accent", "fence", "largeop", "lspace", "minsize", "movablelimits", "rspace", "separator", "stretchy" /* stretchdir */ }; -static const OperSpec g_oper_spec_data[] = { - - { "!!" , Mml::PostfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "!!" - { "!" , Mml::PostfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "!" - { "!=" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "!=" - { "⩓" , Mml::InfixForm, { 0, 0, 0, "mediummathspace", 0, 0, "mediummathspace", 0, "true" }, OperSpec::VStretch }, // "⩓" - { "⁡" , Mml::InfixForm, { 0, 0, 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "⁡" - { "≔" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≔" - { "∖" , Mml::InfixForm, { 0, 0, 0, "thinmathspace", 0, 0, "thinmathspace", 0, "true" }, OperSpec::HVStretch }, // "∖" - { "∵" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "∵" - { "˘" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "˘" - { "⋒" , Mml::InfixForm, { 0, 0, 0, "thinmathspace", 0, 0, "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "⋒" - { "ⅅ" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // ⅅ" - { "¸" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "¸" - { "·" , Mml::InfixForm, { 0, 0, 0, "thinmathspace", 0, 0, "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "·" - { "⊙" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊙" - { "⊖" , Mml::InfixForm, { 0, 0, 0, "thinmathspace", 0, 0, "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊖" - { "⊕" , Mml::InfixForm, { 0, 0, 0, "thinmathspace", 0, 0, "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊕" - { "⊗" , Mml::InfixForm, { 0, 0, 0, "thinmathspace", 0, 0, "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊗" - { "∲" , Mml::PrefixForm, { 0, 0, "true", "0em", 0, 0, "0em", 0, "true"}, OperSpec::VStretch }, // ∲" - { "”" , Mml::PostfixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // ”" - { "’" , Mml::PostfixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "’" - { "∷" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "∷" - { "≡" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≡" - { "∮" , Mml::PrefixForm, { 0, 0, "true", "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // "∮" - { "∐" , Mml::InfixForm, { 0, 0, 0, "thinmathspace", 0, 0, "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "∐" - { "∳", Mml::PrefixForm, { 0, 0, "true", "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // &CounterClockwiseContourInteg - { "⨯" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "⨯" - { "⋓" , Mml::InfixForm, { 0, 0, 0, "thinmathspace", 0, 0, "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "⋓" - { "≍" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≍" - { "∇" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "∇" - { "´" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "´" - { "˙" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "˙" - { "˝" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // ˝" - { "`" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "`" - { "&DiacriticalLeftArrow;" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::HStretch }, // &DiacriticalLeftArrow;" - { "&DiacriticalLeftRightArrow;" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::HStretch }, // &DiacriticalLeftRightArrow;" - { "&DiacriticalLeftRightVector;" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::HStretch }, // &DiacriticalLeftRightVector;" - { "&DiacriticalLeftVector;" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::HStretch }, // &DiacriticalLeftVector;" - { "&DiacriticalRightArrow;" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::HStretch }, // &DiacriticalRightArrow;" - { "&DiacriticalRightVector;" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::HStretch }, // &DiacriticalRightVector;" - { "˜" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::NoStretch }, // "˜" - { "⋄" , Mml::InfixForm, { 0, 0, 0, "thinmathspace", 0, 0, "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "⋄" - { "ⅆ" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "ⅆ" - { "≐" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≐" - { "∯" , Mml::PrefixForm, { 0, 0, "true", "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // ∯" - { "¨" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "¨" - { "⇓" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::VStretch }, // "⇓" - { "⇐" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "⇐" - { "⇔" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // ⇔" - { "⫤" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⫤" - { "⟸" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HStretch }, // "⟸" - { "⟺" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HStretch }, // ⟺" - { "⟹" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HStretch }, // ⟹" - { "⇒" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "⇒" - { "⊨" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊨" - { "⇑" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::VStretch }, // "⇑" - { "⇕" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::VStretch }, // "⇕" - { "∥" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "∥" - { "↓" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::VStretch }, // "↓" - { "⤓" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::VStretch }, // "⤓" - { "⇵" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::VStretch }, // "⇵" - { "̑" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "̑" - { "⥐" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HVStretch }, // "⥐" - { "⥞" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HVStretch }, // "⥞" - { "↽" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HVStretch }, // "↽" - { "⥖" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HVStretch }, // "⥖" - { "⥟" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HVStretch }, // "⥟" - { "⇁" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HVStretch }, // "⇁" - { "⥗" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HVStretch }, // "⥗" - { "⊤" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊤" - { "↧" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::VStretch }, // "↧" - { "∈" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "∈" - { "⩵" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⩵" - { "≂" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≂" - { "⇌" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "⇌" - { "∃" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "∃" - { "∀" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "∀" - { "≥" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≥" - { "⋛" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⋛" - { "≧" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≧" - { "⪢" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⪢" - { "≷" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≷" - { "⩾" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⩾" - { "≳" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≳" - { "ˇ" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::NoStretch }, // "ˇ" - { "^" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::HStretch }, // "^" - { "─" , Mml::InfixForm, { 0, 0, 0, "0em", "0", 0, "0em", 0, "true" }, OperSpec::HStretch }, // "─" - { "≎" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≎" - { "≏" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≏" - { "⇒" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "⇒" - { "∫" , Mml::PrefixForm, { 0, 0, "true", "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "∫" - { "⋂" , Mml::PrefixForm, { 0, 0, "true", "0em", 0, "true", "thinmathspace", 0, "true" }, OperSpec::HVStretch }, // "⋂" - { "⁣" , Mml::InfixForm, { 0, 0, 0, "0em", 0, 0, "0em", "true", 0 }, OperSpec::NoStretch }, // "⁣" - { "⁢" , Mml::InfixForm, { 0, 0, 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "⁢" - { "⟨" , Mml::PrefixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // "⟨" - { "←" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "←" - { "⇤" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "⇤" - { "⇆" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "⇆" - { "&LeftBracketingBar;" , Mml::PrefixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // "&LeftBracketingBar;" - { "⌈" , Mml::PrefixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // "⌈" - { "⟦" , Mml::PrefixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::HStretch }, // "⟦" - { "&LeftDoubleBracketingBar;" , Mml::PrefixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::HStretch }, // &LeftDoubleBracketingBar;" - { "⥡" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HVStretch }, // "⥡" - { "⇃" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HVStretch }, // "⇃" - { "⥙" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HVStretch }, // "⥙" - { "⌊" , Mml::PrefixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // "⌊" - { "↔" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "↔" - { "⥎" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "⥎" - { "&LeftSkeleton;" , Mml::PrefixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "&LeftSkeleton;" - { "⊣" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊣" - { "↤" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "↤" - { "⥚" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "⥚" - { "⊲" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊲" - { "⧏" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⧏" - { "⊴" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊴" - { "⥑" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HVStretch }, // "⥑" - { "⥠" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HVStretch }, // "⥠" - { "↿" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HVStretch }, // "↿" - { "⥘" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HVStretch }, // "⥘" - { "↼" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "↼" - { "⥒" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::VStretch }, // "⥒" - { "⋚" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⋚" - { "≦" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≦" - { "≶" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≶" - { "⪡" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⪡" - { "⩽" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⩽" - { "≲" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≲" - { "⟵" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HStretch }, // "⟵" - { "⟷" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HStretch }, // "⟷" - { "⟶" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HStretch }, // "⟶" - { "↙" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HVStretch }, // "↙" - { "↘" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HVStretch }, // "↘" - { "∓" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, 0, "veryverythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "∓" - { "≫" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // ≫" - { "≪" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≪" - { "⫬" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⫬" - { "≢" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≢" - { "≭" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≭" - { "∦" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // ∦" - { "∉" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "∉" - { "≠" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≠" - { "≂̸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≂̸" - { "∄" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "∄" - { "≯" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≯" - { "≱" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≱" - { "≧̸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≧̸" - { "≫̸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≫̸" - { "≹" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≹" - { "⩾̸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // ⩾̸" - { "≵" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≵" - { "≎̸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≎̸" - { "≏̸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≏̸" - { "⋪" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⋪" - { "⧏̸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⧏̸" - { "⋬" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // ⋬" - { "≮" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≮" - { "≰" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≰" - { "&NotLessFullEqual;" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "&NotLessFullEqual;" - { "≸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≸" - { "≪̸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≪̸" - { "⩽̸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⩽̸" - { "≴" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≴" - { "⪢̸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // ⪢̸" - { "⪡̸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⪡̸" - { "⊀" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊀" - { "⪯̸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⪯̸" - { "⋠" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // ⋠" - { "&NotPrecedesTilde;" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "&NotPrecedesTilde;" - { "∌" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "∌" - { "⋫" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⋫" - { "⧐̸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⧐̸" - { "⋭" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // ⋭" - { "⊏̸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊏̸" - { "⋢" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // ⋢" - { "⊐̸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊐̸" - { "⋣" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // ⋣" - { "⊂⃒" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊂⃒" - { "⊈" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊈" - { "⊁" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊁" - { "⪰̸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⪰̸" - { "⋡" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // ⋡" - { "≿̸" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≿̸" - { "⊃⃒" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊃⃒" - { "⊉" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊉" - { "≁" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≁" - { "≄" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≄" - { "≇" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≇" - { "≉" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≉" - { "∤" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "∤" - { "“" , Mml::PrefixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // “" - { "‘" , Mml::PrefixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "‘" - { "⩔" , Mml::InfixForm, { 0, 0, 0, "mediummathspace", 0, 0, "mediummathspace", 0, "true" }, OperSpec::VStretch }, // "⩔" - { "‾" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::HStretch }, // "‾" - { "⏞" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::HStretch }, // "⏞" - { "⎴" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::HStretch }, // "⎴" - { "⏜" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // "⏜" - { "∂" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "∂" - { "±" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, 0, "veryverythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "±" - { "≺" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≺" - { "⪯" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⪯" - { "≼" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≼" - { "≾" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≾" - { "∏" , Mml::PrefixForm, { 0, 0, "true", "0em", 0, "true", "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "∏" - { "∷" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "∷" - { "∝" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "∝" - { "∋" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "∋" - { "⇋" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "⇋" - { "⥯" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HStretch }, // ⥯" - { "⟩" , Mml::PostfixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // "⟩" - { "→" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "→" - { "⇥" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "⇥" - { "⇄" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "⇄" - { "&RightBracketingBar;" , Mml::PostfixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // "&RightBracketingBar;" - { "⌉" , Mml::PostfixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // "⌉" - { "⟧" , Mml::PostfixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // "⟧" - { "&RightDoubleBracketingBar;" , Mml::PostfixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::HStretch }, // &RightDoubleBracketingBar;" - { "⥝" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HVStretch }, // "⥝" - { "⇂" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HVStretch }, // "⇂" - { "⥕" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HVStretch }, // "⥕" - { "⌋" , Mml::PostfixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // "⌋" - { "&RightSkeleton;" , Mml::PostfixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "&RightSkeleton;" - { "⊢" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊢" - { "↦" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "↦" - { "⥛" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "⥛" - { "⊳" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊳" - { "⧐" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⧐" - { "⊵" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊵" - { "⥏" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::VStretch }, // "⥏" - { "⥜" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HVStretch }, // "⥜" - { "↾" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HVStretch }, // "↾" - { "⥔" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::HVStretch }, // "⥔" - { "⇀" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "⇀" - { "⥓" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HStretch }, // "⥓" - { "⥰" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⥰" - { "↓" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "↓" - { "←" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::HStretch }, // "←" - { "→" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::HStretch }, // "→" - { "↑" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::VStretch }, // "↑" - { "∘" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "∘" - { "√" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::VStretch }, // "√" - { "□" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "□" - { "⊓" , Mml::InfixForm, { 0, 0, 0, "mediummathspace", 0, 0, "mediummathspace", 0, "true" }, OperSpec::HVStretch }, // "⊓" - { "⊏" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊏" - { "⊑" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊑" - { "⊐" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊐" - { "⊒" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊒" - { "⊔" , Mml::InfixForm, { 0, 0, 0, "mediummathspace", 0, 0, "mediummathspace", 0, "true" }, OperSpec::HVStretch }, // "⊔" - { "⋆" , Mml::InfixForm, { 0, 0, 0, "thinmathspace", 0, 0, "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "⋆" - { "⋐" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⋐" - { "⊆" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊆" - { "≻" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≻" - { "⪰" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⪰" - { "≽" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≽" - { "≿" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≿" - { "∋" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "∋" - { "∑" , Mml::PrefixForm, { 0, 0, "true", "0em", 0, "true", "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "∑" - { "⊃" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊃" - { "⊇" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊇" - { "∴" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "∴" - { "∼" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "∼" - { "≃" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≃" - { "≅" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≅" - { "≈" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≈" - { "⃛" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "⃛" - { "_" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::HStretch }, // "_" - { "⏟" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::HStretch }, // "⏟" - { "⎵" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::HStretch }, // "⎵" - { "⏝" , Mml::PostfixForm, { "true", 0, 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::HStretch }, // "⏝" - { "⋃" , Mml::PrefixForm, { 0, 0, "true", "0em", 0, "true", "thinmathspace", 0, "true" }, OperSpec::HVStretch }, // "⋃" - { "⊎" , Mml::PrefixForm, { 0, 0, "true", "0em", 0, "true", "thinmathspace", 0, "true" }, OperSpec::HVStretch }, // "⊎" - { "↑" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::VStretch }, // "↑" - { "⤒" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::VStretch }, // "⤒" - { "⇅" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::VStretch }, // "⇅" - { "↕" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::VStretch }, // "↕" - { "⥮" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::VStretch }, // "⥮" - { "⊥" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "⊥" - { "↥" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, "true" }, OperSpec::VStretch }, // "↥" - { "↖" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HVStretch }, // "↖" - { "↗" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::HVStretch }, // "↗" - { "⋁" , Mml::InfixForm, { 0, 0, 0, "thinmathspace", 0, 0, "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "⋁" - { "∣" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "∣" - { "|" , Mml::InfixForm, { 0, 0, 0, "0em", "0", 0, "0em", 0, "true" }, OperSpec::VStretch }, // "|" - { "❘" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::VStretch }, // "❘" - { "≀" , Mml::InfixForm, { 0, 0, 0, "thinmathspace", 0, 0, "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "≀" - { "⋀" , Mml::InfixForm, { 0, 0, 0, "thinmathspace", 0, 0, "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "⋀" - { "&" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "&" - { "&&" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "&&" - { "≤" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "≤" - { "<" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "<" - { "<=" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "<=" - { "<>" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "<>" - { "'" , Mml::PostfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "'" - { "(" , Mml::PrefixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // "(" - { ")" , Mml::PostfixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // ")" - { "*" , Mml::InfixForm, { 0, 0, 0, "thinmathspace", 0, 0, "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "*" - { "**" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "**" - { "*=" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "*=" - { "+" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "+" - { "+" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, 0, "veryverythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "+" - { "++" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "++" - { "+=" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "+=" - { "," , Mml::InfixForm, { 0, 0, 0, "0em", 0, 0, "verythickmathspace", "true", 0 }, OperSpec::NoStretch }, // "," - { "-" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "-" - { "-" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, 0, "veryverythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "-" - { "--" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "--" - { "-=" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "-=" - { "->" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "->" - { "." , Mml::InfixForm, { 0, 0, 0, "0em", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "." - { ".." , Mml::PostfixForm, { 0, 0, 0, "mediummathspace", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // ".." - { "..." , Mml::PostfixForm, { 0, 0, 0, "mediummathspace", 0, 0, "0em", 0, 0 }, OperSpec::NoStretch }, // "..." - { "/" , Mml::InfixForm, { 0, 0, 0, "thinmathspace", 0, 0, "thinmathspace", 0, "true" }, OperSpec::VStretch }, // "/" - { "//" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "//" - { "/=" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "/=" - { ":" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // ":" - { ":=" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // ":=" - { ";" , Mml::InfixForm, { 0, 0, 0, "0em", 0, 0, "verythickmathspace", "true", 0 }, OperSpec::NoStretch }, // ";" - { ";" , Mml::PostfixForm, { 0, 0, 0, "0em", 0, 0, "0em", "true", 0 }, OperSpec::NoStretch }, // ";" - { "=" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "=" - { "==" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // "==" - { ">" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // ">" - { ">=" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, 0 }, OperSpec::NoStretch }, // ">=" - { "?" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "?" - { "@" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "@" - { "[" , Mml::PrefixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // "[" - { "]" , Mml::PostfixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // "]" - { "^" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "^" - { "_" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "_" - { "lim" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, "true", "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "lim" - { "max" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, "true", "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "max" - { "min" , Mml::PrefixForm, { 0, 0, 0, "0em", 0, "true", "thinmathspace", 0, 0 }, OperSpec::NoStretch }, // "min" - { "{" , Mml::PrefixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // "{" - { "|" , Mml::InfixForm, { 0, 0, 0, "thickmathspace", 0, 0, "thickmathspace", 0, "true" }, OperSpec::VStretch }, // "|" - { "||" , Mml::InfixForm, { 0, 0, 0, "mediummathspace", 0, 0, "mediummathspace", 0, 0 }, OperSpec::NoStretch }, // "||" - { "}" , Mml::PostfixForm, { 0, "true", 0, "0em", 0, 0, "0em", 0, "true" }, OperSpec::VStretch }, // "}" - { "~" , Mml::InfixForm, { 0, 0, 0, "verythinmathspace", 0, 0, "verythinmathspace", 0, 0 }, OperSpec::NoStretch }, // "~" - - { 0 , Mml::InfixForm, { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, OperSpec::NoStretch } -}; - -static const OperSpec g_oper_spec_defaults = - { 0 , Mml::InfixForm, { "false", "false", "false", "thickmathspace", "1", "false", "thickmathspace", "false", "false" }, OperSpec::NoStretch }; - -static const uint g_oper_spec_count = sizeof(g_oper_spec_data)/sizeof(OperSpec) - 1; - -static const EntitySpec g_xml_entity_data[] = { - { "angzarr", "⍼" }, - { "cirmid", "⫯" }, - { "cudarrl", "⤸" }, - { "cudarrr", "⤵" }, - { "cularr", "↶" }, - { "cularrp", "⤽" }, - { "curarr", "↷" }, - { "curarrm", "⤼" }, - { "Darr", "↡" }, - { "dArr", "⇓" }, - { "ddarr", "⇊" }, - { "DDotrahd", "⤑" }, - { "dfisht", "⥿" }, - { "dHar", "⥥" }, - { "dharl", "⇃" }, - { "dharr", "⇂" }, - { "duarr", "⇵" }, - { "duhar", "⥯" }, - { "dzigrarr", "⟿" }, - { "erarr", "⥱" }, - { "hArr", "⇔" }, - { "harr", "↔" }, - { "harrcir", "⥈" }, - { "harrw", "↭" }, - { "hoarr", "⇿" }, - { "imof", "⊷" }, - { "lAarr", "⇚" }, - { "Larr", "↞" }, - { "larrbfs", "⤟" }, - { "larrfs", "⤝" }, - { "larrhk", "↩" }, - { "larrlp", "↫" }, - { "larrpl", "⤹" }, - { "larrsim", "⥳" }, - { "larrtl", "↢" }, - { "lAtail", "⤛" }, - { "latail", "⤙" }, - { "lBarr", "⤎" }, - { "lbarr", "⤌" }, - { "ldca", "⤶" }, - { "ldrdhar", "⥧" }, - { "ldrushar", "⥋" }, - { "ldsh", "↲" }, - { "lfisht", "⥼" }, - { "lHar", "⥢" }, - { "lhard", "↽" }, - { "lharu", "↼" }, - { "lharul", "⥪" }, - { "llarr", "⇇" }, - { "llhard", "⥫" }, - { "loarr", "⇽" }, - { "lrarr", "⇆" }, - { "lrhar", "⇋" }, - { "lrhard", "⥭" }, - { "lsh", "↰" }, - { "lurdshar", "⥊" }, - { "luruhar", "⥦" }, - { "Map", "⤅" }, - { "map", "↦" }, - { "midcir", "⫰" }, - { "mumap", "⊸" }, - { "nearhk", "⤤" }, - { "neArr", "⇗" }, - { "nearr", "↗" }, - { "nesear", "⤨" }, - { "nhArr", "⇎" }, - { "nharr", "↮" }, - { "nlArr", "⇍" }, - { "nlarr", "↚" }, - { "nrArr", "⇏" }, - { "nrarr", "↛" }, - { "nrarrc", "⤳̸" }, - { "nrarrw", "↝̸" }, - { "nvHarr", "⤄" }, - { "nvlArr", "⤂" }, - { "nvrArr", "⤃" }, - { "nwarhk", "⤣" }, - { "nwArr", "⇖" }, - { "nwarr", "↖" }, - { "nwnear", "⤧" }, - { "olarr", "↺" }, - { "orarr", "↻" }, - { "origof", "⊶" }, - { "rAarr", "⇛" }, - { "Rarr", "↠" }, - { "rarrap", "⥵" }, - { "rarrbfs", "⤠" }, - { "rarrc", "⤳" }, - { "rarrfs", "⤞" }, - { "rarrhk", "↪" }, - { "rarrlp", "↬" }, - { "rarrpl", "⥅" }, - { "rarrsim", "⥴" }, - { "Rarrtl", "⤖" }, - { "rarrtl", "↣" }, - { "rarrw", "↝" }, - { "rAtail", "⤜" }, - { "ratail", "⤚" }, - { "RBarr", "⤐" }, - { "rBarr", "⤏" }, - { "rbarr", "⤍" }, - { "rdca", "⤷" }, - { "rdldhar", "⥩" }, - { "rdsh", "↳" }, - { "rfisht", "⥽" }, - { "rHar", "⥤" }, - { "rhard", "⇁" }, - { "rharu", "⇀" }, - { "rharul", "⥬" }, - { "rlarr", "⇄" }, - { "rlhar", "⇌" }, - { "roarr", "⇾" }, - { "rrarr", "⇉" }, - { "rsh", "↱" }, - { "ruluhar", "⥨" }, - { "searhk", "⤥" }, - { "seArr", "⇘" }, - { "searr", "↘" }, - { "seswar", "⤩" }, - { "simrarr", "⥲" }, - { "slarr", "←" }, - { "srarr", "→" }, - { "swarhk", "⤦" }, - { "swArr", "⇙" }, - { "swarr", "↙" }, - { "swnwar", "⤪" }, - { "Uarr", "↟" }, - { "uArr", "⇑" }, - { "Uarrocir", "⥉" }, - { "udarr", "⇅" }, - { "udhar", "⥮" }, - { "ufisht", "⥾" }, - { "uHar", "⥣" }, - { "uharl", "↿" }, - { "uharr", "↾" }, - { "uuarr", "⇈" }, - { "vArr", "⇕" }, - { "varr", "↕" }, - { "xhArr", "⟺" }, - { "xharr", "⟷" }, - { "xlArr", "⟸" }, - { "xlarr", "⟵" }, - { "xmap", "⟼" }, - { "xrArr", "⟹" }, - { "xrarr", "⟶" }, - { "zigrarr", "⇝" }, - { "ac", "∾" }, - { "acE", "∾̳" }, - { "amalg", "⨿" }, - { "barvee", "⊽" }, - { "Barwed", "⌆" }, - { "barwed", "⌅" }, - { "bsolb", "⧅" }, - { "Cap", "⋒" }, - { "capand", "⩄" }, - { "capbrcup", "⩉" }, - { "capcap", "⩋" }, - { "capcup", "⩇" }, - { "capdot", "⩀" }, - { "caps", "∩︀" }, - { "ccaps", "⩍" }, - { "ccups", "⩌" }, - { "ccupssm", "⩐" }, - { "coprod", "∐" }, - { "Cup", "⋓" }, - { "cupbrcap", "⩈" }, - { "cupcap", "⩆" }, - { "cupcup", "⩊" }, - { "cupdot", "⊍" }, - { "cupor", "⩅" }, - { "cups", "∪︀" }, - { "cuvee", "⋎" }, - { "cuwed", "⋏" }, - { "Dagger", "‡" }, - { "dagger", "†" }, - { "diam", "⋄" }, - { "divonx", "⋇" }, - { "eplus", "⩱" }, - { "hercon", "⊹" }, - { "intcal", "⊺" }, - { "iprod", "⨼" }, - { "loplus", "⨭" }, - { "lotimes", "⨴" }, - { "lthree", "⋋" }, - { "ltimes", "⋉" }, - { "midast", "*" }, - { "minusb", "⊟" }, - { "minusd", "∸" }, - { "minusdu", "⨪" }, - { "ncap", "⩃" }, - { "ncup", "⩂" }, - { "oast", "⊛" }, - { "ocir", "⊚" }, - { "odash", "⊝" }, - { "odiv", "⨸" }, - { "odot", "⊙" }, - { "odsold", "⦼" }, - { "ofcir", "⦿" }, - { "ogt", "⧁" }, - { "ohbar", "⦵" }, - { "olcir", "⦾" }, - { "olt", "⧀" }, - { "omid", "⦶" }, - { "ominus", "⊖" }, - { "opar", "⦷" }, - { "operp", "⦹" }, - { "oplus", "⊕" }, - { "osol", "⊘" }, - { "Otimes", "⨷" }, - { "otimes", "⊗" }, - { "otimesas", "⨶" }, - { "ovbar", "⌽" }, - { "plusacir", "⨣" }, - { "plusb", "⊞" }, - { "pluscir", "⨢" }, - { "plusdo", "∔" }, - { "plusdu", "⨥" }, - { "pluse", "⩲" }, - { "plussim", "⨦" }, - { "plustwo", "⨧" }, - { "prod", "∏" }, - { "race", "⧚" }, - { "roplus", "⨮" }, - { "rotimes", "⨵" }, - { "rthree", "⋌" }, - { "rtimes", "⋊" }, - { "sdot", "⋅" }, - { "sdotb", "⊡" }, - { "setmn", "∖" }, - { "simplus", "⨤" }, - { "smashp", "⨳" }, - { "solb", "⧄" }, - { "sqcap", "⊓" }, - { "sqcaps", "⊓︀" }, - { "sqcup", "⊔" }, - { "sqcups", "⊔︀" }, - { "ssetmn", "∖" }, - { "sstarf", "⋆" }, - { "subdot", "⪽" }, - { "sum", "∑" }, - { "supdot", "⪾" }, - { "timesb", "⊠" }, - { "timesbar", "⨱" }, - { "timesd", "⨰" }, - { "tridot", "◬" }, - { "triminus", "⨺" }, - { "triplus", "⨹" }, - { "trisb", "⧍" }, - { "tritime", "⨻" }, - { "uplus", "⊎" }, - { "veebar", "⊻" }, - { "wedbar", "⩟" }, - { "wreath", "≀" }, - { "xcap", "⋂" }, - { "xcirc", "◯" }, - { "xcup", "⋃" }, - { "xdtri", "▽" }, - { "xodot", "⨀" }, - { "xoplus", "⨁" }, - { "xotime", "⨂" }, - { "xsqcup", "⨆" }, - { "xuplus", "⨄" }, - { "xutri", "△" }, - { "xvee", "⋁" }, - { "xwedge", "⋀" }, - { "dlcorn", "⌞" }, - { "drcorn", "⌟" }, - { "gtlPar", "⦕" }, - { "langd", "⦑" }, - { "lbrke", "⦋" }, - { "lbrksld", "⦏" }, - { "lbrkslu", "⦍" }, - { "lceil", "⌈" }, - { "lfloor", "⌊" }, - { "lmoust", "⎰" }, - { "lparlt", "⦓" }, - { "ltrPar", "⦖" }, - { "rangd", "⦒" }, - { "rbrke", "⦌" }, - { "rbrksld", "⦎" }, - { "rbrkslu", "⦐" }, - { "rceil", "⌉" }, - { "rfloor", "⌋" }, - { "rmoust", "⎱" }, - { "rpargt", "⦔" }, - { "ulcorn", "⌜" }, - { "urcorn", "⌝" }, - { "gnap", "⪊" }, - { "gnE", "≩" }, - { "gne", "⪈" }, - { "gnsim", "⋧" }, - { "gvnE", "≩︀" }, - { "lnap", "⪉" }, - { "lnE", "≨" }, - { "lne", "⪇" }, - { "lnsim", "⋦" }, - { "lvnE", "≨︀" }, - { "nap", "≉" }, - { "napE", "⩰̸" }, - { "napid", "≋̸" }, - { "ncong", "≇" }, - { "ncongdot", "⩭̸" }, - { "nequiv", "≢" }, - { "ngE", "≧̸" }, - { "nge", "≱" }, - { "nges", "⩾̸" }, - { "nGg", "⋙̸" }, - { "ngsim", "≵" }, - { "nGt", "≫⃒" }, - { "ngt", "≯" }, - { "nGtv", "≫̸" }, - { "nlE", "≦̸" }, - { "nle", "≰" }, - { "nles", "⩽̸" }, - { "nLl", "⋘̸" }, - { "nlsim", "≴" }, - { "nLt", "≪⃒" }, - { "nlt", "≮" }, - { "nltri", "⋪" }, - { "nltrie", "⋬" }, - { "nLtv", "≪̸" }, - { "nmid", "∤" }, - { "npar", "∦" }, - { "npr", "⊀" }, - { "nprcue", "⋠" }, - { "npre", "⪯̸" }, - { "nrtri", "⋫" }, - { "nrtrie", "⋭" }, - { "nsc", "⊁" }, - { "nsccue", "⋡" }, - { "nsce", "⪰̸" }, - { "nsim", "≁" }, - { "nsime", "≄" }, - { "nsmid", "∤" }, - { "nspar", "∦" }, - { "nsqsube", "⋢" }, - { "nsqsupe", "⋣" }, - { "nsub", "⊄" }, - { "nsubE", "⫅̸" }, - { "nsube", "⊈" }, - { "nsup", "⊅" }, - { "nsupE", "⫆̸" }, - { "nsupe", "⊉" }, - { "ntgl", "≹" }, - { "ntlg", "≸" }, - { "nvap", "≍⃒" }, - { "nVDash", "⊯" }, - { "nVdash", "⊮" }, - { "nvDash", "⊭" }, - { "nvdash", "⊬" }, - { "nvge", "≥⃒" }, - { "nvgt", ">⃒" }, - { "nvle", "≤⃒" }, - { "nvlt", "<⃒" }, - { "nvltrie", "⊴⃒" }, - { "nvrtrie", "⊵⃒" }, - { "nvsim", "∼⃒" }, - { "parsim", "⫳" }, - { "prnap", "⪹" }, - { "prnE", "⪵" }, - { "prnsim", "⋨" }, - { "rnmid", "⫮" }, - { "scnap", "⪺" }, - { "scnE", "⪶" }, - { "scnsim", "⋩" }, - { "simne", "≆" }, - { "solbar", "⌿" }, - { "subnE", "⫋" }, - { "subne", "⊊" }, - { "supnE", "⫌" }, - { "supne", "⊋" }, - { "vnsub", "⊂⃒" }, - { "vnsup", "⊃⃒" }, - { "vsubnE", "⫋︀" }, - { "vsubne", "⊊︀" }, - { "vsupnE", "⫌︀" }, - { "vsupne", "⊋︀" }, - { "ang", "∠" }, - { "ange", "⦤" }, - { "angmsd", "∡" }, - { "angmsdaa", "⦨" }, - { "angmsdab", "⦩" }, - { "angmsdac", "⦪" }, - { "angmsdad", "⦫" }, - { "angmsdae", "⦬" }, - { "angmsdaf", "⦭" }, - { "angmsdag", "⦮" }, - { "angmsdah", "⦯" }, - { "angrtvb", "⊾" }, - { "angrtvbd", "⦝" }, - { "bbrk", "⎵" }, - { "bemptyv", "⦰" }, - { "beth", "ℶ" }, - { "boxbox", "⧉" }, - { "bprime", "‵" }, - { "bsemi", "⁏" }, - { "cemptyv", "⦲" }, - { "cirE", "⧃" }, - { "cirscir", "⧂" }, - { "comp", "∁" }, - { "daleth", "ℸ" }, - { "demptyv", "⦱" }, - { "ell", "ℓ" }, - { "empty", "∅" }, - { "emptyv", "∅" }, - { "gimel", "ℷ" }, - { "iiota", "℩" }, - { "image", "ℑ" }, - { "imath", "ı" }, - { "jmath", "j" }, - { "laemptyv", "⦴" }, - { "lltri", "◺" }, - { "lrtri", "⊿" }, - { "mho", "℧" }, - { "nang", "∠⃒" }, - { "nexist", "∄" }, - { "oS", "Ⓢ" }, - { "planck", "ℏ" }, - { "plankv", "ℏ" }, - { "raemptyv", "⦳" }, - { "range", "⦥" }, - { "real", "ℜ" }, - { "tbrk", "⎴" }, - { "ultri", "◸" }, - { "urtri", "◹" }, - { "vzigzag", "⦚" }, - { "weierp", "℘" }, - { "apE", "⩰" }, - { "ape", "≊" }, - { "apid", "≋" }, - { "asymp", "≈" }, - { "Barv", "⫧" }, - { "bcong", "≌" }, - { "bepsi", "϶" }, - { "bowtie", "⋈" }, - { "bsim", "∽" }, - { "bsime", "⋍" }, - { "bsolhsub", "\⊂" }, - { "bump", "≎" }, - { "bumpE", "⪮" }, - { "bumpe", "≏" }, - { "cire", "≗" }, - { "Colon", "∷" }, - { "Colone", "⩴" }, - { "colone", "≔" }, - { "congdot", "⩭" }, - { "csub", "⫏" }, - { "csube", "⫑" }, - { "csup", "⫐" }, - { "csupe", "⫒" }, - { "cuepr", "⋞" }, - { "cuesc", "⋟" }, - { "Dashv", "⫤" }, - { "dashv", "⊣" }, - { "easter", "⩮" }, - { "ecir", "≖" }, - { "ecolon", "≕" }, - { "eDDot", "⩷" }, - { "eDot", "≑" }, - { "efDot", "≒" }, - { "eg", "⪚" }, - { "egs", "⪖" }, - { "egsdot", "⪘" }, - { "el", "⪙" }, - { "els", "⪕" }, - { "elsdot", "⪗" }, - { "equest", "≟" }, - { "equivDD", "⩸" }, - { "erDot", "≓" }, - { "esdot", "≐" }, - { "Esim", "⩳" }, - { "esim", "≂" }, - { "fork", "⋔" }, - { "forkv", "⫙" }, - { "frown", "⌢" }, - { "gap", "⪆" }, - { "gE", "≧" }, - { "gEl", "⪌" }, - { "gel", "⋛" }, - { "ges", "⩾" }, - { "gescc", "⪩" }, - { "gesdot", "⪀" }, - { "gesdoto", "⪂" }, - { "gesdotol", "⪄" }, - { "gesl", "⋛︀" }, - { "gesles", "⪔" }, - { "Gg", "⋙" }, - { "gl", "≷" }, - { "gla", "⪥" }, - { "glE", "⪒" }, - { "glj", "⪤" }, - { "gsim", "≳" }, - { "gsime", "⪎" }, - { "gsiml", "⪐" }, - { "Gt", "≫" }, - { "gtcc", "⪧" }, - { "gtcir", "⩺" }, - { "gtdot", "⋗" }, - { "gtquest", "⩼" }, - { "gtrarr", "⥸" }, - { "homtht", "∻" }, - { "lap", "⪅" }, - { "lat", "⪫" }, - { "late", "⪭" }, - { "lates", "⪭︀" }, - { "lE", "≦" }, - { "lEg", "⪋" }, - { "leg", "⋚" }, - { "les", "⩽" }, - { "lescc", "⪨" }, - { "lesdot", "⩿" }, - { "lesdoto", "⪁" }, - { "lesdotor", "⪃" }, - { "lesg", "⋚︀" }, - { "lesges", "⪓" }, - { "lg", "≶" }, - { "lgE", "⪑" }, - { "Ll", "⋘" }, - { "lsim", "≲" }, - { "lsime", "⪍" }, - { "lsimg", "⪏" }, - { "Lt", "≪" }, - { "ltcc", "⪦" }, - { "ltcir", "⩹" }, - { "ltdot", "⋖" }, - { "ltlarr", "⥶" }, - { "ltquest", "⩻" }, - { "ltrie", "⊴" }, - { "mcomma", "⨩" }, - { "mDDot", "∺" }, - { "mid", "∣" }, - { "mlcp", "⫛" }, - { "models", "⊧" }, - { "mstpos", "∾" }, - { "Pr", "⪻" }, - { "pr", "≺" }, - { "prap", "⪷" }, - { "prcue", "≼" }, - { "prE", "⪳" }, - { "pre", "⪯" }, - { "prsim", "≾" }, - { "prurel", "⊰" }, - { "ratio", "∶" }, - { "rtrie", "⊵" }, - { "rtriltri", "⧎" }, - { "Sc", "⪼" }, - { "sc", "≻" }, - { "scap", "⪸" }, - { "sccue", "≽" }, - { "scE", "⪴" }, - { "sce", "⪰" }, - { "scsim", "≿" }, - { "sdote", "⩦" }, - { "simg", "⪞" }, - { "simgE", "⪠" }, - { "siml", "⪝" }, - { "simlE", "⪟" }, - { "smid", "∣" }, - { "smile", "⌣" }, - { "smt", "⪪" }, - { "smte", "⪬" }, - { "smtes", "⪬︀" }, - { "spar", "∥" }, - { "sqsub", "⊏" }, - { "sqsube", "⊑" }, - { "sqsup", "⊐" }, - { "sqsupe", "⊒" }, - { "Sub", "⋐" }, - { "subE", "⫅" }, - { "subedot", "⫃" }, - { "submult", "⫁" }, - { "subplus", "⪿" }, - { "subrarr", "⥹" }, - { "subsim", "⫇" }, - { "subsub", "⫕" }, - { "subsup", "⫓" }, - { "Sup", "⋑" }, - { "supdsub", "⫘" }, - { "supE", "⫆" }, - { "supedot", "⫄" }, - { "suphsol", "⊅" }, - { "suphsub", "⫗" }, - { "suplarr", "⥻" }, - { "supmult", "⫂" }, - { "supplus", "⫀" }, - { "supsim", "⫈" }, - { "supsub", "⫔" }, - { "supsup", "⫖" }, - { "thkap", "≈" }, - { "topfork", "⫚" }, - { "trie", "≜" }, - { "twixt", "≬" }, - { "Vbar", "⫫" }, - { "vBar", "⫨" }, - { "vBarv", "⫩" }, - { "VDash", "⊫" }, - { "Vdash", "⊩" }, - { "vDash", "⊨" }, - { "vdash", "⊢" }, - { "Vdashl", "⫦" }, - { "vltri", "⊲" }, - { "vprop", "∝" }, - { "vrtri", "⊳" }, - { "Vvdash", "⊪" }, - { "alpha", "α" }, - { "beta", "β" }, - { "chi", "χ" }, - { "Delta", "Δ" }, - { "delta", "δ" }, - { "epsi", "ε" }, - { "epsiv", "ɛ" }, - { "eta", "η" }, - { "Gamma", "Γ" }, - { "gamma", "γ" }, - { "Gammad", "Ϝ" }, - { "gammad", "ϝ" }, - { "iota", "ι" }, - { "kappa", "κ" }, - { "kappav", "ϰ" }, - { "Lambda", "Λ" }, - { "lambda", "λ" }, - { "mu", "μ" }, - { "nu", "ν" }, - { "Omega", "Ω" }, - { "omega", "ω" }, - { "Phi", "Φ" }, - { "phi", "ϕ" }, - { "phiv", "φ" }, - { "Pi", "Π" }, - { "pi", "π" }, - { "piv", "ϖ" }, - { "Psi", "Ψ" }, - { "psi", "ψ" }, - { "rho", "ρ" }, - { "rhov", "ϱ" }, - { "Sigma", "Σ" }, - { "sigma", "σ" }, - { "sigmav", "ς" }, - { "tau", "τ" }, - { "Theta", "Θ" }, - { "theta", "θ" }, - { "thetav", "ϑ" }, - { "Upsi", "ϒ" }, - { "upsi", "υ" }, - { "Xi", "Ξ" }, - { "xi", "ξ" }, - { "zeta", "ζ" }, - { "Cfr", "ℭ" }, - { "Hfr", "ℌ" }, - { "Ifr", "ℑ" }, - { "Rfr", "ℜ" }, - { "Zfr", "ℨ" }, - { "Copf", "ℂ" }, - { "Hopf", "ℍ" }, - { "Nopf", "ℕ" }, - { "Popf", "ℙ" }, - { "Qopf", "ℚ" }, - { "Ropf", "ℝ" }, - { "Zopf", "ℤ" }, - { "Bscr", "ℬ" }, - { "Escr", "ℰ" }, - { "escr", "ℯ" }, - { "Fscr", "ℱ" }, - { "gscr", "ℊ" }, - { "Hscr", "ℋ" }, - { "Iscr", "ℐ" }, - { "Lscr", "ℒ" }, - { "Mscr", "ℳ" }, - { "oscr", "ℴ" }, - { "pscr", "𝓅" }, - { "Rscr", "ℛ" }, - { "acd", "∿" }, - { "aleph", "ℵ" }, - { "And", "⩓" }, - { "and", "∧" }, - { "andand", "⩕" }, - { "andd", "⩜" }, - { "andslope", "⩘" }, - { "andv", "⩚" }, - { "angrt", "∟" }, - { "angsph", "∢" }, - { "angst", "Å" }, - { "ap", "≈" }, - { "apacir", "⩯" }, - { "awconint", "∳" }, - { "awint", "⨑" }, - { "becaus", "∵" }, - { "bernou", "ℬ" }, - { "bne", "=⃥" }, - { "bnequiv", "≡⃥" }, - { "bNot", "⫭" }, - { "bnot", "⌐" }, - { "bottom", "⊥" }, - { "cap", "∩" }, - { "Cconint", "∰" }, - { "cirfnint", "⨐" }, - { "compfn", "∘" }, - { "cong", "≅" }, - { "Conint", "∯" }, - { "conint", "∮" }, - { "ctdot", "⋯" }, - { "cup", "∪" }, - { "cwconint", "∲" }, - { "cwint", "∱" }, - { "cylcty", "⌭" }, - { "disin", "⋲" }, - { "Dot", "¨" }, - { "DotDot", "⃜" }, - { "dsol", "⧶" }, - { "dtdot", "⋱" }, - { "dwangle", "⦦" }, - { "epar", "⋕" }, - { "eparsl", "⧣" }, - { "equiv", "≡" }, - { "eqvparsl", "⧥" }, - { "exist", "∃" }, - { "fnof", "ƒ" }, - { "forall", "∀" }, - { "fpartint", "⨍" }, - { "ge", "≥" }, - { "hamilt", "ℋ" }, - { "iff", "⇔" }, - { "iinfin", "⧜" }, - { "infin", "∞" }, - { "Int", "∬" }, - { "int", "∫" }, - { "intlarhk", "⨗" }, - { "isin", "∈" }, - { "isindot", "⋵" }, - { "isinE", "⋹" }, - { "isins", "⋴" }, - { "isinsv", "⋳" }, - { "isinv", "∈" }, - { "lagran", "ℒ" }, - { "Lang", "《" }, - { "lang", "〈" }, - { "lArr", "⇐" }, - { "lbbrk", "〔" }, - { "le", "≤" }, - { "loang", "〘" }, - { "lobrk", "〚" }, - { "lopar", "⦅" }, - { "lowast", "∗" }, - { "minus", "−" }, - { "mnplus", "∓" }, - { "nabla", "∇" }, - { "ne", "≠" }, - { "nedot", "≐̸" }, - { "nhpar", "⫲" }, - { "ni", "∋" }, - { "nis", "⋼" }, - { "nisd", "⋺" }, - { "niv", "∋" }, - { "Not", "⫬" }, - { "notin", "∉" }, - { "notindot", "⋵̸" }, - { "notinva", "∉" }, - { "notinvb", "⋷" }, - { "notinvc", "⋶" }, - { "notni", "∌" }, - { "notniva", "∌" }, - { "notnivb", "⋾" }, - { "notnivc", "⋽" }, - { "nparsl", "⫽⃥" }, - { "npart", "∂̸" }, - { "npolint", "⨔" }, - { "nvinfin", "⧞" }, - { "olcross", "⦻" }, - { "Or", "⩔" }, - { "or", "∨" }, - { "ord", "⩝" }, - { "order", "ℴ" }, - { "oror", "⩖" }, - { "orslope", "⩗" }, - { "orv", "⩛" }, - { "par", "∥" }, - { "parsl", "⫽" }, - { "part", "∂" }, - { "permil", "‰" }, - { "perp", "⊥" }, - { "pertenk", "‱" }, - { "phmmat", "ℳ" }, - { "pointint", "⨕" }, - { "Prime", "″" }, - { "prime", "′" }, - { "profalar", "⌮" }, - { "profline", "⌒" }, - { "profsurf", "⌓" }, - { "prop", "∝" }, - { "qint", "⨌" }, - { "qprime", "⁗" }, - { "quatint", "⨖" }, - { "radic", "√" }, - { "Rang", "》" }, - { "rang", "〉" }, - { "rArr", "⇒" }, - { "rbbrk", "〕" }, - { "roang", "〙" }, - { "robrk", "〛" }, - { "ropar", "⦆" }, - { "rppolint", "⨒" }, - { "scpolint", "⨓" }, - { "sim", "∼" }, - { "simdot", "⩪" }, - { "sime", "≃" }, - { "smeparsl", "⧤" }, - { "square", "□" }, - { "squarf", "▪" }, - { "sub", "⊂" }, - { "sube", "⊆" }, - { "sup", "⊃" }, - { "supe", "⊇" }, - { "tdot", "⃛" }, - { "there4", "∴" }, - { "tint", "∭" }, - { "top", "⊤" }, - { "topbot", "⌶" }, - { "topcir", "⫱" }, - { "tprime", "‴" }, - { "utdot", "⋰" }, - { "uwangle", "⦧" }, - { "vangrt", "⦜" }, - { "veeeq", "≚" }, - { "Verbar", "‖" }, - { "wedgeq", "≙" }, - { "xnis", "⋻" }, - { "boxDL", "╗" }, - { "boxDl", "╖" }, - { "boxdL", "╕" }, - { "boxdl", "┐" }, - { "boxDR", "╔" }, - { "boxDr", "╓" }, - { "boxdR", "╒" }, - { "boxdr", "┌" }, - { "boxH", "═" }, - { "boxh", "─" }, - { "boxHD", "╦" }, - { "boxHd", "╤" }, - { "boxhD", "╥" }, - { "boxhd", "┬" }, - { "boxHU", "╩" }, - { "boxHu", "╧" }, - { "boxhU", "╨" }, - { "boxhu", "┴" }, - { "boxUL", "╝" }, - { "boxUl", "╜" }, - { "boxuL", "╛" }, - { "boxul", "┘" }, - { "boxUR", "╚" }, - { "boxUr", "╙" }, - { "boxuR", "╘" }, - { "boxur", "└" }, - { "boxV", "║" }, - { "boxv", "│" }, - { "boxVH", "╬" }, - { "boxVh", "╫" }, - { "boxvH", "╪" }, - { "boxvh", "┼" }, - { "boxVL", "╣" }, - { "boxVl", "╢" }, - { "boxvL", "╡" }, - { "boxvl", "┤" }, - { "boxVR", "╠" }, - { "boxVr", "╟" }, - { "boxvR", "╞" }, - { "boxvr", "├" }, - { "Acy", "А" }, - { "acy", "а" }, - { "Bcy", "Б" }, - { "bcy", "б" }, - { "CHcy", "Ч" }, - { "chcy", "ч" }, - { "Dcy", "Д" }, - { "dcy", "д" }, - { "Ecy", "Э" }, - { "ecy", "э" }, - { "Fcy", "Ф" }, - { "fcy", "ф" }, - { "Gcy", "Г" }, - { "gcy", "г" }, - { "HARDcy", "Ъ" }, - { "hardcy", "ъ" }, - { "Icy", "И" }, - { "icy", "и" }, - { "IEcy", "Е" }, - { "iecy", "е" }, - { "IOcy", "Ё" }, - { "iocy", "ё" }, - { "Jcy", "Й" }, - { "jcy", "й" }, - { "Kcy", "К" }, - { "kcy", "к" }, - { "KHcy", "Х" }, - { "khcy", "х" }, - { "Lcy", "Л" }, - { "lcy", "л" }, - { "Mcy", "М" }, - { "mcy", "м" }, - { "Ncy", "Н" }, - { "ncy", "н" }, - { "numero", "№" }, - { "Ocy", "О" }, - { "ocy", "о" }, - { "Pcy", "П" }, - { "pcy", "п" }, - { "Rcy", "Р" }, - { "rcy", "р" }, - { "Scy", "С" }, - { "scy", "с" }, - { "SHCHcy", "Щ" }, - { "shchcy", "щ" }, - { "SHcy", "Ш" }, - { "shcy", "ш" }, - { "SOFTcy", "Ь" }, - { "softcy", "ь" }, - { "Tcy", "Т" }, - { "tcy", "т" }, - { "TScy", "Ц" }, - { "tscy", "ц" }, - { "Ucy", "У" }, - { "ucy", "у" }, - { "Vcy", "В" }, - { "vcy", "в" }, - { "YAcy", "Я" }, - { "yacy", "я" }, - { "Ycy", "Ы" }, - { "ycy", "ы" }, - { "YUcy", "Ю" }, - { "yucy", "ю" }, - { "Zcy", "З" }, - { "zcy", "з" }, - { "ZHcy", "Ж" }, - { "zhcy", "ж" }, - { "DJcy", "Ђ" }, - { "djcy", "ђ" }, - { "DScy", "Ѕ" }, - { "dscy", "ѕ" }, - { "DZcy", "Џ" }, - { "dzcy", "џ" }, - { "GJcy", "Ѓ" }, - { "gjcy", "ѓ" }, - { "Iukcy", "І" }, - { "iukcy", "і" }, - { "Jsercy", "Ј" }, - { "jsercy", "ј" }, - { "Jukcy", "Є" }, - { "jukcy", "є" }, - { "KJcy", "Ќ" }, - { "kjcy", "ќ" }, - { "LJcy", "Љ" }, - { "ljcy", "љ" }, - { "NJcy", "Њ" }, - { "njcy", "њ" }, - { "TSHcy", "Ћ" }, - { "tshcy", "ћ" }, - { "Ubrcy", "Ў" }, - { "ubrcy", "ў" }, - { "YIcy", "Ї" }, - { "yicy", "ї" }, - { "acute", "´" }, - { "breve", "˘" }, - { "caron", "ˇ" }, - { "cedil", "¸" }, - { "circ", "ˆ" }, - { "dblac", "˝" }, - { "die", "¨" }, - { "dot", "˙" }, - { "grave", "`" }, - { "macr", "¯" }, - { "ogon", "˛" }, - { "ring", "˚" }, - { "tilde", "˜" }, - { "uml", "¨" }, - { "Aacute", "Á" }, - { "aacute", "á" }, - { "Acirc", "Â" }, - { "acirc", "â" }, - { "AElig", "Æ" }, - { "aelig", "æ" }, - { "Agrave", "À" }, - { "agrave", "à" }, - { "Aring", "Å" }, - { "aring", "å" }, - { "Atilde", "Ã" }, - { "atilde", "ã" }, - { "Auml", "Ä" }, - { "auml", "ä" }, - { "Ccedil", "Ç" }, - { "ccedil", "ç" }, - { "Eacute", "É" }, - { "eacute", "é" }, - { "Ecirc", "Ê" }, - { "ecirc", "ê" }, - { "Egrave", "È" }, - { "egrave", "è" }, - { "ETH", "Ð" }, - { "eth", "ð" }, - { "Euml", "Ë" }, - { "euml", "ë" }, - { "Iacute", "Í" }, - { "iacute", "í" }, - { "Icirc", "Î" }, - { "icirc", "î" }, - { "Igrave", "Ì" }, - { "igrave", "ì" }, - { "Iuml", "Ï" }, - { "iuml", "ï" }, - { "Ntilde", "Ñ" }, - { "ntilde", "ñ" }, - { "Oacute", "Ó" }, - { "oacute", "ó" }, - { "Ocirc", "Ô" }, - { "ocirc", "ô" }, - { "Ograve", "Ò" }, - { "ograve", "ò" }, - { "Oslash", "Ø" }, - { "oslash", "ø" }, - { "Otilde", "Õ" }, - { "otilde", "õ" }, - { "Ouml", "Ö" }, - { "ouml", "ö" }, - { "szlig", "ß" }, - { "THORN", "Þ" }, - { "thorn", "þ" }, - { "Uacute", "Ú" }, - { "uacute", "ú" }, - { "Ucirc", "Û" }, - { "ucirc", "û" }, - { "Ugrave", "Ù" }, - { "ugrave", "ù" }, - { "Uuml", "Ü" }, - { "uuml", "ü" }, - { "Yacute", "Ý" }, - { "yacute", "ý" }, - { "yuml", "ÿ" }, - { "Abreve", "Ă" }, - { "abreve", "ă" }, - { "Amacr", "Ā" }, - { "amacr", "ā" }, - { "Aogon", "Ą" }, - { "aogon", "ą" }, - { "Cacute", "Ć" }, - { "cacute", "ć" }, - { "Ccaron", "Č" }, - { "ccaron", "č" }, - { "Ccirc", "Ĉ" }, - { "ccirc", "ĉ" }, - { "Cdot", "Ċ" }, - { "cdot", "ċ" }, - { "Dcaron", "Ď" }, - { "dcaron", "ď" }, - { "Dstrok", "Đ" }, - { "dstrok", "đ" }, - { "Ecaron", "Ě" }, - { "ecaron", "ě" }, - { "Edot", "Ė" }, - { "edot", "ė" }, - { "Emacr", "Ē" }, - { "emacr", "ē" }, - { "ENG", "Ŋ" }, - { "eng", "ŋ" }, - { "Eogon", "Ę" }, - { "eogon", "ę" }, - { "gacute", "ǵ" }, - { "Gbreve", "Ğ" }, - { "gbreve", "ğ" }, - { "Gcedil", "Ģ" }, - { "Gcirc", "Ĝ" }, - { "gcirc", "ĝ" }, - { "Gdot", "Ġ" }, - { "gdot", "ġ" }, - { "Hcirc", "Ĥ" }, - { "hcirc", "ĥ" }, - { "Hstrok", "Ħ" }, - { "hstrok", "ħ" }, - { "Idot", "İ" }, - { "IJlig", "IJ" }, - { "ijlig", "ij" }, - { "Imacr", "Ī" }, - { "imacr", "ī" }, - { "inodot", "ı" }, - { "Iogon", "Į" }, - { "iogon", "į" }, - { "Itilde", "Ĩ" }, - { "itilde", "ĩ" }, - { "Jcirc", "Ĵ" }, - { "jcirc", "ĵ" }, - { "Kcedil", "Ķ" }, - { "kcedil", "ķ" }, - { "kgreen", "ĸ" }, - { "Lacute", "Ĺ" }, - { "lacute", "ĺ" }, - { "Lcaron", "Ľ" }, - { "lcaron", "ľ" }, - { "Lcedil", "Ļ" }, - { "lcedil", "ļ" }, - { "Lmidot", "Ŀ" }, - { "lmidot", "ŀ" }, - { "Lstrok", "Ł" }, - { "lstrok", "ł" }, - { "Nacute", "Ń" }, - { "nacute", "ń" }, - { "napos", "ʼn" }, - { "Ncaron", "Ň" }, - { "ncaron", "ň" }, - { "Ncedil", "Ņ" }, - { "ncedil", "ņ" }, - { "Odblac", "Ő" }, - { "odblac", "ő" }, - { "OElig", "Œ" }, - { "oelig", "œ" }, - { "Omacr", "Ō" }, - { "omacr", "ō" }, - { "Racute", "Ŕ" }, - { "racute", "ŕ" }, - { "Rcaron", "Ř" }, - { "rcaron", "ř" }, - { "Rcedil", "Ŗ" }, - { "rcedil", "ŗ" }, - { "Sacute", "Ś" }, - { "sacute", "ś" }, - { "Scaron", "Š" }, - { "scaron", "š" }, - { "Scedil", "Ş" }, - { "scedil", "ş" }, - { "Scirc", "Ŝ" }, - { "scirc", "ŝ" }, - { "Tcaron", "Ť" }, - { "tcaron", "ť" }, - { "Tcedil", "Ţ" }, - { "tcedil", "ţ" }, - { "Tstrok", "Ŧ" }, - { "tstrok", "ŧ" }, - { "Ubreve", "Ŭ" }, - { "ubreve", "ŭ" }, - { "Udblac", "Ű" }, - { "udblac", "ű" }, - { "Umacr", "Ū" }, - { "umacr", "ū" }, - { "Uogon", "Ų" }, - { "uogon", "ų" }, - { "Uring", "Ů" }, - { "uring", "ů" }, - { "Utilde", "Ũ" }, - { "utilde", "ũ" }, - { "Wcirc", "Ŵ" }, - { "wcirc", "ŵ" }, - { "Ycirc", "Ŷ" }, - { "ycirc", "ŷ" }, - { "Yuml", "Ÿ" }, - { "Zacute", "Ź" }, - { "zacute", "ź" }, - { "Zcaron", "Ž" }, - { "zcaron", "ž" }, - { "Zdot", "Ż" }, - { "zdot", "ż" }, - { "apos", "'" }, - { "ast", "*" }, - { "brvbar", "¦" }, - { "bsol", "\" }, - { "cent", "¢" }, - { "colon", ":" }, - { "comma", "," }, - { "commat", "@" }, - { "copy", "©" }, - { "curren", "¤" }, - { "darr", "↓" }, - { "deg", "°" }, - { "divide", "÷" }, - { "dollar", "$" }, - { "equals", "=" }, - { "excl", "!" }, - { "frac12", "½" }, - { "frac14", "¼" }, - { "frac18", "⅛" }, - { "frac34", "¾" }, - { "frac38", "⅜" }, - { "frac58", "⅝" }, - { "frac78", "⅞" }, - { "gt", ">" }, - { "half", "½" }, - { "horbar", "―" }, - { "hyphen", "‐" }, - { "iexcl", "¡" }, - { "iquest", "¿" }, - { "laquo", "«" }, - { "larr", "←" }, - { "lcub", "{" }, - { "ldquo", "“" }, - { "lowbar", "_" }, - { "lpar", "(" }, - { "lsqb", "[" }, - { "lsquo", "‘" }, - { "lt", "<" }, - { "micro", "µ" }, - { "middot", "·" }, - { "nbsp", " " }, - { "not", "¬" }, - { "num", "#" }, - { "ohm", "Ω" }, - { "ordf", "ª" }, - { "ordm", "º" }, - { "para", "¶" }, - { "percnt", "%" }, - { "period", "." }, - { "plus", "+" }, - { "plusmn", "±" }, - { "pound", "£" }, - { "quest", "?" }, - { "quot", """ }, - { "raquo", "»" }, - { "rarr", "→" }, - { "rcub", "}" }, - { "rdquo", "”" }, - { "reg", "®" }, - { "rpar", ")" }, - { "rsqb", "]" }, - { "rsquo", "’" }, - { "sect", "§" }, - { "semi", ";" }, - { "shy", "­" }, - { "sol", "/" }, - { "sung", "♪" }, - { "sup1", "¹" }, - { "sup2", "²" }, - { "sup3", "³" }, - { "times", "×" }, - { "trade", "™" }, - { "uarr", "↑" }, - { "verbar", "|" }, - { "yen", "¥" }, - { "blank", "␣" }, - { "blk12", "▒" }, - { "blk14", "░" }, - { "blk34", "▓" }, - { "block", "█" }, - { "bull", "•" }, - { "caret", "⁁" }, - { "check", "✓" }, - { "cir", "○" }, - { "clubs", "♣" }, - { "copysr", "℗" }, - { "cross", "✗" }, - { "Dagger", "‡" }, - { "dagger", "†" }, - { "dash", "‐" }, - { "diams", "♦" }, - { "dlcrop", "⌍" }, - { "drcrop", "⌌" }, - { "dtri", "▿" }, - { "dtrif", "▾" }, - { "emsp", " " }, - { "emsp13", " " }, - { "emsp14", " " }, - { "ensp", " " }, - { "female", "♀" }, - { "ffilig", "ffi" }, - { "fflig", "ff" }, - { "ffllig", "ffl" }, - { "filig", "fi" }, - { "flat", "♭" }, - { "fllig", "fl" }, - { "frac13", "⅓" }, - { "frac15", "⅕" }, - { "frac16", "⅙" }, - { "frac23", "⅔" }, - { "frac25", "⅖" }, - { "frac35", "⅗" }, - { "frac45", "⅘" }, - { "frac56", "⅚" }, - { "hairsp", " " }, - { "hearts", "♥" }, - { "hellip", "…" }, - { "hybull", "⁃" }, - { "incare", "℅" }, - { "ldquor", "„" }, - { "lhblk", "▄" }, - { "loz", "◊" }, - { "lozf", "⧫" }, - { "lsquor", "‚" }, - { "ltri", "◃" }, - { "ltrif", "◂" }, - { "male", "♂" }, - { "malt", "✠" }, - { "marker", "▮" }, - { "mdash", "—" }, - { "mldr", "…" }, - { "natur", "♮" }, - { "ndash", "–" }, - { "nldr", "‥" }, - { "numsp", " " }, - { "phone", "☎" }, - { "puncsp", " " }, - { "rdquor", "”" }, - { "rect", "▭" }, - { "rsquor", "’" }, - { "rtri", "▹" }, - { "rtrif", "▸" }, - { "rx", "℞" }, - { "sext", "✶" }, - { "sharp", "♯" }, - { "spades", "♠" }, - { "squ", "□" }, - { "squf", "▪" }, - { "star", "☆" }, - { "starf", "★" }, - { "target", "⌖" }, - { "telrec", "⌕" }, - { "thinsp", " " }, - { "uhblk", "▀" }, - { "ulcrop", "⌏" }, - { "urcrop", "⌎" }, - { "utri", "▵" }, - { "utrif", "▴" }, - { "vellip", "⋮" }, - { "af", "⁡" }, - { "asympeq", "≍" }, - { "Cross", "⨯" }, - { "DD", "ⅅ" }, - { "dd", "ⅆ" }, - { "DownArrowBar", "⤓" }, - { "DownBreve", "̑" }, - { "DownLeftRightVector", "⥐" }, - { "DownLeftTeeVector", "⥞" }, - { "DownLeftVectorBar", "⥖" }, - { "DownRightTeeVector", "⥟" }, - { "DownRightVectorBar", "⥗" }, - { "ee", "ⅇ" }, - { "EmptySmallSquare", "◻" }, - { "EmptyVerySmallSquare", "▫" }, - { "Equal", "⩵" }, - { "FilledSmallSquare", "◼" }, - { "FilledVerySmallSquare", "▪" }, - { "GreaterGreater", "⪢" }, - { "Hat", "^" }, - { "HorizontalLine", "─" }, - { "ic", "⁣" }, - { "ii", "ⅈ" }, - { "it", "⁢" }, - { "larrb", "⇤" }, - { "LeftDownTeeVector", "⥡" }, - { "LeftDownVectorBar", "⥙" }, - { "LeftRightVector", "⥎" }, - { "LeftTeeVector", "⥚" }, - { "LeftTriangleBar", "⧏" }, - { "LeftUpDownVector", "⥑" }, - { "LeftUpTeeVector", "⥠" }, - { "LeftUpVectorBar", "⥘" }, - { "LeftVectorBar", "⥒" }, - { "LessLess", "⪡" }, - { "mapstodown", "↧" }, - { "mapstoleft", "↤" }, - { "mapstoup", "↥" }, - { "MediumSpace", " " }, - { "nbump", "≎̸" }, - { "nbumpe", "≏̸" }, - { "nesim", "≂̸" }, - { "NewLine", " " }, - { "NoBreak", "⁠" }, - { "NotCupCap", "≭" }, - { "NotHumpEqual", "≏̸" }, - { "NotLeftTriangleBar", "⧏̸" }, - { "NotNestedGreaterGreater", "⪢̸" }, - { "NotNestedLessLess", "⪡̸" }, - { "NotRightTriangleBar", "⧐̸" }, - { "NotSquareSubset", "⊏̸" }, - { "NotSquareSuperset", "⊐̸" }, - { "NotSucceedsTilde", "≿̸" }, - { "OverBar", "¯" }, - { "OverBrace", "︷" }, - { "OverBracket", "⎴" }, - { "OverParenthesis", "︵" }, - { "planckh", "ℎ" }, - { "Product", "∏" }, - { "rarrb", "⇥" }, - { "RightDownTeeVector", "⥝" }, - { "RightDownVectorBar", "⥕" }, - { "RightTeeVector", "⥛" }, - { "RightTriangleBar", "⧐" }, - { "RightUpDownVector", "⥏" }, - { "RightUpTeeVector", "⥜" }, - { "RightUpVectorBar", "⥔" }, - { "RightVectorBar", "⥓" }, - { "RoundImplies", "⥰" }, - { "RuleDelayed", "⧴" }, - { "Tab", " " }, - { "ThickSpace", "   " }, - { "UnderBar", "̲" }, - { "UnderBrace", "︸" }, - { "UnderBracket", "⎵" }, - { "UnderParenthesis", "︶" }, - { "UpArrowBar", "⤒" }, - { "Upsilon", "Υ" }, - { "VerticalLine", "|" }, - { "VerticalSeparator", "❘" }, - { "ZeroWidthSpace", "​" }, - { "angle", "∠" }, - { "ApplyFunction", "⁡" }, - { "approx", "≈" }, - { "approxeq", "≊" }, - { "Assign", "≔" }, - { "backcong", "≌" }, - { "backepsilon", "϶" }, - { "backprime", "‵" }, - { "backsim", "∽" }, - { "backsimeq", "⋍" }, - { "Backslash", "∖" }, - { "barwedge", "⌅" }, - { "Because", "∵" }, - { "because", "∵" }, - { "Bernoullis", "ℬ" }, - { "between", "≬" }, - { "bigcap", "⋂" }, - { "bigcirc", "◯" }, - { "bigcup", "⋃" }, - { "bigodot", "⨀" }, - { "bigoplus", "⨁" }, - { "bigotimes", "⨂" }, - { "bigsqcup", "⨆" }, - { "bigstar", "★" }, - { "bigtriangledown", "▽" }, - { "bigtriangleup", "△" }, - { "biguplus", "⨄" }, - { "bigvee", "⋁" }, - { "bigwedge", "⋀" }, - { "bkarow", "⤍" }, - { "blacklozenge", "⧫" }, - { "blacksquare", "▪" }, - { "blacktriangle", "▴" }, - { "blacktriangledown", "▾" }, - { "blacktriangleleft", "◂" }, - { "blacktriangleright", "▸" }, - { "bot", "⊥" }, - { "boxminus", "⊟" }, - { "boxplus", "⊞" }, - { "boxtimes", "⊠" }, - { "Breve", "˘" }, - { "bullet", "•" }, - { "Bumpeq", "≎" }, - { "bumpeq", "≏" }, - { "CapitalDifferentialD", "ⅅ" }, - { "Cayleys", "ℭ" }, - { "Cedilla", "¸" }, - { "CenterDot", "·" }, - { "centerdot", "·" }, - { "checkmark", "✓" }, - { "circeq", "≗" }, - { "circlearrowleft", "↺" }, - { "circlearrowright", "↻" }, - { "circledast", "⊛" }, - { "circledcirc", "⊚" }, - { "circleddash", "⊝" }, - { "CircleDot", "⊙" }, - { "circledR", "®" }, - { "circledS", "Ⓢ" }, - { "CircleMinus", "⊖" }, - { "CirclePlus", "⊕" }, - { "CircleTimes", "⊗" }, - { "ClockwiseContourIntegral", "∲" }, - { "CloseCurlyDoubleQuote", "”" }, - { "CloseCurlyQuote", "’" }, - { "clubsuit", "♣" }, - { "coloneq", "≔" }, - { "complement", "∁" }, - { "complexes", "ℂ" }, - { "Congruent", "≡" }, - { "ContourIntegral", "∮" }, - { "Coproduct", "∐" }, - { "CounterClockwiseContourIntegral", "∳" }, - { "CupCap", "≍" }, - { "curlyeqprec", "⋞" }, - { "curlyeqsucc", "⋟" }, - { "curlyvee", "⋎" }, - { "curlywedge", "⋏" }, - { "curvearrowleft", "↶" }, - { "curvearrowright", "↷" }, - { "dbkarow", "⤏" }, - { "ddagger", "‡" }, - { "ddotseq", "⩷" }, - { "Del", "∇" }, - { "DiacriticalAcute", "´" }, - { "DiacriticalDot", "˙" }, - { "DiacriticalDoubleAcute", "˝" }, - { "DiacriticalGrave", "`" }, - { "DiacriticalTilde", "˜" }, - { "Diamond", "⋄" }, - { "diamond", "⋄" }, - { "diamondsuit", "♦" }, - { "DifferentialD", "ⅆ" }, - { "digamma", "ϝ" }, - { "div", "÷" }, - { "divideontimes", "⋇" }, - { "doteq", "≐" }, - { "doteqdot", "≑" }, - { "DotEqual", "≐" }, - { "dotminus", "∸" }, - { "dotplus", "∔" }, - { "dotsquare", "⊡" }, - { "doublebarwedge", "⌆" }, - { "DoubleContourIntegral", "∯" }, - { "DoubleDot", "¨" }, - { "DoubleDownArrow", "⇓" }, - { "DoubleLeftArrow", "⇐" }, - { "DoubleLeftRightArrow", "⇔" }, - { "DoubleLeftTee", "⫤" }, - { "DoubleLongLeftArrow", "⟸" }, - { "DoubleLongLeftRightArrow", "⟺" }, - { "DoubleLongRightArrow", "⟹" }, - { "DoubleRightArrow", "⇒" }, - { "DoubleRightTee", "⊨" }, - { "DoubleUpArrow", "⇑" }, - { "DoubleUpDownArrow", "⇕" }, - { "DoubleVerticalBar", "∥" }, - { "DownArrow", "↓" }, - { "Downarrow", "⇓" }, - { "downarrow", "↓" }, - { "DownArrowUpArrow", "⇵" }, - { "downdownarrows", "⇊" }, - { "downharpoonleft", "⇃" }, - { "downharpoonright", "⇂" }, - { "DownLeftVector", "↽" }, - { "DownRightVector", "⇁" }, - { "DownTee", "⊤" }, - { "DownTeeArrow", "↧" }, - { "drbkarow", "⤐" }, - { "Element", "∈" }, - { "emptyset", "∅" }, - { "eqcirc", "≖" }, - { "eqcolon", "≕" }, - { "eqsim", "≂" }, - { "eqslantgtr", "⪖" }, - { "eqslantless", "⪕" }, - { "EqualTilde", "≂" }, - { "Equilibrium", "⇌" }, - { "Exists", "∃" }, - { "expectation", "ℰ" }, - { "ExponentialE", "ⅇ" }, - { "exponentiale", "ⅇ" }, - { "fallingdotseq", "≒" }, - { "ForAll", "∀" }, - { "Fouriertrf", "ℱ" }, - { "geq", "≥" }, - { "geqq", "≧" }, - { "geqslant", "⩾" }, - { "gg", "≫" }, - { "ggg", "⋙" }, - { "gnapprox", "⪊" }, - { "gneq", "⪈" }, - { "gneqq", "≩" }, - { "GreaterEqual", "≥" }, - { "GreaterEqualLess", "⋛" }, - { "GreaterFullEqual", "≧" }, - { "GreaterLess", "≷" }, - { "GreaterSlantEqual", "⩾" }, - { "GreaterTilde", "≳" }, - { "gtrapprox", "⪆" }, - { "gtrdot", "⋗" }, - { "gtreqless", "⋛" }, - { "gtreqqless", "⪌" }, - { "gtrless", "≷" }, - { "gtrsim", "≳" }, - { "gvertneqq", "≩︀" }, - { "Hacek", "ˇ" }, - { "hbar", "ℏ" }, - { "heartsuit", "♥" }, - { "HilbertSpace", "ℋ" }, - { "hksearow", "⤥" }, - { "hkswarow", "⤦" }, - { "hookleftarrow", "↩" }, - { "hookrightarrow", "↪" }, - { "hslash", "ℏ" }, - { "HumpDownHump", "≎" }, - { "HumpEqual", "≏" }, - { "iiiint", "⨌" }, - { "iiint", "∭" }, - { "Im", "ℑ" }, - { "ImaginaryI", "ⅈ" }, - { "imagline", "ℐ" }, - { "imagpart", "ℑ" }, - { "Implies", "⇒" }, - { "in", "∈" }, - { "integers", "ℤ" }, - { "Integral", "∫" }, - { "intercal", "⊺" }, - { "Intersection", "⋂" }, - { "intprod", "⨼" }, - { "InvisibleComma", "⁣" }, - { "InvisibleTimes", "⁢" }, - { "langle", "〈" }, - { "Laplacetrf", "ℒ" }, - { "lbrace", "{" }, - { "lbrack", "[" }, - { "LeftAngleBracket", "〈" }, - { "LeftArrow", "←" }, - { "Leftarrow", "⇐" }, - { "leftarrow", "←" }, - { "LeftArrowBar", "⇤" }, - { "LeftArrowRightArrow", "⇆" }, - { "leftarrowtail", "↢" }, - { "LeftCeiling", "⌈" }, - { "LeftDoubleBracket", "〚" }, - { "LeftDownVector", "⇃" }, - { "LeftFloor", "⌊" }, - { "leftharpoondown", "↽" }, - { "leftharpoonup", "↼" }, - { "leftleftarrows", "⇇" }, - { "LeftRightArrow", "↔" }, - { "Leftrightarrow", "⇔" }, - { "leftrightarrow", "↔" }, - { "leftrightarrows", "⇆" }, - { "leftrightharpoons", "⇋" }, - { "leftrightsquigarrow", "↭" }, - { "LeftTee", "⊣" }, - { "LeftTeeArrow", "↤" }, - { "leftthreetimes", "⋋" }, - { "LeftTriangle", "⊲" }, - { "LeftTriangleEqual", "⊴" }, - { "LeftUpVector", "↿" }, - { "LeftVector", "↼" }, - { "leq", "≤" }, - { "leqq", "≦" }, - { "leqslant", "⩽" }, - { "lessapprox", "⪅" }, - { "lessdot", "⋖" }, - { "lesseqgtr", "⋚" }, - { "lesseqqgtr", "⪋" }, - { "LessEqualGreater", "⋚" }, - { "LessFullEqual", "≦" }, - { "LessGreater", "≶" }, - { "lessgtr", "≶" }, - { "lesssim", "≲" }, - { "LessSlantEqual", "⩽" }, - { "LessTilde", "≲" }, - { "ll", "≪" }, - { "llcorner", "⌞" }, - { "Lleftarrow", "⇚" }, - { "lmoustache", "⎰" }, - { "lnapprox", "⪉" }, - { "lneq", "⪇" }, - { "lneqq", "≨" }, - { "LongLeftArrow", "⟵" }, - { "Longleftarrow", "⟸" }, - { "longleftarrow", "⟵" }, - { "LongLeftRightArrow", "⟷" }, - { "Longleftrightarrow", "⟺" }, - { "longleftrightarrow", "⟷" }, - { "longmapsto", "⟼" }, - { "LongRightArrow", "⟶" }, - { "Longrightarrow", "⟹" }, - { "longrightarrow", "⟶" }, - { "looparrowleft", "↫" }, - { "looparrowright", "↬" }, - { "LowerLeftArrow", "↙" }, - { "LowerRightArrow", "↘" }, - { "lozenge", "◊" }, - { "lrcorner", "⌟" }, - { "Lsh", "↰" }, - { "lvertneqq", "≨︀" }, - { "maltese", "✠" }, - { "mapsto", "↦" }, - { "measuredangle", "∡" }, - { "Mellintrf", "ℳ" }, - { "MinusPlus", "∓" }, - { "mp", "∓" }, - { "multimap", "⊸" }, - { "napprox", "≉" }, - { "natural", "♮" }, - { "naturals", "ℕ" }, - { "nearrow", "↗" }, - { "NegativeMediumSpace", "​" }, - { "NegativeThickSpace", "​" }, - { "NegativeThinSpace", "​" }, - { "NegativeVeryThinSpace", "​" }, - { "NestedGreaterGreater", "≫" }, - { "NestedLessLess", "≪" }, - { "nexists", "∄" }, - { "ngeq", "≱" }, - { "ngeqq", "≧̸" }, - { "ngeqslant", "⩾̸" }, - { "ngtr", "≯" }, - { "nLeftarrow", "⇍" }, - { "nleftarrow", "↚" }, - { "nLeftrightarrow", "⇎" }, - { "nleftrightarrow", "↮" }, - { "nleq", "≰" }, - { "nleqq", "≦̸" }, - { "nleqslant", "⩽̸" }, - { "nless", "≮" }, - { "NonBreakingSpace", " " }, - { "NotCongruent", "≢" }, - { "NotDoubleVerticalBar", "∦" }, - { "NotElement", "∉" }, - { "NotEqual", "≠" }, - { "NotEqualTilde", "≂̸" }, - { "NotExists", "∄" }, - { "NotGreater", "≯" }, - { "NotGreaterEqual", "≱" }, - { "NotGreaterFullEqual", "≦̸" }, - { "NotGreaterGreater", "≫̸" }, - { "NotGreaterLess", "≹" }, - { "NotGreaterSlantEqual", "⩾̸" }, - { "NotGreaterTilde", "≵" }, - { "NotHumpDownHump", "≎̸" }, - { "NotLeftTriangle", "⋪" }, - { "NotLeftTriangleEqual", "⋬" }, - { "NotLess", "≮" }, - { "NotLessEqual", "≰" }, - { "NotLessGreater", "≸" }, - { "NotLessLess", "≪̸" }, - { "NotLessSlantEqual", "⩽̸" }, - { "NotLessTilde", "≴" }, - { "NotPrecedes", "⊀" }, - { "NotPrecedesEqual", "⪯̸" }, - { "NotPrecedesSlantEqual", "⋠" }, - { "NotReverseElement", "∌" }, - { "NotRightTriangle", "⋫" }, - { "NotRightTriangleEqual", "⋭" }, - { "NotSquareSubsetEqual", "⋢" }, - { "NotSquareSupersetEqual", "⋣" }, - { "NotSubset", "⊂⃒" }, - { "NotSubsetEqual", "⊈" }, - { "NotSucceeds", "⊁" }, - { "NotSucceedsEqual", "⪰̸" }, - { "NotSucceedsSlantEqual", "⋡" }, - { "NotSuperset", "⊃⃒" }, - { "NotSupersetEqual", "⊉" }, - { "NotTilde", "≁" }, - { "NotTildeEqual", "≄" }, - { "NotTildeFullEqual", "≇" }, - { "NotTildeTilde", "≉" }, - { "NotVerticalBar", "∤" }, - { "nparallel", "∦" }, - { "nprec", "⊀" }, - { "npreceq", "⪯̸" }, - { "nRightarrow", "⇏" }, - { "nrightarrow", "↛" }, - { "nshortmid", "∤" }, - { "nshortparallel", "∦" }, - { "nsimeq", "≄" }, - { "nsubset", "⊂⃒" }, - { "nsubseteq", "⊈" }, - { "nsubseteqq", "⫅̸" }, - { "nsucc", "⊁" }, - { "nsucceq", "⪰̸" }, - { "nsupset", "⊃⃒" }, - { "nsupseteq", "⊉" }, - { "nsupseteqq", "⫆̸" }, - { "ntriangleleft", "⋪" }, - { "ntrianglelefteq", "⋬" }, - { "ntriangleright", "⋫" }, - { "ntrianglerighteq", "⋭" }, - { "nwarrow", "↖" }, - { "oint", "∮" }, - { "OpenCurlyDoubleQuote", "“" }, - { "OpenCurlyQuote", "‘" }, - { "orderof", "ℴ" }, - { "parallel", "∥" }, - { "PartialD", "∂" }, - { "pitchfork", "⋔" }, - { "PlusMinus", "±" }, - { "pm", "±" }, - { "Poincareplane", "ℌ" }, - { "prec", "≺" }, - { "precapprox", "⪷" }, - { "preccurlyeq", "≼" }, - { "Precedes", "≺" }, - { "PrecedesEqual", "⪯" }, - { "PrecedesSlantEqual", "≼" }, - { "PrecedesTilde", "≾" }, - { "preceq", "⪯" }, - { "precnapprox", "⪹" }, - { "precneqq", "⪵" }, - { "precnsim", "⋨" }, - { "precsim", "≾" }, - { "primes", "ℙ" }, - { "Proportion", "∷" }, - { "Proportional", "∝" }, - { "propto", "∝" }, - { "quaternions", "ℍ" }, - { "questeq", "≟" }, - { "rangle", "〉" }, - { "rationals", "ℚ" }, - { "rbrace", "}" }, - { "rbrack", "]" }, - { "Re", "ℜ" }, - { "realine", "ℛ" }, - { "realpart", "ℜ" }, - { "reals", "ℝ" }, - { "ReverseElement", "∋" }, - { "ReverseEquilibrium", "⇋" }, - { "ReverseUpEquilibrium", "⥯" }, - { "RightAngleBracket", "〉" }, - { "RightArrow", "→" }, - { "Rightarrow", "⇒" }, - { "rightarrow", "→" }, - { "RightArrowBar", "⇥" }, - { "RightArrowLeftArrow", "⇄" }, - { "rightarrowtail", "↣" }, - { "RightCeiling", "⌉" }, - { "RightDoubleBracket", "〛" }, - { "RightDownVector", "⇂" }, - { "RightFloor", "⌋" }, - { "rightharpoondown", "⇁" }, - { "rightharpoonup", "⇀" }, - { "rightleftarrows", "⇄" }, - { "rightleftharpoons", "⇌" }, - { "rightrightarrows", "⇉" }, - { "rightsquigarrow", "↝" }, - { "RightTee", "⊢" }, - { "RightTeeArrow", "↦" }, - { "rightthreetimes", "⋌" }, - { "RightTriangle", "⊳" }, - { "RightTriangleEqual", "⊵" }, - { "RightUpVector", "↾" }, - { "RightVector", "⇀" }, - { "risingdotseq", "≓" }, - { "rmoustache", "⎱" }, - { "Rrightarrow", "⇛" }, - { "Rsh", "↱" }, - { "searrow", "↘" }, - { "setminus", "∖" }, - { "ShortDownArrow", "↓" }, - { "ShortLeftArrow", "←" }, - { "shortmid", "∣" }, - { "shortparallel", "∥" }, - { "ShortRightArrow", "→" }, - { "ShortUpArrow", "↑" }, - { "simeq", "≃" }, - { "SmallCircle", "∘" }, - { "smallsetminus", "∖" }, - { "spadesuit", "♠" }, - { "Sqrt", "√" }, - { "sqsubset", "⊏" }, - { "sqsubseteq", "⊑" }, - { "sqsupset", "⊐" }, - { "sqsupseteq", "⊒" }, - { "Square", "□" }, - { "SquareIntersection", "⊓" }, - { "SquareSubset", "⊏" }, - { "SquareSubsetEqual", "⊑" }, - { "SquareSuperset", "⊐" }, - { "SquareSupersetEqual", "⊒" }, - { "SquareUnion", "⊔" }, - { "Star", "⋆" }, - { "straightepsilon", "ε" }, - { "straightphi", "ϕ" }, - { "Subset", "⋐" }, - { "subset", "⊂" }, - { "subseteq", "⊆" }, - { "subseteqq", "⫅" }, - { "SubsetEqual", "⊆" }, - { "subsetneq", "⊊" }, - { "subsetneqq", "⫋" }, - { "succ", "≻" }, - { "succapprox", "⪸" }, - { "succcurlyeq", "≽" }, - { "Succeeds", "≻" }, - { "SucceedsEqual", "⪰" }, - { "SucceedsSlantEqual", "≽" }, - { "SucceedsTilde", "≿" }, - { "succeq", "⪰" }, - { "succnapprox", "⪺" }, - { "succneqq", "⪶" }, - { "succnsim", "⋩" }, - { "succsim", "≿" }, - { "SuchThat", "∋" }, - { "Sum", "∑" }, - { "Superset", "⊃" }, - { "SupersetEqual", "⊇" }, - { "Supset", "⋑" }, - { "supset", "⊃" }, - { "supseteq", "⊇" }, - { "supseteqq", "⫆" }, - { "supsetneq", "⊋" }, - { "supsetneqq", "⫌" }, - { "swarrow", "↙" }, - { "Therefore", "∴" }, - { "therefore", "∴" }, - { "thickapprox", "≈" }, - { "thicksim", "∼" }, - { "ThinSpace", " " }, - { "Tilde", "∼" }, - { "TildeEqual", "≃" }, - { "TildeFullEqual", "≅" }, - { "TildeTilde", "≈" }, - { "toea", "⤨" }, - { "tosa", "⤩" }, - { "triangle", "▵" }, - { "triangledown", "▿" }, - { "triangleleft", "◃" }, - { "trianglelefteq", "⊴" }, - { "triangleq", "≜" }, - { "triangleright", "▹" }, - { "trianglerighteq", "⊵" }, - { "TripleDot", "⃛" }, - { "twoheadleftarrow", "↞" }, - { "twoheadrightarrow", "↠" }, - { "ulcorner", "⌜" }, - { "Union", "⋃" }, - { "UnionPlus", "⊎" }, - { "UpArrow", "↑" }, - { "Uparrow", "⇑" }, - { "uparrow", "↑" }, - { "UpArrowDownArrow", "⇅" }, - { "UpDownArrow", "↕" }, - { "Updownarrow", "⇕" }, - { "updownarrow", "↕" }, - { "UpEquilibrium", "⥮" }, - { "upharpoonleft", "↿" }, - { "upharpoonright", "↾" }, - { "UpperLeftArrow", "↖" }, - { "UpperRightArrow", "↗" }, - { "upsilon", "υ" }, - { "UpTee", "⊥" }, - { "UpTeeArrow", "↥" }, - { "upuparrows", "⇈" }, - { "urcorner", "⌝" }, - { "varepsilon", "ɛ" }, - { "varkappa", "ϰ" }, - { "varnothing", "∅" }, - { "varphi", "φ" }, - { "varpi", "ϖ" }, - { "varpropto", "∝" }, - { "varrho", "ϱ" }, - { "varsigma", "ς" }, - { "varsubsetneq", "⊊︀" }, - { "varsubsetneqq", "⫋︀" }, - { "varsupsetneq", "⊋︀" }, - { "varsupsetneqq", "⫌︀" }, - { "vartheta", "ϑ" }, - { "vartriangleleft", "⊲" }, - { "vartriangleright", "⊳" }, - { "Vee", "⋁" }, - { "vee", "∨" }, - { "Vert", "‖" }, - { "vert", "|" }, - { "VerticalBar", "∣" }, - { "VerticalTilde", "≀" }, - { "VeryThinSpace", " " }, - { "Wedge", "⋀" }, - { "wedge", "∧" }, - { "wp", "℘" }, - { "wr", "≀" }, - { "zeetrf", "ℨ" }, - { 0, 0 } -}; - -// ******************************************************************* -// MmlDocument -// ******************************************************************* - -QString MmlDocument::fontName(QtMmlWidget::MmlFont type) const -{ - switch (type) { - case QtMmlWidget::NormalFont: - return m_normal_font_name; - case QtMmlWidget::FrakturFont: - return m_fraktur_font_name; - case QtMmlWidget::SansSerifFont: - return m_sans_serif_font_name; - case QtMmlWidget::ScriptFont: - return m_script_font_name; - case QtMmlWidget::MonospaceFont: - return m_monospace_font_name; - case QtMmlWidget::DoublestruckFont: - return m_doublestruck_font_name; - }; - - return QString::null; -} - -void MmlDocument::setFontName(QtMmlWidget::MmlFont type, const QString &name) -{ - switch (type) { - case QtMmlWidget::NormalFont: - m_normal_font_name = name; - break; - case QtMmlWidget::FrakturFont: - m_fraktur_font_name = name; - break; - case QtMmlWidget::SansSerifFont: - m_sans_serif_font_name = name; - break; - case QtMmlWidget::ScriptFont: - m_script_font_name = name; - break; - case QtMmlWidget::MonospaceFont: - m_monospace_font_name = name; - break; - case QtMmlWidget::DoublestruckFont: - m_doublestruck_font_name = name; - break; - }; -} - -Mml::NodeType domToMmlNodeType(const QDomNode &dom_node) -{ - Mml::NodeType mml_type = Mml::NoNode; - - switch (dom_node.nodeType()) { - case QDomNode::ElementNode: { - QString tag = dom_node.nodeName(); - const NodeSpec *spec = mmlFindNodeSpec(tag); - - // treat urecognised tags as mrow - if (spec == 0) - mml_type = Mml::UnknownNode; - else - mml_type = spec->type; - - break; - } - case QDomNode::TextNode: - mml_type = Mml::TextNode; - break; - - case QDomNode::DocumentNode: - mml_type = Mml::MrowNode; - break; - - case QDomNode::EntityReferenceNode: -// qWarning("EntityReferenceNode: name=\"" + dom_node.nodeName() + "\" value=\"" + dom_node.nodeValue() + "\""); - break; - - case QDomNode::AttributeNode: - case QDomNode::CDATASectionNode: - case QDomNode::EntityNode: - case QDomNode::ProcessingInstructionNode: - case QDomNode::CommentNode: - case QDomNode::DocumentTypeNode: - case QDomNode::DocumentFragmentNode: - case QDomNode::NotationNode: - case QDomNode::BaseNode: - case QDomNode::CharacterDataNode: - break; - } - - return mml_type; -} - - -MmlDocument::MmlDocument() -{ - m_root_node = 0; - - // Some defaults which happen to work on my computer, - // but probably won't work on other's -#if defined(Q_WS_WIN) - m_normal_font_name = "Times New Roman"; -#else - m_normal_font_name = "Century Schoolbook L"; -#endif - m_fraktur_font_name = "Fraktur"; - m_sans_serif_font_name = "Luxi Sans"; - m_script_font_name = "Urw Chancery L"; - m_monospace_font_name = "Luxi Mono"; - m_doublestruck_font_name = "Doublestruck"; - m_base_font_point_size = 16; - m_foreground_color = Qt::black; - m_background_color = Qt::white; -} - -MmlDocument::~MmlDocument() -{ - clear(); -} - -void MmlDocument::clear() -{ - delete m_root_node; - m_root_node = 0; -} - -void MmlDocument::dump() const -{ - if (m_root_node == 0) - return; - - QString indent; - _dump(m_root_node, indent); -} - -void MmlDocument::_dump(const MmlNode *node, QString &indent) const -{ - if (node == 0) return; - - qWarning("%s", qPrintable(QString(indent + node->toStr()))); - - indent += " "; - const MmlNode *child = node->firstChild(); - for (; child != 0; child = child->nextSibling()) - _dump(child, indent); - indent.truncate(indent.length() - 2); -} - -bool MmlDocument::setContent(QString text, QString *errorMsg, - int *errorLine, int *errorColumn) -{ - clear(); - - QString prefix = "\n"; - prefix.append(entityDeclarations()); - - uint prefix_lines = 0; - for (int i = 0; i < prefix.length(); ++i) { - if (prefix.at(i) == '\n') - ++prefix_lines; - } - - QDomDocument dom; - if (!dom.setContent(prefix + text, false, errorMsg, errorLine, errorColumn)) { - if (errorLine != 0) - *errorLine -= prefix_lines; - return false; - } - - // we don't have access to line info from now on - if (errorLine != 0) *errorLine = -1; - if (errorColumn != 0) *errorColumn = -1; - - bool ok; - MmlNode *root_node = domToMml(dom, &ok, errorMsg); - if (!ok) - return false; - - if (root_node == 0) { - if (errorMsg != 0) - *errorMsg = "empty document"; - return false; - } - - insertChild(0, root_node, 0); - layout(); - -/* QFile of("/tmp/dump.xml"); - of.open(IO_WriteOnly); - QTextStream os(&of); - os.setEncoding(QTextStream::UnicodeUTF8); - os << dom.toString(); */ - - return true; -} - -void MmlDocument::layout() -{ - if (m_root_node == 0) - return; - - m_root_node->layout(); - m_root_node->stretch(); -// dump(); -} - -bool MmlDocument::insertChild(MmlNode *parent, MmlNode *new_node, - QString *errorMsg) -{ - if (new_node == 0) - return true; - - Q_ASSERT(new_node->parent() == 0 - && new_node->nextSibling() == 0 - && new_node->previousSibling() == 0); - - if (parent != 0) { - if (!mmlCheckChildType(parent->nodeType(), new_node->nodeType(), errorMsg)) - return false; - } - - if (parent == 0) { - if (m_root_node == 0) - m_root_node = new_node; - else { - MmlNode *n = m_root_node->lastSibling(); - n->m_next_sibling = new_node; - new_node->m_previous_sibling = n; - } - } - else { - new_node->m_parent = parent; - if (parent->hasChildNodes()) { - MmlNode *n = parent->firstChild()->lastSibling(); - n->m_next_sibling = new_node; - new_node->m_previous_sibling = n; - } - else parent->m_first_child = new_node; - } - - return true; -} - -MmlNode *MmlDocument::createNode(NodeType type, - const MmlAttributeMap &mml_attr, - const QString &mml_value, - QString *errorMsg) -{ - Q_ASSERT(type != NoNode); - - MmlNode *mml_node = 0; - - if (!mmlCheckAttributes(type, mml_attr, errorMsg)) - return 0; - - switch (type) { - case MiNode: - mml_node = new MmlMiNode(this, mml_attr); - break; - case MnNode: - mml_node = new MmlMnNode(this, mml_attr); - break; - case MfracNode: - mml_node = new MmlMfracNode(this, mml_attr); - break; - case MrowNode: - mml_node = new MmlMrowNode(this, mml_attr); - break; - case MsqrtNode: - mml_node = new MmlMsqrtNode(this, mml_attr); - break; - case MrootNode: - mml_node = new MmlMrootNode(this, mml_attr); - break; - case MsupNode: - mml_node = new MmlMsupNode(this, mml_attr); - break; - case MsubNode: - mml_node = new MmlMsubNode(this, mml_attr); - break; - case MsubsupNode: - mml_node = new MmlMsubsupNode(this, mml_attr); - break; - case MoNode: - mml_node = new MmlMoNode(this, mml_attr); - break; - case MstyleNode: - mml_node = new MmlMstyleNode(this, mml_attr); - break; - case TextNode: - mml_node = new MmlTextNode(mml_value, this); - break; - case MphantomNode: - mml_node = new MmlMphantomNode(this, mml_attr); - break; - case MfencedNode: - mml_node = new MmlMfencedNode(this, mml_attr); - break; - case MtableNode: - mml_node = new MmlMtableNode(this, mml_attr); - break; - case MtrNode: - mml_node = new MmlMtrNode(this, mml_attr); - break; - case MtdNode: - mml_node = new MmlMtdNode(this, mml_attr); - break; - case MoverNode: - mml_node = new MmlMoverNode(this, mml_attr); - break; - case MunderNode: - mml_node = new MmlMunderNode(this, mml_attr); - break; - case MunderoverNode: - mml_node = new MmlMunderoverNode(this, mml_attr); - break; - case MalignMarkNode: - mml_node = new MmlMalignMarkNode(this); - break; - case MerrorNode: - mml_node = new MmlMerrorNode(this, mml_attr); - break; - case MtextNode: - mml_node = new MmlMtextNode(this, mml_attr); - break; - case MpaddedNode: - mml_node = new MmlMpaddedNode(this, mml_attr); - break; - case MspaceNode: - mml_node = new MmlMspaceNode(this, mml_attr); - break; - case UnknownNode: - mml_node = new MmlUnknownNode(this, mml_attr); - break; - case NoNode: - mml_node = 0; - break; - } - - return mml_node; -} - -void MmlDocument::insertOperator(MmlNode *node, const QString &text) -{ - MmlNode *text_node = createNode(TextNode, MmlAttributeMap(), text, 0); - MmlNode *mo_node = createNode(MoNode, MmlAttributeMap(), QString::null, 0); - - bool ok = insertChild(node, mo_node, 0); - Q_ASSERT( ok ); - ok = insertChild(mo_node, text_node, 0); - Q_ASSERT( ok ); -} - -MmlNode *MmlDocument::domToMml(const QDomNode &dom_node, bool *ok, QString *errorMsg) -{ - // create the node - - Q_ASSERT(ok != 0); - - NodeType mml_type = domToMmlNodeType(dom_node); - - if (mml_type == NoNode) { - *ok = true; - return 0; - } - - QDomNamedNodeMap dom_attr = dom_node.attributes(); - MmlAttributeMap mml_attr; - for (unsigned i = 0; i < dom_attr.length(); ++i) { - QDomNode attr_node = dom_attr.item(i); - Q_ASSERT(!attr_node.nodeName().isNull()); - Q_ASSERT(!attr_node.nodeValue().isNull()); - mml_attr[attr_node.nodeName()] = attr_node.nodeValue(); - } - - QString mml_value; - if (mml_type == TextNode) - mml_value = dom_node.nodeValue(); - MmlNode *mml_node = createNode(mml_type, mml_attr, mml_value, errorMsg); - if (mml_node == 0) { - *ok = false; - return 0; - } - - // create the node's children according to the child_spec - - const NodeSpec *spec = mmlFindNodeSpec(mml_type); - QDomNodeList dom_child_list = dom_node.childNodes(); - int child_cnt = dom_child_list.count(); - MmlNode *mml_child = 0; - - QString separator_list; - if (mml_type == MfencedNode) - separator_list = mml_node->explicitAttribute("separators", ","); - - switch (spec->child_spec) { - case NodeSpec::ChildIgnore: - break; - - case NodeSpec::ImplicitMrow: - - if (child_cnt > 0) { - mml_child = createImplicitMrowNode(dom_node, ok, errorMsg); - if (!*ok) { - delete mml_node; - return 0; - } - - if (!insertChild(mml_node, mml_child, errorMsg)) { - delete mml_node; - delete mml_child; - *ok = false; - return 0; - } - } - - break; - - default: - // exact ammount of children specified - check... - if (spec->child_spec != child_cnt) { - if (errorMsg != 0) - *errorMsg = QString("element ") - + spec->tag - + " requires exactly " - + QString::number(spec->child_spec) - + " arguments, got " - + QString::number(child_cnt); - delete mml_node; - *ok = false; - return 0; - } - - // ...and continue just as in ChildAny - - case NodeSpec::ChildAny: - if (mml_type == MfencedNode) - insertOperator(mml_node, mml_node->explicitAttribute("open", "(")); - - for (int i = 0; i < child_cnt; ++i) { - QDomNode dom_child = dom_child_list.item(i); - - MmlNode *mml_child = domToMml(dom_child, ok, errorMsg); - if (!*ok) { - delete mml_node; - return 0; - } - - if (mml_type == MtableNode && mml_child->nodeType() != MtrNode) { - MmlNode *mtr_node = createNode(MtrNode, MmlAttributeMap(), QString::null, 0); - insertChild(mml_node, mtr_node, 0); - if (!insertChild(mtr_node, mml_child, errorMsg)) { - delete mml_node; - delete mml_child; - *ok = false; - return 0; - } - } - else if (mml_type == MtrNode && mml_child->nodeType() != MtdNode) { - MmlNode *mtd_node = createNode(MtdNode, MmlAttributeMap(), QString::null, 0); - insertChild(mml_node, mtd_node, 0); - if (!insertChild(mtd_node, mml_child, errorMsg)) { - delete mml_node; - delete mml_child; - *ok = false; - return 0; - } - } - else { - if (!insertChild(mml_node, mml_child, errorMsg)) { - delete mml_node; - delete mml_child; - *ok = false; - return 0; - } - } - - if (i < child_cnt - 1 && mml_type == MfencedNode && !separator_list.isEmpty()) { - QChar separator; - if (i >= (int)separator_list.length()) - separator = separator_list.at(separator_list.length() - 1); - else - separator = separator_list[i]; - insertOperator(mml_node, QString(separator)); - } - } - - if (mml_type == MfencedNode) - insertOperator(mml_node, mml_node->explicitAttribute("close", ")")); - - break; - } - - *ok = true; - return mml_node; -} - -MmlNode *MmlDocument::createImplicitMrowNode(const QDomNode &dom_node, bool *ok, - QString *errorMsg) -{ - QDomNodeList dom_child_list = dom_node.childNodes(); - int child_cnt = dom_child_list.count(); - - if (child_cnt == 0) { - *ok = true; - return 0; - } - - if (child_cnt == 1) - return domToMml(dom_child_list.item(0), ok, errorMsg); - - MmlNode *mml_node = createNode(MrowNode, MmlAttributeMap(), - QString::null, errorMsg); - Q_ASSERT(mml_node != 0); // there is no reason in heaven or hell for this to fail - - for (int i = 0; i < child_cnt; ++i) { - QDomNode dom_child = dom_child_list.item(i); - - MmlNode *mml_child = domToMml(dom_child, ok, errorMsg); - if (!*ok) { - delete mml_node; - return 0; - } - - if (!insertChild(mml_node, mml_child, errorMsg)) { - delete mml_node; - delete mml_child; - *ok = false; - return 0; - } - } - - return mml_node; -} - -void MmlDocument::paint(QPainter *p, const QPoint &pos) const -{ - if (m_root_node == 0) - return; - -/* p->save(); - p->setPen(Qt::blue); - p->drawLine(pos.x() - 5, pos.y(), pos.x() + 5, pos.y()); - p->drawLine(pos.x(), pos.y() - 5, pos.x(), pos.y() + 5); - p->restore(); */ - - QRect mr = m_root_node->myRect(); - m_root_node->setRelOrigin(pos - mr.topLeft()); - m_root_node->paint(p); -} - -QSize MmlDocument::size() const -{ - if (m_root_node == 0) - return QSize(0, 0); - return m_root_node->deviceRect().size(); -} - - - - -// ******************************************************************* -// MmlNode -// ******************************************************************* - - -MmlNode::MmlNode(NodeType type, MmlDocument *document, const MmlAttributeMap &attribute_map) -{ - m_parent = 0; - m_first_child = 0; - m_next_sibling = 0; - m_previous_sibling = 0; - - m_node_type = type; - m_document = document; - m_attribute_map = attribute_map; - - m_my_rect = m_parent_rect = QRect(0, 0, 0, 0); - m_rel_origin = QPoint(0, 0); - m_stretched = false; -} - -MmlNode::~MmlNode() -{ - MmlNode *n = firstChild(); - while (n != 0) { - MmlNode *tmp = n->nextSibling(); - delete n; - n = tmp; - } -} - -static QString rectToStr(const QRect &rect) -{ - return QString("[(%1, %2), %3x%4]") - .arg(rect.x()) - .arg(rect.y()) - .arg(rect.width()) - .arg(rect.height()); -} - -QString MmlNode::toStr() const -{ - const NodeSpec *spec = mmlFindNodeSpec(nodeType()); - Q_ASSERT(spec != 0); - - return QString("%1 %2 mr=%3 pr=%4 dr=%5 ro=(%7, %8) str=%9") - .arg(spec->type_str) - .arg((quintptr)this, 0, 16) - .arg(rectToStr(myRect())) - .arg(rectToStr(parentRect())) - .arg(rectToStr(deviceRect())) - .arg(m_rel_origin.x()) - .arg(m_rel_origin.y()) - .arg((int)isStretched()); -} - -int MmlNode::interpretSpacing(const QString &value, bool *ok) const -{ - return ::interpretSpacing(value, em(), ex(), ok); -} - -int MmlNode::basePos() const -{ - QFontMetrics fm(font()); - return fm.strikeOutPos(); -} - -int MmlNode::underlinePos() const -{ - QFontMetrics fm(font()); - return basePos() + fm.underlinePos(); -} -int MmlNode::overlinePos() const -{ - QFontMetrics fm(font()); - return basePos() - fm.overlinePos(); -} - -MmlNode *MmlNode::lastSibling() const -{ - const MmlNode *n = this; - while (!n->isLastSibling()) - n = n->nextSibling(); - return const_cast(n); -} - -MmlNode *MmlNode::firstSibling() const -{ - const MmlNode *n = this; - while (!n->isFirstSibling()) - n = n->previousSibling(); - return const_cast(n); -} - -int MmlNode::em() const -{ - return QFontMetrics(font()).boundingRect('m').width(); -} - -int MmlNode::ex() const -{ - return QFontMetrics(font()).boundingRect('x').height(); -} - -int MmlNode::scriptlevel(const MmlNode *) const -{ - int parent_sl; - const MmlNode *p = parent(); - if (p == 0) - parent_sl = 0; - else - parent_sl = p->scriptlevel(this); - - QString expl_sl_str = explicitAttribute("scriptlevel"); - if (expl_sl_str.isNull()) - return parent_sl; - - if (expl_sl_str.startsWith("+") || expl_sl_str.startsWith("-")) { - bool ok; - int expl_sl = expl_sl_str.toInt(&ok); - if (ok) { - return parent_sl + expl_sl; - } - else { - qWarning("MmlNode::scriptlevel(): bad value: %s", qPrintable(expl_sl_str)); - return parent_sl; - } - } - - bool ok; - int expl_sl = expl_sl_str.toInt(&ok); - if (ok) - return expl_sl; - - - if (expl_sl_str == "+") - return parent_sl + 1; - else if (expl_sl_str == "-") - return parent_sl - 1; - else { - qWarning("MmlNode::scriptlevel(): could not parse value: \"%s\"", qPrintable(expl_sl_str)); - return parent_sl; - } -} - -QPoint MmlNode::devicePoint(const QPoint &p) const -{ - QRect mr = myRect(); - QRect dr = deviceRect(); - - if (isStretched()) - return dr.topLeft() + QPoint((p.x() - mr.left())*dr.width()/mr.width(), - (p.y() - mr.top())*dr.height()/mr.height()); - else - return dr.topLeft() + p - mr.topLeft(); -} - -QString MmlNode::inheritAttributeFromMrow(const QString &name, - const QString &def) const -{ - const MmlNode *p = this; - for (; p != 0; p = p->parent()) { - if (p == this || p->nodeType() == MstyleNode) { - QString value = p->explicitAttribute(name); - if (!value.isNull()) - return value; - } - } - - return def; -} - -QColor MmlNode::color() const -{ - // If we are child of return red - const MmlNode *p = this; - for (; p != 0; p = p->parent()) { - if (p->nodeType() == MerrorNode) - return QColor("red"); - } - - QString value_str = inheritAttributeFromMrow("mathcolor"); - if (value_str.isNull()) - value_str = inheritAttributeFromMrow("color"); - if (value_str.isNull()) - return QColor(); - - return QColor(value_str); -} - -QColor MmlNode::background() const -{ - QString value_str = inheritAttributeFromMrow("mathbackground"); - if (value_str.isNull()) - value_str = inheritAttributeFromMrow("background"); - if (value_str.isNull()) - return QColor(); - - return QColor(value_str); -} - -static void updateFontAttr(MmlAttributeMap &font_attr, const MmlNode *n, - const QString &name, const QString &preferred_name = QString::null) -{ - if (font_attr.contains(preferred_name) || font_attr.contains(name)) - return; - QString value = n->explicitAttribute(name); - if (!value.isNull()) - font_attr[name] = value; -} - -static MmlAttributeMap collectFontAttributes(const MmlNode *node) -{ - MmlAttributeMap font_attr; - - for (const MmlNode *n = node; n != 0; n = n->parent()) { - if (n == node || n->nodeType() == Mml::MstyleNode) { - updateFontAttr(font_attr, n, "mathvariant"); - updateFontAttr(font_attr, n, "mathsize"); - - // depreciated attributes - updateFontAttr(font_attr, n, "fontsize", "mathsize"); - updateFontAttr(font_attr, n, "fontweight", "mathvariant"); - updateFontAttr(font_attr, n, "fontstyle", "mathvariant"); - updateFontAttr(font_attr, n, "fontfamily", "mathvariant"); - } - } - - return font_attr; -} - -QFont MmlNode::font() const -{ - QFont fn(document()->fontName(QtMmlWidget::NormalFont), - document()->baseFontPointSize()); - - int ps = fn.pointSize(); - int sl = scriptlevel(); - if (sl >= 0) { - for (int i = 0; i < sl; ++i) - ps = (int)(ps*g_script_size_multiplier); - } - else { - for (int i = 0; i > sl; --i) - ps = (int)(ps/g_script_size_multiplier); - } - if (ps < g_min_font_point_size) - ps = g_min_font_point_size; - fn.setPointSize(ps); - - int em = QFontMetrics(fn).boundingRect('m').width(); - int ex = QFontMetrics(fn).boundingRect('x').height(); - - MmlAttributeMap font_attr = collectFontAttributes(this); - - if (font_attr.contains("mathvariant")) { - QString value = font_attr["mathvariant"]; - - bool ok; - uint mv = interpretMathVariant(value, &ok); - - if (ok) { - if (mv & ScriptMV) - fn.setFamily(document()->fontName(QtMmlWidget::ScriptFont)); - - if (mv & FrakturMV) - fn.setFamily(document()->fontName(QtMmlWidget::FrakturFont)); - - if (mv & SansSerifMV) - fn.setFamily(document()->fontName(QtMmlWidget::SansSerifFont)); - - if (mv & MonospaceMV) - fn.setFamily(document()->fontName(QtMmlWidget::MonospaceFont)); - - if (mv & DoubleStruckMV) - fn.setFamily(document()->fontName(QtMmlWidget::DoublestruckFont)); - - if (mv & BoldMV) - fn.setBold(true); - - if (mv & ItalicMV) - fn.setItalic(true); - } - } - - if (font_attr.contains("mathsize")) { - QString value = font_attr["mathsize"]; - fn = interpretMathSize(value, fn, em, ex, 0); - } - - fn = interpretDepreciatedFontAttr(font_attr, fn, em, ex); - - if (nodeType() == MiNode - && !font_attr.contains("mathvariant") - && !font_attr.contains("fontstyle")) { - const MmlMiNode *mi_node = (const MmlMiNode*) this; - if (mi_node->text().length() == 1) - fn.setItalic(true); - } - - if (nodeType() == MoNode) { - fn.setItalic(false); - fn.setBold(false); - } - - return fn; -} - -QString MmlNode::explicitAttribute(const QString &name, const QString &def) const -{ - MmlAttributeMap::const_iterator it = m_attribute_map.find(name); - if (it != m_attribute_map.end()) - return *it; - return def; -} - - -QRect MmlNode::parentRect() const -{ - if (isStretched()) - return m_parent_rect; - - QRect mr = myRect(); - QPoint ro = relOrigin(); - - return QRect(ro + mr.topLeft(), mr.size()); -} - - -void MmlNode::stretchTo(const QRect &rect) -{ - m_parent_rect = rect; - m_stretched = true; -} - -void MmlNode::setRelOrigin(const QPoint &rel_origin) -{ - m_rel_origin = rel_origin + QPoint(-myRect().left(), 0); - m_stretched = false; -} - -void MmlNode::updateMyRect() -{ - m_my_rect = symbolRect(); - MmlNode *child = firstChild(); - for (; child != 0; child = child->nextSibling()) - m_my_rect |= child->parentRect(); -} - -void MmlNode::layout() -{ - m_parent_rect = QRect(0, 0, 0, 0); - m_stretched = false; - m_rel_origin = QPoint(0, 0); - - MmlNode *child = firstChild(); - for (; child != 0; child = child->nextSibling()) - child->layout(); - - layoutSymbol(); - - updateMyRect(); - - if (parent() == 0) - m_rel_origin = QPoint(0, 0); -} - - -QRect MmlNode::deviceRect() const -{ - if (parent() == 0) - return QRect(relOrigin() + myRect().topLeft(), myRect().size()); - -/* if (!isStretched()) { - QRect pdr = parent()->deviceRect(); - QRect pmr = parent()->myRect(); - QRect pr = parentRect(); - QRect mr = myRect(); - return QRect(pdr.left() + pr.left() - pmr.left(), - pdr.top() + pr.top() - pmr.top(), - mr.width(), mr.height()); - } -*/ - QRect pdr = parent()->deviceRect(); - QRect pr = parentRect(); - QRect pmr = parent()->myRect(); - - float scale_w = 0; - if (pmr.width() != 0) - scale_w = (float)pdr.width()/pmr.width(); - float scale_h = 0; - if (pmr.height() != 0) - scale_h = (float)pdr.height()/pmr.height(); - - return QRect(pdr.left() + ROUND((pr.left() - pmr.left())*scale_w), - pdr.top() + ROUND((pr.top() - pmr.top())*scale_h), - ROUND((pr.width()*scale_w)), - ROUND((pr.height()*scale_h))); -} - -void MmlNode::layoutSymbol() -{ - // default behaves like an mrow - - // now lay them out in a neat row, aligning their origins to my origin - int w = 0; - MmlNode *child = firstChild(); - for (; child != 0; child = child->nextSibling()) { - child->setRelOrigin(QPoint(w, 0)); - w += child->parentRect().width() + 1; - } -} - -void MmlNode::paint(QPainter *p) -{ - if (!myRect().isValid()) - return; - p->save(); - p->setViewport(deviceRect()); - p->setWindow(myRect()); - - - QColor fg = color(); - QColor bg = background(); - if (bg.isValid()) - p->fillRect(myRect(), bg); - if (fg.isValid()) - p->setPen(color()); - - MmlNode *child = firstChild(); - for (; child != 0; child = child->nextSibling()) - child->paint(p); - - paintSymbol(p); - - p->restore(); -} - -void MmlNode::paintSymbol(QPainter *p) const -{ - if (g_draw_frames && myRect().isValid()) { - p->save(); - p->setPen(Qt::red); - p->drawRect(m_my_rect); - QPen pen = p->pen(); - pen.setStyle(Qt::DotLine); - p->setPen(pen); - p->drawLine(myRect().left(), 0, myRect().right(), 0); - p->restore(); - } -} - -void MmlNode::stretch() -{ - MmlNode *child = firstChild(); - for (; child != 0; child = child->nextSibling()) - child->stretch(); -} - -QString MmlTokenNode::text() const -{ - QString result; - - const MmlNode *child = firstChild(); - for (; child != 0; child = child->nextSibling()) { - if (child->nodeType() != TextNode) continue; - if (!result.isEmpty()) - result += ' '; - result += ((MmlTextNode*)child)->text(); - } - - return result; -} - -MmlNode *MmlMfracNode::numerator() const -{ - MmlNode *node = firstChild(); - Q_ASSERT(node != 0); - return node; -} - -MmlNode *MmlMfracNode::denominator() const -{ - MmlNode *node = numerator()->nextSibling(); - Q_ASSERT(node != 0); - return node; -} - -QRect MmlMfracNode::symbolRect() const -{ - int num_width = numerator()->myRect().width(); - int denom_width = denominator()->myRect().width(); - int my_width = qMax(num_width, denom_width) + 4; - - return QRect(-my_width/2, 0, my_width, 1); -} - -void MmlMfracNode::layoutSymbol() -{ - MmlNode *num = numerator(); - MmlNode *denom = denominator(); - - QRect num_rect = num->myRect(); - QRect denom_rect = denom->myRect(); - - int spacing = (int)(g_mfrac_spacing*(num_rect.height() + denom_rect.height())); - - num->setRelOrigin(QPoint(-num_rect.width()/2, - spacing - num_rect.bottom())); - denom->setRelOrigin(QPoint(-denom_rect.width()/2, spacing - denom_rect.top())); -} - -static bool zeroLineThickness(const QString &s) -{ - if (s.length() == 0 || !s[0].isDigit()) - return false; - - for (int i = 0; i < s.length(); ++i) { - QChar c = s.at(i); - if (c.isDigit() && c != '0') - return false; - } - return true; -} - -void MmlMfracNode::paintSymbol(QPainter *p) const -{ - QString linethickness_str = inheritAttributeFromMrow("linethickness", "1"); - - /* InterpretSpacing returns an int, which might be 0 even if the thickness - is > 0, though very very small. That's ok, because the painter then paints - a line of thickness 1. However, we have to run this check if the line - thickness really is zero */ - if (!zeroLineThickness(linethickness_str)) { - bool ok; - int linethickness = interpretSpacing(linethickness_str, &ok); - if (!ok) - linethickness = 1; - - p->save(); - QPen pen = p->pen(); - pen.setWidth(linethickness); - p->setPen(pen); - QSize s = myRect().size(); - p->drawLine(-s.width()/2, 0, s.width()/2, 0); - p->restore(); - } -} - -MmlNode *MmlRootBaseNode::base() const -{ - MmlNode *node = firstChild(); -// Q_ASSERT(node != 0); - return node; -} - -MmlNode *MmlRootBaseNode::index() const -{ - MmlNode *b = base(); - if (b == 0) - return 0; - return b->nextSibling(); -} - -int MmlRootBaseNode::scriptlevel(const MmlNode *child) const -{ - int sl = MmlNode::scriptlevel(); - - MmlNode *i = index(); - if (child != 0 && child == i) - return sl + 1; - else - return sl; -} - - -QRect MmlRootBaseNode::symbolRect() const -{ - MmlNode *b = base(); - QRect base_rect; - if (b == 0) - base_rect = QRect(0, 0, 1, 1); - else - base_rect = base()->myRect(); - - int margin = (int)(g_mroot_base_margin*base_rect.height()); - int tw = tailWidth(); - - return QRect(-tw, base_rect.top() - margin, tw, - base_rect.height() + 2*margin); -} - -int MmlRootBaseNode::tailWidth() const -{ - QFontMetrics fm(font()); - return fm.boundingRect(g_radical_char).width(); -} - -void MmlRootBaseNode::layoutSymbol() -{ - MmlNode *b = base(); - QSize base_size; - if (b != 0) { - b->setRelOrigin(QPoint(0, 0)); - base_size = base()->myRect().size(); - } else - base_size = QSize(1, 1); - - MmlNode *i = index(); - if (i != 0) { - int tw = tailWidth(); - - QRect i_rect = i->myRect(); - i->setRelOrigin(QPoint(-tw/2 - i_rect.width(), - -i_rect.bottom() - 4)); - } -} - -void MmlRootBaseNode::paintSymbol(QPainter *p) const -{ - QFont fn = font(); - - p->save(); - - QRect sr = symbolRect(); - - QRect r = sr; - r.moveTopLeft(devicePoint(sr.topLeft())); - p->setViewport(r); - p->setWindow(QFontMetrics(fn).boundingRect(g_radical_char)); - p->setFont(font()); - p->drawText(0, 0, QString(g_radical_char)); - - p->restore(); - - p->drawLine(sr.right(), sr.top(), myRect().right(), sr.top()); -} - -MmlTextNode::MmlTextNode(const QString &text, MmlDocument *document) - : MmlNode(TextNode, document, MmlAttributeMap()) -{ - m_text = text; - // Trim whitespace from ends, but keep nbsp and thinsp - m_text.remove(QRegExp("^[^\\S\\x00a0\\x2009]+")); - m_text.remove(QRegExp("[^\\S\\x00a0\\x2009]+$")); - - if (m_text == QString(QChar(0x62, 0x20)) // ⁢ - || m_text == QString(QChar(0x63, 0x20)) // ⁣ - || m_text == QString(QChar(0x61, 0x20))) // ⁡ - m_text = ""; -} - -QString MmlTextNode::toStr() const -{ - return MmlNode::toStr() + ", text=\"" + m_text + "\""; -} - -void MmlTextNode::paintSymbol(QPainter *p) const -{ - MmlNode::paintSymbol(p); - - QFont fn = font(); - - QFontInfo fi(fn); -// qWarning("MmlTextNode::paintSymbol(): requested: %s, used: %s, size=%d, italic=%d, bold=%d, text=\"%s\" sl=%d", -// fn.family().latin1(), fi.family().latin1(), fi.pointSize(), (int)fi.italic(), (int)fi.bold(), m_text.latin1(), scriptlevel()); - - QFontMetrics fm(fn); - - p->save(); - p->setFont(fn); - - p->drawText(0, fm.strikeOutPos(), m_text); - p->restore(); -} - -QRect MmlTextNode::symbolRect() const -{ - QFontMetrics fm(font()); - - QRect br = fm.tightBoundingRect(m_text); - br.translate(0, fm.strikeOutPos()); - - return br; -} - -MmlNode *MmlSubsupBaseNode::base() const -{ - MmlNode *b = firstChild(); - Q_ASSERT(b != 0); - return b; -} - -MmlNode *MmlSubsupBaseNode::sscript() const -{ - MmlNode *s = base()->nextSibling(); - Q_ASSERT(s != 0); - return s; -} - -int MmlSubsupBaseNode::scriptlevel(const MmlNode *child) const -{ - int sl = MmlNode::scriptlevel(); - - MmlNode *s = sscript(); - if (child != 0 && child == s) - return sl + 1; - else - return sl; -} - -void MmlMsupNode::layoutSymbol() -{ - MmlNode *b = base(); - MmlNode *s = sscript(); - - b->setRelOrigin(QPoint(-b->myRect().width(), 0)); - s->setRelOrigin(QPoint(0, b->myRect().top())); -} - -void MmlMsubNode::layoutSymbol() -{ - MmlNode *b = base(); - MmlNode *s = sscript(); - - b->setRelOrigin(QPoint(-b->myRect().width(), 0)); - s->setRelOrigin(QPoint(0, b->myRect().bottom())); -} - -MmlNode *MmlMsubsupNode::base() const -{ - MmlNode *b = firstChild(); - Q_ASSERT(b != 0); - return b; -} - -MmlNode *MmlMsubsupNode::subscript() const -{ - MmlNode *sub = base()->nextSibling(); - Q_ASSERT(sub != 0); - return sub; -} - -MmlNode *MmlMsubsupNode::superscript() const -{ - MmlNode *sup = subscript()->nextSibling(); - Q_ASSERT(sup != 0); - return sup; -} - -void MmlMsubsupNode::layoutSymbol() -{ - MmlNode *b = base(); - MmlNode *sub = subscript(); - MmlNode *sup = superscript(); - - b->setRelOrigin(QPoint(-b->myRect().width(), 0)); - sub->setRelOrigin(QPoint(0, b->myRect().bottom())); - sup->setRelOrigin(QPoint(0, b->myRect().top())); -} - -int MmlMsubsupNode::scriptlevel(const MmlNode *child) const -{ - int sl = MmlNode::scriptlevel(); - - MmlNode *sub = subscript(); - MmlNode *sup = superscript(); - - if (child != 0 && (child == sup || child == sub)) - return sl + 1; - else - return sl; -} - -QString MmlMoNode::toStr() const -{ - return MmlNode::toStr() + QString(" form=%1").arg((int)form()); -} - -void MmlMoNode::layoutSymbol() -{ - MmlNode *child = firstChild(); - if (child == 0) - return; - - child->setRelOrigin(QPoint(0, 0)); - - if (m_oper_spec == 0) - m_oper_spec = mmlFindOperSpec(text(), form()); -} - -MmlMoNode::MmlMoNode(MmlDocument *document, const MmlAttributeMap &attribute_map) - : MmlTokenNode(MoNode, document, attribute_map) -{ - m_oper_spec = 0; -} - -QString MmlMoNode::dictionaryAttribute(const QString &name) const -{ - const MmlNode *p = this; - for (; p != 0; p = p->parent()) { - if (p == this || p->nodeType() == MstyleNode) { - QString expl_attr = p->explicitAttribute(name); - if (!expl_attr.isNull()) - return expl_attr; - } - } - - return mmlDictAttribute(name, m_oper_spec); -} - -Mml::FormType MmlMoNode::form() const -{ - QString value_str = inheritAttributeFromMrow("form"); - if (!value_str.isNull()) { - bool ok; - FormType value = interpretForm(value_str, &ok); - if (ok) - return value; - else - qWarning("Could not convert %s to form", value_str.toLatin1().data()); - - } - - // Default heuristic. - if (firstSibling() == (MmlNode*)this && lastSibling() != (MmlNode*)this) - return PrefixForm; - else if (lastSibling() == (MmlNode*)this && firstSibling() != (MmlNode*)this) - return PostfixForm; - else return InfixForm; - -} - -void MmlMoNode::stretch() -{ - if (parent() == 0) - return; - - if (m_oper_spec == 0) - return; - - if (m_oper_spec->stretch_dir == OperSpec::HStretch - && parent()->nodeType() == MrowNode - && (nextSibling() != 0 || previousSibling() != 0)) - return; - - QRect pmr = parent()->myRect(); - QRect pr = parentRect(); - - switch (m_oper_spec->stretch_dir) { - case OperSpec::VStretch: - stretchTo(QRect(pr.left(), pmr.top(), pr.width(), pmr.height())); - break; - case OperSpec::HStretch: - stretchTo(QRect(pmr.left(), pr.top(), pmr.width(), pr.height())); - break; - case OperSpec::HVStretch: - stretchTo(pmr); - break; - case OperSpec::NoStretch: - break; - } -} - -int MmlMoNode::lspace() const -{ - Q_ASSERT(m_oper_spec != 0); - if (parent() == 0 - || (parent()->nodeType() != MrowNode - && parent()->nodeType() != MfencedNode - && parent()->nodeType() != UnknownNode) - || (previousSibling() == 0 && nextSibling() == 0)) - return 0; - else - return interpretSpacing(dictionaryAttribute("lspace"), 0); -} - -int MmlMoNode::rspace() const -{ - Q_ASSERT(m_oper_spec != 0); - if (parent() == 0 - || (parent()->nodeType() != MrowNode - && parent()->nodeType() != MfencedNode - && parent()->nodeType() != UnknownNode) - || (previousSibling() == 0 && nextSibling() == 0)) - return 0; - else - return interpretSpacing(dictionaryAttribute("rspace"), 0); -} - -QRect MmlMoNode::symbolRect() const -{ - const MmlNode *child = firstChild(); - - if (child == 0) - return QRect(0, 0, 0, 0); - - QRect cmr = child->myRect(); - - return QRect(-lspace(), cmr.top(), - cmr.width() + lspace() + rspace(), cmr.height()); -} - -int MmlMtableNode::rowspacing() const -{ - QString value = explicitAttribute("rowspacing"); - if (value.isNull()) - return ex(); - bool ok; - int r = interpretSpacing(value, &ok); - - if (ok) - return r; - else - return ex(); -} - -int MmlMtableNode::columnspacing() const -{ - QString value = explicitAttribute("columnspacing"); - if (value.isNull()) - return (int)(0.8*em()); - bool ok; - int r = interpretSpacing(value, &ok); - - if (ok) - return r; - else - return (int)(0.8*em()); -} - -uint MmlMtableNode::CellSizeData::colWidthSum() const -{ - uint w = 0; - for (int i = 0; i < col_widths.count(); ++i) - w += col_widths[i]; - return w; -} - -uint MmlMtableNode::CellSizeData::rowHeightSum() const -{ - uint h = 0; - for (int i = 0; i < row_heights.count(); ++i) - h += row_heights[i]; - return h; -} - -void MmlMtableNode::CellSizeData::init(const MmlNode *first_row) -{ - col_widths.clear(); - row_heights.clear(); - - const MmlNode *mtr = first_row; - for (; mtr != 0; mtr = mtr->nextSibling()) { - - Q_ASSERT(mtr->nodeType() == MtrNode); - - int col_cnt = 0; - const MmlNode *mtd = mtr->firstChild(); - for (; mtd != 0; mtd = mtd->nextSibling(), ++col_cnt) { - - Q_ASSERT(mtd->nodeType() == MtdNode); - - QRect mtdmr = mtd->myRect(); - - if (col_cnt == col_widths.count()) - col_widths.append(mtdmr.width()); - else - col_widths[col_cnt] = qMax(col_widths[col_cnt], mtdmr.width()); - } - - row_heights.append(mtr->myRect().height()); - } -} - -void MmlMtableNode::layoutSymbol() -{ - // Obtain natural widths of columns - m_cell_size_data.init(firstChild()); - - int col_spc = columnspacing(); - int row_spc = rowspacing(); - int frame_spc_hor = framespacing_hor(); - QString columnwidth_attr = explicitAttribute("columnwidth", "auto"); - - // Is table width set by user? If so, set col_width_sum and never ever change it. - int col_width_sum = m_cell_size_data.colWidthSum(); - bool width_set_by_user = false; - QString width_str = explicitAttribute("width", "auto"); - if (width_str != "auto") { - bool ok; - - int w = interpretSpacing(width_str, &ok); - if (ok) { - col_width_sum = w - - col_spc*(m_cell_size_data.numCols() - 1) - - frame_spc_hor*2; - width_set_by_user = true; - } - } - - // Find out what kind of columns we are dealing with and set the widths of - // statically sized columns. - int fixed_width_sum = 0; // sum of widths of statically sized set columns - int auto_width_sum = 0; // sum of natural widths of auto sized columns - int relative_width_sum = 0; // sum of natural widths of relatively sized columns - double relative_fraction_sum = 0; // total fraction of width taken by relatively - // sized columns - int i; - for (i = 0; i < m_cell_size_data.numCols(); ++i) { - QString value = interpretListAttr(columnwidth_attr, i, "auto"); - - // Is it an auto sized column? - if (value == "auto" || value == "fit") { - auto_width_sum += m_cell_size_data.col_widths[i]; - continue; - } - - // Is it a statically sized column? - bool ok; - int w = interpretSpacing(value, &ok); - if (ok) { - // Yup, sets its width to the user specified value - m_cell_size_data.col_widths[i] = w; - fixed_width_sum += w; - continue; - } - - // Is it a relatively sized column? - if (value.endsWith("%")) { - value.truncate(value.length() - 1); - double factor = value.toFloat(&ok); - if (ok && !value.isEmpty()) { - factor /= 100.0; - relative_width_sum += m_cell_size_data.col_widths[i]; - relative_fraction_sum += factor; - if (!width_set_by_user) { - // If the table width was not set by the user, we are free to increase - // it so that the width of this column will be >= than its natural width - int min_col_width_sum = ROUND(m_cell_size_data.col_widths[i]/factor); - if (min_col_width_sum > col_width_sum) - col_width_sum = min_col_width_sum; - } - continue; - } - else - qWarning("MmlMtableNode::layoutSymbol(): could not parse value %s%%", value.toLatin1().data()); - } - - // Relatively sized column, but we failed to parse the factor. Treat is like an auto - // column. - auto_width_sum += m_cell_size_data.col_widths[i]; - } - - // Work out how much space remains for the auto olumns, after allocating - // the statically sized and the relatively sized columns. - int required_auto_width_sum = col_width_sum - - ROUND(relative_fraction_sum*col_width_sum) - - fixed_width_sum; - - if (!width_set_by_user && required_auto_width_sum < auto_width_sum) { - if (relative_fraction_sum < 1) - col_width_sum = ROUND((fixed_width_sum + auto_width_sum)/(1 - relative_fraction_sum)); - else - col_width_sum = fixed_width_sum + auto_width_sum + relative_width_sum; - required_auto_width_sum = auto_width_sum; - } - - // Ratio by which we have to shring/grow all auto sized columns to make it all fit - double auto_width_scale = 1; - if (auto_width_sum > 0) - auto_width_scale = (float)required_auto_width_sum/auto_width_sum; - - // Set correct sizes for the auto sized and the relatively sized columns. - for (i = 0; i < m_cell_size_data.numCols(); ++i) { - QString value = interpretListAttr(columnwidth_attr, i, "auto"); - - // Is it a relatively sized column? - if (value.endsWith("%")) { - bool ok; - int w = interpretPercentSpacing(value, col_width_sum, &ok); - if (ok) - m_cell_size_data.col_widths[i] = w; - else - // We're treating parsing errors here as auto sized columns - m_cell_size_data.col_widths[i] - = ROUND(auto_width_scale*m_cell_size_data.col_widths[i]); - } - // Is it an auto sized column? - else if (value == "auto") { - m_cell_size_data.col_widths[i] - = ROUND(auto_width_scale*m_cell_size_data.col_widths[i]); - } - } - - QString s; - QList &col_widths = m_cell_size_data.col_widths; - for (i = 0; i < col_widths.count(); ++i) { - s += QString("[w=%1 %2%%]") - .arg(col_widths[i]) - .arg(100*col_widths[i]/m_cell_size_data.colWidthSum()); - } -// qWarning(s); - - m_content_width = m_cell_size_data.colWidthSum() - + col_spc*(m_cell_size_data.numCols() - 1); - m_content_height = m_cell_size_data.rowHeightSum() - + row_spc*(m_cell_size_data.numRows() - 1); - - int bottom = -m_content_height/2; - MmlNode *child = firstChild(); - for (; child != 0; child = child->nextSibling()) { - Q_ASSERT(child->nodeType() == MtrNode); - MmlMtrNode *row = (MmlMtrNode*) child; - - row->layoutCells(m_cell_size_data.col_widths, col_spc); - QRect rmr = row->myRect(); - row->setRelOrigin(QPoint(0, bottom - rmr.top())); - bottom += rmr.height() + row_spc; - } -} - -QRect MmlMtableNode::symbolRect() const -{ - int frame_spc_hor = framespacing_hor(); - int frame_spc_ver = framespacing_ver(); - - return QRect(-frame_spc_hor, - -m_content_height/2 - frame_spc_ver, - m_content_width + 2*frame_spc_hor, - m_content_height + 2*frame_spc_ver); -} - -Mml::FrameType MmlMtableNode::frame() const -{ - QString value = explicitAttribute("frame", "none"); - return interpretFrameType(value, 0, 0); -} - -Mml::FrameType MmlMtableNode::columnlines(int idx) const -{ - QString value = explicitAttribute("columnlines", "none"); - return interpretFrameType(value, idx, 0); -} - -Mml::FrameType MmlMtableNode::rowlines(int idx) const -{ - QString value = explicitAttribute("rowlines", "none"); - return interpretFrameType(value, idx, 0); -} - -void MmlMtableNode::paintSymbol(QPainter *p) const -{ - FrameType f = frame(); - if (f != FrameNone) { - p->save(); - - QPen pen = p->pen(); - if (f == FrameDashed) - pen.setStyle(Qt::DashLine); - else - pen.setStyle(Qt::SolidLine); - p->setPen(pen); - p->drawRect(myRect()); - - p->restore(); - } - - p->save(); - - int col_spc = columnspacing(); - int row_spc = rowspacing(); - - QPen pen = p->pen(); - int col_offset = 0; - int i; - for (i = 0; i < m_cell_size_data.numCols() - 1; ++i) { - FrameType f = columnlines(i); - col_offset += m_cell_size_data.col_widths[i]; - - if (f != FrameNone) { - if (f == FrameDashed) - pen.setStyle(Qt::DashLine); - else if (f == FrameSolid) - pen.setStyle(Qt::SolidLine); - - p->setPen(pen); - int x = col_offset + col_spc/2; - p->drawLine(x, -m_content_height/2, x, m_content_height/2 ); - } - col_offset += col_spc; - } - - int row_offset = 0; - for (i = 0; i < m_cell_size_data.numRows() - 1; ++i) { - FrameType f = rowlines(i); - row_offset += m_cell_size_data.row_heights[i]; - - if (f != FrameNone) { - if (f == FrameDashed) - pen.setStyle(Qt::DashLine); - else if (f == FrameSolid) - pen.setStyle(Qt::SolidLine); - - p->setPen(pen); - int y = row_offset + row_spc/2 - m_content_height/2; - p->drawLine(0, y, m_content_width, y); - } - row_offset += row_spc; - } - - p->restore(); -} - -int MmlMtableNode::framespacing_ver() const -{ - if (frame() == FrameNone) - return (int)(0.2*em()); - - QString value = explicitAttribute("framespacing", "0.4em 0.5ex"); - - bool ok; - FrameSpacing fs = interpretFrameSpacing(value, em(), ex(), &ok); - if (ok) - return fs.m_ver; - else - return (int)(0.5*ex()); -} - -int MmlMtableNode::framespacing_hor() const -{ - if (frame() == FrameNone) - return (int)(0.2*em()); - - QString value = explicitAttribute("framespacing", "0.4em 0.5ex"); - - bool ok; - FrameSpacing fs = interpretFrameSpacing(value, em(), ex(), &ok); - if (ok) - return fs.m_hor; - else - return (int)(0.4*em()); -} - -void MmlMtrNode::layoutCells(const QList &col_widths, - int col_spc) -{ - QRect mr = myRect(); - - MmlNode *child = firstChild(); - int col_offset = 0; - uint colnum = 0; - for (; child != 0; child = child->nextSibling(), ++colnum) { - Q_ASSERT(child->nodeType() == MtdNode); - MmlMtdNode *mtd = (MmlMtdNode*) child; - - QRect r = QRect(0, mr.top(), col_widths[colnum], mr.height()); - mtd->setMyRect(r); - mtd->setRelOrigin(QPoint(col_offset, 0)); - col_offset += col_widths[colnum] + col_spc; - } - - updateMyRect(); -} - -int MmlMtdNode::scriptlevel(const MmlNode *child) const -{ - int sl = MmlNode::scriptlevel(); - if (child != 0 && child == firstChild()) - return sl + m_scriptlevel_adjust; - else - return sl; -} - -void MmlMtdNode::setMyRect(const QRect &rect) -{ - MmlNode::setMyRect(rect); - MmlNode *child = firstChild(); - if (child == 0) - return; - - if (rect.width() < child->myRect().width()) { - while (rect.width() < child->myRect().width() - && child->font().pointSize() > g_min_font_point_size) { - -// qWarning("MmlMtdNode::setMyRect(): rect.width()=%d, child()->myRect().width=%d sl=%d", -// rect.width(), child->myRect().width(), m_scriptlevel_adjust); - - ++m_scriptlevel_adjust; - child->layout(); - } - -// qWarning("MmlMtdNode::setMyRect(): rect.width()=%d, child()->myRect().width=%d sl=%d", -// rect.width(), child->myRect().width(), m_scriptlevel_adjust); - } - - QRect mr = myRect(); - QRect cmr = child->myRect(); - - QPoint child_rel_origin; - - switch (columnalign()) { - case ColAlignLeft: - child_rel_origin.setX(0); - break; - case ColAlignCenter: - child_rel_origin.setX(mr.left() + (mr.width() - cmr.width())/2); - break; - case ColAlignRight: - child_rel_origin.setX(mr.right() - cmr.width()); - break; - } - - switch (rowalign()) { - case RowAlignTop: - child_rel_origin.setY(mr.top() - cmr.top()); - break; - case RowAlignCenter: - case RowAlignBaseline: - child_rel_origin.setY(mr.top() -cmr.top() + (mr.height() - cmr.height())/2); - break; - case RowAlignBottom: - child_rel_origin.setY(mr.bottom() - cmr.bottom()); - break; - case RowAlignAxis: - child_rel_origin.setY(0); - break; - } - - child->setRelOrigin(child_rel_origin); -} - -uint MmlMtdNode::colNum() -{ - MmlNode *syb = previousSibling(); - - uint i = 0; - for (; syb != 0; syb = syb->previousSibling()) - ++i; - - return i; -} - -uint MmlMtdNode::rowNum() -{ - MmlNode *row = parent()->previousSibling(); - - uint i = 0; - for (; row != 0; row = row->previousSibling()) - ++i; - - return i; -} - -MmlMtdNode::ColAlign MmlMtdNode::columnalign() -{ - QString val = explicitAttribute("columnalign"); - if (!val.isNull()) - return interpretColAlign(val, 0, 0); - - MmlNode *node = parent(); // - if (node == 0) - return ColAlignCenter; - - uint colnum = colNum(); - val = node->explicitAttribute("columnalign"); - if (!val.isNull()) - return interpretColAlign(val, colnum, 0); - - node = node->parent(); // - if (node == 0) - return ColAlignCenter; - - val = node->explicitAttribute("columnalign"); - if (!val.isNull()) - return interpretColAlign(val, colnum, 0); - - return ColAlignCenter; -} - -MmlMtdNode::RowAlign MmlMtdNode::rowalign() -{ - QString val = explicitAttribute("rowalign"); - if (!val.isNull()) - return interpretRowAlign(val, 0, 0); - - MmlNode *node = parent(); // - if (node == 0) - return RowAlignAxis; - - uint rownum = rowNum(); - val = node->explicitAttribute("rowalign"); - if (!val.isNull()) - return interpretRowAlign(val, rownum, 0); - - node = node->parent(); // - if (node == 0) - return RowAlignAxis; - - val = node->explicitAttribute("rowalign"); - if (!val.isNull()) - return interpretRowAlign(val, rownum, 0); - - return RowAlignAxis; -} - -void MmlMoverNode::layoutSymbol() -{ - MmlNode *base = firstChild(); - Q_ASSERT(base != 0); - MmlNode *over = base->nextSibling(); - Q_ASSERT(over != 0); - - QRect base_rect = base->myRect(); - QRect over_rect = over->myRect(); - - int spacing = (int)(g_mfrac_spacing*(over_rect.height() - + base_rect.height())); - - base->setRelOrigin(QPoint(-base_rect.width()/2, 0)); - over->setRelOrigin(QPoint(-over_rect.width()/2, - base_rect.top() - spacing - over_rect.bottom())); -} - -int MmlMoverNode::scriptlevel(const MmlNode *node) const -{ - MmlNode *base = firstChild(); - Q_ASSERT(base != 0); - MmlNode *over = base->nextSibling(); - Q_ASSERT(over != 0); - - int sl = MmlNode::scriptlevel(); - if (node != 0 && node == over) - return sl + 1; - else - return sl; -} - -void MmlMunderNode::layoutSymbol() -{ - MmlNode *base = firstChild(); - Q_ASSERT(base != 0); - MmlNode *under = base->nextSibling(); - Q_ASSERT(under != 0); - - QRect base_rect = base->myRect(); - QRect under_rect = under->myRect(); - - int spacing = (int)(g_mfrac_spacing*(under_rect.height() + base_rect.height())); - - base->setRelOrigin(QPoint(-base_rect.width()/2, 0)); - under->setRelOrigin(QPoint(-under_rect.width()/2, base_rect.bottom() + spacing - under_rect.top())); -} - -int MmlMunderNode::scriptlevel(const MmlNode *node) const -{ - MmlNode *base = firstChild(); - Q_ASSERT(base != 0); - MmlNode *under = base->nextSibling(); - Q_ASSERT(under != 0); - - int sl = MmlNode::scriptlevel(); - if (node != 0 && node == under) - return sl + 1; - else - return sl; -} - -void MmlMunderoverNode::layoutSymbol() -{ - MmlNode *base = firstChild(); - Q_ASSERT(base != 0); - MmlNode *under = base->nextSibling(); - Q_ASSERT(under != 0); - MmlNode *over = under->nextSibling(); - Q_ASSERT(over != 0); - - QRect base_rect = base->myRect(); - QRect under_rect = under->myRect(); - QRect over_rect = over->myRect(); - - int spacing = (int)(g_mfrac_spacing*( base_rect.height() - + under_rect.height() - + over_rect.height()) ); - - base->setRelOrigin(QPoint(-base_rect.width()/2, 0)); - under->setRelOrigin(QPoint(-under_rect.width()/2, base_rect.bottom() + spacing - under_rect.top())); - over->setRelOrigin(QPoint(-over_rect.width()/2, base_rect.top() - spacing - under_rect.bottom())); -} - -int MmlMunderoverNode::scriptlevel(const MmlNode *node) const -{ - MmlNode *base = firstChild(); - Q_ASSERT(base != 0); - MmlNode *under = base->nextSibling(); - Q_ASSERT(under != 0); - MmlNode *over = under->nextSibling(); - Q_ASSERT(over != 0); - - int sl = MmlNode::scriptlevel(); - if (node != 0 && (node == under || node == over)) - return sl + 1; - else - return sl; -} - -int MmlMpaddedNode::interpretSpacing(QString value, int base_value, bool *ok) const -{ - if (ok != 0) - *ok = false; - - value.replace(' ', ""); - - QString sign, factor_str, pseudo_unit; - bool percent = false; - - // extract the sign - int idx = 0; - if (idx < value.length() && (value.at(idx) == '+' || value.at(idx) == '-')) - sign = value.at(idx++); - - // extract the factor - while (idx < value.length() && (value.at(idx).isDigit() || value.at(idx) == '.')) - factor_str.append(value.at(idx++)); - - // extract the % sign - if (idx < value.length() && value.at(idx) == '%') { - percent = true; - ++idx; - } - - // extract the pseudo-unit - pseudo_unit = value.mid(idx); - - bool float_ok; - double factor = factor_str.toFloat(&float_ok); - if (!float_ok || factor < 0) { - qWarning("MmlMpaddedNode::interpretSpacing(): could not parse \"%s\"", value.toLatin1().data()); - return 0; - } - - if (percent) - factor /= 100.0; - - QRect cr; - if (firstChild() == 0) - cr = QRect(0, 0, 0, 0); - else - cr = firstChild()->myRect(); - - int unit_size; - - if (pseudo_unit.isEmpty()) - unit_size = base_value; - else if (pseudo_unit == "width") - unit_size = cr.width(); - else if (pseudo_unit == "height") - unit_size = -cr.top(); - else if (pseudo_unit == "depth") - unit_size = cr.bottom(); - else { - bool unit_ok; - unit_size = MmlNode::interpretSpacing("1" + pseudo_unit, &unit_ok); - if (!unit_ok) { - qWarning("MmlMpaddedNode::interpretSpacing(): could not parse \"%s\"", value.toLatin1().data()); - return 0; - } - } - - if (ok != 0) - *ok = true; - - if (sign.isNull()) - return (int)(factor*unit_size); - else if (sign == "+") - return base_value + (int)(factor*unit_size); - else // sign == "-" - return base_value - (int)(factor*unit_size); -} - -int MmlMpaddedNode::lspace() const -{ - QString value = explicitAttribute("lspace"); - - if (value.isNull()) - return 0; - - bool ok; - int lspace = interpretSpacing(value, 0, &ok); - - if (ok) - return lspace; - - return 0; -} - -int MmlMpaddedNode::width() const -{ - int child_width = 0; - if (firstChild() != 0) - child_width = firstChild()->myRect().width(); - - QString value = explicitAttribute("width"); - if (value.isNull()) - return child_width; - - bool ok; - int w = interpretSpacing(value, child_width, &ok); - if (ok) - return w; - - return child_width; -} - -int MmlMpaddedNode::height() const -{ - QRect cr; - if (firstChild() == 0) - cr = QRect(0, 0, 0, 0); - else - cr = firstChild()->myRect(); - - QString value = explicitAttribute("height"); - if (value.isNull()) - return -cr.top(); - - bool ok; - int h = interpretSpacing(value, -cr.top(), &ok); - if (ok) - return h; - - return -cr.top(); -} - -int MmlMpaddedNode::depth() const -{ - QRect cr; - if (firstChild() == 0) - cr = QRect(0, 0, 0, 0); - else - cr = firstChild()->myRect(); - - QString value = explicitAttribute("depth"); - if (value.isNull()) - return cr.bottom(); - - bool ok; - int h = interpretSpacing(value, cr.bottom(), &ok); - if (ok) - return h; - - return cr.bottom(); -} - -void MmlMpaddedNode::layoutSymbol() -{ - MmlNode *child = firstChild(); - if (child == 0) - return; - - child->setRelOrigin(QPoint(0, 0)); -} - - -QRect MmlMpaddedNode::symbolRect() const -{ - return QRect(-lspace(), -height(), lspace() + width(), height() + depth()); -} - -// ******************************************************************* -// QtMmlWidget -// ******************************************************************* - -/*! - \class QtMmlWidget - - \brief The QtMmlWidget class renders mathematical formulas written in MathML 2.0. - - QtMmlWidget implements the Presentation Markup subset of the - MathML 2.0 specification, with a few \link overview.html exceptions\endlink. - - \code - QtMmlWidget *mmlWidget = new QtMmlWidget(this); - QString errorMsg; - int errorLine; - int errorColumn; - bool ok = mmlWidget->setContent(mmlText, &errorMsg, &errorLine, &errorColumn); - if (!ok) { - qWarning("MathML error: %s, Line: %d, Column: %d", - errorMsg.latin1(), errorLine, errorColumn); - } - \endcode - -*/ - - -/*! - \enum QtMmlWidget::MmlFont - - This ennumerated type is used in fontName() and setFontName() to - specify a font type. - - \value NormalFont The default font type, used to render - expressions for which no mathvariant or fontfamily is specified, - or for which the "normal" mathvariant is specified. - - \value FrakturFont The font type used to render expressions for - which the "fraktur" mathvariant is specified. - - \value SansSerifFont The font type used to render expressions - for which the "sans-serif" mathvariant is specified. - - \value ScriptFont The font type used to render expressions - for which the "script" mathvariant is specified. - - \value MonospaceFont The font type used to render expressions - for which the "monospace" mathvariant is specified. - - \value DoublestruckFont The font type used to render expressions - for which the "doublestruck" mathvariant is specified. - - \sa setFontName() fontName() setBaseFontPointSize() baseFontPointSize() -*/ - -/*! - Constructs a QtMmlWidget object. The \a parent - parameter is passed to QFrame's constructor. -*/ - -QtMmlWidget::QtMmlWidget(QWidget *parent) - : QFrame(parent) -{ - m_doc = new MmlDocument; -} - -/*! - Destructs a QtMmlWidget object. -*/ - -QtMmlWidget::~QtMmlWidget() -{ - delete m_doc; -} - -/*! - Returns the name of the font used to render the font \a type. - - \sa setFontName() setBaseFontPointSize() baseFontPointSize() QtMmlWidget::MmlFont -*/ - -QString QtMmlWidget::fontName(MmlFont type) const -{ - return m_doc->fontName(type); -} - -/*! - Sets the name of the font used to render the font \a type to \a name. - - \sa fontName() setBaseFontPointSize() baseFontPointSize() QtMmlWidget::MmlFont -*/ - -void QtMmlWidget::setFontName(MmlFont type, const QString &name) -{ - m_doc->setFontName(type, name); - m_doc->layout(); - update(); -} - -/*! - If \a b is true, draws a red bounding rectangle around each - expression; if \a b is false, no such rectangle is drawn. - This is mostly useful for debugging MathML expressions. - - \sa drawFrames() -*/ - -void QtMmlWidget::setDrawFrames(bool b) -{ - g_draw_frames = b; - update(); -} - -/*! - Returns true if each expression should be drawn with a red - bounding rectangle; otherwise returns false. - This is mostly useful for debugging MathML expressions. - - \sa setDrawFrames() -*/ - -bool QtMmlWidget::drawFrames() const -{ - return g_draw_frames; -} - -/*! - Clears the contents of this widget. -*/ -void QtMmlWidget::clear() -{ - m_doc->clear(); -} - -/*! - Returns the point size of the font used to render expressions - whose scriptlevel is 0. - - \sa setBaseFontPointSize() fontName() setFontName() -*/ - -int QtMmlWidget::baseFontPointSize() const -{ - return m_doc->baseFontPointSize(); -} - -/*! - Sets the point \a size of the font used to render expressions - whose scriptlevel is 0. - - \sa baseFontPointSize() fontName() setFontName() -*/ - -void QtMmlWidget::setBaseFontPointSize(int size) -{ - if (size < g_min_font_point_size) - return; - - m_doc->setBaseFontPointSize(size); - m_doc->layout(); - update(); -} - -/*! - Returns the size of the formula in pixels. -*/ - -QSize QtMmlWidget::sizeHint() const -{ - QSize size = m_doc->size(); - if (size == QSize(0, 0)) - return QSize(100, 50); - return m_doc->size(); -} - -/*! - Sets the MathML expression to be rendered. The expression is given - in the string \a text. If the expression is successfully parsed, - this method returns true; otherwise it returns false. If an error - occured \a errorMsg is set to a diagnostic message, while \a - errorLine and \a errorColumn contain the location of the error. - Any of \a errorMsg, \a errorLine and \a errorColumn may be 0, - in which case they are not set. - - \a text should contain MathML 2.0 presentation markup elements enclosed - in a element. -*/ - -bool QtMmlWidget::setContent(const QString &text, QString *errorMsg, - int *errorLine, int *errorColumn) -{ - bool result = m_doc->setContent(text, errorMsg, errorLine, errorColumn); - if (result) - update(); - return result; -} - -/*! \internal */ - -void QtMmlWidget::paintEvent(QPaintEvent *e) -{ - QFrame::paintEvent(e); - QPainter p(this); - if (e->rect().intersects(contentsRect())) - p.setClipRegion(e->region().intersect(contentsRect())); - - QSize s = m_doc->size(); - int x = (width() - s.width())/2; - int y = (height() - s.height())/2; - m_doc->paint(&p, QPoint(x, y)); -} - -/*! \internal */ - -void QtMmlWidget::dump() const -{ - m_doc->dump(); -} - -// ******************************************************************* -// Static helper functions -// ******************************************************************* - -static QString entityDeclarations() -{ - QString result = "name != 0; ++ent) { - result += "\tname) + " \"" + ent->value + "\">\n"; - } - - result += "]>\n"; - - return result; -} - -static int interpretSpacing(QString value, int em, int ex, bool *ok) -{ - if (ok != 0) - *ok = true; - - if (value == "thin") - return 1; - - if (value == "medium") - return 2; - - if (value == "thick") - return 3; - - struct HSpacingValue { - const char *name; - float factor; - }; - - static const HSpacingValue g_h_spacing_data[] = - { - { "veryverythinmathspace", (float) 0.0555556 }, - { "verythinmathspace", (float) 0.111111 }, - { "thinmathspace", (float) 0.166667 }, - { "mediummathspace", (float) 0.222222 }, - { "thickmathspace", (float) 0.277778 }, - { "verythickmathspace", (float) 0.333333 }, - { "veryverythickmathspace", (float) 0.388889 }, - { 0, (float) 0 } - }; - - const HSpacingValue *v = g_h_spacing_data; - for (; v->name != 0; ++v) { - if (value == v->name) - return (int)(em*v->factor); - } - - if (value.endsWith("em")) { - value.truncate(value.length() - 2); - bool float_ok; - float factor = value.toFloat(&float_ok); - if (float_ok && factor >= 0) - return (int)(em*factor); - else { - qWarning("interpretSpacing(): could not parse \"%sem\"", value.toLatin1().data()); - if (ok != 0) - *ok = false; - return 0; - } - } - - if (value.endsWith("ex")) { - value.truncate(value.length() - 2); - bool float_ok; - float factor = value.toFloat(&float_ok); - if (float_ok && factor >= 0) - return (int)(ex*factor); - else { - qWarning("interpretSpacing(): could not parse \"%sex\"", value.toLatin1().data()); - if (ok != 0) - *ok = false; - return 0; - } - } - - if (value.endsWith("cm")) { - value.truncate(value.length() - 2); - bool float_ok; - float factor = value.toFloat(&float_ok); - if (float_ok && factor >= 0) { - Q_ASSERT(qApp->desktop() != 0); - QDesktopWidget *dw = qApp->desktop(); - Q_ASSERT(dw->width() != 0); - Q_ASSERT(dw->widthMM() != 0); - return (int)(factor*10*dw->width()/dw->widthMM()); - } - else { - qWarning("interpretSpacing(): could not parse \"%scm\"", value.toLatin1().data()); - if (ok != 0) - *ok = false; - return 0; - } - } - - if (value.endsWith("mm")) { - value.truncate(value.length() - 2); - bool float_ok; - float factor = value.toFloat(&float_ok); - if (float_ok && factor >= 0) { - Q_ASSERT(qApp->desktop() != 0); - QDesktopWidget *dw = qApp->desktop(); - Q_ASSERT(dw->width() != 0); - Q_ASSERT(dw->widthMM() != 0); - return (int)(factor*dw->width()/dw->widthMM()); - } - else { - qWarning("interpretSpacing(): could not parse \"%smm\"", value.toLatin1().data()); - if (ok != 0) - *ok = false; - return 0; - } - } - - if (value.endsWith("in")) { - value.truncate(value.length() - 2); - bool float_ok; - float factor = value.toFloat(&float_ok); - if (float_ok && factor >= 0) { - Q_ASSERT(qApp->desktop() != 0); - QDesktopWidget *dw = qApp->desktop(); - Q_ASSERT(dw->width() != 0); - Q_ASSERT(dw->widthMM() != 0); - return (int)(factor*10*dw->width()/(2.54*dw->widthMM())); - } - else { - qWarning("interpretSpacing(): could not parse \"%sin\"", value.toLatin1().data()); - if (ok != 0) - *ok = false; - return 0; - } - } - - if (value.endsWith("px")) { - value.truncate(value.length() - 2); - bool float_ok; - int i = (int) value.toFloat(&float_ok); - if (float_ok && i >= 0) - return i; - else { - qWarning("interpretSpacing(): could not parse \"%spx\"", value.toLatin1().data()); - if (ok != 0) - *ok = false; - return 0; - } - } - - bool float_ok; - int i = (int)value.toFloat(&float_ok); - if (float_ok && i >= 0) - return i; - - qWarning("interpretSpacing(): could not parse \"%s\"", value.toLatin1().data()); - if (ok != 0) - *ok = false; - return 0; -} - -static int interpretPercentSpacing(QString value, int base, bool *ok) -{ - if (!value.endsWith("%")) { - if (ok != 0) - *ok = false; - return 0; - } - - value.truncate(value.length() - 1); - bool float_ok; - float factor = value.toFloat(&float_ok); - if (float_ok && factor >= 0) { - if (ok != 0) - *ok = true; - return (int)(base*factor/100.0); - } - - qWarning("interpretPercentSpacing(): could not parse \"%s%%\"", value.toLatin1().data()); - if (ok != 0) - *ok = false; - return 0; -} - -static int interpretPointSize(QString value, bool *ok) -{ - if (!value.endsWith("pt")) { - if (ok != 0) - *ok = false; - return 0; - } - - value.truncate(value.length() - 2); - bool float_ok; - int pt_size = (int) value.toFloat(&float_ok); - if (float_ok && pt_size > 0) { - if (ok != 0) - *ok = true; - return pt_size; - } - - qWarning("interpretPointSize(): could not parse \"%spt\"", value.toLatin1().data()); - if (ok != 0) - *ok = false; - return 0; -} - -static const NodeSpec *mmlFindNodeSpec(Mml::NodeType type) -{ - const NodeSpec *spec = g_node_spec_data; - for (; spec->type != Mml::NoNode; ++spec) { - if (type == spec->type) return spec; - } - return 0; -} - -static const NodeSpec *mmlFindNodeSpec(const QString &tag) -{ - const NodeSpec *spec = g_node_spec_data; - for (; spec->type != Mml::NoNode; ++spec) { - if (tag == spec->tag) return spec; - } - return 0; -} - -static bool mmlCheckChildType(Mml::NodeType parent_type, Mml::NodeType child_type, - QString *error_str) -{ - if (parent_type == Mml::UnknownNode || child_type == Mml::UnknownNode) - return true; - - const NodeSpec *child_spec = mmlFindNodeSpec(child_type); - const NodeSpec *parent_spec = mmlFindNodeSpec(parent_type); - - Q_ASSERT(parent_spec != 0); - Q_ASSERT(child_spec != 0); - - QString allowed_child_types(parent_spec->child_types); - // null list means any child type is valid - if (allowed_child_types.isNull()) - return true; - - QString child_type_str = QString(" ") + child_spec->type_str + " "; - if (!allowed_child_types.contains(child_type_str)) { - if (error_str != 0) - *error_str = QString("illegal child ") - + child_spec->type_str - + " for parent " - + parent_spec->type_str; - return false; - } - - return true; -} - -static bool mmlCheckAttributes(Mml::NodeType child_type, const MmlAttributeMap &attr, - QString *error_str) -{ - const NodeSpec *spec = mmlFindNodeSpec(child_type); - Q_ASSERT(spec != 0); - - QString allowed_attr(spec->attributes); - // empty list means any attr is valid - if (allowed_attr.isEmpty()) - return true; - - MmlAttributeMap::const_iterator it = attr.begin(), end = attr.end(); - for (; it != end; ++it) { - QString name = it.key(); - - if (name.indexOf(':') != -1) - continue; - - QString padded_name = " " + name + " "; - if (!allowed_attr.contains(padded_name)) { - if (error_str != 0) - *error_str = QString("illegal attribute ") - + name - + " in " - + spec->type_str; - return false; - } - } - - return true; -} - -static int attributeIndex(const QString &name) -{ - for (unsigned i = 0; i < g_oper_spec_rows; ++i) { - if (name == g_oper_spec_names[i]) - return i; - } - return -1; -} - -static QString decodeEntityValue(QString literal) -{ - QString result; - - while (!literal.isEmpty()) { - - if (!literal.startsWith("&#")) { - qWarning("decodeEntityValue(): bad entity literal: \"%s\"", qPrintable(literal)); - return QString::null; - } - - literal = literal.right(literal.length() - 2); - - int i = literal.indexOf(';'); - if (i == -1) { - qWarning("decodeEntityValue(): bad entity literal: \"%s\"", qPrintable(literal)); - return QString::null; - } - - QString char_code = literal.left(i); - literal = literal.right(literal.length() - i - 1); - - if (char_code.isEmpty()) { - qWarning("decodeEntityValue(): bad entity literal: \"%s\"", qPrintable(literal)); - return QString::null; - } - - if (char_code.at(0) == 'x') { - char_code = char_code.right(char_code.length() - 1); - bool ok; - unsigned c = char_code.toUInt(&ok, 16); - if (!ok) { - qWarning("decodeEntityValue(): bad entity literal: \"%s\"", qPrintable(literal)); - return QString::null; - } - result += QChar(c); - } - else { - bool ok; - unsigned c = char_code.toUInt(&ok, 10); - if (!ok) { - qWarning("decodeEntityValue(): bad entity literal: \"%s\"", qPrintable(literal)); - return QString::null; - } - result += QChar(c); - } - } - - return result; -} - -static const EntitySpec *searchEntitySpecData(const QString &value, const EntitySpec *from = 0) -{ - const EntitySpec *ent = from; - if (ent == 0) - ent = g_xml_entity_data; - for (; ent->name != 0; ++ent) { - QString ent_value = decodeEntityValue(ent->value); - if (value == ent_value) - return ent; - } - return 0; -} - -struct OperSpecSearchResult -{ - OperSpecSearchResult() { prefix_form = infix_form = postfix_form = 0; } - - const OperSpec *prefix_form, - *infix_form, - *postfix_form; - - const OperSpec *&getForm(Mml::FormType f); - bool haveForm(Mml::FormType f) - { return getForm(f) != 0; } - void addForm(const OperSpec *spec) - { getForm(spec->form) = spec; } -}; - -const OperSpec *&OperSpecSearchResult::getForm(Mml::FormType f) -{ - switch (f) { - case Mml::PrefixForm: - return prefix_form; - case Mml::InfixForm: - return infix_form; - case Mml::PostfixForm: - return postfix_form; - } - return postfix_form; // just to avoid warning -} - -/* - Searches g_oper_spec_data and returns any instance of operator name. There may - be more instances, but since the list is sorted, they will be next to each other. -*/ -static const OperSpec *searchOperSpecData(const QString &name) -{ - const char *name_latin1 = name.toLatin1().data(); - - // binary search - // establish invariant g_oper_spec_data[begin].name < name < g_oper_spec_data[end].name - - int cmp = qstrcmp(name_latin1, g_oper_spec_data[0].name); - if (cmp < 0) - return 0; - - if (cmp == 0) - return g_oper_spec_data; - - uint begin = 0; - uint end = g_oper_spec_count; - - // invariant holds - while (end - begin > 1) { - uint mid = (begin + end)/2; - - const OperSpec *spec = g_oper_spec_data + mid; - int cmp = qstrcmp(name_latin1, spec->name); - if (cmp < 0) - end = mid; - else if (cmp > 0) - begin = mid; - else - return spec; - } - - return 0; -} - -/* - This searches g_oper_spec_data until at least one name in name_list is found with FormType form, - or until name_list is exhausted. The idea here is that if we don't find the operator in the - specified form, we still want to use some other available form of that operator. -*/ -static OperSpecSearchResult _mmlFindOperSpec(const QStringList &name_list, Mml::FormType form) -{ - OperSpecSearchResult result; - - QStringList::const_iterator it = name_list.begin(); - for (; it != name_list.end(); ++it) { - const QString &name = *it; - - const OperSpec *spec = searchOperSpecData(name); - - if (spec == 0) - continue; - - const char *name_latin1 = name.toLatin1().data(); - - // backtrack to the first instance of name - while (spec > g_oper_spec_data && qstrcmp((spec - 1)->name, name_latin1) == 0) - --spec; - - // iterate over instances of name until the instances are exhausted or until we - // find an instance in the specified form. - do { - result.addForm(spec++); - if (result.haveForm(form)) - break; - } while (qstrcmp(spec->name, name_latin1) == 0); - - if (result.haveForm(form)) - break; - } - - return result; -} - -/* - text is a string between and . It can be a character ('+'), an - entity reference ("∞") or a character reference ("∞"). Our - job is to find an operator spec in the operator dictionary (g_oper_spec_data) - that matches text. Things are further complicated by the fact, that many - operators come in several forms (prefix, infix, postfix). - - If available, this function returns an operator spec matching text in the specified - form. If such operator is not available, returns an operator spec that matches - text, but of some other form in the preference order specified by the MathML spec. - If that's not available either, returns the default operator spec. -*/ -static const OperSpec *mmlFindOperSpec(const QString &text, Mml::FormType form) -{ - QStringList name_list; - name_list.append(text); - - // First, just try to find text in the operator dictionary. - OperSpecSearchResult result = _mmlFindOperSpec(name_list, form); - - if (!result.haveForm(form)) { - // Try to find other names for the operator represented by text. - - const EntitySpec *ent = 0; - for (;;) { - ent = searchEntitySpecData(text, ent); - if (ent == 0) - break; - name_list.append('&' + QString(ent->name) + ';'); - ++ent; - } - - result = _mmlFindOperSpec(name_list, form); - } - - const OperSpec *spec = result.getForm(form); - if (spec != 0) - return spec; - - spec = result.getForm(Mml::InfixForm); - if (spec != 0) - return spec; - - spec = result.getForm(Mml::PostfixForm); - if (spec != 0) - return spec; - - spec = result.getForm(Mml::PrefixForm); - if (spec != 0) - return spec; - - return &g_oper_spec_defaults; -} - -static QString mmlDictAttribute(const QString &name, const OperSpec *spec) -{ - int i = attributeIndex(name); - if (i == -1) - return QString::null; - else - return spec->attributes[i]; -} - -static uint interpretMathVariant(const QString &value, bool *ok) -{ - struct MathVariantValue { - const char *value; - uint mv; - }; - - static const MathVariantValue g_mv_data[] = - { - { "normal", Mml::NormalMV }, - { "bold", Mml::BoldMV }, - { "italic", Mml::ItalicMV }, - { "bold-italic", Mml::BoldMV | Mml::ItalicMV }, - { "double-struck", Mml::DoubleStruckMV }, - { "bold-fraktur", Mml::BoldMV | Mml::FrakturMV }, - { "script", Mml::ScriptMV }, - { "bold-script", Mml::BoldMV | Mml::ScriptMV }, - { "fraktur", Mml::FrakturMV }, - { "sans-serif", Mml::SansSerifMV }, - { "bold-sans-serif", Mml::BoldMV | Mml::SansSerifMV }, - { "sans-serif-italic", Mml::SansSerifMV | Mml::ItalicMV }, - { "sans-serif-bold-italic", Mml::SansSerifMV | Mml::ItalicMV | Mml::BoldMV }, - { "monospace", Mml::MonospaceMV }, - { 0, 0 } - }; - - const MathVariantValue *v = g_mv_data; - for (; v->value != 0; ++v) { - if (value == v->value) { - if (ok != 0) - *ok = true; - return v->mv; - } - } - - if (ok != 0) - *ok = false; - - qWarning("interpretMathVariant(): could not parse value: \"%s\"", value.toLatin1().data()); - - return Mml::NormalMV; -} - -static Mml::FormType interpretForm(const QString &value, bool *ok) -{ - if (ok != 0) - *ok = true; - - if (value == "prefix") - return Mml::PrefixForm; - if (value == "infix") - return Mml::InfixForm; - if (value == "postfix") - return Mml::PostfixForm; - - if (ok != 0) - *ok = false; - - qWarning("interpretForm(): could not parse value \"%s\"", value.toLatin1().data()); - return Mml::InfixForm; -} - -static Mml::ColAlign interpretColAlign(const QString &value_list, uint colnum, bool *ok) -{ - QString value = interpretListAttr(value_list, colnum, "center"); - - if (ok != 0) - *ok = true; - - if (value == "left") - return Mml::ColAlignLeft; - if (value == "right") - return Mml::ColAlignRight; - if (value == "center") - return Mml::ColAlignCenter; - - if (ok != 0) - *ok = false; - - qWarning("interpretColAlign(): could not parse value \"%s\"", value.toLatin1().data()); - return Mml::ColAlignCenter; -} - -static Mml::RowAlign interpretRowAlign(const QString &value_list, uint rownum, bool *ok) -{ - QString value = interpretListAttr(value_list, rownum, "axis"); - - if (ok != 0) - *ok = true; - - if (value == "top") - return Mml::RowAlignTop; - if (value == "center") - return Mml::RowAlignCenter; - if (value == "bottom") - return Mml::RowAlignBottom; - if (value == "baseline") - return Mml::RowAlignBaseline; - if (value == "axis") - return Mml::RowAlignAxis; - - if (ok != 0) - *ok = false; - - qWarning("interpretRowAlign(): could not parse value \"%s\"", value.toLatin1().data()); - return Mml::RowAlignAxis; -} - -static QString interpretListAttr(const QString &value_list, int idx, const QString &def) -{ - QStringList l = value_list.split(' '); - - if (l.count() == 0) - return def; - - if (l.count() <= idx) - return l[l.count() - 1]; - else - return l[idx]; -} - -static Mml::FrameType interpretFrameType(const QString &value_list, uint idx, bool *ok) -{ - if (ok != 0) - *ok = true; - - QString value = interpretListAttr(value_list, idx, "none"); - - if (value == "none") - return Mml::FrameNone; - if (value == "solid") - return Mml::FrameSolid; - if (value == "dashed") - return Mml::FrameDashed; - - if (ok != 0) - *ok = false; - - qWarning("interpretFrameType(): could not parse value \"%s\"", value.toLatin1().data()); - return Mml::FrameNone; -} - - -static Mml::FrameSpacing interpretFrameSpacing(const QString &value_list, int em, int ex, bool *ok) -{ - Mml::FrameSpacing fs; - - QStringList l = value_list.split(' '); - if (l.count() != 2) { - qWarning("interpretFrameSpacing: could not parse value \"%s\"", value_list.toLatin1().data()); - if (ok != 0) - *ok = false; - return Mml::FrameSpacing((int)(0.4*em), (int)(0.5*ex)); - } - - bool hor_ok, ver_ok; - fs.m_hor = interpretSpacing(l[0], em, ex, &hor_ok); - fs.m_ver = interpretSpacing(l[1], em, ex, &ver_ok); - - if (ok != 0) - *ok = hor_ok && ver_ok; - - return fs; -} - -static QFont interpretDepreciatedFontAttr(const MmlAttributeMap &font_attr, QFont &fn, int em, int ex) -{ - if (font_attr.contains("fontsize")) { - QString value = font_attr["fontsize"]; - - for (;;) { - - bool ok; - int ptsize = interpretPointSize(value, &ok); - if (ok) { - fn.setPointSize(ptsize); - break; - } - - ptsize = interpretPercentSpacing(value, fn.pointSize(), &ok); - if (ok) { - fn.setPointSize(ptsize); - break; - } - - int size = interpretSpacing(value, em, ex, &ok); - if (ok) { - fn.setPixelSize(size); - break; - } - - break; - } - } - - if (font_attr.contains("fontweight")) { - QString value = font_attr["fontweight"]; - if (value == "normal") - fn.setBold(false); - else if (value == "bold") - fn.setBold(true); - else - qWarning("interpretDepreciatedFontAttr(): could not parse fontweight \"%s\"", value.toLatin1().data()); - } - - if (font_attr.contains("fontstyle")) { - QString value = font_attr["fontstyle"]; - if (value == "normal") - fn.setItalic(false); - else if (value == "italic") - fn.setItalic(true); - else - qWarning("interpretDepreciatedFontAttr(): could not parse fontstyle \"%s\"", value.toLatin1().data()); - } - - if (font_attr.contains("fontfamily")) { - QString value = font_attr["fontfamily"]; - fn.setFamily(value); - } - - return fn; -} - -static QFont interpretMathSize(QString value, QFont &fn, int em, int ex, bool *ok) -{ - if (ok != 0) - *ok = true; - - if (value == "small") { - fn.setPointSize((int)(fn.pointSize()*0.7)); - return fn; - } - - if (value == "normal") - return fn; - - if (value == "big") { - fn.setPointSize((int)(fn.pointSize()*1.5)); - return fn; - } - - bool size_ok; - - int ptsize = interpretPointSize(value, &size_ok); - if (size_ok) { - fn.setPointSize(ptsize); - return fn; - } - - int size = interpretSpacing(value, em, ex, &size_ok); - if (size_ok) { - fn.setPixelSize(size); - return fn; - } - - if (ok != 0) - *ok = false; - qWarning("interpretMathSize(): could not parse mathsize \"%s\"", value.toLatin1().data()); - return fn; -} - -/*! - \class QtMmlDocument - - \brief The QtMmlDocument class renders mathematical formulas written in MathML 2.0. - - This class provides a direct API to the rendering engine used by - QtMmlWidget. It can be used to paint MathML inside other widgets. - - All methods work the same as the corresponding methods in QtMmlWidget. -*/ - -/*! - Constructs an empty MML document. -*/ -QtMmlDocument::QtMmlDocument() -{ - m_doc = new MmlDocument; -} - -/*! - Destroys the MML document. -*/ -QtMmlDocument::~QtMmlDocument() -{ - delete m_doc; -} - -/*! - Clears the contents of this MML document. -*/ -void QtMmlDocument::clear() -{ - m_doc->clear(); -} - -/*! - Sets the MathML expression to be rendered. The expression is given - in the string \a text. If the expression is successfully parsed, - this method returns true; otherwise it returns false. If an error - occured \a errorMsg is set to a diagnostic message, while \a - errorLine and \a errorColumn contain the location of the error. - Any of \a errorMsg, \a errorLine and \a errorColumn may be 0, - in which case they are not set. - - \a text should contain MathML 2.0 presentation markup elements enclosed - in a element. -*/ -bool QtMmlDocument::setContent(QString text, QString *errorMsg, - int *errorLine, int *errorColumn) -{ - return m_doc->setContent(text, errorMsg, errorLine, errorColumn); -} - -/*! - Renders this MML document with the painter \a p at position \a pos. -*/ -void QtMmlDocument::paint(QPainter *p, const QPoint &pos) const -{ - m_doc->paint(p, pos); -} - -/*! - Returns the size of this MML document, as rendered, in pixels. -*/ -QSize QtMmlDocument::size() const -{ - return m_doc->size(); -} - -/*! - Returns the name of the font used to render the font \a type. - - \sa setFontName() setBaseFontPointSize() baseFontPointSize() QtMmlWidget::MmlFont -*/ -QString QtMmlDocument::fontName(QtMmlWidget::MmlFont type) const -{ - return m_doc->fontName(type); -} - -/*! - Sets the name of the font used to render the font \a type to \a name. - - \sa fontName() setBaseFontPointSize() baseFontPointSize() QtMmlWidget::MmlFont -*/ -void QtMmlDocument::setFontName(QtMmlWidget::MmlFont type, const QString &name) -{ - m_doc->setFontName(type, name); -} - -/*! - Returns the point size of the font used to render expressions - whose scriptlevel is 0. - - \sa setBaseFontPointSize() fontName() setFontName() -*/ -int QtMmlDocument::baseFontPointSize() const -{ - return m_doc->baseFontPointSize(); -} - -/*! - Sets the point \a size of the font used to render expressions - whose scriptlevel is 0. - - \sa baseFontPointSize() fontName() setFontName() -*/ -void QtMmlDocument::setBaseFontPointSize(int size) -{ - m_doc->setBaseFontPointSize(size); -} diff --git a/qtmmlwidget/qtmmlwidget.h b/qtmmlwidget/qtmmlwidget.h deleted file mode 100644 index 2c9b1c6..0000000 --- a/qtmmlwidget/qtmmlwidget.h +++ /dev/null @@ -1,124 +0,0 @@ -/**************************************************************************** -** -** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of a Qt Solutions component. -** -** Commercial Usage -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Solutions Commercial License Agreement provided -** with the Software or, alternatively, in accordance with the terms -** contained in a written agreement between you and Nokia. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** Please note Third Party Software included with Qt Solutions may impose -** additional restrictions and it is the user's responsibility to ensure -** that they have met the licensing requirements of the GPL, LGPL, or Qt -** Solutions Commercial license and the relevant license of the Third -** Party Software they are using. -** -** If you are unsure which license is appropriate for your use, please -** contact Nokia at qt-info@nokia.com. -** -****************************************************************************/ - -#ifndef QTMMLWIDGET_H -#define QTMMLWIDGET_H - -#include -#include - -class MmlDocument; - -#if defined(Q_WS_WIN) -# if !defined(QT_QTMMLWIDGET_EXPORT) && !defined(QT_QTMMLWIDGET_IMPORT) -# define QT_QTMMLWIDGET_EXPORT -# elif defined(QT_QTMMLWIDGET_IMPORT) -# if defined(QT_QTMMLWIDGET_EXPORT) -# undef QT_QTMMLWIDGET_EXPORT -# endif -# define QT_QTMMLWIDGET_EXPORT __declspec(dllimport) -# elif defined(QT_QTMMLWIDGET_EXPORT) -# undef QT_QTMMLWIDGET_EXPORT -# define QT_QTMMLWIDGET_EXPORT __declspec(dllexport) -# endif -#else -# define QT_QTMMLWIDGET_EXPORT -#endif - -class QT_QTMMLWIDGET_EXPORT QtMmlWidget : public QFrame -{ - public: - enum MmlFont { NormalFont, FrakturFont, SansSerifFont, ScriptFont, - MonospaceFont, DoublestruckFont }; - - QtMmlWidget(QWidget *parent = 0); - ~QtMmlWidget(); - - QString fontName(MmlFont type) const; - void setFontName(MmlFont type, const QString &name); - int baseFontPointSize() const; - void setBaseFontPointSize(int size); - - bool setContent(const QString &text, QString *errorMsg = 0, - int *errorLine = 0, int *errorColumn = 0); - void dump() const; - virtual QSize sizeHint() const; - - void setDrawFrames(bool b); - bool drawFrames() const; - - void clear(); - - protected: - virtual void paintEvent(QPaintEvent *e); - - private: - MmlDocument *m_doc; -}; - - -class QT_QTMMLWIDGET_EXPORT QtMmlDocument -{ -public: - QtMmlDocument(); - ~QtMmlDocument(); - void clear(); - - bool setContent(QString text, QString *errorMsg = 0, - int *errorLine = 0, int *errorColumn = 0); - void paint(QPainter *p, const QPoint &pos) const; - QSize size() const; - - QString fontName(QtMmlWidget::MmlFont type) const; - void setFontName(QtMmlWidget::MmlFont type, const QString &name); - - int baseFontPointSize() const; - void setBaseFontPointSize(int size); -private: - MmlDocument *m_doc; -}; - -#endif diff --git a/keduvocdocument/sharedkvtmlfiles.cpp b/sharedkvtmlfiles.cpp similarity index 100% rename from keduvocdocument/sharedkvtmlfiles.cpp rename to sharedkvtmlfiles.cpp diff --git a/keduvocdocument/sharedkvtmlfiles.h b/sharedkvtmlfiles.h similarity index 100% rename from keduvocdocument/sharedkvtmlfiles.h rename to sharedkvtmlfiles.h diff --git a/widgets/CMakeLists.txt b/widgets/CMakeLists.txt deleted file mode 100644 index 7d531c1..0000000 --- a/widgets/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ - - -########### next target ############### - -set(kdeeduwidgets_PART_SRCS - ${CMAKE_CURRENT_BINARY_DIR}/kdeeduwidgets.cpp -) - -KDE4_ADD_WIDGET_FILES(kdeeduwidgets_PART_SRCS kdeedu.widgets) - -kde4_add_plugin(kdeeduwidgets ${kdeeduwidgets_PART_SRCS}) - - - -target_link_libraries(kdeeduwidgets ${KDE4_KDEUI_LIBS}) - -install(TARGETS kdeeduwidgets DESTINATION ${PLUGIN_INSTALL_DIR}/plugins/designer ) - diff --git a/widgets/kdeedu.widgets b/widgets/kdeedu.widgets deleted file mode 100644 index 2d3b6ce..0000000 --- a/widgets/kdeedu.widgets +++ /dev/null @@ -1,4 +0,0 @@ -[Global] -PluginName=KDEEduWidgets -Includes=kcomponentdata.h -Init=new KComponentData("kdeeduwidgets");