def rows(self, min_x=None, min_y=None, max_x=None, max_y=None):
if not self.chars.keys():<EOL><INDENT>return []<EOL><DEDENT>minrow = min_y // <NUM_LIT:4> if min_y != None else min(self.chars.keys())<EOL>maxrow = (max_y - <NUM_LIT:1>) // <NUM_LIT:4> if max_y != None else max(self.chars.keys())<EOL>mincol = min_x // <NUM_LIT:2> if min_x != None else min(min(x.keys()) for x in self.chars.values())<EOL>maxcol = (max_x - <NUM_LIT:1>) // <NUM_LIT:2> if max_x != None else max(max(x.keys()) for x in self.chars.values())<EOL>ret = []<EOL>for rownum in range(minrow, maxrow+<NUM_LIT:1>):<EOL><INDENT>if not rownum in self.chars:<EOL><INDENT>ret.append('<STR_LIT>')<EOL>continue<EOL><DEDENT>maxcol = (max_x - <NUM_LIT:1>) // <NUM_LIT:2> if max_x != None else max(self.chars[rownum].keys())<EOL>row = []<EOL>for x in  range(mincol, maxcol+<NUM_LIT:1>):<EOL><INDENT>char = self.chars[rownum].get(x)<EOL>if not char:<EOL><INDENT>row.append(unichr(braille_char_offset))<EOL><DEDENT>elif type(char) != int:<EOL><INDENT>row.append(char)<EOL><DEDENT>else:<EOL><INDENT>row.append(unichr(braille_char_offset+char))<EOL><DEDENT><DEDENT>ret.append('<STR_LIT>'.join(row))<EOL><DEDENT>return ret<EOL>
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