本文整理汇总了C++中ZLTextWordCursor类的典型用法代码示例。如果您正苦于以下问题:C++ ZLTextWordCursor类的具体用法?C++ ZLTextWordCursor怎么用?C++ ZLTextWordCursor使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ZLTextWordCursor类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: startCursor
bool ZLTextArea::_getHyperlinkInfo(const ZLTextElementRectangle &rectangle, std::string &id, std::string &type, ZLTextKind& hyperlinkKind, int& x1, int&y1, int& x2, int& y2) const {
if ((rectangle.Kind != ZLTextElement::WORD_ELEMENT) &&
(rectangle.Kind != ZLTextElement::IMAGE_ELEMENT)) {
return false;
}
ZLTextWordCursor cursor = startCursor();
cursor.moveToParagraph(rectangle.ParagraphIndex);
cursor.moveToParagraphStart();
hyperlinkKind = REGULAR;
for (int i = 0; i < rectangle.ElementIndex; ++i) {
const ZLTextElement &element = cursor.element();
if (element.kind() == ZLTextElement::CONTROL_ELEMENT) {
const ZLTextControlEntry &control = ((const ZLTextControlElement&)element).entry();
if (control.isHyperlink()) {
hyperlinkKind = control.kind();
id = ((const ZLTextHyperlinkControlEntry&)control).label();
type = ((const ZLTextHyperlinkControlEntry&)control).hyperlinkType();
x1 = rectangle.XStart;
y1 = rectangle.YStart;
x2 = rectangle.XEnd;
y2 = rectangle.YEnd;
} else if (!control.isStart() && (control.kind() == hyperlinkKind)) {
hyperlinkKind = REGULAR;
}
}
cursor.nextWord();
}
return hyperlinkKind != REGULAR;
}
开发者ID:pocketbook-free,项目名称:fbreader12,代码行数:30,代码来源:ZLTextArea.cpp
示例2: paragraphHeight
ZLTextWordCursor ZLTextAreaController::findStart(const ZLTextWordCursor &end, SizeUnit unit, int size) {
ZLTextWordCursor start = end;
size -= paragraphHeight(start, true, unit);
bool positionChanged = !start.isStartOfParagraph();
start.moveToParagraphStart();
while (size > 0) {
if (positionChanged && start.paragraphCursor().isEndOfSection()) {
break;
}
if (!start.previousParagraph()) {
break;
}
if (!start.paragraphCursor().isEndOfSection()) {
positionChanged = true;
}
size -= paragraphHeight(start, false, unit);
}
skip(start, unit, -size);
if (unit != LINE_UNIT) {
bool sameStart = start == end;
if (!sameStart && start.isEndOfParagraph() && end.isStartOfParagraph()) {
ZLTextWordCursor startCopy = start;
startCopy.nextParagraph();
sameStart = startCopy == end;
}
if (sameStart) {
start = findStart(end, LINE_UNIT, 1);
}
}
return start;
}
开发者ID:pocketbook-free,项目名称:fbreader12,代码行数:33,代码来源:ZLTextAreaController.cpp
示例3: isEnabled
bool ScrollToHomeAction::isEnabled() const {
if (!isVisible()) {
return false;
}
ZLTextWordCursor cursor = FBReader::Instance().bookTextView().textArea().startCursor();
return cursor.isNull() || !cursor.isStartOfParagraph() || !cursor.paragraphCursor().isFirst();
}
开发者ID:jinjianxin,项目名称:qt-opensource,代码行数:7,代码来源:FBReaderActions.cpp
示例4: textArea
bool BookTextView::getHyperlinkInfo(const ZLTextElementRectangle &rectangle, std::string &id, ZLHyperlinkType &type) const {
if ((rectangle.Kind != ZLTextElement::WORD_ELEMENT) &&
(rectangle.Kind != ZLTextElement::IMAGE_ELEMENT)) {
return false;
}
ZLTextWordCursor cursor = textArea().startCursor();
cursor.moveToParagraph(rectangle.ParagraphIndex);
cursor.moveToParagraphStart();
ZLTextKind hyperlinkKind = REGULAR;
for (int i = 0; i < rectangle.ElementIndex; ++i) {
const ZLTextElement &element = cursor.element();
if (element.kind() == ZLTextElement::CONTROL_ELEMENT) {
const ZLTextControlEntry &control = ((const ZLTextControlElement&)element).entry();
if (control.isHyperlink()) {
hyperlinkKind = control.kind();
id = ((const ZLTextHyperlinkControlEntry&)control).label();
type = ((const ZLTextHyperlinkControlEntry&)control).hyperlinkType();
} else if (!control.isStart() && (control.kind() == hyperlinkKind)) {
hyperlinkKind = REGULAR;
}
}
cursor.nextWord();
}
return hyperlinkKind != REGULAR;
}
开发者ID:euroelessar,项目名称:FBReader,代码行数:26,代码来源:BookTextView.cpp
示例5: startCursor
bool BookTextView::getHyperlinkId(const ZLTextElementArea &area, std::string &id, bool &isExternal) const {
if ((area.Kind != ZLTextElement::WORD_ELEMENT) &&
(area.Kind != ZLTextElement::IMAGE_ELEMENT)) {
return false;
}
ZLTextWordCursor cursor = startCursor();
cursor.moveToParagraph(area.ParagraphNumber);
cursor.moveToParagraphStart();
ZLTextKind hyperlinkKind = REGULAR;
for (int i = 0; i < area.TextElementNumber; ++i) {
const ZLTextElement &element = cursor.element();
if (element.kind() == ZLTextElement::CONTROL_ELEMENT) {
const ZLTextControlEntry &control = ((const ZLTextControlElement&)element).entry();
if (control.isHyperlink()) {
hyperlinkKind = control.kind();
id = ((const ZLTextHyperlinkControlEntry&)control).label();
} else if (!control.isStart() && (control.kind() == hyperlinkKind)) {
hyperlinkKind = REGULAR;
}
}
cursor.nextWord();
}
isExternal = hyperlinkKind == EXTERNAL_HYPERLINK;
return hyperlinkKind != REGULAR;
}
开发者ID:justsoso8,项目名称:fbreader-0.8.17,代码行数:26,代码来源:BookTextView.cpp
示例6: startCursor
std::string FBView::word(const ZLTextElementArea &area) const {
std::string txt;
if (area.Kind == ZLTextElement::WORD_ELEMENT) {
ZLTextWordCursor cursor = startCursor();
cursor.moveToParagraph(area.ParagraphIndex);
cursor.moveTo(area.ElementIndex, 0);
const ZLTextWord &word = (ZLTextWord&)cursor.element();
ZLUnicodeUtil::Ucs4String ucs4;
ZLUnicodeUtil::utf8ToUcs4(ucs4, word.Data, word.Size);
ZLUnicodeUtil::Ucs4String::iterator it = ucs4.begin();
while ((it != ucs4.end()) && !ZLUnicodeUtil::isLetter(*it)) {
++it;
}
if (it != ucs4.end()) {
ucs4.erase(ucs4.begin(), it);
it = ucs4.end() - 1;
while (!ZLUnicodeUtil::isLetter(*it)) {
--it;
}
ucs4.erase(it + 1, ucs4.end());
ZLUnicodeUtil::ucs4ToUtf8(txt, ucs4);
}
}
return txt;
}
开发者ID:justsoso8,项目名称:fbreader,代码行数:27,代码来源:FBView.cpp
示例7: endCursor
std::vector<size_t>::const_iterator ZLTextView::nextBreakIterator() const {
ZLTextWordCursor cursor = endCursor();
if (cursor.isNull()) {
cursor = startCursor();
}
if (cursor.isNull()) {
return myTextBreaks.begin();
}
return std::lower_bound(myTextBreaks.begin(), myTextBreaks.end(), cursor.paragraphCursor().index());
}
开发者ID:mhuber,项目名称:fbreader,代码行数:10,代码来源:ZLTextView.cpp
示例8: if
void ZLTextView::ViewStyle::applyControls(const ZLTextWordCursor &begin, const ZLTextWordCursor &end) {
for (ZLTextWordCursor cursor = begin; !cursor.equalWordNumber(end); cursor.nextWord()) {
const ZLTextElement &element = cursor.element();
if (element.kind() == ZLTextElement::CONTROL_ELEMENT) {
applyControl((ZLTextControlElement&)element);
} else if (element.kind() == ZLTextElement::FORCED_CONTROL_ELEMENT) {
applyControl((ZLTextForcedControlElement&)element);
}
}
}
开发者ID:justsoso8,项目名称:fbreader-0.8.17,代码行数:10,代码来源:ZLTextViewStyle.cpp
示例9: strongContains
bool strongContains(const ZLTextSelectionModel::Range &range, const ZLTextWordCursor &cursor) {
const int pn = cursor.paragraphCursor().index();
const int wn = cursor.elementIndex();
return
((range.first.ParagraphIndex < pn) ||
((range.first.ParagraphIndex == pn) &&
(range.first.ElementIndex < wn))) &&
((range.second.ParagraphIndex > pn) ||
((range.second.ParagraphIndex == pn) &&
(range.second.ElementIndex > wn)));
}
开发者ID:chenhbzl,项目名称:BooxApp,代码行数:11,代码来源:ZLTextView_paint.cpp
示例10: sizeOfTextBeforeParagraph
size_t ZLTextView::PositionIndicator::sizeOfTextBeforeCursor(const ZLTextWordCursor &cursor) const {
const size_t paragraphIndex = cursor.paragraphCursor().index();
const size_t paragraphLength = cursor.paragraphCursor().paragraphLength();
if (paragraphLength == 0) {
return sizeOfTextBeforeParagraph(paragraphIndex);
} else {
return
sizeOfTextBeforeParagraph(paragraphIndex) +
muldiv(sizeOfParagraph(paragraphIndex), cursor.elementIndex(), paragraphLength);
}
}
开发者ID:mhuber,项目名称:fbreader,代码行数:12,代码来源:ZLTextPositionIndicator.cpp
示例11: buildInfos
ZLTextWordCursor ZLTextAreaController::buildInfos(const ZLTextWordCursor &start) {
myArea.myLineInfos.clear();
ZLTextWordCursor cursor = start;
int textHeight = myArea.height();
int counter = 0;
do {
ZLTextWordCursor paragraphEnd = cursor;
paragraphEnd.moveToParagraphEnd();
ZLTextWordCursor paragraphStart = cursor;
paragraphStart.moveToParagraphStart();
ZLTextArea::Style style(myArea, myArea.myProperties.baseStyle());
style.applyControls(paragraphStart, cursor);
ZLTextLineInfoPtr info = new ZLTextLineInfo(cursor, style.textStyle(), style.bidiLevel());
while (!info->End.isEndOfParagraph()) {
info = myArea.processTextLine(style, info->End, paragraphEnd);
textHeight -= info->Height + info->Descent;
if ((textHeight < 0) && (counter > 0)) {
break;
}
textHeight -= info->VSpaceAfter;
cursor = info->End;
myArea.myLineInfos.push_back(info);
if (textHeight < 0) {
break;
}
++counter;
}
} while (cursor.isEndOfParagraph() && cursor.nextParagraph() && !cursor.paragraphCursor().isEndOfSection() && (textHeight >= 0));
return cursor;
}
开发者ID:pocketbook-free,项目名称:fbreader12,代码行数:34,代码来源:ZLTextAreaController.cpp
示例12: skip
void ZLTextAreaController::skip(ZLTextWordCursor &cursor, SizeUnit unit, int size) {
ZLTextWordCursor paragraphStart = cursor;
paragraphStart.moveToParagraphStart();
ZLTextWordCursor paragraphEnd = cursor;
paragraphEnd.moveToParagraphEnd();
ZLTextArea::Style style(myArea, myArea.myProperties.baseStyle());
style.applyControls(paragraphStart, cursor);
while (!cursor.isEndOfParagraph() && (size > 0)) {
const ZLTextLineInfoPtr info =
myArea.processTextLine(style, cursor, paragraphEnd);
cursor = info->End;
size -= infoHeight(*info, unit);
}
}
开发者ID:pocketbook-free,项目名称:fbreader12,代码行数:16,代码来源:ZLTextAreaController.cpp
示例13: fbreader
bool CollectionView::_onStylusPress(int x, int y) {
fbreader().setHyperlinkCursor(false);
const ZLTextElementArea *imageArea = elementByCoordinates(x, y);
if ((imageArea != 0) && (imageArea->Kind == ZLTextElement::IMAGE_ELEMENT)) {
ZLTextWordCursor cursor = startCursor();
cursor.moveToParagraph(imageArea->ParagraphIndex);
cursor.moveTo(imageArea->ElementIndex, 0);
const ZLTextElement &element = cursor.element();
if (element.kind() != ZLTextElement::IMAGE_ELEMENT) {
return false;
}
const ZLTextImageElement &imageElement = (ZLTextImageElement&)element;
const std::string &id = imageElement.id();
if (id == CollectionModel::BookInfoImageId) {
editBookInfo(collectionModel().bookByParagraphIndex(imageArea->ParagraphIndex));
return true;
} else if (id == CollectionModel::RemoveBookImageId) {
removeBook(collectionModel().bookByParagraphIndex(imageArea->ParagraphIndex));
return true;
} else if (id == CollectionModel::RemoveTagImageId) {
removeTag(collectionModel().tagByParagraphIndex(imageArea->ParagraphIndex));
return true;
} else if (id == CollectionModel::TagInfoImageId) {
editTagInfo(collectionModel().tagByParagraphIndex(imageArea->ParagraphIndex));
return true;
} else {
return false;
}
}
int index = paragraphIndexByCoordinates(x, y);
if (index == -1) {
return false;
}
BookDescriptionPtr book = collectionModel().bookByParagraphIndex(index);
if (!book.isNull()) {
fbreader().openBook(book);
fbreader().showBookTextView();
return true;
}
return false;
}
开发者ID:justsoso8,项目名称:fbreader,代码行数:47,代码来源:CollectionView.cpp
示例14: sizeOfTextBeforeCursor
void ZLTextView::PositionIndicator::draw() {
ZLTextBaseStyle &baseStyle = ZLTextStyleCollection::instance().baseStyle();
ZLPaintContext &context = this->context();
ZLTextWordCursor endCursor = myTextView.endCursor();
bool isEndOfText = false;
if (endCursor.isEndOfParagraph()) {
isEndOfText = !endCursor.nextParagraph();
}
myExtraWidth = 0;
if (myInfo.isTimeShown()) {
drawExtraText(timeString());
}
if (myInfo.isBatteryShown()) {
drawExtraText(batteryString());
}
if (myInfo.isTextPositionShown()) {
drawExtraText(textPositionString());
}
const long bottom = this->bottom();
const long top = this->top();
const long left = this->left();
const long right = this->right();
if (left >= right) {
return;
}
size_t fillWidth = right - left - 1;
if (!isEndOfText) {
fillWidth =
muldiv(fillWidth, sizeOfTextBeforeCursor(myTextView.endCursor()), sizeOfTextBeforeParagraph(endTextIndex()));
}
context.setColor(baseStyle.RegularTextColorOption.value());
context.setFillColor(myInfo.color());
context.fillRectangle(myTextView.visualX(left + 1), top + 1, myTextView.visualX(left + fillWidth + 1), bottom - 1);
context.drawLine(myTextView.visualX(left), top, myTextView.visualX(right), top);
context.drawLine(myTextView.visualX(left), bottom, myTextView.visualX(right), bottom);
context.drawLine(myTextView.visualX(left), bottom, myTextView.visualX(left), top);
context.drawLine(myTextView.visualX(right), bottom, myTextView.visualX(right), top);
}
开发者ID:mhuber,项目名称:fbreader,代码行数:46,代码来源:ZLTextPositionIndicator.cpp
示例15: sizeOfParagraph
size_t ZLTextView::PositionIndicator::sizeOfTextBeforeParagraph(size_t paragraphIndex) const {
if (myTextView.myModel->kind() == ZLTextModel::TREE_MODEL) {
ZLTextWordCursor cursor = myTextView.startCursor();
if (cursor.isNull()) {
cursor = myTextView.endCursor();
}
if (!cursor.isNull()) {
const ZLTextTreeModel &treeModel = (const ZLTextTreeModel&)*myTextView.myModel;
size_t sum = 0;
for (size_t i = 0; i < paragraphIndex; ++i) {
const ZLTextTreeParagraph *para = (const ZLTextTreeParagraph*)treeModel[i];
if (para->parent()->isOpen()) {
sum += sizeOfParagraph(i);
}
}
return sum;
}
}
return myTextView.myTextSize[paragraphIndex] - myTextView.myTextSize[startTextIndex()];
}
开发者ID:mhuber,项目名称:fbreader,代码行数:20,代码来源:ZLTextPositionIndicator.cpp
示例16: clear
void ZLTextSelectionModel::extendWordSelectionToParagraph() {
clear();
myFirstBound.Before.ElementIndex = 0;
myFirstBound.Before.CharIndex = 0;
myFirstBound.After = myFirstBound.Before;
ZLTextWordCursor cursor = myView.startCursor();
cursor.moveToParagraph(myFirstBound.Before.ParagraphIndex);
cursor.moveToParagraphEnd();
mySecondBound.Before.ElementIndex = cursor.elementIndex();
mySecondBound.Before.CharIndex = 0;
mySecondBound.After = mySecondBound.Before;
myIsEmpty = false;
myTextIsUpToDate = false;
myRangeVectorIsUpToDate = false;
myDoUpdate = false;
}
开发者ID:chenhbzl,项目名称:BooxApp,代码行数:20,代码来源:ZLTextSelectionModel.cpp
示例17: sizeOfTextBeforeCursor
void ZLTextView::PositionIndicator::draw() {
ZLPaintContext &context = this->context();
ZLTextWordCursor endCursor = myTextView.textArea().endCursor();
bool isEndOfText = false;
if (endCursor.isEndOfParagraph()) {
isEndOfText = !endCursor.nextParagraph();
}
myExtraWidth = 0;
if (myInfo.isTimeShown()) {
drawExtraText(timeString());
}
if (myInfo.isTextPositionShown()) {
drawExtraText(textPositionString());
}
const long bottom = this->bottom();
const long top = this->top();
const long left = this->left();
const long right = this->right();
if (left >= right) {
return;
}
size_t fillWidth = right - left - 1;
if (!isEndOfText) {
fillWidth =
muldiv(fillWidth, sizeOfTextBeforeCursor(myTextView.textArea().endCursor()), sizeOfTextBeforeParagraph(endTextIndex()));
}
context.setColor(myTextView.color());
context.setFillColor(myInfo.color());
context.fillRectangle(left + 1, top + 1, left + fillWidth + 1, bottom - 1);
context.drawLine(left, top, right, top);
context.drawLine(left, bottom, right, bottom);
context.drawLine(left, bottom, left, top);
context.drawLine(right, bottom, right, top);
}
开发者ID:temper8,项目名称:Tizen-FBReader,代码行数:41,代码来源:ZLTextPositionIndicator.cpp
示例18: clear
void ZLTextSelectionModel::extendWordSelectionToParagraph() {
clear();
myFirstBound.Before.ElementIndex = 0;
myFirstBound.Before.CharIndex = 0;
myFirstBound.After = myFirstBound.Before;
ZLTextWordCursor cursor = myArea.startCursor();
cursor.moveToParagraph(myFirstBound.Before.ParagraphIndex);
cursor.moveToParagraphEnd();
mySecondBound.Before.ElementIndex = cursor.elementIndex();
mySecondBound.Before.CharIndex = 0;
mySecondBound.After = mySecondBound.Before;
myIsEmpty = false;
myTextIsUpToDate = false;
myRangeVectorIsUpToDate = false;
copySelectionToClipboard(ZLDialogManager::CLIPBOARD_SELECTION);
}
开发者ID:euroelessar,项目名称:FBReader,代码行数:21,代码来源:ZLTextSelectionModel.cpp
示例19: charIndex
int ZLTextSelectionModel::charIndex(const ZLTextElementArea &area, int x) {
myView.myStyle.setTextStyle(area.Style, area.BidiLevel);
ZLTextWordCursor cursor = myView.startCursor();
cursor.moveToParagraph(area.ParagraphIndex);
const ZLTextWord &word = (const ZLTextWord&)cursor.paragraphCursor()[area.ElementIndex];
const bool mainDir =
area.BidiLevel % 2 == myView.myStyle.baseBidiLevel() % 2;
const int deltaX = mainDir ? x - area.XStart : area.XEnd - x;
const int len = area.Length;
const int start = area.StartCharIndex;
int diff = deltaX;
int previousDiff = diff;
int index;
for (index = 0; (index < len) && (diff > 0); ++index) {
previousDiff = diff;
diff = deltaX - myView.myStyle.wordWidth(word, start, index + 1);
}
if (previousDiff + diff < 0) {
--index;
}
return start + index;
}
开发者ID:chenhbzl,项目名称:BooxApp,代码行数:22,代码来源:ZLTextSelectionModel.cpp
示例20: style
int ZLTextSelectionModel::charIndex(const ZLTextElementRectangle &rectangle, int x) {
int x1 = x - myArea.hOffset();
ZLTextArea::Style style(myArea, rectangle.Style);
style.setTextStyle(rectangle.Style, rectangle.BidiLevel);
ZLTextWordCursor cursor = myArea.startCursor();
cursor.moveToParagraph(rectangle.ParagraphIndex);
const ZLTextWord &word = (const ZLTextWord&)cursor.paragraphCursor()[rectangle.ElementIndex];
const bool mainDir =
rectangle.BidiLevel % 2 == (myArea.isRtl() ? 1 : 0);
const int deltaX = mainDir ? x1 - rectangle.XStart : rectangle.XEnd - x1;
const int len = rectangle.Length;
const int start = rectangle.StartCharIndex;
int diff = deltaX;
int previousDiff = diff;
int index;
for (index = 0; (index < len) && (diff > 0); ++index) {
previousDiff = diff;
diff = deltaX - style.wordWidth(word, start, index + 1);
}
if (previousDiff + diff < 0) {
--index;
}
return start + index;
}
开发者ID:euroelessar,项目名称:FBReader,代码行数:24,代码来源:ZLTextSelectionModel.cpp
注:本文中的ZLTextWordCursor类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论