HTMLPurifier/ChildDef/Custom.php Quellcode

Custom.php
gehe zur Dokumentation dieser Datei
1 <?php
2 
10 {
14  public $type = 'custom';
15 
19  public $allow_empty = false;
20 
25  public $dtd_regex;
26 
31  private $_pcre_regex;
32 
36  public function __construct($dtd_regex)
37  {
38  $this->dtd_regex = $dtd_regex;
39  $this->_compileRegex();
40  }
41 
45  protected function _compileRegex()
46  {
47  $raw = str_replace(' ', '', $this->dtd_regex);
48  if ($raw{0} != '(') {
49  $raw = "($raw)";
50  }
51  $el = '[#a-zA-Z0-9_.-]+';
52  $reg = $raw;
53 
54  // COMPLICATED! AND MIGHT BE BUGGY! I HAVE NO CLUE WHAT I'M
55  // DOING! Seriously: if there's problems, please report them.
56 
57  // collect all elements into the $elements array
58  preg_match_all("/$el/", $reg, $matches);
59  foreach ($matches[0] as $match) {
60  $this->elements[$match] = true;
61  }
62 
63  // setup all elements as parentheticals with leading commas
64  $reg = preg_replace("/$el/", '(,\\0)', $reg);
65 
66  // remove commas when they were not solicited
67  $reg = preg_replace("/([^,(|]\(+),/", '\\1', $reg);
68 
69  // remove all non-paranthetical commas: they are handled by first regex
70  $reg = preg_replace("/,\(/", '(', $reg);
71 
72  $this->_pcre_regex = $reg;
73  }
74 
81  public function validateChildren($children, $config, $context)
82  {
83  $list_of_children = '';
84  $nesting = 0; // depth into the nest
85  foreach ($children as $node) {
86  if (!empty($node->is_whitespace)) {
87  continue;
88  }
89  $list_of_children .= $node->name . ',';
90  }
91  // add leading comma to deal with stray comma declarations
92  $list_of_children = ',' . rtrim($list_of_children, ',');
93  $okay =
94  preg_match(
95  '/^,?' . $this->_pcre_regex . '$/',
96  $list_of_children
97  );
98  return (bool)$okay;
99  }
100 }
101 
102 // vim: et sw=4 sts=4




Korrekturen, Hinweise und Ergänzungen

Bitte scheuen Sie sich nicht und melden Sie, was auf dieser Seite sachlich falsch oder irreführend ist, was ergänzt werden sollte, was fehlt usw. Dazu bitte oben aus dem Menü Seite den Eintrag Support Forum wählen. Es ist eine kostenlose Anmeldung erforderlich, um Anmerkungen zu posten. Unpassende Postings, Spam usw. werden kommentarlos entfernt.