summaryrefslogtreecommitdiffstats
path: root/Mac/Wastemods/WETabHooks.c
diff options
context:
space:
mode:
Diffstat (limited to 'Mac/Wastemods/WETabHooks.c')
-rw-r--r--Mac/Wastemods/WETabHooks.c281
1 files changed, 0 insertions, 281 deletions
diff --git a/Mac/Wastemods/WETabHooks.c b/Mac/Wastemods/WETabHooks.c
deleted file mode 100644
index 9595daf..0000000
--- a/Mac/Wastemods/WETabHooks.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * WETabHooks.c
- *
- * WASTE TABS PACKAGE
- * Hooks for adding tab support to WASTE
- *
- * Written by:
- * Mark Alldritt (original code)
- * Dan Crevier (line breaks)
- * John Daub (maintenance)
- * Jonathan Kew (variable-width tabs)
- * Marco Piovanelli (?)
- * Bert Seltzer (horizontal scrolling)
- *
- */
-
-#include "WETabs.h"
-#include "WETabHooks.h"
-
-#define FIXROUND(f) ((SInt16) (((f) + 0x00008000) >> 16))
-#define BSL(A, B) (((SInt32) (A)) << (B))
-
-static const Point kOneToOneScaling = { 1, 1 } ;
-
-pascal void _WETabDrawText
- (
- const char * pText,
- SInt32 textLength,
- Fixed slop,
- JustStyleCode styleRunPosition,
- WEReference we
- )
-{
-#pragma unused ( slop, styleRunPosition )
-
- LongRect destRect;
- SInt32 beginChar = 0;
- SInt32 ii;
- SInt16 tabWidth;
- SInt16 destLeft;
- Point penPos;
- SInt16 tabSize = WEGetTabSize(we);
-
- WEGetDestRect(&destRect, we);
- destLeft = (SInt16) destRect.left;
-
- for ( ii = 0; ii < textLength; ii++ )
- {
- if (pText[ii] == '\t')
- {
- DrawText(pText, beginChar, ii - beginChar);
-
- /* advance the pen to the next tab stop */
- GetPen(&penPos);
- tabWidth = tabSize - (penPos.h - destLeft) % tabSize;
- MoveTo(penPos.h + tabWidth, penPos.v);
- beginChar = ii + 1;
- }
- } /* for */
-
- DrawText(pText, beginChar, textLength - beginChar);
-}
-
-pascal SInt32 _WETabPixelToChar
- (
- const char * pText,
- SInt32 textLength,
- Fixed slop,
- Fixed *width,
- WEEdge *edge,
- JustStyleCode styleRunPosition,
- Fixed hPos,
- WEReference we
- )
-{
- SInt32 beginChar = 0;
- SInt32 offset = 0;
- SInt32 ii;
- Fixed lastWidth;
- Fixed tabWidth;
- SInt16 tabSize = WEGetTabSize(we);
-
- /* loop through every character in the segment looking for tabs */
- for ( ii = 0; ii < textLength; ii++ )
- {
- /* exit now if width has gone negative */
- /* (i.e., if we have found which glyph was hit) */
- if (*width <= 0)
- {
- break;
- }
-
- /* tab found? */
- if (pText[ii] == '\t')
- {
- /* calculate the width of the sub-segment preceding the tab */
- lastWidth = *width;
- offset += PixelToChar((char *)pText + beginChar, ii - beginChar, slop,
- lastWidth, (Boolean *) edge, width, styleRunPosition,
- kOneToOneScaling, kOneToOneScaling);
- beginChar = ii + 1;
-
- /* hit point past sub-segment? */
- if (*width >= 0)
- {
- /* increment hPos by width of sub-segment preceding the tab */
- hPos += (lastWidth - *width);
-
- /* calculate the width of the tab "glyph" (as a Fixed value) */
- tabWidth = BSL(tabSize - FIXROUND(hPos) % tabSize, 16);
-
- /* increment hPos by width of tab character */
- hPos += tabWidth;
-
- /* hit point within tab glyph? */
- if (*width < tabWidth)
- {
- /* yes: determine which half of tab glyph was hit */
- if (*width > (tabWidth >> 1))
- {
- *edge = kTrailingEdge; /* second (trailing) edge of tab */
- offset++;
- }
- else
- {
- *edge = kLeadingEdge; /* first (leading) edge of tab */
- }
-
- /* returning -1 (as Fixed) in width means we're finished */
- *width = 0xFFFF0000;
- }
- else
- {
- /* hit point is past tab: keep looping */
- offset++;
- *width -= tabWidth;
- }
- } /* if (*width >= 0) */
- } /* if tab found */
- } /* for */
-
- /* no more tabs in this segment: process the last sub-segment */
- if (*width >= 0)
- {
- lastWidth = *width;
- offset += PixelToChar((char *)pText + beginChar, textLength - beginChar, slop,
- lastWidth, (Boolean *) edge, width, styleRunPosition,
- kOneToOneScaling, kOneToOneScaling);
- }
-
- /* round width to nearest integer value */
- /* this is supposed to fix an incompatibility with the WorldScript Power Adapter */
- *width = (*width + 0x00008000) & 0xFFFF0000;
-
- return offset;
-}
-
-pascal SInt16 _WETabCharToPixel
- (
- const char * pText,
- SInt32 textLength,
- Fixed slop,
- SInt32 offset,
- SInt16 direction,
- JustStyleCode styleRunPosition,
- SInt16 hPos,
- WEReference we
- )
-{
- LongRect destRect;
- SInt32 beginChar = 0;
- SInt32 ii;
- SInt16 width;
- SInt16 destLeft;
- SInt16 totalWidth = 0;
- SInt16 tabSize = WEGetTabSize(we);
-
- WEGetDestRect(&destRect, we);
- destLeft = (SInt16) destRect.left;
-
- /* measure text up to offset, if offset is within this segment,
- otherwise to textLength */
- if (offset > textLength)
- {
- offset = textLength;
- }
-
- for ( ii = 0; ii < offset; ii++ )
- {
- if (pText[ii] == '\t')
- {
- /* calculate the pixel width of the subsegment preceding the tab */
- width = TextWidth(pText, beginChar, ii - beginChar);
- totalWidth += width;
- hPos += width;
-
- /* calculate tab width */
- width = tabSize - (hPos - destLeft) % tabSize;
- totalWidth += width;
- hPos += width;
-
- /* go to next subsegment */
- beginChar = ii + 1;
- }
- } /* for */
-
- /* calculate width of remaining characters */
- width = CharToPixel((char *)pText + beginChar, textLength - beginChar, slop,
- offset - beginChar, direction, styleRunPosition,
- kOneToOneScaling, kOneToOneScaling);
- totalWidth += width;
-
- return totalWidth;
-}
-
-pascal StyledLineBreakCode _WETabLineBreak
- (
- const char * pText,
- SInt32 textLength,
- SInt32 textStart,
- SInt32 textEnd,
- Fixed *textWidth,
- SInt32 *textOffset,
- WEReference we
- )
-{
- LongRect destRect;
- SInt32 beginChar = textStart;
- SInt32 ii;
- Fixed tabWidth;
- SInt16 destWidth;
- StyledLineBreakCode breakCode = smBreakOverflow;
- SInt16 tabSize = WEGetTabSize(we);
-
- WEGetDestRect(&destRect, we);
- destWidth = (SInt16) (destRect.right - destRect.left);
-
- for ( ii = textStart; ii < textEnd; ii++ )
- {
- if (pText[ii] == 0x0D)
- {
- /* found a <return>, so stop looking ahead for tabs */
- ii++;
- break;
- }
- if (pText[ii] == '\t')
- {
- /* do previous "segment" */
- breakCode = StyledLineBreak((char *)pText, textLength, beginChar, ii, 0, textWidth, textOffset);
- if ((breakCode != smBreakOverflow) || (ii >= textLength))
- {
- break;
- }
- beginChar = ii + 1;
-
- /* calculate tab width (as a Fixed value) */
- tabWidth = BSL(tabSize - (destWidth - FIXROUND(*textWidth)) % tabSize, 16);
-
- /* if tabWidth > pixelWidth we break in tab */
- /* don't move tab to next line */
- if (tabWidth > *textWidth)
- {
- breakCode = smBreakWord;
- *textOffset = ii + 1;
- break;
- }
- else
- {
- *textWidth -= tabWidth;
- }
- }
- } /* for */
-
- /* do last sub-segment */
- if ((ii - beginChar >= 0) && (breakCode == smBreakOverflow))
- {
- breakCode = StyledLineBreak((char *)pText, textLength, beginChar, ii, 0, textWidth, textOffset);
- }
-
- return breakCode;
-}