You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2020/08/26 23:43:05 UTC

[freemarker-generator] branch FREEMARKER-154 updated (9d04cd9 -> 448bf95)

This is an automated email from the ASF dual-hosted git repository.

ddekany pushed a change to branch FREEMARKER-154
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git.


    from 9d04cd9  Continued working on porting the .md documentation to XDocBook. Changed the build process a bit as well.
     new 641d82c  Continued working on porting the .md documentation to XDocBook.
     add f4e1378  FREEMARKER-153 FreeMarker Generator release preparations (#21)
     add 73b40a8  Fix broken build caused by merging FREEMARKER-153
     new 448bf95  Merge remote-tracking branch 'origin/master' into FREEMARKER-154

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../generator/base/FreeMarkerConstants.java        |  19 +-
 .../template/TemplateTransformationsBuilder.java   |   1 -
 .../template/TemplateSourceFactoryTest.java        |   2 +-
 freemarker-generator-cli/CHANGELOG.md              |   3 +-
 freemarker-generator-cli/pom.xml                   |  12 +-
 .../config/freemarker-generator.properties         |   0
 .../examples/data/accesslog/combined-access.log    |   0
 .../src/{ => app}/examples/data/csv/contract.csv   |   0
 .../src/{ => app}/examples/data/csv/dataframe.csv  |   0
 .../examples/data/csv/excel-export-utf8.csv        |   0
 .../examples/data/csv/locker-test-users.csv        |   0
 .../{ => app}/examples/data/csv/sales-records.csv  |   0
 .../{ => app}/examples/data/csv/transactions.csv   |   0
 .../src/{ => app}/examples/data/csv/user.csv       |   0
 .../examples/data/excel/test-multiple-sheets.xlsx  | Bin
 .../src/{ => app}/examples/data/excel/test.xls     | Bin
 .../src/{ => app}/examples/data/excel/test.xlsx    | Bin
 .../examples/data/ftl/nginx/nginx.conf.ftl         |   0
 .../{ => app}/examples/data/ftl/nginx/nginx.env    |   0
 .../{ => app}/examples/data/html/dependencies.html |   0
 .../{ => app}/examples/data/json/github-users.json |   0
 .../{ => app}/examples/data/json/swagger-spec.json |   0
 .../data/properties/user_0001/user.properties      |   0
 .../data/properties/user_0002/user.properties      |   0
 .../data/properties/user_0003/user.properties      |   0
 .../data/properties/user_0004/user.properties      |   0
 .../examples/data/template/application.properties  |   0
 .../examples/data/template/nginx/nginx.conf.ftl    |   0
 .../src/{ => app}/examples/data/xml/recipients.xml |   0
 .../src/{ => app}/examples/data/yaml/customer.yaml |   0
 .../{ => app}/examples/data/yaml/swagger-spec.yaml |   0
 .../templates/accesslog/combined-access.ftl        |   0
 .../templates/csv/csv/gatling-user-credentials.ftl |   0
 .../examples/templates/csv/fo/transactions.ftl     |   0
 .../examples/templates/csv/fo/transform.ftl        |   0
 .../examples/templates/csv/html/transactions.ftl   |   0
 .../{ => app}/examples/templates/csv/md/filter.ftl |   0
 .../examples/templates/csv/shell/curl.ftl          |   0
 .../examples/templates/dataframe/example.ftl       |   0
 .../examples/templates/dataframe/html/print.ftl    |   0
 .../src/{ => app}/examples/templates/demo.ftl      |   0
 .../examples/templates/excel/csv/custom.ftl        |   0
 .../templates/excel/dataframe/transform.ftl        |   0
 .../examples/templates/html/csv/dependencies.ftl   |   0
 .../examples/templates/html/txt/licence.ftl        |   0
 .../templates/json/csv/swagger-endpoints.ftl       |   0
 .../templates/json/dataframe/github-users.ftl      |   0
 .../examples/templates/json/md/github-users.ftl    |   0
 .../templates/properties/csv/locker-test-users.ftl |   0
 .../examples/templates/tsv/fo/transactions.ftl     |   0
 .../examples/templates/xml/txt/recipients.ftl      |   0
 .../examples/templates/yaml/txt/transform.ftl      |   0
 .../src/{ => app}/scripts/run-examples.bat         |   0
 .../src/{ => app}/scripts/run-examples.sh          |   0
 .../templates/freemarker-generator/cat.ftl         |   0
 .../freemarker-generator/csv/csv/transform.ftl     |   0
 .../freemarker-generator/csv/html/transform.ftl    |   0
 .../freemarker-generator/csv/md/transform.ftl      |   0
 .../freemarker-generator/excel/csv/transform.ftl   |   0
 .../freemarker-generator/excel/html/transform.ftl  |   0
 .../freemarker-generator/excel/md/transform.ftl    |   0
 .../templates/freemarker-generator/info.ftl        |   0
 .../freemarker-generator/json/yaml/transform.ftl   |   0
 .../freemarker-generator/lib/commons-csv.ftl       |   0
 .../freemarker-generator/yaml/json/transform.ftl   |   0
 .../org/apache/freemarker/generator/cli/Main.java  |  26 +-
 .../cli/config/TemplateDirectorySupplier.java      |  48 +-
 .../freemarker/generator/cli/AbstractMainTest.java |  11 +-
 .../freemarker/generator/cli/ExamplesTest.java     |  84 ++--
 .../generator/cli/TemplateLoadingTest.java         |   2 +-
 .../cli/config/TemplateDirectorySupplierTest.java  |   4 +-
 freemarker-generator-website/pom.xml               |  15 +-
 .../src/main/docgen/book.xml                       | 503 +++++++++++++++++++++
 73 files changed, 632 insertions(+), 98 deletions(-)
 rename freemarker-generator-cli/src/{main => app}/config/freemarker-generator.properties (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/accesslog/combined-access.log (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/csv/contract.csv (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/csv/dataframe.csv (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/csv/excel-export-utf8.csv (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/csv/locker-test-users.csv (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/csv/sales-records.csv (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/csv/transactions.csv (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/csv/user.csv (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/excel/test-multiple-sheets.xlsx (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/excel/test.xls (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/excel/test.xlsx (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/ftl/nginx/nginx.conf.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/ftl/nginx/nginx.env (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/html/dependencies.html (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/json/github-users.json (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/json/swagger-spec.json (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/properties/user_0001/user.properties (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/properties/user_0002/user.properties (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/properties/user_0003/user.properties (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/properties/user_0004/user.properties (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/template/application.properties (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/template/nginx/nginx.conf.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/xml/recipients.xml (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/yaml/customer.yaml (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/data/yaml/swagger-spec.yaml (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/accesslog/combined-access.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/csv/csv/gatling-user-credentials.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/csv/fo/transactions.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/csv/fo/transform.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/csv/html/transactions.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/csv/md/filter.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/csv/shell/curl.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/dataframe/example.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/dataframe/html/print.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/demo.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/excel/csv/custom.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/excel/dataframe/transform.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/html/csv/dependencies.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/html/txt/licence.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/json/csv/swagger-endpoints.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/json/dataframe/github-users.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/json/md/github-users.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/properties/csv/locker-test-users.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/tsv/fo/transactions.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/xml/txt/recipients.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/examples/templates/yaml/txt/transform.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/scripts/run-examples.bat (100%)
 rename freemarker-generator-cli/src/{ => app}/scripts/run-examples.sh (100%)
 rename freemarker-generator-cli/src/{ => app}/templates/freemarker-generator/cat.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/templates/freemarker-generator/csv/csv/transform.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/templates/freemarker-generator/csv/html/transform.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/templates/freemarker-generator/csv/md/transform.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/templates/freemarker-generator/excel/csv/transform.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/templates/freemarker-generator/excel/html/transform.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/templates/freemarker-generator/excel/md/transform.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/templates/freemarker-generator/info.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/templates/freemarker-generator/json/yaml/transform.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/templates/freemarker-generator/lib/commons-csv.ftl (100%)
 rename freemarker-generator-cli/src/{ => app}/templates/freemarker-generator/yaml/json/transform.ftl (100%)


[freemarker-generator] 02/02: Merge remote-tracking branch 'origin/master' into FREEMARKER-154

Posted by dd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ddekany pushed a commit to branch FREEMARKER-154
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git

commit 448bf9511aa4d4db222d87376c60cbef61f84e6a
Merge: 641d82c 73b40a8
Author: ddekany <dd...@apache.org>
AuthorDate: Thu Aug 27 01:07:38 2020 +0200

    Merge remote-tracking branch 'origin/master' into FREEMARKER-154
    
    # Conflicts:
    #	freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/FreeMarkerConstants.java
    #	freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
    #	freemarker-generator-cli/examples/data/accesslog/combined-access.log
    #	freemarker-generator-cli/examples/data/csv/contract.csv
    #	freemarker-generator-cli/examples/data/csv/dataframe.csv
    #	freemarker-generator-cli/examples/data/csv/excel-export-utf8.csv
    #	freemarker-generator-cli/examples/data/csv/locker-test-users.csv
    #	freemarker-generator-cli/examples/data/csv/sales-records.csv
    #	freemarker-generator-cli/examples/data/csv/transactions.csv
    #	freemarker-generator-cli/examples/data/csv/user.csv
    #	freemarker-generator-cli/examples/data/excel/test-multiple-sheets.xlsx
    #	freemarker-generator-cli/examples/data/excel/test.xls
    #	freemarker-generator-cli/examples/data/excel/test.xlsx
    #	freemarker-generator-cli/examples/data/ftl/nginx/nginx.conf.ftl
    #	freemarker-generator-cli/examples/data/ftl/nginx/nginx.env
    #	freemarker-generator-cli/examples/data/html/dependencies.html
    #	freemarker-generator-cli/examples/data/json/github-users.json
    #	freemarker-generator-cli/examples/data/json/swagger-spec.json
    #	freemarker-generator-cli/examples/data/properties/user_0001/user.properties
    #	freemarker-generator-cli/examples/data/properties/user_0002/user.properties
    #	freemarker-generator-cli/examples/data/properties/user_0003/user.properties
    #	freemarker-generator-cli/examples/data/properties/user_0004/user.properties
    #	freemarker-generator-cli/examples/data/template/application.properties
    #	freemarker-generator-cli/examples/data/template/nginx/nginx.conf.ftl
    #	freemarker-generator-cli/examples/data/xml/recipients.xml
    #	freemarker-generator-cli/examples/data/yaml/customer.yaml
    #	freemarker-generator-cli/examples/data/yaml/swagger-spec.yaml
    #	freemarker-generator-cli/examples/templates/accesslog/combined-access.ftl
    #	freemarker-generator-cli/examples/templates/csv/csv/gatling-user-credentials.ftl
    #	freemarker-generator-cli/examples/templates/csv/fo/transactions.ftl
    #	freemarker-generator-cli/examples/templates/csv/fo/transform.ftl
    #	freemarker-generator-cli/examples/templates/csv/html/transactions.ftl
    #	freemarker-generator-cli/examples/templates/csv/md/filter.ftl
    #	freemarker-generator-cli/examples/templates/csv/shell/curl.ftl
    #	freemarker-generator-cli/examples/templates/dataframe/example.ftl
    #	freemarker-generator-cli/examples/templates/dataframe/html/print.ftl
    #	freemarker-generator-cli/examples/templates/demo.ftl
    #	freemarker-generator-cli/examples/templates/excel/csv/custom.ftl
    #	freemarker-generator-cli/examples/templates/excel/dataframe/transform.ftl
    #	freemarker-generator-cli/examples/templates/html/csv/dependencies.ftl
    #	freemarker-generator-cli/examples/templates/json/csv/swagger-endpoints.ftl
    #	freemarker-generator-cli/examples/templates/json/dataframe/github-users.ftl
    #	freemarker-generator-cli/examples/templates/json/md/github-users.ftl
    #	freemarker-generator-cli/examples/templates/properties/csv/locker-test-users.ftl
    #	freemarker-generator-cli/examples/templates/tsv/fo/transactions.ftl
    #	freemarker-generator-cli/examples/templates/xml/txt/recipients.ftl
    #	freemarker-generator-cli/examples/templates/yaml/txt/transform.ftl
    #	freemarker-generator-cli/pom.xml
    #	freemarker-generator-cli/run-examples.bat
    #	freemarker-generator-cli/run-examples.sh
    #	freemarker-generator-cli/src/app/config/freemarker-generator.properties
    #	freemarker-generator-cli/src/app/examples/data/accesslog/combined-access.log
    #	freemarker-generator-cli/src/app/examples/data/csv/contract.csv
    #	freemarker-generator-cli/src/app/examples/data/csv/dataframe.csv
    #	freemarker-generator-cli/src/app/examples/data/csv/excel-export-utf8.csv
    #	freemarker-generator-cli/src/app/examples/data/csv/locker-test-users.csv
    #	freemarker-generator-cli/src/app/examples/data/csv/sales-records.csv
    #	freemarker-generator-cli/src/app/examples/data/csv/transactions.csv
    #	freemarker-generator-cli/src/app/examples/data/csv/user.csv
    #	freemarker-generator-cli/src/app/examples/data/excel/test-multiple-sheets.xlsx
    #	freemarker-generator-cli/src/app/examples/data/excel/test.xls
    #	freemarker-generator-cli/src/app/examples/data/excel/test.xlsx
    #	freemarker-generator-cli/src/app/examples/data/ftl/nginx/nginx.conf.ftl
    #	freemarker-generator-cli/src/app/examples/data/ftl/nginx/nginx.env
    #	freemarker-generator-cli/src/app/examples/data/html/dependencies.html
    #	freemarker-generator-cli/src/app/examples/data/json/github-users.json
    #	freemarker-generator-cli/src/app/examples/data/json/swagger-spec.json
    #	freemarker-generator-cli/src/app/examples/data/properties/user_0001/user.properties
    #	freemarker-generator-cli/src/app/examples/data/properties/user_0002/user.properties
    #	freemarker-generator-cli/src/app/examples/data/properties/user_0003/user.properties
    #	freemarker-generator-cli/src/app/examples/data/properties/user_0004/user.properties
    #	freemarker-generator-cli/src/app/examples/data/template/application.properties
    #	freemarker-generator-cli/src/app/examples/data/template/nginx/nginx.conf.ftl
    #	freemarker-generator-cli/src/app/examples/data/xml/recipients.xml
    #	freemarker-generator-cli/src/app/examples/data/yaml/customer.yaml
    #	freemarker-generator-cli/src/app/examples/data/yaml/swagger-spec.yaml
    #	freemarker-generator-cli/src/app/examples/templates/accesslog/combined-access.ftl
    #	freemarker-generator-cli/src/app/examples/templates/csv/csv/gatling-user-credentials.ftl
    #	freemarker-generator-cli/src/app/examples/templates/csv/fo/transactions.ftl
    #	freemarker-generator-cli/src/app/examples/templates/csv/fo/transform.ftl
    #	freemarker-generator-cli/src/app/examples/templates/csv/html/transactions.ftl
    #	freemarker-generator-cli/src/app/examples/templates/csv/md/filter.ftl
    #	freemarker-generator-cli/src/app/examples/templates/csv/shell/curl.ftl
    #	freemarker-generator-cli/src/app/examples/templates/dataframe/example.ftl
    #	freemarker-generator-cli/src/app/examples/templates/dataframe/html/print.ftl
    #	freemarker-generator-cli/src/app/examples/templates/demo.ftl
    #	freemarker-generator-cli/src/app/examples/templates/excel/csv/custom.ftl
    #	freemarker-generator-cli/src/app/examples/templates/excel/dataframe/transform.ftl
    #	freemarker-generator-cli/src/app/examples/templates/html/csv/dependencies.ftl
    #	freemarker-generator-cli/src/app/examples/templates/json/csv/swagger-endpoints.ftl
    #	freemarker-generator-cli/src/app/examples/templates/json/dataframe/github-users.ftl
    #	freemarker-generator-cli/src/app/examples/templates/json/md/github-users.ftl
    #	freemarker-generator-cli/src/app/examples/templates/properties/csv/locker-test-users.ftl
    #	freemarker-generator-cli/src/app/examples/templates/tsv/fo/transactions.ftl
    #	freemarker-generator-cli/src/app/examples/templates/xml/txt/recipients.ftl
    #	freemarker-generator-cli/src/app/examples/templates/yaml/txt/transform.ftl
    #	freemarker-generator-cli/src/app/scripts/run-examples.bat
    #	freemarker-generator-cli/src/app/scripts/run-examples.sh
    #	freemarker-generator-cli/src/app/templates/freemarker-generator/cat.ftl
    #	freemarker-generator-cli/src/app/templates/freemarker-generator/csv/csv/transform.ftl
    #	freemarker-generator-cli/src/app/templates/freemarker-generator/csv/html/transform.ftl
    #	freemarker-generator-cli/src/app/templates/freemarker-generator/csv/md/transform.ftl
    #	freemarker-generator-cli/src/app/templates/freemarker-generator/excel/csv/transform.ftl
    #	freemarker-generator-cli/src/app/templates/freemarker-generator/excel/html/transform.ftl
    #	freemarker-generator-cli/src/app/templates/freemarker-generator/excel/md/transform.ftl
    #	freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl
    #	freemarker-generator-cli/src/app/templates/freemarker-generator/json/yaml/transform.ftl
    #	freemarker-generator-cli/src/app/templates/freemarker-generator/lib/commons-csv.ftl
    #	freemarker-generator-cli/src/app/templates/freemarker-generator/yaml/json/transform.ftl
    #	freemarker-generator-cli/src/examples/data/accesslog/combined-access.log
    #	freemarker-generator-cli/src/examples/data/csv/contract.csv
    #	freemarker-generator-cli/src/examples/data/csv/dataframe.csv
    #	freemarker-generator-cli/src/examples/data/csv/excel-export-utf8.csv
    #	freemarker-generator-cli/src/examples/data/csv/locker-test-users.csv
    #	freemarker-generator-cli/src/examples/data/csv/sales-records.csv
    #	freemarker-generator-cli/src/examples/data/csv/transactions.csv
    #	freemarker-generator-cli/src/examples/data/csv/user.csv
    #	freemarker-generator-cli/src/examples/data/excel/test-multiple-sheets.xlsx
    #	freemarker-generator-cli/src/examples/data/excel/test.xls
    #	freemarker-generator-cli/src/examples/data/excel/test.xlsx
    #	freemarker-generator-cli/src/examples/data/ftl/nginx/nginx.conf.ftl
    #	freemarker-generator-cli/src/examples/data/ftl/nginx/nginx.env
    #	freemarker-generator-cli/src/examples/data/html/dependencies.html
    #	freemarker-generator-cli/src/examples/data/json/github-users.json
    #	freemarker-generator-cli/src/examples/data/json/swagger-spec.json
    #	freemarker-generator-cli/src/examples/data/properties/user_0001/user.properties
    #	freemarker-generator-cli/src/examples/data/properties/user_0002/user.properties
    #	freemarker-generator-cli/src/examples/data/properties/user_0003/user.properties
    #	freemarker-generator-cli/src/examples/data/properties/user_0004/user.properties
    #	freemarker-generator-cli/src/examples/data/template/application.properties
    #	freemarker-generator-cli/src/examples/data/template/nginx/nginx.conf.ftl
    #	freemarker-generator-cli/src/examples/data/xml/recipients.xml
    #	freemarker-generator-cli/src/examples/data/yaml/customer.yaml
    #	freemarker-generator-cli/src/examples/data/yaml/swagger-spec.yaml
    #	freemarker-generator-cli/src/examples/templates/accesslog/combined-access.ftl
    #	freemarker-generator-cli/src/examples/templates/csv/csv/gatling-user-credentials.ftl
    #	freemarker-generator-cli/src/examples/templates/csv/fo/transactions.ftl
    #	freemarker-generator-cli/src/examples/templates/csv/fo/transform.ftl
    #	freemarker-generator-cli/src/examples/templates/csv/html/transactions.ftl
    #	freemarker-generator-cli/src/examples/templates/csv/md/filter.ftl
    #	freemarker-generator-cli/src/examples/templates/csv/shell/curl.ftl
    #	freemarker-generator-cli/src/examples/templates/dataframe/example.ftl
    #	freemarker-generator-cli/src/examples/templates/dataframe/html/print.ftl
    #	freemarker-generator-cli/src/examples/templates/demo.ftl
    #	freemarker-generator-cli/src/examples/templates/excel/csv/custom.ftl
    #	freemarker-generator-cli/src/examples/templates/excel/dataframe/transform.ftl
    #	freemarker-generator-cli/src/examples/templates/html/csv/dependencies.ftl
    #	freemarker-generator-cli/src/examples/templates/json/csv/swagger-endpoints.ftl
    #	freemarker-generator-cli/src/examples/templates/json/dataframe/github-users.ftl
    #	freemarker-generator-cli/src/examples/templates/json/md/github-users.ftl
    #	freemarker-generator-cli/src/examples/templates/properties/csv/locker-test-users.ftl
    #	freemarker-generator-cli/src/examples/templates/tsv/fo/transactions.ftl
    #	freemarker-generator-cli/src/examples/templates/xml/txt/recipients.ftl
    #	freemarker-generator-cli/src/examples/templates/yaml/txt/transform.ftl
    #	freemarker-generator-cli/src/main/config/freemarker-cli.properties
    #	freemarker-generator-cli/src/main/config/freemarker-generator.properties
    #	freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/Main.java
    #	freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/TemplateDirectorySupplier.java
    #	freemarker-generator-cli/src/scripts/run-examples.bat
    #	freemarker-generator-cli/src/scripts/run-examples.sh
    #	freemarker-generator-cli/src/templates/freemarker-generator/cat.ftl
    #	freemarker-generator-cli/src/templates/freemarker-generator/csv/csv/transform.ftl
    #	freemarker-generator-cli/src/templates/freemarker-generator/csv/html/transform.ftl
    #	freemarker-generator-cli/src/templates/freemarker-generator/csv/md/transform.ftl
    #	freemarker-generator-cli/src/templates/freemarker-generator/excel/csv/transform.ftl
    #	freemarker-generator-cli/src/templates/freemarker-generator/excel/html/transform.ftl
    #	freemarker-generator-cli/src/templates/freemarker-generator/excel/md/transform.ftl
    #	freemarker-generator-cli/src/templates/freemarker-generator/info.ftl
    #	freemarker-generator-cli/src/templates/freemarker-generator/json/yaml/transform.ftl
    #	freemarker-generator-cli/src/templates/freemarker-generator/lib/commons-csv.ftl
    #	freemarker-generator-cli/src/templates/freemarker-generator/yaml/json/transform.ftl
    #	freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/AbstractMainTest.java
    #	freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
    #	freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/TemplateLoadingTest.java
    #	freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/TemplateDirectorySupplierTest.java
    #	freemarker-generator-cli/templates/cat.ftl
    #	freemarker-generator-cli/templates/csv/csv/transform.ftl
    #	freemarker-generator-cli/templates/csv/html/transform.ftl
    #	freemarker-generator-cli/templates/csv/md/transform.ftl
    #	freemarker-generator-cli/templates/excel/csv/transform.ftl
    #	freemarker-generator-cli/templates/excel/html/transform.ftl
    #	freemarker-generator-cli/templates/excel/md/transform.ftl
    #	freemarker-generator-cli/templates/info.ftl
    #	freemarker-generator-cli/templates/json/yaml/transform.ftl
    #	freemarker-generator-cli/templates/lib/commons-csv.ftl
    #	freemarker-generator-cli/templates/yaml/json/transform.ftl

 .../generator/base/FreeMarkerConstants.java        |  19 ++++-
 .../template/TemplateTransformationsBuilder.java   |   1 -
 .../template/TemplateSourceFactoryTest.java        |   2 +-
 freemarker-generator-cli/CHANGELOG.md              |   3 +-
 freemarker-generator-cli/pom.xml                   |  12 +--
 .../config/freemarker-generator.properties         |   0
 .../examples/data/accesslog/combined-access.log    |   0
 .../src/{ => app}/examples/data/csv/contract.csv   |   0
 .../src/{ => app}/examples/data/csv/dataframe.csv  |   0
 .../examples/data/csv/excel-export-utf8.csv        |   0
 .../examples/data/csv/locker-test-users.csv        |   0
 .../{ => app}/examples/data/csv/sales-records.csv  |   0
 .../{ => app}/examples/data/csv/transactions.csv   |   0
 .../src/{ => app}/examples/data/csv/user.csv       |   0
 .../examples/data/excel/test-multiple-sheets.xlsx  | Bin
 .../src/{ => app}/examples/data/excel/test.xls     | Bin
 .../src/{ => app}/examples/data/excel/test.xlsx    | Bin
 .../examples/data/ftl/nginx/nginx.conf.ftl         |   0
 .../{ => app}/examples/data/ftl/nginx/nginx.env    |   0
 .../{ => app}/examples/data/html/dependencies.html |   0
 .../{ => app}/examples/data/json/github-users.json |   0
 .../{ => app}/examples/data/json/swagger-spec.json |   0
 .../data/properties/user_0001/user.properties      |   0
 .../data/properties/user_0002/user.properties      |   0
 .../data/properties/user_0003/user.properties      |   0
 .../data/properties/user_0004/user.properties      |   0
 .../examples/data/template/application.properties  |   0
 .../examples/data/template/nginx/nginx.conf.ftl    |   0
 .../src/{ => app}/examples/data/xml/recipients.xml |   0
 .../src/{ => app}/examples/data/yaml/customer.yaml |   0
 .../{ => app}/examples/data/yaml/swagger-spec.yaml |   0
 .../templates/accesslog/combined-access.ftl        |   0
 .../templates/csv/csv/gatling-user-credentials.ftl |   0
 .../examples/templates/csv/fo/transactions.ftl     |   0
 .../examples/templates/csv/fo/transform.ftl        |   0
 .../examples/templates/csv/html/transactions.ftl   |   0
 .../{ => app}/examples/templates/csv/md/filter.ftl |   0
 .../examples/templates/csv/shell/curl.ftl          |   0
 .../examples/templates/dataframe/example.ftl       |   0
 .../examples/templates/dataframe/html/print.ftl    |   0
 .../src/{ => app}/examples/templates/demo.ftl      |   0
 .../examples/templates/excel/csv/custom.ftl        |   0
 .../templates/excel/dataframe/transform.ftl        |   0
 .../examples/templates/html/csv/dependencies.ftl   |   0
 .../examples/templates/html/txt/licence.ftl        |   0
 .../templates/json/csv/swagger-endpoints.ftl       |   0
 .../templates/json/dataframe/github-users.ftl      |   0
 .../examples/templates/json/md/github-users.ftl    |   0
 .../templates/properties/csv/locker-test-users.ftl |   0
 .../examples/templates/tsv/fo/transactions.ftl     |   0
 .../examples/templates/xml/txt/recipients.ftl      |   0
 .../examples/templates/yaml/txt/transform.ftl      |   0
 .../src/{ => app}/scripts/run-examples.bat         |   0
 .../src/{ => app}/scripts/run-examples.sh          |   0
 .../templates/freemarker-generator/cat.ftl         |   0
 .../freemarker-generator/csv/csv/transform.ftl     |   0
 .../freemarker-generator/csv/html/transform.ftl    |   0
 .../freemarker-generator/csv/md/transform.ftl      |   0
 .../freemarker-generator/excel/csv/transform.ftl   |   0
 .../freemarker-generator/excel/html/transform.ftl  |   0
 .../freemarker-generator/excel/md/transform.ftl    |   0
 .../templates/freemarker-generator/info.ftl        |   0
 .../freemarker-generator/json/yaml/transform.ftl   |   0
 .../freemarker-generator/lib/commons-csv.ftl       |   0
 .../freemarker-generator/yaml/json/transform.ftl   |   0
 .../org/apache/freemarker/generator/cli/Main.java  |  26 ++++++-
 .../cli/config/TemplateDirectorySupplier.java      |  48 ++++++------
 .../freemarker/generator/cli/AbstractMainTest.java |  11 ++-
 .../freemarker/generator/cli/ExamplesTest.java     |  84 ++++++++++-----------
 .../generator/cli/TemplateLoadingTest.java         |   2 +-
 .../cli/config/TemplateDirectorySupplierTest.java  |   4 +-
 freemarker-generator-website/pom.xml               |  15 +---
 72 files changed, 129 insertions(+), 98 deletions(-)

diff --cc freemarker-generator-website/pom.xml
index b199bb8,0000000..6f927b2
mode 100644,000000..100644
--- a/freemarker-generator-website/pom.xml
+++ b/freemarker-generator-website/pom.xml
@@@ -1,154 -1,0 +1,145 @@@
 +<?xml version="1.0" encoding="UTF-8"?>
 +<!--
 +   Licensed to the Apache Software Foundation (ASF) under one or more
 +   contributor license agreements.  See the NOTICE file distributed with
 +   this work for additional information regarding copyright ownership.
 +   The ASF licenses this file to You under the Apache License, Version 2.0
 +   (the "License"); you may not use this file except in compliance with
 +   the License.  You may obtain a copy of the License at
 +
 +       http://www.apache.org/licenses/LICENSE-2.0
 +
 +   Unless required by applicable law or agreed to in writing, software
 +   distributed under the License is distributed on an "AS IS" BASIS,
 +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +   See the License for the specific language governing permissions and
 +   limitations under the License.
 +-->
 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 +
 +    <modelVersion>4.0.0</modelVersion>
 +
 +    <parent>
 +        <groupId>org.apache.freemarker.generator</groupId>
 +        <artifactId>freemarker-generator</artifactId>
 +        <version>0.1.0-SNAPSHOT</version>
 +    </parent>
 +
 +    <artifactId>freemarker-generator-website</artifactId>
 +    <name>Website</name>
 +    <description>Apache FreeMarker Generator Website</description>
 +
 +    <properties>
 +        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 +        <maven.compiler.source>1.8</maven.compiler.source>
 +        <maven.compiler.target>1.8</maven.compiler.target>
 +        
 +        <websiteOutputDirectory>${project.build.directory}/website</websiteOutputDirectory>
 +        <freemarkerGeneratorAppHome>${project.basedir}/../freemarker-generator-cli/target/appassembler</freemarkerGeneratorAppHome>
 +        <docgenInsertedOutputsDirectory>${project.build.directory}/docgen-insertable-outputs</docgenInsertedOutputsDirectory>
 +        <docgenInsertedExampleTemplatesDirectory>${freemarkerGeneratorAppHome}/examples/templates</docgenInsertedExampleTemplatesDirectory>
 +        <docgenInsertedExampleOutputDirectory>${freemarkerGeneratorAppHome}/target/out</docgenInsertedExampleOutputDirectory>
 +        <docgenInsertedTemplatesDirectory>${freemarkerGeneratorAppHome}/templates</docgenInsertedTemplatesDirectory>
 +    </properties>
 +
 +    <dependencies>
 +        <dependency>
 +            <groupId>org.apache.freemarker.generator</groupId>
 +            <artifactId>freemarker-generator-cli</artifactId>
 +            <version>${project.version}</version>
 +        </dependency>
 +    </dependencies>
 +
 +    <build>
 +        <plugins>
 +            <plugin>
 +                <groupId>org.codehaus.mojo</groupId>
 +                <artifactId>exec-maven-plugin</artifactId>
 +                <executions>
 +                    <execution>
 +                        <id>generateCliHelp</id>
 +                        <phase>package</phase>
 +                        <goals>
 +                          <goal>exec</goal>
 +                        </goals>
 +                        <configuration>   
 +                          <executable>java</executable>
 +                          <arguments>
 +                              <argument>-classpath</argument>
 +                              <classpath/>
 +
 +                              <!-- Setting up things without calling the launcher scripts in app/bin: -->
-                               <!-- TODO in freemarker-generator-cli: Ideally, only setting -Dapp.home should be enough. -->
-                               <argument>org.apache.freemarker.generator.cli.Main</argument>
-                               <argument>--config</argument>
-                               <argument>${freemarkerGeneratorAppHome}/config/freemarker-generator.properties</argument>
-                               <argument>--template-dir</argument>
-                               <argument>${freemarkerGeneratorAppHome}/templates</argument>
++                              <argument>-Dapp.home=${freemarkerGeneratorAppHome}</argument>
 +
 +                              <argument>org.apache.freemarker.generator.cli.Main</argument>
 +                              <argument>--help</argument>
 +                          </arguments>
 +                          <outputFile>${docgenInsertedOutputsDirectory}/cli-help-output.txt</outputFile>
 +                        </configuration>
 +                    </execution>
 +                    <execution>
 +                        <id>generateInfoTemplateOutput</id>
 +                        <phase>package</phase>
 +                        <goals>
 +                          <goal>exec</goal>
 +                        </goals>
 +                        <configuration>   
 +                          <executable>java</executable>
 +                          <arguments>
 +                              <argument>-classpath</argument>
 +                              <classpath/>
 +
 +                              <!-- Setting up things without calling the launcher scripts in app/bin: -->
-                               <!-- TODO in freemarker-generator-cli: Ideally, only setting -Dapp.home should be enough. -->
-                               <argument>org.apache.freemarker.generator.cli.Main</argument>
-                               <argument>--config</argument>
-                               <argument>${freemarkerGeneratorAppHome}/config/freemarker-generator.properties</argument>
-                               <argument>--template-dir</argument>
-                               <argument>${freemarkerGeneratorAppHome}/templates</argument>
++                              <argument>-Dapp.home=${freemarkerGeneratorAppHome}</argument>
 +
++                              <argument>org.apache.freemarker.generator.cli.Main</argument>
 +                              <argument>-t</argument>
 +                              <argument>freemarker-generator/info.ftl</argument>
 +                          </arguments>
 +                          <outputFile>${docgenInsertedOutputsDirectory}/info-template-output.txt</outputFile>
 +                        </configuration>
 +                    </execution>
 +                </executions>
 +            </plugin>
 +            <plugin>
 +                <groupId>org.apache.freemarker.docgen</groupId>
 +                <artifactId>freemarker-docgen-maven</artifactId>
 +                <version>0.0.2-SNAPSHOT</version>
 +                <executions>
 +                    <execution>
 +                        <id>docgen-transform</id>
 +                        <phase>package</phase>
 +                        <goals>
 +                            <goal>transform</goal>
 +                        </goals>
 +                    </execution>
 +                </executions>
 +                <configuration>
 +                    <sourceDirectory>src/main/docgen</sourceDirectory>
 +                    <outputDirectory>${websiteOutputDirectory}</outputDirectory>
 +                    <insertableFiles>
 +                        <outputs>${docgenInsertedOutputsDirectory}/**</outputs>
 +                        <templates>${docgenInsertedTemplatesDirectory}/**</templates>
 +                        <exampleTemplates>${docgenInsertedExampleTemplatesDirectory}/**</exampleTemplates>
 +                        <exampleOutputs>${docgenInsertedExampleOutputDirectory}/**</exampleOutputs>
 +                    </insertableFiles>
 +                    <customVariables>
 +                      <version>${project.version}</version>
 +                    </customVariables>
 +                    <!-- TODO set it back to false before release -->
 +                    <offline>true</offline>
 +                </configuration>
 +            </plugin>
 +        </plugins>
 +    </build>
 +    
 +    <repositories>
 +        <!-- This is need this only when we have freemarker-docgen-maven SNAPSHOT dependency -->
 +        <repository>
 +            <id>apache-snapshot-repository</id>
 +            <url>https://repository.apache.org/content/repositories/snapshots/</url>
 +            <releases><enabled>false</enabled></releases>
 +            <snapshots><enabled>true</enabled></snapshots>
 +        </repository>
 +    </repositories>
 +</project>


[freemarker-generator] 01/02: Continued working on porting the .md documentation to XDocBook.

Posted by dd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ddekany pushed a commit to branch FREEMARKER-154
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git

commit 641d82c28a95bcae87779a3a36d6c442b2c50c06
Author: ddekany <dd...@apache.org>
AuthorDate: Thu Aug 27 00:59:57 2020 +0200

    Continued working on porting the .md documentation to XDocBook.
---
 .../src/main/docgen/book.xml                       | 503 +++++++++++++++++++++
 1 file changed, 503 insertions(+)

diff --git a/freemarker-generator-website/src/main/docgen/book.xml b/freemarker-generator-website/src/main/docgen/book.xml
index a2a5278..fa9005f 100644
--- a/freemarker-generator-website/src/main/docgen/book.xml
+++ b/freemarker-generator-website/src/main/docgen/book.xml
@@ -284,6 +284,509 @@ version=[docgen.customVariables.version], time=2020-06-25T21:48:02+0200, commit=
 
         <programlisting role="output">[docgen.insertFile "@exampleOutputs/recipients.txt"]</programlisting>
       </section>
+
+      <section>
+        <title>Transform JSON To CSV</title>
+
+        <para>One day I was asked a to prepare a CSV files containing REST
+        endpoints described by Swagger - technically this is a JSON to CSV
+        transformation. Of course I could create that CSV manually but writing
+        a FTL template doing that was simply more fun and saves time in the
+        future.</para>
+
+        <remark>Certainly many will find the story telling tone strange.
+        Especially if we assume that others will contribute to this (who's "I"
+        then). We should just state what this is an example of, tersely. This
+        also applies to other parts.</remark>
+
+        <para><remark>Below has no example source code to include. As we don't
+        provide backward compatibility yet, we better stick to runnable
+        examples, or else they will become outdated here.</remark></para>
+
+        <programlisting>&lt;#ftl output_format="plainText" strip_text="true"&gt;
+&lt;#assign json = tools.jsonpath.parse(dataSources?values[0])&gt;
+&lt;#assign basePath = json.read("$.basePath")&gt;
+&lt;#assign paths = json.read("$.paths")&gt;
+
+&lt;#compress&gt;
+    ENDPOINT;METHOD;CONSUMES;PRODUCES;SUMMARY;DESCRIPTION
+    &lt;#list paths as endpoint,metadata&gt;
+        &lt;#assign relative_url = basePath + endpoint&gt;
+        &lt;#assign methods = metadata?keys&gt;
+        &lt;#list methods as method&gt;
+            &lt;#assign summary = sanitize(paths[endpoint][method]["summary"]!"")&gt;
+            &lt;#assign description = sanitize(paths[endpoint][method]["description"]!"")&gt;
+            &lt;#assign consumes = join(paths[endpoint][method]["consumes"]![])&gt;
+            &lt;#assign produces = join(paths[endpoint][method]["produces"]![])&gt;
+            ${relative_url};${method?upper_case};${consumes};${produces};${summary};${description}
+        &lt;/#list&gt;
+    &lt;/#list&gt;
+&lt;/#compress&gt;
+${'\n'}
+
+&lt;#function sanitize str&gt;
+    &lt;#return (((str?replace(";", ","))?replace("(\\n)+", "",'r')))?truncate(250)&gt;
+&lt;/#function&gt;
+
+&lt;#function join list&gt;
+    &lt;#if list?has_content&gt;
+        &lt;#return list?join(", ")&gt;
+    &lt;#else&gt;
+        &lt;#return ""&gt;
+    &lt;/#if&gt;
+&lt;/#function&gt;</programlisting>
+
+        <para>Invoking the FTL template</para>
+
+        <programlisting>&gt; freemarker-generator -t examples/templates/json/csv/swagger-endpoints.ftl examples/data/json/swagger-spec.json</programlisting>
+
+        <para>gives you</para>
+
+        <programlisting role="output">ENDPOINT;METHOD;CONSUMES;PRODUCES;SUMMARY;DESCRIPTION
+/api/pets;GET;;;;Returns all pets from the system that the user has access to
+/api/pets;POST;;;;Creates a new pet in the store. Duplicates are allowed
+/api/pets/{id};GET;;;;Returns a user based on a single ID, if the user does not have access to the pet
+/api/pets/{id};DELETE;;;;Deletes a single pet based on the ID supplied</programlisting>
+      </section>
+
+      <section>
+        <title>Transforming Excel Documents</title>
+
+        <para>Another day my project management asked me to create a CSV
+        configuration file based on an Excel documents - as usual manual
+        copying was not an option due to required data cleanup and data
+        transformation. So I thought about Apache POI which support XLS and
+        XLSX documents - integration of Apache POI was a breeze but the
+        resulting code was not particularly useful example. So a more generic
+        transformation was provided to show the transformation of Excel
+        documents.</para>
+
+        <programlisting>&gt; freemarker-generator -t freemarker-generator/excel/html/transform.ftl examples/data/excel/test.xls
+&gt; freemarker-generator -t freemarker-generator/excel/html/transform.ftl examples/data/excel/test.xlsx
+&gt; freemarker-generator -t freemarker-generator/excel/html/transform.ftl examples/data/excel/test-multiple-sheets.xlsx
+&gt; freemarker-generator -t freemarker-generator/excel/md/transform.ftl examples/data/excel/test-multiple-sheets.xlsx
+</programlisting>
+
+        <para>The provided FTL transforms an Excel into a HTML document
+        supporting multiple Excel sheets:</para>
+
+        <programlisting role="template">[docgen.insertFile "@templates/freemarker-generator/excel/html/transform.ftl"]</programlisting>
+
+        <para>but the result looks reasonable</para>
+
+        <mediaobject>
+          <imageobject>
+            <imagedata fileref="images/examples/excel-to-html.png"
+                       width="100%"/>
+          </imageobject>
+        </mediaobject>
+      </section>
+
+      <section>
+        <title>Transform Property Files To CSV</title>
+
+        <para>In this sample we transform all property files found in a
+        directory (recursive search using include pattern) to a CSV
+        file.</para>
+
+        <programlisting>&gt; freemarker-generator --data-source-include *.properties -t examples/templates/properties/csv/locker-test-users.ftl examples/data/properties</programlisting>
+
+        <programlisting role="output">[docgen.insertFile "@exampleOutputs/locker-test-users.csv"]</programlisting>
+
+        <para>The FTL uses a couple of interesting features:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>We process a list of property files</para>
+          </listitem>
+
+          <listitem>
+            <para>The <literal>strip_text</literal> and
+            <literal>compress</literal> strips any white-spaces and
+            line-breaks from the output so we can create a proper CSV
+            file</para>
+          </listitem>
+
+          <listitem>
+            <para>We use FTL functions to extract the
+            <literal>tenant</literal> and <literal>site</literal>, e.g.
+            <literal>extractTenant</literal></para>
+          </listitem>
+
+          <listitem>
+            <para>We add a manual line break using
+            <literal>${'\n'}</literal></para>
+
+            <programlisting role="template">[docgen.insertFile "@exampleTemplates/properties/csv/locker-test-users.ftl"]</programlisting>
+          </listitem>
+        </itemizedlist>
+      </section>
+
+      <section>
+        <title>Transform CSV To XML-FO</title>
+
+        <para>For a POC (proof of concept) I created a sample transformation
+        from CSV to XML-FO in order to create a PDF document using <link
+        xlink:href="https://xmlgraphics.apache.org/fop">Apache FOP</link>
+        using the following template file:</para>
+
+        <programlisting role="template">[docgen.insertFile "@exampleTemplates/csv/fo/transform.ftl"]</programlisting>
+
+        <para>In order to create the PDF you need to execute the following
+        commands (assuming that you have Apache FOP installed):</para>
+
+        <programlisting>&gt; freemarker-generator -t examples/templates/csv/fo/transform.ftl examples/data/csv/locker-test-users.csv &gt; sample.fo
+&gt; fop -fo sample.fo sample.pdf
+Dec 29, 2018 10:24:30 PM org.apache.fop.events.LoggingEventListener processEvent
+WARNING: Font "Symbol,normal,700" not found. Substituting with "Symbol,normal,400".
+Dec 29, 2018 10:24:30 PM org.apache.fop.events.LoggingEventListener processEvent
+WARNING: Font "ZapfDingbats,normal,700" not found. Substituting with "ZapfDingbats,normal,400".
+Dec 29, 2018 10:24:30 PM org.apache.fop.events.LoggingEventListener processEvent
+INFO: Rendered page #1.</programlisting>
+
+        <para>The result does not look very impressive but it is a PDF
+        :-)</para>
+
+        <mediaobject>
+          <imageobject>
+            <imagedata fileref="images/examples/locker-test-users-pdf.png"
+                       width="100%"/>
+          </imageobject>
+        </mediaobject>
+
+        <para>Further along the line of the POC we converted a transaction
+        export from CSV to PDF using Apache FOP:</para>
+
+        <programlisting role="template">[docgen.insertFile "@exampleTemplates/csv/fo/transactions.ftl"]</programlisting>
+
+        <programlisting>&gt; freemarker-generator -t examples/templates/csv/fo/transactions.ftl examples/data/csv/transactions.csv &gt; transactions.fo
+&gt; fop -fo transactions.fo transactions.pdf
+Jan 16, 2019 11:15:21 PM org.apache.fop.events.LoggingEventListener processEvent
+WARNING: Font "Symbol,normal,700" not found. Substituting with "Symbol,normal,400".
+Jan 16, 2019 11:15:21 PM org.apache.fop.events.LoggingEventListener processEvent
+WARNING: Font "ZapfDingbats,normal,700" not found. Substituting with "ZapfDingbats,normal,400".
+Jan 16, 2019 11:15:21 PM org.apache.fop.events.LoggingEventListener processEvent
+WARNING: The contents of fo:block line 1 exceed the available area in the inline-progression direction by 11027 millipoints. (See position 1519:51)
+Jan 16, 2019 11:15:22 PM org.apache.fop.events.LoggingEventListener processEvent
+INFO: Rendered page #1.
+Jan 16, 2019 11:15:22 PM org.apache.fop.events.LoggingEventListener processEvent
+INFO: Rendered page #2.</programlisting>
+
+        <mediaobject>
+          <imageobject>
+            <imagedata fileref="images/examples/transactions.png" width="100%"/>
+          </imageobject>
+        </mediaobject>
+      </section>
+
+      <section>
+        <title>Transforming HTML To CSV</title>
+
+        <para>Recently I got the rather unusual question how to determine the
+        list of dependencies of an application - one easy way is the Maven
+        "dependencies.html" but this is unstructured data. Having said that
+        the Jsoup library is perfectly able to parse most real-life HTML and
+        provides a DOM model.</para>
+
+        <programlisting role="template">[docgen.insertFile "@exampleTemplates/html/csv/dependencies.ftl"]</programlisting>
+
+        <para>Your dependencies as CSV can be generated as shown below:</para>
+
+        <programlisting>&gt; freemarker-generator -t examples/templates/html/csv/dependencies.ftl examples/data/html/dependencies.html</programlisting>
+
+        <programlisting role="output">[docgen.insertFile "@exampleOutputs/dependencies.csv"]</programlisting>
+      </section>
+
+      <section>
+        <title>Transform CSV To Shell Script</title>
+
+        <para>For a customer project we wanted to record REST request /
+        responses using WireMock - really quick and dirty. So we decided to
+        avoid any sophisticated test tool but generate a ready-to-use shell
+        script executing cURL commands. It turned out that handling of dollar
+        signs is a bit tricky.</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>Using <literal>noparse</literal> directive to disable
+            parsing of dollar signs</para>
+          </listitem>
+
+          <listitem>
+            <para>Using <literal>${r"${MY_BASE_URL}"</literal> to generate
+            output with dollar signs</para>
+          </listitem>
+        </itemizedlist>
+
+        <para>and the final FTL is found below:</para>
+
+        <programlisting role="template">[docgen.insertFile "@exampleTemplates/csv/shell/curl.ftl"]</programlisting>
+
+        <para>Rendering the FreeMarker template:</para>
+
+        <programlisting>&gt; freemarker-generator -t examples/templates/csv/shell/curl.ftl examples/data/csv/user.csv</programlisting>
+
+        <para>generates the following shell script:</para>
+
+        <programlisting role="output">[docgen.insertFile "@exampleOutputs/curl.sh"]</programlisting>
+
+        <para>Looks a bit complicated but lets dissect the things</para>
+
+        <itemizedlist>
+          <listitem>
+            <para><literal>date "+%FT%H:%M:%S" | tr -d '\n'</literal> creates
+            a timestamp and removes the line feed</para>
+          </listitem>
+
+          <listitem>
+            <para><literal>curl --write-out</literal> allows to print runtime
+            data (see <link
+            xlink:href="https://ec.haxx.se/usingcurl-writeout.html">https://ec.haxx.se/usingcurl-writeout.html</link>)</para>
+          </listitem>
+        </itemizedlist>
+
+        <para><remark>Shell/curl specifics are irrelevant, as far as
+        FreeMarker Generator is concerned. We should remove the above
+        explanation.</remark></para>
+
+        <para><remark>What specialty with generating shell scripts we want to
+        demonstrate in this example? Is it escaping ${...} maybe? That belongs
+        to the FreeMarke documentation. But if we still want to show that
+        here, I would recommend using the [=...] interpolation syntax when
+        generating something that already uses ${...}.</remark></para>
+
+        <para>Executing the result shell script creates the following output
+        (which is a nice CSV for further processing):</para>
+
+        <programlisting>time,user,status,duration,size
+2019-09-27T21:02:52,AAAAAAA,200,0.522473,206
+2019-09-27T21:02:53,BBBBBBB,200,0.498093,206
+2019-09-27T21:02:54,CCCCCCC,200,0.529013,206
+2019-09-27T21:02:54,DDDDDDD,200,0.528268,206</programlisting>
+
+        <remark>Can't generate the above...</remark>
+      </section>
+
+      <section>
+        <title>Unleashing The Power Of Grok</title>
+
+        <para>Think of <literal>Grok</literal> as modular regular expressions
+        with a pre-defined functionality to parse access logs or any other
+        data where you can't comprehend the regular expression any longer, one
+        very simple example is <literal>QUOTEDSTRING</literal>.</para>
+
+        <programlisting>QUOTEDSTRING (?&gt;(?&lt;!\\)(?&gt;"(?&gt;\\.|[^\\"]+)+"|""|(?&gt;'(?&gt;\\.|[^\\']+)+')|''|(?&gt;`(?&gt;\\.|[^\\`]+)+`)|``))</programlisting>
+
+        <para>And with <literal>Grok</literal> the
+        <literal>QUOTEDSTRING</literal> is just a building block for an even
+        more complex regular expression such as
+        <literal>COMBINEDAPACHELOG</literal>.</para>
+
+        <programlisting>&gt; bin/freemarker-generator -t examples/templates/accesslog/combined-access.ftl examples/data/accesslog/combined-access.log</programlisting>
+
+        <para>which gives you the following output:</para>
+
+        <programlisting role="output">[docgen.insertFile "@exampleOutputs/combined-access.log.txt"]</programlisting>
+
+        <para>using the following FreeMarker template:</para>
+
+        <programlisting>[docgen.insertFile "@exampleTemplates/accesslog/combined-access.ftl"]</programlisting>
+
+        <para>While this looks small and tidy there are some nifty
+        features:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para><literal>tools.grok.compile("%{COMBINEDAPACHELOG}")</literal>
+            builds the <literal>Grok</literal> instance to parse access logs
+            in <literal>Combined Format</literal></para>
+          </listitem>
+
+          <listitem>
+            <para>The data source is streamed line by line and not loaded into
+            memory in one piece</para>
+          </listitem>
+
+          <listitem>
+            <para>This also works for using <literal>stdin</literal> so are
+            able to parse GB of access log or other files</para>
+          </listitem>
+        </itemizedlist>
+      </section>
+
+      <section>
+        <title>Executing Arbitrary Commands</title>
+
+        <para>Using Apache Commons Exec allows to execute arbitrary commands -
+        nice but dangerous. It was recently quite useful to to invoke AWS CLI
+        to generate a Confluence page about the overall setup of our AWS
+        accounts.</para>
+
+        <para>A few snippets to illustrate the points:</para>
+
+        <programlisting role="template">&lt;#ftl output_format="plainText" strip_whitespace="true"&gt;
+&lt;#assign profile = tools.system.getProperty("profile", "default")&gt;
+&lt;#assign ec2Instances = ec2Instances()/&gt;
+
+h3. AWS EC2 Instance
+&lt;@printEc2Instances ec2Instances/&gt;
+
+&lt;#function ec2Instances&gt;
+    &lt;#local json = awsCliToJson("aws ec2 describe-instances --profile ${profile}")&gt;
+    &lt;#local instances = json.read("$.Reservations[*].Instances[*]")&gt;
+    &lt;#return instances?sort_by(['InstanceType'])&gt;
+&lt;/#function&gt;
+
+&lt;#function awsCliToJson line&gt;
+    &lt;#local output = tools.exec.execute(line)&gt;
+    &lt;#return tools.jsonpath.parse(output)&gt;
+&lt;/#function&gt;
+
+&lt;#function getAwsEc2InstanceTag tags name&gt;
+    &lt;#return tags?filter(x -&gt; x["Key"] == name)?first["Value"]!""&gt;
+&lt;/#function&gt;
+
+&lt;#macro printEc2Instances ec2Instances&gt;
+    &lt;#compress&gt;
+        || NAME || INSTANCE_TYPE || VCPUS || STATE || PRIVATE_IP_ADDRESS ||
+        &lt;#list ec2Instances as ec2Instance&gt;
+            &lt;#assign instanceType = ec2Instance["InstanceType"]&gt;
+            &lt;#assign arn = ec2Instance["IamInstanceProfile"]["Arn"]&gt;
+            &lt;#assign privateIpAddress = ec2Instance["PrivateIpAddress"]&gt;
+            &lt;#assign state = ec2Instance["State"]["Name"]&gt;
+            &lt;#assign launchTime = ec2Instance["LaunchTime"]&gt;
+
+            &lt;#assign coreCount = ec2Instance["CpuOptions"]["CoreCount"]?number&gt;
+            &lt;#assign threadsPerCore = ec2Instance["CpuOptions"]["ThreadsPerCore"]?number&gt;
+            &lt;#assign nrOfVirtualCpus = coreCount * threadsPerCore&gt;
+
+            &lt;#assign tags = ec2Instance["Tags"]/&gt;
+            &lt;#assign awsCloudFormationStackId = getAwsEc2InstanceTag(tags, "aws:cloudformation:stack-id")&gt;
+            &lt;#assign awsCloudFormationStackName = getAwsEc2InstanceTag(tags, "aws:cloudformation:stack-name")&gt;
+            &lt;#assign name = getAwsEc2InstanceTag(tags, "Name")&gt;
+            &lt;#assign country = getAwsEc2InstanceTag(tags, "Country")&gt;
+            &lt;#assign environment = getAwsEc2InstanceTag(tags, "Environment")&gt;
+
+            | ${name} | ${instanceType} | ${nrOfVirtualCpus} | ${state} | ${privateIpAddress} |
+        &lt;/#list&gt;
+    &lt;/#compress&gt;
+&lt;/#macro&gt;</programlisting>
+
+        <para><remark>Not in runnable examples (see same problem earlier, why
+        that matters). Although, it's next to impossible to make a portable
+        example of this. Question is, what do we want to demonstrate here? Lot
+        of lines to dig through for the reader, if the point is only
+        &lt;#local output = tools.exec.execute(line)&gt;.</remark></para>
+      </section>
+
+      <section>
+        <title>Interactive Templates</title>
+
+        <para>Sometime you need to apply a CSS, JSON or XPath query in an
+        ad-hoc way without installing <literal>xmllint</literal>,
+        <literal>jq</literal> or <literal>pup</literal> - in this case you can
+        pass a FreeMarker template in an interactive fashion.</para>
+
+        <programlisting>&gt; bin/freemarker-generator -i 'Hello ${tools.system.envs.USER}'; echo
+Hello sgoeschl
+
+&gt; bin/freemarker-generator -i '${tools.jsonpath.parse(dataSources?values[0]).read("$.info.title")}' examples/data/json/swagger-spec.json; echo
+Swagger Petstore
+
+&gt; bin/freemarker-generator -i 'Post Title : ${tools.jsonpath.parse(dataSources?values[0]).read("$.title")}' https://jsonplaceholder.typicode.com/posts/2; echo
+Post Title : qui est esse
+
+&gt; bin/freemarker-generator -i '${tools.xml.parse(dataSources?values[0])["recipients/person[1]/name"]}' examples/data/xml/recipients.xml; echo
+John Smith
+
+&gt; bin/freemarker-generator -i '${tools.jsoup.parse(dataSources?values[0]).select("a")[0]}' examples/data/html/dependencies.html; echo
+&lt;a href="${project.url}" title="FreeMarker Generator"&gt;FreeMarker Generator&lt;/a&gt;
+
+&gt; freemarker-generator -i '&lt;#list tools.system.envs as name,value&gt;${name} ==&gt; ${value}${"\n"}&lt;/#list&gt;'
+TERM ==&gt; xterm-256color
+LANG ==&gt; en_US
+DISPLAY ==&gt; :0.0
+SHELL ==&gt; /bin/bash
+EDITOR ==&gt; vi</programlisting>
+      </section>
+
+      <section>
+        <title>Filtering &amp; Transforming CSV</title>
+
+        <para>During an integration project we imported large transactions CSV
+        files (500.000+ records) and in case of import failures the developers
+        would be happy to get a nice outline of the transactions causing the
+        problem (the CSV records have 60+ columns) - in essence it is
+        filtering (based on some primary key) and and transforming into a
+        human-readable output format (Markdown).</para>
+
+        <para>So lets start the filtering &amp; transformation using the
+        following command line</para>
+
+        <programlisting>&gt; bin/freemarker-generator -e UTF-8 -l de_AT -Pcolumn="Order ID" \
+  -Pvalues=226939189,957081544 \
+  -t examples/templates/csv/md/filter.ftl examples/data/csv/sales-records.csv</programlisting>
+
+        <para>and Apache FreeMarker template</para>
+
+        <programlisting role="template">[docgen.insertFile "@exampleTemplates/csv/md/filter.ftl"]</programlisting>
+
+        <para>yields</para>
+
+        <programlisting>[docgen.insertFile "@exampleOutputs/sales-records.md"]</programlisting>
+      </section>
+
+      <section>
+        <title>Converting Between JSON And YAML</title>
+
+        <para>Sometimes we simply need to transform a JSON into an equivalent
+        YAML or the other way around.</para>
+
+        <programlisting>&gt; freemarker-generator -t freemarker-generator/yaml/json/transform.ftl examples/data/yaml/swagger-spec.yaml 
+&gt; freemarker-generator -i '${tools.gson.toJson(tools.yaml.parse(dataSources?values[0]))}' examples/data/yaml/swagger-spec.yaml
+&gt; freemarker-generator -i '${tools.gson.toJson(yaml)}' -m yaml=examples/data/yaml/swagger-spec.yaml
+
+&gt; freemarker-generator -t freemarker-generator/json/yaml/transform.ftl examples/data/json/swagger-spec.json
+&gt; freemarker-generator -i '${tools.yaml.toYaml(tools.gson.parse(dataSources?values[0]))}' examples/data/json/swagger-spec.json
+&gt; freemarker-generator -i '${tools.yaml.toYaml(json)}' -m json=examples/data/json/swagger-spec.json</programlisting>
+      </section>
+
+      <section>
+        <title>Using Advanced FreeMarker Features</title>
+
+        <para>There is a `demo.ftl` which shows some advanced FreeMarker
+        functionality:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>Invoking a Java constructor</para>
+          </listitem>
+
+          <listitem>
+            <para>Invoke a static method of non-instantiable class</para>
+          </listitem>
+
+          <listitem>
+            <para>Work with Java enumerations</para>
+          </listitem>
+
+          <listitem>
+            <para>Access System properties</para>
+          </listitem>
+
+          <listitem>
+            <para>Access Environment variables</para>
+          </listitem>
+        </itemizedlist>
+
+        <para>Running</para>
+
+        <programlisting>freemarker-generator -t examples/templates/demo.ftl</programlisting>
+
+        <para>gives you</para>
+
+        <programlisting role="output">[docgen.insertFile "@exampleOutputs/demo.txt"]</programlisting>
+      </section>
     </section>
   </chapter>