On Tue, Nov 12, 2002 at 07:31:00PM -0500, Karl Berry wrote:
>      - Simply do not try to break the index terms.
> 
> I think this would be best, because there's no guarantee that a comma in
> the index entry means a secondary index entry.  We need to add real
> multi-level indexing support to Texinfo, not kludge it up with text
> analysis.

That's perfectly reasonable.

> Is this easy to change?  If not, I'd like to go ahead and make the
> release even with this bug -- at least there's been a lot of
> improvement, even if it's not perfect :).

See attached. It's an easy change, but relatively big as alot of stuff
isn't needed anymore, so it should be reviewed carefully. Tomorrow
morning I'll run all texinfos to check for regressions.

Jos� Fonseca
Index: xml.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/makeinfo/xml.c,v
retrieving revision 1.14
diff -u -r1.14 xml.c
--- xml.c       12 Nov 2002 18:34:07 -0000      1.14
+++ xml.c       13 Nov 2002 02:41:25 -0000
@@ -384,7 +384,6 @@
 static int in_table_title = 0;
 
 static int in_indexentry = 0;
-static int in_secondary = 0;
 static int in_indexterm = 0;
 
 static int xml_current_element ();
@@ -1224,8 +1223,6 @@
 /*
  *     INDEX
  */
-/* Used to separate primary and secondary entries in an index */
-#define INDEX_SEP ", "
 
 xml_insert_indexterm (indexterm, index)
     char *indexterm;
@@ -1241,29 +1238,11 @@
     }
   else
     {
-      char *primary = NULL, *secondary;
-      if (strstr (indexterm+1, INDEX_SEP))
-        {
-          primary = xmalloc (strlen (indexterm) + 1);
-          strcpy (primary, indexterm);
-          secondary = strstr (primary+1, INDEX_SEP);
-          *secondary = '\0';
-          secondary += strlen (INDEX_SEP);
-        }
       xml_insert_element_with_attribute (INDEXTERM, START, "role=\"%s\"", index);
       in_indexterm = 1;
       xml_insert_element (PRIMARY, START);
-      if (primary)
-        execute_string (primary);
-      else
-        execute_string (indexterm);
+      execute_string ("%s", indexterm);
       xml_insert_element (PRIMARY, END);
-      if (primary)
-        {
-          xml_insert_element (SECONDARY, START);
-          execute_string (secondary);
-          xml_insert_element (SECONDARY, END);
-        }
       xml_insert_element (INDEXTERM, END);
       in_indexterm = 0;
     }
@@ -1275,18 +1254,6 @@
 static char index_primary[2000]; /** xx no fixed limit */
 static int indexdivempty = 0;
 
-static void
-xml_close_indexentry ()
-{
-  if (!in_indexentry)
-    return;
-  if (in_secondary)
-    xml_insert_element (SECONDARYIE, END);
-  xml_insert_element (INDEXENTRY, END);
-  in_secondary = 0;
-  in_indexentry = 0;
-}
-
 void
 xml_begin_index ()
 {
@@ -1341,7 +1308,6 @@
 void
 xml_end_index ()
 {
-  xml_close_indexentry ();
   if (xml_index_divisions)
     xml_insert_element (INDEXDIV, END);
   xml_insert_element (PRINTINDEX, END);
@@ -1360,7 +1326,6 @@
   if (tolower (c) != last_division_letter && isalpha (c))
     {
       last_division_letter = tolower (c);
-      xml_close_indexentry ();
       if (!indexdivempty)
         {
           xml_insert_element (INDEXDIV, END);
@@ -1382,56 +1347,16 @@
     xml_index_divide (entry);
 
   indexdivempty = 0;
-  if (strstr (entry+1, INDEX_SEP))
-    {
-      primary = xmalloc (strlen (entry) + 1);
-      strcpy (primary, entry);
-      secondary = strstr (primary+1, INDEX_SEP);
-      *secondary = '\0';
-      secondary += strlen (INDEX_SEP);
-
-      if (in_secondary && strcmp (primary, index_primary) == 0)
-        {
-          xml_insert_element (SECONDARYIE, END);
-          xml_insert_element (SECONDARYIE, START);
-          execute_string (secondary);
-        }
-      else
-        {
-          xml_close_indexentry ();
-          xml_insert_element (INDEXENTRY, START);
-          in_indexentry = 1;
-          xml_insert_element (PRIMARYIE, START);
-          execute_string (primary);
-          xml_insert_element (PRIMARYIE, END);
-          xml_insert_element (SECONDARYIE, START);
-          execute_string (secondary);
-          in_secondary = 1;
-        }
-    }
-  else
-    {
-      xml_close_indexentry ();
-      xml_insert_element (INDEXENTRY, START);
-      in_indexentry = 1;
-      xml_insert_element (PRIMARYIE, START);
-      execute_string (entry);
-    }
+  xml_insert_element (INDEXENTRY, START);
+  in_indexentry = 1;
+  xml_insert_element (PRIMARYIE, START);
+  execute_string ("%s", entry);
   add_word_args (", %s", _("see "));
   xml_insert_element_with_attribute (XREF, START, "linkend=\"%s\"", xml_id (node));
   xml_pop_current_element ();
-
-  if (primary)
-    {
-      strcpy (index_primary, primary);
-      /*      xml_insert_element (SECONDARYIE, END);*/
-      /*     *(secondary-1) = ',';*/ /* necessary ? */
-      free (primary);
-    }
-  else
-    xml_insert_element (PRIMARYIE, END);
-
-  /*  xml_insert_element (INDEXENTRY, END); */
+  xml_insert_element (PRIMARYIE, END);
+  xml_insert_element (INDEXENTRY, END);
+  in_indexentry = 1;
 }
 
 /*

Reply via email to