diff options
Diffstat (limited to 'atk16-syntax')
| -rw-r--r-- | atk16-syntax/README.md | 9 | ||||
| -rw-r--r-- | atk16-syntax/atk16-syntax-0.0.1.vsix | bin | 4351 -> 0 bytes | |||
| -rw-r--r-- | atk16-syntax/extension.js | 196 | ||||
| -rw-r--r-- | atk16-syntax/language-configuration.json | 41 | ||||
| -rw-r--r-- | atk16-syntax/package.json | 48 | ||||
| -rw-r--r-- | atk16-syntax/syntaxes/atk16.tmLanguage.json | 44 |
6 files changed, 0 insertions, 338 deletions
diff --git a/atk16-syntax/README.md b/atk16-syntax/README.md deleted file mode 100644 index da81144..0000000 --- a/atk16-syntax/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# VSCode syntax highlighting extension for ATK16 assembly - -## Installation - -In `atk16-syntax-highlighting` directory, run: - - npx @vscode/vsce package - -Then go to VSCode > Command Palette > Extensions: Install from VSIX and select the generated `.vsix` file. diff --git a/atk16-syntax/atk16-syntax-0.0.1.vsix b/atk16-syntax/atk16-syntax-0.0.1.vsix Binary files differdeleted file mode 100644 index 253d326..0000000 --- a/atk16-syntax/atk16-syntax-0.0.1.vsix +++ /dev/null diff --git a/atk16-syntax/extension.js b/atk16-syntax/extension.js deleted file mode 100644 index 26b4d9d..0000000 --- a/atk16-syntax/extension.js +++ /dev/null @@ -1,196 +0,0 @@ -const vscode = require('vscode'); -const path = require('path'); - -class ATK16HoverProvider { - async provideHover(document, position, token) { - const range = document.getWordRangeAtPosition(position, /[\w-/.]+/); - const labelText = document.getText(range); - const subroutineDefinition = await findSubroutineInDocument(document, labelText); - if (subroutineDefinition) { - const hoverText = new vscode.MarkdownString(subroutineDefinition); - hoverText.isTrusted = true; - return new vscode.Hover(hoverText); - } - - // Search for labels in included files - for (let i = 0; i < document.lineCount; i++) { - const line = document.lineAt(i); - const includeMatch = line.text.match(/@include\s+(\S+)/); - if (includeMatch) { - const includedFilePath = path.join( - path.dirname(document.fileName), - `${includeMatch[1]}.atk16` - ); - - if (await vscode.workspace.fs.stat(vscode.Uri.file(includedFilePath))) { - const includedDocument = await vscode.workspace.openTextDocument( - includedFilePath - ); - const subroutineDefinition = await findSubroutineInDocument(includedDocument, labelText); - if (subroutineDefinition) { - const hoverText = new vscode.MarkdownString(subroutineDefinition); - hoverText.isTrusted = true; - return new vscode.Hover(hoverText); - } - } - } - } - - return null; - } -} - -class ATK16DefinitionProvider { - async provideDefinition(document, position, token) { - const range = document.getWordRangeAtPosition(position, /[\w-/.]+/); - const text = document.getText(range); - - const line = document.lineAt(position); - const includeMatch = line.text.match(/@include\s+(\S+)/); - const useMatch = line.text.match(/@use\s+(\S+):/); - - if (includeMatch && includeMatch[1] === text) { - const includedFilePath = path.join( - path.dirname(document.fileName), - `${includeMatch[1]}.atk16` - ); - - try { - await vscode.workspace.fs.stat(vscode.Uri.file(includedFilePath)); - return new vscode.Location( - vscode.Uri.file(includedFilePath), - new vscode.Position(0, 0) - ); - } catch (err) { - vscode.window.showErrorMessage( - `ATK16: File not found: ${includedFilePath}` - ); - } - } else if (useMatch && useMatch[1] === text) { - const includedFilePath = path.join( - path.dirname(document.fileName), - `${useMatch[1]}.py` - ); - - try { - await vscode.workspace.fs.stat(vscode.Uri.file(includedFilePath)); - return new vscode.Location( - vscode.Uri.file(includedFilePath), - new vscode.Position(0, 0) - ); - } catch (err) { - vscode.window.showErrorMessage( - `ATK16: File not found: ${includedFilePath}` - ); - } - } else { - const labelText = document.getText(range); - let definitionLocation = await findDefinitionInDocument(document, labelText); - if (definitionLocation) { - return definitionLocation; - } - - // Search for labels in included files - for (let i = 0; i < document.lineCount; i++) { - const line = document.lineAt(i); - const includeMatch = line.text.match(/@include\s+(\S+)/); - if (includeMatch) { - const includedFilePath = path.join( - path.dirname(document.fileName), - `${includeMatch[1]}.atk16` - ); - - if (await vscode.workspace.fs.stat(vscode.Uri.file(includedFilePath))) { - const includedDocument = await vscode.workspace.openTextDocument( - includedFilePath - ); - definitionLocation = await findDefinitionInDocument(includedDocument, labelText); - if (definitionLocation) { - return definitionLocation; - } - } - } - } - } - - return null; - } -} - -async function findDefinitionInDocument(document, labelText) { - for (let i = 0; i < document.lineCount; i++) { - const line = document.lineAt(i); - if (line.text.includes(`@label ${labelText}`) || line.text.includes(`@let ${labelText}`)) { - return new vscode.Location(document.uri, line.range.start); - } - } - return null; -} - -async function findSubroutineInDocument(document, labelText) { - let name = null; - const params = []; - const returns = []; - let extra = ""; - for (let i = 0; i < document.lineCount; i++) { - const line = document.lineAt(i); - if (line.text.includes(`@label ${labelText}`)) { - for (let j = i + 1; j < document.lineCount; j++) { - const docLine = document.lineAt(j); - const docCommentMatch = docLine.text.match(/;;;\s+(.*)/); - if (docCommentMatch) { - const lineText = docCommentMatch[1]; - const parts = lineText.trim().split(/\s+/g); - if (lineText.startsWith('subroutine')) { - name = parts[parts.length - 1].trim(); - } else if (lineText.startsWith('param')) { - const [_kw, reg, ...desc] = parts; - params.push([reg.trim(), desc.filter(a => a).join(" ")]) - } else if (lineText.startsWith('return')) { - const [_kw, reg, ...desc] = parts; - returns.push([reg.trim(), desc.filter(a => a).join(" ")]) - } else { - extra += `${lineText}\n`; - } - } else { - break; - } - } - } - } - - if (name === null) return null; - - let definition = `### ${name}\n_Subroutine_\n\n`; - definition += extra; - if (params.length > 0) { - definition += "\n\n|Reg|Parameter|\n"; - definition += "|:---|:---|\n"; - } - for (const [reg, desc] of params) { - definition += `|${reg}|${desc}|\n`; - } - - if (returns.length > 0) { - definition += "\n|Reg|Return|\n"; - definition += "|:---|:---|\n"; - } - for (const [reg, desc] of returns) { - definition += `|${reg}|${desc}|\n`; - } - return definition; -} - -function activate(context) { - context.subscriptions.push( - vscode.languages.registerDefinitionProvider('atk16', new ATK16DefinitionProvider()), - vscode.languages.registerHoverProvider('atk16', new ATK16HoverProvider()) - ); -} - -function deactivate() {} - -module.exports = { - activate, - deactivate, -};
\ No newline at end of file diff --git a/atk16-syntax/language-configuration.json b/atk16-syntax/language-configuration.json deleted file mode 100644 index c186b1b..0000000 --- a/atk16-syntax/language-configuration.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "comments": { - "lineComment": ";" - }, - "brackets": [ - [ - "{", - "}" - ], - [ - "[", - "]" - ], - [ - "(", - ")" - ] - ], - "autoClosingPairs": [ - [ - "{", - "}" - ], - [ - "[", - "]" - ], - [ - "(", - ")" - ], - [ - "\"", - "\"" - ], - [ - "'", - "'" - ] - ] -}
\ No newline at end of file diff --git a/atk16-syntax/package.json b/atk16-syntax/package.json deleted file mode 100644 index 6a64b6c..0000000 --- a/atk16-syntax/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "atk16-syntax", - "displayName": "ATK16 Syntax", - "description": "Syntax highlighting and support for ATK16 assembly language", - "version": "0.0.1", - "publisher": "JanTuomi", - "license": "MIT", - "repository": "", - "engines": { - "vscode": "^1.60.0" - }, - "categories": ["Programming Languages"], - "activationEvents": [ - "onLanguage:atk16" - ], - "main": "./extension.js", - "contributes": { - "languages": [ - { - "id": "atk16", - "aliases": ["ATK16 Assembly", "atk16"], - "extensions": [".atk16"], - "configuration": "./language-configuration.json" - } - ], - "grammars": [ - { - "language": "atk16", - "scopeName": "source.atk16", - "path": "./syntaxes/atk16.tmLanguage.json" - } - ], - "configurationDefaults": { - "editor.tokenColorCustomizations": { - "[Default Dark+]": { - "textMateRules": [ - { - "scope": "comment.documentation.atk16", - "settings": { - "fontStyle": "italic" - } - } - ] - } - } - } - } -} diff --git a/atk16-syntax/syntaxes/atk16.tmLanguage.json b/atk16-syntax/syntaxes/atk16.tmLanguage.json deleted file mode 100644 index 6dcf0ea..0000000 --- a/atk16-syntax/syntaxes/atk16.tmLanguage.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", - "name": "ATK16", - "patterns": [ - { - "name": "comment.documentation.atk16", - "match": ";;;.*" - }, - { - "name": "comment.line.semicolon.atk16", - "match": ";.*" - }, - { - "name": "keyword.control.directive.atk16", - "match": "^@\\w+" - }, - { - "name": "variable.other.register.atk16", - "match": "\\bR[A-H]\\b" - }, - { - "name": "constant.numeric.hex.atk16", - "match": "\\b0x[0-9a-fA-F]+\\b" - }, - { - "name": "constant.numeric.binary.atk16", - "match": "\\b0b[01]+\\b" - }, - { - "name": "constant.numeric.decimal.atk16", - "match": "\\b[0-9]+\\b" - }, - { - "name": "keyword.control.symbol.atk16", - "match": "^\\s+[a-zA-Z_-]+" - }, - { - "name": "constant.language.flag.atk16", - "match": "\\b(carry|overflow|zero|sign)\\b" - } - ], - "repository": {}, - "scopeName": "source.atk16" -} |
