You are here

function smart_page_break_insert_placeholder in Smart Paging 7

Break HTML content and insert placeholder

Helper function to properly break HTML content and insert placeholder.

Parameters

$text: HTML text content.

$placeholder: Placeholder string to be inserted between broken page.

Return value

HTML output of properly break HTML content and insert placeholder.

1 call to smart_page_break_insert_placeholder()
smart_paging_field_attach_view_alter in ./smart_paging.module
Implements hook_field_attach_view_alter().

File

./smart_paging.module, line 1633
Provides smart paging capability to Drupal contents.

Code

function smart_page_break_insert_placeholder($text, $placeholder = NULL) {
  if (empty($placeholder)) {
    $placeholder = variable_get('smart_paging_pagebreak', '<!--pagebreak-->');
  }

  // Perform HTML correction
  $text = _filter_htmlcorrector($text);
  $break_map = array();
  $text = str_replace($placeholder, '<smart_paging_placeholder>', $text) . '<smart_paging_placeholder>';
  $struct = smart_page_pair_tags($text);
  $split = $struct['split'];
  $tag_pairs_map = $struct['tag_pairs_map'];
  $break_positions = array_keys($tag_pairs_map['smart_paging_placeholder']);
  unset($tag_pairs_map['smart_paging_placeholder']);
  foreach ($break_positions as $break_index => $break_end) {
    if ($break_index) {
      $break_start = $break_positions[$break_index - 1];
      $break_map[$break_end] = array_slice($split, $break_start, $break_end - $break_start, TRUE);

      // Remove the placeholder from the structure
      unset($break_map[$break_end][$break_start]);
    }
    else {
      $break_start = $break_index;
      $break_map[$break_end] = array_slice($split, $break_start, $break_end - $break_start, TRUE);
    }
    foreach ($tag_pairs_map as $tag_name => $map) {
      foreach ($map as $open_tag_pos => $close_tag_pos) {
        if ($open_tag_pos < $break_end && $close_tag_pos > $break_end || $open_tag_pos < $break_start && $close_tag_pos > $break_start || $open_tag_pos > $break_start && $close_tag_pos < $break_end && $close_tag_pos !== NULL || $open_tag_pos > $break_start && $open_tag_pos < $break_end && $close_tag_pos === NULL) {
          if (empty($close_tag_pos)) {
            $break_map[$break_end][$open_tag_pos] = '<' . $split[$open_tag_pos] . '>';
          }
          else {
            $break_map[$break_end][$open_tag_pos] = '<' . $split[$open_tag_pos] . '>';
            $break_map[$break_end][$close_tag_pos] = '<' . $split[$close_tag_pos] . '>';
          }
        }
      }
    }
    ksort($break_map[$break_end]);
    if (isset($output)) {
      $output .= $placeholder . implode('', $break_map[$break_end]);
    }
    else {
      $output = implode('', $break_map[$break_end]);
    }
  }
  return $output;
}