Changeset 13251 for lang/hsp

Show
Ignore:
Timestamp:
06/05/08 01:55:58 (5 years ago)
Author:
fujidig
Message:

「; ==hspmodule== 〜 ; ==/hspmodule==」のような埋め込みドキュメントの別の記法に対応。

Location:
lang/hsp/misc/hsp2hs
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/hsp/misc/hsp2hs/main.hsp

    r13099 r13251  
    11#include "mod_hsp2hs.hsp" 
    22 
    3 notesel hsp 
    4 noteload "mod_strutils.hsp" 
     3        notesel hsp 
     4        noteload "mod_strutils.hsp" 
     5        hs = "" 
     6        mesbox hsp, 320, 460 
     7        pos 320, 0 
     8        mesbox hs, 320, 460 
     9        hs_objid = stat 
     10        objsize 640, 20 
     11        pos 0 
     12        button gosub ">> Run! >>", *run_hsp2hs 
     13        gosub *run_hsp2hs 
     14        stop     
    515 
    6 hsp2hs hsp, hs 
    7 mesbox hsp, 320, 480 
    8 pos 320, 0 
    9 mesbox hs, 320, 480 
     16*run_hsp2hs 
     17        hsp2hs hsp, hs 
     18        objprm hs_objid, hs 
     19        return 
  • lang/hsp/misc/hsp2hs/mod_hsp2hs.hsp

    r13099 r13251  
    33 * HSP �X�N���v�g�����ߍ��݃h�L�������g����s �t�@�C���𐶐����郂�W���[�� 
    44 * @author fujidig 
    5  * @date 2008/06/03 
    6  * @ver 1.0.0 
     5 * @date 2008/06/05 
     6 * @ver 1.0.1 
    77 */ 
    88 
     
    2323#enum TAG_SAMPLE 
    2424#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 
    2595 
    2696/** 
     
    37107    dest = "" 
    38108    srcptr_n = 0 
     109     
     110    #enum STATUS_DEFAULT = 12345 
     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     
    39117    repeat 
    40118        srcptr = srcptr_n 
    41119        getstr ln, src, srcptr 
    42         if strsize == 0 : break 
     120        if strsize == 0 & status != STATUS_DOCEND : break 
    43121        srcptr_n = srcptr + strsize 
    44  
    45         // �h�L�������g /** �` */�̎��o�� 
    46         lnptr = spnspace(ln) 
    47         if strmid(ln, lnptr, 3) != "/**" : continue 
    48         lnptr += 3 
    49  
    50         sz = instr(src, srcptr+lnptr, "*/") 
    51         if sz < 0 : break 
    52         doc = strmid(src, srcptr+lnptr, sz) 
    53         srcptr_n = srcptr + lnptr + sz + 2 // 2 == strlen("*/") 
    54         srcptr_n += spnspace(src, srcptr_n) 
    55         s = strmid(src, srcptr_n, 2) 
    56         if s == "\n" { 
    57             srcptr_n += 2 // strlen("\n") 
    58         } else : if peek(s) != 0 { 
    59             // '*/'�ƃX�y�[�X�̌����s���łȂ��� 
    60             // �h�L�������g�Ƃ͔F�������s���܂Ŕ�� 
    61             ins = instr(src, srcptr_n, "\n") 
    62             if ins < 0 : break 
    63             srcptr_n += ins + 2 // strlen("\n") 
    64             continue 
     122        lnptr = 0 
     123        logmes "status = " + status + ", ln = '" + ln +"'" 
     124         
     125        if status == STATUS_DEFAULT | status == STATUS_DOC1 { 
     126                lnptr += spnspace(ln, lnptr) 
     127                if peek(ln, lnptr) != ';' { 
     128                        status = STATUS_DEFAULT 
     129                } else { 
     130                        lnptr ++ 
     131                        lnptr += spnspace(ln, lnptr) 
     132                        if status == STATUS_DOC1 { 
     133                                if strmid(ln, lnptr, 14) == "==/hspmodule==" { 
     134                                        status = STATUS_DOCEND 
     135                                        continue 
     136                                } 
     137                                doc += strmid(ln, lnptr, 9999) + "\n" 
     138                                continue 
     139                        } 
     140                        logmes "strmid(ln, "+lnptr+", 13) = '"+strmid(ln, lnptr, 13) 
     141                        if strmid(ln, lnptr, 13) == "==hspmodule==" { 
     142                                doc = "" 
     143                                doc_start_lineno = cnt 
     144                                status = STATUS_DOC1 
     145                                continue 
     146                        } 
     147                } 
    65148        } 
     149        if status == STATUS_DEFAULT | status == STATUS_DOC2 { 
     150                lnptr += spnspace(ln, lnptr) 
     151                if status == STATUS_DOC2 { 
     152                        if strmid(ln, lnptr, 2) == "*/" { 
     153                                status = STATUS_DOCEND 
     154                                continue 
     155                        } 
     156                        if peek(ln, lnptr) == '*' { 
     157                                lnptr ++ 
     158                                lnptr += spnspace(ln, lnptr) 
     159                        } 
     160                        doc += strmid(ln, lnptr, 9999) + "\n" 
     161                        continue 
     162                } 
     163                if strmid(ln, lnptr, 3) == "/**" { 
     164                        doc = "" 
     165                        doc_start_lineno = cnt 
     166                        status = STATUS_DOC2 
     167                        continue 
     168                } 
     169        } 
     170        if status == STATUS_DEFAULT : continue 
    66171 
    67172        // �h�L�������g��� 
    68         summary = "" 
    69         inst = "" 
    70         dprm_names = "" 
    71         dprm_summaries = "" 
    72         dprms_cnt = 0 
    73         hrefs = "" 
    74         hrefs_cnt = 0 
    75  
    76         sdim tags,, TAG_MAX 
    77  
    78         is_tag_started = 0 // @tag ���n�܂���� / @tag ���n�܂�Ă��������͎󂯕t���Ȃ� 
    79  
    80         docptr = 0 
    81         repeat 
    82             getstr dln, doc, docptr 
    83             if strsize == 0 : break 
    84             docptr += strsize 
    85             dlnptr = 0 
    86  
    87             dlnptr += spnspace(dln, dlnptr) 
    88             if peek(dln, dlnptr) == '*' { 
    89                 // �e�s�擪��* �͂Ƃ肠�����‚��Ă����Ȃ��Ă����d�l�� 
    90                 dlnptr ++ 
    91                 dlnptr += spnspace(dln, dlnptr) 
    92             } 
    93             if peek(dln, dlnptr) == 0 : continue 
    94  
    95             if is_tag_started == 0 & peek(dln, dlnptr) != '@' { 
    96                 // �O���X�y�[�X���Ă��܂��d�l���ƃX�N���v�g��������ɖ����H�i�X�y�[�X�ƃ^�u�̍��ʉ�����΂����H�j 
    97                 astr = strmid(dln, dlnptr, 9999) 
    98                 stripstr astr 
    99                 if summary == "" { 
    100                     summary = astr 
    101                 } else { 
    102                     if inst == "" { 
    103                         inst = astr 
    104                     } else { 
    105                         inst += "\n" + astr 
    106                     } 
    107                 } 
    108                 continue 
    109             } 
    110  
    111             if peek(dln, dlnptr) != '@' : continue 
    112             is_tag_started = 1 
    113             dlnptr ++ // '@' 
    114             ;dlnptr += spnspace(dln, dlnptr) 
    115             dlnptr += scanident(dln, dlnptr, tag) 
    116             dlnptr += spnspace(dln, dlnptr) 
    117  
    118             switch tag 
    119             case "param" 
    120                 dlnptr += scanident(dln, dlnptr, dprm_names.dprms_cnt) 
    121                 dlnptr += spnspace(dln, dlnptr) 
    122                 dprm_summaries.dprms_cnt = strmid(dln, dlnptr, 9999) 
    123                 stripstr dprm_summaries.dprms_cnt 
    124                 dprms_cnt ++ 
    125                 swbreak 
    126             case "href" 
    127                 hrefs.hrefs_cnt = strmid(dln, dlnptr, 9999) 
    128                 stripstr hrefs.hrefs_cnt 
    129                 hrefs_cnt ++ 
    130                 swbreak 
    131             default 
    132                 logmes "tag = "+tag 
    133                 i = -1 
    134                 repeat TAG_MAX 
    135                     if tag_names.cnt == tag : i = cnt : break 
    136                 loop 
    137                 if i == -1 : swbreak 
    138                 tags.i = strmid(dln, dlnptr, 9999) 
    139                 logmes "tags."+i+" = "+tags.i 
    140             swend 
    141         loop 
     173        if status != STATUS_DOCEND : continue 
     174        doc_analyze 
     175        status = STATUS_DEFAULT 
    142176 
    143177        // ����� 
    144178 
    145         if cnt == 0 { 
     179        if doc_start_lineno == 0 { 
    146180            // �t�@�C���擪 
    147181            dest += "%dll\n" 
     
    157191        } 
    158192 
    159         srcptr = srcptr_n 
    160         getstr ln, src, srcptr 
    161         if strsize == 0 : break 
    162         srcptr_n = srcptr + strsize 
    163  
    164         // �R�����g�폜 
    165         ;getstr ln, ln,, ';' 
    166         ;getstr ln, ln,, '/' 
    167  
    168         lnptr = spnspace(ln, 0) 
     193        lnptr = spnspace(ln, lnptr) 
    169194        if peek(ln, lnptr) != '#' : continue 
    170195        lnptr ++