[3.6] bpo-13802: Use non-Latin characters in IDLE's Font settings sam… · python/cpython@ecacbb4
@@ -12,7 +12,7 @@
1212from tkinter import (Toplevel, Listbox, Text, Scale, Canvas,
1313StringVar, BooleanVar, IntVar, TRUE, FALSE,
1414TOP, BOTTOM, RIGHT, LEFT, SOLID, GROOVE, NORMAL, DISABLED,
15-NONE, BOTH, X, Y, W, E, EW, NS, NSEW, NW,
15+NONE, BOTH, X, Y, W, E, EW, NS, NSEW, NW, CENTER,
1616HORIZONTAL, VERTICAL, ANCHOR, ACTIVE, END)
1717from tkinter.ttk import (Button, Checkbutton, Entry, Frame, Label, LabelFrame,
1818OptionMenu, Notebook, Radiobutton, Scrollbar, Style)
@@ -479,8 +479,8 @@ def create_page_font_tab(self):
479479 font_size_title: Label
480480 (*)sizelist: DynOptionMenu - font_size
481481 (*)bold_toggle: Checkbutton - font_bold
482- frame_font_sample: Frame
483- (*)font_sample: Label
482+ frame_sample: LabelFrame
483+ (*)font_sample: Label
484484 frame_indent: LabelFrame
485485 indent_title: Label
486486 (*)indent_scale: Scale - space_num
@@ -490,18 +490,19 @@ def create_page_font_tab(self):
490490self.font_bold = tracers.add(BooleanVar(self), self.var_changed_font)
491491self.space_num = tracers.add(IntVar(self), ('main', 'Indent', 'num-spaces'))
492492493-# Create widgets:
494-# body and body section frames.
493+# Define frames and widgets.
495494frame_font = LabelFrame(
496-self, borderwidth=2, relief=GROOVE, text=' Base Editor Font ')
495+self, borderwidth=2, relief=GROOVE, text=' Shell/Editor Font ')
496+frame_sample = LabelFrame(
497+self, borderwidth=2, relief=GROOVE, text=' Font Sample ')
497498frame_indent = LabelFrame(
498499self, borderwidth=2, relief=GROOVE, text=' Indentation Width ')
499500# frame_font.
500501frame_font_name = Frame(frame_font)
501502frame_font_param = Frame(frame_font)
502503font_name_title = Label(
503504frame_font_name, justify=LEFT, text='Font Face :')
504-self.fontlist = Listbox(frame_font_name, height=5,
505+self.fontlist = Listbox(frame_font_name, height=15,
505506takefocus=True, exportselection=FALSE)
506507self.fontlist.bind('<ButtonRelease-1>', self.on_fontlist_select)
507508self.fontlist.bind('<KeyRelease-Up>', self.on_fontlist_select)
@@ -514,11 +515,37 @@ def create_page_font_tab(self):
514515self.bold_toggle = Checkbutton(
515516frame_font_param, variable=self.font_bold,
516517onvalue=1, offvalue=0, text='Bold')
517-frame_font_sample = Frame(frame_font, relief=SOLID, borderwidth=1)
518+# frame_sample.
519+sample = (
520+'<ASCII/Latin1>\n'
521+'AaBbCcDdEeFfGgHhIiJj\n1234567890#:+=(){}[]\n'
522+'\u00a2\u00a3\u00a5\u00a7\u00a9\u00ab\u00ae\u00b6\u00bd\u011e'
523+'\u00c0\u00c1\u00c2\u00c3\u00c4\u00c5\u00c7\u00d0\u00d8\u00df\n'
524+'\n<IPA,Greek,Cyrillic>\n'
525+'\u0250\u0255\u0258\u025e\u025f\u0264\u026b\u026e\u0270\u0277'
526+'\u027b\u0281\u0283\u0286\u028e\u029e\u02a2\u02ab\u02ad\u02af\n'
527+'\u0391\u03b1\u0392\u03b2\u0393\u03b3\u0394\u03b4\u0395\u03b5'
528+'\u0396\u03b6\u0397\u03b7\u0398\u03b8\u0399\u03b9\u039a\u03ba\n'
529+'\u0411\u0431\u0414\u0434\u0416\u0436\u041f\u043f\u0424\u0444'
530+'\u0427\u0447\u042a\u044a\u042d\u044d\u0460\u0464\u046c\u04dc\n'
531+'\n<Hebrew, Arabic>\n'
532+'\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9'
533+'\u05da\u05db\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\n'
534+'\u0627\u0628\u062c\u062f\u0647\u0648\u0632\u062d\u0637\u064a'
535+'\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\n'
536+'\n<Devanagari, Tamil>\n'
537+'\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f'
538+'\u0905\u0906\u0907\u0908\u0909\u090a\u090f\u0910\u0913\u0914\n'
539+'\u0be6\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef'
540+'\u0b85\u0b87\u0b89\u0b8e\n'
541+'\n<East Asian>\n'
542+'\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\n'
543+'\u6c49\u5b57\u6f22\u5b57\u4eba\u6728\u706b\u571f\u91d1\u6c34\n'
544+'\uac00\ub0d0\ub354\ub824\ubaa8\ubd64\uc218\uc720\uc988\uce58\n'
545+'\u3042\u3044\u3046\u3048\u304a\u30a2\u30a4\u30a6\u30a8\u30aa\n'
546+ )
518547temp_font = tkFont.Font(self, ('courier', 10, 'normal'))
519-self.font_sample = Label(
520-frame_font_sample, justify=LEFT, font=temp_font,
521-text='AaBbCcDdEe\nFfGgHhIiJj\n1234567890\n#:+=(){}[]')
548+self.font_sample = Label(frame_sample, text=sample, font=temp_font)
522549# frame_indent.
523550indent_title = Label(
524551frame_indent, justify=LEFT,
@@ -527,10 +554,12 @@ def create_page_font_tab(self):
527554frame_indent, variable=self.space_num,
528555orient='horizontal', tickinterval=2, from_=2, to=16)
529556530-# Pack widgets:
531-# body.
532-frame_font.pack(side=LEFT, padx=5, pady=5, expand=TRUE, fill=BOTH)
533-frame_indent.pack(side=LEFT, padx=5, pady=5, fill=Y)
557+# Grid and pack widgets:
558+self.columnconfigure(1, weight=1)
559+frame_font.grid(row=0, column=0, padx=5, pady=5)
560+frame_sample.grid(row=0, column=1, rowspan=2, padx=5, pady=5,
561+sticky='nsew')
562+frame_indent.grid(row=1, column=0, padx=5, pady=5, sticky='ew')
534563# frame_font.
535564frame_font_name.pack(side=TOP, padx=5, pady=5, fill=X)
536565frame_font_param.pack(side=TOP, padx=5, pady=5, fill=X)
@@ -540,10 +569,9 @@ def create_page_font_tab(self):
540569font_size_title.pack(side=LEFT, anchor=W)
541570self.sizelist.pack(side=LEFT, anchor=W)
542571self.bold_toggle.pack(side=LEFT, anchor=W, padx=20)
543-frame_font_sample.pack(side=TOP, padx=5, pady=5, expand=TRUE, fill=BOTH)
572+# frame_sample.
544573self.font_sample.pack(expand=TRUE, fill=BOTH)
545574# frame_indent.
546-frame_indent.pack(side=TOP, fill=X)
547575indent_title.pack(side=TOP, anchor=W, padx=5)
548576self.indent_scale.pack(side=TOP, padx=5, fill=X)
549577@@ -2108,10 +2136,24 @@ def detach(self):
21082136dialog that are different from IDLE's default are saved in
21092137a .idlerc directory in your home directory. Except as noted,
21102138these changes apply to all versions of IDLE installed on this
2111-machine. Some do not take affect until IDLE is restarted.
2112-[Cancel] only cancels changes made since the last save.
2139+machine. [Cancel] only cancels changes made since the last save.
21132140'''
21142141help_pages = {
2142+'Fonts/Tabs':'''
2143+Font sample: This shows what a selection of Basic Multilingual Plane
2144+unicode characters look like for the current font selection. If the
2145+selected font does not define a character, Tk attempts to find another
2146+font that does. Substitute glyphs depend on what is available on a
2147+particular system and will not necessarily have the same size as the
2148+font selected. Line contains 20 characters up to Devanagari, 14 for
2149+Tamil, and 10 for East Asia.
2150+2151+Hebrew and Arabic letters should display right to left, starting with
2152+alef, \u05d0 and \u0627. Arabic digits display left to right. The
2153+Devanagari and Tamil lines start with digits. The East Asian lines
2154+are Chinese digits, Chinese Hanzi, Korean Hangul, and Japanese
2155+Hiragana and Katakana.
2156+''',
21152157'Highlights': '''
21162158Highlighting:
21172159The IDLE Dark color theme is new in October 2015. It can only