diff -pur dillo-0.2.4/src/dw_bullet.c dillo-0.2.4.lists/src/dw_bullet.c
--- dillo-0.2.4/src/dw_bullet.c Sat Jun 24 09:09:39 2000
+++ dillo-0.2.4.lists/src/dw_bullet.c Sat Aug 26 15:58:08 2000
@@ -65,6 +65,8 @@ static void Dw_bullet_paint(Dw *dw, DwRe
widget->style->fg_gc[widget->state],
FALSE, x + 1, y, 6, 6);
break;
+ default: /* Should/could the numeric bullets be treated here ? */
+ break;
}
a_Dw_paint_finish_screen(paint);
}
diff -pur dillo-0.2.4/src/dw_bullet.h dillo-0.2.4.lists/src/dw_bullet.h
--- dillo-0.2.4/src/dw_bullet.h Sat Jun 24 09:09:39 2000
+++ dillo-0.2.4.lists/src/dw_bullet.h Sat Aug 26 15:53:52 2000
@@ -8,9 +8,14 @@ extern "C" {
typedef struct _DwBullet DwBullet;
typedef enum {
- DW_BULLET_DISC,
- DW_BULLET_CIRCLE,
- DW_BULLET_SQUARE
+ DW_BULLET_DISC=1,
+ DW_BULLET_CIRCLE=2,
+ DW_BULLET_SQUARE=3,
+ DW_BULLET_1=4,
+ DW_BULLET_a=5,
+ DW_BULLET_A=6,
+ DW_BULLET_i=7,
+ DW_BULLET_I=8
} DwBulletType;
struct _DwBullet {
Only in dillo-0.2.4.lists/src: fonts[attr.font]
diff -pur dillo-0.2.4/src/html.c dillo-0.2.4.lists/src/html.c
--- dillo-0.2.4/src/html.c Mon Aug 21 06:29:23 2000
+++ dillo-0.2.4.lists/src/html.c Sat Aug 26 19:32:58 2000
@@ -58,8 +58,14 @@ static DilloHtml *Html_new(BrowserWindow
/*
* Local Data
*/
-/* -RL :: I use this var for
<\OL> tags */
-static gint number;
+static char *roman_I0[] = {"I","II","III","IV","V","VI","VII","VIII","IX"};
+static char *roman_I1[] = {"X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
+static char *roman_I2[] = {"C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
+static char *roman_I3[] = {"M","MM","MMM","MMMM"};
+static char *roman_i0[] = {"i","ii","iii","iv","v","vi","vii","viii","ix"};
+static char *roman_i1[] = {"x","xx","xxx","xl","l","lx","lxx","lxxx","xcC"};
+static char *roman_i2[] = {"c","cc","ccc","cd","d","dc","dcc","dccc","cm"};
+static char *roman_i3[] = {"m","mm","mmm","mmmm"};
/*
@@ -878,6 +884,7 @@ static void Html_tag_open_ul(DilloHtml *
{
DwPage *page;
DwPageAttr attr;
+ char tmp[80];
Html_par_push_tag(html, tag, tagsize);
@@ -887,9 +894,24 @@ static void Html_tag_open_ul(DilloHtml *
attr.left_indent_first = attr.left_indent_rest + 40;
attr.left_indent_rest += 40;
html->stack[html->stack_top].attr = a_Dw_page_add_attr(page, &attr);
- if(html->stack[html->stack_top].list_level < 4)
- html->stack[html->stack_top].list_level++;
+ if (Html_get_attr(tag, tagsize, "type", tmp, sizeof(tmp)))
+ {
+ if(strcmp(tmp,"disc")==0)
+ html->stack[html->stack_top].list_level = DW_BULLET_DISC;
+ else if(strcmp(tmp,"circle")==0)
+ html->stack[html->stack_top].list_level = DW_BULLET_CIRCLE;
+ else if(strcmp(tmp,"square")==0)
+ html->stack[html->stack_top].list_level = DW_BULLET_SQUARE;
+ }
+ else if(html->stack[html->stack_top].list_level < 3)
+ html->stack[html->stack_top].list_level++;
+ /* --EG :: I changed the behavior here : types are cycling instead of
+ * being forced to square. It's easier for mixed lists level counting.
+ */
+ else
+ html->stack[html->stack_top].list_level = DW_BULLET_DISC;
+ html->stack[html->stack_top].list_number = 0;
}
/*
@@ -899,19 +921,38 @@ static void Html_tag_open_ol (DilloHtml
{
DwPage *page;
DwPageAttr attr;
+ char tmp[80];
Html_par_push_tag (html, tag, tagsize);
page = (DwPage *)html->dw;
attr = page->attrs[html->stack[html->stack_top].attr];
- attr.left_indent_first = attr.left_indent_rest + 40;
- attr.left_indent_rest += 40;
+ attr.left_indent_first = attr.left_indent_rest + 17;
+ attr.left_indent_rest += 17;
html->stack[html->stack_top].attr = a_Dw_page_add_attr (page, &attr);
- html->stack[html->stack_top].list_level = 4; /* NUMBERED */
-
- number = 0;
+ if (Html_get_attr(tag, tagsize, "type", tmp, sizeof(tmp)))
+ {
+ if(strcmp(tmp,"1")==0)
+ html->stack[html->stack_top].list_level = DW_BULLET_1;
+ if(strcmp(tmp,"a")==0)
+ html->stack[html->stack_top].list_level = DW_BULLET_a;
+ if(strcmp(tmp,"A")==0)
+ html->stack[html->stack_top].list_level = DW_BULLET_A;
+ if(strcmp(tmp,"i")==0)
+ html->stack[html->stack_top].list_level = DW_BULLET_i;
+ if(strcmp(tmp,"I")==0)
+ html->stack[html->stack_top].list_level = DW_BULLET_I;
+ }
+ else
+ html->stack[html->stack_top].list_level = DW_BULLET_1;
+ if (Html_get_attr(tag, tagsize, "start", tmp, sizeof(tmp)))
+ {
+ html->stack[html->stack_top].list_number = atoi(tmp);
+ }
+ else
+ html->stack[html->stack_top].list_number = 1;
}
/*
@@ -921,53 +962,145 @@ static void Html_tag_open_li (DilloHtml
{
DwPage *page;
DwPageAttr attr;
+ DwPageFont font;
Dw *bullet;
gint indent;
char *str;
+ int i3,i2, i1, i0;
+ char tmp[80];
Html_cleanup_tag(html, "p>");
Html_cleanup_tag(html, "li>");
+/* -EG :: we don't need to push tag, as closing is optionnal and we cleanup
+ * This is to fix the numbering bug.
Html_push_tag(html, tag, tagsize);
-
+*/
page = (DwPage *) html->dw;
a_Dw_page_parbreak(page, 1);
attr = page->attrs[html->stack[html->stack_top].attr];
indent = attr.left_indent_rest;
- if (indent < 40)
- indent = 40;
+ if (indent < 0)
+ indent = 0;
attr.left_indent_first = indent - 12;
attr.left_indent_rest = indent;
- html->stack[html->stack_top].attr = a_Dw_page_add_attr(page, &attr);
+ if (Html_get_attr(tag, tagsize, "value", tmp, sizeof(tmp)))
+ {
+ html->stack[html->stack_top].list_number = atoi(tmp);
+ }
+
+ if(html->stack[html->stack_top].list_number){
+ /* ORDERED LIST */
+ switch(html->stack[html->stack_top].list_level){
+ case DW_BULLET_a:
+ str = g_new(char, 6);
+ i0 = html->stack[html->stack_top].list_number-1;
+ i1 = i0/26;
+ i2 = i1/26;
+ i0 %= 26;
+ i1 %= 26;
+ if(i2>26) /* more than 26*26*26=17576 elements ? */
+ sprintf(str, "****. ");
+ else if(i2)
+ sprintf(str, " %c%c%c.", 'a'+i2-1,'a'+i1-1,'a'+i0 );
+ else if(i1)
+ sprintf(str, " %c%c.", 'a'+i1-1,'a'+i0 );
+ else
+ sprintf(str, " %c.", 'a'+i0 );
+ break;
+ case DW_BULLET_A:
+ str = g_new(char, 6);
+ i0 = html->stack[html->stack_top].list_number - 1;
+ i1 = i0/26;
+ i2 = i1/26;
+ i0 %= 26;
+ i1 %= 26;
+ if(i2>26) /* more than 26*26*26=17576 elements ? */
+ sprintf(str, "****.");
+ else if(i2)
+ sprintf(str, " %c%c%c.", 'A'+i2-1,'A'+i1-1,'A'+i0 );
+ else if(i1)
+ sprintf(str, " %c%c.", 'A'+i1-1,'A'+i0 );
+ else
+ sprintf(str, " %c.", 'A'+i0 );
+ break;
+ case DW_BULLET_i:
+ str = g_new(char, 20);
+ i0 = html->stack[html->stack_top].list_number - 1;
+ i1 = i0/10;
+ i2 = i1/10;
+ i3 = i2/10;
+ i0 %= 10;
+ i1 %= 10;
+ i2 %= 10;
+ if(i3>4) /* more than 4999 elements ? */
+ sprintf(tmp, "****.");
+ else if(i3)
+ sprintf(tmp, "%s%s%s%s", roman_i3[i3-1],roman_i2[i2-1],
+ roman_i1[i1-1],roman_i0[i0] );
+ else if(i2)
+ sprintf(tmp, "%s%s%s", roman_i2[i2-1],
+ roman_i1[i1-1],roman_i0[i0] );
+ else if(i1)
+ sprintf(tmp, "%s%s", roman_i1[i1-1],roman_i0[i0] );
+ else
+ sprintf(tmp, "%s", roman_i0[i0] );
+ sprintf(str, "%6s.", tmp);
+ break;
+ case DW_BULLET_I:
+ str = g_new(char, 20);
+ i0 = html->stack[html->stack_top].list_number - 1;
+ i1 = i0/10;
+ i2 = i1/10;
+ i3 = i2/10;
+ i0 %= 10;
+ i1 %= 10;
+ i2 %= 10;
+ if(i3>4) /* more than 4999 elements ? */
+ sprintf(str, "****.");
+ else if(i3)
+ sprintf(tmp, "%s%s%s%s", roman_I3[i3-1],roman_I2[i2-1],
+ roman_I1[i1-1],roman_I0[i0] );
+ else if(i2)
+ sprintf(tmp, "%s%s%s", roman_I2[i2-1],
+ roman_I1[i1-1],roman_I0[i0] );
+ else if(i1)
+ sprintf(tmp, "%s%s", roman_I1[i1-1],roman_I0[i0] );
+ else
+ sprintf(tmp, "%s", roman_I0[i0] );
+ sprintf(str, "%6s.", tmp);
+ break;
+ case DW_BULLET_1:
+ default:
+ str = g_new(char, 5);
+ sprintf(str, "%4d.", html->stack[html->stack_top].list_number);
+ break;
+ }
+ (html->stack[html->stack_top].list_number)++;
- switch (html->stack[html->stack_top].list_level) {
- case 1:
- bullet = a_Dw_bullet_new(DW_BULLET_DISC);
+ font = page->fonts[attr.font];
+ font.name = "courier";
+ attr.font = a_Dw_page_find_font(page, &font);
+
+ html->stack[html->stack_top].attr = a_Dw_page_add_attr(page, &attr);
+ a_Dw_page_add_text ((DwPage *) html->dw, str,
+ html->stack[html->stack_top].attr);
+ font = page->fonts[attr.font];
+ font.name = "helvetica";
+ attr.font = a_Dw_page_find_font(page, &font);
+
+ html->stack[html->stack_top].attr = a_Dw_page_add_attr(page, &attr);
+ }
+ else
+ {
+ /* UNORDERED LIST */
+ html->stack[html->stack_top].attr = a_Dw_page_add_attr(page, &attr);
+ bullet = a_Dw_bullet_new(html->stack[html->stack_top].list_level);
a_Dw_page_add_widget(page, bullet,
html->stack[html->stack_top].attr);
a_Dw_page_add_space(page, html->stack[html->stack_top].attr);
- break;
- case 2:
- bullet = a_Dw_bullet_new(DW_BULLET_CIRCLE);
- a_Dw_page_add_widget(page, bullet, html->stack[html->stack_top].attr);
- a_Dw_page_add_space(page, html->stack[html->stack_top].attr);
- break;
- case 3:
- bullet = a_Dw_bullet_new(DW_BULLET_SQUARE);
- a_Dw_page_add_widget(page, bullet, html->stack[html->stack_top].attr);
- a_Dw_page_add_space(page, html->stack[html->stack_top].attr);
- break;
- case 4:
- str = g_new(char, 5);
- sprintf(str, "%d. ", ++number);
- a_Dw_page_add_text ((DwPage *) html->dw, str,
- html->stack[html->stack_top].attr);
- break;
- default:
- /* Never Reached */
- break;
}
}
diff -pur dillo-0.2.4/src/html.h dillo-0.2.4.lists/src/html.h
--- dillo-0.2.4/src/html.h Fri Aug 18 06:40:35 2000
+++ dillo-0.2.4.lists/src/html.h Sat Aug 26 17:20:56 2000
@@ -51,6 +51,7 @@ struct _DilloHtmlState {
gint attr;
DilloHtmlParseMode parse_mode;
gint list_level;
+ gint list_number;
};
typedef enum {