File rarian-0.5.6-docs-from-desktop-entries-and-bundles.patch of Package rarian

Index: rarian-0.5.8/librarian/rarian-main.c
===================================================================
--- rarian-0.5.8.orig/librarian/rarian-main.c
+++ rarian-0.5.8/librarian/rarian-main.c
@@ -227,14 +227,24 @@ past:
 	      int_path = rrn_strndup (cur_path, (first_colon-cur_path));
 	    else
 	      int_path = strdup (cur_path);
-		check_path = malloc (sizeof(char)*(strlen(int_path)+6));
-		sprintf (check_path, "%s/help", int_path);
+        check_path = malloc (sizeof (char) * (strlen (int_path) + 14)); 
+        snprintf (check_path, sizeof (char) * (strlen (int_path) + 14), 
+                  "%s/help", int_path);  
 #if ENABLE_OMF_READ
 		process_omf_dir (int_path);
 #endif
 		process_locale_dirs (check_path);
 
 		scan_directory (check_path);
+        
+        snprintf (check_path, sizeof (char) * (strlen (int_path) + 14), 
+                  "%s/applications", int_path);                         
+        scan_directory (check_path);                                    
+        
+        snprintf (check_path, sizeof (char) * (strlen (int_path) + 14), 
+                  "%s/help-bundle", int_path);                          
+        scan_directory (check_path); 
+
 		if (int_path && *int_path) {
 			free (int_path);
 		}
@@ -294,7 +304,8 @@ scan_directory (char *dir)
 	  char *suffix = NULL;
 	  
 	  suffix = strrchr (full_name, '.');
-	  if (!strcmp (suffix, ".document")) {
+      if (!strcmp (suffix, ".document") ||
+          !strcmp (suffix, ".desktop")) {   
 	    process_file (full_name);
 	  } else if (!strcmp (suffix, ".section")) {
 	    process_section (full_name);
Index: rarian-0.5.8/librarian/rarian-reg-full.c
===================================================================
--- rarian-0.5.8.orig/librarian/rarian-reg-full.c
+++ rarian-0.5.8/librarian/rarian-reg-full.c
@@ -102,7 +102,8 @@ rrn_reg_parse_file_full (char *filename)
 		if (!real || real[0] == '\n' || real[0] == '#') {
 			/* Black Line or comment.  Ignore. */
 		} else if (real[0] == '[') {
-			if (!strncmp (real, "[Document]", 10)) {
+			if (!strncmp (real, "[Document]", 10) ||
+			    !strncmp (real, "[Desktop Entry]", 15)) {
 				mode = 0;
 
 				if (sect) {
@@ -152,7 +153,7 @@ rrn_reg_parse_file_full (char *filename)
 		}
 	}
 
-    if (!reg->name || !reg->uri || !reg->type || !reg->categories ) {
+    if (!reg->name || !reg->uri || !reg->categories ) {
         rrn_reg_free_full (reg);
         reg = NULL;
     }
@@ -272,6 +273,9 @@ process_categories_full (char *cat_strin
 	int i;
 	do {
 		semi = strchr (current_break, ';');
+		if (!semi)
+			semi = strchr (current_break, '|');
+
 		if (result) {
 			tmp = malloc (sizeof (char *)*ncats);
 			for (i=0; i< ncats; i++) {
@@ -637,9 +641,20 @@ process_path_full (RrnRegFull *reg)
 	     */
 	    return;
 	  }
-	  /* Otherwise, promote to file: URI scheme, reusing the prefix vble */
-	  prefix = malloc (sizeof (char) * (strlen(entry->text)+6));
-	  sprintf (prefix, "file:%s", entry->text);
+
+	  if (entry->text [0] == '/') {
+		  /* If it's an absolute path, promote to file: URI scheme,
+		   * reusing the prefix vble */
+		  prefix = malloc (sizeof (char) * (strlen(entry->text) + 8));
+		  snprintf (prefix, sizeof (char) * (strlen (entry->text) + 8),
+			    "file://%s", entry->text);
+	  } else {
+		  /* Else, use the help: URI scheme */
+		  prefix = malloc (sizeof (char) * (strlen (entry->text) + 7));
+		  snprintf (prefix, sizeof (char) * (strlen (entry->text) + 7),
+			    "help:%s", entry->text);
+	  }
+
 	  free (entry->text);
 	  entry->text = prefix;
 	  entry = entry->next;
Index: rarian-0.5.8/librarian/rarian-reg-utils.c
===================================================================
--- rarian-0.5.8.orig/librarian/rarian-reg-utils.c
+++ rarian-0.5.8/librarian/rarian-reg-utils.c
@@ -121,7 +121,8 @@ rrn_reg_parse_file (char *filename)
 		if (!real || real[0] == '\n' || real[0] == '#') {
 			/* Black Line or comment.  Ignore. */
 		} else if (real[0] == '[') {
-			if (!strncmp (real, "[Document]", 10)) {
+			if (!strncmp (real, "[Document]", 10) ||
+			    !strncmp (real, "[Desktop Entry]", 15)) {
 				mode = 0;
 
 				if (sect) {
@@ -173,7 +174,7 @@ rrn_reg_parse_file (char *filename)
 		}
 	}
 
-    if (!reg->name || !reg->uri || !reg->type || !reg->categories ) {
+    if (!reg->name || !reg->uri || !reg->categories ) {
         rrn_reg_free (reg);
         reg = NULL;
     }
@@ -318,6 +319,9 @@ process_categories (char *cat_string)
 	int i;
 	do {
 		semi = strchr (current_break, ';');
+		if (!semi)
+			semi = strchr (current_break, '|');
+
 		if (result) {
 			tmp = malloc (sizeof (char *)*ncats);
 			for (i=0; i< ncats; i++) {
@@ -743,10 +747,22 @@ process_path (RrnReg *reg)
 		 */
 			return;
 	}
-	/* Otherwise, promote to file: URI scheme, reusing the prefix vble */
-	prefix = malloc (sizeof (char) * (strlen(reg->uri)+8));
-	sprintf (prefix, "file://%s", reg->uri);
+
+	if (reg->uri [0] == '/') {
+		/* If it's an absolute path, promote to file: URI scheme,
+		 * reusing the prefix vble */
+		prefix = malloc (sizeof (char) * (strlen (reg->uri) + 8));
+		snprintf (prefix, sizeof (char) * (strlen (reg->uri) + 8),
+			  "file://%s", reg->uri);
+	} else {
+		/* Else, use the help: URI scheme */
+		prefix = malloc (sizeof (char) * (strlen (reg->uri) + 7));
+		snprintf (prefix, sizeof (char) * (strlen (reg->uri) + 7),
+			  "help:%s", reg->uri);
+	}
+
 	free (reg->uri);
+
 	reg->uri = prefix;
 	while (child) {
 		process_section_path (reg->uri, child);
openSUSE Build Service is sponsored by