src/eric7/UI/SymbolsWidget.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9413
80c06d472826
--- a/src/eric7/UI/SymbolsWidget.py	Wed Jul 13 11:16:20 2022 +0200
+++ b/src/eric7/UI/SymbolsWidget.py	Wed Jul 13 14:55:47 2022 +0200
@@ -12,8 +12,13 @@
 import html.entities
 
 from PyQt6.QtCore import (
-    pyqtSlot, pyqtSignal, QAbstractTableModel, QModelIndex, Qt,
-    QItemSelectionModel, QLocale
+    pyqtSlot,
+    pyqtSignal,
+    QAbstractTableModel,
+    QModelIndex,
+    Qt,
+    QItemSelectionModel,
+    QLocale,
 )
 from PyQt6.QtGui import QColor
 from PyQt6.QtWidgets import QWidget, QHeaderView, QAbstractItemView
@@ -30,16 +35,17 @@
     """
     Class implementing the model for the symbols widget.
     """
+
     def __init__(self, parent=None):
         """
         Constructor
-        
+
         @param parent reference to the parent object (QObject)
         """
         super().__init__(parent)
-        
+
         self.__locale = QLocale()
-        
+
         self.__headerData = [
             self.tr("Code"),
             self.tr("Char"),
@@ -47,321 +53,309 @@
             self.tr("HTML"),
             self.tr("Name"),
         ]
-        
+
         self.__isDark = ericApp().usesDarkPalette()
