Howto:Syntax highlighting for Nasal: Difference between revisions

From FlightGear wiki
Jump to navigation Jump to search
Line 29: Line 29:
If you use Mac, move it into your ''Applications/gedit/Contents/Resources/share/gtksourceview-X.0/language specs'' folder. For Linux, move it into your ''/usr/share/gtksourceview-X.0/language-specs'' folder. In the same post given above, there are instructions for how to edit ''xml.lang'' (in the same directory) to add the embedded XML content support (with this minor edit, Nasal highlighting is used inside of certain tags instead of plain text).
If you use Mac, move it into your ''Applications/gedit/Contents/Resources/share/gtksourceview-X.0/language specs'' folder. For Linux, move it into your ''/usr/share/gtksourceview-X.0/language-specs'' folder. In the same post given above, there are instructions for how to edit ''xml.lang'' (in the same directory) to add the embedded XML content support (with this minor edit, Nasal highlighting is used inside of certain tags instead of plain text).


For "snippets" support, nasal.xml has to be moved into ''/usr/share/gedit/plugins/snippets/'' folder.
For "snippets" support, nasal.xml from the above post has to be moved into ''/usr/share/gedit/plugins/snippets/'' folder or installed using the "import" feature. See this image for more details: [[:File:Install nasal snippets in gedit.png|how to import Nasal snippets]].


== Vim ==
== Vim ==

Revision as of 15:27, 5 November 2013

There's Nasal syntax-highlighting support available for some editors, which is a big advantage, as it makes Nasal coding much easier. It can often point to syntax errors and so reduce the number of tedious time-consuming and unproductive FlightGear runs.

Notepad++

http://dl.dropbox.com/u/1463693/nasal.xml

Instructions are here: http://superuser.com/questions/62474/notepad-custom-syntax-highlighting-setting-where-to-look-for-it

jEdit

There's a syntax highlighting mode for jEdit, programmer's text editor

Included are some of Nasal's internal functions and those functions currently implemented in NasalSys.cxx To use, add the content of the catalog inside your own catalog (do NOT overwrite the file) and nasal.xml in /home/USER/.jedit/modes

Restart jEdit and you can use it. Current extension is .nas, you can add your own extension and functions. This mode is heavily based on the Javascript mode.

Get it here: https://sourceforge.net/projects/fgscheduleview/files/jedit/catalog.zip/download

gedit

Screen shot illustrating syntax highlighting in gedit

Philosopher on the FlightGear Forum has created syntax highlighting for gedit, a popular and simple text editor for Mac OS X, Linux, and Windows.

http://theomegahangar.flymerlion.com/downloads/nasal.lang

Download the nasal.lang file from the link above or from the first post of this forum topic [1] (possibly more recent) and:

If you use Mac, move it into your Applications/gedit/Contents/Resources/share/gtksourceview-X.0/language specs folder. For Linux, move it into your /usr/share/gtksourceview-X.0/language-specs folder. In the same post given above, there are instructions for how to edit xml.lang (in the same directory) to add the embedded XML content support (with this minor edit, Nasal highlighting is used inside of certain tags instead of plain text).

For "snippets" support, nasal.xml from the above post has to be moved into /usr/share/gedit/plugins/snippets/ folder or installed using the "import" feature. See this image for more details: how to import Nasal snippets.

Vim

It also makes understanding other people's code easier. One such editor is the free vim or its gui variant gvim.

It's not for everyone but it's free, and testing it doesn't hurt: http://www.vim.org/.

The syntax definition file comes with the FlightGear code (http://gitorious.org/fg/flightgear/blobs/next/scripts/syntax/nasal.vim). Highlighting works even for Nasal embedded in XML files (type ":set ft=nasal", where ft stands for file-type)

Here's an example, which demonstrates a short code segment with three syntax errors as well as the highlighting of a matching pair of parentheses (yellow) and trailing spaces (blue x). (The leading blue dots aren't on by default. They help to spot tab crimes.)

Screen shot illustrating syntax highlighting in Vim

KDE Editors

There's a highlighting definition for nasal available at kde-files.org (http://kde-files.org/content/show.php/Nasal+highlighting?content=154555)

Download the file and copy it into ~/.kde4/share/apps/katepart/syntax/ (you can create the folders if they don't exist yet).

Note that the syntax highlighting in KDE doesn't set colors, it just identifies structural elements, colors are defined by the schemas used by each editor, thus you get consistent highlighting between different languages.

The highlighting file should work with all editors based on the katepart: KWrite, Kate, and the editor component of KDevelop.

Sublime Text 2

Scripts and installation instructions are here: https://github.com/freevryheid/nasal

Sublime Text 2 syntax highlighting

Other editors

Nasal being syntactically very close to other programming languages like C, Php or JavaScript, you can get some usable highlighting even without real Nasal support:

FlightGear Wiki

Using the <syntaxhighight> tag with a lang="nasal" attribute, we can have highlighting right here on the wiki. Use enclose="div" to wrap the text, if it happens to be particularly wide.

<syntaxhighlight lang="nasal">
# hello.nas
print('Hello World!');
</syntaxhighlight>

Which renders into:

# hello.nas
print('Hello World!');

Syntax highlighting test

Just a collection of keywords, etc. to test whether highlighting works (you can copy this to test your own highlighting):

# this is a comment
# operators (if applicable):
!a ? a+b - c/d*e : f~g;
# Builtin functions, strings
print('Hello World!');
die("We have an error, Houston!", arg[0]);
cmdarg().getNode("setting").getValue();
streq(typeof(id(keys(hash))),10);
# Loopoids
foreach (var a; ["haha", {command:"NASAL!"}, me]) {
    if(0) break;
    elsif(1) continue;
    else return;
    while(1) sprintf("%s%s\n%s=%f", "Spam", "spam", "spam", 0e-0);
    for (var i=0; i < 0.00; i += 0x0) printf("%d", int(i));
    forindex(var o; a) (func {
        var o = o;
        setlistener("/", func print(o), 1, 2);
    })();
}
# String escaping stress tests:
'\a\b\c\"\\\?' # none of these
"\e\?\'\f\a" # none of these
'\'' # this one
"\"\r\n\t\\\t" # and all of these
# And optionally string formatting:
"%s%%s%.0f%8d" # the second "s" shouldn't be highlighted, otherwise everything else
# Syntax error!:
%$@&^|\`

Related