3 docSlicesFor
:= method(name
,
4 contents
slicesBetween("//" .. name
.. " ", "\n") map(strip
) map(s
,
5 i
:= s
findSeq(" ") + 1
6 i1
:= s
findSeq("(", i
)
7 i2
:= s
findSeq(" ", i
)
8 if(i1
and i1
< i2
, i2
:= s
findSeq(")", i
))
9 if(i2
, s
atInsertSeq(i2
+ 1, "\n"))
10 ) appendSeq(contents
slicesBetween("/*" .. name
.. " ", "*/"))
14 contents
slicesBetween("//doc ", "\n") map(strip
) map(s
,
15 i
:= s
findSeq(" ") + 1
16 i1
:= s
findSeq("(", i
)
17 i2
:= s
findSeq(" ", i
)
18 if(i1
and i1
< i2
, i2
:= s
findSeq(")", i
))
19 if(i2
, s
atInsertSeq(i2
+ 1, "\n"))
20 ) appendSeq(contents
slicesBetween("/*doc ", "*/"))
23 metadocSlices
:= method(
24 contents
slicesBetween("/*metadoc ", "*/") appendSeq(contents
slicesBetween("//metadoc ", "\n"))
28 DocsExtractor
:= Object clone do(
30 self folder
:= Directory clone
31 self outFile
:= File clone
34 setPath
:= method(path
,
35 folder
setPath(path
) createSubdirectory("docs")
36 outFile
setPath(Path
with(path
, "docs/docs.txt"))
44 writeln("extracting io comment code from:")
46 sourceFiles
foreach(file
,
47 writeln(" ", file name
, " ")
48 file docSlices
foreach(d
,
50 header := d beforeSeq("\n") strip
51 protoName := header beforeSeq(" ")
52 slotName := header afterSeq(" ")
53 comment := d afterSeq("\n")
55 outFile
write("doc ", d strip
, "\n------\n")
58 file metadocSlices
foreach(d
,
59 outFile
write("metadoc ", d strip
, "\n------\n")
65 sourceFiles
:= method(cFiles
appendSeq(ioFiles
))
66 //sourceFiles
:= method(ioFiles
)
69 folder
folderNamed("source") files
select(file
,
70 file name
beginsWithSeq("Io") and(
71 file name
containsSeq("Init") not
) and(
72 file name pathExtension
== "c")
76 ioFiles
:= method(folder
folderNamed("io") filesWithExtension("io"))
79 de
:= DocsExtractor
clone
80 de
setPath(System args
at(1))
81 if(System args
at(3) == "clean", de clean
, de extract
)