static const char*
GetKeyword  (const char  *src,
             char        *keyword,
             HPDF_UINT        len)
{
    HPDF_UINT src_len = HPDF_StrLen (src, -1);

    HPDF_PTRACE (" GetKeyword\n");

    if (!keyword || src_len == 0 || len == 0)
        return NULL;

    *keyword = 0;

    while (len > 1) {
        if (HPDF_IS_WHITE_SPACE(*src)) {
            *keyword = 0;

            while (HPDF_IS_WHITE_SPACE(*src))
                src++;
            return src;
        }

        *keyword++ = *src++;
        len--;
    }

    *keyword = 0;
    return NULL;
}
Beispiel #2
0
static HPDF_TextWidth
TextWidth  (HPDF_Font         font,
            const HPDF_BYTE  *text,
            HPDF_UINT         len)
{
    HPDF_FontAttr attr = (HPDF_FontAttr)font->attr;
    HPDF_TextWidth ret = {0, 0, 0, 0};
    HPDF_UINT i;
    HPDF_BYTE b = 0;

    HPDF_PTRACE ((" HPDF_TTFont_TextWidth\n"));

    if (attr->widths) {
        for (i = 0; i < len; i++) {
            b = text[i];
            ret.numchars++;
            ret.width += CharWidth (font, b);

            if (HPDF_IS_WHITE_SPACE(b)) {
                ret.numspace++;
                ret.numwords++;
            }
        }
    } else
        HPDF_SetError (font->error, HPDF_FONT_INVALID_WIDTHS_TABLE, 0);

    /* 2006.08.19 add. */
    if (HPDF_IS_WHITE_SPACE(b))
        ; /* do nothing. */
    else
        ret.numwords++;

    return ret;
}
Beispiel #3
0
HPDF_INT
HPDF_AToI  (const char  *s)
{
    HPDF_BOOL flg = HPDF_FALSE;
    HPDF_INT  v = 0;

    /* increment pointer until the charactor of 's' is not
     * white-space-charactor.
     */
    while (*s) {
        if (HPDF_IS_WHITE_SPACE(*s))
            s++;
        else {
            if (*s == '-') {
                flg = HPDF_TRUE;
                s++;
            }
            break;
        }
    }

    while (*s >= '0' && *s <= '9') {
        v *= 10;
        v += *s - '0';
        s++;
    }

    if (flg)
        v *= -1;

    return v;
}
Beispiel #4
0
HPDF_DOUBLE
HPDF_AToF  (const char  *s)
{
    HPDF_BOOL flg = HPDF_FALSE;
    HPDF_INT i = 0;
    HPDF_DOUBLE v;
    HPDF_INT tmp = 1;

    /* increment pointer until the charactor of 's' is not
     * white-space-charactor.
     */
    while (*s) {
        if (HPDF_IS_WHITE_SPACE(*s))
            s++;
        else {
            if (*s == '-') {
                flg = HPDF_TRUE;
                s++;
            }
            break;
        }
    }

    while (*s >= '0' && *s <= '9') {
        if (i > 3276)
            break;

        i *= 10;
        i += *s - '0';
        s++;
    }

    if (*s == '.') {
        s++;
        while (*s >= '0' && *s <= '9') {
            if (i > 214748364)
                break;

            i *= 10;
            i += *s - '0';
            s++;
            tmp *= 10;
        }
    }

    v = (HPDF_DOUBLE)i / tmp;

    if (flg)
        v *= -1;

    return v;
}
static HPDF_UINT
Type3RasterFont_MeasureText(HPDF_Font          font,
	const HPDF_BYTE   *text,
	HPDF_UINT          len,
	HPDF_REAL          width,
	HPDF_REAL          font_size,
	HPDF_REAL          char_space,
	HPDF_REAL          word_space,
	HPDF_BOOL          wordwrap,
	HPDF_REAL         *real_width)
{
	HPDF_REAL w = 0;
	HPDF_UINT tmp_len = 0;
	HPDF_UINT i;
	HPDF_FontAttr attr = (HPDF_FontAttr)font->attr;

	HPDF_PTRACE((" HPDF_Type3RasterFont_MeasureText\n"));

	for (i = 0; i < len; i++) {
		HPDF_BYTE b = text[i];

		if (HPDF_IS_WHITE_SPACE(b)) {
			tmp_len = i + 1;

			if (real_width)
				*real_width = w;

			w += word_space;
		}
		else if (!wordwrap) {
			tmp_len = i;

			if (real_width)
				*real_width = w;
		}

		w += attr->widths[b] * font_size / 1000;

		/* 2006.08.04 break when it encountered  line feed */
		if (w > width || b == 0x0A)
			return tmp_len;

		if (i > 0)
			w += char_space;
	}

	/* all of text can be put in the specified width */
	if (real_width)
		*real_width = w;

	return len;
}