summaryrefslogtreecommitdiff
path: root/x11-toolkits/tk80/files/patch-ac
diff options
context:
space:
mode:
Diffstat (limited to 'x11-toolkits/tk80/files/patch-ac')
-rw-r--r--x11-toolkits/tk80/files/patch-ac918
1 files changed, 0 insertions, 918 deletions
diff --git a/x11-toolkits/tk80/files/patch-ac b/x11-toolkits/tk80/files/patch-ac
deleted file mode 100644
index 0709c6100259..000000000000
--- a/x11-toolkits/tk80/files/patch-ac
+++ /dev/null
@@ -1,918 +0,0 @@
-*** tkText.c 1997/07/04 22:39:41 2.0
---- ../generic/tkText.c 1997/08/15 22:25:21
-***************
-*** 866,871 ****
---- 866,872 ----
- || (textPtr->selTagPtr->spacing2String != NULL)
- || (textPtr->selTagPtr->spacing3String != NULL)
- || (textPtr->selTagPtr->tabString != NULL)
-+ || (textPtr->selTagPtr->elideString != NULL)
- || (textPtr->selTagPtr->underlineString != NULL)
- || (textPtr->selTagPtr->wrapMode != NULL)) {
- textPtr->selTagPtr->affectsDisplay = 1;
-***************
-*** 1414,1420 ****
- }
- }
- }
-! if (segPtr->typePtr == &tkTextCharType) {
- memcpy((VOID *) buffer, (VOID *) (segPtr->body.chars
- + offsetInSeg), (size_t) chunkSize);
- buffer += chunkSize;
---- 1415,1421 ----
- }
- }
- }
-! if (segPtr->typePtr == &tkTextCharType && !TkTextIsElided(textPtr, &textPtr->selIndex)) {
- memcpy((VOID *) buffer, (VOID *) (segPtr->body.chars
- + offsetInSeg), (size_t) chunkSize);
- buffer += chunkSize;
-***************
-*** 1555,1561 ****
- int argc; /* Number of arguments. */
- char **argv; /* Argument strings. */
- {
-! int backwards, exact, c, i, argsLeft, noCase, leftToScan;
- size_t length;
- int numLines, startingLine, startingChar, lineNum, firstChar, lastChar;
- int code, matchLength, matchChar, passes, stopLine, searchWholeText;
---- 1556,1562 ----
- int argc; /* Number of arguments. */
- char **argv; /* Argument strings. */
- {
-! int backwards, exact, searchElide, c, i, argsLeft, noCase, leftToScan;
- size_t length;
- int numLines, startingLine, startingChar, lineNum, firstChar, lastChar;
- int code, matchLength, matchChar, passes, stopLine, searchWholeText;
-***************
-*** 1566,1571 ****
---- 1567,1573 ----
- Tcl_DString line, patDString;
- TkTextSegment *segPtr;
- TkTextLine *linePtr;
-+ TkTextIndex curIndex;
- Tcl_RegExp regexp = NULL; /* Initialization needed only to
- * prevent compiler warning. */
-
-***************
-*** 1574,1579 ****
---- 1576,1583 ----
- */
-
- exact = 1;
-+ searchElide = 0;
-+ curIndex.tree = textPtr->tree;
- backwards = 0;
- noCase = 0;
- varName = NULL;
-***************
-*** 1587,1593 ****
- badSwitch:
- Tcl_AppendResult(interp, "bad switch \"", arg,
- "\": must be -forward, -backward, -exact, -regexp, ",
-! "-nocase, -count, or --", (char *) NULL);
- return TCL_ERROR;
- }
- c = arg[1];
---- 1591,1597 ----
- badSwitch:
- Tcl_AppendResult(interp, "bad switch \"", arg,
- "\": must be -forward, -backward, -exact, -regexp, ",
-! "-nocase, -count, -elide, or --", (char *) NULL);
- return TCL_ERROR;
- }
- c = arg[1];
-***************
-*** 1608,1613 ****
---- 1612,1619 ----
- noCase = 1;
- } else if ((c == 'r') && (strncmp(argv[i], "-regexp", length) == 0)) {
- exact = 0;
-+ } else if ((c == 'e') && (strncmp(argv[i], "-elide", length) == 0)) {
-+ searchElide = 1;
- } else if ((c == '-') && (strncmp(argv[i], "--", length) == 0)) {
- i++;
- break;
-***************
-*** 1703,1711 ****
- */
-
- linePtr = TkBTreeFindLine(textPtr->tree, lineNum);
- for (segPtr = linePtr->segPtr; segPtr != NULL;
-! segPtr = segPtr->nextPtr) {
-! if (segPtr->typePtr != &tkTextCharType) {
- continue;
- }
- Tcl_DStringAppend(&line, segPtr->body.chars, segPtr->size);
---- 1709,1718 ----
- */
-
- linePtr = TkBTreeFindLine(textPtr->tree, lineNum);
-+ curIndex.linePtr = linePtr; curIndex.charIndex = 0;
- for (segPtr = linePtr->segPtr; segPtr != NULL;
-! curIndex.charIndex += segPtr->size, segPtr = segPtr->nextPtr) {
-! if (segPtr->typePtr != &tkTextCharType || (!searchElide && TkTextIsElided(textPtr, &curIndex))) {
- continue;
- }
- Tcl_DStringAppend(&line, segPtr->body.chars, segPtr->size);
-*** tkText.h 1997/07/04 22:39:41 2.0
---- ../generic/tkText.h 1997/08/15 22:18:56
-***************
-*** 370,375 ****
---- 370,379 ----
- * Must be tkTextCharUid, tkTextNoneUid,
- * tkTextWordUid, or NULL to use wrapMode
- * for whole widget. */
-+ char *elideString; /* -elide option string (malloc-ed).
-+ * NULL means option not specified. */
-+ int elide; /* Non-zero means text is elided.
-+ * Only valid if elideString is non-NULL. */
- int affectsDisplay; /* Non-zero means that this tag affects the
- * way information is displayed on the screen
- * (so need to redisplay if tag changes). */
-***************
-*** 800,805 ****
---- 804,811 ----
- ClientData clientData));
- extern TkTextIndex * TkTextMakeIndex _ANSI_ARGS_((TkTextBTree tree,
- int lineIndex, int charIndex,
-+ TkTextIndex *indexPtr));
-+ extern int TkTextIsElided _ANSI_ARGS_((TkText *textPtr,
- TkTextIndex *indexPtr));
- extern int TkTextMarkCmd _ANSI_ARGS_((TkText *textPtr,
- Tcl_Interp *interp, int argc, char **argv));
-*** tkTextBTree.c 1997/07/04 22:39:41 2.0
---- ../generic/tkTextBTree.c 1997/08/15 22:20:16
-***************
-*** 2427,2432 ****
---- 2427,2558 ----
- }
- return tagInfo.tagPtrs;
- }
-+
-+
-+ /*
-+ special case to just return information about elided attribute
-+ specialized from TkBTreeGetTags(indexPtr, numTagsPtr) and GetStyle(textPtr, indexPtr)
-+ just need to keep track of invisibility settings for each priority, pick highest one active at end
-+ */
-+ int
-+ TkTextIsElided(textPtr, indexPtr)
-+ TkText *textPtr; /* Overall information about text widget. */
-+ TkTextIndex *indexPtr; /* The character in the text for which
-+ * display information is wanted. */
-+ {
-+ #define LOTSA_TAGS 1000
-+ int elide = 0; /* if nobody says otherwise, it's visible */
-+
-+ int deftagCnts[LOTSA_TAGS];
-+ int *tagCnts = deftagCnts;
-+ TkTextTag *deftagPtrs[LOTSA_TAGS];
-+ TkTextTag **tagPtrs = deftagPtrs;
-+ int numTags = textPtr->numTags;
-+ register Node *nodePtr;
-+ register TkTextLine *siblingLinePtr;
-+ register TkTextSegment *segPtr;
-+ register TkTextTag *tagPtr;
-+ register int i, index;
-+
-+ /* almost always avoid malloc, so stay out of system calls */
-+ if (LOTSA_TAGS < numTags) {
-+ tagCnts = (int *)ckalloc((unsigned)sizeof(int) * numTags);
-+ tagPtrs = (TkTextTag **)ckalloc((unsigned)sizeof(TkTextTag *) * numTags);
-+ }
-+
-+ for (i=0; i<numTags; i++) tagCnts[i]=0;
-+
-+
-+ /*
-+ * Record tag toggles within the line of indexPtr but preceding
-+ * indexPtr.
-+ */
-+
-+ for (index = 0, segPtr = indexPtr->linePtr->segPtr;
-+ (index + segPtr->size) <= indexPtr->charIndex;
-+ index += segPtr->size, segPtr = segPtr->nextPtr) {
-+ if ((segPtr->typePtr == &tkTextToggleOnType)
-+ || (segPtr->typePtr == &tkTextToggleOffType)) {
-+ tagPtr = segPtr->body.toggle.tagPtr;
-+ if (tagPtr->elideString != NULL) {
-+ tagPtrs[tagPtr->priority] = tagPtr;
-+ tagCnts[tagPtr->priority]++;
-+ }
-+ }
-+ }
-+
-+ /*
-+ * Record toggles for tags in lines that are predecessors of
-+ * indexPtr->linePtr but under the same level-0 node.
-+ */
-+
-+ for (siblingLinePtr = indexPtr->linePtr->parentPtr->children.linePtr;
-+ siblingLinePtr != indexPtr->linePtr;
-+ siblingLinePtr = siblingLinePtr->nextPtr) {
-+ for (segPtr = siblingLinePtr->segPtr; segPtr != NULL;
-+ segPtr = segPtr->nextPtr) {
-+ if ((segPtr->typePtr == &tkTextToggleOnType)
-+ || (segPtr->typePtr == &tkTextToggleOffType)) {
-+ tagPtr = segPtr->body.toggle.tagPtr;
-+ if (tagPtr->elideString != NULL) {
-+ tagPtrs[tagPtr->priority] = tagPtr;
-+ tagCnts[tagPtr->priority]++;
-+ }
-+ }
-+ }
-+ }
-+
-+ /*
-+ * For each node in the ancestry of this line, record tag toggles
-+ * for all siblings that precede that node.
-+ */
-+
-+ for (nodePtr = indexPtr->linePtr->parentPtr; nodePtr->parentPtr != NULL;
-+ nodePtr = nodePtr->parentPtr) {
-+ register Node *siblingPtr;
-+ register Summary *summaryPtr;
-+
-+ for (siblingPtr = nodePtr->parentPtr->children.nodePtr;
-+ siblingPtr != nodePtr; siblingPtr = siblingPtr->nextPtr) {
-+ for (summaryPtr = siblingPtr->summaryPtr; summaryPtr != NULL;
-+ summaryPtr = summaryPtr->nextPtr) {
-+ if (summaryPtr->toggleCount & 1) {
-+ tagPtr = summaryPtr->tagPtr;
-+ if (tagPtr->elideString != NULL) {
-+ tagPtrs[tagPtr->priority] = tagPtr;
-+ tagCnts[tagPtr->priority] += summaryPtr->toggleCount;
-+ }
-+ }
-+ }
-+ }
-+ }
-+
-+
-+ /*
-+ * Now traverse from highest priority to lowest,
-+ * take elided value from first odd count (= on)
-+ */
-+
-+ for (i = numTags-1; i >=0; i--) {
-+ if (tagCnts[i] & 1) {
-+ #ifndef ALWAYS_SHOW_SELECTION
-+ /* who would make the selection elided? */
-+ if ((tagPtr == textPtr->selTagPtr) && !(textPtr->flags & GOT_FOCUS)) {
-+ continue;
-+ }
-+ #endif
-+ elide = tagPtrs[i]->elide;
-+ break;
-+ }
-+ }
-+
-+ if (LOTSA_TAGS < numTags) {
-+ ckfree((char *) tagCnts);
-+ ckfree((char *) tagPtrs);
-+ }
-+
-+ return elide;
-+ }
-
- /*
- *----------------------------------------------------------------------
-*** tkTextDisp.c 1997/07/04 22:39:41 2.0
---- ../generic/tkTextDisp.c 1997/08/16 01:20:18
-***************
-*** 55,60 ****
---- 55,61 ----
- * be NULL). */
- int underline; /* Non-zero means draw underline underneath
- * text. */
-+ int elide; /* Non-zero means draw text */
- Tk_Uid wrapMode; /* How to handle wrap-around for this tag.
- * One of tkTextCharUid, tkTextNoneUid,
- * or tkTextWordUid. */
-***************
-*** 311,316 ****
---- 312,332 ----
- int x));
- static void CharUndisplayProc _ANSI_ARGS_((TkText *textPtr,
- TkTextDispChunk *chunkPtr));
-+
-+ /*
-+ Definitions of elided procs.
-+ Compiler can't inline these since we use pointers to these functions.
-+ ElideDisplayProc, ElideUndisplayProc special-cased for speed,
-+ as potentially many elided DLine chunks if large, tag toggle-filled
-+ elided region.
-+ */
-+ static void ElideBboxProc _ANSI_ARGS_((TkTextDispChunk *chunkPtr,
-+ int index, int y, int lineHeight, int baseline,
-+ int *xPtr, int *yPtr, int *widthPtr,
-+ int *heightPtr));
-+ static int ElideMeasureProc _ANSI_ARGS_((TkTextDispChunk *chunkPtr,
-+ int x));
-+
- static void DisplayDLine _ANSI_ARGS_((TkText *textPtr,
- DLine *dlPtr, DLine *prevPtr, Pixmap pixmap));
- static void DisplayLineBackground _ANSI_ARGS_((TkText *textPtr,
-***************
-*** 479,485 ****
-
- int borderPrio, borderWidthPrio, reliefPrio, bgStipplePrio;
- int fgPrio, fontPrio, fgStipplePrio;
-! int underlinePrio, justifyPrio, offsetPrio;
- int lMargin1Prio, lMargin2Prio, rMarginPrio;
- int spacing1Prio, spacing2Prio, spacing3Prio;
- int overstrikePrio, tabPrio, wrapPrio;
---- 495,501 ----
-
- int borderPrio, borderWidthPrio, reliefPrio, bgStipplePrio;
- int fgPrio, fontPrio, fgStipplePrio;
-! int underlinePrio, elidePrio, justifyPrio, offsetPrio;
- int lMargin1Prio, lMargin2Prio, rMarginPrio;
- int spacing1Prio, spacing2Prio, spacing3Prio;
- int overstrikePrio, tabPrio, wrapPrio;
-***************
-*** 494,500 ****
- tagPtrs = TkBTreeGetTags(indexPtr, &numTags);
- borderPrio = borderWidthPrio = reliefPrio = bgStipplePrio = -1;
- fgPrio = fontPrio = fgStipplePrio = -1;
-! underlinePrio = justifyPrio = offsetPrio = -1;
- lMargin1Prio = lMargin2Prio = rMarginPrio = -1;
- spacing1Prio = spacing2Prio = spacing3Prio = -1;
- overstrikePrio = tabPrio = wrapPrio = -1;
---- 510,516 ----
- tagPtrs = TkBTreeGetTags(indexPtr, &numTags);
- borderPrio = borderWidthPrio = reliefPrio = bgStipplePrio = -1;
- fgPrio = fontPrio = fgStipplePrio = -1;
-! underlinePrio = elidePrio = justifyPrio = offsetPrio = -1;
- lMargin1Prio = lMargin2Prio = rMarginPrio = -1;
- spacing1Prio = spacing2Prio = spacing3Prio = -1;
- overstrikePrio = tabPrio = wrapPrio = -1;
-***************
-*** 612,617 ****
---- 628,638 ----
- styleValues.underline = tagPtr->underline;
- underlinePrio = tagPtr->priority;
- }
-+ if ((tagPtr->elideString != NULL)
-+ && (tagPtr->priority > elidePrio)) {
-+ styleValues.elide = tagPtr->elide;
-+ elidePrio = tagPtr->priority;
-+ }
- if ((tagPtr->wrapMode != NULL)
- && (tagPtr->priority > wrapPrio)) {
- styleValues.wrapMode = tagPtr->wrapMode;
-***************
-*** 768,774 ****
- * lines with numChars > 0. Used to
- * drop 0-sized chunks from the end
- * of the line. */
-! int offset, ascent, descent, code;
- StyleValues *sValuePtr;
-
- /*
---- 789,795 ----
- * lines with numChars > 0. Used to
- * drop 0-sized chunks from the end
- * of the line. */
-! int offset, ascent, descent, code, elide, elidesize;
- StyleValues *sValuePtr;
-
- /*
-***************
-*** 786,791 ****
---- 807,840 ----
- dlPtr->nextPtr = NULL;
- dlPtr->flags = NEW_LAYOUT;
-
-+
-+ /*
-+ * special case entirely elide line as there may be 1000s or more
-+ */
-+ elide = TkTextIsElided(textPtr, indexPtr); /* save a malloc */
-+ if (elide && indexPtr->charIndex==0) {
-+ maxChars = 0;
-+ for (segPtr = indexPtr->linePtr->segPtr; elide && segPtr!=NULL; segPtr = segPtr->nextPtr) {
-+ if ((elidesize = segPtr->size) > 0) {
-+ maxChars += elidesize;
-+
-+ /* if have tag toggle, chance that invisibility state changed, so bail out */
-+ } else if (segPtr->typePtr == &tkTextToggleOffType || segPtr->typePtr == &tkTextToggleOnType) {
-+ if (segPtr->body.toggle.tagPtr->elideString!=NULL) {
-+ elide = (segPtr->typePtr == &tkTextToggleOffType) ^ (segPtr->body.toggle.tagPtr->elide==1);
-+ }
-+ }
-+ }
-+
-+ if (elide) {
-+ dlPtr->count = maxChars;
-+ dlPtr->spaceAbove = dlPtr->spaceBelow = dlPtr->length = 0;
-+ return dlPtr;
-+ }
-+ }
-+
-+
-+
- /*
- * Each iteration of the loop below creates one TkTextDispChunk for
- * the new display line. The line will always have at least one
-***************
-*** 797,802 ****
---- 846,852 ----
- lastChunkPtr = NULL;
- chunkPtr = NULL;
- noCharsYet = 1;
-+ elide = 0;
- breakChunkPtr = NULL;
- breakCharOffset = 0;
- justify = TK_JUSTIFY_LEFT;
-***************
-*** 821,826 ****
---- 871,901 ----
- }
-
- while (segPtr != NULL) {
-+
-+ /* every line still gets at least one chunk due to expectations in rest of code,
-+ but able to skip elided portions of line quickly */
-+ /* if current chunk elided and last chunk was too, coalese */
-+ if (elide && lastChunkPtr!=NULL && lastChunkPtr->displayProc == NULL/*ElideDisplayProc*/) {
-+ if ((elidesize = segPtr->size - offset) > 0) {
-+ curIndex.charIndex += elidesize;
-+ lastChunkPtr->numChars += elidesize;
-+ breakCharOffset = lastChunkPtr->breakIndex = lastChunkPtr->numChars;
-+
-+ /* if have tag toggle, chance that invisibility state changed */
-+ } else if (segPtr->typePtr == &tkTextToggleOffType || segPtr->typePtr == &tkTextToggleOnType) {
-+ if (segPtr->body.toggle.tagPtr->elideString!=NULL) {
-+ elide = (segPtr->typePtr == &tkTextToggleOffType) ^ (segPtr->body.toggle.tagPtr->elide==1);
-+ }
-+ }
-+
-+ offset = 0;
-+ segPtr = segPtr->nextPtr;
-+ if (segPtr == NULL && chunkPtr != NULL) ckfree((char *) chunkPtr);
-+
-+ continue;
-+ }
-+
-+
- if (segPtr->typePtr->layoutProc == NULL) {
- segPtr = segPtr->nextPtr;
- offset = 0;
-***************
-*** 831,836 ****
---- 906,912 ----
- chunkPtr->nextPtr = NULL;
- }
- chunkPtr->stylePtr = GetStyle(textPtr, &curIndex);
-+ elide = chunkPtr->stylePtr->sValuePtr->elide;
-
- /*
- * Save style information such as justification and indentation,
-***************
-*** 864,870 ****
-
- gotTab = 0;
- maxChars = segPtr->size - offset;
-! if (justify == TK_JUSTIFY_LEFT) {
- if (segPtr->typePtr == &tkTextCharType) {
- char *p;
-
---- 940,946 ----
-
- gotTab = 0;
- maxChars = segPtr->size - offset;
-! if (!elide && justify == TK_JUSTIFY_LEFT) {
- if (segPtr->typePtr == &tkTextCharType) {
- char *p;
-
-***************
-*** 877,884 ****
- }
- }
- }
--
- chunkPtr->x = x;
- code = (*segPtr->typePtr->layoutProc)(textPtr, &curIndex, segPtr,
- offset, maxX-tabSize, maxChars, noCharsYet, wrapMode,
- chunkPtr);
---- 953,973 ----
- }
- }
- }
- chunkPtr->x = x;
-+ if (elide && maxChars) {
-+ /* don't free style here, as other code expects to be able to do that */
-+ /*breakCharOffset =*/ chunkPtr->breakIndex = chunkPtr->numChars = maxChars;
-+ chunkPtr->width = 0;
-+ chunkPtr->minAscent = chunkPtr->minDescent = chunkPtr->minHeight = 0;
-+
-+ /* would just like to point to canonical empty chunk */
-+ chunkPtr->displayProc = (Tk_ChunkDisplayProc *) NULL;
-+ chunkPtr->undisplayProc = (Tk_ChunkUndisplayProc *) NULL;
-+ chunkPtr->measureProc = ElideMeasureProc;
-+ chunkPtr->bboxProc = ElideBboxProc;
-+
-+ code = 1;
-+ } else
- code = (*segPtr->typePtr->layoutProc)(textPtr, &curIndex, segPtr,
- offset, maxX-tabSize, maxChars, noCharsYet, wrapMode,
- chunkPtr);
-***************
-*** 950,955 ****
---- 1039,1045 ----
- offset = 0;
- segPtr = segPtr->nextPtr;
- }
-+
- chunkPtr = NULL;
- }
- if (noCharsYet) {
-***************
-*** 998,1003 ****
---- 1088,1094 ----
- wholeLine = 0;
- }
-
-+
- /*
- * Make tab adjustments for the last tab stop, if there is one.
- */
-***************
-*** 1321,1326 ****
---- 1412,1418 ----
- index.linePtr = TkBTreeFindLine(textPtr->tree, lineNum);
- index.charIndex = 0;
- lowestPtr = NULL;
-+
- do {
- dlPtr = LayoutDLine(textPtr, &index);
- dlPtr->nextPtr = lowestPtr;
-***************
-*** 1554,1559 ****
---- 1646,1653 ----
- Display *display;
- int height, x;
-
-+ if (dlPtr->chunkPtr == NULL) return;
-+
- /*
- * First, clear the area of the line to the background color for the
- * text widget.
-***************
-*** 1620,1631 ****
---- 1714,1729 ----
- * something is off to the right).
- */
-
-+ if (chunkPtr->displayProc != NULL)
- (*chunkPtr->displayProc)(chunkPtr, -chunkPtr->width,
- dlPtr->spaceAbove,
- dlPtr->height - dlPtr->spaceAbove - dlPtr->spaceBelow,
- dlPtr->baseline - dlPtr->spaceAbove, display, pixmap,
- dlPtr->y + dlPtr->spaceAbove);
- } else {
-+ /* don't call if elide. This tax ok since not very many visible DLine's in
-+ an area, but potentially many elide ones */
-+ if (chunkPtr->displayProc != NULL)
- (*chunkPtr->displayProc)(chunkPtr, x, dlPtr->spaceAbove,
- dlPtr->height - dlPtr->spaceAbove - dlPtr->spaceBelow,
- dlPtr->baseline - dlPtr->spaceAbove, display, pixmap,
-***************
-*** 1714,1719 ****
---- 1812,1818 ----
- StyleValues *sValuePtr;
- Display *display;
-
-+
- /*
- * Pass 1: scan through dlPtr from left to right. For each range of
- * chunks with the same style, draw the main background for the style
-***************
-*** 1787,1793 ****
- rightX = maxX;
- }
- chunkPtr2 = NULL;
-! if (prevPtr != NULL) {
- /*
- * Find the chunk in the previous line that covers leftX.
- */
---- 1886,1892 ----
- rightX = maxX;
- }
- chunkPtr2 = NULL;
-! if (prevPtr != NULL && prevPtr->chunkPtr != NULL) {
- /*
- * Find the chunk in the previous line that covers leftX.
- */
-***************
-*** 1908,1914 ****
- rightX = maxX;
- }
- chunkPtr2 = NULL;
-! if (dlPtr->nextPtr != NULL) {
- /*
- * Find the chunk in the previous line that covers leftX.
- */
---- 2007,2014 ----
- rightX = maxX;
- }
- chunkPtr2 = NULL;
-! /* for (dlPtr2 = dlPtr; dlPtr2->nextPtr != NULL && dlPtr2->nextPtr->chunkPtr == NULL; dlPtr2 = dlPtr2->nextPtr) {}*/
-! if (dlPtr->nextPtr != NULL && dlPtr->nextPtr->chunkPtr != NULL) {
- /*
- * Find the chunk in the previous line that covers leftX.
- */
-***************
-*** 2299,2304 ****
---- 2399,2405 ----
- for (prevPtr = NULL, dlPtr = textPtr->dInfoPtr->dLinePtr;
- (dlPtr != NULL) && (dlPtr->y < dInfoPtr->maxY);
- prevPtr = dlPtr, dlPtr = dlPtr->nextPtr) {
-+ if (dlPtr->chunkPtr == NULL) continue;
- if (dlPtr->oldY != dlPtr->y) {
- if (tkTextDebug) {
- char string[TK_POS_CHARS];
-***************
-*** 2315,2320 ****
---- 2416,2422 ----
- dlPtr->oldY = dlPtr->y;
- dlPtr->flags &= ~NEW_LAYOUT;
- }
-+ /*prevPtr = dlPtr;*/
- }
- Tk_FreePixmap(Tk_Display(textPtr->tkwin), pixmap);
- }
-***************
-*** 3369,3374 ****
---- 3471,3477 ----
- dlPtr = LayoutDLine(textPtr, &index);
- dlPtr->nextPtr = lowestPtr;
- lowestPtr = dlPtr;
-+ if (dlPtr->length == 0 && dlPtr->height == 0) { offset--; break; } /* elide */
- TkTextIndexForwChars(&index, dlPtr->count, &index);
- charsToCount -= dlPtr->count;
- } while ((charsToCount > 0)
-***************
-*** 3381,3387 ****
- break;
- }
- }
-!
- /*
- * Discard the display lines, then either return or prepare
- * for the next display line to lay out.
---- 3484,3490 ----
- break;
- }
- }
-!
- /*
- * Discard the display lines, then either return or prepare
- * for the next display line to lay out.
-***************
-*** 3410,3421 ****
---- 3513,3526 ----
- TkBTreeNumLines(textPtr->tree));
- for (i = 0; i < offset; i++) {
- dlPtr = LayoutDLine(textPtr, &textPtr->topIndex);
-+ if (dlPtr->length == 0 && dlPtr->height == 0) offset++;
- dlPtr->nextPtr = NULL;
- TkTextIndexForwChars(&textPtr->topIndex, dlPtr->count, &new);
- FreeDLines(textPtr, dlPtr, (DLine *) NULL, 0);
- if (new.linePtr == lastLinePtr) {
- break;
- }
-+
- textPtr->topIndex = new;
- }
- }
-***************
-*** 3949,3955 ****
- * index of the character nearest to (x,y). */
- {
- TextDInfo *dInfoPtr = textPtr->dInfoPtr;
-! register DLine *dlPtr;
- register TkTextDispChunk *chunkPtr;
-
- /*
---- 4054,4060 ----
- * index of the character nearest to (x,y). */
- {
- TextDInfo *dInfoPtr = textPtr->dInfoPtr;
-! register DLine *dlPtr, *validdlPtr;
- register TkTextDispChunk *chunkPtr;
-
- /*
-***************
-*** 3982,3989 ****
- * Find the display line containing the desired y-coordinate.
- */
-
-! for (dlPtr = dInfoPtr->dLinePtr; y >= (dlPtr->y + dlPtr->height);
- dlPtr = dlPtr->nextPtr) {
- if (dlPtr->nextPtr == NULL) {
- /*
- * Y-coordinate is off the bottom of the displayed text.
---- 4087,4095 ----
- * Find the display line containing the desired y-coordinate.
- */
-
-! for (dlPtr = validdlPtr = dInfoPtr->dLinePtr; y >= (dlPtr->y + dlPtr->height);
- dlPtr = dlPtr->nextPtr) {
-+ if (dlPtr->chunkPtr !=NULL) validdlPtr = dlPtr;
- if (dlPtr->nextPtr == NULL) {
- /*
- * Y-coordinate is off the bottom of the displayed text.
-***************
-*** 3994,3999 ****
---- 4100,4107 ----
- break;
- }
- }
-+ if (dlPtr->chunkPtr == NULL) dlPtr = validdlPtr;
-+
-
- /*
- * Scan through the line's chunks to find the one that contains
-***************
-*** 4005,4016 ****
- *indexPtr = dlPtr->index;
- x = x - dInfoPtr->x + dInfoPtr->curPixelOffset;
- for (chunkPtr = dlPtr->chunkPtr; x >= (chunkPtr->x + chunkPtr->width);
-! indexPtr->charIndex += chunkPtr->numChars,
-! chunkPtr = chunkPtr->nextPtr) {
- if (chunkPtr->nextPtr == NULL) {
- indexPtr->charIndex += chunkPtr->numChars - 1;
- return;
-! }
- }
-
- /*
---- 4113,4124 ----
- *indexPtr = dlPtr->index;
- x = x - dInfoPtr->x + dInfoPtr->curPixelOffset;
- for (chunkPtr = dlPtr->chunkPtr; x >= (chunkPtr->x + chunkPtr->width);
-! indexPtr->charIndex += chunkPtr->numChars,
-! chunkPtr = chunkPtr->nextPtr) {
- if (chunkPtr->nextPtr == NULL) {
- indexPtr->charIndex += chunkPtr->numChars - 1;
- return;
-! }
- }
-
- /*
-***************
-*** 4166,4171 ****
---- 4274,4280 ----
- {
- TextDInfo *dInfoPtr = textPtr->dInfoPtr;
- DLine *dlPtr;
-+ int dlx;
-
- /*
- * Make sure that all of the screen layout information is up to date.
-***************
-*** 4184,4191 ****
- return -1;
- }
-
-! *xPtr = dInfoPtr->x - dInfoPtr->curPixelOffset + dlPtr->chunkPtr->x;
-! *widthPtr = dlPtr->length - dlPtr->chunkPtr->x;
- *yPtr = dlPtr->y;
- if ((dlPtr->y + dlPtr->height) > dInfoPtr->maxY) {
- *heightPtr = dInfoPtr->maxY - dlPtr->y;
---- 4293,4301 ----
- return -1;
- }
-
-! dlx = (dlPtr->chunkPtr != NULL? dlPtr->chunkPtr->x: 0);
-! *xPtr = dInfoPtr->x - dInfoPtr->curPixelOffset + dlx;
-! *widthPtr = dlPtr->length - dlx;
- *yPtr = dlPtr->y;
- if ((dlPtr->y + dlPtr->height) > dInfoPtr->maxY) {
- *heightPtr = dInfoPtr->maxY - dlPtr->y;
-***************
-*** 4196,4201 ****
---- 4306,4346 ----
- return 0;
- }
-
-+ static void
-+ ElideBboxProc(chunkPtr, index, y, lineHeight, baseline, xPtr, yPtr,
-+ widthPtr, heightPtr)
-+ TkTextDispChunk *chunkPtr; /* Chunk containing desired char. */
-+ int index; /* Index of desired character within
-+ * the chunk. */
-+ int y; /* Topmost pixel in area allocated
-+ * for this line. */
-+ int lineHeight; /* Height of line, in pixels. */
-+ int baseline; /* Location of line's baseline, in
-+ * pixels measured down from y. */
-+ int *xPtr, *yPtr; /* Gets filled in with coords of
-+ * character's upper-left pixel.
-+ * X-coord is in same coordinate
-+ * system as chunkPtr->x. */
-+ int *widthPtr; /* Gets filled in with width of
-+ * character, in pixels. */
-+ int *heightPtr; /* Gets filled in with height of
-+ * character, in pixels. */
-+ {
-+ *xPtr = chunkPtr->x;
-+ *yPtr = y;
-+ *widthPtr = *heightPtr = 0;
-+ }
-+
-+
-+ static int
-+ ElideMeasureProc(chunkPtr, x)
-+ TkTextDispChunk *chunkPtr; /* Chunk containing desired coord. */
-+ int x; /* X-coordinate, in same coordinate
-+ * system as chunkPtr->x. */
-+ {
-+ return 0 /*chunkPtr->numChars - 1*/;
-+ }
-+
- /*
- *--------------------------------------------------------------
- *
-***************
-*** 4421,4427 ****
- * Draw the text, underline, and overstrike for this chunk.
- */
-
-! if (ciPtr->numChars > offsetChars) {
- int numChars = ciPtr->numChars - offsetChars;
- char *string = ciPtr->chars + offsetChars;
-
---- 4566,4572 ----
- * Draw the text, underline, and overstrike for this chunk.
- */
-
-! if (!sValuePtr->elide && ciPtr->numChars > offsetChars) {
- int numChars = ciPtr->numChars - offsetChars;
- char *string = ciPtr->chars + offsetChars;
-
-*** tkTextTag.c 1997/07/04 22:39:41 2.0
---- ../generic/tkTextTag.c 1997/08/15 22:20:32
-***************
-*** 63,68 ****
---- 63,71 ----
- {TK_CONFIG_STRING, "-underline", (char *) NULL, (char *) NULL,
- (char *) NULL, Tk_Offset(TkTextTag, underlineString),
- TK_CONFIG_NULL_OK},
-+ {TK_CONFIG_STRING, "-elide", (char *) NULL, (char *) NULL,
-+ (char *) NULL, Tk_Offset(TkTextTag, elideString),
-+ TK_CONFIG_NULL_OK},
- {TK_CONFIG_UID, "-wrap", (char *) NULL, (char *) NULL,
- (char *) NULL, Tk_Offset(TkTextTag, wrapMode),
- TK_CONFIG_NULL_OK},
-***************
-*** 378,383 ****
---- 381,392 ----
- return TCL_ERROR;
- }
- }
-+ if (tagPtr->elideString != NULL) {
-+ if (Tcl_GetBoolean(interp, tagPtr->elideString,
-+ &tagPtr->elide) != TCL_OK) {
-+ return TCL_ERROR;
-+ }
-+ }
- if ((tagPtr->wrapMode != NULL)
- && (tagPtr->wrapMode != tkTextCharUid)
- && (tagPtr->wrapMode != tkTextNoneUid)
-***************
-*** 419,424 ****
---- 428,434 ----
- || (tagPtr->spacing3String != NULL)
- || (tagPtr->tabString != NULL)
- || (tagPtr->underlineString != NULL)
-+ || (tagPtr->elideString != NULL)
- || (tagPtr->wrapMode != NULL)) {
- tagPtr->affectsDisplay = 1;
- }
-***************
-*** 811,816 ****
---- 821,828 ----
- tagPtr->tabArrayPtr = NULL;
- tagPtr->underlineString = NULL;
- tagPtr->underline = 0;
-+ tagPtr->elideString = NULL;
-+ tagPtr->elide = 0;
- tagPtr->wrapMode = NULL;
- tagPtr->affectsDisplay = 0;
- textPtr->numTags++;
-***************
-*** 934,939 ****
---- 946,954 ----
- }
- if (tagPtr->underlineString != NULL) {
- ckfree(tagPtr->underlineString);
-+ }
-+ if (tagPtr->elideString != NULL) {
-+ ckfree(tagPtr->elideString);
- }
- ckfree((char *) tagPtr);
- }