-        
+
         self.__tables = [
             # first   last     display name
-            (0x0, 0x1f, self.tr("Control Characters")),
-            (0x20, 0x7f, self.tr("Basic Latin")),
-            (0x80, 0xff, self.tr("Latin-1 Supplement")),
-            (0x100, 0x17f, self.tr("Latin Extended-A")),
-            (0x180, 0x24f, self.tr("Latin Extended-B")),
-            (0x250, 0x2af, self.tr("IPA Extensions")),
-            (0x2b0, 0x2ff, self.tr("Spacing Modifier Letters")),
-            (0x300, 0x36f, self.tr("Combining Diacritical Marks")),
-            (0x370, 0x3ff, self.tr("Greek and Coptic")),
-            (0x400, 0x4ff, self.tr("Cyrillic")),
-            (0x500, 0x52f, self.tr("Cyrillic Supplement")),
-            (0x530, 0x58f, self.tr("Armenian")),
-            (0x590, 0x5ff, self.tr("Hebrew")),
-            (0x600, 0x6ff, self.tr("Arabic")),
-            (0x700, 0x74f, self.tr("Syriac")),
-            (0x780, 0x7bf, self.tr("Thaana")),
-            (0x7c0, 0x7ff, self.tr("N'Ko")),
-            (0x800, 0x83f, self.tr("Samaritan")),
-            (0x840, 0x85f, self.tr("Mandaic")),
-            (0x8a0, 0x8ff, self.tr("Arabic Extended-A")),
-            (0x900, 0x97f, self.tr("Devanagari")),
-            (0x980, 0x9ff, self.tr("Bengali")),
-            (0xa00, 0xa7f, self.tr("Gurmukhi")),
-            (0xa80, 0xaff, self.tr("Gujarati")),
-            (0xb00, 0xb7f, self.tr("Oriya")),
-            (0xb80, 0xbff, self.tr("Tamil")),
-            (0xc00, 0xc7f, self.tr("Telugu")),
-            (0xc80, 0xcff, self.tr("Kannada")),
-            (0xd00, 0xd7f, self.tr("Malayalam")),
-            (0xd80, 0xdff, self.tr("Sinhala")),
-            (0xe00, 0xe7f, self.tr("Thai")),
-            (0xe80, 0xeff, self.tr("Lao")),
-            (0xf00, 0xfff, self.tr("Tibetan")),
-            (0x1000, 0x109f, self.tr("Myanmar")),
-            (0x10a0, 0x10ff, self.tr("Georgian")),
-            (0x1100, 0x11ff, self.tr("Hangul Jamo")),
-            (0x1200, 0x137f, self.tr("Ethiopic")),
-            (0x1380, 0x139f, self.tr("Ethiopic Supplement")),
-            (0x13a0, 0x13ff, self.tr("Cherokee")),
-            (0x1400, 0x167f,
-             self.tr("Unified Canadian Aboriginal Syllabics")),
-            (0x1680, 0x169f, self.tr("Ogham")),
-            (0x16a0, 0x16ff, self.tr("Runic")),
-            (0x1700, 0x171f, self.tr("Tagalog")),
-            (0x1720, 0x173f, self.tr("Hanunoo")),
-            (0x1740, 0x175f, self.tr("Buhid")),
-            (0x1760, 0x177f, self.tr("Tagbanwa")),
-            (0x1780, 0x17ff, self.tr("Khmer")),
-            (0x1800, 0x18af, self.tr("Mongolian")),
-            (0x18b0, 0x18ff,
-             self.tr("Unified Canadian Aboriginal Syllabics Extended")),
-            (0x1900, 0x194f, self.tr("Limbu")),
-            (0x1950, 0x197f, self.tr("Tai Le")),
-            (0x19e0, 0x19ff, self.tr("Khmer Symbols")),
-            (0x1a00, 0x1a1f, self.tr("Buginese")),
-            (0x1a20, 0x1aaf, self.tr("Tai Tham")),
-            (0x1b00, 0x1b7f, self.tr("Balinese")),
-            (0x1b80, 0x1bbf, self.tr("Sundanese")),
-            (0x1bc0, 0x1bff, self.tr("Batak")),
-            (0x1c00, 0x1c4f, self.tr("Lepcha")),
-            (0x1c50, 0x1c7f, self.tr("Ol Chiki")),
-            (0x1cc0, 0x1ccf, self.tr("Sundanese Supplement")),
-            (0x1cd0, 0x1cff, self.tr("Vedic Extensions")),
-            (0x1d00, 0x1d7f, self.tr("Phonetic Extensions")),
-            (0x1d80, 0x1dbf, self.tr("Phonetic Extensions Supplement")),
-            (0x1dc0, 0x1dff,
-             self.tr("Combining Diacritical Marks Supplement")),
-            (0x1e00, 0x1eff, self.tr("Latin Extended Additional")),
-            (0x1f00, 0x1fff, self.tr("Greek Extended")),
-            (0x2000, 0x206f, self.tr("General Punctuation")),
-            (0x2070, 0x209f, self.tr("Superscripts and Subscripts")),
-            (0x20a0, 0x20cf, self.tr("Currency Symbols")),
-            (0x20d0, 0x20ff, self.tr("Combining Diacritical Marks")),
-            (0x2100, 0x214f, self.tr("Letterlike Symbols")),
-            (0x2150, 0x218f, self.tr("Number Forms")),
-            (0x2190, 0x21ff, self.tr("Arcolumns")),
-            (0x2200, 0x22ff, self.tr("Mathematical Operators")),
-            (0x2300, 0x23ff, self.tr("Miscellaneous Technical")),
-            (0x2400, 0x243f, self.tr("Control Pictures")),
-            (0x2440, 0x245f, self.tr("Optical Character Recognition")),
-            (0x2460, 0x24ff, self.tr("Enclosed Alphanumerics")),
-            (0x2500, 0x257f, self.tr("Box Drawing")),
-            (0x2580, 0x259f, self.tr("Block Elements")),
-            (0x25A0, 0x25ff, self.tr("Geometric Shapes")),
-            (0x2600, 0x26ff, self.tr("Miscellaneous Symbols")),
-            (0x2700, 0x27bf, self.tr("Dingbats")),
-            (0x27c0, 0x27ef,
-             self.tr("Miscellaneous Mathematical Symbols-A")),
-            (0x27f0, 0x27ff, self.tr("Supplement Arcolumns-A")),
-            (0x2800, 0x28ff, self.tr("Braille Patterns")),
-            (0x2900, 0x297f, self.tr("Supplement Arcolumns-B")),
-            (0x2980, 0x29ff,
-             self.tr("Miscellaneous Mathematical Symbols-B")),
-            (0x2a00, 0x2aff,
-             self.tr("Supplemental Mathematical Operators")),
-            (0x2b00, 0x2bff,
-             self.tr("Miscellaneous Symbols and Arcolumns")),
-            (0x2c00, 0x2c5f, self.tr("Glagolitic")),
-            (0x2c60, 0x2c7f, self.tr("Latin Extended-C")),
-            (0x2c80, 0x2cff, self.tr("Coptic")),
-            (0x2d00, 0x2d2f, self.tr("Georgian Supplement")),
-            (0x2d30, 0x2d7f, self.tr("Tifinagh")),
-            (0x2d80, 0x2ddf, self.tr("Ethiopic Extended")),
-            (0x2de0, 0x2dff, self.tr("Cyrillic Extended-A")),
-            (0x2e00, 0x2e7f, self.tr("Supplemental Punctuation")),
-            (0x2e80, 0x2eff, self.tr("CJK Radicals Supplement")),
-            (0x2f00, 0x2fdf, self.tr("KangXi Radicals")),
-            (0x2ff0, 0x2fff, self.tr("Ideographic Description Chars")),
-            (0x3000, 0x303f, self.tr("CJK Symbols and Punctuation")),
-            (0x3040, 0x309f, self.tr("Hiragana")),
-            (0x30a0, 0x30ff, self.tr("Katakana")),
-            (0x3100, 0x312f, self.tr("Bopomofo")),
-            (0x3130, 0x318f, self.tr("Hangul Compatibility Jamo")),
-            (0x3190, 0x319f, self.tr("Kanbun")),
-            (0x31a0, 0x31bf, self.tr("Bopomofo Extended")),
-            (0x31c0, 0x31ef, self.tr("CJK Strokes")),
-            (0x31f0, 0x31ff, self.tr("Katakana Phonetic Extensions")),
-            (0x3200, 0x32ff, self.tr("Enclosed CJK Letters and Months")),
-            (0x3300, 0x33ff, self.tr("CJK Compatibility")),
-            (0x3400, 0x4dbf, self.tr("CJK Unified Ideogr. Ext. A")),
-            (0x4dc0, 0x4dff, self.tr("Yijing Hexagram Symbols")),
-            (0x4e00, 0x9fff, self.tr("CJK Unified Ideographs")),
-            (0xa000, 0xa48f, self.tr("Yi Syllables")),
-            (0xa490, 0xa4cf, self.tr("Yi Radicals")),
-            (0xa4d0, 0xa4ff, self.tr("Lisu")),
-            (0xa500, 0xa63f, self.tr("Vai")),
-            (0xa640, 0xa69f, self.tr("Cyrillic Extended-B")),
-            (0xa6a0, 0xa6ff, self.tr("Bamum")),
-            (0xa700, 0xa71f, self.tr("Modifier Tone Letters")),
-            (0xa720, 0xa7ff, self.tr("Latin Extended-D")),
-            (0xa800, 0xa82f, self.tr("Syloti Nagri")),
-            (0xa830, 0xa83f, self.tr("Common Indic Number Forms")),
-            (0xa840, 0xa87f, self.tr("Phags-pa")),
-            (0xa880, 0xa8df, self.tr("Saurashtra")),
-            (0xa8e0, 0xa8ff, self.tr("Devanagari Extended")),
-            (0xa900, 0xa92f, self.tr("Kayah Li")),
-            (0xa930, 0xa95f, self.tr("Rejang")),
-            (0xa960, 0xa97f, self.tr("Hangul Jamo Extended-A")),
-            (0xa980, 0xa9df, self.tr("Javanese")),
-            (0xaa00, 0xaa5f, self.tr("Cham")),
-            (0xaa60, 0xaa7f, self.tr("Myanmar Extended-A")),
-            (0xaa80, 0xaadf, self.tr("Tai Viet")),
-            (0xaae0, 0xaaff, self.tr("Meetei Mayek Extensions")),
-            (0xab00, 0xab2f, self.tr("Ethiopic Extended-A")),
-            (0xabc0, 0xabff, self.tr("Meetei Mayek")),
-            (0xac00, 0xd7af, self.tr("Hangul Syllables")),
-            (0xd7b0, 0xd7ff, self.tr("Hangul Jamo Extended-B")),
-            (0xd800, 0xdb7f, self.tr("High Surrogates")),
-            (0xdb80, 0xdbff, self.tr("High Private Use Surrogates")),
-            (0xdc00, 0xdfff, self.tr("Low Surrogates")),
-            (0xe000, 0xf8ff, self.tr("Private Use")),
-            (0xf900, 0xfaff, self.tr("CJK Compatibility Ideographs")),
-            (0xfb00, 0xfb4f, self.tr("Alphabetic Presentation Forms")),
-            (0xfb50, 0xfdff, self.tr("Arabic Presentation Forms-A")),
-            (0xfe00, 0xfe0f, self.tr("Variation Selectors")),
-            (0xfe10, 0xfe1f, self.tr("Vertical Forms")),
-            (0xfe20, 0xfe2f, self.tr("Combining Half Marks")),
-            (0xfe30, 0xfe4f, self.tr("CJK Compatibility Forms")),
-            (0xfe50, 0xfe6f, self.tr("Small Form Variants")),
-            (0xfe70, 0xfeff, self.tr("Arabic Presentation Forms-B")),
-            (0xff00, 0xffef, self.tr("Half- and Fullwidth Forms")),
-            (0xfff0, 0xffff, self.tr("Specials")),
+            (0x0, 0x1F, self.tr("Control Characters")),
+            (0x20, 0x7F, self.tr("Basic Latin")),
+            (0x80, 0xFF, self.tr("Latin-1 Supplement")),
+            (0x100, 0x17F, self.tr("Latin Extended-A")),
+            (0x180, 0x24F, self.tr("Latin Extended-B")),
+            (0x250, 0x2AF, self.tr("IPA Extensions")),
+            (0x2B0, 0x2FF, self.tr("Spacing Modifier Letters")),
+            (0x300, 0x36F, self.tr("Combining Diacritical Marks")),
+            (0x370, 0x3FF, self.tr("Greek and Coptic")),
+            (0x400, 0x4FF, self.tr("Cyrillic")),
+            (0x500, 0x52F, self.tr("Cyrillic Supplement")),
+            (0x530, 0x58F, self.tr("Armenian")),
+            (0x590, 0x5FF, self.tr("Hebrew")),
+            (0x600, 0x6FF, self.tr("Arabic")),
+            (0x700, 0x74F, self.tr("Syriac")),
+            (0x780, 0x7BF, self.tr("Thaana")),
+            (0x7C0, 0x7FF, self.tr("N'Ko")),
+            (0x800, 0x83F, self.tr("Samaritan")),
+            (0x840, 0x85F, self.tr("Mandaic")),
+            (0x8A0, 0x8FF, self.tr("Arabic Extended-A")),
+            (0x900, 0x97F, self.tr("Devanagari")),
+            (0x980, 0x9FF, self.tr("Bengali")),
+            (0xA00, 0xA7F, self.tr("Gurmukhi")),
+            (0xA80, 0xAFF, self.tr("Gujarati")),
+            (0xB00, 0xB7F, self.tr("Oriya")),
+            (0xB80, 0xBFF, self.tr("Tamil")),
+            (0xC00, 0xC7F, self.tr("Telugu")),
+            (0xC80, 0xCFF, self.tr("Kannada")),
+            (0xD00, 0xD7F, self.tr("Malayalam")),
+            (0xD80, 0xDFF, self.tr("Sinhala")),
+            (0xE00, 0xE7F, self.tr("Thai")),
+            (0xE80, 0xEFF, self.tr("Lao")),
+            (0xF00, 0xFFF, self.tr("Tibetan")),
+            (0x1000, 0x109F, self.tr("Myanmar")),
+            (0x10A0, 0x10FF, self.tr("Georgian")),
+            (0x1100, 0x11FF, self.tr("Hangul Jamo")),
+            (0x1200, 0x137F, self.tr("Ethiopic")),
+            (0x1380, 0x139F, self.tr("Ethiopic Supplement")),
+            (0x13A0, 0x13FF, self.tr("Cherokee")),
+            (0x1400, 0x167F, self.tr("Unified Canadian Aboriginal Syllabics")),
+            (0x1680, 0x169F, self.tr("Ogham")),
+            (0x16A0, 0x16FF, self.tr("Runic")),
+            (0x1700, 0x171F, self.tr("Tagalog")),
+            (0x1720, 0x173F, self.tr("Hanunoo")),
+            (0x1740, 0x175F, self.tr("Buhid")),
+            (0x1760, 0x177F, self.tr("Tagbanwa")),
+            (0x1780, 0x17FF, self.tr("Khmer")),
+            (0x1800, 0x18AF, self.tr("Mongolian")),
+            (0x18B0, 0x18FF, self.tr("Unified Canadian Aboriginal Syllabics Extended")),
+            (0x1900, 0x194F, self.tr("Limbu")),
+            (0x1950, 0x197F, self.tr("Tai Le")),
+            (0x19E0, 0x19FF, self.tr("Khmer Symbols")),
+            (0x1A00, 0x1A1F, self.tr("Buginese")),
+            (0x1A20, 0x1AAF, self.tr("Tai Tham")),
+            (0x1B00, 0x1B7F, self.tr("Balinese")),
+            (0x1B80, 0x1BBF, self.tr("Sundanese")),
+            (0x1BC0, 0x1BFF, self.tr("Batak")),
+            (0x1C00, 0x1C4F, self.tr("Lepcha")),
+            (0x1C50, 0x1C7F, self.tr("Ol Chiki")),
+            (0x1CC0, 0x1CCF, self.tr("Sundanese Supplement")),
+            (0x1CD0, 0x1CFF, self.tr("Vedic Extensions")),
+            (0x1D00, 0x1D7F, self.tr("Phonetic Extensions")),
+            (0x1D80, 0x1DBF, self.tr("Phonetic Extensions Supplement")),
+            (0x1DC0, 0x1DFF, self.tr("Combining Diacritical Marks Supplement")),
+            (0x1E00, 0x1EFF, self.tr("Latin Extended Additional")),
+            (0x1F00, 0x1FFF, self.tr("Greek Extended")),
+            (0x2000, 0x206F, self.tr("General Punctuation")),
+            (0x2070, 0x209F, self.tr("Superscripts and Subscripts")),
+            (0x20A0, 0x20CF, self.tr("Currency Symbols")),
+            (0x20D0, 0x20FF, self.tr("Combining Diacritical Marks")),
+            (0x2100, 0x214F, self.tr("Letterlike Symbols")),
+            (0x2150, 0x218F, self.tr("Number Forms")),
+            (0x2190, 0x21FF, self.tr("Arcolumns")),
+            (0x2200, 0x22FF, self.tr("Mathematical Operators")),
+            (0x2300, 0x23FF, self.tr("Miscellaneous Technical")),
+            (0x2400, 0x243F, self.tr("Control Pictures")),
+            (0x2440, 0x245F, self.tr("Optical Character Recognition")),
+            (0x2460, 0x24FF, self.tr("Enclosed Alphanumerics")),
+            (0x2500, 0x257F, self.tr("Box Drawing")),
+            (0x2580, 0x259F, self.tr("Block Elements")),
+            (0x25A0, 0x25FF, self.tr("Geometric Shapes")),
+            (0x2600, 0x26FF, self.tr("Miscellaneous Symbols")),
+            (0x2700, 0x27BF, self.tr("Dingbats")),
+            (0x27C0, 0x27EF, self.tr("Miscellaneous Mathematical Symbols-A")),
+            (0x27F0, 0x27FF, self.tr("Supplement Arcolumns-A")),
+            (0x2800, 0x28FF, self.tr("Braille Patterns")),
+            (0x2900, 0x297F, self.tr("Supplement Arcolumns-B")),
+            (0x2980, 0x29FF, self.tr("Miscellaneous Mathematical Symbols-B")),
+            (0x2A00, 0x2AFF, self.tr("Supplemental Mathematical Operators")),
+            (0x2B00, 0x2BFF, self.tr("Miscellaneous Symbols and Arcolumns")),
+            (0x2C00, 0x2C5F, self.tr("Glagolitic")),
+            (0x2C60, 0x2C7F, self.tr("Latin Extended-C")),
+            (0x2C80, 0x2CFF, self.tr("Coptic")),
+            (0x2D00, 0x2D2F, self.tr("Georgian Supplement")),
+            (0x2D30, 0x2D7F, self.tr("Tifinagh")),
+            (0x2D80, 0x2DDF, self.tr("Ethiopic Extended")),
+            (0x2DE0, 0x2DFF, self.tr("Cyrillic Extended-A")),
+            (0x2E00, 0x2E7F, self.tr("Supplemental Punctuation")),
+            (0x2E80, 0x2EFF, self.tr("CJK Radicals Supplement")),
+            (0x2F00, 0x2FDF, self.tr("KangXi Radicals")),
+            (0x2FF0, 0x2FFF, self.tr("Ideographic Description Chars")),
+            (0x3000, 0x303F, self.tr("CJK Symbols and Punctuation")),
+            (0x3040, 0x309F, self.tr("Hiragana")),
+            (0x30A0, 0x30FF, self.tr("Katakana")),
+            (0x3100, 0x312F, self.tr("Bopomofo")),
+            (0x3130, 0x318F, self.tr("Hangul Compatibility Jamo")),
+            (0x3190, 0x319F, self.tr("Kanbun")),
+            (0x31A0, 0x31BF, self.tr("Bopomofo Extended")),
+            (0x31C0, 0x31EF, self.tr("CJK Strokes")),
+            (0x31F0, 0x31FF, self.tr("Katakana Phonetic Extensions")),
+            (0x3200, 0x32FF, self.tr("Enclosed CJK Letters and Months")),
+            (0x3300, 0x33FF, self.tr("CJK Compatibility")),
+            (0x3400, 0x4DBF, self.tr("CJK Unified Ideogr. Ext. A")),
+            (0x4DC0, 0x4DFF, self.tr("Yijing Hexagram Symbols")),
+            (0x4E00, 0x9FFF, self.tr("CJK Unified Ideographs")),
+            (0xA000, 0xA48F, self.tr("Yi Syllables")),
+            (0xA490, 0xA4CF, self.tr("Yi Radicals")),
+            (0xA4D0, 0xA4FF, self.tr("Lisu")),
+            (0xA500, 0xA63F, self.tr("Vai")),
+            (0xA640, 0xA69F, self.tr("Cyrillic Extended-B")),
+            (0xA6A0, 0xA6FF, self.tr("Bamum")),
+            (0xA700, 0xA71F, self.tr("Modifier Tone Letters")),
+            (0xA720, 0xA7FF, self.tr("Latin Extended-D")),
+            (0xA800, 0xA82F, self.tr("Syloti Nagri")),
+            (0xA830, 0xA83F, self.tr("Common Indic Number Forms")),
+            (0xA840, 0xA87F, self.tr("Phags-pa")),
+            (0xA880, 0xA8DF, self.tr("Saurashtra")),
+            (0xA8E0, 0xA8FF, self.tr("Devanagari Extended")),
+            (0xA900, 0xA92F, self.tr("Kayah Li")),
+            (0xA930, 0xA95F, self.tr("Rejang")),
+            (0xA960, 0xA97F, self.tr("Hangul Jamo Extended-A")),
+            (0xA980, 0xA9DF, self.tr("Javanese")),
+            (0xAA00, 0xAA5F, self.tr("Cham")),
+            (0xAA60, 0xAA7F, self.tr("Myanmar Extended-A")),
+            (0xAA80, 0xAADF, self.tr("Tai Viet")),
+            (0xAAE0, 0xAAFF, self.tr("Meetei Mayek Extensions")),
+            (0xAB00, 0xAB2F, self.tr("Ethiopic Extended-A")),
+            (0xABC0, 0xABFF, self.tr("Meetei Mayek")),
+            (0xAC00, 0xD7AF, self.tr("Hangul Syllables")),
+            (0xD7B0, 0xD7FF, self.tr("Hangul Jamo Extended-B")),
+            (0xD800, 0xDB7F, self.tr("High Surrogates")),
+            (0xDB80, 0xDBFF, self.tr("High Private Use Surrogates")),
+            (0xDC00, 0xDFFF, self.tr("Low Surrogates")),
+            (0xE000, 0xF8FF, self.tr("Private Use")),
+            (0xF900, 0xFAFF, self.tr("CJK Compatibility Ideographs")),
+            (0xFB00, 0xFB4F, self.tr("Alphabetic Presentation Forms")),
+            (0xFB50, 0xFDFF, self.tr("Arabic Presentation Forms-A")),
+            (0xFE00, 0xFE0F, self.tr("Variation Selectors")),
+            (0xFE10, 0xFE1F, self.tr("Vertical Forms")),
+            (0xFE20, 0xFE2F, self.tr("Combining Half Marks")),
+            (0xFE30, 0xFE4F, self.tr("CJK Compatibility Forms")),
+            (0xFE50, 0xFE6F, self.tr("Small Form Variants")),
+            (0xFE70, 0xFEFF, self.tr("Arabic Presentation Forms-B")),
+            (0xFF00, 0xFFEF, self.tr("Half- and Fullwidth Forms")),
+            (0xFFF0, 0xFFFF, self.tr("Specials")),
         ]
