⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textboundaries.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
字号:
/* * Copyright (C) 2006 Zack Rusin <zack@kde.org> * * All rights reserved. * * 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 above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. OR * CONTRIBUTORS 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. */#include "config.h"#include "TextBoundaries.h"#include "NotImplemented.h"#include <QString>#include <QChar>#include <QDebug>#include <stdio.h>#if QT_VERSION >= 0x040400#include <qtextboundaryfinder.h>namespace WebCore{int findNextWordFromIndex(UChar const* buffer, int len, int position, bool forward){    QString str(reinterpret_cast<QChar const*>(buffer), len);    QTextBoundaryFinder iterator(QTextBoundaryFinder::Word, str);    iterator.setPosition(position >= len ? len - 1 : position);    if (forward) {        int pos = iterator.toNextBoundary();        while (pos > 0) {            if (QChar(buffer[pos-1]).isLetterOrNumber())                return pos;            pos = iterator.toNextBoundary();        }        return len;    } else {        int pos = iterator.toPreviousBoundary();        while (pos > 0) {            if (QChar(buffer[pos]).isLetterOrNumber())                return pos;            pos = iterator.toPreviousBoundary();        }        return 0;    }}void findWordBoundary(UChar const* buffer, int len, int position, int* start, int* end){    QString str(reinterpret_cast<QChar const*>(buffer), len);    QTextBoundaryFinder iterator(QTextBoundaryFinder::Word, str);    iterator.setPosition(position);    *start = position > 0 ? iterator.toPreviousBoundary() : 0;    *end = position == len ? len : iterator.toNextBoundary();}}#elsenamespace WebCore{    int findNextWordFromIndex(UChar const* buffer, int len, int position, bool forward){    QString str(reinterpret_cast<QChar const*>(buffer), len);    notImplemented();    return 0;}void findWordBoundary(UChar const* buffer, int len, int position, int* start, int* end){    QString str(reinterpret_cast<QChar const*>(buffer), len);    if (position > str.length()) {        *start = 0;        *end = 0;        return;    }    int currentPosition = position - 1;    QString foundWord;    while (currentPosition >= 0 &&           str[currentPosition].isLetter()) {        foundWord.prepend(str[currentPosition]);        --currentPosition;    }    // currentPosition == 0 means the first char is not letter    // currentPosition == -1 means we reached the beginning    int startPos = (currentPosition < 0) ? 0 : ++currentPosition;    currentPosition = position;    if (str[currentPosition].isLetter()) {            while (str[currentPosition].isLetter()) {                foundWord.append(str[currentPosition]);                ++currentPosition;            }    }    *start = startPos;    *end = currentPosition;}}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -