Browse Source

Merge pull request #14860 from Tim-Otte/fix-missing-styles-in-lines

FIX: Added support for styling in lines in odt documents
Laurent Destailleur 4 years ago
parent
commit
14e6d38fe8
2 changed files with 23 additions and 11 deletions
  1. 3 7
      htdocs/includes/odtphp/Segment.php
  2. 20 4
      htdocs/includes/odtphp/odf.php

+ 3 - 7
htdocs/includes/odtphp/Segment.php

@@ -231,14 +231,10 @@ class Segment implements IteratorAggregate, Countable
             //throw new SegmentException("var $key not found in {$this->getName()}");
         }
 
-		$value=$this->odf->htmlToUTFAndPreOdf($value);
+        $tag = $this->odf->getConfig('DELIMITER_LEFT') . $key . $this->odf->getConfig('DELIMITER_RIGHT');
 
-		$value = $encode ? htmlspecialchars($value) : $value;
-		$value = ($charset == 'ISO-8859') ? utf8_encode($value) : $value;
-
-		$value=$this->odf->preOdfToOdf($value);
-
-        $this->vars[$this->odf->getConfig('DELIMITER_LEFT') . $key . $this->odf->getConfig('DELIMITER_RIGHT')] = $value;
+		$this->vars[$tag] = $this->odf->convertVarToOdf($value, $encode, $charset);
+        
         return $this;
     }
     /**

+ 20 - 4
htdocs/includes/odtphp/odf.php

@@ -141,7 +141,23 @@ class Odf
 			//}
 		}
 
+		$this->vars[$tag] = $this->convertVarToOdf($value, $encode, $charset);
+		
+		return $this;
+	}
+
+	/**
+     * Replaces html tags in odt tags and returns a compatible string
+     * @param string   $key        Name of the variable within the template
+	 * @param string   $value      Replacement value
+	 * @param bool     $encode     If true, special XML characters are encoded
+	 * @param string   $charset    Charset
+     * @return string
+     */
+	public function convertVarToOdf($value, $encode = true, $charset = 'ISO-8859')
+	{
 		$value = ($charset == 'ISO-8859') ? utf8_encode($value) : $value;
+		$convertedValue = $value;
 
 		// Check if the value includes html tags
 		if ($this->_hasHtmlTag($value) === true) {
@@ -155,7 +171,7 @@ class Odf
 				'<style:style style:name="supText" style:family="text"><style:text-properties style:text-position="super 58%" /></style:style>'
 			);
 	
-			$this->vars[$tag] = $this->_replaceHtmlWithOdtTag($this->_getDataFromHtml($value), $customStyles, $fontDeclarations);
+			$convertedValue = $this->_replaceHtmlWithOdtTag($this->_getDataFromHtml($value), $customStyles, $fontDeclarations);
 	
 			foreach ($customStyles as $key => $val) {
 				array_push($automaticStyles, '<style:style style:name="customStyle' . $key . '" style:family="text">' . $val . '</style:style>');
@@ -179,9 +195,9 @@ class Odf
 			}
 			$this->contentXml = str_replace('</office:font-face-decls>', $fonts . '</office:font-face-decls>', $this->contentXml);
 		}
-		else $this->vars[$tag] = preg_replace('/(\r\n|\r|\n)/i', "<text:line-break/>", $value);
-		
-		return $this;
+		else $convertedValue = preg_replace('/(\r\n|\r|\n)/i', "<text:line-break/>", $value);
+
+		return $convertedValue;
 	}
 
 	/**