Skip to content

Instantly share code, notes, and snippets.

@smartmic
Last active April 19, 2022 13:16
Show Gist options
  • Save smartmic/db97c21ce65e118834b744b1225d20e5 to your computer and use it in GitHub Desktop.
Save smartmic/db97c21ce65e118834b744b1225d20e5 to your computer and use it in GitHub Desktop.
ReNeo module files for Martin's APL Edition of compose sequences
# Martin's APL Edition of Compose Sequences
# =========================================
#
#⠀This should be a complete list of APL symbols accessible via XCompose.
#
# I wanted an easy and independent way to enter APL symbols but found
# all existing solutions either inaccessible or cumbersome in one way or
# another. That's why I created this customized list of Compose
# sequences.
#
# The guiding principle is to use standard ASCII characters as building
# blocks for the APL symbols. Basically, you "draw" your APL symbol by
# strokes (ASCII chars) similarily like you would draw them by hand with
# a pen on paper. This is also how I derived the given sequences. In
# case you are unsure how the sequence for a given symbol is, it often
# helps to remember how you would draw it by hand.
#
# Sometimes the choice of ASCII chars is arguable, but I found this to
# be a good starting point. Feel free to improve for yourself and share
# your findings!
#
# Some remarks:
# * The mnemonic for ⊃ comes from the lower part of the old German
# (Fraktur) Z/z character: ℨ/𝔷
# * The list is ordered according to the Unicode Code Point (hex
# number)
# * There are unused and/or obscure symbols in the list, not being
# used by any seasoned APL programmer and also not understood by
# most APL implementations
# * The main sources for this collection stem from
# - XLib's en_US locale Compose
# - https://en.wikipedia.org/wiki/Digital_encoding_of_APL_symbols
# - http://www.math.uwaterloo.ca/~ljdickey/apl-rep/n1.html
# - http://www.math.uwaterloo.ca/~ljdickey/apl-rep/n2.html
# - http://www.math.uwaterloo.ca/~ljdickey/apl-rep/n3.html
# - http://www.math.uwaterloo.ca/~ljdickey/apl-rep/n4.html
#
# by Martin Michel, April 2022, martin at famic dot de
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
include "%L"
<Multi_key> <x> <space> : "×" U00D7 # x ␣ # APL Functional Symbol MULTIPLY
<Multi_key> <percent> <space> : "÷" U00F7 # % ␣ # APL Functional Symbol DIVIDE
<Multi_key> <dead_acute> <space> : "‾" U203E # % ␣ # APL Functional Symbol OVERBAR (OVERLINE)
<Multi_key> <bar> <dead_circumflex> <space> : "↑" U2191 # | ^ ␣ # APL Functional Symbol UPWARDS
<Multi_key> <bar> <v> <space> : "↓" U2193 # | v ␣ # APL Functional Symbol DOWNWARDS
<Multi_key> <O> <slash> : "∅" U2205 # O / # APL Functional Symbol CIRCLE SLASH
<Multi_key> <e> <space> : "∊" U220A # e ␣ # APL Functional Symbol EPSILON
<Multi_key> <minus> <space> : "−" U2212 # - ␣ # APL Functional Symbol MINUS
<Multi_key> <v> <slash> : "√" U221A # v / # SQUARE ROOT
<Multi_key> <o> <o> : "∞" U221E # o o # INFINITY
<Multi_key> <bar> <space> : "∣" U2223 # | ␣ # APL Functional Symbol STILE
<Multi_key> <dead_circumflex> <space> : "∧" U2227 # ^ ␣ # APL Functional Symbol UP CARET
<Multi_key> <v> <space> : "∨" U2228 # v ␣ # APL Functional Symbol DOWN CARET
<Multi_key> <V> <space> : "∨" U2228 # V ␣ # APL Functional Symbol DOWN CARET
<Multi_key> <n> <space> : "∩" U2229 # n ␣ # APL Functional Symbol UP SHOE (INTERSECTION)
<Multi_key> <u> <space> : "∪" U222A # u ␣ # APL Functional Symbol DOWN SHOE (UNION)
<Multi_key> <colon> <period> : "∴" U2234 # : . # APL Functional Symbol THEREFORE
<Multi_key> <period> <colon> : "∵" U2235 # . : # APL Functional Symbol DIÆRESIS DOT (BECAUSE)
<Multi_key> <asciitilde> <asciitilde> : "≈" U2248 # ~ ~ # APL Functional Symbol ALMOST EQUAL TO
<Multi_key> <equal> <underscore> <space> : "≡" U2261 # = _ ␣ # APL Functional Symbol IDENTICAL TO (SAME)
<Multi_key> <equal> <underscore> <slash> : "≢" U2262 # = _ / # APL Functional Symbol NOT IDENTICAL TO
<Multi_key> <less> <underscore> : "≤" U2264 # < _ # APL Functional Symbol LESS THAN OR EQUAL TO
<Multi_key> <greater> <underscore> : "≥" U2265 # > _ # APL Functional Symbol GREATER THAN OR EQUAL TO
<Multi_key> <c> <space> : "⊂" U2282 # c ␣ # APL Functional Symbol LEFT SHOE (SUBSET OF)
<Multi_key> <z> <space> : "⊃" U2283 # z ␣ # APL Functional Symbol RIGHT SHOE (SUPERSET OF)
<Multi_key> <c> <underscore> : "⊆" U2286 # _ ⊂ # APL Functional Symbol SUBSET OF OR EQUAL TO
<Multi_key> <z> <underscore> : "⊇" U2287 # _ ⊃ # APL Functional Symbol SUPERSET OF OR EQUAL TO
<Multi_key> <O> <plus> : "⊕" U2295 # O + # APL Functional Symbol CIRCLED PLUS
<Multi_key> <O> <minus> : "⊖" U2296 # O - # APL Functional Symbol CIRCLED MINUS
<Multi_key> <O> <period> <space> : "⊙" U2299 # O . ␣ # APL Functional Symbol CIRCLED DOT
<Multi_key> <bar> <minus> <space> : "⊢" U22A2 # | - ␣ # APL Functional Symbol RIGHT TACK
<Multi_key> <minus> <bar> : "⊣" U22A3 # - | # APL Functional Symbol LEFT TACK
<Multi_key> <T> <space> : "⊤" U22A4 # T ␣ # APL Functional Symbol DOWN TACK
<Multi_key> <bar> <underscore> <space> : "⊥" U22A5 # | _ ␣ # APL Functional Symbol UP TACK
<Multi_key> <less> <greater> <space> : "⋄" U22C4 # < > ␣ # APL Functional Symbol DIAMOND OPERATOR
<Multi_key> <asterisk> <space> : "⋆" U22C6 # * ␣ # APL Functional Symbol STAR
<Multi_key> <bar> <dead_acute> : "⌈" U2308 # | ' # APL Functional Symbol UP STILE
<Multi_key> <bar> <comma> : "⌊" U230A # | , # APL Functional Symbol DOWN STILE
<Multi_key> <I> <space> : "⌶" U2336 # I ␣ # APL Functional Symbol I BEAM
<Multi_key> <bracketleft> <bar> : "⌷" U2337 # [ | # APL Functional Symbol SQUISH QUAD
<Multi_key> <bracketleft> <bracketright> <equal> <space> : "⌸" U2338 # [ ] = ␣ # APL Functional Symbol QUAD EQUAL
<Multi_key> <bracketleft> <bracketright> <percent> : "⌹" U2339 # [ ] % # APL Functional Symbol QUAD DIVIDE
<Multi_key> <bracketleft> <bracketright> <less> <greater> : "⌺" U233A # [ ] < > # APL Functional Symbol QUAD DIAMOND
<Multi_key> <bracketleft> <bracketright> <o> : "⌻" U233B # [ ] o # APL Functional Symbol QUAD JOT
<Multi_key> <bracketleft> <bracketright> <O> : "⌼" U233C # [ ] O # APL Functional Symbol QUAD CIRCLE
<Multi_key> <O> <bar> : "⌽" U233D # O | # APL Functional Symbol CIRCLE STILE
<Multi_key> <O> <o> : "⌾" U233E # O o # APL Functional Symbol CIRCLE JOT
<Multi_key> <slash> <minus> : "⌿" U233F # / - # APL Functional Symbol SLASH BAR
<Multi_key> <backslash> <minus> : "⍀" U2340 # \ - # APL Functional Symbol BACKSLASH BAR
<Multi_key> <bracketleft> <bracketright> <slash> <space> : "⍁" U2341 # [ ] / ␣ # APL Functional Symbol QUAD SLASH
<Multi_key> <bracketleft> <bracketright> <backslash> <space> : "⍂" U2342 # [ ] \ ␣ # APL Functional Symbol QUAD BACKSLASH
<Multi_key> <bracketleft> <bracketright> <less> <space> : "⍃" U2343 # [ ] < ␣ # APL Functional Symbol QUAD LESS
<Multi_key> <bracketleft> <bracketright> <greater> <space> : "⍄" U2344 # [ ] > ␣ # APL Functional Symbol QUAD GREATER
<Multi_key> <bar> <less> <minus> : "⍅" U2345 # | < - # APL Functional Symbol LEFTWARDS VANE
<Multi_key> <bar> <minus> <greater> : "⍆" U2346 # | - > # APL Functional Symbol RIGHTWARDS VANE
<Multi_key> <bracketleft> <bracketright> <less> <minus> : "⍇" U2347 # [ ] < - # APL Functional Symbol QUAD LEFTWARDS ARROW
<Multi_key> <bracketleft> <bracketright> <minus> <greater> : "⍈" U2348 # [ ] - > # APL Functional Symbol QUAD RIGHTWARDS ARROW
<Multi_key> <O> <backslash> : "⍉" U2349 # O \ # APL Functional Symbol CIRCLE BACKSLASH
<Multi_key> <bar> <underscore> <underscore> : "⍊" U234A # | _ _ # APL Functional Symbol DOWN TACK UNDERBAR
<Multi_key> <slash> <backslash> <bar> : "⍋" U234B # / \ | # APL Functional Symbol DELTA STILE
<Multi_key> <bracketleft> <bracketright> <v> : "⍌" U234C # [ ] ∨ # APL Functional Symbol QUAD DOWN CARET
<Multi_key> <bracketleft> <bracketright> <slash> <backslash> : "⍍" U234D # [ ] ∆ # APL Functional Symbol QUAD DELTA
<Multi_key> <o> <bar> <underscore> : "⍎" U234E # o | _ # APL Functional Symbol DOWN TACK JOT
<Multi_key> <bar> <dead_circumflex> <minus> : "⍏" U234F # | ^ - # APL Functional Symbol UPWARDS VANE
<Multi_key> <bracketleft> <bracketright> <bar> <dead_circumflex> : "⍐" U2350 # [ ] | ^ # APL Functional Symbol QUAD UPWARDS ARROW
<Multi_key> <T> <dead_acute> : "⍑" U2351 # T ' # APL Functional Symbol UP TACK OVERBAR
<Multi_key> <backslash> <slash> <bar> : "⍒" U2352 # \ / | # APL Functional Symbol DEL STILE
<Multi_key> <bracketleft> <bracketright> <dead_circumflex> : "⍓" U2353 # [ ] ^ # APL Functional Symbol QUAD UP CARET
<Multi_key> <bracketleft> <bracketright> <backslash> <slash> : "⍔" U2354 # [ ] \ / # APL Functional Symbol QUAD DEL
<Multi_key> <T> <o> : "⍕" U2355 # T o # APL Functional Symbol UP TACK JOT
<Multi_key> <bar> <v> <minus> : "⍖" U2356 # | v - # APL Functional Symbol DOWNWARDS VANE
<Multi_key> <bracketleft> <bracketright> <bar> <v> : "⍗" U2357 # [ ] | # APL Functional Symbol QUAD DOWNWARDS ARROW
<Multi_key> <apostrophe> <underscore> : "⍘" U2358 # ' _ # APL Functional Symbol QUOTE UNDERBAR
<Multi_key> <slash> <backslash> <underscore> : "⍙" U2359 # / \ _ # APL Functional Symbol DELTA UNDERBAR
<Multi_key> <less> <greater> <underscore> : "⍚" U235A # < > _ # APL Functional Symbol DIAMOND UNDERBAR
<Multi_key> <o> <underscore> : "⍛" U235B # o _ # APL Functional Symbol JOT UNDERBAR
<Multi_key> <O> <underscore> : "⍜" U235C # O _ # APL Functional Symbol CIRCLE UNDERBAR
<Multi_key> <n> <o> : "⍝" U235D # n o # APL Functional Symbol UP SHOE JOT
<Multi_key> <bracketleft> <bracketright> <apostrophe> : "⍞" U235E # [ ] ' # APL Functional Symbol QUOTE QUAD
<Multi_key> <O> <asterisk> : "⍟" U235F # O * # APL Functional Symbol CIRCLE STAR
<Multi_key> <bracketleft> <bracketright> <colon> : "⍠" U2360 # [ ] : # APL Functional Symbol QUAD COLON
<Multi_key> <T> <period> <period> : "⍡" U2361 # T . . # APL Functional Symbol UP TACK DIÆRESIS
<Multi_key> <backslash> <slash> <period> <period> : "⍢" U2362 # \ / . . # APL Functional Symbol DEL DIÆRESIS
<Multi_key> <asterisk> <period> <period> : "⍣" U2363 # * . . # APL Functional Symbol STAR DIÆRESIS
<Multi_key> <o> <period> <period> : "⍤" U2364 # o . . # APL Functional Symbol JOT DIÆRESIS
<Multi_key> <O> <period> <period> : "⍥" U2365 # O . . # APL Functional Symbol CIRCLE DIÆRESIS
<Multi_key> <u> <bar> : "⍦" U2366 # u | # APL Functional Symbol DOWN SHOE STILE
<Multi_key> <c> <bar> : "⍧" U2367 # c | # APL Functional Symbol LEFT SHOE STILE
<Multi_key> <asciitilde> <period> <period> : "⍨" U2368 # ~ . . # APL Functional Symbol TILDE DIÆRESIS
<Multi_key> <greater> <period> <period> : "⍩" U2369 # > . . # APL Functional Symbol GREATER THAN DIÆRESIS
<Multi_key> <comma> <minus> : "⍪" U236A # , - # APL Functional Symbol COMMA BAR
<Multi_key> <backslash> <slash> <asciitilde> <dead_acute> : "⍫" U236B # \ / ~ # APL Functional Symbol DEL TILDE
<Multi_key> <0> <asciitilde> <space> : "⍬" U236C # 0 ~ ␣ # APL Functional Symbol ZILDE
<Multi_key> <bar> <asciitilde> : "⍭" U236D # | ~ # APL Functional Symbol STILE TILDE
<Multi_key> <semicolon> <underscore> : "⍮" U236E # ; _ # APL Functional Symbol SEMICOLON UNDERBAR
<Multi_key> <bracketleft> <bracketright> <equal> <slash> : "⍯" U236F # [ ] = / # APL Functional Symbol QUAD NOT EQUAL
<Multi_key> <bracketleft> <bracketright> <question> : "⍰" U2370 # [ ] ? # APL Functional Symbol QUAD QUESTION
<Multi_key> <v> <asciitilde> : "⍱" U2371 # v ~ # APL Functional Symbol DOWN CARET TILDE
<Multi_key> <V> <asciitilde> : "⍱" U2371 # V ~ # APL Functional Symbol DOWN CARET TILDE
<Multi_key> <dead_circumflex> <asciitilde> : "⍲" U2372 # ^ ~ # APL Functional Symbol UP CARET TILDE
<Multi_key> <i> <space> : "⍳" U2373 # i ␣ # APL Functional Symbol IOTA
<Multi_key> <r> <space> : "⍴" U2374 # r ␣ # APL Functional Symbol RHO
<Multi_key> <w> <space> : "⍵" U2375 # w ␣ # APL Functional Symbol OMEGA
<Multi_key> <a> <underscore> : "⍶" U2376 # ⍺ _ # APL Functional Symbol ALPHA UNDERBAR
<Multi_key> <e> <underscore> : "⍷" U2377 # e _ # APL Functional Symbol EPSILON UNDERBAR
<Multi_key> <i> <underscore> : "⍸" U2378 # i _ # APL Functional Symbol IOTA UNDERBAR
<Multi_key> <w> <underscore> : "⍹" U2379 # w _ # APL Functional Symbol OMEGA UNDERBAR
<Multi_key> <a> <space> : "⍺" U237A # a ␣ # APL Functional Symbol ALPHA
<Multi_key> <bracketleft> <bracketright> <space> : "⎕" U2395 # [ ] ␣ # APL Functional Symbol QUAD
# From en_US.module delete :
<Multi_key> <minus> <space> : "~" asciitilde # TILDE
# From en_US.module delete :
<Multi_key> <o> <o> : "°" degree # DEGREE SIGN
# From en_US.module delete :
<Multi_key> <c> <bar> : "¢" cent # CENT SIGN
# From en_US.module delete :
<Multi_key> <O> <slash> : "Ø" Oslash # LATIN CAPITAL LETTER O WITH STROKE
# From en_US.module delete :
<Multi_key> <a> <underscore> : "ā" U0101 # LATIN SMALL LETTER A WITH MACRON
# From en_US.module delete :
<Multi_key> <e> <underscore> : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON
# From en_US.module delete :
<Multi_key> <i> <underscore> : "ī" U012B # LATIN SMALL LETTER I WITH MACRON
# From en_US.module delete :
<Multi_key> <O> <underscore> : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON
# From en_US.module delete :
<Multi_key> <O> <minus> : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON
# From en_US.module delete :
<Multi_key> <o> <underscore> : "ō" U014D # LATIN SMALL LETTER O WITH MACRON
# From lang.module delete :
<Multi_key> <O> <o> : "ⱺ" U2C7A # LATIN SMALL LETTER O WITH LOW RING INSIDE
# From math.module delete :
<Multi_key> <v> <slash> <asciicircum> : "⤢" U2922 # NORTH EAST AND SOUTH WEST ARROW
# from math.module delete :
<Multi_key> <bar> <v> : "𝕧" U1D567 # MATHEMATICAL DOUBLE-STRUCK SMALL V
# From en_US.module delete :
<Multi_key> <comma> <minus> : "¬" notsign # NOT SIGN
# Interactive steps to create maple.remove for usage of Martins' APL Edition for Compose Sequences with ReNeo
# Rationale: Conflicting sequences shall be removed by specifing them in maple.remove (along with the main compose file maple.module)
#
# see also: https://www.neo-layout.org/Einrichtung/reneo/#compose
#
# Start from compose/ subdirectory
# Replace `dte` with a text editor of your choice
cat *.module | sed -n -e '/^</p' | sed 's/[ \t]\+:.*$//' | sort | uniq -d > dupes.txt
sed -i 's/$/ /' dupes.txt
grep -F -f dupes.txt maple.module # Visual check
grep -F -f dupes.txt maple.module | sponge dupes.txt
dte dupes.txt # Remove outlier in line 16 by hand
cat dupes.txt | sed -n '/^</p' | sed 's/[ \t]\+:.*$//' > maple.remove
grep -F -f maple.remove --exclude=maple.module *module # Visual check
grep -F -f maple.remove --exclude=maple.module *module | sponge maple.remove
sed -i 's/^/# From /' maple.remove
sed -i 's/:</ delete :\n</' maple.remove
dte maple.remove # Delete valid sequences by hand
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment