Skip to content

Commit

Permalink
feat: add nasal language (#5342)
Browse files Browse the repository at this point in the history
* feat: add nasal language

* fix: update nasal mode

* fix: fix linter errors

* feat: add nasal tokens
  • Loading branch information
BobDotCom authored Oct 16, 2023
1 parent 25d86b6 commit 4fff99e
Show file tree
Hide file tree
Showing 5 changed files with 479 additions and 0 deletions.
7 changes: 7 additions & 0 deletions demo/kitchen-sink/docs/nasal.nas
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
var sayHello = func(names, favorite) {
foreach (var name; names) {
printf("Hello %s, %s is the best!", name, favorite);
}
}

sayHello(["World", "FlightGear"], "Nasal");
1 change: 1 addition & 0 deletions src/ext/modelist.js
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ var supportedModes = {
MIXAL: ["mixal"],
MUSHCode: ["mc|mush"],
MySQL: ["mysql"],
Nasal: ["nas"],
Nginx: ["nginx|conf"],
Nim: ["nim"],
Nix: ["nix"],
Expand Down
56 changes: 56 additions & 0 deletions src/mode/_test/tokens_nasal.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
[[
"start",
["storage.type.nasal","var"],
["text"," sayHello "],
["keyword.operator.nasal","="],
["text"," func(names, favorite) {"]
],[
"start",
["text"," "],
["keyword.control.nasal","foreach"],
["text"," ("],
["storage.type.nasal","var"],
["text"," name"],
["punctuation.terminator.statement.nasal",";"],
["text"," names) {"]
],[
"start",
["text"," "],
["variable.language.nasal","printf"],
["text","("],
["punctuation.definition.string.begin.nasal","\""],
["string.quoted.double.nasal","Hello "],
["constant.character.escape.nasal","%s"],
["string.quoted.double.nasal",", "],
["constant.character.escape.nasal","%s"],
["string.quoted.double.nasal"," is the best!"],
["punctuation.definition.string.end.nasal","\""],
["text",", name, favorite)"],
["punctuation.terminator.statement.nasal",";"]
],[
"start",
["text"," }"]
],[
"start",
["text","}"]
],[
"start"
],[
"start",
["text","sayHello(["],
["punctuation.definition.string.begin.nasal","\""],
["string.quoted.double.nasal","World"],
["punctuation.definition.string.end.nasal","\""],
["text",", "],
["punctuation.definition.string.begin.nasal","\""],
["string.quoted.double.nasal","FlightGear"],
["punctuation.definition.string.end.nasal","\""],
["text","], "],
["punctuation.definition.string.begin.nasal","\""],
["string.quoted.double.nasal","Nasal"],
["punctuation.definition.string.end.nasal","\""],
["text",")"],
["punctuation.terminator.statement.nasal",";"]
],[
"start"
]]
56 changes: 56 additions & 0 deletions src/mode/nasal.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/* ***** BEGIN LICENSE BLOCK *****
* Distributed under the BSD license:
*
* Copyright (c) 2012, Ajax.org B.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of Ajax.org B.V. nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* ***** END LICENSE BLOCK ***** */

/*
THIS FILE WAS AUTOGENERATED BY mode.tmpl.js
*/

"use strict";

var oop = require("../lib/oop");
var TextMode = require("./text").Mode;
var NasalHighlightRules = require("./nasal_highlight_rules").NasalHighlightRules;
// TODO: pick appropriate fold mode
var FoldMode = require("./folding/cstyle").FoldMode;

var Mode = function() {
this.HighlightRules = NasalHighlightRules;
this.foldingRules = new FoldMode();
};
oop.inherits(Mode, TextMode);

(function() {
// this.lineCommentStart = ""//"";
// this.blockComment = {start: ""/*"", end: ""*/""};
// Extra logic goes here.
this.$id = "ace/mode/nasal";
}).call(Mode.prototype);

exports.Mode = Mode;
Loading

0 comments on commit 4fff99e

Please sign in to comment.