Suggestion: charmap "symbsearch" plugin for inserting greek and math characters into unicode text



  • Something like this would make a great plugin feature for notepad++:

    https://leun4m.github.io/symbsearch/

    I wonder why notepad++ doesn’t already include a built-in tool bar for inserting commonly used greek characters and mathimatical characters in unicode charater set?



  • Well, there is Edit > Character Panel which shows ASCII (and extended ASCII) characters, but that’s not full unicode. Run > Run > charmap > RUN will execute the Windows built-in tool for browsing thru all characters. And if you wanted to use that SymbSearch instead, you could install it and Run > Run > path/to/SymbSearch > RUN. Since both charmap and SymbSearch put things into the clipboard, it doesn’t seem like too much extra effort.

    Also, to simplify, if you do SAVE... instead of RUN, you could give it a name and assign a keyboard shortcut: for example, charmap now resides in my Run menu as “CharMap”, with “Ctrl+Alt+Shift+C” as the shortcut. I can then browse to and select the character I want, then paste it into NPP.



  • That’s cool! I Didn’'t realize the Character Panel was i the menu.

    In that case, its only a small code change for the notepad++ source to “borrow” the XML file from the “symbsearch” program, and add the same combo-box for selecting different character groups to the “character panel”. The notepad++ team could at a minimum add in a combobox group for “Greek characters” and one for “math symbols”. Heres the XML from symbsearch zip install file:

    <?xml version=“1.0” encoding=“UTF-8”?>
    <symbols>
    <symb name=“Alpha” sign=“Α” cat=“Greek”></symb>
    <symb name=“alpha” sign=“α” cat=“Greek”></symb>
    <symb name=“Beta” sign=“Β” cat=“Greek”></symb>
    <symb name=“beta” sign=“β” cat=“Greek”></symb>

    <symb name=“N-ary Product” sign=“∏” cat=“Mathematics”></symb>
    <symb name=“N-ary Coproduct” sign=“∐” cat=“Mathematics”></symb>
    <symb name=“N-ary Summation” sign=“∑” cat=“Mathematics”></symb>
    <symb name=“Minus Sign” sign=“−” cat=“Mathematics”></symb>
    <symb name=“Division Sign” sign=“÷” cat=“Mathematics”></symb>
    <symb name=“Square Root” sign=“√” cat=“Mathematics”></symb>

    <symb name=“Leftwards Arrow” sign=“←” cat=“Arrows”></symb>
    <symb name=“Upwards Arrow” sign=“↑” cat=“Arrows”></symb>
    <symb name=“Rightwards Arrow” sign=“→” cat=“Arrows”></symb>
    <symb name=“Downwards Arrow” sign=“↓” cat=“Arrows”></symb>
    <symb name=“Left Right Arrow” sign=“↔” cat=“Arrows”></symb>


    <symb name=“Smiley Happy Light” sign=“☺” cat=“Special”></symb>
    <symb name=“Smiley Happy Dark” sign=“☻” cat=“Special”></symb>
    <symb name=“Heart” sign=“♥” cat=“Special”></symb>
    <symb name=“Diamonds” sign=“♦” cat=“Special”></symb>
    <symb name=“Club” sign=“♣” cat=“Special”></symb>
    <symb name=“Spade” sign=“♠” cat=“Special”></symb>
    <symb name=“Bullet” sign="•" cat=“Special”></symb>

    The nice thing about using XML in notepad++ install directory for setting up “Character Panel” combobox groups is that it allows anybody to customize the characters that they want to use… notepad++ can just add the groupings that most people need such as math and greek letters for writing scientific documents in text docments with out using strange markup languages like Tex, or adding scientific/math comments in programming source files…

    Actually, what i wanted is all the subscripts and superscript numbers and alphabet to be in one group… only problem i’ve been having with it is setting the correct monospace font to get it to print them… see python script for example:

    import sys

    on windows run from QtConsole for unicode

    (Cmd console only support codepage characters)

    At present (6/10/2017), superscripts/subscript chars

    are best viewed with terminal/text-editor set to monospace font

    “DejaVu Sans Mono”

    “Consolas” works also, but is missing a few characters…

    and, “Courier” has the worst support at present…

    if int(sys.version[0]) != 3:
    print(‘Aborted: Python 3.x required’)
    sys.exit(1)

    def table():
    unicode_map = {
    # superscript subscript
    ‘0’ : (’\u2070’, ‘\u2080’ ),
    ‘1’ : (’\u00B9’, ‘\u2081’ ),
    ‘2’ : (’\u00B2’, ‘\u2082’ ),
    ‘3’ : (’\u00B3’, ‘\u2083’ ),
    ‘4’ : (’\u2074’, ‘\u2084’ ),
    ‘5’ : (’\u2075’, ‘\u2085’ ),
    ‘6’ : (’\u2076’, ‘\u2086’ ),
    ‘7’ : (’\u2077’, ‘\u2087’ ),
    ‘8’ : (’\u2078’, ‘\u2088’ ),
    ‘9’ : (’\u2079’, ‘\u2089’ ),
    ‘a’ : (’\u1d43’, ‘\u2090’ ),
    ‘b’ : (’\u1d47’, ‘?’ ),
    ‘c’ : (’\u1d9c’, ‘?’ ),
    ‘d’ : (’\u1d48’, ‘?’ ),
    ‘e’ : (’\u1d49’, ‘\u2091’ ),
    ‘f’ : (’\u1da0’, ‘?’ ),
    ‘g’ : (’\u1d4d’, ‘?’ ),
    ‘h’ : (’\u02b0’, ‘\u2095’ ),
    ‘i’ : (’\u2071’, ‘\u1d62’ ),
    ‘j’ : (’\u02b2’, ‘\u2c7c’ ),
    ‘k’ : (’\u1d4f’, ‘\u2096’ ),
    ‘l’ : (’\u02e1’, ‘\u2097’ ),
    ‘m’ : (’\u1d50’, ‘\u2098’ ),
    ‘n’ : (’\u207f’, ‘\u2099’ ),
    ‘o’ : (’\u1d52’, ‘\u2092’ ),
    ‘p’ : (’\u1d56’, ‘\u209a’ ),
    ‘q’ : (’?’, ‘?’ ),
    ‘r’ : (’\u02b3’, ‘\u1d63’ ),
    ‘s’ : (’\u02e2’, ‘\u209b’ ),
    ‘t’ : (’\u1d57’, ‘\u209c’ ),
    ‘u’ : (’\u1d58’, ‘\u1d64’ ),
    ‘v’ : (’\u1d5b’, ‘\u1d65’ ),
    ‘w’ : (’\u02b7’, ‘?’ ),
    ‘x’ : (’\u02e3’, ‘\u2093’ ),
    ‘y’ : (’\u02b8’, ‘?’ ),
    ‘z’ : (’?’, ‘?’ ),
    ‘A’ : (’\u1d2c’, ‘?’ ),
    ‘B’ : (’\u1d2e’, ‘?’ ),
    ‘C’ : (’?’, ‘?’ ),
    ‘D’ : (’\u1d30’, ‘?’ ),
    ‘E’ : (’\u1d31’, ‘?’ ),
    ‘F’ : (’?’, ‘?’ ),
    ‘G’ : (’\u1d33’, ‘?’ ),
    ‘H’ : (’\u1d34’, ‘?’ ),
    ‘I’ : (’\u1d35’, ‘?’ ),
    ‘J’ : (’\u1d36’, ‘?’ ),
    ‘K’ : (’\u1d37’, ‘?’ ),
    ‘L’ : (’\u1d38’, ‘?’ ),
    ‘M’ : (’\u1d39’, ‘?’ ),
    ‘N’ : (’\u1d3a’, ‘?’ ),
    ‘O’ : (’\u1d3c’, ‘?’ ),
    ‘P’ : (’\u1d3e’, ‘?’ ),
    ‘Q’ : (’?’, ‘?’ ),
    ‘R’ : (’\u1d3f’, ‘?’ ),
    ‘S’ : (’?’, ‘?’ ),
    ‘T’ : (’\u1d40’, ‘?’ ),
    ‘U’ : (’\u1d41’, ‘?’ ),
    ‘V’ : (’\u2c7d’, ‘?’ ),
    ‘W’ : (’\u1d42’, ‘?’ ),
    ‘X’ : (’?’, ‘?’ ),
    ‘Y’ : (’?’, ‘?’ ),
    ‘Z’ : (’?’, ‘?’ ),
    ‘+’ : (’\u207A’, ‘\u208A’ ),
    ‘-’ : (’\u207B’, ‘\u208B’ ),
    ‘=’ : (’\u207C’, ‘\u208C’ ),
    ‘(’ : (’\u207D’, ‘\u208D’ ),
    ‘)’ : (’\u207E’, ‘\u208E’ ),
    ‘:alpha’ : (’\u1d45’, ‘?’ ),
    ‘:beta’ : (’\u1d5d’, ‘\u1d66’ ),
    ‘:gamma’ : (’\u1d5e’, ‘\u1d67’ ),
    ‘:delta’ : (’\u1d5f’, ‘?’ ),
    ‘:epsilon’ : (’\u1d4b’, ‘?’ ),
    ‘:theta’ : (’\u1dbf’, ‘?’ ),
    ‘:iota’ : (’\u1da5’, ‘?’ ),
    ‘:pho’ : (’?’, ‘\u1d68’ ),
    ‘:phi’ : (’\u1db2’, ‘?’ ),
    ‘:psi’ : (’\u1d60’, ‘\u1d69’ ),
    ‘:chi’ : (’\u1d61’, ‘\u1d6a’ ),
    ‘:coffee’ : (’\u2615’, ‘\u2615’ )
    }

    keys = sorted(unicode_map.keys())
    
    for key in keys:
        spr = "X" + unicode_map[key][0] 
        sub = "X" + unicode_map[key][1]        
        if (spr == "X?"): spr = ""
        if (sub == "X?"): sub = ""
        print('%-15s %s %s' % (key, spr, sub))
    

    table()


Log in to reply