Súbor: [Platon] / cpdf / parse.c (stiahnutie)
Revízia 1.3, Fri Sep 13 20:39:36 2002 UTC (21 years, 6 months ago) by lynx
Zmeny od 1.2: +18 -13
[lines]
Added interpreter to /name objects.
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* function compute number of locations of char c from buffer to character e
*/
int strlenc(char *buffer, char c, char e)
{
register int i = 0;
register char *p = buffer;
while (*p && *p != e) {
if (*p == c)
i++;
p++;
}
return i;
}
/* interpreting special characters in name string */
char *name(char *buffer)
{
register char *ret;
char num[4] = "0x";
if (*ret != '/')
return NULL;
ret = (char *) malloc(255);
while (*buffer != ' ') {
if (*buffer == '#') {
num[2] = *(buffer + 1);
num[3] = *(buffer + 2);
*ret = (char) strtoul(&num,NULL,16);
buffer += 2;
}
*ret = *buffer;
ret++;
buffer++;
}
return ret;
}
/* parse arrays */
char **array(char *buffer)
{
register char **ret;
register int end, a, index;
if (*buffer != '[')
return NULL;
ret = (char **) malloc(strlenc(buffer,' ',']') * sizeof(char));
end = a = index = 0;
while (end > 0) {
switch (*buffer) {
case '[':
end++;
if(*(buffer + 1) == ' ')
buffer++;
break;
case ']':
end--;
break;
case ' ':
if (*(buffer + 1) == ']')
break;
ret[index] = buffer - a;
*buffer = '\0';
a = 0;
index++;
break;
default:
a++;
}
buffer++;
}
return ret;
}
Platon Group <platon@platon.sk> http://platon.sk/
|