diff options
Diffstat (limited to 'compiler')
-rwxr-xr-x | compiler/docgen.nim | 18 | ||||
-rw-r--r-- | compiler/docgen2.nim | 50 | ||||
-rwxr-xr-x | compiler/main.nim | 15 |
3 files changed, 73 insertions, 10 deletions
diff --git a/compiler/docgen.nim b/compiler/docgen.nim index ae654fda4..4bc9d1e82 100755 --- a/compiler/docgen.nim +++ b/compiler/docgen.nim @@ -18,13 +18,13 @@ import type TSections = array[TSymKind, PRope] - TDocumentor = object of rstgen.TRstGenerator + TDocumentor* = object of rstgen.TRstGenerator modDesc: PRope # module description id: int # for generating IDs toc, section: TSections indexValFilename: string - PDoc = ref TDocumentor + PDoc* = ref TDocumentor proc compilerMsgHandler(filename: string, line, col: int, msgKind: rst.TMsgKind, arg: string) {.procvar.} = @@ -48,7 +48,7 @@ proc parseRst(text, filename: string, result = rstParse(text, filename, line, column, hasToc, rstOptions, options.FindFile, compilerMsgHandler) -proc newDocumentor(filename: string, config: PStringTable): PDoc = +proc newDocumentor*(filename: string, config: PStringTable): PDoc = new(result) initRstGenerator(result[], (if gCmd != cmdRst2Tex: outHtml else: outLatex), options.gConfigVars, filename, {roSupportRawDirective}, @@ -114,9 +114,9 @@ proc ropeFormatNamedVars(frmt: TFormatStr, varnames: openarray[string], else: rawMessage(errUnkownSubstitionVar, id) else: InternalError("ropeFormatNamedVars") var start = i - while i < L: - if (frmt[i] != '$'): inc(i) - else: break + while i < L: + if frmt[i] != '$': inc(i) + else: break if i - 1 >= start: app(result, substr(frmt, start, i - 1)) proc genComment(d: PDoc, n: PNode): string = @@ -243,7 +243,7 @@ proc traceDeps(d: PDoc, n: PNode) = "<a class=\"reference external\" href=\"$1.html\">$1</a>", "$1", [toRope(getModuleName(n))]) -proc generateDoc(d: PDoc, n: PNode) = +proc generateDoc*(d: PDoc, n: PNode) = case n.kind of nkCommentStmt: app(d.modDesc, genComment(d, n)) of nkProcDef: genItem(d, n, n.sons[namePos], skProc) @@ -317,12 +317,12 @@ proc genOutFile(d: PDoc): PRope = code = content result = code -proc generateIndex(d: PDoc) = +proc generateIndex*(d: PDoc) = if optGenIndex in gGlobalOptions: writeIndexFile(d[], splitFile(options.outFile).dir / splitFile(d.filename).name & indexExt) -proc writeOutput(d: PDoc, filename, outExt: string) = +proc writeOutput*(d: PDoc, filename, outExt: string) = var content = genOutFile(d) if optStdout in gGlobalOptions: writeRope(stdout, content) diff --git a/compiler/docgen2.nim b/compiler/docgen2.nim new file mode 100644 index 000000000..a7a84641e --- /dev/null +++ b/compiler/docgen2.nim @@ -0,0 +1,50 @@ +# +# +# The Nimrod Compiler +# (c) Copyright 2012 Andreas Rumpf +# +# See the file "copying.txt", included in this +# distribution, for details about the copyright. +# + +# This module implements a new documentation generator that runs after +# semantic checking. + +import + os, options, ast, astalgo, msgs, ropes, idents, passes, docgen + +type + TGen = object of TPassContext + doc: PDoc + module: PSym + filename: string + PGen = ref TGen + +proc close(p: PPassContext, n: PNode): PNode = + var g = PGen(p) + writeOutput(g.doc, g.filename, HtmlExt) + generateIndex(g.doc) + +proc processNode(c: PPassContext, n: PNode): PNode = + result = n + var g = PGen(c) + generateDoc(g.doc, n) + +proc myOpen(module: PSym, filename: string): PPassContext = + var g: PGen + new(g) + g.module = module + g.filename = filename + var d = newDocumentor(filename, options.gConfigVars) + d.hasToc = true + g.doc = d + result = g + +proc docgen2Pass*(): TPass = + initPass(result) + result.open = myOpen + result.process = processNode + result.close = close + +proc finishDoc2Pass*(project: string) = + nil diff --git a/compiler/main.nim b/compiler/main.nim index 811eb7675..ad1d55cb4 100755 --- a/compiler/main.nim +++ b/compiler/main.nim @@ -16,7 +16,7 @@ import wordrecg, sem, semdata, idents, passes, docgen, extccomp, cgen, ecmasgen, platform, nimconf, importer, passaux, depends, transf, evals, types, idgen, - tables + tables, docgen2 const has_LLVM_Backend = false @@ -103,6 +103,14 @@ proc CommandCheck = registerPass(rodwrite.rodwritePass()) compileProject(mainCommandArg()) +proc CommandDoc2 = + msgs.gErrorMax = high(int) # do not stop after first error + semanticPasses() + registerPass(docgen2Pass()) + registerPass(cleanupPass()) + compileProject(mainCommandArg()) + finishDoc2Pass(gProjectFull) + proc CommandCompileToC = semanticPasses() registerPass(cgen.cgenPass()) @@ -232,6 +240,11 @@ proc MainCommand = LoadConfigs(DocConfig) wantMainModule() CommandDoc() + of "doc2": + gCmd = cmdDoc + LoadConfigs(DocConfig) + wantMainModule() + CommandDoc2() of "rst2html": gCmd = cmdRst2html LoadConfigs(DocConfig) |