dnl PSPP - a program for statistical analysis. dnl Copyright (C) 2017 Free Software Foundation, Inc. dnl dnl This program is free software: you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation, either version 3 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program. If not, see . dnl AT_BANNER([DEFINE]) AT_SETUP([simple macro expansion]) AT_DATA([define.sps], [dnl DEFINE !macro() a b c d e f g h. i j k l 1,2,3,4. 5+6+7. m(n,o). "a" "b" "c" 'a' 'b' 'c'. "x "" y". !ENDDEFINE. DEBUG EXPAND. !macro ]) AT_CHECK([pspp --testing-mode define.sps], [0], [dnl a b c d e f g h. i j k l 1, 2, 3, 4. 5 + 6 + 7. m(n, o). "a" "b" "c" 'a' 'b' 'c'. "x "" y". ]) AT_CLEANUP AT_SETUP([macro expansion with arguments]) AT_DATA([define.sps], [dnl DEFINE !title(!positional !tokens(1)) !1 !ENDDEFINE. DEFINE !t1(!positional !tokens(1)) t1 (!1) !ENDDEFINE. DEFINE !t2(!positional !tokens(2)) t2 (!1) !ENDDEFINE. DEFINE !ce(!positional !charend('/')) ce (!1) !ENDDEFINE. DEFINE !ce2(!positional !charend('(') /!positional !charend(')')) ce2 (!1, !2) !ENDDEFINE. DEFINE !e(!positional !enclose('{','}')) e (!1) !ENDDEFINE. DEFINE !cmd(!positional !cmdend) cmd(!1) !ENDDEFINE. DEFINE !cmd2(!positional !cmdend /!positional !tokens(1)) cmd2(!1, !2) !ENDDEFINE. DEBUG EXPAND. !title "!TOKENS(1) argument." !t1 a. !t1 b. !t1 a b. !title "!TOKENS(2) argument." !t2 a b. !t2 b c d. !title "!CHAREND argument." !ce/. !ce x/. !ce x y/. !ce x y z/. !title "Two !CHAREND arguments." !ce2 x(y). !ce2 1 2 3 4(). !title "!ENCLOSE argument." !e {}. !e {a}. !e {a b}. !title "!CMDEND argument." !cmd 1 2 3 4. !cmd2 5 6. 7. ]) AT_CHECK([pspp --testing-mode define.sps], [0], [dnl "!TOKENS(1) argument." t1(a) t1(b) t1(a) note: unexpanded token "b" "!TOKENS(2) argument." t2(a b) t2(b c) note: unexpanded token "d" "!CHAREND argument." ce( ) ce(x) ce(x y) ce(x y z) "Two !CHAREND arguments." ce2(x, y) ce2(1 2 3 4, ) "!ENCLOSE argument." e( ) e(a) e(a b) "!CMDEND argument." cmd(1 2 3 4) cmd2(5 6, 7) ]) AT_CLEANUP