2014-06-18 23:27:05 +02:00
ace . define ( "ace/ext/language_tools" , [ "require" , "exports" , "module" , "ace/snippets" , "ace/autocomplete" , "ace/config" , "ace/autocomplete/util" , "ace/autocomplete/text_completer" , "ace/editor" ] , function ( e , t , n ) { var r = e ( "../snippets" ) . snippetManager , i = e ( "../autocomplete" ) . Autocomplete , s = e ( "../config" ) , o = e ( "../autocomplete/util" ) , u = e ( "../autocomplete/text_completer" ) , a = { getCompletions : function ( e , t , n , r , i ) { var s = e . session . getState ( n . row ) , o = t . $mode . getCompletions ( s , t , n , r ) ; i ( null , o ) } } , f = { getCompletions : function ( e , t , n , i , s ) { var o = r . snippetMap , u = [ ] ; r . getActiveScopes ( e ) . forEach ( function ( e ) { var t = o [ e ] || [ ] ; for ( var n = t . length ; n -- ; ) { var r = t [ n ] , i = r . name || r . tabTrigger ; if ( ! i ) continue ; u . push ( { caption : i , snippet : r . content , meta : r . tabTrigger && ! r . name ? r . tabTrigger + "\u21e5 " : "snippet" } ) } } , this ) , s ( null , u ) } } , l = [ f , u , a ] ; t . addCompleter = function ( e ) { l . push ( e ) } , t . textCompleter = u , t . keyWordCompleter = a , t . snippetCompleter = f ; var c = { name : "expandSnippet" , exec : function ( e ) { var t = r . expandWithTab ( e ) ; t || e . execCommand ( "indent" ) } , bindKey : "Tab" } , h = function ( e , t ) { p ( t . session . $mode ) } , p = function ( e ) { var t = e . $id ; r . files || ( r . files = { } ) , d ( t ) , e . modes && e . modes . forEach ( p ) } , d = function ( e ) { if ( ! e || r . files [ e ] ) return ; var t = e . replace ( "mode" , "snippets" ) ; r . files [ e ] = { } , s . loadModule ( t , function ( t ) { t && ( r . files [ e ] = t , ! t . snippets && t . snippetText && ( t . snippets = r . parseSnippetFile ( t . snippetText ) ) , r . register ( t . snippets || [ ] , t . scope ) , t . includeScopes && ( r . snippetMap [ t . scope ] . includeScopes = t . includeScopes , t . includeScopes . forEach ( function ( e ) { d ( "ace/mode/" + e ) } ) ) ) } ) } , v = function ( e ) { var t = e . editor , n = e . args || "" , r = t . getCursorPosition ( ) , s = t . session . getLine ( r . row ) , u = t . completer && t . completer . activated , a = o . retrievePrecedingIdentifier ( s , r . column ) ; l . forEach ( function ( e ) { e . identifierRegexps && e . identifierRegexps . forEach ( function ( e ) { a || ( a = o . retrievePrecedingIdentifier ( s , r . column , e ) ) } ) } ) , e . command . name === "backspace" && ! a ? u && t . completer . detach ( ) : e . command . name === "insertstring" && ( a && ! u ? ( t . completer || ( t . completer = new i , t . completer . autoSelect = ! 1 , t . completer . autoInsert = ! 1 ) , t . completer . showPopup ( t ) ) : ! a && u && t . completer . detach ( ) ) } , m = e ( "../editor" ) . Editor ; e ( "../config" ) . defineOptions ( m . prototype , "editor" , { enableBasicAutocompletion : { set : function ( e ) { e ? ( this . completers = Array . isArray ( e ) ? e : l , this . commands . addCommand ( i . startCommand ) ) : this . commands . removeCommand ( i . startCommand ) } , value : ! 1 } , enableLiveAutocompletion : { set : function ( e ) { e ? ( this . completers = Array . isArray ( e ) ? e : l , this . commands . on ( "afterExec" , v ) ) : this . commands . removeListener ( "afterExec" , v ) } , value : ! 1 } , enableSnippets : { set : function ( e ) { e ? ( this . commands . addCommand ( c ) , this . on ( "changeMode" , h ) , h ( null , this ) ) : ( this . commands . removeCommand ( c ) , this . off ( "changeMode" , h ) ) } , value : ! 1 } } ) } ) , ace . define ( "ace/snippets" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/lib/event_emitter" , "ace/lib/lang" , "ace/range" , "ace/anchor" , "ace/keyboard/hash_handler" , "ace/tokenizer" , "ace/lib/dom" , "ace/editor" ] , function ( e , t , n ) { var r = e ( "./lib/oop" ) , i = e ( "./lib/event_emitter" ) . EventEmitter , s = e ( "./lib/lang" ) , o = e ( "./range" ) . Range , u = e ( "./anchor" ) . Anchor , a = e ( "./keyboard/hash_handler" ) . HashHandler , f = e ( "./tokenizer" ) . Tokenizer , l = o . comparePoints , c = function ( ) { this . snippetMap = { } , this . snippetNameMap = { } } ; ( function ( ) { r . implement ( this , i ) , this . getTokenizer = function ( ) { function e ( e , t , n ) { return e = e . substr ( 1 ) , /^\d+$/ . test ( e ) && ! n . inFormatString ? [ { tabstopId : parseInt ( e , 10 ) } ] : [ { text : e } ] } function t ( e ) { return "(?:[^\\\\" + e + "]|\\\\.)" } return c . $tokenizer = new f ( { start : [ { regex : /:/ , onMatch : function ( e , t , n ) { return n . length && n [ 0 ] . expectIf ? ( n [ 0 ] . expectIf = ! 1 , n [ 0 ] . elseBranch = n [ 0 ] , [ n [ 0 ] ] ) : ":" } } , { regex : /\\./ , onMatch : function ( e , t , n ) { var r = e [ 1 ] ; return r == "}" && n . length ? e = r : "`$\\" . indexOf ( r ) != - 1 ? e = r : n . inFormatString && ( r == "n" ? e = "\n" : r == "t" ? e = "\n" : "ulULE" . indexOf ( r ) != - 1 && ( e = { changeCase : r , local : r > "a" } ) ) , [ e ] } } , { regex : /}/ , onMatch : function ( e , t , n ) { return [ n . length ? n . shift ( ) : e ] } } , { regex : /\$(?:\d+|\w+)/ , onMatch : e } , { regex : /\$\{[\dA-Z_a-z]+/ , onMatch : function ( t , n , r ) { var i = e ( t . substr ( 1 ) , n , r ) ; return r . unshift ( i [ 0 ] ) , i } , next : "snippetVar" } , { regex : /\n/ , token : "newline" , merge : ! 1 } ] , snippetVar : [ { regex : "\\|" + t ( "\\|" ) + "*\\|" , onMatch : function ( e , t , n ) { n [ 0 ] . choices = e . slice ( 1 , - 1 ) . split ( "," ) } , next : "start"