From e24584da2090d7df2a1abd902deca0f88879d436 Mon Sep 17 00:00:00 2001 From: Wael El Oraiby Date: Mon, 20 May 2013 21:00:17 -0400 Subject: [PATCH] first version - missing lam alef ligature --- README.md | 35 +- README.md~ | 37 +++ ae_Tholoth.ttf | Bin 0 -> 181864 bytes arabic_string_layout.pro | 30 ++ arabic_test.txt | 1 + arabtype.c | 96 ++++++ arabtype.h | 17 + gpl-3.0.txt | 674 +++++++++++++++++++++++++++++++++++++++ lgpl-3.0.txt | 165 ++++++++++ main.cpp | 11 + mainwindow.cpp | 172 ++++++++++ mainwindow.h | 31 ++ mainwindow.ui | 50 +++ utf8.c | 53 +++ utf8.h | 42 +++ 15 files changed, 1413 insertions(+), 1 deletion(-) create mode 100644 README.md~ create mode 100644 ae_Tholoth.ttf create mode 100644 arabic_string_layout.pro create mode 100644 arabic_test.txt create mode 100644 arabtype.c create mode 100644 arabtype.h create mode 100644 gpl-3.0.txt create mode 100644 lgpl-3.0.txt create mode 100644 main.cpp create mode 100644 mainwindow.cpp create mode 100644 mainwindow.h create mode 100644 mainwindow.ui create mode 100644 utf8.c create mode 100644 utf8.h diff --git a/README.md b/README.md index bd9a4f9..fafbba5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,37 @@ arabtype ======== -a small and simple implementation that transform isolated arabic utf8 character strings into contextual forms. \ No newline at end of file +a small and simple implementation that transform isolated arabic utf8 character +strings into contextual forms. + +LICENSE: +======== +The code is released under LGPL version 3 with the permission to statically link +your program with the code, provided that you send me your bug fixes for any bug +you may find in the provided code. +I intend to release the source code later under a more permessive license so your +patch should be under an MIT license in order to make that possible. + +----------------------------------------------------------------------- +The utf8.c file is under the following license: + +Copyright (c) 2008-2009 Bjoern Hoehrmann + +See http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md~ b/README.md~ new file mode 100644 index 0000000..fafbba5 --- /dev/null +++ b/README.md~ @@ -0,0 +1,37 @@ +arabtype +======== + +a small and simple implementation that transform isolated arabic utf8 character +strings into contextual forms. + +LICENSE: +======== +The code is released under LGPL version 3 with the permission to statically link +your program with the code, provided that you send me your bug fixes for any bug +you may find in the provided code. +I intend to release the source code later under a more permessive license so your +patch should be under an MIT license in order to make that possible. + +----------------------------------------------------------------------- +The utf8.c file is under the following license: + +Copyright (c) 2008-2009 Bjoern Hoehrmann + +See http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/ae_Tholoth.ttf b/ae_Tholoth.ttf new file mode 100644 index 0000000000000000000000000000000000000000..74df449f87356ea027935351a8659583b53dc680 GIT binary patch literal 181864 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 TKQ{+%pWnOvd;a>@qi25rh_7hu literal 0 HcmV?d00001 diff --git a/arabic_string_layout.pro b/arabic_string_layout.pro new file mode 100644 index 0000000..979b395 --- /dev/null +++ b/arabic_string_layout.pro @@ -0,0 +1,30 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2012-09-21T20:12:51 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = arabic_string_layout +TEMPLATE = app + +QMAKE_CFLAGS_DEBUG += -std=c99 +QMAKE_CFLAGS_RELEASE += -std=c99 + +CONFIG += link_pkgconfig + +PKGCONFIG += freetype2 + +SOURCES += main.cpp\ + mainwindow.cpp \ + utf8.c \ + arabtype.c + +HEADERS += mainwindow.h \ + utf8.h \ + arabtype.h + +FORMS += mainwindow.ui diff --git a/arabic_test.txt b/arabic_test.txt new file mode 100644 index 0000000..a5d431d --- /dev/null +++ b/arabic_test.txt @@ -0,0 +1 @@ +اعطني الناي و غني فالغناﺀ سر الوجود فأنين الناي يبقئ بعد ان يفنئ الوجود diff --git a/arabtype.c b/arabtype.c new file mode 100644 index 0000000..d9ac78d --- /dev/null +++ b/arabtype.c @@ -0,0 +1,96 @@ +/* +** Arabtype Copyright 2012-2013(c) Wael El Oraiby. All Rights Reserved +** see README.md file for license +*/ + +#include +#include "utf8.h" +#include "arabtype.h" + +#define ARABIC_LETTER_START 0x621 +#define ARABIC_LETTER_END 0x64A + +#define ISOLATED 0 +#define ENDING 1 +#define INITIAL 2 +#define MEDIAL 3 + +// +// 0: isolated form +// 1: ending form +// 2: beginning form (if 0, it's a cutting type) +// 3: middle form +// +typedef uint32_t char_form[4]; + +char_form arabic_forms_b[] = +{ + {0xFE80, 0xFE80, 0, 0}, // hamza (0) + {0xFE81, 0xFE82, 0, 0}, // 2alif madda (1) + {0xFE83, 0xFE84, 0, 0}, // 2alif hamza (2) + {0xFE85, 0xFE86, 0, 0}, // waw hamza (3) + {0xFE87, 0xFE88, 0, 0}, // 2alif hamza maksoura (4) + {0xFE89, 0xFE8A, 0xFE8B, 0xFE8C}, // 2alif maqsoura hamza (5) + {0xFE8D, 0xFE8E, 0, 0}, // 2alif (6) + {0xFE8F, 0xFE90, 0xFE91, 0xFE92}, // ba2 (7) + {0xFE93, 0xFE94, 0, 0}, // ta2 marbouta (8) + {0xFE95, 0xFE96, 0xFE97, 0xFE98}, // ta2 (9) + {0xFE99, 0xFE9A, 0xFE9B, 0xFE9C}, // tha2 (10) + {0xFE9D, 0xFE9E, 0xFE9F, 0xFEA0}, // jim (11) + {0xFEA1, 0xFEA2, 0xFEA3, 0xFEA4}, // 7a2 (12) + {0xFEA5, 0xFEA6, 0xFEA7, 0xFEA8}, // kha2 (13) + {0xFEA9, 0xFEAA, 0, 0}, // dal (14) + {0xFEAB, 0xFEAC, 0, 0}, // dhal (15) + {0xFEAD, 0xFEAE, 0, 0}, // ra2 (16) + {0xFEAF, 0xFEB0, 0, 0}, // zayn (17) + {0xFEB1, 0xFEB2, 0xFEB3, 0xFEB4}, // syn (18) + {0xFEB5, 0xFEB6, 0xFEB7, 0xFEB8}, // shin (19) + {0xFEB9, 0xFEBA, 0xFEBB, 0xFEBC}, // sad (20) + {0xFEBD, 0xFEBE, 0xFEBF, 0xFEC0}, // dad (21) + {0xFEC1, 0xFEC2, 0xFEC3, 0xFEC4}, // tah (22) + {0xFEC5, 0xFEC6, 0xFEC7, 0xFEC8}, // thah (23) + {0xFEC9, 0xFECA, 0xFECB, 0xFECC}, // 3ayn (24) + {0xFECD, 0xFECE, 0xFECF, 0xFED0}, // ghayn (25) + {0, 0, 0, 0}, // (26) + {0, 0, 0, 0}, // (27) + {0, 0, 0, 0}, // (28) + {0, 0, 0, 0}, // (29) + {0, 0, 0, 0}, // (30) + {0x640, 0x640, 0x640, 0x640}, // wasla (31) + {0xFED1, 0xFED2, 0xFED3, 0xFED4}, // fa2 (32) + {0xFED5, 0xFED6, 0xFED7, 0xFED8}, // qaf (33) + {0xFED9, 0xFEDA, 0xFEDB, 0xFEDC}, // kaf (34) + {0xFEDD, 0xFEDE, 0xFEDF, 0xFEE0}, // lam (35) + {0xFEE1, 0xFEE2, 0xFEE3, 0xFEE4}, // mim (36) + {0xFEE5, 0xFEE6, 0xFEE7, 0xFEE8}, // noon (37) + {0xFEE9, 0xFEEA, 0xFEEB, 0xFEEC}, // ha2 (38) + {0xFEED, 0xFEEE, 0, 0}, // waw (39) + {0xFEFF, 0xFEF0, 0, 0}, // 2alif maksoura (40) + {0xFEF1, 0xFEF2, 0xFEF3, 0xFEF4} // ya2 (41) +}; + +bool is_arabic_letter(uint32_t cp) +{ + if( cp >= ARABIC_LETTER_START && cp <= ARABIC_LETTER_END ) + return true; + return false; +} + +bool is_linking_type(uint32_t cp) +{ + if( cp >= ARABIC_LETTER_START && cp <= ARABIC_LETTER_END ) + if( arabic_forms_b[cp - ARABIC_LETTER_START][INITIAL] || arabic_forms_b[cp - ARABIC_LETTER_START][MEDIAL] ) + return true; + return false; +} + + +uint32_t get_presentation_form_b(uint32_t prev, uint32_t next, uint32_t cp) +{ + if( !is_arabic_letter(cp) ) + return cp; /* not an Arabic letter */ + + uint32_t index = ((is_arabic_letter(next) & is_linking_type(cp)) << 1) | is_linking_type(prev); + + return arabic_forms_b[cp - ARABIC_LETTER_START][index]; +} diff --git a/arabtype.h b/arabtype.h new file mode 100644 index 0000000..b79ee3f --- /dev/null +++ b/arabtype.h @@ -0,0 +1,17 @@ +/* +** Arabtype Copyright 2012-2013(c) Wael El Oraiby. All Rights Reserved +** see README.md file for license +*/ +#ifndef ARABTYPE_H +#define ARABTYPE_H +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +uint32_t get_presentation_form_b(uint32_t prev, uint32_t next, uint32_t cp); + +#ifdef __cplusplus +} +#endif // __cplusplus + +#endif // ARABTYPE_H diff --git a/gpl-3.0.txt b/gpl-3.0.txt new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/gpl-3.0.txt @@ -0,0 +1,674 @@ + 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/lgpl-3.0.txt b/lgpl-3.0.txt new file mode 100644 index 0000000..65c5ca8 --- /dev/null +++ b/lgpl-3.0.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..24a397b --- /dev/null +++ b/main.cpp @@ -0,0 +1,11 @@ +#include +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/mainwindow.cpp b/mainwindow.cpp new file mode 100644 index 0000000..ea3a91f --- /dev/null +++ b/mainwindow.cpp @@ -0,0 +1,172 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include +#include +#include +#include +#include +#include + +#include "utf8.h" +#include "arabtype.h" + +FT_Library MainWindow::ftlib__ = NULL; + + + +uint32_t get_arabic_form(const std::vector& code_point, uint32_t idx) +{ + uint ch = code_point[idx]; + uint prev = 0; + uint next = 0; + + if( idx ) + prev = code_point[idx - 1]; + if( idx < code_point.size() - 1 ) + next = code_point[idx + 1]; + + return get_presentation_form_b(prev, next, ch); +} + +std::vector decode(const std::vector& in) +{ + std::vector ret; + uint codep = 0; + uint state = 0; + + for( size_t i = 0; i < in.size(); ++i ) + { + if( decode(&state, &codep, in[i]) == UTF8_ACCEPT ) + ret.push_back(codep); + } + if( state != UTF8_ACCEPT ) + std::cout << "The string is not well-formed" << std::endl; + + return ret; +} + +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), + ui__(new Ui::MainWindow) +{ + ui__->setupUi(this); + + std::ifstream ifs("arabic_test.txt"); + assert( ifs.is_open() ); + std::vector arabic_string; + + while( ifs.good() ) + { + uchar ch = ifs.get(); + if( ifs.good() ) + arabic_string.push_back(ch); + } + + std::cout << "size: " << arabic_string.size() << std::endl; + ifs.close(); + + std::vector arabic_cp = decode(arabic_string); + + for( size_t i = 0; i < arabic_cp.size(); ++i ) + std::cout << "0x" << std::hex << arabic_cp[i] << std::endl; + + std::cout << std::dec; + + if( !ftlib__ ) + { + FT_Error error = FT_Init_FreeType(&ftlib__); + assert( !error && "Error loading freetype" ); + } + + // load the font + FT_Face face; + FT_Error error; + + error = FT_New_Face(ftlib__, "ae_Tholoth.ttf", 0, &face); + assert( !error && "unable to load font file" ); + + // set font size + error = FT_Set_Pixel_Sizes(face, 0, 24); + assert( !error && "Error setting font size" ); + + // setup glyph + // render chars + FT_GlyphSlot slot = face->glyph; + + FT_Int32 load_flags = FT_LOAD_DEFAULT | FT_LOAD_FORCE_AUTOHINT; + FT_Render_Mode render_flags = FT_RENDER_MODE_NORMAL; + + + data__ = new uchar[1024 * 256 * 4]; + memset(data__, 0, 1024 * 256 * 4); + int col = 1024 - 1; + int line = 100; + QImage img(data__, 1024, 256, QImage::Format_RGB32); + // render the arabic glyphs + for( size_t idx = 0; idx < arabic_cp.size(); ++idx ) + { + uint ch = get_arabic_form(arabic_cp, idx); + if( ch == 0xA || ch == 0xC ) + continue; + + int glyph_index = FT_Get_Char_Index(face, ch); + assert( glyph_index && "invalid character" ); + + error = FT_Load_Glyph(face, glyph_index, load_flags); + assert( !error && "couldn't load glyph" ); + + error = FT_Render_Glyph(slot, render_flags); + assert( !error && "couldn't render glyph" ); + + FT_Glyph glyph; + FT_Get_Glyph(slot, &glyph); + + FT_BBox box; + FT_Glyph_Get_CBox(glyph, FT_GLYPH_BBOX_TRUNCATE, &box); + + int temp_col = col - (slot->advance.x >> 6);//slot->bitmap.width; + + for( int y = 0; y < slot->bitmap.rows; y++ ) + { + for( int x = 0; x < slot->bitmap.width; x++ ) + { + uchar co = slot->bitmap.buffer[x + y * slot->bitmap.pitch]; + if( co && x + temp_col < 1024 && x + temp_col >= 0 ) + { + uint rgb = img.pixel(x + temp_col + slot->bitmap_left, y - slot->bitmap_top + line); + + img.setPixel(x + temp_col + slot->bitmap_left, y - slot->bitmap_top + line, rgb | qRgb(co, co, co)); + } + + //std::cout << uint(co) << " "; + } + //std::cout << std::endl; + } + + //std::cout << std::endl; + + col -= slot->advance.x >> 6; + + FT_Done_Glyph(glyph); + } + + + for( int i = 0; i < 1024; ++i ) + //data__[i + 128 * 512 * 4 + 1] = 0xFF; + img.setPixel(i, 128, 0xFF000000); + QPixmap pixmap = QPixmap::fromImage(img); + ui__->label->setPixmap(pixmap); + + FT_Done_Face(face); +} + +MainWindow::~MainWindow() +{ + FT_Done_FreeType(ftlib__); + delete ui__; + delete data__; +} + +void MainWindow::paintEvent ( QPaintEvent * event ) +{ +} diff --git a/mainwindow.h b/mainwindow.h new file mode 100644 index 0000000..0b29001 --- /dev/null +++ b/mainwindow.h @@ -0,0 +1,31 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +#include +#include FT_FREETYPE_H +#include FT_GLYPH_H + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + +protected: + virtual void paintEvent(QPaintEvent* event); + +private: + Ui::MainWindow* ui__; + uchar* data__; + static FT_Library ftlib__; +}; + +#endif // MAINWINDOW_H diff --git a/mainwindow.ui b/mainwindow.ui new file mode 100644 index 0000000..062f947 --- /dev/null +++ b/mainwindow.ui @@ -0,0 +1,50 @@ + + + MainWindow + + + + 0 + 0 + 400 + 300 + + + + MainWindow + + + + + + + + + + + + + + + + 0 + 0 + 400 + 23 + + + + + + TopToolBarArea + + + false + + + + + + + + diff --git a/utf8.c b/utf8.c new file mode 100644 index 0000000..494396d --- /dev/null +++ b/utf8.c @@ -0,0 +1,53 @@ +/* +Copyright (c) 2008-2009 Bjoern Hoehrmann + +See http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#include "utf8.h" + +static const uint8_t utf8d[] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 00..1f + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 20..3f + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 40..5f + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 60..7f + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, // 80..9f + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, // a0..bf + 8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // c0..df + 0xa,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x4,0x3,0x3, // e0..ef + 0xb,0x6,0x6,0x6,0x5,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8, // f0..ff + 0x0,0x1,0x2,0x3,0x5,0x8,0x7,0x1,0x1,0x1,0x4,0x6,0x1,0x1,0x1,0x1, // s0..s0 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1, // s1..s2 + 1,2,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1, // s3..s4 + 1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,1,1,1,1,1,1, // s5..s6 + 1,3,1,1,1,1,1,3,1,3,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // s7..s8 +}; + +uint32_t decode(uint32_t* state, uint32_t* codep, uint32_t byte) +{ + uint8_t type = utf8d[byte]; + + *codep = (*state != UTF8_ACCEPT) ? + (byte & 0x3fu) | (*codep << 6) : + (0xff >> type) & (byte); + + *state = utf8d[256 + *state*16 + type]; + return *state; +} diff --git a/utf8.h b/utf8.h new file mode 100644 index 0000000..fba4509 --- /dev/null +++ b/utf8.h @@ -0,0 +1,42 @@ +#ifndef UTF8_H +#define UTF8_H + +/* +Copyright (c) 2008-2009 Bjoern Hoehrmann + +See http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#include + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +#define UTF8_ACCEPT 0 +#define UTF8_REJECT 1 + +uint32_t decode(uint32_t* state, uint32_t* codep, uint32_t byte); + +#ifdef __cplusplus +} +#endif + +#endif // UTF8_H -- 2.39.5