Re: Tutorial: Notepad++ shortcuts.xml macro converts unicode to the 95-keyboard ASCII characters
Maria Sophia <[email protected]> Wed, 11 Mar 2026 16:06:17 -0700
| Newsgroups | alt.comp.os.windows-10,alt.comp.os.windows-11,alt.comp.microsoft.windows |
|---|---|
| Organization | BWH Usenet Archive (https://usenet.blueworldhosting.com) |
| Message-ID | <[email protected]> |
Herbert Kleebauer wrote: > There shouldn't be any problem when you copy text from a web page and > past it into an usnet posting. There is only a problem if you > convert the utf-8 text into "something else" and then paste it > into the posting. You don't solve a problem, you create a problem. Hi Herbert, Thank you for asking a question to understand why the conversion is needed. You've helped me many times over the decades, and you deserve the answer. In the past, Carlos, Andy & others have noted my nntp headers have a character set defined (or not) that doesn't always match the character set. That's because I don't use a "real" newsreader. I wrote a unique simple newsreader (which is just a bunch of batch scripts with telnet, stunnel & gVim predominating) but which has no good way of knowing what character set I'm pasting into my gVim NNTP editing sessions. Worse, I can spend hours on a Usenet post, where I can combine input from dozens or even scores of web page sources, so character sets will mix. So I try to automagically force every character in the final gVim edit to be only 7-bit pure-ASCII characters (using a Notepad++ control-B macro). 1. I select text in Chromium & press "ctrl+c" to copy to clipboard 2. I type "n" in the taskbar Windows "Win+R" runbox to bring up Notepad++ 3. I type "ctrl+v" to paste that HTML text into that Notepad++ session 4. I type "ctrl+b" to run the conversion to ASCII & clean the clipboard 5. I type "ctrl+v" to paste that clipbrd into my gVim editing session This is extremely simple. Yet very complicated. It's brilliant, IMHO, but most people likely won't understand that concept. But some people *do* understand that the Windows clpbrd is rather messy. And some people might *appreciate* that I clean everything to 7-bit ASCII. While many people waste about five seconds per Usenet post, I can invest hours, where I collate input from a huge variety of sources, and, as it turns out, when copying from many sources, CF_HTML metadata fragments can corrupt the text in ways that most people have absolutely no idea of. Newsgroups: alt.comp.software.firefox,comp.sys.mac.system,alt.os.linux Subject: PSA: Clipboard differences between Chromium & Firefox across platforms Date: Thu, 12 Feb 2026 15:26:32 -0500 Message-ID: <[email protected]> I need to stress that out of a million people, only two or three know what is in that thread I listed above, so I understand that most people wouldn't have any idea that the Linux/macOS/Windows clipboard is so complicated. It's simple. But it is complicated too. A clipboard copied from a browser contains a lot of "garbage". Only some of that garbage is visible, but much of it is invisible. The updated notepad++ macro below converts all that invisible/visible garbage into the ~95 7-bit pure ASCII characters found on my keyboard. <?xml version="1.0" encoding="UTF-8" ?> <!-- C:\app\editor\txt\N++\shortcuts.xml for Windows Notepad++ (N++) --> <!-- Automatically cleans fragments, converts to ASCII & copies to clipbrd --> <!-- Use model: Control+V (paste) & Control+B (run the macro) --> <!-- Notepad++ does not treat shortcuts.xml as a user-editable file. --> <!-- It treats it as an internal state file. --> <!-- If you hand-edit it, Notepad++ will rewrite it, reorder it, --> <!-- truncate it, or revert it to whatever it feels like doing. --> <!-- Which means you need to always save a text copy of every version --> <!-- v4p6 20260311 fix the problem that it doesn't always work --> <!-- Scintilla may preserve CF_HTML metadata even after cutting --> <!-- Force the clipboard to contain plain text by doing a 2x copy --> <!-- Copy cleaned text, Insert dummy char, Delete dummy char --> <!-- Select all, Copy again --> <!-- So clipboard contains only the 2nd copy, which is always text--> <!-- Fixed inaccuracies in the Scintilla-command comment section --> <!-- Also fixed two Tangsa blocks U+16C00 and U+16C20 which did nothing prior --> <!-- v4p5 20260311 fix the problem that a space is deleted --> <!-- But Scintilla 2326 had deleted the character before the caret --> <!-- So, instead of Insert space, Delete space before the caret --> <!-- Insert a newline, Move caret left, Delete the newline --> <!-- v4p4 Replace U+FFFD (REPLACEMENT CHARACTER) with nothing & collapse--> <!-- Merged letters around U+00A1 (inverted exclamation mark) --> <!-- v4p3 Replace U+FF1A (FULLWIDTH COLON) with ASCII ':' --> <!-- v4p2 Replace U+00D7 (MULTIPLICATION SIGN) with ASCII 'x' --> <!-- v4p1 20260213 Convert Tangsa UTF-8 (F4 86 B0 80) to a placeholder --> <!-- v4p0 (Scintilla changes this file so always save a text backup! --> <!-- v3p9 20260211 N++ was not running the macro in the order shown --> <!-- But it turned out any error causes an OLDER version to run. --> <!-- Worse, when that happens, N++ overwrites this file --> <!-- Worse, N++ is executing macro actions in a different order --> <!-- than they appear in the XML so a total rewrite is needed in v4p0 --> <!-- v3p8 20260211 U+2060 is driving me nuts so it's the first block now --> <!-- v3p7 20260211 moved U+2060 up because it's the most disruptive --> <!-- v3p6 20260211 U+2009 & U+200B not being converted properly --> <!-- v3p5 20260211 fixed U+200B failing when U+200B is between ' & s --> <!-- A 2nd pass was duplicated after apostrophe normalization rules --> <!-- v3p4 20260211 added U+275E (heavy double quote right) --> <!-- v3p3 20260211 added U+2009 (thin space) --> <!-- v3p2 20260211 added seven new conversions after running testcases --> <!-- U+02BE (modifier letter right half ring) --> <!-- U+02BF (modifier letter left half ring) --> <!-- U+201E (double low-9 quote) --> <!-- U+201F (double high-reversed-9 quote) --> <!-- U+275D (heavy double quote left) --> <!-- U+275E (heavy double quote right) --> <!-- U+2015 (horizontal bar) --> <!-- U+2009 (thin space) --> <!-- v3p1 20260211 reorganized into a dozen distinct categories --> <!-- (1) control characters: U+000F U+0001 --> <!-- (2) dashes & minus signs: U+2010 U+2011 U+2012 U+2212 --> <!-- (3) zero-width characters: U+200C U+200B U+200D U+FEFF U+2060 --> <!-- (4) special spaces: U+00A0 U+2007 U+202F U+200A U+2008 U+2006 --> <!-- (5) apostrophe-like characters: U+0F0C U+2018 U+2019 U+2032 U+02BC U+02B9 U+02C8 U+02EE U+201B U+02CB U+A78C U+FF07 --> <!-- (6) combining marks (remove after apostrophes): U+0351 U+0307 U+0331 U+0335 U+0336 U+0337 U+0338 --> <!-- (7) double-quote normalization: U+201C U+201D --> <!-- (8) dash-like & ellipsis & HTML entities: U+2026 - U+2014 U+2013 - --> <!-- (9) bullets, math symbols, diacritics: U+2022 U+8722 U+011F U+2009 U+00E1 U+0161 U+011B --> <!-- (10) miscellaneous symbols: U+2713 ASCII hyphen ' U+2192 U+00B0 U+00A9 U+2122 U+00AE --> <!-- (11) invisible operators: U+00AD U+2061 U+2062 U+2063 U+2064 U+180E --> <!-- (12) line separators: U+2028 U+2029 U+0085 --> <!-- v3p0 20260211 added combining marks U+0351 U+0307 U+0331 --> <!-- v3p1 20260211 added apostrophe-like characters U+201B U+02CB --> <!-- v2p9 20260211 moved U+2060 to be above apostrophe-related blocks --> <!-- v2p8 20260211 fixed Chromium CF_HTML paste control+A anomaly --> <!-- v2p7 20260211 added U+02EE modifier letter double apostrophe rule --> <!-- v2p6 20260211 fixed U+02C8 modifier letter vertical line) rule --> <!-- v2p5 20260211 fixed U+02B9 (modifier letter prime) rule --> <!-- v2p4 20260211 removed one of two U+000F blocks --> <!-- v2p3 20260211 removed two (duplicate) 1700 lines in U+0161 --> <!-- v2p2 20260211 fixed all zero-width blocks to replace with nothing --> <!-- v2p1 20260211 fixed BOM to replace with nothing --> <!-- v2p0 20260210 cleaned (emptied out) closing sections of the file --> <!-- v1p9 20260210 ported old shortcuts.xml to improve coverage --> <!-- Cleans Chromium pasted text & normalizes Unicode to ASCII --> <!-- Use model: paste (using control+v) & fix (using control+b) --> <!-- The macro should 1st break CF_HTML fragment mode (so Ctrl+A works) --> <!-- and then run the Unicode-to-ASCII cleanup on all the pasted text --> <!-- cutting (control+x) the result back into the Windows clipboard --> <!-- thereby leaving the N++ GUI empty & ready for the next paste--> <!-- To break Scintilla's CF_HTML fragment mode, we need to make any edit. We can insert a space & then delete that space, for example. <Action type="0" message="2001" wParam="32" /> (insert a space) <Action type="0" message="2326" /> (delete a char to the left) But that is dependent on the position of the cursor, which changes! So, in v4p4, instead of Insert space, Delete space before the caret Insert a newline, Move caret left, Delete the newline --> <!-- Scintilla message-id engine command meanings: 1601 = set the search string (the Unicode character to find) 1602 = set the replacement string (ASCII equivalent) 1625 = clear the replacement buffer 1700 = begin a new search/replace operation 1701 = end this search/replace block 1702 = execute Replace All 2001 = Replace the current selection with the given text 2013 = SCI_SELECTALL (selects everything) 2177 = SCI_CUT (cut all) 2304 = Move caret one character to the left 2326 = SCI_DELETEBACK (delete the character to the left of the caret) 2327 = Delete the character to the right of the caret 41001 = IDM_FILE_EXIT (close) --> <!-- When you paste from a Chromium-based app, the clipboard contains: CF_UNICODETEXT (plain text) & CF_HTML (HTML fragment) And sometimes CF_RTF where N++ prefers CF_HTML if available. v2p0 fixes a N++ selection issue caused by CF_HTML pastes. "HTML Paste Mode" prevents the "Control+A" from working. "HTML paste mode" inserts HTML fragment as plain text where Ctrl+A is disabled until the buffer is "normalized" (until the first edit that breaks the fragment state) --> <!-- BELOW IS THE START OF THE NOTEPAD++ SHORTCUTS.XML FILE --> <!-- Below is garbage that N++ adds to shortcuts.xml --> <NotepadPlus> <InternalCommands> <Shortcut id="43009" Ctrl="no" Alt="no" Shift="no" Key="0" /> </InternalCommands> <Macros> <!-- Above is garbage that N++ adds to shortcuts.xml --> <!-- ASCII "control+b" Cleanup Macro --> <Macro name="ASCII" Ctrl="yes" Alt="no" Shift="no" Key="66"> <!-- Begin Scintilla HTML-paste workaround top portion --> <!-- Break Chromium CF_HTML fragment mode by adding & deleting a line --> <!-- Insert newline --> <Action type="0" message="2001" wParam="10" lParam="0" sParam="" /> <!-- Move caret left --> <Action type="0" message="2304" wParam="0" lParam="0" sParam="" /> <!-- Delete character to the right --> <Action type="0" message="2327" wParam="0" lParam="0" sParam="" /> <!-- Select all text before running cleanup --> <Action type="0" message="2013" wParam="0" lParam="0" sParam="" /> <!-- End Scintilla HTML-paste workaround top portion --> <!-- BEGIN STANDARD CONVERSION BLOCKS --> <!-- U+2060 is driving me nuts so I'm making it the 1st block --> <!-- U+2060 must be placed above the apostrophe-related blocks --> <!-- Otherwise apostrophe block may skip over it --> <!-- U+2060 is disruptive as it must be placed above zero-width too --> <!-- Replace U+2060 (WORD JOINER) with nothing --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="⁠" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- #1. CONTROL CHARACTERS (remove first) --> <!-- Replace U+000F (SHIFT-OUT control character) with nothing --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+0001 (SOH control character) with nothing --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- #2. DASHES & MINUS SIGNS (safest to remove early) --> <!-- Replace U+2010 (HYPHEN) with ASCII "-" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="‐" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="-" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2011 (NON-BREAKING HYPHEN) with ASCII hyphen "-" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="‑" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="-" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2012 (FIGURE DASH) with ASCII "-" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="‒" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="-" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2212 (MINUS SIGN) with ASCII "-" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="−" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="-" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- #3. ZERO-WIDTH CHARACTERS (must be BEFORE apostrophes) --> <!-- Replace U+200C (ZERO WIDTH NON-JOINER) with "" (nothing) --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="‌" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+200B (ZERO WIDTH SPACE) with nothing --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="​" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+200D (ZERO WIDTH JOINER) with nothing --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="‍" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+FEFF (BOM) with nothing --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- #4. SPECIAL SPACES (convert to ASCII space) --> <!-- Replace U+00A0 (NO-BREAK SPACE) with ASCII space --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2007 (FIGURE SPACE) with ASCII space --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+202F (NARROW NO-BREAK SPACE) with ASCII space --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+200A (HAIR SPACE) with ASCII space --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2008 (PUNCTUATION SPACE) with ASCII space --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2006 (SIX-PER-EM SPACE) with ASCII space --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- #5. APOSTROPHE-LIKE CHARACTERS --> <!-- Replace U+0F0C (TIBETAN MARK DELIMITER) with ASCII apostrophe "'" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="༌" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="'" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2018 (LEFT SINGLE QUOTE) with ASCII apostrophe "'" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="‘" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="'" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2019 (RIGHT SINGLE QUOTATION) with ASCII apostrophe "'" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="’" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="'" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2032 (PRIME) with ASCII apostrophe --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="′" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="'" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+02BC (MODIFIER LETTER APOSTROPHE) with ASCII apostrophe --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="ʼ" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="'" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+02B9 (MODIFIER LETTER PRIME) with ASCII apostrophe "'" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="ʹ" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="'" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+02C8 (MODIFIER LETTER VERTICAL) with ASCII apostrophe "'" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="ˈ" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="'" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+02EE (MODIFIER DOUBLE APOSTROPHE) with ASCII apostrophe "'" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="ˮ" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="'" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- U+201B (SINGLE HIGH-REVERSED-9 QUOTATION MARK) with apostrophe "'" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="‛" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="'" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+02CB (MODIFIER LETTER GRAVE ACCENT) with ASCII apostrophe "'" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="ˋ" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="'" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- This is is a duplication which is after the apostrophes --> <!-- When U+200B appears between two characters that were already replaced --> <!-- the first pass fails to remove it, so I added this duplicate --> <!-- Remove U+200B (ZERO-WIDTH SPACE) second pass --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="​" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- #6. COMBINING MARKS (remove only after apostrophes are done) --> <!-- Remove U+0351 (COMBINING RIGHT HALF RING ABOVE) --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="͑" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Remove U+0307 (COMBINING DOT ABOVE) --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="̇" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Remove U+0331 (COMBINING MACRON BELOW) --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="̱" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- #7. DOUBLE-QUOTE NORMALIZATION --> <!-- Replace U+201C (LEFT DOUBLE QUOTE) with ASCII double quote " --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="“" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam='"' /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+201D (RIGHT DOUBLE QUOTE) with ASCII double quote --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="”" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam='"' /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- #8. ELLIPSIS, EM DASH, EN DASH, HTML ENTITIES --> <!-- Replace U+2026 (HORIZONTAL ELLIPSIS) with ASCII "..." --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="…" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="..." /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace literal - (HTML entity for EM DASH) with ASCII "-" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&#151;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="-" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2014 (EM DASH) with ASCII "-" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="—" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="-" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2013 (EN DASH) with ASCII "-" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="–" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="-" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace literal - (ZERO WIDTH NON-JOINER entity) with ASCII "-" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="-" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="-" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- #9. BULLETS, MATH SYMBOLS, LETTERS WITH DIACRITICS --> <!-- Replace U+2022 (BULLET) with ASCII "*" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="•" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="*" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+8722 (MATHEMATICAL MINUS variant) with ASCII "&" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="蜢" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="&" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+011F (LATIN SMALL G WITH BREVE) with ASCII "g" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="ğ" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="g" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+00E1 (LATIN SMALL A WITH ACUTE) with ASCII "a" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="á" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="a" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+0161 (LATIN SMALL S WITH CARON) with ASCII "s" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="š" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="s" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+011B (LATIN SMALL E WITH CARON) with ASCII "e" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="ě" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="e" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- #10. MISCELLANEOUS SYMBOLS --> <!-- Replace U+2713 (CHECK MARK) with ASCII space --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="✓" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace ASCII hyphen "-" with ASCII hyphen "-" (normalize) --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="-" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="-" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace backtick with ASCII single quote --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="'" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="'" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace Unicode Arrow (U+2192) with ASCII dash greaterthan --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="→" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="->" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace degree symbol with deg --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="°" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="deg" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace copyright symbol U??? with (C) --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="©" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="(C)" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace Trademark (U+2122) with (TM) --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="™" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="(TM)" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace Registered (U+00AE) with (R) --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="®" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="(R)" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- #11. INVISIBLE OPERATORS (remove) --> <!-- Replace U+00AD (SOFT HYPHEN) with "" (remove completely) --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="­" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2061 (FUNCTION APPLICATION) with "" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="⁡" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2062 (INVISIBLE TIMES) with "" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="⁢" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2063 (INVISIBLE SEPARATOR) with "" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="⁣" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2064 (INVISIBLE PLUS) with "" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="⁤" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+180E (MONGOLIAN VOWEL SEPARATOR) with "" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="᠎" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- #12. LINE SEPARATORS --> <!-- Replace U+2028 (LINE SEPARATOR) with ASCII newline --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="
" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2029 (PARAGRAPH SEPARATOR) with ASCII newline --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="
" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+0085 (NEXT LINE / NEL) with ASCII newline --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="…" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+A78C (LATIN SMALL LETTER SALTILLO) with ASCII apostrophe "'" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="ꞌ" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="'" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+FF07 (FULLWIDTH APOSTROPHE) with ASCII apostrophe "'" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="'" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="'" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Remove U+0335 (COMBINING SHORT STROKE OVERLAY) --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="̵" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Remove U+0336 (COMBINING LONG STROKE OVERLAY) --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="̶" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Remove U+0337 (COMBINING SHORT SOLIDUS OVERLAY) --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="̷" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Remove U+0338 (COMBINING LONG SOLIDUS OVERLAY) --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="̸" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2043 (HYPHEN BULLET) with ASCII "-" --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="⁃" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="-" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+02BE (MODIFIER LETTER RIGHT HALF RING) w/ ASCII apostrophe --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="ʾ" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="'" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+02BF (MODIFIER LETTER LEFT HALF RING) w/ ASCII apostrophe --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="ʿ" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="'" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+201E (DOUBLE LOW-9 QUOTATION MARK) w/ ASCII double quote --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="„" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam=""" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+201F (DOUBLE HIGH-REVERSED-9 QUOTATION MARK) w/ dquote --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="‟" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam=""" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+275D (HEAVY DOUBLE QUOTATION MARK ORNAMENT LEFT) w/ dquote --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="❝" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam=""" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+275E (HEAVY DOUBLE QUOTATION MARK ORNAMENT RIGHT) w/ dquote --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="❞" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam=""" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2015 (HORIZONTAL BAR) with ASCII hyphen --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="―" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="-" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2009 (THIN SPACE) with ASCII space --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+2009 (THIN SPACE) with ASCII space --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam=" " /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+00D7 (MULTIPLICATION SIGN) with ASCII 'x' --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="×" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="x" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+FF1A (FULLWIDTH COLON) with ASCII ':' --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam=":" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam=":" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- END OF STANDARD CONVERSION BLOCKS --> <!-- v4p1 Convert Tangsa UTF-8 (F4 86 B0 80) to a harmless placeholder --> <!-- Replace U+16C00 (Tangsa Letter OZ) with placeholder --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="𖰀" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="[[NW]]" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+16C20 (mutated Tangsa) with placeholder --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="𖰠" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="[[NW]]" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Replace U+FFFD (REPLACEMENT CHARACTER) with nothing --> <!-- <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="�" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> --> <!-- Merge letters around U+FFFD (fix broken ligatures by collapsing) --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="([A-Za-z])�([A-Za-z])" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="\1\2" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Merge letters around U+00A1 (inverted exclamation mark) --> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="([A-Za-z])¡\s*([A-Za-z])" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="\1\2" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <!-- Begin Scintilla HTML-paste workaround bottom portion --> <!-- First copy --> <Action type="0" message="2178" /> <!-- Insert dummy space --> <Action type="0" message="2001" wParam="32" /> <!-- Move caret left --> <Action type="0" message="2304" /> <!-- Delete dummy space safely --> <Action type="0" message="2327" /> <!-- Select all again --> <Action type="0" message="2013" /> <!-- Second copy (guaranteed plain text) --> <Action type="0" message="2178" /> <!-- Cut to empty editor --> <Action type="0" message="2177" /> <!-- End Scintilla HTML-paste workaround bottom portion --> <!-- Close N++ --> <Action type="2" message="41001" wParam="0" lParam="0" sParam="" /> <!-- N++ will save shortcuts.xml automatically as it rewrites the file whenever shortcuts/macros/plugins change. Some sections are required so empty sections will be recreated. --> </Macro> </Macros> <UserDefinedCommands> </UserDefinedCommands> <PluginCommands /> <ScintillaKeys /> </NotepadPlus> <!-- ABOVE IS THE MEAT OF THE NOTEPAD++ SHORTCUTS.XML FILE --> -- There are two kinds of people on Usenet, only one of which can add value.