diff options
| author | Christoph Schlosser <christoph@linux.com> | 2017-10-07 14:57:01 +0200 |
|---|---|---|
| committer | Christoph Schlosser <christoph@linux.com> | 2017-10-07 15:16:34 +0200 |
| commit | 338446ad72d3581745020aa78783f4b4d4afe4cb (patch) | |
| tree | 170202da2a0bb7dc97ab03d6119836e84ebb96f5 /src/CodeParser/CppParser.ts | |
| parent | d71125855f1a8e082d4080f40f0ee2cde2e3302d (diff) | |
| download | doxdocgen-338446ad72d3581745020aa78783f4b4d4afe4cb.tar.gz | |
Add C parser and generator
Diffstat (limited to 'src/CodeParser/CppParser.ts')
| -rw-r--r-- | src/CodeParser/CppParser.ts | 123 |
1 files changed, 4 insertions, 119 deletions
diff --git a/src/CodeParser/CppParser.ts b/src/CodeParser/CppParser.ts index e194371..2d5985b 100644 --- a/src/CodeParser/CppParser.ts +++ b/src/CodeParser/CppParser.ts @@ -1,7 +1,7 @@ import { Position, TextDocumentContentChangeEvent, TextEditor, TextLine } from "vscode"; -import CppGenerator from "../DocGen/CppGen"; +import Generator from "../DocGen/CGen"; import { IDocGen } from "../DocGen/DocGen"; -import ICodeParser from "./CodeParser"; +import CParser from "./CParser"; /** * @@ -11,121 +11,6 @@ import ICodeParser from "./CodeParser"; * @class CppParser * @implements {ICodeParser} */ -export default class CppParser implements ICodeParser { - private activeEditor: TextEditor; - private activeSelection: Position; - - /** - * @inheritdoc - */ - public Parse(activeEdit: TextEditor, event: TextDocumentContentChangeEvent): IDocGen { - this.activeEditor = activeEdit; - this.activeSelection = this.activeEditor.selection.active; - - const activeLine: TextLine = this.activeEditor.document.lineAt(this.activeEditor.selection.active.line); - - const method: string = this.getMethodText(); - - // Not a method - if (method.length === 0) { - return null; - } - - const returnValue: string[] = this.getReturn(method); - - const params: string[] = this.getParams(method); - - const cppGenerator: IDocGen = new CppGenerator(this.activeEditor, this.activeSelection, params, returnValue); - return cppGenerator; - } - - /*************************************************************************** - Implementation - ***************************************************************************/ - - private getMethodText(): string { - let method: string = ""; - - let nextLine: Position = new Position(this.activeSelection.line + 1, this.activeSelection.character); - - let nextLineTxt: string = this.activeEditor.document.lineAt(nextLine.line).text.trim(); - - // VSCode may enter a * on itself, we don't want that in our method - if (nextLineTxt === "*") { - nextLineTxt = ""; - } - - while (nextLineTxt.length === 0) { // Get first method line - nextLine = new Position(nextLine.line + 1, nextLine.character); - nextLineTxt = this.activeEditor.document.lineAt(nextLine.line).text.trim(); - } - - method += nextLineTxt; - - // Get method end line - while (nextLineTxt.indexOf(")") === -1 && - (nextLineTxt.indexOf(";") === -1 || nextLineTxt.indexOf("}") === -1)) { // Check for method end - nextLine = new Position(nextLine.line + 1, nextLine.character); - nextLineTxt = this.activeEditor.document.lineAt(nextLine.line).text.trim(); - - method += " " + nextLineTxt; - } - - // Not a method but some code in the file - if (method.indexOf(")") === -1) { - return ""; - } - - return method; - } - - private getReturn(method: string): string[] { - const retVals: string[] = []; - - // Remove the parameters from the signature - const returnSignature: string = method.slice(0, method.indexOf("(")).trim(); - - if (returnSignature.indexOf(" ") === -1) { // Constructor or similar - return retVals; - } - - const returnType: string = returnSignature.substr(0, returnSignature.lastIndexOf(" ")); - - switch (returnType) { - case "bool": - retVals.push("true"); - retVals.push("false"); - break; - case "void": - break; - default: - retVals.push(returnType); - break; - } - - return retVals; - } - - private getParams(method: string): string[] { - const params: string[] = []; - - // Get parameters from enclosing brackets - const parameters: string = method.slice(method.indexOf("(")) // Get opening bracket - .slice(1, method.indexOf(")")) // Remove opening bracket - .split(")")[0]; // Get closing bracket - - if (parameters.length === 0) { // No parameters - return params; - } - - let paramArr: string[] = parameters.split(","); - paramArr = paramArr.map((item: string) => { - // Remove any special C++ characters - const clean: string = item.trim().replace(/[&*\[\]]/g, ""); - - return clean.split(" ").pop(); - }); - - return paramArr; - } +export default class CppParser extends CParser { + // For now C++ is the same as C } |