Skip to content
Snippets Groups Projects
Commit 46e9a5e0 authored by Hector Oswaldo Caballero's avatar Hector Oswaldo Caballero Committed by Marijn Haverbeke
Browse files

[ttcn-cfg mode] Add

parent 92ec62d2
No related branches found
No related tags found
No related merge requests found
......@@ -194,6 +194,7 @@
<option value="http://codemirror.net/mode/tornado/tornado.js">tornado.js</option>
<option value="http://codemirror.net/mode/troff/troff.js">troff.js</option>
<option value="http://codemirror.net/mode/ttcn/ttcn.js">ttcn.js</option>
<option value="http://codemirror.net/mode/ttcn-cfg/ttcn-cfg.js">ttcn-cfg.js</option>
<option value="http://codemirror.net/mode/turtle/turtle.js">turtle.js</option>
<option value="http://codemirror.net/mode/vb/vb.js">vb.js</option>
<option value="http://codemirror.net/mode/vbscript/vbscript.js">vbscript.js</option>
......
......@@ -124,6 +124,7 @@ option.</p>
<li><a href="tornado/index.html">Tornado</a> (templating language)</li>
<li><a href="troff/index.html">troff</a> (for manpages)</li>
<li><a href="ttcn/index.html">TTCN</a></li>
<li><a href="ttcn-cfg/index.html">TTCN Configuration</a></li>
<li><a href="turtle/index.html">Turtle</a></li>
<li><a href="vb/index.html">VB.NET</a></li>
<li><a href="vbscript/index.html">VBScript</a></li>
......
<!doctype html>
<title>CodeMirror: TTCN-CFG mode</title>
<meta charset="utf-8"/>
<link rel=stylesheet href="../../doc/docs.css">
<link rel="stylesheet" href="../../lib/codemirror.css">
<script src="../../lib/codemirror.js"></script>
<script src="ttcn-cfg.js"></script>
<style type="text/css">
.CodeMirror {
border-top: 1px solid black;
border-bottom: 1px solid black;
}
</style>
<div id=nav>
<a href="http://codemirror.net"><h1>CodeMirror</h1>
<img id=logo src="../../doc/logo.png">
</a>
<ul>
<li><a href="../../index.html">Home</a>
<li><a href="../../doc/manual.html">Manual</a>
<li><a href="https://github.com/codemirror/codemirror">Code</a>
</ul>
<ul>
<li><a href="../index.html">Language modes</a>
<li><a class=active href="http://en.wikipedia.org/wiki/TTCN">TTCN-CFG</a>
</ul>
</div>
<article>
<h2>TTCN-CFG example</h2>
<div>
<textarea id="ttcn-cfg-code">
[MODULE_PARAMETERS]
# This section shall contain the values of all parameters that are defined in your TTCN-3 modules.
[LOGGING]
# In this section you can specify the name of the log file and the classes of events
# you want to log into the file or display on console (standard error).
LogFile := "logs/%e.%h-%r.%s"
FileMask := LOG_ALL | DEBUG | MATCHING
ConsoleMask := ERROR | WARNING | TESTCASE | STATISTICS | PORTEVENT
LogSourceInfo := Yes
AppendFile := No
TimeStampFormat := DateTime
LogEventTypes := Yes
SourceInfoFormat := Single
LogEntityName := Yes
[TESTPORT_PARAMETERS]
# In this section you can specify parameters that are passed to Test Ports.
[DEFINE]
# In this section you can create macro definitions,
# that can be used in other configuration file sections except [INCLUDE].
[INCLUDE]
# To use configuration settings given in other configuration files,
# the configuration files just need to be listed in this section, with their full or relative pathnames.
[EXTERNAL_COMMANDS]
# This section can define external commands (shell scripts) to be executed by the ETS
# whenever a control part or test case is started or terminated.
BeginTestCase := ""
EndTestCase := ""
BeginControlPart := ""
EndControlPart := ""
[EXECUTE]
# In this section you can specify what parts of your test suite you want to execute.
[GROUPS]
# In this section you can specify groups of hosts. These groups can be used inside the
# [COMPONENTS] section to restrict the creation of certain PTCs to a given set of hosts.
[COMPONENTS]
# This section consists of rules restricting the location of created PTCs.
[MAIN_CONTROLLER]
# The options herein control the behavior of MC.
TCPPort := 0
KillTimer := 10.0
NumHCs := 0
LocalAddress :=
</textarea>
</div>
<script>
var ttcnEditor = CodeMirror.fromTextArea(document.getElementById("ttcn-cfg-code"), {
lineNumbers: true,
matchBrackets: true,
mode: "text/x-ttcn-cfg"
});
ttcnEditor.setSize(600, 860);
var mac = CodeMirror.keyMap.default == CodeMirror.keyMap.macDefault;
CodeMirror.keyMap.default[(mac ? "Cmd" : "Ctrl") + "-Space"] = "autocomplete";
</script>
<br/>
<p><strong>Language:</strong> Testing and Test Control Notation -
Configuration files
(<a href="http://en.wikipedia.org/wiki/TTCN">TTCN-CFG</a>)
</p>
<p><strong>MIME types defined:</strong> <code>text/x-ttcn-cfg</code>.</p>
<br/>
<p>The development of this mode has been sponsored by <a href="http://www.ericsson.com/">Ericsson
</a>.</p>
<p>Coded by Asmelash Tsegay Gebretsadkan </p>
</article>
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {
"use strict";
CodeMirror.defineMode("ttcn-cfg", function(config, parserConfig) {
var indentUnit = config.indentUnit,
keywords = parserConfig.keywords || {},
fileNCtrlMaskOptions = parserConfig.fileNCtrlMaskOptions || {},
externalCommands = parserConfig.externalCommands || {},
multiLineStrings = parserConfig.multiLineStrings,
indentStatements = parserConfig.indentStatements !== false;
var isOperatorChar = /[\|]/;
var curPunc;
function tokenBase(stream, state) {
var ch = stream.next();
if (ch == '"' || ch == "'") {
state.tokenize = tokenString(ch);
return state.tokenize(stream, state);
}
if (/[:=]/.test(ch)) {
curPunc = ch;
return "punctuation";
}
if (ch == "#"){
stream.skipToEnd();
return "comment";
}
if (/\d/.test(ch)) {
stream.eatWhile(/[\w\.]/);
return "number";
}
if (isOperatorChar.test(ch)) {
stream.eatWhile(isOperatorChar);
return "operator";
}
if (ch == "["){
stream.eatWhile(/[\w_\]]/);
return "number sectionTitle";
}
stream.eatWhile(/[\w\$_]/);
var cur = stream.current();
if (keywords.propertyIsEnumerable(cur)) return "keyword";
if (fileNCtrlMaskOptions.propertyIsEnumerable(cur))
return "negative fileNCtrlMaskOptions";
if (externalCommands.propertyIsEnumerable(cur)) return "negative externalCommands";
return "variable";
}
function tokenString(quote) {
return function(stream, state) {
var escaped = false, next, end = false;
while ((next = stream.next()) != null) {
if (next == quote && !escaped){
var afterNext = stream.peek();
//look if the character if the quote is like the B in '10100010'B
if (afterNext){
afterNext = afterNext.toLowerCase();
if(afterNext == "b" || afterNext == "h" || afterNext == "o")
stream.next();
}
end = true; break;
}
escaped = !escaped && next == "\\";
}
if (end || !(escaped || multiLineStrings))
state.tokenize = null;
return "string";
};
}
function Context(indented, column, type, align, prev) {
this.indented = indented;
this.column = column;
this.type = type;
this.align = align;
this.prev = prev;
}
function pushContext(state, col, type) {
var indent = state.indented;
if (state.context && state.context.type == "statement")
indent = state.context.indented;
return state.context = new Context(indent, col, type, null, state.context);
}
function popContext(state) {
var t = state.context.type;
if (t == ")" || t == "]" || t == "}")
state.indented = state.context.indented;
return state.context = state.context.prev;
}
//Interface
return {
startState: function(basecolumn) {
return {
tokenize: null,
context: new Context((basecolumn || 0) - indentUnit, 0, "top", false),
indented: 0,
startOfLine: true
};
},
token: function(stream, state) {
var ctx = state.context;
if (stream.sol()) {
if (ctx.align == null) ctx.align = false;
state.indented = stream.indentation();
state.startOfLine = true;
}
if (stream.eatSpace()) return null;
curPunc = null;
var style = (state.tokenize || tokenBase)(stream, state);
if (style == "comment") return style;
if (ctx.align == null) ctx.align = true;
if ((curPunc == ";" || curPunc == ":" || curPunc == ",")
&& ctx.type == "statement"){
popContext(state);
}
else if (curPunc == "{") pushContext(state, stream.column(), "}");
else if (curPunc == "[") pushContext(state, stream.column(), "]");
else if (curPunc == "(") pushContext(state, stream.column(), ")");
else if (curPunc == "}") {
while (ctx.type == "statement") ctx = popContext(state);
if (ctx.type == "}") ctx = popContext(state);
while (ctx.type == "statement") ctx = popContext(state);
}
else if (curPunc == ctx.type) popContext(state);
else if (indentStatements && (((ctx.type == "}" || ctx.type == "top")
&& curPunc != ';') || (ctx.type == "statement"
&& curPunc == "newstatement")))
pushContext(state, stream.column(), "statement");
state.startOfLine = false;
return style;
},
electricChars: "{}",
lineComment: "#",
fold: "brace"
};
});
function words(str) {
var obj = {}, words = str.split(" ");
for (var i = 0; i < words.length; ++i)
obj[words[i]] = true;
return obj;
}
CodeMirror.defineMIME("text/x-ttcn-cfg", {
name: "ttcn-cfg",
keywords: words("Yes No LogFile FileMask ConsoleMask AppendFile" +
" TimeStampFormat LogEventTypes SourceInfoFormat" +
" LogEntityName LogSourceInfo DiskFullAction" +
" LogFileNumber LogFileSize MatchingHints Detailed" +
" Compact SubCategories Stack Single None Seconds" +
" DateTime Time Stop Error Retry Delete TCPPort KillTimer" +
" NumHCs UnixSocketsEnabled LocalAddress"),
fileNCtrlMaskOptions: words("TTCN_EXECUTOR TTCN_ERROR TTCN_WARNING" +
" TTCN_PORTEVENT TTCN_TIMEROP TTCN_VERDICTOP" +
" TTCN_DEFAULTOP TTCN_TESTCASE TTCN_ACTION" +
" TTCN_USER TTCN_FUNCTION TTCN_STATISTICS" +
" TTCN_PARALLEL TTCN_MATCHING TTCN_DEBUG" +
" EXECUTOR ERROR WARNING PORTEVENT TIMEROP" +
" VERDICTOP DEFAULTOP TESTCASE ACTION USER" +
" FUNCTION STATISTICS PARALLEL MATCHING DEBUG" +
" LOG_ALL LOG_NOTHING ACTION_UNQUALIFIED" +
" DEBUG_ENCDEC DEBUG_TESTPORT" +
" DEBUG_UNQUALIFIED DEFAULTOP_ACTIVATE" +
" DEFAULTOP_DEACTIVATE DEFAULTOP_EXIT" +
" DEFAULTOP_UNQUALIFIED ERROR_UNQUALIFIED" +
" EXECUTOR_COMPONENT EXECUTOR_CONFIGDATA" +
" EXECUTOR_EXTCOMMAND EXECUTOR_LOGOPTIONS" +
" EXECUTOR_RUNTIME EXECUTOR_UNQUALIFIED" +
" FUNCTION_RND FUNCTION_UNQUALIFIED" +
" MATCHING_DONE MATCHING_MCSUCCESS" +
" MATCHING_MCUNSUCC MATCHING_MMSUCCESS" +
" MATCHING_MMUNSUCC MATCHING_PCSUCCESS" +
" MATCHING_PCUNSUCC MATCHING_PMSUCCESS" +
" MATCHING_PMUNSUCC MATCHING_PROBLEM" +
" MATCHING_TIMEOUT MATCHING_UNQUALIFIED" +
" PARALLEL_PORTCONN PARALLEL_PORTMAP" +
" PARALLEL_PTC PARALLEL_UNQUALIFIED" +
" PORTEVENT_DUALRECV PORTEVENT_DUALSEND" +
" PORTEVENT_MCRECV PORTEVENT_MCSEND" +
" PORTEVENT_MMRECV PORTEVENT_MMSEND" +
" PORTEVENT_MQUEUE PORTEVENT_PCIN" +
" PORTEVENT_PCOUT PORTEVENT_PMIN" +
" PORTEVENT_PMOUT PORTEVENT_PQUEUE" +
" PORTEVENT_STATE PORTEVENT_UNQUALIFIED" +
" STATISTICS_UNQUALIFIED STATISTICS_VERDICT" +
" TESTCASE_FINISH TESTCASE_START" +
" TESTCASE_UNQUALIFIED TIMEROP_GUARD" +
" TIMEROP_READ TIMEROP_START TIMEROP_STOP" +
" TIMEROP_TIMEOUT TIMEROP_UNQUALIFIED" +
" USER_UNQUALIFIED VERDICTOP_FINAL" +
" VERDICTOP_GETVERDICT VERDICTOP_SETVERDICT" +
" VERDICTOP_UNQUALIFIED WARNING_UNQUALIFIED"),
externalCommands: words("BeginControlPart EndControlPart BeginTestCase" +
" EndTestCase"),
multiLineStrings: true
});
});
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment