version 1.75, 2009/10/31 06:10:57 |
version 1.77, 2009/11/01 08:15:20 |
|
|
|
|
#include <assert.h> |
#include <assert.h> |
#include <ctype.h> |
#include <ctype.h> |
#include <stdio.h> |
|
#include <stdarg.h> |
#include <stdarg.h> |
|
#include <stdio.h> |
#include <stdint.h> |
#include <stdint.h> |
#include <stdlib.h> |
#include <stdlib.h> |
#include <string.h> |
#include <string.h> |
|
|
print_spec(struct html *h, const char *p, int len) |
print_spec(struct html *h, const char *p, int len) |
{ |
{ |
const char *rhs; |
const char *rhs; |
int i; |
|
size_t sz; |
size_t sz; |
|
|
rhs = chars_a2ascii(h->symtab, p, (size_t)len, &sz); |
rhs = chars_a2ascii(h->symtab, p, (size_t)len, &sz); |
|
|
if (NULL == rhs) |
if (NULL == rhs) |
return; |
return; |
for (i = 0; i < (int)sz; i++) |
fwrite(rhs, 1, sz, stdout); |
putchar(rhs[i]); |
|
} |
} |
|
|
|
|
|
|
print_res(struct html *h, const char *p, int len) |
print_res(struct html *h, const char *p, int len) |
{ |
{ |
const char *rhs; |
const char *rhs; |
int i; |
|
size_t sz; |
size_t sz; |
|
|
rhs = chars_a2res(h->symtab, p, (size_t)len, &sz); |
rhs = chars_a2res(h->symtab, p, (size_t)len, &sz); |
|
|
if (NULL == rhs) |
if (NULL == rhs) |
return; |
return; |
for (i = 0; i < (int)sz; i++) |
fwrite(rhs, 1, sz, stdout); |
putchar(rhs[i]); |
|
} |
} |
|
|
|
|
Line 320 print_escape(struct html *h, const char **p) |
|
Line 316 print_escape(struct html *h, const char **p) |
|
static void |
static void |
print_encode(struct html *h, const char *p) |
print_encode(struct html *h, const char *p) |
{ |
{ |
|
size_t sz; |
|
|
for (; *p; p++) { |
for (; *p; p++) { |
|
sz = strcspn(p, "\\<>&"); |
|
|
|
fwrite(p, 1, sz, stdout); |
|
p += sz; |
|
|
if ('\\' == *p) { |
if ('\\' == *p) { |
print_escape(h, &p); |
print_escape(h, &p); |
continue; |
continue; |
} |
} else if ('\0' == *p) |
switch (*p) { |
|
case ('<'): |
|
printf("<"); |
|
break; |
break; |
case ('>'): |
|
|
if ('<' == *p) |
|
printf("<"); |
|
else if ('>' == *p) |
printf(">"); |
printf(">"); |
break; |
else if ('&' == *p) |
case ('&'): |
|
printf("&"); |
printf("&"); |
break; |
|
default: |
|
putchar(*p); |
|
break; |
|
} |
|
} |
} |
} |
} |
|
|