diff -Naur fancy_slide/fancy_slide.module fancy_slide/fancy_slide.module
--- fancy_slide/fancy_slide.module	2009-09-11 17:59:29.000000000 +0800
+++ fancy_slide/fancy_slide.module	2010-01-21 18:13:49.000000000 +0800
@@ -875,3 +884,38 @@
   fancy_slide_render(1);
   return theme('table', $header, $rows);
 }
+
+/*
+ * Implementation of hook_filter_tips
+ */
+function fancy_slide_filter_tips($delta, $format, $long = false) {
+  if ($long) {
+    return t('<h2 id="fancy_slide_filter">Fancy Slide Filter</h2><p>To embed a slide show in a node enter:<blockquote><code>[fancyslide id=X]</code></blockquote>where "X" is the id of the slide show.</p>');
+  }
+  else {
+    return t('Enter !fancy_slide_filter_help to place a slide show in a node', array("!fancy_slide_filter_help" => l('[fancyslide id=X]', "filter/tips/$format", array('query' => 'fancy_slide_filter'))));
+  }
+}
+
+/*
+ * Implementation of hook_filter
+ */
+function fancy_slide_filter($op, $delta = 0, $format = -1, $text = '') {
+  switch ($op) {
+    case 'list':
+      return array(0 => t('Fancy Slide filter'));
+    case 'description':
+      return t('Substitutes [fancyslide id=X] with code to embed slide show in node.');
+    case 'process':
+      //look for paragraph around the slideshow since editors like fckeditor will add it,
+      //but don't include them in the $match variable
+      if (preg_match_all('@(?:<p>)?\[fancyslide\s*id=(\d+)\](?:</p>)?@', $text, $match)) {
+        // $match[0][0] = complete match - [fancyslide id=X]
+        // $match[1][0] = matched id #
+        $themed_text = theme('fancy_slide', $match[1][0]);
+        return str_replace($match[0][0], $themed_text, $text);
+      }
+    default:
+	return $text;
+  }
+}
