whole_func_string: 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.content);
      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();
  }
func_code_string: 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.content);
      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();
  }
func_documentation_string: class VirtualRenderer
  
  The class that is responsible for drawing everything you see on the screen!
  
   
  new VirtualRenderer(container, theme)
  - container (DOMElement): The root element of the editor
  - theme (String): The starting theme
  
  Constructs a new `VirtualRenderer` within the `container` specified, applying the given `theme`.