Community
    • Login

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

    Scheduled Pinned Locked Moved Notepad++ & Plugin Development
    character settoolbar
    3 Posts 2 Posters 2.7k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Bill MooreB
      Bill Moore
      last edited by Bill Moore

      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?

      1 Reply Last reply Reply Quote 0
      • PeterJonesP
        PeterJones
        last edited by

        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.

        1 Reply Last reply Reply Quote 3
        • Bill MooreB
          Bill Moore
          last edited by

          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()

          1 Reply Last reply Reply Quote 1
          • First post
            Last post
          The Community of users of the Notepad++ text editor.
          Powered by NodeBB | Contributors