diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2009-03-23 09:18:55 (GMT) |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2009-03-23 09:18:55 (GMT) |
commit | e5fcad302d86d316390c6b0f62759a067313e8a9 (patch) | |
tree | c2afbf6f1066b6ce261f14341cf6d310e5595bc1 /src/corelib/tools/qharfbuzz.cpp | |
download | Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.zip Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.gz Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.bz2 |
Long live Qt 4.5!
Diffstat (limited to 'src/corelib/tools/qharfbuzz.cpp')
-rw-r--r-- | src/corelib/tools/qharfbuzz.cpp | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/src/corelib/tools/qharfbuzz.cpp b/src/corelib/tools/qharfbuzz.cpp new file mode 100644 index 0000000..1940209 --- /dev/null +++ b/src/corelib/tools/qharfbuzz.cpp @@ -0,0 +1,169 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** 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.0, 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. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qharfbuzz_p.h" + +#include "qunicodetables_p.h" +#include "qlibrary.h" +#include "qtextcodec.h" + +QT_USE_NAMESPACE + +extern "C" { + +HB_GraphemeClass HB_GetGraphemeClass(HB_UChar32 ch) +{ + const QUnicodeTables::Properties *prop = QUnicodeTables::properties(ch); + return (HB_GraphemeClass) prop->graphemeBreak; +} + +HB_WordClass HB_GetWordClass(HB_UChar32 ch) +{ + const QUnicodeTables::Properties *prop = QUnicodeTables::properties(ch); + return (HB_WordClass) prop->wordBreak; +} + +HB_SentenceClass HB_GetSentenceClass(HB_UChar32 ch) +{ + const QUnicodeTables::Properties *prop = QUnicodeTables::properties(ch); + return (HB_SentenceClass) prop->sentenceBreak; +} + +HB_LineBreakClass HB_GetLineBreakClass(HB_UChar32 ch) +{ + return (HB_LineBreakClass)QUnicodeTables::lineBreakClass(ch); +} + + +void HB_GetGraphemeAndLineBreakClass(HB_UChar32 ch, HB_GraphemeClass *grapheme, HB_LineBreakClass *lineBreak) +{ + const QUnicodeTables::Properties *prop = QUnicodeTables::properties(ch); + *grapheme = (HB_GraphemeClass) prop->graphemeBreak; + *lineBreak = (HB_LineBreakClass) prop->line_break_class; +} + +void HB_GetUnicodeCharProperties(HB_UChar32 ch, HB_CharCategory *category, int *combiningClass) +{ + const QUnicodeTables::Properties *prop = QUnicodeTables::properties(ch); + *category = (HB_CharCategory)prop->category; + *combiningClass = prop->combiningClass; +} + +HB_CharCategory HB_GetUnicodeCharCategory(HB_UChar32 ch) +{ + return (HB_CharCategory)QChar::category(ch); +} + +int HB_GetUnicodeCharCombiningClass(HB_UChar32 ch) +{ + return QChar::combiningClass(ch); +} + +HB_UChar16 HB_GetMirroredChar(HB_UChar16 ch) +{ + return QChar::mirroredChar(ch); +} + +void *HB_Library_Resolve(const char *library, const char *symbol) +{ +#ifdef QT_NO_LIBRARY + return 0; +#else + return QLibrary::resolve(QLatin1String(library), symbol); +#endif +} + +void *HB_TextCodecForMib(int mib) +{ +#ifndef QT_NO_TEXTCODEC + return QTextCodec::codecForMib(mib); +#else + return 0; +#endif +} + +char *HB_TextCodec_ConvertFromUnicode(void *codec, const HB_UChar16 *unicode, hb_uint32 length, hb_uint32 *outputLength) +{ +#ifndef QT_NO_TEXTCODEC + QByteArray data = reinterpret_cast<QTextCodec *>(codec)->fromUnicode((const QChar *)unicode, length); + // ### suboptimal + char *output = (char *)malloc(data.length() + 1); + memcpy(output, data.constData(), data.length() + 1); + if (outputLength) + *outputLength = data.length(); + return output; +#else + return 0; +#endif +} + +void HB_TextCodec_FreeResult(char *string) +{ + free(string); +} + +} // extern "C" + +QT_BEGIN_NAMESPACE + +HB_Bool qShapeItem(HB_ShaperItem *item) +{ + return HB_ShapeItem(item); +} + +HB_Face qHBNewFace(void *font, HB_GetFontTableFunc tableFunc) +{ + return HB_NewFace(font, tableFunc); +} + +void qHBFreeFace(HB_Face face) +{ + HB_FreeFace(face); +} + +void qGetCharAttributes(const HB_UChar16 *string, hb_uint32 stringLength, + const HB_ScriptItem *items, hb_uint32 numItems, + HB_CharAttributes *attributes) +{ + HB_GetCharAttributes(string, stringLength, items, numItems, attributes); +} + +QT_END_NAMESPACE |