* read subr INBASIC, INBASIC.UV to create code-snippets, rocket-mvbasic/.rmv/documentation/universe/custom.json + subrname.md *------------ *------------ IN_VSC_SUBR2SNIP IN_VSC_SUBR2SNIP IN_VSC_SUBR2SNIP IN_VSC_SUBR2SNIP IN_VSC_SUBR2SNIP openpath '/dos/commun/efv/vsc.md' to F.MD else stop 201,'dos\commun\efv\vsc.md' open 'INBASIC.UV' to F then gosub ONEF open 'INBASIC' to F then gosub ONEF CRT 'DONE' stop *-------------------------------------------- ONEF: S=''; select F to S objsnip = '' objsig = '' loop while readnext K from S do gosub ONER repeat write '{':convert(@am,',',objsig):'}' on F.MD,FILEINFO(F,1):'_custom.json' write '{':convert(@am,',',objsnip):'}' on F.MD,FILEINFO(F,1):'.code-snippets' CRT 'DONE ':FILEINFO(F,1) return ONER: SUBR.ARGS = ''; SUBR.NAME = K; LSTART = 0; TXT = '' read R from F, K else return loop remove L from R setting EOS L = trim(L) begin case case L = ''; null case L[1, 1] = '*' and convert('*-', '', L) = ''; null ;* skip if the line is a separator *------------------------ case L[1, 1] = '*'; TXT<-1> = L; case field(upcase(L), ' ', 1) = 'SUBROUTINE' SUBR.NAME = L[col2()+1, 999] SUBR.ARGS = field(field(SUBR.NAME, '(', 2), ')', 1) if SUBR.ARGS # '' then SUBR.NAME = SUBR.NAME[1, index(SUBR.NAME, '(', 1) - 1] case 1; exit end case while EOS do repeat SUBR.NAME = K crt K, SUBR.NAME, SUBR.ARGS loop remove L from TXT setting eos *Rcrt L while eos do repeat * BUILD SNIPPET obj = '"ID":{"prefix":"PREFIX", "description":"DESCRIPTION","body": ["BODY"]}' id = convert('._', '', upcase(SUBR.NAME)) : '-SUBR' obj = change(obj, "ID", id) obj = change(obj, "PREFIX", field(id, '-', 1)) ;* snippet prefix are subr name without .-_ body = 'CALL ' : upcase(SUBR.NAME) if SUBR.ARGS # '' then args = convert(',',@am,SUBR.ARGS) newargs = '' for i = 1 to dcount(args, @am) newargs<-1> = '${' : i : ':' : args : '}' next i newargs = convert(@am, ",", newargs) body := '(' : newargs : ')' end obj = change(obj, "BODY", body) x = CHANGE(CONVERT('\"','',TXT),@AM,'\n') call IN.OEM.TO.UTF(x) obj = change(obj,"DESCRIPTION",x) objsnip<-1> = obj * BUILD DOCUMENTATION SIGNATURE obj = '"ID":{"brief":"BRIEF", "detail":"DETAIL" SIGNATURE}' obj = change(obj, "ID", upcase(SUBR.NAME)) obj = change(obj, 'BRIEF', SUBR.NAME : (if SUBR.ARGS # '' then '(' : SUBR.ARGS : ')' else '')) obj = change(obj, 'DETAIL', downcase(SUBR.NAME) : '.md') obj = change(obj, 'SIGNATURE', (if SUBR.ARGS # '' then ',':dquote('signature'):':':quote(SUBR.ARGS) else '') ) objsig<-1> = obj * BUILD DOCUMENTATION .MD MD = '' MD<-1> = '**':SUBR.NAME:'**' : (if SUBR.ARGS # '' then '(' : SUBR.ARGS : ')' else ''):' ' TXT=TXT loop remove L from TXT setting eos CALL IN.OEM.TO.UTF(L) if L[1, 1] = '*' then L[1, 1] = '' L = TRIM(L) IF L[1] = ':' THEN L = '# ':L ;* turn to emphaized if finish by : IF FIELD(L,' ',1) MATCHES "0N'/'2N'/'0N" THEN L='- ':L ;* if line start with a date it's history of modification MD<-1> = L:' ' ;* force line feed while eos do repeat WRITE MD ON F.MD,downcase(SUBR.NAME) : '.md' return