[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Found problem with Subrs parsing...
From: |
David Turner |
Subject: |
Re: Found problem with Subrs parsing... |
Date: |
Tue, 25 Jul 2000 09:18:59 +0200 |
Hi Just,
sorry for not answering earlier, but I think you can
commit this patch to the CVS. And thanks a lot for
your work by the way :-)
- David
Just van Rossum a écrit :
>
> At 3:47 PM -0400 24-07-2000, Tom Kacvinsky wrote:
> >Sound about right?
>
> Yeah...
>
> I've made a patch which works like this: always make sure the next token is
> "dup" when starting to parse a new subr. Here it is:
>
> cvs -z9 -q diff -c z1load.c (in directory DevDev:PyPy:freetype2:src:type1z:)
> Index: z1load.c
> ===================================================================
> RCS file: /cvsroot/freetype2/src/type1z/z1load.c,v
> retrieving revision 1.7
> diff -c -r1.7 z1load.c
> *** z1load.c 2000/07/10 21:41:32 1.7
> --- z1load.c 2000/07/25 05:07:35
> ***************
> *** 1243,1248 ****
> --- 1243,1253 ----
> if ( parser->error )
> return;
>
> + /* position the parser right before the "dup" of the first subr */
> + skip_whitespace( parser );
> + skip_blackspace( parser ); /* "array" */
> + skip_whitespace( parser );
> +
> /* initialize subrs array */
> error = Z1_New_Table( table, loader->num_subrs, memory );
> if ( error )
> ***************
> *** 1259,1274 ****
> FT_Byte* base;
>
> index = Z1_ToInt( parser );
>
> - /* make sure we get subr index and loop count in sync -- */
> - /* in some cases, the dictionary count is simply the last */
> - /* subr index + 1, with possible holes in the table */
> - if ( index > n )
> - n = index;
> -
> if ( !read_binary_data( parser, &size, &base ) )
> return;
>
> /* some fonts use a value of -1 for lenIV to indicate that */
> /* the charstrings are unencoded.. */
> --- 1264,1292 ----
> FT_Byte* base;
>
> + /* If the next token isn't "dup", we're also done. This */
> + /* happens when there are "holes" in the Subrs array. */
> + if ( strncmp( (char*)parser->cursor, "dup", 3 ) != 0 )
> + break;
> +
> index = Z1_ToInt( parser );
>
> if ( !read_binary_data( parser, &size, &base ) )
> return;
> +
> + /* The binary string is followed by one token, eg. "NP" */
> + /* (bound to "noaccess put") or by two separate tokens: */
> + /* noaccess put */
> + /* We position the parser right before the next dup, */
> + /* if any. */
> + skip_whitespace( parser );
> + skip_blackspace( parser ); /* "NP" or "I" or "noaccess" */
> + skip_whitespace( parser );
> + if ( strncmp( (char*)parser->cursor, "put", 3 ) == 0 )
> + {
> + skip_blackspace( parser ); /* "put" */
> + skip_whitespace( parser );
> + }
>
> /* some fonts use a value of -1 for lenIV to indicate that */
> /* the charstrings are unencoded.. */
>
> David, if you agree with this, I'll check it in for you.
>
> Just
- Found problem with Subrs parsing..., Tom Kacvinsky, 2000/07/24
- Re: Found problem with Subrs parsing..., Just van Rossum, 2000/07/24
- Re: Found problem with Subrs parsing..., Tom Kacvinsky, 2000/07/24
- Re: Found problem with Subrs parsing..., Just van Rossum, 2000/07/25
- Re: Found problem with Subrs parsing..., Tom Kacvinsky, 2000/07/25
- Re: Found problem with Subrs parsing..., Just van Rossum, 2000/07/25
- Re: Found problem with Subrs parsing..., Tom Kacvinsky, 2000/07/25
- Re: Found problem with Subrs parsing..., Just van Rossum, 2000/07/25
- Re: Found problem with Subrs parsing...,
David Turner <=
Re: Found problem with Subrs parsing..., Just van Rossum, 2000/07/25