Index: modules/filter.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter.module,v
retrieving revision 1.4
diff -u -r1.4 filter.module
--- modules/filter.module	27 Jan 2004 22:10:47 -0000	1.4
+++ modules/filter.module	31 Jan 2004 03:01:34 -0000
@@ -8,6 +8,7 @@
     case 'admin/system/filters':
       return t("Filters fit between the raw text in a node and the HTML output. They allow you to replace text selectively. Uses include automatic conversion of emoticons into graphics and filtering HTML content from users' submissions.");
     case 'filter#tip':
+    case 'filter#short-tip':
       switch (variable_get("filter_html", 1)) {
         case 0:
           return t("All HTML tags allowed");
@@ -180,10 +181,10 @@
 }
 
 function filter_tips_page() {
-  $tips = module_invoke_all("help", "filter#tip");
-  foreach ($tips as $tip) {
-    if ($tip) {
-      $tiplist .= "<li>$tip</li>\n";
+  $tiplist = '';
+  foreach (module_list() as $name) {
+    if ($tip = module_invoke($name, "help", "filter#tip")) {
+      $tiplist .= "<li id=\"filter-$name\">$tip</li>\n";
     }
   }
   $output = "<ul class=\"compose-tips\">\n$tiplist\n</ul>\n";
@@ -191,7 +192,15 @@
 }
 
 function filter_tips_short() {
-  return filter_help("filter#tip") . "<br />" . l(t("More information on formatting options."), "filter/tips", array("target" => "_blank"));
+  $tiplist = array();
+  foreach (module_list() as $name) {
+    if ($tip = module_invoke($name, "help", "filter#short-tip")) {
+      $tiplist[$name] = $tip;
+    }
+  }
+  $tiplist[] = '<br />'. l(t("More information on formatting options"), "filter/tips");
+  $output = implode('<br />', $tiplist);
+  return $output;
 }
 
 ?>
Index: modules/title.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/title.module,v
retrieving revision 1.24
diff -u -r1.24 title.module
--- modules/title.module	26 Jan 2004 18:59:42 -0000	1.24
+++ modules/title.module	31 Jan 2004 03:01:35 -0000
@@ -2,15 +2,16 @@
 // $Id: title.module,v 1.24 2004/01/26 18:59:42 dries Exp $
 
 function title_help($section) {
-  $output = "";
+  $output = '';
 
   switch ($section) {
     case 'admin/system/modules#description':
-      $output = t("Enables users to link to stories, articles or similar content by title.");
-      break;
+      return t('Enables users to link to stories, articles or similar content by title.');
+    case 'filter#tip':
+      return t("Wiki-like <em>[node title|text]</em> links are enabled. These shortcuts generate a link labeled 'text' to the node with the title 'node title'. If you omit '|text', the label becomes 'node title'. You may use a substring of a node title if desired. When multiple matching titles are found, a list of matching nodes will be displayed. If no matching titles are found, a full-text search is returned.");
+    case 'filter#short-tip':
+      return t('<a href="%title_links">Title links</a> <em>[node title|text]</em> enabled', array('%title_links' => url('filter/tips#filter-title')));
   }
-
-  return $output;
 }
 
 function title_link($type) {
@@ -64,20 +65,28 @@
   }
 }
 
-// filter [node title|description] links. '|description' is optional.
+/**
+ * Filter [node title|description] links. '|description' is optional.
+ * 
+ * @param $text
+ *   Text to be filtered
+ * @return
+ *   Filtered text
+ */
 function title_filter($text) {
-  $pattern = '\[([^\|\]]+)(?>\|?)(.*?)\]';  // $1 == title: matches at least 1 char up to the first '|' or ']'
-                                           // $2 == text: matches all after a following '|' (if there is) up to the next ']'. may include '|'s.
+  /*
+  ** $1 == title: matches at least 1 char up to the first '|' or ']'
+  ** $2 == text: matches all after a following '|' (if there is) up to the next ']'. may include '|'s.
+  ** there must be no '<' in $1 or $2!
+  */
+  $pattern = '\[([^\|\]<]+)(?>\|?)([^<]*?)\]';
+                                           
   $replacement = 'l("$2" ? "$2" : "$1", "title/". urlencode("$1"))';
   return preg_replace("/$pattern/e", $replacement, $text);
 }
 
 function title_conf_filters() {
-  return form_group(t("Title filter"), t("Wiki-like [node title|text] links are enabled. These shortcuts generate a link labeled 'text' to the node with the title 'node title'. If you omit '|text', the label becomes 'node title'. You may use a substring of a node title if desired. When multiple matching titles are found, a list of matching nodes will be displayed. If no matching titles are found, a full-text search is returned."));
-}
-
-function title_compose_tips() {
-  return array(t("You may quickly link to another node using this syntax: <em>[node title|text]</em>. This will generate a link labeled 'text' to the node with the title 'node title'. If you omit '|text', the label becomes 'node title'."));
+  return form_group(t("Title filter"), title_help('filter#tip'));
 }
 
 ?>