-        if sys.maxunicode > 0xffff:
-            self.__tables.extend([
-                (0x10000, 0x1007f, self.tr("Linear B Syllabary")),
-                (0x10080, 0x100ff, self.tr("Linear B Ideograms")),
-                (0x10100, 0x1013f, self.tr("Aegean Numbers")),
-                (0x10140, 0x1018f, self.tr("Ancient Greek Numbers")),
-                (0x10190, 0x101cf, self.tr("Ancient Symbols")),
-                (0x101d0, 0x101ff, self.tr("Phaistos Disc")),
-                (0x10280, 0x1029f, self.tr("Lycian")),
-                (0x102a0, 0x102df, self.tr("Carian")),
-                (0x10300, 0x1032f, self.tr("Old Italic")),
-                (0x10330, 0x1034f, self.tr("Gothic")),
-                (0x10380, 0x1039f, self.tr("Ugaritic")),
-                (0x103a0, 0x103df, self.tr("Old Persian")),
-                (0x10400, 0x1044f, self.tr("Deseret")),
-                (0x10450, 0x1047f, self.tr("Shavian")),
-                (0x10480, 0x104af, self.tr("Osmanya")),
-                (0x10800, 0x1083f, self.tr("Cypriot Syllabary")),
-                (0x10840, 0x1085f, self.tr("Imperial Aramaic")),
-                (0x10900, 0x1091f, self.tr("Phoenician")),
-                (0x10920, 0x1093f, self.tr("Lydian")),
-                (0x10980, 0x1099f, self.tr("Meroitic Hieroglyphs")),
-                (0x109a0, 0x109ff, self.tr("Meroitic Cursive")),
-                (0x10a00, 0x10a5f, self.tr("Kharoshthi")),
-                (0x10a60, 0x10a7f, self.tr("Old South Arabian")),
-                (0x10b00, 0x10b3f, self.tr("Avestan")),
-                (0x10b40, 0x10b5f, self.tr("Inscriptional Parthian")),
-                (0x10b60, 0x10b7f, self.tr("Inscriptional Pahlavi")),
-                (0x10c00, 0x10c4f, self.tr("Old Turkic")),
-                (0x10e60, 0x10e7f, self.tr("Rumi Numeral Symbols")),
-                (0x11000, 0x1107f, self.tr("Brahmi")),
-                (0x11080, 0x110cf, self.tr("Kaithi")),
-                (0x110d0, 0x110ff, self.tr("Sora Sompeng")),
-                (0x11100, 0x1114f, self.tr("Chakma")),
-                (0x11180, 0x111df, self.tr("Sharada")),
-                (0x11680, 0x116cf, self.tr("Takri")),
-                (0x12000, 0x123ff, self.tr("Cuneiform")),
-                (0x12400, 0x1247f,
-                 self.tr("Cuneiform Numbers and Punctuation")),
-                (0x13000, 0x1342f, self.tr("Egyptian Hieroglyphs")),
-                (0x16800, 0x16a3f, self.tr("Bamum Supplement")),
-                (0x16f00, 0x16f9f, self.tr("Miao")),
-                (0x1b000, 0x1b0ff, self.tr("Kana Supplement")),
-                (0x1d000, 0x1d0ff, self.tr("Byzantine Musical Symbols")),
-                (0x1d100, 0x1d1ff, self.tr("Musical Symbols")),
-                (0x1d200, 0x1d24f,
-                 self.tr("Ancient Greek Musical Notation")),
-                (0x1d300, 0x1d35f, self.tr("Tai Xuan Jing Symbols")),
-                (0x1d360, 0x1d37f,
-                 self.tr("Counting Rod Numerals")),
-                (0x1d400, 0x1d7ff,
-                 self.tr("Mathematical Alphanumeric Symbols")),
-                (0x1ee00, 0x1eeff,
-                 self.tr("Arabic Mathematical Alphabetic Symbols")),
-                (0x1f000, 0x1f02f, self.tr("Mahjong Tiles")),
-                (0x1f030, 0x1f09f, self.tr("Domino Tiles")),
-                (0x1f0a0, 0x1f0ff, self.tr("Playing Cards")),
-                (0x1f100, 0x1f1ff,
-                 self.tr("Enclosed Alphanumeric Supplement")),
-                (0x1f200, 0x1f2ff,
-                 self.tr("Enclosed Ideographic Supplement")),
-                (0x1f300, 0x1f5ff,
-                 self.tr("Miscellaneous Symbols And Pictographs")),
-                (0x1f600, 0x1f64f, self.tr("Emoticons")),
-                (0x1f680, 0x1f6ff, self.tr("Transport And Map Symbols")),
-                (0x1f700, 0x1f77f, self.tr("Alchemical Symbols")),
-                (0x20000, 0x2a6df, self.tr("CJK Unified Ideogr. Ext. B")),
-                (0x2a700, 0x2b73f,
-                 self.tr("CJK Unified Ideographs Extension C")),
-                (0x2b740, 0x2b81f,
-                 self.tr("CJK Unified Ideographs Extension D")),
-                (0x2f800, 0x2fa1f,
-                 self.tr("CJK Compatapility Ideogr. Suppl.")),
-                (0xe0000, 0xe007f, self.tr("Tags")),
-                (0xe0100, 0xe01ef,
-                 self.tr("Variation Selectors Supplement")),
-                (0xf0000, 0xfffff,
-                 self.tr("Supplementary Private Use Area-A")),
-                (0x100000, 0x10ffff,
-                 self.tr("Supplementary Private Use Area-B")),
-            ])
+        if sys.maxunicode > 0xFFFF:
+            self.__tables.extend(
+                [
+                    (0x10000, 0x1007F, self.tr("Linear B Syllabary")),
+                    (0x10080, 0x100FF, self.tr("Linear B Ideograms")),
+                    (0x10100, 0x1013F, self.tr("Aegean Numbers")),
+                    (0x10140, 0x1018F, self.tr("Ancient Greek Numbers")),
+                    (0x10190, 0x101CF, self.tr("Ancient Symbols")),
+                    (0x101D0, 0x101FF, self.tr("Phaistos Disc")),
+                    (0x10280, 0x1029F, self.tr("Lycian")),
+                    (0x102A0, 0x102DF, self.tr("Carian")),
+                    (0x10300, 0x1032F, self.tr("Old Italic")),
+                    (0x10330, 0x1034F, self.tr("Gothic")),
+                    (0x10380, 0x1039F, self.tr("Ugaritic")),
+                    (0x103A0, 0x103DF, self.tr("Old Persian")),
+                    (0x10400, 0x1044F, self.tr("Deseret")),
+                    (0x10450, 0x1047F, self.tr("Shavian")),
+                    (0x10480, 0x104AF, self.tr("Osmanya")),
+                    (0x10800, 0x1083F, self.tr("Cypriot Syllabary")),
+                    (0x10840, 0x1085F, self.tr("Imperial Aramaic")),
+                    (0x10900, 0x1091F, self.tr("Phoenician")),
+                    (0x10920, 0x1093F, self.tr("Lydian")),
+                    (0x10980, 0x1099F, self.tr("Meroitic Hieroglyphs")),
+                    (0x109A0, 0x109FF, self.tr("Meroitic Cursive")),
+                    (0x10A00, 0x10A5F, self.tr("Kharoshthi")),
+                    (0x10A60, 0x10A7F, self.tr("Old South Arabian")),
+                    (0x10B00, 0x10B3F, self.tr("Avestan")),
+                    (0x10B40, 0x10B5F, self.tr("Inscriptional Parthian")),
+                    (0x10B60, 0x10B7F, self.tr("Inscriptional Pahlavi")),
+                    (0x10C00, 0x10C4F, self.tr("Old Turkic")),
+                    (0x10E60, 0x10E7F, self.tr("Rumi Numeral Symbols")),
+                    (0x11000, 0x1107F, self.tr("Brahmi")),
+                    (0x11080, 0x110CF, self.tr("Kaithi")),
+                    (0x110D0, 0x110FF, self.tr("Sora Sompeng")),
+                    (0x11100, 0x1114F, self.tr("Chakma")),
+                    (0x11180, 0x111DF, self.tr("Sharada")),
+                    (0x11680, 0x116CF, self.tr("Takri")),
+                    (0x12000, 0x123FF, self.tr("Cuneiform")),
+                    (0x12400, 0x1247F, self.tr("Cuneiform Numbers and Punctuation")),
+                    (0x13000, 0x1342F, self.tr("Egyptian Hieroglyphs")),
+                    (0x16800, 0x16A3F, self.tr("Bamum Supplement")),
+                    (0x16F00, 0x16F9F, self.tr("Miao")),
+                    (0x1B000, 0x1B0FF, self.tr("Kana Supplement")),
+                    (0x1D000, 0x1D0FF, self.tr("Byzantine Musical Symbols")),
+                    (0x1D100, 0x1D1FF, self.tr("Musical Symbols")),
+                    (0x1D200, 0x1D24F, self.tr("Ancient Greek Musical Notation")),
+                    (0x1D300, 0x1D35F, self.tr("Tai Xuan Jing Symbols")),
+                    (0x1D360, 0x1D37F, self.tr("Counting Rod Numerals")),
+                    (0x1D400, 0x1D7FF, self.tr("Mathematical Alphanumeric Symbols")),
+                    (
+                        0x1EE00,
+                        0x1EEFF,
+                        self.tr("Arabic Mathematical Alphabetic Symbols"),
+                    ),
+                    (0x1F000, 0x1F02F, self.tr("Mahjong Tiles")),
+                    (0x1F030, 0x1F09F, self.tr("Domino Tiles")),
+                    (0x1F0A0, 0x1F0FF, self.tr("Playing Cards")),
+                    (0x1F100, 0x1F1FF, self.tr("Enclosed Alphanumeric Supplement")),
+                    (0x1F200, 0x1F2FF, self.tr("Enclosed Ideographic Supplement")),
+                    (
+                        0x1F300,
+                        0x1F5FF,
+                        self.tr("Miscellaneous Symbols And Pictographs"),
+                    ),
+                    (0x1F600, 0x1F64F, self.tr("Emoticons")),
+                    (0x1F680, 0x1F6FF, self.tr("Transport And Map Symbols")),
+                    (0x1F700, 0x1F77F, self.tr("Alchemical Symbols")),
+                    (0x20000, 0x2A6DF, self.tr("CJK Unified Ideogr. Ext. B")),
+                    (0x2A700, 0x2B73F, self.tr("CJK Unified Ideographs Extension C")),
+                    (0x2B740, 0x2B81F, self.tr("CJK Unified Ideographs Extension D")),
+                    (0x2F800, 0x2FA1F, self.tr("CJK Compatapility Ideogr. Suppl.")),
+                    (0xE0000, 0xE007F, self.tr("Tags")),
+                    (0xE0100, 0xE01EF, self.tr("Variation Selectors Supplement")),
+                    (0xF0000, 0xFFFFF, self.tr("Supplementary Private Use Area-A")),
+                    (0x100000, 0x10FFFF, self.tr("Supplementary Private Use Area-B")),
+                ]
+            )
         self.__currentTableIndex = 0
