The unified diff between revisions [d0ee334b..] and [c0281be7..] is displayed below. It can also be downloaded as a raw diff.
#
#
# add_dir "harness/sources/templates_parser"
#
# add_dir "harness/sources/templates_parser/config"
#
# add_dir "harness/sources/templates_parser/config/setup"
#
# add_dir "harness/sources/templates_parser/docs"
#
# add_dir "harness/sources/templates_parser/regtests"
#
# add_dir "harness/sources/templates_parser/regtests/src"
#
# add_dir "harness/sources/templates_parser/regtests/tests"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0001_tag_demo"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0002_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0003_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0004_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0005_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0006_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0007_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0008_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0009_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0010_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0011_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0012_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0013_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0014_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0015_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0016_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0017_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0018_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0018_testme/dir"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0018_testme/dir/subdir"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0019_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0020_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0021_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0022_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0023_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0024_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0025_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0026_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0027_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0028_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0029_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0030_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0031_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0032_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0033_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0034_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0035_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0036_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0037_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0038_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0039_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0040_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0041_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0042_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0043_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0044_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0045_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0046_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0047_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0048_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0049_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0050_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0051_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0052_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0053_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0054_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0055_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0056_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0057_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0058_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0059_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0060_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0061_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0062_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0063_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0064_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0065_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0066_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0067_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0068_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0069_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0070_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0071_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0072_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0073_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0074_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0075_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0076_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0077_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0078_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0079_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0080_blocks"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0081_blocks"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0082_blocks"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0083_blocks"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0084_blocks"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0085_blocks"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0086_blocks"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0087_tcache"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0088_testcat"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0089_testme_kut"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0090_testme"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0091_date_time"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0092_ftp"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0093_test_templates_if"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0094_regtst1"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0095_include"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0096_tess"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0097_ts_assoc"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0098_user_filter"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0099_nullset"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0100_include2"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0101_not_initialized"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0102_regtst4"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0103_dynamic"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0104_regtst2"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0105_regtst3"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0106_test_cache"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0107_translations_demo"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0108_t2a"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0109_check_mem"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0110_test_tag"
#
# add_dir "harness/sources/templates_parser/regtests/tests/0111_speed"
#
# add_dir "harness/sources/templates_parser/regtests/tests/Z999_xfail"
#
# add_dir "harness/sources/templates_parser/src"
#
# add_dir "harness/sources/templates_parser/tools"
#
# add_dir "harness/sources/templates_parser/xsrc"
#
# add_file "harness/sources/templates_parser/.gitignore"
# content [5c2a22d5546f4409d3eee542b66e91d6f7c29d43]
#
# add_file "harness/sources/templates_parser/README"
# content [c486950e98b01035cb2bb3d01782df50c4ef2718]
#
# add_file "harness/sources/templates_parser/config/setup/foo.ads"
# content [4964231ab897daee41d88d7ad53766bc4b92febc]
#
# add_file "harness/sources/templates_parser/config/setup/test_shared.gpr"
# content [c1707ea534639e8a8860adc3f57d36311f4b5c11]
#
# add_file "harness/sources/templates_parser/config/setup/test_xmlada.gpr"
# content [c934fa0d10421104972058090ca38a55029e1b9c]
#
# add_file "harness/sources/templates_parser/config/templates_parser.gpr"
# content [e22a7bcaafc76417db0be8a4e31ed3b00a1edbcb]
#
# add_file "harness/sources/templates_parser/config/tp_shared.gpr"
# content [a4561671caa6dbece6e2a2a63bf6b04d124d204f]
#
# add_file "harness/sources/templates_parser/config/tp_xmlada_dummy.gpr"
# content [5a22753abe8cf9175c4faa936971cb8f06fb2151]
#
# add_file "harness/sources/templates_parser/config/tp_xmlada_installed.gpr"
# content [35ae0ff29a64a34403fa10410e1eca7dafd48279]
#
# add_file "harness/sources/templates_parser/docs/.cvsignore"
# content [6a1752f47d57e9ed32e758cf53d6d0939834a23e]
#
# add_file "harness/sources/templates_parser/docs/all_sources.ada"
# content [5cdf636c3c907f10d4eca3e43f472616e9699857]
#
# add_file "harness/sources/templates_parser/docs/demo.tmplt"
# content [097b5aa109c40a87a4ba554d4e98ba71d7560966]
#
# add_file "harness/sources/templates_parser/docs/docs.gpr"
# content [47ea805c7feb0be04480b9e43ad804db17acddaf]
#
# add_file "harness/sources/templates_parser/docs/gentexifile"
# content [b3260bd0af56f7bf6aa9a212311cfa62a30965e8]
#
# add_file "harness/sources/templates_parser/docs/if_inline.tmplt"
# content [87abbc67d971bb42ddfe8cfece527d2a2f0571a4]
#
# add_file "harness/sources/templates_parser/docs/makefile"
# content [3751b5d96e05927018f84456701915d4aa967e86]
#
# add_file "harness/sources/templates_parser/docs/matrix.tmplt"
# content [de6da38d498d9f7dbc32ee564996ecccb590c3c2]
#
# add_file "harness/sources/templates_parser/docs/table.tmplt"
# content [1797bbf9d3a393d909986c01060a03fde73a4e64]
#
# add_file "harness/sources/templates_parser/docs/table_block.tmplt"
# content [bf1fbab83b4f9361c08ac6e9fccbaa0619016e54]
#
# add_file "harness/sources/templates_parser/docs/table_if.tmplt"
# content [c7545d6ff39bce6b9ab14af10b497a08f16261c3]
#
# add_file "harness/sources/templates_parser/docs/table_inline.tmplt"
# content [7d4180f1090392298843a8e23f4e36f4d8b4190a]
#
# add_file "harness/sources/templates_parser/docs/table_section.tmplt"
# content [5fd263c1c23e2a67d9980e4d541cb213f8e3d167]
#
# add_file "harness/sources/templates_parser/docs/templates_parser.texi"
# content [7ef69177ea515f221c0562b0fd3d8ffb8da6db34]
#
# add_file "harness/sources/templates_parser/docs/tp.css"
# content [231d4ecbb438b01c2213a9e49e3fc95c6751ee79]
#
# add_file "harness/sources/templates_parser/docs/user.tmplt"
# content [38878e3ec8c644f0e6710880f2ed5c96b5e316b0]
#
# add_file "harness/sources/templates_parser/makefile"
# content [75501f9da7836ce561f6aa8c78d60deefa0cace0]
#
# add_file "harness/sources/templates_parser/regtests/makefile"
# content [bed48e581e824da0b674ab29b67ebc6553e9db6c]
#
# add_file "harness/sources/templates_parser/regtests/regtests.gpr"
# content [9a6e2d63090cd274588124b870bf52e1f40701c8]
#
# add_file "harness/sources/templates_parser/regtests/run-test"
# content [bf91256993d3d66493fdf71885e9a3e8ea9acdc5]
#
# add_file "harness/sources/templates_parser/regtests/src/print_tree.adb"
# content [5bcbe01b6ffcb29642aa172a711cf0ab910fba73]
#
# add_file "harness/sources/templates_parser/regtests/src/test_callback.adb"
# content [6d705b321cf2abb90240a2c119758fe0b61483e6]
#
# add_file "harness/sources/templates_parser/regtests/src/test_callback.ads"
# content [bcbb9790a3fc2c349eee94375ddfe312bee1faf4]
#
# add_file "harness/sources/templates_parser/regtests/src/testme.adb"
# content [05bc11858da0507b66230376cf435405390a58f0]
#
# add_file "harness/sources/templates_parser/regtests/test_support.py"
# content [d0c115e7becb5e7c635fe17e5b5b5711f80da1da]
#
# add_file "harness/sources/templates_parser/regtests/tests/0001_tag_demo/gtag.tmplt"
# content [f20cd5f5b02df06fed253abefd25f9a92b9b27c7]
#
# add_file "harness/sources/templates_parser/regtests/tests/0001_tag_demo/tag_demo.adb"
# content [a61acdb32ff290717c20949aa08d034f86303a82]
#
# add_file "harness/sources/templates_parser/regtests/tests/0001_tag_demo/tag_demo.gpr"
# content [ecefd0a923820c7615c533d80c0da8103625b271]
#
# add_file "harness/sources/templates_parser/regtests/tests/0001_tag_demo/test.out"
# content [321dc192f30736a5462bc3050eaedd74908bcb51]
#
# add_file "harness/sources/templates_parser/regtests/tests/0001_tag_demo/test.py"
# content [a85fab1f8506a1cbd53c7133170a5fcbf288a32f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0002_testme/test.out"
# content [2d0a7ed89fd4c9468d7db483ec388476b86834b0]
#
# add_file "harness/sources/templates_parser/regtests/tests/0002_testme/test.py"
# content [2bd94302fd6b2bef976df7fefe51f23281eab391]
#
# add_file "harness/sources/templates_parser/regtests/tests/0002_testme/testme.tmplt"
# content [bd67948e191163cfd2bb5fe07a73bae12b7295f9]
#
# add_file "harness/sources/templates_parser/regtests/tests/0003_testme/test.out"
# content [9e62c4278d4b76cf9083af748d39ae4d5d64274e]
#
# add_file "harness/sources/templates_parser/regtests/tests/0003_testme/test.py"
# content [4ffbfb3172d74aaca60b454d9756d9deea9c4945]
#
# add_file "harness/sources/templates_parser/regtests/tests/0003_testme/testme2.tmplt"
# content [44e528f5f7d3ad90edc9043a28deab4fbcbb4cc7]
#
# add_file "harness/sources/templates_parser/regtests/tests/0004_testme/test.out"
# content [964d44c09af73cbf8e8ef5af162d2278d6a7a94b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0004_testme/test.py"
# content [45c7107212981637618e0b8acc93e94b578c7548]
#
# add_file "harness/sources/templates_parser/regtests/tests/0004_testme/testme2.tmplt"
# content [44e528f5f7d3ad90edc9043a28deab4fbcbb4cc7]
#
# add_file "harness/sources/templates_parser/regtests/tests/0004_testme/testme5.tmplt"
# content [2a9f81e8fe79d1dc793475c404439d0453621e28]
#
# add_file "harness/sources/templates_parser/regtests/tests/0005_testme/test.out"
# content [e67d6a16f1d30ad2d86e8ceac2e46733731feb6c]
#
# add_file "harness/sources/templates_parser/regtests/tests/0005_testme/test.py"
# content [b6ba7828ac1de81e75ce440243f8c1e76ae9cefe]
#
# add_file "harness/sources/templates_parser/regtests/tests/0005_testme/testme6.tmplt"
# content [c0ba888f12b4bec3f49e7c9496bb06cdc34bcffe]
#
# add_file "harness/sources/templates_parser/regtests/tests/0006_testme/test.out"
# content [868dccd50876c7ee2c7164f9505219e2b6db25d1]
#
# add_file "harness/sources/templates_parser/regtests/tests/0006_testme/test.py"
# content [2caa9d1f1696169fc758153913af420fc58337a7]
#
# add_file "harness/sources/templates_parser/regtests/tests/0006_testme/testme7.tmplt"
# content [c80073f75da606faa61f563a54cd29a1a11a8a8a]
#
# add_file "harness/sources/templates_parser/regtests/tests/0007_testme/test.out"
# content [6eed2e51f617d2d8478b2dc9197b62813034b181]
#
# add_file "harness/sources/templates_parser/regtests/tests/0007_testme/test.py"
# content [921db23a1d2c5b8266d9e2b5ad8000775f1f0192]
#
# add_file "harness/sources/templates_parser/regtests/tests/0007_testme/testme8.tmplt"
# content [856a4438b3f027a7948d69f44c86c63b2e095001]
#
# add_file "harness/sources/templates_parser/regtests/tests/0008_testme/test.out"
# content [7d811bd381577abbfc9c54d5a8253d6f680b7212]
#
# add_file "harness/sources/templates_parser/regtests/tests/0008_testme/test.py"
# content [6e544f10ee15f4ac4f449b48bab5b95dcb9d3766]
#
# add_file "harness/sources/templates_parser/regtests/tests/0008_testme/testme11.tmplt"
# content [07233d04916c91ce45cf33bd8454f83302f74bee]
#
# add_file "harness/sources/templates_parser/regtests/tests/0009_testme/test.out"
# content [d2a46a6713811184a86e51db101c53cdf714f2aa]
#
# add_file "harness/sources/templates_parser/regtests/tests/0009_testme/test.py"
# content [38ef04a42fa9f7b7bc93982c2e8c79d043edfe0a]
#
# add_file "harness/sources/templates_parser/regtests/tests/0009_testme/testme15.tmplt"
# content [25521015d0754a753a1b5a69411a43cd5bfe12b9]
#
# add_file "harness/sources/templates_parser/regtests/tests/0010_testme/test.out"
# content [64e9dc9ebd752973b7093494139f502669afe326]
#
# add_file "harness/sources/templates_parser/regtests/tests/0010_testme/test.py"
# content [79f20f8e1374a0b18bf87ec86bf0600528d19744]
#
# add_file "harness/sources/templates_parser/regtests/tests/0010_testme/testme16.tmplt"
# content [0a390ee5ba7e63543964646ef033323b63419aab]
#
# add_file "harness/sources/templates_parser/regtests/tests/0011_testme/test.out"
# content [b2760494e964a693eb2cb93180c48419e7a7bf1a]
#
# add_file "harness/sources/templates_parser/regtests/tests/0011_testme/test.py"
# content [e3203398ada90fd0eb708fc5076d4d8e8e0c91b3]
#
# add_file "harness/sources/templates_parser/regtests/tests/0011_testme/testme17.tmplt"
# content [a43853b57575f3b2c7a6e15564d25f3706396db7]
#
# add_file "harness/sources/templates_parser/regtests/tests/0012_testme/test.out"
# content [c4f8a68a9b4058a24db3ee64aa420559b9620b3b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0012_testme/test.py"
# content [81d3eed190c7e9e5bfbc29919e04b9e149b6ff46]
#
# add_file "harness/sources/templates_parser/regtests/tests/0012_testme/testme18.tmplt"
# content [4b5e571a9e7253ac9375e9f19d7d3e2b1ace982f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0013_testme/test.out"
# content [d042fc79e2a16df52004bd5ff88cde62a28f456e]
#
# add_file "harness/sources/templates_parser/regtests/tests/0013_testme/test.py"
# content [d61a3b632b2a1136f1c2d85f9012c53b2915d0e0]
#
# add_file "harness/sources/templates_parser/regtests/tests/0013_testme/testme24.tmplt"
# content [cc60a5309fa51e46284a0b09b09a15668d370537]
#
# add_file "harness/sources/templates_parser/regtests/tests/0014_testme/test.out"
# content [0ef4ba821c42d08d175d823fe2f9ec3641ad6bb3]
#
# add_file "harness/sources/templates_parser/regtests/tests/0014_testme/test.py"
# content [0ff0b87e03cf4371363e759bc7d492318211e53d]
#
# add_file "harness/sources/templates_parser/regtests/tests/0014_testme/testme25.tmplt"
# content [55a07e20690e1c1d8d58aa6befc57d1b1665368d]
#
# add_file "harness/sources/templates_parser/regtests/tests/0015_testme/include.tmplt"
# content [55738fc07a5966d930af07463522d106d47d2387]
#
# add_file "harness/sources/templates_parser/regtests/tests/0015_testme/test.out"
# content [625a4dddee92e3ae06885e8240773bdbff4d26eb]
#
# add_file "harness/sources/templates_parser/regtests/tests/0015_testme/test.py"
# content [f80376ad892f02221ee6789866642649e3baeee0]
#
# add_file "harness/sources/templates_parser/regtests/tests/0015_testme/testme26.tmplt"
# content [1811f5603f624d9741df4980ca72add406a5c681]
#
# add_file "harness/sources/templates_parser/regtests/tests/0016_testme/include2.tmplt"
# content [5e4e1b64e0794edc556413a012934d0df3e56474]
#
# add_file "harness/sources/templates_parser/regtests/tests/0016_testme/test.out"
# content [fbb0dcd78190c8b928780b77373aea7ac72be684]
#
# add_file "harness/sources/templates_parser/regtests/tests/0016_testme/test.py"
# content [89cba3ed1b5c926a85d24d956d229fd7902b7c62]
#
# add_file "harness/sources/templates_parser/regtests/tests/0016_testme/testme27.tmplt"
# content [0dbcb5a6b56e53e8061eebf1979be40c119a0175]
#
# add_file "harness/sources/templates_parser/regtests/tests/0017_testme/test.out"
# content [d8b05c6be9c54a50ec59f8d723fb3a8582ae900c]
#
# add_file "harness/sources/templates_parser/regtests/tests/0017_testme/test.py"
# content [d753643a6f20608016cd88dc55cd868f5b4b7616]
#
# add_file "harness/sources/templates_parser/regtests/tests/0017_testme/testme30.tmplt"
# content [259afe35358ce1986ebd458460e07c38c46cf55e]
#
# add_file "harness/sources/templates_parser/regtests/tests/0018_testme/base.tmplt"
# content [e6e2b93ef5b87182ac3f0ecc814a4bb9d335114e]
#
# add_file "harness/sources/templates_parser/regtests/tests/0018_testme/dir/file.tmplt"
# content [0f37f8be7edcd2df2accc760ba34dde711260fea]
#
# add_file "harness/sources/templates_parser/regtests/tests/0018_testme/dir/header.tmplt"
# content [c527147754fce6907de820e6f2e9e9b8d0383b90]
#
# add_file "harness/sources/templates_parser/regtests/tests/0018_testme/dir/subdir/footer.tmplt"
# content [9115bacc6f8cc7792bf4eca973efffe4dad44224]
#
# add_file "harness/sources/templates_parser/regtests/tests/0018_testme/test.out"
# content [b3117092bc5d69ffd5b3ac009fb12ca2d5898c76]
#
# add_file "harness/sources/templates_parser/regtests/tests/0018_testme/test.py"
# content [12a23c6271b00d31cd70b5134deafa2292e54730]
#
# add_file "harness/sources/templates_parser/regtests/tests/0018_testme/testme31.tmplt"
# content [8f84aac433897eb165a13b84dcea08ec138e1a93]
#
# add_file "harness/sources/templates_parser/regtests/tests/0019_testme/test.out"
# content [9e2383a8befa42395b84543c4c3b6f1c13cb0e60]
#
# add_file "harness/sources/templates_parser/regtests/tests/0019_testme/test.py"
# content [07e4337e0d5b8d35a720293b5e58dc29e7e0c0a0]
#
# add_file "harness/sources/templates_parser/regtests/tests/0019_testme/testme32.tmplt"
# content [9d0a78aa42ebc65dab3db8124d4fbe6c505e81be]
#
# add_file "harness/sources/templates_parser/regtests/tests/0020_testme/test.out"
# content [59937a91df7353c6afa9e2baf01a9b19be5cbe73]
#
# add_file "harness/sources/templates_parser/regtests/tests/0020_testme/test.py"
# content [62c2aa7a06fd84c705949ba0dae10fe7f250384e]
#
# add_file "harness/sources/templates_parser/regtests/tests/0020_testme/testme38.tmplt"
# content [69ad626a9bc70757535189c22baa585434d51c41]
#
# add_file "harness/sources/templates_parser/regtests/tests/0021_testme/test.out"
# content [d3528443baa37f7a6b37dc8751989f244558003b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0021_testme/test.py"
# content [5d47e7fb4e00de216167fc34f3eea3ded084207d]
#
# add_file "harness/sources/templates_parser/regtests/tests/0021_testme/testme53.tmplt"
# content [84b0c84c0d8e1a4921683f5e72eb03b546eb7087]
#
# add_file "harness/sources/templates_parser/regtests/tests/0022_testme/test.out"
# content [a903b2f12790fcd4e12979d5551424f977f9ca8a]
#
# add_file "harness/sources/templates_parser/regtests/tests/0022_testme/test.py"
# content [6e431d8676df5418bd61d91a00d28ae24d0014f0]
#
# add_file "harness/sources/templates_parser/regtests/tests/0022_testme/testme54.tmplt"
# content [07a382598dd3c9bab634ec52250f38b1f7db690f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0023_testme/test.out"
# content [1de50712820d7bdc027a20ff2d913cc3a83959b2]
#
# add_file "harness/sources/templates_parser/regtests/tests/0023_testme/test.py"
# content [b3f025052fe9c570f3f7dc5b355fb1e3c48caf8a]
#
# add_file "harness/sources/templates_parser/regtests/tests/0023_testme/testme59.incl"
# content [8801c2af700d80f8404fe9dbaf3ba92cf3e68d93]
#
# add_file "harness/sources/templates_parser/regtests/tests/0023_testme/testme59.tmplt"
# content [569c49da4cebae2d0d12f8c3901a011314555fdb]
#
# add_file "harness/sources/templates_parser/regtests/tests/0024_testme/test.out"
# content [7f2f746855bbd9c4adca7df9fda4f91872803e9d]
#
# add_file "harness/sources/templates_parser/regtests/tests/0024_testme/test.py"
# content [49f40575ea7d15e7044a62f45d4cc8ba1aa4e2be]
#
# add_file "harness/sources/templates_parser/regtests/tests/0024_testme/testme64.tmplt"
# content [57c005825a8706d3207c0ee0efe6e76554921888]
#
# add_file "harness/sources/templates_parser/regtests/tests/0025_testme/test.out"
# content [a075c2d2895b966c5861fe17e9b4a7481f7a8692]
#
# add_file "harness/sources/templates_parser/regtests/tests/0025_testme/test.py"
# content [4ba1eff2165718fde3571e0a6b5b1799503aaaf4]
#
# add_file "harness/sources/templates_parser/regtests/tests/0025_testme/testme78.tmplt"
# content [db446f9b3a7b7fd5d607e5ef50608838a03b9a2a]
#
# add_file "harness/sources/templates_parser/regtests/tests/0026_testme/test.out"
# content [02cf65f3ad32363d55f32ddf621a7a2922efcc3e]
#
# add_file "harness/sources/templates_parser/regtests/tests/0026_testme/test.py"
# content [644e8e345edfd8e017ff469c2925fd3f68eb3a61]
#
# add_file "harness/sources/templates_parser/regtests/tests/0026_testme/testme80.tmplt"
# content [265b316b8f816ae628a058244c93015b43145b46]
#
# add_file "harness/sources/templates_parser/regtests/tests/0027_testme/test.out"
# content [061769f6173da6888f7f94b8f4c627f68910ca14]
#
# add_file "harness/sources/templates_parser/regtests/tests/0027_testme/test.py"
# content [ef854894438fc9b82a6890b11c4103aa4816259c]
#
# add_file "harness/sources/templates_parser/regtests/tests/0027_testme/testme4.tmplt"
# content [1acf04238a30a77070c78a94be18ec1703f74061]
#
# add_file "harness/sources/templates_parser/regtests/tests/0028_testme/test.out"
# content [d98371c0c2d1fe4a3709cd403ec072fa904fe47d]
#
# add_file "harness/sources/templates_parser/regtests/tests/0028_testme/test.py"
# content [d63e420b0de85291bda75ba59738c3398bfbc2d9]
#
# add_file "harness/sources/templates_parser/regtests/tests/0028_testme/testme12.tmplt"
# content [f6ef04f433a9e9cad3d8ec24d7f6bcff4f08a6d9]
#
# add_file "harness/sources/templates_parser/regtests/tests/0029_testme/test.out"
# content [ab2b630a7cd07d82930495abf93a3d5108b59d7b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0029_testme/test.py"
# content [58641e2eeb30eee21078185615e840b30022966f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0029_testme/testme13.tmplt"
# content [ddb8441d0c14cf7859c342162b651772be6d4bfa]
#
# add_file "harness/sources/templates_parser/regtests/tests/0030_testme/test.out"
# content [f503d7343f4b6c377a20848b08a07d8c08ff384d]
#
# add_file "harness/sources/templates_parser/regtests/tests/0030_testme/test.py"
# content [72ea7b82d33d7d5a1bdca00431fd69da0e632a0c]
#
# add_file "harness/sources/templates_parser/regtests/tests/0030_testme/testme14.tmplt"
# content [f4b3e72df380406783c50cbfe0e90cd0badabb23]
#
# add_file "harness/sources/templates_parser/regtests/tests/0031_testme/test.out"
# content [b7f935eb69bef8a30b687bd1bf82173db75017c7]
#
# add_file "harness/sources/templates_parser/regtests/tests/0031_testme/test.py"
# content [c66e81ac8aed6d6adf941d2d4339b6adea506308]
#
# add_file "harness/sources/templates_parser/regtests/tests/0031_testme/testme19.tmplt"
# content [41d4b368d7ca9771f46600b88f706017b5922ae3]
#
# add_file "harness/sources/templates_parser/regtests/tests/0032_testme/test.out"
# content [cc9573d5476b330f1284df8bf281721af776a1bd]
#
# add_file "harness/sources/templates_parser/regtests/tests/0032_testme/test.py"
# content [e09b33ca636c8a6cdcf11f23bb5aa7b1670260a9]
#
# add_file "harness/sources/templates_parser/regtests/tests/0032_testme/testme20.tmplt"
# content [1b3105fb6b65a57744329bae1d86dbc0a0d1a7e1]
#
# add_file "harness/sources/templates_parser/regtests/tests/0033_testme/test.out"
# content [18f90b14f42f7ad3f2613d94771d3e533605da89]
#
# add_file "harness/sources/templates_parser/regtests/tests/0033_testme/test.py"
# content [08dff1eeb949767817f436c57c7f543ce92388a6]
#
# add_file "harness/sources/templates_parser/regtests/tests/0033_testme/testme21.tmplt"
# content [aa4b54033d31db1b84bb61dae77b9c578c6f3cca]
#
# add_file "harness/sources/templates_parser/regtests/tests/0034_testme/test.out"
# content [2f3204238204f037ee62757e93621bb605986d8a]
#
# add_file "harness/sources/templates_parser/regtests/tests/0034_testme/test.py"
# content [edf095f2ca6b305969a3453f0b961ccc085e15fa]
#
# add_file "harness/sources/templates_parser/regtests/tests/0034_testme/testme22.tmplt"
# content [6f06f12c3061d8224e92d5dad8e4e667bc575b4b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0035_testme/test.out"
# content [a7ed6dae66dad9e020b1556c557a2cd159ecb9ef]
#
# add_file "harness/sources/templates_parser/regtests/tests/0035_testme/test.py"
# content [43c119f3e442414f46f51afaecea41e39d78e8c7]
#
# add_file "harness/sources/templates_parser/regtests/tests/0035_testme/testme23.tmplt"
# content [185cc95baab087526b4096bfe5a3109deb194d47]
#
# add_file "harness/sources/templates_parser/regtests/tests/0036_testme/test.out"
# content [7b2124f3a6be4929d3d0005eadc040a703a6a5de]
#
# add_file "harness/sources/templates_parser/regtests/tests/0036_testme/test.py"
# content [55e4f7f0f66415c40e278a34283e4567e06d023d]
#
# add_file "harness/sources/templates_parser/regtests/tests/0036_testme/testme28.tmplt"
# content [7b2124f3a6be4929d3d0005eadc040a703a6a5de]
#
# add_file "harness/sources/templates_parser/regtests/tests/0037_testme/test.out"
# content [5d14fd457e3e5ddc973203a382c04480cdac8936]
#
# add_file "harness/sources/templates_parser/regtests/tests/0037_testme/test.py"
# content [abcac6c73b3213d73c1df6742a566797b20756b7]
#
# add_file "harness/sources/templates_parser/regtests/tests/0037_testme/testme29.tmplt"
# content [8250b4652f42dddc3c643b39c754c086ef5c5e1f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0038_testme/test.out"
# content [878fa633419693955a24aed0a39ffe628996f1c0]
#
# add_file "harness/sources/templates_parser/regtests/tests/0038_testme/test.py"
# content [e01eacf0726b96d45d202c233cc9d5f631d08dd6]
#
# add_file "harness/sources/templates_parser/regtests/tests/0038_testme/testme33.tmplt"
# content [904da96890310bf6db2f06a581524cd93dbbd197]
#
# add_file "harness/sources/templates_parser/regtests/tests/0039_testme/test.out"
# content [b4fb084ff1701fb600b561b3e5c984e042b6f8fc]
#
# add_file "harness/sources/templates_parser/regtests/tests/0039_testme/test.py"
# content [23317324674ec18cdb800c9cd0666dc50a29e423]
#
# add_file "harness/sources/templates_parser/regtests/tests/0039_testme/testme34.tmplt"
# content [4b1ffd14952a132cab0501bd18951f60b29c6624]
#
# add_file "harness/sources/templates_parser/regtests/tests/0040_testme/test.out"
# content [f003ff073883973dce4fe784417c8ef785271c58]
#
# add_file "harness/sources/templates_parser/regtests/tests/0040_testme/test.py"
# content [5841c0e1512437e72660bab4fed1323c0b5358dd]
#
# add_file "harness/sources/templates_parser/regtests/tests/0040_testme/testme35.tmplt"
# content [ff5a07ec9d1b6b99a3ab0d122ba7a0bb062bf6bd]
#
# add_file "harness/sources/templates_parser/regtests/tests/0041_testme/test.out"
# content [5875429d68e0d7721efea19916dd70069ef6e9bc]
#
# add_file "harness/sources/templates_parser/regtests/tests/0041_testme/test.py"
# content [fc3be17bea410bbf987f21e533be703f4d0c98c6]
#
# add_file "harness/sources/templates_parser/regtests/tests/0041_testme/testme36.tmplt"
# content [1816f33aabb1db3485ea1e6a295c704aea163967]
#
# add_file "harness/sources/templates_parser/regtests/tests/0042_testme/test.out"
# content [56d89fa2a62de7e9e29d09822a7fbb8870af1a27]
#
# add_file "harness/sources/templates_parser/regtests/tests/0042_testme/test.py"
# content [9abd6528c63fccf0602e24bed6d7218df18d23f2]
#
# add_file "harness/sources/templates_parser/regtests/tests/0042_testme/testme37.tmplt"
# content [b4b6fdc1e1dc25804778006d6d7c65c12348192a]
#
# add_file "harness/sources/templates_parser/regtests/tests/0043_testme/test.out"
# content [10f6f31bcada7e47c781ec00c75231708dc3495d]
#
# add_file "harness/sources/templates_parser/regtests/tests/0043_testme/test.py"
# content [34e36ab0a964f0ac82b2e4e51f20e38972c8b8fd]
#
# add_file "harness/sources/templates_parser/regtests/tests/0043_testme/testme39.tmplt"
# content [3f2d245922e5447e231fb89d33c8911a1b45fa73]
#
# add_file "harness/sources/templates_parser/regtests/tests/0044_testme/include2.tmplt"
# content [5e4e1b64e0794edc556413a012934d0df3e56474]
#
# add_file "harness/sources/templates_parser/regtests/tests/0044_testme/test.out"
# content [850a2065b02af330ccdc1a8345f7fceabcd2d0a8]
#
# add_file "harness/sources/templates_parser/regtests/tests/0044_testme/test.py"
# content [d7e6c2a31f02d7e6a57c12f09f326e1d89a48623]
#
# add_file "harness/sources/templates_parser/regtests/tests/0044_testme/testme40.tmplt"
# content [5776dd76bd022b596f1834d14c15da3957db188e]
#
# add_file "harness/sources/templates_parser/regtests/tests/0045_testme/test.out"
# content [d5a0a8ecc896e853d8c439b6e0924837355af444]
#
# add_file "harness/sources/templates_parser/regtests/tests/0045_testme/test.py"
# content [8932e9be126af299e5406c2c05888b65aee7bdeb]
#
# add_file "harness/sources/templates_parser/regtests/tests/0045_testme/testme41.tmplt"
# content [b19a12ab935f20f4e32b978b41157f94eb578b43]
#
# add_file "harness/sources/templates_parser/regtests/tests/0046_testme/test.out"
# content [a5dc2c0e1036740c740dc8d93e4802b89128533f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0046_testme/test.py"
# content [e3ebab900f534ac1fd7b71fed962ecf029e2ecaa]
#
# add_file "harness/sources/templates_parser/regtests/tests/0046_testme/testme42.tmplt"
# content [98aca1d8672b8142d16f13c0723b8d13f1c8912b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0047_testme/test.out"
# content [c24f8b4776101e5d7d0044c9c9bcf82027af75e0]
#
# add_file "harness/sources/templates_parser/regtests/tests/0047_testme/test.py"
# content [eb2b884c5ae527f894f695598f936c50557032ef]
#
# add_file "harness/sources/templates_parser/regtests/tests/0047_testme/testme43.tmplt"
# content [cc91e10e54622913a0aefbc9b5de20c28ab47f36]
#
# add_file "harness/sources/templates_parser/regtests/tests/0048_testme/include3.tmplt"
# content [e42f37f8869c5c676a84ca5360ef6db0fc5b6e01]
#
# add_file "harness/sources/templates_parser/regtests/tests/0048_testme/test.out"
# content [ccea0c0a83476e4c98e37b791f2c35906ed73608]
#
# add_file "harness/sources/templates_parser/regtests/tests/0048_testme/test.py"
# content [92481175e86e74d87605e1369269bb573753682b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0048_testme/testme44.tmplt"
# content [fa7a68bd8fad3ac0253525555b05029f3feaee12]
#
# add_file "harness/sources/templates_parser/regtests/tests/0049_testme/test.out"
# content [80e7e93bbf11a316d6a36b708f856b3fee727685]
#
# add_file "harness/sources/templates_parser/regtests/tests/0049_testme/test.py"
# content [7b6f94c098d93f22256acbb7f10cd47de4898802]
#
# add_file "harness/sources/templates_parser/regtests/tests/0049_testme/testme45.incl"
# content [0b5a669f6e08a0a2366ca5b260dee798ed1f7545]
#
# add_file "harness/sources/templates_parser/regtests/tests/0049_testme/testme45.tmplt"
# content [f1141c784c04e01553890f0a2cb817f9ea4abae6]
#
# add_file "harness/sources/templates_parser/regtests/tests/0050_testme/test.out"
# content [ed4be12dbb0c51b9f162eaf60060e66ce2c6f5c4]
#
# add_file "harness/sources/templates_parser/regtests/tests/0050_testme/test.py"
# content [feae85870fbf26f766b19972b2bcc5d702a7d7bf]
#
# add_file "harness/sources/templates_parser/regtests/tests/0050_testme/testme46.tmplt"
# content [2e3c845627eeb2abb28c4d213dea8f0b47156a14]
#
# add_file "harness/sources/templates_parser/regtests/tests/0051_testme/include_simple.incl"
# content [4370ab392f4dd0793322f008868e1a0792e26d4e]
#
# add_file "harness/sources/templates_parser/regtests/tests/0051_testme/test.out"
# content [1e590ab2275919fa9d37645d7696f2e7fe990bf0]
#
# add_file "harness/sources/templates_parser/regtests/tests/0051_testme/test.py"
# content [7fa2a155a8082e928c98726cb5af6b9a4451952c]
#
# add_file "harness/sources/templates_parser/regtests/tests/0051_testme/testme47.tmplt"
# content [3d44badd68135789dd9dbdb787407ffddcb5094c]
#
# add_file "harness/sources/templates_parser/regtests/tests/0052_testme/include_simple.incl"
# content [4370ab392f4dd0793322f008868e1a0792e26d4e]
#
# add_file "harness/sources/templates_parser/regtests/tests/0052_testme/test.out"
# content [1e590ab2275919fa9d37645d7696f2e7fe990bf0]
#
# add_file "harness/sources/templates_parser/regtests/tests/0052_testme/test.py"
# content [9f6f64d69da4b87d951a132e658ed9895c848f62]
#
# add_file "harness/sources/templates_parser/regtests/tests/0052_testme/testme48.tmplt"
# content [2b759ab32fd8d346e152759b4d64e62a427dcf74]
#
# add_file "harness/sources/templates_parser/regtests/tests/0053_testme/include_simple.incl"
# content [4370ab392f4dd0793322f008868e1a0792e26d4e]
#
# add_file "harness/sources/templates_parser/regtests/tests/0053_testme/test.out"
# content [7ea75a099b0e18417cf166e31f3de561049eef6f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0053_testme/test.py"
# content [6f027f1ad0a8f0f882f219a782e76ec558c91f73]
#
# add_file "harness/sources/templates_parser/regtests/tests/0053_testme/testme49.tmplt"
# content [ae17fc9448dd72ace6816f4c80f064f5219578dd]
#
# add_file "harness/sources/templates_parser/regtests/tests/0054_testme/include_simple.incl"
# content [4370ab392f4dd0793322f008868e1a0792e26d4e]
#
# add_file "harness/sources/templates_parser/regtests/tests/0054_testme/test.out"
# content [4bcdc7b6bd368e52aeb387c980f8bdd6d2d97acc]
#
# add_file "harness/sources/templates_parser/regtests/tests/0054_testme/test.py"
# content [fb159b32b54d982cc4746e48618d66b1b46bb92d]
#
# add_file "harness/sources/templates_parser/regtests/tests/0054_testme/testme50.tmplt"
# content [3028f24a8b0c351eb8340de2c6737db6e72e5293]
#
# add_file "harness/sources/templates_parser/regtests/tests/0055_testme/include_simple.incl"
# content [4370ab392f4dd0793322f008868e1a0792e26d4e]
#
# add_file "harness/sources/templates_parser/regtests/tests/0055_testme/test.out"
# content [39b00eeacce13ed8c20b317a33d1b04ef0de6f6a]
#
# add_file "harness/sources/templates_parser/regtests/tests/0055_testme/test.py"
# content [949ac9685e13fe542588a4106c5fb58ee4541d5d]
#
# add_file "harness/sources/templates_parser/regtests/tests/0055_testme/testme51.tmplt"
# content [bb2aca81a994506a17f996e0b7416f172dcb721b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0056_testme/test.out"
# content [00bbad94c707bf70f8d4778e5b6ecd6f55fa0012]
#
# add_file "harness/sources/templates_parser/regtests/tests/0056_testme/test.py"
# content [cc89938d2de89e64ff789d42405f064372503f7f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0056_testme/testme52.tmplt"
# content [87e75759008bad595f8ede3ad1836b7606ab781b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0057_testme/test.out"
# content [0e860a5a63f67dd057d7885969dac6c0f9cf9861]
#
# add_file "harness/sources/templates_parser/regtests/tests/0057_testme/test.py"
# content [844b9ad0b64c5bac03ff1c4a5117b026b2841baf]
#
# add_file "harness/sources/templates_parser/regtests/tests/0057_testme/testme55.tmplt"
# content [90138edd25ba7c095418494c3ef901731bc06913]
#
# add_file "harness/sources/templates_parser/regtests/tests/0058_testme/test.out"
# content [9a1d5edc592881a709538d65bef3f12a172ecf69]
#
# add_file "harness/sources/templates_parser/regtests/tests/0058_testme/test.py"
# content [6a69ac6acbd219cef86b8f47cb349d200bbfee29]
#
# add_file "harness/sources/templates_parser/regtests/tests/0058_testme/testme56.tmplt"
# content [3d9bbe8bc4122ab0a1ba42f65848d0620e774bb8]
#
# add_file "harness/sources/templates_parser/regtests/tests/0059_testme/test.out"
# content [5a2060f939531fba72a971245e6e8d91d1c19a20]
#
# add_file "harness/sources/templates_parser/regtests/tests/0059_testme/test.py"
# content [8b421ab6c415cdcb4d43fd0862ec92a90f089a31]
#
# add_file "harness/sources/templates_parser/regtests/tests/0059_testme/testme57.tmplt"
# content [5b749371b4d2604ac844bdcd49d3814ef64ed1be]
#
# add_file "harness/sources/templates_parser/regtests/tests/0060_testme/test.out"
# content [e14defcc10addef542ce01b01f4875da502b3a0b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0060_testme/test.py"
# content [c379667a09c71d43f743b665384cf4771f8b5994]
#
# add_file "harness/sources/templates_parser/regtests/tests/0060_testme/testme58.tmplt"
# content [ee7b1796589faff833466d3e5a19b85d2b49142d]
#
# add_file "harness/sources/templates_parser/regtests/tests/0061_testme/test.out"
# content [5c6cca17d54b81549cbdd51b8dbb8fdadfe95173]
#
# add_file "harness/sources/templates_parser/regtests/tests/0061_testme/test.py"
# content [16590ffd0b1daa2611f6ba036c70022f6a58e279]
#
# add_file "harness/sources/templates_parser/regtests/tests/0061_testme/testme60.tmplt"
# content [a4630836641a97949c5dbd53b165801cb556f4a6]
#
# add_file "harness/sources/templates_parser/regtests/tests/0062_testme/test.out"
# content [73b698b0649d77d20f35c806c44158abacde9d30]
#
# add_file "harness/sources/templates_parser/regtests/tests/0062_testme/test.py"
# content [a791ab58377c53459219f259640ccfe7360aaaa9]
#
# add_file "harness/sources/templates_parser/regtests/tests/0062_testme/testme61.tmplt"
# content [eb9f382b0d3def5e603771a03e4e91f83377dbef]
#
# add_file "harness/sources/templates_parser/regtests/tests/0062_testme/testme61_1.incl"
# content [e19a0640157538b71bdf7a5397f28518cc4303fd]
#
# add_file "harness/sources/templates_parser/regtests/tests/0062_testme/testme61_2.incl"
# content [4ac8c11d79d1f7e5c6f123711050e76009c7c223]
#
# add_file "harness/sources/templates_parser/regtests/tests/0063_testme/test.out"
# content [c71465d9b9b6d65b64fec49438afb8bf57b29630]
#
# add_file "harness/sources/templates_parser/regtests/tests/0063_testme/test.py"
# content [dedbf32f84ec0c72442e0b2960d8449a710bfc10]
#
# add_file "harness/sources/templates_parser/regtests/tests/0063_testme/testme62.incl"
# content [a3ad6b7148ce73917af4b23fa0a4e405365d7435]
#
# add_file "harness/sources/templates_parser/regtests/tests/0063_testme/testme62.tmplt"
# content [85e025a61aa3261c8e4b098b27ec138f8a1579c3]
#
# add_file "harness/sources/templates_parser/regtests/tests/0064_testme/test.out"
# content [20b8691d1feb769a00c53130f1b614f971ad4705]
#
# add_file "harness/sources/templates_parser/regtests/tests/0064_testme/test.py"
# content [079b3cc1ca6410c0f55cf095331384eb24959461]
#
# add_file "harness/sources/templates_parser/regtests/tests/0064_testme/testme63.tmplt"
# content [13e0a1188be521a49eac27ec544489f4892283df]
#
# add_file "harness/sources/templates_parser/regtests/tests/0065_testme/test.out"
# content [d5042114e7045e0e23e9698a1cd86cee94ae4c24]
#
# add_file "harness/sources/templates_parser/regtests/tests/0065_testme/test.py"
# content [6ef0ec7d72ab3be4baae0bea26e305e765b19a45]
#
# add_file "harness/sources/templates_parser/regtests/tests/0065_testme/testme65.tmplt"
# content [81048a78853e6a9674e5c5d81d63e72a939ca819]
#
# add_file "harness/sources/templates_parser/regtests/tests/0066_testme/test.out"
# content [b756e6599f4680a9d87c1dd6c18933109e9a5e0d]
#
# add_file "harness/sources/templates_parser/regtests/tests/0066_testme/test.py"
# content [c349f41fd4ccc47dd862fae10e1963ce70370bac]
#
# add_file "harness/sources/templates_parser/regtests/tests/0066_testme/testme66.tmplt"
# content [283baa2f3e93f57070c27ec44b887d1d209c6a26]
#
# add_file "harness/sources/templates_parser/regtests/tests/0067_testme/test.out"
# content [4bc8e1c8bbfbe6371df4fb940385b10ef949d442]
#
# add_file "harness/sources/templates_parser/regtests/tests/0067_testme/test.py"
# content [803538dcfe7fe264c425f191efd6a1dedc7be5f0]
#
# add_file "harness/sources/templates_parser/regtests/tests/0067_testme/testme67.tmplt"
# content [dbf8cd8a3028eb141491a0adaf1a15d1d9c82fc8]
#
# add_file "harness/sources/templates_parser/regtests/tests/0068_testme/test.out"
# content [9de3f426d8a649abf7ca4822c7b056fbb7fe3a41]
#
# add_file "harness/sources/templates_parser/regtests/tests/0068_testme/test.py"
# content [342e87790669d0c9bb5c826819ee3cf24911ccd5]
#
# add_file "harness/sources/templates_parser/regtests/tests/0068_testme/testme68.tmplt"
# content [9da42c408087c6faa46966a03ce51b8f4bcda77f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0069_testme/test.out"
# content [111e396828324e29a2a51970f02af0a50b85a89f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0069_testme/test.py"
# content [5fe664217a8fd2ba5bc8b5f30d51ccd345f13400]
#
# add_file "harness/sources/templates_parser/regtests/tests/0069_testme/testme69.tmplt"
# content [54c32b6d4007e05c2fce4657167c06b548f0a3ca]
#
# add_file "harness/sources/templates_parser/regtests/tests/0070_testme/incl.tmplt"
# content [26614c84846ec4df79a43ce0da680d00260009d1]
#
# add_file "harness/sources/templates_parser/regtests/tests/0070_testme/test.out"
# content [c2e9da3b3d871a6500e1ae0f48c3b7b8c80987d6]
#
# add_file "harness/sources/templates_parser/regtests/tests/0070_testme/test.py"
# content [6f236cc16249e6ebf16651df38b26a0d848c5cbc]
#
# add_file "harness/sources/templates_parser/regtests/tests/0070_testme/testme70.tmplt"
# content [1cee995dd06963ca3239f18704bb13a2afaef9ef]
#
# add_file "harness/sources/templates_parser/regtests/tests/0071_testme/test.out"
# content [1935187242be7be3247fb1f24d9412d6e1bc4a91]
#
# add_file "harness/sources/templates_parser/regtests/tests/0071_testme/test.py"
# content [d1824075ea6cb6495c1e46a876a8f8909debc853]
#
# add_file "harness/sources/templates_parser/regtests/tests/0071_testme/testme71.tmplt"
# content [6cc9a2190d6d5a796ae1709fde15e088ea7d8af2]
#
# add_file "harness/sources/templates_parser/regtests/tests/0072_testme/test.out"
# content [b2fbe4d4702d05c9e8690ae996d95404fe496281]
#
# add_file "harness/sources/templates_parser/regtests/tests/0072_testme/test.py"
# content [9bd2d3204e1434ed4bdad71a9ee623bc461bb177]
#
# add_file "harness/sources/templates_parser/regtests/tests/0072_testme/testme72.tmplt"
# content [61f22b16c9cb5a6f29fef5a2f19c4d7e96605655]
#
# add_file "harness/sources/templates_parser/regtests/tests/0073_testme/test.out"
# content [b63f2560fe560def7fb33439e4de2481add36b4c]
#
# add_file "harness/sources/templates_parser/regtests/tests/0073_testme/test.py"
# content [5d02f60eb9655f8461bb2ad9f0bbbbb483cbbb93]
#
# add_file "harness/sources/templates_parser/regtests/tests/0073_testme/testme73.tmplt"
# content [2addd280a76f50167888888e989e13f0b1240476]
#
# add_file "harness/sources/templates_parser/regtests/tests/0074_testme/test.out"
# content [da39a3ee5e6b4b0d3255bfef95601890afd80709]
#
# add_file "harness/sources/templates_parser/regtests/tests/0074_testme/test.py"
# content [f290a53e49399d8ddddcfea3f10d6c47f69cd4d9]
#
# add_file "harness/sources/templates_parser/regtests/tests/0074_testme/testme74.tmplt"
# content [7f5449bc92da552966f3d7f6b80458ab30eea04d]
#
# add_file "harness/sources/templates_parser/regtests/tests/0075_testme/test.out"
# content [d49f19be3ff1ae0acfc4aa35917d2d32756856bc]
#
# add_file "harness/sources/templates_parser/regtests/tests/0075_testme/test.py"
# content [7d5a1ddaa9597f964d61edff6f25c8d2611425f0]
#
# add_file "harness/sources/templates_parser/regtests/tests/0075_testme/testme75.tmplt"
# content [e965fb130dc167813ffa9bd6e919509063b50a50]
#
# add_file "harness/sources/templates_parser/regtests/tests/0076_testme/incl.tmplt"
# content [26614c84846ec4df79a43ce0da680d00260009d1]
#
# add_file "harness/sources/templates_parser/regtests/tests/0076_testme/test.out"
# content [43fa88e7184e8bd1fccb5a658bc30493318c14a4]
#
# add_file "harness/sources/templates_parser/regtests/tests/0076_testme/test.py"
# content [1eeafd97fbe6aa5ed8f308e59772cce77c242c02]
#
# add_file "harness/sources/templates_parser/regtests/tests/0076_testme/testme76.tmplt"
# content [6cb3d19fd34332d00f0cb0acce8f0a28309c0579]
#
# add_file "harness/sources/templates_parser/regtests/tests/0077_testme/single_line.incl"
# content [7ba52bd7d28b23696af9833daa54f03599f03817]
#
# add_file "harness/sources/templates_parser/regtests/tests/0077_testme/test.out"
# content [1e3a2295e9991a012d257798f94e37179a2f66d6]
#
# add_file "harness/sources/templates_parser/regtests/tests/0077_testme/test.py"
# content [9941292edbe7d79d6bdc76a1881235ef9f635bc0]
#
# add_file "harness/sources/templates_parser/regtests/tests/0077_testme/testme77.tmplt"
# content [46fd1cba7436f57d9d2b9ad456dc5baa43acc01d]
#
# add_file "harness/sources/templates_parser/regtests/tests/0078_testme/test.out"
# content [57842440981d27cfdd4381c44f988a8619834a4d]
#
# add_file "harness/sources/templates_parser/regtests/tests/0078_testme/test.py"
# content [ad8991d24c29b7c334fe7a8e6540f07ef30bbece]
#
# add_file "harness/sources/templates_parser/regtests/tests/0078_testme/testme79.tmplt"
# content [08503a558ef8ed807ad534840625ccbc52b40a35]
#
# add_file "harness/sources/templates_parser/regtests/tests/0079_testme/test.out"
# content [cb587f7668eb092d92a13ba765a45f26284f9dff]
#
# add_file "harness/sources/templates_parser/regtests/tests/0079_testme/test.py"
# content [2cf6f866881cf4209cc977f173921928a73304f7]
#
# add_file "harness/sources/templates_parser/regtests/tests/0079_testme/testme3.tmplt"
# content [7b475384a877175419a5d1df2ffc7b740ee35e22]
#
# add_file "harness/sources/templates_parser/regtests/tests/0080_blocks/blocks1.tmplt"
# content [01ed8a0c6b20e21e0902774fe926d7c1abb5557e]
#
# add_file "harness/sources/templates_parser/regtests/tests/0080_blocks/test.out"
# content [58365e6ae483fd84f79005abf8948a0b5ebe5695]
#
# add_file "harness/sources/templates_parser/regtests/tests/0080_blocks/test.py"
# content [95caca2c416cf5552f80ab0aef2dc8753ab87bd8]
#
# add_file "harness/sources/templates_parser/regtests/tests/0081_blocks/blocks2.tmplt"
# content [71c3f9bf4af540936ce390339ac0d142f0b08b4f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0081_blocks/test.out"
# content [81073b53af6365b50a6fc519542734bb8b902dec]
#
# add_file "harness/sources/templates_parser/regtests/tests/0081_blocks/test.py"
# content [c354d3f5f9a213ed2fb3cb492e88d074be7f124b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0082_blocks/blocks3.tmplt"
# content [5bab2258ddb4e52920fc34299db075d04d5b9431]
#
# add_file "harness/sources/templates_parser/regtests/tests/0082_blocks/test.out"
# content [96cd206bc36302b537d6724df0bc59f4578d3074]
#
# add_file "harness/sources/templates_parser/regtests/tests/0082_blocks/test.py"
# content [6f8c50d6b540c0d69922eb667c01d188ee6903ba]
#
# add_file "harness/sources/templates_parser/regtests/tests/0083_blocks/blocks4.tmplt"
# content [8dc1d883bbb47ec4a2e74ea5444d63a0551c09fc]
#
# add_file "harness/sources/templates_parser/regtests/tests/0083_blocks/test.out"
# content [04b22d448f12a83118a094759007758cbfc9173b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0083_blocks/test.py"
# content [9e390507239625488e4243edc17acefe6c8e0bb4]
#
# add_file "harness/sources/templates_parser/regtests/tests/0084_blocks/blocks5.tmplt"
# content [55ae2bf72a338bfd652b06a06585aaf241fc6fe6]
#
# add_file "harness/sources/templates_parser/regtests/tests/0084_blocks/test.out"
# content [43afd035a0fcbf9c70e8caa15356e6b69d24fbb3]
#
# add_file "harness/sources/templates_parser/regtests/tests/0084_blocks/test.py"
# content [d8268c46ce4cfa1895e32eb826f6c7fa2792486d]
#
# add_file "harness/sources/templates_parser/regtests/tests/0085_blocks/blocks6.tmplt"
# content [05065a8ee94a0fd12af5aa249012bce32df13a91]
#
# add_file "harness/sources/templates_parser/regtests/tests/0085_blocks/test.out"
# content [50f64b88831d21c9b83624cbf2e552c7cf0c2156]
#
# add_file "harness/sources/templates_parser/regtests/tests/0085_blocks/test.py"
# content [a6f812e03f415a78c0c196565f6aa03d8db16bfa]
#
# add_file "harness/sources/templates_parser/regtests/tests/0086_blocks/blocks7.tmplt"
# content [425fd543a89170b34b1c82dfd7db08703bad3239]
#
# add_file "harness/sources/templates_parser/regtests/tests/0086_blocks/test.out"
# content [864ca4582da5e42aacdde94bd1a036145b1be1a5]
#
# add_file "harness/sources/templates_parser/regtests/tests/0086_blocks/test.py"
# content [02424d4f2385f6051596d24cb95c0c7f669e578b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0087_tcache/tcache.adb"
# content [3ce30f296117c367c18984ef2d46012f65b647a6]
#
# add_file "harness/sources/templates_parser/regtests/tests/0087_tcache/tcache.gpr"
# content [1e59e97dcdfe3e5e2a4e52a7acc8af78e1c09219]
#
# add_file "harness/sources/templates_parser/regtests/tests/0087_tcache/test.out"
# content [55409e17a68ecbebc6c3ce903200afbb245042af]
#
# add_file "harness/sources/templates_parser/regtests/tests/0087_tcache/test.py"
# content [3537a42a99b3393883f96f7e300e21a50cb6f3eb]
#
# add_file "harness/sources/templates_parser/regtests/tests/0088_testcat/test.out"
# content [046dc1de439f03c444ae6354e32783356b43963c]
#
# add_file "harness/sources/templates_parser/regtests/tests/0088_testcat/test.py"
# content [d0a00b4ae810a396c6de8f8a0a095df17d1bb510]
#
# add_file "harness/sources/templates_parser/regtests/tests/0088_testcat/testcat.adb"
# content [39998f70fc732531889314a65d2050132ba89a88]
#
# add_file "harness/sources/templates_parser/regtests/tests/0088_testcat/testcat.gpr"
# content [2a3cdbfe2b747127462865af748a43bab637ceb9]
#
# add_file "harness/sources/templates_parser/regtests/tests/0088_testcat/testcat.tmplt"
# content [0e24d22f0bf8f5ad679c29cc1e6ce7390cf2f299]
#
# add_file "harness/sources/templates_parser/regtests/tests/0089_testme_kut/test.out"
# content [3c58b28c5e4d35b6bfee240961dc18be9bc4b8b6]
#
# add_file "harness/sources/templates_parser/regtests/tests/0089_testme_kut/test.py"
# content [6ad606a38010645ea0b07c4a0f00ad3e6f33adfd]
#
# add_file "harness/sources/templates_parser/regtests/tests/0089_testme_kut/testme10.tmplt"
# content [9fef80327225a1c314a39b6517f7aa11f6ea8b99]
#
# add_file "harness/sources/templates_parser/regtests/tests/0090_testme/test.out"
# content [1d92bb4381ec14b30344b9b7e62c40337fc99bd9]
#
# add_file "harness/sources/templates_parser/regtests/tests/0090_testme/test.py"
# content [d3d8681608c26f1e3ddc28b749cf958d9dfb0f0c]
#
# add_file "harness/sources/templates_parser/regtests/tests/0090_testme/testme9.tmplt"
# content [514353923501fe475bdbe48a7451fbb989f4a87e]
#
# add_file "harness/sources/templates_parser/regtests/tests/0090_testme/testme9_pt.out"
# content [66ff1317af350f82e345cc64705437dbb728a8db]
#
# add_file "harness/sources/templates_parser/regtests/tests/0091_date_time/test.out"
# content [4fd7c8c3173a73e6a1a4556a9961216b129a5445]
#
# add_file "harness/sources/templates_parser/regtests/tests/0091_date_time/test.py"
# content [c25506320032c9fd57cb89047df6e50150a335b3]
#
# add_file "harness/sources/templates_parser/regtests/tests/0091_date_time/testme.tmplt"
# content [a44d534d239e26230f17848759b0cedeb5d1c05b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0092_ftp/ftp.tmplt"
# content [23078803d4612be5b539d8e287fa412358c713c7]
#
# add_file "harness/sources/templates_parser/regtests/tests/0092_ftp/test.out"
# content [c333e8f80332047c001968c0bc16a22ae2ec41be]
#
# add_file "harness/sources/templates_parser/regtests/tests/0092_ftp/test.py"
# content [70a8eddaa486696e905ca41ec3dc3fad91727fd5]
#
# add_file "harness/sources/templates_parser/regtests/tests/0093_test_templates_if/ftp.tmplt"
# content [23078803d4612be5b539d8e287fa412358c713c7]
#
# add_file "harness/sources/templates_parser/regtests/tests/0093_test_templates_if/test.out"
# content [fc485b726e66d08d1a209fea41de43531c8b429b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0093_test_templates_if/test.py"
# content [f8db52c21270fc4b7cc3d158f14efab56d410126]
#
# add_file "harness/sources/templates_parser/regtests/tests/0093_test_templates_if/test_templates_if.adb"
# content [55aa66834c2c3591640cb68f9672387b873fab5c]
#
# add_file "harness/sources/templates_parser/regtests/tests/0093_test_templates_if/test_templates_if.gpr"
# content [f5e45e745259535621e352148ffe20574aad823f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0094_regtst1/regtst1.adb"
# content [31da42fd4b8b7204cdbfadf36dffd26107d07eac]
#
# add_file "harness/sources/templates_parser/regtests/tests/0094_regtst1/regtst1.gpr"
# content [1dfc1e8044320f5903a31e812b130931cf8931b5]
#
# add_file "harness/sources/templates_parser/regtests/tests/0094_regtst1/regtst1.thtml"
# content [9b1d7cc851f3ab3db578e99cb66c92ff72aa54e9]
#
# add_file "harness/sources/templates_parser/regtests/tests/0094_regtst1/test.out"
# content [71fbcf22ff079a59e0e679604f07cdfb4c64f4b4]
#
# add_file "harness/sources/templates_parser/regtests/tests/0094_regtst1/test.py"
# content [f85f389a425ad9a6d548140ced786a81abd4c085]
#
# add_file "harness/sources/templates_parser/regtests/tests/0095_include/include.adb"
# content [0c06a1b4ff47793935aa20eee3d02987a90d9679]
#
# add_file "harness/sources/templates_parser/regtests/tests/0095_include/include.gpr"
# content [d759a75892263ca582a0e53adcbc13c3eaa839f9]
#
# add_file "harness/sources/templates_parser/regtests/tests/0095_include/include_1.html"
# content [7b8e92fbf5ed3dba276718b7c8f6192656684a86]
#
# add_file "harness/sources/templates_parser/regtests/tests/0095_include/include_2.html"
# content [30bf2b157acf4cb8f2c47d36e8baab294ecbef7f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0095_include/test.out"
# content [dd8135d3889bb1abd4985c94b7641166ebf2b0b6]
#
# add_file "harness/sources/templates_parser/regtests/tests/0095_include/test.py"
# content [e47e845be7fa965f800f8d69aac7f89c16f3ef32]
#
# add_file "harness/sources/templates_parser/regtests/tests/0096_tess/lp.tmplt"
# content [71ad0a1208cfca976bc409690bcb6b582c35e55b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0096_tess/tess.adb"
# content [94826a3eb942d4b8da23130fc8fb91b6d76e7c26]
#
# add_file "harness/sources/templates_parser/regtests/tests/0096_tess/tess.gpr"
# content [78308300b763634274273927ab6f119272005e59]
#
# add_file "harness/sources/templates_parser/regtests/tests/0096_tess/test.out"
# content [759daffa02ae7b905ec1fbbf322743f2968e77bb]
#
# add_file "harness/sources/templates_parser/regtests/tests/0096_tess/test.py"
# content [f3467722fc205fefc58109a635c99135b2d9cf46]
#
# add_file "harness/sources/templates_parser/regtests/tests/0097_ts_assoc/test.out"
# content [89daffb28221ba82ccd83ec69cce17bf60a6072c]
#
# add_file "harness/sources/templates_parser/regtests/tests/0097_ts_assoc/test.py"
# content [61ad88ea0892002e15a4a60c3aae9eba37989b92]
#
# add_file "harness/sources/templates_parser/regtests/tests/0097_ts_assoc/ts_assoc.adb"
# content [ce369b2ef6a7aaa19965fa32e90dda6271e4c7d7]
#
# add_file "harness/sources/templates_parser/regtests/tests/0097_ts_assoc/ts_assoc.gpr"
# content [33872a56c71d9b33c9cb3d15426db6e18ee6af72]
#
# add_file "harness/sources/templates_parser/regtests/tests/0097_ts_assoc/ts_assoc.tmplt"
# content [16aaeab83449729ad85def307f32ae777aa0ea4c]
#
# add_file "harness/sources/templates_parser/regtests/tests/0098_user_filter/test.out"
# content [b804b5598e7542d98124538cddeec69183758629]
#
# add_file "harness/sources/templates_parser/regtests/tests/0098_user_filter/test.py"
# content [5b1317219f32c03b7f999f6d9693ba0e9eb161f0]
#
# add_file "harness/sources/templates_parser/regtests/tests/0098_user_filter/user_filter.adb"
# content [4f0b0980eddb147f346473c058a1d2a2c6470acf]
#
# add_file "harness/sources/templates_parser/regtests/tests/0098_user_filter/user_filter.gpr"
# content [d0cbf821801ad16b25c6744326dcfac6767f0f24]
#
# add_file "harness/sources/templates_parser/regtests/tests/0098_user_filter/user_filter.tmplt"
# content [c35d5541e1f8b3db9c95c2e264b308d328350de5]
#
# add_file "harness/sources/templates_parser/regtests/tests/0099_nullset/nullset.adb"
# content [34ae42229f07b41aa8eac37acb9bc4fae765a64f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0099_nullset/nullset.gpr"
# content [aaf999aa4041ca12febec7aa39ba3b5ca3e827f1]
#
# add_file "harness/sources/templates_parser/regtests/tests/0099_nullset/nullset.tmplt"
# content [761b9847c592b18bebbb04024b69a4aaac69bd42]
#
# add_file "harness/sources/templates_parser/regtests/tests/0099_nullset/test.out"
# content [761b9847c592b18bebbb04024b69a4aaac69bd42]
#
# add_file "harness/sources/templates_parser/regtests/tests/0099_nullset/test.py"
# content [0135cd170e864d8360926697841e7b9c70f3a60a]
#
# add_file "harness/sources/templates_parser/regtests/tests/0100_include2/include2.adb"
# content [e78df7373258d89226469504e25e94c3e30214c9]
#
# add_file "harness/sources/templates_parser/regtests/tests/0100_include2/include2.gpr"
# content [2694c71e255af0134fc3c3f6b008133654d3bc0f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0100_include2/include2.tincl"
# content [c89ae67889917bc896f4ec3ac0fa303659e9a09a]
#
# add_file "harness/sources/templates_parser/regtests/tests/0100_include2/include2_main.tmplt"
# content [e871806cd8b562c485ff5430be663a05e33ea2f2]
#
# add_file "harness/sources/templates_parser/regtests/tests/0100_include2/include2_main2.tmplt"
# content [940ed080d0cb7e58a3388e31f1e37da5feb59c45]
#
# add_file "harness/sources/templates_parser/regtests/tests/0100_include2/test.out"
# content [5d1e612d6f48f35230da255966201bf0f6dab909]
#
# add_file "harness/sources/templates_parser/regtests/tests/0100_include2/test.py"
# content [243a637ef52198b5dd69e7bd18b578c7257d5a56]
#
# add_file "harness/sources/templates_parser/regtests/tests/0101_not_initialized/not_initialized.adb"
# content [14df08ee7c3fb14caccffcd010136f5d928b484c]
#
# add_file "harness/sources/templates_parser/regtests/tests/0101_not_initialized/not_initialized.gpr"
# content [f82249dca64f4ed7a4306d2e17317604589efb01]
#
# add_file "harness/sources/templates_parser/regtests/tests/0101_not_initialized/not_initialized.tmplt"
# content [451969f3bd7b4b9a773b024eb5be902fd468eb02]
#
# add_file "harness/sources/templates_parser/regtests/tests/0101_not_initialized/test.out"
# content [6052ccf08f9e35e5beaa2bfe6f6578e35f9c9de9]
#
# add_file "harness/sources/templates_parser/regtests/tests/0101_not_initialized/test.py"
# content [1ec5289fdb6f9d71446369529c44bb6b61f6ebe8]
#
# add_file "harness/sources/templates_parser/regtests/tests/0102_regtst4/regtst4.adb"
# content [0d8de3aa9528250e11c291668ccc98c0de1ef9ef]
#
# add_file "harness/sources/templates_parser/regtests/tests/0102_regtst4/regtst4.gpr"
# content [8463ec2e217275064b3dd67f0f590dcb84059dc3]
#
# add_file "harness/sources/templates_parser/regtests/tests/0102_regtst4/regtst4.tmplt"
# content [48a58ead56554da5683c0051e9a5780684efceb5]
#
# add_file "harness/sources/templates_parser/regtests/tests/0102_regtst4/test.out"
# content [127050b77a32e58f9c67e6117f6fd64b4e5ab7eb]
#
# add_file "harness/sources/templates_parser/regtests/tests/0102_regtst4/test.py"
# content [5027f156a7734a091b4814b720b99ed3e87d3ea8]
#
# add_file "harness/sources/templates_parser/regtests/tests/0103_dynamic/dynamic.adb"
# content [4f0b90d0deaaef3218954ba89b7452f40205bc30]
#
# add_file "harness/sources/templates_parser/regtests/tests/0103_dynamic/dynamic.gpr"
# content [83c952faf6748802ba31551044543a933292228a]
#
# add_file "harness/sources/templates_parser/regtests/tests/0103_dynamic/dynamic.tmplt"
# content [8038a00ad8f1aaa61cb8da05be1c86817b8f873f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0103_dynamic/test.out"
# content [e432a65e5ff06b0cfb06edba925c002fd97696fd]
#
# add_file "harness/sources/templates_parser/regtests/tests/0103_dynamic/test.py"
# content [99d1ad5f66985c08d98fc2241f3f2fcd063f93f0]
#
# add_file "harness/sources/templates_parser/regtests/tests/0103_dynamic/test_callback.adb"
# content [6d705b321cf2abb90240a2c119758fe0b61483e6]
#
# add_file "harness/sources/templates_parser/regtests/tests/0103_dynamic/test_callback.ads"
# content [bcbb9790a3fc2c349eee94375ddfe312bee1faf4]
#
# add_file "harness/sources/templates_parser/regtests/tests/0104_regtst2/error.tmplt"
# content [b1cc49e9c6e1663cf9287d99e15545e3bbe86da8]
#
# add_file "harness/sources/templates_parser/regtests/tests/0104_regtst2/regtst2.adb"
# content [b8153a8a502d64f76fe8e5af0184cc049a4f492c]
#
# add_file "harness/sources/templates_parser/regtests/tests/0104_regtst2/regtst2.gpr"
# content [c22fe16329568a9d319386f6f3347ae058f6d4a0]
#
# add_file "harness/sources/templates_parser/regtests/tests/0104_regtst2/test.out"
# content [09fb654c17cc05b11ef53bd35aa701f6d550e8e1]
#
# add_file "harness/sources/templates_parser/regtests/tests/0104_regtst2/test.py"
# content [7f286c55f4ae586160a07aa92b18ce290021f014]
#
# add_file "harness/sources/templates_parser/regtests/tests/0105_regtst3/aws_status.thtml"
# content [47fbfe545503fe71f9902cb6c470a146bd60df91]
#
# add_file "harness/sources/templates_parser/regtests/tests/0105_regtst3/regtst3.adb"
# content [13071e7b3ec26aca39e671d34d3215b3a9b0d218]
#
# add_file "harness/sources/templates_parser/regtests/tests/0105_regtst3/regtst3.gpr"
# content [7574f2a2f1bc82d960d6720a27b777907d24f80b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0105_regtst3/test.out"
# content [89a6e8b2e4552a254a2234843fcae5d15e562cd0]
#
# add_file "harness/sources/templates_parser/regtests/tests/0105_regtst3/test.py"
# content [9425c1036bd543453af08c6ea6a70788b1473ec2]
#
# add_file "harness/sources/templates_parser/regtests/tests/0106_test_cache/incl.tmplt"
# content [26614c84846ec4df79a43ce0da680d00260009d1]
#
# add_file "harness/sources/templates_parser/regtests/tests/0106_test_cache/test.out"
# content [43fa88e7184e8bd1fccb5a658bc30493318c14a4]
#
# add_file "harness/sources/templates_parser/regtests/tests/0106_test_cache/test.py"
# content [fb8858e2cfa427361711300a65acf870ecf74de7]
#
# add_file "harness/sources/templates_parser/regtests/tests/0106_test_cache/testme76.tmplt"
# content [6cb3d19fd34332d00f0cb0acce8f0a28309c0579]
#
# add_file "harness/sources/templates_parser/regtests/tests/0107_translations_demo/test.out"
# content [043929456008130a18466e6e6f4ca7d7d67fbfd0]
#
# add_file "harness/sources/templates_parser/regtests/tests/0107_translations_demo/test.py"
# content [62c73e3c1ea85f35df204602d6dc194b7c7b9145]
#
# add_file "harness/sources/templates_parser/regtests/tests/0107_translations_demo/translations_demo.adb"
# content [26bb4376690072eca4b1a9e021eb8c24716cae61]
#
# add_file "harness/sources/templates_parser/regtests/tests/0107_translations_demo/translations_demo.gpr"
# content [90eb1c2de311d518bcc29248160507d27f411f25]
#
# add_file "harness/sources/templates_parser/regtests/tests/0108_t2a/localtempl.tads"
# content [0a93a3acb641827b0a6aa67dea4a048399ae22fd]
#
# add_file "harness/sources/templates_parser/regtests/tests/0108_t2a/test.out"
# content [bee434d5f9d7a6f2b1057b127feaf1c3ec215b3f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0108_t2a/test.py"
# content [cb8a3e51cb418ed80a2fdb12c15c98cbc5f553a7]
#
# add_file "harness/sources/templates_parser/regtests/tests/0108_t2a/tpl1.tmpl"
# content [783ca174c1725685d65cca725603b331d7bc741a]
#
# add_file "harness/sources/templates_parser/regtests/tests/0108_t2a/tpl2.tmpl"
# content [deb1a479752d49ea914601c2c61d8bf12810d8c4]
#
# add_file "harness/sources/templates_parser/regtests/tests/0109_check_mem/check_mem.adb"
# content [756ceced7653d4a7827f3a6f65bdf39237df7698]
#
# add_file "harness/sources/templates_parser/regtests/tests/0109_check_mem/check_mem.gpr"
# content [e9dbc477f988b020641176ca71933f2a7d62bf0c]
#
# add_file "harness/sources/templates_parser/regtests/tests/0109_check_mem/check_mem.tmplt"
# content [2edaaffc95f2465dfad8fa1df79947222d6b8cc7]
#
# add_file "harness/sources/templates_parser/regtests/tests/0109_check_mem/include2.tincl"
# content [c89ae67889917bc896f4ec3ac0fa303659e9a09a]
#
# add_file "harness/sources/templates_parser/regtests/tests/0109_check_mem/test.opt"
# content [2d8b50394ef8f4e2e4fa562b3cc06042fa06824b]
#
# add_file "harness/sources/templates_parser/regtests/tests/0109_check_mem/test.out"
# content [09fb654c17cc05b11ef53bd35aa701f6d550e8e1]
#
# add_file "harness/sources/templates_parser/regtests/tests/0109_check_mem/test.py"
# content [4943fa5e86661214a506158633557304635ccc79]
#
# add_file "harness/sources/templates_parser/regtests/tests/0110_test_tag/test.out"
# content [00e5b1d377ef0a6a05b204d13f42bbccc7bad4aa]
#
# add_file "harness/sources/templates_parser/regtests/tests/0110_test_tag/test.py"
# content [e7bc839c9178ed293d6e91ec6b8fb3e9ba9690f1]
#
# add_file "harness/sources/templates_parser/regtests/tests/0110_test_tag/test_tag.adb"
# content [ac23edc14da51314a752ca0981de441a7cf87cf1]
#
# add_file "harness/sources/templates_parser/regtests/tests/0110_test_tag/test_tag.gpr"
# content [f77e2174c0179b8b73577fef35447b966e2aa023]
#
# add_file "harness/sources/templates_parser/regtests/tests/0111_speed/speed.adb"
# content [8cefc34ed12bbd25b75b3ba654bc3fdf06d66f2f]
#
# add_file "harness/sources/templates_parser/regtests/tests/0111_speed/speed.gpr"
# content [aee3bf0451eb8220acd865628c9cb064c2be5441]
#
# add_file "harness/sources/templates_parser/regtests/tests/0111_speed/speed.tmplt"
# content [7efd12a72936f359f309cc0a9aefc520c27c3577]
#
# add_file "harness/sources/templates_parser/regtests/tests/0111_speed/test.out"
# content [09fb654c17cc05b11ef53bd35aa701f6d550e8e1]
#
# add_file "harness/sources/templates_parser/regtests/tests/0111_speed/test.py"
# content [0d7111b40b52d890af1a3a13dfb634a494949b9e]
#
# add_file "harness/sources/templates_parser/regtests/tests/Z999_xfail/test.opt"
# content [cba1adea69ff042dddb422a19daaf9e8d3b4e40b]
#
# add_file "harness/sources/templates_parser/regtests/tests/Z999_xfail/test.out"
# content [da39a3ee5e6b4b0d3255bfef95601890afd80709]
#
# add_file "harness/sources/templates_parser/regtests/tests/Z999_xfail/test.py"
# content [8be80b9188a7c37e6b56e285bf7a5ef218426fa4]
#
# add_file "harness/sources/templates_parser/regtests/testsuite.py"
# content [7e3285710b0bed7b48db5e3ac641e194df2867b6]
#
# add_file "harness/sources/templates_parser/src/templates_parser-cached_files.adb"
# content [4129d3113045b8d41b827ce4793ca48ede8a42dc]
#
# add_file "harness/sources/templates_parser/src/templates_parser-configuration__standalone.ads"
# content [46230b1e4130e2c0b854ad8508e1f2b3c6c76f06]
#
# add_file "harness/sources/templates_parser/src/templates_parser-data.adb"
# content [60cf8561e1b82482d3cae4ec0bf2d1d17fd80218]
#
# add_file "harness/sources/templates_parser/src/templates_parser-debug.adb"
# content [e068c59c21b320d6e436678f3a5bc3d79090f881]
#
# add_file "harness/sources/templates_parser/src/templates_parser-debug.ads"
# content [44ba5786338a99a8f43c74f21ba9436241a6b7a8]
#
# add_file "harness/sources/templates_parser/src/templates_parser-definitions.adb"
# content [7040435f248b91f369b1fe887638cfca489aa5bd]
#
# add_file "harness/sources/templates_parser/src/templates_parser-expr.adb"
# content [36b96432b8cca9749bc8b851e3d2dbe2bd79cfbc]
#
# add_file "harness/sources/templates_parser/src/templates_parser-filter.adb"
# content [22998bf4cfdbd8e7ddd29aaaaadc75cd07ff7fc0]
#
# add_file "harness/sources/templates_parser/src/templates_parser-input.ads"
# content [7d4e8a60ca3e009537bcc0a364f7c766a2288a32]
#
# add_file "harness/sources/templates_parser/src/templates_parser-input__standalone.adb"
# content [5d80b12e9f76608d80b9a6e802efd7c75a9a8171]
#
# add_file "harness/sources/templates_parser/src/templates_parser-print_tree.adb"
# content [4c67ec3a512f6aec6ddb64713ab2098e2cfe337a]
#
# add_file "harness/sources/templates_parser/src/templates_parser-query.adb"
# content [21d0570d079618fbbc7f9ec35cf07642bbaf366d]
#
# add_file "harness/sources/templates_parser/src/templates_parser-query.ads"
# content [684e860b5d3f30f720095e28440e72d78fcce413]
#
# add_file "harness/sources/templates_parser/src/templates_parser-utils.adb"
# content [c2627241b8bdbd871abd9eb038b63b0ed8bce013]
#
# add_file "harness/sources/templates_parser/src/templates_parser-utils.ads"
# content [2574c70aed98b3758f4dd046cf08094c915ee6e6]
#
# add_file "harness/sources/templates_parser/src/templates_parser.adb"
# content [62cfe31b04f6fdeae07776a2530680cc240f6048]
#
# add_file "harness/sources/templates_parser/src/templates_parser.ads"
# content [40acfb0b5d8f2379e42643bde8ed2a7d433adb1d]
#
# add_file "harness/sources/templates_parser/src/templates_parser_tasking.ads"
# content [f29bf1225bb4a59d01f5d1c539681b75f81ab94f]
#
# add_file "harness/sources/templates_parser/src/templates_parser_tasking__no_tasking.adb"
# content [9abbced075aebdcca30becd18d1ed9fdbec1b37e]
#
# add_file "harness/sources/templates_parser/src/templates_parser_tasking__standard_tasking.adb"
# content [44b13800386ad342963a0fb8828cf15b11d8311f]
#
# add_file "harness/sources/templates_parser/templates_parser.gpr"
# content [5ebcd3f7a8e4e32ad02259ee5581c4fa6317dc1b]
#
# add_file "harness/sources/templates_parser/tools/all_urls.thtml"
# content [749d536e8ecc139136256653176ed62a2de5c8fb]
#
# add_file "harness/sources/templates_parser/tools/templates.tads"
# content [0a93a3acb641827b0a6aa67dea4a048399ae22fd]
#
# add_file "harness/sources/templates_parser/tools/templates2ada.adb"
# content [4c3ebe6f869584050c9e218a289456694e3664cf]
#
# add_file "harness/sources/templates_parser/tools/templatespp.adb"
# content [453cd2d6f9ea39c70bb9b4137bc28cc96fa097c7]
#
# add_file "harness/sources/templates_parser/tools/tools.gpr"
# content [404b146c261fa373a3db9b1952e315c0aaf5da7d]
#
# add_file "harness/sources/templates_parser/tp_shared.gpr"
# content [8b461baa6d86ace5d0d4e2d38d8d3bdb472797bb]
#
# add_file "harness/sources/templates_parser/xsrc/templates_parser-xml.adb"
# content [2e9426a63bf127704baa3a733c00198ac0a9dbde]
#
# add_file "harness/sources/templates_parser/xsrc/templates_parser-xml.ads"
# content [1051885701a491f54351173448efd17569470bae]
#
# set "harness/sources/templates_parser/docs/gentexifile"
# attr "mtn:execute"
# value "true"
#
# set "harness/sources/templates_parser/regtests/run-test"
# attr "mtn:execute"
# value "true"
#
# set "harness/sources/templates_parser/regtests/testsuite.py"
# attr "mtn:execute"
# value "true"
#
============================================================
--- harness/sources/templates_parser/.gitignore 5c2a22d5546f4409d3eee542b66e91d6f7c29d43
+++ harness/sources/templates_parser/.gitignore 5c2a22d5546f4409d3eee542b66e91d6f7c29d43
@@ -0,0 +1,30 @@
+*~
+.build
+config/setup/*.ali
+config/setup/*.o
+config/tp_config.gpr
+docs/ada.sed
+docs/demo*
+docs/genout
+docs/if_inline*
+docs/matrix*
+docs/table*
+docs/table_if*
+docs/table_inline*
+docs/table_section*
+docs/templates_parser-debug.ads.texi
+docs/templates_parser-utils.ads.texi
+docs/templates_parser-xml.ads.texi
+docs/templates_parser.ads.texi
+docs/templates_parser.dvi
+docs/templates_parser.html
+docs/templates_parser.info
+docs/templates_parser.pdf
+docs/templates_parser.txt
+docs/user.tmplt.texi
+docs/user1*
+docs/user2*
+makefile.setup
+tp_xmlada.gpr
+regtests/out
+regtests/*.pyc
============================================================
--- harness/sources/templates_parser/README c486950e98b01035cb2bb3d01782df50c4ef2718
+++ harness/sources/templates_parser/README c486950e98b01035cb2bb3d01782df50c4ef2718
@@ -0,0 +1,47 @@
+
+Templates_Parser
+----------------
+
+Some make variables can be adjusted to change the default setup:
+
+ DEFAULT_LIBRARY_TYPE=[static|relocatable]
+ (default is static)
+
+ prefix=<install directory>
+ (default to compiler root directory)
+
+ ENABLE_SHARED=[true|false]
+ (default yes on platforms supporting shared libraries)
+
+ DEBUG=[true|false]
+ (default false)
+
+ CJOBS=N
+ Number of parallel compilations
+ (default 2)
+
+To build both the static and shared version (if supported) using the
+default setup:
+
+ $ make
+
+To setup the default library as relocatable and change the installation
+directory:
+
+ $ make DEFAULT_LIBRARY_TYPE=relocatable prefix=/opt/templates_parser setup
+ $ make
+
+To install:
+
+ $ make install
+
+Note that the installation will be done into your current GNAT root
+directory by default. It is possible to change this default by setting the
+prefix make variable, for example:
+
+ $ make prefix=/opt/templates_parser install
+
+or using the setup step:
+
+ $ make prefix=/opt/templates_parser setup
+ $ make && make install
============================================================
--- harness/sources/templates_parser/config/setup/foo.ads 4964231ab897daee41d88d7ad53766bc4b92febc
+++ harness/sources/templates_parser/config/setup/foo.ads 4964231ab897daee41d88d7ad53766bc4b92febc
@@ -0,0 +1,2 @@
+package Foo is
+end Foo;
============================================================
--- harness/sources/templates_parser/config/setup/test_shared.gpr c1707ea534639e8a8860adc3f57d36311f4b5c11
+++ harness/sources/templates_parser/config/setup/test_shared.gpr c1707ea534639e8a8860adc3f57d36311f4b5c11
@@ -0,0 +1,6 @@
+project Test_Shared is
+ for Source_Dirs use (".");
+ for Library_Dir use "lib";
+ for Library_Name use "lib";
+ for Library_Kind use "relocatable";
+end Test_Shared;
============================================================
--- harness/sources/templates_parser/config/setup/test_xmlada.gpr c934fa0d10421104972058090ca38a55029e1b9c
+++ harness/sources/templates_parser/config/setup/test_xmlada.gpr c934fa0d10421104972058090ca38a55029e1b9c
@@ -0,0 +1,32 @@
+------------------------------------------------------------------------------
+-- Ada Web Server --
+-- --
+-- Copyright (C) 2010, AdaCore --
+-- --
+-- This library is free software; you can redistribute it and/or modify --
+-- it under the terms of the GNU General Public License as published by --
+-- the Free Software Foundation; either version 2 of the License, or (at --
+-- your option) any later version. --
+-- --
+-- This library is distributed in the hope that it will be useful, but --
+-- WITHOUT ANY WARRANTY; without even the implied warranty of --
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
+-- General Public License for more details. --
+-- --
+-- You should have received a copy of the GNU General Public License --
+-- along with this library; if not, write to the Free Software Foundation, --
+-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+------------------------------------------------------------------------------
+
+with "xmlada";
+
+project Test_XMLAda is
+ for Source_Dirs use ();
+end Test_XMLAda;
============================================================
--- harness/sources/templates_parser/config/templates_parser.gpr e22a7bcaafc76417db0be8a4e31ed3b00a1edbcb
+++ harness/sources/templates_parser/config/templates_parser.gpr e22a7bcaafc76417db0be8a4e31ed3b00a1edbcb
@@ -0,0 +1,45 @@
+------------------------------------------------------------------------------
+-- Templates Parser --
+-- --
+-- Copyright (C) 2008 --
+-- AdaCore --
+-- --
+-- This library is free software; you can redistribute it and/or modify --
+-- it under the terms of the GNU General Public License as published by --
+-- the Free Software Foundation; either version 2 of the License, or (at --
+-- your option) any later version. --
+-- --
+-- This library is distributed in the hope that it will be useful, but --
+-- WITHOUT ANY WARRANTY; without even the implied warranty of --
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
+-- General Public License for more details. --
+-- --
+-- You should have received a copy of the GNU General Public License --
+-- along with this library; if not, write to the Free Software Foundation, --
+-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+------------------------------------------------------------------------------
+
+with "templates_parser/tp_shared";
+with "templates_parser/tp_config";
+
+project Templates_Parser is
+
+ for Source_Dirs use ("../../include/templates_parser");
+
+ for Library_Dir use "../../lib/templates_parser/"
+ & TP_Shared.Library_Type;
+
+ for Library_Name use "templates_parser";
+ for Library_Kind use TP_Shared.Library_Type;
+ for Externally_Built use "true";
+
+ package Naming renames TP_Shared.Naming;
+
+end Templates_Parser;
============================================================
--- harness/sources/templates_parser/config/tp_shared.gpr a4561671caa6dbece6e2a2a63bf6b04d124d204f
+++ harness/sources/templates_parser/config/tp_shared.gpr a4561671caa6dbece6e2a2a63bf6b04d124d204f
@@ -0,0 +1,64 @@
+------------------------------------------------------------------------------
+-- Templates Parser --
+-- --
+-- Copyright (C) 2008 --
+-- AdaCore --
+-- --
+-- This library is free software; you can redistribute it and/or modify --
+-- it under the terms of the GNU General Public License as published by --
+-- the Free Software Foundation; either version 2 of the License, or (at --
+-- your option) any later version. --
+-- --
+-- This library is distributed in the hope that it will be useful, but --
+-- WITHOUT ANY WARRANTY; without even the implied warranty of --
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
+-- General Public License for more details. --
+-- --
+-- You should have received a copy of the GNU General Public License --
+-- along with this library; if not, write to the Free Software Foundation, --
+-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+------------------------------------------------------------------------------
+
+with "tp_config";
+
+project TP_Shared is
+
+ for Source_Dirs use ();
+
+ type Tasking_Type is ("No_Tasking", "Standard_Tasking");
+ Tasking : Tasking_Type := TP_Config.Tasking;
+
+ type Library_Kind is ("relocatable", "static");
+ Library_Type : Library_Kind :=
+ external ("LIBRARY_TYPE", TP_Config.Default_Library_Type);
+
+ ------------
+ -- Naming --
+ ------------
+
+ package Naming is
+
+ for Specification ("Templates_Parser.Configuration")
+ use "templates_parser-configuration__standalone.ads";
+ for Implementation ("Templates_Parser.Input")
+ use "templates_parser-input__standalone.adb";
+
+ case Tasking is
+ when "No_Tasking" =>
+ for Implementation ("Templates_Parser_Tasking")
+ use "templates_parser_tasking__no_tasking.adb";
+ when "Standard_Tasking" =>
+ for Implementation ("Templates_Parser_Tasking")
+ use "templates_parser_tasking__standard_tasking.adb";
+ end case;
+
+ end Naming;
+
+end TP_Shared;
============================================================
--- harness/sources/templates_parser/config/tp_xmlada_dummy.gpr 5a22753abe8cf9175c4faa936971cb8f06fb2151
+++ harness/sources/templates_parser/config/tp_xmlada_dummy.gpr 5a22753abe8cf9175c4faa936971cb8f06fb2151
@@ -0,0 +1,31 @@
+------------------------------------------------------------------------------
+-- Templates Parser --
+-- --
+-- Copyright (C) 2007 --
+-- AdaCore --
+-- --
+-- This library is free software; you can redistribute it and/or modify --
+-- it under the terms of the GNU General Public License as published by --
+-- the Free Software Foundation; either version 2 of the License, or (at --
+-- your option) any later version. --
+-- --
+-- This library is distributed in the hope that it will be useful, but --
+-- WITHOUT ANY WARRANTY; without even the implied warranty of --
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
+-- General Public License for more details. --
+-- --
+-- You should have received a copy of the GNU General Public License --
+-- along with this library; if not, write to the Free Software Foundation, --
+-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+------------------------------------------------------------------------------
+
+project TP_XMLAda is
+ for Source_Dirs use ();
+end TP_XMLAda;
============================================================
--- harness/sources/templates_parser/config/tp_xmlada_installed.gpr 35ae0ff29a64a34403fa10410e1eca7dafd48279
+++ harness/sources/templates_parser/config/tp_xmlada_installed.gpr 35ae0ff29a64a34403fa10410e1eca7dafd48279
@@ -0,0 +1,33 @@
+------------------------------------------------------------------------------
+-- Templates Parser --
+-- --
+-- Copyright (C) 2007 --
+-- AdaCore --
+-- --
+-- This library is free software; you can redistribute it and/or modify --
+-- it under the terms of the GNU General Public License as published by --
+-- the Free Software Foundation; either version 2 of the License, or (at --
+-- your option) any later version. --
+-- --
+-- This library is distributed in the hope that it will be useful, but --
+-- WITHOUT ANY WARRANTY; without even the implied warranty of --
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
+-- General Public License for more details. --
+-- --
+-- You should have received a copy of the GNU General Public License --
+-- along with this library; if not, write to the Free Software Foundation, --
+-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+------------------------------------------------------------------------------
+
+with "xmlada";
+
+project TP_XMLAda is
+ for Source_Dirs use ();
+end TP_XMLAda;
============================================================
--- harness/sources/templates_parser/docs/.cvsignore 6a1752f47d57e9ed32e758cf53d6d0939834a23e
+++ harness/sources/templates_parser/docs/.cvsignore 6a1752f47d57e9ed32e758cf53d6d0939834a23e
@@ -0,0 +1,41 @@
+ada.sed
+demo.adb
+demo.adb.res
+demo.adb.texi
+demo.tmplt.texi
+if_inline.adb
+if_inline.adb.res
+if_inline.adb.texi
+if_inline.tmplt.texi
+matrix.adb
+matrix.adb.res
+matrix.adb.texi
+matrix.tmplt.texi
+table.adb
+table.adb.res
+table.adb.texi
+table.tmplt.texi
+table_block.tmplt.texi
+table_if.adb
+table_if.adb.res
+table_if.adb.texi
+table_if.tmplt.texi
+table_inline.adb
+table_inline.adb.res
+table_inline.adb.texi
+table_inline.tmplt.texi
+table_section.adb
+table_section.adb.res
+table_section.adb.texi
+table_section.tmplt.texi
+templates_parser-debug.ads.texi
+templates_parser-utils.ads.texi
+templates_parser-xml.ads.texi
+templates_parser.ads.texi
+user.tmplt.texi
+user1.adb
+user1.adb.res
+user1.adb.texi
+user2.adb
+user2.adb.res
+user2.adb.texi
============================================================
--- harness/sources/templates_parser/docs/all_sources.ada 5cdf636c3c907f10d4eca3e43f472616e9699857
+++ harness/sources/templates_parser/docs/all_sources.ada 5cdf636c3c907f10d4eca3e43f472616e9699857
@@ -0,0 +1,190 @@
+with Ada.Text_IO;
+with Templates_Parser;
+
+procedure Demo is
+ Translations : constant Templates_Parser.Translate_Table :=
+ (1 => Templates_Parser.Assoc ("NAME", "Ada"));
+begin
+ Ada.Text_IO.Put_Line
+ (Templates_Parser.Parse ("demo.tmplt", Translations));
+end Demo;
+
+with Ada.Text_IO;
+with Templates_Parser;
+
+procedure User1 is
+
+ Translations : constant Templates_Parser.Translate_Table
+ := (1 => Templates_Parser.Assoc ("USER", True));
+
+begin
+ Ada.Text_IO.Put_Line
+ (Templates_Parser.Parse ("user.tmplt", Translations));
+end User1;
+
+with Ada.Text_IO;
+with Templates_Parser;
+
+procedure User2 is
+
+ Translations : constant Templates_Parser.Translate_Table
+ := (1 => Templates_Parser.Assoc ("USER", False));
+
+begin
+ Ada.Text_IO.Put_Line
+ (Templates_Parser.Parse ("user.tmplt", Translations));
+end User2;
+
+with Ada.Text_IO;
+with Templates_Parser;
+
+procedure Table is
+
+ use type Templates_Parser.Vector_Tag;
+
+ Names : constant Templates_Parser.Vector_Tag
+ := +"Bob" & "Bill" & "Toto";
+ Ages : constant Templates_Parser.Vector_Tag
+ := +"10" & "30" & "5";
+
+ Translations : constant Templates_Parser.Translate_Table
+ := (1 => Templates_Parser.Assoc ("NAME", Names),
+ 2 => Templates_Parser.Assoc ("AGE", Ages));
+
+begin
+ Ada.Text_IO.Put_Line
+ (Templates_Parser.Parse ("table.tmplt", Translations));
+end Table;
+
+with Ada.Text_IO;
+with Templates_Parser;
+
+procedure Table_Inline is
+
+ use type Templates_Parser.Vector_Tag;
+
+ Colors : constant Templates_Parser.Vector_Tag
+ := +"Red" & "Green" & "Blue";
+
+ Translations : constant Templates_Parser.Translate_Table
+ := (1 => Templates_Parser.Assoc ("COLORS", Colors));
+
+begin
+ Ada.Text_IO.Put_Line
+ (Templates_Parser.Parse ("table_inline.tmplt", Translations));
+end Table_Inline;
+
+with Ada.Text_IO;
+with Templates_Parser;
+
+procedure If_Inline is
+
+ use type Templates_Parser.Vector_Tag;
+
+ Translations : constant Templates_Parser.Translate_Table
+ := (1 => Templates_Parser.Assoc ("COND", True));
+
+begin
+ Ada.Text_IO.Put_Line
+ (Templates_Parser.Parse ("if_inline.tmplt", Translations));
+end If_Inline;
+
+with Ada.Text_IO;
+with Templates_Parser;
+
+procedure Table_Section is
+
+ use type Templates_Parser.Vector_Tag;
+
+ Devices : constant Templates_Parser.Vector_Tag
+ := +"Screen" & "Keyboard" & "Mouse" & "Hard Drive";
+ Prices : constant Templates_Parser.Vector_Tag
+ := +"$500" & "$20" & "$15" & "$140";
+
+ Translations : constant Templates_Parser.Translate_Table
+ := (1 => Templates_Parser.Assoc ("DEVICES", Devices),
+ 2 => Templates_Parser.Assoc ("PRICES", Prices));
+
+begin
+ Ada.Text_IO.Put_Line
+ (Templates_Parser.Parse ("table_section.tmplt", Translations));
+end Table_Section;
+
+with Ada.Text_IO;
+with Templates_Parser;
+
+procedure Table_If is
+
+ use type Templates_Parser.Vector_Tag;
+
+ function In_Stock (Device : in String) return Boolean;
+ -- Complex function. Does a SQL access to the right database to know if
+ -- the Device is available and thus can be ordered.
+
+ procedure Add (Device, Price : in String);
+ -- Add the device into the list to be displayed
+
+ Devices : Templates_Parser.Tag;
+ Prices : Templates_Parser.Tag;
+ Available : Templates_Parser.Tag;
+
+ ---------
+ -- Add --
+ ---------
+
+ procedure Add (Device, Price : in String) is
+ begin
+ Devices := Devices & Device;
+ Prices := Prices & Price;
+ Available := Available & In_Stock (Device);
+ end Add;
+
+ --------------
+ -- In_Stock --
+ --------------
+
+ function In_Stock (Device : in String) return Boolean is
+ begin
+ if Device = "Keyboard" then
+ return True;
+ else
+ return False;
+ end if;
+ end In_Stock;
+
+ Translations : Templates_Parser.Translate_Table (1 .. 3);
+
+begin
+ Add ("Screen", "$500");
+ Add ("Keyboard", "$15");
+ Add ("Mouse", "$15");
+ Add ("Hard Drive", "$140");
+
+ Translations := (Templates_Parser.Assoc ("DEVICES", Devices),
+ Templates_Parser.Assoc ("PRICES", Prices),
+ Templates_Parser.Assoc ("AVAILABLE", Available));
+
+ Ada.Text_IO.Put_Line
+ (Templates_Parser.Parse ("table_if.tmplt", Translations));
+end Table_If;
+
+with Ada.Text_IO;
+with Templates_Parser;
+
+procedure Matrix is
+
+ package TP renames Templates_Parser;
+
+ use type TP.Tag;
+
+ V1 : constant TP.Vector_Tag := +"A1.1" & "A1.2";
+ V2 : constant TP.Vector_Tag := +"A2.1" & "A2.2";
+ V3 : constant TP.Vector_Tag := +"A3.1" & "A3.2";
+
+ M : constant TP.Matrix_Tag := +V1 & V2 & V3;
+
+begin
+ Ada.Text_IO.Put_Line
+ (TP.Parse ("matrix.tmplt",
+ TP.Translate_Table'(1 => TP.Assoc ("MAT", M))));
+end Matrix;
============================================================
--- harness/sources/templates_parser/docs/demo.tmplt 097b5aa109c40a87a4ba554d4e98ba71d7560966
+++ harness/sources/templates_parser/docs/demo.tmplt 097b5aa109c40a87a4ba554d4e98ba71d7560966
@@ -0,0 +1 @@
+<P>Hello @_NAME_@
============================================================
--- harness/sources/templates_parser/docs/docs.gpr 47ea805c7feb0be04480b9e43ad804db17acddaf
+++ harness/sources/templates_parser/docs/docs.gpr 47ea805c7feb0be04480b9e43ad804db17acddaf
@@ -0,0 +1,44 @@
+------------------------------------------------------------------------------
+-- Templates Parser --
+-- --
+-- Copyright (C) 2005-2009, AdaCore --
+-- --
+-- This library is free software; you can redistribute it and/or modify --
+-- it under the terms of the GNU General Public License as published by --
+-- the Free Software Foundation; either version 2 of the License, or (at --
+-- your option) any later version. --
+-- --
+-- This library is distributed in the hope that it will be useful, but --
+-- WITHOUT ANY WARRANTY; without even the implied warranty of --
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
+-- General Public License for more details. --
+-- --
+-- You should have received a copy of the GNU General Public License --
+-- along with this library; if not, write to the Free Software Foundation, --
+-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+------------------------------------------------------------------------------
+
+with "../templates_parser";
+with "../tp_shared.gpr";
+
+project Docs is
+
+ for Languages use ("Ada", "Project file");
+
+ for Object_Dir use "../" & TP_Shared'Exec_Dir & "/dobj";
+ for Exec_Dir use ".";
+
+ for Main use ("build.adb");
+
+ package Compiler is
+ for Default_Switches ("Ada") use ("-gnat05");
+ end Compiler;
+
+end Docs;
============================================================
--- harness/sources/templates_parser/docs/gentexifile b3260bd0af56f7bf6aa9a212311cfa62a30965e8
+++ harness/sources/templates_parser/docs/gentexifile b3260bd0af56f7bf6aa9a212311cfa62a30965e8
@@ -0,0 +1,33 @@
+#!/bin/sh
+if [ $# = 0 ]; then
+ echo "Usage: $0 <file to translate>"
+ exit 0
+fi
+
+SOURCE=$1
+TARGET=`basename ${SOURCE}`.texi
+TMPTAR=${TARGET}.tmp
+
+awk=`type gawk 2>/dev/null`
+if [ x"$awk" = x ]; then
+ awk="awk"
+else
+ awk="gawk"
+fi
+
+$awk 'BEGIN{out=1}$1=="end"&&substr($0,1,1)=="e"{out=1}out==1{print}$1=="private"&&$2!="with"&&out==1{out=0; print " -- implementation removed"}' ${SOURCE} > genout
+
+rm -f ${TMPTAR}
+
+if [ $# = 1 ]; then
+echo "@TPEXP{" >>${TMPTAR}
+sed -f ada.sed genout >>${TMPTAR}
+echo "}" >>${TMPTAR}
+else
+echo "@smallexample" >>${TMPTAR}
+sed -f ada.sed genout >>${TMPTAR}
+echo "@end smallexample" >>${TMPTAR}
+fi
+
+cat ${TMPTAR} | tr -d '\r' > ${TARGET}
+rm ${TMPTAR}
============================================================
--- harness/sources/templates_parser/docs/if_inline.tmplt 87abbc67d971bb42ddfe8cfece527d2a2f0571a4
+++ harness/sources/templates_parser/docs/if_inline.tmplt 87abbc67d971bb42ddfe8cfece527d2a2f0571a4
@@ -0,0 +1,9 @@
+@@INLINE@@
+A
+@@IF@@ @_COND_@
+ big
+@@ELSE@@
+ small
+@@END_IF@@
+car.
+@@END_INLINE@@
============================================================
--- harness/sources/templates_parser/docs/makefile 3751b5d96e05927018f84456701915d4aa967e86
+++ harness/sources/templates_parser/docs/makefile 3751b5d96e05927018f84456701915d4aa967e86
@@ -0,0 +1,169 @@
+############################################################################
+# Templates_Parser #
+# #
+# Copyright (C) 2003-2010, AdaCore #
+# #
+# This library is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or (at #
+# your option) any later version. #
+# #
+# This library is distributed in the hope that it will be useful, but #
+# WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU #
+# General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this library; if not, write to the Free Software Foundation, #
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #
+# #
+# As a special exception, if other files instantiate generics from this #
+# unit, or you link this unit with other files to produce an executable, #
+# this unit does not by itself cause the resulting executable to be #
+# covered by the GNU General Public License. This exception does not #
+# however invalidate any other reasons why the executable file might be #
+# covered by the GNU Public License. #
+############################################################################
+
+.SILENT: ada.sed doc clean
+
+MAKEINFO = $(shell which makeinfo 2> /dev/null)
+TEXI2DVI = $(shell which texi2dvi 2> /dev/null)
+PDFTEX = $(shell which pdftex 2> /dev/null)
+
+TMPLT = demo.tmplt user.tmplt table.tmplt table_section.tmplt \
+ table_if.tmplt matrix.tmplt table_block.tmplt table_inline.tmplt \
+ if_inline.tmplt
+
+TMPLTTEXI = $(TMPLT:=.texi)
+
+ADBFILES = demo.adb user1.adb user2.adb table.adb table_section.adb \
+ table_if.adb matrix.adb table_inline.adb if_inline.adb
+
+EXEFILES = $(ADBFILES:.adb=)
+ADAFILES = $(ADBFILES)
+ALIFILES = $(ADSFILES:.ads=.ali) $(ADBFILES:.adb=.ali)
+RESFILES = $(ADBFILES:=.res)
+TEXIFILES = $(ADBFILES:=.texi) $(ADSFILES:=.texi) $(ADAFILES_NORUN:=.texi) \
+ $(TMPLTTEXI)
+
+GFLAGS = -I../src -I../include
+
+DOCS = templates_parser.info templates_parser.html \
+ templates_parser.txt templates_parser.pdf
+
+ADA_KW = use package is in out exception function with type constant \
+ private of return range procedure begin end array record \
+ else if then pragma access new case when subtype
+
+APIFILES = ../src/templates_parser.ads.texi \
+ ../src/templates_parser-debug.ads.texi \
+ ../src/templates_parser-utils.ads.texi \
+ ../xsrc/templates_parser-xml.ads.texi
+
+ALLDEPS = $(ADBFILES) $(ADSFILES) $(EXEFILES) $(TEXIFILES) $(TMPLTTEXI) \
+ $(RESFILES) $(APIFILES)
+
+doc: $(ALLDEPS) $(DOCS)
+
+%.pdf: %.texi $(ADBFILES)
+ifneq (${TEXI2DVI},)
+ifneq (${PDFTEX},)
+ echo Building $@
+ ${TEXI2DVI} -p --expand --clean --quiet $<
+else
+ @echo "-----------------------------------------------"
+ @echo "pdftex not fond, cannot build PDF documentation"
+ @echo "-----------------------------------------------"
+endif
+else
+ @echo "--------------------------------------------------"
+ @echo "texi2dvi not found, cannot build PDF documentation"
+ @echo "--------------------------------------------------"
+endif
+
+%.info: %.texi $(ADBFILES)
+ifneq (${MAKEINFO},)
+ echo Building $@
+ -${MAKEINFO} $<
+else
+ @echo "---------------------------------------------------"
+ @echo "makeinfo not found, cannot build INFO documentation"
+ @echo "---------------------------------------------------"
+endif
+
+%.html: %.texi $(ADBFILES)
+ifneq (${MAKEINFO},)
+ echo Building $@
+ -${MAKEINFO} --html --no-split --css-include=tp.css --ifinfo $<
+else
+ @echo "---------------------------------------------------"
+ @echo "makeinfo not found, cannot build HTML documentation"
+ @echo "---------------------------------------------------"
+endif
+
+%.txt: %.texi $(ADBFILES)
+ifneq (${MAKEINFO},)
+ echo Building $@
+ -${MAKEINFO} --plaintext --no-headers $< --output $@
+else
+ @echo "---------------------------------------------------"
+ @echo "makeinfo not found, cannot build TEXT documentation"
+ @echo "---------------------------------------------------"
+endif
+
+$(ADBFILES) $(ADSFILES): all_sources.ada
+ $(GNAT) chop -w all_sources.ada
+
+../tp_xmlada.gpr:
+ cp ../config/tp_xmlada_dummy.gpr ../tp_xmlada.gpr
+
+$(EXEFILES): ../tp_xmlada.gpr $(ADBFILES) $(ADSFILES)
+ $(GNAT) make -p -q -XLIBRARY_TYPE=static -XPRJ_BUILD=$(PRJ_BUILD) \
+ -XTP_XMLADA=Disabled -Pdocs $(EXEFILES)
+
+%.adb.res: %.adb
+ echo "@TPEXP{" > $<.res
+ ./`basename $@ .adb.res` >> $<.res
+ echo "}" >> $<.res
+
+%.adb.html: %.adb
+ `basename $@ .adb.html` >> $<.html
+
+%.ads.texi: %.ads ada.sed gentexifile
+ ./gentexifile $< NOGROUP
+
+%.adb.texi: %.adb %.adb.res ada.sed gentexifile
+ ./gentexifile $<
+
+%.tmplt.texi: %.tmplt ada.sed gentexifile
+ ./gentexifile $<
+
+ada.sed: makefile
+ echo "s/\([^@_]\)@\([^@_]\)/\1@@\2/" > ada.sed
+ echo "s/-- \(.*\)$$/-- @i{\1}/" >> ada.sed
+ echo "/--/!s/\([^-][^-][^\"]*\)\"\([^\"]*\)\"/\1\"@i{\2}\"/g" \
+ >> ada.sed
+ echo "s/@@/@@@@/g" >> ada.sed
+ echo "s/@_/@@_/g" >> ada.sed
+ echo "s/_@/_@@/g" >> ada.sed
+ for kw in $(ADA_KW); do \
+ echo "s/^\([^-]* \)$$kw/\1@b{$$kw}/g" >> ada.sed; \
+ echo "s/^\([^-]* \)$$kw/\1@b{$$kw}/g" >> ada.sed; \
+ echo "s/^\( *\)$$kw /\1@b{$$kw} /g" >> ada.sed; \
+ echo "s/^$$kw$$/@b{$$kw}/g" >> ada.sed; \
+ done
+
+force:
+
+clean:
+ifeq ($(AWS),)
+ -$(GNAT) clean -q -XLIBRARY_TYPE=static -XPRJ_BUILD=$(PRJ_BUILD) \
+ -Pdocs $(EXEFILES)
+endif
+ -rm -f $(EXEFILES) $(ADAFILES) $(TEXIFILES) *.res *.o *.ali genout \
+ *.aux *.cp* *.fn *.ky *.pg *.toc *.tp *.vr *.dvi *.log \
+ *.exe templates_parser*.ads.texi ada.sed \
+ templates_parser.tar.gz
+ -rm -f templates_parser.html templates_parser.pdf \
+ templates_parser.info* templates_parser.txt
============================================================
--- harness/sources/templates_parser/docs/matrix.tmplt de6da38d498d9f7dbc32ee564996ecccb590c3c2
+++ harness/sources/templates_parser/docs/matrix.tmplt de6da38d498d9f7dbc32ee564996ecccb590c3c2
@@ -0,0 +1,26 @@
+A matrix inside a table of level 2:
+
+@@TABLE@@
+<tr>
+@@TABLE@@
+<td>
+@_MAT_@
+</td>
+@@END_TABLE@@
+</tr>
+
+@@END_TABLE@@
+
+The same matrix inside a single table:
+
+@@TABLE@@
+<tr>
+<td>
+@_MAT_@
+</tr>
+
+@@END_TABLE@@
+
+The same matrix outside a table:
+
+@_MAT_@
============================================================
--- harness/sources/templates_parser/docs/table.tmplt 1797bbf9d3a393d909986c01060a03fde73a4e64
+++ harness/sources/templates_parser/docs/table.tmplt 1797bbf9d3a393d909986c01060a03fde73a4e64
@@ -0,0 +1,9 @@
+<P>Here is the ages of some peoples:
+
+<TABLE>
+@@TABLE@@
+ <TR>
+ <TD>@_NAME_@
+ <TD>@_AGE_@
+@@END_TABLE@@
+</TABLE>
============================================================
--- harness/sources/templates_parser/docs/table_block.tmplt bf1fbab83b4f9361c08ac6e9fccbaa0619016e54
+++ harness/sources/templates_parser/docs/table_block.tmplt bf1fbab83b4f9361c08ac6e9fccbaa0619016e54
@@ -0,0 +1,15 @@
+<P>Here are some available computer devices:
+
+<TABLE>
+@@TABLE@@
+ <TR BGCOLOR=
+ @@BEGIN@@
+ "#FF0000"
+ @@SECTION@@
+ "#000000F"
+ @@END@@
+ >
+ <TD>@_DEVICES_@
+ <TD>@_PRICES_@
+@@END_TABLE@@
+</TABLE>
============================================================
--- harness/sources/templates_parser/docs/table_if.tmplt c7545d6ff39bce6b9ab14af10b497a08f16261c3
+++ harness/sources/templates_parser/docs/table_if.tmplt c7545d6ff39bce6b9ab14af10b497a08f16261c3
@@ -0,0 +1,21 @@
+Hello here is a list of devices:
+
+<table>
+<tr>
+<th>Device Name
+<th>Price
+<th>Order
+
+@@TABLE@@
+<tr>
+<td>@_DEVICES_@
+<td>@_PRICES_@
+
+<td>
+@@IF@@ @_AVAILABLE_@
+<a href="/order?DEVICE=@_DEVICES_@">Order
+@@ELSE@@
+Sorry, not available
+@@END_IF@@
+
+@@END_TABLE@@
============================================================
--- harness/sources/templates_parser/docs/table_inline.tmplt 7d4180f1090392298843a8e23f4e36f4d8b4190a
+++ harness/sources/templates_parser/docs/table_inline.tmplt 7d4180f1090392298843a8e23f4e36f4d8b4190a
@@ -0,0 +1,5 @@
+@@INLINE(colors=")(, )(")@@
+ @@TABLE@@
+ @_COLORS_@
+ @@END_TABLE@@
+@@END_INLINE@@
============================================================
--- harness/sources/templates_parser/docs/table_section.tmplt 5fd263c1c23e2a67d9980e4d541cb213f8e3d167
+++ harness/sources/templates_parser/docs/table_section.tmplt 5fd263c1c23e2a67d9980e4d541cb213f8e3d167
@@ -0,0 +1,26 @@
+<P>Here are some available computer devices:
+
+<TABLE>
+@@TABLE@@
+ <TR BGCOLOR=#FF0000>
+ <TD>@_DEVICES_@
+ <TD>@_PRICES_@
+@@SECTION@@
+ <TR BGCOLOR=#00000F>
+ <TD>@_DEVICES_@
+ <TD>@_PRICES_@
+@@END_TABLE@@
+</TABLE>
+
+<TABLE>
+@@TABLE@@ @@TERMINATE_SECTIONS@@
+ <TR>
+ <TD BGCOLOR=#00000F WIDTH=10>
+ <TD WIDTH=150>@_DEVICES_@
+@@SECTION@@
+ <TD WIDTH=150>@_DEVICES_@
+@@SECTION@@
+ <TD WIDTH=150>@_DEVICES_@
+ <TD BGCOLOR=#00000F WIDTH=10>
+@@END_TABLE@@
+</TABLE>
============================================================
--- harness/sources/templates_parser/docs/templates_parser.texi 7ef69177ea515f221c0562b0fd3d8ffb8da6db34
+++ harness/sources/templates_parser/docs/templates_parser.texi 7ef69177ea515f221c0562b0fd3d8ffb8da6db34
@@ -0,0 +1,2049 @@
+\input texinfo @c -*-texinfo-*-
+
+@c %**start of header
+@setfilename templates_parser.info
+@settitle Templates Parser User's Guide
+@setchapternewpage off
+@syncodeindex fn cp
+
+@iftex
+@afourpaper
+@end iftex
+
+@c ----------------------------------------- MACRO
+
+@c Macro used for all Templates_Parser examples
+@c No cartouche on HTML as this is part of the css
+@macro TPEXP{TXT}
+@ifhtml
+@smallexample
+@group
+\TXT\
+@end group
+@end smallexample
+@end ifhtml
+@ifnothtml
+@cartouche
+@smallexample
+@group
+\TXT\
+@end group
+@end smallexample
+@end cartouche
+@end ifnothtml
+@end macro
+
+@c ----------------------------------------- END MACRO
+
+@titlepage
+
+@title Templates Parser User's Guide
+@subtitle Document revision level $Revision: 145737 $
+@subtitle Date: @today{}
+@author AdaCore
+
+@sp 1
+@url{http://libre.act-europe.fr/aws}
+
+@vskip 0pt plus 1filll
+
+@page
+
+Copyright @copyright{} 1999-2004, Pascal Obry
+
+Copyright @copyright{} 2005-2008, AdaCore
+
+@*
+
+This document may be copied, in whole or in part, in any form or by any
+means, as is or with alterations, provided that (1) alterations are clearly
+marked as alterations and (2) this copyright notice is included
+unmodified in any copy.
+
+@end titlepage
+
+@ifhtml
+@c title page for the HTML documentation
+@html
+<font size="+2">
+<p>Document revision level $Revision: 145737 $
+<p>Date: @today{}
+<p>AdaCore
+</font>
+
+<font size="+1">
+<p>@url{http://libre.act-europe.fr/aws}
+</font>
+
+@page
+@end html
+@end ifhtml
+@finalout
+
+@contents
+
+@ifinfo
+@node Top
+@top Templates Parser
+
+@menu
+* Introduction::
+* Tags::
+* Template statements::
+* Other services::
+* Templates_Parser API Reference::
+* Index::
+@end menu
+@end ifinfo
+
+@c ----------------------------------------------------------------------
+@node Introduction
+@chapter Introduction
+@c ----------------------------------------------------------------------
+
+@noindent
+The templates parser package has been designed to parse files and to
+replace some specific tags into these files by some specified values.
+
+@noindent
+The main goal was to ease the development of Web servers. In CGI
+(@i{Common Gateway Interface}) mode you have to write the HTML page in
+the program (in Ada or whatever other languages) by using some specific
+libraries or by using only basic output functions like Ada @code{Put_Line} for
+example. This is of course not mandatory but by lack of a good library
+every Web development end up doing just that.
+
+@noindent
+The main problems with this approach are:
+
+@itemize @bullet
+
+@item It is painful to have to recompile the program each time you have
+a slight change to do in the design (center an image, change the border
+width of a table...)
+
+@item You have the design and the program merged together. It means that
+to change the design you must know the Ada language. And to change the
+Ada program you need to understand what is going on with all these
+inline HTML command.
+
+@item You can't use the nice tools to generate your HTML.
+
+@end itemize
+
+@noindent
+With the templates parser package these problems are gone. The code and
+the design is @b{completely} separated. This is a very important
+point. PHP or JSP have tried this but most of the time you have the
+script embedded into the Web template. And worst you need to use another
+language just for your Web development.
+
+@itemize @bullet
+
+@item The HTML page is separated from the program code. Then you can
+change the design without changing the code. Moreover when you fix the
+code you don't have to handle all the specific HTML output. And you do
+not risk to break the design.
+
+@item It is easier to work on the design and the program at the same time
+using the right people for the job.
+
+@item It reduces the number of @i{edit/build/test} cycles. Writing HTML
+code from a program is error prone.
+
+@item It is possible to use standard tools to produce the HTML.
+
+@item You don't have to learn a new language.
+
+@item The script is Ada, so here you have the benefit of all the Ada power.
+
+@end itemize
+
+@noindent
+In fact, the Ada program now simply computes some values, gets some data
+from a database or whatever and then calls the templates parser to output
+a page with the data displayed. To the templates parser you just pass
+the template file name and an associative table.
+
+@noindent
+It is even more convenient to have different displays with the same set
+of data. You just have to provide as many templates as you like.
+
+@c ----------------------------------------------------------------------
+@node Tags
+@chapter Tags
+@c ----------------------------------------------------------------------
+
+@menu
+* Tags in template files::
+* Translations::
+* Discrete Boolean Composite values::
+* Filters::
+* Attributes::
+* Predefined tags::
+* Dynamic tags::
+@end menu
+
+@c -----------------------------------------------------------------------
+@node Tags in template files
+@section Tags in template files
+@c -----------------------------------------------------------------------
+
+@noindent
+A tag is a string found in the template page and surrounded by a specific set
+of characters. The default is @b{@@_} at the start and @b{_@@} at the
+end of the tag. This default can be changed using @code{Set_Tag_Separators}
+routine, @pxref{Templates_Parser API Reference}. Note that it must be changed
+as the first API call and should not be changed after that.
+
+The tag will be replaced by a value specified in the Ada code.
+In this context, the role of the Ada code is therefore to prepare what is
+known as a translation, and then pass it to the templates parser, along with
+the name of the template file to parse. This results in an expanded version
+of the templates file, where all tags have been replaced by the value given
+in the Ada code.
+
+Let's start with a simple example. Here is the contents of the file
+@file{demo.tmplt}, which is a very basic template file:
+
+@include demo.tmplt.texi
+
+@noindent
+On its own, this template has little interest. However, it is used from some
+Ada code similar to the following @file{demo.adb} file:
+
+@include demo.adb.texi
+
+@noindent
+Compile this program, link with the templates parser, and when you run it,
+the output will be:
+
+@include demo.adb.res
+
+@noindent
+As you can imagine, this is a bare bone example. More complex structures are
+of course possible. One thing to note, though, is that the template file
+requires no Ada knowledge for editing, and is strongly related to your
+application domain. One of the main usage for such templates is to generate
+web pages. This can be done by a designer that knows nothing of how your
+Ada code works. But you can use templates in other domains, including to
+generate Ada code.
+
+@c ----------------------------------------------------------------------
+@node Translations
+@section Translations
+@c ----------------------------------------------------------------------
+
+@noindent
+In your Ada code, you can associate one or more values with a name, and
+then reference that name in the template file as we just saw above.
+
+Associating the value(s) with the name is done through one of the @code{Assoc}
+constructors, @pxref{Templates_Parser API Reference}. Ada's overloading
+resolution mechanism will take care of calling the appropriate constructor
+automatically.
+
+These associations are then grouped into a dictionary. This dictionary
+is passed along with the name of the template file to the @code{Parse}
+routine itself, which generates the final expanded representation of the
+template. In fact, you will almost never have to manipulate an association
+directly, since as soon as it is created you store it in the dictionary.
+
+There are two types of dictionaries in the templates parser:
+
+@table @code
+
+@item Translate_Table
+@cindex Translate_Table
+
+This is an array of associations. If you know the exact number of
+associations when you write your code, this will generally provide
+a very readable code. The array can be initialized as soon as it is
+declared.
+
+@TPEXP{
+ @b{declare}
+ T : @b{constant} Translate_Table :=
+ (1 => Assoc ("NAME1", Value1),
+ 2 => Assoc ("NAME2", Value2));
+ @b{begin}
+ Put_Line (Parse ("demo.tmplt", T));
+ @b{end};}
+
+@item Translate_Set
+@cindex Translate_Set
+
+If, on the other hand, you do not know statically the number of
+associations, it is generally a lot more flexible to use another type
+of dictionary, which isn't limited in size. It is also better to use
+this type of dictionary if you need extra code to compute the values.
+
+@TPEXP{
+ @b{declare}
+ T : Translate_Set
+ @b{begin}
+ Insert (T, Assoc ("NAME1", Value1));
+ Insert (T, Assoc ("NAME2", Value2));
+ @b{end};}
+
+@end table
+
+@noindent
+Internally, the templates parser will always convert all dictionaries
+to a @code{Translate_Set}, which is much more efficient when we need to
+look values up.
+
+@c ----------------------------------------------------------------------
+@node Discrete Boolean Composite values
+@section Discrete, Boolean and Composite values
+@c ----------------------------------------------------------------------
+
+@noindent
+As we just saw, the values by which a tag is replaced must be provided
+by the Ada code. Such values can be provided in different formats,
+depending on the intended use.
+
+The three kinds of tags are @b{discrete}, @b{Boolean} and @b{composite}
+tags. These are all ways to associate one or more value to a name, which
+is the name used in the template file.
+
+@table @b
+
+@item discrete values
+@cindex Tag, discrete
+This represents a single value associated with a name. The types of value
+currently supported are String, Unbounded_String and Integer.
+
+@TPEXP{
+ Insert (T, Assoc ("NAME", 2));
+ Insert (T, Assoc ("NAME", "VALUE"));}
+
+@item Boolean values
+@cindex Tag, Boolean
+These are similar to discrete values. However, they are more convenient
+to manipulate within @code{@@@@IF@@@@} statements in the template. When
+outside an @code{IF} statement, such values are represented as TRUE or
+FALSE.
+
+@TPEXP{Insert (T, Assoc ("NAME", True));}
+
+@item composite values
+@cindex Tag, composite
+A composite tag is a variable which contains a set of values. In terms of
+programming languages, these would generally be called vectors. Since each
+value within that can itself be a composite tag, you can therefore build
+multi-dimensional arrays.
+
+These kind of variables will be used with the @code{TABLE} tag statement
+@pxref{TABLE statement}. Outside a table statement, the tag is
+replaced by all values concatenated with a specified separator. See
+@code{Set_Separator} routine. Such tag are variables declared in the
+Ada program a @code{Templates_Parser.Tag} type.
+
+There are many overloaded constructors to build a composite tags (see "+"
+operators). The "+" operators are used to build a Tag item from
+standard types like String, Unbounded_String, Character, Integer and
+Boolean.
+
+To add items to a Tag many overloaded operators are provided (see
+"&" operators). The "&" operators add one item at the start or the end
+of the tag. It is possible to directly add String, Unbounded_String,
+Character, Integer and Boolean items using one of the overloaded operator.
+
+A tag composed of only Boolean values TRUE or FALSE is called a
+Boolean composite tag. This tag is to be used with a @code{IF} tag statement
+inside a @code{TABLE} tag statement.
+
+It is possible to build a composite tag having any number of nested
+level. A vector is a composite tag with only one level, a matrix is a
+composite tag with two level (a Tag with a set of vector tag).
+
+Two aliases exists for composite tags with one or two nested level,
+they are named @code{Vector_Tag} and @code{Matrix_Tag}. In the suite
+of the document, we call @i{vector tag} a tag with a single nested
+level and @i{matrix tag} a tag with two nested level.
+
+@TPEXP{
+ @i{-- Building a composite tag}
+ @i{-- Then add it into a translate set}
+ @b{declare}
+ V : Tag;
+ T : Translate_Set;
+ @b{begin}
+ @b{for} Index @b{in} 1 .. 10 @b{loop}
+ V := V & I;
+ @b{end loop};
+ Insert (T, Assoc ("VECTOR", V));
+ @b{end};}
+
+@end table
+
+@c --------------------------------------------------------------------------
+@node Filters
+@section Filters
+@cindex Filters
+@c --------------------------------------------------------------------------
+
+@menu
+* Predefined filters::
+* User defined filters::
+@end menu
+
+@noindent
+Within the template file, functions can be applied to tags. Such functions
+are called @code{filters}. These filters might require one or more
+parameters, see the documentation for each filter.
+
+The syntax is:
+
+@TPEXP{
+@code{@@_[[FILTER1_NAME[(parameter)]:]FILTER2_NAME[(parameter)]:]SOME_VAR_@@}.
+}
+
+When multiple filters are associated to a tag, they are evaluated from right
+to left. In the example above, @code{FILTER1_NAME} is applied to the result
+of applying @code{FILTER2_NAME} to @code{SOME_VAR}.
+
+Remember that one of the goals in using templates is to remove as much
+hard-coded information from the actual Ada source, and move it into easily
+editable external files. Using filters is a convenient way to give the template
+designer the power to specify the exact output he wants, even without changing
+the Ada code. For instance, imagine that one suddenly decides that some
+names should be capitalized in a template. There are two solutions to such
+a change in design:
+
+@itemize @bullet
+@item Modify the Ada code to capitalize strings before storing them in
+a tag variable. What if, in the template, we need the name once capitalized,
+and once with its original casing ? This means the Ada code would have to
+create two tags.
+
+@item Modify the template itself, and use a filter. A single tag is required
+on the Ada side, which doesn't even have to be changed in fact. The template
+would for instance become:
+
+@TPEXP{@@_CAPITALIZE:VAR_@@ : constant String := "@@_VAR_@@";}
+@end itemize
+
+The templates parser comes with a number of predefined filters, that can be
+used in various situations. Some of these are highly specialized, but most of
+them are fairly general. You can also define your own filters, adapted to
+specific needs you might have.
+
+Here are some more examples using the predefined filters:
+@TPEXP{If VAR is set to "@i{vector_tag}", ONE to "1" and TWO to "2" then:
+
+@@_VAR_@@ -> vector_tag
+@@_UPPER:VAR_@@ -> VECTOR_TAG
+@@_CAPITALIZE:VAR_@@ -> Vector_Tag
+@@_EXIST:VAR_@@ -> TRUE
+@@_UPPER:REVERSE:VAR_@@ -> GAT_ROTCEV
+@@_MATCH(VEC.*):UPPER:VAR_@@ -> TRUE
+@@_SLICE(1..6):VAR_@@ -> vector
+@@_REPLACE(([^_]+)):VAR_@@ -> vector
+@@_REPLACE(([a-z]+)_([a-z]+)/\\2_\\1):VAR_@@ -> tag_vector
+@@_"+"(TWO):ONE_@@ -> 3
+@@_"-"(TWO):ONE_@@ -> -1}
+
+@c ----------------------------------------------------------------------------
+@c -- Predefined filters
+@c ----------------------------------------------------------------------------
+
+@node Predefined filters
+@subsection Predefined filters
+
+Here is the complete list of predefined filters that come with the templates
+parser.
+
+@table @code
+
+@item "+"(@i{N}) or ADD(@i{N})
+@cindex Filter, "+"
+
+Add N to variable and return the result. If the current variable value
+is not a number it returns the empty string. N must be a number or a
+discrete tag variable whose value is a number.
+
+@item "-"(@i{N}) or SUB(@i{N})
+@cindex Filter, "-"
+
+Subtract N to variable and return the result. If the current variable value
+is not a number it returns the empty string. N must be a number or a
+discrete tag variable whose value is a number.
+
+@item "*"(@i{N}) or MULT(@i{N})
+@cindex Filter, "*"
+
+Multiply N with variable and return the result. If the current variable value
+is not a number it returns the empty string. N must be a number or a
+discrete tag variable whose value is a number.
+
+@item "/"(@i{N}) or DIV(@i{N})
+@cindex Filter, "/"
+
+Divide variable by N and return the result. If the current variable value
+is not a number it returns the empty string. N must be a number or a
+discrete tag variable whose value is a number.
+
+@item ABS
+@cindex Filter, ABS
+
+Returns the absolute value.
+
+@item ADD_PARAM(@i{NAME[=VALUE]})
+@cindex Filter, ADD_PARAM
+
+Add a parameter into an URL. This routine adds the '?' and '&'
+character if needed. @i{VALUE} can be a tag variable name.
+
+@item BR_2_EOL(@i{EOL})
+@cindex Filter, BR_2_EOL
+
+Replaces all occurrences of the @code{<br>} HTML tag by a line terminator
+determined by EOL. EOL must be either CR (Carriage-Return), LF (Line-Feed),
+LFCR (Line-Feed followed by Carriage-Return) or CRLF (Carriage-Return
+followed by Line-Feed).
+
+@item BR_2_LF
+@cindex Filter, BR_2_LF
+
+Shortcut for BR_2_EOL(LF).
+
+@item CAPITALIZE
+@cindex Filter, CAPITALIZE
+
+Put all characters in the variable in lower case except characters after
+a space or an underscore which are set in upper-case.
+
+@item CLEAN_TEXT
+@cindex Filter, CLEAN_TEXT
+
+Keep only letters and digits all others characters are changed to
+spaces.
+
+@item COMA_2_POINT
+@cindex Filter, COMA_2_POINT
+
+Replaces all comas by points.
+
+@item CONTRACT
+@cindex Filter, CONTRACT
+
+Converts any suite of spaces by a single space character.
+
+@item DEL_PARAM(@i{NAME})
+@cindex Filter, DEL_PARAM
+
+Delete parameter NAME from the URL. This routine removes the '?' and '&'
+character if needed. Returns the input string as-is if the parameter
+is not found.
+
+@item EXIST
+@cindex Filter, EXIST
+
+Returns @b{True} if variable is set and has a value different that the null
+string and @b{False} otherwise.
+
+@item FILE_EXISTS
+@cindex Filter, FILE_EXISTS
+
+Returns @b{True} if variable is set and has a value that corresponds
+to a file name present on the file system and @b{False} otherwise.
+
+@item FORMAT_DATE(@b{FORMAT})
+@cindex Filter, FORMAT_DATE
+
+Returns the date with the given format. The date must be in the ISO
+format (YYYY-MM-DD) eventually followed by a space and the time with
+the format HH:MM:SS. If the date is not given in the right format it
+returns the date as-is. The format is using the GNU/date description
+patterns as also implemented in @code{GNAT.Calendar.Time_IO}.
+
+@itemize @bullet
+@item @i{Characters}:
+
+@itemize
+@item @b{%}: a literal %
+@item @b{n}: a newline
+@item @b{t}: a horizontal tab
+@end itemize
+
+@item @i{Time fields}:
+
+@itemize
+@item @b{%H}: hour (00..23)
+@item @b{%I}: hour (01..12)
+@item @b{%k}: hour ( 0..23)
+@item @b{%l}: hour ( 1..12)
+@item @b{%M}: minute (00..59)
+@item @b{%p}: locale's AM or PM
+@item @b{%r}: time, 12-hour (hh:mm:ss [AP]M)
+@item @b{%s}: seconds since 1970-01-01 00:00:00 UTC (a nonstandard extension)
+@item @b{%S}: second (00..59)
+@item @b{%T}: time, 24-hour (hh:mm:ss)
+@end itemize
+
+@item @i{Date fields}:
+
+@itemize
+@item @b{%a}: locale's abbreviated weekday name (Sun..Sat)
+@item @b{%A}: locale's full weekday name, variable length (Sunday..Saturday)
+@item @b{%b}: locale's abbreviated month name (Jan..Dec)
+@item @b{%B}: locale's full month name, variable length (January..December)
+@item @b{%c}: locale's date and time (Sat Nov 04 12:02:33 EST 1989)
+@item @b{%d}: day of month (01..31)
+@item @b{%D}: date (mm/dd/yy)
+@item @b{%h}: same as %b
+@item @b{%j}: day of year (001..366)
+@item @b{%m}: month (01..12)
+@item @b{%U}: week number of year with Sunday as first day of week (00..53)
+@item @b{%w}: day of week (0..6) with 0 corresponding to Sunday
+@item @b{%W}: week number of year with Monday as first day of week (00..53)
+@item @b{%x}: locale's date representation (mm/dd/yy)
+@item @b{%y}: last two digits of year (00..99)
+@item @b{%Y}: year with four digits (1970...)
+@end itemize
+
+@item @i{Padding}:
+
+By default, date pads numeric fields with zeroes. GNU date recognizes the following nonstandard numeric modifiers:
+@itemize
+@item @b{-} (hyphen): do not pad the field
+@item @b{_} (underscore): pad the field with spaces
+@end itemize
+@end itemize
+
+@item FORMAT_NUMBER([@i{DIGITSEP}])
+@cindex Filter, FORMAT_NUMBER
+
+Returns the number with a separator added between each 3 digits
+blocks. The decimal part is not transformed. If the data is not a
+number nothing is done. The default separator is a space, although you can
+specify any separator (a single character) you wish. DIGITSEP can also be
+the name of another tag, whose value (or the first character of it) will be
+used as a separator.
+
+@item IS_EMPTY
+@cindex Filter, IS_EMPTY
+
+Returns @b{True} if variable is the empty string and @b{False} otherwise.
+
+@item LF_2_BR
+@cindex Filter, LF_2_BR
+
+Replaces all occurrences of the character LF (Line-Feed) by a
+@code{<br>} HTML tag.
+
+@item LOWER
+@cindex Filter, LOWER
+
+Put all characters in the variable in lower-case.
+
+@item MATCH(@i{REGEXP})
+@cindex Filter, MATCH
+
+Returns @b{True} if variable match the regular expression passed as
+filter's parameter. The regular expression is using a format as
+found in @file{gawk}, @file{sed} or @file{grep} tools.
+
+@item MAX(@i{N})
+@cindex Filter, MAX
+
+Returns the maximum value between the variable and the parameter.
+
+@item MIN(@i{N})
+@cindex Filter, MIN
+
+Returns the minimum value between the variable and the parameter.
+
+@item MOD(@i{N})
+@cindex Filter, MOD
+
+Returns variable modulo N. If the current variable value is not a
+number it returns the empty string. N must be a number or a
+discrete tag variable whose value is a number.
+
+@item NEG
+@cindex Filter, NEG
+
+Change the sign of the value.
+
+@item NO_DYNAMIC
+@cindex Filter, NO_DYNAMIC
+
+This is a special command filter which indicates that the tag must not
+be searched in the dynamic tags. See @pxref{Lazy_Tag}. @code{NO_DYNAMIC} must
+be the first filter. This filter returns the value as-is.
+
+@item NO_DIGIT
+@cindex Filter, NO_DIGIT
+
+Replaces all digits by spaces.
+
+@item NO_LETTER
+@cindex Filter, NO_LETTER
+
+Replaces all letters by spaces.
+
+@item NO_SPACE
+@cindex Filter, NO_SPACE
+
+Removes all spaces in the variable.
+
+@item OUI_NON
+@cindex Filter, OUI_NON
+
+If variable value is @b{True} it returns @b{Oui}, if @b{False} it
+returns @b{Non}, otherwise does nothing. It keeps the way @b{True/False} is
+capitalized (all upper, all lower or first letter capital).
+
+@item POINT_2_COMA
+@cindex Filter, POINT_2_COMA
+
+Replaces all comas by points.
+
+@item REPEAT(@i{N})
+@cindex Filter, REPEAT
+
+Returns @i{N} times the variable, @i{N} being passed as filter's parameter.
+@i{N} must be a number or a discrete tag variable whose value is a number.
+
+@item REPEAT(@i{STR})
+@cindex Filter, REPEAT
+
+This is the second @code{REPEAT} form. In this case @i{STR} is repeated
+a number of time corresponding to the variable value which must be a number.
+
+@item REPLACE(@i{REGEXP}[/@i{STR}])
+@cindex Filter, REPLACE
+
+This filter replaces @b{\n} (where @i{n} is a number) @i{STR}'s
+occurrences by the corresponding match from @i{REGEXP}. The first match
+in @i{REGEXP} will replace @b{\1}, the second match @b{\2} and so
+on. Each match in @i{REGEXP} must be parenthesized. It replaces only
+the first match. @i{STR} is an optional parameter, its default value
+is @b{\1}. It is possible to space characters in @i{STR} to avoid
+parsing confusions. This is required if you need to have @b{@@_} or
+@b{_@@} or a parenthesis in @i{STR} for example. @i{STR} can be a tag
+variable name. @i{STR} can contain the following escaped characters :
+@b{\n} Carriage Return, @b{\r} Line Feed and @b{\t} for Horizontal
+Tabulation.
+
+@item REPLACE_ALL(@i{REGEXP}[/@i{STR}])
+@cindex Filter, REPLACE_ALL
+
+Idem as above but replaces all occurrences.
+
+@item REPLACE_PARAM(@i{NAME[=VALUE]})
+@cindex Filter, REPLACE_PARAM
+
+This is filter is equivalent to
+ADD_PARAM(@i{NAME[=VALUE]}):DEL_PARAM(@i{NAME}). @i{VALUE} can be a
+tag variable name.
+
+@item REVERSE
+@cindex Filter, REVERSE
+
+Reverse the string.
+
+@item SIZE
+@cindex Filter, SIZE
+
+Returns the size (number of characters) of the string value.
+
+@item SLICE(@i{x .. y})
+@cindex Filter, SLICE
+
+Returns the sub-string starting from position x and ending to position
+y. Note that the string to slice always start from position 1.
+If x or y are negative, they are counted from the end of the string, so
+that 0 matches the last character of the string, -1 matches the character
+just before,...
+
+@item TRIM
+@cindex Filter, TRIM
+
+Removes leading and trailing spaces.
+
+@item UPPER
+@cindex Filter, UPPER
+
+Put all characters in the variable in upper-case.
+
+@item WEB_ENCODE
+@cindex Filter, WEB_ENCODE
+
+As WEB_ESCAPE and also encodes all non 7-bit characters and non
+printable characters using @b{&#xxx;} HTML encoding.
+
+@item WEB_ESCAPE
+@cindex Filter, WEB_ESCAPE
+
+Replaces characters '<', '>', '"' and '&' by corresponding HTML
+sequences: < > " and &
+
+@item WEB_NBSP
+@cindex Filter, WEB_NBSP
+
+Replaces all spaces by an HTML non breaking space.
+
+@item WRAP(@i{N})
+@cindex Filter, WRAP
+
+Wraps lines having more N characters.
+
+@item YES_NO
+@cindex Filter, YES_NO
+
+If variable value is @b{True} it returns @b{Yes}, if @b{False} it
+returns @b{No}, otherwise does nothing. It keeps the way @b{True/False} is
+capitalized (all upper, all lower or first letter capital).
+
+@end table
+
+@c ---------------------------------------------------------------------------
+@node User defined filters
+@subsection User defined filters
+@c ---------------------------------------------------------------------------
+
+@noindent
+It is also possible to define a new filter by registering a callback
+routine associated with the filter name.
+
+You can define three kinds of filters: filters that take no argument, and are
+therefore simply used as in @@_FILTER:TAG_@@, filters that take one
+or more arguments, used as in @@_FILTER(param1,param2):TAG_@@, and filters
+that are implemented as tagged objects, and take the same form as the filters
+with arguments described above.
+
+The latter form of filters (using tagged types) provides slightly more
+flexibility, as you can store your own user data in the filter when it is
+registered. Among other things, this makes it possible to share filters
+between various applications, when the filter needs to access some
+application-specific variable as well.
+
+The templates parser will not try to interpret the parameters for you, and
+will simply return the string representation of the list of parameters,
+for instance @code{"param1,param2"} in the example above. This provides
+enhanced flexibility, since you are free to use any parameter-separator
+you want, and to interpret parameters as integer, strings, references to
+other tags,@dots{}
+
+The templates parser doesn't support tag substitution within the parameter
+list, but this is trivial to implement in your own code. For instance,
+if the user has used @@_FILTER(REFTAG):TAG_@@, you are free to either
+take @code{REFTAG} as a constant string, or as a reference to another tag,
+to be looked up in a translation table. You should of course properly
+document the behavior of your filter.
+
+Here is the templates parser API for defining your own custom filters:
+
+@TPEXP{ @b{type} Filter_Context @b{is record}
+ Translations : Translate_Set;
+ Lazy_Tag : Dynamic.Lazy_Tag_Access;
+ @b{end record};
+
+ @b{type} Callback @b{is access function}
+ (Value : @b{in} String;
+ Parameters : @b{in} String;
+ Context : @b{in} Filter_Context) @b{return} String;
+ @i{-- User's filter callback}
+
+ @b{type} Callback_No_Param @b{is access function}
+ (Value : @b{in} String;
+ Context : @b{in} Filter_Context) @b{return} String;
+ @i{-- User's filter callback}
+
+ @b{procedure} Register_Filter
+ (Name : @b{in} String;
+ Handler : @b{in} Callback);
+ @i{-- Register user's filter Name using the specified Handler}
+
+ @b{procedure} Register_Filter
+ (Name : @b{in} String;
+ Handler : @b{in} Callback_No_Param);
+ @i{-- Register user's filter Name using the specified Handler}}
+
+In the above calls, Value is the value of the tag on which the filter
+applies. In the examples above, that would be the value of @code{TAG}
+as looked up in the translation table. Context contains the the translation
+table and the current lazy tag object you can use if you need to look
+up other tags.
+
+Here is a simple example of a custom filter, which can be used to
+generate HTML forms. In such a form, it is common to have some @code{<input>}
+tags that need a @code{selected='selected'} attribute if the toggle
+button should be selected. This can be done without the use of a filter,
+of course, using a simple @code{@@@@IF@@@@} statement, but that makes the
+template less readable. The custom filter below behaves as such: it takes
+one argument, and compares the value of the tag on which the filter is
+applied to that argument. If they are equal, the string
+@code{selected='selected'} will be substituted. As a special case, if the
+argument to the filter starts with a @code{'@@'} character, the argument
+is interpreted as the name of a tag to look up first.
+
+@TPEXP{
+ @b{function} Custom_Select_Filter
+ (Value : @b{in} String;
+ Parameters : @b{in} String;
+ Context : @b{in} Filter_Context) @b{return} String @b{is}
+ begin
+ @b{if} Parameters /= "" @b{and then} Parameters (Parameters'First) = '@@' @b{then}
+ @b{if} Get (Get (Context.Translations,
+ Parameters (Parameters'First + 1 .. Parameters'Last))) =
+ Value
+ @b{then}
+ return "selected='selected'";
+ @b{end if};
+
+ @b{elsif} Value = Parameters @b{then}
+ return "selected='selected'";
+ @b{end if};
+
+ @b{return} "";
+ @b{end} Custom_Select_Filter;
+
+ Register_Filter ("SELECTED", Custom_Select_Filter'Access);
+}
+
+and a template would look like:
+
+@TPEXP{
+ <option value="foo" @@_SELECTED(@@SELECTED_STATUS):STATUS_@@ />}
+
+@c --------------------------------------------------------------------------
+@node Attributes
+@section Attributes
+@c --------------------------------------------------------------------------
+
+@noindent
+In addition to filters, you can also apply attributes to composite tags.
+Attributes are placed after the tag name and preceded with a simple quote.
+@code{@@_SOME_VAR['ATTRIBUTE_NAME]_@@}. It is possible to use filters
+and attributes together. In that case the attribute is first evaluated and
+the result is passed-through the filters.
+
+You cannot define your own attributes.
+
+Current supported attributes are:
+
+@table @code
+
+@item V'length
+@cindex Attribute, 'Length
+
+Returns the number of item in the composite tag (can be applied only
+to a composite tag having a single nested level - a vector).
+
+@item V'Up_Level(n)
+@cindex Attribute, 'Up_Level
+
+Use index from the table command @b{n} level(s) upper so this attribute must
+be used in a nested table command tag. @code{'Up_Level} is equivalent
+to @code{'Up_Level(1)} (can be applied only to a composite tag having
+a single nested level - a vector).
+
+@item M'Line
+@cindex Attribute, 'Line
+
+Returns the number of line in the composite tag. This is identical to
+'Length but can be applied only to a composite tag having two nested
+level - a matrix).
+
+@item M'Min_Column
+@cindex Attribute, 'Min_Column
+
+Returns the size of smallest composite tag in M composite tag. This attribute
+can be applied only to a composite tag having two nested level - a matrix.
+
+@item M'Max_Column
+@cindex Attribute, 'Max_Column
+
+Returns the size of largest composite tag in M composite tag. This attribute
+can be applied only to a composite tag having two nested level - a matrix.
+
+@end table
+
+@noindent
+For example:
+
+@TPEXP{If VEC is set to "@i{<1 , 2>}" and MAT to "@i{<a, b, c> ; <2, 3, 5, 7>}" then:
+
+@@_VEC'Length_@@ -> 2
+@@_ADD(3):VEC'Length_@@ -> 5
+@@_MAT'Line_@@ -> 2
+@@_MAT'Min_Column_@@ -> 3
+@@_MAT'Max_Column_@@ -> 4}
+
+@c --------------------------------------------------------------------------
+@node Predefined tags
+@section Predefined tags
+@c --------------------------------------------------------------------------
+
+@noindent
+There are some specific tags that can be used in any
+templates. Here is an exhaustive list:
+
+@table @code
+
+@item NOW
+@cindex @@_NOW_@@
+
+Current date and time with format "YYYY-MM-DD HH:MM:SS".
+
+@item YEAR
+@cindex @@_YEAR_@@
+
+Current year number using 4 digits.
+
+@item MONTH
+@cindex @@_MONTH_@@
+
+Current month number using 2 digits.
+
+@item DAY
+@cindex @@_DAY_@@
+
+Current day number using 2 digits.
+
+@item HOUR
+@cindex @@_HOUR_@@
+
+Current hour using range 0 to 23 using 2 digits.
+
+@item MINUTE
+@cindex @@_MINUTE_@@
+
+Current minute using 2 digits.
+
+@item SECOND
+@cindex @@_SECOND_@@
+
+Current seconds using 2 digits.
+
+@item MONTH_NAME
+@cindex @@_MONTH_NAME_@@
+
+Current full month name (January .. December).
+
+@item DAY_NAME
+@cindex @@_DAY_NAME_@@
+
+Current full day name (Monday .. Sunday).
+
+@end table
+
+@c ----------------------------------------------------------------------------
+@node Dynamic tags
+@section Dynamic tags
+@cindex Dynamic tags
+@c ----------------------------------------------------------------------------
+
+@noindent
+Dynamic tags are associations that are not created when @code{Parse} is called,
+but only later on when they are actually needed.
+
+Dynamic tags are handled through abstract interfaces and give the
+opportunity to create tags dynamically while the template is being parsed.
+
+@menu
+* Lazy_Tag::
+* Cursor_Tag::
+@end menu
+
+@c ---------------------------------------------------------------------------
+@node Lazy_Tag
+@subsection Lazy_Tag
+@cindex Lazy_Tag
+@c ---------------------------------------------------------------------------
+
+@noindent
+The @code{Lazy_Tag} object can be used to dynamically handle tags. Such
+object can be passed to the @code{Parse} routines. If a template's tag
+is not found in the translation dictionary, the @code{Lazy_Tag}'s Value
+callback method is called by the parser. The default callback method
+does nothing, it is up to the user to define it. The callback
+procedure is defined as follow:
+
+@TPEXP{@b{procedure} Value
+ (Lazy_Tag : @b{access} Dynamic.Lazy_Tag;
+ Var_Name : @b{in} String;
+ Translations : @b{in out} Translate_Set) @b{is abstract};
+@i{-- Value is called by the Parse routines below if a tag variable was not}
+@i{-- found in the set of translations. This routine must then add the}
+@i{-- association for variable Name. It is possible to add other}
+@i{-- associations in the translation table but a check is done to see if}
+@i{-- the variable Name as been set or not. The default implementation does}
+@i{-- nothing.}}
+
+@noindent
+One common usage is to handle tag variables that can be shared by
+many templates and are not always used (because a conditional is False for
+example). If computing the corresponding value (or values for a ...)
+is somewhat expensive it is better to delay building such tag at the
+point it is needed. Using a @code{Lazy_Tag} object, it is possible to do
+so. The @code{Value} procedure will be called if the tag value is
+needed. At this point, one can just add the corresponding association
+into the @code{Translate_Set}. Note that it is possible to add more
+than one association. If the association for @code{Var_Name} is not
+given, this tag has no value.
+
+@code{Value} will be called only once per template and per tag. This is so
+that if the value for the tag is expensive to compute, you only pay the
+price once, and the value is then cached for the remaining of the template.
+If the value should be recomputed every time, you should consider using
+a @code{Cursor_Tag} instead (@pxref{Cursor_Tag}).
+
+@c ---------------------------------------------------------------------------
+@node Cursor_Tag
+@subsection Cursor_Tag
+@cindex Cursor_Tag
+@c ---------------------------------------------------------------------------
+
+@noindent
+In some cases, data structure on the Ada side can be so complex that it is
+difficult to map it into a variable tag. The @code{Cursor_Tag} object has
+been designed to work around such problem. Using a @code{Cursor_Tag}
+it is possible to create an iterator through a data structure without
+mapping it into a variable tag. The data stays on the Ada side.
+To create a @code{Cursor_Tag} it is necessary to implement the following
+abstract routines:
+
+@TPEXP{@b{function} Dimension
+ (Cursor_Tag : @b{access} Dynamic.Cursor_Tag;
+ Var_Name : @b{in} String) @b{return} Natural @b{is abstract};
+@i{-- Must return the number of dimensions for the given variable name. For}
+@i{-- a matrix this routine should return 2 for example.}
+
+@b{type} Path @b{is array} (Positive @b{range} <>) @b{of} Natural;
+@i{-- A Path gives the full position of a given element in the cursor tag}
+
+@b{function} Length
+ (Cursor_Tag : @b{access} Dynamic.Cursor_Tag;
+ Var_Name : @b{in} String;
+ Path : @b{in} Dynamic.Path) @b{return} Natural @b{is abstract};
+@i{-- Must return the number of item for the given path. The first}
+@i{-- dimension is given by the Path (1), for the second column the Path is}
+@i{-- (1, 2). Note that each dimension can have a different length. For}
+@i{-- example a Matrix is not necessary square.}
+
+@b{function} Value
+ (Cursor_Tag : @b{access} Dynamic.Cursor_Tag;
+ Var_Name : @b{in} String;
+ Path : @b{in} Dynamic.Path) @b{return} String @b{is abstract};
+@i{-- Must return the value for the variable at the given Path. Note that}
+@i{-- this routine will be called only for valid items as given by the}
+@i{-- dimension and Length above.}}
+
+@c ----------------------------------------------------------------------
+@node Template statements
+@chapter Template statements
+@c ----------------------------------------------------------------------
+
+@noindent
+There are five different type statements. A tag statement is surrounded
+by @code{@@@@}. The tag statements are:
+
+@menu
+* Comments::
+* INCLUDE statement::
+* IF statement::
+* TABLE statement::
+* SET statement::
+* INLINE statement::
+@end menu
+
+@c -----------------------------------------------------------------------
+@node Comments
+@section Comments
+@cindex Command, comments
+@cindex Command, @@@@--
+@c -----------------------------------------------------------------------
+
+@noindent
+Every line starting with @b{@@@@--} are comments and are completely
+ignored by the parser. The resulting page will have the exact same
+format and number of lines with or without the comments.
+
+@TPEXP{@@@@-- This template is used to display the client's data
+@@@@-- It uses the following tags:
+@@@@--
+@@@@-- @@_CID_@@ Client ID
+@@@@-- @@_ITEMS_V_@@ List of items (vector tag)
+
+<P>Client @@_CID_@@
+
+...}
+
+@c -----------------------------------------------------------------------
+@node INCLUDE statement
+@section INCLUDE statement
+@cindex Command, INCLUDE
+@c -----------------------------------------------------------------------
+
+@noindent
+This statement is used to include another template file. This is useful if you
+have the same header and/or footer in all your HTML pages. For example:
+
+@TPEXP{@@@@INCLUDE@@@@ header.tmplt
+
+<P>This is by Web page
+
+@@@@INCLUDE@@@@ footer.tmplt}
+
+@noindent
+It is also possible to pass arguments to the include file. These parameters
+are given after the include file name. It is possible to reference these
+parameters into the included file with the special variable names
+@code{@@_$<n>_@@}, where @i{n} is the include's parameter index (0 is
+the include file name, 1 the first parameter and so on).
+
+@TPEXP{@@@@INCLUDE@@@@ another.tmplt @@_VAR_@@ azerty}
+
+@noindent
+In file @file{another.tmplt}
+
+@table @code
+@item @@_$0_@@
+is another.tmplt
+@item @@_$1_@@
+is the variable @@_VAR_@@
+@item @@_$2_@@
+is the string "azerty"
+@end table
+
+If an include variable references a non existing include parameter the
+tag is kept as-is.
+
+Note that it is possible to pass the include parameters using names,
+a set of positional parameters can be pass first, so all following
+include commands are identical:
+
+@TPEXP{@@@@INCLUDE@@@@ another.tmplt one two three four "a text"
+@@@@INCLUDE@@@@ another.tmplt (one, two, 3 => three, 4 => four, 5 => "a text")
+@@@@INCLUDE@@@@ another.tmplt (one, 5 => "a text", 3 => three, 2 => two, 4 => four)}
+
+@noindent
+The file name can also be a tag. In this case the file loading is deferred at
+the parsing time.
+
+@noindent
+For security reasons the filename can't be a full pathname. If a full
+pathname is passed then the leading directory separator is removed.
+
+@c -----------------------------------------------------------------------
+@node IF statement
+@section IF statement
+@cindex Command, IF
+@c -----------------------------------------------------------------------
+
+@noindent
+This is the conditional statement. The complete form is:
+
+@TPEXP{@@@@IF@@@@ <expression1>
+ part1
+@@@@ELSIF@@@@ <expression2>
+ part2
+@@@@ELSE@@@@
+ part3
+@@@@END_IF@@@@}
+
+@noindent
+<expression> is TRUE if it evaluates to one of "TRUE", "T" or
+"1" and FALSE otherwise. Note that the test is not case sensitive.
+
+@noindent
+The part1 one will be parsed if expression1 evaluate to TRUE, part2
+will be parsed if expression2 evaluate to TRUE and the part3 will
+be parse in any other case. The @code{ELSIF} and @code{ELSE} parts are
+optional.
+
+The expression here is composed of Boolean variables
+and/or Boolean expression. Recognized operators are:
+
+@cindex Command, IF expression
+@table @code
+@item A = B
+Returns TRUE if A equal B
+
+@item A /= B
+Returns TRUE if A is not equal B
+
+@item A > B
+Returns TRUE if A greater than B. If A and B are numbers it returns the
+the number comparison (5 > 003 = TRUE) otherwise it returns the string
+comparison (``5'' > ``003'' = FALSE).
+
+@item A >= B
+Returns TRUE if A greater than or equal to B. See above for rule about numbers.
+
+@item A < B
+Returns TRUE if A lesser than B. See above for rule about numbers.
+
+@item A <= B
+Returns TRUE if A lesser than or equal to B. See above for rule about numbers.
+
+@item A and B
+Returns TRUE if A and B is TRUE and FALSE otherwise.
+
+@item A or B
+Returns TRUE if A or B is TRUE and FALSE otherwise.
+
+@item A xor B
+Returns TRUE if either A or B (but not both) is TRUE and FALSE otherwise.
+
+@item A in B
+Returns TRUE if A is found into the composite tag B and FALSE
+otherwise. B must be a tag. If B contains a single value then this
+expression is equivalent to (A = B).
+
+@item not A
+Returns TRUE if either A is FALSE and FALSE otherwise.
+@end table
+
+The default evaluation order is done from left to right, all operators
+having the same precedence. To build an expression it is possible to
+use parentheses to change the evaluation order. A value with
+spaces must be quoted as a string. So valid expressions could be:
+
+@TPEXP{@@@@IF@@@@ (@@_VAR1_@@ > 3) or (@@_COND1_@@ and @@_COND2_@@)
+
+@@@@IF@@@@ not (@@_VAR1_@@ > 3) or (@@_COND1_@@ and @@_COND2_@@)
+
+@@@@IF@@@@ (@@_VAR1_@@ > 3) and not @@_COND1_@@
+
+@@@@IF@@@@ @@_VAR1_@@ = "a value"}
+
+@noindent
+Note also that variables and values can be surrounded by quotes if needed.
+Quotes are needed if a value contain spaces.
+
+Let's see an example using an @code{IF} tag statement. With the following
+template:
+
+@include user.tmplt.texi
+
+@noindent
+The following program:
+
+@include user1.adb.texi
+
+@noindent
+Will display:
+
+@include user1.adb.res
+
+@noindent
+But the following program:
+
+@include user2.adb.texi
+
+@noindent
+Will display:
+
+@include user2.adb.res
+
+@c -----------------------------------------------------------------------
+@node TABLE statement
+@section TABLE statement
+@cindex Command, TABLE
+@c -----------------------------------------------------------------------
+
+@noindent
+Table tags are useful to generate @code{HTML} tables for example.
+Basically the code between the @code{@@@@TABLE@@@@} and
+@code{@@@@END_TABLE@@@@} will be repeated as many times as the vector
+tag has values. If many vector tags are specified in a table
+statement, the code between the table will be repeated a number of
+times equal to the maximum length of all vector tags in the
+@code{TABLE} tag statement.
+
+A @code{TABLE} tag statement is a kind of implicit iterator. This is a very
+important concept to build HTML tables. Using a composite tag variable in
+a @code{@@@@TABLE@@@@} tag statement it is possible to build very
+complex Web pages.
+
+Syntax:
+
+@cindex Command, TERMINATE_SECTIONS
+@cindex Command, REVERSE
+@cindex Command, TERSE
+@TPEXP{@@@@TABLE['REVERSE]['TERMINATE_SECTIONS]['TERSE]@@@@
+ ...
+ [@@@@BEGIN@@@@]
+ ...
+ [@@@@SECTION@@@@]
+ ...
+ [@@@@END@@@@]
+ ...
+@@@@END_TABLE@@@@}
+
+@noindent
+Let's have an example. With the following template:
+
+@include table.tmplt.texi
+
+@noindent
+And the following program:
+
+@include table.adb.texi
+
+@noindent
+The following output will be generated:
+
+@include table.adb.res
+
+@noindent
+Note that we use vector tag variables here. A discrete variable tag in a table
+will be replaced by the same (the only one) value for each row. A vector
+tag outside a table will be displayed as a list of values, each value
+being separated by a specified separator. The default is a comma and a
+space ", ".
+
+The complete prototype for the @code{Tag} Assoc function is:
+
+@TPEXP{@b{function} Assoc (Variable : @b{in} String;
+ Value : @b{in} Tag;
+ Separator : @b{in} String := Default_Separator)
+ @b{return} Association;
+@i{-- Build an Association (Variable = Value) to be added to Translate_Table.}
+@i{-- This is a tag association. Separator will be used when outputting the}
+@i{-- a flat representation of the Tag (outside a table statement).}}
+
+@noindent
+A table can contain many sections. The section to use will be selected
+depending on the current line. For example, a table with two sections
+will use different data on even and odd lines. This is useful when you
+want to alternate the line background color for a better readability
+when working on HTML pages.
+
+@noindent
+A table with sections can have attributes:
+
+@table @code
+
+@item REVERSE
+
+The items will be displayed in the reverse order.
+
+@item TERMINATE_SECTIONS
+
+This ensure that the table output will end
+with the last section. If the number of data in the vector variable tag
+is not a multiple of the number of sections then the remaining section
+will be complete with empty tag value.
+
+@item TERSE
+
+Empty lines won't be output. If the composite tag used into the table has
+an empty value then the corresponding line won't be output. This is
+especially important to avoid empty ending lines for table containing
+vector of different size.
+
+@end table
+
+@include table_section.tmplt.texi
+
+@noindent
+And the following program:
+
+@include table_section.adb.texi
+
+@noindent
+The following output will be generated:
+
+@include table_section.adb.res
+
+@noindent
+It is important to note that it is possible to avoid code
+duplication by using the @code{@@@@BEGIN@@@@} and @code{@@@@END@@@@}
+block statements. In this case only the code inside the block is part
+of the section, the code outside is common to all sections. Here is
+an example to generate an HTML table with different colors for each line:
+
+@noindent
+The template file above can be written this way:
+@include table_block.tmplt.texi
+
+@noindent
+Into a table construct there are some additional variable tags available:
+
+@table @code
+@item @@_UP_TABLE_LINE_@@
+@cindex @@_UP_TABLE_LINE_@@
+
+This tag will be replaced by the table line number of the upper table
+statement. It will be set to 0 outside a table statement or inside a
+single table statement.
+
+@item @@_TABLE_LINE_@@
+@cindex @@_TABLE_LINE_@@
+
+This tag will be replaced by the current table line number. It will be
+replaced by 0 outside a table statement.
+
+@item @@_NUMBER_LINE_@@
+@cindex @@_NUMBER_LINE_@@
+
+This is the number of line displayed in the table. It will be replaced
+by 0 outside a table statement.
+
+@item @@_TABLE_LEVEL_@@
+@cindex @@_TABLE_LEVEL_@@
+
+This is the table level number. A table construct declared in a table
+has a level value of 2. It will be replaced by 0 outside a table statement.
+
+@end table
+
+@noindent
+Let's have a look at a more complex example with mixed IF and TABLE
+statements.
+
+@noindent
+Here is the template:
+
+@include table_if.tmplt.texi
+
+@noindent
+And the following program:
+
+@include table_if.adb.texi
+
+@noindent
+The following output will be generated:
+
+@include table_if.adb.res
+
+@noindent
+Table tag statements can also be used with matrix tag or more nested
+tag variables. In this case, for a tag variable with N nested levels,
+the Nth closest enclosing @code{TABLE} tag statement will be used for
+the corresponding index. If there are not enough indexes, the last
+axis are just streamed as a single text value.
+
+@noindent
+Let's see what happens for a matrix tag:
+
+@enumerate
+
+@item Inside a table of level 2 (a TABLE statement inside a TABLE
+statement).
+
+@noindent
+In this case the first @code{TABLE} iterates through the matrix lines.
+First iteration will use the first matrix's vector, second
+iteration will use the second matrix's vector and so on. And the second
+@code{TABLE} will be used to iterate through the vector's values.
+
+@item Inside a table of level 1.
+
+@noindent
+In this case the @code{TABLE} iterates through the matrix lines. First
+iteration will use the first matrix's vector, second iteration will
+use the second matrix's vector and so on. Each vector is then converted to
+a string by concatenating all values using the specified separator
+(see Assoc constructor for Tag or @code{Set_Separator} routine).
+
+@item Outside a table statement.
+
+@noindent
+In this case the matrix is converted to a string. Each line represents
+a vector converted to a string using the supplied separator (see point
+2 above), and each vector is separated by an ASCII.LF character. The
+separators to use for each level can be specified using @code{Set_Separator}.
+
+@end enumerate
+
+@noindent
+Let's look at an example, with the following template:
+
+@include matrix.tmplt.texi
+
+@noindent
+Using the program:
+
+@include matrix.adb.texi
+
+@noindent
+We get the following result:
+
+@include matrix.adb.res
+
+@c ---------------------------------------------------------------------------
+@node SET statement
+@section SET statement
+@cindex Command, SET
+@c ---------------------------------------------------------------------------
+
+@noindent
+The @code{SET} command tag can be used to define a constant or an
+alias for an include file parameter. This is especially important in
+the context of reusable template files. For example, instead of having
+many references to the @b{red} color in an HTML document, it is better to
+define a constant @var{COLOR} with the value @b{red} and use @var{COLOR}
+everywhere. It is then easier to change the color afterward.
+
+@noindent
+The first form, to define a simple constant that can be used as any
+other variable in a template file, is:
+
+@TPEXP{@@@@SET@@@@ <name> = <value>}
+
+@noindent
+The second form, to define an alias for a template file parameter, is:
+
+@TPEXP{@@@@SET@@@@ <name> = $n [| <default_value>]}
+
+@noindent
+In this case <name> is an alias for the Nth include parameter. In this
+form it is also possible to define a default value that would be used
+if the Nth include parameter is not specified.
+
+Some examples:
+
+@TPEXP{@@@@SET@@@@ COLOR = red
+
+@@@@SET@@@@ SIZE = $1
+
+@@@@SET@@@@ COLOR = $4 | green}
+
+@noindent
+It is important to note that a variable is set global to a template
+file. It means that constants set into an include file are visible
+into the parent template. This is an important feature to be able to
+have a "theme" like include template file for example.
+
+@c ---------------------------------------------------------------------------
+@node INLINE statement
+@section INLINE statement
+@cindex Command, INLINE
+@c ---------------------------------------------------------------------------
+
+@noindent
+The @code{INLINE} statement can be used to better control the
+result's layout. For example it is not possible to have the results of
+a vector tag on the same line, also it is not possible to have a
+conditional output in the middle of a line. The @code{INLINE} block
+tag statement can be used to achieve that.
+
+Elements in an inlined block are separated by a single space by
+default. It is possible to specify any string as the separator. The
+text layout on an @code{INLINE} block has no meaning (the lines are
+trimmed on both side). As part of the inline command it is possible to
+specify texts to output before and after the block.
+
+@noindent
+Syntax:
+
+@TPEXP{@@@@INLINE[(<before>)(<separator>)(<after>)]@@@@
+ ...
+@@@@END_INLINE@@@@}
+
+@noindent
+There are three supported uses:
+
+@table @code
+@item @@@@INLINE@@@@
+
+In this case there is no text before and after the block and the
+separator is a single space.
+
+@item @@@@INLINE(<separator>)@@@@
+
+In this case there is no text before and after the block and the
+separator is the string given as parameter @i{<separator>}.
+
+@item @@@@INLINE(<before>)(<separator>)(<after>)@@@@
+
+In this case all three values are explicitly given.
+@end table
+
+@noindent
+@i{<before>}, @i{<separator>} and @i{<after>} may contain control characters:
+
+@table @code
+@item \n
+To insert a new-line (CR+LF or LF depending on the Operation System)
+
+@item \r
+To insert a line-feed
+
+@item \\
+To insert a single backslash
+@end table
+
+@noindent
+Let's look at an example, with the following template:
+
+@include table_inline.tmplt.texi
+
+@noindent
+Using the program:
+
+@include table_inline.adb.texi
+
+@noindent
+We get the following result:
+
+@include table_inline.adb.res
+
+@noindent
+Another example with an @code{IF} tag statement:
+
+@include if_inline.tmplt.texi
+
+@noindent
+Using the program:
+
+@include if_inline.adb.texi
+
+@noindent
+We get the following result:
+
+@include if_inline.adb.res
+
+@c ----------------------------------------------------------------------
+
+@node Other services
+@chapter Other services
+
+@menu
+* Tag utils::
+* XML representation::
+* Templates2Ada::
+* Templatespp::
+* Debug::
+@end menu
+
+@node Tag utils
+@section Tag utils
+@cindex Tag utils
+
+@noindent
+The child package @code{Utils}, @pxref{Templates_Parser.Utils}
+contains a routine to encode a Tag variable into a string and the
+inverse routine that build a Tag given it's string
+representation. This is useful for example, in the context of AWS to
+store a Tag into a session variable. See the AWS project.
+
+@node XML representation
+@section XML representation
+@cindex XML
+
+@noindent
+The child package @code{XML}, @pxref{Templates_Parser.XML} contains
+routines to save a @code{Translation_Set} into an XML document or to
+create a @code{Translation_Set} by loading an XML document. The XML
+document must conform to a specific @code{DTD} (see the Ada spec file).
+
+@c --------------------------------------------------------------------------
+@c -- Templates2Ada
+@c --------------------------------------------------------------------------
+
+@node Templates2Ada
+@section Templates2Ada
+@cindex templates2ada
+
+@noindent
+@code{templates2ada} is a tool that will generate a set of Ada
+packages from a templates file. These Ada packages can then be used in
+your application to avoid hard-coded strings, and help maintain the
+templates and the code synchronized.
+
+One of its goal is to ensure that you are only setting tags that actually
+exist in the template (and thus prevent, as much as possibly, typos in the
+name of tags); also, when combined with other tools, to help ensure that all
+tags needed by the template are properly set.
+
+Templates2ada also has special knowledge about HTTP constructs
+and will generate Ada constants for the HTTP parameters you might receive in
+return. Once more the goal is to help avoid typos in the Ada code.
+
+For instance, we will consider a simple template file, found in a local
+file @file{resources/block1.thtml}. This template contains the following simple
+html code:
+
+@TPEXP{
+<form>
+ <input name="PARAM1" value="@@_TAG1_@@" />
+ <input name="PARAM2" value="@@_TAG2_@@" />
+</form>}
+
+When you run @file{templates2ada} (as described in the following subsection),
+the following Ada package will be generated. Note that this is only the
+default output of @file{templates2ada}, which can be fully tailored to your
+needs.
+
+@TPEXP
+{@b{package} Templates.Block1 @b{is}
+ pragma Style_Checks (Off);
+ Template : constant string := "resources/block1.thtml";
+ Tag1 : constant String := "TAG1";
+ Tag2 : constant String := "TAG2";
+ @b{package} Http @b{is}
+ Param1 : constant String := "PARAM1";
+ Param2 : constant String := "PARAM2";
+ @b{end} Http;
+@b{end} Templates.Block1;}
+
+@code{templates2ada} knows about special constructs in the template file.
+Such templates are generally associated with html pages. It is possible to
+specify within the template itself what the url associated with the template
+is, so that it provides a convenient link between the two. Likewise, you
+can also define explicitly what the possible HTTP parameters are when loading
+that page. This is mostly useful when those parameters do not correspond to
+some form fields within the page itself. The syntax for these two is the
+following:
+
+@TPEXP{
+@@-- HTTP_URL(the_url): any comment you want
+@@-- HTTP_GET(param1_name): description of the parameter
+@@-- HTTP_GET(param2_name): description of the parameter
+}
+
+and that results in the following constants in the generated Ada package:
+
+@TPEXP{
+@b{package} Templates.Block1 @b{is}
+ URL : constant String := "the_url";
+ @b{package} Http @b{is}
+ Param1_Name : constant String := "param1_name";
+ Param2_Name : constant String := "param2_name";
+ @b{end} Http;
+@b{end} Templates.Block1;}
+
+The templates parser API lets you define your own custom filters. It is
+often useful for those filters to take parameters, just like the predefined
+filters do. However, it is also useful for these parameters to be able to
+check the value of other tags. One convention for doing this is to start the
+name of the parameter with "@". See for example the example in
+@pxref{User defined filters}. As a reminder, the template would look like
+
+@TPEXP{
+ <option value="foo" @@_SELECTED(@@SELECTED_STATUS):STATUS_@@ />}
+
+The @code{templates2ada} tool knows about this special convention, and would
+generate the following Ada package from this example:
+
+@TPEXP{
+@b{package} Templates.Block1 @b{is}
+ Selected_Status : @b{constant} String := "SELECTED_STATUS";
+ Status : @b{constant} String := "STATUS";
+@b{end} Templates.Block1;}
+
+@c --------------------------------------------------------------------------
+@c -- Templates2Ada -- Running templates2ada
+@c --------------------------------------------------------------------------
+
+@subsection Running templates2ada
+@noindent
+This tool parses all the template files found in a directory, and then
+generate an output file from these, based on a template file
+(a default example of which is provided as @file{templates.tads}). The
+latter contains in fact two examples, depending on whether one Ada
+package should be generated per template, or whether a single package
+should be build. In the former case, if you are using the GNAT compiler,
+you should run @code{gnatchop} on the resulting file. Here is an example
+to run this tool for the example we described above.
+
+@TPEXP
+{$ rm -f src/templates/*.ads
+$ templates2ada -d resources/ -o src/templates/generated -r
+$ cd src/templates; gnatchop -w -q generated
+$ rm -f src/templates/generated}
+
+If, in you Ada code, you no longer use hard-coded strings but only the
+constants found in the output packages, this will ensure that you are
+not trying to set tags that are never used in the template.
+
+The other check that impacts the quality of your code is to ensure that
+all tags that are used by the templates are properly set. This cannot be
+ensured by the compiler only, but using an external tool it is relatively
+to do.
+
+For instance, if you are using GNAT, we recommend the following additional
+targets in your @file{Makefile}:
+
+@TPEXP
+{ unset_tags:
+ gnat xref -u main.adb | fgrep templates-}
+
+This checks for all unused entities in files called @file{templates-*},
+which are the files generated by @file{templates2ada}.
+
+@file{templates2ada} can be used in other situations as well. For instance,
+one possible use is to generate, as output, a new template file that itself
+contains a series of @code{@@@@SET@@@@} commands. This generated file can
+then be @code{@@@@INCLUDE@@@@}d in your own templates. We have used it with
+some success when implementation a web server: it is often the case that hyper
+links refer to other pages in the same server. We have avoided hard-coding the
+URLs and the names of their HTTP GET parameters, by fetching these names from
+the generated file we were talking above.
+
+The templates parser comes with an example file, called @file{all_urls.thtml},
+which can be used with the @code{-t} switch to @code{templates2ada}, and will
+generated a template file as output. You would use it as:
+
+@TPEXP
+{@@@@INCLUDE@@@@ all_urls.html
+<a href="@@_URI_BLOCK1_@@?@@_HTTP_BLOCK1__PARAM1_@@=12" />}
+
+@noindent
+and this ensures the link is valid.
+
+@file{templates2ada} supports a number of command line switches:
+
+@itemize @bullet
+@item -d <dir>
+
+This switch specifies the directory in which the templates file are
+searched for.
+
+@item -o <file>
+
+This switch specifies the output file name
+
+@item -e <ext>
+
+This file specifies the file name extension for template files. All
+files in the directory that have this extension will be processed by
+templates2ada.
+
+@item -t <tmplt>
+
+This file specifies the template file to be used for the output file.
+The templates parser comes with an example for such a file, called
+@file{templates.tads}, that you can adapt to your own needs.
+
+@item -r
+
+Sub directories of the one specified by @code{-d} will also be searched.
+
+@item -v
+
+Activate the verbose mode. This will output a warning when an http
+parameter has a name made only of template parser tags, since no matching
+entry can then be created for it in the output file.
+
+@end itemize
+
+@c ---------------------------------------------------------------------------
+@c -- Templates2ada -- customizing
+@c ---------------------------------------------------------------------------
+
+@subsection Customizing templates2ada
+@noindent
+
+As was mentioned before, the output of templates2ada is a single file that
+results from parsing a template file. An example of such a file is provided
+in the templates2ada distribution, as @file{templates.tads}.
+
+You are strongly encouraged to modify this file to adapt it to your needs,
+and then use the @code{-t} switch to @file{templates2ada} to make use of your
+modified file.
+
+This file contains extensive comments on how to make use, and customize, it.
+This documentation is not duplicated here
+
+@c --------------------------------------------------------------------------
+@c -- Templatespp
+@c --------------------------------------------------------------------------
+
+@node Templatespp
+@section Templatespp
+@cindex templatespp
+
+@noindent
+@code{templatespp} is a pre-processor based on the template parser. It is
+generally used from scripts to process files and generate other files. One
+of the possible uses, for instance, is to write the CSS (style-sheet) of a
+web site as a template file (for instance @file{mycss.tcss}), and use
+template parser structures in there. This is a good way to share colors for
+instance, or to name constants, as is often done in Ada code.
+
+Here is a small example of such a CSS:
+
+@TPEXP{
+@@@@SET@@@@ COLOR1=blue
+@@@@SET@@@@ COLOR2=red
+@@@@SET@@@@ LENGTH1=10
+
+body @{background:@@_COLOR1_@@@}
+div @{background:@@_COLOR2_@@@}
+ul.class @{background:@@_COLOR1_@@@} /* same color as body */
+
+ul @{width:@@_ADD(3):LENGTH1_@@px@} /* ul 3 pixels wider than li */
+li @{width:@@_LENGTH1_@@px@}
+}
+
+Such a file would be processed with the following command line:
+
+@TPEXP{
+ templatespp -o mycss.css mycss.tcss
+}
+
+@c ---------------------------------------------------------------------------
+@c -- Debug
+@c ---------------------------------------------------------------------------
+
+@node Debug
+@section Debug
+@cindex Debug
+
+@noindent
+A set of routines to help to debug the @code{Templates_Parser} engine,
+@pxref{Templates_Parser.Debug}. For example, @code{Debug.Print_Tree}
+will display, to the standard output, a representation of the internal
+semantic tree for a template file.
+
+@c ----------------------------------------------------------------------
+@node Templates_Parser API Reference
+@appendix Templates_Parser API Reference
+@c ----------------------------------------------------------------------
+
+@menu
+Templates_Parser User's API
+
+* Templates_Parser::
+* Templates_Parser.Debug::
+* Templates_Parser.Utils::
+* Templates_Parser.XML::
+@end menu
+
+@page
+@node Templates_Parser
+@appendixsec Templates_Parser
+@cindex Templates_Parser
+
+@include templates_parser.ads.texi
+
+@page
+@node Templates_Parser.Debug
+@appendixsec Templates_Parser.Debug
+@cindex Templates_Parser.Debug
+
+@include templates_parser-debug.ads.texi
+
+@page
+@node Templates_Parser.Utils
+@appendixsec Templates_Parser.Utils
+@cindex Templates_Parser.Utils
+
+@include templates_parser-utils.ads.texi
+
+@page
+@node Templates_Parser.XML
+@appendixsec Templates_Parser.XML
+@cindex Templates_Parser.XML
+
+@include templates_parser-xml.ads.texi
+
+@c ----------------------------------------------------------------------
+
+@node Index
+@unnumbered Index
+
+@printindex cp
+
+@bye
============================================================
--- harness/sources/templates_parser/docs/tp.css 231d4ecbb438b01c2213a9e49e3fc95c6751ee79
+++ harness/sources/templates_parser/docs/tp.css 231d4ecbb438b01c2213a9e49e3fc95c6751ee79
@@ -0,0 +1,20 @@
+ pre.smallexample {background-color:rgb(240,240,240);
+ font-family: courier new,courier,fixed;
+ font-size: 14px;
+ margin: 0px 40px 0px 40px;
+ border-width: 1px 2px 2px 1px;
+ border-top-style: dotted;
+ border-left-style: dotted;
+ border-right-style: solid;
+ border-bottom-style: solid;
+ border-color: black;}
+ code {color:black;
+ font-family: courier new,courier,fixed;
+ font-size: 14px;}
+ body {font-family: arial,helvetica,sans-serif;
+ font-size: 16px;
+ width: 800px;
+ text-align: justify}
+ samp {font-family: courier new,courier,fixed;
+ font-size: 14px}
+
============================================================
--- harness/sources/templates_parser/docs/user.tmplt 38878e3ec8c644f0e6710880f2ed5c96b5e316b0
+++ harness/sources/templates_parser/docs/user.tmplt 38878e3ec8c644f0e6710880f2ed5c96b5e316b0
@@ -0,0 +1,5 @@
+@@IF@@ @_USER_@
+ <P>As a user you have a restricted access to this server.
+@@ELSE@@
+ <P>As an administrator you have full access to this server.
+@@END_IF@@
============================================================
--- harness/sources/templates_parser/makefile 75501f9da7836ce561f6aa8c78d60deefa0cace0
+++ harness/sources/templates_parser/makefile 75501f9da7836ce561f6aa8c78d60deefa0cace0
@@ -0,0 +1,211 @@
+############################################################################
+# Ada Web Server #
+# #
+# Copyright (C) 2003-2010, AdaCore #
+# #
+# This library is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or (at #
+# your option) any later version. #
+# #
+# This library is distributed in the hope that it will be useful, but #
+# WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU #
+# General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this library; if not, write to the Free Software Foundation, #
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #
+# #
+# As a special exception, if other files instantiate generics from this #
+# unit, or you link this unit with other files to produce an executable, #
+# this unit does not by itself cause the resulting executable to be #
+# covered by the GNU General Public License. This exception does not #
+# however invalidate any other reasons why the executable file might be #
+# covered by the GNU Public License. #
+############################################################################
+
+.SILENT:
+
+VERSION = 11.5
+GNAT = gnat
+
+DEBUG = false
+TP_TASKING = Standard_Tasking
+LIBRARY_TYPE = static
+PROCESSORS = 2
+PLATFORM = native
+
+TR = $(shell if [ -f /usr/bin/tr ]; then echo /usr/bin/tr; \
+ else echo tr; fi)
+DR_BUILD = $(shell echo $(PRJ_BUILD) | $(TR) "[[:upper:]]" "[[:lower:]]")
+BDIR = .build/$(PLATFORM)/$(DR_BUILD)
+
+prefix = $(dir $(shell which gnatls))..
+
+ENABLE_SHARED=$(shell $(GNAT) make -c -q -p \
+ -Pconfig/setup/test_shared 2>/dev/null && echo "true")
+TP_XMLADA = $(shell $(GNAT) make -c -q -p \
+ -Pconfig/setup/test_xmlada 2>/dev/null \
+ && echo "Installed")
+
+-include makefile.setup
+
+I_BIN = $(prefix)/bin
+I_INC = $(prefix)/include/templates_parser
+I_LIB = $(prefix)/lib/templates_parser
+I_GPR = $(prefix)/lib/gnat
+I_TGP = $(prefix)/lib/gnat/templates_parser
+I_DOC = $(prefix)/share/doc/templates_parser
+
+CP = cp -p
+MKDIR = mkdir -p
+
+ifeq (${OS}, Windows_NT)
+EXEEXT = .exe
+SOEXT = .dll
+LN = cp -p
+else
+ifeq ($(UNAME), Darwin)
+SOEXT = .dylib
+else
+ifeq ($(UNAME), HP-UX)
+SOEXT = .sl
+else
+SOEXT = .so
+endif
+endif
+EXEEXT =
+LN = ln -s
+endif
+
+CONFGPR = config/tp_config.gpr
+
+ifeq ($(DEFAULT_LIBRARY_TYPE),)
+DEFAULT_LIBRARY_TYPE=static
+endif
+
+ifeq ($(LIBRARY_TYPE),)
+LIBRARY_TYPE=static
+endif
+
+ifeq ($(DEBUG), true)
+PRJ_BUILD=Debug
+else
+PRJ_BUILD=Release
+endif
+
+ifeq ($(TP_XMLADA),)
+TP_XMLADA=Disabled
+endif
+
+ALL_OPTIONS = INCLUDES="$(INCLUDES)" LIBS="$(LIBS)" PRJ_BUILD="$(PRJ_BUILD)" \
+ TP_XMLADA="$(TP_XMLADA)" GNAT="$(GNAT)" \
+ PRJ_BUILD="$(PRJ_BUILD)" LIBRARY_TYPE="$(LIBRARY_TYPE)" \
+ BDIR="$(BDIR)" DEFAULT_LIBRARY_TYPE="$(DEFAULT_LIBRARY_TYPE)" \
+ ENABLE_SHARED="$(ENABLE_SHARED)" AWS="$(AWS)"
+
+GPROPTS = -XPRJ_BUILD=$(PRJ_BUILD) -XTP_XMLADA=$(TP_XMLADA) \
+ -XPROCESSORS=$(PROCESSORS)
+
+build: setup_config tp_xmlada.gpr
+ $(GNAT) make -p $(GPROPTS) -XLIBRARY_TYPE=static \
+ -Ptools/tools
+ifeq ($(ENABLE_SHARED), true)
+ $(GNAT) make -p $(GPROPTS) -XLIBRARY_TYPE=relocatable \
+ -Ptemplates_parser
+endif
+
+tp_xmlada.gpr: setup
+
+run_regtests test: build
+ $(MAKE) -C regtests $(ALL_OPTIONS) test
+
+doc:
+ $(MAKE) -C docs $(ALL_OPTIONS) doc
+ echo Templates_Parser Documentation built with success.
+
+setup:
+ifeq ($(TP_XMLADA), Installed)
+ cp config/tp_xmlada_installed.gpr tp_xmlada.gpr
+else
+ cp config/tp_xmlada_dummy.gpr tp_xmlada.gpr
+endif
+ $(MKDIR) -p $(BDIR)/static/obj
+ $(MKDIR) -p $(BDIR)/static/lib
+ifeq ($(ENABLE_SHARED), true)
+ $(MKDIR) -p $(BDIR)/relocatable/obj
+ $(MKDIR) -p $(BDIR)/relocatable/lib
+endif
+ echo "prefix=$(prefix)" > makefile.setup
+ echo "DEFAULT_LIBRARY_TYPE=$(DEFAULT_LIBRARY_TYPE)" >> makefile.setup
+ echo "ENABLE_SHARED=$(ENABLE_SHARED)" >> makefile.setup
+ echo "DEBUG=$(DEBUG)" >> makefile.setup
+ echo "PROCESSORS=$(PROCESSORS)" >> makefile.setup
+ echo "TP_XMLADA=$(TP_XMLADA)" >> makefile.setup
+
+setup_config:
+ echo 'project TP_Config is' > $(CONFGPR)
+ echo ' for Source_Dirs use ();' >> $(CONFGPR)
+ echo ' Default_Library_Type := "$(DEFAULT_LIBRARY_TYPE)";' \
+ >> $(CONFGPR)
+ echo ' Tasking := "$(TP_TASKING)";' >> $(CONFGPR)
+ echo 'end TP_Config;' >> $(CONFGPR)
+
+install_dirs:
+ $(MKDIR) -p $(I_BIN)
+ $(MKDIR) -p $(I_INC)
+ $(MKDIR) -p $(I_LIB)/static
+ifeq ($(ENABLE_SHARED), true)
+ $(MKDIR) -p $(I_LIB)/relocatable
+endif
+ $(MKDIR) -p $(I_GPR)
+ $(MKDIR) -p $(I_TGP)
+ $(MKDIR) -p $(I_DOC)
+
+install: install_dirs
+ $(CP) src/*.ad* $(I_INC)
+ $(CP) $(BDIR)/static/lib/* $(I_LIB)/static
+ifeq ($(ENABLE_SHARED), true)
+ $(CP) $(BDIR)/relocatable/lib/* $(I_LIB)/relocatable
+endif
+ $(CP) $(BDIR)/static/bin/* $(I_BIN)
+ $(CP) config/templates_parser.gpr $(I_GPR)
+ $(CP) config/tp_shared.gpr $(I_TGP)
+ $(CP) tp_xmlada.gpr $(I_TGP)
+ $(CP) $(CONFGPR) $(I_TGP)
+ifeq ($(TP_XMLADA), Installed)
+ $(CP) xsrc/*.ad* $(I_INC)
+endif
+ $(RM) -f $(I_LIB)/../libtemplates_parser$(SOEXT)
+ifeq ($(ENABLE_SHARED), true)
+ifeq ($(OS), Windows_NT)
+ $(LN) $(I_LIB)/relocatable/libtemplates_parser$(SOEXT) $(I_BIN)
+endif
+endif
+ -$(CP) docs/templates_parser*html $(I_DOC)
+ -$(CP) docs/templates_parser*pdf $(I_DOC)
+ -$(CP) docs/templates_parser*info* $(I_DOC)
+
+clean:
+ifeq ($(AWS),)
+ -$(GNAT) clean -XLIBRARY_TYPE=static $(GPROPTS) \
+ -Ptemplates_parser
+ -$(GNAT) clean -XLIBRARY_TYPE=static $(GPROPTS) \
+ -Ptools/tools
+ifeq ($(ENABLE_SHARED), true)
+ -$(GNAT) clean -XLIBRARY_TYPE=relocatable $(GPROPTS) \
+ -Ptemplates_parser
+endif
+endif
+ -$(MAKE) -C docs clean $(ALL_OPTIONS)
+ -$(MAKE) -C regtests clean $(ALL_OPTIONS)
+ $(RM) -fr .build makefile.setup
+
+distrib:
+ -rm templates_parser-?.?.tar*
+ tar cf templates_parser-$(VERSION).tar src/templates_parser*ad[sb] \
+ config tools docs xsrc/*.ad* tp_shared.gpr \
+ makefile \
+ templates_parser.gpr
+ gzip -9 templates_parser-$(VERSION).tar
============================================================
--- harness/sources/templates_parser/regtests/makefile bed48e581e824da0b674ab29b67ebc6553e9db6c
+++ harness/sources/templates_parser/regtests/makefile bed48e581e824da0b674ab29b67ebc6553e9db6c
@@ -0,0 +1,39 @@
+############################################################################
+# Ada Web Server #
+# #
+# Copyright (C) 2003-2010, AdaCore #
+# #
+# This library is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or (at #
+# your option) any later version. #
+# #
+# This library is distributed in the hope that it will be useful, but #
+# WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU #
+# General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this library; if not, write to the Free Software Foundation, #
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #
+# #
+# As a special exception, if other files instantiate generics from this #
+# unit, or you link this unit with other files to produce an executable, #
+# this unit does not by itself cause the resulting executable to be #
+# covered by the GNU General Public License. This exception does not #
+# however invalidate any other reasons why the executable file might be #
+# covered by the GNU Public License. #
+############################################################################
+
+.SILENT:
+
+build:
+ $(GNAT) make -q -p -XLIBRARY_TYPE=static \
+ -XPRJ_BUILD=$(PRJ_BUILD) -Pregtests
+
+test: build
+ ./testsuite.py --jobs=4
+
+clean:
+ -$(GNAT) clean -XLIBRARY_TYPE=static \
+ -XPRJ_BUILD=$(PRJ_BUILD) -Pregtests
============================================================
--- harness/sources/templates_parser/regtests/regtests.gpr 9a6e2d63090cd274588124b870bf52e1f40701c8
+++ harness/sources/templates_parser/regtests/regtests.gpr 9a6e2d63090cd274588124b870bf52e1f40701c8
@@ -0,0 +1,64 @@
+------------------------------------------------------------------------------
+-- Templates Parser --
+-- --
+-- Copyright (C) 2005-2010, AdaCore --
+-- --
+-- This library is free software; you can redistribute it and/or modify --
+-- it under the terms of the GNU General Public License as published by --
+-- the Free Software Foundation; either version 2 of the License, or (at --
+-- your option) any later version. --
+-- --
+-- This library is distributed in the hope that it will be useful, but --
+-- WITHOUT ANY WARRANTY; without even the implied warranty of --
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
+-- General Public License for more details. --
+-- --
+-- You should have received a copy of the GNU General Public License --
+-- along with this library; if not, write to the Free Software Foundation, --
+-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+------------------------------------------------------------------------------
+
+with "../templates_parser";
+with "../tp_shared";
+
+project Regtests is
+
+ for Languages use ("Ada", "Project file");
+
+ for Source_Dirs use ("src");
+ for Object_Dir use "../" & TP_Shared'Exec_Dir & "/robj";
+ for Exec_Dir use "../" & TP_Shared'Exec_Dir & "/rbin";
+ for Main use ("testme.adb", "print_tree.adb");
+
+ --------------
+ -- Compiler --
+ --------------
+
+ package Compiler is
+ for Default_Switches ("Ada") use ("-gnat05", "-g");
+ end Compiler;
+
+ -------------
+ -- Builder --
+ -------------
+
+ package Builder is
+ for Default_Switches ("Ada") use ("-m");
+ end Builder;
+
+ ---------
+ -- Ide --
+ ---------
+
+ package Ide is
+ for Vcs_Kind use "Subversion";
+ end Ide;
+
+end Regtests;
============================================================
--- harness/sources/templates_parser/regtests/run-test bf91256993d3d66493fdf71885e9a3e8ea9acdc5
+++ harness/sources/templates_parser/regtests/run-test bf91256993d3d66493fdf71885e9a3e8ea9acdc5
@@ -0,0 +1,32 @@
+#!/usr/bin/env gnatpython
+"""Usage: run-test [options] test_dir
+
+Run a test located in test_dir
+"""
+
+from gnatpython.main import Main
+from gnatpython.testdriver import TestRunner, add_run_test_options
+
+import sys
+
+def main():
+ """Run a single test"""
+ m = Main(add_targets_options=True)
+ add_run_test_options(m)
+ m.parse_args()
+ if not m.args:
+ sys.exit("Error: 1 argument expected. See -h")
+
+ if m.options.restricted_discs is not None:
+ m.options.restricted_discs = m.options.restricted_discs.split(',')
+ t = TestRunner(m.args[0],
+ m.options.discs,
+ m.options.output_dir,
+ m.options.tmp,
+ m.options.enable_cleanup,
+ m.options.restricted_discs,
+ len(m.args) > 1 and m.args[1:] or None)
+
+ t.execute()
+if __name__ == '__main__':
+ main()
============================================================
--- harness/sources/templates_parser/regtests/src/print_tree.adb 5bcbe01b6ffcb29642aa172a711cf0ab910fba73
+++ harness/sources/templates_parser/regtests/src/print_tree.adb 5bcbe01b6ffcb29642aa172a711cf0ab910fba73
@@ -0,0 +1,47 @@
+------------------------------------------------------------------------------
+-- Templates Parser --
+-- --
+-- Copyright (C) 2005 --
+-- AdaCore --
+-- --
+-- This library is free software; you can redistribute it and/or modify --
+-- it under the terms of the GNU General Public License as published by --
+-- the Free Software Foundation; either version 2 of the License, or (at --
+-- your option) any later version. --
+-- --
+-- This library is distributed in the hope that it will be useful, but --
+-- WITHOUT ANY WARRANTY; without even the implied warranty of --
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
+-- General Public License for more details. --
+-- --
+-- You should have received a copy of the GNU General Public License --
+-- along with this library; if not, write to the Free Software Foundation, --
+-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+------------------------------------------------------------------------------
+
+with Templates_Parser.Debug;
+with Ada.Text_IO;
+with Ada.Command_Line;
+
+procedure Print_Tree is
+
+ use Ada;
+ use Templates_Parser;
+
+begin
+ if Command_Line.Argument_Count /= 1 then
+ Text_IO.New_Line;
+ Text_IO.Put_Line ("Usage: print_tree <filename>");
+ Text_IO.New_Line;
+
+ else
+ Debug.Print_Tree (Command_Line.Argument (1));
+ end if;
+end Print_Tree;
============================================================
--- harness/sources/templates_parser/regtests/src/test_callback.adb 6d705b321cf2abb90240a2c119758fe0b61483e6
+++ harness/sources/templates_parser/regtests/src/test_callback.adb 6d705b321cf2abb90240a2c119758fe0b61483e6
@@ -0,0 +1,145 @@
+------------------------------------------------------------------------------
+-- Templates Parser --
+-- --
+-- Copyright (C) 2005-2009, AdaCore --
+-- --
+-- This library is free software; you can redistribute it and/or modify --
+-- it under the terms of the GNU General Public License as published by --
+-- the Free Software Foundation; either version 2 of the License, or (at --
+-- your option) any later version. --
+-- --
+-- This library is distributed in the hope that it will be useful, but --
+-- WITHOUT ANY WARRANTY; without even the implied warranty of --
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
+-- General Public License for more details. --
+-- --
+-- You should have received a copy of the GNU General Public License --
+-- along with this library; if not, write to the Free Software Foundation, --
+-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+------------------------------------------------------------------------------
+
+with Ada.Text_IO;
+
+package body Test_Callback is
+
+ ---------------
+ -- Dimension --
+ ---------------
+
+ overriding function Dimension
+ (C : not null access Cursor_Tag;
+ Var : String) return Natural is
+ begin
+ if Var = "CURSOR" then
+ return 2;
+ elsif Var = "C_MAT3" then
+ return 3;
+ else
+ return 0;
+ end if;
+ end Dimension;
+
+ ------------
+ -- Length --
+ ------------
+
+ overriding function Length
+ (C : not null access Cursor_Tag;
+ Var : String;
+ Path : Templates_Parser.Dynamic.Path) return Natural is
+ begin
+ if Var = "CURSOR" then
+ if Path'Length = 1 then
+ return 3;
+ elsif Path'Length /= 2 then
+ raise Constraint_Error;
+ else
+ return Path (Path'Last);
+ end if;
+
+ elsif Var = "C_MAT3" then
+ if Path'Length = 1 then
+ return 3;
+ elsif Path'Length = 2 then
+ return 2;
+ elsif Path'Length /= 3 then
+ raise Constraint_Error;
+ else
+ return Path (Path'Last) + 2;
+ end if;
+
+ else
+ return 0;
+ end if;
+ end Length;
+
+ --------------
+ -- Callback --
+ --------------
+
+ overriding procedure Value
+ (L : not null access Lazy_Tag;
+ Var : String;
+ S : in out Templates_Parser.Translate_Set)
+ is
+ use Templates_Parser;
+ begin
+ if Var = "VAR1" then
+ Insert (S, Assoc ("VAR1", "Callback value"));
+ elsif Var = "DYNAMIC" then
+ Insert (S, Assoc ("DYNAMIC", "This is a dynamic tag"));
+ elsif Var = "N" then
+ Insert (S, Assoc ("N", Integer'Image (L.N)));
+ L.N := L.N + 1;
+ elsif Var = "DYN_VECT" then
+ Insert (S, Assoc ("DYN_VECT", +"12" & "89" & "90" & "2"));
+ elsif Var = "TMPLT_NAME" then
+ Insert (S, Assoc (Var, +"incl.tmplt"));
+ end if;
+ end Value;
+
+ overriding procedure Value
+ (L : not null access Log_Context;
+ Var : String;
+ S : in out Templates_Parser.Translate_Set)
+ is
+ pragma Unreferenced (L, S);
+ begin
+ Ada.Text_IO.Put_Line ("Tag " & Var & " missing.");
+ end Value;
+
+ overriding function Value
+ (C : not null access Cursor_Tag;
+ Var : String;
+ Path : Templates_Parser.Dynamic.Path) return String is
+ begin
+ if Var = "CURSOR" then
+ if Path'Length = 2 then
+ return "CT" & Path (Path'First)'Img & Path (Path'First + 1)'Img;
+ else
+ raise Constraint_Error;
+ end if;
+
+ elsif Var = "C_MAT3" then
+ if Path'Length = 3 then
+ return "CMAT"
+ & Path (Path'First)'Img
+ & Path (Path'First + 1)'Img
+ & Path (Path'First + 2)'Img;
+ else
+ raise Constraint_Error;
+ end if;
+
+ else
+ raise Constraint_Error;
+ end if;
+ end Value;
+
+end Test_Callback;
============================================================
--- harness/sources/templates_parser/regtests/src/test_callback.ads bcbb9790a3fc2c349eee94375ddfe312bee1faf4
+++ harness/sources/templates_parser/regtests/src/test_callback.ads bcbb9790a3fc2c349eee94375ddfe312bee1faf4
@@ -0,0 +1,68 @@
+------------------------------------------------------------------------------
+-- Templates Parser --
+-- --
+-- Copyright (C) 2005-2009, AdaCore --
+-- --
+-- This library is free software; you can redistribute it and/or modify --
+-- it under the terms of the GNU General Public License as published by --
+-- the Free Software Foundation; either version 2 of the License, or (at --
+-- your option) any later version. --
+-- --
+-- This library is distributed in the hope that it will be useful, but --
+-- WITHOUT ANY WARRANTY; without even the implied warranty of --
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
+-- General Public License for more details. --
+-- --
+-- You should have received a copy of the GNU General Public License --
+-- along with this library; if not, write to the Free Software Foundation, --
+-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+------------------------------------------------------------------------------
+
+with Templates_Parser;
+
+package Test_Callback is
+
+ type Lazy_Tag is new Templates_Parser.Dynamic.Lazy_Tag with private;
+
+ overriding procedure Value
+ (L : not null access Lazy_Tag;
+ Var : String;
+ S : in out Templates_Parser.Translate_Set);
+
+ type Log_Context is new Templates_Parser.Dynamic.Lazy_Tag with null record;
+
+ overriding procedure Value
+ (L : not null access Log_Context;
+ Var : String;
+ S : in out Templates_Parser.Translate_Set);
+
+ type Cursor_Tag is new Templates_Parser.Dynamic.Cursor_Tag with null record;
+
+ overriding function Dimension
+ (C : not null access Cursor_Tag;
+ Var : String) return Natural;
+
+ overriding function Length
+ (C : not null access Cursor_Tag;
+ Var : String;
+ Path : Templates_Parser.Dynamic.Path) return Natural;
+
+ overriding function Value
+ (C : not null access Cursor_Tag;
+ Var : String;
+ Path : Templates_Parser.Dynamic.Path) return String;
+
+private
+
+ type Lazy_Tag is new Templates_Parser.Dynamic.Lazy_Tag with record
+ N : Natural := 0;
+ end record;
+
+end Test_Callback;
============================================================
--- harness/sources/templates_parser/regtests/src/testme.adb 05bc11858da0507b66230376cf435405390a58f0
+++ harness/sources/templates_parser/regtests/src/testme.adb 05bc11858da0507b66230376cf435405390a58f0
@@ -0,0 +1,180 @@
+------------------------------------------------------------------------------
+-- Templates Parser --
+-- --
+-- Copyright (C) 2005-2010, AdaCore --
+-- --
+-- This library is free software; you can redistribute it and/or modify --
+-- it under the terms of the GNU General Public License as published by --
+-- the Free Software Foundation; either version 2 of the License, or (at --
+-- your option) any later version. --
+-- --
+-- This library is distributed in the hope that it will be useful, but --
+-- WITHOUT ANY WARRANTY; without even the implied warranty of --
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
+-- General Public License for more details. --
+-- --
+-- You should have received a copy of the GNU General Public License --
+-- along with this library; if not, write to the Free Software Foundation, --
+-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+------------------------------------------------------------------------------
+
+-- Procedure to test the template_parser
+
+with Ada.Text_IO;
+with Ada.Command_Line;
+with Templates_Parser;
+with Test_Callback;
+
+procedure Testme is
+
+ use Ada;
+
+ package TP renames Templates_Parser;
+
+ use type TP.Vector_Tag;
+ use type TP.Matrix_Tag;
+
+ L_Tag : aliased Test_Callback.Lazy_Tag;
+ C_Tag : aliased Test_Callback.Cursor_Tag;
+
+ KUT : Boolean := False;
+ -- Keep Unknown Tags
+
+ Cached : Boolean := False;
+ -- Set to true if cache must be activated
+
+ S1 : constant TP.Vector_Tag := +"single_value";
+
+ V1 : constant TP.Vector_Tag := +"A1.1" & "A1.2" & "A1.3";
+ V2 : constant TP.Vector_Tag := +"A2.1" & "A2.2" & "A2.3";
+ V3 : constant TP.Vector_Tag := +"A3.1" & "A3.2" & "A3.3";
+ V4 : constant TP.Vector_Tag := +"A4.1" & "A4.2" & "A4.3";
+
+ M : constant TP.Matrix_Tag := +V1 & V2 & V3 & V4;
+
+ V5 : constant TP.Vector_Tag := +"one" & "two" & "three";
+ V6 : constant TP.Vector_Tag := +"(one)" & "(two)";
+
+ M2 : constant TP.Matrix_Tag := +V5 & V6;
+
+ I1 : constant TP.Vector_Tag := +"1";
+ I2 : constant TP.Vector_Tag := "2" & I1;
+ I3 : constant TP.Vector_Tag := "3" & I2;
+
+ VB0 : TP.Tag;
+ VB1 : constant TP.Tag := +"B1.1" & "B1.2" & "B1.3";
+ VB2 : constant TP.Tag := +"B2.1" & "B2.2" & "B2.3";
+ VB3 : constant TP.Tag := +"B3.1" & "B3.2" & "B3.3";
+ VB4 : constant TP.Tag := +"B4.1" & "B4.2" & "B4.3";
+
+ MB : constant TP.Tag := +VB1 & VB2 & VB3 & VB4;
+
+ Nested_3 : constant TP.Tag := +M & MB;
+
+ C : constant TP.Tag := +"Class1" & "Class2";
+ Mx : constant TP.Tag := +"Member1.1" & "Member1.2";
+ My : constant TP.Tag := +"Member2.1" & "Member2.2" & "Member2.3";
+ MF : constant TP.Tag := +Mx & My;
+
+ M11 : constant TP.Tag := +"M 1 1 1" & "M 1 1 2" & "M 1 1 3";
+ M12 : constant TP.Tag := +"M 1 2 1" & "M 1 2 2" & "M 1 2 3" & "M 1 2 4";
+ M21 : constant TP.Tag := +"M 2 1 1" & "M 2 1 2" & "M 2 1 3";
+ M22 : constant TP.Tag := +"M 2 2 1" & "M 2 2 2" & "M 2 2 3" & "M 2 2 4";
+ M31 : constant TP.Tag := +"M 3 1 1" & "M 3 1 2" & "M 3 1 3";
+ M32 : constant TP.Tag := +"M 3 2 1" & "M 3 2 2" & "M 3 2 3" & "M 3 2 4";
+
+ MC1 : constant TP.Tag := +M11 & M12;
+ MC2 : constant TP.Tag := +M21 & M22;
+ MC3 : constant TP.Tag := +M31 & M32;
+ CM3 : constant TP.Tag := +MC1 & MC2 & MC3;
+
+ FA : constant TP.Tag := +"FA1" & "FA2" & "FA3";
+ RT : constant TP.Tag := +"RT1" & "RT2" & "RT3";
+ RA : constant TP.Tag := +"RA1" & "RA2" & "RA3";
+
+ Translations : TP.Translate_Table
+ := (TP.Assoc ("VAR1", "a value"),
+ TP.Assoc ("VAR2",
+ +"a table" & "with" & "many" & "values" & "to" & "be"
+ & "displayed" & "one" & "by" & "one"),
+ TP.Assoc ("VAR3", +"one" & "two" & "three"),
+ TP.Assoc ("VAR4", ""),
+ TP.Assoc ("VAR5", "T R uE"),
+ TP.Assoc ("VAR6", "A"),
+ TP.Assoc ("VAR7", +"ZZ" & "A3.4" & "A4.2" & "again!" & "A2.2" & "!"),
+ TP.Assoc ("CLASS", C),
+ TP.Assoc ("MEMBER", MF),
+ TP.Assoc ("COND1", False),
+ TP.Assoc ("COND2", True),
+ TP.Assoc ("LABELS", +"lab1" & "lab2" & "lab3" & "lab4"),
+ TP.Assoc ("MATDSIZE", M2),
+ TP.Assoc ("SIZE0", VB0),
+ TP.Assoc ("V5", V5),
+ TP.Assoc ("V6", V6),
+ TP.Assoc ("INV", I3),
+ TP.Assoc ("MAT", M),
+ TP.Assoc ("ONE", 1),
+ TP.Assoc ("TWO", 2),
+ TP.Assoc ("THREE", 3),
+ TP.Assoc ("NUM0", 123456),
+ TP.Assoc ("NUM1", "1234567.98765"),
+ TP.Assoc ("NUM2", "12.98765"),
+ TP.Assoc ("NUM3", "123.9"),
+ TP.Assoc ("NUM4", "1234.98"),
+ TP.Assoc ("NUM5", ".98"),
+ TP.Assoc ("TEST_VAR", "Test"),
+ TP.Assoc ("FILTER",
+ " a text with < 6 words & good 92 chars like + > "),
+ TP.Assoc ("TEXT",
+ "toto titi tata tata titi toto tata titi toto titi titi"),
+ TP.Assoc ("REPL", "[_\1_]"),
+ TP.Assoc ("WITHLF", "First line" & ASCII.LF & "Second line"),
+ TP.Assoc ("WITHBR", "First line<br>Second line"),
+ TP.Assoc ("VT", "vector_tag"),
+ TP.Assoc ("DATE1", "1967-09-09"),
+ TP.Assoc ("DATE2", "2003-12-12 13:34:12"),
+ TP.Assoc ("URL1", "http://host:port/"),
+ TP.Assoc ("URL2", "http://host/"),
+ TP.Assoc ("URL3", "http://host/?"),
+ TP.Assoc ("URL4", "http://host/?param1=un"),
+ TP.Assoc ("URL5", "http://host:port/?param1=un¶m2=deux"),
+ TP.Assoc ("URL6", "http://host?param1=un¶m2=deux¶m3=trois"),
+ TP.Assoc ("NESTED_3", Nested_3),
+ TP.Assoc ("FILE", "/home/user"),
+ TP.Assoc ("FILE2", "test.out"),
+ TP.Assoc ("S1", S1),
+ TP.Assoc ("QUOTE", """"""),
+ TP.Assoc ("MAT3", CM3),
+ TP.Assoc ("ACCENTS", "<été ça être paramètre à paraître> & """),
+ TP.Assoc ("FOREIGN_ATTRS", FA),
+ TP.Assoc ("REFERENCED_TABLES", RT),
+ TP.Assoc ("REFERENCED_ATTRS", RA)
+ );
+
+begin
+ if Command_Line.Argument_Count = 2 then
+ if Command_Line.Argument (2) = "kut" then
+ KUT := True;
+ elsif Command_Line.Argument (2) = "cache" then
+ Cached := True;
+ end if;
+ end if;
+
+ declare
+ Result : constant String :=
+ TP.Parse (Command_Line.Argument (1), Translations,
+ Cached => Cached,
+ Keep_Unknown_Tags => KUT,
+ Lazy_Tag => L_Tag'Unchecked_Access,
+ Cursor_Tag => C_Tag'Unchecked_Access);
+ begin
+ Text_IO.Put (Result);
+ end;
+end Testme;
============================================================
--- harness/sources/templates_parser/regtests/test_support.py d0c115e7becb5e7c635fe17e5b5b5711f80da1da
+++ harness/sources/templates_parser/regtests/test_support.py d0c115e7becb5e7c635fe17e5b5b5711f80da1da
@@ -0,0 +1,33 @@
+"""
+This module contains support functions for all test.py
+"""
+
+import os
+import sys
+
+# Change directory
+
+TEST = sys.modules['__main__']
+TESTDIR = os.path.dirname(TEST.__file__)
+TEST_NAME = os.path.basename(TESTDIR)
+os.chdir(TESTDIR)
+
+from gnatpython.ex import Run
+
+def gnatmake(prj):
+ """Compile a project with gnatmake"""
+ cmd = ["gnatmake", "-p", "-gnat05", "-P" + prj, "-bargs", "-E"]
+ process = Run(cmd)
+ if process.status:
+ print process.out
+
+def run(bin, options=None, output_file=None):
+ """Run a test"""
+ if options is None:
+ options = []
+ if "TIMEOUT" in os.environ:
+ timeout = int(os.environ["TIMEOUT"])
+ else:
+ timeout = 300
+
+ Run([bin] + options, output=output_file, timeout=timeout)
============================================================
--- harness/sources/templates_parser/regtests/tests/0001_tag_demo/gtag.tmplt f20cd5f5b02df06fed253abefd25f9a92b9b27c7
+++ harness/sources/templates_parser/regtests/tests/0001_tag_demo/gtag.tmplt f20cd5f5b02df06fed253abefd25f9a92b9b27c7
@@ -0,0 +1,62 @@
+
+GTAG
+
+----------------------------
+0 : @_GTAG_@
+
+----------------------------
+@@TABLE@@
+1 : @_GTAG_@
+@@END_TABLE@@
+
+----------------------------
+@@TABLE@@
+@@TABLE@@
+2 : @_GTAG_@
+@@END_TABLE@@
+@@END_TABLE@@
+
+----------------------------
+M0 : @_MTAG_@
+
+@@TABLE@@
+M1 : @_MTAG_@
+@@END_TABLE@@
+
+@@TABLE@@
+@@TABLE@@
+M2 : @_MTAG_@
+@@END_TABLE@@
+@@END_TABLE@@
+
+============================
+
+VTAG
+
+----------------------------
+0 : @_VTAG_@
+
+----------------------------
+@@TABLE@@
+1 : @_VTAG_@
+@@END_TABLE@@
+
+----------------------------
+@@TABLE@@
+[
+@@TABLE@@
+V2 : @_VTAG_@
+2 : @_GTAG_@
+@@END_TABLE@@
+]
+@@END_TABLE@@
+
+@@TABLE@@
+[
+@@TABLE@@
+O2 : @_OTAG_@
+M2 : @_MTAG_@
+@@END_TABLE@@
+]
+@@END_TABLE@@
+----------------------------
============================================================
--- harness/sources/templates_parser/regtests/tests/0001_tag_demo/tag_demo.adb a61acdb32ff290717c20949aa08d034f86303a82
+++ harness/sources/templates_parser/regtests/tests/0001_tag_demo/tag_demo.adb a61acdb32ff290717c20949aa08d034f86303a82
@@ -0,0 +1,121 @@
+------------------------------------------------------------------------------
+-- Templates Parser --
+-- --
+-- Copyright (C) 2005-2009, AdaCore --
+-- --
+-- This library is free software; you can redistribute it and/or modify --
+-- it under the terms of the GNU General Public License as published by --
+-- the Free Software Foundation; either version 2 of the License, or (at --
+-- your option) any later version. --
+-- --
+-- This library is distributed in the hope that it will be useful, but --
+-- WITHOUT ANY WARRANTY; without even the implied warranty of --
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
+-- General Public License for more details. --
+-- --
+-- You should have received a copy of the GNU General Public License --
+-- along with this library; if not, write to the Free Software Foundation, --
+-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+------------------------------------------------------------------------------
+
+with Ada.Text_IO;
+with Templates_Parser;
+with Templates_Parser.Debug;
+with Templates_Parser.Utils;
+
+procedure Tag_Demo is
+
+ use Ada.Text_IO;
+ use Templates_Parser;
+
+ procedure Check_IV (Name : String; T : Tag);
+ -- Check Image/Value convertion
+
+ --------------
+ -- Check_IV --
+ --------------
+
+ procedure Check_IV (Name : String; T : Tag) is
+ Img : constant String := Utils.Image (T);
+ NT : constant Tag := Utils.Value (Img);
+ begin
+ Put_Line (Name & "=>" & Img);
+ Put_Line (Name & " " & Utils.Image (NT));
+
+ if Img = Utils.Image (NT) then
+ Put_Line (" Ok");
+ else
+ Put_Line (" NOk");
+ end if;
+ end Check_IV;
+
+ T1 : Tag;
+ T2 : Tag;
+ T : Tag;
+
+ VT1 : Vector_Tag;
+ VT2 : Vector_Tag;
+ MT : Matrix_Tag;
+
+ I1 : constant Vector_Tag := +"1";
+ I2 : constant Vector_Tag := "2" & I1;
+ I3 : constant Vector_Tag := "3" & I2;
+
+ M : Tag;
+
+ QT : Tag;
+
+begin
+ T1 := T1 & "first" & "1_1_1";
+ T2 := T2 & "second";
+
+ T := T & T1 & T2;
+
+ M := +T & T & T;
+
+ Put_Line ("T1");
+ Debug.Print (T1);
+
+ Put_Line ("T2");
+ Debug.Print (T2);
+
+ Put_Line ("T");
+ Debug.Print (T);
+
+ Put_Line ("I3");
+ Debug.Print (Tag (I3));
+
+ Put_Line ("M");
+ Debug.Print (M);
+
+ Set_Separator (T, (1 => ASCII.LF));
+
+ VT1 := VT1 & "first" & "1_1_1";
+ VT2 := VT2 & "second";
+
+ MT := +VT1 & VT2;
+
+ Put_Line
+ (Parse ("gtag.tmplt",
+ Translate_Table'
+ (Assoc ("GTAG", T),
+ Assoc ("VTAG", T1),
+ Assoc ("MTAG", MT),
+ Assoc ("OTAG", VT1))));
+
+ Put_Line ("-----------------------");
+ Check_IV ("T1", T1);
+ Check_IV ("T2", T2);
+ Check_IV ("T ", T);
+
+ QT := QT & "un essai" & "with "" a quote" & "and ( and )";
+ T := T & QT;
+ Check_IV ("T", T);
+end Tag_Demo;
============================================================
--- harness/sources/templates_parser/regtests/tests/0001_tag_demo/tag_demo.gpr ecefd0a923820c7615c533d80c0da8103625b271
+++ harness/sources/templates_parser/regtests/tests/0001_tag_demo/tag_demo.gpr ecefd0a923820c7615c533d80c0da8103625b271
@@ -0,0 +1,35 @@
+------------------------------------------------------------------------------
+-- Templates Parser --
+-- --
+-- Copyright (C) 2010, AdaCore --
+-- --
+-- This library is free software; you can redistribute it and/or modify --
+-- it under the terms of the GNU General Public License as published by --
+-- the Free Software Foundation; either version 2 of the License, or (at --
+-- your option) any later version. --
+-- --
+-- This library is distributed in the hope that it will be useful, but --
+-- WITHOUT ANY WARRANTY; without even the implied warranty of --
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
+-- General Public License for more details. --
+-- --
+-- You should have received a copy of the GNU General Public License --
+-- along with this library; if not, write to the Free Software Foundation, --
+-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+------------------------------------------------------------------------------
+
+with "templates_parser";
+
+project Tag_Demo is
+
+ for Source_Dirs use (".");
+ for Main use ("tag_demo.adb");
+
+end Tag_Demo;
============================================================
--- harness/sources/templates_parser/regtests/tests/0001_tag_demo/test.out 321dc192f30736a5462bc3050eaedd74908bcb51
+++ harness/sources/templates_parser/regtests/tests/0001_tag_demo/test.out 321dc192f30736a5462bc3050eaedd74908bcb51
@@ -0,0 +1,135 @@
+T1
+ (N= 2, Min= 1, Max= 1, Nested_Level= 1
+ first
+ 1_1_1
+ )
+T2
+ (N= 1, Min= 1, Max= 1, Nested_Level= 1
+ second
+ )
+T
+ (N= 2, Min= 1, Max= 2, Nested_Level= 2
+ (N= 2, Min= 1, Max= 1, Nested_Level= 1
+ first
+ 1_1_1
+ )
+ (N= 1, Min= 1, Max= 1, Nested_Level= 1
+ second
+ )
+ )
+I3
+ (N= 3, Min= 1, Max= 1, Nested_Level= 1
+ 3
+ 2
+ 1
+ )
+M
+ (N= 3, Min= 2, Max= 2, Nested_Level= 3
+ (N= 2, Min= 1, Max= 2, Nested_Level= 2
+ (N= 2, Min= 1, Max= 1, Nested_Level= 1
+ first
+ 1_1_1
+ )
+ (N= 1, Min= 1, Max= 1, Nested_Level= 1
+ second
+ )
+ )
+ (N= 2, Min= 1, Max= 2, Nested_Level= 2
+ (N= 2, Min= 1, Max= 1, Nested_Level= 1
+ first
+ 1_1_1
+ )
+ (N= 1, Min= 1, Max= 1, Nested_Level= 1
+ second
+ )
+ )
+ (N= 2, Min= 1, Max= 2, Nested_Level= 2
+ (N= 2, Min= 1, Max= 1, Nested_Level= 1
+ first
+ 1_1_1
+ )
+ (N= 1, Min= 1, Max= 1, Nested_Level= 1
+ second
+ )
+ )
+ )
+
+GTAG
+
+----------------------------
+0 : first, 1_1_1
+second
+
+----------------------------
+1 : first, 1_1_1
+1 : second
+
+----------------------------
+2 : first
+2 : 1_1_1
+2 : second
+2 :
+
+----------------------------
+M0 : first, 1_1_1
+second
+
+M1 : first, 1_1_1
+M1 : second
+
+M2 : first
+M2 : 1_1_1
+M2 : second
+M2 :
+
+============================
+
+VTAG
+
+----------------------------
+0 : first, 1_1_1
+
+----------------------------
+1 : first
+1 : 1_1_1
+
+----------------------------
+[
+V2 : first
+2 : first
+V2 : 1_1_1
+2 : 1_1_1
+]
+[
+V2 : first
+2 : second
+V2 : 1_1_1
+2 :
+]
+
+[
+O2 : first
+M2 : first
+O2 : 1_1_1
+M2 : 1_1_1
+]
+[
+O2 : first
+M2 : second
+O2 : 1_1_1
+M2 :
+]
+----------------------------
+-----------------------
+T1=>("first","1_1_1")
+T1 ("first","1_1_1")
+ Ok
+T2=>("second")
+T2 ("second")
+ Ok
+T =>(("first","1_1_1")("second"))
+T (("first","1_1_1")("second"))
+ Ok
+T=>(("first","1_1_1")("second")("un essai","with "" a quote","and ( and )"))
+T (("first","1_1_1")("second")("un essai","with "" a quote","and ( and )"))
+ Ok
============================================================
--- harness/sources/templates_parser/regtests/tests/0001_tag_demo/test.py a85fab1f8506a1cbd53c7133170a5fcbf288a32f
+++ harness/sources/templates_parser/regtests/tests/0001_tag_demo/test.py a85fab1f8506a1cbd53c7133170a5fcbf288a32f
@@ -0,0 +1,4 @@
+from test_support import *
+
+gnatmake('tag_demo')
+run('tag_demo')
============================================================
--- harness/sources/templates_parser/regtests/tests/0002_testme/test.out 2d0a7ed89fd4c9468d7db483ec388476b86834b0
+++ harness/sources/templates_parser/regtests/tests/0002_testme/test.out 2d0a7ed89fd4c9468d7db483ec388476b86834b0
@@ -0,0 +1,207 @@
+
+This is a test template for Templates_Parser
+
+A single value : a value
+
+Should be 0 : 0
+Should be 0 : 0
+
+A table :
+
+a table
+with
+many
+values
+to
+be
+displayed
+one
+by
+one
+
+ OK: test passed
+
+ OK: test passed
+
+ ligne: {1 of 10} [a table]
+ ligne: Another section 2 [with]
+ Well a another one [many]
+ ligne: {4 of 10} [values]
+ ligne: Another section 5 [to]
+ Well a another one [be]
+ ligne: {7 of 10} [displayed]
+ ligne: Another section 8 [one]
+ Well a another one [by]
+ ligne: {10 of 10} [one]
+
+ ligne: {1 of 10} [a table]
+ ligne: Another section 2 [with]
+ Well a another one [many]
+ ligne: {4 of 10} [values]
+ ligne: Another section 5 [to]
+ Well a another one [be]
+ ligne: {7 of 10} [displayed]
+ ligne: Another section 8 [one]
+ Well a another one [by]
+ ligne: {10 of 10} [one]
+ ligne: Another section 11 []
+ Well a another one []
+
+ A| 1 a table (1)
+ B| 1 one (2)
+ B| {2 of 3} another table
+ C| 1 one (3)
+ C| 2 two (3)
+ C| 3 three (3)
+ B| 3 three (2)
+ A| 2 with (1)
+ B| 1 one (2)
+ B| {2 of 3} another table
+ C| 1 one (3)
+ C| 2 two (3)
+ C| 3 three (3)
+ B| 3 three (2)
+ A| 3 many (1)
+ B| 1 one (2)
+ B| {2 of 3} another table
+ C| 1 one (3)
+ C| 2 two (3)
+ C| 3 three (3)
+ B| 3 three (2)
+ A| 4 values (1)
+ B| 1 one (2)
+ B| {2 of 3} another table
+ C| 1 one (3)
+ C| 2 two (3)
+ C| 3 three (3)
+ B| 3 three (2)
+ A| 5 to (1)
+ B| 1 one (2)
+ B| {2 of 3} another table
+ C| 1 one (3)
+ C| 2 two (3)
+ C| 3 three (3)
+ B| 3 three (2)
+ A| 6 be (1)
+ B| 1 one (2)
+ B| {2 of 3} another table
+ C| 1 one (3)
+ C| 2 two (3)
+ C| 3 three (3)
+ B| 3 three (2)
+ A| 7 displayed (1)
+ B| 1 one (2)
+ B| {2 of 3} another table
+ C| 1 one (3)
+ C| 2 two (3)
+ C| 3 three (3)
+ B| 3 three (2)
+ A| 8 one (1)
+ B| 1 one (2)
+ B| {2 of 3} another table
+ C| 1 one (3)
+ C| 2 two (3)
+ C| 3 three (3)
+ B| 3 three (2)
+ A| 9 by (1)
+ B| 1 one (2)
+ B| {2 of 3} another table
+ C| 1 one (3)
+ C| 2 two (3)
+ C| 3 three (3)
+ B| 3 three (2)
+ A| 10 one (1)
+ B| 1 one (2)
+ B| {2 of 3} another table
+ C| 1 one (3)
+ C| 2 two (3)
+ C| 3 three (3)
+ B| 3 three (2)
+
+Cond1: FALSE - NO - NON
+Cond2: TRUE - YES - OUI
+
+Should be 0 : 0
+Should be 0 : 0
+[INFO] testme.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[TEXT] This is a test template for Templates_Parser
+[TEXT]
+[TEXT] A single value : @_VAR1_@
+[TEXT]
+[TEXT] Should be 0 : @_NUMBER_LINE_@
+[TEXT] Should be 0 : @_TABLE_LEVEL_@
+[TEXT]
+[TEXT] A table :
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_VAR2_@
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[IF] @_COND1_@
+ [TEXT] ERROR: test is not correct
+[ELSE]
+ [TEXT] OK: test passed
+[END_IF]
+[TEXT]
+[IF] @_COND2_@
+ [TEXT] OK: test passed
+[ELSE]
+ [TEXT] ERROR: test is not correct
+[END_IF]
+[TEXT]
+[IF] @_COND2_@
+ [TABLE]
+ [BLOCK]
+ [SECTION]
+ [TEXT] ligne: {@_TABLE_LINE_@ of @_NUMBER_LINE_@} [@_VAR2_@]
+ [SECTION]
+ [TEXT] ligne: Another section @_TABLE_LINE_@ [@_VAR2_@]
+ [SECTION]
+ [TEXT] Well a another one [@_VAR2_@]
+ [END_BLOCK]
+ [END_TABLE]
+[ELSE]
+[END_IF]
+[TEXT]
+[TABLE] TERMINATE_SECTIONS
+ [BLOCK]
+ [SECTION]
+ [TEXT] ligne: {@_TABLE_LINE_@ of @_NUMBER_LINE_@} [@_VAR2_@]
+ [SECTION]
+ [TEXT] ligne: Another section @_TABLE_LINE_@ [@_VAR2_@]
+ [SECTION]
+ [TEXT] Well a another one [@_VAR2_@]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] A| @_TABLE_LINE_@ @_VAR2_@ (@_TABLE_LEVEL_@)
+ [TABLE]
+ [BLOCK]
+ [SECTION]
+ [TEXT] B| @_TABLE_LINE_@ @_VAR3_@ (@_TABLE_LEVEL_@)
+ [SECTION]
+ [TEXT] B| {@_TABLE_LINE_@ of @_NUMBER_LINE_@} another table
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] C| @_TABLE_LINE_@ @_VAR3_@ (@_TABLE_LEVEL_@)
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] Cond1: @_COND1_@ - @_YES_NO:COND1_@ - @_OUI_NON:COND1_@
+[TEXT] Cond2: @_COND2_@ - @_YES_NO:COND2_@ - @_OUI_NON:COND2_@
+[TEXT]
+[TEXT] Should be 0 : @_NUMBER_LINE_@
+[TEXT] Should be 0 : @_TABLE_LEVEL_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0002_testme/test.py 2bd94302fd6b2bef976df7fefe51f23281eab391
+++ harness/sources/templates_parser/regtests/tests/0002_testme/test.py 2bd94302fd6b2bef976df7fefe51f23281eab391
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme.tmplt"])
+run('print_tree', ["testme.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0002_testme/testme.tmplt bd67948e191163cfd2bb5fe07a73bae12b7295f9
+++ harness/sources/templates_parser/regtests/tests/0002_testme/testme.tmplt bd67948e191163cfd2bb5fe07a73bae12b7295f9
@@ -0,0 +1,61 @@
+
+This is a test template for Templates_Parser
+
+A single value : @_VAR1_@
+
+Should be 0 : @_NUMBER_LINE_@
+Should be 0 : @_TABLE_LEVEL_@
+
+A table :
+
+@@TABLE@@
+@_VAR2_@
+@@END_TABLE@@
+
+@@IF@@ @_COND1_@
+ ERROR: test is not correct
+@@ELSE@@
+ OK: test passed
+@@END_IF@@
+
+@@IF@@ @_COND2_@
+ OK: test passed
+@@ELSE@@
+ ERROR: test is not correct
+@@END_IF@@
+
+@@IF@@ @_COND2_@
+ @@TABLE@@
+ ligne: {@_TABLE_LINE_@ of @_NUMBER_LINE_@} [@_VAR2_@]
+ @@SECTION@@
+ ligne: Another section @_TABLE_LINE_@ [@_VAR2_@]
+ @@SECTION@@
+ Well a another one [@_VAR2_@]
+ @@END_TABLE@@
+@@END_IF@@
+
+@@TABLE@@ @@TERMINATE_SECTIONS@@
+ ligne: {@_TABLE_LINE_@ of @_NUMBER_LINE_@} [@_VAR2_@]
+@@SECTION@@
+ ligne: Another section @_TABLE_LINE_@ [@_VAR2_@]
+@@SECTION@@
+ Well a another one [@_VAR2_@]
+@@END_TABLE@@
+
+@@TABLE@@
+ A| @_TABLE_LINE_@ @_VAR2_@ (@_TABLE_LEVEL_@)
+ @@TABLE@@
+ B| @_TABLE_LINE_@ @_VAR3_@ (@_TABLE_LEVEL_@)
+ @@SECTION@@
+ B| {@_TABLE_LINE_@ of @_NUMBER_LINE_@} another table
+ @@TABLE@@
+ C| @_TABLE_LINE_@ @_VAR3_@ (@_TABLE_LEVEL_@)
+ @@END_TABLE@@
+ @@END_TABLE@@
+@@END_TABLE@@
+
+Cond1: @_COND1_@ - @_YES_NO:COND1_@ - @_OUI_NON:COND1_@
+Cond2: @_COND2_@ - @_YES_NO:COND2_@ - @_OUI_NON:COND2_@
+
+Should be 0 : @_NUMBER_LINE_@
+Should be 0 : @_TABLE_LEVEL_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0003_testme/test.out 9e62c4278d4b76cf9083af748d39ae4d5d64274e
+++ harness/sources/templates_parser/regtests/tests/0003_testme/test.out 9e62c4278d4b76cf9083af748d39ae4d5d64274e
@@ -0,0 +1,118 @@
+
+
+ one A Value
+ two A Value
+ three A Value
+
+ ONE
+ TWO
+ THREE
+
+ atable
+ with
+ many
+ values
+ to
+ be
+ displayed
+ one
+ by
+ one
+
+ ok, VAR1 exist.
+
+ ok, VAR1 exist.
+
+ ok, VARx does not exist.
+
+ ok, VARx does not exist.
+
+ ok, VARx does not exist.
+
+ ok, VARx does not exist.
+
+ ok, VARx does not exist.
+
+ ok, VAR1 exist.
+
+A List : one, two, three
+[INFO] testme2.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_VAR_DOES_NOT_EXIST_@
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_VAR3_@ @_CAPITALIZE:VAR1_@
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_UPPER:VAR3_@ @_VAR4_@
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_NO_SPACE:VAR2_@
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[IF] @_EXIST:VAR1_@
+ [TEXT] ok, VAR1 exist.
+[ELSE]
+ [TEXT] error, VAR1 exist.
+[END_IF]
+[TEXT]
+[IF] (@_EXIST:VAR1_@ = TRUE)
+ [TEXT] ok, VAR1 exist.
+[ELSE]
+ [TEXT] error, VAR1 exist.
+[END_IF]
+[TEXT]
+[IF] @_EXIST:VARx_@
+ [TEXT] nok, VARx does not exist.
+[ELSE]
+ [TEXT] ok, VARx does not exist.
+[END_IF]
+[TEXT]
+[IF] (@_EXIST:VARx_@ = TRUE)
+ [TEXT] nok, VARx does not exist.
+[ELSE]
+ [TEXT] ok, VARx does not exist.
+[END_IF]
+[TEXT]
+[IF] (@_EXIST:VARx_@ = FALSE)
+ [TEXT] ok, VARx does not exist.
+[ELSE]
+ [TEXT] nok, VARx does not exist.
+[END_IF]
+[TEXT]
+[IF] (@_IS_EMPTY:VARx_@ = TRUE)
+ [TEXT] ok, VARx does not exist.
+[ELSE]
+ [TEXT] nok, VARx does not exist.
+[END_IF]
+[TEXT]
+[IF] @_IS_EMPTY:VARx_@
+ [TEXT] ok, VARx does not exist.
+[ELSE]
+ [TEXT] nok, VARx does not exist.
+[END_IF]
+[TEXT]
+[IF] @_IS_EMPTY:VAR1_@
+ [TEXT] nok, VAR1 exist.
+[ELSE]
+ [TEXT] ok, VAR1 exist.
+[END_IF]
+[TEXT]
+[TEXT] A List : @_VAR3_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0003_testme/test.py 4ffbfb3172d74aaca60b454d9756d9deea9c4945
+++ harness/sources/templates_parser/regtests/tests/0003_testme/test.py 4ffbfb3172d74aaca60b454d9756d9deea9c4945
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme2.tmplt"])
+run('print_tree', ["testme2.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0003_testme/testme2.tmplt 44e528f5f7d3ad90edc9043a28deab4fbcbb4cc7
+++ harness/sources/templates_parser/regtests/tests/0003_testme/testme2.tmplt 44e528f5f7d3ad90edc9043a28deab4fbcbb4cc7
@@ -0,0 +1,66 @@
+
+@@TABLE@@
+ @_VAR_DOES_NOT_EXIST_@
+@@END_TABLE@@
+
+@@TABLE@@
+ @_VAR3_@ @_CAPITALIZE:VAR1_@
+@@END_TABLE@@
+
+@@TABLE@@
+ @_UPPER:VAR3_@ @_VAR4_@
+@@END_TABLE@@
+
+@@TABLE@@
+ @_NO_SPACE:VAR2_@
+@@END_TABLE@@
+
+@@IF@@ @_EXIST:VAR1_@
+ ok, VAR1 exist.
+@@ELSE@@
+ error, VAR1 exist.
+@@END_IF@@
+
+@@IF@@ @_EXIST:VAR1_@ = TRUE
+ ok, VAR1 exist.
+@@ELSE@@
+ error, VAR1 exist.
+@@END_IF@@
+
+@@IF@@ @_EXIST:VARx_@
+ nok, VARx does not exist.
+@@ELSE@@
+ ok, VARx does not exist.
+@@END_IF@@
+
+@@IF@@ @_EXIST:VARx_@ = TRUE
+ nok, VARx does not exist.
+@@ELSE@@
+ ok, VARx does not exist.
+@@END_IF@@
+
+@@IF@@ @_EXIST:VARx_@ = FALSE
+ ok, VARx does not exist.
+@@ELSE@@
+ nok, VARx does not exist.
+@@END_IF@@
+
+@@IF@@ @_IS_EMPTY:VARx_@ = TRUE
+ ok, VARx does not exist.
+@@ELSE@@
+ nok, VARx does not exist.
+@@END_IF@@
+
+@@IF@@ @_IS_EMPTY:VARx_@
+ ok, VARx does not exist.
+@@ELSE@@
+ nok, VARx does not exist.
+@@END_IF@@
+
+@@IF@@ @_IS_EMPTY:VAR1_@
+ nok, VAR1 exist.
+@@ELSE@@
+ ok, VAR1 exist.
+@@END_IF@@
+
+A List : @_VAR3_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0004_testme/test.out 964d44c09af73cbf8e8ef5af162d2278d6a7a94b
+++ harness/sources/templates_parser/regtests/tests/0004_testme/test.out 964d44c09af73cbf8e8ef5af162d2278d6a7a94b
@@ -0,0 +1,133 @@
+
+Some text here.
+
+
+
+ one A Value
+ two A Value
+ three A Value
+
+ ONE
+ TWO
+ THREE
+
+ atable
+ with
+ many
+ values
+ to
+ be
+ displayed
+ one
+ by
+ one
+
+ ok, VAR1 exist.
+
+ ok, VAR1 exist.
+
+ ok, VARx does not exist.
+
+ ok, VARx does not exist.
+
+ ok, VARx does not exist.
+
+ ok, VARx does not exist.
+
+ ok, VARx does not exist.
+
+ ok, VAR1 exist.
+
+A List : one, two, three
+
+Some text after the include.
+[INFO] testme5.tmplt
+ -> testme2.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[TEXT] Some text here.
+[TEXT]
+[INCLUDE] testme2.tmplt
+ $0 = testme2.tmplt
+ [INFO] testme2.tmplt
+ [C_INFO] 1 FALSE
+ [TEXT]
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_VAR_DOES_NOT_EXIST_@
+ [END_BLOCK]
+ [END_TABLE]
+ [TEXT]
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_VAR3_@ @_CAPITALIZE:VAR1_@
+ [END_BLOCK]
+ [END_TABLE]
+ [TEXT]
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_UPPER:VAR3_@ @_VAR4_@
+ [END_BLOCK]
+ [END_TABLE]
+ [TEXT]
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_NO_SPACE:VAR2_@
+ [END_BLOCK]
+ [END_TABLE]
+ [TEXT]
+ [IF] @_EXIST:VAR1_@
+ [TEXT] ok, VAR1 exist.
+ [ELSE]
+ [TEXT] error, VAR1 exist.
+ [END_IF]
+ [TEXT]
+ [IF] (@_EXIST:VAR1_@ = TRUE)
+ [TEXT] ok, VAR1 exist.
+ [ELSE]
+ [TEXT] error, VAR1 exist.
+ [END_IF]
+ [TEXT]
+ [IF] @_EXIST:VARx_@
+ [TEXT] nok, VARx does not exist.
+ [ELSE]
+ [TEXT] ok, VARx does not exist.
+ [END_IF]
+ [TEXT]
+ [IF] (@_EXIST:VARx_@ = TRUE)
+ [TEXT] nok, VARx does not exist.
+ [ELSE]
+ [TEXT] ok, VARx does not exist.
+ [END_IF]
+ [TEXT]
+ [IF] (@_EXIST:VARx_@ = FALSE)
+ [TEXT] ok, VARx does not exist.
+ [ELSE]
+ [TEXT] nok, VARx does not exist.
+ [END_IF]
+ [TEXT]
+ [IF] (@_IS_EMPTY:VARx_@ = TRUE)
+ [TEXT] ok, VARx does not exist.
+ [ELSE]
+ [TEXT] nok, VARx does not exist.
+ [END_IF]
+ [TEXT]
+ [IF] @_IS_EMPTY:VARx_@
+ [TEXT] ok, VARx does not exist.
+ [ELSE]
+ [TEXT] nok, VARx does not exist.
+ [END_IF]
+ [TEXT]
+ [IF] @_IS_EMPTY:VAR1_@
+ [TEXT] nok, VAR1 exist.
+ [ELSE]
+ [TEXT] ok, VAR1 exist.
+ [END_IF]
+ [TEXT]
+ [TEXT] A List : @_VAR3_@
+[TEXT]
+[TEXT] Some text after the include.
============================================================
--- harness/sources/templates_parser/regtests/tests/0004_testme/test.py 45c7107212981637618e0b8acc93e94b578c7548
+++ harness/sources/templates_parser/regtests/tests/0004_testme/test.py 45c7107212981637618e0b8acc93e94b578c7548
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme5.tmplt"])
+run('print_tree', ["testme5.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0004_testme/testme2.tmplt 44e528f5f7d3ad90edc9043a28deab4fbcbb4cc7
+++ harness/sources/templates_parser/regtests/tests/0004_testme/testme2.tmplt 44e528f5f7d3ad90edc9043a28deab4fbcbb4cc7
@@ -0,0 +1,66 @@
+
+@@TABLE@@
+ @_VAR_DOES_NOT_EXIST_@
+@@END_TABLE@@
+
+@@TABLE@@
+ @_VAR3_@ @_CAPITALIZE:VAR1_@
+@@END_TABLE@@
+
+@@TABLE@@
+ @_UPPER:VAR3_@ @_VAR4_@
+@@END_TABLE@@
+
+@@TABLE@@
+ @_NO_SPACE:VAR2_@
+@@END_TABLE@@
+
+@@IF@@ @_EXIST:VAR1_@
+ ok, VAR1 exist.
+@@ELSE@@
+ error, VAR1 exist.
+@@END_IF@@
+
+@@IF@@ @_EXIST:VAR1_@ = TRUE
+ ok, VAR1 exist.
+@@ELSE@@
+ error, VAR1 exist.
+@@END_IF@@
+
+@@IF@@ @_EXIST:VARx_@
+ nok, VARx does not exist.
+@@ELSE@@
+ ok, VARx does not exist.
+@@END_IF@@
+
+@@IF@@ @_EXIST:VARx_@ = TRUE
+ nok, VARx does not exist.
+@@ELSE@@
+ ok, VARx does not exist.
+@@END_IF@@
+
+@@IF@@ @_EXIST:VARx_@ = FALSE
+ ok, VARx does not exist.
+@@ELSE@@
+ nok, VARx does not exist.
+@@END_IF@@
+
+@@IF@@ @_IS_EMPTY:VARx_@ = TRUE
+ ok, VARx does not exist.
+@@ELSE@@
+ nok, VARx does not exist.
+@@END_IF@@
+
+@@IF@@ @_IS_EMPTY:VARx_@
+ ok, VARx does not exist.
+@@ELSE@@
+ nok, VARx does not exist.
+@@END_IF@@
+
+@@IF@@ @_IS_EMPTY:VAR1_@
+ nok, VAR1 exist.
+@@ELSE@@
+ ok, VAR1 exist.
+@@END_IF@@
+
+A List : @_VAR3_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0004_testme/testme5.tmplt 2a9f81e8fe79d1dc793475c404439d0453621e28
+++ harness/sources/templates_parser/regtests/tests/0004_testme/testme5.tmplt 2a9f81e8fe79d1dc793475c404439d0453621e28
@@ -0,0 +1,6 @@
+
+Some text here.
+
+@@INCLUDE@@ testme2.tmplt
+
+Some text after the include.
============================================================
--- harness/sources/templates_parser/regtests/tests/0005_testme/test.out e67d6a16f1d30ad2d86e8ceac2e46733731feb6c
+++ harness/sources/templates_parser/regtests/tests/0005_testme/test.out e67d6a16f1d30ad2d86e8ceac2e46733731feb6c
@@ -0,0 +1,383 @@
+
+This is a test for the matrix feature:
+
+Table1: 0 1 4 1
+Table2: 1 1 3 2
+A1.1
+Table2: 1 2 3 2
+A1.2
+Table2: 1 3 3 2
+A1.3
+---
+[A1.1, A1.2, A1.3]
+Table1: 0 2 4 1
+Table2: 2 1 3 2
+A2.1
+Table2: 2 2 3 2
+A2.2
+Table2: 2 3 3 2
+A2.3
+---
+[A2.1, A2.2, A2.3]
+Table1: 0 3 4 1
+Table2: 3 1 3 2
+A3.1
+Table2: 3 2 3 2
+A3.2
+Table2: 3 3 3 2
+A3.3
+---
+[A3.1, A3.2, A3.3]
+Table1: 0 4 4 1
+Table2: 4 1 3 2
+A4.1
+Table2: 4 2 3 2
+A4.2
+Table2: 4 3 3 2
+A4.3
+---
+[A4.1, A4.2, A4.3]
+
+======================================================================
+
+A table with labels (vector):
+
+
+Label: lab1
+
+Table1: 0 1 4 1
+Table2: 1 1 3 2
+A1.1
+Table2: 1 2 3 2
+A1.2
+Table2: 1 3 3 2
+A1.3
+
+Label: lab2
+
+Table1: 0 2 4 1
+Table2: 2 1 3 2
+A2.1
+Table2: 2 2 3 2
+A2.2
+Table2: 2 3 3 2
+A2.3
+
+Label: lab3
+
+Table1: 0 3 4 1
+Table2: 3 1 3 2
+A3.1
+Table2: 3 2 3 2
+A3.2
+Table2: 3 3 3 2
+A3.3
+
+Label: lab4
+
+Table1: 0 4 4 1
+Table2: 4 1 3 2
+A4.1
+Table2: 4 2 3 2
+A4.2
+Table2: 4 3 3 2
+A4.3
+
+======================================================================
+
+A matrix inside a table with labels (vectors):
+
+
+Label: lab1
+
+
+Table1: 1 1 4 2
+Table2: 1 1 3 3
+A1.1
+Table2: 1 2 3 3
+A1.2
+Table2: 1 3 3 3
+A1.3
+
+Table1: 1 2 4 2
+Table2: 2 1 3 3
+A2.1
+Table2: 2 2 3 3
+A2.2
+Table2: 2 3 3 3
+A2.3
+
+Table1: 1 3 4 2
+Table2: 3 1 3 3
+A3.1
+Table2: 3 2 3 3
+A3.2
+Table2: 3 3 3 3
+A3.3
+
+Table1: 1 4 4 2
+Table2: 4 1 3 3
+A4.1
+Table2: 4 2 3 3
+A4.2
+Table2: 4 3 3 3
+A4.3
+
+Label: lab2
+
+
+Table1: 2 1 4 2
+Table2: 1 1 3 3
+A1.1
+Table2: 1 2 3 3
+A1.2
+Table2: 1 3 3 3
+A1.3
+
+Table1: 2 2 4 2
+Table2: 2 1 3 3
+A2.1
+Table2: 2 2 3 3
+A2.2
+Table2: 2 3 3 3
+A2.3
+
+Table1: 2 3 4 2
+Table2: 3 1 3 3
+A3.1
+Table2: 3 2 3 3
+A3.2
+Table2: 3 3 3 3
+A3.3
+
+Table1: 2 4 4 2
+Table2: 4 1 3 3
+A4.1
+Table2: 4 2 3 3
+A4.2
+Table2: 4 3 3 3
+A4.3
+
+Label: lab3
+
+
+Table1: 3 1 4 2
+Table2: 1 1 3 3
+A1.1
+Table2: 1 2 3 3
+A1.2
+Table2: 1 3 3 3
+A1.3
+
+Table1: 3 2 4 2
+Table2: 2 1 3 3
+A2.1
+Table2: 2 2 3 3
+A2.2
+Table2: 2 3 3 3
+A2.3
+
+Table1: 3 3 4 2
+Table2: 3 1 3 3
+A3.1
+Table2: 3 2 3 3
+A3.2
+Table2: 3 3 3 3
+A3.3
+
+Table1: 3 4 4 2
+Table2: 4 1 3 3
+A4.1
+Table2: 4 2 3 3
+A4.2
+Table2: 4 3 3 3
+A4.3
+
+Label: lab4
+
+
+Table1: 4 1 4 2
+Table2: 1 1 3 3
+A1.1
+Table2: 1 2 3 3
+A1.2
+Table2: 1 3 3 3
+A1.3
+
+Table1: 4 2 4 2
+Table2: 2 1 3 3
+A2.1
+Table2: 2 2 3 3
+A2.2
+Table2: 2 3 3 3
+A2.3
+
+Table1: 4 3 4 2
+Table2: 3 1 3 3
+A3.1
+Table2: 3 2 3 3
+A3.2
+Table2: 3 3 3 3
+A3.3
+
+Table1: 4 4 4 2
+Table2: 4 1 3 3
+A4.1
+Table2: 4 2 3 3
+A4.2
+Table2: 4 3 3 3
+A4.3
+
+======================================================================
+
+A matrix outside a table:
+
+A1.1, A1.2, A1.3
+A2.1, A2.2, A2.3
+A3.1, A3.2, A3.3
+A4.1, A4.2, A4.3
+
+======================================================================
+
+A matrix with section:
+
+S1) A1.1
+S2) A1.2
+S1) A1.3
+S1) A2.1
+S2) A2.2
+S1) A2.3
+S1) A3.1
+S2) A3.2
+S1) A3.3
+S1) A4.1
+S2) A4.2
+S1) A4.3
+
+Idem with @@TERMINATE_SECTIONS@@
+
+S1) A1.1
+S2) A1.2
+S1) A1.3
+S2)
+S1) A2.1
+S2) A2.2
+S1) A2.3
+S2)
+S1) A3.1
+S2) A3.2
+S1) A3.3
+S2)
+S1) A4.1
+S2) A4.2
+S1) A4.3
+S2)
+
+[INFO] testme6.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[TEXT] This is a test for the matrix feature:
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] Table1: @_UP_TABLE_LINE_@ @_TABLE_LINE_@ @_NUMBER_LINE_@ @_TABLE_LEVEL_@
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] Table2: @_UP_TABLE_LINE_@ @_TABLE_LINE_@ @_NUMBER_LINE_@ @_TABLE_LEVEL_@
+ [TEXT] @_MAT_@
+ [END_BLOCK]
+ [END_TABLE]
+ [TEXT] ---
+ [TEXT] [@_MAT_@]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] ======================================================================
+[TEXT]
+[TEXT] A table with labels (vector):
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT]
+ [TEXT] Label: @_LABELS_@
+ [TEXT]
+ [TEXT] Table1: @_UP_TABLE_LINE_@ @_TABLE_LINE_@ @_NUMBER_LINE_@ @_TABLE_LEVEL_@
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] Table2: @_UP_TABLE_LINE_@ @_TABLE_LINE_@ @_NUMBER_LINE_@ @_TABLE_LEVEL_@
+ [TEXT] @_MAT_@
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] ======================================================================
+[TEXT]
+[TEXT] A matrix inside a table with labels (vectors):
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT]
+ [TEXT] Label: @_LABELS_@
+ [TEXT]
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT]
+ [TEXT] Table1: @_UP_TABLE_LINE_@ @_TABLE_LINE_@ @_NUMBER_LINE_@ @_TABLE_LEVEL_@
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] Table2: @_UP_TABLE_LINE_@ @_TABLE_LINE_@ @_NUMBER_LINE_@ @_TABLE_LEVEL_@
+ [TEXT] @_MAT_@
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] ======================================================================
+[TEXT]
+[TEXT] A matrix outside a table:
+[TEXT]
+[TEXT] @_MAT_@
+[TEXT]
+[TEXT] ======================================================================
+[TEXT]
+[TEXT] A matrix with section:
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TABLE]
+ [BLOCK]
+ [SECTION]
+ [TEXT] S1) @_MAT_@
+ [SECTION]
+ [TEXT] S2) @_MAT_@
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] Idem with @@TERMINATE_SECTIONS@@
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TABLE] TERMINATE_SECTIONS
+ [BLOCK]
+ [SECTION]
+ [TEXT] S1) @_MAT_@
+ [SECTION]
+ [TEXT] S2) @_MAT_@
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
============================================================
--- harness/sources/templates_parser/regtests/tests/0005_testme/test.py b6ba7828ac1de81e75ce440243f8c1e76ae9cefe
+++ harness/sources/templates_parser/regtests/tests/0005_testme/test.py b6ba7828ac1de81e75ce440243f8c1e76ae9cefe
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme6.tmplt"])
+run('print_tree', ["testme6.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0005_testme/testme6.tmplt c0ba888f12b4bec3f49e7c9496bb06cdc34bcffe
+++ harness/sources/templates_parser/regtests/tests/0005_testme/testme6.tmplt c0ba888f12b4bec3f49e7c9496bb06cdc34bcffe
@@ -0,0 +1,73 @@
+
+This is a test for the matrix feature:
+
+@@TABLE@@
+Table1: @_UP_TABLE_LINE_@ @_TABLE_LINE_@ @_NUMBER_LINE_@ @_TABLE_LEVEL_@
+@@TABLE@@
+Table2: @_UP_TABLE_LINE_@ @_TABLE_LINE_@ @_NUMBER_LINE_@ @_TABLE_LEVEL_@
+@_MAT_@
+@@END_TABLE@@
+---
+[@_MAT_@]
+@@END_TABLE@@
+
+======================================================================
+
+A table with labels (vector):
+
+@@TABLE@@
+
+Label: @_LABELS_@
+
+Table1: @_UP_TABLE_LINE_@ @_TABLE_LINE_@ @_NUMBER_LINE_@ @_TABLE_LEVEL_@
+@@TABLE@@
+Table2: @_UP_TABLE_LINE_@ @_TABLE_LINE_@ @_NUMBER_LINE_@ @_TABLE_LEVEL_@
+@_MAT_@
+@@END_TABLE@@
+@@END_TABLE@@
+
+======================================================================
+
+A matrix inside a table with labels (vectors):
+
+@@TABLE@@
+
+Label: @_LABELS_@
+
+@@TABLE@@
+
+Table1: @_UP_TABLE_LINE_@ @_TABLE_LINE_@ @_NUMBER_LINE_@ @_TABLE_LEVEL_@
+@@TABLE@@
+Table2: @_UP_TABLE_LINE_@ @_TABLE_LINE_@ @_NUMBER_LINE_@ @_TABLE_LEVEL_@
+@_MAT_@
+@@END_TABLE@@
+@@END_TABLE@@
+@@END_TABLE@@
+
+======================================================================
+
+A matrix outside a table:
+
+@_MAT_@
+
+======================================================================
+
+A matrix with section:
+
+@@TABLE@@
+@@TABLE@@
+S1) @_MAT_@
+@@SECTION@@
+S2) @_MAT_@
+@@END_TABLE@@
+@@END_TABLE@@
+
+Idem with @@TERMINATE_SECTIONS@@
+
+@@TABLE@@
+@@TABLE@@ @@TERMINATE_SECTIONS@@
+S1) @_MAT_@
+@@SECTION@@
+S2) @_MAT_@
+@@END_TABLE@@
+@@END_TABLE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0006_testme/test.out 868dccd50876c7ee2c7164f9505219e2b6db25d1
+++ harness/sources/templates_parser/regtests/tests/0006_testme/test.out 868dccd50876c7ee2c7164f9505219e2b6db25d1
@@ -0,0 +1,87 @@
+
+1
+[one]
+2
+[two]
+3
+[three]
+1
+[(one)]
+2
+[(two)]
+3
+[]
+
+1
+[one]
+2
+[two]
+3
+[three]
+1
+[(one)]
+2
+[(two)]
+
+>one
+>(one)
+>two
+>(two)
+>three
+>
+
+>one
+>(one)
+>two
+>(two)
+
+[INFO] testme7.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_TABLE_LINE_@
+ [TEXT] [@_MATDSIZE_@]
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [IF] @_EXIST:MATDSIZE_@
+ [TEXT] @_TABLE_LINE_@
+ [TEXT] [@_MATDSIZE_@]
+ [ELSE]
+ [END_IF]
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] >@_V5_@
+ [TEXT] >@_V6_@
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [IF] @_EXIST:V6_@
+ [TEXT] >@_V5_@
+ [TEXT] >@_V6_@
+ [ELSE]
+ [END_IF]
+ [END_BLOCK]
+[END_TABLE]
============================================================
--- harness/sources/templates_parser/regtests/tests/0006_testme/test.py 2caa9d1f1696169fc758153913af420fc58337a7
+++ harness/sources/templates_parser/regtests/tests/0006_testme/test.py 2caa9d1f1696169fc758153913af420fc58337a7
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme7.tmplt"])
+run('print_tree', ["testme7.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0006_testme/testme7.tmplt c80073f75da606faa61f563a54cd29a1a11a8a8a
+++ harness/sources/templates_parser/regtests/tests/0006_testme/testme7.tmplt c80073f75da606faa61f563a54cd29a1a11a8a8a
@@ -0,0 +1,28 @@
+
+@@TABLE@@
+@@TABLE@@
+@_TABLE_LINE_@
+[@_MATDSIZE_@]
+@@END_TABLE@@
+@@END_TABLE@@
+
+@@TABLE@@
+@@TABLE@@
+@@IF@@ @_EXIST:MATDSIZE_@
+@_TABLE_LINE_@
+[@_MATDSIZE_@]
+@@END_IF@@
+@@END_TABLE@@
+@@END_TABLE@@
+
+@@TABLE@@
+>@_V5_@
+>@_V6_@
+@@END_TABLE@@
+
+@@TABLE@@
+@@IF@@ @_EXIST:V6_@
+>@_V5_@
+>@_V6_@
+@@END_IF@@
+@@END_TABLE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0007_testme/test.out 6eed2e51f617d2d8478b2dc9197b62813034b181
+++ harness/sources/templates_parser/regtests/tests/0007_testme/test.out 6eed2e51f617d2d8478b2dc9197b62813034b181
@@ -0,0 +1,184 @@
+
+Test for complex condition:
+
+1)
+OK
+
+2)
+OK
+
+3)
+OK
+
+4)
+OK
+
+5)
+OK
+
+6)
+OK
+
+7)
+OK
+
+8)
+OK
+
+8)
+OK
+
+9)
+OK
+
+10)
+OK
+
+11)
+OK
+
+12)
+OK
+
+13)
+one
+This is value two !
+three
+
+14)
+OK
+
+15)
+OK
+
+16)
+OK
+
+[INFO] testme8.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[TEXT] Test for complex condition:
+[TEXT]
+[TEXT] 1)
+[IF] (@_COND1_@ or @_COND2_@)
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[TEXT] 2)
+[IF] (@_COND1_@ and @_COND2_@)
+ [TEXT] NOK
+[ELSE]
+ [TEXT] OK
+[END_IF]
+[TEXT]
+[TEXT] 3)
+[IF] (@_ONE_@ > @_TWO_@)
+ [TEXT] NOK
+[ELSE]
+ [TEXT] OK
+[END_IF]
+[TEXT]
+[TEXT] 4)
+[IF] (@_ONE_@ >= @_TWO_@)
+ [TEXT] NOK
+[ELSE]
+ [TEXT] OK
+[END_IF]
+[TEXT]
+[TEXT] 5)
+[IF] (@_ONE_@ < @_TWO_@)
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[TEXT] 6)
+[IF] (@_ONE_@ <= @_TWO_@)
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[TEXT] 7)
+[IF] (@_ONE_@ = @_TWO_@)
+ [TEXT] NOK
+[ELSE]
+ [TEXT] OK
+[END_IF]
+[TEXT]
+[TEXT] 8)
+[IF] (@_THREE_@ = @_THREE_@)
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[TEXT] 8)
+[IF] ((@_THREE_@ = @_THREE_@) and @_COND2_@)
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[TEXT] 9)
+[IF] ((@_THREE_@ = @_THREE_@) or @_COND1_@)
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[TEXT] 10)
+[IF] ((@_ONE_@ <= @_TWO_@) and (@_THREE_@ > @_TWO_@))
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[TEXT] 11)
+[IF] (((@_ONE_@ <= @_TWO_@) and (@_THREE_@ > @_TWO_@)) and @_COND1_@)
+ [TEXT] NOK
+[ELSE]
+ [TEXT] OK
+[END_IF]
+[TEXT]
+[TEXT] 12)
+[IF] (@_COND2_@ or (((@_ONE_@ <= @_TWO_@) and (@_THREE_@ > @_TWO_@)) and @_COND1_@))
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[TEXT] 13)
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [IF] (@_UPPER:VAR3_@ = TWO)
+ [TEXT] This is value two !
+ [ELSE]
+ [TEXT] @_VAR3_@
+ [END_IF]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] 14)
+[IF] (@_COND1_@ xor @_COND2_@)
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[TEXT] 15)
+[IF] (@_COND1_@ xor @_COND1_@)
+ [TEXT] NOK
+[ELSE]
+ [TEXT] OK
+[END_IF]
+[TEXT]
+[TEXT] 16)
+[IF] (@_COND2_@ xor @_COND2_@)
+ [TEXT] NOK
+[ELSE]
+ [TEXT] OK
+[END_IF]
============================================================
--- harness/sources/templates_parser/regtests/tests/0007_testme/test.py 921db23a1d2c5b8266d9e2b5ad8000775f1f0192
+++ harness/sources/templates_parser/regtests/tests/0007_testme/test.py 921db23a1d2c5b8266d9e2b5ad8000775f1f0192
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme8.tmplt"])
+run('print_tree', ["testme8.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0007_testme/testme8.tmplt 856a4438b3f027a7948d69f44c86c63b2e095001
+++ harness/sources/templates_parser/regtests/tests/0007_testme/testme8.tmplt 856a4438b3f027a7948d69f44c86c63b2e095001
@@ -0,0 +1,123 @@
+
+Test for complex condition:
+
+1)
+@@IF@@ @_COND1_@ or @_COND2_@
+OK
+@@ELSE@@
+NOK
+@@END_IF@@
+
+2)
+@@IF@@ @_COND1_@ and @_COND2_@
+NOK
+@@ELSE@@
+OK
+@@END_IF@@
+
+3)
+@@IF@@ @_ONE_@ > @_TWO_@
+NOK
+@@ELSE@@
+OK
+@@END_IF@@
+
+4)
+@@IF@@ @_ONE_@ >= @_TWO_@
+NOK
+@@ELSE@@
+OK
+@@END_IF@@
+
+5)
+@@IF@@ @_ONE_@ < @_TWO_@
+OK
+@@ELSE@@
+NOK
+@@END_IF@@
+
+6)
+@@IF@@ @_ONE_@ <= @_TWO_@
+OK
+@@ELSE@@
+NOK
+@@END_IF@@
+
+7)
+@@IF@@ @_ONE_@ = @_TWO_@
+NOK
+@@ELSE@@
+OK
+@@END_IF@@
+
+8)
+@@IF@@ @_THREE_@ = @_THREE_@
+OK
+@@ELSE@@
+NOK
+@@END_IF@@
+
+8)
+@@IF@@ (@_THREE_@ = @_THREE_@) and @_COND2_@
+OK
+@@ELSE@@
+NOK
+@@END_IF@@
+
+9)
+@@IF@@ (@_THREE_@ = @_THREE_@) or @_COND1_@
+OK
+@@ELSE@@
+NOK
+@@END_IF@@
+
+10)
+@@IF@@ (@_ONE_@ <= @_TWO_@) and (@_THREE_@ > @_TWO_@)
+OK
+@@ELSE@@
+NOK
+@@END_IF@@
+
+11)
+@@IF@@ (@_ONE_@ <= @_TWO_@) and (@_THREE_@ > @_TWO_@) and (@_COND1_@)
+NOK
+@@ELSE@@
+OK
+@@END_IF@@
+
+12)
+@@IF@@ @_COND2_@ or ((@_ONE_@ <= @_TWO_@) and (@_THREE_@ > @_TWO_@) and (@_COND1_@))
+OK
+@@ELSE@@
+NOK
+@@END_IF@@
+
+13)
+@@TABLE@@
+@@IF@@ @_UPPER:VAR3_@ = TWO
+This is value two !
+@@ELSE@@
+@_VAR3_@
+@@END_IF@@
+@@END_TABLE@@
+
+14)
+@@IF@@ @_COND1_@ xor @_COND2_@
+OK
+@@ELSE@@
+NOK
+@@END_IF@@
+
+15)
+@@IF@@ @_COND1_@ xor @_COND1_@
+NOK
+@@ELSE@@
+OK
+@@END_IF@@
+
+16)
+@@IF@@ @_COND2_@ xor @_COND2_@
+NOK
+@@ELSE@@
+OK
+@@END_IF@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0008_testme/test.out 7d811bd381577abbfc9c54d5a8253d6f680b7212
+++ harness/sources/templates_parser/regtests/tests/0008_testme/test.out 7d811bd381577abbfc9c54d5a8253d6f680b7212
@@ -0,0 +1,35 @@
+
+ ok1
+
+ ok cond2
+
+[INFO] testme11.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[IF] @_COND1_@
+ [TEXT] nok1
+[ELSE]
+ [IF] false
+ [TEXT] nok2
+ [ELSE]
+ [IF] 8
+ [TEXT] nok3
+ [ELSE]
+ [IF] sze
+ [TEXT] nok4
+ [ELSE]
+ [IF] @_COND2_@
+ [TEXT] ok1
+ [ELSE]
+ [TEXT] else part
+ [END_IF]
+ [END_IF]
+ [END_IF]
+ [END_IF]
+[END_IF]
+[TEXT]
+[IF] @_COND2_@
+ [TEXT] ok cond2
+[ELSE]
+ [TEXT] nok cond2
+[END_IF]
============================================================
--- harness/sources/templates_parser/regtests/tests/0008_testme/test.py 6e544f10ee15f4ac4f449b48bab5b95dcb9d3766
+++ harness/sources/templates_parser/regtests/tests/0008_testme/test.py 6e544f10ee15f4ac4f449b48bab5b95dcb9d3766
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme11.tmplt"])
+run('print_tree', ["testme11.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0008_testme/testme11.tmplt 07233d04916c91ce45cf33bd8454f83302f74bee
+++ harness/sources/templates_parser/regtests/tests/0008_testme/testme11.tmplt 07233d04916c91ce45cf33bd8454f83302f74bee
@@ -0,0 +1,20 @@
+
+@@IF@@ @_COND1_@
+ nok1
+@@ELSIF@@ false
+ nok2
+@@ELSIF@@ 8
+ nok3
+@@ELSIF@@ sze
+ nok4
+@@ELSIF@@ @_COND2_@
+ ok1
+@@ELSE@@
+ else part
+@@END_IF@@
+
+@@IF@@ @_COND2_@
+ ok cond2
+@@ELSE@@
+ nok cond2
+@@END_IF@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0009_testme/test.out d2a46a6713811184a86e51db101c53cdf714f2aa
+++ harness/sources/templates_parser/regtests/tests/0009_testme/test.out d2a46a6713811184a86e51db101c53cdf714f2aa
@@ -0,0 +1,10 @@
+
+ here
+
+[INFO] testme15.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[IF] (@_TWO_@ > 0)
+ [TEXT] here
+[ELSE]
+[END_IF]
============================================================
--- harness/sources/templates_parser/regtests/tests/0009_testme/test.py 38ef04a42fa9f7b7bc93982c2e8c79d043edfe0a
+++ harness/sources/templates_parser/regtests/tests/0009_testme/test.py 38ef04a42fa9f7b7bc93982c2e8c79d043edfe0a
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme15.tmplt"])
+run('print_tree', ["testme15.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0009_testme/testme15.tmplt 25521015d0754a753a1b5a69411a43cd5bfe12b9
+++ harness/sources/templates_parser/regtests/tests/0009_testme/testme15.tmplt 25521015d0754a753a1b5a69411a43cd5bfe12b9
@@ -0,0 +1,5 @@
+
+@@IF@@ @_TWO_@ > 0
+ @@-- this is a comment
+ here
+@@END_IF@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0010_testme/test.out 64e9dc9ebd752973b7093494139f502669afe326
+++ harness/sources/templates_parser/regtests/tests/0010_testme/test.out 64e9dc9ebd752973b7093494139f502669afe326
@@ -0,0 +1,115 @@
+
+ OK 2
+
+ OK 2
+
+ OK 2
+
+ OK
+
+ OK
+
+ OK
+
+ OK
+
+ OK
+
+ OK
+
+ OK
+
+ OK
+
+ OK
+
+ OK
+
+ OK
+
+[INFO] testme16.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[IF] (@_TWO_@ = 2)
+ [TEXT] OK 2
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[IF] (@_TWO_@ /= 3)
+ [TEXT] OK 2
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[IF] (not (@_TWO_@ = 3))
+ [TEXT] OK 2
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[IF] ((@_ONE_@ = 1) or (not (@_TWO_@ = 3)))
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[IF] ((@_ONE_@ = 2) or (not (@_TWO_@ = 3)))
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[IF] ((@_ONE_@ = 2) and (not (@_TWO_@ = 3)))
+ [TEXT] NOK
+[ELSE]
+ [TEXT] OK
+[END_IF]
+[TEXT]
+[IF] ((@_ONE_@ = 1) and (not (@_TWO_@ = 3)))
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[IF] ((not (@_TWO_@ = 3)) and (not (@_ONE_@ = 2)))
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[IF] ((not (@_TWO_@ = 3)) and (not (@_ONE_@ = 2)))
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[IF] ((not (@_TWO_@ = 3)) and (not (@_ONE_@ = 1)))
+ [TEXT] NOK
+[ELSE]
+ [TEXT] OK
+[END_IF]
+[TEXT]
+[IF] ((not (@_TWO_@ = 3)) and (not (@_ONE_@ = 1)))
+ [TEXT] NOK
+[ELSE]
+ [TEXT] OK
+[END_IF]
+[TEXT]
+[IF] (not @_COND2_@)
+ [TEXT] NOK
+[ELSE]
+ [TEXT] OK
+[END_IF]
+[TEXT]
+[IF] ((@_ONE_@ = 1) and (not @_COND2_@))
+ [TEXT] NOK
+[ELSE]
+ [TEXT] OK
+[END_IF]
+[TEXT]
+[IF] ((@_ONE_@ = 1) and (not @_COND2_@))
+ [TEXT] NOK
+[ELSE]
+ [TEXT] OK
+[END_IF]
============================================================
--- harness/sources/templates_parser/regtests/tests/0010_testme/test.py 79f20f8e1374a0b18bf87ec86bf0600528d19744
+++ harness/sources/templates_parser/regtests/tests/0010_testme/test.py 79f20f8e1374a0b18bf87ec86bf0600528d19744
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme16.tmplt"])
+run('print_tree', ["testme16.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0010_testme/testme16.tmplt 0a390ee5ba7e63543964646ef033323b63419aab
+++ harness/sources/templates_parser/regtests/tests/0010_testme/testme16.tmplt 0a390ee5ba7e63543964646ef033323b63419aab
@@ -0,0 +1,84 @@
+
+@@IF@@ @_TWO_@ = 2
+ OK 2
+@@ELSE@@
+ NOK
+@@END_IF@@
+
+@@IF@@ @_TWO_@ /= 3
+ OK 2
+@@ELSE@@
+ NOK
+@@END_IF@@
+
+@@IF@@ not (@_TWO_@ = 3)
+ OK 2
+@@ELSE@@
+ NOK
+@@END_IF@@
+
+@@IF@@ @_ONE_@ = 1 or not (@_TWO_@ = 3)
+ OK
+@@ELSE@@
+ NOK
+@@END_IF@@
+
+@@IF@@ @_ONE_@ = 2 or not (@_TWO_@ = 3)
+ OK
+@@ELSE@@
+ NOK
+@@END_IF@@
+
+@@IF@@ @_ONE_@ = 2 and not (@_TWO_@ = 3)
+ NOK
+@@ELSE@@
+ OK
+@@END_IF@@
+
+@@IF@@ @_ONE_@ = 1 and not (@_TWO_@ = 3)
+ OK
+@@ELSE@@
+ NOK
+@@END_IF@@
+
+@@IF@@ (not (@_TWO_@ = 3)) and (not (@_ONE_@ = 2))
+ OK
+@@ELSE@@
+ NOK
+@@END_IF@@
+
+@@IF@@ not (@_TWO_@ = 3) and (not (@_ONE_@ = 2))
+ OK
+@@ELSE@@
+ NOK
+@@END_IF@@
+
+@@IF@@ (not (@_TWO_@ = 3)) and (not (@_ONE_@ = 1))
+ NOK
+@@ELSE@@
+ OK
+@@END_IF@@
+
+@@IF@@ not (@_TWO_@ = 3) and (not (@_ONE_@ = 1))
+ NOK
+@@ELSE@@
+ OK
+@@END_IF@@
+
+@@IF@@ not @_COND2_@
+ NOK
+@@ELSE@@
+ OK
+@@END_IF@@
+
+@@IF@@ (@_ONE_@ = 1) and (not @_COND2_@)
+ NOK
+@@ELSE@@
+ OK
+@@END_IF@@
+
+@@IF@@ (@_ONE_@ = 1) and not @_COND2_@
+ NOK
+@@ELSE@@
+ OK
+@@END_IF@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0011_testme/test.out b2760494e964a693eb2cb93180c48419e7a7bf1a
+++ harness/sources/templates_parser/regtests/tests/0011_testme/test.out b2760494e964a693eb2cb93180c48419e7a7bf1a
@@ -0,0 +1,43 @@
+
+ OK
+
+ OK
+
+ OK
+
+ OK
+
+ OK
+
+[INFO] testme17.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[IF] (@_VAR1_@ = "a value")
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[IF] (@_VAR1_@ /= value)
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[IF] (@_VAR1_@ /= value)
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[IF] ("a value" = @_VAR1_@)
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
+[TEXT]
+[IF] ("toto value" /= @_VAR1_@)
+ [TEXT] OK
+[ELSE]
+ [TEXT] NOK
+[END_IF]
============================================================
--- harness/sources/templates_parser/regtests/tests/0011_testme/test.py e3203398ada90fd0eb708fc5076d4d8e8e0c91b3
+++ harness/sources/templates_parser/regtests/tests/0011_testme/test.py e3203398ada90fd0eb708fc5076d4d8e8e0c91b3
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme17.tmplt"])
+run('print_tree', ["testme17.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0011_testme/testme17.tmplt a43853b57575f3b2c7a6e15564d25f3706396db7
+++ harness/sources/templates_parser/regtests/tests/0011_testme/testme17.tmplt a43853b57575f3b2c7a6e15564d25f3706396db7
@@ -0,0 +1,30 @@
+
+@@IF@@ @_VAR1_@ = "a value"
+ OK
+@@ELSE@@
+ NOK
+@@END_IF@@
+
+@@IF@@ @_VAR1_@ /= value
+ OK
+@@ELSE@@
+ NOK
+@@END_IF@@
+
+@@IF@@ @_VAR1_@ /= "value"
+ OK
+@@ELSE@@
+ NOK
+@@END_IF@@
+
+@@IF@@ "a value" = @_VAR1_@
+ OK
+@@ELSE@@
+ NOK
+@@END_IF@@
+
+@@IF@@ "toto value" /= @_VAR1_@
+ OK
+@@ELSE@@
+ NOK
+@@END_IF@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0012_testme/test.out c4f8a68a9b4058a24db3ee64aa420559b9620b3b
+++ harness/sources/templates_parser/regtests/tests/0012_testme/test.out c4f8a68a9b4058a24db3ee64aa420559b9620b3b
@@ -0,0 +1,493 @@
+
+Test for table attributes
+
+Level 0
+
+MAT
+4
+3
+3
+
+MATDSIZE
+2
+2
+3
+
+VAR2
+10
+
+V6
+2
+
+Level 1 (no expand var)
+
+
+Level 1 (with expand var)
+
+=> (one)
+
+MAT
+4
+3
+3
+
+MATDSIZE
+2
+2
+3
+
+VAR2
+10
+
+V6
+2
+=> (two)
+
+MAT
+4
+3
+3
+
+MATDSIZE
+2
+2
+3
+
+VAR2
+10
+
+V6
+2
+
+Level 2 (no expand var)
+
+
+Level 2 (with expand var) - vector level 1
+
+=> (one)
+=> (two)
+
+Level 2 (with expand var) - vector level 2
+
+
+Level 2 (with expand var) - matrix level 1
+
+=> A1.1, A1.2, A1.3
+=> A2.1, A2.2, A2.3
+=> A3.1, A3.2, A3.3
+=> A4.1, A4.2, A4.3
+
+Level 2 (with expand var) - matrix level 2
+
+=> A1.1
+MAT
+4
+3
+3
+
+MATDSIZE
+2
+2
+3
+
+VAR2
+10
+
+V6
+2
+=> A1.2
+MAT
+4
+3
+3
+
+MATDSIZE
+2
+2
+3
+
+VAR2
+10
+
+V6
+2
+=> A1.3
+MAT
+4
+3
+3
+
+MATDSIZE
+2
+2
+3
+
+VAR2
+10
+
+V6
+2
+----
+=> A2.1
+MAT
+4
+3
+3
+
+MATDSIZE
+2
+2
+3
+
+VAR2
+10
+
+V6
+2
+=> A2.2
+MAT
+4
+3
+3
+
+MATDSIZE
+2
+2
+3
+
+VAR2
+10
+
+V6
+2
+=> A2.3
+MAT
+4
+3
+3
+
+MATDSIZE
+2
+2
+3
+
+VAR2
+10
+
+V6
+2
+----
+=> A3.1
+MAT
+4
+3
+3
+
+MATDSIZE
+2
+2
+3
+
+VAR2
+10
+
+V6
+2
+=> A3.2
+MAT
+4
+3
+3
+
+MATDSIZE
+2
+2
+3
+
+VAR2
+10
+
+V6
+2
+=> A3.3
+MAT
+4
+3
+3
+
+MATDSIZE
+2
+2
+3
+
+VAR2
+10
+
+V6
+2
+----
+=> A4.1
+MAT
+4
+3
+3
+
+MATDSIZE
+2
+2
+3
+
+VAR2
+10
+
+V6
+2
+=> A4.2
+MAT
+4
+3
+3
+
+MATDSIZE
+2
+2
+3
+
+VAR2
+10
+
+V6
+2
+=> A4.3
+MAT
+4
+3
+3
+
+MATDSIZE
+2
+2
+3
+
+VAR2
+10
+
+V6
+2
+----
+
+[INFO] testme18.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[TEXT] Test for table attributes
+[TEXT]
+[TEXT] Level 0
+[TEXT]
+[TEXT] MAT
+[TEXT] @_MAT'Line_@
+[TEXT] @_MAT'Min_Column_@
+[TEXT] @_MAT'Max_Column_@
+[TEXT]
+[TEXT] MATDSIZE
+[TEXT] @_MATDSIZE'Line_@
+[TEXT] @_MATDSIZE'Min_Column_@
+[TEXT] @_MATDSIZE'Max_Column_@
+[TEXT]
+[TEXT] VAR2
+[TEXT] @_VAR2'Length_@
+[TEXT]
+[TEXT] V6
+[TEXT] @_V6'Length_@
+[TEXT]
+[TEXT] Level 1 (no expand var)
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] MAT
+ [TEXT] @_MAT'Line_@
+ [TEXT] @_MAT'Min_Column_@
+ [TEXT] @_MAT'Max_Column_@
+ [TEXT]
+ [TEXT] MATDSIZE
+ [TEXT] @_MATDSIZE'Line_@
+ [TEXT] @_MATDSIZE'Min_Column_@
+ [TEXT] @_MATDSIZE'Max_Column_@
+ [TEXT]
+ [TEXT] VAR2
+ [TEXT] @_VAR2'Length_@
+ [TEXT]
+ [TEXT] V6
+ [TEXT] @_V6'Length_@
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] Level 1 (with expand var)
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] => @_V6_@
+ [TEXT]
+ [TEXT] MAT
+ [TEXT] @_MAT'Line_@
+ [TEXT] @_MAT'Min_Column_@
+ [TEXT] @_MAT'Max_Column_@
+ [TEXT]
+ [TEXT] MATDSIZE
+ [TEXT] @_MATDSIZE'Line_@
+ [TEXT] @_MATDSIZE'Min_Column_@
+ [TEXT] @_MATDSIZE'Max_Column_@
+ [TEXT]
+ [TEXT] VAR2
+ [TEXT] @_VAR2'Length_@
+ [TEXT]
+ [TEXT] V6
+ [TEXT] @_V6'Length_@
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] Level 2 (no expand var)
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] MAT
+ [TEXT] @_MAT'Line_@
+ [TEXT] @_MAT'Min_Column_@
+ [TEXT] @_MAT'Max_Column_@
+ [TEXT]
+ [TEXT] MATDSIZE
+ [TEXT] @_MATDSIZE'Line_@
+ [TEXT] @_MATDSIZE'Min_Column_@
+ [TEXT] @_MATDSIZE'Max_Column_@
+ [TEXT]
+ [TEXT] VAR2
+ [TEXT] @_VAR2'Length_@
+ [TEXT]
+ [TEXT] V6
+ [TEXT] @_V6'Length_@
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] Level 2 (with expand var) - vector level 1
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] => @_V6_@
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] MAT
+ [TEXT] @_MAT'Line_@
+ [TEXT] @_MAT'Min_Column_@
+ [TEXT] @_MAT'Max_Column_@
+ [TEXT]
+ [TEXT] MATDSIZE
+ [TEXT] @_MATDSIZE'Line_@
+ [TEXT] @_MATDSIZE'Min_Column_@
+ [TEXT] @_MATDSIZE'Max_Column_@
+ [TEXT]
+ [TEXT] VAR2
+ [TEXT] @_VAR2'Length_@
+ [TEXT]
+ [TEXT] V6
+ [TEXT] @_V6'Length_@
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] Level 2 (with expand var) - vector level 2
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] => @_V6_@
+ [TEXT] MAT
+ [TEXT] @_MAT'Line_@
+ [TEXT] @_MAT'Min_Column_@
+ [TEXT] @_MAT'Max_Column_@
+ [TEXT]
+ [TEXT] MATDSIZE
+ [TEXT] @_MATDSIZE'Line_@
+ [TEXT] @_MATDSIZE'Min_Column_@
+ [TEXT] @_MATDSIZE'Max_Column_@
+ [TEXT]
+ [TEXT] VAR2
+ [TEXT] @_VAR2'Length_@
+ [TEXT]
+ [TEXT] V6
+ [TEXT] @_V6'Length_@
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] Level 2 (with expand var) - matrix level 1
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] => @_MAT_@
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] MAT
+ [TEXT] @_MAT'Line_@
+ [TEXT] @_MAT'Min_Column_@
+ [TEXT] @_MAT'Max_Column_@
+ [TEXT]
+ [TEXT] MATDSIZE
+ [TEXT] @_MATDSIZE'Line_@
+ [TEXT] @_MATDSIZE'Min_Column_@
+ [TEXT] @_MATDSIZE'Max_Column_@
+ [TEXT]
+ [TEXT] VAR2
+ [TEXT] @_VAR2'Length_@
+ [TEXT]
+ [TEXT] V6
+ [TEXT] @_V6'Length_@
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] Level 2 (with expand var) - matrix level 2
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] => @_MAT_@
+ [TEXT] MAT
+ [TEXT] @_MAT'Line_@
+ [TEXT] @_MAT'Min_Column_@
+ [TEXT] @_MAT'Max_Column_@
+ [TEXT]
+ [TEXT] MATDSIZE
+ [TEXT] @_MATDSIZE'Line_@
+ [TEXT] @_MATDSIZE'Min_Column_@
+ [TEXT] @_MATDSIZE'Max_Column_@
+ [TEXT]
+ [TEXT] VAR2
+ [TEXT] @_VAR2'Length_@
+ [TEXT]
+ [TEXT] V6
+ [TEXT] @_V6'Length_@
+ [END_BLOCK]
+ [END_TABLE]
+ [TEXT] ----
+ [END_BLOCK]
+[END_TABLE]
============================================================
--- harness/sources/templates_parser/regtests/tests/0012_testme/test.py 81d3eed190c7e9e5bfbc29919e04b9e149b6ff46
+++ harness/sources/templates_parser/regtests/tests/0012_testme/test.py 81d3eed190c7e9e5bfbc29919e04b9e149b6ff46
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme18.tmplt"])
+run('print_tree', ["testme18.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0012_testme/testme18.tmplt 4b5e571a9e7253ac9375e9f19d7d3e2b1ace982f
+++ harness/sources/templates_parser/regtests/tests/0012_testme/testme18.tmplt 4b5e571a9e7253ac9375e9f19d7d3e2b1ace982f
@@ -0,0 +1,177 @@
+
+Test for table attributes
+
+Level 0
+
+MAT
+@_MAT'Line_@
+@_MAT'Min_Column_@
+@_MAT'Max_Column_@
+
+MATDSIZE
+@_MATDSIZE'Line_@
+@_MATDSIZE'Min_Column_@
+@_MATDSIZE'Max_Column_@
+
+VAR2
+@_VAR2'Length_@
+
+V6
+@_V6'Length_@
+
+Level 1 (no expand var)
+
+@@TABLE@@
+MAT
+@_MAT'Line_@
+@_MAT'Min_Column_@
+@_MAT'Max_Column_@
+
+MATDSIZE
+@_MATDSIZE'Line_@
+@_MATDSIZE'Min_Column_@
+@_MATDSIZE'Max_Column_@
+
+VAR2
+@_VAR2'Length_@
+
+V6
+@_V6'Length_@
+@@END_TABLE@@
+
+Level 1 (with expand var)
+
+@@TABLE@@
+=> @_V6_@
+
+MAT
+@_MAT'Line_@
+@_MAT'Min_Column_@
+@_MAT'Max_Column_@
+
+MATDSIZE
+@_MATDSIZE'Line_@
+@_MATDSIZE'Min_Column_@
+@_MATDSIZE'Max_Column_@
+
+VAR2
+@_VAR2'Length_@
+
+V6
+@_V6'Length_@
+@@END_TABLE@@
+
+Level 2 (no expand var)
+
+@@TABLE@@
+@@TABLE@@
+MAT
+@_MAT'Line_@
+@_MAT'Min_Column_@
+@_MAT'Max_Column_@
+
+MATDSIZE
+@_MATDSIZE'Line_@
+@_MATDSIZE'Min_Column_@
+@_MATDSIZE'Max_Column_@
+
+VAR2
+@_VAR2'Length_@
+
+V6
+@_V6'Length_@
+@@END_TABLE@@
+@@END_TABLE@@
+
+Level 2 (with expand var) - vector level 1
+
+@@TABLE@@
+=> @_V6_@
+@@TABLE@@
+MAT
+@_MAT'Line_@
+@_MAT'Min_Column_@
+@_MAT'Max_Column_@
+
+MATDSIZE
+@_MATDSIZE'Line_@
+@_MATDSIZE'Min_Column_@
+@_MATDSIZE'Max_Column_@
+
+VAR2
+@_VAR2'Length_@
+
+V6
+@_V6'Length_@
+@@END_TABLE@@
+@@END_TABLE@@
+
+Level 2 (with expand var) - vector level 2
+
+@@TABLE@@
+@@TABLE@@
+=> @_V6_@
+MAT
+@_MAT'Line_@
+@_MAT'Min_Column_@
+@_MAT'Max_Column_@
+
+MATDSIZE
+@_MATDSIZE'Line_@
+@_MATDSIZE'Min_Column_@
+@_MATDSIZE'Max_Column_@
+
+VAR2
+@_VAR2'Length_@
+
+V6
+@_V6'Length_@
+@@END_TABLE@@
+@@END_TABLE@@
+
+Level 2 (with expand var) - matrix level 1
+
+@@TABLE@@
+=> @_MAT_@
+@@TABLE@@
+MAT
+@_MAT'Line_@
+@_MAT'Min_Column_@
+@_MAT'Max_Column_@
+
+MATDSIZE
+@_MATDSIZE'Line_@
+@_MATDSIZE'Min_Column_@
+@_MATDSIZE'Max_Column_@
+
+VAR2
+@_VAR2'Length_@
+
+V6
+@_V6'Length_@
+@@END_TABLE@@
+@@END_TABLE@@
+
+Level 2 (with expand var) - matrix level 2
+
+@@TABLE@@
+@@TABLE@@
+=> @_MAT_@
+MAT
+@_MAT'Line_@
+@_MAT'Min_Column_@
+@_MAT'Max_Column_@
+
+MATDSIZE
+@_MATDSIZE'Line_@
+@_MATDSIZE'Min_Column_@
+@_MATDSIZE'Max_Column_@
+
+VAR2
+@_VAR2'Length_@
+
+V6
+@_V6'Length_@
+@@END_TABLE@@
+----
+@@END_TABLE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0013_testme/test.out d042fc79e2a16df52004bd5ff88cde62a28f456e
+++ harness/sources/templates_parser/regtests/tests/0013_testme/test.out d042fc79e2a16df52004bd5ff88cde62a28f456e
@@ -0,0 +1,54 @@
+
+2
+11
+2
+11
+
+1
+-1
+1
+-1
+
+6
+2
+6
+2
+
+1
+0
+1
+0
+
+1
+0
+1
+
+5
+[INFO] testme24.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[TEXT] @_"+"(1):ONE_@
+[TEXT] @_"+"(10):ONE_@
+[TEXT] @_"+"(1):ONE_@
+[TEXT] @_"+"(10):ONE_@
+[TEXT]
+[TEXT] @_"-"(2):THREE_@
+[TEXT] @_"-"(2):ONE_@
+[TEXT] @_"-"(2):THREE_@
+[TEXT] @_"-"(2):ONE_@
+[TEXT]
+[TEXT] @_"*"(2):THREE_@
+[TEXT] @_"*"(1):TWO_@
+[TEXT] @_"*"(2):THREE_@
+[TEXT] @_"*"(1):TWO_@
+[TEXT]
+[TEXT] @_"/"(3):THREE_@
+[TEXT] @_"/"(3):ONE_@
+[TEXT] @_"/"(3):THREE_@
+[TEXT] @_"/"(3):ONE_@
+[TEXT]
+[TEXT] @_MOD(2):ONE_@
+[TEXT] @_MOD(2):TWO_@
+[TEXT] @_MOD(2):THREE_@
+[TEXT]
+[TEXT] @_"+"(2):V5'Length_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0013_testme/test.py d61a3b632b2a1136f1c2d85f9012c53b2915d0e0
+++ harness/sources/templates_parser/regtests/tests/0013_testme/test.py d61a3b632b2a1136f1c2d85f9012c53b2915d0e0
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme24.tmplt"])
+run('print_tree', ["testme24.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0013_testme/testme24.tmplt cc60a5309fa51e46284a0b09b09a15668d370537
+++ harness/sources/templates_parser/regtests/tests/0013_testme/testme24.tmplt cc60a5309fa51e46284a0b09b09a15668d370537
@@ -0,0 +1,26 @@
+
+@_"+"(1):ONE_@
+@_"+"(10):ONE_@
+@_ADD(1):ONE_@
+@_ADD(10):ONE_@
+
+@_"-"(2):THREE_@
+@_"-"(2):ONE_@
+@_SUB(2):THREE_@
+@_SUB(2):ONE_@
+
+@_"*"(2):THREE_@
+@_"*"(1):TWO_@
+@_MULT(2):THREE_@
+@_MULT(1):TWO_@
+
+@_"/"(3):THREE_@
+@_"/"(3):ONE_@
+@_DIV(3):THREE_@
+@_DIV(3):ONE_@
+
+@_MOD(2):ONE_@
+@_MOD(2):TWO_@
+@_MOD(2):THREE_@
+
+@_ADD(2):V5'Length_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0014_testme/test.out 0ef4ba821c42d08d175d823fe2f9ec3641ad6bb3
+++ harness/sources/templates_parser/regtests/tests/0014_testme/test.out 0ef4ba821c42d08d175d823fe2f9ec3641ad6bb3
@@ -0,0 +1,31 @@
+
+First line<br/>Second line
+First line
+Second line
+
+First line
+Second line
+First line<br/>Second line
+
+First line
+Second line
+First line
+Second line
+First line
+Second line
+First line
+
+Second line
+[INFO] testme25.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[TEXT] @_LF_2_BR:WITHLF_@
+[TEXT] @_BR_2_LF:WITHBR_@
+[TEXT]
+[TEXT] @_BR_2_LF:LF_2_BR:WITHLF_@
+[TEXT] @_LF_2_BR:BR_2_LF:WITHBR_@
+[TEXT]
+[TEXT] @_BR_2_EOL(LF):WITHBR_@
+[TEXT] @_BR_2_EOL(CRLF):WITHBR_@
+[TEXT] @_BR_2_EOL(CR):WITHBR_@
+[TEXT] @_BR_2_EOL(LFCR):WITHBR_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0014_testme/test.py 0ff0b87e03cf4371363e759bc7d492318211e53d
+++ harness/sources/templates_parser/regtests/tests/0014_testme/test.py 0ff0b87e03cf4371363e759bc7d492318211e53d
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme25.tmplt"])
+run('print_tree', ["testme25.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0014_testme/testme25.tmplt 55a07e20690e1c1d8d58aa6befc57d1b1665368d
+++ harness/sources/templates_parser/regtests/tests/0014_testme/testme25.tmplt 55a07e20690e1c1d8d58aa6befc57d1b1665368d
@@ -0,0 +1,11 @@
+
+@_LF_2_BR:WITHLF_@
+@_BR_2_LF:WITHBR_@
+
+@_BR_2_LF:LF_2_BR:WITHLF_@
+@_LF_2_BR:BR_2_LF:WITHBR_@
+
+@_BR_2_EOL(LF):WITHBR_@
+@_BR_2_EOL(CRLF):WITHBR_@
+@_BR_2_EOL(CR):WITHBR_@
+@_BR_2_EOL(LFCR):WITHBR_@
\ No newline at end of file
============================================================
--- harness/sources/templates_parser/regtests/tests/0015_testme/include.tmplt 55738fc07a5966d930af07463522d106d47d2387
+++ harness/sources/templates_parser/regtests/tests/0015_testme/include.tmplt 55738fc07a5966d930af07463522d106d47d2387
@@ -0,0 +1,25 @@
+
+@@-- Include file
+@_$0_@
+1> @_$1_@
+
+2> @_$2_@
+
+3> @_WEB_NBSP:$2_@
+4> @_WEB_NBSP:$1_@
+
+@@IF@@ @_$2_@ = toto
+5> @_$1_@
+@@END_IF@@
+
+@@IF@@ @_WEB_NBSP:$2_@ = toto or @_WEB_NBSP:$1_@ = "xx yy"
+6> @_$2_@
+@@END_IF@@
+
+@@TABLE@@
+7> @_VAR3_@
+8> @_$1_@
+@@SECTION@@
+9> @_$2_@
+@@END_TABLE@@
+----------
============================================================
--- harness/sources/templates_parser/regtests/tests/0015_testme/test.out 625a4dddee92e3ae06885e8240773bdbff4d26eb
+++ harness/sources/templates_parser/regtests/tests/0015_testme/test.out 625a4dddee92e3ae06885e8240773bdbff4d26eb
@@ -0,0 +1,181 @@
+
+
+First include:
+
+include.tmplt
+1> a value
+
+2>
+
+3>
+4> a value
+
+
+
+7> one
+8> a value
+9>
+7> three
+8> a value
+----------
+
+
+Second include:
+
+include.tmplt
+1> a value
+
+2> toto
+
+3> toto
+4> a value
+
+5> a value
+
+6> toto
+
+7> one
+8> a value
+9> toto
+7> three
+8> a value
+----------
+
+Third include:
+
+include.tmplt
+1> a value
+
+2> toto titi
+
+3> toto titi
+4> a value
+
+
+
+7> one
+8> a value
+9> toto titi
+7> three
+8> a value
+----------
+
+[INFO] testme26.tmplt
+ -> include.tmplt
+ -> include.tmplt
+ -> include.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[TEXT]
+[TEXT] First include:
+[INCLUDE] include.tmplt
+ $0 = include.tmplt
+ $1 = @_VAR1_@
+ [INFO] include.tmplt
+ [C_INFO] 1 FALSE
+ [TEXT]
+ [TEXT] @_$0_@
+ [TEXT] 1> @_$1_@
+ [TEXT]
+ [TEXT] 2> @_$2_@
+ [TEXT]
+ [TEXT] 3> @_WEB_NBSP:$2_@
+ [TEXT] 4> @_WEB_NBSP:$1_@
+ [TEXT]
+ [IF] (@_$2_@ = toto)
+ [TEXT] 5> @_$1_@
+ [ELSE]
+ [END_IF]
+ [TEXT]
+ [IF] ((@_WEB_NBSP:$2_@ = toto) or (@_WEB_NBSP:$1_@ = "xx yy"))
+ [TEXT] 6> @_$2_@
+ [ELSE]
+ [END_IF]
+ [TEXT]
+ [TABLE]
+ [BLOCK]
+ [SECTION]
+ [TEXT] 7> @_VAR3_@
+ [TEXT] 8> @_$1_@
+ [SECTION]
+ [TEXT] 9> @_$2_@
+ [END_BLOCK]
+ [END_TABLE]
+ [TEXT] ----------
+[TEXT]
+[TEXT]
+[TEXT] Second include:
+[INCLUDE] include.tmplt
+ $0 = include.tmplt
+ $1 = @_VAR1_@
+ $2 = toto
+ [INFO] include.tmplt
+ [C_INFO] 1 FALSE
+ [TEXT]
+ [TEXT] @_$0_@
+ [TEXT] 1> @_$1_@
+ [TEXT]
+ [TEXT] 2> @_$2_@
+ [TEXT]
+ [TEXT] 3> @_WEB_NBSP:$2_@
+ [TEXT] 4> @_WEB_NBSP:$1_@
+ [TEXT]
+ [IF] (@_$2_@ = toto)
+ [TEXT] 5> @_$1_@
+ [ELSE]
+ [END_IF]
+ [TEXT]
+ [IF] ((@_WEB_NBSP:$2_@ = toto) or (@_WEB_NBSP:$1_@ = "xx yy"))
+ [TEXT] 6> @_$2_@
+ [ELSE]
+ [END_IF]
+ [TEXT]
+ [TABLE]
+ [BLOCK]
+ [SECTION]
+ [TEXT] 7> @_VAR3_@
+ [TEXT] 8> @_$1_@
+ [SECTION]
+ [TEXT] 9> @_$2_@
+ [END_BLOCK]
+ [END_TABLE]
+ [TEXT] ----------
+[TEXT]
+[TEXT] Third include:
+[INCLUDE] include.tmplt
+ $0 = include.tmplt
+ $1 = @_VAR1_@
+ $2 = toto titi
+ $3 = tutu tata
+ [INFO] include.tmplt
+ [C_INFO] 1 FALSE
+ [TEXT]
+ [TEXT] @_$0_@
+ [TEXT] 1> @_$1_@
+ [TEXT]
+ [TEXT] 2> @_$2_@
+ [TEXT]
+ [TEXT] 3> @_WEB_NBSP:$2_@
+ [TEXT] 4> @_WEB_NBSP:$1_@
+ [TEXT]
+ [IF] (@_$2_@ = toto)
+ [TEXT] 5> @_$1_@
+ [ELSE]
+ [END_IF]
+ [TEXT]
+ [IF] ((@_WEB_NBSP:$2_@ = toto) or (@_WEB_NBSP:$1_@ = "xx yy"))
+ [TEXT] 6> @_$2_@
+ [ELSE]
+ [END_IF]
+ [TEXT]
+ [TABLE]
+ [BLOCK]
+ [SECTION]
+ [TEXT] 7> @_VAR3_@
+ [TEXT] 8> @_$1_@
+ [SECTION]
+ [TEXT] 9> @_$2_@
+ [END_BLOCK]
+ [END_TABLE]
+ [TEXT] ----------
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0015_testme/test.py f80376ad892f02221ee6789866642649e3baeee0
+++ harness/sources/templates_parser/regtests/tests/0015_testme/test.py f80376ad892f02221ee6789866642649e3baeee0
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme26.tmplt"])
+run('print_tree', ["testme26.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0015_testme/testme26.tmplt 1811f5603f624d9741df4980ca72add406a5c681
+++ harness/sources/templates_parser/regtests/tests/0015_testme/testme26.tmplt 1811f5603f624d9741df4980ca72add406a5c681
@@ -0,0 +1,13 @@
+
+@@-- A comment for the template
+
+First include:
+@@INCLUDE@@ include.tmplt @_VAR1_@
+
+@@-- Another one
+
+Second include:
+@@INCLUDE@@ include.tmplt @_VAR1_@ toto
+
+Third include:
+@@INCLUDE@@ include.tmplt "@_VAR1_@" "toto titi" "tutu tata"
============================================================
--- harness/sources/templates_parser/regtests/tests/0016_testme/include2.tmplt 5e4e1b64e0794edc556413a012934d0df3e56474
+++ harness/sources/templates_parser/regtests/tests/0016_testme/include2.tmplt 5e4e1b64e0794edc556413a012934d0df3e56474
@@ -0,0 +1,19 @@
+
+@@-- Include file
+@_$0_@
+
+1> @_$1_@
+
+2> @_$2'Length_@
+
+3> @_$3'Line_@
+
+4> @_$3'Min_Column_@
+
+5> @_$3'Max_Column_@
+
+@@IF@@ @_$2'Length_@ > 1
+ok
+@@ELSE@@
+nok
+@@END_IF@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0016_testme/test.out fbb0dcd78190c8b928780b77373aea7ac72be684
+++ harness/sources/templates_parser/regtests/tests/0016_testme/test.out fbb0dcd78190c8b928780b77373aea7ac72be684
@@ -0,0 +1,47 @@
+
+
+
+include2.tmplt
+
+1> a value
+
+2> 3
+
+3> 4
+
+4> 3
+
+5> 3
+
+ok
+
+[INFO] testme27.tmplt
+ -> include2.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[TEXT]
+[INCLUDE] include2.tmplt
+ $0 = include2.tmplt
+ $1 = @_VAR1_@
+ $2 = @_VAR3_@
+ $3 = @_MAT_@
+ [INFO] include2.tmplt
+ [C_INFO] 1 FALSE
+ [TEXT]
+ [TEXT] @_$0_@
+ [TEXT]
+ [TEXT] 1> @_$1_@
+ [TEXT]
+ [TEXT] 2> @_$2'Length_@
+ [TEXT]
+ [TEXT] 3> @_$3'Line_@
+ [TEXT]
+ [TEXT] 4> @_$3'Min_Column_@
+ [TEXT]
+ [TEXT] 5> @_$3'Max_Column_@
+ [TEXT]
+ [IF] (@_$2'Length_@ > 1)
+ [TEXT] ok
+ [ELSE]
+ [TEXT] nok
+ [END_IF]
============================================================
--- harness/sources/templates_parser/regtests/tests/0016_testme/test.py 89cba3ed1b5c926a85d24d956d229fd7902b7c62
+++ harness/sources/templates_parser/regtests/tests/0016_testme/test.py 89cba3ed1b5c926a85d24d956d229fd7902b7c62
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme27.tmplt"])
+run('print_tree', ["testme27.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0016_testme/testme27.tmplt 0dbcb5a6b56e53e8061eebf1979be40c119a0175
+++ harness/sources/templates_parser/regtests/tests/0016_testme/testme27.tmplt 0dbcb5a6b56e53e8061eebf1979be40c119a0175
@@ -0,0 +1,4 @@
+
+@@-- A comment for the template
+
+@@INCLUDE@@ include2.tmplt @_VAR1_@ @_VAR3_@ @_MAT_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0017_testme/test.out d8b05c6be9c54a50ec59f8d723fb3a8582ae900c
+++ harness/sources/templates_parser/regtests/tests/0017_testme/test.out d8b05c6be9c54a50ec59f8d723fb3a8582ae900c
@@ -0,0 +1,36 @@
+
+
+Test slice
+
+12 = 12
+12 = 12
+23 = 23
+23 = 23
+=
+6 = 6
+=
+=
+2345 = 2345
+456 = 456
+45 = 45
+=
+
+[INFO] testme30.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[TEXT]
+[TEXT] Test slice
+[TEXT]
+[TEXT] 12 = @_SLICE(1 .. 2):NUM0_@
+[TEXT] 12 = @_SLICE(1 .. 2):NUM0_@
+[TEXT] 23 = @_SLICE(2 .. 3):NUM0_@
+[TEXT] 23 = @_SLICE(2 .. 3):NUM0_@
+[TEXT] = @_SLICE(2 .. 1):NUM0_@
+[TEXT] 6 = @_SLICE(6 .. 10):NUM0_@
+[TEXT] = @_SLICE(8 .. 15):NUM0_@
+[TEXT] = @_SLICE(18 .. 15):NUM0_@
+[TEXT] 2345 = @_SLICE(2 .. 5):NUM0_@
+[TEXT] 456 = @_SLICE(-2 .. 0):NUM0_@
+[TEXT] 45 = @_SLICE(-2 .. -1):NUM0_@
+[TEXT] = @_SLICE(-10 .. -9):NUM0_@
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0017_testme/test.py d753643a6f20608016cd88dc55cd868f5b4b7616
+++ harness/sources/templates_parser/regtests/tests/0017_testme/test.py d753643a6f20608016cd88dc55cd868f5b4b7616
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme30.tmplt"])
+run('print_tree', ["testme30.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0017_testme/testme30.tmplt 259afe35358ce1986ebd458460e07c38c46cf55e
+++ harness/sources/templates_parser/regtests/tests/0017_testme/testme30.tmplt 259afe35358ce1986ebd458460e07c38c46cf55e
@@ -0,0 +1,18 @@
+
+@@-- test for SLICE()
+
+Test slice
+
+12 = @_SLICE(1..2):NUM0_@
+12 = @_SLICE("1..2"):NUM0_@
+23 = @_SLICE( 2 .. 3 ):NUM0_@
+23 = @_SLICE(" 2 .. 3 "):NUM0_@
+= @_SLICE(2..1):NUM0_@
+6 = @_SLICE("6 ..10"):NUM0_@ @@-- slice test
+= @_SLICE("8 ..15"):NUM0_@
+= @_SLICE("18 ..15"):NUM0_@
+2345 = @_SLICE(2..5):NUM0_@
+456 = @_SLICE(-2..0):NUM0_@
+45 = @_SLICE(-2..-1):NUM0_@
+= @_SLICE(-10..-9):NUM0_@
+@@-- test for SLICE()
============================================================
--- harness/sources/templates_parser/regtests/tests/0018_testme/base.tmplt e6e2b93ef5b87182ac3f0ecc814a4bb9d335114e
+++ harness/sources/templates_parser/regtests/tests/0018_testme/base.tmplt e6e2b93ef5b87182ac3f0ecc814a4bb9d335114e
@@ -0,0 +1 @@
+base!
============================================================
--- harness/sources/templates_parser/regtests/tests/0018_testme/dir/file.tmplt 0f37f8be7edcd2df2accc760ba34dde711260fea
+++ harness/sources/templates_parser/regtests/tests/0018_testme/dir/file.tmplt 0f37f8be7edcd2df2accc760ba34dde711260fea
@@ -0,0 +1,6 @@
+
+@@INCLUDE@@ header.tmplt
+
+Hello
+
+@@INCLUDE@@ subdir/footer.tmplt
============================================================
--- harness/sources/templates_parser/regtests/tests/0018_testme/dir/header.tmplt c527147754fce6907de820e6f2e9e9b8d0383b90
+++ harness/sources/templates_parser/regtests/tests/0018_testme/dir/header.tmplt c527147754fce6907de820e6f2e9e9b8d0383b90
@@ -0,0 +1,2 @@
+
+Header
============================================================
--- harness/sources/templates_parser/regtests/tests/0018_testme/dir/subdir/footer.tmplt 9115bacc6f8cc7792bf4eca973efffe4dad44224
+++ harness/sources/templates_parser/regtests/tests/0018_testme/dir/subdir/footer.tmplt 9115bacc6f8cc7792bf4eca973efffe4dad44224
@@ -0,0 +1,4 @@
+
+Footer
+
+@@INCLUDE@@ /base.tmplt
============================================================
--- harness/sources/templates_parser/regtests/tests/0018_testme/test.out b3117092bc5d69ffd5b3ac009fb12ca2d5898c76
+++ harness/sources/templates_parser/regtests/tests/0018_testme/test.out b3117092bc5d69ffd5b3ac009fb12ca2d5898c76
@@ -0,0 +1,46 @@
+
+
+
+Header
+
+Hello
+
+
+Footer
+
+base!
+
+[INFO] testme31.tmplt
+ -> dir/file.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[INCLUDE] dir/file.tmplt
+ $0 = dir/file.tmplt
+ [INFO] dir/file.tmplt
+ -> dir/subdir/footer.tmplt
+ -> dir/header.tmplt
+ [C_INFO] 1 FALSE
+ [TEXT]
+ [INCLUDE] dir/header.tmplt
+ $0 = header.tmplt
+ [INFO] dir/header.tmplt
+ [C_INFO] 1 FALSE
+ [TEXT]
+ [TEXT] Header
+ [TEXT]
+ [TEXT] Hello
+ [TEXT]
+ [INCLUDE] dir/subdir/footer.tmplt
+ $0 = subdir/footer.tmplt
+ [INFO] dir/subdir/footer.tmplt
+ -> base.tmplt
+ [C_INFO] 1 FALSE
+ [TEXT]
+ [TEXT] Footer
+ [TEXT]
+ [INCLUDE] base.tmplt
+ $0 = /base.tmplt
+ [INFO] base.tmplt
+ [C_INFO] 1 FALSE
+ [TEXT] base!
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0018_testme/test.py 12a23c6271b00d31cd70b5134deafa2292e54730
+++ harness/sources/templates_parser/regtests/tests/0018_testme/test.py 12a23c6271b00d31cd70b5134deafa2292e54730
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme31.tmplt"])
+run('print_tree', ["testme31.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0018_testme/testme31.tmplt 8f84aac433897eb165a13b84dcea08ec138e1a93
+++ harness/sources/templates_parser/regtests/tests/0018_testme/testme31.tmplt 8f84aac433897eb165a13b84dcea08ec138e1a93
@@ -0,0 +1,2 @@
+
+@@INCLUDE@@ dir/file.tmplt
============================================================
--- harness/sources/templates_parser/regtests/tests/0019_testme/test.out 9e2383a8befa42395b84543c4c3b6f1c13cb0e60
+++ harness/sources/templates_parser/regtests/tests/0019_testme/test.out 9e2383a8befa42395b84543c4c3b6f1c13cb0e60
@@ -0,0 +1,66 @@
+
+a value
+[ val]
+
+a value
+[value a]
+
+a text
+[text a]
+
+ a text with < 6 words & good 92 chars like + >
+[1 (6 words & good )]
+
+ a text with < 6 words & good 92 chars like + >
+[1 ( a text with < ) 2 ( words & good 9) 3 ( chars like + > )]
+
+ a text with < 6 words & good 92 chars like + >
+[1 ( a text with ) 2 ( 6 words & good 9) 3 ( chars like + > )]
+
+vector_tag
+tag_vector
+
+ a text with < 6 WORDs & good 92 chars like + >
+
+ toto titi tata tata titi toto tata titi toto titi titi
+toto .... titi tata tata titi toto tata titi toto titi titi
+titi toto .... tata tata titi toto tata titi toto titi titi
+tata toto titi .... tata titi toto tata titi toto titi titi
+toto .... titi tata tata titi .... tata titi .... titi titi
+titi toto .... tata tata .... toto tata .... toto .... ....
+tata toto titi .... .... titi toto .... titi toto titi titi
+tata toto titi _\1_ _\1_ titi toto _\1_ titi toto titi titi
+[INFO] testme32.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[TEXT] @_VAR1_@
+[TEXT] [@_REPLACE(a(.*)ue/\1):VAR1_@]
+[TEXT]
+[TEXT] @_VAR1_@
+[TEXT] [@_REPLACE(^([a-z]+) ([a-z]+).*/\2 \1):VAR1_@]
+[TEXT]
+[TEXT] @_SLICE(2 .. 8):CONTRACT:NO_DIGIT:CLEAN_TEXT:FILTER_@
+[TEXT] [@_REPLACE(^([a-z]+) ([a-z]+).*/\2 \1):SLICE(2 .. 8):CONTRACT:NO_DIGIT:CLEAN_TEXT:FILTER_@]
+[TEXT]
+[TEXT] @_FILTER_@
+[TEXT] [@_REPLACE(^[^6]+([^9]+).*$/1 (\1)):FILTER_@]
+[TEXT]
+[TEXT] @_FILTER_@
+[TEXT] [@_REPLACE(^(.*)6(.*)2(.*)$/1 (\1) 2 (\2) 3 (\3)):FILTER_@]
+[TEXT]
+[TEXT] @_FILTER_@
+[TEXT] [@_REPLACE(^(.*)<(.*)2(.*)$/1 (\1) 2 (\2) 3 (\3)):FILTER_@]
+[TEXT]
+[TEXT] @_REPLACE(([^_]+)/\1):VT_@
+[TEXT] @_REPLACE(([a-z]+)_([a-z]+)/\2_\1):VT_@
+[TEXT]
+[TEXT] @_REPLACE(word/WORD):FILTER_@
+[TEXT]
+[TEXT] @_TEXT_@
+[TEXT] toto @_REPLACE(toto/....):TEXT_@
+[TEXT] titi @_REPLACE(titi/....):TEXT_@
+[TEXT] tata @_REPLACE(tata/....):TEXT_@
+[TEXT] toto @_REPLACE_ALL(toto/....):TEXT_@
+[TEXT] titi @_REPLACE_ALL(titi/....):TEXT_@
+[TEXT] tata @_REPLACE_ALL(tata/....):TEXT_@
+[TEXT] tata @_REPLACE_ALL(tata/_\1_):TEXT_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0019_testme/test.py 07e4337e0d5b8d35a720293b5e58dc29e7e0c0a0
+++ harness/sources/templates_parser/regtests/tests/0019_testme/test.py 07e4337e0d5b8d35a720293b5e58dc29e7e0c0a0
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme32.tmplt"])
+run('print_tree', ["testme32.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0019_testme/testme32.tmplt 9d0a78aa42ebc65dab3db8124d4fbe6c505e81be
+++ harness/sources/templates_parser/regtests/tests/0019_testme/testme32.tmplt 9d0a78aa42ebc65dab3db8124d4fbe6c505e81be
@@ -0,0 +1,32 @@
+
+@_VAR1_@
+[@_REPLACE(a(.*)ue):VAR1_@]
+
+@_VAR1_@
+[@_REPLACE(^([a-z]+) ([a-z]+).*/\2 \1):VAR1_@]
+
+@_SLICE(2..8):CONTRACT:NO_DIGIT:CLEAN_TEXT:FILTER_@
+[@_REPLACE(^([a-z]+) ([a-z]+).*/\2 \1):SLICE(2..8):CONTRACT:NO_DIGIT:CLEAN_TEXT:FILTER_@]
+
+@_FILTER_@
+[@_REPLACE(^[^6]+([^9]+).*$/1 (\1)):FILTER_@]
+
+@_FILTER_@
+[@_REPLACE(^(.*)6(.*)2(.*)$/1 (\1) 2 (\2) 3 (\3)):FILTER_@]
+
+@_FILTER_@
+[@_REPLACE(^(.*)<(.*)2(.*)$/1 (\1) 2 (\2) 3 (\3)):FILTER_@]
+
+@_REPLACE(([^_]+)):VT_@
+@_REPLACE(([a-z]+)_([a-z]+)/\2_\1):VT_@
+
+@_REPLACE(word/WORD):FILTER_@
+
+ @_TEXT_@
+toto @_REPLACE(toto/....):TEXT_@
+titi @_REPLACE(titi/....):TEXT_@
+tata @_REPLACE(tata/....):TEXT_@
+toto @_REPLACE_ALL(toto/....):TEXT_@
+titi @_REPLACE_ALL(titi/....):TEXT_@
+tata @_REPLACE_ALL(tata/....):TEXT_@
+tata @_REPLACE_ALL(tata/_\1_):TEXT_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0020_testme/test.out 59937a91df7353c6afa9e2baf01a9b19be5cbe73
+++ harness/sources/templates_parser/regtests/tests/0020_testme/test.out 59937a91df7353c6afa9e2baf01a9b19be5cbe73
@@ -0,0 +1,11 @@
+Does it match? YES
+ It definetely match !
+
+[INFO] testme38.tmplt
+[C_INFO] 1 FALSE
+[TEXT] Does it match? @_YES_NO:MATCH(Test):TEST_VAR_@
+[IF] @_MATCH(Test):TEST_VAR_@
+ [TEXT] It definetely match !
+[ELSE]
+ [TEXT] Hmm... Contradiction!
+[END_IF]
============================================================
--- harness/sources/templates_parser/regtests/tests/0020_testme/test.py 62c2aa7a06fd84c705949ba0dae10fe7f250384e
+++ harness/sources/templates_parser/regtests/tests/0020_testme/test.py 62c2aa7a06fd84c705949ba0dae10fe7f250384e
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme38.tmplt"])
+run('print_tree', ["testme38.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0020_testme/testme38.tmplt 69ad626a9bc70757535189c22baa585434d51c41
+++ harness/sources/templates_parser/regtests/tests/0020_testme/testme38.tmplt 69ad626a9bc70757535189c22baa585434d51c41
@@ -0,0 +1,6 @@
+Does it match? @_YES_NO:MATCH(Test):TEST_VAR_@
+@@IF@@ @_MATCH(Test):TEST_VAR_@
+ It definetely match !
+@@ELSE@@
+ Hmm... Contradiction!
+@@END_IF@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0021_testme/test.out d3528443baa37f7a6b37dc8751989f244558003b
+++ harness/sources/templates_parser/regtests/tests/0021_testme/test.out d3528443baa37f7a6b37dc8751989f244558003b
@@ -0,0 +1,18 @@
+
+tag:vector
+tag):vector
+TAG:VECTOR
+TAG(:VECTOR
+tag)_@vector
+tag)@_vector
+tag)@\_vector
+[INFO] testme53.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[TEXT] @_REPLACE(([a-z]+)_([a-z]+)/\2:\1):VT_@
+[TEXT] @_REPLACE(([a-z]+)_([a-z]+)/\2):\1):VT_@
+[TEXT] @_UPPER:REPLACE(([a-z]+)_([a-z]+)/\2:\1):VT_@
+[TEXT] @_UPPER:REPLACE(([a-z]+)_([a-z]+)/\2(:\1):VT_@
+[TEXT] @_REPLACE(([a-z]+)_([a-z]+)/\2)_@\1):VT_@
+[TEXT] @_REPLACE(([a-z]+)_([a-z]+)/\2)@_\1):VT_@
+[TEXT] @_REPLACE(([a-z]+)_([a-z]+)/\2)@\_\1):VT_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0021_testme/test.py 5d47e7fb4e00de216167fc34f3eea3ded084207d
+++ harness/sources/templates_parser/regtests/tests/0021_testme/test.py 5d47e7fb4e00de216167fc34f3eea3ded084207d
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme53.tmplt"])
+run('print_tree', ["testme53.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0021_testme/testme53.tmplt 84b0c84c0d8e1a4921683f5e72eb03b546eb7087
+++ harness/sources/templates_parser/regtests/tests/0021_testme/testme53.tmplt 84b0c84c0d8e1a4921683f5e72eb03b546eb7087
@@ -0,0 +1,8 @@
+
+@_REPLACE(([a-z]+)_([a-z]+)/\2:\1):VT_@
+@_REPLACE(([a-z]+)_([a-z]+)/\2\):\1):VT_@
+@_UPPER:REPLACE(([a-z]+)_([a-z]+)/\2:\1):VT_@
+@_UPPER:REPLACE(([a-z]+)_([a-z]+)/\2\(:\1):VT_@
+@_REPLACE(([a-z]+)_([a-z]+)/\2\)_\@\1):VT_@
+@_REPLACE(([a-z]+)_([a-z]+)/\2\)@\_\1):VT_@
+@_REPLACE(([a-z]+)_([a-z]+)/\2\)@\\_\1):VT_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0022_testme/test.out a903b2f12790fcd4e12979d5551424f977f9ca8a
+++ harness/sources/templates_parser/regtests/tests/0022_testme/test.out a903b2f12790fcd4e12979d5551424f977f9ca8a
@@ -0,0 +1,266 @@
+
+-- Table 1
+
+ lab1:A1.1
+ lab1:A1.2
+ lab1:A1.3
+ lab2:A2.1
+ lab2:A2.2
+ lab2:A2.3
+ lab3:A3.1
+ lab3:A3.2
+ lab3:A3.3
+ lab4:A4.1
+ lab4:A4.2
+ lab4:A4.3
+
+-- Table 2
+
+lab1
+ lab1:A1.1
+ lab1:A1.2
+ lab1:A1.3
+lab2
+ lab2:A2.1
+ lab2:A2.2
+ lab2:A2.3
+lab3
+ lab3:A3.1
+ lab3:A3.2
+ lab3:A3.3
+lab4
+ lab4:A4.1
+ lab4:A4.2
+ lab4:A4.3
+
+-- Table 3
+
+lab1
+lab1
+ lab1:A1.1
+ lab1:A1.2
+ lab1:A1.3
+lab2
+ lab2:A2.1
+ lab2:A2.2
+ lab2:A2.3
+lab3
+ lab3:A3.1
+ lab3:A3.2
+ lab3:A3.3
+lab4
+ lab4:A4.1
+ lab4:A4.2
+ lab4:A4.3
+lab2
+lab1
+ lab1:A1.1
+ lab1:A1.2
+ lab1:A1.3
+lab2
+ lab2:A2.1
+ lab2:A2.2
+ lab2:A2.3
+lab3
+ lab3:A3.1
+ lab3:A3.2
+ lab3:A3.3
+lab4
+ lab4:A4.1
+ lab4:A4.2
+ lab4:A4.3
+lab3
+lab1
+ lab1:A1.1
+ lab1:A1.2
+ lab1:A1.3
+lab2
+ lab2:A2.1
+ lab2:A2.2
+ lab2:A2.3
+lab3
+ lab3:A3.1
+ lab3:A3.2
+ lab3:A3.3
+lab4
+ lab4:A4.1
+ lab4:A4.2
+ lab4:A4.3
+lab4
+lab1
+ lab1:A1.1
+ lab1:A1.2
+ lab1:A1.3
+lab2
+ lab2:A2.1
+ lab2:A2.2
+ lab2:A2.3
+lab3
+ lab3:A3.1
+ lab3:A3.2
+ lab3:A3.3
+lab4
+ lab4:A4.1
+ lab4:A4.2
+ lab4:A4.3
+
+-- Table 4
+
+lab1
+lab1
+ lab1:A1.1
+ lab1:A1.2
+ lab1:A1.3
+lab2
+ lab1:A2.1
+ lab1:A2.2
+ lab1:A2.3
+lab3
+ lab1:A3.1
+ lab1:A3.2
+ lab1:A3.3
+lab4
+ lab1:A4.1
+ lab1:A4.2
+ lab1:A4.3
+lab2
+lab1
+ lab2:A1.1
+ lab2:A1.2
+ lab2:A1.3
+lab2
+ lab2:A2.1
+ lab2:A2.2
+ lab2:A2.3
+lab3
+ lab2:A3.1
+ lab2:A3.2
+ lab2:A3.3
+lab4
+ lab2:A4.1
+ lab2:A4.2
+ lab2:A4.3
+lab3
+lab1
+ lab3:A1.1
+ lab3:A1.2
+ lab3:A1.3
+lab2
+ lab3:A2.1
+ lab3:A2.2
+ lab3:A2.3
+lab3
+ lab3:A3.1
+ lab3:A3.2
+ lab3:A3.3
+lab4
+ lab3:A4.1
+ lab3:A4.2
+ lab3:A4.3
+lab4
+lab1
+ lab4:A1.1
+ lab4:A1.2
+ lab4:A1.3
+lab2
+ lab4:A2.1
+ lab4:A2.2
+ lab4:A2.3
+lab3
+ lab4:A3.1
+ lab4:A3.2
+ lab4:A3.3
+lab4
+ lab4:A4.1
+ lab4:A4.2
+ lab4:A4.3
+
+-- Table 5
+
+lab1, lab2, lab3, lab4 {lab1}
+lab1, lab2, lab3, lab4 {lab2}
+lab1, lab2, lab3, lab4 {lab3}
+lab1, lab2, lab3, lab4 {lab4}
+
+[INFO] testme54.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[TEXT] -- Table 1
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_LABELS'Up_Level_@:@_MAT_@
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] -- Table 2
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_LABELS_@
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_LABELS'Up_Level_@:@_MAT_@
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] -- Table 3
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_LABELS_@
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_LABELS_@
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_LABELS'Up_Level_@:@_MAT_@
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] -- Table 4
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_LABELS_@
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_LABELS_@
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_LABELS'Up_Level(2)_@:@_MAT_@
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] -- Table 5
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_LABELS'Up_Level(2)_@ {@_LABELS_@}
+ [END_BLOCK]
+[END_TABLE]
============================================================
--- harness/sources/templates_parser/regtests/tests/0022_testme/test.py 6e431d8676df5418bd61d91a00d28ae24d0014f0
+++ harness/sources/templates_parser/regtests/tests/0022_testme/test.py 6e431d8676df5418bd61d91a00d28ae24d0014f0
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme54.tmplt"])
+run('print_tree', ["testme54.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0022_testme/testme54.tmplt 07a382598dd3c9bab634ec52250f38b1f7db690f
+++ harness/sources/templates_parser/regtests/tests/0022_testme/testme54.tmplt 07a382598dd3c9bab634ec52250f38b1f7db690f
@@ -0,0 +1,47 @@
+
+-- Table 1
+
+@@TABLE@@
+@@TABLE@@
+ @_LABELS'Up_Level_@:@_MAT_@
+@@END_TABLE@@
+@@END_TABLE@@
+
+-- Table 2
+
+@@TABLE@@
+@_LABELS_@
+@@TABLE@@
+ @_LABELS'Up_Level(1)_@:@_MAT_@
+@@END_TABLE@@
+@@END_TABLE@@
+
+-- Table 3
+
+@@TABLE@@
+@_LABELS_@
+@@TABLE@@
+@_LABELS_@
+@@TABLE@@
+ @_LABELS'Up_Level(1)_@:@_MAT_@
+@@END_TABLE@@
+@@END_TABLE@@
+@@END_TABLE@@
+
+-- Table 4
+
+@@TABLE@@
+@_LABELS_@
+@@TABLE@@
+@_LABELS_@
+@@TABLE@@
+ @_LABELS'Up_Level(2)_@:@_MAT_@
+@@END_TABLE@@
+@@END_TABLE@@
+@@END_TABLE@@
+
+-- Table 5
+
+@@TABLE@@
+@_LABELS'Up_Level(2)_@ {@_LABELS_@}
+@@END_TABLE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0023_testme/test.out 1de50712820d7bdc027a20ff2d913cc3a83959b2
+++ harness/sources/templates_parser/regtests/tests/0023_testme/test.out 1de50712820d7bdc027a20ff2d913cc3a83959b2
@@ -0,0 +1,210 @@
+
+Test for include with parameters with default values
+
+**********************************************************
+
+
+1) one, toto, TOTO
+2) two, two, two
+3) , trois et trois
+4) , quatre
+5) , cinq
+6) , six
+7) , sept
+8) , huit
+9) , neuf, Neuf
+toujours
+**********************************************************
+
+
+1) one, toto, TOTO
+2) two, two, two
+3) , trois et trois
+4) , quatre
+5) , cinq
+6) six, six
+7) , sept
+8) , huit
+9) , neuf, Neuf
+toujours
+**********************************************************
+
+
+1) , toto, TOTO
+2) two, two, two
+3) , trois et trois
+4) , quatre
+5) , cinq
+6) six, six
+7) , sept
+8) eight, eight
+9) , neuf, Neuf
+toujours
+**********************************************************
+
+
+1) , this is P1, THIS IS P1
+2) two, this is P2, two
+3) , trois et trois
+4) , quatre
+5) , cinq
+6) six, six
+7) , sept
+8) eight, eight
+9) true, true, True
+toujours
+**********************************************************
+[INFO] testme59.tmplt
+ -> testme59.incl
+ -> testme59.incl
+ -> testme59.incl
+ -> testme59.incl
+[C_INFO] 1 FALSE
+[TEXT]
+[TEXT] Test for include with parameters with default values
+[TEXT]
+[TEXT] **********************************************************
+[INCLUDE] testme59.incl
+ $0 = testme59.incl
+ $1 = one
+ $2 = two
+ [INFO] testme59.incl
+ [C_INFO] 1 FALSE
+ [IF] (not @_$9_@)
+ [SET] P1 = toto
+ [SET] P2 = $2 | deux
+ [ELSE]
+ [SET] P1 = "this is P1"
+ [SET] P2 = "this is P2"
+ [END_IF]
+ [TEXT]
+ [SET] P3 = $3 | "trois et trois"
+ [SET] P4 = $4 | quatre
+ [SET] P5 = $5 | cinq
+ [SET] P6 = $6 | six
+ [SET] P7 = $7 | sept
+ [SET] P8 = $8 | huit
+ [SET] P9 = $9 | neuf
+ [SET] ALIAS = $2
+ [SET] CST = toujours
+ [TEXT]
+ [TEXT] 1) @_$1_@, @_P1_@, @_UPPER:P1_@
+ [TEXT] 2) @_$2_@, @_P2_@, @_ALIAS_@
+ [TEXT] 3) @_$3_@, @_P3_@
+ [TEXT] 4) @_$4_@, @_P4_@
+ [TEXT] 5) @_$5_@, @_P5_@
+ [TEXT] 6) @_$6_@, @_P6_@
+ [TEXT] 7) @_$7_@, @_P7_@
+ [TEXT] 8) @_$8_@, @_P8_@
+ [TEXT] 9) @_$9_@, @_P9_@, @_CAPITALIZE:P9_@
+ [TEXT] @_CST_@
+[TEXT] **********************************************************
+[INCLUDE] testme59.incl
+ $0 = testme59.incl
+ $1 = one
+ $2 = two
+ $6 = six
+ [INFO] testme59.incl
+ [C_INFO] 1 FALSE
+ [IF] (not @_$9_@)
+ [SET] P1 = toto
+ [SET] P2 = $2 | deux
+ [ELSE]
+ [SET] P1 = "this is P1"
+ [SET] P2 = "this is P2"
+ [END_IF]
+ [TEXT]
+ [SET] P3 = $3 | "trois et trois"
+ [SET] P4 = $4 | quatre
+ [SET] P5 = $5 | cinq
+ [SET] P6 = $6 | six
+ [SET] P7 = $7 | sept
+ [SET] P8 = $8 | huit
+ [SET] P9 = $9 | neuf
+ [SET] ALIAS = $2
+ [SET] CST = toujours
+ [TEXT]
+ [TEXT] 1) @_$1_@, @_P1_@, @_UPPER:P1_@
+ [TEXT] 2) @_$2_@, @_P2_@, @_ALIAS_@
+ [TEXT] 3) @_$3_@, @_P3_@
+ [TEXT] 4) @_$4_@, @_P4_@
+ [TEXT] 5) @_$5_@, @_P5_@
+ [TEXT] 6) @_$6_@, @_P6_@
+ [TEXT] 7) @_$7_@, @_P7_@
+ [TEXT] 8) @_$8_@, @_P8_@
+ [TEXT] 9) @_$9_@, @_P9_@, @_CAPITALIZE:P9_@
+ [TEXT] @_CST_@
+[TEXT] **********************************************************
+[INCLUDE] testme59.incl
+ $0 = testme59.incl
+ $2 = two
+ $6 = six
+ $8 = eight
+ [INFO] testme59.incl
+ [C_INFO] 1 FALSE
+ [IF] (not @_$9_@)
+ [SET] P1 = toto
+ [SET] P2 = $2 | deux
+ [ELSE]
+ [SET] P1 = "this is P1"
+ [SET] P2 = "this is P2"
+ [END_IF]
+ [TEXT]
+ [SET] P3 = $3 | "trois et trois"
+ [SET] P4 = $4 | quatre
+ [SET] P5 = $5 | cinq
+ [SET] P6 = $6 | six
+ [SET] P7 = $7 | sept
+ [SET] P8 = $8 | huit
+ [SET] P9 = $9 | neuf
+ [SET] ALIAS = $2
+ [SET] CST = toujours
+ [TEXT]
+ [TEXT] 1) @_$1_@, @_P1_@, @_UPPER:P1_@
+ [TEXT] 2) @_$2_@, @_P2_@, @_ALIAS_@
+ [TEXT] 3) @_$3_@, @_P3_@
+ [TEXT] 4) @_$4_@, @_P4_@
+ [TEXT] 5) @_$5_@, @_P5_@
+ [TEXT] 6) @_$6_@, @_P6_@
+ [TEXT] 7) @_$7_@, @_P7_@
+ [TEXT] 8) @_$8_@, @_P8_@
+ [TEXT] 9) @_$9_@, @_P9_@, @_CAPITALIZE:P9_@
+ [TEXT] @_CST_@
+[TEXT] **********************************************************
+[INCLUDE] testme59.incl
+ $0 = testme59.incl
+ $2 = two
+ $6 = six
+ $8 = eight
+ $9 = true
+ [INFO] testme59.incl
+ [C_INFO] 1 FALSE
+ [IF] (not @_$9_@)
+ [SET] P1 = toto
+ [SET] P2 = $2 | deux
+ [ELSE]
+ [SET] P1 = "this is P1"
+ [SET] P2 = "this is P2"
+ [END_IF]
+ [TEXT]
+ [SET] P3 = $3 | "trois et trois"
+ [SET] P4 = $4 | quatre
+ [SET] P5 = $5 | cinq
+ [SET] P6 = $6 | six
+ [SET] P7 = $7 | sept
+ [SET] P8 = $8 | huit
+ [SET] P9 = $9 | neuf
+ [SET] ALIAS = $2
+ [SET] CST = toujours
+ [TEXT]
+ [TEXT] 1) @_$1_@, @_P1_@, @_UPPER:P1_@
+ [TEXT] 2) @_$2_@, @_P2_@, @_ALIAS_@
+ [TEXT] 3) @_$3_@, @_P3_@
+ [TEXT] 4) @_$4_@, @_P4_@
+ [TEXT] 5) @_$5_@, @_P5_@
+ [TEXT] 6) @_$6_@, @_P6_@
+ [TEXT] 7) @_$7_@, @_P7_@
+ [TEXT] 8) @_$8_@, @_P8_@
+ [TEXT] 9) @_$9_@, @_P9_@, @_CAPITALIZE:P9_@
+ [TEXT] @_CST_@
+[TEXT] **********************************************************
============================================================
--- harness/sources/templates_parser/regtests/tests/0023_testme/test.py b3f025052fe9c570f3f7dc5b355fb1e3c48caf8a
+++ harness/sources/templates_parser/regtests/tests/0023_testme/test.py b3f025052fe9c570f3f7dc5b355fb1e3c48caf8a
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme59.tmplt"])
+run('print_tree', ["testme59.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0023_testme/testme59.incl 8801c2af700d80f8404fe9dbaf3ba92cf3e68d93
+++ harness/sources/templates_parser/regtests/tests/0023_testme/testme59.incl 8801c2af700d80f8404fe9dbaf3ba92cf3e68d93
@@ -0,0 +1,28 @@
+@@IF@@ not @_$9_@
+ @@SET@@ P1 = toto
+ @@SET@@ P2 = $2 | deux
+@@ELSE@@
+ @@SET@@ P1 = "this is P1"
+ @@SET@@ P2 = "this is P2"
+@@END_IF@@
+
+@@SET@@ P3 = $3 | "trois et trois"
+@@SET@@ P4 = $4 | quatre
+@@SET@@ P5 = $5 | cinq
+@@SET@@ P6 = $6 | six
+@@SET@@ P7 = $7 | sept
+@@SET@@ P8 = $8 | huit
+@@SET@@ P9 = $9 | neuf
+@@SET@@ ALIAS = $2
+@@SET@@ CST = toujours
+
+1) @_$1_@, @_P1_@, @_UPPER:P1_@
+2) @_$2_@, @_P2_@, @_ALIAS_@
+3) @_$3_@, @_P3_@
+4) @_$4_@, @_P4_@
+5) @_$5_@, @_P5_@
+6) @_$6_@, @_P6_@
+7) @_$7_@, @_P7_@
+8) @_$8_@, @_P8_@
+9) @_$9_@, @_P9_@, @_CAPITALIZE:P9_@
+@_CST_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0023_testme/testme59.tmplt 569c49da4cebae2d0d12f8c3901a011314555fdb
+++ harness/sources/templates_parser/regtests/tests/0023_testme/testme59.tmplt 569c49da4cebae2d0d12f8c3901a011314555fdb
@@ -0,0 +1,12 @@
+
+Test for include with parameters with default values
+
+**********************************************************
+@@INCLUDE@@ testme59.incl one two
+**********************************************************
+@@INCLUDE@@ testme59.incl (1=>one, 2=>two, 6=>six)
+**********************************************************
+@@INCLUDE@@ testme59.incl (2=>two, 6=>six, 8=>eight)
+**********************************************************
+@@INCLUDE@@ testme59.incl (2=>two, 6=>six, 8=>eight, 9=>true)
+**********************************************************
============================================================
--- harness/sources/templates_parser/regtests/tests/0024_testme/test.out 7f2f746855bbd9c4adca7df9fda4f91872803e9d
+++ harness/sources/templates_parser/regtests/tests/0024_testme/test.out 7f2f746855bbd9c4adca7df9fda4f91872803e9d
@@ -0,0 +1,113 @@
+
+-- Inline and IF
+
+word1
+ word2.2
+word3
+
+word1 word2.2 word3
+
+word1
+ word2.1
+word3
+
+word1 , word2.1 , word3
+
+xyz
+
+-- Inline and TABLE
+
+one
+two
+three
+
+_one_:_two_:_three_
+_one_(:)_two_(:)_three_(:)xx
+
+aa|_one_|_two_|_three_|xx|zz
+
+abc
+[INFO] testme64.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[TEXT] -- Inline and IF
+[TEXT]
+[TEXT] word1
+[IF] @_COND1_@
+ [TEXT] word2.1
+[ELSE]
+ [TEXT] word2.2
+[END_IF]
+[TEXT] word3
+[TEXT]
+[INLINE] ( )
+ [TEXT] word1
+ [IF] @_COND1_@
+ [TEXT] word2.1
+ [ELSE]
+ [TEXT] word2.2
+ [END_IF]
+ [TEXT] word3
+[END_INLINE]
+[TEXT]
+[TEXT] word1
+[IF] @_COND2_@
+ [TEXT] word2.1
+[ELSE]
+ [TEXT] word2.2
+[END_IF]
+[TEXT] word3
+[TEXT]
+[INLINE] ( , )
+ [TEXT] word1 ,
+ [IF] @_COND2_@
+ [TEXT] word2.1 ,
+ [ELSE]
+ [TEXT] word2.2 ,
+ [END_IF]
+ [TEXT] word3
+[END_INLINE]
+[TEXT]
+[TEXT] xyz
+[TEXT]
+[TEXT] -- Inline and TABLE
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_VAR3_@
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[INLINE] (:)
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] _@_VAR3_@_
+ [END_BLOCK]
+ [END_TABLE]
+[END_INLINE]
+[TEXT]
+[INLINE] ((:))
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] _@_VAR3_@_
+ [END_BLOCK]
+ [END_TABLE]
+ [TEXT] xx
+[END_INLINE]
+[TEXT]
+[INLINE] (|)
+ [TEXT] aa|
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] _@_VAR3_@_
+ [END_BLOCK]
+ [END_TABLE]
+ [TEXT] xx|
+ [TEXT] zz
+[END_INLINE]
+[TEXT]
+[TEXT] abc
============================================================
--- harness/sources/templates_parser/regtests/tests/0024_testme/test.py 49f40575ea7d15e7044a62f45d4cc8ba1aa4e2be
+++ harness/sources/templates_parser/regtests/tests/0024_testme/test.py 49f40575ea7d15e7044a62f45d4cc8ba1aa4e2be
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme64.tmplt"])
+run('print_tree', ["testme64.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0024_testme/testme64.tmplt 57c005825a8706d3207c0ee0efe6e76554921888
+++ harness/sources/templates_parser/regtests/tests/0024_testme/testme64.tmplt 57c005825a8706d3207c0ee0efe6e76554921888
@@ -0,0 +1,70 @@
+
+-- Inline and IF
+
+word1
+@@IF@@ @_COND1_@
+ word2.1
+@@ELSE@@
+ word2.2
+@@END_IF@@
+word3
+
+@@INLINE@@
+word1
+@@IF@@ @_COND1_@
+ word2.1
+@@ELSE@@
+ word2.2
+@@END_IF@@
+word3
+@@END_INLINE@@
+
+word1
+@@IF@@ @_COND2_@
+ word2.1
+@@ELSE@@
+ word2.2
+@@END_IF@@
+word3
+
+@@INLINE( , )@@
+word1
+@@IF@@ @_COND2_@
+ word2.1
+@@ELSE@@
+ word2.2
+@@END_IF@@
+word3
+@@END_INLINE@@
+
+xyz
+
+-- Inline and TABLE
+
+@@TABLE@@
+@_VAR3_@
+@@END_TABLE@@
+
+@@INLINE(:)@@
+@@TABLE@@
+_@_VAR3_@_
+@@END_TABLE@@
+@@END_INLINE@@
+
+@@INLINE((:))@@
+@@TABLE@@
+_@_VAR3_@_
+@@END_TABLE@@
+xx
+@@END_INLINE@@
+
+@@INLINE(|)@@
+aa
+@@TABLE@@
+_@_VAR3_@_
+@@END_TABLE@@
+xx
+zz
+@@END_INLINE@@
+
+abc
============================================================
--- harness/sources/templates_parser/regtests/tests/0025_testme/test.out a075c2d2895b966c5861fe17e9b4a7481f7a8692
+++ harness/sources/templates_parser/regtests/tests/0025_testme/test.out a075c2d2895b966c5861fe17e9b4a7481f7a8692
@@ -0,0 +1,91 @@
+
+
+ ONE in INV : OK
+
+ SONE in INV : OK
+
+ ONE in V5 : OK
+
+ STWO in V5 : OK
+
+ STWO in V6 : OK
+
+ VALUE in MAT : OK
+
+ A3.3 in MAT : OK
+
+ NOWHERE in MAT : OK
+
+ ZZ not found
+ A3.4 not found
+ A4.2 found
+ again! not found
+ A2.2 found
+ ! not found
+
+[INFO] testme78.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[SET] VALUE = A4.2
+[SET] NOWHERE = XxX
+[SET] SONE = 1
+[SET] STWO = two
+[TEXT]
+[IF] (@_ONE_@ in @_INV_@)
+ [TEXT] ONE in INV : OK
+[ELSE]
+ [TEXT] ONE in INV : NOK
+[END_IF]
+[TEXT]
+[IF] (@_SONE_@ in @_INV_@)
+ [TEXT] SONE in INV : OK
+[ELSE]
+ [TEXT] SONE in INV : NOK
+[END_IF]
+[TEXT]
+[IF] (@_ONE_@ in @_V5_@)
+ [TEXT] ONE in V5 : NOK
+[ELSE]
+ [TEXT] ONE in V5 : OK
+[END_IF]
+[TEXT]
+[IF] (@_STWO_@ in @_V5_@)
+ [TEXT] STWO in V5 : OK
+[ELSE]
+ [TEXT] STWO in V5 : NOK
+[END_IF]
+[TEXT]
+[IF] (@_STWO_@ in @_V6_@)
+ [TEXT] STWO in V6 : NOK
+[ELSE]
+ [TEXT] STWO in V6 : OK
+[END_IF]
+[TEXT]
+[IF] (@_VALUE_@ in @_MAT_@)
+ [TEXT] VALUE in MAT : OK
+[ELSE]
+ [TEXT] VALUE in MAT : NOK
+[END_IF]
+[TEXT]
+[IF] (A3.3 in @_MAT_@)
+ [TEXT] A3.3 in MAT : OK
+[ELSE]
+ [TEXT] A3.3 in MAT : NOK
+[END_IF]
+[TEXT]
+[IF] (@_NOWHERE_@ in @_MAT_@)
+ [TEXT] NOWHERE in MAT : NOK
+[ELSE]
+ [TEXT] NOWHERE in MAT : OK
+[END_IF]
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [IF] (@_VAR7_@ in @_MAT_@)
+ [TEXT] @_VAR7_@ found
+ [ELSE]
+ [TEXT] @_VAR7_@ not found
+ [END_IF]
+ [END_BLOCK]
+[END_TABLE]
============================================================
--- harness/sources/templates_parser/regtests/tests/0025_testme/test.py 4ba1eff2165718fde3571e0a6b5b1799503aaaf4
+++ harness/sources/templates_parser/regtests/tests/0025_testme/test.py 4ba1eff2165718fde3571e0a6b5b1799503aaaf4
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme78.tmplt"])
+run('print_tree', ["testme78.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0025_testme/testme78.tmplt db446f9b3a7b7fd5d607e5ef50608838a03b9a2a
+++ harness/sources/templates_parser/regtests/tests/0025_testme/testme78.tmplt db446f9b3a7b7fd5d607e5ef50608838a03b9a2a
@@ -0,0 +1,61 @@
+
+@@SET@@ VALUE = "A4.2"
+@@SET@@ NOWHERE = "XxX"
+@@SET@@ SONE = "1"
+@@SET@@ STWO = "two"
+
+@@IF@@ @_ONE_@ in @_INV_@
+ ONE in INV : OK
+@@ELSE@@
+ ONE in INV : NOK
+@@END_IF@@
+
+@@IF@@ @_SONE_@ in @_INV_@
+ SONE in INV : OK
+@@ELSE@@
+ SONE in INV : NOK
+@@END_IF@@
+
+@@IF@@ @_ONE_@ in @_V5_@
+ ONE in V5 : NOK
+@@ELSE@@
+ ONE in V5 : OK
+@@END_IF@@
+
+@@IF@@ @_STWO_@ in @_V5_@
+ STWO in V5 : OK
+@@ELSE@@
+ STWO in V5 : NOK
+@@END_IF@@
+
+@@IF@@ @_STWO_@ in @_V6_@
+ STWO in V6 : NOK
+@@ELSE@@
+ STWO in V6 : OK
+@@END_IF@@
+
+@@IF@@ @_VALUE_@ in @_MAT_@
+ VALUE in MAT : OK
+@@ELSE@@
+ VALUE in MAT : NOK
+@@END_IF@@
+
+@@IF@@ "A3.3" in @_MAT_@
+ A3.3 in MAT : OK
+@@ELSE@@
+ A3.3 in MAT : NOK
+@@END_IF@@
+
+@@IF@@ @_NOWHERE_@ in @_MAT_@
+ NOWHERE in MAT : NOK
+@@ELSE@@
+ NOWHERE in MAT : OK
+@@END_IF@@
+
+@@TABLE@@
+ @@IF@@ @_VAR7_@ in @_MAT_@
+ @_VAR7_@ found
+ @@ELSE@@
+ @_VAR7_@ not found
+ @@END_IF@@
+@@END_TABLE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0026_testme/test.out 02cf65f3ad32363d55f32ddf621a7a2922efcc3e
+++ harness/sources/templates_parser/regtests/tests/0026_testme/test.out 02cf65f3ad32363d55f32ddf621a7a2922efcc3e
@@ -0,0 +1,117 @@
+
+0 ---------------------------
+
+ 1> one
+ 2> two
+ 3> three
+ 1> (one)
+ 2> (two)
+ 3>
+
+1 ---------------------------
+
+ 1> one
+ 2> two
+ 3> three
+ 1> (one)
+ 2> (two)
+
+2 ---------------------------
+
+ 1> one
+ 2> two
+ 3> three
+ 1> (one)
+ 2> (two)
+
+3 ---------------------------
+
+ 3> three
+ 2> two
+ 1> one
+ 2> (two)
+ 1> (one)
+
+4 ---------------------------
+
+ 2> a value (two)
+ 1> a value (one)
+ 3> a value three
+ 2> a value two
+ 1> a value one
+
+[INFO] testme80.tmplt
+[C_INFO] 1 FALSE
+[TEXT]
+[TEXT] 0 ---------------------------
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_TABLE_LINE_@> @_MATDSIZE_@
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] 1 ---------------------------
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TABLE]
+ [BLOCK]
+ [COMMON]
+ [IF] (@_MATDSIZE_@ /= )
+ [TEXT] @_TABLE_LINE_@> @_MATDSIZE_@
+ [ELSE]
+ [END_IF]
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] 2 ---------------------------
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TABLE] TERSE
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_TABLE_LINE_@> @_MATDSIZE_@
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] 3 ---------------------------
+[TEXT]
+[TABLE]
+ [BLOCK]
+ [COMMON]
+ [TABLE] REVERSE TERSE
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_TABLE_LINE_@> @_MATDSIZE_@
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
+[TEXT]
+[TEXT] 4 ---------------------------
+[TEXT]
+[TABLE] REVERSE
+ [BLOCK]
+ [COMMON]
+ [TABLE] REVERSE TERSE
+ [BLOCK]
+ [COMMON]
+ [TEXT] @_TABLE_LINE_@> @_VAR1_@ @_MATDSIZE_@
+ [END_BLOCK]
+ [END_TABLE]
+ [END_BLOCK]
+[END_TABLE]
============================================================
--- harness/sources/templates_parser/regtests/tests/0026_testme/test.py 644e8e345edfd8e017ff469c2925fd3f68eb3a61
+++ harness/sources/templates_parser/regtests/tests/0026_testme/test.py 644e8e345edfd8e017ff469c2925fd3f68eb3a61
@@ -0,0 +1,4 @@
+from test_support import *
+
+run('testme', ["testme80.tmplt"])
+run('print_tree', ["testme80.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0026_testme/testme80.tmplt 265b316b8f816ae628a058244c93015b43145b46
+++ harness/sources/templates_parser/regtests/tests/0026_testme/testme80.tmplt 265b316b8f816ae628a058244c93015b43145b46
@@ -0,0 +1,42 @@
+
+0 ---------------------------
+
+@@TABLE@@
+ @@TABLE@@
+ @_TABLE_LINE_@> @_MATDSIZE_@
+ @@END_TABLE@@
+@@END_TABLE@@
+
+1 ---------------------------
+
+@@TABLE@@
+ @@TABLE@@
+ @@IF@@ @_MATDSIZE_@ /= ""
+ @_TABLE_LINE_@> @_MATDSIZE_@
+ @@END_IF@@
+ @@END_TABLE@@
+@@END_TABLE@@
+
+2 ---------------------------
+
+@@TABLE@@
+ @@TABLE'TERSE@@
+ @_TABLE_LINE_@> @_MATDSIZE_@
+ @@END_TABLE@@
+@@END_TABLE@@
+
+3 ---------------------------
+
+@@TABLE@@
+ @@TABLE'TERSE'REVERSE@@
+ @_TABLE_LINE_@> @_MATDSIZE_@
+ @@END_TABLE@@
+@@END_TABLE@@
+
+4 ---------------------------
+
+@@TABLE'REVERSE@@
+ @@TABLE'TERSE'REVERSE@@
+ @_TABLE_LINE_@> @_VAR1_@ @_MATDSIZE_@
+ @@END_TABLE@@
+@@END_TABLE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0027_testme/test.out 061769f6173da6888f7f94b8f4c627f68910ca14
+++ harness/sources/templates_parser/regtests/tests/0027_testme/test.out 061769f6173da6888f7f94b8f4c627f68910ca14
@@ -0,0 +1,2 @@
+
+raised TEMPLATES_PARSER.TEMPLATE_ERROR : @@END_TABLE@@ found, @@END_IF@@ expected, in testme4.tmplt at line 4
============================================================
--- harness/sources/templates_parser/regtests/tests/0027_testme/test.py ef854894438fc9b82a6890b11c4103aa4816259c
+++ harness/sources/templates_parser/regtests/tests/0027_testme/test.py ef854894438fc9b82a6890b11c4103aa4816259c
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme4.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0027_testme/testme4.tmplt 1acf04238a30a77070c78a94be18ec1703f74061
+++ harness/sources/templates_parser/regtests/tests/0027_testme/testme4.tmplt 1acf04238a30a77070c78a94be18ec1703f74061
@@ -0,0 +1,5 @@
+@@IF@@ TRUE
+ toto
+ titi
+@@END_TABLE@@
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0028_testme/test.out d98371c0c2d1fe4a3709cd403ec072fa904fe47d
+++ harness/sources/templates_parser/regtests/tests/0028_testme/test.out d98371c0c2d1fe4a3709cd403ec072fa904fe47d
@@ -0,0 +1,2 @@
+
+raised TEMPLATES_PARSER.TEMPLATE_ERROR : EOF found, @@END_TABLE@@ expected, in testme12.tmplt at line 3
============================================================
--- harness/sources/templates_parser/regtests/tests/0028_testme/test.py d63e420b0de85291bda75ba59738c3398bfbc2d9
+++ harness/sources/templates_parser/regtests/tests/0028_testme/test.py d63e420b0de85291bda75ba59738c3398bfbc2d9
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme12.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0028_testme/testme12.tmplt f6ef04f433a9e9cad3d8ec24d7f6bcff4f08a6d9
+++ harness/sources/templates_parser/regtests/tests/0028_testme/testme12.tmplt f6ef04f433a9e9cad3d8ec24d7f6bcff4f08a6d9
@@ -0,0 +1,3 @@
+@@TABLE@@ @@-- this is a table
+ddd
+@@END_TABLE_@
\ No newline at end of file
============================================================
--- harness/sources/templates_parser/regtests/tests/0029_testme/test.out ab2b630a7cd07d82930495abf93a3d5108b59d7b
+++ harness/sources/templates_parser/regtests/tests/0029_testme/test.out ab2b630a7cd07d82930495abf93a3d5108b59d7b
@@ -0,0 +1,2 @@
+
+raised TEMPLATES_PARSER.TEMPLATE_ERROR : EOF found, @@END_IF@@ expected, in testme13.tmplt at line 3
============================================================
--- harness/sources/templates_parser/regtests/tests/0029_testme/test.py 58641e2eeb30eee21078185615e840b30022966f
+++ harness/sources/templates_parser/regtests/tests/0029_testme/test.py 58641e2eeb30eee21078185615e840b30022966f
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme13.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0029_testme/testme13.tmplt ddb8441d0c14cf7859c342162b651772be6d4bfa
+++ harness/sources/templates_parser/regtests/tests/0029_testme/testme13.tmplt ddb8441d0c14cf7859c342162b651772be6d4bfa
@@ -0,0 +1,3 @@
+@@IF@@ kkk
+jjj
+@@END_IF_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0030_testme/test.out f503d7343f4b6c377a20848b08a07d8c08ff384d
+++ harness/sources/templates_parser/regtests/tests/0030_testme/test.out f503d7343f4b6c377a20848b08a07d8c08ff384d
@@ -0,0 +1,2 @@
+
+raised TEMPLATES_PARSER.TEMPLATE_ERROR : missing parameter, in testme14.tmplt at line 2
============================================================
--- harness/sources/templates_parser/regtests/tests/0030_testme/test.py 72ea7b82d33d7d5a1bdca00431fd69da0e632a0c
+++ harness/sources/templates_parser/regtests/tests/0030_testme/test.py 72ea7b82d33d7d5a1bdca00431fd69da0e632a0c
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme14.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0030_testme/testme14.tmplt f4b3e72df380406783c50cbfe0e90cd0badabb23
+++ harness/sources/templates_parser/regtests/tests/0030_testme/testme14.tmplt f4b3e72df380406783c50cbfe0e90cd0badabb23
@@ -0,0 +1,4 @@
+
+@@IF@@
+jjj
+@@END_IF@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0031_testme/test.out b7f935eb69bef8a30b687bd1bf82173db75017c7
+++ harness/sources/templates_parser/regtests/tests/0031_testme/test.out b7f935eb69bef8a30b687bd1bf82173db75017c7
@@ -0,0 +1,2 @@
+
+raised TEMPLATES_PARSER.TEMPLATE_ERROR : This attribute is not valid for a matrix tag (@_MAT'Length_@) In testme19.tmplt at line 1
============================================================
--- harness/sources/templates_parser/regtests/tests/0031_testme/test.py c66e81ac8aed6d6adf941d2d4339b6adea506308
+++ harness/sources/templates_parser/regtests/tests/0031_testme/test.py c66e81ac8aed6d6adf941d2d4339b6adea506308
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme19.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0031_testme/testme19.tmplt 41d4b368d7ca9771f46600b88f706017b5922ae3
+++ harness/sources/templates_parser/regtests/tests/0031_testme/testme19.tmplt 41d4b368d7ca9771f46600b88f706017b5922ae3
@@ -0,0 +1 @@
+@_MAT'Length_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0032_testme/test.out cc9573d5476b330f1284df8bf281721af776a1bd
+++ harness/sources/templates_parser/regtests/tests/0032_testme/test.out cc9573d5476b330f1284df8bf281721af776a1bd
@@ -0,0 +1,2 @@
+
+raised TEMPLATES_PARSER.TEMPLATE_ERROR : This attribute is not valid for a vector tag (@_V6'Line_@) In testme20.tmplt at line 2
============================================================
--- harness/sources/templates_parser/regtests/tests/0032_testme/test.py e09b33ca636c8a6cdcf11f23bb5aa7b1670260a9
+++ harness/sources/templates_parser/regtests/tests/0032_testme/test.py e09b33ca636c8a6cdcf11f23bb5aa7b1670260a9
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme20.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0032_testme/testme20.tmplt 1b3105fb6b65a57744329bae1d86dbc0a0d1a7e1
+++ harness/sources/templates_parser/regtests/tests/0032_testme/testme20.tmplt 1b3105fb6b65a57744329bae1d86dbc0a0d1a7e1
@@ -0,0 +1,2 @@
+
+@_V6'Line_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0033_testme/test.out 18f90b14f42f7ad3f2613d94771d3e533605da89
+++ harness/sources/templates_parser/regtests/tests/0033_testme/test.out 18f90b14f42f7ad3f2613d94771d3e533605da89
@@ -0,0 +1,2 @@
+
+raised TEMPLATES_PARSER.TEMPLATE_ERROR : This attribute is not valid for a vector tag (@_V6'Min_Column_@) In testme21.tmplt at line 4
============================================================
--- harness/sources/templates_parser/regtests/tests/0033_testme/test.py 08dff1eeb949767817f436c57c7f543ce92388a6
+++ harness/sources/templates_parser/regtests/tests/0033_testme/test.py 08dff1eeb949767817f436c57c7f543ce92388a6
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme21.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0033_testme/testme21.tmplt aa4b54033d31db1b84bb61dae77b9c578c6f3cca
+++ harness/sources/templates_parser/regtests/tests/0033_testme/testme21.tmplt aa4b54033d31db1b84bb61dae77b9c578c6f3cca
@@ -0,0 +1,4 @@
+
+
+
+@_V6'Min_Column_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0034_testme/test.out 2f3204238204f037ee62757e93621bb605986d8a
+++ harness/sources/templates_parser/regtests/tests/0034_testme/test.out 2f3204238204f037ee62757e93621bb605986d8a
@@ -0,0 +1,2 @@
+
+raised TEMPLATES_PARSER.TEMPLATE_ERROR : This attribute is not valid for a vector tag (@_V6'Max_Column_@) In testme22.tmplt at line 2
============================================================
--- harness/sources/templates_parser/regtests/tests/0034_testme/test.py edf095f2ca6b305969a3453f0b961ccc085e15fa
+++ harness/sources/templates_parser/regtests/tests/0034_testme/test.py edf095f2ca6b305969a3453f0b961ccc085e15fa
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme22.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0034_testme/testme22.tmplt 6f06f12c3061d8224e92d5dad8e4e667bc575b4b
+++ harness/sources/templates_parser/regtests/tests/0034_testme/testme22.tmplt 6f06f12c3061d8224e92d5dad8e4e667bc575b4b
@@ -0,0 +1,2 @@
+
+@_V6'Max_Column_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0035_testme/test.out a7ed6dae66dad9e020b1556c557a2cd159ecb9ef
+++ harness/sources/templates_parser/regtests/tests/0035_testme/test.out a7ed6dae66dad9e020b1556c557a2cd159ecb9ef
@@ -0,0 +1,2 @@
+
+raised TEMPLATES_PARSER.TEMPLATE_ERROR : Unknown attribute name "toto"
============================================================
--- harness/sources/templates_parser/regtests/tests/0035_testme/test.py 43c119f3e442414f46f51afaecea41e39d78e8c7
+++ harness/sources/templates_parser/regtests/tests/0035_testme/test.py 43c119f3e442414f46f51afaecea41e39d78e8c7
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme23.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0035_testme/testme23.tmplt 185cc95baab087526b4096bfe5a3109deb194d47
+++ harness/sources/templates_parser/regtests/tests/0035_testme/testme23.tmplt 185cc95baab087526b4096bfe5a3109deb194d47
@@ -0,0 +1,2 @@
+
+@_M'Toto_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0036_testme/test.out 7b2124f3a6be4929d3d0005eadc040a703a6a5de
+++ harness/sources/templates_parser/regtests/tests/0036_testme/test.out 7b2124f3a6be4929d3d0005eadc040a703a6a5de
@@ -0,0 +1,4500 @@
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ 25
+ 26
+ 27
+ 28
+ 29
+ 30
+ 31
+ 32
+ 33
+ 34
+ 35
+ 36
+ 37
+ 38
+ 39
+ 40
+ 41
+ 42
+ 43
+ 44
+ 45
+ 46
+ 47
+ 48
+ 49
+ 50
+ 51
+ 52
+ 53
+ 54
+ 55
+ 56
+ 57
+ 58
+ 59
+ 60
+ 61
+ 62
+ 63
+ 64
+ 65
+ 66
+ 67
+ 68
+ 69
+ 70
+ 71
+ 72
+ 73
+ 74
+ 75
+ 76
+ 77
+ 78
+ 79
+ 80
+ 81
+ 82
+ 83
+ 84
+ 85
+ 86
+ 87
+ 88
+ 89
+ 90
+ 91
+ 92
+ 93
+ 94
+ 95
+ 96
+ 97
+ 98
+ 99
+ 100
+ 101
+ 102
+ 103
+ 104
+ 105
+ 106
+ 107
+ 108
+ 109
+ 110
+ 111
+ 112
+ 113
+ 114
+ 115
+ 116
+ 117
+ 118
+ 119
+ 120
+ 121
+ 122
+ 123
+ 124
+ 125
+ 126
+ 127
+ 128
+ 129
+ 130
+ 131
+ 132
+ 133
+ 134
+ 135
+ 136
+ 137
+ 138
+ 139
+ 140
+ 141
+ 142
+ 143
+ 144
+ 145
+ 146
+ 147
+ 148
+ 149
+ 150
+ 151
+ 152
+ 153
+ 154
+ 155
+ 156
+ 157
+ 158
+ 159
+ 160
+ 161
+ 162
+ 163
+ 164
+ 165
+ 166
+ 167
+ 168
+ 169
+ 170
+ 171
+ 172
+ 173
+ 174
+ 175
+ 176
+ 177
+ 178
+ 179
+ 180
+ 181
+ 182
+ 183
+ 184
+ 185
+ 186
+ 187
+ 188
+ 189
+ 190
+ 191
+ 192
+ 193
+ 194
+ 195
+ 196
+ 197
+ 198
+ 199
+ 200
+ 201
+ 202
+ 203
+ 204
+ 205
+ 206
+ 207
+ 208
+ 209
+ 210
+ 211
+ 212
+ 213
+ 214
+ 215
+ 216
+ 217
+ 218
+ 219
+ 220
+ 221
+ 222
+ 223
+ 224
+ 225
+ 226
+ 227
+ 228
+ 229
+ 230
+ 231
+ 232
+ 233
+ 234
+ 235
+ 236
+ 237
+ 238
+ 239
+ 240
+ 241
+ 242
+ 243
+ 244
+ 245
+ 246
+ 247
+ 248
+ 249
+ 250
+ 251
+ 252
+ 253
+ 254
+ 255
+ 256
+ 257
+ 258
+ 259
+ 260
+ 261
+ 262
+ 263
+ 264
+ 265
+ 266
+ 267
+ 268
+ 269
+ 270
+ 271
+ 272
+ 273
+ 274
+ 275
+ 276
+ 277
+ 278
+ 279
+ 280
+ 281
+ 282
+ 283
+ 284
+ 285
+ 286
+ 287
+ 288
+ 289
+ 290
+ 291
+ 292
+ 293
+ 294
+ 295
+ 296
+ 297
+ 298
+ 299
+ 300
+ 301
+ 302
+ 303
+ 304
+ 305
+ 306
+ 307
+ 308
+ 309
+ 310
+ 311
+ 312
+ 313
+ 314
+ 315
+ 316
+ 317
+ 318
+ 319
+ 320
+ 321
+ 322
+ 323
+ 324
+ 325
+ 326
+ 327
+ 328
+ 329
+ 330
+ 331
+ 332
+ 333
+ 334
+ 335
+ 336
+ 337
+ 338
+ 339
+ 340
+ 341
+ 342
+ 343
+ 344
+ 345
+ 346
+ 347
+ 348
+ 349
+ 350
+ 351
+ 352
+ 353
+ 354
+ 355
+ 356
+ 357
+ 358
+ 359
+ 360
+ 361
+ 362
+ 363
+ 364
+ 365
+ 366
+ 367
+ 368
+ 369
+ 370
+ 371
+ 372
+ 373
+ 374
+ 375
+ 376
+ 377
+ 378
+ 379
+ 380
+ 381
+ 382
+ 383
+ 384
+ 385
+ 386
+ 387
+ 388
+ 389
+ 390
+ 391
+ 392
+ 393
+ 394
+ 395
+ 396
+ 397
+ 398
+ 399
+ 400
+ 401
+ 402
+ 403
+ 404
+ 405
+ 406
+ 407
+ 408
+ 409
+ 410
+ 411
+ 412
+ 413
+ 414
+ 415
+ 416
+ 417
+ 418
+ 419
+ 420
+ 421
+ 422
+ 423
+ 424
+ 425
+ 426
+ 427
+ 428
+ 429
+ 430
+ 431
+ 432
+ 433
+ 434
+ 435
+ 436
+ 437
+ 438
+ 439
+ 440
+ 441
+ 442
+ 443
+ 444
+ 445
+ 446
+ 447
+ 448
+ 449
+ 450
+ 451
+ 452
+ 453
+ 454
+ 455
+ 456
+ 457
+ 458
+ 459
+ 460
+ 461
+ 462
+ 463
+ 464
+ 465
+ 466
+ 467
+ 468
+ 469
+ 470
+ 471
+ 472
+ 473
+ 474
+ 475
+ 476
+ 477
+ 478
+ 479
+ 480
+ 481
+ 482
+ 483
+ 484
+ 485
+ 486
+ 487
+ 488
+ 489
+ 490
+ 491
+ 492
+ 493
+ 494
+ 495
+ 496
+ 497
+ 498
+ 499
+ 500
+ 501
+ 502
+ 503
+ 504
+ 505
+ 506
+ 507
+ 508
+ 509
+ 510
+ 511
+ 512
+ 513
+ 514
+ 515
+ 516
+ 517
+ 518
+ 519
+ 520
+ 521
+ 522
+ 523
+ 524
+ 525
+ 526
+ 527
+ 528
+ 529
+ 530
+ 531
+ 532
+ 533
+ 534
+ 535
+ 536
+ 537
+ 538
+ 539
+ 540
+ 541
+ 542
+ 543
+ 544
+ 545
+ 546
+ 547
+ 548
+ 549
+ 550
+ 551
+ 552
+ 553
+ 554
+ 555
+ 556
+ 557
+ 558
+ 559
+ 560
+ 561
+ 562
+ 563
+ 564
+ 565
+ 566
+ 567
+ 568
+ 569
+ 570
+ 571
+ 572
+ 573
+ 574
+ 575
+ 576
+ 577
+ 578
+ 579
+ 580
+ 581
+ 582
+ 583
+ 584
+ 585
+ 586
+ 587
+ 588
+ 589
+ 590
+ 591
+ 592
+ 593
+ 594
+ 595
+ 596
+ 597
+ 598
+ 599
+ 600
+ 601
+ 602
+ 603
+ 604
+ 605
+ 606
+ 607
+ 608
+ 609
+ 610
+ 611
+ 612
+ 613
+ 614
+ 615
+ 616
+ 617
+ 618
+ 619
+ 620
+ 621
+ 622
+ 623
+ 624
+ 625
+ 626
+ 627
+ 628
+ 629
+ 630
+ 631
+ 632
+ 633
+ 634
+ 635
+ 636
+ 637
+ 638
+ 639
+ 640
+ 641
+ 642
+ 643
+ 644
+ 645
+ 646
+ 647
+ 648
+ 649
+ 650
+ 651
+ 652
+ 653
+ 654
+ 655
+ 656
+ 657
+ 658
+ 659
+ 660
+ 661
+ 662
+ 663
+ 664
+ 665
+ 666
+ 667
+ 668
+ 669
+ 670
+ 671
+ 672
+ 673
+ 674
+ 675
+ 676
+ 677
+ 678
+ 679
+ 680
+ 681
+ 682
+ 683
+ 684
+ 685
+ 686
+ 687
+ 688
+ 689
+ 690
+ 691
+ 692
+ 693
+ 694
+ 695
+ 696
+ 697
+ 698
+ 699
+ 700
+ 701
+ 702
+ 703
+ 704
+ 705
+ 706
+ 707
+ 708
+ 709
+ 710
+ 711
+ 712
+ 713
+ 714
+ 715
+ 716
+ 717
+ 718
+ 719
+ 720
+ 721
+ 722
+ 723
+ 724
+ 725
+ 726
+ 727
+ 728
+ 729
+ 730
+ 731
+ 732
+ 733
+ 734
+ 735
+ 736
+ 737
+ 738
+ 739
+ 740
+ 741
+ 742
+ 743
+ 744
+ 745
+ 746
+ 747
+ 748
+ 749
+ 750
+ 751
+ 752
+ 753
+ 754
+ 755
+ 756
+ 757
+ 758
+ 759
+ 760
+ 761
+ 762
+ 763
+ 764
+ 765
+ 766
+ 767
+ 768
+ 769
+ 770
+ 771
+ 772
+ 773
+ 774
+ 775
+ 776
+ 777
+ 778
+ 779
+ 780
+ 781
+ 782
+ 783
+ 784
+ 785
+ 786
+ 787
+ 788
+ 789
+ 790
+ 791
+ 792
+ 793
+ 794
+ 795
+ 796
+ 797
+ 798
+ 799
+ 800
+ 801
+ 802
+ 803
+ 804
+ 805
+ 806
+ 807
+ 808
+ 809
+ 810
+ 811
+ 812
+ 813
+ 814
+ 815
+ 816
+ 817
+ 818
+ 819
+ 820
+ 821
+ 822
+ 823
+ 824
+ 825
+ 826
+ 827
+ 828
+ 829
+ 830
+ 831
+ 832
+ 833
+ 834
+ 835
+ 836
+ 837
+ 838
+ 839
+ 840
+ 841
+ 842
+ 843
+ 844
+ 845
+ 846
+ 847
+ 848
+ 849
+ 850
+ 851
+ 852
+ 853
+ 854
+ 855
+ 856
+ 857
+ 858
+ 859
+ 860
+ 861
+ 862
+ 863
+ 864
+ 865
+ 866
+ 867
+ 868
+ 869
+ 870
+ 871
+ 872
+ 873
+ 874
+ 875
+ 876
+ 877
+ 878
+ 879
+ 880
+ 881
+ 882
+ 883
+ 884
+ 885
+ 886
+ 887
+ 888
+ 889
+ 890
+ 891
+ 892
+ 893
+ 894
+ 895
+ 896
+ 897
+ 898
+ 899
+ 900
+ 901
+ 902
+ 903
+ 904
+ 905
+ 906
+ 907
+ 908
+ 909
+ 910
+ 911
+ 912
+ 913
+ 914
+ 915
+ 916
+ 917
+ 918
+ 919
+ 920
+ 921
+ 922
+ 923
+ 924
+ 925
+ 926
+ 927
+ 928
+ 929
+ 930
+ 931
+ 932
+ 933
+ 934
+ 935
+ 936
+ 937
+ 938
+ 939
+ 940
+ 941
+ 942
+ 943
+ 944
+ 945
+ 946
+ 947
+ 948
+ 949
+ 950
+ 951
+ 952
+ 953
+ 954
+ 955
+ 956
+ 957
+ 958
+ 959
+ 960
+ 961
+ 962
+ 963
+ 964
+ 965
+ 966
+ 967
+ 968
+ 969
+ 970
+ 971
+ 972
+ 973
+ 974
+ 975
+ 976
+ 977
+ 978
+ 979
+ 980
+ 981
+ 982
+ 983
+ 984
+ 985
+ 986
+ 987
+ 988
+ 989
+ 990
+ 991
+ 992
+ 993
+ 994
+ 995
+ 996
+ 997
+ 998
+ 999
+ 1000
+ 1001
+ 1002
+ 1003
+ 1004
+ 1005
+ 1006
+ 1007
+ 1008
+ 1009
+ 1010
+ 1011
+ 1012
+ 1013
+ 1014
+ 1015
+ 1016
+ 1017
+ 1018
+ 1019
+ 1020
+ 1021
+ 1022
+ 1023
+ 1024
+ 1025
+ 1026
+ 1027
+ 1028
+ 1029
+ 1030
+ 1031
+ 1032
+ 1033
+ 1034
+ 1035
+ 1036
+ 1037
+ 1038
+ 1039
+ 1040
+ 1041
+ 1042
+ 1043
+ 1044
+ 1045
+ 1046
+ 1047
+ 1048
+ 1049
+ 1050
+ 1051
+ 1052
+ 1053
+ 1054
+ 1055
+ 1056
+ 1057
+ 1058
+ 1059
+ 1060
+ 1061
+ 1062
+ 1063
+ 1064
+ 1065
+ 1066
+ 1067
+ 1068
+ 1069
+ 1070
+ 1071
+ 1072
+ 1073
+ 1074
+ 1075
+ 1076
+ 1077
+ 1078
+ 1079
+ 1080
+ 1081
+ 1082
+ 1083
+ 1084
+ 1085
+ 1086
+ 1087
+ 1088
+ 1089
+ 1090
+ 1091
+ 1092
+ 1093
+ 1094
+ 1095
+ 1096
+ 1097
+ 1098
+ 1099
+ 1100
+ 1101
+ 1102
+ 1103
+ 1104
+ 1105
+ 1106
+ 1107
+ 1108
+ 1109
+ 1110
+ 1111
+ 1112
+ 1113
+ 1114
+ 1115
+ 1116
+ 1117
+ 1118
+ 1119
+ 1120
+ 1121
+ 1122
+ 1123
+ 1124
+ 1125
+ 1126
+ 1127
+ 1128
+ 1129
+ 1130
+ 1131
+ 1132
+ 1133
+ 1134
+ 1135
+ 1136
+ 1137
+ 1138
+ 1139
+ 1140
+ 1141
+ 1142
+ 1143
+ 1144
+ 1145
+ 1146
+ 1147
+ 1148
+ 1149
+ 1150
+ 1151
+ 1152
+ 1153
+ 1154
+ 1155
+ 1156
+ 1157
+ 1158
+ 1159
+ 1160
+ 1161
+ 1162
+ 1163
+ 1164
+ 1165
+ 1166
+ 1167
+ 1168
+ 1169
+ 1170
+ 1171
+ 1172
+ 1173
+ 1174
+ 1175
+ 1176
+ 1177
+ 1178
+ 1179
+ 1180
+ 1181
+ 1182
+ 1183
+ 1184
+ 1185
+ 1186
+ 1187
+ 1188
+ 1189
+ 1190
+ 1191
+ 1192
+ 1193
+ 1194
+ 1195
+ 1196
+ 1197
+ 1198
+ 1199
+ 1200
+ 1201
+ 1202
+ 1203
+ 1204
+ 1205
+ 1206
+ 1207
+ 1208
+ 1209
+ 1210
+ 1211
+ 1212
+ 1213
+ 1214
+ 1215
+ 1216
+ 1217
+ 1218
+ 1219
+ 1220
+ 1221
+ 1222
+ 1223
+ 1224
+ 1225
+ 1226
+ 1227
+ 1228
+ 1229
+ 1230
+ 1231
+ 1232
+ 1233
+ 1234
+ 1235
+ 1236
+ 1237
+ 1238
+ 1239
+ 1240
+ 1241
+ 1242
+ 1243
+ 1244
+ 1245
+ 1246
+ 1247
+ 1248
+ 1249
+ 1250
+ 1251
+ 1252
+ 1253
+ 1254
+ 1255
+ 1256
+ 1257
+ 1258
+ 1259
+ 1260
+ 1261
+ 1262
+ 1263
+ 1264
+ 1265
+ 1266
+ 1267
+ 1268
+ 1269
+ 1270
+ 1271
+ 1272
+ 1273
+ 1274
+ 1275
+ 1276
+ 1277
+ 1278
+ 1279
+ 1280
+ 1281
+ 1282
+ 1283
+ 1284
+ 1285
+ 1286
+ 1287
+ 1288
+ 1289
+ 1290
+ 1291
+ 1292
+ 1293
+ 1294
+ 1295
+ 1296
+ 1297
+ 1298
+ 1299
+ 1300
+ 1301
+ 1302
+ 1303
+ 1304
+ 1305
+ 1306
+ 1307
+ 1308
+ 1309
+ 1310
+ 1311
+ 1312
+ 1313
+ 1314
+ 1315
+ 1316
+ 1317
+ 1318
+ 1319
+ 1320
+ 1321
+ 1322
+ 1323
+ 1324
+ 1325
+ 1326
+ 1327
+ 1328
+ 1329
+ 1330
+ 1331
+ 1332
+ 1333
+ 1334
+ 1335
+ 1336
+ 1337
+ 1338
+ 1339
+ 1340
+ 1341
+ 1342
+ 1343
+ 1344
+ 1345
+ 1346
+ 1347
+ 1348
+ 1349
+ 1350
+ 1351
+ 1352
+ 1353
+ 1354
+ 1355
+ 1356
+ 1357
+ 1358
+ 1359
+ 1360
+ 1361
+ 1362
+ 1363
+ 1364
+ 1365
+ 1366
+ 1367
+ 1368
+ 1369
+ 1370
+ 1371
+ 1372
+ 1373
+ 1374
+ 1375
+ 1376
+ 1377
+ 1378
+ 1379
+ 1380
+ 1381
+ 1382
+ 1383
+ 1384
+ 1385
+ 1386
+ 1387
+ 1388
+ 1389
+ 1390
+ 1391
+ 1392
+ 1393
+ 1394
+ 1395
+ 1396
+ 1397
+ 1398
+ 1399
+ 1400
+ 1401
+ 1402
+ 1403
+ 1404
+ 1405
+ 1406
+ 1407
+ 1408
+ 1409
+ 1410
+ 1411
+ 1412
+ 1413
+ 1414
+ 1415
+ 1416
+ 1417
+ 1418
+ 1419
+ 1420
+ 1421
+ 1422
+ 1423
+ 1424
+ 1425
+ 1426
+ 1427
+ 1428
+ 1429
+ 1430
+ 1431
+ 1432
+ 1433
+ 1434
+ 1435
+ 1436
+ 1437
+ 1438
+ 1439
+ 1440
+ 1441
+ 1442
+ 1443
+ 1444
+ 1445
+ 1446
+ 1447
+ 1448
+ 1449
+ 1450
+ 1451
+ 1452
+ 1453
+ 1454
+ 1455
+ 1456
+ 1457
+ 1458
+ 1459
+ 1460
+ 1461
+ 1462
+ 1463
+ 1464
+ 1465
+ 1466
+ 1467
+ 1468
+ 1469
+ 1470
+ 1471
+ 1472
+ 1473
+ 1474
+ 1475
+ 1476
+ 1477
+ 1478
+ 1479
+ 1480
+ 1481
+ 1482
+ 1483
+ 1484
+ 1485
+ 1486
+ 1487
+ 1488
+ 1489
+ 1490
+ 1491
+ 1492
+ 1493
+ 1494
+ 1495
+ 1496
+ 1497
+ 1498
+ 1499
+ 1500
+ 1501
+ 1502
+ 1503
+ 1504
+ 1505
+ 1506
+ 1507
+ 1508
+ 1509
+ 1510
+ 1511
+ 1512
+ 1513
+ 1514
+ 1515
+ 1516
+ 1517
+ 1518
+ 1519
+ 1520
+ 1521
+ 1522
+ 1523
+ 1524
+ 1525
+ 1526
+ 1527
+ 1528
+ 1529
+ 1530
+ 1531
+ 1532
+ 1533
+ 1534
+ 1535
+ 1536
+ 1537
+ 1538
+ 1539
+ 1540
+ 1541
+ 1542
+ 1543
+ 1544
+ 1545
+ 1546
+ 1547
+ 1548
+ 1549
+ 1550
+ 1551
+ 1552
+ 1553
+ 1554
+ 1555
+ 1556
+ 1557
+ 1558
+ 1559
+ 1560
+ 1561
+ 1562
+ 1563
+ 1564
+ 1565
+ 1566
+ 1567
+ 1568
+ 1569
+ 1570
+ 1571
+ 1572
+ 1573
+ 1574
+ 1575
+ 1576
+ 1577
+ 1578
+ 1579
+ 1580
+ 1581
+ 1582
+ 1583
+ 1584
+ 1585
+ 1586
+ 1587
+ 1588
+ 1589
+ 1590
+ 1591
+ 1592
+ 1593
+ 1594
+ 1595
+ 1596
+ 1597
+ 1598
+ 1599
+ 1600
+ 1601
+ 1602
+ 1603
+ 1604
+ 1605
+ 1606
+ 1607
+ 1608
+ 1609
+ 1610
+ 1611
+ 1612
+ 1613
+ 1614
+ 1615
+ 1616
+ 1617
+ 1618
+ 1619
+ 1620
+ 1621
+ 1622
+ 1623
+ 1624
+ 1625
+ 1626
+ 1627
+ 1628
+ 1629
+ 1630
+ 1631
+ 1632
+ 1633
+ 1634
+ 1635
+ 1636
+ 1637
+ 1638
+ 1639
+ 1640
+ 1641
+ 1642
+ 1643
+ 1644
+ 1645
+ 1646
+ 1647
+ 1648
+ 1649
+ 1650
+ 1651
+ 1652
+ 1653
+ 1654
+ 1655
+ 1656
+ 1657
+ 1658
+ 1659
+ 1660
+ 1661
+ 1662
+ 1663
+ 1664
+ 1665
+ 1666
+ 1667
+ 1668
+ 1669
+ 1670
+ 1671
+ 1672
+ 1673
+ 1674
+ 1675
+ 1676
+ 1677
+ 1678
+ 1679
+ 1680
+ 1681
+ 1682
+ 1683
+ 1684
+ 1685
+ 1686
+ 1687
+ 1688
+ 1689
+ 1690
+ 1691
+ 1692
+ 1693
+ 1694
+ 1695
+ 1696
+ 1697
+ 1698
+ 1699
+ 1700
+ 1701
+ 1702
+ 1703
+ 1704
+ 1705
+ 1706
+ 1707
+ 1708
+ 1709
+ 1710
+ 1711
+ 1712
+ 1713
+ 1714
+ 1715
+ 1716
+ 1717
+ 1718
+ 1719
+ 1720
+ 1721
+ 1722
+ 1723
+ 1724
+ 1725
+ 1726
+ 1727
+ 1728
+ 1729
+ 1730
+ 1731
+ 1732
+ 1733
+ 1734
+ 1735
+ 1736
+ 1737
+ 1738
+ 1739
+ 1740
+ 1741
+ 1742
+ 1743
+ 1744
+ 1745
+ 1746
+ 1747
+ 1748
+ 1749
+ 1750
+ 1751
+ 1752
+ 1753
+ 1754
+ 1755
+ 1756
+ 1757
+ 1758
+ 1759
+ 1760
+ 1761
+ 1762
+ 1763
+ 1764
+ 1765
+ 1766
+ 1767
+ 1768
+ 1769
+ 1770
+ 1771
+ 1772
+ 1773
+ 1774
+ 1775
+ 1776
+ 1777
+ 1778
+ 1779
+ 1780
+ 1781
+ 1782
+ 1783
+ 1784
+ 1785
+ 1786
+ 1787
+ 1788
+ 1789
+ 1790
+ 1791
+ 1792
+ 1793
+ 1794
+ 1795
+ 1796
+ 1797
+ 1798
+ 1799
+ 1800
+ 1801
+ 1802
+ 1803
+ 1804
+ 1805
+ 1806
+ 1807
+ 1808
+ 1809
+ 1810
+ 1811
+ 1812
+ 1813
+ 1814
+ 1815
+ 1816
+ 1817
+ 1818
+ 1819
+ 1820
+ 1821
+ 1822
+ 1823
+ 1824
+ 1825
+ 1826
+ 1827
+ 1828
+ 1829
+ 1830
+ 1831
+ 1832
+ 1833
+ 1834
+ 1835
+ 1836
+ 1837
+ 1838
+ 1839
+ 1840
+ 1841
+ 1842
+ 1843
+ 1844
+ 1845
+ 1846
+ 1847
+ 1848
+ 1849
+ 1850
+ 1851
+ 1852
+ 1853
+ 1854
+ 1855
+ 1856
+ 1857
+ 1858
+ 1859
+ 1860
+ 1861
+ 1862
+ 1863
+ 1864
+ 1865
+ 1866
+ 1867
+ 1868
+ 1869
+ 1870
+ 1871
+ 1872
+ 1873
+ 1874
+ 1875
+ 1876
+ 1877
+ 1878
+ 1879
+ 1880
+ 1881
+ 1882
+ 1883
+ 1884
+ 1885
+ 1886
+ 1887
+ 1888
+ 1889
+ 1890
+ 1891
+ 1892
+ 1893
+ 1894
+ 1895
+ 1896
+ 1897
+ 1898
+ 1899
+ 1900
+ 1901
+ 1902
+ 1903
+ 1904
+ 1905
+ 1906
+ 1907
+ 1908
+ 1909
+ 1910
+ 1911
+ 1912
+ 1913
+ 1914
+ 1915
+ 1916
+ 1917
+ 1918
+ 1919
+ 1920
+ 1921
+ 1922
+ 1923
+ 1924
+ 1925
+ 1926
+ 1927
+ 1928
+ 1929
+ 1930
+ 1931
+ 1932
+ 1933
+ 1934
+ 1935
+ 1936
+ 1937
+ 1938
+ 1939
+ 1940
+ 1941
+ 1942
+ 1943
+ 1944
+ 1945
+ 1946
+ 1947
+ 1948
+ 1949
+ 1950
+ 1951
+ 1952
+ 1953
+ 1954
+ 1955
+ 1956
+ 1957
+ 1958
+ 1959
+ 1960
+ 1961
+ 1962
+ 1963
+ 1964
+ 1965
+ 1966
+ 1967
+ 1968
+ 1969
+ 1970
+ 1971
+ 1972
+ 1973
+ 1974
+ 1975
+ 1976
+ 1977
+ 1978
+ 1979
+ 1980
+ 1981
+ 1982
+ 1983
+ 1984
+ 1985
+ 1986
+ 1987
+ 1988
+ 1989
+ 1990
+ 1991
+ 1992
+ 1993
+ 1994
+ 1995
+ 1996
+ 1997
+ 1998
+ 1999
+ 2000
+ 2001
+ 2002
+ 2003
+ 2004
+ 2005
+ 2006
+ 2007
+ 2008
+ 2009
+ 2010
+ 2011
+ 2012
+ 2013
+ 2014
+ 2015
+ 2016
+ 2017
+ 2018
+ 2019
+ 2020
+ 2021
+ 2022
+ 2023
+ 2024
+ 2025
+ 2026
+ 2027
+ 2028
+ 2029
+ 2030
+ 2031
+ 2032
+ 2033
+ 2034
+ 2035
+ 2036
+ 2037
+ 2038
+ 2039
+ 2040
+ 2041
+ 2042
+ 2043
+ 2044
+ 2045
+ 2046
+ 2047
+ 2048
+ 2049
+ 2050
+ 2051
+ 2052
+ 2053
+ 2054
+ 2055
+ 2056
+ 2057
+ 2058
+ 2059
+ 2060
+ 2061
+ 2062
+ 2063
+ 2064
+ 2065
+ 2066
+ 2067
+ 2068
+ 2069
+ 2070
+ 2071
+ 2072
+ 2073
+ 2074
+ 2075
+ 2076
+ 2077
+ 2078
+ 2079
+ 2080
+ 2081
+ 2082
+ 2083
+ 2084
+ 2085
+ 2086
+ 2087
+ 2088
+ 2089
+ 2090
+ 2091
+ 2092
+ 2093
+ 2094
+ 2095
+ 2096
+ 2097
+ 2098
+ 2099
+ 2100
+ 2101
+ 2102
+ 2103
+ 2104
+ 2105
+ 2106
+ 2107
+ 2108
+ 2109
+ 2110
+ 2111
+ 2112
+ 2113
+ 2114
+ 2115
+ 2116
+ 2117
+ 2118
+ 2119
+ 2120
+ 2121
+ 2122
+ 2123
+ 2124
+ 2125
+ 2126
+ 2127
+ 2128
+ 2129
+ 2130
+ 2131
+ 2132
+ 2133
+ 2134
+ 2135
+ 2136
+ 2137
+ 2138
+ 2139
+ 2140
+ 2141
+ 2142
+ 2143
+ 2144
+ 2145
+ 2146
+ 2147
+ 2148
+ 2149
+ 2150
+ 2151
+ 2152
+ 2153
+ 2154
+ 2155
+ 2156
+ 2157
+ 2158
+ 2159
+ 2160
+ 2161
+ 2162
+ 2163
+ 2164
+ 2165
+ 2166
+ 2167
+ 2168
+ 2169
+ 2170
+ 2171
+ 2172
+ 2173
+ 2174
+ 2175
+ 2176
+ 2177
+ 2178
+ 2179
+ 2180
+ 2181
+ 2182
+ 2183
+ 2184
+ 2185
+ 2186
+ 2187
+ 2188
+ 2189
+ 2190
+ 2191
+ 2192
+ 2193
+ 2194
+ 2195
+ 2196
+ 2197
+ 2198
+ 2199
+ 2200
+ 2201
+ 2202
+ 2203
+ 2204
+ 2205
+ 2206
+ 2207
+ 2208
+ 2209
+ 2210
+ 2211
+ 2212
+ 2213
+ 2214
+ 2215
+ 2216
+ 2217
+ 2218
+ 2219
+ 2220
+ 2221
+ 2222
+ 2223
+ 2224
+ 2225
+ 2226
+ 2227
+ 2228
+ 2229
+ 2230
+ 2231
+ 2232
+ 2233
+ 2234
+ 2235
+ 2236
+ 2237
+ 2238
+ 2239
+ 2240
+ 2241
+ 2242
+ 2243
+ 2244
+ 2245
+ 2246
+ 2247
+ 2248
+ 2249
+ 2250
+ 2251
+ 2252
+ 2253
+ 2254
+ 2255
+ 2256
+ 2257
+ 2258
+ 2259
+ 2260
+ 2261
+ 2262
+ 2263
+ 2264
+ 2265
+ 2266
+ 2267
+ 2268
+ 2269
+ 2270
+ 2271
+ 2272
+ 2273
+ 2274
+ 2275
+ 2276
+ 2277
+ 2278
+ 2279
+ 2280
+ 2281
+ 2282
+ 2283
+ 2284
+ 2285
+ 2286
+ 2287
+ 2288
+ 2289
+ 2290
+ 2291
+ 2292
+ 2293
+ 2294
+ 2295
+ 2296
+ 2297
+ 2298
+ 2299
+ 2300
+ 2301
+ 2302
+ 2303
+ 2304
+ 2305
+ 2306
+ 2307
+ 2308
+ 2309
+ 2310
+ 2311
+ 2312
+ 2313
+ 2314
+ 2315
+ 2316
+ 2317
+ 2318
+ 2319
+ 2320
+ 2321
+ 2322
+ 2323
+ 2324
+ 2325
+ 2326
+ 2327
+ 2328
+ 2329
+ 2330
+ 2331
+ 2332
+ 2333
+ 2334
+ 2335
+ 2336
+ 2337
+ 2338
+ 2339
+ 2340
+ 2341
+ 2342
+ 2343
+ 2344
+ 2345
+ 2346
+ 2347
+ 2348
+ 2349
+ 2350
+ 2351
+ 2352
+ 2353
+ 2354
+ 2355
+ 2356
+ 2357
+ 2358
+ 2359
+ 2360
+ 2361
+ 2362
+ 2363
+ 2364
+ 2365
+ 2366
+ 2367
+ 2368
+ 2369
+ 2370
+ 2371
+ 2372
+ 2373
+ 2374
+ 2375
+ 2376
+ 2377
+ 2378
+ 2379
+ 2380
+ 2381
+ 2382
+ 2383
+ 2384
+ 2385
+ 2386
+ 2387
+ 2388
+ 2389
+ 2390
+ 2391
+ 2392
+ 2393
+ 2394
+ 2395
+ 2396
+ 2397
+ 2398
+ 2399
+ 2400
+ 2401
+ 2402
+ 2403
+ 2404
+ 2405
+ 2406
+ 2407
+ 2408
+ 2409
+ 2410
+ 2411
+ 2412
+ 2413
+ 2414
+ 2415
+ 2416
+ 2417
+ 2418
+ 2419
+ 2420
+ 2421
+ 2422
+ 2423
+ 2424
+ 2425
+ 2426
+ 2427
+ 2428
+ 2429
+ 2430
+ 2431
+ 2432
+ 2433
+ 2434
+ 2435
+ 2436
+ 2437
+ 2438
+ 2439
+ 2440
+ 2441
+ 2442
+ 2443
+ 2444
+ 2445
+ 2446
+ 2447
+ 2448
+ 2449
+ 2450
+ 2451
+ 2452
+ 2453
+ 2454
+ 2455
+ 2456
+ 2457
+ 2458
+ 2459
+ 2460
+ 2461
+ 2462
+ 2463
+ 2464
+ 2465
+ 2466
+ 2467
+ 2468
+ 2469
+ 2470
+ 2471
+ 2472
+ 2473
+ 2474
+ 2475
+ 2476
+ 2477
+ 2478
+ 2479
+ 2480
+ 2481
+ 2482
+ 2483
+ 2484
+ 2485
+ 2486
+ 2487
+ 2488
+ 2489
+ 2490
+ 2491
+ 2492
+ 2493
+ 2494
+ 2495
+ 2496
+ 2497
+ 2498
+ 2499
+ 2500
+ 2501
+ 2502
+ 2503
+ 2504
+ 2505
+ 2506
+ 2507
+ 2508
+ 2509
+ 2510
+ 2511
+ 2512
+ 2513
+ 2514
+ 2515
+ 2516
+ 2517
+ 2518
+ 2519
+ 2520
+ 2521
+ 2522
+ 2523
+ 2524
+ 2525
+ 2526
+ 2527
+ 2528
+ 2529
+ 2530
+ 2531
+ 2532
+ 2533
+ 2534
+ 2535
+ 2536
+ 2537
+ 2538
+ 2539
+ 2540
+ 2541
+ 2542
+ 2543
+ 2544
+ 2545
+ 2546
+ 2547
+ 2548
+ 2549
+ 2550
+ 2551
+ 2552
+ 2553
+ 2554
+ 2555
+ 2556
+ 2557
+ 2558
+ 2559
+ 2560
+ 2561
+ 2562
+ 2563
+ 2564
+ 2565
+ 2566
+ 2567
+ 2568
+ 2569
+ 2570
+ 2571
+ 2572
+ 2573
+ 2574
+ 2575
+ 2576
+ 2577
+ 2578
+ 2579
+ 2580
+ 2581
+ 2582
+ 2583
+ 2584
+ 2585
+ 2586
+ 2587
+ 2588
+ 2589
+ 2590
+ 2591
+ 2592
+ 2593
+ 2594
+ 2595
+ 2596
+ 2597
+ 2598
+ 2599
+ 2600
+ 2601
+ 2602
+ 2603
+ 2604
+ 2605
+ 2606
+ 2607
+ 2608
+ 2609
+ 2610
+ 2611
+ 2612
+ 2613
+ 2614
+ 2615
+ 2616
+ 2617
+ 2618
+ 2619
+ 2620
+ 2621
+ 2622
+ 2623
+ 2624
+ 2625
+ 2626
+ 2627
+ 2628
+ 2629
+ 2630
+ 2631
+ 2632
+ 2633
+ 2634
+ 2635
+ 2636
+ 2637
+ 2638
+ 2639
+ 2640
+ 2641
+ 2642
+ 2643
+ 2644
+ 2645
+ 2646
+ 2647
+ 2648
+ 2649
+ 2650
+ 2651
+ 2652
+ 2653
+ 2654
+ 2655
+ 2656
+ 2657
+ 2658
+ 2659
+ 2660
+ 2661
+ 2662
+ 2663
+ 2664
+ 2665
+ 2666
+ 2667
+ 2668
+ 2669
+ 2670
+ 2671
+ 2672
+ 2673
+ 2674
+ 2675
+ 2676
+ 2677
+ 2678
+ 2679
+ 2680
+ 2681
+ 2682
+ 2683
+ 2684
+ 2685
+ 2686
+ 2687
+ 2688
+ 2689
+ 2690
+ 2691
+ 2692
+ 2693
+ 2694
+ 2695
+ 2696
+ 2697
+ 2698
+ 2699
+ 2700
+ 2701
+ 2702
+ 2703
+ 2704
+ 2705
+ 2706
+ 2707
+ 2708
+ 2709
+ 2710
+ 2711
+ 2712
+ 2713
+ 2714
+ 2715
+ 2716
+ 2717
+ 2718
+ 2719
+ 2720
+ 2721
+ 2722
+ 2723
+ 2724
+ 2725
+ 2726
+ 2727
+ 2728
+ 2729
+ 2730
+ 2731
+ 2732
+ 2733
+ 2734
+ 2735
+ 2736
+ 2737
+ 2738
+ 2739
+ 2740
+ 2741
+ 2742
+ 2743
+ 2744
+ 2745
+ 2746
+ 2747
+ 2748
+ 2749
+ 2750
+ 2751
+ 2752
+ 2753
+ 2754
+ 2755
+ 2756
+ 2757
+ 2758
+ 2759
+ 2760
+ 2761
+ 2762
+ 2763
+ 2764
+ 2765
+ 2766
+ 2767
+ 2768
+ 2769
+ 2770
+ 2771
+ 2772
+ 2773
+ 2774
+ 2775
+ 2776
+ 2777
+ 2778
+ 2779
+ 2780
+ 2781
+ 2782
+ 2783
+ 2784
+ 2785
+ 2786
+ 2787
+ 2788
+ 2789
+ 2790
+ 2791
+ 2792
+ 2793
+ 2794
+ 2795
+ 2796
+ 2797
+ 2798
+ 2799
+ 2800
+ 2801
+ 2802
+ 2803
+ 2804
+ 2805
+ 2806
+ 2807
+ 2808
+ 2809
+ 2810
+ 2811
+ 2812
+ 2813
+ 2814
+ 2815
+ 2816
+ 2817
+ 2818
+ 2819
+ 2820
+ 2821
+ 2822
+ 2823
+ 2824
+ 2825
+ 2826
+ 2827
+ 2828
+ 2829
+ 2830
+ 2831
+ 2832
+ 2833
+ 2834
+ 2835
+ 2836
+ 2837
+ 2838
+ 2839
+ 2840
+ 2841
+ 2842
+ 2843
+ 2844
+ 2845
+ 2846
+ 2847
+ 2848
+ 2849
+ 2850
+ 2851
+ 2852
+ 2853
+ 2854
+ 2855
+ 2856
+ 2857
+ 2858
+ 2859
+ 2860
+ 2861
+ 2862
+ 2863
+ 2864
+ 2865
+ 2866
+ 2867
+ 2868
+ 2869
+ 2870
+ 2871
+ 2872
+ 2873
+ 2874
+ 2875
+ 2876
+ 2877
+ 2878
+ 2879
+ 2880
+ 2881
+ 2882
+ 2883
+ 2884
+ 2885
+ 2886
+ 2887
+ 2888
+ 2889
+ 2890
+ 2891
+ 2892
+ 2893
+ 2894
+ 2895
+ 2896
+ 2897
+ 2898
+ 2899
+ 2900
+ 2901
+ 2902
+ 2903
+ 2904
+ 2905
+ 2906
+ 2907
+ 2908
+ 2909
+ 2910
+ 2911
+ 2912
+ 2913
+ 2914
+ 2915
+ 2916
+ 2917
+ 2918
+ 2919
+ 2920
+ 2921
+ 2922
+ 2923
+ 2924
+ 2925
+ 2926
+ 2927
+ 2928
+ 2929
+ 2930
+ 2931
+ 2932
+ 2933
+ 2934
+ 2935
+ 2936
+ 2937
+ 2938
+ 2939
+ 2940
+ 2941
+ 2942
+ 2943
+ 2944
+ 2945
+ 2946
+ 2947
+ 2948
+ 2949
+ 2950
+ 2951
+ 2952
+ 2953
+ 2954
+ 2955
+ 2956
+ 2957
+ 2958
+ 2959
+ 2960
+ 2961
+ 2962
+ 2963
+ 2964
+ 2965
+ 2966
+ 2967
+ 2968
+ 2969
+ 2970
+ 2971
+ 2972
+ 2973
+ 2974
+ 2975
+ 2976
+ 2977
+ 2978
+ 2979
+ 2980
+ 2981
+ 2982
+ 2983
+ 2984
+ 2985
+ 2986
+ 2987
+ 2988
+ 2989
+ 2990
+ 2991
+ 2992
+ 2993
+ 2994
+ 2995
+ 2996
+ 2997
+ 2998
+ 2999
+ 3000
+ 3001
+ 3002
+ 3003
+ 3004
+ 3005
+ 3006
+ 3007
+ 3008
+ 3009
+ 3010
+ 3011
+ 3012
+ 3013
+ 3014
+ 3015
+ 3016
+ 3017
+ 3018
+ 3019
+ 3020
+ 3021
+ 3022
+ 3023
+ 3024
+ 3025
+ 3026
+ 3027
+ 3028
+ 3029
+ 3030
+ 3031
+ 3032
+ 3033
+ 3034
+ 3035
+ 3036
+ 3037
+ 3038
+ 3039
+ 3040
+ 3041
+ 3042
+ 3043
+ 3044
+ 3045
+ 3046
+ 3047
+ 3048
+ 3049
+ 3050
+ 3051
+ 3052
+ 3053
+ 3054
+ 3055
+ 3056
+ 3057
+ 3058
+ 3059
+ 3060
+ 3061
+ 3062
+ 3063
+ 3064
+ 3065
+ 3066
+ 3067
+ 3068
+ 3069
+ 3070
+ 3071
+ 3072
+ 3073
+ 3074
+ 3075
+ 3076
+ 3077
+ 3078
+ 3079
+ 3080
+ 3081
+ 3082
+ 3083
+ 3084
+ 3085
+ 3086
+ 3087
+ 3088
+ 3089
+ 3090
+ 3091
+ 3092
+ 3093
+ 3094
+ 3095
+ 3096
+ 3097
+ 3098
+ 3099
+ 3100
+ 3101
+ 3102
+ 3103
+ 3104
+ 3105
+ 3106
+ 3107
+ 3108
+ 3109
+ 3110
+ 3111
+ 3112
+ 3113
+ 3114
+ 3115
+ 3116
+ 3117
+ 3118
+ 3119
+ 3120
+ 3121
+ 3122
+ 3123
+ 3124
+ 3125
+ 3126
+ 3127
+ 3128
+ 3129
+ 3130
+ 3131
+ 3132
+ 3133
+ 3134
+ 3135
+ 3136
+ 3137
+ 3138
+ 3139
+ 3140
+ 3141
+ 3142
+ 3143
+ 3144
+ 3145
+ 3146
+ 3147
+ 3148
+ 3149
+ 3150
+ 3151
+ 3152
+ 3153
+ 3154
+ 3155
+ 3156
+ 3157
+ 3158
+ 3159
+ 3160
+ 3161
+ 3162
+ 3163
+ 3164
+ 3165
+ 3166
+ 3167
+ 3168
+ 3169
+ 3170
+ 3171
+ 3172
+ 3173
+ 3174
+ 3175
+ 3176
+ 3177
+ 3178
+ 3179
+ 3180
+ 3181
+ 3182
+ 3183
+ 3184
+ 3185
+ 3186
+ 3187
+ 3188
+ 3189
+ 3190
+ 3191
+ 3192
+ 3193
+ 3194
+ 3195
+ 3196
+ 3197
+ 3198
+ 3199
+ 3200
+ 3201
+ 3202
+ 3203
+ 3204
+ 3205
+ 3206
+ 3207
+ 3208
+ 3209
+ 3210
+ 3211
+ 3212
+ 3213
+ 3214
+ 3215
+ 3216
+ 3217
+ 3218
+ 3219
+ 3220
+ 3221
+ 3222
+ 3223
+ 3224
+ 3225
+ 3226
+ 3227
+ 3228
+ 3229
+ 3230
+ 3231
+ 3232
+ 3233
+ 3234
+ 3235
+ 3236
+ 3237
+ 3238
+ 3239
+ 3240
+ 3241
+ 3242
+ 3243
+ 3244
+ 3245
+ 3246
+ 3247
+ 3248
+ 3249
+ 3250
+ 3251
+ 3252
+ 3253
+ 3254
+ 3255
+ 3256
+ 3257
+ 3258
+ 3259
+ 3260
+ 3261
+ 3262
+ 3263
+ 3264
+ 3265
+ 3266
+ 3267
+ 3268
+ 3269
+ 3270
+ 3271
+ 3272
+ 3273
+ 3274
+ 3275
+ 3276
+ 3277
+ 3278
+ 3279
+ 3280
+ 3281
+ 3282
+ 3283
+ 3284
+ 3285
+ 3286
+ 3287
+ 3288
+ 3289
+ 3290
+ 3291
+ 3292
+ 3293
+ 3294
+ 3295
+ 3296
+ 3297
+ 3298
+ 3299
+ 3300
+ 3301
+ 3302
+ 3303
+ 3304
+ 3305
+ 3306
+ 3307
+ 3308
+ 3309
+ 3310
+ 3311
+ 3312
+ 3313
+ 3314
+ 3315
+ 3316
+ 3317
+ 3318
+ 3319
+ 3320
+ 3321
+ 3322
+ 3323
+ 3324
+ 3325
+ 3326
+ 3327
+ 3328
+ 3329
+ 3330
+ 3331
+ 3332
+ 3333
+ 3334
+ 3335
+ 3336
+ 3337
+ 3338
+ 3339
+ 3340
+ 3341
+ 3342
+ 3343
+ 3344
+ 3345
+ 3346
+ 3347
+ 3348
+ 3349
+ 3350
+ 3351
+ 3352
+ 3353
+ 3354
+ 3355
+ 3356
+ 3357
+ 3358
+ 3359
+ 3360
+ 3361
+ 3362
+ 3363
+ 3364
+ 3365
+ 3366
+ 3367
+ 3368
+ 3369
+ 3370
+ 3371
+ 3372
+ 3373
+ 3374
+ 3375
+ 3376
+ 3377
+ 3378
+ 3379
+ 3380
+ 3381
+ 3382
+ 3383
+ 3384
+ 3385
+ 3386
+ 3387
+ 3388
+ 3389
+ 3390
+ 3391
+ 3392
+ 3393
+ 3394
+ 3395
+ 3396
+ 3397
+ 3398
+ 3399
+ 3400
+ 3401
+ 3402
+ 3403
+ 3404
+ 3405
+ 3406
+ 3407
+ 3408
+ 3409
+ 3410
+ 3411
+ 3412
+ 3413
+ 3414
+ 3415
+ 3416
+ 3417
+ 3418
+ 3419
+ 3420
+ 3421
+ 3422
+ 3423
+ 3424
+ 3425
+ 3426
+ 3427
+ 3428
+ 3429
+ 3430
+ 3431
+ 3432
+ 3433
+ 3434
+ 3435
+ 3436
+ 3437
+ 3438
+ 3439
+ 3440
+ 3441
+ 3442
+ 3443
+ 3444
+ 3445
+ 3446
+ 3447
+ 3448
+ 3449
+ 3450
+ 3451
+ 3452
+ 3453
+ 3454
+ 3455
+ 3456
+ 3457
+ 3458
+ 3459
+ 3460
+ 3461
+ 3462
+ 3463
+ 3464
+ 3465
+ 3466
+ 3467
+ 3468
+ 3469
+ 3470
+ 3471
+ 3472
+ 3473
+ 3474
+ 3475
+ 3476
+ 3477
+ 3478
+ 3479
+ 3480
+ 3481
+ 3482
+ 3483
+ 3484
+ 3485
+ 3486
+ 3487
+ 3488
+ 3489
+ 3490
+ 3491
+ 3492
+ 3493
+ 3494
+ 3495
+ 3496
+ 3497
+ 3498
+ 3499
+ 3500
+ 3501
+ 3502
+ 3503
+ 3504
+ 3505
+ 3506
+ 3507
+ 3508
+ 3509
+ 3510
+ 3511
+ 3512
+ 3513
+ 3514
+ 3515
+ 3516
+ 3517
+ 3518
+ 3519
+ 3520
+ 3521
+ 3522
+ 3523
+ 3524
+ 3525
+ 3526
+ 3527
+ 3528
+ 3529
+ 3530
+ 3531
+ 3532
+ 3533
+ 3534
+ 3535
+ 3536
+ 3537
+ 3538
+ 3539
+ 3540
+ 3541
+ 3542
+ 3543
+ 3544
+ 3545
+ 3546
+ 3547
+ 3548
+ 3549
+ 3550
+ 3551
+ 3552
+ 3553
+ 3554
+ 3555
+ 3556
+ 3557
+ 3558
+ 3559
+ 3560
+ 3561
+ 3562
+ 3563
+ 3564
+ 3565
+ 3566
+ 3567
+ 3568
+ 3569
+ 3570
+ 3571
+ 3572
+ 3573
+ 3574
+ 3575
+ 3576
+ 3577
+ 3578
+ 3579
+ 3580
+ 3581
+ 3582
+ 3583
+ 3584
+ 3585
+ 3586
+ 3587
+ 3588
+ 3589
+ 3590
+ 3591
+ 3592
+ 3593
+ 3594
+ 3595
+ 3596
+ 3597
+ 3598
+ 3599
+ 3600
+ 3601
+ 3602
+ 3603
+ 3604
+ 3605
+ 3606
+ 3607
+ 3608
+ 3609
+ 3610
+ 3611
+ 3612
+ 3613
+ 3614
+ 3615
+ 3616
+ 3617
+ 3618
+ 3619
+ 3620
+ 3621
+ 3622
+ 3623
+ 3624
+ 3625
+ 3626
+ 3627
+ 3628
+ 3629
+ 3630
+ 3631
+ 3632
+ 3633
+ 3634
+ 3635
+ 3636
+ 3637
+ 3638
+ 3639
+ 3640
+ 3641
+ 3642
+ 3643
+ 3644
+ 3645
+ 3646
+ 3647
+ 3648
+ 3649
+ 3650
+ 3651
+ 3652
+ 3653
+ 3654
+ 3655
+ 3656
+ 3657
+ 3658
+ 3659
+ 3660
+ 3661
+ 3662
+ 3663
+ 3664
+ 3665
+ 3666
+ 3667
+ 3668
+ 3669
+ 3670
+ 3671
+ 3672
+ 3673
+ 3674
+ 3675
+ 3676
+ 3677
+ 3678
+ 3679
+ 3680
+ 3681
+ 3682
+ 3683
+ 3684
+ 3685
+ 3686
+ 3687
+ 3688
+ 3689
+ 3690
+ 3691
+ 3692
+ 3693
+ 3694
+ 3695
+ 3696
+ 3697
+ 3698
+ 3699
+ 3700
+ 3701
+ 3702
+ 3703
+ 3704
+ 3705
+ 3706
+ 3707
+ 3708
+ 3709
+ 3710
+ 3711
+ 3712
+ 3713
+ 3714
+ 3715
+ 3716
+ 3717
+ 3718
+ 3719
+ 3720
+ 3721
+ 3722
+ 3723
+ 3724
+ 3725
+ 3726
+ 3727
+ 3728
+ 3729
+ 3730
+ 3731
+ 3732
+ 3733
+ 3734
+ 3735
+ 3736
+ 3737
+ 3738
+ 3739
+ 3740
+ 3741
+ 3742
+ 3743
+ 3744
+ 3745
+ 3746
+ 3747
+ 3748
+ 3749
+ 3750
+ 3751
+ 3752
+ 3753
+ 3754
+ 3755
+ 3756
+ 3757
+ 3758
+ 3759
+ 3760
+ 3761
+ 3762
+ 3763
+ 3764
+ 3765
+ 3766
+ 3767
+ 3768
+ 3769
+ 3770
+ 3771
+ 3772
+ 3773
+ 3774
+ 3775
+ 3776
+ 3777
+ 3778
+ 3779
+ 3780
+ 3781
+ 3782
+ 3783
+ 3784
+ 3785
+ 3786
+ 3787
+ 3788
+ 3789
+ 3790
+ 3791
+ 3792
+ 3793
+ 3794
+ 3795
+ 3796
+ 3797
+ 3798
+ 3799
+ 3800
+ 3801
+ 3802
+ 3803
+ 3804
+ 3805
+ 3806
+ 3807
+ 3808
+ 3809
+ 3810
+ 3811
+ 3812
+ 3813
+ 3814
+ 3815
+ 3816
+ 3817
+ 3818
+ 3819
+ 3820
+ 3821
+ 3822
+ 3823
+ 3824
+ 3825
+ 3826
+ 3827
+ 3828
+ 3829
+ 3830
+ 3831
+ 3832
+ 3833
+ 3834
+ 3835
+ 3836
+ 3837
+ 3838
+ 3839
+ 3840
+ 3841
+ 3842
+ 3843
+ 3844
+ 3845
+ 3846
+ 3847
+ 3848
+ 3849
+ 3850
+ 3851
+ 3852
+ 3853
+ 3854
+ 3855
+ 3856
+ 3857
+ 3858
+ 3859
+ 3860
+ 3861
+ 3862
+ 3863
+ 3864
+ 3865
+ 3866
+ 3867
+ 3868
+ 3869
+ 3870
+ 3871
+ 3872
+ 3873
+ 3874
+ 3875
+ 3876
+ 3877
+ 3878
+ 3879
+ 3880
+ 3881
+ 3882
+ 3883
+ 3884
+ 3885
+ 3886
+ 3887
+ 3888
+ 3889
+ 3890
+ 3891
+ 3892
+ 3893
+ 3894
+ 3895
+ 3896
+ 3897
+ 3898
+ 3899
+ 3900
+ 3901
+ 3902
+ 3903
+ 3904
+ 3905
+ 3906
+ 3907
+ 3908
+ 3909
+ 3910
+ 3911
+ 3912
+ 3913
+ 3914
+ 3915
+ 3916
+ 3917
+ 3918
+ 3919
+ 3920
+ 3921
+ 3922
+ 3923
+ 3924
+ 3925
+ 3926
+ 3927
+ 3928
+ 3929
+ 3930
+ 3931
+ 3932
+ 3933
+ 3934
+ 3935
+ 3936
+ 3937
+ 3938
+ 3939
+ 3940
+ 3941
+ 3942
+ 3943
+ 3944
+ 3945
+ 3946
+ 3947
+ 3948
+ 3949
+ 3950
+ 3951
+ 3952
+ 3953
+ 3954
+ 3955
+ 3956
+ 3957
+ 3958
+ 3959
+ 3960
+ 3961
+ 3962
+ 3963
+ 3964
+ 3965
+ 3966
+ 3967
+ 3968
+ 3969
+ 3970
+ 3971
+ 3972
+ 3973
+ 3974
+ 3975
+ 3976
+ 3977
+ 3978
+ 3979
+ 3980
+ 3981
+ 3982
+ 3983
+ 3984
+ 3985
+ 3986
+ 3987
+ 3988
+ 3989
+ 3990
+ 3991
+ 3992
+ 3993
+ 3994
+ 3995
+ 3996
+ 3997
+ 3998
+ 3999
+ 4000
+ 4001
+ 4002
+ 4003
+ 4004
+ 4005
+ 4006
+ 4007
+ 4008
+ 4009
+ 4010
+ 4011
+ 4012
+ 4013
+ 4014
+ 4015
+ 4016
+ 4017
+ 4018
+ 4019
+ 4020
+ 4021
+ 4022
+ 4023
+ 4024
+ 4025
+ 4026
+ 4027
+ 4028
+ 4029
+ 4030
+ 4031
+ 4032
+ 4033
+ 4034
+ 4035
+ 4036
+ 4037
+ 4038
+ 4039
+ 4040
+ 4041
+ 4042
+ 4043
+ 4044
+ 4045
+ 4046
+ 4047
+ 4048
+ 4049
+ 4050
+ 4051
+ 4052
+ 4053
+ 4054
+ 4055
+ 4056
+ 4057
+ 4058
+ 4059
+ 4060
+ 4061
+ 4062
+ 4063
+ 4064
+ 4065
+ 4066
+ 4067
+ 4068
+ 4069
+ 4070
+ 4071
+ 4072
+ 4073
+ 4074
+ 4075
+ 4076
+ 4077
+ 4078
+ 4079
+ 4080
+ 4081
+ 4082
+ 4083
+ 4084
+ 4085
+ 4086
+ 4087
+ 4088
+ 4089
+ 4090
+ 4091
+ 4092
+ 4093
+ 4094
+ 4095
+ 4096
+ 4097
+ 4098
+ 4099
+ 4100
+ 4101
+ 4102
+ 4103
+ 4104
+ 4105
+ 4106
+ 4107
+ 4108
+ 4109
+ 4110
+ 4111
+ 4112
+ 4113
+ 4114
+ 4115
+ 4116
+ 4117
+ 4118
+ 4119
+ 4120
+ 4121
+ 4122
+ 4123
+ 4124
+ 4125
+ 4126
+ 4127
+ 4128
+ 4129
+ 4130
+ 4131
+ 4132
+ 4133
+ 4134
+ 4135
+ 4136
+ 4137
+ 4138
+ 4139
+ 4140
+ 4141
+ 4142
+ 4143
+ 4144
+ 4145
+ 4146
+ 4147
+ 4148
+ 4149
+ 4150
+ 4151
+ 4152
+ 4153
+ 4154
+ 4155
+ 4156
+ 4157
+ 4158
+ 4159
+ 4160
+ 4161
+ 4162
+ 4163
+ 4164
+ 4165
+ 4166
+ 4167
+ 4168
+ 4169
+ 4170
+ 4171
+ 4172
+ 4173
+ 4174
+ 4175
+ 4176
+ 4177
+ 4178
+ 4179
+ 4180
+ 4181
+ 4182
+ 4183
+ 4184
+ 4185
+ 4186
+ 4187
+ 4188
+ 4189
+ 4190
+ 4191
+ 4192
+ 4193
+ 4194
+ 4195
+ 4196
+ 4197
+ 4198
+ 4199
+ 4200
+ 4201
+ 4202
+ 4203
+ 4204
+ 4205
+ 4206
+ 4207
+ 4208
+ 4209
+ 4210
+ 4211
+ 4212
+ 4213
+ 4214
+ 4215
+ 4216
+ 4217
+ 4218
+ 4219
+ 4220
+ 4221
+ 4222
+ 4223
+ 4224
+ 4225
+ 4226
+ 4227
+ 4228
+ 4229
+ 4230
+ 4231
+ 4232
+ 4233
+ 4234
+ 4235
+ 4236
+ 4237
+ 4238
+ 4239
+ 4240
+ 4241
+ 4242
+ 4243
+ 4244
+ 4245
+ 4246
+ 4247
+ 4248
+ 4249
+ 4250
+ 4251
+ 4252
+ 4253
+ 4254
+ 4255
+ 4256
+ 4257
+ 4258
+ 4259
+ 4260
+ 4261
+ 4262
+ 4263
+ 4264
+ 4265
+ 4266
+ 4267
+ 4268
+ 4269
+ 4270
+ 4271
+ 4272
+ 4273
+ 4274
+ 4275
+ 4276
+ 4277
+ 4278
+ 4279
+ 4280
+ 4281
+ 4282
+ 4283
+ 4284
+ 4285
+ 4286
+ 4287
+ 4288
+ 4289
+ 4290
+ 4291
+ 4292
+ 4293
+ 4294
+ 4295
+ 4296
+ 4297
+ 4298
+ 4299
+ 4300
+ 4301
+ 4302
+ 4303
+ 4304
+ 4305
+ 4306
+ 4307
+ 4308
+ 4309
+ 4310
+ 4311
+ 4312
+ 4313
+ 4314
+ 4315
+ 4316
+ 4317
+ 4318
+ 4319
+ 4320
+ 4321
+ 4322
+ 4323
+ 4324
+ 4325
+ 4326
+ 4327
+ 4328
+ 4329
+ 4330
+ 4331
+ 4332
+ 4333
+ 4334
+ 4335
+ 4336
+ 4337
+ 4338
+ 4339
+ 4340
+ 4341
+ 4342
+ 4343
+ 4344
+ 4345
+ 4346
+ 4347
+ 4348
+ 4349
+ 4350
+ 4351
+ 4352
+ 4353
+ 4354
+ 4355
+ 4356
+ 4357
+ 4358
+ 4359
+ 4360
+ 4361
+ 4362
+ 4363
+ 4364
+ 4365
+ 4366
+ 4367
+ 4368
+ 4369
+ 4370
+ 4371
+ 4372
+ 4373
+ 4374
+ 4375
+ 4376
+ 4377
+ 4378
+ 4379
+ 4380
+ 4381
+ 4382
+ 4383
+ 4384
+ 4385
+ 4386
+ 4387
+ 4388
+ 4389
+ 4390
+ 4391
+ 4392
+ 4393
+ 4394
+ 4395
+ 4396
+ 4397
+ 4398
+ 4399
+ 4400
+ 4401
+ 4402
+ 4403
+ 4404
+ 4405
+ 4406
+ 4407
+ 4408
+ 4409
+ 4410
+ 4411
+ 4412
+ 4413
+ 4414
+ 4415
+ 4416
+ 4417
+ 4418
+ 4419
+ 4420
+ 4421
+ 4422
+ 4423
+ 4424
+ 4425
+ 4426
+ 4427
+ 4428
+ 4429
+ 4430
+ 4431
+ 4432
+ 4433
+ 4434
+ 4435
+ 4436
+ 4437
+ 4438
+ 4439
+ 4440
+ 4441
+ 4442
+ 4443
+ 4444
+ 4445
+ 4446
+ 4447
+ 4448
+ 4449
+ 4450
+ 4451
+ 4452
+ 4453
+ 4454
+ 4455
+ 4456
+ 4457
+ 4458
+ 4459
+ 4460
+ 4461
+ 4462
+ 4463
+ 4464
+ 4465
+ 4466
+ 4467
+ 4468
+ 4469
+ 4470
+ 4471
+ 4472
+ 4473
+ 4474
+ 4475
+ 4476
+ 4477
+ 4478
+ 4479
+ 4480
+ 4481
+ 4482
+ 4483
+ 4484
+ 4485
+ 4486
+ 4487
+ 4488
+ 4489
+ 4490
+ 4491
+ 4492
+ 4493
+ 4494
+ 4495
+ 4496
+ 4497
+ 4498
+ 4499
+ 4500
============================================================
--- harness/sources/templates_parser/regtests/tests/0036_testme/test.py 55e4f7f0f66415c40e278a34283e4567e06d023d
+++ harness/sources/templates_parser/regtests/tests/0036_testme/test.py 55e4f7f0f66415c40e278a34283e4567e06d023d
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme28.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0036_testme/testme28.tmplt 7b2124f3a6be4929d3d0005eadc040a703a6a5de
+++ harness/sources/templates_parser/regtests/tests/0036_testme/testme28.tmplt 7b2124f3a6be4929d3d0005eadc040a703a6a5de
@@ -0,0 +1,4500 @@
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ 25
+ 26
+ 27
+ 28
+ 29
+ 30
+ 31
+ 32
+ 33
+ 34
+ 35
+ 36
+ 37
+ 38
+ 39
+ 40
+ 41
+ 42
+ 43
+ 44
+ 45
+ 46
+ 47
+ 48
+ 49
+ 50
+ 51
+ 52
+ 53
+ 54
+ 55
+ 56
+ 57
+ 58
+ 59
+ 60
+ 61
+ 62
+ 63
+ 64
+ 65
+ 66
+ 67
+ 68
+ 69
+ 70
+ 71
+ 72
+ 73
+ 74
+ 75
+ 76
+ 77
+ 78
+ 79
+ 80
+ 81
+ 82
+ 83
+ 84
+ 85
+ 86
+ 87
+ 88
+ 89
+ 90
+ 91
+ 92
+ 93
+ 94
+ 95
+ 96
+ 97
+ 98
+ 99
+ 100
+ 101
+ 102
+ 103
+ 104
+ 105
+ 106
+ 107
+ 108
+ 109
+ 110
+ 111
+ 112
+ 113
+ 114
+ 115
+ 116
+ 117
+ 118
+ 119
+ 120
+ 121
+ 122
+ 123
+ 124
+ 125
+ 126
+ 127
+ 128
+ 129
+ 130
+ 131
+ 132
+ 133
+ 134
+ 135
+ 136
+ 137
+ 138
+ 139
+ 140
+ 141
+ 142
+ 143
+ 144
+ 145
+ 146
+ 147
+ 148
+ 149
+ 150
+ 151
+ 152
+ 153
+ 154
+ 155
+ 156
+ 157
+ 158
+ 159
+ 160
+ 161
+ 162
+ 163
+ 164
+ 165
+ 166
+ 167
+ 168
+ 169
+ 170
+ 171
+ 172
+ 173
+ 174
+ 175
+ 176
+ 177
+ 178
+ 179
+ 180
+ 181
+ 182
+ 183
+ 184
+ 185
+ 186
+ 187
+ 188
+ 189
+ 190
+ 191
+ 192
+ 193
+ 194
+ 195
+ 196
+ 197
+ 198
+ 199
+ 200
+ 201
+ 202
+ 203
+ 204
+ 205
+ 206
+ 207
+ 208
+ 209
+ 210
+ 211
+ 212
+ 213
+ 214
+ 215
+ 216
+ 217
+ 218
+ 219
+ 220
+ 221
+ 222
+ 223
+ 224
+ 225
+ 226
+ 227
+ 228
+ 229
+ 230
+ 231
+ 232
+ 233
+ 234
+ 235
+ 236
+ 237
+ 238
+ 239
+ 240
+ 241
+ 242
+ 243
+ 244
+ 245
+ 246
+ 247
+ 248
+ 249
+ 250
+ 251
+ 252
+ 253
+ 254
+ 255
+ 256
+ 257
+ 258
+ 259
+ 260
+ 261
+ 262
+ 263
+ 264
+ 265
+ 266
+ 267
+ 268
+ 269
+ 270
+ 271
+ 272
+ 273
+ 274
+ 275
+ 276
+ 277
+ 278
+ 279
+ 280
+ 281
+ 282
+ 283
+ 284
+ 285
+ 286
+ 287
+ 288
+ 289
+ 290
+ 291
+ 292
+ 293
+ 294
+ 295
+ 296
+ 297
+ 298
+ 299
+ 300
+ 301
+ 302
+ 303
+ 304
+ 305
+ 306
+ 307
+ 308
+ 309
+ 310
+ 311
+ 312
+ 313
+ 314
+ 315
+ 316
+ 317
+ 318
+ 319
+ 320
+ 321
+ 322
+ 323
+ 324
+ 325
+ 326
+ 327
+ 328
+ 329
+ 330
+ 331
+ 332
+ 333
+ 334
+ 335
+ 336
+ 337
+ 338
+ 339
+ 340
+ 341
+ 342
+ 343
+ 344
+ 345
+ 346
+ 347
+ 348
+ 349
+ 350
+ 351
+ 352
+ 353
+ 354
+ 355
+ 356
+ 357
+ 358
+ 359
+ 360
+ 361
+ 362
+ 363
+ 364
+ 365
+ 366
+ 367
+ 368
+ 369
+ 370
+ 371
+ 372
+ 373
+ 374
+ 375
+ 376
+ 377
+ 378
+ 379
+ 380
+ 381
+ 382
+ 383
+ 384
+ 385
+ 386
+ 387
+ 388
+ 389
+ 390
+ 391
+ 392
+ 393
+ 394
+ 395
+ 396
+ 397
+ 398
+ 399
+ 400
+ 401
+ 402
+ 403
+ 404
+ 405
+ 406
+ 407
+ 408
+ 409
+ 410
+ 411
+ 412
+ 413
+ 414
+ 415
+ 416
+ 417
+ 418
+ 419
+ 420
+ 421
+ 422
+ 423
+ 424
+ 425
+ 426
+ 427
+ 428
+ 429
+ 430
+ 431
+ 432
+ 433
+ 434
+ 435
+ 436
+ 437
+ 438
+ 439
+ 440
+ 441
+ 442
+ 443
+ 444
+ 445
+ 446
+ 447
+ 448
+ 449
+ 450
+ 451
+ 452
+ 453
+ 454
+ 455
+ 456
+ 457
+ 458
+ 459
+ 460
+ 461
+ 462
+ 463
+ 464
+ 465
+ 466
+ 467
+ 468
+ 469
+ 470
+ 471
+ 472
+ 473
+ 474
+ 475
+ 476
+ 477
+ 478
+ 479
+ 480
+ 481
+ 482
+ 483
+ 484
+ 485
+ 486
+ 487
+ 488
+ 489
+ 490
+ 491
+ 492
+ 493
+ 494
+ 495
+ 496
+ 497
+ 498
+ 499
+ 500
+ 501
+ 502
+ 503
+ 504
+ 505
+ 506
+ 507
+ 508
+ 509
+ 510
+ 511
+ 512
+ 513
+ 514
+ 515
+ 516
+ 517
+ 518
+ 519
+ 520
+ 521
+ 522
+ 523
+ 524
+ 525
+ 526
+ 527
+ 528
+ 529
+ 530
+ 531
+ 532
+ 533
+ 534
+ 535
+ 536
+ 537
+ 538
+ 539
+ 540
+ 541
+ 542
+ 543
+ 544
+ 545
+ 546
+ 547
+ 548
+ 549
+ 550
+ 551
+ 552
+ 553
+ 554
+ 555
+ 556
+ 557
+ 558
+ 559
+ 560
+ 561
+ 562
+ 563
+ 564
+ 565
+ 566
+ 567
+ 568
+ 569
+ 570
+ 571
+ 572
+ 573
+ 574
+ 575
+ 576
+ 577
+ 578
+ 579
+ 580
+ 581
+ 582
+ 583
+ 584
+ 585
+ 586
+ 587
+ 588
+ 589
+ 590
+ 591
+ 592
+ 593
+ 594
+ 595
+ 596
+ 597
+ 598
+ 599
+ 600
+ 601
+ 602
+ 603
+ 604
+ 605
+ 606
+ 607
+ 608
+ 609
+ 610
+ 611
+ 612
+ 613
+ 614
+ 615
+ 616
+ 617
+ 618
+ 619
+ 620
+ 621
+ 622
+ 623
+ 624
+ 625
+ 626
+ 627
+ 628
+ 629
+ 630
+ 631
+ 632
+ 633
+ 634
+ 635
+ 636
+ 637
+ 638
+ 639
+ 640
+ 641
+ 642
+ 643
+ 644
+ 645
+ 646
+ 647
+ 648
+ 649
+ 650
+ 651
+ 652
+ 653
+ 654
+ 655
+ 656
+ 657
+ 658
+ 659
+ 660
+ 661
+ 662
+ 663
+ 664
+ 665
+ 666
+ 667
+ 668
+ 669
+ 670
+ 671
+ 672
+ 673
+ 674
+ 675
+ 676
+ 677
+ 678
+ 679
+ 680
+ 681
+ 682
+ 683
+ 684
+ 685
+ 686
+ 687
+ 688
+ 689
+ 690
+ 691
+ 692
+ 693
+ 694
+ 695
+ 696
+ 697
+ 698
+ 699
+ 700
+ 701
+ 702
+ 703
+ 704
+ 705
+ 706
+ 707
+ 708
+ 709
+ 710
+ 711
+ 712
+ 713
+ 714
+ 715
+ 716
+ 717
+ 718
+ 719
+ 720
+ 721
+ 722
+ 723
+ 724
+ 725
+ 726
+ 727
+ 728
+ 729
+ 730
+ 731
+ 732
+ 733
+ 734
+ 735
+ 736
+ 737
+ 738
+ 739
+ 740
+ 741
+ 742
+ 743
+ 744
+ 745
+ 746
+ 747
+ 748
+ 749
+ 750
+ 751
+ 752
+ 753
+ 754
+ 755
+ 756
+ 757
+ 758
+ 759
+ 760
+ 761
+ 762
+ 763
+ 764
+ 765
+ 766
+ 767
+ 768
+ 769
+ 770
+ 771
+ 772
+ 773
+ 774
+ 775
+ 776
+ 777
+ 778
+ 779
+ 780
+ 781
+ 782
+ 783
+ 784
+ 785
+ 786
+ 787
+ 788
+ 789
+ 790
+ 791
+ 792
+ 793
+ 794
+ 795
+ 796
+ 797
+ 798
+ 799
+ 800
+ 801
+ 802
+ 803
+ 804
+ 805
+ 806
+ 807
+ 808
+ 809
+ 810
+ 811
+ 812
+ 813
+ 814
+ 815
+ 816
+ 817
+ 818
+ 819
+ 820
+ 821
+ 822
+ 823
+ 824
+ 825
+ 826
+ 827
+ 828
+ 829
+ 830
+ 831
+ 832
+ 833
+ 834
+ 835
+ 836
+ 837
+ 838
+ 839
+ 840
+ 841
+ 842
+ 843
+ 844
+ 845
+ 846
+ 847
+ 848
+ 849
+ 850
+ 851
+ 852
+ 853
+ 854
+ 855
+ 856
+ 857
+ 858
+ 859
+ 860
+ 861
+ 862
+ 863
+ 864
+ 865
+ 866
+ 867
+ 868
+ 869
+ 870
+ 871
+ 872
+ 873
+ 874
+ 875
+ 876
+ 877
+ 878
+ 879
+ 880
+ 881
+ 882
+ 883
+ 884
+ 885
+ 886
+ 887
+ 888
+ 889
+ 890
+ 891
+ 892
+ 893
+ 894
+ 895
+ 896
+ 897
+ 898
+ 899
+ 900
+ 901
+ 902
+ 903
+ 904
+ 905
+ 906
+ 907
+ 908
+ 909
+ 910
+ 911
+ 912
+ 913
+ 914
+ 915
+ 916
+ 917
+ 918
+ 919
+ 920
+ 921
+ 922
+ 923
+ 924
+ 925
+ 926
+ 927
+ 928
+ 929
+ 930
+ 931
+ 932
+ 933
+ 934
+ 935
+ 936
+ 937
+ 938
+ 939
+ 940
+ 941
+ 942
+ 943
+ 944
+ 945
+ 946
+ 947
+ 948
+ 949
+ 950
+ 951
+ 952
+ 953
+ 954
+ 955
+ 956
+ 957
+ 958
+ 959
+ 960
+ 961
+ 962
+ 963
+ 964
+ 965
+ 966
+ 967
+ 968
+ 969
+ 970
+ 971
+ 972
+ 973
+ 974
+ 975
+ 976
+ 977
+ 978
+ 979
+ 980
+ 981
+ 982
+ 983
+ 984
+ 985
+ 986
+ 987
+ 988
+ 989
+ 990
+ 991
+ 992
+ 993
+ 994
+ 995
+ 996
+ 997
+ 998
+ 999
+ 1000
+ 1001
+ 1002
+ 1003
+ 1004
+ 1005
+ 1006
+ 1007
+ 1008
+ 1009
+ 1010
+ 1011
+ 1012
+ 1013
+ 1014
+ 1015
+ 1016
+ 1017
+ 1018
+ 1019
+ 1020
+ 1021
+ 1022
+ 1023
+ 1024
+ 1025
+ 1026
+ 1027
+ 1028
+ 1029
+ 1030
+ 1031
+ 1032
+ 1033
+ 1034
+ 1035
+ 1036
+ 1037
+ 1038
+ 1039
+ 1040
+ 1041
+ 1042
+ 1043
+ 1044
+ 1045
+ 1046
+ 1047
+ 1048
+ 1049
+ 1050
+ 1051
+ 1052
+ 1053
+ 1054
+ 1055
+ 1056
+ 1057
+ 1058
+ 1059
+ 1060
+ 1061
+ 1062
+ 1063
+ 1064
+ 1065
+ 1066
+ 1067
+ 1068
+ 1069
+ 1070
+ 1071
+ 1072
+ 1073
+ 1074
+ 1075
+ 1076
+ 1077
+ 1078
+ 1079
+ 1080
+ 1081
+ 1082
+ 1083
+ 1084
+ 1085
+ 1086
+ 1087
+ 1088
+ 1089
+ 1090
+ 1091
+ 1092
+ 1093
+ 1094
+ 1095
+ 1096
+ 1097
+ 1098
+ 1099
+ 1100
+ 1101
+ 1102
+ 1103
+ 1104
+ 1105
+ 1106
+ 1107
+ 1108
+ 1109
+ 1110
+ 1111
+ 1112
+ 1113
+ 1114
+ 1115
+ 1116
+ 1117
+ 1118
+ 1119
+ 1120
+ 1121
+ 1122
+ 1123
+ 1124
+ 1125
+ 1126
+ 1127
+ 1128
+ 1129
+ 1130
+ 1131
+ 1132
+ 1133
+ 1134
+ 1135
+ 1136
+ 1137
+ 1138
+ 1139
+ 1140
+ 1141
+ 1142
+ 1143
+ 1144
+ 1145
+ 1146
+ 1147
+ 1148
+ 1149
+ 1150
+ 1151
+ 1152
+ 1153
+ 1154
+ 1155
+ 1156
+ 1157
+ 1158
+ 1159
+ 1160
+ 1161
+ 1162
+ 1163
+ 1164
+ 1165
+ 1166
+ 1167
+ 1168
+ 1169
+ 1170
+ 1171
+ 1172
+ 1173
+ 1174
+ 1175
+ 1176
+ 1177
+ 1178
+ 1179
+ 1180
+ 1181
+ 1182
+ 1183
+ 1184
+ 1185
+ 1186
+ 1187
+ 1188
+ 1189
+ 1190
+ 1191
+ 1192
+ 1193
+ 1194
+ 1195
+ 1196
+ 1197
+ 1198
+ 1199
+ 1200
+ 1201
+ 1202
+ 1203
+ 1204
+ 1205
+ 1206
+ 1207
+ 1208
+ 1209
+ 1210
+ 1211
+ 1212
+ 1213
+ 1214
+ 1215
+ 1216
+ 1217
+ 1218
+ 1219
+ 1220
+ 1221
+ 1222
+ 1223
+ 1224
+ 1225
+ 1226
+ 1227
+ 1228
+ 1229
+ 1230
+ 1231
+ 1232
+ 1233
+ 1234
+ 1235
+ 1236
+ 1237
+ 1238
+ 1239
+ 1240
+ 1241
+ 1242
+ 1243
+ 1244
+ 1245
+ 1246
+ 1247
+ 1248
+ 1249
+ 1250
+ 1251
+ 1252
+ 1253
+ 1254
+ 1255
+ 1256
+ 1257
+ 1258
+ 1259
+ 1260
+ 1261
+ 1262
+ 1263
+ 1264
+ 1265
+ 1266
+ 1267
+ 1268
+ 1269
+ 1270
+ 1271
+ 1272
+ 1273
+ 1274
+ 1275
+ 1276
+ 1277
+ 1278
+ 1279
+ 1280
+ 1281
+ 1282
+ 1283
+ 1284
+ 1285
+ 1286
+ 1287
+ 1288
+ 1289
+ 1290
+ 1291
+ 1292
+ 1293
+ 1294
+ 1295
+ 1296
+ 1297
+ 1298
+ 1299
+ 1300
+ 1301
+ 1302
+ 1303
+ 1304
+ 1305
+ 1306
+ 1307
+ 1308
+ 1309
+ 1310
+ 1311
+ 1312
+ 1313
+ 1314
+ 1315
+ 1316
+ 1317
+ 1318
+ 1319
+ 1320
+ 1321
+ 1322
+ 1323
+ 1324
+ 1325
+ 1326
+ 1327
+ 1328
+ 1329
+ 1330
+ 1331
+ 1332
+ 1333
+ 1334
+ 1335
+ 1336
+ 1337
+ 1338
+ 1339
+ 1340
+ 1341
+ 1342
+ 1343
+ 1344
+ 1345
+ 1346
+ 1347
+ 1348
+ 1349
+ 1350
+ 1351
+ 1352
+ 1353
+ 1354
+ 1355
+ 1356
+ 1357
+ 1358
+ 1359
+ 1360
+ 1361
+ 1362
+ 1363
+ 1364
+ 1365
+ 1366
+ 1367
+ 1368
+ 1369
+ 1370
+ 1371
+ 1372
+ 1373
+ 1374
+ 1375
+ 1376
+ 1377
+ 1378
+ 1379
+ 1380
+ 1381
+ 1382
+ 1383
+ 1384
+ 1385
+ 1386
+ 1387
+ 1388
+ 1389
+ 1390
+ 1391
+ 1392
+ 1393
+ 1394
+ 1395
+ 1396
+ 1397
+ 1398
+ 1399
+ 1400
+ 1401
+ 1402
+ 1403
+ 1404
+ 1405
+ 1406
+ 1407
+ 1408
+ 1409
+ 1410
+ 1411
+ 1412
+ 1413
+ 1414
+ 1415
+ 1416
+ 1417
+ 1418
+ 1419
+ 1420
+ 1421
+ 1422
+ 1423
+ 1424
+ 1425
+ 1426
+ 1427
+ 1428
+ 1429
+ 1430
+ 1431
+ 1432
+ 1433
+ 1434
+ 1435
+ 1436
+ 1437
+ 1438
+ 1439
+ 1440
+ 1441
+ 1442
+ 1443
+ 1444
+ 1445
+ 1446
+ 1447
+ 1448
+ 1449
+ 1450
+ 1451
+ 1452
+ 1453
+ 1454
+ 1455
+ 1456
+ 1457
+ 1458
+ 1459
+ 1460
+ 1461
+ 1462
+ 1463
+ 1464
+ 1465
+ 1466
+ 1467
+ 1468
+ 1469
+ 1470
+ 1471
+ 1472
+ 1473
+ 1474
+ 1475
+ 1476
+ 1477
+ 1478
+ 1479
+ 1480
+ 1481
+ 1482
+ 1483
+ 1484
+ 1485
+ 1486
+ 1487
+ 1488
+ 1489
+ 1490
+ 1491
+ 1492
+ 1493
+ 1494
+ 1495
+ 1496
+ 1497
+ 1498
+ 1499
+ 1500
+ 1501
+ 1502
+ 1503
+ 1504
+ 1505
+ 1506
+ 1507
+ 1508
+ 1509
+ 1510
+ 1511
+ 1512
+ 1513
+ 1514
+ 1515
+ 1516
+ 1517
+ 1518
+ 1519
+ 1520
+ 1521
+ 1522
+ 1523
+ 1524
+ 1525
+ 1526
+ 1527
+ 1528
+ 1529
+ 1530
+ 1531
+ 1532
+ 1533
+ 1534
+ 1535
+ 1536
+ 1537
+ 1538
+ 1539
+ 1540
+ 1541
+ 1542
+ 1543
+ 1544
+ 1545
+ 1546
+ 1547
+ 1548
+ 1549
+ 1550
+ 1551
+ 1552
+ 1553
+ 1554
+ 1555
+ 1556
+ 1557
+ 1558
+ 1559
+ 1560
+ 1561
+ 1562
+ 1563
+ 1564
+ 1565
+ 1566
+ 1567
+ 1568
+ 1569
+ 1570
+ 1571
+ 1572
+ 1573
+ 1574
+ 1575
+ 1576
+ 1577
+ 1578
+ 1579
+ 1580
+ 1581
+ 1582
+ 1583
+ 1584
+ 1585
+ 1586
+ 1587
+ 1588
+ 1589
+ 1590
+ 1591
+ 1592
+ 1593
+ 1594
+ 1595
+ 1596
+ 1597
+ 1598
+ 1599
+ 1600
+ 1601
+ 1602
+ 1603
+ 1604
+ 1605
+ 1606
+ 1607
+ 1608
+ 1609
+ 1610
+ 1611
+ 1612
+ 1613
+ 1614
+ 1615
+ 1616
+ 1617
+ 1618
+ 1619
+ 1620
+ 1621
+ 1622
+ 1623
+ 1624
+ 1625
+ 1626
+ 1627
+ 1628
+ 1629
+ 1630
+ 1631
+ 1632
+ 1633
+ 1634
+ 1635
+ 1636
+ 1637
+ 1638
+ 1639
+ 1640
+ 1641
+ 1642
+ 1643
+ 1644
+ 1645
+ 1646
+ 1647
+ 1648
+ 1649
+ 1650
+ 1651
+ 1652
+ 1653
+ 1654
+ 1655
+ 1656
+ 1657
+ 1658
+ 1659
+ 1660
+ 1661
+ 1662
+ 1663
+ 1664
+ 1665
+ 1666
+ 1667
+ 1668
+ 1669
+ 1670
+ 1671
+ 1672
+ 1673
+ 1674
+ 1675
+ 1676
+ 1677
+ 1678
+ 1679
+ 1680
+ 1681
+ 1682
+ 1683
+ 1684
+ 1685
+ 1686
+ 1687
+ 1688
+ 1689
+ 1690
+ 1691
+ 1692
+ 1693
+ 1694
+ 1695
+ 1696
+ 1697
+ 1698
+ 1699
+ 1700
+ 1701
+ 1702
+ 1703
+ 1704
+ 1705
+ 1706
+ 1707
+ 1708
+ 1709
+ 1710
+ 1711
+ 1712
+ 1713
+ 1714
+ 1715
+ 1716
+ 1717
+ 1718
+ 1719
+ 1720
+ 1721
+ 1722
+ 1723
+ 1724
+ 1725
+ 1726
+ 1727
+ 1728
+ 1729
+ 1730
+ 1731
+ 1732
+ 1733
+ 1734
+ 1735
+ 1736
+ 1737
+ 1738
+ 1739
+ 1740
+ 1741
+ 1742
+ 1743
+ 1744
+ 1745
+ 1746
+ 1747
+ 1748
+ 1749
+ 1750
+ 1751
+ 1752
+ 1753
+ 1754
+ 1755
+ 1756
+ 1757
+ 1758
+ 1759
+ 1760
+ 1761
+ 1762
+ 1763
+ 1764
+ 1765
+ 1766
+ 1767
+ 1768
+ 1769
+ 1770
+ 1771
+ 1772
+ 1773
+ 1774
+ 1775
+ 1776
+ 1777
+ 1778
+ 1779
+ 1780
+ 1781
+ 1782
+ 1783
+ 1784
+ 1785
+ 1786
+ 1787
+ 1788
+ 1789
+ 1790
+ 1791
+ 1792
+ 1793
+ 1794
+ 1795
+ 1796
+ 1797
+ 1798
+ 1799
+ 1800
+ 1801
+ 1802
+ 1803
+ 1804
+ 1805
+ 1806
+ 1807
+ 1808
+ 1809
+ 1810
+ 1811
+ 1812
+ 1813
+ 1814
+ 1815
+ 1816
+ 1817
+ 1818
+ 1819
+ 1820
+ 1821
+ 1822
+ 1823
+ 1824
+ 1825
+ 1826
+ 1827
+ 1828
+ 1829
+ 1830
+ 1831
+ 1832
+ 1833
+ 1834
+ 1835
+ 1836
+ 1837
+ 1838
+ 1839
+ 1840
+ 1841
+ 1842
+ 1843
+ 1844
+ 1845
+ 1846
+ 1847
+ 1848
+ 1849
+ 1850
+ 1851
+ 1852
+ 1853
+ 1854
+ 1855
+ 1856
+ 1857
+ 1858
+ 1859
+ 1860
+ 1861
+ 1862
+ 1863
+ 1864
+ 1865
+ 1866
+ 1867
+ 1868
+ 1869
+ 1870
+ 1871
+ 1872
+ 1873
+ 1874
+ 1875
+ 1876
+ 1877
+ 1878
+ 1879
+ 1880
+ 1881
+ 1882
+ 1883
+ 1884
+ 1885
+ 1886
+ 1887
+ 1888
+ 1889
+ 1890
+ 1891
+ 1892
+ 1893
+ 1894
+ 1895
+ 1896
+ 1897
+ 1898
+ 1899
+ 1900
+ 1901
+ 1902
+ 1903
+ 1904
+ 1905
+ 1906
+ 1907
+ 1908
+ 1909
+ 1910
+ 1911
+ 1912
+ 1913
+ 1914
+ 1915
+ 1916
+ 1917
+ 1918
+ 1919
+ 1920
+ 1921
+ 1922
+ 1923
+ 1924
+ 1925
+ 1926
+ 1927
+ 1928
+ 1929
+ 1930
+ 1931
+ 1932
+ 1933
+ 1934
+ 1935
+ 1936
+ 1937
+ 1938
+ 1939
+ 1940
+ 1941
+ 1942
+ 1943
+ 1944
+ 1945
+ 1946
+ 1947
+ 1948
+ 1949
+ 1950
+ 1951
+ 1952
+ 1953
+ 1954
+ 1955
+ 1956
+ 1957
+ 1958
+ 1959
+ 1960
+ 1961
+ 1962
+ 1963
+ 1964
+ 1965
+ 1966
+ 1967
+ 1968
+ 1969
+ 1970
+ 1971
+ 1972
+ 1973
+ 1974
+ 1975
+ 1976
+ 1977
+ 1978
+ 1979
+ 1980
+ 1981
+ 1982
+ 1983
+ 1984
+ 1985
+ 1986
+ 1987
+ 1988
+ 1989
+ 1990
+ 1991
+ 1992
+ 1993
+ 1994
+ 1995
+ 1996
+ 1997
+ 1998
+ 1999
+ 2000
+ 2001
+ 2002
+ 2003
+ 2004
+ 2005
+ 2006
+ 2007
+ 2008
+ 2009
+ 2010
+ 2011
+ 2012
+ 2013
+ 2014
+ 2015
+ 2016
+ 2017
+ 2018
+ 2019
+ 2020
+ 2021
+ 2022
+ 2023
+ 2024
+ 2025
+ 2026
+ 2027
+ 2028
+ 2029
+ 2030
+ 2031
+ 2032
+ 2033
+ 2034
+ 2035
+ 2036
+ 2037
+ 2038
+ 2039
+ 2040
+ 2041
+ 2042
+ 2043
+ 2044
+ 2045
+ 2046
+ 2047
+ 2048
+ 2049
+ 2050
+ 2051
+ 2052
+ 2053
+ 2054
+ 2055
+ 2056
+ 2057
+ 2058
+ 2059
+ 2060
+ 2061
+ 2062
+ 2063
+ 2064
+ 2065
+ 2066
+ 2067
+ 2068
+ 2069
+ 2070
+ 2071
+ 2072
+ 2073
+ 2074
+ 2075
+ 2076
+ 2077
+ 2078
+ 2079
+ 2080
+ 2081
+ 2082
+ 2083
+ 2084
+ 2085
+ 2086
+ 2087
+ 2088
+ 2089
+ 2090
+ 2091
+ 2092
+ 2093
+ 2094
+ 2095
+ 2096
+ 2097
+ 2098
+ 2099
+ 2100
+ 2101
+ 2102
+ 2103
+ 2104
+ 2105
+ 2106
+ 2107
+ 2108
+ 2109
+ 2110
+ 2111
+ 2112
+ 2113
+ 2114
+ 2115
+ 2116
+ 2117
+ 2118
+ 2119
+ 2120
+ 2121
+ 2122
+ 2123
+ 2124
+ 2125
+ 2126
+ 2127
+ 2128
+ 2129
+ 2130
+ 2131
+ 2132
+ 2133
+ 2134
+ 2135
+ 2136
+ 2137
+ 2138
+ 2139
+ 2140
+ 2141
+ 2142
+ 2143
+ 2144
+ 2145
+ 2146
+ 2147
+ 2148
+ 2149
+ 2150
+ 2151
+ 2152
+ 2153
+ 2154
+ 2155
+ 2156
+ 2157
+ 2158
+ 2159
+ 2160
+ 2161
+ 2162
+ 2163
+ 2164
+ 2165
+ 2166
+ 2167
+ 2168
+ 2169
+ 2170
+ 2171
+ 2172
+ 2173
+ 2174
+ 2175
+ 2176
+ 2177
+ 2178
+ 2179
+ 2180
+ 2181
+ 2182
+ 2183
+ 2184
+ 2185
+ 2186
+ 2187
+ 2188
+ 2189
+ 2190
+ 2191
+ 2192
+ 2193
+ 2194
+ 2195
+ 2196
+ 2197
+ 2198
+ 2199
+ 2200
+ 2201
+ 2202
+ 2203
+ 2204
+ 2205
+ 2206
+ 2207
+ 2208
+ 2209
+ 2210
+ 2211
+ 2212
+ 2213
+ 2214
+ 2215
+ 2216
+ 2217
+ 2218
+ 2219
+ 2220
+ 2221
+ 2222
+ 2223
+ 2224
+ 2225
+ 2226
+ 2227
+ 2228
+ 2229
+ 2230
+ 2231
+ 2232
+ 2233
+ 2234
+ 2235
+ 2236
+ 2237
+ 2238
+ 2239
+ 2240
+ 2241
+ 2242
+ 2243
+ 2244
+ 2245
+ 2246
+ 2247
+ 2248
+ 2249
+ 2250
+ 2251
+ 2252
+ 2253
+ 2254
+ 2255
+ 2256
+ 2257
+ 2258
+ 2259
+ 2260
+ 2261
+ 2262
+ 2263
+ 2264
+ 2265
+ 2266
+ 2267
+ 2268
+ 2269
+ 2270
+ 2271
+ 2272
+ 2273
+ 2274
+ 2275
+ 2276
+ 2277
+ 2278
+ 2279
+ 2280
+ 2281
+ 2282
+ 2283
+ 2284
+ 2285
+ 2286
+ 2287
+ 2288
+ 2289
+ 2290
+ 2291
+ 2292
+ 2293
+ 2294
+ 2295
+ 2296
+ 2297
+ 2298
+ 2299
+ 2300
+ 2301
+ 2302
+ 2303
+ 2304
+ 2305
+ 2306
+ 2307
+ 2308
+ 2309
+ 2310
+ 2311
+ 2312
+ 2313
+ 2314
+ 2315
+ 2316
+ 2317
+ 2318
+ 2319
+ 2320
+ 2321
+ 2322
+ 2323
+ 2324
+ 2325
+ 2326
+ 2327
+ 2328
+ 2329
+ 2330
+ 2331
+ 2332
+ 2333
+ 2334
+ 2335
+ 2336
+ 2337
+ 2338
+ 2339
+ 2340
+ 2341
+ 2342
+ 2343
+ 2344
+ 2345
+ 2346
+ 2347
+ 2348
+ 2349
+ 2350
+ 2351
+ 2352
+ 2353
+ 2354
+ 2355
+ 2356
+ 2357
+ 2358
+ 2359
+ 2360
+ 2361
+ 2362
+ 2363
+ 2364
+ 2365
+ 2366
+ 2367
+ 2368
+ 2369
+ 2370
+ 2371
+ 2372
+ 2373
+ 2374
+ 2375
+ 2376
+ 2377
+ 2378
+ 2379
+ 2380
+ 2381
+ 2382
+ 2383
+ 2384
+ 2385
+ 2386
+ 2387
+ 2388
+ 2389
+ 2390
+ 2391
+ 2392
+ 2393
+ 2394
+ 2395
+ 2396
+ 2397
+ 2398
+ 2399
+ 2400
+ 2401
+ 2402
+ 2403
+ 2404
+ 2405
+ 2406
+ 2407
+ 2408
+ 2409
+ 2410
+ 2411
+ 2412
+ 2413
+ 2414
+ 2415
+ 2416
+ 2417
+ 2418
+ 2419
+ 2420
+ 2421
+ 2422
+ 2423
+ 2424
+ 2425
+ 2426
+ 2427
+ 2428
+ 2429
+ 2430
+ 2431
+ 2432
+ 2433
+ 2434
+ 2435
+ 2436
+ 2437
+ 2438
+ 2439
+ 2440
+ 2441
+ 2442
+ 2443
+ 2444
+ 2445
+ 2446
+ 2447
+ 2448
+ 2449
+ 2450
+ 2451
+ 2452
+ 2453
+ 2454
+ 2455
+ 2456
+ 2457
+ 2458
+ 2459
+ 2460
+ 2461
+ 2462
+ 2463
+ 2464
+ 2465
+ 2466
+ 2467
+ 2468
+ 2469
+ 2470
+ 2471
+ 2472
+ 2473
+ 2474
+ 2475
+ 2476
+ 2477
+ 2478
+ 2479
+ 2480
+ 2481
+ 2482
+ 2483
+ 2484
+ 2485
+ 2486
+ 2487
+ 2488
+ 2489
+ 2490
+ 2491
+ 2492
+ 2493
+ 2494
+ 2495
+ 2496
+ 2497
+ 2498
+ 2499
+ 2500
+ 2501
+ 2502
+ 2503
+ 2504
+ 2505
+ 2506
+ 2507
+ 2508
+ 2509
+ 2510
+ 2511
+ 2512
+ 2513
+ 2514
+ 2515
+ 2516
+ 2517
+ 2518
+ 2519
+ 2520
+ 2521
+ 2522
+ 2523
+ 2524
+ 2525
+ 2526
+ 2527
+ 2528
+ 2529
+ 2530
+ 2531
+ 2532
+ 2533
+ 2534
+ 2535
+ 2536
+ 2537
+ 2538
+ 2539
+ 2540
+ 2541
+ 2542
+ 2543
+ 2544
+ 2545
+ 2546
+ 2547
+ 2548
+ 2549
+ 2550
+ 2551
+ 2552
+ 2553
+ 2554
+ 2555
+ 2556
+ 2557
+ 2558
+ 2559
+ 2560
+ 2561
+ 2562
+ 2563
+ 2564
+ 2565
+ 2566
+ 2567
+ 2568
+ 2569
+ 2570
+ 2571
+ 2572
+ 2573
+ 2574
+ 2575
+ 2576
+ 2577
+ 2578
+ 2579
+ 2580
+ 2581
+ 2582
+ 2583
+ 2584
+ 2585
+ 2586
+ 2587
+ 2588
+ 2589
+ 2590
+ 2591
+ 2592
+ 2593
+ 2594
+ 2595
+ 2596
+ 2597
+ 2598
+ 2599
+ 2600
+ 2601
+ 2602
+ 2603
+ 2604
+ 2605
+ 2606
+ 2607
+ 2608
+ 2609
+ 2610
+ 2611
+ 2612
+ 2613
+ 2614
+ 2615
+ 2616
+ 2617
+ 2618
+ 2619
+ 2620
+ 2621
+ 2622
+ 2623
+ 2624
+ 2625
+ 2626
+ 2627
+ 2628
+ 2629
+ 2630
+ 2631
+ 2632
+ 2633
+ 2634
+ 2635
+ 2636
+ 2637
+ 2638
+ 2639
+ 2640
+ 2641
+ 2642
+ 2643
+ 2644
+ 2645
+ 2646
+ 2647
+ 2648
+ 2649
+ 2650
+ 2651
+ 2652
+ 2653
+ 2654
+ 2655
+ 2656
+ 2657
+ 2658
+ 2659
+ 2660
+ 2661
+ 2662
+ 2663
+ 2664
+ 2665
+ 2666
+ 2667
+ 2668
+ 2669
+ 2670
+ 2671
+ 2672
+ 2673
+ 2674
+ 2675
+ 2676
+ 2677
+ 2678
+ 2679
+ 2680
+ 2681
+ 2682
+ 2683
+ 2684
+ 2685
+ 2686
+ 2687
+ 2688
+ 2689
+ 2690
+ 2691
+ 2692
+ 2693
+ 2694
+ 2695
+ 2696
+ 2697
+ 2698
+ 2699
+ 2700
+ 2701
+ 2702
+ 2703
+ 2704
+ 2705
+ 2706
+ 2707
+ 2708
+ 2709
+ 2710
+ 2711
+ 2712
+ 2713
+ 2714
+ 2715
+ 2716
+ 2717
+ 2718
+ 2719
+ 2720
+ 2721
+ 2722
+ 2723
+ 2724
+ 2725
+ 2726
+ 2727
+ 2728
+ 2729
+ 2730
+ 2731
+ 2732
+ 2733
+ 2734
+ 2735
+ 2736
+ 2737
+ 2738
+ 2739
+ 2740
+ 2741
+ 2742
+ 2743
+ 2744
+ 2745
+ 2746
+ 2747
+ 2748
+ 2749
+ 2750
+ 2751
+ 2752
+ 2753
+ 2754
+ 2755
+ 2756
+ 2757
+ 2758
+ 2759
+ 2760
+ 2761
+ 2762
+ 2763
+ 2764
+ 2765
+ 2766
+ 2767
+ 2768
+ 2769
+ 2770
+ 2771
+ 2772
+ 2773
+ 2774
+ 2775
+ 2776
+ 2777
+ 2778
+ 2779
+ 2780
+ 2781
+ 2782
+ 2783
+ 2784
+ 2785
+ 2786
+ 2787
+ 2788
+ 2789
+ 2790
+ 2791
+ 2792
+ 2793
+ 2794
+ 2795
+ 2796
+ 2797
+ 2798
+ 2799
+ 2800
+ 2801
+ 2802
+ 2803
+ 2804
+ 2805
+ 2806
+ 2807
+ 2808
+ 2809
+ 2810
+ 2811
+ 2812
+ 2813
+ 2814
+ 2815
+ 2816
+ 2817
+ 2818
+ 2819
+ 2820
+ 2821
+ 2822
+ 2823
+ 2824
+ 2825
+ 2826
+ 2827
+ 2828
+ 2829
+ 2830
+ 2831
+ 2832
+ 2833
+ 2834
+ 2835
+ 2836
+ 2837
+ 2838
+ 2839
+ 2840
+ 2841
+ 2842
+ 2843
+ 2844
+ 2845
+ 2846
+ 2847
+ 2848
+ 2849
+ 2850
+ 2851
+ 2852
+ 2853
+ 2854
+ 2855
+ 2856
+ 2857
+ 2858
+ 2859
+ 2860
+ 2861
+ 2862
+ 2863
+ 2864
+ 2865
+ 2866
+ 2867
+ 2868
+ 2869
+ 2870
+ 2871
+ 2872
+ 2873
+ 2874
+ 2875
+ 2876
+ 2877
+ 2878
+ 2879
+ 2880
+ 2881
+ 2882
+ 2883
+ 2884
+ 2885
+ 2886
+ 2887
+ 2888
+ 2889
+ 2890
+ 2891
+ 2892
+ 2893
+ 2894
+ 2895
+ 2896
+ 2897
+ 2898
+ 2899
+ 2900
+ 2901
+ 2902
+ 2903
+ 2904
+ 2905
+ 2906
+ 2907
+ 2908
+ 2909
+ 2910
+ 2911
+ 2912
+ 2913
+ 2914
+ 2915
+ 2916
+ 2917
+ 2918
+ 2919
+ 2920
+ 2921
+ 2922
+ 2923
+ 2924
+ 2925
+ 2926
+ 2927
+ 2928
+ 2929
+ 2930
+ 2931
+ 2932
+ 2933
+ 2934
+ 2935
+ 2936
+ 2937
+ 2938
+ 2939
+ 2940
+ 2941
+ 2942
+ 2943
+ 2944
+ 2945
+ 2946
+ 2947
+ 2948
+ 2949
+ 2950
+ 2951
+ 2952
+ 2953
+ 2954
+ 2955
+ 2956
+ 2957
+ 2958
+ 2959
+ 2960
+ 2961
+ 2962
+ 2963
+ 2964
+ 2965
+ 2966
+ 2967
+ 2968
+ 2969
+ 2970
+ 2971
+ 2972
+ 2973
+ 2974
+ 2975
+ 2976
+ 2977
+ 2978
+ 2979
+ 2980
+ 2981
+ 2982
+ 2983
+ 2984
+ 2985
+ 2986
+ 2987
+ 2988
+ 2989
+ 2990
+ 2991
+ 2992
+ 2993
+ 2994
+ 2995
+ 2996
+ 2997
+ 2998
+ 2999
+ 3000
+ 3001
+ 3002
+ 3003
+ 3004
+ 3005
+ 3006
+ 3007
+ 3008
+ 3009
+ 3010
+ 3011
+ 3012
+ 3013
+ 3014
+ 3015
+ 3016
+ 3017
+ 3018
+ 3019
+ 3020
+ 3021
+ 3022
+ 3023
+ 3024
+ 3025
+ 3026
+ 3027
+ 3028
+ 3029
+ 3030
+ 3031
+ 3032
+ 3033
+ 3034
+ 3035
+ 3036
+ 3037
+ 3038
+ 3039
+ 3040
+ 3041
+ 3042
+ 3043
+ 3044
+ 3045
+ 3046
+ 3047
+ 3048
+ 3049
+ 3050
+ 3051
+ 3052
+ 3053
+ 3054
+ 3055
+ 3056
+ 3057
+ 3058
+ 3059
+ 3060
+ 3061
+ 3062
+ 3063
+ 3064
+ 3065
+ 3066
+ 3067
+ 3068
+ 3069
+ 3070
+ 3071
+ 3072
+ 3073
+ 3074
+ 3075
+ 3076
+ 3077
+ 3078
+ 3079
+ 3080
+ 3081
+ 3082
+ 3083
+ 3084
+ 3085
+ 3086
+ 3087
+ 3088
+ 3089
+ 3090
+ 3091
+ 3092
+ 3093
+ 3094
+ 3095
+ 3096
+ 3097
+ 3098
+ 3099
+ 3100
+ 3101
+ 3102
+ 3103
+ 3104
+ 3105
+ 3106
+ 3107
+ 3108
+ 3109
+ 3110
+ 3111
+ 3112
+ 3113
+ 3114
+ 3115
+ 3116
+ 3117
+ 3118
+ 3119
+ 3120
+ 3121
+ 3122
+ 3123
+ 3124
+ 3125
+ 3126
+ 3127
+ 3128
+ 3129
+ 3130
+ 3131
+ 3132
+ 3133
+ 3134
+ 3135
+ 3136
+ 3137
+ 3138
+ 3139
+ 3140
+ 3141
+ 3142
+ 3143
+ 3144
+ 3145
+ 3146
+ 3147
+ 3148
+ 3149
+ 3150
+ 3151
+ 3152
+ 3153
+ 3154
+ 3155
+ 3156
+ 3157
+ 3158
+ 3159
+ 3160
+ 3161
+ 3162
+ 3163
+ 3164
+ 3165
+ 3166
+ 3167
+ 3168
+ 3169
+ 3170
+ 3171
+ 3172
+ 3173
+ 3174
+ 3175
+ 3176
+ 3177
+ 3178
+ 3179
+ 3180
+ 3181
+ 3182
+ 3183
+ 3184
+ 3185
+ 3186
+ 3187
+ 3188
+ 3189
+ 3190
+ 3191
+ 3192
+ 3193
+ 3194
+ 3195
+ 3196
+ 3197
+ 3198
+ 3199
+ 3200
+ 3201
+ 3202
+ 3203
+ 3204
+ 3205
+ 3206
+ 3207
+ 3208
+ 3209
+ 3210
+ 3211
+ 3212
+ 3213
+ 3214
+ 3215
+ 3216
+ 3217
+ 3218
+ 3219
+ 3220
+ 3221
+ 3222
+ 3223
+ 3224
+ 3225
+ 3226
+ 3227
+ 3228
+ 3229
+ 3230
+ 3231
+ 3232
+ 3233
+ 3234
+ 3235
+ 3236
+ 3237
+ 3238
+ 3239
+ 3240
+ 3241
+ 3242
+ 3243
+ 3244
+ 3245
+ 3246
+ 3247
+ 3248
+ 3249
+ 3250
+ 3251
+ 3252
+ 3253
+ 3254
+ 3255
+ 3256
+ 3257
+ 3258
+ 3259
+ 3260
+ 3261
+ 3262
+ 3263
+ 3264
+ 3265
+ 3266
+ 3267
+ 3268
+ 3269
+ 3270
+ 3271
+ 3272
+ 3273
+ 3274
+ 3275
+ 3276
+ 3277
+ 3278
+ 3279
+ 3280
+ 3281
+ 3282
+ 3283
+ 3284
+ 3285
+ 3286
+ 3287
+ 3288
+ 3289
+ 3290
+ 3291
+ 3292
+ 3293
+ 3294
+ 3295
+ 3296
+ 3297
+ 3298
+ 3299
+ 3300
+ 3301
+ 3302
+ 3303
+ 3304
+ 3305
+ 3306
+ 3307
+ 3308
+ 3309
+ 3310
+ 3311
+ 3312
+ 3313
+ 3314
+ 3315
+ 3316
+ 3317
+ 3318
+ 3319
+ 3320
+ 3321
+ 3322
+ 3323
+ 3324
+ 3325
+ 3326
+ 3327
+ 3328
+ 3329
+ 3330
+ 3331
+ 3332
+ 3333
+ 3334
+ 3335
+ 3336
+ 3337
+ 3338
+ 3339
+ 3340
+ 3341
+ 3342
+ 3343
+ 3344
+ 3345
+ 3346
+ 3347
+ 3348
+ 3349
+ 3350
+ 3351
+ 3352
+ 3353
+ 3354
+ 3355
+ 3356
+ 3357
+ 3358
+ 3359
+ 3360
+ 3361
+ 3362
+ 3363
+ 3364
+ 3365
+ 3366
+ 3367
+ 3368
+ 3369
+ 3370
+ 3371
+ 3372
+ 3373
+ 3374
+ 3375
+ 3376
+ 3377
+ 3378
+ 3379
+ 3380
+ 3381
+ 3382
+ 3383
+ 3384
+ 3385
+ 3386
+ 3387
+ 3388
+ 3389
+ 3390
+ 3391
+ 3392
+ 3393
+ 3394
+ 3395
+ 3396
+ 3397
+ 3398
+ 3399
+ 3400
+ 3401
+ 3402
+ 3403
+ 3404
+ 3405
+ 3406
+ 3407
+ 3408
+ 3409
+ 3410
+ 3411
+ 3412
+ 3413
+ 3414
+ 3415
+ 3416
+ 3417
+ 3418
+ 3419
+ 3420
+ 3421
+ 3422
+ 3423
+ 3424
+ 3425
+ 3426
+ 3427
+ 3428
+ 3429
+ 3430
+ 3431
+ 3432
+ 3433
+ 3434
+ 3435
+ 3436
+ 3437
+ 3438
+ 3439
+ 3440
+ 3441
+ 3442
+ 3443
+ 3444
+ 3445
+ 3446
+ 3447
+ 3448
+ 3449
+ 3450
+ 3451
+ 3452
+ 3453
+ 3454
+ 3455
+ 3456
+ 3457
+ 3458
+ 3459
+ 3460
+ 3461
+ 3462
+ 3463
+ 3464
+ 3465
+ 3466
+ 3467
+ 3468
+ 3469
+ 3470
+ 3471
+ 3472
+ 3473
+ 3474
+ 3475
+ 3476
+ 3477
+ 3478
+ 3479
+ 3480
+ 3481
+ 3482
+ 3483
+ 3484
+ 3485
+ 3486
+ 3487
+ 3488
+ 3489
+ 3490
+ 3491
+ 3492
+ 3493
+ 3494
+ 3495
+ 3496
+ 3497
+ 3498
+ 3499
+ 3500
+ 3501
+ 3502
+ 3503
+ 3504
+ 3505
+ 3506
+ 3507
+ 3508
+ 3509
+ 3510
+ 3511
+ 3512
+ 3513
+ 3514
+ 3515
+ 3516
+ 3517
+ 3518
+ 3519
+ 3520
+ 3521
+ 3522
+ 3523
+ 3524
+ 3525
+ 3526
+ 3527
+ 3528
+ 3529
+ 3530
+ 3531
+ 3532
+ 3533
+ 3534
+ 3535
+ 3536
+ 3537
+ 3538
+ 3539
+ 3540
+ 3541
+ 3542
+ 3543
+ 3544
+ 3545
+ 3546
+ 3547
+ 3548
+ 3549
+ 3550
+ 3551
+ 3552
+ 3553
+ 3554
+ 3555
+ 3556
+ 3557
+ 3558
+ 3559
+ 3560
+ 3561
+ 3562
+ 3563
+ 3564
+ 3565
+ 3566
+ 3567
+ 3568
+ 3569
+ 3570
+ 3571
+ 3572
+ 3573
+ 3574
+ 3575
+ 3576
+ 3577
+ 3578
+ 3579
+ 3580
+ 3581
+ 3582
+ 3583
+ 3584
+ 3585
+ 3586
+ 3587
+ 3588
+ 3589
+ 3590
+ 3591
+ 3592
+ 3593
+ 3594
+ 3595
+ 3596
+ 3597
+ 3598
+ 3599
+ 3600
+ 3601
+ 3602
+ 3603
+ 3604
+ 3605
+ 3606
+ 3607
+ 3608
+ 3609
+ 3610
+ 3611
+ 3612
+ 3613
+ 3614
+ 3615
+ 3616
+ 3617
+ 3618
+ 3619
+ 3620
+ 3621
+ 3622
+ 3623
+ 3624
+ 3625
+ 3626
+ 3627
+ 3628
+ 3629
+ 3630
+ 3631
+ 3632
+ 3633
+ 3634
+ 3635
+ 3636
+ 3637
+ 3638
+ 3639
+ 3640
+ 3641
+ 3642
+ 3643
+ 3644
+ 3645
+ 3646
+ 3647
+ 3648
+ 3649
+ 3650
+ 3651
+ 3652
+ 3653
+ 3654
+ 3655
+ 3656
+ 3657
+ 3658
+ 3659
+ 3660
+ 3661
+ 3662
+ 3663
+ 3664
+ 3665
+ 3666
+ 3667
+ 3668
+ 3669
+ 3670
+ 3671
+ 3672
+ 3673
+ 3674
+ 3675
+ 3676
+ 3677
+ 3678
+ 3679
+ 3680
+ 3681
+ 3682
+ 3683
+ 3684
+ 3685
+ 3686
+ 3687
+ 3688
+ 3689
+ 3690
+ 3691
+ 3692
+ 3693
+ 3694
+ 3695
+ 3696
+ 3697
+ 3698
+ 3699
+ 3700
+ 3701
+ 3702
+ 3703
+ 3704
+ 3705
+ 3706
+ 3707
+ 3708
+ 3709
+ 3710
+ 3711
+ 3712
+ 3713
+ 3714
+ 3715
+ 3716
+ 3717
+ 3718
+ 3719
+ 3720
+ 3721
+ 3722
+ 3723
+ 3724
+ 3725
+ 3726
+ 3727
+ 3728
+ 3729
+ 3730
+ 3731
+ 3732
+ 3733
+ 3734
+ 3735
+ 3736
+ 3737
+ 3738
+ 3739
+ 3740
+ 3741
+ 3742
+ 3743
+ 3744
+ 3745
+ 3746
+ 3747
+ 3748
+ 3749
+ 3750
+ 3751
+ 3752
+ 3753
+ 3754
+ 3755
+ 3756
+ 3757
+ 3758
+ 3759
+ 3760
+ 3761
+ 3762
+ 3763
+ 3764
+ 3765
+ 3766
+ 3767
+ 3768
+ 3769
+ 3770
+ 3771
+ 3772
+ 3773
+ 3774
+ 3775
+ 3776
+ 3777
+ 3778
+ 3779
+ 3780
+ 3781
+ 3782
+ 3783
+ 3784
+ 3785
+ 3786
+ 3787
+ 3788
+ 3789
+ 3790
+ 3791
+ 3792
+ 3793
+ 3794
+ 3795
+ 3796
+ 3797
+ 3798
+ 3799
+ 3800
+ 3801
+ 3802
+ 3803
+ 3804
+ 3805
+ 3806
+ 3807
+ 3808
+ 3809
+ 3810
+ 3811
+ 3812
+ 3813
+ 3814
+ 3815
+ 3816
+ 3817
+ 3818
+ 3819
+ 3820
+ 3821
+ 3822
+ 3823
+ 3824
+ 3825
+ 3826
+ 3827
+ 3828
+ 3829
+ 3830
+ 3831
+ 3832
+ 3833
+ 3834
+ 3835
+ 3836
+ 3837
+ 3838
+ 3839
+ 3840
+ 3841
+ 3842
+ 3843
+ 3844
+ 3845
+ 3846
+ 3847
+ 3848
+ 3849
+ 3850
+ 3851
+ 3852
+ 3853
+ 3854
+ 3855
+ 3856
+ 3857
+ 3858
+ 3859
+ 3860
+ 3861
+ 3862
+ 3863
+ 3864
+ 3865
+ 3866
+ 3867
+ 3868
+ 3869
+ 3870
+ 3871
+ 3872
+ 3873
+ 3874
+ 3875
+ 3876
+ 3877
+ 3878
+ 3879
+ 3880
+ 3881
+ 3882
+ 3883
+ 3884
+ 3885
+ 3886
+ 3887
+ 3888
+ 3889
+ 3890
+ 3891
+ 3892
+ 3893
+ 3894
+ 3895
+ 3896
+ 3897
+ 3898
+ 3899
+ 3900
+ 3901
+ 3902
+ 3903
+ 3904
+ 3905
+ 3906
+ 3907
+ 3908
+ 3909
+ 3910
+ 3911
+ 3912
+ 3913
+ 3914
+ 3915
+ 3916
+ 3917
+ 3918
+ 3919
+ 3920
+ 3921
+ 3922
+ 3923
+ 3924
+ 3925
+ 3926
+ 3927
+ 3928
+ 3929
+ 3930
+ 3931
+ 3932
+ 3933
+ 3934
+ 3935
+ 3936
+ 3937
+ 3938
+ 3939
+ 3940
+ 3941
+ 3942
+ 3943
+ 3944
+ 3945
+ 3946
+ 3947
+ 3948
+ 3949
+ 3950
+ 3951
+ 3952
+ 3953
+ 3954
+ 3955
+ 3956
+ 3957
+ 3958
+ 3959
+ 3960
+ 3961
+ 3962
+ 3963
+ 3964
+ 3965
+ 3966
+ 3967
+ 3968
+ 3969
+ 3970
+ 3971
+ 3972
+ 3973
+ 3974
+ 3975
+ 3976
+ 3977
+ 3978
+ 3979
+ 3980
+ 3981
+ 3982
+ 3983
+ 3984
+ 3985
+ 3986
+ 3987
+ 3988
+ 3989
+ 3990
+ 3991
+ 3992
+ 3993
+ 3994
+ 3995
+ 3996
+ 3997
+ 3998
+ 3999
+ 4000
+ 4001
+ 4002
+ 4003
+ 4004
+ 4005
+ 4006
+ 4007
+ 4008
+ 4009
+ 4010
+ 4011
+ 4012
+ 4013
+ 4014
+ 4015
+ 4016
+ 4017
+ 4018
+ 4019
+ 4020
+ 4021
+ 4022
+ 4023
+ 4024
+ 4025
+ 4026
+ 4027
+ 4028
+ 4029
+ 4030
+ 4031
+ 4032
+ 4033
+ 4034
+ 4035
+ 4036
+ 4037
+ 4038
+ 4039
+ 4040
+ 4041
+ 4042
+ 4043
+ 4044
+ 4045
+ 4046
+ 4047
+ 4048
+ 4049
+ 4050
+ 4051
+ 4052
+ 4053
+ 4054
+ 4055
+ 4056
+ 4057
+ 4058
+ 4059
+ 4060
+ 4061
+ 4062
+ 4063
+ 4064
+ 4065
+ 4066
+ 4067
+ 4068
+ 4069
+ 4070
+ 4071
+ 4072
+ 4073
+ 4074
+ 4075
+ 4076
+ 4077
+ 4078
+ 4079
+ 4080
+ 4081
+ 4082
+ 4083
+ 4084
+ 4085
+ 4086
+ 4087
+ 4088
+ 4089
+ 4090
+ 4091
+ 4092
+ 4093
+ 4094
+ 4095
+ 4096
+ 4097
+ 4098
+ 4099
+ 4100
+ 4101
+ 4102
+ 4103
+ 4104
+ 4105
+ 4106
+ 4107
+ 4108
+ 4109
+ 4110
+ 4111
+ 4112
+ 4113
+ 4114
+ 4115
+ 4116
+ 4117
+ 4118
+ 4119
+ 4120
+ 4121
+ 4122
+ 4123
+ 4124
+ 4125
+ 4126
+ 4127
+ 4128
+ 4129
+ 4130
+ 4131
+ 4132
+ 4133
+ 4134
+ 4135
+ 4136
+ 4137
+ 4138
+ 4139
+ 4140
+ 4141
+ 4142
+ 4143
+ 4144
+ 4145
+ 4146
+ 4147
+ 4148
+ 4149
+ 4150
+ 4151
+ 4152
+ 4153
+ 4154
+ 4155
+ 4156
+ 4157
+ 4158
+ 4159
+ 4160
+ 4161
+ 4162
+ 4163
+ 4164
+ 4165
+ 4166
+ 4167
+ 4168
+ 4169
+ 4170
+ 4171
+ 4172
+ 4173
+ 4174
+ 4175
+ 4176
+ 4177
+ 4178
+ 4179
+ 4180
+ 4181
+ 4182
+ 4183
+ 4184
+ 4185
+ 4186
+ 4187
+ 4188
+ 4189
+ 4190
+ 4191
+ 4192
+ 4193
+ 4194
+ 4195
+ 4196
+ 4197
+ 4198
+ 4199
+ 4200
+ 4201
+ 4202
+ 4203
+ 4204
+ 4205
+ 4206
+ 4207
+ 4208
+ 4209
+ 4210
+ 4211
+ 4212
+ 4213
+ 4214
+ 4215
+ 4216
+ 4217
+ 4218
+ 4219
+ 4220
+ 4221
+ 4222
+ 4223
+ 4224
+ 4225
+ 4226
+ 4227
+ 4228
+ 4229
+ 4230
+ 4231
+ 4232
+ 4233
+ 4234
+ 4235
+ 4236
+ 4237
+ 4238
+ 4239
+ 4240
+ 4241
+ 4242
+ 4243
+ 4244
+ 4245
+ 4246
+ 4247
+ 4248
+ 4249
+ 4250
+ 4251
+ 4252
+ 4253
+ 4254
+ 4255
+ 4256
+ 4257
+ 4258
+ 4259
+ 4260
+ 4261
+ 4262
+ 4263
+ 4264
+ 4265
+ 4266
+ 4267
+ 4268
+ 4269
+ 4270
+ 4271
+ 4272
+ 4273
+ 4274
+ 4275
+ 4276
+ 4277
+ 4278
+ 4279
+ 4280
+ 4281
+ 4282
+ 4283
+ 4284
+ 4285
+ 4286
+ 4287
+ 4288
+ 4289
+ 4290
+ 4291
+ 4292
+ 4293
+ 4294
+ 4295
+ 4296
+ 4297
+ 4298
+ 4299
+ 4300
+ 4301
+ 4302
+ 4303
+ 4304
+ 4305
+ 4306
+ 4307
+ 4308
+ 4309
+ 4310
+ 4311
+ 4312
+ 4313
+ 4314
+ 4315
+ 4316
+ 4317
+ 4318
+ 4319
+ 4320
+ 4321
+ 4322
+ 4323
+ 4324
+ 4325
+ 4326
+ 4327
+ 4328
+ 4329
+ 4330
+ 4331
+ 4332
+ 4333
+ 4334
+ 4335
+ 4336
+ 4337
+ 4338
+ 4339
+ 4340
+ 4341
+ 4342
+ 4343
+ 4344
+ 4345
+ 4346
+ 4347
+ 4348
+ 4349
+ 4350
+ 4351
+ 4352
+ 4353
+ 4354
+ 4355
+ 4356
+ 4357
+ 4358
+ 4359
+ 4360
+ 4361
+ 4362
+ 4363
+ 4364
+ 4365
+ 4366
+ 4367
+ 4368
+ 4369
+ 4370
+ 4371
+ 4372
+ 4373
+ 4374
+ 4375
+ 4376
+ 4377
+ 4378
+ 4379
+ 4380
+ 4381
+ 4382
+ 4383
+ 4384
+ 4385
+ 4386
+ 4387
+ 4388
+ 4389
+ 4390
+ 4391
+ 4392
+ 4393
+ 4394
+ 4395
+ 4396
+ 4397
+ 4398
+ 4399
+ 4400
+ 4401
+ 4402
+ 4403
+ 4404
+ 4405
+ 4406
+ 4407
+ 4408
+ 4409
+ 4410
+ 4411
+ 4412
+ 4413
+ 4414
+ 4415
+ 4416
+ 4417
+ 4418
+ 4419
+ 4420
+ 4421
+ 4422
+ 4423
+ 4424
+ 4425
+ 4426
+ 4427
+ 4428
+ 4429
+ 4430
+ 4431
+ 4432
+ 4433
+ 4434
+ 4435
+ 4436
+ 4437
+ 4438
+ 4439
+ 4440
+ 4441
+ 4442
+ 4443
+ 4444
+ 4445
+ 4446
+ 4447
+ 4448
+ 4449
+ 4450
+ 4451
+ 4452
+ 4453
+ 4454
+ 4455
+ 4456
+ 4457
+ 4458
+ 4459
+ 4460
+ 4461
+ 4462
+ 4463
+ 4464
+ 4465
+ 4466
+ 4467
+ 4468
+ 4469
+ 4470
+ 4471
+ 4472
+ 4473
+ 4474
+ 4475
+ 4476
+ 4477
+ 4478
+ 4479
+ 4480
+ 4481
+ 4482
+ 4483
+ 4484
+ 4485
+ 4486
+ 4487
+ 4488
+ 4489
+ 4490
+ 4491
+ 4492
+ 4493
+ 4494
+ 4495
+ 4496
+ 4497
+ 4498
+ 4499
+ 4500
============================================================
--- harness/sources/templates_parser/regtests/tests/0037_testme/test.out 5d14fd457e3e5ddc973203a382c04480cdac8936
+++ harness/sources/templates_parser/regtests/tests/0037_testme/test.out 5d14fd457e3e5ddc973203a382c04480cdac8936
@@ -0,0 +1,14 @@
+
+Test MATCH() routine.
+
+TRUE = TRUE
+TRUE = TRUE
+
+TRUE = TRUE
+TRUE = TRUE
+
+TRUE = TRUE
+TRUE = TRUE
+
+FALSE = FALSE
+FALSE = FALSE
============================================================
--- harness/sources/templates_parser/regtests/tests/0037_testme/test.py abcac6c73b3213d73c1df6742a566797b20756b7
+++ harness/sources/templates_parser/regtests/tests/0037_testme/test.py abcac6c73b3213d73c1df6742a566797b20756b7
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme29.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0037_testme/testme29.tmplt 8250b4652f42dddc3c643b39c754c086ef5c5e1f
+++ harness/sources/templates_parser/regtests/tests/0037_testme/testme29.tmplt 8250b4652f42dddc3c643b39c754c086ef5c5e1f
@@ -0,0 +1,14 @@
+
+Test MATCH() routine.
+
+TRUE = @_MATCH(.*words.*):FILTER_@
+TRUE = @_MATCH(".*words.*"):FILTER_@
+
+TRUE = @_MATCH(.* words.*):FILTER_@
+TRUE = @_MATCH(".* words.*"):FILTER_@
+
+TRUE = @_MATCH( a.*):FILTER_@
+TRUE = @_MATCH(" a.*"):FILTER_@
+
+FALSE = @_MATCH(.* words.*):FILTER_@
+FALSE = @_MATCH(".* words.*"):FILTER_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0038_testme/test.out 878fa633419693955a24aed0a39ffe628996f1c0
+++ harness/sources/templates_parser/regtests/tests/0038_testme/test.out 878fa633419693955a24aed0a39ffe628996f1c0
@@ -0,0 +1,10 @@
+
+Test for the vector tag prepend
+3, 2, 1
+
+In a table:
+
+3
+2
+1
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0038_testme/test.py e01eacf0726b96d45d202c233cc9d5f631d08dd6
+++ harness/sources/templates_parser/regtests/tests/0038_testme/test.py e01eacf0726b96d45d202c233cc9d5f631d08dd6
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme33.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0038_testme/testme33.tmplt 904da96890310bf6db2f06a581524cd93dbbd197
+++ harness/sources/templates_parser/regtests/tests/0038_testme/testme33.tmplt 904da96890310bf6db2f06a581524cd93dbbd197
@@ -0,0 +1,9 @@
+
+Test for the vector tag prepend
+@_INV_@
+
+In a table:
+
+@@TABLE@@
+@_INV_@
+@@END_TABLE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0039_testme/test.out b4fb084ff1701fb600b561b3e5c984e042b6f8fc
+++ harness/sources/templates_parser/regtests/tests/0039_testme/test.out b4fb084ff1701fb600b561b3e5c984e042b6f8fc
@@ -0,0 +1,14 @@
+
+Try negative numbers:
+
+1) -3
+2) -3
+
+Try filters with tag arguments:
+
+Plus : 6
+Minus : -4
+Multiply : 6
+Divide : 1
+
+Replace : [_ a text with < _]
============================================================
--- harness/sources/templates_parser/regtests/tests/0039_testme/test.py 23317324674ec18cdb800c9cd0666dc50a29e423
+++ harness/sources/templates_parser/regtests/tests/0039_testme/test.py 23317324674ec18cdb800c9cd0666dc50a29e423
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme34.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0039_testme/testme34.tmplt 4b1ffd14952a132cab0501bd18951f60b29c6624
+++ harness/sources/templates_parser/regtests/tests/0039_testme/testme34.tmplt 4b1ffd14952a132cab0501bd18951f60b29c6624
@@ -0,0 +1,14 @@
+
+Try negative numbers:
+
+1) @_"-"(4):ONE_@
+2) @_"+"(-4):ONE_@
+
+Try filters with tag arguments:
+
+Plus : @_"+"(THREE):"+"(TWO):ONE_@
+Minus : @_"-"(THREE):"-"(TWO):ONE_@
+Multiply : @_"*"(THREE):"*"(TWO):ONE_@
+Divide : @_"/"(TWO):"-"(ONE):THREE_@
+
+Replace : @_REPLACE(([^6]*).*/REPL):FILTER_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0040_testme/test.out f003ff073883973dce4fe784417c8ef785271c58
+++ harness/sources/templates_parser/regtests/tests/0040_testme/test.out f003ff073883973dce4fe784417c8ef785271c58
@@ -0,0 +1,6 @@
+
+Some dates formatted:
+
+1967-09-09
+2003-12-12
+Friday December 12 2003, 13:34:12
============================================================
--- harness/sources/templates_parser/regtests/tests/0040_testme/test.py 5841c0e1512437e72660bab4fed1323c0b5358dd
+++ harness/sources/templates_parser/regtests/tests/0040_testme/test.py 5841c0e1512437e72660bab4fed1323c0b5358dd
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme35.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0040_testme/testme35.tmplt ff5a07ec9d1b6b99a3ab0d122ba7a0bb062bf6bd
+++ harness/sources/templates_parser/regtests/tests/0040_testme/testme35.tmplt ff5a07ec9d1b6b99a3ab0d122ba7a0bb062bf6bd
@@ -0,0 +1,6 @@
+
+Some dates formatted:
+
+@_FORMAT_DATE(%Y-%m-%d):DATE1_@
+@_FORMAT_DATE(%Y-%m-%d):DATE2_@
+@_FORMAT_DATE(%A %B %d %Y, %T):DATE2_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0041_testme/test.out 5875429d68e0d7721efea19916dd70069ef6e9bc
+++ harness/sources/templates_parser/regtests/tests/0041_testme/test.out 5875429d68e0d7721efea19916dd70069ef6e9bc
@@ -0,0 +1,85 @@
+
+Add "toto=titi"
+
+http://host:port/ => http://host:port/?toto=titi
+http://host/ => http://host/?toto=titi
+http://host/? => http://host/?toto=titi
+http://host/?param1=un => http://host/?param1=un&toto=titi
+http://host:port/?param1=un¶m2=deux => http://host:port/?param1=un¶m2=deux&toto=titi
+http://host?param1=un¶m2=deux¶m3=trois => http://host?param1=un¶m2=deux¶m3=trois&toto=titi
+
+Del "param1"
+
+http://host:port/ => http://host:port/
+http://host/ => http://host/
+http://host/? => http://host/?
+http://host/?param1=un => http://host/
+http://host:port/?param1=un¶m2=deux => http://host:port/?param2=deux
+http://host?param1=un¶m2=deux¶m3=trois => http://host?param2=deux¶m3=trois
+
+Del "param2"
+
+http://host:port/ => http://host:port/
+http://host/ => http://host/
+http://host/? => http://host/?
+http://host/?param1=un => http://host/?param1=un
+http://host:port/?param1=un¶m2=deux => http://host:port/?param1=un
+http://host?param1=un¶m2=deux¶m3=trois => http://host?param1=un¶m3=trois
+
+Del "param3"
+
+http://host:port/ => http://host:port/
+http://host/ => http://host/
+http://host/? => http://host/?
+http://host/?param1=un => http://host/?param1=un
+http://host:port/?param1=un¶m2=deux => http://host:port/?param1=un¶m2=deux
+http://host?param1=un¶m2=deux¶m3=trois => http://host?param1=un¶m2=deux
+
+Replace "param1"
+
+http://host:port/ => http://host:port/?param1=one
+http://host/ => http://host/?param1=one
+http://host/? => http://host/?param1=one
+http://host/?param1=un => http://host/?param1=one
+http://host:port/?param1=un¶m2=deux => http://host:port/?param2=deux¶m1=one
+http://host?param1=un¶m2=deux¶m3=trois => http://host?param2=deux¶m3=trois¶m1=one
+
+Replace "param2"
+
+http://host:port/ => http://host:port/?param2=two
+http://host/ => http://host/?param2=two
+http://host/? => http://host/?param2=two
+http://host/?param1=un => http://host/?param1=un¶m2=two
+http://host:port/?param1=un¶m2=deux => http://host:port/?param1=un¶m2=two
+http://host?param1=un¶m2=deux¶m3=trois => http://host?param1=un¶m3=trois¶m2=two
+
+Replace "param3"
+
+http://host:port/ => http://host:port/?param3=3
+http://host/ => http://host/?param3=3
+http://host/? => http://host/?param3=3
+http://host/?param1=un => http://host/?param1=un¶m3=3
+http://host:port/?param1=un¶m2=deux => http://host:port/?param1=un¶m2=deux¶m3=3
+http://host?param1=un¶m2=deux¶m3=trois => http://host?param1=un¶m2=deux¶m3=3
+
+Replace "param3"
+
+http://host:port/ => http://host:port/?param3=3
+http://host/ => http://host/?param3=3
+http://host/? => http://host/?param3=3
+http://host/?param1=un => http://host/?param1=un¶m3=3
+http://host:port/?param1=un¶m2=deux => http://host:port/?param1=un¶m2=deux¶m3=3
+http://host?param1=un¶m2=deux¶m3=trois => http://host?param1=un¶m2=deux¶m3=3
+
+Delete param not existing
+
+http://host?param1=un¶m2=deux¶m3=trois => http://host?param1=un¶m2=deux¶m3=trois
+http://host?param1=un¶m2=deux¶m3=trois => http://host?param1=un¶m2=deux¶m3=trois
+
+Add using a tag
+
+http://host?param1=un¶m2=deux¶m3=trois => http://host?param1=un¶m2=deux¶m3=trois¶m3=123.9
+
+Replace using a tag
+
+http://host?param1=un¶m2=deux¶m3=trois => http://host?param1=un¶m2=deux¶m3=123.9
============================================================
--- harness/sources/templates_parser/regtests/tests/0041_testme/test.py fc3be17bea410bbf987f21e533be703f4d0c98c6
+++ harness/sources/templates_parser/regtests/tests/0041_testme/test.py fc3be17bea410bbf987f21e533be703f4d0c98c6
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme36.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0041_testme/testme36.tmplt 1816f33aabb1db3485ea1e6a295c704aea163967
+++ harness/sources/templates_parser/regtests/tests/0041_testme/testme36.tmplt 1816f33aabb1db3485ea1e6a295c704aea163967
@@ -0,0 +1,85 @@
+
+Add "toto=titi"
+
+@_URL1_@ => @_ADD_PARAM(toto=titi):URL1_@
+@_URL2_@ => @_ADD_PARAM(toto=titi):URL2_@
+@_URL3_@ => @_ADD_PARAM(toto=titi):URL3_@
+@_URL4_@ => @_ADD_PARAM(toto=titi):URL4_@
+@_URL5_@ => @_ADD_PARAM(toto=titi):URL5_@
+@_URL6_@ => @_ADD_PARAM(toto=titi):URL6_@
+
+Del "param1"
+
+@_URL1_@ => @_DEL_PARAM(param1):URL1_@
+@_URL2_@ => @_DEL_PARAM(param1):URL2_@
+@_URL3_@ => @_DEL_PARAM(param1):URL3_@
+@_URL4_@ => @_DEL_PARAM(param1):URL4_@
+@_URL5_@ => @_DEL_PARAM(param1):URL5_@
+@_URL6_@ => @_DEL_PARAM(param1):URL6_@
+
+Del "param2"
+
+@_URL1_@ => @_DEL_PARAM(param2):URL1_@
+@_URL2_@ => @_DEL_PARAM(param2):URL2_@
+@_URL3_@ => @_DEL_PARAM(param2):URL3_@
+@_URL4_@ => @_DEL_PARAM(param2):URL4_@
+@_URL5_@ => @_DEL_PARAM(param2):URL5_@
+@_URL6_@ => @_DEL_PARAM(param2):URL6_@
+
+Del "param3"
+
+@_URL1_@ => @_DEL_PARAM(param3):URL1_@
+@_URL2_@ => @_DEL_PARAM(param3):URL2_@
+@_URL3_@ => @_DEL_PARAM(param3):URL3_@
+@_URL4_@ => @_DEL_PARAM(param3):URL4_@
+@_URL5_@ => @_DEL_PARAM(param3):URL5_@
+@_URL6_@ => @_DEL_PARAM(param3):URL6_@
+
+Replace "param1"
+
+@_URL1_@ => @_ADD_PARAM(param1=one):DEL_PARAM(param1):URL1_@
+@_URL2_@ => @_ADD_PARAM(param1=one):DEL_PARAM(param1):URL2_@
+@_URL3_@ => @_ADD_PARAM(param1=one):DEL_PARAM(param1):URL3_@
+@_URL4_@ => @_ADD_PARAM(param1=one):DEL_PARAM(param1):URL4_@
+@_URL5_@ => @_ADD_PARAM(param1=one):DEL_PARAM(param1):URL5_@
+@_URL6_@ => @_ADD_PARAM(param1=one):DEL_PARAM(param1):URL6_@
+
+Replace "param2"
+
+@_URL1_@ => @_ADD_PARAM(param2=two):DEL_PARAM(param2):URL1_@
+@_URL2_@ => @_ADD_PARAM(param2=two):DEL_PARAM(param2):URL2_@
+@_URL3_@ => @_ADD_PARAM(param2=two):DEL_PARAM(param2):URL3_@
+@_URL4_@ => @_ADD_PARAM(param2=two):DEL_PARAM(param2):URL4_@
+@_URL5_@ => @_ADD_PARAM(param2=two):DEL_PARAM(param2):URL5_@
+@_URL6_@ => @_ADD_PARAM(param2=two):DEL_PARAM(param2):URL6_@
+
+Replace "param3"
+
+@_URL1_@ => @_ADD_PARAM(param3=3):DEL_PARAM(param3):URL1_@
+@_URL2_@ => @_ADD_PARAM(param3=3):DEL_PARAM(param3):URL2_@
+@_URL3_@ => @_ADD_PARAM(param3=3):DEL_PARAM(param3):URL3_@
+@_URL4_@ => @_ADD_PARAM(param3=3):DEL_PARAM(param3):URL4_@
+@_URL5_@ => @_ADD_PARAM(param3=3):DEL_PARAM(param3):URL5_@
+@_URL6_@ => @_ADD_PARAM(param3=3):DEL_PARAM(param3):URL6_@
+
+Replace "param3"
+
+@_URL1_@ => @_REPLACE_PARAM(param3=3):URL1_@
+@_URL2_@ => @_REPLACE_PARAM(param3=3):URL2_@
+@_URL3_@ => @_REPLACE_PARAM(param3=3):URL3_@
+@_URL4_@ => @_REPLACE_PARAM(param3=3):URL4_@
+@_URL5_@ => @_REPLACE_PARAM(param3=3):URL5_@
+@_URL6_@ => @_REPLACE_PARAM(param3=3):URL6_@
+
+Delete param not existing
+
+@_URL6_@ => @_DEL_PARAM(param):URL6_@
+@_URL6_@ => @_DEL_PARAM(toto):URL6_@
+
+Add using a tag
+
+@_URL6_@ => @_ADD_PARAM(param3=NUM3):URL6_@
+
+Replace using a tag
+
+@_URL6_@ => @_REPLACE_PARAM(param3=NUM3):URL6_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0042_testme/test.out 56d89fa2a62de7e9e29d09822a7fbb8870af1a27
+++ harness/sources/templates_parser/regtests/tests/0042_testme/test.out 56d89fa2a62de7e9e29d09822a7fbb8870af1a27
@@ -0,0 +1,15 @@
+
+>1
+test
+ok
+test
+<1
+
+>2
+ok
+<2
+
+>3
+ok
+ok
+<3
============================================================
--- harness/sources/templates_parser/regtests/tests/0042_testme/test.py 9abd6528c63fccf0602e24bed6d7218df18d23f2
+++ harness/sources/templates_parser/regtests/tests/0042_testme/test.py 9abd6528c63fccf0602e24bed6d7218df18d23f2
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme37.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0042_testme/testme37.tmplt b4b6fdc1e1dc25804778006d6d7c65c12348192a
+++ harness/sources/templates_parser/regtests/tests/0042_testme/testme37.tmplt b4b6fdc1e1dc25804778006d6d7c65c12348192a
@@ -0,0 +1,26 @@
+
+>1
+@@TABLE@@
+@@IF@@ @_V5_@ = two
+ok
+@@ELSE@@
+test
+@@END_IF@@
+@@END_TABLE@@
+<1
+
+>2
+@@TABLE@@
+@@IF@@ @_V5_@ = two
+ok
+@@END_IF@@
+@@END_TABLE@@
+<2
+
+>3
+@@TABLE@@
+@@IF@@ @_V5_@ /= two
+ok
+@@END_IF@@
+@@END_TABLE@@
+<3
============================================================
--- harness/sources/templates_parser/regtests/tests/0043_testme/test.out 10f6f31bcada7e47c781ec00c75231708dc3495d
+++ harness/sources/templates_parser/regtests/tests/0043_testme/test.out 10f6f31bcada7e47c781ec00c75231708dc3495d
@@ -0,0 +1,119 @@
+
+*** Nested 3 level outside TABLE
+
+A1.1, A1.2, A1.3
+A2.1, A2.2, A2.3
+A3.1, A3.2, A3.3
+A4.1, A4.2, A4.3
+B1.1, B1.2, B1.3
+B2.1, B2.2, B2.3
+B3.1, B3.2, B3.3
+B4.1, B4.2, B4.3
+
+*** Nested 3 level into TABLE level 1
+
+0, 1
+A1.1, A1.2, A1.3
+A2.1, A2.2, A2.3
+A3.1, A3.2, A3.3
+A4.1, A4.2, A4.3
+0, 2
+B1.1, B1.2, B1.3
+B2.1, B2.2, B2.3
+B3.1, B3.2, B3.3
+B4.1, B4.2, B4.3
+
+*** Nested 3 level into TABLE level 2
+
+[ 1
+ 1, 1
+ A1.1, A1.2, A1.3
+ 1, 2
+ A2.1, A2.2, A2.3
+ 1, 3
+ A3.1, A3.2, A3.3
+ 1, 4
+ A4.1, A4.2, A4.3
+]
+[ 2
+ 2, 1
+ B1.1, B1.2, B1.3
+ 2, 2
+ B2.1, B2.2, B2.3
+ 2, 3
+ B3.1, B3.2, B3.3
+ 2, 4
+ B4.1, B4.2, B4.3
+]
+
+*** Nested 3 level into TABLE level 3
+
+<
+ [
+ 1, 1
+ A1.1
+ 1, 2
+ A1.2
+ 1, 3
+ A1.3
+ ]
+ [
+ 2, 1
+ A2.1
+ 2, 2
+ A2.2
+ 2, 3
+ A2.3
+ ]
+ [
+ 3, 1
+ A3.1
+ 3, 2
+ A3.2
+ 3, 3
+ A3.3
+ ]
+ [
+ 4, 1
+ A4.1
+ 4, 2
+ A4.2
+ 4, 3
+ A4.3
+ ]
+>
+<
+ [
+ 1, 1
+ B1.1
+ 1, 2
+ B1.2
+ 1, 3
+ B1.3
+ ]
+ [
+ 2, 1
+ B2.1
+ 2, 2
+ B2.2
+ 2, 3
+ B2.3
+ ]
+ [
+ 3, 1
+ B3.1
+ 3, 2
+ B3.2
+ 3, 3
+ B3.3
+ ]
+ [
+ 4, 1
+ B4.1
+ 4, 2
+ B4.2
+ 4, 3
+ B4.3
+ ]
+>
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0043_testme/test.py 34e36ab0a964f0ac82b2e4e51f20e38972c8b8fd
+++ harness/sources/templates_parser/regtests/tests/0043_testme/test.py 34e36ab0a964f0ac82b2e4e51f20e38972c8b8fd
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme39.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0043_testme/testme39.tmplt 3f2d245922e5447e231fb89d33c8911a1b45fa73
+++ harness/sources/templates_parser/regtests/tests/0043_testme/testme39.tmplt 3f2d245922e5447e231fb89d33c8911a1b45fa73
@@ -0,0 +1,37 @@
+
+*** Nested 3 level outside TABLE
+
+@_NESTED_3_@
+
+*** Nested 3 level into TABLE level 1
+
+@@TABLE@@
+@_UP_TABLE_LINE_@, @_TABLE_LINE_@
+@_NESTED_3_@
+@@END_TABLE@@
+
+*** Nested 3 level into TABLE level 2
+
+@@TABLE@@
+[ @_TABLE_LINE_@
+@@TABLE@@
+ @_UP_TABLE_LINE_@, @_TABLE_LINE_@
+ @_NESTED_3_@
+@@END_TABLE@@
+]
+@@END_TABLE@@
+
+*** Nested 3 level into TABLE level 3
+
+@@TABLE@@
+<
+@@TABLE@@
+ [
+@@TABLE@@
+ @_UP_TABLE_LINE_@, @_TABLE_LINE_@
+ @_NESTED_3_@
+@@END_TABLE@@
+ ]
+@@END_TABLE@@
+>
+@@END_TABLE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0044_testme/include2.tmplt 5e4e1b64e0794edc556413a012934d0df3e56474
+++ harness/sources/templates_parser/regtests/tests/0044_testme/include2.tmplt 5e4e1b64e0794edc556413a012934d0df3e56474
@@ -0,0 +1,19 @@
+
+@@-- Include file
+@_$0_@
+
+1> @_$1_@
+
+2> @_$2'Length_@
+
+3> @_$3'Line_@
+
+4> @_$3'Min_Column_@
+
+5> @_$3'Max_Column_@
+
+@@IF@@ @_$2'Length_@ > 1
+ok
+@@ELSE@@
+nok
+@@END_IF@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0044_testme/test.out 850a2065b02af330ccdc1a8345f7fceabcd2d0a8
+++ harness/sources/templates_parser/regtests/tests/0044_testme/test.out 850a2065b02af330ccdc1a8345f7fceabcd2d0a8
@@ -0,0 +1,16 @@
+
+
+include2.tmplt
+
+1>
+
+2> two
+
+3>
+
+4>
+
+5>
+
+ok
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0044_testme/test.py d7e6c2a31f02d7e6a57c12f09f326e1d89a48623
+++ harness/sources/templates_parser/regtests/tests/0044_testme/test.py d7e6c2a31f02d7e6a57c12f09f326e1d89a48623
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme40.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0044_testme/testme40.tmplt 5776dd76bd022b596f1834d14c15da3957db188e
+++ harness/sources/templates_parser/regtests/tests/0044_testme/testme40.tmplt 5776dd76bd022b596f1834d14c15da3957db188e
@@ -0,0 +1,2 @@
+
+@@INCLUDE@@ include2.tmplt "" "two"
============================================================
--- harness/sources/templates_parser/regtests/tests/0045_testme/test.out d5a0a8ecc896e853d8c439b6e0924837355af444
+++ harness/sources/templates_parser/regtests/tests/0045_testme/test.out d5a0a8ecc896e853d8c439b6e0924837355af444
@@ -0,0 +1,21 @@
+
+a value
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+This is a dynamic tag
+
+
+
+Dynamic vector:
+
+12
+89
+90
+2
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0045_testme/test.py 8932e9be126af299e5406c2c05888b65aee7bdeb
+++ harness/sources/templates_parser/regtests/tests/0045_testme/test.py 8932e9be126af299e5406c2c05888b65aee7bdeb
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme41.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0045_testme/testme41.tmplt b19a12ab935f20f4e32b978b41157f94eb578b43
+++ harness/sources/templates_parser/regtests/tests/0045_testme/testme41.tmplt b19a12ab935f20f4e32b978b41157f94eb578b43
@@ -0,0 +1,19 @@
+
+@_VAR1_@
+
+@_N_@
+@_N_@
+@_N_@
+@_N_@
+@_N_@
+@_N_@
+
+@_DYNAMIC_@
+
+@_X_@
+
+Dynamic vector:
+
+@@TABLE@@
+@_DYN_VECT_@
+@@END_TABLE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0046_testme/test.out a5dc2c0e1036740c740dc8d93e4802b89128533f
+++ harness/sources/templates_parser/regtests/tests/0046_testme/test.out a5dc2c0e1036740c740dc8d93e4802b89128533f
@@ -0,0 +1,2 @@
+
+Should be "0" = "0"
============================================================
--- harness/sources/templates_parser/regtests/tests/0046_testme/test.py e3ebab900f534ac1fd7b71fed962ecf029e2ecaa
+++ harness/sources/templates_parser/regtests/tests/0046_testme/test.py e3ebab900f534ac1fd7b71fed962ecf029e2ecaa
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme42.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0046_testme/testme42.tmplt 98aca1d8672b8142d16f13c0723b8d13f1c8912b
+++ harness/sources/templates_parser/regtests/tests/0046_testme/testme42.tmplt 98aca1d8672b8142d16f13c0723b8d13f1c8912b
@@ -0,0 +1,2 @@
+
+Should be "0" = "@_SIZE0'Length_@"
============================================================
--- harness/sources/templates_parser/regtests/tests/0047_testme/test.out c24f8b4776101e5d7d0044c9c9bcf82027af75e0
+++ harness/sources/templates_parser/regtests/tests/0047_testme/test.out c24f8b4776101e5d7d0044c9c9bcf82027af75e0
@@ -0,0 +1,5 @@
+
+OK
+
+OK
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0047_testme/test.py eb2b884c5ae527f894f695598f936c50557032ef
+++ harness/sources/templates_parser/regtests/tests/0047_testme/test.py eb2b884c5ae527f894f695598f936c50557032ef
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme43.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0047_testme/testme43.tmplt cc91e10e54622913a0aefbc9b5de20c28ab47f36
+++ harness/sources/templates_parser/regtests/tests/0047_testme/testme43.tmplt cc91e10e54622913a0aefbc9b5de20c28ab47f36
@@ -0,0 +1,12 @@
+
+@@IF@@ @_FILE_@ = /home/user
+OK
+@@ELSE@@
+NOK
+@@END_IF@@
+
+@@IF@@ @_"/"(2):TWO_@ = 1
+OK
+@@ELSE@@
+NOK
+@@END_IF@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0048_testme/include3.tmplt e42f37f8869c5c676a84ca5360ef6db0fc5b6e01
+++ harness/sources/templates_parser/regtests/tests/0048_testme/include3.tmplt e42f37f8869c5c676a84ca5360ef6db0fc5b6e01
@@ -0,0 +1,4 @@
+
+@_$0_@
+@_"+"(5):$1_@
+@_$2_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0048_testme/test.out ccea0c0a83476e4c98e37b791f2c35906ed73608
+++ harness/sources/templates_parser/regtests/tests/0048_testme/test.out ccea0c0a83476e4c98e37b791f2c35906ed73608
@@ -0,0 +1,6 @@
+
+
+include3.tmplt
+10
+
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0048_testme/test.py 92481175e86e74d87605e1369269bb573753682b
+++ harness/sources/templates_parser/regtests/tests/0048_testme/test.py 92481175e86e74d87605e1369269bb573753682b
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme44.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0048_testme/testme44.tmplt fa7a68bd8fad3ac0253525555b05029f3feaee12
+++ harness/sources/templates_parser/regtests/tests/0048_testme/testme44.tmplt fa7a68bd8fad3ac0253525555b05029f3feaee12
@@ -0,0 +1,2 @@
+
+@@INCLUDE@@ include3.tmplt 5
============================================================
--- harness/sources/templates_parser/regtests/tests/0049_testme/test.out 80e7e93bbf11a316d6a36b708f856b3fee727685
+++ harness/sources/templates_parser/regtests/tests/0049_testme/test.out 80e7e93bbf11a316d6a36b708f856b3fee727685
@@ -0,0 +1,53 @@
+
+Test include parameters in filters:
+
+With 2 and 4
+
+
+4 + 2 = 6
+
+4 - 2 = 2
+
+4 / 2 = 2
+
+4 * 2 = 8
+
+TestTestTestTest
+
+With 80 and 8
+
+
+8 + 80 = 88
+
+8 - 80 = -72
+
+8 / 80 = 0
+
+8 * 80 = 640
+
+TestTestTestTestTestTestTestTest
+
+With @ _TWO_ @ and @ _THREE_ @
+
+
+3 + 2 = 5
+
+3 - 2 = 1
+
+3 / 2 = 1
+
+3 * 2 = 6
+
+TestTestTest
+
+
+3 + 4 = 7
+
+3 - 4 = -1
+
+3 / 4 = 0
+
+3 * 4 = 12
+
+TestTestTest
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0049_testme/test.py 7b6f94c098d93f22256acbb7f10cd47de4898802
+++ harness/sources/templates_parser/regtests/tests/0049_testme/test.py 7b6f94c098d93f22256acbb7f10cd47de4898802
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme45.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0049_testme/testme45.incl 0b5a669f6e08a0a2366ca5b260dee798ed1f7545
+++ harness/sources/templates_parser/regtests/tests/0049_testme/testme45.incl 0b5a669f6e08a0a2366ca5b260dee798ed1f7545
@@ -0,0 +1,10 @@
+
+@_$2_@ + @_$1_@ = @_"+"($1):$2_@
+
+@_$2_@ - @_$1_@ = @_"-"($1):$2_@
+
+@_$2_@ / @_$1_@ = @_"/"($1):$2_@
+
+@_$2_@ * @_$1_@ = @_"*"($1):$2_@
+
+@_REPEAT($2):TEST_VAR_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0049_testme/testme45.tmplt f1141c784c04e01553890f0a2cb817f9ea4abae6
+++ harness/sources/templates_parser/regtests/tests/0049_testme/testme45.tmplt f1141c784c04e01553890f0a2cb817f9ea4abae6
@@ -0,0 +1,16 @@
+
+Test include parameters in filters:
+
+With 2 and 4
+
+@@INCLUDE@@ testme45.incl 2 4
+
+With 80 and 8
+
+@@INCLUDE@@ testme45.incl 80 8
+
+With @ _TWO_ @ and @ _THREE_ @
+
+@@INCLUDE@@ testme45.incl @_TWO_@ @_THREE_@
+
+@@INCLUDE@@ testme45.incl @_LABELS'Length_@ 3
============================================================
--- harness/sources/templates_parser/regtests/tests/0050_testme/test.out ed4be12dbb0c51b9f162eaf60060e66ce2c6f5c4
+++ harness/sources/templates_parser/regtests/tests/0050_testme/test.out ed4be12dbb0c51b9f162eaf60060e66ce2c6f5c4
@@ -0,0 +1,3 @@
+
+1: 1 -1 1
+2: 1 1 1
============================================================
--- harness/sources/templates_parser/regtests/tests/0050_testme/test.py feae85870fbf26f766b19972b2bcc5d702a7d7bf
+++ harness/sources/templates_parser/regtests/tests/0050_testme/test.py feae85870fbf26f766b19972b2bcc5d702a7d7bf
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme46.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0050_testme/testme46.tmplt 2e3c845627eeb2abb28c4d213dea8f0b47156a14
+++ harness/sources/templates_parser/regtests/tests/0050_testme/testme46.tmplt 2e3c845627eeb2abb28c4d213dea8f0b47156a14
@@ -0,0 +1,3 @@
+
+1: @_ONE_@ @_NEG:ONE_@ @_NEG:NEG:ONE_@
+2: @_ONE_@ @_ABS:NEG:ONE_@ @_ABS:NEG:NEG:ONE_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0051_testme/include_simple.incl 4370ab392f4dd0793322f008868e1a0792e26d4e
+++ harness/sources/templates_parser/regtests/tests/0051_testme/include_simple.incl 4370ab392f4dd0793322f008868e1a0792e26d4e
@@ -0,0 +1,4 @@
+1: @_$1_@
+2: @_$2_@
+3: @_$3_@
+4: @_$4_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0051_testme/test.out 1e590ab2275919fa9d37645d7696f2e7fe990bf0
+++ harness/sources/templates_parser/regtests/tests/0051_testme/test.out 1e590ab2275919fa9d37645d7696f2e7fe990bf0
@@ -0,0 +1,5 @@
+1: one
+2: two
+3: three
+4: four
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0051_testme/test.py 7fa2a155a8082e928c98726cb5af6b9a4451952c
+++ harness/sources/templates_parser/regtests/tests/0051_testme/test.py 7fa2a155a8082e928c98726cb5af6b9a4451952c
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme47.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0051_testme/testme47.tmplt 3d44badd68135789dd9dbdb787407ffddcb5094c
+++ harness/sources/templates_parser/regtests/tests/0051_testme/testme47.tmplt 3d44badd68135789dd9dbdb787407ffddcb5094c
@@ -0,0 +1 @@
+@@INCLUDE@@ include_simple.incl one two three four
============================================================
--- harness/sources/templates_parser/regtests/tests/0052_testme/include_simple.incl 4370ab392f4dd0793322f008868e1a0792e26d4e
+++ harness/sources/templates_parser/regtests/tests/0052_testme/include_simple.incl 4370ab392f4dd0793322f008868e1a0792e26d4e
@@ -0,0 +1,4 @@
+1: @_$1_@
+2: @_$2_@
+3: @_$3_@
+4: @_$4_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0052_testme/test.out 1e590ab2275919fa9d37645d7696f2e7fe990bf0
+++ harness/sources/templates_parser/regtests/tests/0052_testme/test.out 1e590ab2275919fa9d37645d7696f2e7fe990bf0
@@ -0,0 +1,5 @@
+1: one
+2: two
+3: three
+4: four
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0052_testme/test.py 9f6f64d69da4b87d951a132e658ed9895c848f62
+++ harness/sources/templates_parser/regtests/tests/0052_testme/test.py 9f6f64d69da4b87d951a132e658ed9895c848f62
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme48.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0052_testme/testme48.tmplt 2b759ab32fd8d346e152759b4d64e62a427dcf74
+++ harness/sources/templates_parser/regtests/tests/0052_testme/testme48.tmplt 2b759ab32fd8d346e152759b4d64e62a427dcf74
@@ -0,0 +1 @@
+@@INCLUDE@@ include_simple.incl (one, 3 =>three, 4 => four, 2=>two)
============================================================
--- harness/sources/templates_parser/regtests/tests/0053_testme/include_simple.incl 4370ab392f4dd0793322f008868e1a0792e26d4e
+++ harness/sources/templates_parser/regtests/tests/0053_testme/include_simple.incl 4370ab392f4dd0793322f008868e1a0792e26d4e
@@ -0,0 +1,4 @@
+1: @_$1_@
+2: @_$2_@
+3: @_$3_@
+4: @_$4_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0053_testme/test.out 7ea75a099b0e18417cf166e31f3de561049eef6f
+++ harness/sources/templates_parser/regtests/tests/0053_testme/test.out 7ea75a099b0e18417cf166e31f3de561049eef6f
@@ -0,0 +1,2 @@
+
+raised TEMPLATES_PARSER.TEMPLATE_ERROR : Can't have a positional parameter after a named one, in testme49.tmplt at line 1
============================================================
--- harness/sources/templates_parser/regtests/tests/0053_testme/test.py 6f027f1ad0a8f0f882f219a782e76ec558c91f73
+++ harness/sources/templates_parser/regtests/tests/0053_testme/test.py 6f027f1ad0a8f0f882f219a782e76ec558c91f73
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme49.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0053_testme/testme49.tmplt ae17fc9448dd72ace6816f4c80f064f5219578dd
+++ harness/sources/templates_parser/regtests/tests/0053_testme/testme49.tmplt ae17fc9448dd72ace6816f4c80f064f5219578dd
@@ -0,0 +1 @@
+@@INCLUDE@@ include_simple.incl (one, 3 =>three, two, 4 => four)
============================================================
--- harness/sources/templates_parser/regtests/tests/0054_testme/include_simple.incl 4370ab392f4dd0793322f008868e1a0792e26d4e
+++ harness/sources/templates_parser/regtests/tests/0054_testme/include_simple.incl 4370ab392f4dd0793322f008868e1a0792e26d4e
@@ -0,0 +1,4 @@
+1: @_$1_@
+2: @_$2_@
+3: @_$3_@
+4: @_$4_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0054_testme/test.out 4bcdc7b6bd368e52aeb387c980f8bdd6d2d97acc
+++ harness/sources/templates_parser/regtests/tests/0054_testme/test.out 4bcdc7b6bd368e52aeb387c980f8bdd6d2d97acc
@@ -0,0 +1,2 @@
+
+raised TEMPLATES_PARSER.TEMPLATE_ERROR : Parameter 3 defined multiple time, in testme50.tmplt at line 1
============================================================
--- harness/sources/templates_parser/regtests/tests/0054_testme/test.py fb159b32b54d982cc4746e48618d66b1b46bb92d
+++ harness/sources/templates_parser/regtests/tests/0054_testme/test.py fb159b32b54d982cc4746e48618d66b1b46bb92d
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme50.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0054_testme/testme50.tmplt 3028f24a8b0c351eb8340de2c6737db6e72e5293
+++ harness/sources/templates_parser/regtests/tests/0054_testme/testme50.tmplt 3028f24a8b0c351eb8340de2c6737db6e72e5293
@@ -0,0 +1 @@
+@@INCLUDE@@ include_simple.incl (one, 3 =>three, 4 => four, 3=>two)
============================================================
--- harness/sources/templates_parser/regtests/tests/0055_testme/include_simple.incl 4370ab392f4dd0793322f008868e1a0792e26d4e
+++ harness/sources/templates_parser/regtests/tests/0055_testme/include_simple.incl 4370ab392f4dd0793322f008868e1a0792e26d4e
@@ -0,0 +1,4 @@
+1: @_$1_@
+2: @_$2_@
+3: @_$3_@
+4: @_$4_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0055_testme/test.out 39b00eeacce13ed8c20b317a33d1b04ef0de6f6a
+++ harness/sources/templates_parser/regtests/tests/0055_testme/test.out 39b00eeacce13ed8c20b317a33d1b04ef0de6f6a
@@ -0,0 +1,5 @@
+1: one
+2: two
+3: three 33!
+4: four
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0055_testme/test.py 949ac9685e13fe542588a4106c5fb58ee4541d5d
+++ harness/sources/templates_parser/regtests/tests/0055_testme/test.py 949ac9685e13fe542588a4106c5fb58ee4541d5d
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme51.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0055_testme/testme51.tmplt bb2aca81a994506a17f996e0b7416f172dcb721b
+++ harness/sources/templates_parser/regtests/tests/0055_testme/testme51.tmplt bb2aca81a994506a17f996e0b7416f172dcb721b
@@ -0,0 +1 @@
+@@INCLUDE@@ include_simple.incl (one, 3 =>"three 33!", 4 => four, 2=>two)
============================================================
--- harness/sources/templates_parser/regtests/tests/0056_testme/test.out 00bbad94c707bf70f8d4778e5b6ecd6f55fa0012
+++ harness/sources/templates_parser/regtests/tests/0056_testme/test.out 00bbad94c707bf70f8d4778e5b6ecd6f55fa0012
@@ -0,0 +1,6 @@
+
+2
+1
+
+7
+2
============================================================
--- harness/sources/templates_parser/regtests/tests/0056_testme/test.py cc89938d2de89e64ff789d42405f064372503f7f
+++ harness/sources/templates_parser/regtests/tests/0056_testme/test.py cc89938d2de89e64ff789d42405f064372503f7f
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme52.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0056_testme/testme52.tmplt 87e75759008bad595f8ede3ad1836b7606ab781b
+++ harness/sources/templates_parser/regtests/tests/0056_testme/testme52.tmplt 87e75759008bad595f8ede3ad1836b7606ab781b
@@ -0,0 +1,6 @@
+
+@_MIN(7):TWO_@
+@_MIN(1):TWO_@
+
+@_MAX(7):TWO_@
+@_MAX(1):TWO_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0057_testme/test.out 0e860a5a63f67dd057d7885969dac6c0f9cf9861
+++ harness/sources/templates_parser/regtests/tests/0057_testme/test.out 0e860a5a63f67dd057d7885969dac6c0f9cf9861
@@ -0,0 +1,2 @@
+
+raised TEMPLATES_PARSER.TEMPLATE_ERROR : TERMINATE_SECTIONS attribute given, but no section defined, in testme55.tmplt at line 4
============================================================
--- harness/sources/templates_parser/regtests/tests/0057_testme/test.py 844b9ad0b64c5bac03ff1c4a5117b026b2841baf
+++ harness/sources/templates_parser/regtests/tests/0057_testme/test.py 844b9ad0b64c5bac03ff1c4a5117b026b2841baf
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme55.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0057_testme/testme55.tmplt 90138edd25ba7c095418494c3ef901731bc06913
+++ harness/sources/templates_parser/regtests/tests/0057_testme/testme55.tmplt 90138edd25ba7c095418494c3ef901731bc06913
@@ -0,0 +1,4 @@
+
+@@TABLE@@ @@TERMINATE_SECTIONS@@
+@_VAR2_@
+@@END_TABLE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0058_testme/test.out 9a1d5edc592881a709538d65bef3f12a172ecf69
+++ harness/sources/templates_parser/regtests/tests/0058_testme/test.out 9a1d5edc592881a709538d65bef3f12a172ecf69
@@ -0,0 +1,4 @@
+
+FALSE
+FALSE
+TRUE
============================================================
--- harness/sources/templates_parser/regtests/tests/0058_testme/test.py 6a69ac6acbd219cef86b8f47cb349d200bbfee29
+++ harness/sources/templates_parser/regtests/tests/0058_testme/test.py 6a69ac6acbd219cef86b8f47cb349d200bbfee29
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme56.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0058_testme/testme56.tmplt 3d9bbe8bc4122ab0a1ba42f65848d0620e774bb8
+++ harness/sources/templates_parser/regtests/tests/0058_testme/testme56.tmplt 3d9bbe8bc4122ab0a1ba42f65848d0620e774bb8
@@ -0,0 +1,4 @@
+
+@_FILE_EXISTS:VAR1_@
+@_FILE_EXISTS:FILE_@
+@_FILE_EXISTS:FILE2_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0059_testme/test.out 5a2060f939531fba72a971245e6e8d91d1c19a20
+++ harness/sources/templates_parser/regtests/tests/0059_testme/test.out 5a2060f939531fba72a971245e6e8d91d1c19a20
@@ -0,0 +1,21 @@
+The classes: Class1, Class2
+The members: Member1.1, Member1.2
+Member2.1, Member2.2, Member2.3
+
+Class1
+MISSING OUTPUT:Class1, Class2
+->Class1::Member1.1
+ ERROR IF PRESENT:Class1, Class2
+->Class1::Member1.2
+ ERROR IF PRESENT:Class1, Class2
+
+Class2
+MISSING OUTPUT:Class1, Class2
+->Class2::Member2.1
+ ERROR IF PRESENT:Class1, Class2
+->Class2::Member2.2
+ ERROR IF PRESENT:Class1, Class2
+->Class2::Member2.3
+ ERROR IF PRESENT:Class1, Class2
+
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0059_testme/test.py 8b421ab6c415cdcb4d43fd0862ec92a90f089a31
+++ harness/sources/templates_parser/regtests/tests/0059_testme/test.py 8b421ab6c415cdcb4d43fd0862ec92a90f089a31
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme57.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0059_testme/testme57.tmplt 5b749371b4d2604ac844bdcd49d3814ef64ed1be
+++ harness/sources/templates_parser/regtests/tests/0059_testme/testme57.tmplt 5b749371b4d2604ac844bdcd49d3814ef64ed1be
@@ -0,0 +1,14 @@
+The classes: @_CLASS_@
+The members: @_MEMBER_@
+
+@@TABLE@@
+@_CLASS_@
+MISSING OUTPUT:@_CLASS'UP_LEVEL(1)_@
+@@TABLE@@
+@@IF@@ @_EXIST:MEMBER_@
+->@_CLASS'UP_LEVEL(1)_@::@_MEMBER_@
+ ERROR IF PRESENT:@_CLASS'UP_LEVEL(2)_@
+@@END_IF@@
+@@END_TABLE@@
+
+@@END_TABLE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0060_testme/test.out e14defcc10addef542ce01b01f4875da502b3a0b
+++ harness/sources/templates_parser/regtests/tests/0060_testme/test.out e14defcc10addef542ce01b01f4875da502b3a0b
@@ -0,0 +1,2 @@
+
+raised TEMPLATES_PARSER.TEMPLATE_ERROR : @@END_IF@@ found, @@END_TABLE@@ expected, in testme58.tmplt at line 5
============================================================
--- harness/sources/templates_parser/regtests/tests/0060_testme/test.py c379667a09c71d43f743b665384cf4771f8b5994
+++ harness/sources/templates_parser/regtests/tests/0060_testme/test.py c379667a09c71d43f743b665384cf4771f8b5994
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme58.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0060_testme/testme58.tmplt ee7b1796589faff833466d3e5a19b85d2b49142d
+++ harness/sources/templates_parser/regtests/tests/0060_testme/testme58.tmplt ee7b1796589faff833466d3e5a19b85d2b49142d
@@ -0,0 +1,5 @@
+@@-- foo
+@@-- bar
+
+@@TABLE@@
+@@END_IF@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0061_testme/test.out 5c6cca17d54b81549cbdd51b8dbb8fdadfe95173
+++ harness/sources/templates_parser/regtests/tests/0061_testme/test.out 5c6cca17d54b81549cbdd51b8dbb8fdadfe95173
@@ -0,0 +1,48 @@
+
+one
+two
+three
+
+three
+two
+one
+
+A4.1
+A4.2
+A4.3
+A3.1
+A3.2
+A3.3
+A2.1
+A2.2
+A2.3
+A1.1
+A1.2
+A1.3
+
+A4.3
+A4.2
+A4.1
+A3.3
+A3.2
+A3.1
+A2.3
+A2.2
+A2.1
+A1.3
+A1.2
+A1.1
+
+A1.3
+A1.2
+A1.1
+A2.3
+A2.2
+A2.1
+A3.3
+A3.2
+A3.1
+A4.3
+A4.2
+A4.1
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0061_testme/test.py 16590ffd0b1daa2611f6ba036c70022f6a58e279
+++ harness/sources/templates_parser/regtests/tests/0061_testme/test.py 16590ffd0b1daa2611f6ba036c70022f6a58e279
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme60.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0061_testme/testme60.tmplt a4630836641a97949c5dbd53b165801cb556f4a6
+++ harness/sources/templates_parser/regtests/tests/0061_testme/testme60.tmplt a4630836641a97949c5dbd53b165801cb556f4a6
@@ -0,0 +1,26 @@
+
+@@TABLE@@
+@_VAR3_@
+@@END_TABLE@@
+
+@@TABLE'REVERSE@@
+@_VAR3_@
+@@END_TABLE@@
+
+@@TABLE'REVERSE@@
+@@TABLE@@
+@_MAT_@
+@@END_TABLE@@
+@@END_TABLE@@
+
+@@TABLE'REVERSE@@
+@@TABLE'REVERSE@@
+@_MAT_@
+@@END_TABLE@@
+@@END_TABLE@@
+
+@@TABLE@@
+@@TABLE'REVERSE@@
+@_MAT_@
+@@END_TABLE@@
+@@END_TABLE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0062_testme/test.out 73b698b0649d77d20f35c806c44158abacde9d30
+++ harness/sources/templates_parser/regtests/tests/0062_testme/test.out 73b698b0649d77d20f35c806c44158abacde9d30
@@ -0,0 +1,12 @@
+
+
+
+testme61_1: foo foo
+
+
+testme61_2: foo
+
+testme61_2: foo
+
+testme61_2: foo
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0062_testme/test.py a791ab58377c53459219f259640ccfe7360aaaa9
+++ harness/sources/templates_parser/regtests/tests/0062_testme/test.py a791ab58377c53459219f259640ccfe7360aaaa9
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme61.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0062_testme/testme61.tmplt eb9f382b0d3def5e603771a03e4e91f83377dbef
+++ harness/sources/templates_parser/regtests/tests/0062_testme/testme61.tmplt eb9f382b0d3def5e603771a03e4e91f83377dbef
@@ -0,0 +1,2 @@
+
+@@INCLUDE@@ testme61_1.incl (5=>foo)
============================================================
--- harness/sources/templates_parser/regtests/tests/0062_testme/testme61_1.incl e19a0640157538b71bdf7a5397f28518cc4303fd
+++ harness/sources/templates_parser/regtests/tests/0062_testme/testme61_1.incl e19a0640157538b71bdf7a5397f28518cc4303fd
@@ -0,0 +1,10 @@
+
+@@SET@@ ALIAS = $5
+
+testme61_1: @_$5_@ @_ALIAS_@
+
+@@IF@@ @_EXIST:$5_@
+@@INCLUDE@@ testme61_2.incl @_$5_@
+@@INCLUDE@@ testme61_2.incl (1=>@_$5_@)
+@@INCLUDE@@ testme61_2.incl (1=>@_ALIAS_@)
+@@END_IF@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0062_testme/testme61_2.incl 4ac8c11d79d1f7e5c6f123711050e76009c7c223
+++ harness/sources/templates_parser/regtests/tests/0062_testme/testme61_2.incl 4ac8c11d79d1f7e5c6f123711050e76009c7c223
@@ -0,0 +1,2 @@
+
+testme61_2: @_$1_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0063_testme/test.out c71465d9b9b6d65b64fec49438afb8bf57b29630
+++ harness/sources/templates_parser/regtests/tests/0063_testme/test.out c71465d9b9b6d65b64fec49438afb8bf57b29630
@@ -0,0 +1,11 @@
+
+
+$1=one, two, three
+
+
+$1=one
+
+$1=two
+
+$1=three
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0063_testme/test.py dedbf32f84ec0c72442e0b2960d8449a710bfc10
+++ harness/sources/templates_parser/regtests/tests/0063_testme/test.py dedbf32f84ec0c72442e0b2960d8449a710bfc10
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme62.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0063_testme/testme62.incl a3ad6b7148ce73917af4b23fa0a4e405365d7435
+++ harness/sources/templates_parser/regtests/tests/0063_testme/testme62.incl a3ad6b7148ce73917af4b23fa0a4e405365d7435
@@ -0,0 +1,2 @@
+
+$1=@_$1_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0063_testme/testme62.tmplt 85e025a61aa3261c8e4b098b27ec138f8a1579c3
+++ harness/sources/templates_parser/regtests/tests/0063_testme/testme62.tmplt 85e025a61aa3261c8e4b098b27ec138f8a1579c3
@@ -0,0 +1,6 @@
+
+@@INCLUDE@@ testme62.incl @_VAR3_@
+
+@@TABLE@@
+@@INCLUDE@@ testme62.incl @_VAR3_@
+@@END_TABLE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0064_testme/test.out 20b8691d1feb769a00c53130f1b614f971ad4705
+++ harness/sources/templates_parser/regtests/tests/0064_testme/test.out 20b8691d1feb769a00c53130f1b614f971ad4705
@@ -0,0 +1,4 @@
+
+<été ça être paramètre à paraître> & "
+
+<été ça être paramètre à paraître> & "
============================================================
--- harness/sources/templates_parser/regtests/tests/0064_testme/test.py 079b3cc1ca6410c0f55cf095331384eb24959461
+++ harness/sources/templates_parser/regtests/tests/0064_testme/test.py 079b3cc1ca6410c0f55cf095331384eb24959461
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme63.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0064_testme/testme63.tmplt 13e0a1188be521a49eac27ec544489f4892283df
+++ harness/sources/templates_parser/regtests/tests/0064_testme/testme63.tmplt 13e0a1188be521a49eac27ec544489f4892283df
@@ -0,0 +1,4 @@
+
+@_ACCENTS_@
+
+@_WEB_ENCODE:ACCENTS_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0065_testme/test.out d5042114e7045e0e23e9698a1cd86cee94ae4c24
+++ harness/sources/templates_parser/regtests/tests/0065_testme/test.out d5042114e7045e0e23e9698a1cd86cee94ae4c24
@@ -0,0 +1,25 @@
+
+---
+
+ 1. lab1
+ 2. label 2
+ 1. lab3
+ 2. lab4
+
+1. lab1|2. label 2|1. lab3|2. lab4
+---
+
+before
+lab1
+after
+before
+sec: lab2
+after
+before
+lab3
+after
+before
+sec: lab4
+after
+
+before, lab1, after, before, sec: lab2, after, before, lab3, after, before, sec: lab4, after
============================================================
--- harness/sources/templates_parser/regtests/tests/0065_testme/test.py 6ef0ec7d72ab3be4baae0bea26e305e765b19a45
+++ harness/sources/templates_parser/regtests/tests/0065_testme/test.py 6ef0ec7d72ab3be4baae0bea26e305e765b19a45
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme65.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0065_testme/testme65.tmplt 81048a78853e6a9674e5c5d81d63e72a939ca819
+++ harness/sources/templates_parser/regtests/tests/0065_testme/testme65.tmplt 81048a78853e6a9674e5c5d81d63e72a939ca819
@@ -0,0 +1,48 @@
+
+---
+
+@@TABLE@@
+ 1. @_LABELS_@
+@@SECTION@@
+ @@IF@@ @_LABELS_@ = "lab2"
+ 2. label 2
+ @@ELSE@@
+ 2. @_LABELS_@
+ @@END_IF@@
+@@END_TABLE@@
+
+@@INLINE(|)@@
+@@TABLE@@
+ 1. @_LABELS_@
+@@SECTION@@
+ @@IF@@ @_LABELS_@ = "lab2"
+ 2. label 2
+ @@ELSE@@
+ 2. @_LABELS_@
+ @@END_IF@@
+@@END_TABLE@@
+@@END_INLINE@@
+
+---
+
+@@TABLE@@
+before
+@@BEGIN@@
+@_LABELS_@
+@@SECTION@@
+sec: @_LABELS_@
+@@END@@
+after
+@@END_TABLE@@
+
+@@INLINE(, )@@
+@@TABLE@@
+before
+@@BEGIN@@
+@_LABELS_@
+@@SECTION@@
+sec: @_LABELS_@
+@@END@@
+after
+@@END_TABLE@@
+@@END_INLINE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0066_testme/test.out b756e6599f4680a9d87c1dd6c18933109e9a5e0d
+++ harness/sources/templates_parser/regtests/tests/0066_testme/test.out b756e6599f4680a9d87c1dd6c18933109e9a5e0d
@@ -0,0 +1,11 @@
+. .
+.xxx.
+.333.
+.AAA.
+.AAA.
+
+. , , , .
+. , , , .
+
+3 times nothing: ..
+nothing 3 times: ..
============================================================
--- harness/sources/templates_parser/regtests/tests/0066_testme/test.py c349f41fd4ccc47dd862fae10e1963ce70370bac
+++ harness/sources/templates_parser/regtests/tests/0066_testme/test.py c349f41fd4ccc47dd862fae10e1963ce70370bac
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme66.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0066_testme/testme66.tmplt 283baa2f3e93f57070c27ec44b887d1d209c6a26
+++ harness/sources/templates_parser/regtests/tests/0066_testme/testme66.tmplt 283baa2f3e93f57070c27ec44b887d1d209c6a26
@@ -0,0 +1,11 @@
+.@_REPEAT( ):THREE_@.
+.@_REPEAT(x):THREE_@.
+.@_REPEAT(3):THREE_@.
+.@_REPEAT(3):VAR6_@.
+.@_REPEAT(THREE):VAR6_@.
+
+.@_REPEAT( , ):THREE_@.
+.@_REPEAT(" , "):THREE_@.
+
+3 times nothing: .@_REPEAT():THREE_@.
+nothing 3 times: .@_REPEAT(3):VAR4_@.
============================================================
--- harness/sources/templates_parser/regtests/tests/0067_testme/test.out 4bc8e1c8bbfbe6371df4fb940385b10ef949d442
+++ harness/sources/templates_parser/regtests/tests/0067_testme/test.out 4bc8e1c8bbfbe6371df4fb940385b10ef949d442
@@ -0,0 +1,19 @@
+
+ first
+( 2. lab1 )
+ first
+( 2. lab2 )
+ first
+( 2. lab3 )
+ first
+( 2. lab4 )
+
+ first
+(2. lab1)
+ first
+(2. lab2)
+ first
+(2. lab3)
+ first
+(2. lab4)
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0067_testme/test.py 803538dcfe7fe264c425f191efd6a1dedc7be5f0
+++ harness/sources/templates_parser/regtests/tests/0067_testme/test.py 803538dcfe7fe264c425f191efd6a1dedc7be5f0
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme67.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0067_testme/testme67.tmplt dbf8cd8a3028eb141491a0adaf1a15d1d9c82fc8
+++ harness/sources/templates_parser/regtests/tests/0067_testme/testme67.tmplt dbf8cd8a3028eb141491a0adaf1a15d1d9c82fc8
@@ -0,0 +1,26 @@
+
+@@TABLE@@
+ first
+ @@INLINE@@
+ (
+ @@IF@@ @_COND1_@
+ 1. @_LABELS_@
+ @@ELSE@@
+ 2. @_LABELS_@
+ @@END_IF@@
+ )
+ @@END_INLINE@@
+@@END_TABLE@@
+
+@@TABLE@@
+ first
+ @@INLINE()@@
+ (
+ @@IF@@ @_COND1_@
+ 1. @_LABELS_@
+ @@ELSE@@
+ 2. @_LABELS_@
+ @@END_IF@@
+ )
+ @@END_INLINE@@
+@@END_TABLE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0068_testme/test.out 9de3f426d8a649abf7ca4822c7b056fbb7fe3a41
+++ harness/sources/templates_parser/regtests/tests/0068_testme/test.out 9de3f426d8a649abf7ca4822c7b056fbb7fe3a41
@@ -0,0 +1,7 @@
+
+start: lab1 lab2 lab3 lab4
+.start:,lab1,lab2,lab3,lab4
+..start:,lab1,lab2,lab3,lab4
+...start:,lab1,lab2,lab3,lab4
+class="lab1,lab2,lab3,lab4"
+..class="lab1,lab2,lab3,lab4"
============================================================
--- harness/sources/templates_parser/regtests/tests/0068_testme/test.py 342e87790669d0c9bb5c826819ee3cf24911ccd5
+++ harness/sources/templates_parser/regtests/tests/0068_testme/test.py 342e87790669d0c9bb5c826819ee3cf24911ccd5
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme68.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0068_testme/testme68.tmplt 9da42c408087c6faa46966a03ce51b8f4bcda77f
+++ harness/sources/templates_parser/regtests/tests/0068_testme/testme68.tmplt 9da42c408087c6faa46966a03ce51b8f4bcda77f
@@ -0,0 +1,40 @@
+
+@@INLINE@@
+start:
+ @@TABLE@@
+ @_LABELS_@
+ @@END_TABLE@@
+@@END_INLINE@@
+
+@@INLINE(.)(,)()@@
+ start:
+ @@TABLE@@
+ @_LABELS_@
+ @@END_TABLE@@
+@@END_INLINE@@
+
+@@INLINE(..)(,)()@@
+ start:
+ @@TABLE@@
+ @_LABELS_@
+ @@END_TABLE@@
+@@END_INLINE@@
+
+@@INLINE(...)(,)()@@
+ start:
+ @@TABLE@@
+ @_LABELS_@
+ @@END_TABLE@@
+@@END_INLINE@@
+
+@@INLINE(class=")(,)(")@@
+ @@TABLE@@
+ @_LABELS_@
+ @@END_TABLE@@
+@@END_INLINE@@
+
+@@INLINE(..class=")(,)(")@@
+ @@TABLE@@
+ @_LABELS_@
+ @@END_TABLE@@
+@@END_INLINE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0069_testme/test.out 111e396828324e29a2a51970f02af0a50b85a89f
+++ harness/sources/templates_parser/regtests/tests/0069_testme/test.out 111e396828324e29a2a51970f02af0a50b85a89f
@@ -0,0 +1 @@
+""
============================================================
--- harness/sources/templates_parser/regtests/tests/0069_testme/test.py 5fe664217a8fd2ba5bc8b5f30d51ccd345f13400
+++ harness/sources/templates_parser/regtests/tests/0069_testme/test.py 5fe664217a8fd2ba5bc8b5f30d51ccd345f13400
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme69.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0069_testme/testme69.tmplt 54c32b6d4007e05c2fce4657167c06b548f0a3ca
+++ harness/sources/templates_parser/regtests/tests/0069_testme/testme69.tmplt 54c32b6d4007e05c2fce4657167c06b548f0a3ca
@@ -0,0 +1 @@
+@_WEB_ESCAPE:QUOTE_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0070_testme/incl.tmplt 26614c84846ec4df79a43ce0da680d00260009d1
+++ harness/sources/templates_parser/regtests/tests/0070_testme/incl.tmplt 26614c84846ec4df79a43ce0da680d00260009d1
@@ -0,0 +1 @@
+again a new include file
============================================================
--- harness/sources/templates_parser/regtests/tests/0070_testme/test.out c2e9da3b3d871a6500e1ae0f48c3b7b8c80987d6
+++ harness/sources/templates_parser/regtests/tests/0070_testme/test.out c2e9da3b3d871a6500e1ae0f48c3b7b8c80987d6
@@ -0,0 +1,16 @@
+
+-- 1
+
+
+ Error1: File ./toto/incl.tmplt does not exist!
+
+-- 2
+
+
+again a new include file
+
+-- 3
+
+
+again a new include file
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0070_testme/test.py 6f236cc16249e6ebf16651df38b26a0d848c5cbc
+++ harness/sources/templates_parser/regtests/tests/0070_testme/test.py 6f236cc16249e6ebf16651df38b26a0d848c5cbc
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme70.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0070_testme/testme70.tmplt 1cee995dd06963ca3239f18704bb13a2afaef9ef
+++ harness/sources/templates_parser/regtests/tests/0070_testme/testme70.tmplt 1cee995dd06963ca3239f18704bb13a2afaef9ef
@@ -0,0 +1,30 @@
+
+-- 1
+
+@@SET@@ FILENAME = ./toto/incl.tmplt
+
+@@IF@@ @_FILE_EXISTS:FILENAME_@
+ @@INCLUDE@@ ./toto/incl.tmplt
+@@ELSE@@
+ Error1: File @_FILENAME_@ does not exist!
+@@END_IF@@
+
+-- 2
+
+@@SET@@ FILENAME = ./incl.tmplt
+
+@@IF@@ @_FILE_EXISTS:FILENAME_@
+ @@INCLUDE@@ @_FILENAME_@
+@@ELSE@@
+ Error2: File @_FILENAME_@ does not exist!
+@@END_IF@@
+
+-- 3
+
+@@SET@@ FILENAME = ./incl.tmplt
+
+@@IF@@ @_FILE_EXISTS:FILENAME_@
+ @@INCLUDE@@ ./@_LOWER:FILENAME_@
+@@ELSE@@
+ Error2: File @_FILENAME_@ does not exist!
+@@END_IF@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0071_testme/test.out 1935187242be7be3247fb1f24d9412d6e1bc4a91
+++ harness/sources/templates_parser/regtests/tests/0071_testme/test.out 1935187242be7be3247fb1f24d9412d6e1bc4a91
@@ -0,0 +1,118 @@
+
+-----------------------------------
+
+1a> CT 1 1 CT 2 1 CT 2 2 CT 3 1 CT 3 2 CT 3 3
+
+1b> CMAT 1 1 1 CMAT 1 1 2 CMAT 1 1 3 CMAT 1 2 1 CMAT 1 2 2 CMAT 1 2 3 CMAT 1 2 4 CMAT 2 1 1 CMAT 2 1 2 CMAT 2 1 3 CMAT 2 2 1 CMAT 2 2 2 CMAT 2 2 3 CMAT 2 2 4 CMAT 3 1 1 CMAT 3 1 2 CMAT 3 1 3 CMAT 3 2 1 CMAT 3 2 2 CMAT 3 2 3 CMAT 3 2 4
+
+1c> M 1 1 1, M 1 1 2, M 1 1 3
+M 1 2 1, M 1 2 2, M 1 2 3, M 1 2 4
+M 2 1 1, M 2 1 2, M 2 1 3
+M 2 2 1, M 2 2 2, M 2 2 3, M 2 2 4
+M 3 1 1, M 3 1 2, M 3 1 3
+M 3 2 1, M 3 2 2, M 3 2 3, M 3 2 4
+
+-----------------------------------
+
+2a> CT 1 1
+2a> CT 2 1 CT 2 2
+2a> CT 3 1 CT 3 2 CT 3 3
+
+2b> CMAT 1 1 1 CMAT 1 1 2 CMAT 1 1 3 CMAT 1 2 1 CMAT 1 2 2 CMAT 1 2 3 CMAT 1 2 4
+2b> CMAT 2 1 1 CMAT 2 1 2 CMAT 2 1 3 CMAT 2 2 1 CMAT 2 2 2 CMAT 2 2 3 CMAT 2 2 4
+2b> CMAT 3 1 1 CMAT 3 1 2 CMAT 3 1 3 CMAT 3 2 1 CMAT 3 2 2 CMAT 3 2 3 CMAT 3 2 4
+
+2c> M 1 1 1, M 1 1 2, M 1 1 3
+M 1 2 1, M 1 2 2, M 1 2 3, M 1 2 4
+2c> M 2 1 1, M 2 1 2, M 2 1 3
+M 2 2 1, M 2 2 2, M 2 2 3, M 2 2 4
+2c> M 3 1 1, M 3 1 2, M 3 1 3
+M 3 2 1, M 3 2 2, M 3 2 3, M 3 2 4
+
+-- Cursor
+
+.
+3> CT 1 1
+3>
+3>
+.
+3> CT 2 1
+3> CT 2 2
+3>
+.
+3> CT 3 1
+3> CT 3 2
+3> CT 3 3
+
+-- Cursor C_MAT3
+
+.
+..
+4a> CMAT 1 1 1
+4a> CMAT 1 1 2
+4a> CMAT 1 1 3
+4a>
+..
+4a> CMAT 1 2 1
+4a> CMAT 1 2 2
+4a> CMAT 1 2 3
+4a> CMAT 1 2 4
+.
+..
+4a> CMAT 2 1 1
+4a> CMAT 2 1 2
+4a> CMAT 2 1 3
+4a>
+..
+4a> CMAT 2 2 1
+4a> CMAT 2 2 2
+4a> CMAT 2 2 3
+4a> CMAT 2 2 4
+.
+..
+4a> CMAT 3 1 1
+4a> CMAT 3 1 2
+4a> CMAT 3 1 3
+4a>
+..
+4a> CMAT 3 2 1
+4a> CMAT 3 2 2
+4a> CMAT 3 2 3
+4a> CMAT 3 2 4
+
+-----------------------------------
+
+.
+..
+4b> M 1 1 1
+4b> M 1 1 2
+4b> M 1 1 3
+4b>
+..
+4b> M 1 2 1
+4b> M 1 2 2
+4b> M 1 2 3
+4b> M 1 2 4
+.
+..
+4b> M 2 1 1
+4b> M 2 1 2
+4b> M 2 1 3
+4b>
+..
+4b> M 2 2 1
+4b> M 2 2 2
+4b> M 2 2 3
+4b> M 2 2 4
+.
+..
+4b> M 3 1 1
+4b> M 3 1 2
+4b> M 3 1 3
+4b>
+..
+4b> M 3 2 1
+4b> M 3 2 2
+4b> M 3 2 3
+4b> M 3 2 4
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0071_testme/test.py d1824075ea6cb6495c1e46a876a8f8909debc853
+++ harness/sources/templates_parser/regtests/tests/0071_testme/test.py d1824075ea6cb6495c1e46a876a8f8909debc853
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme71.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0071_testme/testme71.tmplt 6cc9a2190d6d5a796ae1709fde15e088ea7d8af2
+++ harness/sources/templates_parser/regtests/tests/0071_testme/testme71.tmplt 6cc9a2190d6d5a796ae1709fde15e088ea7d8af2
@@ -0,0 +1,55 @@
+
+-----------------------------------
+
+1a> @_CURSOR_@
+
+1b> @_C_MAT3_@
+
+1c> @_MAT3_@
+
+-----------------------------------
+
+@@TABLE@@
+2a> @_CURSOR_@
+@@END_TABLE@@
+
+@@TABLE@@
+2b> @_C_MAT3_@
+@@END_TABLE@@
+
+@@TABLE@@
+2c> @_MAT3_@
+@@END_TABLE@@
+
+-- Cursor
+
+@@TABLE@@
+.
+@@TABLE@@
+3> @_CURSOR_@
+@@END_TABLE@@
+@@END_TABLE@@
+
+-- Cursor C_MAT3
+
+@@TABLE@@
+.
+@@TABLE@@
+..
+@@TABLE@@
+4a> @_C_MAT3_@
+@@END_TABLE@@
+@@END_TABLE@@
+@@END_TABLE@@
+
+-----------------------------------
+
+@@TABLE@@
+.
+@@TABLE@@
+..
+@@TABLE@@
+4b> @_MAT3_@
+@@END_TABLE@@
+@@END_TABLE@@
+@@END_TABLE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0072_testme/test.out b2fbe4d4702d05c9e8690ae996d95404fe496281
+++ harness/sources/templates_parser/regtests/tests/0072_testme/test.out b2fbe4d4702d05c9e8690ae996d95404fe496281
@@ -0,0 +1,80 @@
+
+t
+o
+t
+o
+t
+i
+t
+i
+t
+a
+t
+a
+t
+a
+t
+a
+t
+i
+t
+i
+t
+o
+t
+o
+t
+a
+t
+a
+t
+i
+t
+i
+t
+o
+t
+o
+t
+i
+t
+i
+t
+i
+t
+i
+
+tot
+o
+tit
+i
+tat
+a
+tat
+a
+tit
+i
+tot
+o
+tat
+a
+tit
+i
+tot
+o
+tit
+i
+tit
+i
+
+toto titi tata tata titi toto tata titi toto titi
+titi
+
+First
+line
+Second
+line
+
+First line
+Second line
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0072_testme/test.py 9bd2d3204e1434ed4bdad71a9ee623bc461bb177
+++ harness/sources/templates_parser/regtests/tests/0072_testme/test.py 9bd2d3204e1434ed4bdad71a9ee623bc461bb177
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme72.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0072_testme/testme72.tmplt 61f22b16c9cb5a6f29fef5a2f19c4d7e96605655
+++ harness/sources/templates_parser/regtests/tests/0072_testme/testme72.tmplt 61f22b16c9cb5a6f29fef5a2f19c4d7e96605655
@@ -0,0 +1,11 @@
+
+@_WRAP(1):TEXT_@
+
+@_WRAP(3):TEXT_@
+
+@_WRAP(50):TEXT_@
+
+@_WRAP(8):WITHLF_@
+
+@_WRAP(15):WITHLF_@
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0073_testme/test.out b63f2560fe560def7fb33439e4de2481add36b4c
+++ harness/sources/templates_parser/regtests/tests/0073_testme/test.out b63f2560fe560def7fb33439e4de2481add36b4c
@@ -0,0 +1,22 @@
+
+one & two & three \\
+xxxxxxxxxxxxxxxxxxxxxxxxxxx
+
+Member1.1 & Member1.2 & \\
+Member2.1 & Member2.2 & Member2.3 \\
+
+xxxxxxxxxxxxxxxxxxxxxxxxxxx
+
+Member1.1 & Member1.2 \\
+Member2.1 & Member2.2 & Member2.3 \\
+
+xxxxxxxxxxxxxxxxxxxxxxxxxxx
+
+Member1.1 & Member1.2 & \\
+Member2.1 & Member2.2 & Member2.3 \\
+
+xxxxxxxxxxxxxxxxxxxxxxxxxxx
+
+Member1.1 & Member1.2 & - \\
+Member2.1 & Member2.2 & Member2.3 \\
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0073_testme/test.py 5d02f60eb9655f8461bb2ad9f0bbbbb483cbbb93
+++ harness/sources/templates_parser/regtests/tests/0073_testme/test.py 5d02f60eb9655f8461bb2ad9f0bbbbb483cbbb93
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme73.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0073_testme/testme73.tmplt 2addd280a76f50167888888e989e13f0b1240476
+++ harness/sources/templates_parser/regtests/tests/0073_testme/testme73.tmplt 2addd280a76f50167888888e989e13f0b1240476
@@ -0,0 +1,60 @@
+
+@@INLINE()( & )( \\\\)@@
+ @@TABLE@@
+ @_V5_@
+ @@END_TABLE@@
+@@END_INLINE@@
+
+xxxxxxxxxxxxxxxxxxxxxxxxxxx
+
+@@TABLE@@
+@@INLINE()( & )( \\\\)@@
+ @@TABLE@@
+ @_MEMBER_@
+ @@END_TABLE@@
+@@END_INLINE@@
+
+@@END_TABLE@@
+
+xxxxxxxxxxxxxxxxxxxxxxxxxxx
+
+@@TABLE@@
+@@INLINE()( & )( \\\\)@@
+ @@TABLE@@
+ @@IF@@ @_MEMBER_@ /= ""
+ @_MEMBER_@
+ @@END_IF@@
+ @@END_TABLE@@
+@@END_INLINE@@
+
+@@END_TABLE@@
+
+xxxxxxxxxxxxxxxxxxxxxxxxxxx
+
+@@TABLE@@
+@@INLINE()( & )( \\\\)@@
+ @@TABLE@@
+ @@IF@@ @_MEMBER_@ /= ""
+ @_MEMBER_@
+ @@ELSE@@
+
+ @@END_IF@@
+ @@END_TABLE@@
+@@END_INLINE@@
+
+@@END_TABLE@@
+
+xxxxxxxxxxxxxxxxxxxxxxxxxxx
+
+@@TABLE@@
+@@INLINE()( & )( \\\\)@@
+ @@TABLE@@
+ @@IF@@ @_MEMBER_@ /= ""
+ @_MEMBER_@
+ @@ELSE@@
+ -
+ @@END_IF@@
+ @@END_TABLE@@
+@@END_INLINE@@
+
+@@END_TABLE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0074_testme/test.out da39a3ee5e6b4b0d3255bfef95601890afd80709
+++ harness/sources/templates_parser/regtests/tests/0074_testme/test.out da39a3ee5e6b4b0d3255bfef95601890afd80709
============================================================
--- harness/sources/templates_parser/regtests/tests/0074_testme/test.py f290a53e49399d8ddddcfea3f10d6c47f69cd4d9
+++ harness/sources/templates_parser/regtests/tests/0074_testme/test.py f290a53e49399d8ddddcfea3f10d6c47f69cd4d9
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme74.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0074_testme/testme74.tmplt 7f5449bc92da552966f3d7f6b80458ab30eea04d
+++ harness/sources/templates_parser/regtests/tests/0074_testme/testme74.tmplt 7f5449bc92da552966f3d7f6b80458ab30eea04d
@@ -0,0 +1,3 @@
+@@-- Next line has 5 spaces
+
+
============================================================
--- harness/sources/templates_parser/regtests/tests/0075_testme/test.out d49f19be3ff1ae0acfc4aa35917d2d32756856bc
+++ harness/sources/templates_parser/regtests/tests/0075_testme/test.out d49f19be3ff1ae0acfc4aa35917d2d32756856bc
@@ -0,0 +1,9 @@
+
+1.
+ return Fa1 (Self) = T_Rt1.Ra1 (T_Rt1.Table (Foreign)) and Fa2 (Self) = T_Rt2.Ra2 (T_Rt2.Table (Foreign)) and Fa3 (Self) = T_Rt3.Ra3 (T_Rt3.Table (Foreign));
+2.
+ return Fa1 (Self) = T_Rt1.Ra1 (T_Rt1.Table (Foreign))
+
+ and Fa2 (Self) = T_Rt2.Ra2 (T_Rt2.Table (Foreign))
+
+ and Fa3 (Self) = T_Rt3.Ra3 (T_Rt3.Table (Foreign));
============================================================
--- harness/sources/templates_parser/regtests/tests/0075_testme/test.py 7d5a1ddaa9597f964d61edff6f25c8d2611425f0
+++ harness/sources/templates_parser/regtests/tests/0075_testme/test.py 7d5a1ddaa9597f964d61edff6f25c8d2611425f0
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme75.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0075_testme/testme75.tmplt e965fb130dc167813ffa9bd6e919509063b50a50
+++ harness/sources/templates_parser/regtests/tests/0075_testme/testme75.tmplt e965fb130dc167813ffa9bd6e919509063b50a50
@@ -0,0 +1,14 @@
+
+1.
+@@INLINE( return )( and )(;)@@
+ @@TABLE@@
+ @_CAPITALIZE:FOREIGN_ATTRS_@ (Self) = T_@_CAPITALIZE:REFERENCED_TABLES_@.@_CAPITALIZE:REFERENCED_ATTRS_@ (T_@_CAPITALIZE:REFERENCED_TABLES_@.Table (Foreign))
+ @@END_TABLE@@
+@@END_INLINE@@
+
+2.
+@@INLINE( return )(\n and )(;)@@
+ @@TABLE@@
+ @_CAPITALIZE:FOREIGN_ATTRS_@ (Self) = T_@_CAPITALIZE:REFERENCED_TABLES_@.@_CAPITALIZE:REFERENCED_ATTRS_@ (T_@_CAPITALIZE:REFERENCED_TABLES_@.Table (Foreign))
+ @@END_TABLE@@
+@@END_INLINE@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0076_testme/incl.tmplt 26614c84846ec4df79a43ce0da680d00260009d1
+++ harness/sources/templates_parser/regtests/tests/0076_testme/incl.tmplt 26614c84846ec4df79a43ce0da680d00260009d1
@@ -0,0 +1 @@
+again a new include file
============================================================
--- harness/sources/templates_parser/regtests/tests/0076_testme/test.out 43fa88e7184e8bd1fccb5a658bc30493318c14a4
+++ harness/sources/templates_parser/regtests/tests/0076_testme/test.out 43fa88e7184e8bd1fccb5a658bc30493318c14a4
@@ -0,0 +1,4 @@
+
+again a new include file
+
+one, two, three
============================================================
--- harness/sources/templates_parser/regtests/tests/0076_testme/test.py 1eeafd97fbe6aa5ed8f308e59772cce77c242c02
+++ harness/sources/templates_parser/regtests/tests/0076_testme/test.py 1eeafd97fbe6aa5ed8f308e59772cce77c242c02
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme76.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0076_testme/testme76.tmplt 6cb3d19fd34332d00f0cb0acce8f0a28309c0579
+++ harness/sources/templates_parser/regtests/tests/0076_testme/testme76.tmplt 6cb3d19fd34332d00f0cb0acce8f0a28309c0579
@@ -0,0 +1,4 @@
+
+@@INCLUDE@@ @_TMPLT_NAME_@
+
+@_VAR3_@
============================================================
--- harness/sources/templates_parser/regtests/tests/0077_testme/single_line.incl 7ba52bd7d28b23696af9833daa54f03599f03817
+++ harness/sources/templates_parser/regtests/tests/0077_testme/single_line.incl 7ba52bd7d28b23696af9833daa54f03599f03817
@@ -0,0 +1 @@
+a single line include
\ No newline at end of file
============================================================
--- harness/sources/templates_parser/regtests/tests/0077_testme/test.out 1e3a2295e9991a012d257798f94e37179a2f66d6
+++ harness/sources/templates_parser/regtests/tests/0077_testme/test.out 1e3a2295e9991a012d257798f94e37179a2f66d6
@@ -0,0 +1,3 @@
+start1
+(a single line include)
+end1
============================================================
--- harness/sources/templates_parser/regtests/tests/0077_testme/test.py 9941292edbe7d79d6bdc76a1881235ef9f635bc0
+++ harness/sources/templates_parser/regtests/tests/0077_testme/test.py 9941292edbe7d79d6bdc76a1881235ef9f635bc0
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme77.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0077_testme/testme77.tmplt 46fd1cba7436f57d9d2b9ad456dc5baa43acc01d
+++ harness/sources/templates_parser/regtests/tests/0077_testme/testme77.tmplt 46fd1cba7436f57d9d2b9ad456dc5baa43acc01d
@@ -0,0 +1,6 @@
+start1
+@@INLINE(\()()(\))@@
+@@INCLUDE@@ single_line.incl
+@@END_INLINE@@
+
+end1
============================================================
--- harness/sources/templates_parser/regtests/tests/0078_testme/test.out 57842440981d27cfdd4381c44f988a8619834a4d
+++ harness/sources/templates_parser/regtests/tests/0078_testme/test.out 57842440981d27cfdd4381c44f988a8619834a4d
@@ -0,0 +1,2 @@
+
+raised TEMPLATES_PARSER.TEMPLATE_ERROR : in operator right operand must be a tag In testme79.tmplt at line 2
============================================================
--- harness/sources/templates_parser/regtests/tests/0078_testme/test.py ad8991d24c29b7c334fe7a8e6540f07ef30bbece
+++ harness/sources/templates_parser/regtests/tests/0078_testme/test.py ad8991d24c29b7c334fe7a8e6540f07ef30bbece
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme79.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0078_testme/testme79.tmplt 08503a558ef8ed807ad534840625ccbc52b40a35
+++ harness/sources/templates_parser/regtests/tests/0078_testme/testme79.tmplt 08503a558ef8ed807ad534840625ccbc52b40a35
@@ -0,0 +1,4 @@
+
+@@IF@@ @_ONE_@ in "toto"
+ error
+@@END_IF@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0079_testme/test.out cb587f7668eb092d92a13ba765a45f26284f9dff
+++ harness/sources/templates_parser/regtests/tests/0079_testme/test.out cb587f7668eb092d92a13ba765a45f26284f9dff
@@ -0,0 +1,2 @@
+
+raised TEMPLATES_PARSER.TEMPLATE_ERROR : @@END_IF@@ found, @@END_TABLE@@ expected, in testme3.tmplt at line 5
============================================================
--- harness/sources/templates_parser/regtests/tests/0079_testme/test.py 2cf6f866881cf4209cc977f173921928a73304f7
+++ harness/sources/templates_parser/regtests/tests/0079_testme/test.py 2cf6f866881cf4209cc977f173921928a73304f7
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["testme3.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0079_testme/testme3.tmplt 7b475384a877175419a5d1df2ffc7b740ee35e22
+++ harness/sources/templates_parser/regtests/tests/0079_testme/testme3.tmplt 7b475384a877175419a5d1df2ffc7b740ee35e22
@@ -0,0 +1,5 @@
+
+@@TABLE@@
+ toto
+ titi
+@@END_IF@@
============================================================
--- harness/sources/templates_parser/regtests/tests/0080_blocks/blocks1.tmplt 01ed8a0c6b20e21e0902774fe926d7c1abb5557e
+++ harness/sources/templates_parser/regtests/tests/0080_blocks/blocks1.tmplt 01ed8a0c6b20e21e0902774fe926d7c1abb5557e
@@ -0,0 +1,13 @@
+ligne1
+@@TABLE@@
+ ---
+ partie commune 1
+ partie commune 2
+ @@BEGIN@@
+ dans la table @_VAR3_@
+ @@SECTION@@
+ in the table @_VAR3_@
+ @@END@@
+ partie commune 3
+@@END_TABLE@@
+ligne2
============================================================
--- harness/sources/templates_parser/regtests/tests/0080_blocks/test.out 58365e6ae483fd84f79005abf8948a0b5ebe5695
+++ harness/sources/templates_parser/regtests/tests/0080_blocks/test.out 58365e6ae483fd84f79005abf8948a0b5ebe5695
@@ -0,0 +1,17 @@
+ligne1
+ ---
+ partie commune 1
+ partie commune 2
+ dans la table one
+ partie commune 3
+ ---
+ partie commune 1
+ partie commune 2
+ in the table two
+ partie commune 3
+ ---
+ partie commune 1
+ partie commune 2
+ dans la table three
+ partie commune 3
+ligne2
============================================================
--- harness/sources/templates_parser/regtests/tests/0080_blocks/test.py 95caca2c416cf5552f80ab0aef2dc8753ab87bd8
+++ harness/sources/templates_parser/regtests/tests/0080_blocks/test.py 95caca2c416cf5552f80ab0aef2dc8753ab87bd8
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["blocks1.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0081_blocks/blocks2.tmplt 71c3f9bf4af540936ce390339ac0d142f0b08b4f
+++ harness/sources/templates_parser/regtests/tests/0081_blocks/blocks2.tmplt 71c3f9bf4af540936ce390339ac0d142f0b08b4f
@@ -0,0 +1,18 @@
+ligne1
+@@TABLE@@
+ ---
+ partie commune 1
+ partie commune 2
+ @@BEGIN@@
+ dans la table @_VAR3_@
+ @@SECTION@@
+ in the table @_VAR3_@
+ @@END@@
+ partie commune 3
+ @@BEGIN@@
+ dans la table "@_VAR1_@"
+ @@SECTION@@
+ in the table "@_VAR1_@"
+ @@END@@
+@@END_TABLE@@
+ligne2
============================================================
--- harness/sources/templates_parser/regtests/tests/0081_blocks/test.out 81073b53af6365b50a6fc519542734bb8b902dec
+++ harness/sources/templates_parser/regtests/tests/0081_blocks/test.out 81073b53af6365b50a6fc519542734bb8b902dec
@@ -0,0 +1,20 @@
+ligne1
+ ---
+ partie commune 1
+ partie commune 2
+ dans la table one
+ partie commune 3
+ dans la table "a value"
+ ---
+ partie commune 1
+ partie commune 2
+ in the table two
+ partie commune 3
+ in the table "a value"
+ ---
+ partie commune 1
+ partie commune 2
+ dans la table three
+ partie commune 3
+ dans la table "a value"
+ligne2
============================================================
--- harness/sources/templates_parser/regtests/tests/0081_blocks/test.py c354d3f5f9a213ed2fb3cb492e88d074be7f124b
+++ harness/sources/templates_parser/regtests/tests/0081_blocks/test.py c354d3f5f9a213ed2fb3cb492e88d074be7f124b
@@ -0,0 +1,3 @@
+from test_support import *
+
+run('testme', ["blocks2.tmplt"])
============================================================
--- harness/sources/templates_parser/regtests/tests/0082_blocks/blocks3.tmplt 5bab2258ddb4e52920fc34299db075d04d5b9431
+++ harness/sources/templates_parser/regtests/tests/0082_blocks/blocks3.tmplt 5bab2258ddb4e52920fc34299db075d04d5b9431
@@ -0,0 +1,19 @@
+ligne1
+@@TABLE@@
+ ---
+ partie commune 1
+ partie commune 2
+ @@BEGIN@@
+ dans la table @_VAR3_@
+