public function getElement($name, $trusted = null)
    {
        if (!isset($this->elementLookup[$name])) {
            return false;
        }

        // setup global state variables
        $def = false;
        if ($trusted === null) {
            $trusted = $this->trusted;
        }

        // iterate through each module that has registered itself to this
        // element
        foreach ($this->elementLookup[$name] as $module_name) {
            $module = $this->modules[$module_name];

            // refuse to create/merge from a module that is deemed unsafe--
            // pretend the module doesn't exist--when trusted mode is not on.
            if (!$trusted && !$module->safe) {
                continue;
            }

            // clone is used because, ideally speaking, the original
            // definition should not be modified. Usually, this will
            // make no difference, but for consistency's sake
            $new_def = clone $module->info[$name];

            if (!$def && $new_def->standalone) {
                $def = $new_def;
            } elseif ($def) {
                // This will occur even if $new_def is standalone. In practice,
                // this will usually result in a full replacement.
                $def->mergeIn($new_def);
            } else {
                // :TODO:
                // non-standalone definitions that don't have a standalone
                // to merge into could be deferred to the end
                // HOWEVER, it is perfectly valid for a non-standalone
                // definition to lack a standalone definition, even
                // after all processing: this allows us to safely
                // specify extra attributes for elements that may not be
                // enabled all in one place.  In particular, this might
                // be the case for trusted elements.  WARNING: care must
                // be taken that the /extra/ definitions are all safe.
                continue;
            }

            // attribute value expansions
            $this->attrCollections->performInclusions($def->attr);
            $this->attrCollections->expandIdentifiers($def->attr, $this->attrTypes);

            // descendants_are_inline, for ChildDef_Chameleon
            if (is_string($def->content_model) &&
                strpos($def->content_model, 'Inline') !== false) {
                if ($name != 'del' && $name != 'ins') {
                    // this is for you, ins/del
                    $def->descendants_are_inline = true;
                }
            }

            $this->contentSets->generateChildDef($def, $module);
        }

        // This can occur if there is a blank definition, but no base to
        // mix it in with
        if (!$def) {
            return false;
        }

        // add information on required attributes
        foreach ($def->attr as $attr_name => $attr_def) {
            if ($attr_def->required) {
                $def->required_attr[] = $attr_name;
            }
        }
        return $def;
    }
public function getElement($name, $trusted = null)
    {
        if (!isset($this->elementLookup[$name])) {
            return false;
        }

        // setup global state variables
        $def = false;
        if ($trusted === null) {
            $trusted = $this->trusted;
        }

        // iterate through each module that has registered itself to this
        // element
        foreach ($this->elementLookup[$name] as $module_name) {
            $module = $this->modules[$module_name];

            // refuse to create/merge from a module that is deemed unsafe--
            // pretend the module doesn't exist--when trusted mode is not on.
            if (!$trusted && !$module->safe) {
                continue;
            }

            // clone is used because, ideally speaking, the original
            // definition should not be modified. Usually, this will
            // make no difference, but for consistency's sake
            $new_def = clone $module->info[$name];

            if (!$def && $new_def->standalone) {
                $def = $new_def;
            } elseif ($def) {
                // This will occur even if $new_def is standalone. In practice,
                // this will usually result in a full replacement.
                $def->mergeIn($new_def);
            } else {
                // :TODO:
                // non-standalone definitions that don't have a standalone
                // to merge into could be deferred to the end
                // HOWEVER, it is perfectly valid for a non-standalone
                // definition to lack a standalone definition, even
                // after all processing: this allows us to safely
                // specify extra attributes for elements that may not be
                // enabled all in one place.  In particular, this might
                // be the case for trusted elements.  WARNING: care must
                // be taken that the /extra/ definitions are all safe.
                continue;
            }

            // attribute value expansions
            $this->attrCollections->performInclusions($def->attr);
            $this->attrCollections->expandIdentifiers($def->attr, $this->attrTypes);

            // descendants_are_inline, for ChildDef_Chameleon
            if (is_string($def->content_model) &&
                strpos($def->content_model, 'Inline') !== false) {
                if ($name != 'del' && $name != 'ins') {
                    // this is for you, ins/del
                    $def->descendants_are_inline = true;
                }
            }

            $this->contentSets->generateChildDef($def, $module);
        }

        // This can occur if there is a blank definition, but no base to
        // mix it in with
        if (!$def) {
            return false;
        }

        // add information on required attributes
        foreach ($def->attr as $attr_name => $attr_def) {
            if ($attr_def->required) {
                $def->required_attr[] = $attr_name;
            }
        }
        return $def;
    }
public function getElement ( $ name , $ trusted = null ) { if ( ! isset ( $ this -> elementLookup [ $ name ] ) ) { return false ; } // setup global state variables
 $ def = false ; if ( $ trusted === null ) { $ trusted = $ this -> trusted ; } // iterate through each module that has registered itself to this
 // element
 foreach ( $ this -> elementLookup [ $ name ] as $ module_name ) { $ module = $ this -> modules [ $ module_name ] ; // refuse to create/merge from a module that is deemed unsafe--
 // pretend the module doesn't exist--when trusted mode is not on.
 if ( ! $ trusted && ! $ module -> safe ) { continue ; } // clone is used because, ideally speaking, the original
 // definition should not be modified. Usually, this will
 // make no difference, but for consistency's sake
 $ new_def = clone $ module -> info [ $ name ] ; if ( ! $ def && $ new_def -> standalone ) { $ def = $ new_def ; } elseif ( $ def ) { // This will occur even if $new_def is standalone. In practice,
 // this will usually result in a full replacement.
 $ def -> mergeIn ( $ new_def ) ; } else { // :TODO:
 // non-standalone definitions that don't have a standalone
 // to merge into could be deferred to the end
 // HOWEVER, it is perfectly valid for a non-standalone
 // definition to lack a standalone definition, even
 // after all processing: this allows us to safely
 // specify extra attributes for elements that may not be
 // enabled all in one place.  In particular, this might
 // be the case for trusted elements.  WARNING: care must
 // be taken that the /extra/ definitions are all safe.
 continue ; } // attribute value expansions
 $ this -> attrCollections -> performInclusions ( $ def -> attr ) ; $ this -> attrCollections -> expandIdentifiers ( $ def -> attr , $ this -> attrTypes ) ; // descendants_are_inline, for ChildDef_Chameleon
 if ( is_string ( $ def -> content_model ) && strpos ( $ def -> content_model , 'Inline' ) !== false ) { if ( $ name != 'del' && $ name != 'ins' ) { // this is for you, ins/del
 $ def -> descendants_are_inline = true ; } } $ this -> contentSets -> generateChildDef ( $ def , $ module ) ; } // This can occur if there is a blank definition, but no base to
 // mix it in with
 if ( ! $ def ) { return false ; } // add information on required attributes
 foreach ( $ def -> attr as $ attr_name => $ attr_def ) { if ( $ attr_def -> required ) { $ def -> required_attr [ ] = $ attr_name ; } } return $ def ; }
Retrieves a single merged element definition
@param string $name Name of element
@param bool $trusted Boolean trusted overriding parameter: set to true
if you want the full version of an element
@return HTMLPurifier_ElementDef Merged HTMLPurifier_ElementDef
@note You may notice that modules are getting iterated over twice (once
in getElements() and once here). This
is because
Retrieves a single merged element definition