docs: function(location, style) {
          var pt = this.getLocalXY(location);
  
          this.setCanvasStyle("reset");
          this.canvas.fillStyle = style.fontColor;
          this.canvas.globalAlpha = style.fontOpacity || 1.0;
          var fontStyle = [style.fontStyle ? style.fontStyle : "normal",
                           "normal", // "font-variant" not supported
                           style.fontWeight ? style.fontWeight : "normal",
                           style.fontSize ? style.fontSize : "1em",
                           style.fontFamily ? style.fontFamily : "sans-serif"].join(" ");
          var labelRows = style.label.split('\n');
          var numRows = labelRows.length;
          if (this.canvas.fillText) {
              // HTML5
              this.canvas.font = fontStyle;
              this.canvas.textAlign =
                  OpenLayers.Renderer.Canvas.LABEL_ALIGN[style.labelAlign[0]] ||
                  "center";
              this.canvas.textBaseline =
                  OpenLayers.Renderer.Canvas.LABEL_ALIGN[style.labelAlign[1]] ||
                  "middle";
              var vfactor =
                  OpenLayers.Renderer.Canvas.LABEL_FACTOR[style.labelAlign[1]];
              if (vfactor == null) {
                  vfactor = -.5;
              }
              var lineHeight =
                  this.canvas.measureText('Mg').height ||
                  this.canvas.measureText('xx').width;
              pt[1] += lineHeight*vfactor*(numRows-1);
              for (var i = 0; i < numRows; i++) {
                  if (style.labelOutlineWidth) {
                      this.canvas.save();
                      this.canvas.globalAlpha = style.labelOutlineOpacity || style.fontOpacity || 1.0;
                      this.canvas.strokeStyle = style.labelOutlineColor;
                      this.canvas.lineWidth = style.labelOutlineWidth;
                      this.canvas.strokeText(labelRows[i], pt[0], pt[1] + (lineHeight*i) + 1);
                      this.canvas.restore();
                  }
                  this.canvas.fillText(labelRows[i], pt[0], pt[1] + (lineHeight*i));
              }
          } else if (this.canvas.mozDrawText) {
              // Mozilla pre-Gecko1.9.1 (<FF3.1)
              this.canvas.mozTextStyle = fontStyle;
              // No built-in text alignment, so we measure and adjust the position
              var hfactor =
                  OpenLayers.Renderer.Canvas.LABEL_FACTOR[style.labelAlign[0]];
              if (hfactor == null) {
                  hfactor = -.5;
              }
              var vfactor =
                  OpenLayers.Renderer.Canvas.LABEL_FACTOR[style.labelAlign[1]];
              if (vfactor == null) {
                  vfactor = -.5;
              }
              var lineHeight = this.canvas.mozMeasureText('xx');
              pt[1] += lineHeight*(1 + (vfactor*numRows));
              for (var i = 0; i < numRows; i++) {
                  var x = pt[0] + (hfactor*this.canvas.mozMeasureText(labelRows[i]));
                  var y = pt[1] + (i*lineHeight);
                  this.canvas.translate(x, y);
                  this.canvas.mozDrawText(labelRows[i]);
                  this.canvas.translate(-x, -y);
              }
          }
          this.setCanvasStyle("reset");
      }