Platon Technologies
neprihlásený Prihlásiť Registrácia
SlovakEnglish
open source software development oslavujeme 10 rokov vývoja otvoreného softvéru! Sobota, 24. október 2026

Rozdiely pre cpdf/parse.c medzi verziami 1.14 a 1.15

verzia 1.14, 2002/10/16 21:07:43 verzia 1.15, 2002/10/20 14:07:23
Riadok 27  int strlenc(char *buffer, char c, char t
Riadok 27  int strlenc(char *buffer, char c, char t
 int strlento(char *buffer, char to)  int strlento(char *buffer, char to)
 {  {
         char *old = buffer;          char *old = buffer;
         while (*buffer && *buffer != to)          while (*buffer && *buffer != to)
                 buffer++;                  buffer++;
         return buffer - old;          return buffer - old;
 }  }
Riadok 86  char *name(char *buffer)
Riadok 86  char *name(char *buffer)
 char **array(char *buffer)  char **array(char *buffer)
 {  {
         char **ret = NULL, *last;          char **ret = NULL, *last;
         static char delim[4] = { '[','\0',']','\0' };          static char delim[4] = { '[', '\0', ']', '\0' };
         int index = 0,len;          int index = 0, len;
         last = buffer + 1;          last = buffer + 1;
         do {          do {
                 ret = (char **) realloc(ret, (index + 1) * sizeof(char**));                  ret =
                 if(*buffer == '[' || *buffer == ']') {                      (char **) realloc(ret, (index + 1) * sizeof(char **));
                         if(*buffer == '[')                  if (*buffer == '[' || *buffer == ']') {
                           if (*buffer == '[')
                                 ret[index] = &delim[0];                                  ret[index] = &delim[0];
                         else                          else
                                 ret[index] = &delim[2];                                  ret[index] = &delim[2];
Riadok 100  char **array(char *buffer)
Riadok 101  char **array(char *buffer)
                         index++;                          index++;
                         continue;                          continue;
                 }                  }
                 while (*buffer != ' ' && *buffer != ']' && *buffer != '\n')                  while (*buffer != ' ' && *buffer != ']' && *buffer != '\n')
                         buffer++;                          buffer++;
                 len = buffer - last;                  len = buffer - last;
                 ret[index] = (char *) xcalloc(len + 1,sizeof(char));                  ret[index] = (char *) xcalloc(len + 1, sizeof(char));
                 strncpy(ret[index], last, len);                  strncpy(ret[index], last, len);
                 index++;                  index++;
                 if(*buffer != ']')                  if (*buffer != ']')
                         last = ++buffer;                          last = ++buffer;
                 else                  else
                         last = buffer;                          last = buffer;
Riadok 126  void read_obj(long offset)
Riadok 127  void read_obj(long offset)
         fget(buffer, BUFLEN, fp);          fget(buffer, BUFLEN, fp);
         sscanf(buffer, "%d ", &obj_num);          sscanf(buffer, "%d ", &obj_num);
         fget(buffer, BUFLEN, fp);          fget(buffer, BUFLEN, fp);
         if(buffer[0] == '<' && buffer[1] == '<')          if (buffer[0] == '<' && buffer[1] == '<')
                 fget(buffer,BUFLEN,fp);                  fget(buffer, BUFLEN, fp);
         while (!strstr(buffer, "endobj")) {          while (!strstr(buffer, "endobj")) {
                 size += strlen(buffer) + 1;                  size += strlen(buffer) + 1;
                 obj->unparsed = realloc(obj->unparsed, size);                  obj->unparsed = realloc(obj->unparsed, size);
Riadok 148  void add_obj(char *s)
Riadok 149  void add_obj(char *s)
         fseek(fp, old_off, SEEK_SET);          fseek(fp, old_off, SEEK_SET);
 }  }
   
   /* get filter number */
   char get_filternum(char *filter)
   {
           if (!strcmp(filter, "/FlateDecode"))
                   return FLATEDECODE;
           if (!strcmp(filter, "/DCTDecode"))
                   return DCTDECODE;
           return -1;
   }
   
 /* get offset of start xref table */  /* get offset of start xref table */
 long get_startxref(void)  long get_startxref(void)
 {  {
Riadok 196  void probe_ptree(int num)
Riadok 207  void probe_ptree(int num)
                 free(kids[1]);                  free(kids[1]);
                 free(kids[2]);                  free(kids[2]);
         }          }
         free(old);          free(old);
         return;          return;
 }  }
   
Riadok 221  void xref(void)
Riadok 232  void xref(void)
                         sscanf(xref, "%d %d", &entry[0], &entry[1]);                          sscanf(xref, "%d %d", &entry[0], &entry[1]);
                         if (entry[0] + entry[1] > obj_count) {                          if (entry[0] + entry[1] > obj_count) {
                                 object = (struct object **)                                  object = (struct object **)
                                     realloc(object,                                      realloc(object, entry[0] + entry[1]);
                                             entry[0] + entry[1]);  
                                 obj_count = entry[0] + entry[1];                                  obj_count = entry[0] + entry[1];
                         }                          }
                         if (!entry[0])                          if (!entry[0])
Riadok 287  void parse_pdf(void)
Riadok 297  void parse_pdf(void)
         probe_ptree(ret);          probe_ptree(ret);
         return;          return;
 }  }
   
   void fill_page(int page_num)
   {
           struct page *page;
           struct object *obj;
           char *p, **mediabox;
           int contents, resources, i = 0;
           if (object[page_num]->type == PAGE)
                   return;
           page = (struct page *) malloc(sizeof(struct page));
           obj = object[page_num];
           p = strstr(obj->unparsed, "/Contents ");
           if (!p) {
                   /* error */
                   return;
           }
           sscanf(p, "/Contents %d 0 R", &contents);
           p = strstr(obj->unparsed, "/Resources ");
           if (!p) {
                   /* error */
                   return;
           }
           sscanf(p, "/Resources %d 0 R", &resources);
           fill_contents(contents);
           page->contents = object[contents]->parsed;
           fill_resources(resources);
           page->resources = object[resources]->parsed;
           p = strstr(obj->unparsed, "/Mediabox ");
           if (!p) {
                   /* error */
                   return;
           }
           mediabox = array(&p[11]);
           page->mediabox[0] = (short) strtoul(mediabox[1], NULL, 10);
           free(mediabox[1]);
           page->mediabox[1] = (short) strtoul(mediabox[2], NULL, 10);
           free(mediabox[2]);
           page->mediabox[2] = (short) strtoul(mediabox[3], NULL, 10);
           free(mediabox[3]);
           page->mediabox[3] = (short) strtoul(mediabox[4], NULL, 10);
           free(mediabox[4]);
           free(mediabox);
           p = strstr(obj->unparsed, "/Parent ");
           if (!p) {
                   /* error */
                   return;
           }
           sscanf(p, "/Parent %d 0 R", &page->parent);
           free(obj->unparsed);
           obj->unparsed = NULL;
           obj->type = PAGE;
           obj->parsed = page;
           return;
   }
   
   void fill_contents(int page_num)
   {
           struct contents *content;
           struct object *obj;
           char *p;
           if (object[page_num]->type == CONTENT)
                   return;
           content = (struct content *) malloc(sizeof(struct content));
           obj = object[page_num];
           p = strstr(obj->unparsed, "/Length ");
           if (!p) {
                   /* error */
                   return;
           }
           sscanf(p, "/Length %d", &content->length);
           p = strstr(obj->unparsed, "/Filter ");
           if (!p) {
                   /* error */
                   return;
           }
           content->filter = get_filternum(&p[9]);
           p = strstr(obj->unparsed, "stream");
           if (!p) {
                   /* error */
                   return;
           }
           content->stream = (char *) malloc(content->length);
           strncpy(content->stream, &p[7], content->length);
           free(obj->unparsed);
           obj->unparsed = NULL;
           obj->type = CONTENT;
           obj->parsed = content;
           return;
   }

Legend:
Odstranené z verzie1.14  
zmenené riadky
  Pridané vo verzii1.15

Platon Group <platon@platon.sk> http://platon.sk/
Copyright © 2002-2006 Platon Group
Stránka používa redakčný systém Metafox
Na začiatok