├── .github ├── .gitignore └── workflows │ ├── pkgdown.yaml │ └── R-CMD-check.yaml ├── vignettes ├── .gitignore ├── titles.xlsx ├── Validate.pdf ├── atorus_logo.png ├── t14_4_01.Rdata ├── table10_img1.png ├── table11_img1.png ├── table12_img1.png ├── table13_img1.png ├── table14_img1.png ├── table15_img1.png ├── table16_img1.png ├── table1_img1.png ├── table1_img2.png ├── table2_img1.png ├── table3_img1.png ├── table4_img1.png ├── table5_img1.png ├── table6_img1.png ├── table6_img2.png ├── table7_img1.png ├── table8_img1.png ├── table9_img1.png ├── Validation │ ├── vur_auto.Rds │ ├── Test_Case_Code │ │ ├── output │ │ │ ├── test_10.RData │ │ │ ├── test_11.RData │ │ │ ├── test_23.RData │ │ │ ├── test_24.RData │ │ │ ├── test_25.RData │ │ │ ├── test_26.RData │ │ │ ├── test_27.RData │ │ │ ├── test_28.RData │ │ │ ├── test_29.RData │ │ │ ├── test_3.RData │ │ │ ├── test_30.RData │ │ │ ├── test_31.RData │ │ │ ├── test_32.RData │ │ │ ├── test_33.RData │ │ │ ├── test_34.RData │ │ │ ├── test_35.RData │ │ │ ├── test_36.RData │ │ │ ├── test_37.RData │ │ │ ├── test_38.RData │ │ │ ├── test_39.RData │ │ │ ├── test_4.RData │ │ │ ├── test_40.RData │ │ │ ├── test_5.RData │ │ │ ├── test_6.RData │ │ │ ├── test_7.RData │ │ │ ├── test_8.RData │ │ │ ├── test_9.RData │ │ │ ├── ht_test_50.RData │ │ │ ├── ht_test_51.RData │ │ │ ├── ht_test_52.RData │ │ │ ├── view_test_41.RData │ │ │ ├── view_test_42.RData │ │ │ ├── view_test_43.RData │ │ │ ├── view_test_44.RData │ │ │ ├── view_test_45.RData │ │ │ ├── view_test_46.RData │ │ │ ├── test_6.rtf │ │ │ ├── test_54.rtf │ │ │ ├── test_3.rtf │ │ │ ├── test_11.rtf │ │ │ ├── test_4.rtf │ │ │ ├── test_5.rtf │ │ │ ├── test_7.rtf │ │ │ ├── test_8.rtf │ │ │ ├── test_9.rtf │ │ │ ├── test_1.rtf │ │ │ ├── test_49.rtf │ │ │ ├── test_52.rtf │ │ │ ├── test_53.rtf │ │ │ ├── test_51.rtf │ │ │ ├── test_10.rtf │ │ │ ├── test_47.rtf │ │ │ └── test_48.rtf │ │ └── input │ │ │ └── titles_footnotes.xlsx │ ├── val_script_calls.R │ ├── Specifications │ │ └── specification.Rmd │ └── app.R ├── header.tex ├── file_path_example.r ├── specs.csv └── roxy_block_details.R ├── LICENSE ├── docs ├── logo.png ├── favicon.ico ├── favicon-16x16.png ├── favicon-32x32.png ├── apple-touch-icon.png ├── apple-touch-icon-60x60.png ├── apple-touch-icon-76x76.png ├── articles │ ├── table10_img1.png │ ├── table11_img1.png │ ├── table12_img1.png │ ├── table13_img1.png │ ├── table14_img1.png │ ├── table15_img1.png │ ├── table16_img1.png │ ├── table1_img1.png │ ├── table1_img2.png │ ├── table2_img1.png │ ├── table3_img1.png │ ├── table4_img1.png │ ├── table5_img1.png │ ├── table6_img1.png │ ├── table6_img2.png │ ├── table7_img1.png │ ├── table8_img1.png │ ├── table9_img1.png │ ├── Validate_files │ │ ├── kePrint-0.0.1 │ │ │ └── kePrint.js │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── pharmaRTF_files │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── tf_from_file_files │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── advanced_usage_files │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── huxtable_tips_files │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ └── Validation │ │ ├── Test_Cases │ │ └── test_cases_files │ │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ │ └── Specifications │ │ └── specification_files │ │ └── header-attrs-2.7 │ │ └── header-attrs.js ├── reference │ └── figures │ │ └── logo.png ├── apple-touch-icon-120x120.png ├── apple-touch-icon-152x152.png ├── apple-touch-icon-180x180.png ├── pkgdown.yml ├── link.svg ├── bootstrap-toc.css ├── docsearch.js ├── pkgdown.js └── bootstrap-toc.js ├── man ├── figures │ └── logo.png ├── view_titles.Rd ├── view_footnotes.Rd ├── write_rtf.Rd ├── bold.Rd ├── index.Rd ├── italic.Rd ├── text.Rd ├── margins.Rd ├── orientation.Rd ├── add_titles_footnotes.Rd ├── pharmaRTF-package.Rd ├── header_rows.Rd ├── column_header_buffer.Rd ├── align.Rd ├── font_size.Rd ├── header_footer_height.Rd ├── pagesize.Rd ├── font.Rd ├── ignore_cell_padding.Rd ├── titles_and_footnotes_from_df.Rd ├── rtf_doc.Rd └── hf_line.Rd ├── pkgdown └── favicon │ ├── favicon.ico │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── apple-touch-icon.png │ ├── apple-touch-icon-60x60.png │ ├── apple-touch-icon-76x76.png │ ├── apple-touch-icon-120x120.png │ ├── apple-touch-icon-152x152.png │ └── apple-touch-icon-180x180.png ├── tests ├── testthat │ ├── data │ │ └── titles.xlsx │ ├── test_table_component_extractors.R │ ├── headers1.txt │ ├── headers2.txt │ ├── test_read_df_from_file.R │ ├── test_viewers.R │ └── test_read_hf.r └── testthat.R ├── cran-comments.md ├── pharmaRTF.Rproj ├── _pkgdown.yml ├── .Rbuildignore ├── azure-pipelines.yml ├── R ├── pharmaRTF.R ├── viewers.R └── table_component_extractors.R ├── .gitignore ├── NEWS.md ├── LICENSE.md ├── DESCRIPTION └── NAMESPACE /.github/.gitignore: -------------------------------------------------------------------------------- 1 | *.html 2 | -------------------------------------------------------------------------------- /vignettes/.gitignore: -------------------------------------------------------------------------------- 1 | *.html 2 | *.R 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | YEAR: 2020 2 | COPYRIGHT HOLDER: Atorus Research LLC 3 | -------------------------------------------------------------------------------- /docs/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/logo.png -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/favicon.ico -------------------------------------------------------------------------------- /man/figures/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/man/figures/logo.png -------------------------------------------------------------------------------- /vignettes/titles.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/titles.xlsx -------------------------------------------------------------------------------- /docs/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/favicon-16x16.png -------------------------------------------------------------------------------- /docs/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/favicon-32x32.png -------------------------------------------------------------------------------- /vignettes/Validate.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validate.pdf -------------------------------------------------------------------------------- /docs/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/apple-touch-icon.png -------------------------------------------------------------------------------- /vignettes/atorus_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/atorus_logo.png -------------------------------------------------------------------------------- /vignettes/t14_4_01.Rdata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/t14_4_01.Rdata -------------------------------------------------------------------------------- /vignettes/table10_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table10_img1.png -------------------------------------------------------------------------------- /vignettes/table11_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table11_img1.png -------------------------------------------------------------------------------- /vignettes/table12_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table12_img1.png -------------------------------------------------------------------------------- /vignettes/table13_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table13_img1.png -------------------------------------------------------------------------------- /vignettes/table14_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table14_img1.png -------------------------------------------------------------------------------- /vignettes/table15_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table15_img1.png -------------------------------------------------------------------------------- /vignettes/table16_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table16_img1.png -------------------------------------------------------------------------------- /vignettes/table1_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table1_img1.png -------------------------------------------------------------------------------- /vignettes/table1_img2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table1_img2.png -------------------------------------------------------------------------------- /vignettes/table2_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table2_img1.png -------------------------------------------------------------------------------- /vignettes/table3_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table3_img1.png -------------------------------------------------------------------------------- /vignettes/table4_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table4_img1.png -------------------------------------------------------------------------------- /vignettes/table5_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table5_img1.png -------------------------------------------------------------------------------- /vignettes/table6_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table6_img1.png -------------------------------------------------------------------------------- /vignettes/table6_img2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table6_img2.png -------------------------------------------------------------------------------- /vignettes/table7_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table7_img1.png -------------------------------------------------------------------------------- /vignettes/table8_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table8_img1.png -------------------------------------------------------------------------------- /vignettes/table9_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/table9_img1.png -------------------------------------------------------------------------------- /pkgdown/favicon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/pkgdown/favicon/favicon.ico -------------------------------------------------------------------------------- /docs/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /docs/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /docs/articles/table10_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table10_img1.png -------------------------------------------------------------------------------- /docs/articles/table11_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table11_img1.png -------------------------------------------------------------------------------- /docs/articles/table12_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table12_img1.png -------------------------------------------------------------------------------- /docs/articles/table13_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table13_img1.png -------------------------------------------------------------------------------- /docs/articles/table14_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table14_img1.png -------------------------------------------------------------------------------- /docs/articles/table15_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table15_img1.png -------------------------------------------------------------------------------- /docs/articles/table16_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table16_img1.png -------------------------------------------------------------------------------- /docs/articles/table1_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table1_img1.png -------------------------------------------------------------------------------- /docs/articles/table1_img2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table1_img2.png -------------------------------------------------------------------------------- /docs/articles/table2_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table2_img1.png -------------------------------------------------------------------------------- /docs/articles/table3_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table3_img1.png -------------------------------------------------------------------------------- /docs/articles/table4_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table4_img1.png -------------------------------------------------------------------------------- /docs/articles/table5_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table5_img1.png -------------------------------------------------------------------------------- /docs/articles/table6_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table6_img1.png -------------------------------------------------------------------------------- /docs/articles/table6_img2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table6_img2.png -------------------------------------------------------------------------------- /docs/articles/table7_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table7_img1.png -------------------------------------------------------------------------------- /docs/articles/table8_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table8_img1.png -------------------------------------------------------------------------------- /docs/articles/table9_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/articles/table9_img1.png -------------------------------------------------------------------------------- /docs/reference/figures/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/reference/figures/logo.png -------------------------------------------------------------------------------- /tests/testthat/data/titles.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/tests/testthat/data/titles.xlsx -------------------------------------------------------------------------------- /docs/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /docs/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /docs/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/docs/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /pkgdown/favicon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/pkgdown/favicon/favicon-16x16.png -------------------------------------------------------------------------------- /pkgdown/favicon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/pkgdown/favicon/favicon-32x32.png -------------------------------------------------------------------------------- /vignettes/Validation/vur_auto.Rds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/vur_auto.Rds -------------------------------------------------------------------------------- /pkgdown/favicon/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/pkgdown/favicon/apple-touch-icon.png -------------------------------------------------------------------------------- /tests/testthat.R: -------------------------------------------------------------------------------- 1 | library(testthat) 2 | library(pharmaRTF) 3 | library(assertthat) 4 | library(huxtable) 5 | 6 | test_check("pharmaRTF") 7 | -------------------------------------------------------------------------------- /pkgdown/favicon/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/pkgdown/favicon/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /pkgdown/favicon/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/pkgdown/favicon/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /pkgdown/favicon/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/pkgdown/favicon/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /pkgdown/favicon/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/pkgdown/favicon/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /pkgdown/favicon/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/pkgdown/favicon/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_10.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_10.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_11.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_11.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_23.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_23.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_24.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_24.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_25.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_25.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_26.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_26.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_27.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_27.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_28.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_28.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_29.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_29.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_3.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_3.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_30.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_30.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_31.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_31.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_32.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_32.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_33.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_33.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_34.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_34.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_35.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_35.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_36.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_36.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_37.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_37.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_38.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_38.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_39.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_39.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_4.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_4.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_40.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_40.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_5.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_5.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_6.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_6.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_7.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_7.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_8.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_8.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_9.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/test_9.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/ht_test_50.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/ht_test_50.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/ht_test_51.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/ht_test_51.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/ht_test_52.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/ht_test_52.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/view_test_41.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/view_test_41.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/view_test_42.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/view_test_42.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/view_test_43.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/view_test_43.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/view_test_44.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/view_test_44.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/view_test_45.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/view_test_45.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/view_test_46.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/output/view_test_46.RData -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/input/titles_footnotes.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atorus-research/pharmaRTF/HEAD/vignettes/Validation/Test_Case_Code/input/titles_footnotes.xlsx -------------------------------------------------------------------------------- /tests/testthat/test_table_component_extractors.R: -------------------------------------------------------------------------------- 1 | context("table_component_extractors") 2 | 3 | test_that("The tests for these functions were done in test_rtf-code-generators", { 4 | expect_true(TRUE) 5 | }) 6 | -------------------------------------------------------------------------------- /cran-comments.md: -------------------------------------------------------------------------------- 1 | ## pharmaRTF 0.1.4 2 | 3 | No functionality changes. Update to fix bug with new version of tibble. 4 | 5 | ## Test environments 6 | * local Ubuntu 18.04.4 LTS, R 3.6.2 7 | * ubuntu-16.04 docker(azure ci) 8 | 9 | ## R CMD check results 10 | There were no ERRORs, WARNINGs, or NOTEs. 11 | -------------------------------------------------------------------------------- /vignettes/header.tex: -------------------------------------------------------------------------------- 1 | \usepackage{titling} 2 | \usepackage{pdflscape} 3 | 4 | \newcommand{\blandscape}{\begin{landscape}} 5 | \newcommand{\elandscape}{\end{landscape}} 6 | 7 | \pretitle{% 8 | \begin{center} 9 | \LARGE 10 | \includegraphics[width=4cm,height=6cm]{atorus_logo.png}\\[\bigskipamount] 11 | } 12 | \posttitle{\end{center}} 13 | -------------------------------------------------------------------------------- /docs/articles/Validate_files/kePrint-0.0.1/kePrint.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function(){ 2 | if (typeof $('[data-toggle="tooltip"]').tooltip === 'function') { 3 | $('[data-toggle="tooltip"]').tooltip(); 4 | } 5 | if ($('[data-toggle="popover"]').popover === 'function') { 6 | $('[data-toggle="popover"]').popover(); 7 | } 8 | }); 9 | -------------------------------------------------------------------------------- /docs/pkgdown.yml: -------------------------------------------------------------------------------- 1 | pandoc: 2.11.2 2 | pkgdown: 1.5.1 3 | pkgdown_sha: ~ 4 | articles: 5 | Validate: Validate.html 6 | specification: Validation/Specifications/specification.html 7 | test_cases: Validation/Test_Cases/test_cases.html 8 | advanced_usage: advanced_usage.html 9 | huxtable_tips: huxtable_tips.html 10 | pharmaRTF: pharmaRTF.html 11 | tf_from_file: tf_from_file.html 12 | last_built: 2021-03-04T15:52Z 13 | 14 | -------------------------------------------------------------------------------- /man/view_titles.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/viewers.R 3 | \name{view_titles} 4 | \alias{view_titles} 5 | \title{View title information} 6 | \usage{ 7 | view_titles(doc) 8 | } 9 | \arguments{ 10 | \item{doc}{\code{rtf_doc} object} 11 | } 12 | \value{ 13 | \code{data.frame} of the title information 14 | } 15 | \description{ 16 | View titles attached to an \code{rtf_doc} as a data.frame. 17 | } 18 | -------------------------------------------------------------------------------- /pharmaRTF.Rproj: -------------------------------------------------------------------------------- 1 | Version: 1.0 2 | 3 | RestoreWorkspace: Default 4 | SaveWorkspace: Default 5 | AlwaysSaveHistory: Default 6 | 7 | EnableCodeIndexing: Yes 8 | UseSpacesForTab: Yes 9 | NumSpacesForTab: 2 10 | Encoding: UTF-8 11 | 12 | RnwWeave: Sweave 13 | LaTeX: pdfLaTeX 14 | 15 | AutoAppendNewline: Yes 16 | StripTrailingWhitespace: Yes 17 | 18 | BuildType: Package 19 | PackageUseDevtools: Yes 20 | PackageInstallArgs: --no-multiarch --with-keep.source 21 | -------------------------------------------------------------------------------- /tests/testthat/headers1.txt: -------------------------------------------------------------------------------- 1 | {\header 2 | 3 | \par 4 | 5 | { 6 | \trowd 7 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl120 \clpadft3\clpadt120 \clpadfb3\clpadb120 \clpadfr3\clpadr120 \cellx2160 8 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl120 \clpadft3\clpadt120 \clpadfb3\clpadb120 \clpadfr3\clpadr120 \cellx4320 \pard\intbl\qr{\fs24 {1}}\cell 9 | \pard\intbl\ql{\fs24 {a}}\cell 10 | \row 11 | } 12 | 13 | } -------------------------------------------------------------------------------- /man/view_footnotes.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/viewers.R 3 | \name{view_footnotes} 4 | \alias{view_footnotes} 5 | \title{View footnote information} 6 | \usage{ 7 | view_footnotes(doc) 8 | } 9 | \arguments{ 10 | \item{doc}{\code{rtf_doc} object} 11 | } 12 | \value{ 13 | \code{data.frame} of the footnote information 14 | } 15 | \description{ 16 | View footnotes attached to an \code{rtf_doc} as a data.frame. 17 | } 18 | -------------------------------------------------------------------------------- /_pkgdown.yml: -------------------------------------------------------------------------------- 1 | destination: docs 2 | 3 | template: 4 | params: 5 | bootswatch: yeti 6 | ganalytics: UA-165685385-3 7 | opengraph: 8 | image: 9 | src: man/figures/logo.png 10 | alt: "pharmaRTF Hex Sticker" 11 | twitter: 12 | creator: "@AtorusR" 13 | card: summary_large_image 14 | 15 | 16 | articles: 17 | - title: pharmaRTF Vignettes 18 | navbar: pharmaRTF Vignettes 19 | contents: 20 | - advanced_usage 21 | - huxtable_tips 22 | - tf_from_file 23 | -------------------------------------------------------------------------------- /.Rbuildignore: -------------------------------------------------------------------------------- 1 | ^.*\.Rproj$ 2 | ^\.Rproj\.user$ 3 | ^azure-pipelines\.yml$ 4 | ^scripts$ 5 | ^cran-comments\.md$ 6 | ^doc$ 7 | ^Meta$ 8 | ^\.travis\.yml$ 9 | ^vignettes/Validate\.Rmd$ 10 | ^vignettes/Validation/val_script_calls\.R$ 11 | ^vignettes/Validation/app\.R$ 12 | ^vignetts/Validation/Test_Case_Code/input$ 13 | ^vignetts/Validation/Test_Case_Code/output$ 14 | ^vignettes/test_cases\.csv$ 15 | ^vignettes/specs\.csv$ 16 | ^vignettes/Validation$ 17 | ^validation\.pdf$ 18 | ^\.github$ 19 | ^_pkgdown\.yml$ 20 | ^docs$ 21 | ^pkgdown$ 22 | ^LICENSE\.md$ 23 | -------------------------------------------------------------------------------- /azure-pipelines.yml: -------------------------------------------------------------------------------- 1 | # Starter pipeline 2 | # Start with a minimal pipeline that you can customize to build and deploy your code. 3 | # Add steps that build, run tests, deploy, and more: 4 | # https://aka.ms/yaml 5 | 6 | trigger: none 7 | 8 | pool: 9 | vmImage: 'ubuntu-16.04' 10 | 11 | container: 'rocker/tidyverse:latest' 12 | 13 | steps: 14 | - script: Rscript -e 'R.version' 15 | displayName: 'R Version' 16 | 17 | - script: sudo Rscript -e 'install.packages(c("huxtable", "kableExtra")); devtools::check(cran = FALSE)' 18 | displayName: 'Package Check' 19 | -------------------------------------------------------------------------------- /docs/articles/Validate_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/pharmaRTF_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/tf_from_file_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/advanced_usage_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/huxtable_tips_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /vignettes/Validation/val_script_calls.R: -------------------------------------------------------------------------------- 1 | #Validation Script 2 | 3 | library(pharmaRTF) 4 | library(tidyverse, lib.loc = .libPaths()[2]) 5 | library(testthat) 6 | source("~/pharmaRTF/vignettes/helper_test_code.R") 7 | 8 | make_test_case_rmd("~/pharmaRTF/vignettes/test_cases.csv") 9 | make_specification_rmd("~/pharmaRTF/vignettes/specs.csv") 10 | 11 | # Source all of the files in the rtf_test_files directory 12 | lapply(list.files("~/pharmaRTF/vignettes/Validation/Test_Case_Code", full.names = TRUE, 13 | pattern = ".R$"), source) 14 | 15 | shiny::runApp("~/pharmaRTF/vignettes/Validation/app.R") 16 | -------------------------------------------------------------------------------- /docs/articles/Validation/Test_Cases/test_cases_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/Validation/Specifications/specification_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /tests/testthat/headers2.txt: -------------------------------------------------------------------------------- 1 | {\header 2 | \qc 3 | {\f1\fs24 Text1} 4 | \par\qc 5 | {\f1\fs24\b Text2} 6 | \par\qc 7 | {\f1\fs24\i Text3} 8 | \par\qc 9 | {\f2\fs24 Text4} 10 | \par\qc 11 | {\f1\fs30 Text5} 12 | \par\ql\tx7245\tqr\tx12960 13 | {\f1\fs24 Text6}\pmartabqr 14 | {\f1\fs24 Text7} 15 | \par\qr 16 | {\f1\fs24 Text8} 17 | \par\ql 18 | {\f1\fs24 Text9} 19 | \par 20 | 21 | { 22 | \trowd 23 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl120 \clpadft3\clpadt120 \clpadfb3\clpadb120 \clpadfr3\clpadr120 \cellx2160 24 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl120 \clpadft3\clpadt120 \clpadfb3\clpadb120 \clpadfr3\clpadr120 \cellx4320 \pard\intbl\qr{\fs24 {1}}\cell 25 | \pard\intbl\ql{\fs24 {a}}\cell 26 | \row 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /R/pharmaRTF.R: -------------------------------------------------------------------------------- 1 | #' pharmaRTF 2 | #' 3 | #' @description 4 | #' Enhanced RTF wrapper written in R for use with existing R tables 5 | #' packages such as huxtable or GT. This package fills a gap where tables in 6 | #' certain packages can be written out to RTF, but cannot add certain metadata 7 | #' or features to the document that are required/expected in a report for a 8 | #' regulatory submission, such as multiple levels of titles and footnotes, 9 | #' making the document landscape, and controlling properties such as margins. 10 | #' 11 | #' This package intends to provide a flexible and reliable framework to connect 12 | #' R to a pharmaceutical reporting workflow. 13 | #' 14 | #' @section Future Plans: 15 | #' \itemize{ 16 | #' \item{colors} 17 | #' \item{graphs} 18 | #' } 19 | #' 20 | "_PACKAGE" 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # History files 2 | .Rhistory 3 | .Rapp.history 4 | 5 | # Session Data files 6 | .RData 7 | 8 | # Example code in package build process 9 | *-Ex.R 10 | 11 | # Output files from R CMD build 12 | /*.tar.gz 13 | 14 | # Output files from R CMD check 15 | /*.Rcheck/ 16 | 17 | # RStudio files 18 | .Rproj.user/ 19 | 20 | # produced vignettes 21 | vignettes/*.html 22 | vignettes/*.pdf 23 | 24 | # OAuth2 token, see https://github.com/hadley/httr/releases/tag/v0.3 25 | .httr-oauth 26 | 27 | # knitr and R markdown default cache directories 28 | /*_cache/ 29 | /cache/ 30 | 31 | # Temporary files created by R markdown 32 | *.utf8.md 33 | *.knit.md 34 | 35 | # Shiny token, see https://shiny.rstudio.com/articles/shinyapps.html 36 | rsconnect/ 37 | table_examples/outputs/ 38 | inst/doc 39 | doc 40 | Meta 41 | LICENSE 42 | Validate.pdf 43 | -------------------------------------------------------------------------------- /docs/link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /NEWS.md: -------------------------------------------------------------------------------- 1 | # pharmaRTF 0.1.4 2 | 3 | No functionality changes. Bug fix for tibble 3.1.0 update identified in https://github.com/atorus-research/pharmaRTF/issues/6 4 | 5 | # pharmaRTF 0.1.3 6 | 7 | No functionality changes. Increment version number with updates for development version of R. 8 | 9 | # pharmaRTF 0.1.2 10 | 11 | No functionality changes. Increment version with new release of Huxtable 12 | 13 | # pharmaRTF 0.1.1 14 | 15 | ### API Changes 16 | This version is primarily used to adjust some internal functions to be 17 | compatilbe with huxtable 5.0. No major changes to user facing functionailty was made. 18 | Huxtable is now a hard dependancy on pharmaRTF. 19 | 20 | ### Enhansements 21 | The `header_row` attribute can now be set to 0 to print an `rtf_doc` with no headers. If the 'header_row' attribute is set to 22 | 0, only the titles and footnotes are repeated 23 | -------------------------------------------------------------------------------- /tests/testthat/test_read_df_from_file.R: -------------------------------------------------------------------------------- 1 | library(huxtable) 2 | 3 | test_that("read_titles_from_df works as expected", { 4 | 5 | skip_if_not(require("readxl")) 6 | 7 | example_custom_reader <- function(..., table_number=NULL) { 8 | 9 | # If a column isn't populated then the type may be guessed wrong so force it 10 | col_types <- c('text', 'numeric', 'text', 'text', 'text', 'text', 'logical', 'logical', 'text') 11 | # pass through arguments from ... 12 | df <- readxl::read_excel(..., col_types=col_types) 13 | 14 | # Subset and return that dataframe 15 | df[df$table_number==table_number, !names(df) == 'table_number'] 16 | } 17 | ht <- as_hux(mtcars) 18 | 19 | expect_silent( 20 | doc <- rtf_doc(ht) %>% titles_and_footnotes_from_df( 21 | from.file='./data/titles.xlsx', 22 | reader=example_custom_reader, 23 | table_number='test') 24 | ) 25 | 26 | }) 27 | -------------------------------------------------------------------------------- /man/write_rtf.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/rtf-code-generators.R 3 | \name{write_rtf} 4 | \alias{write_rtf} 5 | \title{Write RTF document} 6 | \usage{ 7 | write_rtf(doc, file = NULL) 8 | } 9 | \arguments{ 10 | \item{doc}{The RTF document to be written.} 11 | 12 | \item{file}{A character string naming a file open for writing.} 13 | } 14 | \value{ 15 | File is written to the file provided by sinking the console output. 16 | No output is returned to the R environment. 17 | } 18 | \description{ 19 | Writes the RTF document to a specified file. 20 | } 21 | \examples{ 22 | ## Create and write RTF document 23 | ht <- huxtable::huxtable( 24 | column1 = 1:5, 25 | column2 = letters[1:5] 26 | ) 27 | rtf <- rtf_doc(ht) 28 | 29 | write_rtf(rtf, file=tempfile()) #writes a table with no header/footnotes to 'test.rtf' 30 | 31 | } 32 | \seealso{ 33 | \url{http://www.biblioscape.com/rtf15_spec.htm}, 34 | \url{http://latex2rtf.sourceforge.net/rtfspec_7.html#rtfspec_tabledef} 35 | } 36 | -------------------------------------------------------------------------------- /tests/testthat/test_viewers.R: -------------------------------------------------------------------------------- 1 | context("viewers") 2 | library("huxtable") 3 | 4 | test_that("viewers return correct data.frame", { 5 | ht <- huxtable( 6 | column1 = 1:5, 7 | column2 = letters[1:5] 8 | ) 9 | titles_l <- list( 10 | hf_line("test3"), 11 | hf_line("test2", index=2), 12 | hf_line("test1", index=1), 13 | hf_line("test4") 14 | ) 15 | footers_l <- list( 16 | hf_line("ftest3"), 17 | hf_line("ftest2", index=2), 18 | hf_line("ftest1", index=1), 19 | hf_line("ftest4") 20 | ) 21 | rtf <- rtf_doc(ht, titles = titles_l, footnotes = footers_l) 22 | 23 | ## I'm having trouble testing the viewer functions due to either conflicts 24 | # with View or how testthat interacts with the terminal. 25 | expect_true(TRUE) 26 | 27 | }) 28 | 29 | test_that("Viewer functions throw error when no headers/footers to display", { 30 | ht <- huxtable( 31 | column1 = 1:5, 32 | column2 = letters[1:5] 33 | ) 34 | rtf <- rtf_doc(ht) 35 | 36 | expect_error(view_hf(rtf), "attempt to select less than one element in get1index") 37 | }) 38 | -------------------------------------------------------------------------------- /man/bold.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/properties.R 3 | \name{bold} 4 | \alias{bold} 5 | \alias{bold<-} 6 | \alias{set_bold} 7 | \title{Return or set bold} 8 | \usage{ 9 | bold(x, ...) 10 | 11 | bold(x) <- value 12 | 13 | set_bold(x, value) 14 | } 15 | \arguments{ 16 | \item{x}{A \code{hf_line} object} 17 | 18 | \item{...}{Additonal arguments passed to method dispatch} 19 | 20 | \item{value}{A logical vector to set the value of the bold attribute} 21 | } 22 | \value{ 23 | For \code{bold()}, the bold attribute of the supplied \code{hf_line} 24 | object. For \code{`bold<-`()} and \code{set_bold()}, the modified object. 25 | } 26 | \description{ 27 | These property functions modify or return the bold attribute of a 28 | \code{hf_line} object. 29 | } 30 | \examples{ 31 | library(huxtable) 32 | ht <- huxtable( 33 | column1 = 1:5, 34 | column2 = letters[1:5] 35 | ) 36 | rtf <- rtf_doc(ht, list(hf_line("aTitle"))) 37 | 38 | pharmaRTF::bold(rtf$titles[[1]]) 39 | # Returns FALSE 40 | 41 | pharmaRTF::bold(rtf$titles[[1]]) <- TRUE 42 | # Sets bold to TRUE 43 | 44 | } 45 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | ===================== 3 | 4 | Copyright © 2020 Atorus Research LLC 5 | 6 | Permission is hereby granted, free of charge, to any person 7 | obtaining a copy of this software and associated documentation 8 | files (the “Software”), to deal in the Software without 9 | restriction, including without limitation the rights to use, 10 | copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the 12 | Software is furnished to do so, subject to the following 13 | conditions: 14 | 15 | The above copyright notice and this permission notice shall be 16 | included in all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, 19 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 20 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 21 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 22 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 23 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 24 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 25 | OTHER DEALINGS IN THE SOFTWARE. 26 | -------------------------------------------------------------------------------- /man/index.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/properties.R 3 | \name{index} 4 | \alias{index} 5 | \alias{index<-} 6 | \alias{set_index} 7 | \title{Return or set index} 8 | \usage{ 9 | index(x, ...) 10 | 11 | index(x) <- value 12 | 13 | set_index(x, value) 14 | } 15 | \arguments{ 16 | \item{x}{A \code{hf_line} object} 17 | 18 | \item{...}{Additonal arguments passed to method dispatch} 19 | 20 | \item{value}{Numeric value to order index} 21 | } 22 | \value{ 23 | For \code{index()}, the index attribute of the supplied 24 | \code{hf_line} object. For \code{`index<-()`} and \code{set_index()}, the 25 | modified object. 26 | } 27 | \description{ 28 | These property functions modify or return the index of a \code{hf_line} 29 | object. The index sets the order in which a title will appear. Indicies 30 | can be any numeric value as long as they are not duplicated. 31 | } 32 | \examples{ 33 | library(huxtable) 34 | ht <- huxtable( 35 | column1 = 1:5, 36 | column2 = letters[1:5] 37 | ) 38 | rtf <- rtf_doc(ht, list(hf_line("aTitle"))) 39 | 40 | index(rtf$titles[[1]]) 41 | # Returns NULL 42 | 43 | index(rtf$titles[[1]]) <- 2 44 | # Sets index of first titles to 2 45 | 46 | } 47 | -------------------------------------------------------------------------------- /man/italic.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/properties.R 3 | \name{italic} 4 | \alias{italic} 5 | \alias{italic<-} 6 | \alias{set_italic} 7 | \title{Return or set italics} 8 | \usage{ 9 | italic(x, ...) 10 | 11 | italic(x) <- value 12 | 13 | set_italic(x, value) 14 | } 15 | \arguments{ 16 | \item{x}{A \code{hf_line} object} 17 | 18 | \item{...}{Additonal arguments passed to method dispatch} 19 | 20 | \item{value}{A logical vector to set the value of the bold attribute} 21 | } 22 | \value{ 23 | For \code{italic()}, the italic attribute of the supplied 24 | \code{hf_line}. Fot \code{`italic<-()`} and \code{set_italic()} the 25 | modified object. 26 | } 27 | \description{ 28 | These property functions modify or return the italics attribute of a \code{hf_line} 29 | object. The italic attribute takes on a logical value of TRUE or FALSE, where 30 | TRUE italicizes the text of the line. 31 | } 32 | \examples{ 33 | library(huxtable) 34 | ht <- huxtable( 35 | column1 = 1:5, 36 | column2 = letters[1:5] 37 | ) 38 | rtf <- rtf_doc(ht, list(hf_line("aTitle"))) 39 | 40 | pharmaRTF::italic(rtf$titles[[1]]) 41 | # Returns FALSE 42 | 43 | pharmaRTF::italic(rtf$titles[[1]]) <- TRUE 44 | # Sets italic to TRUE 45 | 46 | } 47 | -------------------------------------------------------------------------------- /man/text.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/properties.R 3 | \name{text} 4 | \alias{text} 5 | \alias{text<-} 6 | \alias{set_text} 7 | \title{Return or set text} 8 | \usage{ 9 | text(x, ...) 10 | 11 | text(x) <- value 12 | 13 | set_text(x, value) 14 | } 15 | \arguments{ 16 | \item{x}{A \code{hf_line} object} 17 | 18 | \item{...}{Additonal arguments passed to method dispatch} 19 | 20 | \item{value}{A character vector of length 0, 1, or 2 to set the text value 21 | of a \code{hf_line} object.} 22 | } 23 | \value{ 24 | For \code{text()}, the text vector of the supplied \code{hf_line} 25 | object. For \code{`text<-()`} and \code{set_text()}, the modfied object. 26 | } 27 | \description{ 28 | These property functions modify or return the fonts of a \code{rtf_doc} object. 29 | \code{text()} will always return a vector of length 2. If the text is only 30 | of length one an empty string will be appended. 31 | } 32 | \examples{ 33 | library(huxtable) 34 | ht <- huxtable( 35 | column1 = 1:5, 36 | column2 = letters[1:5] 37 | ) 38 | rtf <- rtf_doc(ht, list(hf_line("aTitle"))) 39 | 40 | text(rtf$titles[[1]]) 41 | # Returns "aTitle" "" 42 | 43 | text(rtf$titles[[1]]) <- "aDifferentTitle" 44 | # Sets titles to "aDifferentTitle" 45 | 46 | } 47 | -------------------------------------------------------------------------------- /man/margins.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/properties.R 3 | \name{margins} 4 | \alias{margins} 5 | \alias{margins<-} 6 | \alias{set_margins} 7 | \title{Return or set margins} 8 | \usage{ 9 | margins(x, ...) 10 | 11 | margins(x) <- value 12 | 13 | set_margins(x, value) 14 | } 15 | \arguments{ 16 | \item{x}{A \code{rtf_doc} object} 17 | 18 | \item{...}{Additonal arguments passed to method dispatch} 19 | 20 | \item{value}{A named list or vector detailing the page margins} 21 | } 22 | \value{ 23 | For \code{margin()}, a named vector of the margin attribute of the 24 | supplied \code{rtf_doc}. For \code{`margin<-()`} and \code{set_margin()} 25 | the modified object. 26 | } 27 | \description{ 28 | These property functions return or set the margin attribute of a \code{rtf_doc} 29 | object. These are stored as a named vector. Names should be \code{top}, 30 | \code{bottom}, \code{left}, and \code{right}. Margins are measured in inches. 31 | } 32 | \examples{ 33 | library(huxtable) 34 | ht <- huxtable( 35 | column1 = 1:5, 36 | column2 = letters[1:5] 37 | ) 38 | rtf <- rtf_doc(ht, list(hf_line("aTitle"))) 39 | 40 | margins(rtf) 41 | # Returns c(top = 1, bottom = 1, left = 1, right = 1) 42 | 43 | margins(rtf) <- c(top = 2) 44 | # Sets top margin to 2 45 | 46 | } 47 | -------------------------------------------------------------------------------- /man/orientation.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/properties.R 3 | \name{orientation} 4 | \alias{orientation} 5 | \alias{orientation<-} 6 | \alias{set_orientation} 7 | \title{Return or set orientation} 8 | \usage{ 9 | orientation(x, ...) 10 | 11 | orientation(x) <- value 12 | 13 | set_orientation(x, value) 14 | } 15 | \arguments{ 16 | \item{x}{A \code{rtf_doc} object} 17 | 18 | \item{...}{Additonal arguments passed to method dispatch} 19 | 20 | \item{value}{A character vector of either 'landscape' or 'portrait'} 21 | } 22 | \value{ 23 | For \code{orientation()}, the orientation attribute of the supplied 24 | \code{rtf_doc} object. For \code{`orientation<-()`} and 25 | \code{set_orientation()} the modified object. 26 | } 27 | \description{ 28 | These property functions modify or return the orientation attribute of a 29 | \code{rtf_doc} object. Options are landscape or portrait. See the \code{\link{rtf_doc}} 30 | help page for important notes about this property. 31 | } 32 | \examples{ 33 | library(huxtable) 34 | ht <- huxtable( 35 | column1 = 1:5, 36 | column2 = letters[1:5] 37 | ) 38 | rtf <- rtf_doc(ht, list(hf_line("aTitle"))) 39 | 40 | orientation(rtf) 41 | # Returns landscape 42 | 43 | orientation(rtf) <- "portrait" 44 | # Sets orientation to portrait 45 | 46 | } 47 | -------------------------------------------------------------------------------- /vignettes/file_path_example.r: -------------------------------------------------------------------------------- 1 | library(pharmaRTF) 2 | library(huxtable) 3 | 4 | # Create the column headers data frame 5 | column_headers <- data.frame( 6 | Species = c("", "Species of Flower"), 7 | Sepal.Length = c("Sepal", "Length"), 8 | Sepal.Width = c("", "Width"), 9 | Petal.Length = c("Petal", "Length"), 10 | Petal.Width = c("", "Width"), 11 | stringsAsFactors = FALSE 12 | ) 13 | 14 | # Create the huxtable table 15 | ht <- huxtable::as_hux(rbind(column_headers, iris)) %>% 16 | # Merge the Sepal cell over the Length and Width 17 | huxtable::merge_cells(1, 2:3) %>% 18 | # Merge the Petal cell over the Length and Width 19 | huxtable::merge_cells(1, 4:5) %>% 20 | # Align the top cells for both Sepal and Petal 21 | huxtable::set_align(1,2, 'center') %>% 22 | huxtable::set_align(1,4, 'center') %>% 23 | # Bold all the column header rows 24 | huxtable::set_bold(1:2, 1:ncol(iris), TRUE) %>% 25 | # Bottom border on 1st column header row 26 | huxtable::set_bottom_border(1, 2:4, 1) %>% 27 | # Bottom border on 2nd row 28 | huxtable::set_bottom_border(2, 1:ncol(iris), 2) %>% 29 | # Set the page width 30 | huxtable::set_width(1.5) 31 | 32 | # Create the RTF doc 33 | doc <- rtf_doc(ht, header_rows=2) %>% 34 | add_titles(hf_line("Text on the left", "FILE_PATH: Run from: %s", bold=TRUE, align='split')) 35 | 36 | 37 | write_rtf(doc, file="table15.rtf") 38 | -------------------------------------------------------------------------------- /man/add_titles_footnotes.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/header-footer.R 3 | \name{add_titles} 4 | \alias{add_titles} 5 | \alias{add_footnotes} 6 | \title{Add \code{hf_line} title(s) and footnote(s) to a \code{rtf_doc} object} 7 | \usage{ 8 | add_titles(doc, ..., replace = FALSE) 9 | 10 | add_footnotes(doc, ..., replace = FALSE) 11 | } 12 | \arguments{ 13 | \item{doc}{\code{rtf_doc} on which hf_line object(s) (i.e. titles/footnotes) 14 | will be attached} 15 | 16 | \item{...}{A vector of \code{hf_line} objects to add passed to 17 | \code{add_hf()}} 18 | 19 | \item{replace}{If FALSE, lines will be appended/ordered with current 20 | header/footer lines. If TRUE, lines will replace the existing content.} 21 | } 22 | \value{ 23 | \code{hf_line} object(s) (i.e. titles/footnotes) to be added 24 | } 25 | \description{ 26 | Add \code{hf_line} titles/footnote objects to a \code{rtf_doc} object 27 | } 28 | \examples{ 29 | # Adding titles after rtf_doc construction 30 | ht <- huxtable::huxtable( 31 | column1 = 1:5, 32 | column2 = letters[1:5] 33 | ) 34 | rtf <- rtf_doc(ht) 35 | 36 | rtf <- add_titles(rtf, hf_line("The Title")) 37 | 38 | # Adding footnotes after rtf_doc construction 39 | ht <- huxtable::huxtable( 40 | column1 = 1:5, 41 | column2 = letters[1:5] 42 | ) 43 | rtf <- rtf_doc(ht) 44 | 45 | rtf <- add_footnotes(rtf, hf_line("The Footnote")) 46 | 47 | } 48 | -------------------------------------------------------------------------------- /.github/workflows/pkgdown.yaml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | branches: master 4 | 5 | name: pkgdown 6 | 7 | jobs: 8 | pkgdown: 9 | runs-on: macOS-latest 10 | env: 11 | GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} 12 | steps: 13 | - uses: actions/checkout@v2 14 | 15 | - uses: r-lib/actions/setup-r@master 16 | 17 | - uses: r-lib/actions/setup-pandoc@master 18 | 19 | - name: Query dependencies 20 | run: | 21 | install.packages('remotes') 22 | saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) 23 | writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version") 24 | shell: Rscript {0} 25 | 26 | - name: Cache R packages 27 | uses: actions/cache@v1 28 | with: 29 | path: ${{ env.R_LIBS_USER }} 30 | key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} 31 | restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- 32 | 33 | - name: Install dependencies 34 | run: | 35 | remotes::install_deps(dependencies = TRUE) 36 | install.packages("pkgdown") 37 | shell: Rscript {0} 38 | 39 | - name: Install package 40 | run: R CMD INSTALL . 41 | 42 | - name: Deploy package 43 | run: | 44 | git config --local user.email "actions@github.com" 45 | git config --local user.name "GitHub Actions" 46 | Rscript -e 'pkgdown::deploy_to_branch(new_process = FALSE)' 47 | -------------------------------------------------------------------------------- /man/pharmaRTF-package.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/pharmaRTF.R 3 | \docType{package} 4 | \name{pharmaRTF-package} 5 | \alias{pharmaRTF} 6 | \alias{pharmaRTF-package} 7 | \title{pharmaRTF} 8 | \description{ 9 | Enhanced RTF wrapper written in R for use with existing R tables 10 | packages such as huxtable or GT. This package fills a gap where tables in 11 | certain packages can be written out to RTF, but cannot add certain metadata 12 | or features to the document that are required/expected in a report for a 13 | regulatory submission, such as multiple levels of titles and footnotes, 14 | making the document landscape, and controlling properties such as margins. 15 | 16 | This package intends to provide a flexible and reliable framework to connect 17 | R to a pharmaceutical reporting workflow. 18 | } 19 | \section{Future Plans}{ 20 | 21 | \itemize{ 22 | \item{colors} 23 | \item{graphs} 24 | } 25 | } 26 | 27 | \seealso{ 28 | Useful links: 29 | \itemize{ 30 | \item Report bugs at \url{https://github.com/atorus-research/pharmaRTF/issues} 31 | } 32 | 33 | } 34 | \author{ 35 | \strong{Maintainer}: Michael Stackhouse \email{mike.stackhouse@atorusresearch.com} (\href{https://orcid.org/0000-0001-6030-723X}{ORCID}) 36 | 37 | Authors: 38 | \itemize{ 39 | \item Eli Miller \email{eli.miller@atorusresearch.com} (\href{https://orcid.org/0000-0002-2127-9456}{ORCID}) 40 | \item Ashley Tarasiewicz \email{Ashley.Tarasiewicz@atorusresearch.com} 41 | } 42 | 43 | Other contributors: 44 | \itemize{ 45 | \item Atorus Research LLC [copyright holder] 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /man/header_rows.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/properties.R 3 | \name{header_rows} 4 | \alias{header_rows} 5 | \alias{header_rows<-} 6 | \alias{set_header_rows} 7 | \title{Return or set the header_rows} 8 | \usage{ 9 | header_rows(x, ...) 10 | 11 | header_rows(x) <- value 12 | 13 | set_header_rows(x, value) 14 | } 15 | \arguments{ 16 | \item{x}{A \code{rtf_doc} object} 17 | 18 | \item{...}{Additonal arguments passed to method dispatch} 19 | 20 | \item{value}{A numeric value to change the header_rows attribute.} 21 | } 22 | \value{ 23 | For \code{header_rows()}, the header_rows attribute of the 24 | \code{rtf_doc} object. For \code{`header_rows<-`()} and 25 | \code{set_header_rows()}, the modified object. 26 | } 27 | \description{ 28 | These property functions modify or return the header_rows attribute of a \code{rtf_doc} 29 | object. Only required and valid when the \code{rtf_doc} table object is a 30 | huxtable. 31 | 32 | The header rows control the number of rows taken from a huxtable table into 33 | the header of the document as the column header. When pulled into the 34 | headers, these rows are repeated on each page. Can be set to 0 to disable repeating column headers. 35 | } 36 | \examples{ 37 | ht <- huxtable::huxtable( 38 | column1 = 1:5, 39 | column2 = letters[1:5] 40 | ) 41 | rtf <- rtf_doc(ht, list(hf_line("aTitle"))) 42 | 43 | header_rows(rtf) 44 | # This is a wrapper for header_rows(x$table) 45 | header_rows(rtf$table) 46 | # Both of these return 1, the default 47 | 48 | header_rows(rtf$table) <- 0 49 | # Sets header_rows to 0 50 | 51 | } 52 | -------------------------------------------------------------------------------- /man/column_header_buffer.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/properties.R 3 | \name{column_header_buffer} 4 | \alias{column_header_buffer} 5 | \alias{column_header_buffer<-} 6 | \alias{set_column_header_buffer} 7 | \title{Return or set column_header_buffer attributes} 8 | \usage{ 9 | column_header_buffer(x, ...) 10 | 11 | column_header_buffer(x) <- value 12 | 13 | set_column_header_buffer(x, ...) 14 | } 15 | \arguments{ 16 | \item{x}{A \code{rtf_doc} object} 17 | 18 | \item{...}{Additonal arguments passed to method dispatch. Should include 19 | argument top and bottom with numeric elements.} 20 | 21 | \item{value}{A named vector detailing the top and bottom buffer.} 22 | } 23 | \value{ 24 | For \code{column_header_buffer}, the column_header_buffer attribute 25 | of the supplied \code{rtf_doc}. For \code{`column_header_buffer<-`()} and 26 | \code{set_column_header_buffer()}, the modified object. 27 | } 28 | \description{ 29 | These property functions modify and return the column header buffers of a 30 | \code{rtf_doc} object. These are stored as a named vector. Names should be \code{top} and 31 | \code{bottom}. This attribute adds rows to the top or bottom of the table 32 | column headers to pad it from the titles above or the table below. 33 | } 34 | \examples{ 35 | library(huxtable) 36 | ht <- huxtable( 37 | column1 = 1:5, 38 | column2 = letters[1:5] 39 | ) 40 | rtf <- rtf_doc(ht, list(hf_line("aTitle"))) 41 | 42 | column_header_buffer(rtf) 43 | # Returns c(top = 0, bottom = 0), the default 44 | 45 | column_header_buffer(rtf) <- c(bottom = 1) 46 | # Sets the bottom column_header_buffer to 1 47 | 48 | } 49 | -------------------------------------------------------------------------------- /man/align.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/properties.R 3 | \name{align} 4 | \alias{align} 5 | \alias{align<-} 6 | \alias{set_align} 7 | \title{Return or set text alignment} 8 | \usage{ 9 | align(x, ...) 10 | 11 | align(x) <- value 12 | 13 | set_align(x, value) 14 | } 15 | \arguments{ 16 | \item{x}{\code{hf_line} object} 17 | 18 | \item{...}{Additional arguments passed to method dispatch.} 19 | 20 | \item{value}{A string representing the alignment.} 21 | } 22 | \value{ 23 | For \code{align()}, the alignment of the supplied \code{hf_line} object. 24 | For \code{set_align()} and \code{`align<-`()}, the modified object. 25 | } 26 | \description{ 27 | These property functions modify or return the text alignment in a \code{hf_line} 28 | object. Supported options are: 'left', 'right', 'center', and 'split'. 29 | 30 | An alignment option of 'split' requires that two text elements are provided 31 | in the titles/footnotes \code{hf_line} object. The first text element will 32 | be aligned on the left and the second on the right. 33 | } 34 | \examples{ 35 | library(huxtable) 36 | ht <- huxtable( 37 | column1 = 1:5, 38 | column2 = letters[1:5] 39 | ) 40 | rtf <- rtf_doc(ht, list(hf_line("aTitle"))) 41 | 42 | pharmaRTF::align(rtf$titles[[1]]) 43 | # Returns "center" 44 | 45 | pharmaRTF::align(rtf$titles[[1]]) <- "left" 46 | # Sets alignment to 'left' 47 | 48 | pharmaRTF::text(rtf$titles[[1]]) <- c("Left Text", "Right Text") 49 | pharmaRTF::align(rtf$titles[[1]]) <- "split" 50 | # When rtf is printed, "Left Text" will be left aligned, and "Right Text" 51 | # will be right aligned. Both will appear on the same line in the document. 52 | 53 | } 54 | -------------------------------------------------------------------------------- /man/font_size.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/properties.R 3 | \name{font_size} 4 | \alias{font_size} 5 | \alias{font_size<-} 6 | \alias{set_font_size} 7 | \title{Return or set font size} 8 | \usage{ 9 | font_size(x, ...) 10 | 11 | font_size(x) <- value 12 | 13 | set_font_size(x, value) 14 | } 15 | \arguments{ 16 | \item{x}{\code{rtf_doc} object or a \code{hf_line} object.} 17 | 18 | \item{...}{Additonal arguments passed to method dispatch.} 19 | 20 | \item{value}{A numeric value for font size in points.} 21 | } 22 | \value{ 23 | For \code{font_size()}, the font_size attribute of the supplied 24 | \code{rtf_doc} or \code{hf_line}. For \code{`font_size<-`()} and 25 | \code{set_font_size}, the modified object. 26 | } 27 | \description{ 28 | These property functions modify or return the font sizes of an \code{rtf_doc} object 29 | or individual titles/footnotes objects of the \code{hf_line} class. 30 | 31 | When used on an rtf_doc object to retrieve font sizes, the document level 32 | default font size within the \code{rtf_doc} is returned. When used on an \code{rtf_doc} to 33 | set fonts, the default font size for the RTF document is set. 34 | 35 | When used on titles/footnotes (\code{hf_line} objects), the font size is either 36 | returned of set for that individual line. 37 | } 38 | \examples{ 39 | library(huxtable) 40 | ht <- huxtable( 41 | column1 = 1:5, 42 | column2 = letters[1:5] 43 | ) 44 | rtf <- rtf_doc(ht, list(hf_line("aTitle", font_size = 15))) 45 | 46 | pharmaRTF::font_size(rtf) 47 | # Returns 12 48 | 49 | pharmaRTF::font_size(rtf) <- 14 50 | 51 | pharmaRTF::font_size(rtf$titles[[1]]) 52 | # Returns 15 53 | pharmaRTF::font_size(rtf) 54 | # Returns 14 55 | 56 | 57 | } 58 | -------------------------------------------------------------------------------- /man/header_footer_height.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/properties.R 3 | \name{header_height} 4 | \alias{header_height} 5 | \alias{header_height<-} 6 | \alias{set_header_height} 7 | \alias{footer_height} 8 | \alias{footer_height<-} 9 | \alias{set_footer_height} 10 | \title{Return or set header/footer height} 11 | \usage{ 12 | header_height(x, ...) 13 | 14 | header_height(x) <- value 15 | 16 | set_header_height(x, value) 17 | 18 | footer_height(x, ...) 19 | 20 | footer_height(x) <- value 21 | 22 | set_footer_height(x, value) 23 | } 24 | \arguments{ 25 | \item{x}{A \code{rtf_doc} object} 26 | 27 | \item{...}{Additonal arguments passed to method dispatch} 28 | 29 | \item{value}{A numeric value to set the header_height/footer_height} 30 | } 31 | \value{ 32 | For \code{header_height()}/\code{footer_height()}, the 33 | header_height/footer_height attribute of thesupplied \code{rtf_doc} 34 | object. For \code{`header_height<-()`}/ \code{`footer_height<-`()} and 35 | \code{set_header_height()}/ \code{set_footer_height()}, the modified 36 | object. 37 | } 38 | \description{ 39 | These property functions modify or return the header_height/footer_height attribute 40 | of a \code{rtf_doc} object. The header/footer height is the default amount of 41 | space allocated to the header/footer from the margin. If the content of the 42 | header/footer exceeds this amount of space, it will be expanded. 43 | } 44 | \examples{ 45 | library(huxtable) 46 | ht <- huxtable( 47 | column1 = 1:5, 48 | column2 = letters[1:5] 49 | ) 50 | rtf <- rtf_doc(ht, list(hf_line("aTitle"))) 51 | 52 | header_height(rtf) 53 | # Returns 0.5, the default 54 | 55 | footer_height(rtf) <- 1 56 | # Sets footer_height to 1 57 | 58 | } 59 | -------------------------------------------------------------------------------- /DESCRIPTION: -------------------------------------------------------------------------------- 1 | Package: pharmaRTF 2 | Type: Package 3 | Title: Enhanced RTF Wrapper for Use with Existing Table Packages 4 | Version: 0.1.4 5 | Authors@R: c( 6 | person(family = "Miller", given = "Eli", email = "eli.miller@atorusresearch.com", role = "aut", comment = c(ORCID = "0000-0002-2127-9456")), 7 | person(family = "Tarasiewicz", given = "Ashley", email = "Ashley.Tarasiewicz@atorusresearch.com", role = "aut"), 8 | person(family = "Stackhouse", given = "Michael", email = "mike.stackhouse@atorusresearch.com", role = c("aut", "cre"), comment = c(ORCID = "0000-0001-6030-723X")), 9 | person(given = "Atorus Research LLC", role = "cph") 10 | ) 11 | Description: Enhanced RTF wrapper written in R for use with existing R tables 12 | packages such as 'Huxtable' or 'GT'. This package fills a gap where tables in 13 | certain packages can be written out to RTF, but cannot add certain metadata 14 | or features to the document that are required/expected in a report for a 15 | regulatory submission, such as multiple levels of titles and footnotes, 16 | making the document landscape, and controlling properties such as margins. 17 | Depends: R (>= 3.5.0) 18 | License: MIT + file LICENSE 19 | BugReports: https://github.com/atorus-research/pharmaRTF/issues 20 | Encoding: UTF-8 21 | LazyData: true 22 | Imports: 23 | assertthat (>= 0.2.1), 24 | stringr (>= 1.4.0), 25 | purrr (>= 0.3.3), 26 | huxtable (>= 4.7.1) 27 | Suggests: 28 | testthat (>= 2.1.0), 29 | dplyr (>= 0.8.4), 30 | readr (>= 1.3.1), 31 | gt (>= 0.2.0), 32 | magrittr (>= 1.5), 33 | knitr (>= 1.28), 34 | rmarkdown (>= 2.1), 35 | readxl (>= 1.3.1), 36 | kableExtra (>= 1.1.0), 37 | plyr (>= 1.8.5), 38 | tidyverse (>= 1.3.0) 39 | RoxygenNote: 7.1.1 40 | VignetteBuilder: knitr 41 | -------------------------------------------------------------------------------- /man/pagesize.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/properties.R 3 | \name{pagesize} 4 | \alias{pagesize} 5 | \alias{pagesize<-} 6 | \alias{set_pagesize} 7 | \title{Return or set pagesize} 8 | \usage{ 9 | pagesize(x, ...) 10 | 11 | pagesize(x) <- value 12 | 13 | set_pagesize(x, value) 14 | } 15 | \arguments{ 16 | \item{x}{A \code{rtf_doc} object} 17 | 18 | \item{...}{Additonal arguments passed to method dispatch} 19 | 20 | \item{value}{A named numeric vector with the names \code{height} and 21 | \code{width}.} 22 | } 23 | \value{ 24 | For \code{pagesize()}, the pagesize attribute of the \code{rtf_doc} 25 | object. For \code{`pagesize<-`()} and \code{set_pagesize()}, the modified 26 | object. 27 | } 28 | \description{ 29 | These property functions modify or return the \code{pagesize} attribute of a 30 | \code{rtf_doc} object. Stored as a named vector with \code{height} and 31 | \code{width} names. 32 | } 33 | \details{ 34 | Note that when the orientation of the document is switched 35 | to 'portrait', the height and width will reverse when the RTF document is being 36 | written - but the attribute values will not change. This is because the default 37 | \code{rtf_doc} orientation is 'landscape', and switching the attributes of the 38 | object allows for a possibility of inadvertently overriding the functionality 39 | of the \code{orientation} attribute. 40 | } 41 | \examples{ 42 | library(huxtable) 43 | ht <- huxtable( 44 | column1 = 1:5, 45 | column2 = letters[1:5] 46 | ) 47 | rtf <- rtf_doc(ht, list(hf_line("aTitle"))) 48 | 49 | pagesize(rtf) 50 | # Returns c(height = 8.5, width = 11.0) 51 | 52 | pagesize(rtf) <- c(height = 12) 53 | # Sets height of page to 12 inches 54 | 55 | orientation(rtf) <- 'portrait' 56 | pagesize(rtf) 57 | # width height 58 | # 8.5 12.0 59 | # Note: Despite changing orientation, attributes don't change 60 | 61 | } 62 | -------------------------------------------------------------------------------- /man/font.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/properties.R 3 | \name{font} 4 | \alias{font} 5 | \alias{font<-} 6 | \alias{set_font} 7 | \title{Return or set font} 8 | \usage{ 9 | font(x, ...) 10 | 11 | font(x) <- value 12 | 13 | set_font(x, value) 14 | } 15 | \arguments{ 16 | \item{x}{\code{rtf_doc} object, the table of a \code{rtf_doc} object, or a 17 | \code{hf_line} object} 18 | 19 | \item{...}{Additional arguments passed to method dispatch} 20 | 21 | \item{value}{A string representing a font} 22 | } 23 | \value{ 24 | For \code{font()}, the font attribute of the object in the case of 25 | \code{hf_line} and the table, or each unique font in the table, titles, 26 | footnotes, and the overall document in the case of \code{rtf_doc}. For 27 | \code{set_font()} and \code{`font<-`()}, the modified object. 28 | } 29 | \description{ 30 | These property functions modify or return the fonts of an \code{rtf_doc} object or 31 | individual titles/footnotes objects of the \code{hf_line} class. 32 | 33 | When used on an \code{rtf_doc} object to retrieve fonts, the distinct set of fonts 34 | of all objects contained within the rtf_doc are returned. When used on an 35 | \code{rtf_doc} to set fonts, the default font for the RTF document is set. 36 | 37 | When used on titles/footnotes (\code{hf_line} objects), the font is either returned 38 | of set for that individual line. 39 | } 40 | \examples{ 41 | library(huxtable) 42 | ht <- huxtable( 43 | column1 = 1:5, 44 | column2 = letters[1:5] 45 | ) 46 | rtf <- rtf_doc(ht, list(hf_line("text", font = "Comic Sans"))) 47 | 48 | pharmaRTF::font(rtf) 49 | # Returns "Courier New" "Comic Sans" 50 | 51 | pharmaRTF::font(rtf) <- "Times" 52 | 53 | pharmaRTF::font(rtf) 54 | # Returns "Times" "Comic Sans" 55 | 56 | pharmaRTF::font(rtf$titles[[1]]) <- "Windings" 57 | 58 | pharmaRTF::font(rtf) 59 | # Returns "Times" "Windings" 60 | 61 | 62 | } 63 | -------------------------------------------------------------------------------- /R/viewers.R: -------------------------------------------------------------------------------- 1 | #' View header and footer information 2 | #' 3 | #' @param doc RTF document 4 | #' @param type type 5 | #' 6 | #' @import utils 7 | #' @noRd 8 | view_hf <- function(doc, type=NULL) { 9 | 10 | # Take out the lines 11 | lines = order_lines(doc[[type]]) 12 | 13 | # Stop if nothing to view 14 | assert_that(length(lines) > 0, 15 | msg = sprintf('No %s to view', type)) 16 | 17 | # Get the row length 18 | rows <- length(lines) 19 | 20 | # Create the template data frame 21 | 22 | .data <- data.frame( 23 | text1 = character(rows), 24 | text2 = character(rows), 25 | align = character(rows), 26 | bold = logical(rows), 27 | italic = logical(rows), 28 | font = character(rows), 29 | font_size = numeric(rows), 30 | index = numeric(rows), 31 | stringsAsFactors = FALSE 32 | ) 33 | 34 | # Loop the lines and update rows in data frame 35 | for (i in 1:length(lines)) { 36 | l <- lines[[i]] 37 | .data$text1[i] <- text(l)[1] 38 | .data$text2[i] <- text(l)[2] 39 | .data$align[i] <- align(l) 40 | .data$bold[i] <- bold(l) 41 | .data$italic[i] <- italic(l) 42 | .data$font[i] <- font(l) 43 | .data$font_size[i] <- font_size(l) 44 | .data$index[i] <- index(l) 45 | } 46 | 47 | .data 48 | } 49 | 50 | #' View title information 51 | #' 52 | #' View titles attached to an \code{rtf_doc} as a data.frame. 53 | #' 54 | #' @param doc \code{rtf_doc} object 55 | #' 56 | #' @return \code{data.frame} of the title information 57 | #' @export 58 | view_titles <- function(doc) { 59 | view_hf(doc, type='titles') 60 | } 61 | 62 | #' View footnote information 63 | #' 64 | #' View footnotes attached to an \code{rtf_doc} as a data.frame. 65 | #' 66 | #' @param doc \code{rtf_doc} object 67 | #' 68 | #' @return \code{data.frame} of the footnote information 69 | #' @export 70 | view_footnotes <- function(doc) { 71 | view_hf(doc, type='footnotes') 72 | } 73 | -------------------------------------------------------------------------------- /docs/bootstrap-toc.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) 3 | * Copyright 2015 Aidan Feldman 4 | * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ 5 | 6 | /* modified from https://github.com/twbs/bootstrap/blob/94b4076dd2efba9af71f0b18d4ee4b163aa9e0dd/docs/assets/css/src/docs.css#L548-L601 */ 7 | 8 | /* All levels of nav */ 9 | nav[data-toggle='toc'] .nav > li > a { 10 | display: block; 11 | padding: 4px 20px; 12 | font-size: 13px; 13 | font-weight: 500; 14 | color: #767676; 15 | } 16 | nav[data-toggle='toc'] .nav > li > a:hover, 17 | nav[data-toggle='toc'] .nav > li > a:focus { 18 | padding-left: 19px; 19 | color: #563d7c; 20 | text-decoration: none; 21 | background-color: transparent; 22 | border-left: 1px solid #563d7c; 23 | } 24 | nav[data-toggle='toc'] .nav > .active > a, 25 | nav[data-toggle='toc'] .nav > .active:hover > a, 26 | nav[data-toggle='toc'] .nav > .active:focus > a { 27 | padding-left: 18px; 28 | font-weight: bold; 29 | color: #563d7c; 30 | background-color: transparent; 31 | border-left: 2px solid #563d7c; 32 | } 33 | 34 | /* Nav: second level (shown on .active) */ 35 | nav[data-toggle='toc'] .nav .nav { 36 | display: none; /* Hide by default, but at >768px, show it */ 37 | padding-bottom: 10px; 38 | } 39 | nav[data-toggle='toc'] .nav .nav > li > a { 40 | padding-top: 1px; 41 | padding-bottom: 1px; 42 | padding-left: 30px; 43 | font-size: 12px; 44 | font-weight: normal; 45 | } 46 | nav[data-toggle='toc'] .nav .nav > li > a:hover, 47 | nav[data-toggle='toc'] .nav .nav > li > a:focus { 48 | padding-left: 29px; 49 | } 50 | nav[data-toggle='toc'] .nav .nav > .active > a, 51 | nav[data-toggle='toc'] .nav .nav > .active:hover > a, 52 | nav[data-toggle='toc'] .nav .nav > .active:focus > a { 53 | padding-left: 28px; 54 | font-weight: 500; 55 | } 56 | 57 | /* from https://github.com/twbs/bootstrap/blob/e38f066d8c203c3e032da0ff23cd2d6098ee2dd6/docs/assets/css/src/docs.css#L631-L634 */ 58 | nav[data-toggle='toc'] .nav > .active > ul { 59 | display: block; 60 | } 61 | -------------------------------------------------------------------------------- /docs/docsearch.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | 3 | // register a handler to move the focus to the search bar 4 | // upon pressing shift + "/" (i.e. "?") 5 | $(document).on('keydown', function(e) { 6 | if (e.shiftKey && e.keyCode == 191) { 7 | e.preventDefault(); 8 | $("#search-input").focus(); 9 | } 10 | }); 11 | 12 | $(document).ready(function() { 13 | // do keyword highlighting 14 | /* modified from https://jsfiddle.net/julmot/bL6bb5oo/ */ 15 | var mark = function() { 16 | 17 | var referrer = document.URL ; 18 | var paramKey = "q" ; 19 | 20 | if (referrer.indexOf("?") !== -1) { 21 | var qs = referrer.substr(referrer.indexOf('?') + 1); 22 | var qs_noanchor = qs.split('#')[0]; 23 | var qsa = qs_noanchor.split('&'); 24 | var keyword = ""; 25 | 26 | for (var i = 0; i < qsa.length; i++) { 27 | var currentParam = qsa[i].split('='); 28 | 29 | if (currentParam.length !== 2) { 30 | continue; 31 | } 32 | 33 | if (currentParam[0] == paramKey) { 34 | keyword = decodeURIComponent(currentParam[1].replace(/\+/g, "%20")); 35 | } 36 | } 37 | 38 | if (keyword !== "") { 39 | $(".contents").unmark({ 40 | done: function() { 41 | $(".contents").mark(keyword); 42 | } 43 | }); 44 | } 45 | } 46 | }; 47 | 48 | mark(); 49 | }); 50 | }); 51 | 52 | /* Search term highlighting ------------------------------*/ 53 | 54 | function matchedWords(hit) { 55 | var words = []; 56 | 57 | var hierarchy = hit._highlightResult.hierarchy; 58 | // loop to fetch from lvl0, lvl1, etc. 59 | for (var idx in hierarchy) { 60 | words = words.concat(hierarchy[idx].matchedWords); 61 | } 62 | 63 | var content = hit._highlightResult.content; 64 | if (content) { 65 | words = words.concat(content.matchedWords); 66 | } 67 | 68 | // return unique words 69 | var words_uniq = [...new Set(words)]; 70 | return words_uniq; 71 | } 72 | 73 | function updateHitURL(hit) { 74 | 75 | var words = matchedWords(hit); 76 | var url = ""; 77 | 78 | if (hit.anchor) { 79 | url = hit.url_without_anchor + '?q=' + escape(words.join(" ")) + '#' + hit.anchor; 80 | } else { 81 | url = hit.url + '?q=' + escape(words.join(" ")); 82 | } 83 | 84 | return url; 85 | } 86 | -------------------------------------------------------------------------------- /man/ignore_cell_padding.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/properties.R 3 | \name{ignore_cell_padding} 4 | \alias{ignore_cell_padding} 5 | \alias{ignore_cell_padding<-} 6 | \alias{set_ignore_cell_padding} 7 | \title{Return or set ignore_cell_padding} 8 | \usage{ 9 | ignore_cell_padding(x, ...) 10 | 11 | ignore_cell_padding(x) <- value 12 | 13 | set_ignore_cell_padding(x, value) 14 | } 15 | \arguments{ 16 | \item{x}{A \code{rtf_doc} object} 17 | 18 | \item{...}{Additonal arguments passed to method dispatch} 19 | 20 | \item{value}{A logical value to set the attribute} 21 | } 22 | \value{ 23 | For \code{ignore_cell_padding()}, the ignore_cell_padding attribute 24 | of the supplied \code{rtf_doc} object. For 25 | \code{`ignore_cell_padding<-`()} and \code{set_ignore_cell_padding()}, the 26 | modified object. 27 | } 28 | \description{ 29 | These property functions modify and return the ignore_cell_padding attribute of a 30 | \code{rtf_doc} object. By default, the huxtable package will pad rows of a 31 | table. This attribute will remove those default settings – which allow the 32 | cells to have a smaller amount of padding than setting the cell padding to 33 | 0. See the Details section for a more thorough description of the 34 | implementation. 35 | } 36 | \details{ 37 | Cell padding in RTF code has multiple command words associated with it. 38 | Huxtable uses the command word \\clpadN to control the cell padding. 39 | This command word is additionally controlled by the command word 40 | \\clpadfN. There are two possible values for N in \\clpadfN: 41 | 42 | \itemize{ 43 | \item{0: Null. This ignores \\clpad in favor of \\trgaph (Word 97 44 | style cell padding).} 45 | \item{3: Twips} 46 | } 47 | 48 | The ignore_cell_padding function toggles the \\clpadfN command words 49 | in the RTF document to 0 instead of 3. By using Word 97 style cell padding, 50 | the minimum amount of space is closer than using the 0 twips setting when the 51 | RTF is rendered inside Word. This effectively closes the gap between rows, 52 | which may be a desirable appearance in some outputs. 53 | 54 | More information on these RTF settings can be found 55 | \href{http://www.biblioscape.com/rtf15_spec.htm}{here}. 56 | } 57 | \examples{ 58 | library(huxtable) 59 | ht <- huxtable( 60 | column1 = 1:5, 61 | column2 = letters[1:5] 62 | ) 63 | rtf <- rtf_doc(ht, list(hf_line("aTitle"))) 64 | 65 | ignore_cell_padding(rtf) 66 | # Returns FALSE, the default 67 | 68 | ignore_cell_padding(rtf) <- TRUE 69 | # Sets ignore_cell_padding to TRUE 70 | 71 | } 72 | -------------------------------------------------------------------------------- /R/table_component_extractors.R: -------------------------------------------------------------------------------- 1 | #' Return the RTF string for header columns 2 | #' 3 | #' This function relys on the package that the table originated from to create 4 | #' a RTF string. 5 | #' 6 | #' @param doc \code{rtf_doc} object to return header string from. 7 | #' 8 | #' @return A RTF encoding string containing the header information 9 | #' @noRd 10 | get_column_headers <- function(doc) UseMethod('get_column_headers', object=doc$table) 11 | 12 | #' @noRd 13 | get_column_headers.huxtable <- function(doc) { 14 | 15 | if(header_rows(doc) == 0) return("") 16 | 17 | # Get the column header 18 | col_headers <- doc$table[1:header_rows(doc$table), ] 19 | 20 | if (needs_buffer(doc)){ 21 | col_headers <- insert_buffer(doc, col_headers) 22 | } 23 | 24 | # Now reset the font size to the default for all the NAs because default doesn't carry forward 25 | cfs <- huxtable::font_size(col_headers) 26 | cfs[is.na(cfs)] <- font_size(doc) 27 | huxtable::font_size(col_headers) <- cfs 28 | 29 | # For huxtable simply return the header rows of the table - turn off cell padding if specified 30 | 31 | out <- huxtable::to_rtf(col_headers, fc_tables = huxtable::rtf_fc_tables(doc$table, extra_fonts = c("Times", font(doc)))) 32 | if (ignore_cell_padding(doc)) { 33 | replace_cell_padding(out) 34 | } else { 35 | out 36 | } 37 | } 38 | 39 | # #' @noRd 40 | # get_column_headers.gt_tbl <- function(doc) { 41 | # data <- gt:::build_data(doc$table, context='rtf') 42 | # gt:::create_columns_component_r(data = data) 43 | # } 44 | 45 | #' Return the RTF string for the body of a table 46 | #' 47 | #' This function relys on the package that the table originated from to create 48 | #' a RTF string. 49 | #' 50 | #' @param doc \code{rtf_doc} object to return header string from. 51 | #' 52 | #' @return A RTF encoding string containing the header information 53 | #' @noRd 54 | get_table_body <- function(doc) UseMethod('get_table_body', object=doc$table) 55 | 56 | #' @noRd 57 | get_table_body.huxtable <- function(doc) { 58 | # For huxtable take everything after the header riws 59 | start_row <- header_rows(doc$table) + 1 60 | body <- doc$table[start_row:nrow(doc$table), ] 61 | 62 | # Turn off cell padding if specified 63 | out <- huxtable::to_rtf(body, fc_tables = huxtable::rtf_fc_tables(doc$table, extra_fonts = c("Times", font(doc)))) 64 | if (ignore_cell_padding(doc)) { 65 | replace_cell_padding(out) 66 | } else { 67 | out 68 | } 69 | } 70 | 71 | # #' @noRd 72 | # get_table_body.gt_tbl <- function(doc) { 73 | # data <- gt:::build_data(doc$table, context='rtf') 74 | # gt:::create_body_component_r(data = data) 75 | # } 76 | -------------------------------------------------------------------------------- /man/titles_and_footnotes_from_df.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/read_hf.R 3 | \name{titles_and_footnotes_from_df} 4 | \alias{titles_and_footnotes_from_df} 5 | \title{Read titles and footnotes from a dataframe} 6 | \usage{ 7 | titles_and_footnotes_from_df( 8 | doc, 9 | from.df = NULL, 10 | from.file = NULL, 11 | reader = NULL, 12 | ... 13 | ) 14 | } 15 | \arguments{ 16 | \item{doc}{A \code{rtf_doc} object to append header and footnote 17 | information.} 18 | 19 | \item{from.df}{A \code{data.frame} object with title and footnote information.} 20 | 21 | \item{from.file}{A file path to a file with title and footnote information.} 22 | 23 | \item{reader}{A function to read the data from the from.file argument.} 24 | 25 | \item{...}{Parameters passed to \code{read_hf} where they are processed and 26 | constructed into \code{hf_line} objects.} 27 | } 28 | \value{ 29 | A \code{rtf_doc} object with header/footnote information attached. 30 | } 31 | \description{ 32 | Reads a data frame with header/footnote information and attaches it to an 33 | \code{rtf_doc} object.The most effective way to use this function is to pass 34 | information to a custom reader for your process. See Details section for more 35 | information. 36 | } 37 | \details{ 38 | Titles_and_footnotes_from_df allows you to attach titles and footnotes 39 | (as hf_line objects) from a data.frame. This data.frame could be a 40 | data.frame in your local environment, or read in from an external file. The 41 | best way to utilize this method is to create a custom reader function. This 42 | custom reader function is a function that you develop to: 43 | 44 | \itemize{ 45 | \item{Read a source file into a data.frame} 46 | \item{Preprocess as necessary to keep only necessary records and variables} 47 | \item{Ensure that variables are the correct data type} 48 | } 49 | 50 | Titles_and_footnotes_from_df allows you to pass arguments into the reader 51 | function, which gives you the capability to keep titles and footnotes for 52 | all of your outputs in a central file and pass a filtering option, or any 53 | additional parameters as necessary. For an example implementation, see our 54 | \href{https://atorus-research.github.io/tf_from_file.html}{vignette}. 55 | } 56 | \section{Required Columns}{ 57 | 58 | The following columns are required fields in a data.frame passed to 59 | titles_and_footnotes_from_df: 60 | \itemize{ 61 | \item{type(character - 'title' or 'footnote')} 62 | \item{text1(character)} 63 | \item{text2(character)} 64 | \item{align(character - left, right, center, or split)} 65 | \item{bold(logical)} 66 | \item{italic(logical)} 67 | \item{font(character)} 68 | \item{index(numeric)} 69 | } 70 | } 71 | 72 | -------------------------------------------------------------------------------- /NAMESPACE: -------------------------------------------------------------------------------- 1 | # Generated by roxygen2: do not edit by hand 2 | 3 | S3method("align<-",hf_line) 4 | S3method("bold<-",hf_line) 5 | S3method("column_header_buffer<-",rtf_doc) 6 | S3method("font<-",hf_line) 7 | S3method("font<-",rtf_doc) 8 | S3method("font_size<-",hf_line) 9 | S3method("font_size<-",rtf_doc) 10 | S3method("footer_height<-",rtf_doc) 11 | S3method("header_height<-",rtf_doc) 12 | S3method("header_rows<-",gt_tbl) 13 | S3method("header_rows<-",huxtable) 14 | S3method("header_rows<-",rtf_doc) 15 | S3method("ignore_cell_padding<-",rtf_doc) 16 | S3method("index<-",hf_line) 17 | S3method("italic<-",hf_line) 18 | S3method("margins<-",rtf_doc) 19 | S3method("orientation<-",rtf_doc) 20 | S3method("pagesize<-",rtf_doc) 21 | S3method("text<-",hf_line) 22 | S3method(align,hf_line) 23 | S3method(bold,hf_line) 24 | S3method(column_header_buffer,rtf_doc) 25 | S3method(font,gt_tbl) 26 | S3method(font,hf_line) 27 | S3method(font,huxtable) 28 | S3method(font,rtf_doc) 29 | S3method(font_size,hf_line) 30 | S3method(font_size,rtf_doc) 31 | S3method(footer_height,rtf_doc) 32 | S3method(header_height,rtf_doc) 33 | S3method(header_rows,gt_tbl) 34 | S3method(header_rows,huxtable) 35 | S3method(header_rows,rtf_doc) 36 | S3method(ignore_cell_padding,rtf_doc) 37 | S3method(index,hf_line) 38 | S3method(italic,hf_line) 39 | S3method(margins,rtf_doc) 40 | S3method(orientation,rtf_doc) 41 | S3method(pagesize,rtf_doc) 42 | S3method(set_column_header_buffer,rtf_doc) 43 | S3method(text,hf_line) 44 | export("align<-") 45 | export("bold<-") 46 | export("column_header_buffer<-") 47 | export("font<-") 48 | export("font_size<-") 49 | export("footer_height<-") 50 | export("header_height<-") 51 | export("header_rows<-") 52 | export("ignore_cell_padding<-") 53 | export("index<-") 54 | export("italic<-") 55 | export("margins<-") 56 | export("orientation<-") 57 | export("pagesize<-") 58 | export("text<-") 59 | export(add_footnotes) 60 | export(add_titles) 61 | export(align) 62 | export(bold) 63 | export(column_header_buffer) 64 | export(font) 65 | export(font_size) 66 | export(footer_height) 67 | export(header_height) 68 | export(header_rows) 69 | export(hf_line) 70 | export(ignore_cell_padding) 71 | export(index) 72 | export(italic) 73 | export(margins) 74 | export(orientation) 75 | export(pagesize) 76 | export(rtf_doc) 77 | export(set_align) 78 | export(set_bold) 79 | export(set_column_header_buffer) 80 | export(set_font) 81 | export(set_font_size) 82 | export(set_footer_height) 83 | export(set_header_height) 84 | export(set_header_rows) 85 | export(set_ignore_cell_padding) 86 | export(set_index) 87 | export(set_italic) 88 | export(set_margins) 89 | export(set_orientation) 90 | export(set_pagesize) 91 | export(set_text) 92 | export(text) 93 | export(titles_and_footnotes_from_df) 94 | export(view_footnotes) 95 | export(view_titles) 96 | export(write_rtf) 97 | import(utils) 98 | importFrom(assertthat,assert_that) 99 | importFrom(assertthat,is.writeable) 100 | importFrom(huxtable,as_hux) 101 | importFrom(purrr,transpose) 102 | importFrom(stringr,str_replace_all) 103 | -------------------------------------------------------------------------------- /.github/workflows/R-CMD-check.yaml: -------------------------------------------------------------------------------- 1 | # For help debugging build failures open an issue on the RStudio community with the 'github-actions' tag. 2 | # https://community.rstudio.com/new-topic?category=Package%20development&tags=github-actions 3 | on: 4 | push: 5 | branches: 6 | - main 7 | - master 8 | pull_request: 9 | branches: 10 | - main 11 | - master 12 | 13 | name: R-CMD-check 14 | 15 | jobs: 16 | R-CMD-check: 17 | runs-on: ${{ matrix.config.os }} 18 | 19 | name: ${{ matrix.config.os }} (${{ matrix.config.r }}) 20 | 21 | strategy: 22 | fail-fast: false 23 | matrix: 24 | config: 25 | - {os: windows-latest, r: 'release'} 26 | - {os: macOS-latest, r: 'release'} 27 | - {os: ubuntu-20.04, r: 'release', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"} 28 | - {os: ubuntu-20.04, r: 'devel', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"} 29 | 30 | env: 31 | R_REMOTES_NO_ERRORS_FROM_WARNINGS: true 32 | RSPM: ${{ matrix.config.rspm }} 33 | GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} 34 | 35 | steps: 36 | - uses: actions/checkout@v2 37 | 38 | - uses: r-lib/actions/setup-r@v1 39 | with: 40 | r-version: ${{ matrix.config.r }} 41 | 42 | - uses: r-lib/actions/setup-pandoc@v1 43 | 44 | - name: Query dependencies 45 | run: | 46 | install.packages('remotes') 47 | saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) 48 | writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version") 49 | shell: Rscript {0} 50 | 51 | - name: Restore R package cache 52 | if: runner.os != 'Windows' 53 | uses: actions/cache@v2 54 | with: 55 | path: ${{ env.R_LIBS_USER }} 56 | key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} 57 | restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- 58 | 59 | - name: Install system dependencies 60 | if: runner.os == 'Linux' 61 | run: | 62 | while read -r cmd 63 | do 64 | eval sudo $cmd 65 | done < <(Rscript -e 'writeLines(remotes::system_requirements("ubuntu", "20.04"))') 66 | 67 | - name: Install dependencies 68 | run: | 69 | remotes::install_deps(dependencies = TRUE) 70 | remotes::install_cran("rcmdcheck") 71 | shell: Rscript {0} 72 | 73 | - name: Check 74 | env: 75 | _R_CHECK_CRAN_INCOMING_REMOTE_: false 76 | run: | 77 | options(crayon.enabled = TRUE) 78 | rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "warning", check_dir = "check") 79 | shell: Rscript {0} 80 | 81 | - name: Upload check results 82 | if: failure() 83 | uses: actions/upload-artifact@main 84 | with: 85 | name: ${{ runner.os }}-r${{ matrix.config.r }}-results 86 | path: check 87 | -------------------------------------------------------------------------------- /vignettes/Validation/Specifications/specification.Rmd: -------------------------------------------------------------------------------- 1 | #' @section Last Updated By: 2 | #' Ashley Tarasiewicz 3 | #' @section Last Update Date: 4 | #' 6/16/2020 5 | + A: The RTF written out to a file can be opened in Microsoft Word 6 | + B: Paging of the table works appropriately 7 | + C: Changes to document level margins are reflected in the output document 8 | + D: Changes to document level header and footer height are reflected in the output document 9 | + E: Changes to document level page size are reflected in the output document 10 | + F: Changes to document level orientation are reflected in the output document 11 | + G: Changes to document level default font size are reflected in the output document 12 | + H: Changes to document level default font are reflected in the output document 13 | + I: Changes to document level header rows are reflected in the output document 14 | + J: Changes to document level column header buffer are reflected in the output document 15 | + K: Changes to document level ignore cell padding are reflected in the output document 16 | + L: Titles and footnotes can be manually entered in the RTF document creation 17 | + M: Titles and footnotes can be manually entered using add_titles/add_footnotes 18 | + N: Titles and footnotes can be manually entered importing from a separate file using a reader 19 | + O: PAGE_FORMAT for titles and footnotes works properly 20 | + P: DATE_FORMAT for titles and footnotes works properly 21 | + Q: FILE_PATH for titles and footnotes works properly 22 | + R: Bold titles/footnotes attributes update correctly when specified 23 | + S: Italic titles/footnotes attributes update correctly when specified 24 | + T: Align titles/footnotes attributes update correctly when specified, i.e. split titles/footnotes flush left and right as expected 25 | + U: Font titles/footnotes attributes update correctly when specified 26 | + V: Font size titles/footnotes attributes update correctly when specified 27 | + W: Index titles/footnotes attributes update correctly when specified, i.e. specified indices sort appropriately when entered in separte orders, NULL indices sort last 28 | + X: View functions (i.e. view_titles and view_footnotes) render data frames appropriately 29 | + Y: Updates to huxtable table bold table level property is properly formatted in the resulting RTF 30 | + Z: Updates to huxtable table italic table level property is properly formatted in the resulting RTF 31 | + AA: Updates to huxtable table alignment (center, left, right) table level property is properly formatted in the resulting RTF 32 | + AB: Updates to huxtable table vertical alignment (center, top, bottom) table level property is properly formatted in the resulting RTF 33 | + AC: Updates to huxtable table table width table level property is properly formatted in the resulting RTF 34 | + AD: Updates to huxtable table column width table level property is properly formatted in the resulting RTF 35 | + AE: Updates to huxtable table row height table level property is properly formatted in the resulting RTF 36 | + AF: Updates to huxtable table cell merging table level property is properly formatted in the resulting RTF 37 | + AG: When the header_rows attribute is 0, the column headers write to the RTF body instead of the document header 38 | -------------------------------------------------------------------------------- /vignettes/specs.csv: -------------------------------------------------------------------------------- 1 | LineType,Level,SpecID,Text 2 | UpdatedBy,0,,Ashley Tarasiewicz 3 | UpdatedDate,0,,6/16/2020 4 | Specs,0,A,The RTF written out to a file can be opened in Microsoft Word 5 | Specs,0,B,Paging of the table works appropriately 6 | Specs,0,C,Changes to document level margins are reflected in the output document 7 | Specs,0,D,Changes to document level header and footer height are reflected in the output document 8 | Specs,0,E,Changes to document level page size are reflected in the output document 9 | Specs,0,F,Changes to document level orientation are reflected in the output document 10 | Specs,0,G,Changes to document level default font size are reflected in the output document 11 | Specs,0,H,Changes to document level default font are reflected in the output document 12 | Specs,0,I,Changes to document level header rows are reflected in the output document 13 | Specs,0,J,Changes to document level column header buffer are reflected in the output document 14 | Specs,0,K,Changes to document level ignore cell padding are reflected in the output document 15 | Specs,0,L,Titles and footnotes can be manually entered in the RTF document creation 16 | Specs,0,M,Titles and footnotes can be manually entered using add_titles/add_footnotes 17 | Specs,0,N,Titles and footnotes can be manually entered importing from a separate file using a reader 18 | Specs,0,O,PAGE_FORMAT for titles and footnotes works properly 19 | Specs,0,P,DATE_FORMAT for titles and footnotes works properly 20 | Specs,0,Q,FILE_PATH for titles and footnotes works properly 21 | Specs,0,R,Bold titles/footnotes attributes update correctly when specified 22 | Specs,0,S,Italic titles/footnotes attributes update correctly when specified 23 | Specs,0,T,"Align titles/footnotes attributes update correctly when specified, i.e. split titles/footnotes flush left and right as expected" 24 | Specs,0,U,Font titles/footnotes attributes update correctly when specified 25 | Specs,0,V,Font size titles/footnotes attributes update correctly when specified 26 | Specs,0,W,"Index titles/footnotes attributes update correctly when specified, i.e. specified indices sort appropriately when entered in separte orders, NULL indices sort last" 27 | Specs,0,X,View functions (i.e. view_titles and view_footnotes) render data frames appropriately 28 | Specs,0,Y,Updates to huxtable table bold table level property is properly formatted in the resulting RTF 29 | Specs,0,Z,Updates to huxtable table italic table level property is properly formatted in the resulting RTF 30 | Specs,0,AA,"Updates to huxtable table alignment (center, left, right) table level property is properly formatted in the resulting RTF" 31 | Specs,0,AB,"Updates to huxtable table vertical alignment (center, top, bottom) table level property is properly formatted in the resulting RTF" 32 | Specs,0,AC,Updates to huxtable table table width table level property is properly formatted in the resulting RTF 33 | Specs,0,AD,Updates to huxtable table column width table level property is properly formatted in the resulting RTF 34 | Specs,0,AE,Updates to huxtable table row height table level property is properly formatted in the resulting RTF 35 | Specs,0,AF,Updates to huxtable table cell merging table level property is properly formatted in the resulting RTF 36 | Specs,0,AG,"When the header_rows attribute is 0, the column headers write to the RTF body instead of the document header" 37 | -------------------------------------------------------------------------------- /docs/pkgdown.js: -------------------------------------------------------------------------------- 1 | /* http://gregfranko.com/blog/jquery-best-practices/ */ 2 | (function($) { 3 | $(function() { 4 | 5 | $('.navbar-fixed-top').headroom(); 6 | 7 | $('body').css('padding-top', $('.navbar').height() + 10); 8 | $(window).resize(function(){ 9 | $('body').css('padding-top', $('.navbar').height() + 10); 10 | }); 11 | 12 | $('[data-toggle="tooltip"]').tooltip(); 13 | 14 | var cur_path = paths(location.pathname); 15 | var links = $("#navbar ul li a"); 16 | var max_length = -1; 17 | var pos = -1; 18 | for (var i = 0; i < links.length; i++) { 19 | if (links[i].getAttribute("href") === "#") 20 | continue; 21 | // Ignore external links 22 | if (links[i].host !== location.host) 23 | continue; 24 | 25 | var nav_path = paths(links[i].pathname); 26 | 27 | var length = prefix_length(nav_path, cur_path); 28 | if (length > max_length) { 29 | max_length = length; 30 | pos = i; 31 | } 32 | } 33 | 34 | // Add class to parent
  • , and enclosing
  • if in dropdown 35 | if (pos >= 0) { 36 | var menu_anchor = $(links[pos]); 37 | menu_anchor.parent().addClass("active"); 38 | menu_anchor.closest("li.dropdown").addClass("active"); 39 | } 40 | }); 41 | 42 | function paths(pathname) { 43 | var pieces = pathname.split("/"); 44 | pieces.shift(); // always starts with / 45 | 46 | var end = pieces[pieces.length - 1]; 47 | if (end === "index.html" || end === "") 48 | pieces.pop(); 49 | return(pieces); 50 | } 51 | 52 | // Returns -1 if not found 53 | function prefix_length(needle, haystack) { 54 | if (needle.length > haystack.length) 55 | return(-1); 56 | 57 | // Special case for length-0 haystack, since for loop won't run 58 | if (haystack.length === 0) { 59 | return(needle.length === 0 ? 0 : -1); 60 | } 61 | 62 | for (var i = 0; i < haystack.length; i++) { 63 | if (needle[i] != haystack[i]) 64 | return(i); 65 | } 66 | 67 | return(haystack.length); 68 | } 69 | 70 | /* Clipboard --------------------------*/ 71 | 72 | function changeTooltipMessage(element, msg) { 73 | var tooltipOriginalTitle=element.getAttribute('data-original-title'); 74 | element.setAttribute('data-original-title', msg); 75 | $(element).tooltip('show'); 76 | element.setAttribute('data-original-title', tooltipOriginalTitle); 77 | } 78 | 79 | if(ClipboardJS.isSupported()) { 80 | $(document).ready(function() { 81 | var copyButton = ""; 82 | 83 | $(".examples, div.sourceCode").addClass("hasCopyButton"); 84 | 85 | // Insert copy buttons: 86 | $(copyButton).prependTo(".hasCopyButton"); 87 | 88 | // Initialize tooltips: 89 | $('.btn-copy-ex').tooltip({container: 'body'}); 90 | 91 | // Initialize clipboard: 92 | var clipboardBtnCopies = new ClipboardJS('[data-clipboard-copy]', { 93 | text: function(trigger) { 94 | return trigger.parentNode.textContent; 95 | } 96 | }); 97 | 98 | clipboardBtnCopies.on('success', function(e) { 99 | changeTooltipMessage(e.trigger, 'Copied!'); 100 | e.clearSelection(); 101 | }); 102 | 103 | clipboardBtnCopies.on('error', function() { 104 | changeTooltipMessage(e.trigger,'Press Ctrl+C or Command+C to copy'); 105 | }); 106 | }); 107 | } 108 | })(window.jQuery || window.$) 109 | -------------------------------------------------------------------------------- /vignettes/roxy_block_details.R: -------------------------------------------------------------------------------- 1 | #' @title Retrieve the value in a function specifiation block of a custom section 2 | #' @param tag name of the section, case insensitive. 3 | #' @param block character vector that holds the documentation block 4 | #' @return section value 5 | get_section_contents <- function(tag, block){ 6 | tag_no <- which(grepl(pattern = tolower(tag), tolower(block))) 7 | gsub(pattern = "[[:space:]]^|[[:space:]]$", replacement = "", 8 | x = block[tag_no + 1]) 9 | } 10 | 11 | #' @title Generate at data.frame from the function specification roxygen documentation 12 | #' block. 13 | #' @description May be used for specification or test case .Rmd files located 14 | #' in \code{function_specification} folder. 15 | #' @param one_file full filepath of the .Rmd file to scrape 16 | #' @return data.frame with variables: \code{title}, \code{last_update_by}, and 17 | #' \code{last_updated_date}. 18 | #' @examples 19 | #' \dontrun{ 20 | #' library(here) 21 | #' library(magrittr) 22 | #' list.files(here("vignettes", "function_specifications", "test_cases"), 23 | #' full.names = TRUE)[1:4] %>% 24 | #' lapply(., scrape_function_specification_block) %>% 25 | #' do.call(rbind, .) 26 | #' 27 | #' list.files(here("vignettes", "function_specifications", "specifications"), 28 | #' full.names = TRUE)[1:4] %>% 29 | #' lapply(., scrape_function_specifications) %>% 30 | #' do.call(rbind, .) 31 | #' } 32 | scrape_function_specification_block <- function(one_file){ 33 | lines <- readLines(one_file) 34 | rox_block <- gsub(pattern = "#' ", replacement = "", 35 | x = lines[grep(pattern = "#' ", x = lines)]) 36 | data.frame(title = basename(one_file), 37 | last_update_by = get_section_contents("Last updated by", rox_block), 38 | last_updated_date = lubridate::parse_date_time(get_section_contents("last update date", rox_block), 39 | orders = c("ymd", "mdy")), 40 | stringsAsFactors = FALSE) 41 | } 42 | 43 | 44 | #' @title Generate at data.frame from the function roxygen documentation 45 | #' block. 46 | #' @description May be used for specification or test case .Rmd files located 47 | #' in \code{function_specification} folder. 48 | #' @param one_file full filepath of the .R file to scrape 49 | #' @return data.frame with variables: \code{title}, \code{author}, and 50 | #' \code{last_updated_date}. 51 | scrape_function_author_block <- function(one_file){ 52 | refs <- parse(one_file, keep.source = TRUE, 53 | srcfile = srcfilecopy(one_file, lines, isFile = TRUE)) %>% 54 | utils::getSrcref() 55 | srcfile <- attr(refs[[1]], "srcfile") 56 | do.call(rbind, lapply(seq_along(refs), function(i) { 57 | first_byte <- refs[[i]][4] 58 | first_line <- ifelse(i == 1, 1, refs[[i - 1]][1]) 59 | last_line <- refs[[i]][1] - 1 60 | last_byte <- refs[[i]][3] 61 | lloc <- c(first_line, first_byte, last_line, last_byte) 62 | out <- as.character(srcref(srcfile, lloc)) 63 | out_cleaned <- out[grepl(out, pattern = "#' ")] 64 | if (length(out_cleaned) == 0 | length(grep(out_cleaned, pattern = "#' @section")) == 0) { 65 | return(data.frame()) 66 | } else { 67 | roxy_block <- gsub(pattern = "#' ", replacement = "", 68 | out_cleaned[grep(pattern = "#' ", out_cleaned)]) 69 | return(data.frame(title = as.character(parse(text = as.character(refs[[i]]))[[1]])[2], 70 | author = get_section_contents("updated by", roxy_block), 71 | last_updated_date = lubridate::parse_date_time(get_section_contents(" date", tolower(roxy_block)), 72 | orders = c("ymd", "mdy")), 73 | stringsAsFactors = FALSE)) 74 | } 75 | })) 76 | } 77 | -------------------------------------------------------------------------------- /vignettes/Validation/app.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | library(shinydashboard) 3 | ui <- fluidPage( 4 | dashboardPage( 5 | dashboardHeader(title = "Validation User Application"), 6 | dashboardSidebar(disable = TRUE), 7 | dashboardBody( 8 | box( 9 | uiOutput("vurOutput"), 10 | actionButton("sendButton", "Submit"), 11 | actionButton("backButton", "Prev Question"), 12 | actionButton("nextButton", "Next Question"), 13 | actionButton("openButton" , "Open File"), 14 | verbatimTextOutput("checkInfo"), 15 | title = "Current Check" 16 | ), 17 | box( 18 | tableOutput("UserDf"), 19 | actionButton("saveButton", "Create Validation Document"), 20 | verbatimTextOutput("userInfo"), 21 | title = "User Tests" 22 | ) 23 | ) 24 | ) 25 | ) 26 | 27 | server <- function(input, output) { 28 | 29 | vur <- reactiveValues(df = { 30 | df <- read.csv("../test_cases.csv") 31 | df <- df[df$CheckType == "visual",] 32 | df$Response <- FALSE 33 | df$Log <- NA 34 | df$ID <- paste0(df$TestID, ".", df$CheckID) 35 | df 36 | }) 37 | 38 | observeEvent(input$sendButton, { 39 | vur$df[((input$nextButton - input$backButton + input$sendButton - 1) %% nrow(vur$df)) + 1, 40 | "Response"] <- as.logical(input$vurButtons) 41 | vur$df[((input$nextButton - input$backButton + input$sendButton - 1) %% nrow(vur$df)) + 1, 42 | "Log"] <- paste0(Sys.getenv("LOGNAME"), ":", Sys.time()) 43 | }) 44 | 45 | output$vurOutput <- renderUI({ 46 | radioButtons("vurButtons", 47 | vur$df[((input$nextButton - input$backButton + input$sendButton) %% nrow(vur$df)) + 1, "Text"], 48 | choices = c(TRUE, FALSE)) 49 | }) 50 | 51 | output$checkInfo <- renderText({ 52 | paste0( 53 | "Current Test: ", vur$df[((input$nextButton - input$backButton + input$sendButton) %% nrow(vur$df)) + 1, 54 | "TestID"], "\n", 55 | "Current Check: " , vur$df[((input$nextButton - input$backButton + input$sendButton) %% nrow(vur$df)) + 1, 56 | "CheckID"], "\n", 57 | "Manual Check of: ", vur$df[((input$nextButton - input$backButton + input$sendButton) %% nrow(vur$df)) + 1, 58 | "OutputFile"] 59 | ) 60 | }) 61 | 62 | observeEvent(input$saveButton, { 63 | saveRDS(vur$df, "~/pharmaRTF/vignettes/Validation/vur_auto.Rds") 64 | showModal(modalDialog("Validation User Responses written")) 65 | rmarkdown::render("~/pharmaRTF/vignettes/Validate.Rmd", "pdf_document") 66 | # file.remove("~/pharmaRTF/vignettes/Validation/vur_auto.Rds") 67 | }) 68 | 69 | output$UserDf <- renderTable(vur$df[, c("ID", "Text", "OutputFile", "Response")]) 70 | 71 | output$userInfo <- renderText({ 72 | paste0("User: ", Sys.getenv("USER"), "\n", 73 | "Tests Passed/Failed/Total: ", 74 | sum(vur$df$Response), "/", 75 | sum(!vur$df$Response), "/", 76 | length(vur$df$Response)) 77 | }) 78 | 79 | observeEvent(input$openButton, { 80 | filePath <- paste0(getwd(), 81 | "/Test_Case_Code/rtf-test-files/", 82 | vur$df[((input$nextButton - input$backButton + input$sendButton) %% nrow(vur$df)) + 1, 83 | "OutputFile"] 84 | ) 85 | if(file.exists(filePath)){ 86 | showModal(modalDialog("This doesn't work yet")) 87 | # system(filePath) 88 | } else { 89 | showModal(modalDialog("RTF File Not found")) 90 | } 91 | }) 92 | } 93 | 94 | shinyApp(ui = ui, server = server) 95 | -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_6.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\deff1 2 | {\fonttbl 3 | {\f0 Times;} 4 | {\f1 Courier New;} 5 | }{\colortbl;;} 6 | 7 | 8 | 9 | \paperw12240\paperh15840\widowctrl\ftnbj\fet0\sectd\linex0 10 | \margl1440\margr1440\margt1440\margb1440 11 | \headery720\footery720\fs24 12 | 13 | 14 | 15 | {\header 16 | 17 | \par 18 | 19 | { 20 | \trowd 21 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 22 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{\fs24 {Header1}}\cell 23 | \pard\intbl\ql{\fs24 {Header2}}\cell 24 | \row 25 | } 26 | 27 | } 28 | {\footer 29 | \par 30 | } 31 | { 32 | \trowd 33 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 34 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{1}\cell 35 | \pard\intbl\ql{a}\cell 36 | \row 37 | } 38 | 39 | { 40 | \trowd 41 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 42 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{2}\cell 43 | \pard\intbl\ql{b}\cell 44 | \row 45 | } 46 | 47 | { 48 | \trowd 49 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 50 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{3}\cell 51 | \pard\intbl\ql{c}\cell 52 | \row 53 | } 54 | 55 | { 56 | \trowd 57 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 58 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{4}\cell 59 | \pard\intbl\ql{d}\cell 60 | \row 61 | } 62 | 63 | { 64 | \trowd 65 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 66 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{5}\cell 67 | \pard\intbl\ql{e}\cell 68 | \row 69 | } 70 | 71 | { 72 | \trowd 73 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 74 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{6}\cell 75 | \pard\intbl\ql{f}\cell 76 | \row 77 | } 78 | 79 | { 80 | \trowd 81 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 82 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{7}\cell 83 | \pard\intbl\ql{g}\cell 84 | \row 85 | } 86 | 87 | { 88 | \trowd 89 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 90 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{8}\cell 91 | \pard\intbl\ql{h}\cell 92 | \row 93 | } 94 | 95 | { 96 | \trowd 97 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 98 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{9}\cell 99 | \pard\intbl\ql{i}\cell 100 | \row 101 | } 102 | 103 | { 104 | \trowd 105 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 106 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{10}\cell 107 | \pard\intbl\ql{j}\cell 108 | \row 109 | } 110 | 111 | } -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_54.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\deff1 2 | {\fonttbl 3 | {\f0 Times;} 4 | {\f1 Courier New;} 5 | }{\colortbl;;} 6 | 7 | 8 | 9 | \paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\linex0 10 | \lndscpsxn 11 | \margl1440\margr1440\margt1440\margb1440 12 | \headery720\footery720\fs24 13 | 14 | 15 | 16 | {\header 17 | 18 | \par 19 | 20 | } 21 | {\footer 22 | \par 23 | } 24 | { 25 | \trowd 26 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 27 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{Header1}\cell 28 | \pard\intbl\ql{Header2}\cell 29 | \row 30 | } 31 | 32 | { 33 | \trowd 34 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 35 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{1}\cell 36 | \pard\intbl\ql{a}\cell 37 | \row 38 | } 39 | 40 | { 41 | \trowd 42 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 43 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{2}\cell 44 | \pard\intbl\ql{b}\cell 45 | \row 46 | } 47 | 48 | { 49 | \trowd 50 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 51 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{3}\cell 52 | \pard\intbl\ql{c}\cell 53 | \row 54 | } 55 | 56 | { 57 | \trowd 58 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 59 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{4}\cell 60 | \pard\intbl\ql{d}\cell 61 | \row 62 | } 63 | 64 | { 65 | \trowd 66 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 67 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{5}\cell 68 | \pard\intbl\ql{e}\cell 69 | \row 70 | } 71 | 72 | { 73 | \trowd 74 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 75 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{6}\cell 76 | \pard\intbl\ql{f}\cell 77 | \row 78 | } 79 | 80 | { 81 | \trowd 82 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 83 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{7}\cell 84 | \pard\intbl\ql{g}\cell 85 | \row 86 | } 87 | 88 | { 89 | \trowd 90 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 91 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{8}\cell 92 | \pard\intbl\ql{h}\cell 93 | \row 94 | } 95 | 96 | { 97 | \trowd 98 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 99 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{9}\cell 100 | \pard\intbl\ql{i}\cell 101 | \row 102 | } 103 | 104 | { 105 | \trowd 106 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 107 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{10}\cell 108 | \pard\intbl\ql{j}\cell 109 | \row 110 | } 111 | 112 | } -------------------------------------------------------------------------------- /man/rtf_doc.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/rtf_doc.R 3 | \name{rtf_doc} 4 | \alias{rtf_doc} 5 | \title{Create a \code{rtf_doc} object} 6 | \usage{ 7 | rtf_doc(table, titles = list(), footnotes = list(), header_rows = 1) 8 | } 9 | \arguments{ 10 | \item{table}{A table of a supported class.} 11 | 12 | \item{titles}{A list of \code{hf_line} objects containing table titles and 13 | associated formatting.} 14 | 15 | \item{footnotes}{A list of \code{hf_line} objects containing table footnotes 16 | and associated formatting.} 17 | 18 | \item{header_rows}{An integer determining how many rows of the table are 19 | column headers. Only used for huxtable tables. Can be set to 0 to disable repeating column headers.} 20 | } 21 | \value{ 22 | A list with a table, titles, and footnotes component. Class of 23 | "rtf_doc" with the properties describled below. 24 | } 25 | \description{ 26 | This constructs the main object that will be used for an RTF document. The 27 | object is composed of a table, titles(s), and footnote(s). 28 | 29 | A table contained in the \code{rtf_doc} object should be a supported class. 30 | The huxtable package is the most supported, however our intention is to 31 | support other packages capable of writing RTF tables as well. Currently, it 32 | is planned to support the \code{gt} package, but the \code{gt} package's RTF 33 | methods are not functional. 34 | 35 | The titles and footnotes are composed of \code{hf_line} objects. 36 | 37 | See the \href{https://atorus-research.github.io/pharmaRTF.html}{vignette} 38 | for a more complete view of intended usage. 39 | } 40 | \section{\code{rtf_doc} Properties}{ 41 | 42 | Document level properties set the defaults and will be used where they are 43 | not overridden by \code{hf_line} or table properties. 44 | \itemize{ 45 | \item{font - A string representing the font to display when it is not 46 | specified by the table or \code{hf_line}. Defaults to Courier New.} 47 | \item{font_size - A numeric value representing the size of the font in 48 | points. Defaults to 12.} 49 | \item{margins - Inches of margins in the document as a named vector. Names 50 | are \code{top}, \code{bottom}, \code{left}, and \code{right}. Defaults to 1 51 | for all.} 52 | \item{orientation - Orientation of the document. Defaults to 'landscape'. When 'portrait', 53 | the height and width are switched while writing the document to effectively rotate the document 54 | 90 degrees. For example, if width is 11" and height is 8.5", while writing the document will have a 55 | height of 11" and a width of 8.5". Additionally, when 'landscape', a keyword is written 56 | to the RTF to indicate that the document is landscape. .} 57 | \item{header_height - Height of the header where the titles and column 58 | headers are displayed. Defaults to .5 inches.} 59 | \item{footer_height - Height of the footer where the footnotes are displayed. 60 | Defaults to .5 inches.} 61 | \item{pagesize - Size of the page in inches. Defaults to 8.5(height) by 62 | 11(width). These defaults align with the default orientation of 'landscape'. When the orientation 63 | is switched to 'portrait', the height and width will switch while the RTF document is being generated, 64 | but the document attributes themselves will not change.} 65 | \item{header_rows - Huxtable table only. Number of rows that are defined as 66 | the header that will be repeated across pages. Defaults to 1. Can be set to 0 to disable repeating column headers.} 67 | \item{ignore_cell_padding - Huxtable table only. Flag to ignore cell padding padding 68 | that is added during RTF encoding. Minimizes the amount of space between 69 | rows. Defaults to FALSE.} 70 | \item{column_header_buffer} - This attribute adds rows to the top or bottom of the table 71 | column headers to pad it from the titles above or the table below. 72 | Defaults to 0 and 0. 73 | } 74 | } 75 | 76 | \examples{ 77 | # Adding lines during rtf_doc construction 78 | ht <- huxtable::huxtable( 79 | column1 = 1:5, 80 | column2 = letters[1:5] 81 | ) 82 | # Set table properties 83 | library(magrittr) #load in a pipe 84 | ht \%>\% 85 | huxtable::set_bold(1, 1:ncol(ht), TRUE) \%>\% 86 | huxtable::set_escape_contents(TRUE) \%>\% 87 | huxtable::set_col_width(c(0.25, 0.75)) 88 | 89 | rtf <- rtf_doc(ht, titles = list(hf_line("My Header"))) 90 | # Set document properties 91 | rtf <- rtf \%>\% 92 | set_font_size(15) \%>\% 93 | set_ignore_cell_padding(TRUE) 94 | 95 | names(rtf) 96 | 97 | write_rtf(rtf, file = tempfile()) 98 | 99 | } 100 | \seealso{ 101 | \code{\link{hf_line}} 102 | } 103 | -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_3.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\deff1 2 | {\fonttbl 3 | {\f0 Times;} 4 | {\f1 Courier New;} 5 | }{\colortbl;;} 6 | 7 | 8 | 9 | \paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\linex0 10 | \lndscpsxn 11 | \margl2160\margr360\margt2880\margb720 12 | \headery720\footery720\fs24 13 | 14 | 15 | 16 | {\header 17 | 18 | \par 19 | 20 | { 21 | \trowd 22 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 23 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{\fs24 {Header1}}\cell 24 | \pard\intbl\ql{\fs24 {Header2}}\cell 25 | \row 26 | } 27 | 28 | } 29 | {\footer 30 | \par 31 | } 32 | { 33 | \trowd 34 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 35 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{1}\cell 36 | \pard\intbl\ql{a}\cell 37 | \row 38 | } 39 | 40 | { 41 | \trowd 42 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 43 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{2}\cell 44 | \pard\intbl\ql{b}\cell 45 | \row 46 | } 47 | 48 | { 49 | \trowd 50 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 51 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{3}\cell 52 | \pard\intbl\ql{c}\cell 53 | \row 54 | } 55 | 56 | { 57 | \trowd 58 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 59 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{4}\cell 60 | \pard\intbl\ql{d}\cell 61 | \row 62 | } 63 | 64 | { 65 | \trowd 66 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 67 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{5}\cell 68 | \pard\intbl\ql{e}\cell 69 | \row 70 | } 71 | 72 | { 73 | \trowd 74 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 75 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{6}\cell 76 | \pard\intbl\ql{f}\cell 77 | \row 78 | } 79 | 80 | { 81 | \trowd 82 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 83 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{7}\cell 84 | \pard\intbl\ql{g}\cell 85 | \row 86 | } 87 | 88 | { 89 | \trowd 90 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 91 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{8}\cell 92 | \pard\intbl\ql{h}\cell 93 | \row 94 | } 95 | 96 | { 97 | \trowd 98 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 99 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{9}\cell 100 | \pard\intbl\ql{i}\cell 101 | \row 102 | } 103 | 104 | { 105 | \trowd 106 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 107 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{10}\cell 108 | \pard\intbl\ql{j}\cell 109 | \row 110 | } 111 | 112 | } -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_11.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\deff1 2 | {\fonttbl 3 | {\f0 Times;} 4 | {\f1 Courier New;} 5 | }{\colortbl;;} 6 | 7 | 8 | 9 | \paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\linex0 10 | \lndscpsxn 11 | \margl1440\margr1440\margt1440\margb1440 12 | \headery720\footery720\fs24 13 | 14 | 15 | 16 | {\header 17 | 18 | \par 19 | 20 | { 21 | \trowd 22 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx2160 23 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx4320 \pard\intbl\ql{\fs24 {Header1}}\cell 24 | \pard\intbl\ql{\fs24 {Header2}}\cell 25 | \row 26 | } 27 | 28 | } 29 | {\footer 30 | \par 31 | } 32 | { 33 | \trowd 34 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx2160 35 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx4320 \pard\intbl\ql{1}\cell 36 | \pard\intbl\ql{a}\cell 37 | \row 38 | } 39 | 40 | { 41 | \trowd 42 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx2160 43 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx4320 \pard\intbl\ql{2}\cell 44 | \pard\intbl\ql{b}\cell 45 | \row 46 | } 47 | 48 | { 49 | \trowd 50 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx2160 51 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx4320 \pard\intbl\ql{3}\cell 52 | \pard\intbl\ql{c}\cell 53 | \row 54 | } 55 | 56 | { 57 | \trowd 58 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx2160 59 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx4320 \pard\intbl\ql{4}\cell 60 | \pard\intbl\ql{d}\cell 61 | \row 62 | } 63 | 64 | { 65 | \trowd 66 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx2160 67 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx4320 \pard\intbl\ql{5}\cell 68 | \pard\intbl\ql{e}\cell 69 | \row 70 | } 71 | 72 | { 73 | \trowd 74 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx2160 75 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx4320 \pard\intbl\ql{6}\cell 76 | \pard\intbl\ql{f}\cell 77 | \row 78 | } 79 | 80 | { 81 | \trowd 82 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx2160 83 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx4320 \pard\intbl\ql{7}\cell 84 | \pard\intbl\ql{g}\cell 85 | \row 86 | } 87 | 88 | { 89 | \trowd 90 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx2160 91 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx4320 \pard\intbl\ql{8}\cell 92 | \pard\intbl\ql{h}\cell 93 | \row 94 | } 95 | 96 | { 97 | \trowd 98 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx2160 99 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx4320 \pard\intbl\ql{9}\cell 100 | \pard\intbl\ql{i}\cell 101 | \row 102 | } 103 | 104 | { 105 | \trowd 106 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx2160 107 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl0\clpadl80 \clpadft0\clpadt80 \clpadfb0\clpadb80 \clpadfr0\clpadr80 \cellx4320 \pard\intbl\ql{10}\cell 108 | \pard\intbl\ql{j}\cell 109 | \row 110 | } 111 | 112 | } -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_4.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\deff1 2 | {\fonttbl 3 | {\f0 Times;} 4 | {\f1 Courier New;} 5 | }{\colortbl;;} 6 | 7 | 8 | 9 | \paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\linex0 10 | \lndscpsxn 11 | \margl1440\margr1440\margt1440\margb1440 12 | \headery360\footery1440\fs24 13 | 14 | 15 | 16 | {\header 17 | 18 | \par 19 | 20 | { 21 | \trowd 22 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 23 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{\fs24 {Header1}}\cell 24 | \pard\intbl\ql{\fs24 {Header2}}\cell 25 | \row 26 | } 27 | 28 | } 29 | {\footer 30 | \par 31 | } 32 | { 33 | \trowd 34 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 35 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{1}\cell 36 | \pard\intbl\ql{a}\cell 37 | \row 38 | } 39 | 40 | { 41 | \trowd 42 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 43 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{2}\cell 44 | \pard\intbl\ql{b}\cell 45 | \row 46 | } 47 | 48 | { 49 | \trowd 50 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 51 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{3}\cell 52 | \pard\intbl\ql{c}\cell 53 | \row 54 | } 55 | 56 | { 57 | \trowd 58 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 59 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{4}\cell 60 | \pard\intbl\ql{d}\cell 61 | \row 62 | } 63 | 64 | { 65 | \trowd 66 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 67 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{5}\cell 68 | \pard\intbl\ql{e}\cell 69 | \row 70 | } 71 | 72 | { 73 | \trowd 74 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 75 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{6}\cell 76 | \pard\intbl\ql{f}\cell 77 | \row 78 | } 79 | 80 | { 81 | \trowd 82 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 83 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{7}\cell 84 | \pard\intbl\ql{g}\cell 85 | \row 86 | } 87 | 88 | { 89 | \trowd 90 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 91 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{8}\cell 92 | \pard\intbl\ql{h}\cell 93 | \row 94 | } 95 | 96 | { 97 | \trowd 98 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 99 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{9}\cell 100 | \pard\intbl\ql{i}\cell 101 | \row 102 | } 103 | 104 | { 105 | \trowd 106 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 107 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{10}\cell 108 | \pard\intbl\ql{j}\cell 109 | \row 110 | } 111 | 112 | } -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_5.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\deff1 2 | {\fonttbl 3 | {\f0 Times;} 4 | {\f1 Courier New;} 5 | }{\colortbl;;} 6 | 7 | 8 | 9 | \paperw17280\paperh12960\widowctrl\ftnbj\fet0\sectd\linex0 10 | \lndscpsxn 11 | \margl1440\margr1440\margt1440\margb1440 12 | \headery720\footery720\fs24 13 | 14 | 15 | 16 | {\header 17 | 18 | \par 19 | 20 | { 21 | \trowd 22 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 23 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{\fs24 {Header1}}\cell 24 | \pard\intbl\ql{\fs24 {Header2}}\cell 25 | \row 26 | } 27 | 28 | } 29 | {\footer 30 | \par 31 | } 32 | { 33 | \trowd 34 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 35 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{1}\cell 36 | \pard\intbl\ql{a}\cell 37 | \row 38 | } 39 | 40 | { 41 | \trowd 42 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 43 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{2}\cell 44 | \pard\intbl\ql{b}\cell 45 | \row 46 | } 47 | 48 | { 49 | \trowd 50 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 51 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{3}\cell 52 | \pard\intbl\ql{c}\cell 53 | \row 54 | } 55 | 56 | { 57 | \trowd 58 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 59 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{4}\cell 60 | \pard\intbl\ql{d}\cell 61 | \row 62 | } 63 | 64 | { 65 | \trowd 66 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 67 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{5}\cell 68 | \pard\intbl\ql{e}\cell 69 | \row 70 | } 71 | 72 | { 73 | \trowd 74 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 75 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{6}\cell 76 | \pard\intbl\ql{f}\cell 77 | \row 78 | } 79 | 80 | { 81 | \trowd 82 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 83 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{7}\cell 84 | \pard\intbl\ql{g}\cell 85 | \row 86 | } 87 | 88 | { 89 | \trowd 90 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 91 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{8}\cell 92 | \pard\intbl\ql{h}\cell 93 | \row 94 | } 95 | 96 | { 97 | \trowd 98 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 99 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{9}\cell 100 | \pard\intbl\ql{i}\cell 101 | \row 102 | } 103 | 104 | { 105 | \trowd 106 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 107 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{10}\cell 108 | \pard\intbl\ql{j}\cell 109 | \row 110 | } 111 | 112 | } -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_7.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\deff1 2 | {\fonttbl 3 | {\f0 Times;} 4 | {\f1 Courier New;} 5 | }{\colortbl;;} 6 | 7 | 8 | 9 | \paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\linex0 10 | \lndscpsxn 11 | \margl1440\margr1440\margt1440\margb1440 12 | \headery720\footery720\fs28 13 | 14 | 15 | 16 | {\header 17 | 18 | \par 19 | 20 | { 21 | \trowd 22 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 23 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{\fs28 {Header1}}\cell 24 | \pard\intbl\ql{\fs28 {Header2}}\cell 25 | \row 26 | } 27 | 28 | } 29 | {\footer 30 | \par 31 | } 32 | { 33 | \trowd 34 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 35 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{1}\cell 36 | \pard\intbl\ql{a}\cell 37 | \row 38 | } 39 | 40 | { 41 | \trowd 42 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 43 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{2}\cell 44 | \pard\intbl\ql{b}\cell 45 | \row 46 | } 47 | 48 | { 49 | \trowd 50 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 51 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{3}\cell 52 | \pard\intbl\ql{c}\cell 53 | \row 54 | } 55 | 56 | { 57 | \trowd 58 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 59 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{4}\cell 60 | \pard\intbl\ql{d}\cell 61 | \row 62 | } 63 | 64 | { 65 | \trowd 66 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 67 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{5}\cell 68 | \pard\intbl\ql{e}\cell 69 | \row 70 | } 71 | 72 | { 73 | \trowd 74 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 75 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{6}\cell 76 | \pard\intbl\ql{f}\cell 77 | \row 78 | } 79 | 80 | { 81 | \trowd 82 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 83 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{7}\cell 84 | \pard\intbl\ql{g}\cell 85 | \row 86 | } 87 | 88 | { 89 | \trowd 90 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 91 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{8}\cell 92 | \pard\intbl\ql{h}\cell 93 | \row 94 | } 95 | 96 | { 97 | \trowd 98 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 99 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{9}\cell 100 | \pard\intbl\ql{i}\cell 101 | \row 102 | } 103 | 104 | { 105 | \trowd 106 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 107 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{10}\cell 108 | \pard\intbl\ql{j}\cell 109 | \row 110 | } 111 | 112 | } -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_8.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\deff1 2 | {\fonttbl 3 | {\f0 Times;} 4 | {\f1 Comic Sans;} 5 | }{\colortbl;;} 6 | 7 | 8 | 9 | \paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\linex0 10 | \lndscpsxn 11 | \margl1440\margr1440\margt1440\margb1440 12 | \headery720\footery720\fs24 13 | 14 | 15 | 16 | {\header 17 | 18 | \par 19 | 20 | { 21 | \trowd 22 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 23 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{\fs24 {Header1}}\cell 24 | \pard\intbl\ql{\fs24 {Header2}}\cell 25 | \row 26 | } 27 | 28 | } 29 | {\footer 30 | \par 31 | } 32 | { 33 | \trowd 34 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 35 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{1}\cell 36 | \pard\intbl\ql{a}\cell 37 | \row 38 | } 39 | 40 | { 41 | \trowd 42 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 43 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{2}\cell 44 | \pard\intbl\ql{b}\cell 45 | \row 46 | } 47 | 48 | { 49 | \trowd 50 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 51 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{3}\cell 52 | \pard\intbl\ql{c}\cell 53 | \row 54 | } 55 | 56 | { 57 | \trowd 58 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 59 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{4}\cell 60 | \pard\intbl\ql{d}\cell 61 | \row 62 | } 63 | 64 | { 65 | \trowd 66 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 67 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{5}\cell 68 | \pard\intbl\ql{e}\cell 69 | \row 70 | } 71 | 72 | { 73 | \trowd 74 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 75 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{6}\cell 76 | \pard\intbl\ql{f}\cell 77 | \row 78 | } 79 | 80 | { 81 | \trowd 82 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 83 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{7}\cell 84 | \pard\intbl\ql{g}\cell 85 | \row 86 | } 87 | 88 | { 89 | \trowd 90 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 91 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{8}\cell 92 | \pard\intbl\ql{h}\cell 93 | \row 94 | } 95 | 96 | { 97 | \trowd 98 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 99 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{9}\cell 100 | \pard\intbl\ql{i}\cell 101 | \row 102 | } 103 | 104 | { 105 | \trowd 106 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 107 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{10}\cell 108 | \pard\intbl\ql{j}\cell 109 | \row 110 | } 111 | 112 | } -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_9.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\deff1 2 | {\fonttbl 3 | {\f0 Times;} 4 | {\f1 Courier New;} 5 | }{\colortbl;;} 6 | 7 | 8 | 9 | \paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\linex0 10 | \lndscpsxn 11 | \margl1440\margr1440\margt1440\margb1440 12 | \headery720\footery720\fs24 13 | 14 | 15 | 16 | {\header 17 | 18 | \par 19 | 20 | { 21 | \trowd 22 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 23 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{\fs24 {Header1}}\cell 24 | \pard\intbl\ql{\fs24 {Header2}}\cell 25 | \row 26 | } 27 | 28 | { 29 | \trowd 30 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 31 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{\fs24 {1}}\cell 32 | \pard\intbl\ql{\fs24 {a}}\cell 33 | \row 34 | } 35 | 36 | } 37 | {\footer 38 | \par 39 | } 40 | { 41 | \trowd 42 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 43 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{2}\cell 44 | \pard\intbl\ql{b}\cell 45 | \row 46 | } 47 | 48 | { 49 | \trowd 50 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 51 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{3}\cell 52 | \pard\intbl\ql{c}\cell 53 | \row 54 | } 55 | 56 | { 57 | \trowd 58 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 59 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{4}\cell 60 | \pard\intbl\ql{d}\cell 61 | \row 62 | } 63 | 64 | { 65 | \trowd 66 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 67 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{5}\cell 68 | \pard\intbl\ql{e}\cell 69 | \row 70 | } 71 | 72 | { 73 | \trowd 74 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 75 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{6}\cell 76 | \pard\intbl\ql{f}\cell 77 | \row 78 | } 79 | 80 | { 81 | \trowd 82 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 83 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{7}\cell 84 | \pard\intbl\ql{g}\cell 85 | \row 86 | } 87 | 88 | { 89 | \trowd 90 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 91 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{8}\cell 92 | \pard\intbl\ql{h}\cell 93 | \row 94 | } 95 | 96 | { 97 | \trowd 98 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 99 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{9}\cell 100 | \pard\intbl\ql{i}\cell 101 | \row 102 | } 103 | 104 | { 105 | \trowd 106 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 107 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{10}\cell 108 | \pard\intbl\ql{j}\cell 109 | \row 110 | } 111 | 112 | } -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_1.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\deff1 2 | {\fonttbl 3 | {\f0 Times;} 4 | {\f1 Courier New;} 5 | }{\colortbl;;} 6 | 7 | 8 | 9 | \paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\linex0 10 | \lndscpsxn 11 | \margl1440\margr1440\margt1440\margb1440 12 | \headery720\footery720\fs24 13 | 14 | 15 | 16 | {\header 17 | \qc 18 | {\f1\fs24 Title} 19 | \par 20 | 21 | { 22 | \trowd 23 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 24 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{\fs24 {Header1}}\cell 25 | \pard\intbl\ql{\fs24 {Header2}}\cell 26 | \row 27 | } 28 | 29 | } 30 | {\footer 31 | \qc 32 | {\f1\fs24 Footnote}\par 33 | } 34 | { 35 | \trowd 36 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 37 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{1}\cell 38 | \pard\intbl\ql{a}\cell 39 | \row 40 | } 41 | 42 | { 43 | \trowd 44 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 45 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{2}\cell 46 | \pard\intbl\ql{b}\cell 47 | \row 48 | } 49 | 50 | { 51 | \trowd 52 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 53 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{3}\cell 54 | \pard\intbl\ql{c}\cell 55 | \row 56 | } 57 | 58 | { 59 | \trowd 60 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 61 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{4}\cell 62 | \pard\intbl\ql{d}\cell 63 | \row 64 | } 65 | 66 | { 67 | \trowd 68 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 69 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{5}\cell 70 | \pard\intbl\ql{e}\cell 71 | \row 72 | } 73 | 74 | { 75 | \trowd 76 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 77 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{6}\cell 78 | \pard\intbl\ql{f}\cell 79 | \row 80 | } 81 | 82 | { 83 | \trowd 84 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 85 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{7}\cell 86 | \pard\intbl\ql{g}\cell 87 | \row 88 | } 89 | 90 | { 91 | \trowd 92 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 93 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{8}\cell 94 | \pard\intbl\ql{h}\cell 95 | \row 96 | } 97 | 98 | { 99 | \trowd 100 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 101 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{9}\cell 102 | \pard\intbl\ql{i}\cell 103 | \row 104 | } 105 | 106 | { 107 | \trowd 108 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 109 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{10}\cell 110 | \pard\intbl\ql{j}\cell 111 | \row 112 | } 113 | 114 | } -------------------------------------------------------------------------------- /man/hf_line.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/header-footer.R 3 | \name{hf_line} 4 | \alias{hf_line} 5 | \title{Create a title line container} 6 | \usage{ 7 | hf_line( 8 | ..., 9 | align = c("center", "left", "right", "split"), 10 | bold = FALSE, 11 | italic = FALSE, 12 | font = NA, 13 | font_size = NA, 14 | index = NA 15 | ) 16 | } 17 | \arguments{ 18 | \item{...}{A character list/vector. If \code{length(...)} is 2 and 19 | \code{align} is not 'split', values are pasted together.} 20 | 21 | \item{align}{Text alignment in document. Options are 'center', 'left', 22 | 'right', and 'split'. A 'split' alignment will left align the string in 23 | the first text item and right align the second. Defaults to center.} 24 | 25 | \item{bold}{\code{TRUE} or \code{FALSE}. Defaults to FALSE.} 26 | 27 | \item{italic}{\code{TRUE} or \code{FALSE}. Defaults to FALSE.} 28 | 29 | \item{font}{A string to specify the font display. Ensure the intended RTF 30 | reader can display the selected font. Fonts for all fields will default to 31 | the default font of the \code{rtf_doc} object, which unless otherwise 32 | assigned, is Courier New.} 33 | 34 | \item{font_size}{Font size in points. Font sizes for all fields will default to 35 | the default font size of the \code{rtf_doc} object, which unless otherwise 36 | assigned, is 12} 37 | 38 | \item{index}{Position to display header or footnote lines in the RTF 39 | document. Orders in ascending order with NAs last. Defaults to NA.} 40 | } 41 | \value{ 42 | An object of class \code{hf_line} with the properties described in 43 | the Arguments section. 44 | } 45 | \description{ 46 | \code{hf_line} objects represent individual title or footnote lines and 47 | their associated metadata. These objects are passed to an \code{rtf_doc} for 48 | display in the header or footer of an RTF document. 49 | 50 | A character vector of length <= 2 describes the text to display. Using a 51 | single text element, the text can be aligned left, right, or center. Using 52 | two text elements, the alignment can be set to “split”, which will left 53 | align the first element, and right align the second. If alignment is set to 54 | anything else, the text elements will be pasted together. 55 | 56 | Lines can either be passed to the titles/footnotes arguments in the call to 57 | \code{rtf_doc} or added later with the \code{add_titles} or 58 | \code{add_footnotes} functions. Supported properties are detailed in the 59 | arguments section. 60 | } 61 | \section{Supported Formatting}{ 62 | 63 | Several special display formats are supported to display document data. When 64 | the \code{rtf_doc} is written, the package will determine if the text of an 65 | \code{hf_line} object starts with a keyword. Regular expression matching and 66 | replacement is used for formatting. 67 | \itemize{ 68 | \item{PAGE_FORMAT: - Can take up to two replacements to format current 69 | page(first), and total number of pages(second). Page numbers are replaced in 70 | the string using \%s For example, for a format of Page 1 of 5, use 71 | PAGE_FORMAT: Page \%s of \%s. For a format of just 5, use 72 | PAGE_FORMAT: \%s.} 73 | \item{DATE_FORMAT: - Describes the date/time the document was generated. 74 | Formats are specified using standard R date formatting tokens. Details on 75 | formatting dates can be found 76 | \href{https://www.r-bloggers.com/2013/08/date-formats-in-r/}{here}.} 77 | \item{FILE_PATH: - Describes the file path the R session was executed from. 78 | The location of the executing file will be populated over the token 79 | replacement string "\%s". Formats can be specified like "FILE_PATH: Executed 80 | from: \%s" or simply "FILE_PATH: \%s". Note that the location of the executing 81 | file in R may not be intuitive. There are multiple ways to determine the 82 | containing R file based on how it was executed. 83 | \itemize{ 84 | \item{When the file is executed using \code{Rscript}, this field will 85 | populated as the executed Rscript file.} 86 | \item{When the file is sourced, this field will populate with the 87 | location of the sourced file.} 88 | \item{When a file is run interactively (i.e. from the R console), this 89 | field will populate as .} 90 | }} 91 | } 92 | } 93 | 94 | \examples{ 95 | # Adding lines during rtf_doc construction 96 | ht <- huxtable::huxtable( 97 | column1 = 1:5, 98 | column2 = letters[1:5] 99 | ) 100 | titles_l <- list( 101 | hf_line(c("The Title Left", "The Titles Right"), align = "split"), 102 | hf_line("A Bold, italic Title", bold = TRUE, italic = TRUE, 103 | align = "left", font_size = 20, font = "Times New Roman") 104 | ) 105 | rtf <- rtf_doc(ht, titles = titles_l) 106 | 107 | # Adding lines after rtf_doc construction 108 | rtf <- add_footnotes(rtf, 109 | hf_line("PAGE_FORMAT: Page \%s of \%s"), 110 | hf_line("DATE_FORMAT: \%H:\%M \%A, \%B \%d, \%Y"), 111 | hf_line("FILE_PATH: Source: \%s") 112 | ) 113 | 114 | } 115 | -------------------------------------------------------------------------------- /docs/bootstrap-toc.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) 3 | * Copyright 2015 Aidan Feldman 4 | * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ 5 | (function() { 6 | 'use strict'; 7 | 8 | window.Toc = { 9 | helpers: { 10 | // return all matching elements in the set, or their descendants 11 | findOrFilter: function($el, selector) { 12 | // http://danielnouri.org/notes/2011/03/14/a-jquery-find-that-also-finds-the-root-element/ 13 | // http://stackoverflow.com/a/12731439/358804 14 | var $descendants = $el.find(selector); 15 | return $el.filter(selector).add($descendants).filter(':not([data-toc-skip])'); 16 | }, 17 | 18 | generateUniqueIdBase: function(el) { 19 | var text = $(el).text(); 20 | var anchor = text.trim().toLowerCase().replace(/[^A-Za-z0-9]+/g, '-'); 21 | return anchor || el.tagName.toLowerCase(); 22 | }, 23 | 24 | generateUniqueId: function(el) { 25 | var anchorBase = this.generateUniqueIdBase(el); 26 | for (var i = 0; ; i++) { 27 | var anchor = anchorBase; 28 | if (i > 0) { 29 | // add suffix 30 | anchor += '-' + i; 31 | } 32 | // check if ID already exists 33 | if (!document.getElementById(anchor)) { 34 | return anchor; 35 | } 36 | } 37 | }, 38 | 39 | generateAnchor: function(el) { 40 | if (el.id) { 41 | return el.id; 42 | } else { 43 | var anchor = this.generateUniqueId(el); 44 | el.id = anchor; 45 | return anchor; 46 | } 47 | }, 48 | 49 | createNavList: function() { 50 | return $(''); 51 | }, 52 | 53 | createChildNavList: function($parent) { 54 | var $childList = this.createNavList(); 55 | $parent.append($childList); 56 | return $childList; 57 | }, 58 | 59 | generateNavEl: function(anchor, text) { 60 | var $a = $(''); 61 | $a.attr('href', '#' + anchor); 62 | $a.text(text); 63 | var $li = $('
  • '); 64 | $li.append($a); 65 | return $li; 66 | }, 67 | 68 | generateNavItem: function(headingEl) { 69 | var anchor = this.generateAnchor(headingEl); 70 | var $heading = $(headingEl); 71 | var text = $heading.data('toc-text') || $heading.text(); 72 | return this.generateNavEl(anchor, text); 73 | }, 74 | 75 | // Find the first heading level (`

    `, then `

    `, etc.) that has more than one element. Defaults to 1 (for `

    `). 76 | getTopLevel: function($scope) { 77 | for (var i = 1; i <= 6; i++) { 78 | var $headings = this.findOrFilter($scope, 'h' + i); 79 | if ($headings.length > 1) { 80 | return i; 81 | } 82 | } 83 | 84 | return 1; 85 | }, 86 | 87 | // returns the elements for the top level, and the next below it 88 | getHeadings: function($scope, topLevel) { 89 | var topSelector = 'h' + topLevel; 90 | 91 | var secondaryLevel = topLevel + 1; 92 | var secondarySelector = 'h' + secondaryLevel; 93 | 94 | return this.findOrFilter($scope, topSelector + ',' + secondarySelector); 95 | }, 96 | 97 | getNavLevel: function(el) { 98 | return parseInt(el.tagName.charAt(1), 10); 99 | }, 100 | 101 | populateNav: function($topContext, topLevel, $headings) { 102 | var $context = $topContext; 103 | var $prevNav; 104 | 105 | var helpers = this; 106 | $headings.each(function(i, el) { 107 | var $newNav = helpers.generateNavItem(el); 108 | var navLevel = helpers.getNavLevel(el); 109 | 110 | // determine the proper $context 111 | if (navLevel === topLevel) { 112 | // use top level 113 | $context = $topContext; 114 | } else if ($prevNav && $context === $topContext) { 115 | // create a new level of the tree and switch to it 116 | $context = helpers.createChildNavList($prevNav); 117 | } // else use the current $context 118 | 119 | $context.append($newNav); 120 | 121 | $prevNav = $newNav; 122 | }); 123 | }, 124 | 125 | parseOps: function(arg) { 126 | var opts; 127 | if (arg.jquery) { 128 | opts = { 129 | $nav: arg 130 | }; 131 | } else { 132 | opts = arg; 133 | } 134 | opts.$scope = opts.$scope || $(document.body); 135 | return opts; 136 | } 137 | }, 138 | 139 | // accepts a jQuery object, or an options object 140 | init: function(opts) { 141 | opts = this.helpers.parseOps(opts); 142 | 143 | // ensure that the data attribute is in place for styling 144 | opts.$nav.attr('data-toggle', 'toc'); 145 | 146 | var $topContext = this.helpers.createChildNavList(opts.$nav); 147 | var topLevel = this.helpers.getTopLevel(opts.$scope); 148 | var $headings = this.helpers.getHeadings(opts.$scope, topLevel); 149 | this.helpers.populateNav($topContext, topLevel, $headings); 150 | } 151 | }; 152 | 153 | $(function() { 154 | $('nav[data-toggle="toc"]').each(function(i, el) { 155 | var $nav = $(el); 156 | Toc.init($nav); 157 | }); 158 | }); 159 | })(); 160 | -------------------------------------------------------------------------------- /tests/testthat/test_read_hf.r: -------------------------------------------------------------------------------- 1 | context("read_hf") 2 | library(huxtable) 3 | 4 | ## NOTE: reading hf is assumed to be done by the reader so 5 | # that isn't tested here. 6 | 7 | 8 | test_that("read_hf returns the same data.frame it is passed if it is a valid df", { 9 | df <- data.frame( 10 | type = c("footnote", "title"), 11 | text1 = c("abc", "xyz"), 12 | text2 = c("abc", "xyz"), 13 | align = c("center", "center"), 14 | bold = c(FALSE, FALSE), 15 | italic = c(FALSE, FALSE), 16 | font = c("abc", "xyz"), 17 | font_size = c(10, 20), 18 | index = c(1, 2), 19 | stringsAsFactors = FALSE 20 | ) 21 | 22 | expect_silent(read_hf(from.df=df)) 23 | expect_equal(read_hf(from.df=df), df) 24 | }) 25 | 26 | test_that("titles_and_footnotes_from_df can read a data.frame with only text1, and type", { 27 | df <- data.frame( 28 | type = c("footnote"), 29 | text1 = c("abc"), 30 | stringsAsFactors = FALSE 31 | ) 32 | ht <- huxtable( 33 | column1 = 1:5, 34 | column2 = letters[1:5] 35 | ) 36 | rtf <- rtf_doc(ht) 37 | 38 | rtf2 <- titles_and_footnotes_from_df(rtf, from.df = df) 39 | 40 | expect_equal(align(rtf2$footnotes[[1]]), "center") 41 | expect_equal(bold(rtf2$footnotes[[1]]), FALSE) 42 | expect_equal(italic(rtf2$footnotes[[1]]), FALSE) 43 | expect_true(is.na(font(rtf2$footnotes[[1]]))) 44 | expect_true(is.na(font_size(rtf2$footnotes[[1]]))) 45 | expect_true(is.na(index(rtf2$footnotes[[1]]))) 46 | }) 47 | 48 | test_that("fill_missing_data fills in data correctly", { 49 | columns <- c("type", "text1", "text2", "align", "bold", "italic", "font", "font_size", "index") 50 | df <- data.frame( 51 | type = c("footnote", "title"), 52 | text1 = c("abc", "xyz"), 53 | text2 = c(NA , "xyz"), 54 | align = c(NA, "split"), 55 | bold = c(FALSE, FALSE), 56 | italic = c(FALSE, FALSE), 57 | font = c("abc", NA), 58 | font_size = c(NA, 20), 59 | index = c(NA, 2), 60 | stringsAsFactors = FALSE 61 | ) 62 | 63 | df2 <- data.frame( 64 | type = c("footnote", "title"), 65 | text1 = c("abc", "xyz"), 66 | text2 = c("", "xyz"), 67 | align = c("center", "split"), 68 | bold = c(FALSE, FALSE), 69 | italic = c(FALSE, FALSE), 70 | font = c("abc", as.character(NA)), 71 | font_size = c(as.numeric(NA), 20), 72 | index = c(NA, 2), 73 | stringsAsFactors = FALSE 74 | ) 75 | 76 | expect_equal(fill_missing_data(df, columns), df2) 77 | 78 | }) 79 | 80 | #### Errors #### 81 | test_that("read_hf throws error for bad from.df/from.file parameters", { 82 | expect_error(read_hf(from.df = data.frame(), from.file = "aFile"), 83 | "One of, and only one of") 84 | expect_error(read_hf(), "One of, and only one of") 85 | }) 86 | 87 | test_that("read_hf throws error when presented a from.df thats not a df", { 88 | expect_error(read_hf(from.df = list()), "from.df does not inherit") 89 | }) 90 | 91 | test_that("read_hf throws error for invalid from.file/reader", { 92 | expect_error(read_hf(from.file = "SomeNonexistantFile.txt", reader = "abc"), "Path 'SomeNonexistantFile.txt' does not exist") 93 | expect_error(read_hf(from.file = "test_read_hf.r", reader = "abc"), "reader is not a function") 94 | }) 95 | 96 | test_that("validated_hf_dataframe throws errors for missing columns" ,{ 97 | required_columns <- c("type", "text1") 98 | columns <- c("type", "text1", "text2", "align", "bold", "italic", "font", "font_size", "index") 99 | df <- data.frame( 100 | type = c("footnote", "title"), 101 | text1 = c("abc", "xyz"), 102 | text2 = c("abc", "xyz"), 103 | align = c("abc", "xyz"), 104 | bold = c(FALSE, FALSE), 105 | italic = c(FALSE, FALSE), 106 | stringsAsFactors = FALSE 107 | ) 108 | 109 | ## Unable to get the full message as it is ecliplesd by the error 110 | expect_error(validate_hf_dataframe(df, required_columns, columns), 111 | "Errors were encountered in data.frame validation") 112 | }) 113 | 114 | test_that("validated_hf_dataframe throws errors for wrong column types" ,{ 115 | required_columns <- c("type", "text1") 116 | columns <- c("type", "text1", "text2", "align", "bold", "italic", "font", "font_size", "index") 117 | df <- data.frame( 118 | type = c("footnote", "title"), 119 | text1 = c(1, 2), 120 | text2 = c("abc", "xyz"), 121 | align = c("abc", "xyz"), 122 | bold = c(FALSE, FALSE), 123 | italic = c(FALSE, FALSE), 124 | font = c("abc", "xyz"), 125 | index = c(1, 2), 126 | stringsAsFactors = FALSE 127 | ) 128 | 129 | ## Unable to get the full message as it is ecliplesd by the error 130 | expect_error(validate_hf_dataframe(df, required_columns, columns), 131 | "Errors were encountered in data.frame validation") 132 | }) 133 | 134 | test_that("validated_hf_dataframe throws errors for bad entry in type" ,{ 135 | required_columns <- c("type", "text1") 136 | columns <- c("type", "text1", "text2", "align", "bold", "italic", "font", "font_size", "index") 137 | df <- data.frame( 138 | type = c("abc", "xyz"), 139 | text1 = c("abc", "xyz"), 140 | text2 = c("abc", "xyz"), 141 | align = c("abc", "xyz"), 142 | bold = c(FALSE, FALSE), 143 | italic = c(FALSE, FALSE), 144 | font = c("abc", "xyz"), 145 | index = c(1, 2), 146 | stringsAsFactors = FALSE 147 | ) 148 | 149 | ## Unable to get the full message as it is ecliplesd by the error 150 | expect_error(validate_hf_dataframe(df, required_columns, columns), 151 | "Errors were encountered in data.frame validation") 152 | }) 153 | 154 | -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_49.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\deff1 2 | {\fonttbl 3 | {\f0 Times;} 4 | {\f1 Courier New;} 5 | }{\colortbl;;} 6 | 7 | 8 | 9 | \paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\linex0 10 | \lndscpsxn 11 | \margl1440\margr1440\margt1440\margb1440 12 | \headery720\footery720\fs24 13 | 14 | 15 | 16 | {\header 17 | 18 | \par 19 | 20 | { 21 | \trowd 22 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 23 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\qr{\fs24 {Header1}}\cell 24 | \pard\intbl\ql{\fs24 {Header2}}\cell 25 | \row 26 | } 27 | 28 | } 29 | {\footer 30 | \par 31 | } 32 | { 33 | \trowd 34 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 35 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\qr{1}\cell 36 | \pard\intbl\ql{a}\cell 37 | \row 38 | } 39 | 40 | { 41 | \trowd 42 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 43 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\qr{2}\cell 44 | \pard\intbl\ql{b}\cell 45 | \row 46 | } 47 | 48 | { 49 | \trowd 50 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 51 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\qr{3}\cell 52 | \pard\intbl\ql{c}\cell 53 | \row 54 | } 55 | 56 | { 57 | \trowd 58 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 59 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\qr{4}\cell 60 | \pard\intbl\ql{d}\cell 61 | \row 62 | } 63 | 64 | { 65 | \trowd 66 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 67 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\qr{5}\cell 68 | \pard\intbl\ql{e}\cell 69 | \row 70 | } 71 | 72 | { 73 | \trowd 74 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 75 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\qr{6}\cell 76 | \pard\intbl\ql{f}\cell 77 | \row 78 | } 79 | 80 | { 81 | \trowd 82 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 83 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\qr{7}\cell 84 | \pard\intbl\ql{g}\cell 85 | \row 86 | } 87 | 88 | { 89 | \trowd 90 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 91 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\qr{8}\cell 92 | \pard\intbl\ql{h}\cell 93 | \row 94 | } 95 | 96 | { 97 | \trowd 98 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 99 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\qr{9}\cell 100 | \pard\intbl\ql{i}\cell 101 | \row 102 | } 103 | 104 | { 105 | \trowd 106 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 107 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\qr{10}\cell 108 | \pard\intbl\ql{j}\cell 109 | \row 110 | } 111 | 112 | { 113 | \trowd 114 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 115 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\qr{11}\cell 116 | \pard\intbl\ql{k}\cell 117 | \row 118 | } 119 | 120 | { 121 | \trowd 122 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 123 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\qr{12}\cell 124 | \pard\intbl\ql{l}\cell 125 | \row 126 | } 127 | 128 | { 129 | \trowd 130 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 131 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\qr{13}\cell 132 | \pard\intbl\ql{m}\cell 133 | \row 134 | } 135 | 136 | } -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_52.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\deff1 2 | {\fonttbl 3 | {\f0 Times;} 4 | {\f1 Courier New;} 5 | }{\colortbl;;} 6 | 7 | 8 | 9 | \paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\linex0 10 | \lndscpsxn 11 | \margl1440\margr1440\margt1440\margb1440 12 | \headery720\footery720\fs24 13 | 14 | 15 | 16 | {\header 17 | 18 | \par 19 | 20 | { 21 | \trowd 22 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx1728 23 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx5184 \pard\intbl\ql{\fs24 {Header1}}\cell 24 | \pard\intbl\ql{\fs24 {Header2}}\cell 25 | \row 26 | } 27 | 28 | } 29 | {\footer 30 | \par 31 | } 32 | { 33 | \trowd 34 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx1728 35 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx5184 \pard\intbl\ql{1}\cell 36 | \pard\intbl\ql{a}\cell 37 | \row 38 | } 39 | 40 | { 41 | \trowd 42 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx1728 43 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx5184 \pard\intbl\ql{2}\cell 44 | \pard\intbl\ql{b}\cell 45 | \row 46 | } 47 | 48 | { 49 | \trowd 50 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx1728 51 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx5184 \pard\intbl\ql{3}\cell 52 | \pard\intbl\ql{c}\cell 53 | \row 54 | } 55 | 56 | { 57 | \trowd 58 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx1728 59 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx5184 \pard\intbl\ql{4}\cell 60 | \pard\intbl\ql{d}\cell 61 | \row 62 | } 63 | 64 | { 65 | \trowd 66 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx1728 67 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx5184 \pard\intbl\ql{5}\cell 68 | \pard\intbl\ql{e}\cell 69 | \row 70 | } 71 | 72 | { 73 | \trowd 74 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx1728 75 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx5184 \pard\intbl\ql{6}\cell 76 | \pard\intbl\ql{f}\cell 77 | \row 78 | } 79 | 80 | { 81 | \trowd 82 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx1728 83 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx5184 \pard\intbl\ql{7}\cell 84 | \pard\intbl\ql{g}\cell 85 | \row 86 | } 87 | 88 | { 89 | \trowd 90 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx1728 91 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx5184 \pard\intbl\ql{8}\cell 92 | \pard\intbl\ql{h}\cell 93 | \row 94 | } 95 | 96 | { 97 | \trowd 98 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx1728 99 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx5184 \pard\intbl\ql{9}\cell 100 | \pard\intbl\ql{i}\cell 101 | \row 102 | } 103 | 104 | { 105 | \trowd 106 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx1728 107 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx5184 \pard\intbl\ql{10}\cell 108 | \pard\intbl\ql{j}\cell 109 | \row 110 | } 111 | 112 | { 113 | \trowd 114 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx1728 115 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx5184 \pard\intbl\ql{11}\cell 116 | \pard\intbl\ql{k}\cell 117 | \row 118 | } 119 | 120 | { 121 | \trowd 122 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx1728 123 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx5184 \pard\intbl\ql{12}\cell 124 | \pard\intbl\ql{l}\cell 125 | \row 126 | } 127 | 128 | { 129 | \trowd 130 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx1728 131 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx5184 \pard\intbl\ql{13}\cell 132 | \pard\intbl\ql{m}\cell 133 | \row 134 | } 135 | 136 | } -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_53.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\deff1 2 | {\fonttbl 3 | {\f0 Times;} 4 | {\f1 Courier New;} 5 | }{\colortbl;;} 6 | 7 | 8 | 9 | \paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\linex0 10 | \lndscpsxn 11 | \margl1440\margr1440\margt1440\margb1440 12 | \headery720\footery720\fs24 13 | 14 | 15 | 16 | {\header 17 | 18 | \par 19 | 20 | { 21 | \trowd 22 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 23 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{\fs24 {Header1}}\cell 24 | \pard\intbl\ql{\fs24 {Header2}}\cell 25 | \row 26 | } 27 | 28 | } 29 | {\footer 30 | \par 31 | } 32 | { 33 | \trowd 34 | \trqc \clmgf\clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 35 | \clmrg\clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{1}\cell 36 | \pard\intbl\ql{a}\cell 37 | \row 38 | } 39 | 40 | { 41 | \trowd 42 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 43 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{2}\cell 44 | \pard\intbl\ql{b}\cell 45 | \row 46 | } 47 | 48 | { 49 | \trowd 50 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 51 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{3}\cell 52 | \pard\intbl\ql{c}\cell 53 | \row 54 | } 55 | 56 | { 57 | \trowd 58 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 59 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{4}\cell 60 | \pard\intbl\ql{d}\cell 61 | \row 62 | } 63 | 64 | { 65 | \trowd 66 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 67 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{5}\cell 68 | \pard\intbl\ql{e}\cell 69 | \row 70 | } 71 | 72 | { 73 | \trowd 74 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 75 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{6}\cell 76 | \pard\intbl\ql{f}\cell 77 | \row 78 | } 79 | 80 | { 81 | \trowd 82 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 83 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{7}\cell 84 | \pard\intbl\ql{g}\cell 85 | \row 86 | } 87 | 88 | { 89 | \trowd 90 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 91 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{8}\cell 92 | \pard\intbl\ql{h}\cell 93 | \row 94 | } 95 | 96 | { 97 | \trowd 98 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 99 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{9}\cell 100 | \pard\intbl\ql{i}\cell 101 | \row 102 | } 103 | 104 | { 105 | \trowd 106 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 107 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{10}\cell 108 | \pard\intbl\ql{j}\cell 109 | \row 110 | } 111 | 112 | { 113 | \trowd 114 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 115 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{11}\cell 116 | \pard\intbl\ql{k}\cell 117 | \row 118 | } 119 | 120 | { 121 | \trowd 122 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 123 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{12}\cell 124 | \pard\intbl\ql{l}\cell 125 | \row 126 | } 127 | 128 | { 129 | \trowd 130 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 131 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{13}\cell 132 | \pard\intbl\ql{m}\cell 133 | \row 134 | } 135 | 136 | } -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_51.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\deff1 2 | {\fonttbl 3 | {\f0 Times;} 4 | {\f1 Courier New;} 5 | }{\colortbl;;} 6 | 7 | 8 | 9 | \paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\linex0 10 | \lndscpsxn 11 | \margl1440\margr1440\margt1440\margb1440 12 | \headery720\footery720\fs24 13 | 14 | 15 | 16 | {\header 17 | 18 | \par 19 | 20 | { 21 | \trowd 22 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx6480 23 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx12960 \pard\intbl\ql{\fs24 {Header1}}\cell 24 | \pard\intbl\ql{\fs24 {Header2}}\cell 25 | \row 26 | } 27 | 28 | } 29 | {\footer 30 | \par 31 | } 32 | { 33 | \trowd 34 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx6480 35 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx12960 \pard\intbl\ql{1}\cell 36 | \pard\intbl\ql{a}\cell 37 | \row 38 | } 39 | 40 | { 41 | \trowd 42 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx6480 43 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx12960 \pard\intbl\ql{2}\cell 44 | \pard\intbl\ql{b}\cell 45 | \row 46 | } 47 | 48 | { 49 | \trowd 50 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx6480 51 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx12960 \pard\intbl\ql{3}\cell 52 | \pard\intbl\ql{c}\cell 53 | \row 54 | } 55 | 56 | { 57 | \trowd 58 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx6480 59 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx12960 \pard\intbl\ql{4}\cell 60 | \pard\intbl\ql{d}\cell 61 | \row 62 | } 63 | 64 | { 65 | \trowd 66 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx6480 67 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx12960 \pard\intbl\ql{5}\cell 68 | \pard\intbl\ql{e}\cell 69 | \row 70 | } 71 | 72 | { 73 | \trowd 74 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx6480 75 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx12960 \pard\intbl\ql{6}\cell 76 | \pard\intbl\ql{f}\cell 77 | \row 78 | } 79 | 80 | { 81 | \trowd 82 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx6480 83 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx12960 \pard\intbl\ql{7}\cell 84 | \pard\intbl\ql{g}\cell 85 | \row 86 | } 87 | 88 | { 89 | \trowd 90 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx6480 91 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx12960 \pard\intbl\ql{8}\cell 92 | \pard\intbl\ql{h}\cell 93 | \row 94 | } 95 | 96 | { 97 | \trowd 98 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx6480 99 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx12960 \pard\intbl\ql{9}\cell 100 | \pard\intbl\ql{i}\cell 101 | \row 102 | } 103 | 104 | { 105 | \trowd 106 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx6480 107 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx12960 \pard\intbl\ql{10}\cell 108 | \pard\intbl\ql{j}\cell 109 | \row 110 | } 111 | 112 | { 113 | \trowd 114 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx6480 115 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx12960 \pard\intbl\ql{11}\cell 116 | \pard\intbl\ql{k}\cell 117 | \row 118 | } 119 | 120 | { 121 | \trowd 122 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx6480 123 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx12960 \pard\intbl\ql{12}\cell 124 | \pard\intbl\ql{l}\cell 125 | \row 126 | } 127 | 128 | { 129 | \trowd 130 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx6480 131 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx12960 \pard\intbl\ql{13}\cell 132 | \pard\intbl\ql{m}\cell 133 | \row 134 | } 135 | 136 | } -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_10.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\deff1 2 | {\fonttbl 3 | {\f0 Times;} 4 | {\f1 Courier New;} 5 | }{\colortbl;;} 6 | 7 | 8 | 9 | \paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\linex0 10 | \lndscpsxn 11 | \margl1440\margr1440\margt1440\margb1440 12 | \headery720\footery720\fs24 13 | 14 | 15 | 16 | {\header 17 | 18 | \par 19 | 20 | { 21 | \trowd 22 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 23 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{\fs24 {}}\cell 24 | \pard\intbl\ql{\fs24 {}}\cell 25 | \row 26 | } 27 | 28 | { 29 | \trowd 30 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 31 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{\fs24 {}}\cell 32 | \pard\intbl\ql{\fs24 {}}\cell 33 | \row 34 | } 35 | 36 | { 37 | \trowd 38 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 39 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{\fs24 {Header1}}\cell 40 | \pard\intbl\ql{\fs24 {Header2}}\cell 41 | \row 42 | } 43 | 44 | { 45 | \trowd 46 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 47 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{\fs24 {}}\cell 48 | \pard\intbl\ql{\fs24 {}}\cell 49 | \row 50 | } 51 | 52 | } 53 | {\footer 54 | \par 55 | } 56 | { 57 | \trowd 58 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 59 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{1}\cell 60 | \pard\intbl\ql{a}\cell 61 | \row 62 | } 63 | 64 | { 65 | \trowd 66 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 67 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{2}\cell 68 | \pard\intbl\ql{b}\cell 69 | \row 70 | } 71 | 72 | { 73 | \trowd 74 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 75 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{3}\cell 76 | \pard\intbl\ql{c}\cell 77 | \row 78 | } 79 | 80 | { 81 | \trowd 82 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 83 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{4}\cell 84 | \pard\intbl\ql{d}\cell 85 | \row 86 | } 87 | 88 | { 89 | \trowd 90 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 91 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{5}\cell 92 | \pard\intbl\ql{e}\cell 93 | \row 94 | } 95 | 96 | { 97 | \trowd 98 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 99 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{6}\cell 100 | \pard\intbl\ql{f}\cell 101 | \row 102 | } 103 | 104 | { 105 | \trowd 106 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 107 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{7}\cell 108 | \pard\intbl\ql{g}\cell 109 | \row 110 | } 111 | 112 | { 113 | \trowd 114 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 115 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{8}\cell 116 | \pard\intbl\ql{h}\cell 117 | \row 118 | } 119 | 120 | { 121 | \trowd 122 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 123 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{9}\cell 124 | \pard\intbl\ql{i}\cell 125 | \row 126 | } 127 | 128 | { 129 | \trowd 130 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 131 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{10}\cell 132 | \pard\intbl\ql{j}\cell 133 | \row 134 | } 135 | 136 | } -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_47.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\deff1 2 | {\fonttbl 3 | {\f0 Times;} 4 | {\f1 Courier New;} 5 | }{\colortbl;;} 6 | 7 | 8 | 9 | \paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\linex0 10 | \lndscpsxn 11 | \margl1440\margr1440\margt1440\margb1440 12 | \headery720\footery720\fs24 13 | 14 | 15 | 16 | {\header 17 | 18 | \par 19 | 20 | { 21 | \trowd 22 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 23 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{\fs24 \b {Header1}\b0}\cell 24 | \pard\intbl\ql{\fs24 {Header2}}\cell 25 | \row 26 | } 27 | 28 | } 29 | {\footer 30 | \par 31 | } 32 | { 33 | \trowd 34 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 35 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\b {1}\b0\cell 36 | \pard\intbl\ql{a}\cell 37 | \row 38 | } 39 | 40 | { 41 | \trowd 42 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 43 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\b {2}\b0\cell 44 | \pard\intbl\ql{b}\cell 45 | \row 46 | } 47 | 48 | { 49 | \trowd 50 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 51 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\b {3}\b0\cell 52 | \pard\intbl\ql{c}\cell 53 | \row 54 | } 55 | 56 | { 57 | \trowd 58 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 59 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\b {4}\b0\cell 60 | \pard\intbl\ql{d}\cell 61 | \row 62 | } 63 | 64 | { 65 | \trowd 66 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 67 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\b {5}\b0\cell 68 | \pard\intbl\ql{e}\cell 69 | \row 70 | } 71 | 72 | { 73 | \trowd 74 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 75 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\b {6}\b0\cell 76 | \pard\intbl\ql{f}\cell 77 | \row 78 | } 79 | 80 | { 81 | \trowd 82 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 83 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\b {7}\b0\cell 84 | \pard\intbl\ql{g}\cell 85 | \row 86 | } 87 | 88 | { 89 | \trowd 90 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 91 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\b {8}\b0\cell 92 | \pard\intbl\ql{h}\cell 93 | \row 94 | } 95 | 96 | { 97 | \trowd 98 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 99 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\b {9}\b0\cell 100 | \pard\intbl\ql{i}\cell 101 | \row 102 | } 103 | 104 | { 105 | \trowd 106 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 107 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\b {10}\b0\cell 108 | \pard\intbl\ql{j}\cell 109 | \row 110 | } 111 | 112 | { 113 | \trowd 114 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 115 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\b {11}\b0\cell 116 | \pard\intbl\ql{k}\cell 117 | \row 118 | } 119 | 120 | { 121 | \trowd 122 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 123 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\b {12}\b0\cell 124 | \pard\intbl\ql{l}\cell 125 | \row 126 | } 127 | 128 | { 129 | \trowd 130 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 131 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\b {13}\b0\cell 132 | \pard\intbl\ql{m}\cell 133 | \row 134 | } 135 | 136 | } -------------------------------------------------------------------------------- /vignettes/Validation/Test_Case_Code/output/test_48.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\deff1 2 | {\fonttbl 3 | {\f0 Times;} 4 | {\f1 Courier New;} 5 | }{\colortbl;;} 6 | 7 | 8 | 9 | \paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\linex0 10 | \lndscpsxn 11 | \margl1440\margr1440\margt1440\margb1440 12 | \headery720\footery720\fs24 13 | 14 | 15 | 16 | {\header 17 | 18 | \par 19 | 20 | { 21 | \trowd 22 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 23 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql{\fs24 \i {Header1}\i0}\cell 24 | \pard\intbl\ql{\fs24 {Header2}}\cell 25 | \row 26 | } 27 | 28 | } 29 | {\footer 30 | \par 31 | } 32 | { 33 | \trowd 34 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 35 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\i {1}\i0\cell 36 | \pard\intbl\ql{a}\cell 37 | \row 38 | } 39 | 40 | { 41 | \trowd 42 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 43 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\i {2}\i0\cell 44 | \pard\intbl\ql{b}\cell 45 | \row 46 | } 47 | 48 | { 49 | \trowd 50 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 51 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\i {3}\i0\cell 52 | \pard\intbl\ql{c}\cell 53 | \row 54 | } 55 | 56 | { 57 | \trowd 58 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 59 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\i {4}\i0\cell 60 | \pard\intbl\ql{d}\cell 61 | \row 62 | } 63 | 64 | { 65 | \trowd 66 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 67 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\i {5}\i0\cell 68 | \pard\intbl\ql{e}\cell 69 | \row 70 | } 71 | 72 | { 73 | \trowd 74 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 75 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\i {6}\i0\cell 76 | \pard\intbl\ql{f}\cell 77 | \row 78 | } 79 | 80 | { 81 | \trowd 82 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 83 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\i {7}\i0\cell 84 | \pard\intbl\ql{g}\cell 85 | \row 86 | } 87 | 88 | { 89 | \trowd 90 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 91 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\i {8}\i0\cell 92 | \pard\intbl\ql{h}\cell 93 | \row 94 | } 95 | 96 | { 97 | \trowd 98 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 99 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\i {9}\i0\cell 100 | \pard\intbl\ql{i}\cell 101 | \row 102 | } 103 | 104 | { 105 | \trowd 106 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 107 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\i {10}\i0\cell 108 | \pard\intbl\ql{j}\cell 109 | \row 110 | } 111 | 112 | { 113 | \trowd 114 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 115 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\i {11}\i0\cell 116 | \pard\intbl\ql{k}\cell 117 | \row 118 | } 119 | 120 | { 121 | \trowd 122 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 123 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\i {12}\i0\cell 124 | \pard\intbl\ql{l}\cell 125 | \row 126 | } 127 | 128 | { 129 | \trowd 130 | \trqc \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx2160 131 | \clbrdrt\clbrdrl\clbrdrb\clbrdrr\clvertalt\clNoWrap\clpadfl3\clpadl80 \clpadft3\clpadt80 \clpadfb3\clpadb80 \clpadfr3\clpadr80 \cellx4320 \pard\intbl\ql\i {13}\i0\cell 132 | \pard\intbl\ql{m}\cell 133 | \row 134 | } 135 | 136 | } --------------------------------------------------------------------------------