-    
+
     def getTableNames(self):
         """
         Public method to get a list of table names.
-        
+
         @return list of table names (list of strings)
         """
         return [table[2] for table in self.__tables]
-    
+
     def getTableBoundaries(self, index):
         """
         Public method to get the first and last character position
         of the given table.
-        
+
         @param index index of the character table (integer)
         @return first and last character position (integer, integer)
         """
         return self.__tables[index][0], self.__tables[index][1]
-    
+
     def getTableIndex(self):
         """
         Public method to get the current table index.
-        
+
         @return current table index (integer)
         """
         return self.__currentTableIndex
-    
+
     def selectTable(self, index):
         """
         Public method to select the shown character table.
-        
+
         @param index index of the character table (integer)
         """
         self.beginResetModel()
         self.__currentTableIndex = index
         self.endResetModel()
-    
-    def headerData(self, section, orientation,
-                   role=Qt.ItemDataRole.DisplayRole):
+
+    def headerData(self, section, orientation, role=Qt.ItemDataRole.DisplayRole):
         """
         Public method to get header data from the model.
-        
+
         @param section section number (integer)
         @param orientation orientation (Qt.Orientation)
         @param role role of the data to retrieve (Qt.ItemDataRole)
         @return requested data
         """
         if (
-            orientation == Qt.Orientation.Horizontal and
-            role == Qt.ItemDataRole.DisplayRole
+            orientation == Qt.Orientation.Horizontal
+            and role == Qt.ItemDataRole.DisplayRole
         ):
             return self.__headerData[section]
