Re: Tutorial: Notepad++ shortcuts.xml macro converts unicode to the 95-keyboard ASCII characters
Maria Sophia <[email protected]> Fri, 24 Jul 2026 10:49:12 -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]> |
Paul wrote:
> I notice in Thunderbird for example, if I paste the unicode output from an
> LLM-AI, the line spacing is not uniform. If a line has an em-dash and I change
> that to a hyphen, the line height might change. By removing various "things"
> in the LLM-AI paste, I can return pretty well all the lines to the same
> line height.
Hi Paul,
I didn't read this thread (as the topic was generic) so I don't know what's
going on, but on the situation of the LLM/AI providing unicode, the classic
LLM seems to get a dopamine high by using em dash pauses instead of commas.
The LLMs also seem to love Unicode bullets, which wreaks havoc in text
editors in terms of line spacing, and for some reason I haven't fully
figured out, lines mash together as if there's an invisible loss of a line
feed, such that when I try to edit the copypasta in a text editor, a
backspace on the mashed together lines wipes out the entire line.
Those Unicode non-breaking hyphens are also deceptively obnoxious in a text
editor, where at least they show up as tofu, but the curly quotes don't.
Pretty much, what I do for copying and editing LLM output is I run a
Notepad++ conversion (which I've had for years, prior to LLMs existing).
I wrote up the conversion steps long ago, but I could paste the current
shortcuts.xml file below so that you can use it if you want it, but it
really needs to be cleaned up as it was edited over many years' time.
However, the brilliantly simple use model to fix that text is this:
a. Press Win+R n to bring up an empty Notepad++ window
b. Grab some stuff from any number of sources, one of which is an LLM/AI
c. Paste it ctrl+v & fix it ctrl+b and ctrl+v into your text editor
i. Select unicode-polluted text from source files & copy ctrl+v
ii. Bring up an empty notepad++ window (win+R n)
iii. Paste the polluted text into that window (ctrl+v)
iv. In a single ctrl+b step, convert to ASCII & copy to clipbrd
v. Ctrl+v paste the clipboard into your favorite text editor
In a split second, all that non-Ascii stuff is instantly wiped out.
C:\> type C:\app\editor\txt\notepad++\shortcuts.xml
<?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 -->
<!-- grep -nP "[^\x00-\x7F]" shortcuts.xml (will show non-ASCII comments -->
<!-- v5p3 20260311 added more rules -->
<!-- v5p2 20260311 fixed the trailing tab in "<tab>this is text<tab>." bug -->
<!-- v5p1 20260311 fixed the leading tab in "<tab>this is text<tab>." bug -->
<!-- v5p0 20260311 added fullwidth punctuation normalization -->
<!-- (U+FF01 U+FF08 U+FF09 U+FF3B U+FF3D U+FF5B U+FF5D) -->
<!-- (U+FF0E U+FF0C U+FF0B U+FF0D U+FF1D U+FF3F) -->
<!-- v4p9 20260311 added combining marks (U+0304, U+030B, U+0332) -->
<!-- v4p7 20260311 fixed Tangsa U+16C00 and U+16C20 once again -->
<!-- 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="" />
<!-- Remove U+0304 (COMBINING MACRON) -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="̄" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Remove U+030B (COMBINING DOUBLE ACUTE) -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="̋" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Remove U+0332 (COMBINING LOW LINE) -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="̲" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- #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="" />
<!-- Begin Fullwidth punctuation normalization -->
<!-- Replace U+FF01 (fullwidth exclamation) with ASCII ! -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="!" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="!" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Replace U+FF08 (fullwidth left parenthesis) with ASCII ( -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="(" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="(" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Replace U+FF09 (fullwidth right parenthesis) with ASCII ) -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam=")" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam=")" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Replace U+FF3B (fullwidth left bracket) with ASCII [ -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="[" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="[" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Replace U+FF3D (fullwidth right bracket) with ASCII bracket -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="]" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="]" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Replace U+FF5B (fullwidth left brace) with ASCII { -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="{" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="{" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Replace U+FF5D (fullwidth right brace) with ASCII } -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="}" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="}" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Replace U+FF0E (fullwidth period) with ASCII . -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="." />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="." />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Replace U+FF0C (fullwidth comma) with ASCII , -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="," />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="," />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Replace U+FF0C (fullwidth comma) with ASCII , -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="+" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="+" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Replace U+FF0D (fullwidth hyphen) with ASCII - -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="-" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="-" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Replace U+FF1D (fullwidth equals) with ASCII = -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="=" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="=" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Replace U+FF3F (fullwidth underscore) with ASCII _ -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="_" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="_" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- End Fullwidth punctuation normalization -->
<!-- END OF STANDARD CONVERSION BLOCKS -->
<!-- Replace U+16C00 (Tangsa Letter OZ) with placeholder -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="��" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="[[NW]]" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Replace U+16C20 (Tangsa mutated) with placeholder -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="��" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="[[NW]]" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- 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 MISSING RULES v5p3 === -->
<!-- Missing: U+202F (NARROW NO-BREAK SPACE) to ASCII space -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam=" " />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam=" " />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Missing: U+2006 (SIX-PER-EM SPACE) to ASCII space -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam=" " />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam=" " />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Missing: U+2008 (PUNCTUATION SPACE) to ASCII space -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam=" " />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam=" " />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Missing apostrophe: U+02BD (MODIFIER LETTER REVERSED COMMA) ' -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="ʽ" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="'" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Missing apostrophe: U+02BB (MODIFIER LETTER TURNED COMMA) ' -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="ʻ" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="'" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Missing: U+FFFD (REPLACEMENT CHARACTER) remove -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="�" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Missing: Fullwidth A-Z and a-z to ASCII equivalents -->
<!-- NOTE: Scintilla 7.9.5 requires one rule per character -->
<!-- Fullwidth A to A U+FF21 -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="A" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="A" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Fullwidth a to a -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="a" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="a" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Missing: Tangsa surrogate pairs (literal UTF-16 code units) -->
<!-- These MUST be encoded as \uXXXX\uXXXX because Scintilla cannot match XML entities -->
<!-- Tangsa U+16C00 to [[NW]] -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="\uD81B\uDCC0" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="[[NW]]" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- Tangsa U+16C20 to [[NW]] -->
<Action type="3" message="1700" />
<Action type="3" message="1601" sParam="\uD81B\uDCE0" />
<Action type="3" message="1625" />
<Action type="3" message="1602" sParam="[[NW]]" />
<Action type="3" message="1702" wParam="768" />
<Action type="3" message="1701" lParam="1609" />
<!-- === END MISSING RULES v5p3 === -->
<!-- Begin Scintilla HTML-paste workaround bottom portion -->
<!-- === BEGIN MODERNIZED CF_HTML BOTTOM WORKAROUND v5p2 === -->
<!-- Copy cleaned text -->
<Action type="0" message="2178" />
<!-- Insert a harmless zero-width space using SCI_REPLACESEL (never triggers indent) -->
<Action type="3" message="1602" sParam="​" />
<!-- Delete the inserted zero-width space using delete back -->
<Action type="0" message="2326" /> <!-- SCI_DELETEBACK -->
<!-- Select all again -->
<Action type="0" message="2013" />
<!-- Copy again (clipboard now guaranteed plain text) -->
<Action type="0" message="2178" />
<!-- Cut to empty editor -->
<Action type="0" message="2177" />
<!-- === END MODERNIZED CF_HTML BOTTOM WORKAROUND v5p2 === -->
<!-- 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 -->
--
On Usenet, friendly kind-hearted people help each other out daily.