/**
  * Marshall a PrintedVariable object into a DOMElement object.
  *
  * @param \qtism\data\QtiComponent $component A PrintedVariable object.
  * @return \DOMElement The according DOMElement object.
  * @throws \qtism\data\storage\xml\marshalling\MarshallingException
  */
 protected function marshall(QtiComponent $component)
 {
     $element = self::getDOMCradle()->createElement('printedVariable');
     $version = $this->getVersion();
     self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier());
     self::setDOMElementAttribute($element, 'base', $component->getBase());
     if (Version::compare($version, '2.1.0', '>=') === true) {
         self::setDOMElementAttribute($element, 'powerForm', $component->mustPowerForm());
         self::setDOMElementAttribute($element, 'delimiter', $component->getDelimiter());
         self::setDOMElementAttribute($element, 'mappingIndicator', $component->getMappingIndicator());
     }
     if ($component->hasFormat() === true) {
         self::setDOMElementAttribute($element, 'format', $component->getFormat());
     }
     if ($component->hasIndex() === true) {
         self::setDOMElementAttribute($element, 'index', $component->getIndex());
     }
     if ($component->hasField() === true) {
         self::setDOMElementAttribute($element, 'field', $component->getField());
     }
     if ($component->hasXmlBase() === true) {
         self::setXmlBase($element, $component->getXmlBase());
     }
     $this->fillElement($element, $component);
     return $element;
 }
 /**
  * Marshall a TextEntryInteraction/ExtendedTextInteraction object into a DOMElement object.
  *
  * @param \qtism\data\QtiComponent $component A TextEntryInteraction/ExtendedTextInteraction object.
  * @return \DOMElement The according DOMElement object.
  * @throws \qtism\data\storage\xml\marshalling\MarshallingException
  */
 protected function marshall(QtiComponent $component)
 {
     $element = self::getDOMCradle()->createElement($component->getQtiClassName());
     $version = $this->getVersion();
     self::setDOMElementAttribute($element, 'responseIdentifier', $component->getResponseIdentifier());
     if ($component->getBase() !== 10) {
         self::setDOMElementAttribute($element, 'base', $component->getBase());
     }
     if ($component->hasStringIdentifier() === true) {
         self::setDOMElementAttribute($element, 'stringIdentifier', $component->getStringIdentifier());
     }
     if ($component->hasExpectedLength() === true) {
         self::setDOMElementAttribute($element, 'expectedLength', $component->getExpectedLength());
     }
     if ($component->hasPatternMask() === true) {
         self::setDOMElementAttribute($element, 'patternMask', $component->getPatternMask());
     }
     if ($component->hasPlaceholderText() === true) {
         self::setDOMElementAttribute($element, 'placeholderText', $component->getPlaceholderText());
     }
     if ($component->hasXmlBase() === true) {
         self::setXmlBase($element, $component->setXmlBase());
     }
     if ($element->localName === 'extendedTextInteraction') {
         if ($component->hasMaxStrings() === true) {
             self::setDOMElementAttribute($element, 'maxStrings', $component->getMaxStrings());
         }
         if (Version::compare($version, '2.1.0', '>=') === true && $component->getMinStrings() !== 0) {
             self::setDOMElementAttribute($element, 'minStrings', $component->getMinStrings());
         }
         if ($component->hasExpectedLines() === true) {
             self::setDOMElementAttribute($element, 'expectedLines', $component->getExpectedLines());
         }
         if (Version::compare($version, '2.1.0', '>=') === true && $component->getFormat() !== TextFormat::PLAIN) {
             self::setDOMElementAttribute($element, 'format', TextFormat::getNameByConstant($component->getFormat()));
         }
         if ($component->hasPrompt() === true) {
             $element->appendChild($this->getMarshallerFactory()->createMarshaller($component->getPrompt())->marshall($component->getPrompt()));
         }
     }
     $this->fillElement($element, $component);
     return $element;
 }
 /**
  * @see \qtism\runtime\rendering\markup\xhtml\AbstractXhtmlRenderer::appendChildren()
  */
 protected function appendChildren(DOMDocumentFragment $fragment, QtiComponent $component, $base = '')
 {
     $renderingEngine = $this->getRenderingEngine();
     if ($renderingEngine !== null) {
         switch ($renderingEngine->getPrintedVariablePolicy()) {
             case AbstractMarkupRenderingEngine::CONTEXT_AWARE:
                 $value = Utils::printVariable($this->getRenderingEngine()->getState(), $component->getIdentifier(), $component->getFormat(), $component->mustPowerForm(), $component->getBase(), $component->getIndex(), $component->getDelimiter(), $component->getField(), $component->getMappingIndicator());
                 $fragment->firstChild->appendChild($fragment->ownerDocument->createTextNode($value));
                 break;
             case AbstractMarkupRenderingEngine::TEMPLATE_ORIENTED:
                 $base = $component->getBase();
                 $index = $component->getIndex();
                 $params = array('$' . $renderingEngine->getStateName(), PhpUtils::doubleQuotedPhpString($component->getIdentifier()), PhpUtils::doubleQuotedPhpString($component->getFormat()), $component->mustPowerForm() === true ? 'true' : 'false', is_int($base) === true ? $base : PhpUtils::doubleQuotedPhpString($base), is_int($index) === true ? $index : PhpUtils::doubleQuotedPhpString($index), PhpUtils::doubleQuotedPhpString($component->getDelimiter()), PhpUtils::doubleQuotedPhpString($component->getField()), PhpUtils::doubleQuotedPhpString($component->getMappingIndicator()));
                 $value = " qtism-printVariable(" . implode(', ', $params) . ") ";
                 $fragment->firstChild->appendChild($fragment->ownerDocument->createComment($value));
                 break;
         }
     }
 }