📄 doc2xml.c
字号:
static int platform = PLATFORM_NONE;
static int inplatform = FALSE;
line_count++;
i = 0;
j = 0;
while (line[i] != '\0')
{
switch(line[i])
{
case '<':
strcpy( &line2[j], "<" ) ;
j += strlen( "<." ) - 1 ;
break ;
case '>':
strcpy( &line2[j], ">" ) ;
j += strlen( ">." ) - 1 ;
break ;
case '&':
strcpy( &line2[j], "&" ) ;
j += strlen( "&" ) - 1 ;
break ;
case '\r':
case '\n':
break;
case '`': /* backquotes mean boldface or link */
if ((!inref) && (!inquote))
{
k=i+1; /* index into current string */
l=0; /* index into topic string */
while ((line[k] != '`') && (line[k] != '\0'))
{
topic[l] = line[k];
k++;
l++;
}
topic[l] = '\0';
k = lookup(topic);
if ((k > 0) && (k != last_line))
{
if (nolinks)
sprintf( hyplink1, "<b>") ;
else {
char *p = title_from_index(k);
char *t;
sprintf( hyplink1, "<link href=\042");
t = hyplink1 + strlen(hyplink1);
while (p && *p) {
if (*p == ' ')
*t++ = '_';
else
*t++ = *p;
p++;
}
*t = '\0';
strcat(hyplink1, "\042>") ;
}
strcpy( line2+j, hyplink1 ) ;
j += strlen( hyplink1 )-1 ;
inref = k;
}
else
{
if (debug && k != last_line)
fprintf(stderr,"Can't make link for \042%s\042 on line %d\n",topic,line_count);
line2[j++] = '<';
line2[j++] = 'b';
line2[j] = '>';
inquote = TRUE;
}
}
else
{
if (inquote && inref)
fprintf(stderr, "Warning: Reference Quote conflict line %d\n", line_count);
if (inquote)
{
line2[j++] = '<';
line2[j++] = '/';
line2[j++] = 'b';
line2[j] = '>';
inquote = FALSE;
}
if (inref)
{
/* must be inref */
line2[j++] = '<';
line2[j++] = '/';
if (nolinks)
line2[j++] = 'b';
else {
line2[j++] = 'l';
line2[j++] = 'i';
line2[j++] = 'n';
line2[j++] = 'k';
}
line2[j] = '>';
inref = 0;
}
}
break;
default:
if ((unsigned int)(line[i]) > 127) {
/* quote non-ASCII characters */
unsigned int value = line[i] & 0xff;
unsigned int digit;
line2[j++] = '&';
line2[j++] = '#';
digit = value / 100;
value -= digit * 100;
line2[j++] = digit + '0';
digit = value / 10;
value -= digit * 10;
line2[j++] = digit + '0';
line2[j++] = value + '0';
line2[j] = ';';
}
else
line2[j] = line[i];
}
i++;
j++;
line2[j] = '\0';
}
i = 1;
switch(line[0]) { /* control character */
case '?': { /* interactive help entry */
#ifdef FIXLATER
if( intable ) intablebut = TRUE ;
fprintf(b,"\n:i1. %s", &(line[1])); /* index entry */
#endif
if ((line2[1] != '\0') && (line2[1] != ' '))
fprintf(b, "<key>%s</key>\n", &(line2[1]));
break;
}
case '@': { /* start/end table */
break; /* ignore */
}
case '#': { /* latex table entry */
break; /* ignore */
}
case '%': { /* troff table entry */
break; /* ignore */
}
case 'W':
if (tabl)
fprintf(b,"</fixed>\n"); /* rjl */
tabl = FALSE;
if (para)
fprintf(b,"</p>\n");
end_platform(platform, b);
if (line[1] == 'P')
platform = PLATFORM_WINOS2;
else
platform = PLATFORM_WIN;
if (inbody) {
start_platform(platform, b);
inplatform = TRUE;
}
if (para)
fprintf(b,"<p>\n");
break;
case 'P':
if (tabl)
fprintf(b,"</fixed>\n"); /* rjl */
tabl = FALSE;
if (para)
fprintf(b,"</p>\n");
end_platform(platform, b);
platform = PLATFORM_OS2;
if (inbody) {
start_platform(platform, b);
inplatform = TRUE;
}
if (para)
fprintf(b,"<p>\n");
break;
case 'X':
if (tabl)
fprintf(b,"</fixed>\n"); /* rjl */
tabl = FALSE;
if (para)
fprintf(b,"</p>\n");
end_platform(platform, b);
platform = PLATFORM_X11;
if (inbody) {
start_platform(platform, b);
inplatform = TRUE;
}
if (para)
fprintf(b,"<p>\n");
break;
case 'E':
if (tabl)
fprintf(b,"</fixed>\n"); /* rjl */
tabl = FALSE;
if (para)
fprintf(b,"</p>\n");
end_platform(platform, b);
platform = PLATFORM_NONE;
if (para)
fprintf(b,"<p>\n");
break;
case '\n': /* empty text line */
if (tabl)
fprintf(b,"</fixed>\n"); /* rjl */
if (para)
fprintf(b,"</p>\n"); /* rjl */
para = 0;
tabl = 0;
break;
case ' ': { /* normal text line */
if (!inbody)
fprintf(b, "<body>\n");
inbody = 1;
if (!inplatform)
start_platform(platform, b);
inplatform = TRUE;
if ((line2[1] == '\0') || (line2[1] == '\n'))
{
if (para)
fprintf(b,"</p>\n"); /* rjl */
para = 0;
tabl = 0;
}
if (line2[1] == ' ')
{
if (para)
fprintf(b,"</p>\n"); /* rjl */
para = 0;
if (!tabl)
{
fprintf(b,"<fixed>\n");
}
fprintf(b,"%s\n",&line2[1]);
tabl = 1;
}
else if (strncmp(line2+1, "{bml", 4)==0)
{
/* assume bitmap is available as GIF */
char *p;
fprintf(b, "\n<bmp>");
for (p=line2+1; *p && *p!=' '; p++)
; /* skip over bml text */
for (; *p && *p==' '; p++)
; /* skip over spaces */
for (; *p && *p!='.' && *p!=' '; p++)
fprintf(b, "%c", *p);
fprintf(b, ".bmp</bmp>\n");
fprintf(b, "\n<gif>");
for (p=line2+1; *p && *p!=' '; p++)
; /* skip over bml text */
for (; *p && *p==' '; p++)
; /* skip over spaces */
for (; *p && *p!='.' && *p!=' '; p++)
fprintf(b, "%c", *p);
fprintf(b, ".gif</gif>>\n");
}
else
{
if (tabl) {
fprintf(b,"</fixed>\n"); /* rjl */
}
tabl = 0;
if (!para) {
fprintf(b,"<p>"); /* rjl */
para = 1; /* not in para so start one */
}
else
fputc(' ', b);
fprintf(b,"%s\n",&line2[1]);
}
break;
}
default: {
if (isdigit(line[0])) { /* start of section */
if (tabl)
fprintf(b,"</fixed>\n"); /* rjl */
if (para)
fprintf(b, "</p>\n");
para = 0;
if (platform)
end_platform(platform, b);
inplatform = FALSE;
if (inbody)
fprintf(b, "</body>\n");
inbody = 0;
new_level = line[0]-'0';
#ifdef NOT_USED
if (!startpage)
{
refs(last_line,b);
}
#endif
para = 0; /* not in a paragraph */
tabl = 0;
last_line = line_count;
startpage = 0;
if (debug)
fprintf( stderr, "%d: %s\n", line_count, &line2[1] ) ;
k=lookup(&line2[1]) ;
while ((new_level <= prev_level) && prev_level) {
fprintf(b,"</topic>\n");
prev_level--;
}
prev_level = new_level;
if (new_level > 0) {
/* output unique ID and section title */
if (nolinks)
fprintf(b,"<topic level=\042%d\042>\n", new_level);
else {
fprintf(b,"<topic level=\042%d\042 id=\042", new_level);
char *p = &(line2[1]);
while (*p) {
if (*p == ' ')
fputc('_', b);
else
fputc(*p, b);
p++;
}
fprintf(b,"\042>\n");
}
fprintf(b,"<browse>%05d0</browse>\n", line_count);
fprintf(b, "<name>%s</name>\n", &(line2[1])); /* title */
}
} else
fprintf(stderr, "unknown control code '%c' in column 1, line %d\n",
line[0], line_count);
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -