code: def rows(self, min_x=None, min_y=None, max_x=None, max_y=None):
          
  
          if not self.chars.keys():
              return []
  
          minrow = min_y // 4 if min_y != None else min(self.chars.keys())
          maxrow = (max_y - 1) // 4 if max_y != None else max(self.chars.keys())
          mincol = min_x // 2 if min_x != None else min(min(x.keys()) for x in self.chars.values())
          maxcol = (max_x - 1) // 2 if max_x != None else max(max(x.keys()) for x in self.chars.values())
          ret = []
  
          for rownum in range(minrow, maxrow+1):
              if not rownum in self.chars:
                  ret.append('')
                  continue
  
              maxcol = (max_x - 1) // 2 if max_x != None else max(self.chars[rownum].keys())
              row = []
  
              for x in  range(mincol, maxcol+1):
                  char = self.chars[rownum].get(x)
  
                  if not char:
                      row.append(unichr(braille_char_offset))
                  elif type(char) != int:
                      row.append(char)
                  else:
                      row.append(unichr(braille_char_offset+char))
  
              ret.append(''.join(row))
  
          return ret
docs: Returns a list of the current :class:`Canvas` object lines.
  
          :param min_x: (optional) minimum x coordinate of the canvas
          :param min_y: (optional) minimum y coordinate of the canvas
          :param max_x: (optional) maximum x coordinate of the canvas
          :param max_y: (optional) maximum y coordinate of the canvas