-        
+
         return QAbstractTableModel.headerData(self, section, orientation, role)
-    
+
     def data(self, index, role=Qt.ItemDataRole.DisplayRole):
         """
         Public method to get data from the model.
-        
+
         @param index index to get data for (QModelIndex)
         @param role role of the data to retrieve (integer)
         @return requested data
         """
         symbolId = self.__tables[self.__currentTableIndex][0] + index.row()
-        
+
         if role == Qt.ItemDataRole.DisplayRole:
             col = index.column()
             if col == 0:
@@ -372,20 +366,16 @@
                 return "0x{0:04x}".format(symbolId)
             elif col == 3:
                 if symbolId in html.entities.codepoint2name:
-                    return "&{0};".format(
-                        html.entities.codepoint2name[symbolId])
+                    return "&{0};".format(html.entities.codepoint2name[symbolId])
             elif col == 4:
-                return unicodedata.name(chr(symbolId), '').title()
-        
-        if (
-            role == Qt.ItemDataRole.BackgroundRole and
-            index.column() == 0
-        ):
+                return unicodedata.name(chr(symbolId), "").title()
+
+        if role == Qt.ItemDataRole.BackgroundRole and index.column() == 0:
             if self.__isDark:
                 return QColor("#4d4d4d")
             else:
                 return QColor(Qt.GlobalColor.lightGray)
-        
+
         if role == Qt.ItemDataRole.ForegroundRole:
             char = chr(symbolId)
             if self.__isDark:
@@ -414,19 +404,16 @@
                     return QColor(Qt.GlobalColor.darkMagenta)
                 else:
                     return QColor(Qt.GlobalColor.darkGray)
-        
-        if (
-            role == Qt.ItemDataRole.TextAlignmentRole and
-            index.column() in [0, 1, 3]
-        ):
+
+        if role == Qt.ItemDataRole.TextAlignmentRole and index.column() in [0, 1, 3]:
             return Qt.AlignmentFlag.AlignHCenter.value
-        
+
         return None
-    
+
     def columnCount(self, parent):
         """
         Public method to get the number of columns of the model.
-        
+
         @param parent parent index (QModelIndex)
         @return number of columns (integer)
         """
@@ -434,11 +421,11 @@
             return 0
         else:
             return len(self.__headerData)
-    
+
     def rowCount(self, parent):
         """
         Public method to get the number of rows of the model.
-        
+
         @param parent parent index (QModelIndex)
         @return number of columns (integer)
         """
@@ -447,58 +434,64 @@
         else:
             first, last = self.__tables[self.__currentTableIndex][:2]
             return last - first + 1
-    
+
     def __isDigit(self, char):
         """
         Private method to check, if a character is a digit.
-        
+
         @param char character to test (one character string)
         @return flag indicating a digit (boolean)
         """
         return unicodedata.category(str(char)) == "Nd"
