Analyser/Analyse_List [ Functions ]
FUNCTION
Parse the item text to see if there are any lists. A list is either case I:
ITEMNAME o bla bla o bla bla
or case II:
some text: <-- begin of a list o bla bla <-- list item bla bla bla <-- continuation of list item. o bla bla <-- list item <-- end of a list bla bla <-- this can also be the end of a list.
SYNPOPSIS
INPUTS
- arg_item -- the item to be parsed.
- indent -- the indent of this item.
OUTPUT
- arg_item -- the itemlines will contain formatting information for all the lists that were found.
SOURCE
{ if ( arg_item->no_lines >= 1 ) { int i = 0; char *line = arg_item->lines[i]->line; /* Case I */ if ( ( arg_item->lines[i]->kind == ITEM_LINE_PLAIN ) && Is_ListItem_Start( line, indent ) ) { /* Case I, the is a list item right after the item name */ arg_item->lines[i]->format |= RBILA_BEGIN_LIST; arg_item->lines[i]->format |= RBILA_BEGIN_LIST_ITEM; Remove_List_Char( arg_item, i ); /* Now try to find the end of the list */ i = Analyse_ListBody( arg_item, 1, indent ); } /* Now search for case II cases */ for ( ; i < arg_item->no_lines; i++ ) { line = arg_item->lines[i]->line; if ( ( arg_item->lines[i]->kind == ITEM_LINE_PLAIN ) && Is_Start_List( line, indent ) ) { ++i; if ( i < arg_item->no_lines ) { line = arg_item->lines[i]->line; if ( ( arg_item->lines[i]->kind == ITEM_LINE_PLAIN ) && Is_ListItem_Start( line, indent ) ) { arg_item->lines[i]->format |= RBILA_BEGIN_LIST; arg_item->lines[i]->format |= RBILA_BEGIN_LIST_ITEM; Remove_List_Char( arg_item, i ); ++i; i = Analyse_ListBody( arg_item, i, indent ); /* One list might be immediately followed * by another. In this case we have to * analyse the last line again. */ line = arg_item->lines[i]->line; if ( ( arg_item->lines[i]->kind == ITEM_LINE_PLAIN ) && Is_Start_List( line, indent ) ) { --i; } } } } } } }