Compare commits
16 Commits
mib
...
pureos/1.1
| Author | SHA1 | Date | |
|---|---|---|---|
| 8aefae9634 | |||
| 52e2384f72 | |||
| 0eb9d89de3 | |||
| c23b6f5f50 | |||
| e4f1b121eb | |||
| 4f3bec3989 | |||
| 4fdce2802a | |||
| 1908769032 | |||
| 93e4345e82 | |||
| acac00bc88 | |||
| ac03c26d5d | |||
| 608be930f7 | |||
| 36d4f6726c | |||
| d289129404 | |||
| e49de34d0e | |||
| 225e53df07 |
40
Cargo.lock
generated
40
Cargo.lock
generated
@ -59,9 +59,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.0.66"
|
version = "1.0.67"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48"
|
checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
@ -76,9 +76,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dtoa"
|
name = "dtoa"
|
||||||
version = "0.4.7"
|
version = "0.4.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "88d7ed2934d741c6b37e33e3832298e8850b53fd2d2bea03873375596c7cea4e"
|
checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fragile"
|
name = "fragile"
|
||||||
@ -265,9 +265,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.82"
|
version = "0.2.93"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "89203f3fba0a3795506acaad8ebce3c80c0af93f994d5a1d7a0b1eeb23271929"
|
checksum = "9385f66bf6105b241aa65a61cb923ef20efc665cb9f9bb50ac2f0c4b7f378d41"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "linked-hash-map"
|
name = "linked-hash-map"
|
||||||
@ -326,18 +326,18 @@ checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.24"
|
version = "1.0.26"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
|
checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-xid",
|
"unicode-xid",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quote"
|
name = "quote"
|
||||||
version = "1.0.8"
|
version = "1.0.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df"
|
checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
@ -353,9 +353,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex-syntax"
|
name = "regex-syntax"
|
||||||
version = "0.6.22"
|
version = "0.6.23"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581"
|
checksum = "24d5f089152e60f62d28b835fbff2cd2e8dc0baf1ac13343bef92ab7eed84548"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rs"
|
name = "rs"
|
||||||
@ -380,18 +380,18 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.118"
|
version = "1.0.125"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "06c64263859d87aa2eb554587e2d23183398d617427327cf2b3d0ed8c69e4800"
|
checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.118"
|
version = "1.0.125"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df"
|
checksum = "b093b7a2bb58203b5da3056c05b4ec1fed827dcfdb37347a8841695263b3d06d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@ -400,9 +400,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_yaml"
|
name = "serde_yaml"
|
||||||
version = "0.8.15"
|
version = "0.8.17"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "971be8f6e4d4a47163b405a3df70d14359186f9ab0f3a3ec37df144ca1ce089f"
|
checksum = "15654ed4ab61726bf918a39cb8d98a2e2995b002387807fa6ba58fdf7f59bb23"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dtoa",
|
"dtoa",
|
||||||
"linked-hash-map",
|
"linked-hash-map",
|
||||||
@ -412,9 +412,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.58"
|
version = "1.0.69"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cc60a3d73ea6594cd712d830cc1f0390fd71542d8c8cd24e70cc54cdfd5e05d5"
|
checksum = "48fe99c6bd8b1cc636890bcc071842de909d902c81ac7dab53ba33c421ab8ffb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|||||||
220
data/keyboards/terminal/fr.yaml
Normal file
220
data/keyboards/terminal/fr.yaml
Normal file
@ -0,0 +1,220 @@
|
|||||||
|
---
|
||||||
|
outlines:
|
||||||
|
action: { width: 59, height: 46 }
|
||||||
|
small: { width: 50, height: 22 }
|
||||||
|
default: { width: 35.33, height: 46 }
|
||||||
|
altline: { width: 48, height: 46 }
|
||||||
|
wide: { width: 50, height: 46 }
|
||||||
|
spaceline: { width: 110, height: 46 }
|
||||||
|
special: { width: 44, height: 46 }
|
||||||
|
|
||||||
|
views:
|
||||||
|
base:
|
||||||
|
- "Ctrl Alt Tabsmall ↑ ↓ ← →"
|
||||||
|
- "a z e r t y u i o p"
|
||||||
|
- "q s d f g h j k l m"
|
||||||
|
- "Shift_L w x c v b n period BackSpace"
|
||||||
|
- "show_numbers preferences space show_eschars show_actions Return"
|
||||||
|
upper:
|
||||||
|
- "Ctrl Alt Tabsmall PgUp PgDn Home End"
|
||||||
|
- "A Z E R T Y U I O P"
|
||||||
|
- "Q S D F G H J K L M"
|
||||||
|
- "Shift_L W X C V B N , BackSpace"
|
||||||
|
- "show_numbers preferences space show_eschars show_actions Return"
|
||||||
|
numbers:
|
||||||
|
- "Ctrl Alt Tabsmall ↑ ↓ ← →"
|
||||||
|
- "1 2 3 4 5 6 7 8 9 0"
|
||||||
|
- "@ # € % & - _ + ( )"
|
||||||
|
- "show_symbols , \" ' colon ; ! ? BackSpace"
|
||||||
|
- "show_letters preferences space show_eschars show_actions Return"
|
||||||
|
symbols:
|
||||||
|
- "Ctrl Alt Tabsmall ↑ ↓ ← →"
|
||||||
|
- "~ ` | · √ π τ ÷ × ¶"
|
||||||
|
- "© ® £ $ ¥ ^ ° * { }"
|
||||||
|
- "show_numbers_from_symbols \\ / < > = [ ] BackSpace"
|
||||||
|
- "show_letters preferences space show_eschars show_actions Return"
|
||||||
|
eschars:
|
||||||
|
- "Ctrl Alt Tabsmall ↑ ↓ ← →"
|
||||||
|
- "à â ç é è ê î ô ù û"
|
||||||
|
- "À Â Ç É È Ê Î Ô Ù Û"
|
||||||
|
- "show_numbers_from_symbols æ œ ä ë ï ö ü BackSpace"
|
||||||
|
- "show_letters preferences space show_eschars show_actions Return"
|
||||||
|
actions:
|
||||||
|
- "Ctrl Alt PgUp PgDn Home End"
|
||||||
|
- "F1 F2 F3 F4 F5 F6"
|
||||||
|
- "F7 F8 F9 F10 F11 F12"
|
||||||
|
- "Esc Tab Pause Insert Up Del"
|
||||||
|
- "show_letters Menu Break Left Down Right"
|
||||||
|
|
||||||
|
|
||||||
|
buttons:
|
||||||
|
F1:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F1"
|
||||||
|
F2:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F2"
|
||||||
|
F3:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F3"
|
||||||
|
F4:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F4"
|
||||||
|
F5:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F5"
|
||||||
|
F6:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F6"
|
||||||
|
F7:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F7"
|
||||||
|
F8:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F8"
|
||||||
|
F9:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F9"
|
||||||
|
F10:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F10"
|
||||||
|
F11:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F11"
|
||||||
|
F12:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F12"
|
||||||
|
Esc:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Escape"
|
||||||
|
Tab:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Tab"
|
||||||
|
Tabsmall:
|
||||||
|
outline: "small"
|
||||||
|
keysym: "Tab"
|
||||||
|
label: "Tab"
|
||||||
|
Del:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Delete"
|
||||||
|
Insert:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Insert"
|
||||||
|
Menu:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Menu"
|
||||||
|
Pause:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Pause"
|
||||||
|
Break:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Break"
|
||||||
|
Home:
|
||||||
|
outline: "small"
|
||||||
|
keysym: "Home"
|
||||||
|
End:
|
||||||
|
outline: "small"
|
||||||
|
keysym: "End"
|
||||||
|
PgUp:
|
||||||
|
outline: "small"
|
||||||
|
keysym: "Page_Up"
|
||||||
|
PgDn:
|
||||||
|
outline: "small"
|
||||||
|
keysym: "Page_Down"
|
||||||
|
"↑":
|
||||||
|
outline: "small"
|
||||||
|
keysym: "Up"
|
||||||
|
"↓":
|
||||||
|
outline: "small"
|
||||||
|
keysym: "Down"
|
||||||
|
"←":
|
||||||
|
outline: "small"
|
||||||
|
keysym: "Left"
|
||||||
|
"→":
|
||||||
|
outline: "small"
|
||||||
|
keysym: "Right"
|
||||||
|
Up:
|
||||||
|
label: "↑"
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Up"
|
||||||
|
Left:
|
||||||
|
label: "←"
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Left"
|
||||||
|
Down:
|
||||||
|
label: "↓"
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Down"
|
||||||
|
Right:
|
||||||
|
label: "→"
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Right"
|
||||||
|
Ctrl:
|
||||||
|
modifier: "Control"
|
||||||
|
outline: "small"
|
||||||
|
label: "Ctrl"
|
||||||
|
Alt:
|
||||||
|
modifier: "Alt"
|
||||||
|
outline: "small"
|
||||||
|
label: "Alt"
|
||||||
|
period:
|
||||||
|
outline: "special"
|
||||||
|
text: "."
|
||||||
|
show_actions:
|
||||||
|
action:
|
||||||
|
set_view: "actions"
|
||||||
|
outline: "special"
|
||||||
|
label: ">_"
|
||||||
|
Shift_L:
|
||||||
|
action:
|
||||||
|
locking:
|
||||||
|
lock_view: "upper"
|
||||||
|
unlock_view: "base"
|
||||||
|
outline: "altline"
|
||||||
|
icon: "key-shift"
|
||||||
|
BackSpace:
|
||||||
|
outline: "altline"
|
||||||
|
icon: "edit-clear-symbolic"
|
||||||
|
action: erase
|
||||||
|
preferences:
|
||||||
|
action: "show_prefs"
|
||||||
|
outline: "special"
|
||||||
|
icon: "keyboard-mode-symbolic"
|
||||||
|
show_numbers:
|
||||||
|
action:
|
||||||
|
set_view: "numbers"
|
||||||
|
outline: "wide"
|
||||||
|
label: "123"
|
||||||
|
show_numbers_from_symbols:
|
||||||
|
action:
|
||||||
|
set_view: "numbers"
|
||||||
|
outline: "altline"
|
||||||
|
label: "123"
|
||||||
|
show_letters:
|
||||||
|
action:
|
||||||
|
set_view: "base"
|
||||||
|
outline: "wide"
|
||||||
|
label: "abc"
|
||||||
|
show_symbols:
|
||||||
|
action:
|
||||||
|
set_view: "symbols"
|
||||||
|
outline: "altline"
|
||||||
|
label: "*/="
|
||||||
|
show_eschars:
|
||||||
|
action:
|
||||||
|
locking:
|
||||||
|
lock_view: "eschars"
|
||||||
|
unlock_view: "base"
|
||||||
|
outline: "altline"
|
||||||
|
label: "âÂ"
|
||||||
|
space:
|
||||||
|
outline: "spaceline"
|
||||||
|
text: " "
|
||||||
|
Return:
|
||||||
|
outline: "wide"
|
||||||
|
icon: "key-enter"
|
||||||
|
keysym: "Return"
|
||||||
|
colon:
|
||||||
|
text: ":"
|
||||||
|
"\"":
|
||||||
|
keysym: "quotedbl"
|
||||||
223
data/keyboards/terminal/fr_wide.yaml
Normal file
223
data/keyboards/terminal/fr_wide.yaml
Normal file
@ -0,0 +1,223 @@
|
|||||||
|
---
|
||||||
|
outlines:
|
||||||
|
action: { width: 90, height: 37 }
|
||||||
|
small: { width: 67.4, height: 22 }
|
||||||
|
default: { width: 54, height: 37 }
|
||||||
|
altline: { width: 81, height: 37 }
|
||||||
|
wide: { width: 100, height: 37 }
|
||||||
|
spaceline: { width: 110, height: 37 }
|
||||||
|
special: { width: 54, height: 37 }
|
||||||
|
|
||||||
|
views:
|
||||||
|
base:
|
||||||
|
- "EscSmall TabSmall Ctrl Alt ↑ ↓ ← →"
|
||||||
|
- "a z e r t y u i o p"
|
||||||
|
- "q s d f g h j k l m"
|
||||||
|
- "Shift_L w x c v b n period BackSpace"
|
||||||
|
- "show_numbers preferences space show_eschars show_actions Return"
|
||||||
|
upper:
|
||||||
|
- "EscSmall TabSmall Ctrl Alt PgUp PgDn Home End"
|
||||||
|
- "A Z E R T Y U I O P"
|
||||||
|
- "Q S D F G H J K L M"
|
||||||
|
- "Shift_L W X C V B N , BackSpace"
|
||||||
|
- "show_numbers preferences space show_eschars show_actions Return"
|
||||||
|
numbers:
|
||||||
|
- "EscSmall TabSmall Ctrl Alt ↑ ↓ ← →"
|
||||||
|
- "1 2 3 4 5 6 7 8 9 0"
|
||||||
|
- "@ # € % & - _ + ( )"
|
||||||
|
- "show_symbols , \" ' colon ; ! ? BackSpace"
|
||||||
|
- "show_letters preferences space show_eschars show_actions Return"
|
||||||
|
symbols:
|
||||||
|
- "EscSmall TabSmall Ctrl Alt ↑ ↓ ← →"
|
||||||
|
- "~ ` | · √ π τ ÷ × ¶"
|
||||||
|
- "© ® £ $ ¥ ^ ° * { }"
|
||||||
|
- "show_numbers_from_symbols \\ / < > = [ ] BackSpace"
|
||||||
|
- "show_letters preferences space show_eschars show_actions Return"
|
||||||
|
eschars:
|
||||||
|
- "EscSmall TabSmall Ctrl Alt ↑ ↓ ← →"
|
||||||
|
- "à â ç é è ê î ô ù û"
|
||||||
|
- "À Â Ç É È Ê Î Ô Ù Û"
|
||||||
|
- "show_numbers_from_symbols æ œ ä ë ï ö ü BackSpace"
|
||||||
|
- "show_letters preferences space show_eschars show_actions Return"
|
||||||
|
actions:
|
||||||
|
- "EscSmall TabSmall Ctrl Alt PgUp PgDn Home End"
|
||||||
|
- "F1 F2 F3 F4 F5 F6"
|
||||||
|
- "F7 F8 F9 F10 F11 F12"
|
||||||
|
- "Esc Tab Pause Insert Up Del"
|
||||||
|
- "show_letters Menu Break Left Down Right"
|
||||||
|
|
||||||
|
buttons:
|
||||||
|
F1:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F1"
|
||||||
|
F2:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F2"
|
||||||
|
F3:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F3"
|
||||||
|
F4:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F4"
|
||||||
|
F5:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F5"
|
||||||
|
F6:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F6"
|
||||||
|
F7:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F7"
|
||||||
|
F8:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F8"
|
||||||
|
F9:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F9"
|
||||||
|
F10:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F10"
|
||||||
|
F11:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F11"
|
||||||
|
F12:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "F12"
|
||||||
|
Esc:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Escape"
|
||||||
|
EscSmall:
|
||||||
|
outline: "small"
|
||||||
|
keysym: "Escape"
|
||||||
|
label: "Esc"
|
||||||
|
Tab:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Tab"
|
||||||
|
TabSmall:
|
||||||
|
outline: "small"
|
||||||
|
keysym: "Tab"
|
||||||
|
label: "Tab"
|
||||||
|
Del:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Delete"
|
||||||
|
Insert:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Insert"
|
||||||
|
Menu:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Menu"
|
||||||
|
Pause:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Pause"
|
||||||
|
Break:
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Break"
|
||||||
|
Home:
|
||||||
|
outline: "small"
|
||||||
|
keysym: "Home"
|
||||||
|
End:
|
||||||
|
outline: "small"
|
||||||
|
keysym: "End"
|
||||||
|
PgUp:
|
||||||
|
outline: "small"
|
||||||
|
keysym: "Page_Up"
|
||||||
|
PgDn:
|
||||||
|
outline: "small"
|
||||||
|
keysym: "Page_Down"
|
||||||
|
"↑":
|
||||||
|
outline: "small"
|
||||||
|
keysym: "Up"
|
||||||
|
"↓":
|
||||||
|
outline: "small"
|
||||||
|
keysym: "Down"
|
||||||
|
"←":
|
||||||
|
outline: "small"
|
||||||
|
keysym: "Left"
|
||||||
|
"→":
|
||||||
|
outline: "small"
|
||||||
|
keysym: "Right"
|
||||||
|
Up:
|
||||||
|
label: "↑"
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Up"
|
||||||
|
Left:
|
||||||
|
label: "←"
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Left"
|
||||||
|
Down:
|
||||||
|
label: "↓"
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Down"
|
||||||
|
Right:
|
||||||
|
label: "→"
|
||||||
|
outline: "action"
|
||||||
|
keysym: "Right"
|
||||||
|
Ctrl:
|
||||||
|
modifier: "Control"
|
||||||
|
outline: "small"
|
||||||
|
label: "Ctrl"
|
||||||
|
Alt:
|
||||||
|
modifier: "Alt"
|
||||||
|
outline: "small"
|
||||||
|
label: "Alt"
|
||||||
|
period:
|
||||||
|
outline: "special"
|
||||||
|
text: "."
|
||||||
|
show_actions:
|
||||||
|
action:
|
||||||
|
set_view: "actions"
|
||||||
|
outline: "special"
|
||||||
|
label: ">_"
|
||||||
|
Shift_L:
|
||||||
|
action:
|
||||||
|
locking:
|
||||||
|
lock_view: "upper"
|
||||||
|
unlock_view: "base"
|
||||||
|
outline: "altline"
|
||||||
|
icon: "key-shift"
|
||||||
|
BackSpace:
|
||||||
|
outline: "altline"
|
||||||
|
icon: "edit-clear-symbolic"
|
||||||
|
action: erase
|
||||||
|
preferences:
|
||||||
|
action: "show_prefs"
|
||||||
|
outline: "special"
|
||||||
|
icon: "keyboard-mode-symbolic"
|
||||||
|
show_numbers:
|
||||||
|
action:
|
||||||
|
set_view: "numbers"
|
||||||
|
outline: "wide"
|
||||||
|
label: "123"
|
||||||
|
show_numbers_from_symbols:
|
||||||
|
action:
|
||||||
|
set_view: "numbers"
|
||||||
|
outline: "altline"
|
||||||
|
label: "123"
|
||||||
|
show_letters:
|
||||||
|
action:
|
||||||
|
set_view: "base"
|
||||||
|
outline: "wide"
|
||||||
|
label: "abc"
|
||||||
|
show_symbols:
|
||||||
|
action:
|
||||||
|
set_view: "symbols"
|
||||||
|
outline: "altline"
|
||||||
|
label: "*/="
|
||||||
|
show_eschars:
|
||||||
|
action:
|
||||||
|
locking:
|
||||||
|
lock_view: "eschars"
|
||||||
|
unlock_view: "base"
|
||||||
|
outline: "altline"
|
||||||
|
label: "âÂ"
|
||||||
|
space:
|
||||||
|
outline: "spaceline"
|
||||||
|
text: " "
|
||||||
|
Return:
|
||||||
|
outline: "wide"
|
||||||
|
icon: "key-enter"
|
||||||
|
keysym: "Return"
|
||||||
|
colon:
|
||||||
|
text: ":"
|
||||||
|
"\"":
|
||||||
|
keysym: "quotedbl"
|
||||||
@ -147,9 +147,6 @@ buttons:
|
|||||||
Pause:
|
Pause:
|
||||||
outline: "action"
|
outline: "action"
|
||||||
keysym: "Pause"
|
keysym: "Pause"
|
||||||
Menu:
|
|
||||||
outline: "action"
|
|
||||||
keysym: "Menu"
|
|
||||||
Break:
|
Break:
|
||||||
outline: "action"
|
outline: "action"
|
||||||
keysym: "Break"
|
keysym: "Break"
|
||||||
@ -201,4 +198,3 @@ buttons:
|
|||||||
modifier: "Alt"
|
modifier: "Alt"
|
||||||
outline: "small"
|
outline: "small"
|
||||||
label: "Alt"
|
label: "Alt"
|
||||||
|
|
||||||
@ -155,9 +155,6 @@ buttons:
|
|||||||
Pause:
|
Pause:
|
||||||
outline: "action"
|
outline: "action"
|
||||||
keysym: "Pause"
|
keysym: "Pause"
|
||||||
Menu:
|
|
||||||
outline: "action"
|
|
||||||
keysym: "Menu"
|
|
||||||
Break:
|
Break:
|
||||||
outline: "action"
|
outline: "action"
|
||||||
keysym: "Break"
|
keysym: "Break"
|
||||||
@ -208,4 +205,4 @@ buttons:
|
|||||||
Alt:
|
Alt:
|
||||||
modifier: "Alt"
|
modifier: "Alt"
|
||||||
outline: "small"
|
outline: "small"
|
||||||
label: "Alt"
|
label: "Alt"
|
||||||
62
debian/changelog
vendored
62
debian/changelog
vendored
@ -1,3 +1,65 @@
|
|||||||
|
squeekboard (1.13.0pureos0~amber0) amber-phone; urgency=medium
|
||||||
|
|
||||||
|
[ Dorota Czaplejewicz ]
|
||||||
|
* layout: Latch keys when clicked twice
|
||||||
|
* layout: Add stateless view switching
|
||||||
|
* layout: Plug in stateless view switching
|
||||||
|
* layout: Remove the little abomination of view change promise
|
||||||
|
* view: Ąto-unlatching when multiple latching buttons pressed
|
||||||
|
* renderer: Bring button drawing closer to Rust
|
||||||
|
* ffi: Eliminate squeek_button and squeek_row
|
||||||
|
* imservice: Increment serials on receiving done, not sending commit
|
||||||
|
* input-method: Fix commit/done mixup in protocol text
|
||||||
|
* CI: fix xheck_tag to be compatible with Amber
|
||||||
|
* italian: Fix colon
|
||||||
|
* popover: Fix prematurely deallocated CString
|
||||||
|
* Rust: Remove unnecessary no_mangle statements to silence warnings
|
||||||
|
* renderer: Reduce reliance on knowing the transform
|
||||||
|
* renderer: Split mutable geometry and place it directly in GtkKeyboard
|
||||||
|
* Revert "moved data/langs/he_IL.txt -> data/langs/he-IL.txt to better conform with existing translations."
|
||||||
|
* layout: Make it possible to opt out of latching per-key
|
||||||
|
* renderer: Mark latched buttons differently than locked
|
||||||
|
* appearance: Colour latched/locked according to design
|
||||||
|
* docs: Describe view switching
|
||||||
|
* language-terminal: Place keyboards in a sub-path
|
||||||
|
* layout selection: Fix emoji and number
|
||||||
|
* rust: Fix compiler warnings
|
||||||
|
* layout: Take into account text purpose again
|
||||||
|
* layouts: Make selection testable
|
||||||
|
* layouts: Stop assuming that layout name always changes on switch
|
||||||
|
* Cargo: Version bump
|
||||||
|
|
||||||
|
[ J.D. Laub ]
|
||||||
|
* Add US Dvorak layout (and Colemak wide)
|
||||||
|
* Add US Dvorak layout (and Colemak wide)
|
||||||
|
|
||||||
|
[ Jordi Masip ]
|
||||||
|
* Catalan keyboard layout
|
||||||
|
|
||||||
|
[ Myth ]
|
||||||
|
* Added hebrew keyboard layout
|
||||||
|
|
||||||
|
[ David96 ]
|
||||||
|
* Add Mod4 (Windows) key
|
||||||
|
|
||||||
|
[ Panawat Wong-klaew ]
|
||||||
|
* Add wide Thai keyboard layout
|
||||||
|
|
||||||
|
[ Guido Günther ]
|
||||||
|
* server-main: Add quit()
|
||||||
|
* server-main: Properly register to gnome-session (Closes: #274)
|
||||||
|
|
||||||
|
[ Kozova1 ]
|
||||||
|
* Added Hebrew translations for most layouts.
|
||||||
|
* moved data/langs/he_IL.txt -> data/langs/he-IL.txt to better conform with existing translations.
|
||||||
|
* Fixed Hebrew layout.
|
||||||
|
* moved data/langs/he_IL.txt -> data/langs/he-IL.txt to better conform with existing translations.
|
||||||
|
|
||||||
|
[ M33 ]
|
||||||
|
* Revert "Update tests/meson.build"
|
||||||
|
|
||||||
|
-- Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm> Mon, 12 Apr 2021 10:40:32 +0000
|
||||||
|
|
||||||
squeekboard (1.12.0pureos0~amber0) amber-phone; urgency=medium
|
squeekboard (1.12.0pureos0~amber0) amber-phone; urgency=medium
|
||||||
|
|
||||||
[ Dorota Czaplejewicz ]
|
[ Dorota Czaplejewicz ]
|
||||||
|
|||||||
@ -6,6 +6,7 @@ Contents
|
|||||||
|
|
||||||
* [Tutorial](tutorial.md)
|
* [Tutorial](tutorial.md)
|
||||||
* [Contributing](hacking.md)
|
* [Contributing](hacking.md)
|
||||||
|
* [Switching views](views.md)
|
||||||
|
|
||||||
Introduction
|
Introduction
|
||||||
------------
|
------------
|
||||||
@ -21,6 +22,8 @@ Layouts are created using a text-based format, based on YAML.
|
|||||||
|
|
||||||
TODO: Provide a description of the format.
|
TODO: Provide a description of the format.
|
||||||
|
|
||||||
|
Squeekboard layouts are separated into *views* and use a *room metaphor* to [switch views](views.md).
|
||||||
|
|
||||||
Contributions
|
Contributions
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
|||||||
594
doc/latching.svg
Normal file
594
doc/latching.svg
Normal file
@ -0,0 +1,594 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="177.92439mm"
|
||||||
|
height="88.144363mm"
|
||||||
|
viewBox="0 0 177.92439 88.144364"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
sodipodi:docname="latching.svg"
|
||||||
|
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Lend"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Lend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path1092" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Mend"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Mend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path1098" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow2Sstart"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow2Sstart"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(0.3,0,0,0.3,-0.69,0)"
|
||||||
|
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
id="path1119" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow2Mstart"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow2Mstart"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="scale(0.6)"
|
||||||
|
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
id="path1113" />
|
||||||
|
</marker>
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-5" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect848" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-1" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect848-1" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-9" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect848-8" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-10" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect916" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-4" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect951" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-10-1" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect986" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-2" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect1061" />
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Lend-5"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Lend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||||
|
style="fill:#00ad12;fill-opacity:1;fill-rule:evenodd;stroke:#00ad12;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path1092-7" />
|
||||||
|
</marker>
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-2-1" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect1549" />
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Lend-8"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Lend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||||
|
style="fill:#101010;fill-opacity:1;fill-rule:evenodd;stroke:#101010;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path1092-8" />
|
||||||
|
</marker>
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-2-3" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect1845" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-2-38" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect1960" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-2-3-9" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect2304" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-2-3-4" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect2304-7" />
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Lend-2"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Lend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||||
|
style="fill:#6c6c6c;fill-opacity:1;fill-rule:evenodd;stroke:#6c6c6c;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path1092-89" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Lend-2-6"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Lend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||||
|
style="fill:#00ad12;fill-opacity:1;fill-rule:evenodd;stroke:#00ad12;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path1092-89-8" />
|
||||||
|
</marker>
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-21" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect2574" />
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Lend-2-6-1"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Lend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||||
|
style="fill:#00ad12;fill-opacity:1;fill-rule:evenodd;stroke:#00ad12;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path1092-89-8-0" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Lend-2-6-6"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Lend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||||
|
style="fill:#00ad12;fill-opacity:1;fill-rule:evenodd;stroke:#00ad12;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path1092-89-8-2" />
|
||||||
|
</marker>
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-10-1-8" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect3021" />
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Lend-8-3"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Lend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||||
|
style="fill:#101010;fill-opacity:1;fill-rule:evenodd;stroke:#101010;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path1092-8-5" />
|
||||||
|
</marker>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.3358025"
|
||||||
|
inkscape:cx="212.63846"
|
||||||
|
inkscape:cy="105.21093"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="4"
|
||||||
|
fit-margin-left="4"
|
||||||
|
fit-margin-right="4"
|
||||||
|
fit-margin-bottom="4"
|
||||||
|
lock-margins="true"
|
||||||
|
inkscape:window-width="1298"
|
||||||
|
inkscape:window-height="708"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-72.097892,-53.326191)">
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#101010;stroke-width:0.264999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend-8-3)"
|
||||||
|
d="m 134.9616,86.141869 c 17.5759,-11.622767 35.93283,0 35.93283,0"
|
||||||
|
id="path1087-1-6" />
|
||||||
|
<g
|
||||||
|
id="g2948">
|
||||||
|
<circle
|
||||||
|
style="color:#000000;overflow:visible;fill:#ffffff;stroke:#000000;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="path1065-6"
|
||||||
|
cx="129.67093"
|
||||||
|
cy="92.793152"
|
||||||
|
r="7.8844509" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833-0"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835-10);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(46.071199,-1.2662626)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan>A</tspan></tspan></text>
|
||||||
|
</g>
|
||||||
|
<rect
|
||||||
|
style="color:#000000;overflow:visible;fill:#f8f8f8;fill-opacity:1;stroke:#000000;stroke-width:0.555679;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect2066"
|
||||||
|
width="1.4562259"
|
||||||
|
height="10.90563"
|
||||||
|
x="81.767418"
|
||||||
|
y="75.519585"
|
||||||
|
ry="0.9693895" />
|
||||||
|
<g
|
||||||
|
id="g905"
|
||||||
|
transform="translate(0,-0.85044703)">
|
||||||
|
<circle
|
||||||
|
style="color:#000000;overflow:visible;fill:#ffffff;stroke:#000000;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="path1065"
|
||||||
|
cx="83.154755"
|
||||||
|
cy="93.6436"
|
||||||
|
r="7.8844509" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(-0.04189825,-0.41581583)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke:none">a</tspan></tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g905-3-7"
|
||||||
|
transform="translate(92.82116,-0.85044861)">
|
||||||
|
<circle
|
||||||
|
style="color:#000000;overflow:visible;fill:#ffffff;stroke:#000000;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="path1065-6-7"
|
||||||
|
cx="83.557831"
|
||||||
|
cy="93.6436"
|
||||||
|
r="7.8844509" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833-0-5"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835-10-1);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(-0.04189825,-0.41581583)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan>Ą</tspan></tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g905-1"
|
||||||
|
transform="translate(68.838914,-17.67039)">
|
||||||
|
<rect
|
||||||
|
style="color:#000000;overflow:visible;fill:#e2e2e2;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect900-8"
|
||||||
|
width="10.583333"
|
||||||
|
height="13.79613"
|
||||||
|
x="78.878532"
|
||||||
|
y="85.920006"
|
||||||
|
ry="1.937705" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833-7"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835-2);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(-0.2686286,-0.41581583)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan> ̨̂ ̈</tspan></tspan></text>
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#101010;stroke-width:0.264999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend-8)"
|
||||||
|
d="m 88.446425,85.89509 c 17.575895,-11.622767 35.932835,0 35.932835,0"
|
||||||
|
id="path1087-1" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="99.186691"
|
||||||
|
y="66.221436"
|
||||||
|
id="text1035-89"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan1033-6"
|
||||||
|
x="99.186691"
|
||||||
|
y="66.221436"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777px;font-family:monospace;-inkscape-font-specification:monospace;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px">locking</tspan></text>
|
||||||
|
<g
|
||||||
|
id="g905-1-4"
|
||||||
|
transform="translate(22.423434,-17.67039)">
|
||||||
|
<rect
|
||||||
|
style="color:#000000;overflow:visible;fill:#e2e2e2;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect900-8-3"
|
||||||
|
width="10.583333"
|
||||||
|
height="13.79613"
|
||||||
|
x="78.878532"
|
||||||
|
y="85.920006"
|
||||||
|
ry="1.937705" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833-7-3"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835-2-3);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(-0.04189825,-0.41581583)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan>⇧</tspan></tspan></text>
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 0.5;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 83.251484,76.550079 c -0.31498,0 -0.944941,-0.314981 -0.944941,0 0,0.31498 0.770221,0.262079 0.944941,0 0.212555,-0.318834 0.08197,-0.862973 -0.188988,-1.133929 -0.132651,-0.13265 -1.931144,0.354037 -2.078869,0.944941 -0.108038,0.432149 0.877467,-0.188989 1.322916,-0.188989 0.339244,0 0.626121,0.262042 0.944941,0.377977 0.374434,0.136158 0.777569,0.199796 1.133928,0.377976 0.113894,0.05695 -0.0037,0.439732 0.944941,0.755952 0.544156,0.181385 1.78847,0.275251 2.267857,0.377976 0.448438,0.09609 0.881944,0.251984 1.322917,0.377977 0.063,0.188988 0.388199,0.566964 0.188988,0.566964 -0.195153,0 -0.745291,-0.93961 0,-0.566964 0.281726,0.140863 0.485859,0.404908 0.755952,0.566964 1.460327,0.876196 3.039871,1.714659 4.346726,2.834821 0.966187,0.828161 1.495207,2.006597 2.645833,2.645834 2.876101,1.597834 5.000414,0.287454 7.370534,1.133929 0.4783,0.170821 0.85136,0.567325 1.32292,0.755952 1.8557,0.74228 0.94424,0.230907 2.26785,0.377976 1.47287,0.16365 2.67387,1.06159 4.15774,0.566965 1.22233,-0.407443 3.2674,-1.377519 4.15774,-2.267858 0.39842,-0.398422 0.42845,-1.053404 0.75595,-1.511905 0.50136,-0.70189 1.27041,-1.107171 1.7009,-1.889881 2.28615,-4.156632 0.41931,-1.931216 3.2128,-4.724702 0.18898,-0.188988 0.33491,-0.434362 0.56696,-0.566964 0.864,-0.493714 5.11938,-0.281812 6.04762,-0.188989 0.34449,0.03445 3.71968,0.978261 3.96875,1.133929 0.35339,0.220868 1.41179,1.650838 1.88988,1.889881 0.80324,0.40162 2.22057,0.354332 3.02381,0.755952 1.24832,0.624162 -0.45041,0.669376 -0.18899,1.322917 0.1193,0.298244 0.64418,0.0762 0.94494,0.188988 0.28702,0.107634 1.48279,1.113549 1.5119,1.133929 2.56034,1.792236 -0.96522,-0.855663 2.26786,1.133928 1.61516,0.993946 2.82802,2.547938 4.53572,3.401785 2.03418,1.017093 4.38487,-0.122885 6.42559,-0.377975 1.6791,-0.209886 3.23813,0.06137 4.91369,-0.566965 0.50424,-0.18909 1.82709,-1.701063 2.26786,-2.078869 0.45926,-0.393653 1.0853,-0.707329 1.5119,-1.133928 0.81561,-0.815609 1.44764,-1.826091 2.45685,-2.456845 0.28768,-0.179799 0.65726,-0.198178 0.94494,-0.377977 0.28791,-0.179945 0.60349,-0.774216 0.94494,-0.94494 0.23232,-0.116159 0.51479,-0.09252 0.75595,-0.188988 0.21089,-0.08436 0.33983,-0.377976 0.56697,-0.377976 0.14086,0 0.23711,0.188988 0.37797,0.188988 0.0891,0 0.126,-0.125992 0.18899,-0.188988 0.18899,-0.063 0.36976,-0.217161 0.56696,-0.188988 0.77174,0.110248 1.92711,0.94494 3.02381,0.94494 0.16785,0 0.94189,-0.862638 1.13393,-0.94494 0.19546,-0.08377 1.57981,-0.364523 1.7009,-0.377977 0.72233,-0.08026 2.11645,0.340388 2.64583,-0.188988"
|
||||||
|
id="path2010" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;line-height:125%;font-family:'Abyssinica SIL';-inkscape-font-specification:'Abyssinica SIL';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="73.802078"
|
||||||
|
y="72.354546"
|
||||||
|
id="text2091"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan2089"
|
||||||
|
x="73.802078"
|
||||||
|
y="72.354546"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Abyssinica SIL';-inkscape-font-specification:'Abyssinica SIL';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px">SAVED</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;line-height:125%;font-family:'Abyssinica SIL';-inkscape-font-specification:'Abyssinica SIL';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="164.55956"
|
||||||
|
y="72.354546"
|
||||||
|
id="text2091-8"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan2089-8"
|
||||||
|
x="164.55956"
|
||||||
|
y="72.354546"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Abyssinica SIL';-inkscape-font-specification:'Abyssinica SIL';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px">CURRENT</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="164.55956"
|
||||||
|
y="79.410095"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Abyssinica SIL';-inkscape-font-specification:'Abyssinica SIL';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px"
|
||||||
|
id="tspan3432" /></text>
|
||||||
|
<g
|
||||||
|
id="g2259"
|
||||||
|
transform="matrix(1.0856157,0,0,0.94777147,-19.677062,6.4360598)">
|
||||||
|
<path
|
||||||
|
id="rect2111-9"
|
||||||
|
style="color:#000000;overflow:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.499999;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 179.53502,72.72924 h 5.84717 l -1.37074,1.931346 h -3.04292 z"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<path
|
||||||
|
id="rect2111-9-0"
|
||||||
|
style="color:#000000;overflow:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.499999;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 179.4049,80.846668 h 5.84717 l -1.23711,-1.931347 h -3.17655 z"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<g
|
||||||
|
id="g2247"
|
||||||
|
transform="translate(-0.04032786,-0.04319387)">
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.363778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 181.02302,75.343053 2.96688,-0.19452"
|
||||||
|
id="path2145"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.363778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 181.02302,76.112065 2.96688,-0.19452"
|
||||||
|
id="path2145-3"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.363778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 181.02302,76.881078 2.96688,-0.19452"
|
||||||
|
id="path2145-0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.363778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 181.02302,77.65009 2.96688,-0.19452"
|
||||||
|
id="path2145-2"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.363778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 181.02302,78.419102 2.96688,-0.19452"
|
||||||
|
id="path2145-4"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g905-0"
|
||||||
|
transform="translate(157.32586,-0.83970203)" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="145.70187"
|
||||||
|
y="66.221436"
|
||||||
|
id="text1035-89-2"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan1033-6-9"
|
||||||
|
x="145.70187"
|
||||||
|
y="66.221436"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777px;font-family:monospace;-inkscape-font-specification:monospace;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px">locking</tspan></text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 26 KiB |
631
doc/latching_return.svg
Normal file
631
doc/latching_return.svg
Normal file
@ -0,0 +1,631 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="169.9455mm"
|
||||||
|
height="98.072433mm"
|
||||||
|
viewBox="0 0 169.94549 98.072434"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
sodipodi:docname="latching_return.svg"
|
||||||
|
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-10-1" />
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Lend-5"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Lend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path1092-7" />
|
||||||
|
</marker>
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-2-38" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-2-3-9" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-2-3-4" />
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Lend-2-6"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Lend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path1092-89-8" />
|
||||||
|
</marker>
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-21" />
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Lend-2-6-1"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Lend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path1092-89-8-0" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Lend-2-6-6"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Lend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path1092-89-8-2" />
|
||||||
|
</marker>
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-10-1-8" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-12" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-10-7" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.94455498"
|
||||||
|
inkscape:cx="314.8465"
|
||||||
|
inkscape:cy="213.42055"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="4"
|
||||||
|
fit-margin-left="4"
|
||||||
|
fit-margin-right="4"
|
||||||
|
fit-margin-bottom="4"
|
||||||
|
lock-margins="true"
|
||||||
|
inkscape:window-width="1298"
|
||||||
|
inkscape:window-height="708"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
showguides="false" />
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-70.551731,-46.47634)">
|
||||||
|
<g
|
||||||
|
id="g3858"
|
||||||
|
transform="translate(1.354821,1.4005714)">
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="204.75821"
|
||||||
|
y="130.07979"
|
||||||
|
id="text2293-4"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan2291-1"
|
||||||
|
x="204.75821"
|
||||||
|
y="130.07979"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px">✄</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.5861px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="194.54915"
|
||||||
|
y="128.70164"
|
||||||
|
id="text2293-0-5-8"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan2291-6-7-5"
|
||||||
|
x="194.54915"
|
||||||
|
y="128.70164"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.5861px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px">cuts</tspan></text>
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833, 0.529167;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 210.34971,123.9389 c 0.0233,0.14006 0.07,0.27818 0.07,0.42017 0,0.0738 -0.07,0.13627 -0.07,0.21009 0,0.11902 0.0582,0.23171 0.07,0.35014 0.049,0.49035 0.0857,0.98109 0.14006,1.4706 0.018,0.1624 -0.0269,0.32902 0,0.4902 0.0435,0.26077 0.11166,0.3369 0,0.56023 -0.0209,0.0418 0.033,0.10705 0,0.14006 -0.0369,0.0369 -0.10315,0.0331 -0.14006,0.07"
|
||||||
|
id="path3816-9" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833, 0.529167;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 209.9819,128.43627 c -0.12445,0.48957 -0.1295,0.98859 -0.0743,1.48553 0.0118,0.10583 0.01,0.21643 0.0248,0.32186 -0.002,0.0627 0.0396,0.11405 0.0495,0.17332 0.0144,0.0866 -0.0193,0.077 0,0.17331 0.0124,0.0621 0.20619,0.18971 0.24759,0.22283"
|
||||||
|
id="path3820-7" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend-2-6-1)"
|
||||||
|
d="m 180.7405,85.345284 c 21.77006,-11.52723 44.50758,0 44.50758,0"
|
||||||
|
id="path1087-3-0-8" />
|
||||||
|
<rect
|
||||||
|
style="color:#000000;overflow:visible;fill:#f8f8f8;fill-opacity:1;stroke:#000000;stroke-width:0.555679;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect2066"
|
||||||
|
width="1.4562259"
|
||||||
|
height="10.90563"
|
||||||
|
x="81.767418"
|
||||||
|
y="75.519585"
|
||||||
|
ry="0.9693895" />
|
||||||
|
<g
|
||||||
|
id="g905-3-7"
|
||||||
|
transform="translate(92.629263,-0.8504468)">
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833-0-5"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835-10-1);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(-0.04189825,-0.41581583)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan>Ą</tspan></tspan></text>
|
||||||
|
<rect
|
||||||
|
style="color:#000000;overflow:visible;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect900-4-9"
|
||||||
|
width="10.583333"
|
||||||
|
height="13.79613"
|
||||||
|
x="78.266167"
|
||||||
|
y="86.745537"
|
||||||
|
ry="1.937705" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:0.4em;font-family:monospace;-inkscape-font-specification:monospace;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="174.86499"
|
||||||
|
y="130.79413"
|
||||||
|
id="text1035-8"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="174.86499"
|
||||||
|
y="130.79413"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777px;font-family:monospace;-inkscape-font-specification:monospace;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px"
|
||||||
|
id="tspan2277">locking</tspan><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777px;font-family:monospace;-inkscape-font-specification:monospace;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px"
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="174.86499"
|
||||||
|
y="135.11462"
|
||||||
|
id="tspan1606" /></text>
|
||||||
|
<g
|
||||||
|
id="g905-1-6"
|
||||||
|
transform="translate(90.668095,26.90725)">
|
||||||
|
<rect
|
||||||
|
style="color:#000000;overflow:visible;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect900-8-0"
|
||||||
|
width="10.583333"
|
||||||
|
height="13.79613"
|
||||||
|
x="78.878532"
|
||||||
|
y="85.920006"
|
||||||
|
ry="1.937705" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833-7-4"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835-2-38);fill:#f8f8f8;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(-0.2686286,-0.41581583)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan
|
||||||
|
style="fill:#f8f8f8;fill-opacity:1"> ̨̂ ̈</tspan></tspan></text>
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 0.5;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 83.251484,76.550079 c -0.31498,0 -0.944941,-0.314981 -0.944941,0 0,0.31498 0.770221,0.262079 0.944941,0 0.212555,-0.318834 0.08197,-0.862973 -0.188988,-1.133929 -0.132651,-0.13265 -1.931144,0.354037 -2.078869,0.944941 -0.108038,0.432149 0.877467,-0.188989 1.322916,-0.188989 0.339244,0 0.626121,0.262042 0.944941,0.377977 0.374434,0.136158 0.777569,0.199796 1.133928,0.377976 0.113894,0.05695 -0.0037,0.439732 0.944941,0.755952 0.544156,0.181385 1.78847,0.275251 2.267857,0.377976 0.448438,0.09609 0.881944,0.251984 1.322917,0.377977 0.063,0.188988 0.388199,0.566964 0.188988,0.566964 -0.195153,0 -0.745291,-0.93961 0,-0.566964 0.281726,0.140863 0.485859,0.404908 0.755952,0.566964 1.460327,0.876196 3.039871,1.714659 4.346726,2.834821 0.966187,0.828161 1.495207,2.006597 2.645833,2.645834 2.876101,1.597834 5.000414,0.287454 7.370534,1.133929 0.4783,0.170821 0.85136,0.567325 1.32292,0.755952 1.8557,0.74228 0.94424,0.230907 2.26785,0.377976 1.47287,0.16365 2.67387,1.06159 4.15774,0.566965 1.22233,-0.407443 3.2674,-1.377519 4.15774,-2.267858 0.39842,-0.398422 0.42845,-1.053404 0.75595,-1.511905 0.50136,-0.70189 1.27041,-1.107171 1.7009,-1.889881 2.28615,-4.156632 0.41931,-1.931216 3.2128,-4.724702 0.18898,-0.188988 0.33491,-0.434362 0.56696,-0.566964 0.864,-0.493714 5.11938,-0.281812 6.04762,-0.188989 0.34449,0.03445 3.71968,0.978261 3.96875,1.133929 0.35339,0.220868 1.41179,1.650838 1.88988,1.889881 0.80324,0.40162 2.22057,0.354332 3.02381,0.755952 1.24832,0.624162 -0.45041,0.669376 -0.18899,1.322917 0.1193,0.298244 0.64418,0.0762 0.94494,0.188988 0.28702,0.107634 1.48279,1.113549 1.5119,1.133929 2.56034,1.792236 -0.96522,-0.855663 2.26786,1.133928 1.61516,0.993946 2.82802,2.547938 4.53572,3.401785 2.03418,1.017093 4.38487,-0.122885 6.42559,-0.377975 1.6791,-0.209886 3.23813,0.06137 4.91369,-0.566965 0.50424,-0.18909 1.82709,-1.701063 2.26786,-2.078869 0.45926,-0.393653 1.0853,-0.707329 1.5119,-1.133928 0.81561,-0.815609 1.44764,-1.826091 2.45685,-2.456845 0.28768,-0.179799 0.65726,-0.198178 0.94494,-0.377977 0.28791,-0.179945 0.60349,-0.774216 0.94494,-0.94494 0.23232,-0.116159 0.51479,-0.09252 0.75595,-0.188988 0.21089,-0.08436 0.33983,-0.377976 0.56697,-0.377976 0.14086,0 0.23711,0.188988 0.37797,0.188988 0.0891,0 0.126,-0.125992 0.18899,-0.188988 0.18899,-0.063 0.36976,-0.217161 0.56696,-0.188988 0.77174,0.110248 1.92711,0.94494 3.02381,0.94494 0.16785,0 0.94189,-0.862638 1.13393,-0.94494 0.19546,-0.08377 1.57981,-0.364523 1.7009,-0.377977 0.72233,-0.08026 2.11645,0.340388 2.64583,-0.188988"
|
||||||
|
id="path2010" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;line-height:125%;font-family:'Abyssinica SIL';-inkscape-font-specification:'Abyssinica SIL';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="74.331245"
|
||||||
|
y="71.825378"
|
||||||
|
id="text2091"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan2089"
|
||||||
|
x="74.331245"
|
||||||
|
y="71.825378"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Abyssinica SIL';-inkscape-font-specification:'Abyssinica SIL';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px">SAVED</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;line-height:125%;font-family:'Abyssinica SIL';-inkscape-font-specification:'Abyssinica SIL';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="164.23172"
|
||||||
|
y="70.186089"
|
||||||
|
id="text2091-8"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan2089-8"
|
||||||
|
x="164.23172"
|
||||||
|
y="70.186089"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Abyssinica SIL';-inkscape-font-specification:'Abyssinica SIL';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px">CURRENT</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="164.23172"
|
||||||
|
y="77.241638"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Abyssinica SIL';-inkscape-font-specification:'Abyssinica SIL';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px"
|
||||||
|
id="tspan3432" /></text>
|
||||||
|
<g
|
||||||
|
id="g2259"
|
||||||
|
transform="matrix(1.0856157,0,0,0.94777147,-20.206229,4.319393)">
|
||||||
|
<path
|
||||||
|
id="rect2111-9"
|
||||||
|
style="color:#000000;overflow:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.499999;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 179.53502,72.72924 h 5.84717 l -1.37074,1.931346 h -3.04292 z"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<path
|
||||||
|
id="rect2111-9-0"
|
||||||
|
style="color:#000000;overflow:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.499999;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 179.4049,80.846668 h 5.84717 l -1.23711,-1.931347 h -3.17655 z"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<g
|
||||||
|
id="g2247"
|
||||||
|
transform="translate(-0.04032786,-0.04319387)">
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.363778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 181.02302,75.343053 2.96688,-0.19452"
|
||||||
|
id="path2145"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.363778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 181.02302,76.112065 2.96688,-0.19452"
|
||||||
|
id="path2145-3"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.363778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 181.02302,76.881078 2.96688,-0.19452"
|
||||||
|
id="path2145-0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.363778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 181.02302,77.65009 2.96688,-0.19452"
|
||||||
|
id="path2145-2"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.363778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 181.02302,78.419102 2.96688,-0.19452"
|
||||||
|
id="path2145-4"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend-5)"
|
||||||
|
d="m 173.01207,99.691217 c 0,0 -8.37295,13.367043 -0.26038,13.813423 9.36786,0.51544 7.89797,-9.16673 6.50059,-13.41252"
|
||||||
|
id="path2269"
|
||||||
|
sodipodi:nodetypes="csc" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="176.93353"
|
||||||
|
y="138.21815"
|
||||||
|
id="text2293"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan2291"
|
||||||
|
x="176.93353"
|
||||||
|
y="138.21815"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px">✄</tspan></text>
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend-2-6)"
|
||||||
|
d="m 181.46685,99.71436 c 21.61425,11.51564 44.18902,0 44.18902,0"
|
||||||
|
id="path1087-3-0" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="195.7271"
|
||||||
|
y="122.96945"
|
||||||
|
id="text1035-89-7"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan1033-6-5"
|
||||||
|
x="195.7271"
|
||||||
|
y="122.96945"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777px;font-family:monospace;-inkscape-font-specification:monospace;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px">set_view</tspan></text>
|
||||||
|
<g
|
||||||
|
id="g905-1-4-4"
|
||||||
|
transform="translate(120.23594,18.477932)">
|
||||||
|
<rect
|
||||||
|
style="color:#000000;overflow:visible;fill:#e2e2e2;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect900-8-3-8"
|
||||||
|
width="10.583333"
|
||||||
|
height="13.79613"
|
||||||
|
x="78.878532"
|
||||||
|
y="85.920006"
|
||||||
|
ry="1.937705" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833-7-3-1"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835-2-3-4);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(-0.04189825,-0.41581583)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan>⇧</tspan></tspan></text>
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:0.36em;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="196.99921"
|
||||||
|
y="61.359337"
|
||||||
|
id="text1035-89-4"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777px;font-family:monospace;-inkscape-font-specification:monospace;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px"
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan3987"
|
||||||
|
x="196.99921"
|
||||||
|
y="61.359337">locking</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="196.99921"
|
||||||
|
y="65.362335"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777px;font-family:monospace;-inkscape-font-specification:monospace;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px"
|
||||||
|
id="tspan3985">pops: false</tspan></text>
|
||||||
|
<g
|
||||||
|
id="g905-1-4-9"
|
||||||
|
transform="translate(120.23594,-18.828317)">
|
||||||
|
<rect
|
||||||
|
style="color:#000000;overflow:visible;fill:#e2e2e2;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect900-8-3-2"
|
||||||
|
width="10.583333"
|
||||||
|
height="13.79613"
|
||||||
|
x="78.878532"
|
||||||
|
y="85.920006"
|
||||||
|
ry="1.937705" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833-7-3-2"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835-2-3-9);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(-0.04189825,-0.41581583)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan>⇧</tspan></tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g905-0"
|
||||||
|
transform="translate(147.8008,-0.83970203)">
|
||||||
|
<rect
|
||||||
|
style="color:#000000;overflow:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect900-5"
|
||||||
|
width="10.583333"
|
||||||
|
height="13.79613"
|
||||||
|
x="77.863091"
|
||||||
|
y="86.745537"
|
||||||
|
ry="1.937705" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833-1"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835-21);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(-0.04189825,-0.41581583)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan>ą</tspan></tspan></text>
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend-2-6-6)"
|
||||||
|
d="m 170.49256,99.691217 c -49.40563,31.667983 -82.046134,0 -82.046134,0"
|
||||||
|
id="path1087-3-0-5"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<g
|
||||||
|
id="g905-3-7-6"
|
||||||
|
transform="translate(45.925334,26.134402)">
|
||||||
|
<rect
|
||||||
|
style="color:#000000;overflow:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect900-4-9-8"
|
||||||
|
width="10.583333"
|
||||||
|
height="13.79613"
|
||||||
|
x="78.266167"
|
||||||
|
y="86.745537"
|
||||||
|
ry="1.937705" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833-0-5-2"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835-10-1-8);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(-0.04189825,-0.41581583)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan>Ą</tspan></tspan></text>
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:0.4em;font-family:sans-serif;-inkscape-font-specification:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="129.60217"
|
||||||
|
y="131.30838"
|
||||||
|
id="text1035-8-4"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="129.60217"
|
||||||
|
y="131.30838"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777px;font-family:monospace;-inkscape-font-specification:monospace;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px"
|
||||||
|
id="tspan2277-2">text</tspan><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777px;font-family:sans-serif;-inkscape-font-specification:sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px"
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="129.60217"
|
||||||
|
y="135.62888"
|
||||||
|
id="tspan1606-4" /></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.58611px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="123.67847"
|
||||||
|
y="136.8163"
|
||||||
|
id="text2293-0"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan2291-6"
|
||||||
|
x="123.67847"
|
||||||
|
y="136.8163"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.58611px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px">returns</tspan></text>
|
||||||
|
<g
|
||||||
|
id="g905"
|
||||||
|
transform="translate(1.1299757e-7,-0.85044747)">
|
||||||
|
<circle
|
||||||
|
style="color:#000000;overflow:visible;fill:#ffffff;stroke:#000000;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="path1065"
|
||||||
|
cx="83.154755"
|
||||||
|
cy="93.6436"
|
||||||
|
r="7.8844509" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835-12);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(-0.04189825,-0.41581583)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke:none">a</tspan></tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g2948">
|
||||||
|
<circle
|
||||||
|
style="color:#000000;overflow:visible;fill:#ffffff;stroke:#000000;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="path1065-6"
|
||||||
|
cx="129.67093"
|
||||||
|
cy="92.793152"
|
||||||
|
r="7.8844509" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833-0"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835-10-7);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(46.071199,-1.2662626)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan>A</tspan></tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g2259-3"
|
||||||
|
transform="matrix(0.61171471,0,0,0.53404326,8.8050741,94.418409)">
|
||||||
|
<path
|
||||||
|
id="rect2111-9-1"
|
||||||
|
style="color:#000000;overflow:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.499999;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 179.53502,72.72924 h 5.84717 l -1.37074,1.931346 h -3.04292 z"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<path
|
||||||
|
id="rect2111-9-0-7"
|
||||||
|
style="color:#000000;overflow:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.499999;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 179.4049,80.846668 h 5.84717 l -1.23711,-1.931347 h -3.17655 z"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<g
|
||||||
|
id="g2247-5"
|
||||||
|
transform="translate(-0.04032786,-0.04319387)">
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.363778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 181.02302,75.343053 2.96688,-0.19452"
|
||||||
|
id="path2145-9"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.363778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 181.02302,76.112065 2.96688,-0.19452"
|
||||||
|
id="path2145-3-6"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.363778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 181.02302,76.881078 2.96688,-0.19452"
|
||||||
|
id="path2145-0-2"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.363778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 181.02302,77.65009 2.96688,-0.19452"
|
||||||
|
id="path2145-2-1"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.363778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 181.02302,78.419102 2.96688,-0.19452"
|
||||||
|
id="path2145-4-7"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.06, 0.53;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 119.51485,135.86385 c -0.50656,0.62998 -2.26796,0.26701 -2.85105,0.85011 -0.52314,0.52314 2.02401,2.4426 3.96141,3.16913 2.94083,1.1028 4.79827,0.22 7.72476,-0.19807 0.3268,-0.0467 0.66473,0.0543 0.99035,0 1.72749,-0.28792 3.39512,-0.79539 5.14984,-0.99036 1.10207,-0.12245 0.49735,0.0622 1.58457,0.19807 0.91825,0.11479 1.8542,0.0832 2.77299,0.19807 0.86919,0.10865 1.70964,-0.19807 2.57492,-0.19807"
|
||||||
|
id="path3796" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.5861px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="166.72447"
|
||||||
|
y="136.84001"
|
||||||
|
id="text2293-0-5"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan2291-6-7"
|
||||||
|
x="166.72447"
|
||||||
|
y="136.84001"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.5861px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px">cuts</tspan></text>
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833, 0.529166;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 182.52503,132.07727 c 0.0233,0.14006 0.07,0.27818 0.07,0.42017 0,0.0738 -0.07,0.13627 -0.07,0.21009 0,0.11902 0.0582,0.23171 0.07,0.35014 0.049,0.49035 0.0857,0.98109 0.14006,1.4706 0.018,0.1624 -0.0269,0.32902 0,0.4902 0.0435,0.26077 0.11166,0.3369 0,0.56023 -0.0209,0.0418 0.033,0.10705 0,0.14006 -0.0369,0.0369 -0.10315,0.0331 -0.14006,0.07"
|
||||||
|
id="path3816" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833, 0.529166;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 182.15722,136.57464 c -0.12445,0.48957 -0.1295,0.98859 -0.0743,1.48553 0.0118,0.10583 0.01,0.21643 0.0248,0.32186 -0.002,0.0627 0.0396,0.11405 0.0495,0.17332 0.0144,0.0866 -0.0193,0.077 0,0.17331 0.0124,0.0621 0.20619,0.18971 0.24759,0.22283"
|
||||||
|
id="path3820" />
|
||||||
|
<g
|
||||||
|
id="g3858-9"
|
||||||
|
transform="translate(1.354821,-73.436839)">
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="204.75821"
|
||||||
|
y="130.07979"
|
||||||
|
id="text2293-4-6"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan2291-1-4"
|
||||||
|
x="204.75821"
|
||||||
|
y="130.07979"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px">✄</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.5861px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="194.54915"
|
||||||
|
y="128.70164"
|
||||||
|
id="text2293-0-5-8-3"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan2291-6-7-5-3"
|
||||||
|
x="194.54915"
|
||||||
|
y="128.70164"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.5861px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px">cuts</tspan></text>
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833, 0.529167;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 210.34971,123.9389 c 0.0233,0.14006 0.07,0.27818 0.07,0.42017 0,0.0738 -0.07,0.13627 -0.07,0.21009 0,0.11902 0.0582,0.23171 0.07,0.35014 0.049,0.49035 0.0857,0.98109 0.14006,1.4706 0.018,0.1624 -0.0269,0.32902 0,0.4902 0.0435,0.26077 0.11166,0.3369 0,0.56023 -0.0209,0.0418 0.033,0.10705 0,0.14006 -0.0369,0.0369 -0.10315,0.0331 -0.14006,0.07"
|
||||||
|
id="path3816-9-3" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.05833, 0.529167;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 209.9819,128.43627 c -0.12445,0.48957 -0.1295,0.98859 -0.0743,1.48553 0.0118,0.10583 0.01,0.21643 0.0248,0.32186 -0.002,0.0627 0.0396,0.11405 0.0495,0.17332 0.0144,0.0866 -0.0193,0.077 0,0.17331 0.0124,0.0621 0.20619,0.18971 0.24759,0.22283"
|
||||||
|
id="path3820-7-8" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 39 KiB |
386
doc/switching.svg
Normal file
386
doc/switching.svg
Normal file
@ -0,0 +1,386 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="70.905495mm"
|
||||||
|
height="78.260262mm"
|
||||||
|
viewBox="0 0 70.905494 78.260262"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||||
|
sodipodi:docname="switching.svg">
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Lend"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Lend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path1092" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Mend"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Mend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path1098" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow2Sstart"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow2Sstart"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(0.3,0,0,0.3,-0.69,0)"
|
||||||
|
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
id="path1119" />
|
||||||
|
</marker>
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow2Mstart"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow2Mstart"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="scale(0.6)"
|
||||||
|
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
id="path1113" />
|
||||||
|
</marker>
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-5" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect848" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-1" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect848-1" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-9" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect848-8" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-10" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect916" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-4" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect951" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-10-1" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect986" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-2" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect1061" />
|
||||||
|
<marker
|
||||||
|
style="overflow:visible"
|
||||||
|
id="Arrow1Lend-5"
|
||||||
|
refX="0"
|
||||||
|
refY="0"
|
||||||
|
orient="auto"
|
||||||
|
inkscape:stockid="Arrow1Lend"
|
||||||
|
inkscape:isstock="true">
|
||||||
|
<path
|
||||||
|
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||||
|
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||||
|
id="path1092-7" />
|
||||||
|
</marker>
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect835-2-1" />
|
||||||
|
<rect
|
||||||
|
x="80.886902"
|
||||||
|
y="89.202377"
|
||||||
|
width="18.898809"
|
||||||
|
height="20.410713"
|
||||||
|
id="rect1549" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.98994949"
|
||||||
|
inkscape:cx="136.49044"
|
||||||
|
inkscape:cy="110.83537"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="4"
|
||||||
|
fit-margin-left="4"
|
||||||
|
fit-margin-right="4"
|
||||||
|
fit-margin-bottom="4"
|
||||||
|
lock-margins="true"
|
||||||
|
inkscape:window-width="1298"
|
||||||
|
inkscape:window-height="708"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-70.899889,-58.974186)">
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
|
||||||
|
d="m 88.446426,85.895089 c 17.575894,-11.622767 35.932844,0 35.932844,0"
|
||||||
|
id="path1087" />
|
||||||
|
<g
|
||||||
|
id="g905"
|
||||||
|
transform="translate(0,-0.85044703)">
|
||||||
|
<circle
|
||||||
|
style="color:#000000;overflow:visible;fill:#ffffff;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="path1065"
|
||||||
|
cx="83.03434"
|
||||||
|
cy="93.834679"
|
||||||
|
r="7.8844509" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(-0.16231537,-0.41581583)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke:none">a</tspan></tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g905-3"
|
||||||
|
transform="translate(46.113101,-0.85044703)">
|
||||||
|
<circle
|
||||||
|
style="color:#000000;overflow:visible;fill:#ffffff;stroke:#000000;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="path1065-3"
|
||||||
|
cx="83.557831"
|
||||||
|
cy="93.366959"
|
||||||
|
r="7.8844509" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833-0"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835-10);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(-0.04189825,-0.41581583)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan>A</tspan></tspan></text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g905-7"
|
||||||
|
transform="translate(-0.94494048,73.232887)">
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833-6"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835-4);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(-0.04189825,-0.41581583)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan>ą</tspan></tspan></text>
|
||||||
|
<rect
|
||||||
|
style="color:#000000;overflow:visible;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect900-3"
|
||||||
|
width="10.583333"
|
||||||
|
height="13.79613"
|
||||||
|
x="77.863091"
|
||||||
|
y="86.745537"
|
||||||
|
ry="1.937705" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g905-3-7"
|
||||||
|
transform="translate(49.136911,68.319196)">
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833-0-5"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835-10-1);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(-0.04189825,-0.41581583)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan>Ą</tspan></tspan></text>
|
||||||
|
<rect
|
||||||
|
style="color:#000000;overflow:visible;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect900-4-9"
|
||||||
|
width="10.583333"
|
||||||
|
height="13.79613"
|
||||||
|
x="78.266167"
|
||||||
|
y="86.745537"
|
||||||
|
ry="1.937705" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="90.548096"
|
||||||
|
y="65.654472"
|
||||||
|
id="text1035"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan1033"
|
||||||
|
x="90.548096"
|
||||||
|
y="65.654472"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52778px;font-family:monospace;-inkscape-font-specification:monospace;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px">set_view: upper</tspan></text>
|
||||||
|
<g
|
||||||
|
id="g905-1"
|
||||||
|
transform="translate(22.423437,-17.670388)">
|
||||||
|
<rect
|
||||||
|
style="color:#000000;overflow:visible;fill:#e2e2e2;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect900-8"
|
||||||
|
width="10.583333"
|
||||||
|
height="13.79613"
|
||||||
|
x="78.878532"
|
||||||
|
y="85.920006"
|
||||||
|
ry="1.937705" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833-7"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835-2);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(-0.04189825,-0.41581583)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan>⇧</tspan></tspan></text>
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend-5)"
|
||||||
|
d="m 124.74085,99.691217 c -17.5759,11.622773 -35.932849,0 -35.932849,0"
|
||||||
|
id="path1087-4" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:0.4em;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
x="91.116165"
|
||||||
|
y="123.76147"
|
||||||
|
id="text1035-8"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan1033-5"
|
||||||
|
x="91.116165"
|
||||||
|
y="123.76147"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777px;font-family:monospace;-inkscape-font-specification:monospace;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px">locking</tspan><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777px;font-family:monospace;-inkscape-font-specification:monospace;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px"
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan1604"
|
||||||
|
x="91.116165"
|
||||||
|
y="128.08197">lock_view: upper</tspan><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777px;font-family:monospace;-inkscape-font-specification:monospace;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px"
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="91.116165"
|
||||||
|
y="132.40247"
|
||||||
|
id="tspan1606">unlock_view: lower</tspan></text>
|
||||||
|
<g
|
||||||
|
id="g905-1-9"
|
||||||
|
transform="translate(22.423437,17.64464)">
|
||||||
|
<rect
|
||||||
|
style="color:#000000;overflow:visible;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="rect900-8-7"
|
||||||
|
width="10.583333"
|
||||||
|
height="13.79613"
|
||||||
|
x="78.878532"
|
||||||
|
y="85.920006"
|
||||||
|
ry="1.937705" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
id="text833-7-5"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.9375px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect835-2-1);fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
|
||||||
|
transform="translate(-0.04189825,-0.41581583)"><tspan
|
||||||
|
x="80.886719"
|
||||||
|
y="96.225952"><tspan
|
||||||
|
style="fill:#ffffff;fill-opacity:1">⇧</tspan></tspan></text>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 16 KiB |
64
doc/views.md
Normal file
64
doc/views.md
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
Switching views
|
||||||
|
=========
|
||||||
|
|
||||||
|
Squeekboard layout files are separated into *views*.
|
||||||
|
|
||||||
|
What are views?
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
A view is the button arrangement which you see on Squeekboard's panel. The view always spans the entire panel area, so it's not possible to see two views at the same time, even if the layout contains multiple views.
|
||||||
|
|
||||||
|
Views are useful because they allow to have many more buttons than would fit on the panel at the same time. That works because views can be switched.
|
||||||
|
|
||||||
|
Views are different from layouts: they can be switched without affecting the active language, and without touching the globe button. Layouts cannot share views, so switching layouts *always* switches views.
|
||||||
|
|
||||||
|
Switching views
|
||||||
|
------------------
|
||||||
|
|
||||||
|
The model selected for switching views is less similar to "levels" known from physical keyboards, but closer to "rooms", which may resemble a game map.
|
||||||
|
|
||||||
|
Buttons don't have states. It's more of a model where each view is a room, and buttons are doors. Switching means moving to the next room, and buttons highlight according to which view/room they lead to or from.
|
||||||
|
|
||||||
|
There are two basic kinds of switching buttons: one way (`set_view`), and two way (`locking`). `locking` is the more sophisticated one. When placed inside `lock_view`, it is drawn highlighted, and goes to `unlock view`. When placed inside any other view, it behaves like `set_view`.
|
||||||
|
|
||||||
|
 This diagram shows which buttons can switch between two views. Views are shown as circles, and buttons as rounded rectangles.