-    
+
     def __isLetter(self, char):
         """
         Private method to check, if a character is a letter.
-        
+
         @param char character to test (one character string)
         @return flag indicating a letter (boolean)
         """
-        return unicodedata.category(str(char)) in ["Lu", "Ll", "Lt", "Lm",
-                                                   "Lo"]
-    
+        return unicodedata.category(str(char)) in ["Lu", "Ll", "Lt", "Lm", "Lo"]
+
     def __isMark(self, char):
         """
         Private method to check, if a character is a mark character.
-        
+
         @param char character to test (one character string)
         @return flag indicating a mark character (boolean)
         """
         return unicodedata.category(str(char)) in ["Mn", "Mc", "Me"]
-    
+
     def __isSymbol(self, char):
         """
         Private method to check, if a character is a symbol.
-        
+
         @param char character to test (one character string)
         @return flag indicating a symbol (boolean)
         """
         return unicodedata.category(str(char)) in ["Sm", "Sc", "Sk", "So"]
-    
+
     def __isPunct(self, char):
         """
         Private method to check, if a character is a punctuation character.
-        
+
         @param char character to test (one character string)
         @return flag indicating a punctuation character (boolean)
         """
-        return unicodedata.category(str(char)) in ["Pc", "Pd", "Ps", "Pe",
-                                                   "Pi", "Pf", "Po"]
-    
+        return unicodedata.category(str(char)) in [
+            "Pc",
+            "Pd",
+            "Ps",
+            "Pe",
+            "Pi",
+            "Pf",
+            "Po",
+        ]
+
     def getLocale(self):
         """
         Public method to get the used locale.
-        
+
         @return used locale
         @rtype QLocale
         """
