diff --git a/src/Publisher.php b/src/Publisher.php
index 1ee526af9f5995965efeb50177e7a0cb53f4e6ee..9d8432290778bbf2fe203154ecf99921a120ed10 100644
--- a/src/Publisher.php
+++ b/src/Publisher.php
@@ -161,6 +161,10 @@ class Publisher
+
+
+
+
public function getSections(DOMElement $element): array
{
$textNs = $this->getDocument()->getNamespaceUrl('text');
@@ -224,15 +228,16 @@ class Publisher
'automatic-styles'
)->item(0);
- $styleNs = $this->getDocument()->getNamespaceUrl('style');
-
- $stylePageBreak = $this->content->createElementNS($styleNs, 'style:style');
- $stylePageBreak->setAttributeNS($styleNs, 'style:name', self::PAGE_BREAK_NAME);
- $stylePageBreak->setAttributeNS($styleNs, 'style:family', 'paragraph');
- $stylePageBreak->setAttributeNS($styleNs, 'style:parent-style-name', 'Standard');
-
- $stylePageBreakProperties = $this->content->createElementNS($styleNs, 'style:paragraph-properties');
- $stylePageBreakProperties->setAttribute('fo:break-after', 'page');
+ $stylePageBreak = $this->newElement('style:style', [
+ 'style:name' => self::PAGE_BREAK_NAME,
+ 'style:family' => 'paragraph',
+ 'style:parent-style-name' => 'Standard',
+ 'style:master-page-name' => 'Standard',
+ ]);
+ $stylePageBreakProperties = $this->newElement('style:paragraph-properties', [
+ 'style:writing-mode' => 'page',
+ 'style:page-number' => '1',
+ ]);
$stylePageBreak->appendChild($stylePageBreakProperties);
$styles->appendChild($stylePageBreak);
@@ -335,9 +340,11 @@ class Publisher
$this->setVariable($vElement, $val);
}
}
- list($sName, $sType) = explode("@", $name);
- if ($sType == 'text:section') {
- $name = $sName;
+ if (false !== strpos($name, '@')) {
+ list($sName, $sType) = explode("@", $name);
+ if ($sType == 'text:section') {
+ $name = $sName;
+ }
}
if (isset($sections[$name])) {
foreach ($sections[$name] as $sElement) {
@@ -420,8 +427,10 @@ class Publisher
$first = true;
foreach ($this->values as $values) {
$bodyNode = $this->body->cloneNode(true);
-
- if (!$first && $this->isAutoBreak()) {
+ if ($first){
+ $this->getDocument()->getStylist()->setVariables($values);
+ $first = false;
+ }elseif($this->isAutoBreak()){
$this->addPageBreak($bodyNode);
}
@@ -448,7 +457,7 @@ class Publisher
{
$document = $this->getDocument();
- return $document->find($document->getContent(), $name);
+ return $document->find($this->content, $name);
}
@@ -477,7 +486,7 @@ class Publisher
{
$document = $this->getDocument();
- return $document->newElement($document->getContent(), $name, $attrs);
+ return $document->newElement($this->content, $name, $attrs);
}
diff --git a/src/Stylist.php b/src/Stylist.php
index e12d9db49c6adefb55e814934d30836765f2899b..faf7a8cb6465daa1e694c90ba0df9614fa0c9785 100644
--- a/src/Stylist.php
+++ b/src/Stylist.php
@@ -79,6 +79,13 @@ class Stylist
+ /**
+ * @param $text
+ * @param array $options
+ *
+ * @return Stylist
+ * @throws Exception
+ */
public function addFiligrane($text, array $options = []): Stylist
{
$dw = strlen($text) * 2;
@@ -204,6 +211,80 @@ class Stylist
+ /**
+ * @param DOMElement $element
+ *
+ * @return Publisher
+ * @throws Exception
+ */
+ public function getVariables(): array
+ {
+ $textNs = $this->getDocument()->getNamespaceUrl('text');
+
+ $vElements = $this->find('text:variable-set');
+ foreach ($vElements as $vElement) {
+ $name = $vElement->getAttributeNs($textNs, 'name');
+
+ if (!isset($variables[$name])) $variables[$name] = [];
+ $variables[$name][] = $vElement;
+ }
+
+ return $variables;
+ }
+
+
+
+ /**
+ * @param DOMElement $element
+ * @param string $value
+ *
+ * @return Publisher
+ */
+ public function setVariable(DOMElement $element, string $value): Stylist
+ {
+ $textNs = $this->getDocument()->getNamespaceUrl('text');
+
+ $document = $element->ownerDocument;
+
+ $value = explode("\n", $value);
+ for ($i = 0; $i < count($value); $i++) {
+ if ($i > 0) {
+ $returnVNode = $document->createElementNS($textNs, 'text:line-break');
+ $element->parentNode->insertBefore($returnVNode, $element);
+ }
+ $vText = $document->createTextNode($value[$i]);
+ $element->parentNode->insertBefore($vText, $element);
+ }
+ $element->parentNode->removeChild($element);
+ $this->getDocument()->setStylesChanged(true);
+
+ return $this;
+ }
+
+
+
+ /**
+ * @param array $variables
+ *
+ * @return Stylist
+ * @throws Exception
+ */
+ public function setVariables(array $variables): Stylist
+ {
+ $vars = $this->getVariables();
+ foreach( $vars as $name => $elements ){
+ if (isset($variables[$name])){
+ foreach( $elements as $element ){
+ $this->setVariable($element, $variables[$name]);
+ }
+ }
+ }
+
+ return $this;
+ }
+
+
+
/**
* @param string $name
*