root/lang/hsp/misc/hsp2hs/mod_hsp2hs.hsp @ 13371

Revision 13371, 6.2 kB (checked in by fujidig, 5 years ago)

インデントをタブに統一

  • Property svn:executable set to *
Line 
1/**
2 * mod_hsp2hs
3 * HSP �X�N���v�g�����ߍ��݃h�L�������g����s �t�@�C���𐶐����郂�W���[��
4 * @author fujidig
5 * @date 2008/06/05
6 * @ver 1.0.1
7 */
8
9#ifndef mod_hsp2hs
10#include "mod_strutils.hsp"
11
12#module mod_hsp2hs
13
14// TODO : url, note, port, portinf, sample �͕����s�̎w���”\�ɂ���#enum TAG_AUTHOR = 0
15#enum TAG_DATE
16#enum TAG_VER
17#enum TAG_URL
18#enum TAG_NOTE
19#enum TAG_TYPE
20#enum TAG_GROUP
21#enum TAG_PORT
22#enum TAG_PORTINF
23#enum TAG_SAMPLE
24#enum TAG_MAX
25
26#deffunc doc_analyze
27        summary = ""
28        inst = ""
29        dprm_names = ""
30        dprm_summaries = ""
31        dprms_cnt = 0
32        hrefs = ""
33        hrefs_cnt = 0
34
35        sdim tags,, TAG_MAX
36
37        is_tag_started = 0 // @tag ���n�܂���� / @tag ���n�܂�Ă��������͎󂯕t���Ȃ�
38
39        docptr = 0
40        repeat
41                getstr dln, doc, docptr
42                if strsize == 0 : break
43                docptr += strsize
44                dlnptr = 0
45
46                dlnptr += spnspace(dln, dlnptr)
47                if peek(dln, dlnptr) == 0 : continue
48
49                if is_tag_started == 0 & peek(dln, dlnptr) != '@' {
50                        // �O���X�y�[�X���Ă��܂��d�l���ƃX�N���v�g��������ɖ����H�i�X�y�[�X�ƃ^�u�̍��ʉ�����΂����H�j
51                        astr = strmid(dln, dlnptr, 9999)
52                        stripstr astr
53                        if summary == "" {
54                                summary = astr
55                        } else {
56                                if inst == "" {
57                                        inst = astr
58                                } else {
59                                        inst += "\n" + astr
60                                }
61                        }
62                        continue
63                }
64
65                if peek(dln, dlnptr) != '@' : continue
66                is_tag_started = 1
67                dlnptr ++ // '@'
68                ;dlnptr += spnspace(dln, dlnptr)
69                dlnptr += scanident(dln, dlnptr, tag)
70                dlnptr += spnspace(dln, dlnptr)
71
72                switch tag
73                case "param"
74                        dlnptr += scanident(dln, dlnptr, dprm_names.dprms_cnt)
75                        dlnptr += spnspace(dln, dlnptr)
76                        dprm_summaries.dprms_cnt = strmid(dln, dlnptr, 9999)
77                        stripstr dprm_summaries.dprms_cnt
78                        dprms_cnt ++
79                        swbreak
80                case "href"
81                        hrefs.hrefs_cnt = strmid(dln, dlnptr, 9999)
82                        stripstr hrefs.hrefs_cnt
83                        hrefs_cnt ++
84                        swbreak
85                default
86                        i = -1
87                        repeat TAG_MAX
88                                if tag_names.cnt == tag : i = cnt : break
89                        loop
90                        if i == -1 : swbreak
91                        tags.i = strmid(dln, dlnptr, 9999)
92                swend
93        loop
94        return
95
96/**
97 * HSP �X�N���v�g�����ߍ��݃h�L�������g����s �t�@�C���𐶐�
98 * �ϐ� src �Ɋi�[���ꂽ HSP �X�N���v�g�̕����񂩂疄�ߍ��݃h�L�������g����A hs �t�@�C���֕ϊ����܂��B
99 * hs �t�@�C���̓��͕ϐ� dest �Ɋi�[���܂��B
100 * @params src  HSP �X�N���v�g�̕�����ϐ�
101 * @params dest ���ʂ�hs �t�@�C���̓���[������
102 */
103#deffunc hsp2hs var src, var dest
104        if inited == 0 { // ����                inited = 1
105                tag_names = "author", "date", "ver", "url", "note", "type", "group", "port", "portinf", "sample"
106        }
107        dest = ""
108        srcptr_n = 0
109       
110#enum STATUS_DEFAULT = 1
111#enum STATUS_DOC1 // ; ==hspmodule== �` ; ==/hspmodule==
112#enum STATUS_DOC2 // /** �` */
113#enum STATUS_DOCEND // �h�L�������g�I��
114        status = STATUS_DEFAULT
115        doc_start_lineno = -1
116       
117        repeat
118                srcptr = srcptr_n
119                getstr ln, src, srcptr
120                if strsize == 0 & status != STATUS_DOCEND : break
121                srcptr_n = srcptr + strsize
122                lnptr = 0
123               
124*redo
125               
126                if status == STATUS_DEFAULT | status == STATUS_DOC1 {
127                        lnptr += spnspace(ln, lnptr)
128                        if peek(ln, lnptr) != ';' {
129                                status = STATUS_DEFAULT
130                        } else {
131                                lnptr ++
132                                lnptr += spnspace(ln, lnptr)
133                                if status == STATUS_DOC1 {
134                                        if strmid(ln, lnptr, 14) == "==/hspmodule==" {
135                                                status = STATUS_DOCEND
136                                                continue
137                                        }
138                                        doc += strmid(ln, lnptr, 9999) + "\n"
139                                        continue
140                                }
141                                if strmid(ln, lnptr, 13) == "==hspmodule==" {
142                                        doc = ""
143                                        doc_start_lineno = cnt
144                                        status = STATUS_DOC1
145                                        continue
146                                }
147                        }
148                }
149                if status == STATUS_DEFAULT | status == STATUS_DOC2 {
150                        lnptr += spnspace(ln, lnptr)
151                        if status == STATUS_DOC2 {
152                                ins = instr(ln, lnptr, "*/")
153                               
154                                if peek(ln, lnptr) == '*' & ins != 0 {
155                                        lnptr ++
156                                        ins --
157                                        sz = spnspace(ln, lnptr)
158                                        lnptr += sz
159                                        ins -= sz
160                                }
161                                sz = 9999
162                                if ins >= 0 : sz = ins
163                                doc += strmid(ln, lnptr, sz) + "\n"
164                                if ins >= 0 : status = STATUS_DOCEND
165                                continue
166                        }
167                        if strmid(ln, lnptr, 3) == "/**" {
168                                lnptr += 3
169                                doc = ""
170                                doc_start_lineno = cnt
171                                status = STATUS_DOC2
172                                goto *redo
173                        }
174                }
175                if status == STATUS_DEFAULT : continue
176
177                // �h�L�������g���
178                if status != STATUS_DOCEND : continue
179                doc_analyze
180                status = STATUS_DEFAULT
181
182                // �����
183
184                if doc_start_lineno == 0 {
185                        // �t�@�C���擪
186                        dest += "%dll\n"
187                        dest += summary + "\n"
188                        dest += "\n"
189                        repeat TAG_MAX
190                                if peek(tags.cnt) == 0 : continue
191                                dest += "%" + tag_names.cnt + "\n"
192                                dest += tags.cnt + "\n"
193                                dest += "\n"
194                        loop
195                        continue
196                }
197
198                lnptr = spnspace(ln, lnptr)
199                if peek(ln, lnptr) != '#' : continue
200                lnptr ++
201                lnptr += spnspace(ln, lnptr)
202                lnptr += scanident(ln, lnptr, ident)
203                if ident != "deffunc" & ident != "defcfunc" : continue
204                ctype = ident == "defcfunc"
205                lnptr += spnspace(ln, lnptr)
206                lnptr += scanident(ln, lnptr, funcname)
207                lnptr += spnspace(ln, lnptr)
208
209                // �����X�g���
210                prm_types = ""
211                prm_names = ""
212                prms_cnt = 0
213
214                repeat
215                        if cnt != 0 {
216                                if peek(ln, lnptr) != ',' : break
217                                lnptr ++
218                        }
219                        lnptr += spnspace(ln, lnptr)
220                        sz = scanident(ln, lnptr, prm_type)
221                        if sz == 0 : break
222                        lnptr += sz
223                        lnptr += spnspace(ln, lnptr)
224                        sz = scanident(ln, lnptr, prm_name)
225                        if sz == 0 : break
226                        lnptr += sz
227                        lnptr += spnspace(ln, lnptr)
228                        if prm_type == "local" : continue
229                        prm_types.cnt = prm_type
230                        prm_names.cnt = prm_name
231                        prms_cnt ++
232                loop
233
234                // TODO : �h�L�������g�̃p�����[�^���Ǝ�ۂ̉����X�g��r���Ĉ����ȂLjႦ�Όx��
235
236                prm = ""
237                prm_list = ""
238                repeat dprms_cnt ;limit(dprms_cnt, 0, prms_cnt)
239                        if cnt {
240                                prm += ", "
241                                prm_list += "\n"
242                        }
243                        prm += dprm_names.cnt
244                        prm_list += dprm_names.cnt + "\t: " + dprm_summaries.cnt
245                loop
246                if ctype : prm = "(" + prm + ")"
247
248                dest += "%index\n"
249                dest += funcname + "\n"
250                dest += summary + "\n"
251                dest += "\n"
252                dest += "%prm\n"
253                dest += prm + "\n"
254                dest += prm_list + "\n"
255                dest += "\n"
256                dest += "%inst\n"
257                dest += inst + "\n"
258                dest += "\n"
259                if hrefs_cnt {
260                        dest += "%href\n"
261                        repeat hrefs_cnt
262                                dest += hrefs.cnt + "\n"
263                        loop
264                        dest += "\n"
265                }
266                repeat TAG_MAX
267                        if peek(tags.cnt) == 0 : continue
268                        dest += "%" + tag_names.cnt + "\n"
269                        dest += tags.cnt + "\n"
270                        dest += "\n"
271                loop
272        loop
273        return
274#global
275#endif
Note: See TracBrowser for help on using the browser.