2023-01-16 22:26:34 +00:00
ace . define ( "ace/mode/logiql_highlight_rules" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/mode/text_highlight_rules" ] , function ( require , exports , module ) { /* THIS FILE WAS AUTOGENERATED FROM tool\LogicBlox.tmbundle\Syntaxes\LogicBlox.tmLanguage (UUID: 59bf5022-e261-453f-b1cb-9f9fa0712413) */
2014-07-08 20:15:22 +00:00
"use strict" ;
2013-12-30 15:00:16 +00:00
var oop = require ( "../lib/oop" ) ;
var TextHighlightRules = require ( "./text_highlight_rules" ) . TextHighlightRules ;
2023-01-16 22:26:34 +00:00
var LogiQLHighlightRules = function ( ) {
this . $rules = { start : [ { token : 'comment.block' ,
regex : '/\\*' ,
push : [ { token : 'comment.block' , regex : '\\*/' , next : 'pop' } ,
{ defaultToken : 'comment.block' } ]
2013-12-30 15:00:16 +00:00
} ,
2023-01-16 22:26:34 +00:00
{ token : 'comment.single' ,
regex : '//.*'
2013-12-30 15:00:16 +00:00
} ,
2023-01-16 22:26:34 +00:00
{ token : 'constant.numeric' ,
regex : '\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?[fd]?'
2013-12-30 15:00:16 +00:00
} ,
2023-01-16 22:26:34 +00:00
{ token : 'string' ,
regex : '"' ,
push : [ { token : 'string' , regex : '"' , next : 'pop' } ,
{ defaultToken : 'string' } ]
2013-12-30 15:00:16 +00:00
} ,
2023-01-16 22:26:34 +00:00
{ token : 'constant.language' ,
regex : '\\b(true|false)\\b'
2013-12-30 15:00:16 +00:00
} ,
2023-01-16 22:26:34 +00:00
{ token : 'entity.name.type.logicblox' ,
regex : '`[a-zA-Z_:]+(\\d|\\a)*\\b'
2013-12-30 15:00:16 +00:00
} ,
2023-01-16 22:26:34 +00:00
{ token : 'keyword.start' , regex : '->' , comment : 'Constraint' } ,
{ token : 'keyword.start' , regex : '-->' , comment : 'Level 1 Constraint' } ,
{ token : 'keyword.start' , regex : '<-' , comment : 'Rule' } ,
{ token : 'keyword.start' , regex : '<--' , comment : 'Level 1 Rule' } ,
{ token : 'keyword.end' , regex : '\\.' , comment : 'Terminator' } ,
{ token : 'keyword.other' , regex : '!' , comment : 'Negation' } ,
{ token : 'keyword.other' , regex : ',' , comment : 'Conjunction' } ,
{ token : 'keyword.other' , regex : ';' , comment : 'Disjunction' } ,
{ token : 'keyword.operator' , regex : '<=|>=|!=|<|>' , comment : 'Equality' } ,
{ token : 'keyword.other' , regex : '@' , comment : 'Equality' } ,
{ token : 'keyword.operator' , regex : '\\+|-|\\*|/' , comment : 'Arithmetic operations' } ,
{ token : 'keyword' , regex : '::' , comment : 'Colon colon' } ,
{ token : 'support.function' ,
regex : '\\b(agg\\s*<<)' ,
push : [ { include : '$self' } ,
{ token : 'support.function' ,
regex : '>>' ,
next : 'pop' } ]
2013-12-30 15:00:16 +00:00
} ,
2023-01-16 22:26:34 +00:00
{ token : 'storage.modifier' ,
regex : '\\b(lang:[\\w:]*)'
2013-12-30 15:00:16 +00:00
} ,
2023-01-16 22:26:34 +00:00
{ token : [ 'storage.type' , 'text' ] ,
regex : '(export|sealed|clauses|block|alias|alias_all)(\\s*\\()(?=`)'
2013-12-30 15:00:16 +00:00
} ,
2023-01-16 22:26:34 +00:00
{ token : 'entity.name' ,
regex : '[a-zA-Z_][a-zA-Z_0-9:]*(@prev|@init|@final)?(?=(\\(|\\[))'
2013-12-30 15:00:16 +00:00
} ,
2023-01-16 22:26:34 +00:00
{ token : 'variable.parameter' ,
regex : '([a-zA-Z][a-zA-Z_0-9]*|_)\\s*(?=(,|\\.|<-|->|\\)|\\]|=))'
} ] } ;
2013-12-30 15:00:16 +00:00
this . normalizeRules ( ) ;
} ;
oop . inherits ( LogiQLHighlightRules , TextHighlightRules ) ;
exports . LogiQLHighlightRules = LogiQLHighlightRules ;
2023-01-16 22:26:34 +00:00
} ) ;
2013-12-30 15:00:16 +00:00
2023-01-16 22:26:34 +00:00
ace . define ( "ace/mode/folding/coffee" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/mode/folding/fold_mode" , "ace/range" ] , function ( require , exports , module ) { "use strict" ;
2013-12-30 15:00:16 +00:00
var oop = require ( "../../lib/oop" ) ;
var BaseFoldMode = require ( "./fold_mode" ) . FoldMode ;
var Range = require ( "../../range" ) . Range ;
2023-01-16 22:26:34 +00:00
var FoldMode = exports . FoldMode = function ( ) { } ;
2013-12-30 15:00:16 +00:00
oop . inherits ( FoldMode , BaseFoldMode ) ;
2023-01-16 22:26:34 +00:00
( function ( ) {
this . getFoldWidgetRange = function ( session , foldStyle , row ) {
2013-12-30 15:00:16 +00:00
var range = this . indentationBlock ( session , row ) ;
if ( range )
return range ;
var re = /\S/ ;
var line = session . getLine ( row ) ;
var startLevel = line . search ( re ) ;
if ( startLevel == - 1 || line [ startLevel ] != "#" )
return ;
var startColumn = line . length ;
var maxRow = session . getLength ( ) ;
var startRow = row ;
var endRow = row ;
while ( ++ row < maxRow ) {
line = session . getLine ( row ) ;
var level = line . search ( re ) ;
if ( level == - 1 )
continue ;
if ( line [ level ] != "#" )
break ;
endRow = row ;
}
if ( endRow > startRow ) {
var endColumn = session . getLine ( endRow ) . length ;
return new Range ( startRow , startColumn , endRow , endColumn ) ;
}
} ;
2023-01-16 22:26:34 +00:00
this . getFoldWidget = function ( session , foldStyle , row ) {
2013-12-30 15:00:16 +00:00
var line = session . getLine ( row ) ;
var indent = line . search ( /\S/ ) ;
var next = session . getLine ( row + 1 ) ;
var prev = session . getLine ( row - 1 ) ;
var prevIndent = prev . search ( /\S/ ) ;
var nextIndent = next . search ( /\S/ ) ;
if ( indent == - 1 ) {
2023-01-16 22:26:34 +00:00
session . foldWidgets [ row - 1 ] = prevIndent != - 1 && prevIndent < nextIndent ? "start" : "" ;
2013-12-30 15:00:16 +00:00
return "" ;
}
if ( prevIndent == - 1 ) {
if ( indent == nextIndent && line [ indent ] == "#" && next [ indent ] == "#" ) {
session . foldWidgets [ row - 1 ] = "" ;
session . foldWidgets [ row + 1 ] = "" ;
return "start" ;
}
2023-01-16 22:26:34 +00:00
}
else if ( prevIndent == indent && line [ indent ] == "#" && prev [ indent ] == "#" ) {
2013-12-30 15:00:16 +00:00
if ( session . getLine ( row - 2 ) . search ( /\S/ ) == - 1 ) {
session . foldWidgets [ row - 1 ] = "start" ;
session . foldWidgets [ row + 1 ] = "" ;
return "" ;
}
}
2023-01-16 22:26:34 +00:00
if ( prevIndent != - 1 && prevIndent < indent )
2013-12-30 15:00:16 +00:00
session . foldWidgets [ row - 1 ] = "start" ;
else
session . foldWidgets [ row - 1 ] = "" ;
if ( indent < nextIndent )
return "start" ;
else
return "" ;
} ;
} ) . call ( FoldMode . prototype ) ;
} ) ;
2023-01-16 22:26:34 +00:00
ace . define ( "ace/mode/matching_brace_outdent" , [ "require" , "exports" , "module" , "ace/range" ] , function ( require , exports , module ) { "use strict" ;
2013-12-30 15:00:16 +00:00
var Range = require ( "../range" ) . Range ;
2023-01-16 22:26:34 +00:00
var MatchingBraceOutdent = function ( ) { } ;
( function ( ) {
this . checkOutdent = function ( line , input ) {
if ( ! /^\s+$/ . test ( line ) )
2013-12-30 15:00:16 +00:00
return false ;
return /^\s*\}/ . test ( input ) ;
} ;
2023-01-16 22:26:34 +00:00
this . autoOutdent = function ( doc , row ) {
2013-12-30 15:00:16 +00:00
var line = doc . getLine ( row ) ;
var match = line . match ( /^(\s*\})/ ) ;
2023-01-16 22:26:34 +00:00
if ( ! match )
return 0 ;
2013-12-30 15:00:16 +00:00
var column = match [ 1 ] . length ;
2023-01-16 22:26:34 +00:00
var openBracePos = doc . findMatchingBracket ( { row : row , column : column } ) ;
if ( ! openBracePos || openBracePos . row == row )
return 0 ;
2013-12-30 15:00:16 +00:00
var indent = this . $getIndent ( doc . getLine ( openBracePos . row ) ) ;
2023-01-16 22:26:34 +00:00
doc . replace ( new Range ( row , 0 , row , column - 1 ) , indent ) ;
2013-12-30 15:00:16 +00:00
} ;
2023-01-16 22:26:34 +00:00
this . $getIndent = function ( line ) {
2013-12-30 15:00:16 +00:00
return line . match ( /^\s*/ ) [ 0 ] ;
} ;
} ) . call ( MatchingBraceOutdent . prototype ) ;
exports . MatchingBraceOutdent = MatchingBraceOutdent ;
2014-07-08 20:15:22 +00:00
2023-01-16 22:26:34 +00:00
} ) ;
2014-07-08 20:15:22 +00:00
2023-01-16 22:26:34 +00:00
ace . define ( "ace/mode/logiql" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/mode/text" , "ace/mode/logiql_highlight_rules" , "ace/mode/folding/coffee" , "ace/token_iterator" , "ace/range" , "ace/mode/behaviour/cstyle" , "ace/mode/matching_brace_outdent" ] , function ( require , exports , module ) { "use strict" ;
2014-07-08 20:15:22 +00:00
var oop = require ( "../lib/oop" ) ;
var TextMode = require ( "./text" ) . Mode ;
var LogiQLHighlightRules = require ( "./logiql_highlight_rules" ) . LogiQLHighlightRules ;
var FoldMode = require ( "./folding/coffee" ) . FoldMode ;
var TokenIterator = require ( "../token_iterator" ) . TokenIterator ;
var Range = require ( "../range" ) . Range ;
var CstyleBehaviour = require ( "./behaviour/cstyle" ) . CstyleBehaviour ;
var MatchingBraceOutdent = require ( "./matching_brace_outdent" ) . MatchingBraceOutdent ;
2023-01-16 22:26:34 +00:00
var Mode = function ( ) {
2014-07-08 20:15:22 +00:00
this . HighlightRules = LogiQLHighlightRules ;
this . foldingRules = new FoldMode ( ) ;
this . $outdent = new MatchingBraceOutdent ( ) ;
this . $behaviour = new CstyleBehaviour ( ) ;
} ;
oop . inherits ( Mode , TextMode ) ;
2023-01-16 22:26:34 +00:00
( function ( ) {
2014-07-08 20:15:22 +00:00
this . lineCommentStart = "//" ;
2023-01-16 22:26:34 +00:00
this . blockComment = { start : "/*" , end : "*/" } ;
this . getNextLineIndent = function ( state , line , tab ) {
2014-07-08 20:15:22 +00:00
var indent = this . $getIndent ( line ) ;
var tokenizedLine = this . getTokenizer ( ) . getLineTokens ( line , state ) ;
var tokens = tokenizedLine . tokens ;
var endState = tokenizedLine . state ;
2023-01-16 22:26:34 +00:00
if ( /comment|string/ . test ( endState ) )
2014-07-08 20:15:22 +00:00
return indent ;
if ( tokens . length && tokens [ tokens . length - 1 ] . type == "comment.single" )
return indent ;
var match = line . match ( ) ;
if ( /(-->|<--|<-|->|{)\s*$/ . test ( line ) )
indent += tab ;
return indent ;
} ;
2023-01-16 22:26:34 +00:00
this . checkOutdent = function ( state , line , input ) {
2014-07-08 20:15:22 +00:00
if ( this . $outdent . checkOutdent ( line , input ) )
return true ;
if ( input !== "\n" && input !== "\r\n" )
return false ;
if ( ! /^\s+/ . test ( line ) )
return false ;
return true ;
} ;
2023-01-16 22:26:34 +00:00
this . autoOutdent = function ( state , doc , row ) {
2014-07-08 20:15:22 +00:00
if ( this . $outdent . autoOutdent ( doc , row ) )
return ;
var prevLine = doc . getLine ( row ) ;
var match = prevLine . match ( /^\s+/ ) ;
var column = prevLine . lastIndexOf ( "." ) + 1 ;
2023-01-16 22:26:34 +00:00
if ( ! match || ! row || ! column )
return 0 ;
2014-07-08 20:15:22 +00:00
var line = doc . getLine ( row + 1 ) ;
2023-01-16 22:26:34 +00:00
var startRange = this . getMatching ( doc , { row : row , column : column } ) ;
if ( ! startRange || startRange . start . row == row )
return 0 ;
2014-07-08 20:15:22 +00:00
column = match [ 0 ] . length ;
var indent = this . $getIndent ( doc . getLine ( startRange . start . row ) ) ;
doc . replace ( new Range ( row + 1 , 0 , row + 1 , column ) , indent ) ;
} ;
2023-01-16 22:26:34 +00:00
this . getMatching = function ( session , row , column ) {
2014-07-08 20:15:22 +00:00
if ( row == undefined )
2020-04-14 12:14:48 +00:00
row = session . selection . lead ;
2014-07-08 20:15:22 +00:00
if ( typeof row == "object" ) {
column = row . column ;
row = row . row ;
}
var startToken = session . getTokenAt ( row , column ) ;
var KW _START = "keyword.start" , KW _END = "keyword.end" ;
var tok ;
if ( ! startToken )
return ;
if ( startToken . type == KW _START ) {
var it = new TokenIterator ( session , row , column ) ;
it . step = it . stepForward ;
2023-01-16 22:26:34 +00:00
}
else if ( startToken . type == KW _END ) {
2014-07-08 20:15:22 +00:00
var it = new TokenIterator ( session , row , column ) ;
it . step = it . stepBackward ;
2023-01-16 22:26:34 +00:00
}
else
2014-07-08 20:15:22 +00:00
return ;
while ( tok = it . step ( ) ) {
if ( tok . type == KW _START || tok . type == KW _END )
break ;
}
if ( ! tok || tok . type == startToken . type )
return ;
var col = it . getCurrentTokenColumn ( ) ;
var row = it . getCurrentTokenRow ( ) ;
return new Range ( row , col , row , col + tok . value . length ) ;
} ;
this . $id = "ace/mode/logiql" ;
} ) . call ( Mode . prototype ) ;
exports . Mode = Mode ;
2023-01-16 22:26:34 +00:00
2020-04-14 12:14:48 +00:00
} ) ; ( function ( ) {
ace . require ( [ "ace/mode/logiql" ] , function ( m ) {
if ( typeof module == "object" && typeof exports == "object" && module ) {
module . exports = m ;
}
} ) ;
} ) ( ) ;