26
26
TSections = array [TSymKind, Rope]
27
27
TDocumentor = object of rstgen.RstGenerator
28
28
modDesc: Rope # module description
29
+ module: PSym
29
30
modDeprecationMsg: Rope
30
31
toc, section: TSections
31
32
indexValFilename: string
@@ -115,9 +116,10 @@ proc getOutFile2(conf: ConfigRef; filename: RelativeFile,
115
116
else :
116
117
result = getOutFile(conf, filename, ext)
117
118
118
- proc newDocumentor* (filename: AbsoluteFile; cache: IdentCache; conf: ConfigRef, outExt: string = HtmlExt): PDoc =
119
+ proc newDocumentor* (filename: AbsoluteFile; cache: IdentCache; conf: ConfigRef, outExt: string = HtmlExt, module: PSym = nil ): PDoc =
119
120
declareClosures()
120
121
new(result )
122
+ result .module = module
121
123
result .conf = conf
122
124
result .cache = cache
123
125
initRstGenerator(result [], (if conf.cmd != cmdRst2tex: outHtml else : outLatex),
@@ -631,8 +633,12 @@ proc genDeprecationMsg(d: PDoc, n: PNode): Rope =
631
633
else :
632
634
doAssert false
633
635
634
- proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind) =
635
- if not isVisible(d, nameNode): return
636
+ type DocFlags = enum
637
+ kDefault
638
+ kForceExport
639
+
640
+ proc genItem(d: PDoc, n, nameNode: PNode, k: TSymKind, docFlags: DocFlags) =
641
+ if (docFlags != kForceExport) and not isVisible(d, nameNode): return
636
642
let
637
643
name = getName(d, nameNode)
638
644
nameRope = name.rope
@@ -848,35 +854,37 @@ proc documentRaises*(cache: IdentCache; n: PNode) =
848
854
if p4 != nil : n.sons[pragmasPos].add p4
849
855
if p5 != nil : n.sons[pragmasPos].add p5
850
856
851
- proc generateDoc* (d: PDoc, n, orig: PNode) =
857
+ proc generateDoc* (d: PDoc, n, orig: PNode, docFlags: DocFlags = kDefault) =
858
+ template genItemAux(skind) =
859
+ genItem(d, n, n[namePos], skind, docFlags)
852
860
case n.kind
853
861
of nkPragma:
854
862
let pragmaNode = findPragma(n, wDeprecated)
855
863
add(d.modDeprecationMsg, genDeprecationMsg(d, pragmaNode))
856
864
of nkCommentStmt: add(d.modDesc, genComment(d, n))
857
865
of nkProcDef:
858
866
when useEffectSystem: documentRaises(d.cache, n)
859
- genItem(d, n, n.sons[namePos], skProc)
867
+ genItemAux( skProc)
860
868
of nkFuncDef:
861
869
when useEffectSystem: documentRaises(d.cache, n)
862
- genItem(d, n, n.sons[namePos], skFunc)
870
+ genItemAux( skFunc)
863
871
of nkMethodDef:
864
872
when useEffectSystem: documentRaises(d.cache, n)
865
- genItem(d, n, n.sons[namePos], skMethod)
873
+ genItemAux( skMethod)
866
874
of nkIteratorDef:
867
875
when useEffectSystem: documentRaises(d.cache, n)
868
- genItem(d, n, n.sons[namePos], skIterator)
869
- of nkMacroDef: genItem(d, n, n.sons[namePos], skMacro)
870
- of nkTemplateDef: genItem(d, n, n.sons[namePos], skTemplate)
876
+ genItemAux( skIterator)
877
+ of nkMacroDef: genItemAux( skMacro)
878
+ of nkTemplateDef: genItemAux( skTemplate)
871
879
of nkConverterDef:
872
880
when useEffectSystem: documentRaises(d.cache, n)
873
- genItem(d, n, n.sons[namePos], skConverter)
881
+ genItemAux( skConverter)
874
882
of nkTypeSection, nkVarSection, nkLetSection, nkConstSection:
875
883
for i in 0 ..< len(n):
876
884
if n.sons[i].kind != nkCommentStmt:
877
885
# order is always 'type var let const':
878
- genItem(d, n.sons [i], n.sons [i].sons [0 ],
879
- succ(skType, ord(n.kind)- ord(nkTypeSection)))
886
+ genItem(d, n[i], n[i][0 ],
887
+ succ(skType, ord(n.kind)- ord(nkTypeSection)), docFlags )
880
888
of nkStmtList:
881
889
for i in 0 ..< len(n): generateDoc(d, n.sons[i], orig)
882
890
of nkWhenStmt:
@@ -887,7 +895,11 @@ proc generateDoc*(d: PDoc, n, orig: PNode) =
887
895
for it in n: traceDeps(d, it)
888
896
of nkExportStmt:
889
897
for it in n:
890
- if it.kind == nkSym: exportSym(d, it.sym)
898
+ if it.kind == nkSym:
899
+ if d.module != nil and d.module == it.sym.owner:
900
+ generateDoc(d, it.sym.ast, orig, kForceExport)
901
+ else :
902
+ exportSym(d, it.sym)
891
903
of nkExportExceptStmt: discard " transformed into nkExportStmt by semExportExcept"
892
904
of nkFromStmt, nkImportExceptStmt: traceDeps(d, n.sons[0 ])
893
905
of nkCallKinds:
0 commit comments