From 79a8b437ea3a820c8ab32ab5baf752965340d1d4 Mon Sep 17 00:00:00 2001
From: milkyway <ackerm75@hotmail.com>
Date: Tue, 7 Nov 2023 07:11:06 +0100
Subject: [PATCH 1/9] Add Field 'Filename'

---
 src/PhpWord/Element/Field.php | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/PhpWord/Element/Field.php b/src/PhpWord/Element/Field.php
index 68a5296d7a..c79f51e427 100644
--- a/src/PhpWord/Element/Field.php
+++ b/src/PhpWord/Element/Field.php
@@ -85,6 +85,10 @@ class Field extends AbstractElement
             'properties' => ['StyleIdentifier' => ''],
             'options' => ['PreserveFormat'],
         ],
+        'FILENAME' => [
+            'properties' => [],
+            'options' => ['Path', 'PreserveFormat'],
+        ],
     ];
 
     /**

From 1ce853e8bd86081413e860fcd00947351704b861 Mon Sep 17 00:00:00 2001
From: milkyway <ackerm75@hotmail.com>
Date: Tue, 7 Nov 2023 07:18:31 +0100
Subject: [PATCH 2/9] Add 'Path' for Filename and double backslashes

---
 src/PhpWord/Writer/Word2007/Element/Field.php | 22 +++++++++++--------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/src/PhpWord/Writer/Word2007/Element/Field.php b/src/PhpWord/Writer/Word2007/Element/Field.php
index 6fdb48b0f4..4d7c2a0b46 100644
--- a/src/PhpWord/Writer/Word2007/Element/Field.php
+++ b/src/PhpWord/Writer/Word2007/Element/Field.php
@@ -166,15 +166,15 @@ private function buildPropertiesAndOptions(\PhpOffice\PhpWord\Element\Field $ele
         foreach ($properties as $propkey => $propval) {
             switch ($propkey) {
                 case 'format':
-                    $propertiesAndOptions .= '\* ' . $propval . ' ';
+                    $propertiesAndOptions .= '\\* ' . $propval . ' ';
 
                     break;
                 case 'numformat':
-                    $propertiesAndOptions .= '\# ' . $propval . ' ';
+                    $propertiesAndOptions .= '\\# ' . $propval . ' ';
 
                     break;
                 case 'dateformat':
-                    $propertiesAndOptions .= '\@ "' . $propval . '" ';
+                    $propertiesAndOptions .= '\\@ "' . $propval . '" ';
 
                     break;
                 case 'macroname':
@@ -192,27 +192,31 @@ private function buildPropertiesAndOptions(\PhpOffice\PhpWord\Element\Field $ele
         foreach ($options as $option) {
             switch ($option) {
                 case 'PreserveFormat':
-                    $propertiesAndOptions .= '\* MERGEFORMAT ';
+                    $propertiesAndOptions .= '\\* MERGEFORMAT ';
 
                     break;
                 case 'LunarCalendar':
-                    $propertiesAndOptions .= '\h ';
+                    $propertiesAndOptions .= '\\h ';
 
                     break;
                 case 'SakaEraCalendar':
-                    $propertiesAndOptions .= '\s ';
+                    $propertiesAndOptions .= '\\s ';
 
                     break;
                 case 'LastUsedFormat':
-                    $propertiesAndOptions .= '\l ';
+                    $propertiesAndOptions .= '\\l ';
 
                     break;
                 case 'Bold':
-                    $propertiesAndOptions .= '\b ';
+                    $propertiesAndOptions .= '\\b ';
 
                     break;
                 case 'Italic':
-                    $propertiesAndOptions .= '\i ';
+                    $propertiesAndOptions .= '\\i ';
+
+                    break;
+                case 'Path':
+                    $propertiesAndOptions .= '\\p ';
 
                     break;
                 default:

From 143d2a14bbe13db9d3b7d51e0d7c00f7750e41c0 Mon Sep 17 00:00:00 2001
From: milkyway <ackerm75@hotmail.com>
Date: Tue, 7 Nov 2023 08:08:40 +0100
Subject: [PATCH 3/9] Added field 'filename'

---
 src/PhpWord/Writer/ODText/Element/Field.php | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/PhpWord/Writer/ODText/Element/Field.php b/src/PhpWord/Writer/ODText/Element/Field.php
index 1bfdbc9301..46f62b0f02 100644
--- a/src/PhpWord/Writer/ODText/Element/Field.php
+++ b/src/PhpWord/Writer/ODText/Element/Field.php
@@ -15,7 +15,7 @@
  * @license     http://www.gnu.org/licenses/lgpl.txt LGPL version 3
  */
 // Not fully implemented
-//     - supports only PAGE and NUMPAGES
+//     - supports only PAGE, NUMPAGES, DATE and FILENAME
 //     - supports only default formats and options
 //     - supports style only if specified by name
 //     - spaces before and after field may be dropped
@@ -44,6 +44,7 @@ public function write(): void
             case 'date':
             case 'page':
             case 'numpages':
+            case 'filename':
                 $this->writeDefault($element, $type);
 
                 break;
@@ -78,6 +79,18 @@ private function writeDefault(\PhpOffice\PhpWord\Element\Field $element, $type):
                 $xmlWriter->startElement('text:page-count');
                 $xmlWriter->endElement();
 
+                break;
+            case 'filename':
+                $xmlWriter->startElement('text:file-name');
+                $xmlWriter->writeAttribute('text:fixed', 'false');
+                $options = $element->getOptions();
+                if ($options != null && in_array('Path', $options)) {
+                    $xmlWriter->writeAttribute('text:display', 'full');
+                } else {
+                    $xmlWriter->writeAttribute('text:display', 'name');
+                }
+                $xmlWriter->endElement();
+
                 break;
         }
         $xmlWriter->endElement(); // text:span

From 0701c92fbffc19c1529b676e24f768dde4acc1dc Mon Sep 17 00:00:00 2001
From: milkyway <ackerm75@hotmail.com>
Date: Tue, 7 Nov 2023 08:29:05 +0100
Subject: [PATCH 4/9] Added field 'Filenane'

---
 src/PhpWord/Writer/RTF/Element/Field.php | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/PhpWord/Writer/RTF/Element/Field.php b/src/PhpWord/Writer/RTF/Element/Field.php
index 37f203aca8..bc924c01d2 100644
--- a/src/PhpWord/Writer/RTF/Element/Field.php
+++ b/src/PhpWord/Writer/RTF/Element/Field.php
@@ -20,7 +20,7 @@
 /**
  * Field element writer.
  *
- * Note: for now, only date, page and numpages fields are implemented for RTF.
+ * Note: for now, only date, page, numpages and filenane fields are implemented for RTF.
  */
 class Field extends Text
 {
@@ -66,6 +66,16 @@ protected function writeNumpages()
         return 'NUMPAGES';
     }
 
