This is hdshowany.c in view mode; [Download] [Up]
/*
* $RCSfile: hdshowany.c,v $
*
* Copyright (C) 1991, 1992 by Adobe Systems Incorporated.
* All rights reserved.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted,
* provided that the above copyright notices appear in all copies and that
* both those copyright notices and this permission notice appear in
* supporting documentation and that the name of Adobe Systems
* Incorporated not be used in advertising or publicity pertaining to
* distribution of the software without specific, written prior
* permission. If any portion of this software is changed, it cannot be
* marketed under Adobe's trademarks and/or copyrights unless Adobe, in
* its sole discretion, approves by a prior writing the quality of the
* resulting implementation.
*
* ADOBE MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THE SOFTWARE FOR
* ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
* ADOBE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
* IMPLIED WARRANTIES OF MERCHANTABILITY FITNESS FOR A PARTICULAR PURPOSE AND
* NON-INFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL ADOBE BE LIABLE
* TO YOU OR ANY OTHER PARTY FOR ANY SPECIAL, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER WHETHER IN AN ACTION OF CONTRACT,
* NEGLIGENCE, STRICT LIABILITY OR ANY OTHER ACTION ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ADOBE WILL NOT
* PROVIDE ANY TRAINING OR OTHER SUPPORT FOR THE SOFTWARE.
*
* PostScript, Display PostScript, and Adobe are trademarks of Adobe Systems
* Incorporated registered in the U.S.A. and other countries.
*
* Author: Adobe Systems Incorporated
*/
/***************************************************************
**
** INCLUDE FILES
**
***************************************************************/
#include "Text.h"
/***************************************************************
**
** FUNCTION: hd_showstr
**
** DESCRIPTION: Shows a section of a line of text up to a
** kern, track, or space.
**
** PARAMETERS: start start of text
** end end of text
** show pointer to show structure
** spaceval amount to space string from last
** trackval amount to track chars in string
**
** RETURN: None
**
***************************************************************/
static void hd_showstr(start, end, show, spaceval, trackval)
int start;
int end;
ShowStruct *show;
float spaceval;
float trackval;
{
if (start == end) return;
/*
** Decide whether to use show, ashow, widthshow or awidthshow
*/
if (spaceval == 0.0) {
if (trackval == 0.0) {
PSWshow((char *)((show->text)+start), (end-start));
} else {
PSWashow(trackval, 0.0, (char *)((show->text)+start), (end-start));
}
} else {
if (trackval == 0.0) {
PSWwidthshow(spaceval, 0.0, 32,
(char *)((show->text)+start), (end-start));
} else {
PSWawidthshow(spaceval, 0.0, 32, trackval,
0.0, (char *)((show->text)+start), (end-start));
}
}
}
/***************************************************************
**
** FUNCTION: ShowAny
**
** DESCRIPTION: Breaks the current line of text into blocks
** of normally spaced text and sends them to
** hd_showstr with the tracking, kerning, and
** extra spacing neccessary
**
** PARAMETERS: show the showstruct.
**
** RETURN: None
**
***************************************************************/
void ShowAny(show)
ShowStruct *show;
{
int lastshow = 0; /* index of first char in last "show" block */
/* indexes into ShowStruct arrays */
int textptr = 0; /* current character in show->text[] */
int prkernptr = 0; /* pair kern */
int absmovptr = 0; /* absolute moveto array index */
int spaceadjptr = 0; /* space adjust for justification */
int trackkernptr = 0; /* track kern */
float spaceval = 0.0;
float trackval = 0.0;
/*
** Loop through all the characters on the text line
*/
while (textptr < show->textlen) {
/*
** If no attributes, just increment show pointer and skip to loop end
*/
if (show->attr [textptr] == SA_NOATTR) {
textptr++;
continue;
}
/*
** If some characters skipped over since last "show", show the
** section of the text line up to the kern, track, or space
*/
if (lastshow != textptr) {
hd_showstr (lastshow, textptr, show, spaceval, trackval);
}
/*
** If absolute move attribute for character, "moveto" the point
*/
if (show->attr [textptr] & SA_ABSMOV) {
PSmoveto (show->absmov [absmovptr].x, show->absmov [absmovptr].y);
absmovptr++;
}
/*
** If pair kern attribute for character, "rmoveto" the point
*/
if (show->attr [textptr] & SA_PRKERN) {
PSrmoveto(show->prkern[prkernptr++], 0.0);
}
/*
** If track kern value change for character, set new track value
*/
if (show->attr [textptr] & SA_TRACKADJ) {
trackval = (show->trackkernlen
? show->trackkern [trackkernptr++] : 0.0);
}
/*
** If space adjustment value change for character, set new value
*/
if (show->attr [textptr] & SA_SPACEADJ) {
spaceval = (show->spaceadjlen
? show->spaceadj [spaceadjptr++] : 0.0);
}
/*
** Mark last show and increment show pointer
*/
lastshow = textptr++;
}
/*
** Show the remainder of the text line
*/
hd_showstr (lastshow, textptr, show, spaceval, trackval);
} /* end ShowAny () */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.