       screenRow = firstRow + row
       y0 = y*lineHeight
 
+      # Line decorations are first drawn on the canvas.
       lineDecorations = @decorationsByTypesForRow(screenRow, 'line', decorations)
       for decoration in lineDecorations
         context.fillStyle = @getDecorationColor(decoration)
         context.fillRect(0,y0,canvasWidth,lineHeight)
 
+      # Then comes the highlight decoration with `highlight-under` type.
       highlightDecorations = @decorationsByTypesForRow(firstRow + row, 'highlight-under', decorations)
       for decoration in highlightDecorations
         @drawHighlightDecoration(context, decoration, y, screenRow, lineHeight, charWidth, canvasWidth)
 
+      # Then the line tokens are drawn
       for token in line.tokens
         w = token.screenDelta
         unless token.isOnlyWhitespace()


    line = lines[0]

    if line.invisibles?
      re = ///
      #{line.invisibles.cr}|

  #    ##     ## ##    ##  ##     ## ##  ##  ##
  #    ########  ##     ## ##     ##  ###  ###

  # Internal: Draws lines on the passed-in `context`.
  #
  # The lines range to draw is specified by the `firstRow` and `lastRow`
  # parameters.
  #
  # context - The canvas context {Object} into which drawing the lines.
  # firstRow - The starting row {Number} of the lines range to draw.
  # endRow - The ending row {Number} of the lines range to draw.
  # offsetRow - The offset {Number} to apply to rows index.
  drawLines: (context, firstRow, lastRow, offsetRow) ->
    return if firstRow > lastRow

    lines = @editor.tokenizedLinesForScreenRows(firstRow, lastRow)
    lineHeight = @getLineHeight()
    charHeight = @getCharHeight()
    charWidth = @getCharWidth()