+    protected function writeFilename(\PhpOffice\PhpWord\Element\Field $element)
+    {
+        $content = 'FILENAME';
+        $options = $element->getOptions();
+        if ($options != null && in_array('Path', $options)) {
+            $content .= ' \\\\p';
+        }
+        return $content;
+    }
+
     protected function writeDate(\PhpOffice\PhpWord\Element\Field $element)
     {
         $content = '';

From 9b90673267775d54bcf6903bb50dcf28e8bde794 Mon Sep 17 00:00:00 2001
From: milkyway <ackerm75@hotmail.com>
Date: Tue, 7 Nov 2023 08:29:30 +0100
Subject: [PATCH 5/9] Typo

---
 src/PhpWord/Writer/RTF/Element/Field.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/PhpWord/Writer/RTF/Element/Field.php b/src/PhpWord/Writer/RTF/Element/Field.php
index bc924c01d2..a852baf799 100644
--- a/src/PhpWord/Writer/RTF/Element/Field.php
+++ b/src/PhpWord/Writer/RTF/Element/Field.php
@@ -20,7 +20,7 @@
 /**
  * Field element writer.
  *
- * Note: for now, only date, page, numpages and filenane fields are implemented for RTF.
+ * Note: for now, only date, page, numpages and filename fields are implemented for RTF.
  */
 class Field extends Text
 {

From 7ff41b52eb2992c377c7f2f23881df389129f960 Mon Sep 17 00:00:00 2001
From: milkyway <ackerm75@hotmail.com>
Date: Tue, 7 Nov 2023 08:31:49 +0100
Subject: [PATCH 6/9] Added field 'FILENAME'

---
 docs/usage/elements/field.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/docs/usage/elements/field.md b/docs/usage/elements/field.md
index 10492cc742..fe8e9756fc 100644
--- a/docs/usage/elements/field.md
+++ b/docs/usage/elements/field.md
@@ -7,6 +7,7 @@ Currently the following fields are supported:
 - DATE
 - XE
 - INDEX
+- FILENAME
 
 ``` php
 <?php
@@ -36,4 +37,4 @@ $section->addField('XE', array(), array(), $fieldText);
 
 //this actually adds the index
 $section->addField('INDEX', array(), array('\\e "	" \\h "A" \\c "3"'), 'right click to update index');
-```
\ No newline at end of file
+```

From 71d482065bda8dc1492260f699db8493b4172aa1 Mon Sep 17 00:00:00 2001
From: milkyway <ackerm75@hotmail.com>
Date: Tue, 7 Nov 2023 08:35:22 +0100
Subject: [PATCH 7/9] Added example for filename field

---
 samples/Sample_27_Field.php | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/samples/Sample_27_Field.php b/samples/Sample_27_Field.php
index d250946169..575933ec30 100644
--- a/samples/Sample_27_Field.php
+++ b/samples/Sample_27_Field.php
@@ -26,6 +26,9 @@
 
 $section->addText('Number of pages field:');
 $section->addField('NUMPAGES', ['numformat' => '0,00', 'format' => 'Arabic'], ['PreserveFormat']);
+
+$section->addText('Filename:');
+$section->addField('FILENAME', ['format' => 'Upper'], ['Path', 'PreserveFormat']);
 $section->addTextBreak();
 
 $textrun = $section->addTextRun();

From 24a7dc203187e4fe96aead680099f1261feca0cb Mon Sep 17 00:00:00 2001
From: milkyway <ackerm75@hotmail.com>
Date: Tue, 7 Nov 2023 08:36:35 +0100
Subject: [PATCH 8/9] Added formatting properties

---
 src/PhpWord/Element/Field.php | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/PhpWord/Element/Field.php b/src/PhpWord/Element/Field.php
index c79f51e427..b371bb80d7 100644
--- a/src/PhpWord/Element/Field.php
+++ b/src/PhpWord/Element/Field.php
@@ -86,7 +86,9 @@ class Field extends AbstractElement
             'options' => ['PreserveFormat'],
         ],
         'FILENAME' => [
-            'properties' => [],
+            'properties' => [
+                'format' => ['Upper', 'Lower', 'FirstCap', 'Caps'],
+            ],
             'options' => ['Path', 'PreserveFormat'],
         ],
     ];

From 442fc6436b578146f0415ed34a0c28d7c6e454a1 Mon Sep 17 00:00:00 2001
From: milkyway <ackerm75@hotmail.com>
Date: Tue, 7 Nov 2023 08:46:25 +0100
Subject: [PATCH 9/9] Update Sample_27_Field.php

---
 samples/Sample_27_Field.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/samples/Sample_27_Field.php b/samples/Sample_27_Field.php
index 575933ec30..fd441ba022 100644
--- a/samples/Sample_27_Field.php
+++ b/samples/Sample_27_Field.php
@@ -27,7 +27,7 @@
 $section->addText('Number of pages field:');
 $section->addField('NUMPAGES', ['numformat' => '0,00', 'format' => 'Arabic'], ['PreserveFormat']);
 
-$section->addText('Filename:');
+$section->addText('Filename field:');
 $section->addField('FILENAME', ['format' => 'Upper'], ['Path', 'PreserveFormat']);
 $section->addTextBreak();