*** makeinfo.c.dist Thu Sep 26 21:45:04 1991 --- makeinfo.c Thu Oct 24 21:04:19 1991 *************** *** 73,78 **** --- 73,79 ---- /* Forward declarations. */ unsigned char *xmalloc (), *xrealloc (); extern int in_fixed_width_font; + extern int the_current_enumerate_type; /* Some systems don't declare this function in pwd.h. */ struct passwd *getpwnam (); *************** *** 925,931 **** extern int executing_string; FSTACK *temp = filestack; ! if (!filestack) abort (); /* My fault. I wonder what I did? */ /* Make sure that commands with braces have been satisfied. */ --- 926,932 ---- extern int executing_string; FSTACK *temp = filestack; ! if (!filestack && !executing_string) abort (); /* My fault. I wonder what I did? */ /* Make sure that commands with braces have been satisfied. */ *************** *** 941,947 **** /* Pop the stack. */ filestack = filestack->next; ! free (temp); pop_node_filename (); } --- 942,949 ---- /* Pop the stack. */ filestack = filestack->next; ! if (temp) ! free (temp); pop_node_filename (); } *************** *** 2586,2593 **** case enumerate: inhibit_paragraph_indentation = 0; current_indent += default_indentation_increment; - start_numbering (1); filling_enabled = indented_fill = true; break; case alphaenumerate: --- 2588,2610 ---- case enumerate: inhibit_paragraph_indentation = 0; current_indent += default_indentation_increment; filling_enabled = indented_fill = true; + + if (*(insertion_stack->item_function)) + { + if (isalpha (*(insertion_stack->item_function))) + { + start_lettering (*(insertion_stack->item_function)); + } + else + { + int n = atoi (insertion_stack->item_function); + + start_numbering (n); + } + } + else + start_numbering (1); break; case alphaenumerate: *************** *** 2687,2693 **** break; case enumerate: ! stop_numbering (); current_indent -= default_indentation_increment; break; --- 2704,2714 ---- break; case enumerate: ! if (isalpha (the_current_enumerate_type)) ! stop_lettering (); ! else ! stop_numbering (); ! current_indent -= default_indentation_increment; break; *************** *** 2770,2775 **** --- 2791,2800 ---- int letter_offset = 0; int the_current_letter = 0; + int enumerate_type_stack[max_ns]; + int enumerate_type_offset = 0; + int the_current_enumerate_type = '1'; + start_numbering (at_number) int at_number; { *************** *** 2778,2783 **** --- 2803,2815 ---- line_error ("Enumeration stack overflow"); return; } + if (enumerate_type_offset + 1 == max_ns) + { + line_error ("Enumeration stack overflow"); + return; + } + the_current_enumerate_type = + enumerate_type_stack[enumerate_type_offset++] = '1'; number_stack[number_offset++] = the_current_number; the_current_number = at_number; } *************** *** 2787,2792 **** --- 2819,2831 ---- the_current_number = number_stack[--number_offset]; if (number_offset < 0) number_offset = 0; + --enumerate_type_offset; + the_current_enumerate_type = enumerate_type_stack[enumerate_type_offset-1]; + if (enumerate_type_offset < 0) + { + enumerate_type_offset = 0; + the_current_enumerate_type = '1'; + } } start_lettering (at_letter) *************** *** 2797,2802 **** --- 2836,2848 ---- line_error ("Alpha-enumeration stack overflow"); return; } + if (enumerate_type_offset + 1 == max_ns) + { + line_error ("Enumeration stack overflow"); + return; + } + the_current_enumerate_type = + enumerate_type_stack[enumerate_type_offset++] = 'a'; letter_stack[letter_offset++] = the_current_letter; the_current_letter = at_letter; } *************** *** 2806,2811 **** --- 2852,2864 ---- the_current_letter = letter_stack[--letter_offset]; if (letter_offset < 0) letter_offset = 0; + --enumerate_type_offset; + the_current_enumerate_type = enumerate_type_stack[enumerate_type_offset-1]; + if (enumerate_type_offset < 0) + { + enumerate_type_offset = 0; + the_current_enumerate_type = '1'; + } } /* Place a letter into the output stream. */ *************** *** 4307,4319 **** temp++; else { ! if (input_text[temp] == '.' || ! input_text[temp] == ',' || input_text[temp] == '\t') return; else { ! line_error ("Cross-reference must be terminated with a period or a comma"); return; } } --- 4360,4372 ---- temp++; else { ! if (member (input_text[temp], ".,;:") || ! (px_ref_flag && input_text[temp] == ')' ) || input_text[temp] == '\t') return; else { ! line_error ("Cross-reference must be terminated with punctuation"); return; } } *************** *** 4729,4736 **** output_column++; } else if (current_insertion_type () == enumerate) ! number_item (); ! else letter_item (); /* Special hack. This makes close paragraph ignore you until --- 4782,4794 ---- output_column++; } else if (current_insertion_type () == enumerate) ! { ! if (isalpha (the_current_enumerate_type)) ! letter_item (); ! else ! number_item (); ! } ! else /* alphaenumerate or capsenumerate */ letter_item (); /* Special hack. This makes close paragraph ignore you until