Package: reprlist.py
Create and editmultiline text.A good tool to realize __repr__.import it byfrom reprlist import ReprlistInitialize it with an iterable object (or None to do nothing), like ‘str’ or ‘list’.In [1]: from reprlist import Reprlist

In [2]: Reprlist( '1-2' )        #Same as 'Reprlist(['1', '-', '2'])'.
Out[2]:
0:1
1:-
2:2

In [3]: Reprlist([               #Also supports 2D list.
...: ['=', '========', '='],
...: ['|', 'Hello world!', '|'],
...: ['=', '========', '='],
...: ])
Out[3]:
0:=========    =
1:|Hello world!|
2:=========    =Extend by methodextendwith an iterable object,
if iterable’s length ≠ R.length, align center.
You can specify the number of aligned line with methodsmart_extend.In [2]: Reprlist(' 1-2').extend([' + ']).extend(' 1-3 ').extend([' = ']).extend('5-6')
Out[2]:
0:
1:1   1   5
2:- + - = -
3:2   3   6
4:Methodinsert(obj, new_index)inserts str starts atnew_indexwith each item obj in the end.In [7]: Reprlist([' 1 ','---',' 2 ']).insert('1-x', 2)
Out[7]:
0: 1
1:---
2:   1
3:   -
4:   x
5: 2You can remove empty lines with methodget_removed_empty_lines,
this method will return a new object without changes.In [2]: Reprlist(' ' if i%2 else '-' for i in range(5)).get_removed_empty_lines()
Out[2]:
0:-
1:-Slice with[:], returns the text in each line;with[:,:], you can see text blocks,
the block shows the text each time you extended.In [41]: R = Reprlist([' 1','--',' 2'])

In [42]: R[:, :]
Out[42]: [[' 1'], ['--'], [' 2']]

In [43]: R.extend('-')
Out[43]:
0: 1
1:---
2: 2

In [44]: R[:, :]
Out[44]: [[' 1', ' '], ['--', '-'], [' 2', ' ']]

In [45]: R.insert([' x '], 2)
Out[45]:
0: 1
1:---
2:    x
3: 2

In [46]: R[:, :]
Out[46]:
[[' 1', ' ', '   '],
['--', '-', '   '],
['  ', ' ', ' x '],
[' 2', ' ', '   ']]

In [47]: R[:, -1]
Out[47]: ['   ', '   ', ' x ', '   ']``dev.Reprlist`` almost compatible with Reprlist, and it doesn't keep text blocks.Methods:Name:Doc:__init__(extend=None,rule=None)Extend valueextendif it’s not None.
And set therulefrom valuerule,
ifruleis None, set withgloble_rule,extend(o,_chack=True)Extend each line, align center.
(particulars the drawing after table).__add__(val)Return R.copy().extend(val).midReturn len(self)//2.change_mid(mid)Draw out until new mid equal given-mid.Same as R.mid = mid.combine()Combine all the str-blocks.separate()Separate all the str-blocks to 1-length str.smart_extend(o[,None,None])Draw and then extend val ‘o’.get_place_onto(bottom)Put self on bottom.line(linenumber)Return the str at line ‘linenumber’.to_tk(root=None)Return root with tk.Label on it, ifrootis None, auto build a tk.TK.The drawing about ‘extend’:l=6  lo=3
    0  ___
    1  ___
    2  ___  ___  0
mid>3  ___  ___  1<
    4  ___  ___  2
    5  ___
    6

        l=3     lo=7
               ___ 0
               ___ 1
    0  ___     ___ 2
mid>1  ___     ___ 3<
    2  ___     ___ 4
               ___ 5
               ___ 6
               ____7What’s new ?::>1.3.5—>1.3.6Optimize the methodextend.>1.3.4—>1.3.5Now extend an empty obj will not raiseValueError: Empty sequence got..Demo:Creat a class.from reprlist import Reprlist
class UnKnow:
    def __init__(self, mul = 1, power = 1, num = 0):
        self.mul = mul
        self.power = power
        self.num = num
    def __repr__(self):
        r = Reprlist()
        m = (str(self.mul) + ' * ')if self.mul != 1 else ''
        r.extend([m + 'X'])
        if self.power != 1:
            r.smart_extend(str(self.power),o_mid=1)
        if self.num:
            n = str(self.num)
            if n.startswith('-'):
                n = ' - ' + n[1:]
            else:
                n = ' + ' + n
            r.extend([n])
        return str(r)>>>UnKnow()

X
>>>UnKnow(2,2,3)

     2
2 * X  + 3
>>>UnKnow(4,5,-2)

     5
4 * X  - 2log>  2020-3-12, `1.1.0` --> `1.2.0`
1.Add method `line`,`lmove`,'rmove','put_inbox'.
2.Add a new class `dev.Reprlist` do `from reprlist.dev import Reprlist` to import it.
  In dev.Reprlist, the text you extended saved after the text front as line, not block.
  So slice `R[<int1>,<int2>]` returns the char at the index.

>  2020-4-7, `1.2.1` --> `1.2.2`
1.You can set `maxstring``maxline``startswith` for Reprlist.
>  `1.2.8` ---> `1.2.9`
1.Method `place_onto``place_under` add value `wherejust`,
    `wherejust`
        --> 'l' / 'left': storter one in a position of lift.
        --> 'r' / 'right':storter one in a position of right.
        --> 'm' / 'middle':storter one in a position of middle.
2.Change methods `lmove``rmove`.The original char will be in place of lift if `lmove`,
      right if `rmove`.
3.Add methods `ljust` and `rjust`.
>  `1.2.2` ---> `1.2.10`
    Remove some bugs.
>  `1.2.10` ---> `1.3.4`
    Add method `to_tk`.