xref: /Universal-ctags/main/CommonPrelude.c (revision 7decd215b04dd404c7eb4be98d121fb18063323c)
1431a587eSMasatake YAMATO const char ctagsCommonPrelude []=
2431a587eSMasatake YAMATO "%\n"
3431a587eSMasatake YAMATO "% Copyright (c) 2021, Masatake YAMATO\n"
4431a587eSMasatake YAMATO "% Copyright (c) 2021, Red Hat, Inc.\n"
5431a587eSMasatake YAMATO "%\n"
6431a587eSMasatake YAMATO "% This source code is released for free distribution under the terms of the\n"
7431a587eSMasatake YAMATO "% GNU General Public License version 2 or (at your option) any later version.\n"
8431a587eSMasatake YAMATO "%\n"
9431a587eSMasatake YAMATO "\n"
10431a587eSMasatake YAMATO "%\n"
11431a587eSMasatake YAMATO "% The documentation table\n"
12431a587eSMasatake YAMATO "%\n"
13431a587eSMasatake YAMATO "\n"
14431a587eSMasatake YAMATO "% __PROCDOCS:dict<proc:name, doc:string>\n"
15431a587eSMasatake YAMATO "/__procdocs 30 dict def\n"
16431a587eSMasatake YAMATO "\n"
17431a587eSMasatake YAMATO "% name value __BDEF -\n"
18431a587eSMasatake YAMATO "/__bdef { bind def }  bind def\n"
19431a587eSMasatake YAMATO "\n"
20431a587eSMasatake YAMATO "% doc:string key:name any:val __DOCDEF -\n"
21431a587eSMasatake YAMATO "/__bddef {\n"
22431a587eSMasatake YAMATO "    1 index exch __bdef\n"
23431a587eSMasatake YAMATO "    exch __procdocs 3 1 roll put\n"
24431a587eSMasatake YAMATO "} __bdef\n"
25431a587eSMasatake YAMATO "\n"
26431a587eSMasatake YAMATO "\n"
27431a587eSMasatake YAMATO "%\n"
28431a587eSMasatake YAMATO "% procedures\n"
29431a587eSMasatake YAMATO "%\n"
30431a587eSMasatake YAMATO "(any n:int _NDUP any1 ... anyn)\n"
31431a587eSMasatake YAMATO "/_ndup { { dup } repeat } __bddef\n"
32431a587eSMasatake YAMATO "\n"
33431a587eSMasatake YAMATO "(x:any x:any _DEDUP x:any\n"
34431a587eSMasatake YAMATO " x:any y:any _DEDUP x:any y:any)\n"
35431a587eSMasatake YAMATO "/_dedup {\n"
36431a587eSMasatake YAMATO "    count 1 gt {\n"
37431a587eSMasatake YAMATO "        2 copy eq {\n"
38431a587eSMasatake YAMATO "            pop\n"
39431a587eSMasatake YAMATO "        } if\n"
40431a587eSMasatake YAMATO "    } if\n"
41431a587eSMasatake YAMATO "} __bddef\n"
42431a587eSMasatake YAMATO "\n"
43431a587eSMasatake YAMATO "(space:int space:int _DEDUP_SPACES space:int\n"
44431a587eSMasatake YAMATO " otherthanspace:int space:int _DEDUP_SPACES otherthanspace:int space:int)\n"
45431a587eSMasatake YAMATO "/_dedup_spaces {\n"
46431a587eSMasatake YAMATO "    count 0 gt {\n"
47431a587eSMasatake YAMATO "        dup ?\\_ eq {\n"
48431a587eSMasatake YAMATO "            _dedup\n"
49431a587eSMasatake YAMATO "        } if\n"
50431a587eSMasatake YAMATO "    } if\n"
51431a587eSMasatake YAMATO "} __bddef\n"
52431a587eSMasatake YAMATO "\n"
53431a587eSMasatake YAMATO "% 32 32 _dedup_spaces pstack clear (---) ==\n"
54431a587eSMasatake YAMATO "% 32 41 _dedup_spaces pstack clear (---) ==\n"
55431a587eSMasatake YAMATO "% 41 32 _dedup_spaces pstack clear (---) ==\n"
56431a587eSMasatake YAMATO "% 32 _dedup_spaces pstack clear (---) ==\n"
57431a587eSMasatake YAMATO "% 41 _dedup_spaces pstack clear (---) ==\n"
58431a587eSMasatake YAMATO "% quit\n"
59431a587eSMasatake YAMATO "\n"
60431a587eSMasatake YAMATO "/__buildstring {\n"
61431a587eSMasatake YAMATO "    {\n"
62431a587eSMasatake YAMATO "	    counttomark dup 1 eq {\n"
63431a587eSMasatake YAMATO "	        pop exch pop\n"
64431a587eSMasatake YAMATO "	        exit\n"
65431a587eSMasatake YAMATO "	    } {\n"
66431a587eSMasatake YAMATO "	        -1 roll 1 index exch _putlast!\n"
67431a587eSMasatake YAMATO "	    } ifelse\n"
68431a587eSMasatake YAMATO "    } loop\n"
69431a587eSMasatake YAMATO "} __bdef\n"
70431a587eSMasatake YAMATO "\n"
71431a587eSMasatake YAMATO "(mark char:int|substring:string... _BUILDSTRING string)\n"
72431a587eSMasatake YAMATO "/_buildstring {\n"
73431a587eSMasatake YAMATO "    0 string __buildstring\n"
74431a587eSMasatake YAMATO "} __bddef\n"
75431a587eSMasatake YAMATO "\n"
76431a587eSMasatake YAMATO "(string char:int|string _PUTLAST! -)\n"
77431a587eSMasatake YAMATO "/_putlast!  {\n"
78431a587eSMasatake YAMATO "    1 index length exch\n"
79431a587eSMasatake YAMATO "    dup type /integertype eq {\n"
80431a587eSMasatake YAMATO "	    put\n"
81431a587eSMasatake YAMATO "    } {\n"
82431a587eSMasatake YAMATO "	    putinterval\n"
83431a587eSMasatake YAMATO "    } ifelse\n"
84431a587eSMasatake YAMATO "} __bddef\n"
85431a587eSMasatake YAMATO "\n"
86431a587eSMasatake YAMATO "(target:string fromto:str _TR! -)\n"
87431a587eSMasatake YAMATO "/_tr! {\n"
88431a587eSMasatake YAMATO "    %\n"
89431a587eSMasatake YAMATO "    % () is not allowed.\n"
90431a587eSMasatake YAMATO "    % The reason must be be documented.\n"
91431a587eSMasatake YAMATO "    %\n"
92431a587eSMasatake YAMATO "    0 string\n"
93431a587eSMasatake YAMATO "    % str [int<from> int<to>] str'\n"
94431a587eSMasatake YAMATO "    2 index {\n"
95431a587eSMasatake YAMATO "	% str [int<from> int<to>] str' int<chr>\n"
96431a587eSMasatake YAMATO "	    dup 3 index 0 get\n"
97431a587eSMasatake YAMATO "	% str [int<from> int<to>] str' int<chr> int<chr> int<from>\n"
98431a587eSMasatake YAMATO "	    eq {% str [int<from> int<to>] str' int<chr>\n"
99431a587eSMasatake YAMATO "	        pop\n"
100431a587eSMasatake YAMATO "	        dup 2 index 1 get _putlast!\n"
101431a587eSMasatake YAMATO "	    } {% str [int<from> int<to>] str' int<chr>\n"
102431a587eSMasatake YAMATO "	        1 index exch _putlast!\n"
103431a587eSMasatake YAMATO "	    } ifelse\n"
104431a587eSMasatake YAMATO "    } forall\n"
105431a587eSMasatake YAMATO "    % str [int<from> int<to>] str'\n"
106431a587eSMasatake YAMATO "    exch pop\n"
107431a587eSMasatake YAMATO "    0 exch putinterval\n"
108431a587eSMasatake YAMATO "} __bddef\n"
109431a587eSMasatake YAMATO "\n"
110431a587eSMasatake YAMATO "(string _NORMALIZE_SPACES! -)\n"
111431a587eSMasatake YAMATO "/_normalize_spaces! {\n"
112431a587eSMasatake YAMATO "    dup\n"
113431a587eSMasatake YAMATO "    dup (\\n ) _tr!\n"
114431a587eSMasatake YAMATO "    dup (\\t ) _tr!\n"
115431a587eSMasatake YAMATO "    dup (\\r ) _tr!\n"
116431a587eSMasatake YAMATO "    dup (\\f ) _tr!\n"
117431a587eSMasatake YAMATO "    dup (\\v ) _tr!\n"
118431a587eSMasatake YAMATO "    mark exch { _dedup_spaces } forall _buildstring\n"
119431a587eSMasatake YAMATO "    exch copy pop\n"
120431a587eSMasatake YAMATO "} __bddef\n"
121431a587eSMasatake YAMATO "\n"
122431a587eSMasatake YAMATO "% /x mark 40 (a) 32 32 10 (b) 10 10 9 9 (xyz) 9 9 41 _buildstring def\n"
123431a587eSMasatake YAMATO "% x _normalize_spaces! x pstack\n"
124d1e4395eSMasatake YAMATO "\n"
125d1e4395eSMasatake YAMATO "(tag:int _SCOPEREF -)\n"
126d1e4395eSMasatake YAMATO "/_scoperef {\n"
127d1e4395eSMasatake YAMATO "    _scopetop not { 0 } if scope:\n"
128d1e4395eSMasatake YAMATO "} __bddef\n"
129d1e4395eSMasatake YAMATO "\n"
130d1e4395eSMasatake YAMATO "(tag:int _SCOPEPUSH -)\n"
131d1e4395eSMasatake YAMATO "/_scopepush {\n"
132d1e4395eSMasatake YAMATO "    dup _scoperef _scopeset\n"
133d1e4395eSMasatake YAMATO "} __bddef\n"
134b8803c56SMasatake YAMATO "\n"
135b8803c56SMasatake YAMATO "(string _ISSTRING string true\n"
136b8803c56SMasatake YAMATO " any:!string _ISSTRING false)\n"
137b8803c56SMasatake YAMATO "/_isstring {\n"
138b8803c56SMasatake YAMATO "    dup type /stringtype eq {\n"
139b8803c56SMasatake YAMATO "        true\n"
140b8803c56SMasatake YAMATO "    } {\n"
141b8803c56SMasatake YAMATO "        pop false\n"
142b8803c56SMasatake YAMATO "    } ifelse\n"
143b8803c56SMasatake YAMATO "} __bddef\n"
144c22d990cSMasatake YAMATO "\n"
145c22d990cSMasatake YAMATO "(array key _AMEMBER true|fales)\n"
146c22d990cSMasatake YAMATO "/_amember {\n"
147c22d990cSMasatake YAMATO "    false 3 1 roll\n"
148c22d990cSMasatake YAMATO "    % false array key\n"
149c22d990cSMasatake YAMATO "    exch {\n"
150c22d990cSMasatake YAMATO "        % false key elt\n"
151c22d990cSMasatake YAMATO "        1 index\n"
152c22d990cSMasatake YAMATO "        % false key elt key\n"
153c22d990cSMasatake YAMATO "        eq {\n"
154c22d990cSMasatake YAMATO "            % false key\n"
155c22d990cSMasatake YAMATO "            exch pop true exch\n"
156c22d990cSMasatake YAMATO "            exit\n"
157c22d990cSMasatake YAMATO "        } if\n"
158c22d990cSMasatake YAMATO "        % false key\n"
159c22d990cSMasatake YAMATO "    } forall\n"
160c22d990cSMasatake YAMATO "    pop\n"
161c22d990cSMasatake YAMATO "} __bddef\n"
162*7decd215SMasatake YAMATO "\n"
163*7decd215SMasatake YAMATO "(array key _AINDEX nth:int true\n"
164*7decd215SMasatake YAMATO " array key _AINDEX false)\n"
165*7decd215SMasatake YAMATO "/_aindex {\n"
166*7decd215SMasatake YAMATO "    0 3 1 roll\n"
167*7decd215SMasatake YAMATO "    % idx array key\n"
168*7decd215SMasatake YAMATO "    exch {\n"
169*7decd215SMasatake YAMATO "        % idx key elt\n"
170*7decd215SMasatake YAMATO "        1 index\n"
171*7decd215SMasatake YAMATO "        eq {\n"
172*7decd215SMasatake YAMATO "            % idx key\n"
173*7decd215SMasatake YAMATO "            pop true exit\n"
174*7decd215SMasatake YAMATO "        } {\n"
175*7decd215SMasatake YAMATO "            % idx key\n"
176*7decd215SMasatake YAMATO "            exch 1 add exch\n"
177*7decd215SMasatake YAMATO "        } ifelse\n"
178*7decd215SMasatake YAMATO "    } forall\n"
179*7decd215SMasatake YAMATO "    dup true ne { pop pop false } if\n"
180*7decd215SMasatake YAMATO "} __bddef\n"
181431a587eSMasatake YAMATO ;
182