Ignore:
Timestamp:
Jun 30, 2008, 10:13:07 AM (13 years ago)
Author:
Eugene Romanenko
Message:

PDF plugin: poppler library updated to version 0.8.3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/poppler/mypoppler/fofi/FoFiType1.cc

    r2 r250  
    7676                             FoFiOutputFunc outputFunc, void *outputStream) {
    7777  char buf[512];
    78   char *line;
     78  char *line, *line2, *p;
    7979  int i;
    8080
     
    102102  (*outputFunc)(outputStream, "readonly def\n", 13);
    103103 
    104   // copy everything after the encoding
     104  // find the end of the encoding data
     105  //~ this ought to parse PostScript tokens
    105106  if (!strncmp(line, "/Encoding StandardEncoding def", 30)) {
    106107    line = getNextLine(line);
    107108  } else {
    108     for (line = getNextLine(line);
    109          line && strncmp(line, "readonly def", 12);
    110          line = getNextLine(line)) ;
     109    // skip "/Encoding" + one whitespace char,
     110    // then look for 'def' preceded by PostScript whitespace
     111    p = line + 10;
     112    line = NULL;
     113    for (; p < (char *)file + len; ++p) {
     114      if ((*p == ' ' || *p == '\t' || *p == '\x0a' ||
     115           *p == '\x0d' || *p == '\x0c' || *p == '\0') &&
     116          p + 4 <= (char *)file + len &&
     117          !strncmp(p + 1, "def", 3)) {
     118        line = p + 4;
     119        break;
     120      }
     121    }
     122  }
     123
     124  // some fonts have two /Encoding entries in their dictionary, so we
     125  // check for a second one here
     126  if (line) {
     127    for (line2 = line, i = 0;
     128         i < 20 && line2 && strncmp(line2, "/Encoding", 9);
     129         line2 = getNextLine(line2), ++i) ;
     130    if (i < 20 && line2) {
     131      (*outputFunc)(outputStream, line, line2 - line);
     132      if (!strncmp(line2, "/Encoding StandardEncoding def", 30)) {
     133        line = getNextLine(line2);
     134      } else {
     135        // skip "/Encoding" + one whitespace char,
     136        // then look for 'def' preceded by PostScript whitespace
     137        p = line2 + 10;
     138        line = NULL;
     139        for (; p < (char *)file + len; ++p) {
     140          if ((*p == ' ' || *p == '\t' || *p == '\x0a' ||
     141               *p == '\x0d' || *p == '\x0c' || *p == '\0') &&
     142              p + 4 <= (char *)file + len &&
     143              !strncmp(p + 1, "def", 3)) {
     144            line = p + 4;
     145            break;
     146          }
     147        }
     148      }
     149    }
     150
     151    // copy everything after the encoding
    111152    if (line) {
    112       line = getNextLine(line);
    113     }
    114   }
    115   if (line) {
    116     (*outputFunc)(outputStream, line, ((char *)file + len) - line);
     153      (*outputFunc)(outputStream, line, ((char *)file + len) - line);
     154    }
    117155  }
    118156}
     
    179217            c = *p2;
    180218            *p2 = '\0';
    181             if ((code = atoi(p)) < 256) {
    182               *p2 = c;
     219            code = atoi(p);
     220            *p2 = c;
     221            if (code == 8 && *p2 == '#') {
     222              code = 0;
     223              for (++p2; *p2 >= '0' && *p2 <= '7'; ++p2) {
     224                code = code * 8 + (*p2 - '0');
     225              }
     226            }
     227            if (code < 256) {
    183228              for (p = p2; *p == ' ' || *p == '\t'; ++p) ;
    184229              if (*p == '/') {
Note: See TracChangeset for help on using the changeset viewer.