Subversion-Projekte lars-tiefland.php_share

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<?php
2
 
3
require_once(HTML2PS_DIR.'inline.content.builder.php');
4
 
5
class InlineContentBuilderNormal extends InlineContentBuilder {
6
  function InlineContentBuilderNormal() {
7
    $this->InlineContentBuilder();
8
  }
9
 
10
  /**
11
   * CSS 2.1 p.16.6
12
   * white-space: normal
13
   * This value directs user agents to collapse sequences of whitespace, and break lines as necessary to fill line boxes.
14
   */
15
  function build(&$box, $text, &$pipeline) {
16
    $text = $this->remove_leading_linefeeds($text);
17
    $text = $this->remove_trailing_linefeeds($text);
18
 
19
    $content = $this->collapse_whitespace($text);
20
 
21
    // Whitespace-only text nodes sill result on only one whitespace box
22
    if (trim($content) === '') {
23
      $whitespace =& WhitespaceBox::create($pipeline);
24
      $box->add_child($whitespace);
25
      return;
26
    }
27
 
28
    // Add leading whispace box, if content stars with a space
29
    if (preg_match('/ /u', substr($content,0,1))) {
30
      $whitespace =& WhitespaceBox::create($pipeline);
31
      $box->add_child($whitespace);
32
    }
33
 
34
    $words = $this->break_into_words($content);
35
 
36
    $size = count($words);
37
    $pos = 0;
38
 
39
    // Check if text content has trailing whitespace
40
    $last_whitespace = substr($content, strlen($content) - 1, 1) == ' ';
41
 
42
    foreach ($words as $word) {
43
      $box->process_word($word, $pipeline);
44
      $pos++;
45
 
46
      $is_last_word = ($pos == $size);
47
 
48
      // Whitespace boxes should be added
49
      // 1) between words
50
      // 2) after the last word IF there was a space at the content end
51
      if (!$is_last_word ||
52
          $last_whitespace) {
53
        $whitespace =& WhitespaceBox::create($pipeline);
54
        $box->add_child($whitespace);
55
      };
56
    };
57
  }
58
}
59
 
60
?>