From d585b6c82f9452f0936dcd68379efcd0b32fc0b2 Mon Sep 17 00:00:00 2001 From: Olivier Guinart Date: Mon, 28 Aug 2017 19:15:42 -0700 Subject: [PATCH] Initial commit (syntax coloring) --- .vscode/launch.json | 13 ++++++ CHANGELOG.md | 7 ++++ Images/VSCode01.JPG | Bin 0 -> 45969 bytes README.md | 65 ++++++++++++++++++++++++++++++ Test/test.s | 11 +++++ language-configuration.json | 28 +++++++++++++ package.json | 26 ++++++++++++ syntaxes/merlin32.tmLanguage.json | 59 +++++++++++++++++++++++++++ vsc-extension-quickstart.md | 27 +++++++++++++ 9 files changed, 236 insertions(+) create mode 100644 .vscode/launch.json create mode 100644 CHANGELOG.md create mode 100644 Images/VSCode01.JPG create mode 100644 README.md create mode 100644 Test/test.s create mode 100644 language-configuration.json create mode 100644 package.json create mode 100644 syntaxes/merlin32.tmLanguage.json create mode 100644 vsc-extension-quickstart.md diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..8384213 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,13 @@ +// A launch configuration that launches the extension inside a new window +{ + "version": "0.1.0", + "configurations": [ + { + "name": "Launch Extension", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": ["--extensionDevelopmentPath=${workspaceRoot}" ] + } + ] +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..62ee0cc --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +# Change Log +All notable changes to the "merlin32" extension will be documented in this file. + +Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. + +## [Unreleased] +- Initial release \ No newline at end of file diff --git a/Images/VSCode01.JPG b/Images/VSCode01.JPG new file mode 100644 index 0000000000000000000000000000000000000000..33be350225ec259b7331f2f46732654c1aca5502 GIT binary patch literal 45969 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 Hzfb-z8oW@> literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..f244dda --- /dev/null +++ b/README.md @@ -0,0 +1,65 @@ +# merlin32 README + +This is the README for your extension "merlin32". After writing up a brief description, we recommend including the following sections. + +## Features + +Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file. + +For example if there is an image subfolder under your extension project workspace: + +\!\[feature X\]\(images/feature-x.png\) + +> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow. + +## Requirements + +If you have any requirements or dependencies, add a section describing those and how to install and configure them. + +## Extension Settings + +Include if your extension adds any VS Code settings through the `contributes.configuration` extension point. + +For example: + +This extension contributes the following settings: + +* `myExtension.enable`: enable/disable this extension +* `myExtension.thing`: set to `blah` to do something + +## Known Issues + +Calling out known issues can help limit users opening duplicate issues against your extension. + +## Release Notes + +Users appreciate release notes as you update your extension. + +### 1.0.0 + +Initial release of ... + +### 1.0.1 + +Fixed issue #. + +### 1.1.0 + +Added features X, Y, and Z. + +----------------------------------------------------------------------------------------------------------- + +## Working with Markdown + +**Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts: + +* Split the editor (`Cmd+\` on OSX or `Ctrl+\` on Windows and Linux) +* Toggle preview (`Shift+CMD+V` on OSX or `Shift+Ctrl+V` on Windows and Linux) +* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (OSX) to see a list of Markdown snippets + +### For more information + +* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown) +* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/) + +**Enjoy!** \ No newline at end of file diff --git a/Test/test.s b/Test/test.s new file mode 100644 index 0000000..9df551a --- /dev/null +++ b/Test/test.s @@ -0,0 +1,11 @@ +; This is a comment +ADC X +DA Y +A EQU "STRING" +bne +BRA +* THat is a comment too. +"" + + + diff --git a/language-configuration.json b/language-configuration.json new file mode 100644 index 0000000..2c8b732 --- /dev/null +++ b/language-configuration.json @@ -0,0 +1,28 @@ +{ + "comments": { + // symbol used for single line comment. Remove this entry if your language does not support line comments + "lineComment": [";", "*"] + }, + // symbols used as brackets + "brackets": [ + ["{", "}"], + ["[", "]"], + ["(", ")"] + ], + // symbols that are auto closed when typing + "autoClosingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"] + ], + // symbols that that can be used to surround a selection + "surroundingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"] + ] +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..de3f63e --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "merlin32", + "displayName": "Merlin32", + "description": "Language support for Merlin32", + "version": "0.0.1", + "publisher": "Aito", + "engines": { + "vscode": "^1.15.0" + }, + "categories": [ + "Languages" + ], + "contributes": { + "languages": [{ + "id": "merlin32", + "aliases": ["Merlin32", "merlin32"], + "extensions": [".s"], + "configuration": "./language-configuration.json" + }], + "grammars": [{ + "language": "merlin32", + "scopeName": "source.asm.merlin32", + "path": "./syntaxes/merlin32.tmLanguage.json" + }] + } +} \ No newline at end of file diff --git a/syntaxes/merlin32.tmLanguage.json b/syntaxes/merlin32.tmLanguage.json new file mode 100644 index 0000000..23bf58f --- /dev/null +++ b/syntaxes/merlin32.tmLanguage.json @@ -0,0 +1,59 @@ +{ + "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", + "name": "Merlin32", + "patterns": [ + { + "include": "#comments" + }, + { + "include": "#opcodes" + }, + { + "include": "#datadefines" + }, + { + "include": "#directives" + }, + { + "include": "#strings" + } + ], + "repository": { + "comments": { + "patterns": [{ + "name": "comment.line.semicolon.merlin32", + "match": "(;|\\*).*" + }] + }, + "opcodes": { + "patterns": [{ + "name": "keyword.control.opcode.merlin32", + "match": "(?i)\\b(ADC|ADCL|AND|ANDL|ASL|BCC|BLT|BCS|BGE|BEQ|BIT|BMI|BNE|BPL|BRA|BRK|BRL|BVC|BVS|CLC|CLD|CLI|CLV|CMP|CMPL|COP|CPX|CPY|DEC|DEX|DEY|EOR|EORL|INC|INX|INY|JMP|JML|JMPL|JSR|JSL|LDA|LDAL|LDX|LDY|LSR|MVN|MVP|NOP|ORA|ORAL|PEA|PEI|PER|PHA|PHB|PHD|PHK|PHP|PHX|PHY|PLA|PLB|PLD|PLP|PLX|PLY|REP|ROL|ROR|RTI|RTL|RTS|SBC|SBCL|SEC|SED|SEI|SEP|STA|STAL|STP|STX|STY|STZ|TAX|TAY|TCD|TCS|TDC|TRB|TSB|TSC|TSX|TXA|TXS|TXY|TYA|TYX|WAI|WDM|XBA|XCE)\\b" + }] + }, + "datadefines": { + "patterns": [{ + "name": "storage.type.datadefine.merlin32", + "match": "(?i)\\b(DA|DW|DDB|DFB|DB|ADR|ADRL|HEX|DS|DC|DE|ASC|DCI|INV|FLS|REV|STR|STRL|CHK)\\b" + }] + }, + "directives": { + "patterns": [{ + "name": "support.function.directive.merlin32", + "match": "(?i)\\b(EQU|ANOP|ORG|PUT|PUTBIN|START|END|DUM|DEND|MX|XC|LONGA|LONGI|USE|USING|REL|DSK|LNK|SAV|TYP|IF|DO|ELSE|FIN|LUP|ELUP|\\^|ERR|DAT|AST|CYC|EXP|LST|LSTDO|PAG|TTL|SKP|TR|KBD|PAU|SW|USR)\\b" + }] + }, + "strings": { + "name": "string.quoted.double.merlin32", + "begin": "\"", + "end": "\"", + "patterns": [ + { + "name": "constant.character.escape.merlin32", + "match": "\\\\." + } + ] + } + }, + "scopeName": "source.asm.merlin32" +} \ No newline at end of file diff --git a/vsc-extension-quickstart.md b/vsc-extension-quickstart.md new file mode 100644 index 0000000..2d1a636 --- /dev/null +++ b/vsc-extension-quickstart.md @@ -0,0 +1,27 @@ +# Welcome to your VS Code Extension + +## What's in the folder +* This folder contains all of the files necessary for your extension +* `package.json` - this is the manifest file in which you declare your language support and define +the location of the grammar file that has been copied into you extension. +* `syntaxes/merlin32.tmLanguage.json` - this is the Text mate grammar file that is used for tokenization +* `language-configuration.json` - this the language configuration, defining the tokens that are used for +comments and brackets. + +## Get up and running straight away +* Make sure the language configuration settings in `language-configuration.json` are accurate +* press `F5` to open a new window with your extension loaded +* create a new file with a file name suffix matching your language +* verify that syntax highlight works and that the language configuration settings are working + +## Make changes +* you can relaunch the extension from the debug toolbar after making changes to the files listed above +* you can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes + +## Add more language features +* To add features such as intellisense, hovers and validators check out the VS Code extenders documentation at +https://code.visualstudio.com/docs + +## Install your extension +* To start using your extension with Visual Studio Code copy it into the `/.vscode/extensions` folder and restart Code. +* To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension. \ No newline at end of file