|
||||||
|
The two buttons are separate, and visible only in the view *from which the switch starts*. Note that the `locking` button is shown highlighted. That's because it's in `upper` view, which matches its `lock_view`.
|
||||||
|
|
||||||
|
Latching
|
||||||
|
----------
|
||||||
|
|
||||||
|
`locking` buttons provide a second mode of operation: latching. It's useful when the target view is needed only for a single button press, like entering a single accent or a single capital letter in Latin scripts.
|
||||||
|
|
||||||
|
When a latching button is pressed, the keyboard remembers to come back to the current (source) view, and then the view is switched. If another `locking` button is pressed, the source view stays in memory. If a text button is pressed, the view from memory is shown again, and forgotten.
|
||||||
|
|
||||||
|
 In this diagram, the dashed line connects the view the typist is seeing to the view remembered for unlatching.
|
||||||
|
|
||||||
|
There are two ways to erase the memory without going back to the remembered view. Pressing the button again will permanently switch to the current view, and `set_view` will permanently switch to its target.
|
||||||
|
|
||||||
|
In the room metaphor, it's as if tying a thread inside the room before going through the door to the next one. And another `locking` door while holding the thread. Once the Minotaur is slain (text button pressed), the hero follows the thread back to the starting room.
|
||||||
|
|
||||||
|
The typist hero cuts the thread in two circumstances: when staying longer in the current room (press button again), or when moving through a `set_view` door.
|
||||||
|
|
||||||
|
 This diagram shows the possible ways to stop latching. One is by pressing a text button, which takes back to the original view. Another is pressing a locking button which appears highlighted (note that it can be any button, what matters is its `lock_view`). Finally, switching to another view using a button that doesn't keep the latch on forgets latching.
