nl_tokens: class VirtualRenderer
pl_tokens: function ( container , theme ) { var _self = this ; this . container = container ; // TODO: this breaks rendering in Cloud9 with multiple ace instances //    // Imports CSS once per DOM document ('ace_editor' serves as an identifier). //    dom.importCssString(editorCss, "ace_editor", container.ownerDocument); // in IE <= 9 the native cursor always shines through this . $keepTextAreaAtCursor = ! useragent . isIE ; dom . addCssClass ( container , "ace_editor" ) ; this . setTheme ( theme ) ; this . $gutter = dom . createElement ( "div" ) ; this . $gutter . className = "ace_gutter" ; this . container . appendChild ( this . $gutter ) ; this . scroller = dom . createElement ( "div" ) ; this . scroller . className = "ace_scroller" ; this . container . appendChild ( this . scroller ) ; this . content = dom . createElement ( "div" ) ; this . content . className = "ace_content" ; this . scroller . appendChild ( this . content ) ; this . setHighlightGutterLine ( true ) ; this . $gutterLayer = new GutterLayer ( this . $gutter ) ; this . $gutterLayer . on ( "changeGutterWidth" , this . onResize . bind ( this , true ) ) ; this . setFadeFoldWidgets ( true ) ; this . $markerBack = new MarkerLayer ( this . content ) ; var textLayer = this . $textLayer = new TextLayer ( this . <mask> ) ; this . canvas = textLayer . element ; this . $markerFront = new MarkerLayer ( this . content ) ; this . characterWidth = textLayer . getCharacterWidth ( ) ; this . lineHeight = textLayer . getLineHeight ( ) ; this . $cursorLayer = new CursorLayer ( this . content ) ; this . $cursorPadding = 8 ; // Indicates whether the horizontal scrollbar is visible this . $horizScroll = false ; this . $horizScrollAlwaysVisible = false ; this . $animatedScroll = false ; this . scrollBar = new ScrollBar ( container ) ; this . scrollBar . addEventListener ( "scroll" , function ( e ) { if ( ! _self . $inScrollAnimation ) _self . session . setScrollTop ( e . data ) ; } ) ; this . scrollTop = 0 ; this . scrollLeft = 0 ; event . addListener ( this . scroller , "scroll" , function ( ) { var scrollLeft = _self . scroller . scrollLeft ; _self . scrollLeft = scrollLeft ; _self . session . setScrollLeft ( scrollLeft ) ; _self . scroller . className = scrollLeft == 0 ? "ace_scroller" : "ace_scroller horscroll" ; } ) ; this . cursorPos = { row : 0 , column : 0 } ; this . $textLayer . addEventListener ( "changeCharacterSize" , function ( ) { _self . characterWidth = textLayer . getCharacterWidth ( ) ; _self . lineHeight = textLayer . getLineHeight ( ) ; _self . $updatePrintMargin ( ) ; _self . onResize ( true ) ; _self . $loop . schedule ( _self . CHANGE_FULL ) ; } ) ; this . $size = { width : 0 , height : 0 , scrollerHeight : 0 , scrollerWidth : 0 } ; this . layerConfig = { width : 1 , padding : 0 , firstRow : 0 , firstRowScreen : 0 , lastRow : 0 , lineHeight : 1 , characterWidth : 1 , minHeight : 1 , maxHeight : 1 , offset : 0 , height : 1 } ; this . $loop = new RenderLoop ( this . $renderChanges . bind ( this ) , this . container . ownerDocument . defaultView ) ; this . $loop . schedule ( this . CHANGE_FULL ) ; this . setPadding ( 4 ) ; this . $updatePrintMargin ( ) ; }