--- paging.module.orig	2006-04-01 20:05:03.000000000 -0500
+++ paging.module	2006-09-03 14:39:27.531250000 -0400
@@ -3,33 +3,71 @@
 // Original module written by Marco Scutari.
 // Rewritten and considerably shortened and made more Drupal-friendly
 // by Earl Miles.
+// Drupal Filter-enabled and CCK supported by Doug Green
 
 function paging_help($section) {
   switch ($section) {
     case 'admin/help#paging':
+      $sep = variable_get('paging_sep', '<!--pagebreak-->');
+      $sep = str_replace(array('<', '>'), array('&lt;', '&gt;'), $sep);
       return t("<p>Break long pages into smaller ones by means of " .
                "a \"page\" tag:</p>\n" .
                "<pre>\n" .
                "first page here.\n" .
-               "&lt;!--pagebreak--&gt;\n" .
+               "%sep\n" .
                "second page here.\n" .
-               "&lt;!--pagebreak--&gt;\n" .
-               "more pages here.\n");
+               "%sep\n" .
+               "more pages here.\n", array('%sep' => $sep));
     case 'admin/modules#description':
       return t("Allow users to use a tag to break a node up into multiple pages.");
   }
 }
 
+/*
+ * Implementation of hook_settings()
+ */
+function paging_settings() {
+  $form = array();
+
+  $form['paging_sep'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Seperator'),
+    '#size' => 20,
+    '#maxlength' => 255,
+    '#default_value' => variable_get('paging_sep', '<!--pagebreak-->'),
+    '#description' => t('Paging seperator string.  You should use an HTML tag that will render reasonably when paging is not enabled such as &lt;!--pagebreak--&gt; or &lt;HR /&gt;'),
+  );
+
+  return $form;
+}
+
 function paging_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
-  switch ($op) {
+  if (isset($node->field_body[0]['view'])) { // support for CCK
+    _paging_nodeapi($node,
+                    $node->field_body[0]['view'],
+                    $node->field_teaser[0]['view'],
+                    $op, $teaser, $page);
+  } elseif (isset($node->field_body[0]['value'])) { // support for CCK
+    _paging_nodeapi($node,
+                    $node->field_body[0]['value'],
+                    $node->field_teaser[0]['value'],
+                    $op, $teaser, $page);
+  } else {
+    _paging_nodeapi($node, $node->body, $nody->body,
+                   $node->teaser, $node->teaser, $op, $teaser, $page);
+  }
+}
 
+function _paging_nodeapi(&$node, &$nodebody, &$nodeteaser, $op, $teaser, $page) {
+  switch ($op) {
     case 'load':
-      // Set up our pages on load.
-      $node->pages = explode("<!--pagebreak-->", $node->body);
+      $sep = variable_get('paging_sep', '<!--pagebreak-->');
+      $node->pages = explode($sep, $nodebody);
       $node->pages_count = count($node->pages);
       break;
+
     case 'view':
-      if (!$node->in_preview) {
+      if (!$node->in_preview && ereg('<!--paging_filter-->', $teaser ? $nodeteaser : $nodebody)) {
         $element = 1; // to try and avoid breaking with comments
         // check paging is really needed and avoid paging
         // printer friendly pages as well.
@@ -39,14 +77,73 @@ function paging_nodeapi(&$node, $op, $te
           $pager_page_array = explode(',', $page);
           $pager_total[$element] = $node->pages_count;
           $page = isset($pager_page_array[$element]) ? $pager_page_array[$element] : 0;
-          $node->body = check_markup($node->pages[$page], $node->format, false);
-          $node->body .= theme('pager', NULL, 1, $element);
+          $nodebody = check_markup($node->pages[$page], $node->format, false);
+          $nodebody .= theme('pager', NULL, 1, $element);
         }
-        elseif ($teaser && $node->pages_count > 1 && strlen($node->teaser) > strlen($node->pages[0])) {
+        elseif ($teaser && $node->pages_count > 1 && strlen($nodeteaser) > strlen($node->pages[0])) {
           // check to see if the teaser is longer than our first page.
-          $node->teaser = check_markup($node->pages[0], $node->format, false);
-          $node->readmore = true;
+          $nodeteaser = check_markup($node->pages[0], $node->format, false);
+          $node->pagemore = true;
+          $node->paging_filter = true;
         }
       }
+      break;
+  }
+}
+
+/**
+ * Implementation of hook_link().
+ */
+function paging_link($type, $node = 0, $main = 0) {
+  $links = array();
+
+  if ($type == 'node') {
+    if (array_key_exists('links', $node)) {
+      $links = $node->links;
+    }
+
+    if ($main == 1 && $node->teaser && !$node->readmore && $node->pagemore) {
+      $links[] = l(t('read more'), "node/$node->nid", array('title' => t('Read the rest of this posting.'), 'class' => 'read-more'), 'page=0,1');
+    }
   }
+
+  return $links;
 }
+
+/**
+ * Implementation of hook_filter().
+ */
+function paging_filter($in_op, $in_delta = 0, $in_format = -1, $in_text = '') {
+  switch ($in_op) {
+    case 'list':
+      return array(t("Paging"));
+
+    case 'description':
+      $sep = variable_get('paging_sep', '<!--pagebreak-->');
+      $sep = str_replace(array('<', '>'), array('&lt;', '&gt;'), $sep);
+      return t('Allows content to be broken up into pages, using the %sep tag, configurable ' . l('here', 'admin/settings/paging') . '.', array('%sep' => $sep));
+
+    // the filter gets called before the nodeapi 'view' so,
+    // add a comment to the body to inform the nodapi to apply the filter
+    case 'process':
+      return '<!--paging_filter-->' . $in_text;
+
+    default:
+      return $in_text;
+  }
+} // function paging_filter
+
+/**
+ * Implementation of hook_filter_tips().
+ */
+function paging_filter_tips($in_delta, $in_format, $in_is_long = FALSE) {
+  if ($in_is_long) {
+    return t('<h1>Paging Help</h1>') .  paging_help('admin/help#paging');
+  }
+  else {
+    $sep = variable_get('paging_sep', '<!--pagebreak-->');
+    $sep = str_replace(array('<', '>'), array('&lt;', '&gt;'), $sep);
+    return t('Use %sep to create page breaks.', array('%sep' => $sep));
+  }
+} // function paging_filter_tips
+?>
