2023-01-16 22:26:34 +00:00
ace . define ( "ace/mode/forth_highlight_rules" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/mode/text_highlight_rules" ] , function ( require , exports , module ) { /* This file was autogenerated from https://raw.github.com/vze26m98/Forth.tmbundle/master/Syntaxes/Forth.tmLanguage (uuid: ) */
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 ForthHighlightRules = function ( ) {
this . $rules = { start : [ { include : '#forth' } ] ,
'#comment' : [ { token : 'comment.line.double-dash.forth' ,
regex : '(?:^|\\s)--\\s.*$' ,
comment : 'line comments for iForth' } ,
{ token : 'comment.line.backslash.forth' ,
regex : '(?:^|\\s)\\\\[\\s\\S]*$' ,
comment : 'ANSI line comment' } ,
{ token : 'comment.line.backslash-g.forth' ,
regex : '(?:^|\\s)\\\\[Gg] .*$' ,
comment : 'gForth line comment' } ,
{ token : 'comment.block.forth' ,
regex : '(?:^|\\s)\\(\\*(?=\\s|$)' ,
push : [ { token : 'comment.block.forth' ,
regex : '(?:^|\\s)\\*\\)(?=\\s|$)' ,
next : 'pop' } ,
{ defaultToken : 'comment.block.forth' } ] ,
comment : 'multiline comments for iForth' } ,
{ token : 'comment.block.documentation.forth' ,
regex : '\\bDOC\\b' ,
2013-12-30 15:00:16 +00:00
caseInsensitive : true ,
2023-01-16 22:26:34 +00:00
push : [ { token : 'comment.block.documentation.forth' ,
regex : '\\bENDDOC\\b' ,
caseInsensitive : true ,
next : 'pop' } ,
{ defaultToken : 'comment.block.documentation.forth' } ] ,
comment : 'documentation comments for iForth' } ,
{ token : 'comment.line.parentheses.forth' ,
regex : '(?:^|\\s)\\.?\\( [^)]*\\)' ,
comment : 'ANSI line comment' } ] ,
'#constant' : [ { token : 'constant.language.forth' ,
regex : '(?:^|\\s)(?:TRUE|FALSE|BL|PI|CELL|C/L|R/O|W/O|R/W)(?=\\s|$)' ,
caseInsensitive : true } ,
{ token : 'constant.numeric.forth' ,
regex : '(?:^|\\s)[$#%]?[-+]?[0-9]+(?:\\.[0-9]*e-?[0-9]+|\\.?[0-9a-fA-F]*)(?=\\s|$)' } ,
{ token : 'constant.character.forth' ,
regex : '(?:^|\\s)(?:[&^]\\S|(?:"|\')\\S(?:"|\'))(?=\\s|$)' } ] ,
'#forth' : [ { include : '#constant' } ,
{ include : '#comment' } ,
{ include : '#string' } ,
{ include : '#word' } ,
{ include : '#variable' } ,
{ include : '#storage' } ,
{ include : '#word-def' } ] ,
'#storage' : [ { token : 'storage.type.forth' ,
regex : '(?:^|\\s)(?:2CONSTANT|2VARIABLE|ALIAS|CONSTANT|CREATE-INTERPRET/COMPILE[:]?|CREATE|DEFER|FCONSTANT|FIELD|FVARIABLE|USER|VALUE|VARIABLE|VOCABULARY)(?=\\s|$)' ,
caseInsensitive : true } ] ,
'#string' : [ { token : 'string.quoted.double.forth' ,
regex : '(ABORT" |BREAK" |\\." |C" |0"|S\\\\?" )([^"]+")' ,
caseInsensitive : true } ,
{ token : 'string.unquoted.forth' ,
regex : '(?:INCLUDE|NEEDS|REQUIRE|USE)[ ]\\S+(?=\\s|$)' ,
caseInsensitive : true } ] ,
'#variable' : [ { token : 'variable.language.forth' ,
regex : '\\b(?:I|J)\\b' ,
caseInsensitive : true } ] ,
'#word' : [ { token : 'keyword.control.immediate.forth' ,
regex : '(?:^|\\s)\\[(?:\\?DO|\\+LOOP|AGAIN|BEGIN|DEFINED|DO|ELSE|ENDIF|FOR|IF|IFDEF|IFUNDEF|LOOP|NEXT|REPEAT|THEN|UNTIL|WHILE)\\](?=\\s|$)' ,
caseInsensitive : true } ,
{ token : 'keyword.other.immediate.forth' ,
regex : '(?:^|\\s)(?:COMPILE-ONLY|IMMEDIATE|IS|RESTRICT|TO|WHAT\'S|])(?=\\s|$)' ,
caseInsensitive : true } ,
{ token : 'keyword.control.compile-only.forth' ,
regex : '(?:^|\\s)(?:-DO|\\-LOOP|\\?DO|\\?LEAVE|\\+DO|\\+LOOP|ABORT\\"|AGAIN|AHEAD|BEGIN|CASE|DO|ELSE|ENDCASE|ENDIF|ENDOF|ENDTRY\\-IFERROR|ENDTRY|FOR|IF|IFERROR|LEAVE|LOOP|NEXT|RECOVER|REPEAT|RESTORE|THEN|TRY|U\\-DO|U\\+DO|UNTIL|WHILE)(?=\\s|$)' ,
caseInsensitive : true } ,
{ token : 'keyword.other.compile-only.forth' ,
regex : '(?:^|\\s)(?:\\?DUP-0=-IF|\\?DUP-IF|\\)|\\[|\\[\'\\]|\\[CHAR\\]|\\[COMPILE\\]|\\[IS\\]|\\[TO\\]|<COMPILATION|<INTERPRETATION|ASSERT\\(|ASSERT0\\(|ASSERT1\\(|ASSERT2\\(|ASSERT3\\(|COMPILATION>|DEFERS|DOES>|INTERPRETATION>|OF|POSTPONE)(?=\\s|$)' ,
caseInsensitive : true } ,
{ token : 'keyword.other.non-immediate.forth' ,
regex : '(?:^|\\s)(?:\'|<IS>|<TO>|CHAR|END-STRUCT|INCLUDE[D]?|LOAD|NEEDS|REQUIRE[D]?|REVISION|SEE|STRUCT|THRU|USE)(?=\\s|$)' ,
caseInsensitive : true } ,
{ token : 'keyword.other.warning.forth' ,
regex : '(?:^|\\s)(?:~~|BREAK:|BREAK"|DBG)(?=\\s|$)' ,
caseInsensitive : true } ] ,
'#word-def' : [ { token : [ 'keyword.other.compile-only.forth' ,
'keyword.other.compile-only.forth' ,
'meta.block.forth' ,
'entity.name.function.forth' ] ,
regex : '(:NONAME)|(^:|\\s:)(\\s)(\\S+)(?=\\s|$)' ,
2013-12-30 15:00:16 +00:00
caseInsensitive : true ,
2023-01-16 22:26:34 +00:00
push : [ { token : 'keyword.other.compile-only.forth' ,
regex : ';(?:CODE)?' ,
caseInsensitive : true ,
next : 'pop' } ,
{ include : '#constant' } ,
{ include : '#comment' } ,
{ include : '#string' } ,
{ include : '#word' } ,
{ include : '#variable' } ,
{ include : '#storage' } ,
{ defaultToken : 'meta.block.forth' } ] } ] } ;
2013-12-30 15:00:16 +00:00
this . normalizeRules ( ) ;
} ;
2023-01-16 22:26:34 +00:00
ForthHighlightRules . metaData = { fileTypes : [ 'frt' , 'fs' , 'ldr' , 'fth' , '4th' ] ,
foldingStartMarker : '/\\*\\*|\\{\\s*$' ,
foldingStopMarker : '\\*\\*/|^\\s*\\}' ,
keyEquivalent : '^~F' ,
name : 'Forth' ,
scopeName : 'source.forth' } ;
2013-12-30 15:00:16 +00:00
oop . inherits ( ForthHighlightRules , TextHighlightRules ) ;
exports . ForthHighlightRules = ForthHighlightRules ;
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/cstyle" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/range" , "ace/mode/folding/fold_mode" ] , function ( require , exports , module ) { "use strict" ;
2013-12-30 15:00:16 +00:00
var oop = require ( "../../lib/oop" ) ;
var Range = require ( "../../range" ) . Range ;
var BaseFoldMode = require ( "./fold_mode" ) . FoldMode ;
2023-01-16 22:26:34 +00:00
var FoldMode = exports . FoldMode = function ( commentRegex ) {
2013-12-30 15:00:16 +00:00
if ( commentRegex ) {
2023-01-16 22:26:34 +00:00
this . foldingStartMarker = new RegExp ( this . foldingStartMarker . source . replace ( /\|[^|]*?$/ , "|" + commentRegex . start ) ) ;
this . foldingStopMarker = new RegExp ( this . foldingStopMarker . source . replace ( /\|[^|]*?$/ , "|" + commentRegex . end ) ) ;
2013-12-30 15:00:16 +00:00
}
} ;
oop . inherits ( FoldMode , BaseFoldMode ) ;
2023-01-16 22:26:34 +00:00
( function ( ) {
2020-04-14 12:14:48 +00:00
this . foldingStartMarker = /([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/ ;
this . foldingStopMarker = /^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/ ;
2023-01-16 22:26:34 +00:00
this . singleLineBlockCommentRe = /^\s*(\/\*).*\*\/\s*$/ ;
2014-07-08 20:15:22 +00:00
this . tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/ ;
2015-11-19 16:37:40 +00:00
this . startRegionRe = /^\s*(\/\*|\/\/)#?region\b/ ;
2014-07-08 20:15:22 +00:00
this . _getFoldWidgetBase = this . getFoldWidget ;
2023-01-16 22:26:34 +00:00
this . getFoldWidget = function ( session , foldStyle , row ) {
2014-07-08 20:15:22 +00:00
var line = session . getLine ( row ) ;
if ( this . singleLineBlockCommentRe . test ( line ) ) {
if ( ! this . startRegionRe . test ( line ) && ! this . tripleStarBlockCommentRe . test ( line ) )
return "" ;
}
var fw = this . _getFoldWidgetBase ( session , foldStyle , row ) ;
if ( ! fw && this . startRegionRe . test ( line ) )
return "start" ; // lineCommentRegionStart
return fw ;
} ;
2023-01-16 22:26:34 +00:00
this . getFoldWidgetRange = function ( session , foldStyle , row , forceMultiline ) {
2013-12-30 15:00:16 +00:00
var line = session . getLine ( row ) ;
2014-07-08 20:15:22 +00:00
if ( this . startRegionRe . test ( line ) )
return this . getCommentRegionBlock ( session , line , row ) ;
2013-12-30 15:00:16 +00:00
var match = line . match ( this . foldingStartMarker ) ;
if ( match ) {
var i = match . index ;
if ( match [ 1 ] )
return this . openingBracketBlock ( session , match [ 1 ] , row , i ) ;
var range = session . getCommentFoldRange ( row , i + match [ 0 ] . length , 1 ) ;
if ( range && ! range . isMultiLine ( ) ) {
if ( forceMultiline ) {
range = this . getSectionRange ( session , row ) ;
2023-01-16 22:26:34 +00:00
}
else if ( foldStyle != "all" )
2013-12-30 15:00:16 +00:00
range = null ;
}
return range ;
}
if ( foldStyle === "markbegin" )
return ;
var match = line . match ( this . foldingStopMarker ) ;
if ( match ) {
var i = match . index + match [ 0 ] . length ;
if ( match [ 1 ] )
return this . closingBracketBlock ( session , match [ 1 ] , row , i ) ;
return session . getCommentFoldRange ( row , i , - 1 ) ;
}
} ;
2023-01-16 22:26:34 +00:00
this . getSectionRange = function ( session , row ) {
2013-12-30 15:00:16 +00:00
var line = session . getLine ( row ) ;
var startIndent = line . search ( /\S/ ) ;
var startRow = row ;
var startColumn = line . length ;
row = row + 1 ;
var endRow = row ;
var maxRow = session . getLength ( ) ;
while ( ++ row < maxRow ) {
line = session . getLine ( row ) ;
var indent = line . search ( /\S/ ) ;
if ( indent === - 1 )
continue ;
2023-01-16 22:26:34 +00:00
if ( startIndent > indent )
2013-12-30 15:00:16 +00:00
break ;
var subRange = this . getFoldWidgetRange ( session , "all" , row ) ;
if ( subRange ) {
if ( subRange . start . row <= startRow ) {
break ;
2023-01-16 22:26:34 +00:00
}
else if ( subRange . isMultiLine ( ) ) {
2013-12-30 15:00:16 +00:00
row = subRange . end . row ;
2023-01-16 22:26:34 +00:00
}
else if ( startIndent == indent ) {
2013-12-30 15:00:16 +00:00
break ;
}
}
endRow = row ;
}
return new Range ( startRow , startColumn , endRow , session . getLine ( endRow ) . length ) ;
} ;
2023-01-16 22:26:34 +00:00
this . getCommentRegionBlock = function ( session , line , row ) {
2014-07-08 20:15:22 +00:00
var startColumn = line . search ( /\s*$/ ) ;
var maxRow = session . getLength ( ) ;
var startRow = row ;
2015-11-19 16:37:40 +00:00
var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/ ;
2014-07-08 20:15:22 +00:00
var depth = 1 ;
while ( ++ row < maxRow ) {
line = session . getLine ( row ) ;
var m = re . exec ( line ) ;
2023-01-16 22:26:34 +00:00
if ( ! m )
continue ;
if ( m [ 1 ] )
depth -- ;
else
depth ++ ;
if ( ! depth )
break ;
2014-07-08 20:15:22 +00:00
}
var endRow = row ;
if ( endRow > startRow ) {
return new Range ( startRow , startColumn , endRow , line . length ) ;
}
} ;
2013-12-30 15:00:16 +00:00
} ) . call ( FoldMode . prototype ) ;
} ) ;
2014-07-08 20:15:22 +00:00
2023-01-16 22:26:34 +00:00
ace . define ( "ace/mode/forth" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/mode/text" , "ace/mode/forth_highlight_rules" , "ace/mode/folding/cstyle" ] , function ( require , exports , module ) { / *
THIS FILE WAS AUTOGENERATED BY mode . tmpl . js
* /
2014-07-08 20:15:22 +00:00
"use strict" ;
var oop = require ( "../lib/oop" ) ;
var TextMode = require ( "./text" ) . Mode ;
var ForthHighlightRules = require ( "./forth_highlight_rules" ) . ForthHighlightRules ;
var FoldMode = require ( "./folding/cstyle" ) . FoldMode ;
2023-01-16 22:26:34 +00:00
var Mode = function ( ) {
2014-07-08 20:15:22 +00:00
this . HighlightRules = ForthHighlightRules ;
this . foldingRules = new FoldMode ( ) ;
2017-02-05 20:05:00 +00:00
this . $behaviour = this . $defaultBehaviour ;
2014-07-08 20:15:22 +00:00
} ;
oop . inherits ( Mode , TextMode ) ;
2023-01-16 22:26:34 +00:00
( function ( ) {
2014-07-08 20:15:22 +00:00
this . lineCommentStart = "--" ;
2015-11-19 16:37:40 +00:00
this . blockComment = null ;
2014-07-08 20:15:22 +00:00
this . $id = "ace/mode/forth" ;
} ) . 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/forth" ] , function ( m ) {
if ( typeof module == "object" && typeof exports == "object" && module ) {
module . exports = m ;
}
} ) ;
} ) ( ) ;