|
||||||
|
|
||||||
|
The layout author should pay attention that `set_view`'s lack of latching does not come as a surprise to typists.
|
||||||
|
|
||||||
|
|
||||||
|
Differences from keyboard levels
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
Views are **not** like keyboard levels.
|
||||||
|
|
||||||
|
On a physical keyboard, the number of buttons can not change when switching levels. In Squeekboard, they can have any arrangement of buttons you could imagine.
|
||||||
|
|
||||||
|
When switching levels on a keyboard, for example by pressing Shift, the key press not only affects the meaning of other keys, but also tells the application that it's pressed down. In Squeekboard, pressing buttons to change layouts *does not* do anything but switch the layout. Pressing the switching button especially *does not* tell the application that it was pressed. (This is the reason Shift and AltGr modifiers are not implemented in Squeekboard.)
|
||||||
|
|
||||||
|
Why not use the "views" model?
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
Squeekboard's goal is to support as many scripts as possible, and the author of the initial design doesn't know a whole lot. There are two problems with using the levels metaphor:
|
||||||
|
|
||||||
|
Firstly, the levels model assumes that there is a "base" and an "active" level. This does not work well with scripts that have different but equivalent modes of writing. An example is the Kana layout with Katakana and Hiragana, which are both "base".
|
||||||
|
Both systems could have been combined, but the view switching designer doesn't have enough experience with different scripts to do that. Some scripts may have different non-hierarchical ways to switch character groups (Balinese?), which could make combining hierarchy with free-form switching even harder.
|
||||||
|
|
||||||
|
Secondly, when dealing with languages with a hierarchy, we end up with extra work to eliminate nonsensical combinations. With "symbols" and "uppercase" levels, what does it mean to have both engaged? Eliminating that means extra work. Either validating layouts, so that it's not possible to engage "uppercase" from "symbols", or duplicating, so that "uppercase+symbols" is the same as just "symbols". With "accents" in the mix, this could become a challenge to design well.
|
||||||
@ -128,30 +128,22 @@ settings_get_layout(GSettings *settings, char **type, char **layout)
|
|||||||
|
|
||||||
void
|
void
|
||||||
eekboard_context_service_use_layout(EekboardContextService *context, struct squeek_layout_state *state, uint32_t timestamp) {
|
eekboard_context_service_use_layout(EekboardContextService *context, struct squeek_layout_state *state, uint32_t timestamp) {
|
||||||
gchar *layout_name = state->overlay_name;
|
gchar *layout_name = state->layout_name;
|
||||||
|
gchar *overlay_name = state->overlay_name;
|
||||||
|
|
||||||
|
// try to get the best keyboard layout
|
||||||
if (layout_name == NULL) {
|
if (layout_name == NULL) {
|
||||||
layout_name = state->layout_name;
|
layout_name = "us";
|
||||||
|
|
||||||
switch (state->purpose) {
|
|
||||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_NUMBER:
|
|
||||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_PHONE:
|
|
||||||
layout_name = "number";
|
|
||||||
break;
|
|
||||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_TERMINAL:
|
|
||||||
layout_name = "terminal";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (layout_name == NULL) {
|
|
||||||
layout_name = "us";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// overlay is "Normal" for most layouts, we will only look for "terminal" in rust code.
|
||||||
|
// for now just avoid passing a null pointer
|
||||||
|
if (overlay_name == NULL) {
|
||||||
|
overlay_name = ""; // fallback to Normal
|
||||||
|
}
|
||||||
|
|
||||||
// generic part follows
|
// generic part follows
|
||||||
struct squeek_layout *layout = squeek_load_layout(layout_name, state->arrangement);
|
struct squeek_layout *layout = squeek_load_layout(layout_name, state->arrangement, state->purpose, overlay_name);
|
||||||
LevelKeyboard *keyboard = level_keyboard_new(layout);
|
LevelKeyboard *keyboard = level_keyboard_new(layout);
|
||||||
// set as current
|
// set as current
|
||||||
LevelKeyboard *previous_keyboard = context->keyboard;
|
LevelKeyboard *previous_keyboard = context->keyboard;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
project(
|
project(
|
||||||
'squeekboard',
|
'squeekboard',
|
||||||
'c', 'rust',
|
'c', 'rust',
|
||||||
version: '1.12.0',
|
version: '1.13.0',
|
||||||
license: 'GPLv3',
|
license: 'GPLv3',
|
||||||
meson_version: '>=0.51.0',
|
meson_version: '>=0.51.0',
|
||||||
default_options: [
|
default_options: [
|
||||||
|
|||||||
321
src/data.rs
321
src/data.rs
@ -12,6 +12,7 @@ use std::io;
|
|||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use std::vec::Vec;
|
use std::vec::Vec;
|
||||||
|
use std::convert::TryFrom;
|
||||||
|
|
||||||
use xkbcommon::xkb;
|
use xkbcommon::xkb;
|
||||||
|
|
||||||
@ -27,6 +28,7 @@ use ::resources;
|
|||||||
use ::util::c::as_str;
|
use ::util::c::as_str;
|
||||||
use ::util::hash_map_map;
|
use ::util::hash_map_map;
|
||||||
use ::xdg;
|
use ::xdg;
|
||||||
|
use ::imservice::ContentPurpose;
|
||||||
|
|
||||||
// traits, derives
|
// traits, derives
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
@ -42,19 +44,37 @@ pub mod c {
|
|||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C"
|
pub extern "C"
|
||||||
fn squeek_load_layout(
|
fn squeek_load_layout(
|
||||||
name: *const c_char,
|
name: *const c_char, // name of the keyboard
|
||||||
type_: u32,
|
type_: u32, // type like Wide
|
||||||
|
variant: u32, // purpose variant like numeric, terminal...
|
||||||
|
overlay: *const c_char, // the overlay (looking for "terminal")
|
||||||
) -> *mut ::layout::Layout {
|
) -> *mut ::layout::Layout {
|
||||||
let type_ = match type_ {
|
let type_ = match type_ {
|
||||||
0 => ArrangementKind::Base,
|
0 => ArrangementKind::Base,
|
||||||
1 => ArrangementKind::Wide,
|
1 => ArrangementKind::Wide,
|
||||||
_ => panic!("Bad enum value"),
|
_ => panic!("Bad enum value"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let name = as_str(&name)
|
let name = as_str(&name)
|
||||||
.expect("Bad layout name")
|
.expect("Bad layout name")
|
||||||
.expect("Empty layout name");
|
.expect("Empty layout name");
|
||||||
|
|
||||||
let (kind, layout) = load_layout_data_with_fallback(&name, type_);
|
let variant = ContentPurpose::try_from(variant)
|
||||||
|
.or_print(
|
||||||
|
logging::Problem::Warning,
|
||||||
|
"Received invalid purpose value",
|
||||||
|
)
|
||||||
|
.unwrap_or(ContentPurpose::Normal);
|
||||||
|
|
||||||
|
let overlay_str = as_str(&overlay)
|
||||||
|
.expect("Bad overlay name")
|
||||||
|
.expect("Empty overlay name");
|
||||||
|
let overlay_str = match overlay_str {
|
||||||
|
"" => None,
|
||||||
|
other => Some(other),
|
||||||
|
};
|
||||||
|
|
||||||
|
let (kind, layout) = load_layout_data_with_fallback(&name, type_, variant, overlay_str);
|
||||||
let layout = ::layout::Layout::new(layout, kind);
|
let layout = ::layout::Layout::new(layout, kind);
|
||||||
Box::into_raw(Box::new(layout))
|
Box::into_raw(Box::new(layout))
|
||||||
}
|
}
|
||||||
@ -97,85 +117,156 @@ impl fmt::Display for DataSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type LayoutSource = (ArrangementKind, DataSource);
|
/* All functions in this family carry around ArrangementKind,
|
||||||
|
* because it's not guaranteed to be preserved,
|
||||||
|
* and the resulting layout needs to know which version was loaded.
|
||||||
|
* See `squeek_layout_get_kind`.
|
||||||
|
* Possible TODO: since this is used only in styling,
|
||||||
|
* and makes the below code nastier than needed, maybe it should go.
|
||||||
|
*/
|
||||||
|
|
||||||
/// Lists possible sources, with 0 as the most preferred one
|
/// Returns ordered names treating `name` as the base name,
|
||||||
/// Trying order: native lang of the right kind, native base,
|
/// ignoring any `+` inside.
|
||||||
/// fallback lang of the right kind, fallback base
|
fn _get_arrangement_names(name: &str, arrangement: ArrangementKind)
|
||||||
fn list_layout_sources(
|
-> Vec<(ArrangementKind, String)>
|
||||||
name: &str,
|
{
|
||||||
kind: ArrangementKind,
|
let name_with_arrangement = match arrangement {
|
||||||
keyboards_path: Option<PathBuf>,
|
ArrangementKind::Base => name.into(),
|
||||||
) -> Vec<LayoutSource> {
|
ArrangementKind::Wide => format!("{}_wide", name),
|
||||||
// Just a simplification of often called code.
|
|
||||||
let add_by_name = |
|
|
||||||
mut ret: Vec<LayoutSource>,
|
|
||||||
name: &str,
|
|
||||||
kind: &ArrangementKind,
|
|
||||||
| -> Vec<LayoutSource> {
|
|
||||||
if let Some(path) = keyboards_path.clone() {
|
|
||||||
ret.push((
|
|
||||||
kind.clone(),
|
|
||||||
DataSource::File(
|
|
||||||
path.join(name.to_owned()).with_extension("yaml")
|
|
||||||
)
|
|
||||||
))
|
|
||||||
}
|
|
||||||
|
|
||||||
ret.push((
|
|
||||||
kind.clone(),
|
|
||||||
DataSource::Resource(name.into())
|
|
||||||
));
|
|
||||||
ret
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Another grouping.
|
let mut ret = Vec::new();
|
||||||
let add_by_kind = |ret, name: &str, kind| {
|
if name_with_arrangement != name {
|
||||||
let ret = match kind {
|
ret.push((arrangement, name_with_arrangement));
|
||||||
&ArrangementKind::Base => ret,
|
|
||||||
kind => add_by_name(
|
|
||||||
ret,
|
|
||||||
&name_with_arrangement(name.into(), kind),
|
|
||||||
kind,
|
|
||||||
),
|
|
||||||
};
|
|
||||||
|
|
||||||
add_by_name(ret, name, &ArrangementKind::Base)
|
|
||||||
};
|
|
||||||
|
|
||||||
fn name_with_arrangement(name: String, kind: &ArrangementKind) -> String {
|
|
||||||
match kind {
|
|
||||||
ArrangementKind::Base => name,
|
|
||||||
ArrangementKind::Wide => name + "_wide",
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
ret.push((ArrangementKind::Base, name.into()));
|
||||||
|
ret
|
||||||
|
}
|
||||||
|
|
||||||
let ret = Vec::new();
|
/// Returns names accounting for any `+` in the `name`,
|
||||||
|
/// including the fallback to the default layout.
|
||||||
// Name as given takes priority.
|
fn get_preferred_names(name: &str, kind: ArrangementKind)
|
||||||
let ret = add_by_kind(ret, name, &kind);
|
-> Vec<(ArrangementKind, String)>
|
||||||
|
{
|
||||||
// Then try non-alternative name if applicable (`us` for `us+colemak`).
|
let mut ret = _get_arrangement_names(name, kind);
|
||||||
let ret = {
|
|
||||||
|
let base_name_preferences = {
|
||||||
let mut parts = name.splitn(2, '+');
|
let mut parts = name.splitn(2, '+');
|
||||||
match parts.next() {
|
match parts.next() {
|
||||||
Some(base) => {
|
Some(base) => {
|
||||||
// The name is already equal to base, so it was already added.
|
// The name is already equal to base, so nothing to add
|
||||||
if base == name { ret }
|
if base == name {
|
||||||
else {
|
vec![]
|
||||||
add_by_kind(ret, base, &kind)
|
} else {
|
||||||
|
_get_arrangement_names(base, kind)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// The layout's base name starts with a "+". Weird but OK.
|
// The layout's base name starts with a "+". Weird but OK.
|
||||||
None => {
|
None => {
|
||||||
log_print!(logging::Level::Surprise, "Base layout name is empty: {}", name);
|
log_print!(logging::Level::Surprise, "Base layout name is empty: {}", name);
|
||||||
ret
|
vec![]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ret.extend(base_name_preferences.into_iter());
|
||||||
|
let fallback_names = _get_arrangement_names(FALLBACK_LAYOUT_NAME, kind);
|
||||||
|
ret.extend(fallback_names.into_iter());
|
||||||
|
ret
|
||||||
|
}
|
||||||
|
|
||||||
// No other choices left, so give anything.
|
/// Includes the subdirectory before the forward slash.
|
||||||
add_by_kind(ret, FALLBACK_LAYOUT_NAME.into(), &kind)
|
type LayoutPath = String;
|
||||||
|
|
||||||
|
// This is only used inside iter_fallbacks_with_meta.
|
||||||
|
// Placed at the top scope
|
||||||
|
// because `use LayoutPurpose::*;`
|
||||||
|
// complains about "not in scope" otherwise.
|
||||||
|
// This seems to be a Rust 2015 edition problem.
|
||||||
|
/// Helper for determining where to look up the layout.
|
||||||
|
enum LayoutPurpose<'a> {
|
||||||
|
Default,
|
||||||
|
Special(&'a str),
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the directory string
|
||||||
|
/// where the layout should be looked up, including the slash.
|
||||||
|
fn get_directory_string(
|
||||||
|
content_purpose: ContentPurpose,
|
||||||
|
overlay: Option<&str>) -> String
|
||||||
|
{
|
||||||
|
use self::LayoutPurpose::*;
|
||||||
|
|
||||||
|
let layout_purpose = match overlay {
|
||||||
|
None => match content_purpose {
|
||||||
|
ContentPurpose::Number => Special("number"),
|
||||||
|
ContentPurpose::Digits => Special("number"),
|
||||||
|
ContentPurpose::Phone => Special("number"),
|
||||||
|
ContentPurpose::Terminal => Special("terminal"),
|
||||||
|
_ => Default,
|
||||||
|
},
|
||||||
|
Some(overlay) => Special(overlay),
|
||||||
|
};
|
||||||
|
|
||||||
|
// For intuitiveness,
|
||||||
|
// default purpose layouts are stored in the root directory,
|
||||||
|
// as they correspond to typical text
|
||||||
|
// and are seen the most often.
|
||||||
|
match layout_purpose {
|
||||||
|
Default => "".into(),
|
||||||
|
Special(purpose) => format!("{}/", purpose),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns an iterator over all fallback paths.
|
||||||
|
fn to_layout_paths(
|
||||||
|
name_fallbacks: Vec<(ArrangementKind, String)>,
|
||||||
|
content_purpose: ContentPurpose,
|
||||||
|
overlay: Option<&str>,
|
||||||
|
) -> impl Iterator<Item=(ArrangementKind, LayoutPath)> {
|
||||||
|
let prepend_directory = get_directory_string(content_purpose, overlay);
|
||||||
|
|
||||||
|
name_fallbacks.into_iter()
|
||||||
|
.map(move |(arrangement, name)|
|
||||||
|
(arrangement, format!("{}{}", prepend_directory, name))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
type LayoutSource = (ArrangementKind, DataSource);
|
||||||
|
|
||||||
|
fn to_layout_sources(
|
||||||
|
layout_paths: impl Iterator<Item=(ArrangementKind, LayoutPath)>,
|
||||||
|
filesystem_path: Option<PathBuf>,
|
||||||
|
) -> impl Iterator<Item=LayoutSource> {
|
||||||
|
layout_paths.flat_map(move |(arrangement, layout_path)| {
|
||||||
|
let mut sources = Vec::new();
|
||||||
|
if let Some(path) = &filesystem_path {
|
||||||
|
sources.push((
|
||||||
|
arrangement,
|
||||||
|
DataSource::File(
|
||||||
|
path.join(&layout_path)
|
||||||
|
.with_extension("yaml")
|
||||||
|
)
|
||||||
|
));
|
||||||
|
};
|
||||||
|
sources.push((arrangement, DataSource::Resource(layout_path.clone())));
|
||||||
|
sources.into_iter()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns possible sources, with first as the most preferred one.
|
||||||
|
/// Trying order: native lang of the right kind, native base,
|
||||||
|
/// fallback lang of the right kind, fallback base
|
||||||
|
fn iter_layout_sources(
|
||||||
|
name: &str,
|
||||||
|
arrangement: ArrangementKind,
|
||||||
|
purpose: ContentPurpose,
|
||||||
|
ui_overlay: Option<&str>,
|
||||||
|
layout_storage: Option<PathBuf>,
|
||||||
|
) -> impl Iterator<Item=LayoutSource> {
|
||||||
|
let names = get_preferred_names(name, arrangement);
|
||||||
|
let paths = to_layout_paths(names, purpose, ui_overlay);
|
||||||
|
to_layout_sources(paths, layout_storage)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn load_layout_data(source: DataSource)
|
fn load_layout_data(source: DataSource)
|
||||||
@ -202,12 +293,16 @@ fn load_layout_data(source: DataSource)
|
|||||||
fn load_layout_data_with_fallback(
|
fn load_layout_data_with_fallback(
|
||||||
name: &str,
|
name: &str,
|
||||||
kind: ArrangementKind,
|
kind: ArrangementKind,
|
||||||
|
purpose: ContentPurpose,
|
||||||
|
overlay: Option<&str>,
|
||||||
) -> (ArrangementKind, ::layout::LayoutData) {
|
) -> (ArrangementKind, ::layout::LayoutData) {
|
||||||
|
|
||||||
|
// Build the path to the right keyboard layout subdirectory
|
||||||
let path = env::var_os("SQUEEKBOARD_KEYBOARDSDIR")
|
let path = env::var_os("SQUEEKBOARD_KEYBOARDSDIR")
|
||||||
.map(PathBuf::from)
|
.map(PathBuf::from)
|
||||||
.or_else(|| xdg::data_path("squeekboard/keyboards"));
|
.or_else(|| xdg::data_path("squeekboard/keyboards"));
|
||||||
|
|
||||||
for (kind, source) in list_layout_sources(name, kind, path) {
|
for (kind, source) in iter_layout_sources(&name, kind, purpose, overlay, path) {
|
||||||
let layout = load_layout_data(source.clone());
|
let layout = load_layout_data(source.clone());
|
||||||
match layout {
|
match layout {
|
||||||
Err(e) => match (e, source) {
|
Err(e) => match (e, source) {
|
||||||
@ -549,7 +644,7 @@ fn create_action<H: logging::Handler>(
|
|||||||
Text(String),
|
Text(String),
|
||||||
Keysym(String),
|
Keysym(String),
|
||||||
Modifier(Modifier),
|
Modifier(Modifier),
|
||||||
};
|
}
|
||||||
|
|
||||||
let submission = match (
|
let submission = match (
|
||||||
&symbol_meta.action,
|
&symbol_meta.action,
|
||||||
@ -939,11 +1034,11 @@ mod tests {
|
|||||||
|
|
||||||
/// First fallback should be to builtin, not to FALLBACK_LAYOUT_NAME
|
/// First fallback should be to builtin, not to FALLBACK_LAYOUT_NAME
|
||||||
#[test]
|
#[test]
|
||||||
fn fallbacks_order() {
|
fn test_fallback_basic_builtin() {
|
||||||
let sources = list_layout_sources("nb", ArrangementKind::Base, None);
|
let sources = iter_layout_sources("nb", ArrangementKind::Base, ContentPurpose::Normal, None, None);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
sources,
|
sources.collect::<Vec<_>>(),
|
||||||
vec!(
|
vec!(
|
||||||
(ArrangementKind::Base, DataSource::Resource("nb".into())),
|
(ArrangementKind::Base, DataSource::Resource("nb".into())),
|
||||||
(
|
(
|
||||||
@ -953,14 +1048,36 @@ mod tests {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Prefer loading from file system before builtin.
|
||||||
|
#[test]
|
||||||
|
fn test_preferences_order_path() {
|
||||||
|
let sources = iter_layout_sources("nb", ArrangementKind::Base, ContentPurpose::Normal, None, Some(".".into()));
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
sources.collect::<Vec<_>>(),
|
||||||
|
vec!(
|
||||||
|
(ArrangementKind::Base, DataSource::File("./nb.yaml".into())),
|
||||||
|
(ArrangementKind::Base, DataSource::Resource("nb".into())),
|
||||||
|
(
|
||||||
|
ArrangementKind::Base,
|
||||||
|
DataSource::File("./us.yaml".into())
|
||||||
|
),
|
||||||
|
(
|
||||||
|
ArrangementKind::Base,
|
||||||
|
DataSource::Resource("us".into())
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// If layout contains a "+", it should reach for what's in front of it too.
|
/// If layout contains a "+", it should reach for what's in front of it too.
|
||||||
#[test]
|
#[test]
|
||||||
fn fallbacks_order_base() {
|
fn test_preferences_order_base() {
|
||||||
let sources = list_layout_sources("nb+aliens", ArrangementKind::Base, None);
|
let sources = iter_layout_sources("nb+aliens", ArrangementKind::Base, ContentPurpose::Normal, None, None);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
sources,
|
sources.collect::<Vec<_>>(),
|
||||||
vec!(
|
vec!(
|
||||||
(ArrangementKind::Base, DataSource::Resource("nb+aliens".into())),
|
(ArrangementKind::Base, DataSource::Resource("nb+aliens".into())),
|
||||||
(ArrangementKind::Base, DataSource::Resource("nb".into())),
|
(ArrangementKind::Base, DataSource::Resource("nb".into())),
|
||||||
@ -971,7 +1088,59 @@ mod tests {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_preferences_order_arrangement() {
|
||||||
|
let sources = iter_layout_sources("nb", ArrangementKind::Wide, ContentPurpose::Normal, None, None);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
sources.collect::<Vec<_>>(),
|
||||||
|
vec!(
|
||||||
|
(ArrangementKind::Wide, DataSource::Resource("nb_wide".into())),
|
||||||
|
(ArrangementKind::Base, DataSource::Resource("nb".into())),
|
||||||
|
(
|
||||||
|
ArrangementKind::Wide,
|
||||||
|
DataSource::Resource("us_wide".into())
|
||||||
|
),
|
||||||
|
(
|
||||||
|
ArrangementKind::Base,
|
||||||
|
DataSource::Resource("us".into())
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_preferences_order_overlay() {
|
||||||
|
let sources = iter_layout_sources("nb", ArrangementKind::Base, ContentPurpose::Normal, Some("terminal"), None);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
sources.collect::<Vec<_>>(),
|
||||||
|
vec!(
|
||||||
|
(ArrangementKind::Base, DataSource::Resource("terminal/nb".into())),
|
||||||
|
(
|
||||||
|
ArrangementKind::Base,
|
||||||
|
DataSource::Resource("terminal/us".into())
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_preferences_order_hint() {
|
||||||
|
let sources = iter_layout_sources("nb", ArrangementKind::Base, ContentPurpose::Terminal, None, None);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
sources.collect::<Vec<_>>(),
|
||||||
|
vec!(
|
||||||
|
(ArrangementKind::Base, DataSource::Resource("terminal/nb".into())),
|
||||||
|
(
|
||||||
|
ArrangementKind::Base,
|
||||||
|
DataSource::Resource("terminal/us".into())
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn unicode_keysym() {
|
fn unicode_keysym() {
|
||||||
|
|||||||
@ -31,7 +31,7 @@ struct transformation squeek_layout_calculate_transformation(
|
|||||||
const struct squeek_layout *layout,
|
const struct squeek_layout *layout,
|
||||||
double allocation_width, double allocation_size);
|
double allocation_width, double allocation_size);
|
||||||
|
|
||||||
struct squeek_layout *squeek_load_layout(const char *name, uint32_t type);
|
struct squeek_layout *squeek_load_layout(const char *name, uint32_t type, uint32_t variant_type, const char *overlay_name);
|
||||||
enum squeek_arrangement_kind squeek_layout_get_kind(const struct squeek_layout *);
|
enum squeek_arrangement_kind squeek_layout_get_kind(const struct squeek_layout *);
|
||||||
void squeek_layout_free(struct squeek_layout*);
|
void squeek_layout_free(struct squeek_layout*);
|
||||||
|
|
||||||
|
|||||||
@ -600,7 +600,7 @@ impl View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// The physical characteristic of layout for the purpose of styling
|
/// The physical characteristic of layout for the purpose of styling
|
||||||
#[derive(Clone, PartialEq, Debug)]
|
#[derive(Clone, Copy, PartialEq, Debug)]
|
||||||
pub enum ArrangementKind {
|
pub enum ArrangementKind {
|
||||||
Base = 0,
|
Base = 0,
|
||||||
Wide = 1,
|
Wide = 1,
|
||||||
|
|||||||
@ -213,7 +213,16 @@ fn set_visible_layout(
|
|||||||
layout_id: LayoutId,
|
layout_id: LayoutId,
|
||||||
) {
|
) {
|
||||||
match layout_id {
|
match layout_id {
|
||||||
LayoutId::System { kind, name } => set_layout(kind, name),
|
LayoutId::System { kind, name } => {
|
||||||
|
unsafe {
|
||||||
|
use std::ptr;
|
||||||
|
manager::c::eekboard_context_service_set_overlay(
|
||||||
|
manager,
|
||||||
|
ptr::null(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
set_layout(kind, name);
|
||||||
|
}
|
||||||
LayoutId::Local(name) => {
|
LayoutId::Local(name) => {
|
||||||
let name = CString::new(name.as_str()).unwrap();
|
let name = CString::new(name.as_str()).unwrap();
|
||||||
let name_ptr = name.as_ptr();
|
let name_ptr = name.as_ptr();
|
||||||
|
|||||||
@ -80,13 +80,16 @@ const KEYBOARDS: &[(*const str, *const str)] = &[
|
|||||||
("us+dvorak_wide", include_str!("../data/keyboards/us+dvorak_wide.yaml")),
|
("us+dvorak_wide", include_str!("../data/keyboards/us+dvorak_wide.yaml")),
|
||||||
|
|
||||||
// Others
|
// Others
|
||||||
("number", include_str!("../data/keyboards/number.yaml")),
|
("number/us", include_str!("../data/keyboards/number/us.yaml")),
|
||||||
|
|
||||||
|
// Terminal
|
||||||
|
("terminal/fr", include_str!("../data/keyboards/terminal/fr.yaml")),
|
||||||
|
|
||||||
|
("terminal/us", include_str!("../data/keyboards/terminal/us.yaml")),
|
||||||
|
("terminal/us_wide", include_str!("../data/keyboards/terminal/us_wide.yaml")),
|
||||||
|
|
||||||
// layout+overlay
|
|
||||||
("terminal", include_str!("../data/keyboards/terminal.yaml")),
|
|
||||||
("terminal_wide", include_str!("../data/keyboards/terminal_wide.yaml")),
|
|
||||||
// Overlays
|
// Overlays
|
||||||
("emoji", include_str!("../data/keyboards/emoji.yaml")),
|
("emoji/us", include_str!("../data/keyboards/emoji/us.yaml")),
|
||||||
];
|
];
|
||||||
|
|
||||||
pub fn get_keyboard(needle: &str) -> Option<&'static str> {
|
pub fn get_keyboard(needle: &str) -> Option<&'static str> {
|
||||||
@ -169,7 +172,7 @@ mod test {
|
|||||||
#[test]
|
#[test]
|
||||||
fn check_overlays_present() {
|
fn check_overlays_present() {
|
||||||
for name in get_overlays() {
|
for name in get_overlays() {
|
||||||
assert!(get_keyboard(name).is_some());
|
assert!(get_keyboard(&format!("{}/us", name)).is_some());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -149,7 +149,7 @@ impl Submission {
|
|||||||
enum Outcome {
|
enum Outcome {
|
||||||
Submitted(Result<(), imservice::SubmitError>),
|
Submitted(Result<(), imservice::SubmitError>),
|
||||||
NotSubmitted,
|
NotSubmitted,
|
||||||
};
|
}
|
||||||
|
|
||||||
let submit_outcome = match data {
|
let submit_outcome = match data {
|
||||||
SubmitData::Text(text) => {
|
SubmitData::Text(text) => {
|
||||||
|
|||||||
@ -43,7 +43,7 @@ pub fn check_layout_file(path: &str) {
|
|||||||
fn check_sym_in_keymap(state: &xkb::State, sym_name: &str) -> bool {
|
fn check_sym_in_keymap(state: &xkb::State, sym_name: &str) -> bool {
|
||||||
let sym = xkb::keysym_from_name(sym_name, xkb::KEYSYM_NO_FLAGS);
|
let sym = xkb::keysym_from_name(sym_name, xkb::KEYSYM_NO_FLAGS);
|
||||||
if sym == xkb::KEY_NoSymbol {
|
if sym == xkb::KEY_NoSymbol {
|
||||||
panic!(format!("Entered invalid keysym: {}", sym_name));
|
panic!("Entered invalid keysym: {}", sym_name);
|
||||||
}
|
}
|
||||||
let map = state.get_keymap();
|
let map = state.get_keymap();
|
||||||
let range = map.min_keycode()..=map.max_keycode();
|
let range = map.min_keycode()..=map.max_keycode();
|
||||||
|
|||||||
@ -85,13 +85,17 @@ foreach layout : [
|
|||||||
'us+colemak', 'us+colemak_wide',
|
'us+colemak', 'us+colemak_wide',
|
||||||
'us+dvorak', 'us+dvorak_wide',
|
'us+dvorak', 'us+dvorak_wide',
|
||||||
|
|
||||||
|
# Terminal keyboards
|
||||||
|
'terminal/fr',
|
||||||
|
'terminal/us',
|
||||||
|
'terminal/us_wide',
|
||||||
|
|
||||||
# Block: Not languages.
|
# Block: Not languages.
|
||||||
'emoji',
|
'emoji/us',
|
||||||
'number',
|
'number/us',
|
||||||
'terminal', 'terminal_wide',
|
|
||||||
]
|
]
|
||||||
extra = []
|
extra = []
|
||||||
if layout == 'emoji'
|
if layout.startswith('emoji/')
|
||||||
extra += ['allow_missing_return']
|
extra += ['allow_missing_return']
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user