@@ -53,7 +53,7 @@ class EditorWindow(object):
53
53
from idlelib .autoexpand import AutoExpand
54
54
from idlelib .calltip import Calltip
55
55
from idlelib .codecontext import CodeContext
56
- from idlelib .paragraph import FormatParagraph
56
+ from idlelib .format import FormatParagraph , FormatRegion
57
57
from idlelib .parenmatch import ParenMatch
58
58
from idlelib .rstrip import Rstrip
59
59
from idlelib .squeezer import Squeezer
@@ -172,13 +172,14 @@ def __init__(self, flist=None, filename=None, key=None, root=None):
172
172
text .bind ("<<smart-backspace>>" ,self .smart_backspace_event )
173
173
text .bind ("<<newline-and-indent>>" ,self .newline_and_indent_event )
174
174
text .bind ("<<smart-indent>>" ,self .smart_indent_event )
175
- text .bind ("<<indent-region>>" ,self .indent_region_event )
176
- text .bind ("<<dedent-region>>" ,self .dedent_region_event )
177
- text .bind ("<<comment-region>>" ,self .comment_region_event )
178
- text .bind ("<<uncomment-region>>" ,self .uncomment_region_event )
179
- text .bind ("<<tabify-region>>" ,self .tabify_region_event )
180
- text .bind ("<<untabify-region>>" ,self .untabify_region_event )
181
- text .bind ("<<toggle-tabs>>" ,self .toggle_tabs_event )
175
+ self .fregion = fregion = self .FormatRegion (self )
176
+ text .bind ("<<indent-region>>" , fregion .indent_region_event )
177
+ text .bind ("<<dedent-region>>" , fregion .dedent_region_event )
178
+ text .bind ("<<comment-region>>" , fregion .comment_region_event )
179
+ text .bind ("<<uncomment-region>>" , fregion .uncomment_region_event )
180
+ text .bind ("<<tabify-region>>" , fregion .tabify_region_event )
181
+ text .bind ("<<untabify-region>>" , fregion .untabify_region_event )
182
+ text .bind ("<<toggle-tabs>>" , self .toggle_tabs_event )
182
183
text .bind ("<<change-indentwidth>>" ,self .change_indentwidth_event )
183
184
text .bind ("<Left>" , self .move_at_edge_if_selection (0 ))
184
185
text .bind ("<Right>" , self .move_at_edge_if_selection (1 ))
@@ -1290,7 +1291,7 @@ def smart_indent_event(self, event):
1290
1291
try :
1291
1292
if first and last :
1292
1293
if index2line (first ) != index2line (last ):
1293
- return self .indent_region_event (event )
1294
+ return self .fregion . indent_region_event (event )
1294
1295
text .delete (first , last )
1295
1296
text .mark_set ("insert" , first )
1296
1297
prefix = text .get ("insert linestart" , "insert" )
@@ -1423,72 +1424,6 @@ def inner(offset, _startindex=startindex,
1423
1424
return _icis (_startindex + "+%dc" % offset )
1424
1425
return inner
1425
1426
1426
- def indent_region_event (self , event ):
1427
- head , tail , chars , lines = self .get_region ()
1428
- for pos in range (len (lines )):
1429
- line = lines [pos ]
1430
- if line :
1431
- raw , effective = get_line_indent (line , self .tabwidth )
1432
- effective = effective + self .indentwidth
1433
- lines [pos ] = self ._make_blanks (effective ) + line [raw :]
1434
- self .set_region (head , tail , chars , lines )
1435
- return "break"
1436
-
1437
- def dedent_region_event (self , event ):
1438
- head , tail , chars , lines = self .get_region ()
1439
- for pos in range (len (lines )):
1440
- line = lines [pos ]
1441
- if line :
1442
- raw , effective = get_line_indent (line , self .tabwidth )
1443
- effective = max (effective - self .indentwidth , 0 )
1444
- lines [pos ] = self ._make_blanks (effective ) + line [raw :]
1445
- self .set_region (head , tail , chars , lines )
1446
- return "break"
1447
-
1448
- def comment_region_event (self , event ):
1449
- head , tail , chars , lines = self .get_region ()
1450
- for pos in range (len (lines ) - 1 ):
1451
- line = lines [pos ]
1452
- lines [pos ] = '##' + line
1453
- self .set_region (head , tail , chars , lines )
1454
- return "break"
1455
-
1456
- def uncomment_region_event (self , event ):
1457
- head , tail , chars , lines = self .get_region ()
1458
- for pos in range (len (lines )):
1459
- line = lines [pos ]
1460
- if not line :
1461
- continue
1462
- if line [:2 ] == '##' :
1463
- line = line [2 :]
1464
- elif line [:1 ] == '#' :
1465
- line = line [1 :]
1466
- lines [pos ] = line
1467
- self .set_region (head , tail , chars , lines )
1468
- return "break"
1469
-
1470
- def tabify_region_event (self , event ):
1471
- head , tail , chars , lines = self .get_region ()
1472
- tabwidth = self ._asktabwidth ()
1473
- if tabwidth is None : return
1474
- for pos in range (len (lines )):
1475
- line = lines [pos ]
1476
- if line :
1477
- raw , effective = get_line_indent (line , tabwidth )
1478
- ntabs , nspaces = divmod (effective , tabwidth )
1479
- lines [pos ] = '\t ' * ntabs + ' ' * nspaces + line [raw :]
1480
- self .set_region (head , tail , chars , lines )
1481
- return "break"
1482
-
1483
- def untabify_region_event (self , event ):
1484
- head , tail , chars , lines = self .get_region ()
1485
- tabwidth = self ._asktabwidth ()
1486
- if tabwidth is None : return
1487
- for pos in range (len (lines )):
1488
- lines [pos ] = lines [pos ].expandtabs (tabwidth )
1489
- self .set_region (head , tail , chars , lines )
1490
- return "break"
1491
-
1492
1427
def toggle_tabs_event (self , event ):
1493
1428
if self .askyesno (
1494
1429
"Toggle tabs" ,
@@ -1523,33 +1458,6 @@ def change_indentwidth_event(self, event):
1523
1458
self .indentwidth = new
1524
1459
return "break"
1525
1460
1526
- def get_region (self ):
1527
- text = self .text
1528
- first , last = self .get_selection_indices ()
1529
- if first and last :
1530
- head = text .index (first + " linestart" )
1531
- tail = text .index (last + "-1c lineend +1c" )
1532
- else :
1533
- head = text .index ("insert linestart" )
1534
- tail = text .index ("insert lineend +1c" )
1535
- chars = text .get (head , tail )
1536
- lines = chars .split ("\n " )
1537
- return head , tail , chars , lines
1538
-
1539
- def set_region (self , head , tail , chars , lines ):
1540
- text = self .text
1541
- newchars = "\n " .join (lines )
1542
- if newchars == chars :
1543
- text .bell ()
1544
- return
1545
- text .tag_remove ("sel" , "1.0" , "end" )
1546
- text .mark_set ("insert" , head )
1547
- text .undo_block_start ()
1548
- text .delete (head , tail )
1549
- text .insert (head , newchars )
1550
- text .undo_block_stop ()
1551
- text .tag_add ("sel" , head , "insert" )
1552
-
1553
1461
# Make string that displays as n leading blanks.
1554
1462
1555
1463
def _make_blanks (self , n ):
@@ -1571,15 +1479,6 @@ def reindent_to(self, column):
1571
1479
text .insert ("insert" , self ._make_blanks (column ))
1572
1480
text .undo_block_stop ()
1573
1481
1574
- def _asktabwidth (self ):
1575
- return self .askinteger (
1576
- "Tab width" ,
1577
- "Columns per tab? (2-16)" ,
1578
- parent = self .text ,
1579
- initialvalue = self .indentwidth ,
1580
- minvalue = 2 ,
1581
- maxvalue = 16 )
1582
-
1583
1482
# Guess indentwidth from text content.
1584
1483
# Return guessed indentwidth. This should not be believed unless
1585
1484
# it's in a reasonable range (e.g., it will be 0 if no indented
0 commit comments