@@ -508,29 +501,32 @@
 class SymbolsWidget(QWidget, Ui_SymbolsWidget):
     """
     Class implementing a widget to select a symbol in various formats.
-    
+
     @signal insertSymbol(str) emitted after the user has selected a symbol
     """
+
     insertSymbol = pyqtSignal(str)
-    
+
     def __init__(self, parent=None):
         """
         Constructor
-        
+
         @param parent reference to the parent widget (QWidget)
         """
         super().__init__(parent)
         self.setupUi(self)
-        
+
         self.setWindowIcon(UI.PixmapCache.getIcon("eric"))
-        
+
         self.__model = SymbolsModel(self)
         self.symbolsTable.setModel(self.__model)
         self.symbolsTable.selectionModel().currentRowChanged.connect(
-            self.__currentRowChanged)
-        
+            self.__currentRowChanged
+        )
+
         self.symbolsTable.horizontalHeader().setSectionResizeMode(
-            QHeaderView.ResizeMode.Fixed)
+            QHeaderView.ResizeMode.Fixed
+        )
         fm = self.fontMetrics()
         try:
             em = fm.horizontalAdvance("M")
@@ -541,75 +537,74 @@
         self.symbolsTable.horizontalHeader().resizeSection(2, em * 6)
         self.symbolsTable.horizontalHeader().resizeSection(3, em * 8)
         self.symbolsTable.horizontalHeader().resizeSection(4, em * 85)
-        self.symbolsTable.verticalHeader().setDefaultSectionSize(
-            fm.height() + 4)
-        
-        tableIndex = int(
-            Preferences.getSettings().value("Symbols/CurrentTable", 1))
+        self.symbolsTable.verticalHeader().setDefaultSectionSize(fm.height() + 4)
+
+        tableIndex = int(Preferences.getSettings().value("Symbols/CurrentTable", 1))
         self.tableCombo.addItems(self.__model.getTableNames())
         self.tableCombo.setCurrentIndex(tableIndex)
-        
+
         index = self.__model.index(
-            int(Preferences.getSettings().value("Symbols/Top", 0)),
-            0)
-        self.symbolsTable.scrollTo(
-            index, QAbstractItemView.ScrollHint.PositionAtTop)
+            int(Preferences.getSettings().value("Symbols/Top", 0)), 0
+        )
+        self.symbolsTable.scrollTo(index, QAbstractItemView.ScrollHint.PositionAtTop)
         self.symbolsTable.selectionModel().setCurrentIndex(
             index,
-            QItemSelectionModel.SelectionFlag.SelectCurrent |
-            QItemSelectionModel.SelectionFlag.Rows
+            QItemSelectionModel.SelectionFlag.SelectCurrent
+            | QItemSelectionModel.SelectionFlag.Rows,
         )
-    
+
     @pyqtSlot(QModelIndex)
     def on_symbolsTable_activated(self, index):
         """
         Private slot to signal the selection of a symbol.
-        
+
         @param index index of the selected symbol (QModelIndex)
         """
         txt = self.__model.data(index)
         if txt:
             self.insertSymbol.emit(txt)
-    
+
     @pyqtSlot()
     def on_symbolSpinBox_editingFinished(self):
         """
         Private slot to move the table to the entered symbol id.
         """
         symbolId = self.symbolSpinBox.value()
-        first, last = self.__model.getTableBoundaries(
-            self.__model.getTableIndex())
+        first, last = self.__model.getTableBoundaries(self.__model.getTableIndex())
         row = symbolId - first
         self.symbolsTable.selectRow(row)
         self.symbolsTable.scrollTo(
-            self.__model.index(row, 0),
-            QAbstractItemView.ScrollHint.PositionAtCenter)
-    
+            self.__model.index(row, 0), QAbstractItemView.ScrollHint.PositionAtCenter
+        )
+
     @pyqtSlot(int)
     def on_tableCombo_currentIndexChanged(self, index):
         """
         Private slot to select the current character table.
-        
+
         @param index index of the character table (integer)
         """
         self.symbolsTable.setUpdatesEnabled(False)
         self.__model.selectTable(index)
         self.symbolsTable.setUpdatesEnabled(True)
         self.symbolsTable.resizeColumnsToContents()
-        
+
         first, last = self.__model.getTableBoundaries(index)
         self.symbolSpinBox.setMinimum(first)
         self.symbolSpinBox.setMaximum(last)
-        
+
         Preferences.getSettings().setValue("Symbols/CurrentTable", index)
-    
+
     def __currentRowChanged(self, current, previous):
         """
         Private slot recording the currently selected row.
-        
+
         @param current current index (QModelIndex)
         @param previous previous current index (QModelIndex)
         """
         Preferences.getSettings().setValue("Symbols/Top", current.row())
-        self.symbolSpinBox.setValue(self.__model.getLocale().toInt(
-            self.__model.data(self.__model.index(current.row(), 0)))[0])
+        self.symbolSpinBox.setValue(
+            self.__model.getLocale().toInt(
+                self.__model.data(self.__model.index(current.row(), 0))
+            )[0]
+        )

eric ide

mercurial