2014-06-18 23:27:05 +02:00
ace . define ( "ace/ext/elastic_tabstops_lite" , [ "require" , "exports" , "module" , "ace/editor" , "ace/config" ] , function ( e , t , n ) { var r = function ( e ) { this . $editor = e ; var t = this , n = [ ] , r = ! 1 ; this . onAfterExec = function ( ) { r = ! 1 , t . processRows ( n ) , n = [ ] } , this . onExec = function ( ) { r = ! 0 } , this . onChange = function ( e ) { var t = e . data . range ; r && ( n . indexOf ( t . start . row ) == - 1 && n . push ( t . start . row ) , t . end . row != t . start . row && n . push ( t . end . row ) ) } } ; ( function ( ) { this . processRows = function ( e ) { this . $inChange = ! 0 ; var t = [ ] ; for ( var n = 0 , r = e . length ; n < r ; n ++ ) { var i = e [ n ] ; if ( t . indexOf ( i ) > - 1 ) continue ; var s = this . $findCellWidthsForBlock ( i ) , o = this . $setBlockCellWidthsToMax ( s . cellWidths ) , u = s . firstRow ; for ( var a = 0 , f = o . length ; a < f ; a ++ ) { var l = o [ a ] ; t . push ( u ) , this . $adjustRow ( u , l ) , u ++ } } this . $inChange = ! 1 } , this . $findCellWidthsForBlock = function ( e ) { var t = [ ] , n , r = e ; while ( r >= 0 ) { n = this . $cellWidthsForRow ( r ) ; if ( n . length == 0 ) break ; t . unshift ( n ) , r -- } var i = r + 1 ; r = e ; var s = this . $editor . session . getLength ( ) ; while ( r < s - 1 ) { r ++ , n = this . $cellWidthsForRow ( r ) ; if ( n . length == 0 ) break ; t . push ( n ) } return { cellWidths : t , firstRow : i } } , this . $cellWidthsForRow = function ( e ) { var t = this . $selectionColumnsForRow ( e ) , n = [ - 1 ] . concat ( this . $tabsForRow ( e ) ) , r = n . map ( function ( e ) { return 0 } ) . slice ( 1 ) , i = this . $editor . session . getLine ( e ) ; for ( var s = 0 , o = n . length - 1 ; s < o ; s ++ ) { var u = n [ s ] + 1 , a = n [ s + 1 ] , f = this . $rightmostSelectionInCell ( t , a ) , l = i . substring ( u , a ) ; r [ s ] = Math . max ( l . replace ( /\s+$/g , "" ) . length , f - u ) } return r } , this . $selectionColumnsForRow = function ( e ) { var t = [ ] , n = this . $editor . getCursorPosition ( ) ; return this . $editor . session . getSelection ( ) . isEmpty ( ) && e == n . row && t . push ( n . column ) , t } , this . $setBlockCellWidthsToMax = function ( e ) { var t = ! 0 , n , r , i , s = this . $izip _longest ( e ) ; for ( var o = 0 , u = s . length ; o < u ; o ++ ) { var a = s [ o ] ; if ( ! a . push ) { console . error ( a ) ; continue } a . push ( NaN ) ; for ( var f = 0 , l = a . length ; f < l ; f ++ ) { var c = a [ f ] ; t && ( n = f , i = 0 , t = ! 1 ) ; if ( isNaN ( c ) ) { r = f ; for ( var h = n ; h < r ; h ++ ) e [ h ] [ o ] = i ; t = ! 0 } i = Math . max ( i , c ) } } return e } , this . $rightmostSelectionInCell = function ( e , t ) { var n = 0 ; if ( e . length ) { var r = [ ] ; for ( var i = 0 , s = e . length ; i < s ; i ++ ) e [ i ] <= t ? r . push ( i ) : r . push ( 0 ) ; n = Math . max . apply ( Math , r ) } return n } , this . $tabsForRow = function ( e ) { var t = [ ] , n = this . $editor . session . getLine ( e ) , r = /\t/g , i ; while ( ( i = r . exec ( n ) ) != null ) t . push ( i . index ) ; return t } , this . $adjustRow = function ( e , t ) { var n = this . $tabsForRow ( e ) ; if ( n . length == 0 ) return ; var r = 0 , i = - 1 , s = this . $izip ( t , n ) ; for ( var o = 0 , u = s . length ; o < u ; o ++ ) { var a = s [ o ] [ 0 ] , f = s [ o ] [ 1 ] ; i += 1 + a , f += r ; var l = i - f ; if ( l == 0 ) continue ; var c = this . $editor . session . getLine ( e ) . substr ( 0 , f ) , h = c . replace ( /\s*$/g , "" ) , p = c . length - h . length ; l > 0 && ( this . $editor . session . getDocument ( ) . insertInLine ( { row : e , column : f + 1 } , Array ( l + 1 ) . join ( " " ) + " " ) , this . $editor . session . getDocument ( ) . removeInLine ( e , f , f + 1 ) , r += l ) , l < 0 && p >= - l && ( this . $editor . session . getDocument ( ) . removeInLine ( e , f + l , f ) , r += l ) } } , this . $izip _longest = function ( e ) { if ( ! e [ 0 ] ) return [ ] ; var t = e [ 0 ] . length , n = e . length ; for ( var r = 1 ; r < n ; r ++ ) { var i = e [ r ] . length ; i > t && ( t = i ) } var s = [ ] ; for ( var o = 0 ; o < t ; o ++ ) { var u = [ ] ; for ( var r = 0 ; r < n ; r ++ ) e [ r ] [ o ] === "" ? u . push ( NaN ) : u . push ( e [ r ] [ o ] ) ; s . push ( u ) } return s } , this . $izip = function ( e , t ) { var n = e . length >= t . length ? t . length : e . length , r = [ ] ; for ( var i = 0 ; i < n ; i ++ ) { var s = [ e [ i ] , t [ i ] ] ; r . push ( s ) } return r } } ) . call ( r . prototype ) , t . ElasticTabstopsLite = r ; var i = e ( "../editor" ) . Editor ; e ( "../config" ) . defineOptions ( i . prototype , "editor" , { useElasticTabstops : { set : function ( e ) { e ? ( this . elasticTabstops || ( this . elasticTabstops = new r ( this ) ) , this . commands . on ( "afterExec" , this . elasticTabstops . onAfterExec ) , this . commands . on ( "exec" , this . elasticTabstops . onExec ) , this . on ( "change" , this . elasticTabstops . onChange ) ) : this . elasticTabstops && ( this . commands . removeListener ( "afterExec" , this . elasticTabstops . onAfterExec ) , this . commands . removeListener ( "exec" , this . elasticTabstops . onExec ) , this . removeListener ( "change" , this . elasticTabstops . onChange ) ) } } } ) } ) , function ( ) { ace . require ( [ "ace/ext/elastic_tabstops_lite" ] , function ( ) { } ) } ( )