Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Hardending: a few assertions added. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | revised_text | tip-466 |
Files: | files | file ages | folders |
SHA1: |
2f81be657d1f0eedb54aae8b50af46d5 |
User & Date: | gcramer 2017-07-07 15:22:17 |
Context
2017-07-20
| ||
09:24 | Fix in TkTextSeeCmd(). check-in: dc8c1cc0 user: gcramer tags: revised_text, tip-466 | |
2017-07-07
| ||
15:22 | Hardending: a few assertions added. check-in: 2f81be65 user: gcramer tags: revised_text, tip-466 | |
2017-07-04
| ||
09:44 | Bugfix [a34b49f8c6]: Missing cases with justifying right and center added. check-in: a69ad2fd user: gcramer tags: revised_text, tip-466 | |
Changes
Changes to generic/tkTextBTree.c.
︙ | ︙ | |||
7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 | const TkSharedText *sharedTextPtr; Node *nodePtr, *parentPtr; unsigned pixelReference; unsigned index; assert(textPtr); assert(textPtr->pixelReference != -1); if (linePtr == TkBTreeGetStartLine(textPtr)) { return 0; } pixelReference = textPtr->pixelReference; sharedTextPtr = textPtr->sharedTextPtr; | > | 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 | const TkSharedText *sharedTextPtr; Node *nodePtr, *parentPtr; unsigned pixelReference; unsigned index; assert(textPtr); assert(textPtr->pixelReference != -1); assert(linePtr); if (linePtr == TkBTreeGetStartLine(textPtr)) { return 0; } pixelReference = textPtr->pixelReference; sharedTextPtr = textPtr->sharedTextPtr; |
︙ | ︙ |
Changes to generic/tkTextDisp.c.
︙ | ︙ | |||
2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 | TkTextPixelInfo *pixelInfo = TkBTreeLinePixelInfo(textPtr, linePtr); unsigned oldNumDispLines = TkBTreeGetNumberOfDisplayLines(pixelInfo); TkTextDispLineInfo *dispLineInfo; TkTextLine *nextLogicalLinePtr; assert(dlPtr->byteCount > 0); assert(linePtr->logicalLine); assert(linePtr == TkBTreeGetLogicalLine( textPtr->sharedTextPtr, textPtr, TkTextIndexGetLine(&dlPtr->index))); if (pixelInfo->epoch == epoch) { int lineNo = TkBTreeLinesTo(textPtr->sharedTextPtr->tree, textPtr, linePtr, NULL); if (TkRangeListContains(textPtr->dInfoPtr->lineMetricUpdateRanges, lineNo)) { | > | 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 | TkTextPixelInfo *pixelInfo = TkBTreeLinePixelInfo(textPtr, linePtr); unsigned oldNumDispLines = TkBTreeGetNumberOfDisplayLines(pixelInfo); TkTextDispLineInfo *dispLineInfo; TkTextLine *nextLogicalLinePtr; assert(dlPtr->byteCount > 0); assert(linePtr->logicalLine); assert(TkTextIndexGetLine(&dlPtr->index)); assert(linePtr == TkBTreeGetLogicalLine( textPtr->sharedTextPtr, textPtr, TkTextIndexGetLine(&dlPtr->index))); if (pixelInfo->epoch == epoch) { int lineNo = TkBTreeLinesTo(textPtr->sharedTextPtr->tree, textPtr, linePtr, NULL); if (TkRangeListContains(textPtr->dInfoPtr->lineMetricUpdateRanges, lineNo)) { |
︙ | ︙ | |||
4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 | unsigned countChunks; unsigned chunksPerSection; int length, offset; assert(displayLineNo >= 0); assert((displayLineNo == 0) == (IsStartOfNotMergedLine(indexPtr) || TkTextIndexIsStartOfText(indexPtr))); DEBUG(stats.numLayouted += 1); textPtr = indexPtr->textPtr; assert(textPtr); dInfoPtr = textPtr->dInfoPtr; | > > | 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 | unsigned countChunks; unsigned chunksPerSection; int length, offset; assert(displayLineNo >= 0); assert((displayLineNo == 0) == (IsStartOfNotMergedLine(indexPtr) || TkTextIndexIsStartOfText(indexPtr))); assert(indexPtr); assert(TkTextIndexGetLine(indexPtr)); DEBUG(stats.numLayouted += 1); textPtr = indexPtr->textPtr; assert(textPtr); dInfoPtr = textPtr->dInfoPtr; |
︙ | ︙ | |||
4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 | TkTextLine *logicalLinePtr; TkTextLine *linePtr; unsigned byteOffset; unsigned startByteOffset; unsigned viewHeight; assert(info); linePtr = TkTextIndexGetLine(indexPtr); logicalLinePtr = TkBTreeGetLogicalLine(textPtr->sharedTextPtr, textPtr, linePtr); pixelInfo = TkBTreeLinePixelInfo(textPtr, logicalLinePtr); dispLineInfo = pixelInfo->dispLineInfo; info->index = *indexPtr; TkTextIndexSetToStartOfLine2(&info->index, logicalLinePtr); | > | 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 | TkTextLine *logicalLinePtr; TkTextLine *linePtr; unsigned byteOffset; unsigned startByteOffset; unsigned viewHeight; assert(info); assert(TkTextIndexGetLine(indexPtr)); linePtr = TkTextIndexGetLine(indexPtr); logicalLinePtr = TkBTreeGetLogicalLine(textPtr->sharedTextPtr, textPtr, linePtr); pixelInfo = TkBTreeLinePixelInfo(textPtr, logicalLinePtr); dispLineInfo = pixelInfo->dispLineInfo; info->index = *indexPtr; TkTextIndexSetToStartOfLine2(&info->index, logicalLinePtr); |
︙ | ︙ | |||
6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 | assert(textPtr->sharedTextPtr->allowUpdateLineMetrics); while (range) { TkTextLine *linePtr; TkTextLine *logicalLinePtr; int lineNum = range->low; int high = range->high; linePtr = TkBTreeFindLine(textPtr->sharedTextPtr->tree, textPtr, lineNum); logicalLinePtr = TkBTreeGetLogicalLine(textPtr->sharedTextPtr, textPtr, linePtr); if (linePtr != logicalLinePtr) { lineNum = TkBTreeLinesTo(textPtr->sharedTextPtr->tree, textPtr, logicalLinePtr, NULL); linePtr = logicalLinePtr; | > > | 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 | assert(textPtr->sharedTextPtr->allowUpdateLineMetrics); while (range) { TkTextLine *linePtr; TkTextLine *logicalLinePtr; int lineNum = range->low; int high = range->high; assert(lineNum < TkBTreeNumLines(textPtr->sharedTextPtr->tree, textPtr)); linePtr = TkBTreeFindLine(textPtr->sharedTextPtr->tree, textPtr, lineNum); logicalLinePtr = TkBTreeGetLogicalLine(textPtr->sharedTextPtr, textPtr, linePtr); if (linePtr != logicalLinePtr) { lineNum = TkBTreeLinesTo(textPtr->sharedTextPtr->tree, textPtr, logicalLinePtr, NULL); linePtr = logicalLinePtr; |
︙ | ︙ | |||
6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 | if ((range = TkRangeListFindNearest(dInfoPtr->lineMetricUpdateRanges, lineNum))) { TkTextLine *linePtr = NULL; unsigned count = 0; unsigned high = range->high; lineNum = range->low; endLine = MIN((int) endLine, TkBTreeNumLines(textPtr->sharedTextPtr->tree, textPtr) - 1); while (true) { const TkTextPixelInfo *pixelInfo; int firstLineNum; if (lineNum > high) { /* | > | 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 | if ((range = TkRangeListFindNearest(dInfoPtr->lineMetricUpdateRanges, lineNum))) { TkTextLine *linePtr = NULL; unsigned count = 0; unsigned high = range->high; lineNum = range->low; endLine = MIN((int) endLine, TkBTreeNumLines(textPtr->sharedTextPtr->tree, textPtr) - 1); assert((int) lineNum < TkBTreeNumLines(textPtr->sharedTextPtr->tree, textPtr)); while (true) { const TkTextPixelInfo *pixelInfo; int firstLineNum; if (lineNum > high) { /* |
︙ | ︙ | |||
7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 | TkTextLine *linePtr2; TkTextIndex index; unsigned byteOffset; int numLines; assert(TkTextIndexCompare(indexFrom, indexTo) <= 0); assert(textPtr->sharedTextPtr->allowUpdateLineMetrics); TkTextUpdateLineMetrics(textPtr, TkTextIndexGetLineNumber(indexFrom, textPtr), TkTextIndexGetLineNumber(indexTo, textPtr)); linePtr1 = TkBTreeGetLogicalLine(textPtr->sharedTextPtr, textPtr, TkTextIndexGetLine(indexFrom)); linePtr2 = TkBTreeGetLogicalLine(textPtr->sharedTextPtr, textPtr, TkTextIndexGetLine(indexTo)); pixelInfo1 = linePtr1->pixelInfo; | > > | 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 | TkTextLine *linePtr2; TkTextIndex index; unsigned byteOffset; int numLines; assert(TkTextIndexCompare(indexFrom, indexTo) <= 0); assert(textPtr->sharedTextPtr->allowUpdateLineMetrics); assert(TkTextIndexGetLine(indexFrom)); assert(TkTextIndexGetLine(indexTo)); TkTextUpdateLineMetrics(textPtr, TkTextIndexGetLineNumber(indexFrom, textPtr), TkTextIndexGetLineNumber(indexTo, textPtr)); linePtr1 = TkBTreeGetLogicalLine(textPtr->sharedTextPtr, textPtr, TkTextIndexGetLine(indexFrom)); linePtr2 = TkBTreeGetLogicalLine(textPtr->sharedTextPtr, textPtr, TkTextIndexGetLine(indexTo)); pixelInfo1 = linePtr1->pixelInfo; |
︙ | ︙ | |||
7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 | TkTextLine *logicalLinePtr; const TkTextPixelInfo *pixelInfo; TkTextDispLineInfo *dispLineInfo; const TkTextDispLineEntry *lastEntry; const TkTextDispLineEntry *entry; TkTextIndex index; unsigned byteOffset; logicalLinePtr = TkBTreeGetLogicalLine(textPtr->sharedTextPtr, textPtr, TkTextIndexGetLine(indexPtr)); if (logicalLinePtr == TkBTreeGetLastLine(textPtr)) { return 0; } pixelInfo = TkBTreeLinePixelInfo(textPtr, logicalLinePtr); | > > | 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 | TkTextLine *logicalLinePtr; const TkTextPixelInfo *pixelInfo; TkTextDispLineInfo *dispLineInfo; const TkTextDispLineEntry *lastEntry; const TkTextDispLineEntry *entry; TkTextIndex index; unsigned byteOffset; assert(TkTextIndexGetLine(indexPtr)); logicalLinePtr = TkBTreeGetLogicalLine(textPtr->sharedTextPtr, textPtr, TkTextIndexGetLine(indexPtr)); if (logicalLinePtr == TkBTreeGetLastLine(textPtr)) { return 0; } pixelInfo = TkBTreeLinePixelInfo(textPtr, logicalLinePtr); |
︙ | ︙ | |||
7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 | TkTextLine *logicalLinePtr; TkTextPixelInfo *pixelInfo; unsigned displayLines; unsigned updateCounter; unsigned pixelHeight; assert(linePtr != TkBTreeGetLastLine(textPtr)); if (!indexPtr) { TkTextIndexClear(&index, textPtr); TkTextIndexSetToStartOfLine2(&index, linePtr); indexPtr = &index; } | > | 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 | TkTextLine *logicalLinePtr; TkTextPixelInfo *pixelInfo; unsigned displayLines; unsigned updateCounter; unsigned pixelHeight; assert(linePtr != TkBTreeGetLastLine(textPtr)); assert(TkTextIndexGetLine(indexPtr)); if (!indexPtr) { TkTextIndexClear(&index, textPtr); TkTextIndexSetToStartOfLine2(&index, linePtr); indexPtr = &index; } |
︙ | ︙ | |||
8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 | { TextDInfo *dInfoPtr = textPtr->dInfoPtr; TkTextLine *lastLinePtr = TkBTreeGetLastLine(textPtr); DLine *firstPtr = NULL; DLine *lastPtr= NULL; TkTextIndex rounded; TkTextLine *linePtr; /* * Find the DLines corresponding to index1Ptr and index2Ptr. There is one * tricky thing here, which is that we have to relayout in units of whole * text lines: This is necessary because the indices stored in the display * lines will no longer be valid. It's also needed because any edit could * change the way lines wrap. | > > | 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 | { TextDInfo *dInfoPtr = textPtr->dInfoPtr; TkTextLine *lastLinePtr = TkBTreeGetLastLine(textPtr); DLine *firstPtr = NULL; DLine *lastPtr= NULL; TkTextIndex rounded; TkTextLine *linePtr; assert(TkTextIndexGetLine(index1Ptr)); /* * Find the DLines corresponding to index1Ptr and index2Ptr. There is one * tricky thing here, which is that we have to relayout in units of whole * text lines: This is necessary because the indices stored in the display * lines will no longer be valid. It's also needed because any edit could * change the way lines wrap. |
︙ | ︙ | |||
10587 10588 10589 10590 10591 10592 10593 10594 10595 10596 10597 10598 10599 10600 | lastLinePtr = TkBTreeGetLastLine(textPtr); if (linePtr != lastLinePtr) { int byteOffset = FindDisplayLineOffset(textPtr, linePtr, &pixelOffset); TkTextIndexSetByteIndex2(indexPtr, linePtr, byteOffset); } else { assert(lastLinePtr->prevPtr); /* MakePixelIndex will not be called if peer is empty */ linePtr = TkBTreeGetLogicalLine(textPtr->sharedTextPtr, textPtr, linePtr->prevPtr); TkTextIndexSetToLastChar2(indexPtr, linePtr); FindDisplayLineStartEnd(textPtr, indexPtr, DISP_LINE_START, DLINE_CACHE); pixelOffset = CalculateDisplayLineHeight(textPtr, indexPtr, NULL) - 1; } return MAX(0, pixelOffset); | > | 10601 10602 10603 10604 10605 10606 10607 10608 10609 10610 10611 10612 10613 10614 10615 | lastLinePtr = TkBTreeGetLastLine(textPtr); if (linePtr != lastLinePtr) { int byteOffset = FindDisplayLineOffset(textPtr, linePtr, &pixelOffset); TkTextIndexSetByteIndex2(indexPtr, linePtr, byteOffset); } else { assert(lastLinePtr->prevPtr); /* MakePixelIndex will not be called if peer is empty */ assert(linePtr->prevPtr); linePtr = TkBTreeGetLogicalLine(textPtr->sharedTextPtr, textPtr, linePtr->prevPtr); TkTextIndexSetToLastChar2(indexPtr, linePtr); FindDisplayLineStartEnd(textPtr, indexPtr, DISP_LINE_START, DLINE_CACHE); pixelOffset = CalculateDisplayLineHeight(textPtr, indexPtr, NULL) - 1; } return MAX(0, pixelOffset); |
︙ | ︙ |