diff -rup flexifilter_orig/flexifilter.components.inc modules/flexifilter/flexifilter.components.inc
--- flexifilter_orig/flexifilter.components.inc	2009-02-15 11:40:30.000000000 +0100
+++ modules/flexifilter/flexifilter.components.inc	2009-02-15 12:00:11.000000000 +0100
@@ -98,6 +98,13 @@ function flexifilter_flexifilter_compone
     'contains_components' => TRUE,
     'step' => 'either',
   );
+  $components['flexifilter_link_component'] = array(
+    'label' => t('Linkifier'),
+    'description' => t('Creates links (&lt;a href="link"&gt;title&lt;/a&gt;).'),
+    'callback' => 'flexifilter_component_linkifier',
+    'group' => t('Text: Intermediate'),
+    'step' => 'either',
+  );
 
   // Advanced.
   $components['flexifilter_advanced_php'] = array(
@@ -659,6 +666,157 @@ function flexifilter_component_advanced_
 }
 
 /**
+ * Flexifilter component callback.
+ * Creates links.
+ */
+function flexifilter_component_linkifier($op, $settings, $text) {
+  switch ($op) {
+    case 'settings':
+      return flexifilter_component_linkifer_form($settings);
+
+    case 'prepare':
+    case 'process':
+      return flexifilter_component_linkifier_link($settings, $text);
+  }
+}
+
+/**
+ * Helper function for flexifilter_component_linkifier().
+ * @param $settings
+ *   The flexifilter settings for the component.
+ * @return
+ *   The settings form for the linkifier component.
+ */
+function flexifilter_component_linkifer_form($settings) {
+  $form = array();
+  $form['ordering'] = array(
+    '#type' => 'radios',
+    '#title' => t('Ordering'),
+    '#description' => t('Should links come first, or their titles?'),
+    '#options' => array(
+      0 => t('Link first'),
+      1 => t('Title first'),
+    ),
+    '#default_value' => isset($settings['ordering']) ? $settings['ordering'] : 0,
+  );
+  $form['divider'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Divider'),
+    '#required' => TRUE,
+    '#default_value' => isset($settings['divider']) ? $settings['divider'] : '|',
+    '#description' => t('The divider between the link and the title.'),
+  );
+  $form['no_links'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Leave text with empty links as simple text'),
+    '#description' => t('(By default they link to the plain prefix).'),
+    '#default_value' => isset($settings['no_links']) ? $settings['no_links'] : FALSE,
+  );
+  $form['check_path'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Check internal paths for broken links, and add a class="broken" tag to them.'),
+    '#description' => t('WARNING: This may slow down process times considerably if you use this component a lot. However, it can also be freakishly cool. Note: this depends on the current theme\'s css to display the links differently.'),
+    '#default_value' => isset($settings['check_path']) ? $settings['check_path'] : FALSE,
+  );
+  if (module_exists('pathauto')) {
+    $form['pathauto_cleanup'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Clean URL using pathauto settings.'),
+      '#description' => t('Process the link using pathauto\'s rules (character replacement, transliteration and others).'),
+      '#default_value' => isset($settings['pathauto_cleanup']) ? $settings['pathauto_cleanup'] : FALSE,
+    );
+  }
+  $form['prefix'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Prefix'),
+    '#default_value' => '',
+    '#description' => t('Prepend a prefix to all links (e.g. "http://en.wikipedia.org/wiki/" or "node/". Do not include a leading slash for internal paths.'),
+  );
+
+  // Add the default values for the form.
+  foreach ($form as $key => $item) {
+    if (!isset($settings[$key])) {
+      $form[$key]['#value'] = $form[$key]['#default_value'];
+    }
+  }
+  return $form;
+}
+
+/**
+ * Helper function for flexifilter_component_linkifier().
+ * @param $settings
+ *   The flexifilter settings for the component.
+ * @param $text
+ *   The text to linkify!
+ * @return
+ *   The linkified text.
+ */
+function flexifilter_component_linkifier_link($settings, $text) {
+  extract($settings);
+  $parts = explode($divider, $text);
+  if (count($parts) == 1) {
+    $parts[] = $parts[0];
+  }
+  if (count($parts) > 2) {
+    foreach ($parts as $key => $part) {
+      if ($key > 1) {
+        $parts[1] .= $divider . $parts[$key];
+        unset($parts[$key]);
+      }
+    }
+  }
+  switch ($ordering) {
+    case 0:
+      $link = $parts[0];
+      $title = $parts[1];
+      break;
+
+    case 1:
+      $title = $parts[0];
+      $link = $parts[1];
+      break;
+  }
+  
+  if ( $pathauto_cleanup && module_exists('pathauto')) {
+    // use pathauto module to clean up the link
+	
+    // make the string URL-suitable using pathauto_cleanstring()
+    $link = pathauto_cleanstring($link);
+	
+    // also make it lower case if this is configured so for pathauto
+    if (variable_get('pathauto_case', 1)) {
+      $link = drupal_strtolower($link);
+    }
+  }
+
+  $link = $prefix . urlencode($link);
+
+  if ($no_links && empty($link)) {
+    return $title;
+  }
+
+  $options = array();
+  if (!menu_path_is_external($link)) {
+    $parsed_link = parse_url($link);
+    if (isset($parsed_link['query'])) {
+      $options['query'] = $parsed_link['query'];
+    }
+    if (isset($parsed_link['fragment'])) {
+      $options['fragment'] = $parsed_link['fragment'];
+    }
+    if ($link != $parsed_link['path']) {
+      $link = $parsed_link['path'];
+    }
+    if ($check_path) {
+      if (!menu_valid_path(array('link_path' => $link))) {
+        $options['attributes']['class'] = 'broken';
+      }
+    }
+  }
+  return l($title, $link, $options);
+}
+
+/**
  * Basic sequence callback.
  */
 function flexifilter_component_sequences($op, $settings, $text) {
diff -rup flexifilter_orig/flexifilter.flexifilters.inc modules/flexifilter/flexifilter.flexifilters.inc
--- flexifilter_orig/flexifilter.flexifilters.inc	2009-02-15 11:40:32.000000000 +0100
+++ modules/flexifilter/flexifilter.flexifilters.inc	2009-02-14 19:29:02.000000000 +0100
@@ -8,10 +8,10 @@ function flexifilter_flexifilters() {
   return array(
     array(
       'label' => 'Mediawiki Format',
-      'description' => 'This is an example format which provides a wikimedia-style input format.',
+      'description' => 'You may enter text using Mediawiki-style markup.',
       'id' => '1',
-      'enabled' => true,
-      'advanced' => true,
+      'enabled' => TRUE,
+      'advanced' => TRUE,
       'delta' => '0',
       'components' => array(
         array(
@@ -70,7 +70,7 @@ function flexifilter_flexifilters() {
               array(
                 'class' => 'flexifilter_text_alternation',
                 'settings' => array(
-                  'find' => '\'\'\'',
+                  'find' => "'''",
                   'replace' => "<strong>\n</strong>",
                   'step' => 'process',
                 ),
@@ -79,7 +79,7 @@ function flexifilter_flexifilters() {
               array(
                 'class' => 'flexifilter_text_alternation',
                 'settings' => array(
-                  'find' => '\'\'',
+                  'find' => "''",
                   'replace' => "<em>\n</em>",
                   'step' => 'process',
                 ),
@@ -96,137 +96,25 @@ function flexifilter_flexifilters() {
                   'step' => 'process',
                   'components' => array(
                     array(
-                      'class' => 'flexifilter_control_if',
+                      'class' => 'flexifilter_link_component',
                       'settings' => array(
-                        'components' => array(
-                          array(
-                            'class' => 'flexifilter_text_replace',
-                            'settings' => array(
-                              'find' => '~',
-                              'replace' => '\\~',
-                              'step' => 'process',
-                            ),
-                            'id' => '12',
-                          ),
-                          array(
-                            'class' => 'flexifilter_text_append',
-                            'settings' => array(
-                              'text' => '~~',
-                              'step' => 'process',
-                            ),
-                            'id' => '13',
-                          ),
-                          array(
-                            'class' => 'flexifilter_advanced_append',
-                            'settings' => array(
-                              'step' => 'process',
-                              'components' => array(
-                                array(
-                                  'class' => 'flexifilter_text_replace',
-                                  'settings' => array(
-                                    'find' => '~~',
-                                    'replace' => '</a>',
-                                    'step' => 'process',
-                                  ),
-                                  'id' => '23',
-                                ),
-                              ),
-                            ),
-                            'id' => '14',
-                          ),
-                          array(
-                            'class' => 'flexifilter_text_replace',
-                            'settings' => array(
-                              'find' => '~~',
-                              'replace' => '">',
-                              'step' => 'process',
-                            ),
-                            'id' => '26',
-                          ),
-                          array(
-                            'class' => 'flexifilter_text_prepend',
-                            'settings' => array(
-                              'text' => '<a href="http://en.wikipedia.org/wiki/',
-                              'step' => 'process',
-                            ),
-                            'id' => '24',
-                          ),
-                          array(
-                            'class' => 'flexifilter_text_replace',
-                            'settings' => array(
-                              'find' => '\\~',
-                              'replace' => '~',
-                              'step' => 'process',
-                            ),
-                            'id' => '28',
-                          ),
-                        ),
-                        'condition' => array(
-                          'class' => 'flexifilter_group_not',
-                          'settings' => array(
-                            'conditions' => array(
-                              array(
-                                'class' => 'flexifilter_text_search',
-                                'settings' => array(
-                                  'find' => '|',
-                                  'is_regex' => 0,
-                                ),
-                              ),
-                            ),
-                          ),
-                        ),
-                      ),
-                      'id' => '11',
-                    ),
-                    array(
-                      'class' => 'flexifilter_control_if',
-                      'settings' =>  array(
-                        'components' => array(
-                          array(
-                            'class' => 'flexifilter_text_prepend',
-                            'settings' => array(
-                              'text' => '<a href="http://en.wikipedia.org/wiki/',
-                              'step' => 'process',
-                            ),
-                            'id' => '33',
-                          ),
-                          array(
-                            'class' => 'flexifilter_text_replace',
-                            'settings' => array(
-                              'find' => '|',
-                              'replace' => '">',
-                              'step' => 'process',
-                            ),
-                            'id' => '34',
-                          ),
-                          array(
-                            'class' => 'flexifilter_text_append',
-                            'settings' => array(
-                              'text' => '</a>',
-                              'step' => 'process',
-                            ),
-                            'id' => '35',
-                          ),
-                        ),
-                        'condition' => array(
-                          'class' => 'flexifilter_text_search',
-                          'settings' => array(
-                            'find' => '|',
-                            'is_regex' => 0,
-                          ),
-                        ),
-                      ),
-                      'id' => '32',
+                        'ordering' => '0',
+                        'divider' => '|',
+                        'no_links' => 0,
+                        'check_path' => 0,
+                        'prefix' => 'http://en.wikipedia.org/wiki/',
+                        'step' => 'process',
+                       ),
                     ),
                   ),
                 ),
-                'id' => '10',
+                'id' => '202',
               ),
             ),
           ),
           'id' => '4',
         ),
-        'id_next' => 37,
+        'id_next' => 204,
         'id_prefix' => 'flexifilter_component_',
       ),
       'fid' => 'new',
Only in modules/flexifilter: flexifilter_link_01.patch
