Creating Sublime Text 3 syntax for obscure language - sublimetext3

There's a coding language called SugarCube designed for use in the Twine engine, which is used for text adventure games. Here's the Documentation for it. I'm not exactly an experienced coder - all I have is a few months in C# making a game in Unity - but I'd like to help a friend with his game, and hopefully writing his code in an editor instead of plaintext will help.
The only kind of code that matters is all marked with double angle brackets. Variables are marked with dollar signs $exampleVarand are declared and assigned using
<<set $exampleVar = "foo">>.
If and switch statements use closing tags similar to HTML:
<<if $exampleVar == "foo">>
// code
<</if>>
or
<<switch $exampleVar>>
<<case "foo">>
// code
<</switch>>
The guides I've found for custom syntax (including official documentation) are either outdated or assume you already know everything about YAML, which I don't. Advice?

Related

Sublime Text 3 custom syntax for cottle: hard to start

I'm trying to make a "very simple" syntax highlight for "cottle" (which is a script language used in a text-to-speech app dedicated to Elite:Dangerous).
All i want (at least at the beginning) is to have three different colours: Comments, "non-strings", and strings.
I started trying with the ST3 wiki, youtube tutorials, questions here.... but i can't sort out how to do it, 'cause the way the language work.
I'll try to show you an example
{ everything_between_a_pair_of_brackets_is_code }
everything outside all pairs of bracket is a string {_ and this is a comment. It begins with "_" and ends at the closing bracket }
{ This_is_code("but this is a string")
This_is_still_code("this is also a string {but_this_is_code(\"and a string\")} and this the end of the string")
}
My problem is how to define this kind of "nidification" in my cottle.sublime-syntax file. I managed to get the comment, but only the first one.
- EDIT -
This is a real script:
{event.item}
{if event.repairedfully:
fully repaired
|else:
partially repaired
{Occasionally(2,
cat(
OneOf("to ", "at "),
Humanise(event.health * 100),
" percent functionality"
)
)}
}
{Occasionally(2,
cat(OneOf(", ", "and is"), " ready for re-activation")
)}.
The output of this script could be "Engine module fully repaired." or "Engine module partially repaired, and is ready for re-activation."
Please note the last dot of the phrase, which in the code is after the last bracket.
This is another sample, with strings passed to functions inside other strings:
{OneOf("{ShipName()} has", "")}
{OneOf("left supercruise", "{OneOf(\"entered\", \"returned to\", \"dropped to\")} normal space")}
My question is:
how sublime-syntax files handle this kind of nidification?
Looking at the overview of the templating language over at https://cottle.readthedocs.io/en/stable/page/01-overview.html, it seems to be an easy syntax for which to write a .sublime-syntax for, but given the utter lack of resources for knowing how syntax files works in ST, I can understand it can be sometimes difficult to start or even understand.
So, I took the liberty of creating a starter syntax definition (the result of an hour & a half of boredom on a Saturday evening), which you can take and work upon. Note that I have not used the language and as such made it by just reading the docs and looking over code snippets.
You can find a gist for it here (https://gist.github.com/Ultra-Instinct-05/96fa99e1aaeb32b12d1e62109d61fcc2)
Here is a screenshot showing it in the color scheme I use (which follows the official scope naming guidelines).
It still lacks support for user defined functions (as I came to know from the docs) (and probably a few other things), but maybe that's something you can add to it !
Note that to use it, save the file as Cottle.sublime-syntax in your User package. Right now files having a .cottle extension are highlighted (because I don't know how you create a cottle file).
The syntax definition doesn't use any new feature added in ST4, so it should work the same in both ST3 & ST4.

Alexa is not returning the numbers and calculation in the response, only the text?

I am learning how to develop Skills with Alexa. I followed a Lynda course to build the My Calculator skill, however ran into a problem where the numbers and results are not returned. I double checked my code, and tried it on Echoism.io, and same problem.
Per the attached, the numbers are recorded in the JSON input, however are not returned in the speechText or displayText?
What is the missing piece of code? Thanks.
Node.js code
Alexa console JSON Input
Welcome Roy! Couple things. In the future just put your code right here on the page so that it becomes searchable and we can see the exact characters you are using.
By looking at the images it looks like to me the following might be your use of template literals. Super common mistake.
So to use template literals you need use the back tick (`) instead of the single quote (')
It looks like it is that you currently have
speechText = 'The result of ${firstNumber} plus ${secondNumber} is ${result}';
and what you want is
speechText = `The result of ${firstNumber} plus ${secondNumber} is ${result}`;
Here is another good resources:
How to interpolate variables in strings in JavaScript, without concatenation?

Terraform - embedded quotation marks

In Terraform I can use:
name = "${var.names["apple"])"
which looks up the string "apple" in var.names.
However, this syntax would break in most programming languages as it would try and parse "${var.names[" then apple then "])".
I've looked up documentation on this but failed to find anything. Are there any details?
I've read:
https://www.terraform.io/docs/configuration/syntax.html
and
https://www.terraform.io/docs/configuration/interpolation.html
The last link briefly gives an example
template = "${file("templates/web_init.tpl")}"
but doesn't explain.
Upgrade guide to v0.7 explicitly introduces nested quoting context. Apparently this had been allowed since one of the earlier versions, but I could not pinpoint which one exactly.

What old language is this?

A friend of mine sended bunch of code for me to build a software. However, I do not recognize language and my friend is no coder. One thing I'm sure about though. The code is something like 20-40 years old.
Code was originally used in electrical works.
Character limit per line seems to be 20 characters.
Can someone recognize this language? I'm also looking for manuals for this language if possible.
10:"K": PAUSE "IK":
CLEAR
15:P=1: INPUT "ETR=PRIN
T, 0=NO? ";P
20:DIM L(20),R(20),X(20
),B(1),G(1),Q(1),O$(
1)*24
22:IF P=1 INPUT "K. /DA
TE? ";O$(0)
24:IF P=0 GOTO 30
26:INPUT "N:0 AND NAME?
"; O$(1)
28:LPRINT O$(1): LPRINT
"KKS/";OS(0)
30:INPUT "(KVA)? ";S
35:IF P=1 LPRINT "KVA",
S
40:R=3.31 :Z=4
...
I searched for this language and PowerBasic seems to be close to it, but it contains many other features what this code lacks. Any guesses?
Edit 1
It seems that there were typos. No wonder "P=!" or "0$(0) didn't make any sense.
Edit 2
I accepted Gaby's answer because code seems to be very close to GW-Basic. Also found a manual for the language which works perfectly: http://www.antonis.de/qbebooks/gwbasman/
Thanks for the help!
Edit 3
Got some new information. Language might actually be something called "Nova Basic" from 1975. I'm unable to find manual for that language, but at least this gives me a new direction.
It's definitely a BASIC variant, one of those like in the early micro-computer days, before things like VB and structured coding came into play :-)
However, it has a few non-recognisable aspects such as:
the statement "K".
the assignment P=!, unless that ! should be a 1.
the use of variables starting with a numeric: 0$(0), unless you've mistakenly typed an O (owe) in as a 0 (zero).
None of those were very common in BASICs of the day though keep in mind the language wasn't standardised to the same level as something like C is nowadays. Everything else seems pretty standard: input, printing, assignment, array dimensioning, and so on.
Given the line length limit, the domain (KKS and KVA are both electrical terms) and the weird syntax variations, I'd say it was for one of the early programmable calculators, such as Casio, Texas Instruments or Sharp (though not necessarily those specific brands).
It reminds me of GW-BASIC
Example code at http://fr.wikipedia.org/wiki/GW-BASIC
Not a lot information in your code. Maybe QBASIC ? http://fr.wikipedia.org/wiki/QBasic

How to add custom IntelliJ Language Injection to scala string-interpolation?

using Scala in IntelliJ, you can already do
var c = s"some ${compound * expression}"
and have proper syntax highlighting for the ${compound * expression}. Scala allows you to define custom string interpolaters, to do other things
var c = javascript"var x = [1, 2, 3]"
Does anyone know how to fiddle with the custom-language-injection functionality to nicely highlight these custom string interpolators? I've messed around with the stuff under the File->Settings->Language Injections but it seems really confusing, and I can't find any existing injections that do the magic string interpolation syntax. Presumably that one is hard coded (since it also has the nice code navigation features) but i'm hopeful there'll be some way of getting it to recognize the nice something"..." syntax and highlighting it nicely for me.
You could do it by hand for each string using the "light bulb", but if you want to do it automatically for each string interpolator, I think you will have to write your own plugin (which may take some time if it is your first plugin).
You may have better answers/help in JetBrains forums directly.

Resources