亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? qunicodetables.cpp

?? QT 開發環境里面一個很重要的文件
?? CPP
字號:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the QtCore module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.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 GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "qunicodetables_p.h"#include "qunicodedata.cpp"#define CURRENT_VERSION QChar::Unicode_4_0static inline const QUnicodeTables::Properties *qGetProp(uint ucs4){    int index = GET_PROP_INDEX(ucs4);    return uc_properties + index;}static inline const QUnicodeTables::Properties *qGetProp(ushort ucs2){    int index = GET_PROP_INDEX_UCS2(ucs2);    return uc_properties + index;}Q_CORE_EXPORT const QUnicodeTables::Properties *QUnicodeTables::properties(uint ucs4){    int index = GET_PROP_INDEX(ucs4);    return uc_properties + index;}Q_CORE_EXPORT QChar::Category QUnicodeTables::category(uint ucs4){    return (QChar::Category) qGetProp(ucs4)->category;}Q_CORE_EXPORT unsigned char QUnicodeTables::combiningClass(uint ucs4){    return (unsigned char) qGetProp(ucs4)->combiningClass;}Q_CORE_EXPORT QChar::Direction QUnicodeTables::direction(uint ucs4){    return (QChar::Direction) qGetProp(ucs4)->direction;}Q_CORE_EXPORT QUnicodeTables::LineBreakClass QUnicodeTables::lineBreakClass(uint ucs4){    return (QUnicodeTables::LineBreakClass) qGetProp(ucs4)->line_break_class;}Q_CORE_EXPORT QChar::Joining QUnicodeTables::joining(uint ucs4){    return (QChar::Joining) qGetProp(ucs4)->joining;}Q_CORE_EXPORT QChar::UnicodeVersion QUnicodeTables::unicodeVersion(uint ucs4){    return (QChar::UnicodeVersion) qGetProp(ucs4)->unicode_version;}Q_CORE_EXPORT int QUnicodeTables::digitValue(uint ucs4){    int val = qGetProp(ucs4)->digit_value;    return val == 0xf ? -1 : val;}Q_CORE_EXPORT bool QUnicodeTables::mirrored(uint ucs4){    return qGetProp(ucs4)->mirrorDiff != 0;}Q_CORE_EXPORT int QUnicodeTables::mirroredChar(uint ucs4){    return ucs4 + qGetProp(ucs4)->mirrorDiff;}Q_CORE_EXPORT int QUnicodeTables::upper(uint ucs4){    const QUnicodeTables::Properties *p = qGetProp(ucs4);    if (p->category == QChar::Letter_Lowercase)        return ucs4 + p->caseDiff;    return ucs4;}Q_CORE_EXPORT int QUnicodeTables::lower(uint ucs4){    const QUnicodeTables::Properties *p = qGetProp(ucs4);    if (p->category == QChar::Letter_Uppercase || p->category == QChar::Letter_Titlecase)        return ucs4 + p->caseDiff;    return ucs4;}enum {    Hangul_SBase = 0xac00,    Hangul_LBase = 0x1100,    Hangul_VBase = 0x1161,    Hangul_TBase = 0x11a7,    Hangul_SCount = 11172,    Hangul_LCount = 19,    Hangul_VCount = 21,    Hangul_TCount = 28,    Hangul_NCount = 21*28};// buffer has to have a length of 3. It's needed for Hangul decompositionstatic const unsigned short * QT_FASTCALL decomposition(uint ucs4, int *length, int *tag, unsigned short *buffer){    if (ucs4 >= Hangul_SBase && ucs4 < Hangul_SBase + Hangul_SCount) {        int SIndex = ucs4 - Hangul_SBase;        buffer[0] = Hangul_LBase + SIndex / Hangul_NCount; // L        buffer[1] = Hangul_VBase + (SIndex % Hangul_NCount) / Hangul_TCount; // V        buffer[2] = Hangul_TBase + SIndex % Hangul_TCount; // T        *length = buffer[2] == Hangul_TBase ? 2 : 3;        *tag = QChar::Canonical;        return buffer;    }    const unsigned short index = GET_DECOMPOSITION_INDEX(ucs4);    if (index == 0xffff)        return 0;    const unsigned short *decomposition = uc_decomposition_map+index;    *tag = (*decomposition) & 0xff;    *length = (*decomposition) >> 8;    return decomposition+1;}QString QUnicodeTables::decomposition(uint ucs4){    unsigned short buffer[3];    int length;    int tag;    const unsigned short *d = ::decomposition(ucs4, &length, &tag, buffer);    return QString::fromUtf16(d, length);}QChar::Decomposition QUnicodeTables::decompositionTag(uint ucs4){    const unsigned short index = GET_DECOMPOSITION_INDEX(ucs4);    if (index == 0xffff)        return QChar::NoDecomposition;    return (QChar::Decomposition)(uc_decomposition_map[index] & 0xff);}ushort QUnicodeTables::ligature(ushort u1, ushort u2){    // hangul L-V pair    int LIndex = u1 - Hangul_LBase;    if (0 <= LIndex && LIndex < Hangul_LCount) {        int VIndex = u2 - Hangul_VBase;        if (0 <= VIndex && VIndex < Hangul_VCount)            return Hangul_SBase + (LIndex * Hangul_VCount + VIndex) * Hangul_TCount;    }    // hangul LV-T pair    int SIndex = u1 - Hangul_SBase;    if (0 <= SIndex && SIndex < Hangul_SCount && (SIndex % Hangul_TCount) == 0) {        int TIndex = u2 - Hangul_TBase;        if (0 <= TIndex && TIndex <= Hangul_TCount)            return u1 + TIndex;    }    const unsigned short index = GET_LIGATURE_INDEX(u2);    if (index == 0xffff)        return 0;    const unsigned short *ligatures = uc_ligature_map+index;    ushort length = *ligatures;    ++ligatures;    // ### use bsearch    for (uint i = 0; i < length; ++i)        if (ligatures[2*i] == u1)            return ligatures[2*i+1];    return 0;}static QString decompose(const QString &str, bool canonical, QChar::UnicodeVersion version){    unsigned short buffer[3];    QString s = str;    const unsigned short *utf16 = s.utf16();    const unsigned short *uc = utf16 + s.length();    while (uc != utf16) {        uint ucs4 = *(--uc);        if (QUnicodeTables::isLowSurrogate(ucs4) && uc != utf16) {            ushort high = *(uc - 1);            if (QUnicodeTables::isHighSurrogate(high)) {                --uc;                ucs4 = QUnicodeTables::surrogateToUcs4(high, ucs4);            }        }        if (QUnicodeTables::unicodeVersion(ucs4) > version)            continue;        int length;        int tag;        const unsigned short *d = decomposition(ucs4, &length, &tag, buffer);        if (!d || (canonical && tag != QChar::Canonical))            continue;        s.replace(uc - utf16, ucs4 > 0x10000 ? 2 : 1, (const QChar *)d, length);        // since the insert invalidates the pointers and we do decomposition recursive        int pos = uc - utf16;        utf16 = s.utf16();        uc = utf16 + pos + length;    }    return s;}static QString compose(const QString &str){    QString s = str;    if (s.length() < 2)        return s;    // the loop can partly ignore high Unicode as all ligatures are in the BMP    int starter = 0;    int lastCombining = 0;    int pos = 0;    while (pos < s.length()) {        uint uc = s.utf16()[pos];        if (QUnicodeTables::isHighSurrogate(uc) && pos < s.length()-1) {            ushort low = s.utf16()[pos+1];            if (QUnicodeTables::isLowSurrogate(low)) {                uc = QUnicodeTables::surrogateToUcs4(uc, low);                ++pos;            }        }        int combining = QUnicodeTables::combiningClass(uc);        if (starter == pos - 1 || combining != lastCombining) {            // allowed to form ligature with S            QChar ligature = QUnicodeTables::ligature(s.utf16()[starter], uc);            if (ligature.unicode()) {                s[starter] = ligature;                s.remove(pos, 1);                continue;            }        }        if (!combining)            starter = pos;        lastCombining = combining;        ++pos;    }    return s;}static QString canonicalOrder(const QString &str, QChar::UnicodeVersion version){    QString s = str;    const int l = s.length()-1;    int pos = 0;    while (pos < l) {        int p2 = pos+1;        uint u1 = s.at(pos).unicode();        if (QUnicodeTables::isHighSurrogate(u1)) {            ushort low = s.at(pos+1).unicode();            if (QUnicodeTables::isLowSurrogate(low)) {                p2++;                u1 = QUnicodeTables::surrogateToUcs4(u1, low);                if (p2 >= l)                    break;            }        }        uint u2 = s.at(p2).unicode();        if (QUnicodeTables::isHighSurrogate(u2) && p2 < l-1) {            ushort low = s.at(p2+1).unicode();            if (QUnicodeTables::isLowSurrogate(low)) {                p2++;                u2 = QUnicodeTables::surrogateToUcs4(u2, low);            }        }        int c2 = QUnicodeTables::combiningClass(u2);        if (QUnicodeTables::unicodeVersion(u2) > version)            c2 = 0;        if (c2 == 0) {            pos = p2+1;            continue;        }        int c1 = QUnicodeTables::combiningClass(u1);        if (QUnicodeTables::unicodeVersion(u1) > version)            c1 = 0;        if (c1 > c2) {            QChar *uc = s.data();            int p = pos;            // exchange characters            if (u2 < 0x10000) {                uc[p++] = u2;            } else {                uc[p++] = QUnicodeTables::highSurrogate(u2);                uc[p++] = QUnicodeTables::lowSurrogate(u2);            }            if (u1 < 0x10000) {                uc[p++] = u1;            } else {                uc[p++] = QUnicodeTables::highSurrogate(u1);                uc[p++] = QUnicodeTables::lowSurrogate(u1);            }            if (pos > 0)                --pos;            if (pos > 0 && QUnicodeTables::isLowSurrogate(s.at(pos).unicode()))                --pos;        } else {            ++pos;            if (u1 > 0x10000)                ++pos;        }    }    return s;}QString QUnicodeTables::normalize(const QString &str, QString::NormalizationForm mode){    return normalize(str, mode, CURRENT_VERSION);}QString QUnicodeTables::normalize(const QString &str, QString::NormalizationForm mode, QChar::UnicodeVersion version){    QString s = str;    if (version != CURRENT_VERSION) {        for (int i = 0; i < NumNormalizationCorrections; ++i) {            const NormalizationCorrection n = uc_normalization_corrections[i];            if (n.version > version) {                QString orig;                orig += QChar(highSurrogate(n.ucs4));                orig += QChar(lowSurrogate(n.ucs4));                QString replacement;                replacement += QChar(highSurrogate(n.old_mapping));                replacement += QChar(lowSurrogate(n.old_mapping));                s.replace(orig, replacement);            }        }    }    s = decompose(s, mode < QString::NormalizationForm_KD, version);    s = canonicalOrder(s, version);    if (mode == QString::NormalizationForm_D || mode == QString::NormalizationForm_KD)        return s;    return compose(s);}int QUnicodeTables::script(unsigned int uc){    if (uc > 0xffff)        return Common;    int script = uc_scripts[uc >> 7];    if (script < ScriptSentinel)        return script;    script = (((script - ScriptSentinel) * UnicodeBlockSize) + UnicodeBlockCount);    script = uc_scripts[script + (uc & 0x7f)];    return script;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品亚洲精品国产欧美 | 国产精品69毛片高清亚洲| 狠狠色丁香婷婷综合| 91在线云播放| 国产日产欧美精品一区二区三区| 亚洲美女一区二区三区| 国产经典欧美精品| 4438成人网| 亚洲一区二区在线视频| 粉嫩av亚洲一区二区图片| 欧美大黄免费观看| 婷婷丁香久久五月婷婷| 91老师国产黑色丝袜在线| 国产欧美综合在线观看第十页| 蜜桃视频免费观看一区| 欧美亚洲国产一区二区三区va| 最新欧美精品一区二区三区| 国产成人在线免费| 久久久精品综合| 九一九一国产精品| 51精品国自产在线| 日日噜噜夜夜狠狠视频欧美人| 色婷婷综合久久| 依依成人精品视频| 91成人免费在线| 亚洲精品高清在线| 色婷婷一区二区| 樱花影视一区二区| 日本黄色一区二区| 一区二区三区四区视频精品免费| 91色视频在线| 亚洲精品欧美激情| 欧美曰成人黄网| 亚洲大片精品永久免费| 欧美日韩国产一区| 青青草97国产精品免费观看| 欧美一区二区二区| 久久精品国产999大香线蕉| 欧美一个色资源| 久久综合综合久久综合| 日韩欧美国产综合在线一区二区三区| 日韩国产在线观看| 日韩免费视频线观看| 久久99蜜桃精品| 2014亚洲片线观看视频免费| 国产精品66部| 最新日韩av在线| 欧美日韩国产美女| 美女视频黄 久久| 国产人妖乱国产精品人妖| 成人一级片网址| 亚洲激情在线激情| 欧美一区二区在线观看| 国产一区在线视频| 国产精品美女久久久久久久网站| 91浏览器在线视频| 日本不卡中文字幕| 国产午夜精品久久| 色综合久久久久| 丝袜亚洲精品中文字幕一区| 日韩精品一区二区在线观看| 成人深夜视频在线观看| 亚洲国产成人av好男人在线观看| 精品奇米国产一区二区三区| 不卡大黄网站免费看| 亚洲国产va精品久久久不卡综合| 久久综合久久99| 欧美性一区二区| 国精产品一区一区三区mba视频| 国产精品传媒视频| 欧美一区二区久久| 99精品欧美一区二区三区小说| 天天影视网天天综合色在线播放| 久久先锋影音av| 欧美专区亚洲专区| 国产成人在线免费| 蜜臀av一区二区三区| 1024成人网| 久久精品免视看| 91精品国产一区二区三区香蕉| 成人免费观看视频| 另类欧美日韩国产在线| 一区二区三区精品视频在线| 国产亚洲人成网站| 欧美一级高清片在线观看| 不卡电影免费在线播放一区| 久久国内精品自在自线400部| 一区二区三区电影在线播| 国产欧美精品区一区二区三区| 欧美日韩视频在线观看一区二区三区| 高清不卡一区二区| 久久精品国产久精国产| 日日夜夜精品免费视频| 亚洲天堂久久久久久久| 26uuu色噜噜精品一区| 69堂成人精品免费视频| 日本道在线观看一区二区| 成人av网站免费观看| 国产中文字幕一区| 蓝色福利精品导航| 蜜芽一区二区三区| 日韩国产一区二| 五月激情丁香一区二区三区| 亚洲精品国产品国语在线app| 国产精品色哟哟网站| 国产精品午夜春色av| 久久久91精品国产一区二区精品| 日韩欧美一区二区三区在线| 欧美一级欧美一级在线播放| 5566中文字幕一区二区电影 | 亚洲va欧美va人人爽午夜| √…a在线天堂一区| 国产精品国产三级国产aⅴ中文| 国产午夜久久久久| 国产女人18水真多18精品一级做| 精品福利av导航| 欧美成人免费网站| 26uuu精品一区二区| 欧美精品一区二区三区四区| 精品久久久久久久久久久久包黑料| 欧美一区二区三区日韩| 日韩一区二区麻豆国产| 91精品国产综合久久精品麻豆 | 国产婷婷色一区二区三区在线| 欧美大度的电影原声| 久久嫩草精品久久久精品一| 精品国产百合女同互慰| 26uuuu精品一区二区| 中文天堂在线一区| 中文字幕中文字幕一区| 亚洲一区二区三区在线看| 五月激情综合婷婷| 国内精品久久久久影院色| 国产福利精品导航| 日本韩国精品一区二区在线观看| 91国偷自产一区二区开放时间 | 成人美女视频在线观看| 91丨porny丨户外露出| 欧美精品在线一区二区三区| 精品国产电影一区二区| 中文字幕一区二区三区不卡| 亚洲综合一区二区| 激情综合色丁香一区二区| 成人精品视频.| 欧美日韩中文另类| 26uuu精品一区二区三区四区在线| 国产精品久久久久影院亚瑟| 亚洲成人免费av| 国产精品99久久久久久久女警| 91一区二区在线观看| 欧美日韩国产成人在线免费| 久久蜜桃一区二区| **欧美大码日韩| 九色综合国产一区二区三区| 91一区二区三区在线观看| 欧美成人性战久久| 亚洲女女做受ⅹxx高潮| 激情小说欧美图片| 色综合久久88色综合天天| 日韩一区二区免费在线电影| 亚洲欧洲国产日韩| 男女男精品视频网| 日本精品视频一区二区| 久久婷婷国产综合精品青草| 亚洲一区二区三区国产| 国产美女视频一区| 欧美美女黄视频| 国产精品国产精品国产专区不蜜| 日韩成人dvd| 一本久久综合亚洲鲁鲁五月天| 2024国产精品| 日韩高清不卡在线| 在线视频欧美精品| 中文字幕欧美三区| 另类欧美日韩国产在线| 欧美性videosxxxxx| 欧美韩国日本综合| 国产最新精品免费| 日韩欧美一区二区不卡| 日韩综合一区二区| 色噜噜狠狠色综合欧洲selulu| 久久精品在这里| 精品一区二区国语对白| 91精品国产综合久久精品图片| 夜夜揉揉日日人人青青一国产精品| 懂色一区二区三区免费观看| www日韩大片| 国模娜娜一区二区三区| 精品国产一区二区三区忘忧草 | 成人精品视频一区二区三区| 亚洲精品一区二区三区影院| 日韩国产精品大片| 欧美巨大另类极品videosbest | 2021久久国产精品不只是精品| 日韩专区欧美专区| 777午夜精品视频在线播放| 亚洲午夜久久久久久久久电影网 | 成人精品一区二区三区中文字幕| 国产清纯在线一区二区www| 国产成人8x视频一区二区|