Compare commits
13 Commits
099d49d670
...
2025.02.26
Author | SHA1 | Date | |
---|---|---|---|
|
5b642cd9e2 | ||
|
ed918a0334 | ||
|
760b873abe | ||
|
46c348634c | ||
|
9da925c80d | ||
|
9c45ca1b5f | ||
|
d1be848ebb | ||
|
bc4319bf5e | ||
|
6f8139ed8f | ||
|
f1a6c75459 | ||
|
1d746eb709 | ||
|
80f549fde9 | ||
|
9f57f7faec |
@@ -46,28 +46,33 @@ _:===:Lienie unten
|
|||||||
[customDict]
|
[customDict]
|
||||||
|
|
||||||
[emoticonDict]
|
[emoticonDict]
|
||||||
# This dictionary uses regexp when prefixed with "regex;", so be sure to escape anything that would be parsed by regexp, e.g. *, ., ^, $, etc.
|
regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
|
||||||
regex;[\s*|'|"][\s*|'|"]<{-.-}>:===:Raves
|
regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
|
||||||
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses
|
regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
|
||||||
regex;[\s*|'|"][\s*|'|"]:-/:===:confused
|
regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
|
||||||
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged
|
regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
|
||||||
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing
|
regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
|
||||||
regex;[\s*|'|"][\s*|'|"]8-X:===:skull
|
regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
|
||||||
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile
|
regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
|
||||||
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile
|
regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
|
||||||
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray
|
regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
|
||||||
regex;[\s*|'|"][\s*|'|"]:/:===:confused
|
regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
|
||||||
regex;[\s*|'|"][\s*|'|"]8\):===:smile with sunglasses
|
regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
|
||||||
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh
|
regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
|
||||||
regex;[\s*|'|"];\)[\s*|'|"]:===:wink
|
regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
|
||||||
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL
|
regex;(?:^|\s)XD(?:\s|$):===:laughing hard
|
||||||
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile
|
regex;(?:^|\s)\^_\^(?:\s|$):===:happy
|
||||||
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile
|
regex;(?:^|\s)-_-(?:\s|$):===:annoyed
|
||||||
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right
|
regex;(?:^|\s)o_O(?:\s|$):===:confused
|
||||||
# example for arrow left
|
regex;(?:^|\s)>_<(?:\s|$):===:frustrated
|
||||||
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left
|
regex;(?:^|\s)\\o/(?:\s|$):===:hurray
|
||||||
# or
|
regex;(?:^|\s)<3(?:\s|$):===:heart
|
||||||
#([ |^])<-([ ,.!?$]):===:arrow left\2
|
regex;(?:^|\s)</3(?:\s|$):===:broken heart
|
||||||
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left
|
regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
|
||||||
regex;[\s*|'|"][O|o][O|o][\s*|'|"]:===:WTF?
|
regex;(?:^|\s)<{-.-}>(?:\s|$):===:Raves
|
||||||
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile
|
regex;(?:^|\s)-\.-(?:\s|$):===:bugged
|
||||||
|
regex;(?:^|\s)>\.<(?:\s|$):===:laughing
|
||||||
|
regex;(?:^|\s)(?:>:\)|>:-\))(?:\s|$):===:evil smile
|
||||||
|
regex;(?:^|\s)\^\^(?:\s|$):===:enjoy smile
|
||||||
|
regex;(?:^|\s)->(?:\s|$):===:arrow right
|
||||||
|
regex;(?:^|\s)<-(?:\s|$):===:arrow left
|
||||||
|
@@ -46,27 +46,33 @@ _:===:line
|
|||||||
[customDict]
|
[customDict]
|
||||||
|
|
||||||
[emoticonDict]
|
[emoticonDict]
|
||||||
# This dictionary uses regexp when prefixed with "regex;", so be sure to escape anything that would be parsed by regexp, e.g. *, ., ^, $, etc.
|
regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
|
||||||
regex;[\s*|'|"][\s*|'|"]<{-.-}>:===:Raves
|
regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
|
||||||
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses
|
regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
|
||||||
regex;[\s*|'|"][\s*|'|"]:-/:===:confused
|
regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
|
||||||
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged
|
regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
|
||||||
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing
|
regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
|
||||||
regex;[\s*|'|"][\s*|'|"]8-X:===:skull
|
regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
|
||||||
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile
|
regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
|
||||||
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile
|
regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
|
||||||
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray
|
regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
|
||||||
regex;[\s*|'|"][\s*|'|"]:/:===:confused
|
regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
|
||||||
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh
|
regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
|
||||||
regex;[\s*|'|"];\)[\s*|'|"]:===:wink
|
regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
|
||||||
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL
|
regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
|
||||||
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile
|
regex;(?:^|\s)XD(?:\s|$):===:laughing hard
|
||||||
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile
|
regex;(?:^|\s)\^_\^(?:\s|$):===:happy
|
||||||
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right
|
regex;(?:^|\s)-_-(?:\s|$):===:annoyed
|
||||||
# example for arrow left
|
regex;(?:^|\s)o_O(?:\s|$):===:confused
|
||||||
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left
|
regex;(?:^|\s)>_<(?:\s|$):===:frustrated
|
||||||
# or
|
regex;(?:^|\s)\\o/(?:\s|$):===:hurray
|
||||||
#([ |^])<-([ ,.!?$]):===:arrow left\2
|
regex;(?:^|\s)<3(?:\s|$):===:heart
|
||||||
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left
|
regex;(?:^|\s)</3(?:\s|$):===:broken heart
|
||||||
regex;[\s+|'|"](Oo)|(oO)[\s+|'|"]:===:WTF?
|
regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
|
||||||
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile
|
regex;(?:^|\s)<{-.-}>(?:\s|$):===:Raves
|
||||||
|
regex;(?:^|\s)-\.-(?:\s|$):===:bugged
|
||||||
|
regex;(?:^|\s)>\.<(?:\s|$):===:laughing
|
||||||
|
regex;(?:^|\s)(?:>:\)|>:-\))(?:\s|$):===:evil smile
|
||||||
|
regex;(?:^|\s)\^\^(?:\s|$):===:enjoy smile
|
||||||
|
regex;(?:^|\s)->(?:\s|$):===:arrow right
|
||||||
|
regex;(?:^|\s)<-(?:\s|$):===:arrow left
|
||||||
|
@@ -46,27 +46,33 @@ _:===:line
|
|||||||
[customDict]
|
[customDict]
|
||||||
|
|
||||||
[emoticonDict]
|
[emoticonDict]
|
||||||
# This dictionary uses regexp when prefixed with "regex;", so be sure to escape anything that would be parsed by regexp, e.g. *, ., ^, $, etc.
|
regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
|
||||||
regex;[\s*|'|"][\s*|'|"]<{-.-}>:===:Raves
|
regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
|
||||||
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses
|
regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
|
||||||
regex;[\s*|'|"][\s*|'|"]:-/:===:confused
|
regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
|
||||||
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged
|
regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
|
||||||
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing
|
regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
|
||||||
regex;[\s*|'|"][\s*|'|"]8-X:===:skull
|
regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
|
||||||
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile
|
regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
|
||||||
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile
|
regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
|
||||||
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray
|
regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
|
||||||
regex;[\s*|'|"][\s*|'|"]:/:===:confused
|
regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
|
||||||
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh
|
regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
|
||||||
regex;[\s*|'|"];\)[\s*|'|"]:===:wink
|
regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
|
||||||
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL
|
regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
|
||||||
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile
|
regex;(?:^|\s)XD(?:\s|$):===:laughing hard
|
||||||
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile
|
regex;(?:^|\s)\^_\^(?:\s|$):===:happy
|
||||||
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right
|
regex;(?:^|\s)-_-(?:\s|$):===:annoyed
|
||||||
# example for arrow left
|
regex;(?:^|\s)o_O(?:\s|$):===:confused
|
||||||
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left
|
regex;(?:^|\s)>_<(?:\s|$):===:frustrated
|
||||||
# or
|
regex;(?:^|\s)\\o/(?:\s|$):===:hurray
|
||||||
#([ |^])<-([ ,.!?$]):===:arrow left\2
|
regex;(?:^|\s)<3(?:\s|$):===:heart
|
||||||
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left
|
regex;(?:^|\s)</3(?:\s|$):===:broken heart
|
||||||
regex;[\s+|'|"][O|o][O|o][\s+|'|"]:===:WTF?
|
regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
|
||||||
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile
|
regex;(?:^|\s)<{-.-}>(?:\s|$):===:Raves
|
||||||
|
regex;(?:^|\s)-\.-(?:\s|$):===:bugged
|
||||||
|
regex;(?:^|\s)>\.<(?:\s|$):===:laughing
|
||||||
|
regex;(?:^|\s)(?:>:\)|>:-\))(?:\s|$):===:evil smile
|
||||||
|
regex;(?:^|\s)\^\^(?:\s|$):===:enjoy smile
|
||||||
|
regex;(?:^|\s)->(?:\s|$):===:arrow right
|
||||||
|
regex;(?:^|\s)<-(?:\s|$):===:arrow left
|
||||||
|
@@ -46,28 +46,33 @@ _:===:subrayado
|
|||||||
[customDict]
|
[customDict]
|
||||||
|
|
||||||
[emoticonDict]
|
[emoticonDict]
|
||||||
# This dictionary uses regexp when prefixed with "regex;", so be sure to escape anything that would be parsed by regexp, e.g. *, ., ^, $, etc.
|
regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
|
||||||
regex;[\s*|'|"][\s*|'|"]<{-.-}>:===:Raves
|
regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
|
||||||
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses
|
regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
|
||||||
regex;[\s*|'|"][\s*|'|"]:-/:===:confused
|
regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
|
||||||
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged
|
regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
|
||||||
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing
|
regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
|
||||||
regex;[\s*|'|"][\s*|'|"]8-X:===:skull
|
regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
|
||||||
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile
|
regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
|
||||||
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile
|
regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
|
||||||
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray
|
regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
|
||||||
regex;[\s*|'|"][\s*|'|"]:/:===:confused
|
regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
|
||||||
regex;[\s*|'|"][\s*|'|"]8\):===:smile with sunglasses
|
regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
|
||||||
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh
|
regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
|
||||||
regex;[\s*|'|"];\)[\s*|'|"]:===:wink
|
regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
|
||||||
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL
|
regex;(?:^|\s)XD(?:\s|$):===:laughing hard
|
||||||
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile
|
regex;(?:^|\s)\^_\^(?:\s|$):===:happy
|
||||||
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile
|
regex;(?:^|\s)-_-(?:\s|$):===:annoyed
|
||||||
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right
|
regex;(?:^|\s)o_O(?:\s|$):===:confused
|
||||||
# example for arrow left
|
regex;(?:^|\s)>_<(?:\s|$):===:frustrated
|
||||||
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left
|
regex;(?:^|\s)\\o/(?:\s|$):===:hurray
|
||||||
# or
|
regex;(?:^|\s)<3(?:\s|$):===:heart
|
||||||
#([ |^])<-([ ,.!?$]):===:arrow left\2
|
regex;(?:^|\s)</3(?:\s|$):===:broken heart
|
||||||
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left
|
regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
|
||||||
regex;[\s*|'|"][O|o][O|o][\s*|'|"]:===:WTF?
|
regex;(?:^|\s)<{-.-}>(?:\s|$):===:Raves
|
||||||
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile
|
regex;(?:^|\s)-\.-(?:\s|$):===:bugged
|
||||||
|
regex;(?:^|\s)>\.<(?:\s|$):===:laughing
|
||||||
|
regex;(?:^|\s)(?:>:\)|>:-\))(?:\s|$):===:evil smile
|
||||||
|
regex;(?:^|\s)\^\^(?:\s|$):===:enjoy smile
|
||||||
|
regex;(?:^|\s)->(?:\s|$):===:arrow right
|
||||||
|
regex;(?:^|\s)<-(?:\s|$):===:arrow left
|
||||||
|
@@ -46,28 +46,33 @@ _:===:souligné
|
|||||||
[customDict]
|
[customDict]
|
||||||
|
|
||||||
[emoticonDict]
|
[emoticonDict]
|
||||||
# This dictionary uses regexp when prefixed with "regex;", so be sure to escape anything that would be parsed by regexp, e.g. *, ., ^, $, etc.
|
regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
|
||||||
regex;[\s*|'|"][\s*|'|"]<{-.-}>:===:Raves
|
regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
|
||||||
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses
|
regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
|
||||||
regex;[\s*|'|"][\s*|'|"]:-/:===:confused
|
regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
|
||||||
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged
|
regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
|
||||||
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing
|
regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
|
||||||
regex;[\s*|'|"][\s*|'|"]8-X:===:skull
|
regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
|
||||||
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile
|
regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
|
||||||
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile
|
regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
|
||||||
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray
|
regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
|
||||||
regex;[\s*|'|"][\s*|'|"]:/:===:confused
|
regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
|
||||||
regex;[\s*|'|"][\s*|'|"]8\):===:smile with sunglasses
|
regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
|
||||||
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh
|
regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
|
||||||
regex;[\s*|'|"];\)[\s*|'|"]:===:wink
|
regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
|
||||||
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL
|
regex;(?:^|\s)XD(?:\s|$):===:laughing hard
|
||||||
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile
|
regex;(?:^|\s)\^_\^(?:\s|$):===:happy
|
||||||
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile
|
regex;(?:^|\s)-_-(?:\s|$):===:annoyed
|
||||||
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right
|
regex;(?:^|\s)o_O(?:\s|$):===:confused
|
||||||
# example for arrow left
|
regex;(?:^|\s)>_<(?:\s|$):===:frustrated
|
||||||
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left
|
regex;(?:^|\s)\\o/(?:\s|$):===:hurray
|
||||||
# or
|
regex;(?:^|\s)<3(?:\s|$):===:heart
|
||||||
#([ |^])<-([ ,.!?$]):===:arrow left\2
|
regex;(?:^|\s)</3(?:\s|$):===:broken heart
|
||||||
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left
|
regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
|
||||||
regex;[\s*|'|"][O|o][O|o][\s*|'|"]:===:WTF?
|
regex;(?:^|\s)<{-.-}>(?:\s|$):===:Raves
|
||||||
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile
|
regex;(?:^|\s)-\.-(?:\s|$):===:bugged
|
||||||
|
regex;(?:^|\s)>\.<(?:\s|$):===:laughing
|
||||||
|
regex;(?:^|\s)(?:>:\)|>:-\))(?:\s|$):===:evil smile
|
||||||
|
regex;(?:^|\s)\^\^(?:\s|$):===:enjoy smile
|
||||||
|
regex;(?:^|\s)->(?:\s|$):===:arrow right
|
||||||
|
regex;(?:^|\s)<-(?:\s|$):===:arrow left
|
||||||
|
@@ -46,28 +46,33 @@ _:===:podkreślnik
|
|||||||
[customDict]
|
[customDict]
|
||||||
|
|
||||||
[emoticonDict]
|
[emoticonDict]
|
||||||
# This dictionary uses regexp when prefixed with "regex;", so be sure to escape anything that would be parsed by regexp, e.g. *, ., ^, $, etc.
|
regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
|
||||||
regex;[\s*|'|"][\s*|'|"]<{-.-}>:===:Raves
|
regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
|
||||||
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses
|
regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
|
||||||
regex;[\s*|'|"][\s*|'|"]:-/:===:confused
|
regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
|
||||||
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged
|
regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
|
||||||
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing
|
regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
|
||||||
regex;[\s*|'|"][\s*|'|"]8-X:===:skull
|
regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
|
||||||
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile
|
regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
|
||||||
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile
|
regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
|
||||||
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray
|
regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
|
||||||
regex;[\s*|'|"][\s*|'|"]:/:===:confused
|
regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
|
||||||
regex;[\s*|'|"][\s*|'|"]8\):===:smile with sunglasses
|
regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
|
||||||
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh
|
regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
|
||||||
regex;[\s*|'|"];\)[\s*|'|"]:===:wink
|
regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
|
||||||
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL
|
regex;(?:^|\s)XD(?:\s|$):===:laughing hard
|
||||||
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile
|
regex;(?:^|\s)\^_\^(?:\s|$):===:happy
|
||||||
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile
|
regex;(?:^|\s)-_-(?:\s|$):===:annoyed
|
||||||
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right
|
regex;(?:^|\s)o_O(?:\s|$):===:confused
|
||||||
# example for arrow left
|
regex;(?:^|\s)>_<(?:\s|$):===:frustrated
|
||||||
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left
|
regex;(?:^|\s)\\o/(?:\s|$):===:hurray
|
||||||
# or
|
regex;(?:^|\s)<3(?:\s|$):===:heart
|
||||||
#([ |^])<-([ ,.!?$]):===:arrow left\2
|
regex;(?:^|\s)</3(?:\s|$):===:broken heart
|
||||||
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left
|
regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
|
||||||
regex;[\s*|'|"][O|o][O|o][\s*|'|"]:===:WTF?
|
regex;(?:^|\s)<{-.-}>(?:\s|$):===:Raves
|
||||||
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile
|
regex;(?:^|\s)-\.-(?:\s|$):===:bugged
|
||||||
|
regex;(?:^|\s)>\.<(?:\s|$):===:laughing
|
||||||
|
regex;(?:^|\s)(?:>:\)|>:-\))(?:\s|$):===:evil smile
|
||||||
|
regex;(?:^|\s)\^\^(?:\s|$):===:enjoy smile
|
||||||
|
regex;(?:^|\s)->(?:\s|$):===:arrow right
|
||||||
|
regex;(?:^|\s)<-(?:\s|$):===:arrow left
|
||||||
|
@@ -52,27 +52,33 @@ regex;(?i)shit:===:shitt
|
|||||||
regex;(?i)slither:===:slitther
|
regex;(?i)slither:===:slitther
|
||||||
|
|
||||||
[emoticonDict]
|
[emoticonDict]
|
||||||
# This dictionary uses regexp when prefixed with "regex;", so be sure to escape anything that would be parsed by regexp, e.g. *, ., ^, $, etc.
|
regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
|
||||||
regex;[\s*|'|"][\s*|'|"]<{-.-}>:===:Raves
|
regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
|
||||||
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses
|
regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
|
||||||
regex;[\s*|'|"][\s*|'|"]:-/:===:confused
|
regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
|
||||||
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged
|
regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
|
||||||
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing
|
regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
|
||||||
regex;[\s*|'|"][\s*|'|"]8-X:===:skull
|
regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
|
||||||
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile
|
regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
|
||||||
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile
|
regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
|
||||||
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray
|
regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
|
||||||
regex;[\s*|'|"][\s*|'|"]:/:===:confused
|
regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
|
||||||
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh
|
regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
|
||||||
regex;[\s*|'|"];\)[\s*|'|"]:===:wink
|
regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
|
||||||
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL
|
regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
|
||||||
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile
|
regex;(?:^|\s)XD(?:\s|$):===:laughing hard
|
||||||
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile
|
regex;(?:^|\s)\^_\^(?:\s|$):===:happy
|
||||||
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right
|
regex;(?:^|\s)-_-(?:\s|$):===:annoyed
|
||||||
# example for arrow left
|
regex;(?:^|\s)o_O(?:\s|$):===:confused
|
||||||
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left
|
regex;(?:^|\s)>_<(?:\s|$):===:frustrated
|
||||||
# or
|
regex;(?:^|\s)\\o/(?:\s|$):===:hurray
|
||||||
#([ |^])<-([ ,.!?$]):===:arrow left\2
|
regex;(?:^|\s)<3(?:\s|$):===:heart
|
||||||
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left
|
regex;(?:^|\s)</3(?:\s|$):===:broken heart
|
||||||
regex;[\s+|'|"][O|o][O|o][\s+|'|"]:===:WTF?
|
regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
|
||||||
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile
|
regex;(?:^|\s)<{-.-}>(?:\s|$):===:Raves
|
||||||
|
regex;(?:^|\s)-\.-(?:\s|$):===:bugged
|
||||||
|
regex;(?:^|\s)>\.<(?:\s|$):===:laughing
|
||||||
|
regex;(?:^|\s)(?:>:\)|>:-\))(?:\s|$):===:evil smile
|
||||||
|
regex;(?:^|\s)\^\^(?:\s|$):===:enjoy smile
|
||||||
|
regex;(?:^|\s)->(?:\s|$):===:arrow right
|
||||||
|
regex;(?:^|\s)<-(?:\s|$):===:arrow left
|
||||||
|
@@ -1,52 +0,0 @@
|
|||||||
[build-system]
|
|
||||||
requires = ["setuptools>=64.0.0", "wheel", "setuptools_scm[toml]>=6.2"]
|
|
||||||
build-backend = "setuptools.build_meta"
|
|
||||||
|
|
||||||
[project]
|
|
||||||
name = "fenrir-screenreader"
|
|
||||||
dynamic = ["version"]
|
|
||||||
description = "A TTY Screen Reader for Linux"
|
|
||||||
readme = "README.md"
|
|
||||||
requires-python = ">=3.8"
|
|
||||||
license = {text = "GNU General Public License v3 or later (GPLv3+)"}
|
|
||||||
keywords = ["screenreader", "a11y", "accessibility", "terminal", "TTY", "console"]
|
|
||||||
authors = [
|
|
||||||
{name = "Storm Dragon, Jeremiah, Chrys and others", email = "storm_dragon@stormux.org"}
|
|
||||||
]
|
|
||||||
classifiers = [
|
|
||||||
"Programming Language :: Python",
|
|
||||||
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
|
|
||||||
"Development Status :: 5 - Production/Stable",
|
|
||||||
"Topic :: Multimedia :: Sound/Audio :: Speech",
|
|
||||||
"Environment :: Console",
|
|
||||||
]
|
|
||||||
dependencies = [
|
|
||||||
"evdev>=1.1.2",
|
|
||||||
"daemonize>=2.5.0",
|
|
||||||
"dbus-python>=1.2.8",
|
|
||||||
"pyudev>=0.21.0",
|
|
||||||
"setuptools",
|
|
||||||
"pexpect",
|
|
||||||
"pyttsx3",
|
|
||||||
"pyte>=0.7.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[project.urls]
|
|
||||||
Homepage = "https://git.stormux.org/storm/fenrir/"
|
|
||||||
|
|
||||||
[tool.setuptools]
|
|
||||||
package-dir = {"" = "src"}
|
|
||||||
include-package-data = true
|
|
||||||
zip-safe = false
|
|
||||||
|
|
||||||
[tool.setuptools.packages.find]
|
|
||||||
where = ["src"]
|
|
||||||
include = ["fenrirscreenreader*"]
|
|
||||||
namespaces = true
|
|
||||||
|
|
||||||
[tool.setuptools_scm]
|
|
||||||
write_to = "src/fenrirscreenreader/_version.py"
|
|
||||||
|
|
||||||
[tool.setuptools.data-files]
|
|
||||||
"usr/share/man/man1" = ["docs/fenrir.1"]
|
|
||||||
"usr/share/fenrirscreenreader/tools" = ["tools/*"]
|
|
156
setup.py
156
setup.py
@@ -1,46 +1,130 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import os
|
import os, glob, sys
|
||||||
import glob
|
import os.path
|
||||||
|
from shutil import copyfile
|
||||||
|
from setuptools import find_namespace_packages
|
||||||
from setuptools import setup
|
from setuptools import setup
|
||||||
|
|
||||||
def get_data_files():
|
# handle flags for package manager like aurman and pacaur.
|
||||||
data_files = []
|
# Allow both environment variable and command line flag
|
||||||
|
forceSettingsFlag = (
|
||||||
|
"--force-settings" in sys.argv or
|
||||||
|
os.environ.get('FENRIR_FORCE_SETTINGS') == '1'
|
||||||
|
)
|
||||||
|
if "--force-settings" in sys.argv:
|
||||||
|
sys.argv.remove("--force-settings")
|
||||||
|
|
||||||
# Handle configuration files
|
dataFiles = []
|
||||||
directories = glob.glob('config/*')
|
|
||||||
for directory in directories:
|
|
||||||
files = glob.glob(directory+'/*')
|
|
||||||
dest_dir = ''
|
|
||||||
if 'config/punctuation' in directory:
|
|
||||||
dest_dir = 'etc/fenrirscreenreader/punctuation'
|
|
||||||
elif 'config/keyboard' in directory:
|
|
||||||
dest_dir = 'etc/fenrirscreenreader/keyboard'
|
|
||||||
elif 'config/settings' in directory:
|
|
||||||
dest_dir = 'etc/fenrirscreenreader/settings'
|
|
||||||
elif 'config/scripts' in directory:
|
|
||||||
dest_dir = 'usr/share/fenrirscreenreader/scripts'
|
|
||||||
if dest_dir and files:
|
|
||||||
data_files.append((dest_dir, files))
|
|
||||||
|
|
||||||
# Handle sound files
|
# Handle locale files
|
||||||
files = glob.glob('config/sound/default/*')
|
localeFiles = glob.glob('locale/*/LC_MESSAGES/*.mo')
|
||||||
if files:
|
for localeFile in localeFiles:
|
||||||
data_files.append(('usr/share/sounds/fenrirscreenreader/default', files))
|
lang = localeFile.split(os.sep)[1]
|
||||||
|
destDir = f'/usr/share/locale/{lang}/LC_MESSAGES'
|
||||||
|
dataFiles.append((destDir, [localeFile]))
|
||||||
|
|
||||||
files = glob.glob('config/sound/template/*')
|
# Handle other configuration files
|
||||||
if files:
|
directories = glob.glob('config/*')
|
||||||
data_files.append(('usr/share/sounds/fenrirscreenreader/template', files))
|
for directory in directories:
|
||||||
|
files = glob.glob(directory+'/*')
|
||||||
|
destDir = ''
|
||||||
|
if 'config/punctuation' in directory :
|
||||||
|
destDir = '/etc/fenrirscreenreader/punctuation'
|
||||||
|
elif 'config/keyboard' in directory:
|
||||||
|
destDir = '/etc/fenrirscreenreader/keyboard'
|
||||||
|
elif 'config/settings' in directory:
|
||||||
|
destDir = '/etc/fenrirscreenreader/settings'
|
||||||
|
if not forceSettingsFlag:
|
||||||
|
try:
|
||||||
|
files = [f for f in files if not f.endswith('settings.conf')]
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
elif 'config/scripts' in directory:
|
||||||
|
destDir = '/usr/share/fenrirscreenreader/scripts'
|
||||||
|
if destDir != '':
|
||||||
|
dataFiles.append((destDir, files))
|
||||||
|
|
||||||
# Handle tools directory
|
files = glob.glob('config/sound/default/*')
|
||||||
files = glob.glob('tools/*')
|
destDir = '/usr/share/sounds/fenrirscreenreader/default'
|
||||||
if files:
|
dataFiles.append((destDir, files))
|
||||||
data_files.append(('usr/share/fenrirscreenreader/tools', files))
|
files = glob.glob('config/sound//template/*')
|
||||||
|
destDir = '/usr/share/sounds/fenrirscreenreader/template'
|
||||||
|
dataFiles.append((destDir, files))
|
||||||
|
files = glob.glob('tools/*')
|
||||||
|
dataFiles.append(('/usr/share/fenrirscreenreader/tools', files))
|
||||||
|
dataFiles.append(('/usr/share/man/man1', ['docs/fenrir.1']))
|
||||||
|
|
||||||
# Add man page
|
def read(fname):
|
||||||
if os.path.exists('docs/fenrir.1'):
|
return open(os.path.join(os.path.dirname(__file__), fname)).read()
|
||||||
data_files.append(('usr/share/man/man1', ['docs/fenrir.1']))
|
|
||||||
|
|
||||||
return data_files
|
setup(
|
||||||
|
# Application name:
|
||||||
|
name="fenrir-screenreader",
|
||||||
|
# description
|
||||||
|
description="A TTY Screen Reader for Linux.",
|
||||||
|
long_description=read('README.md'),
|
||||||
|
long_description_content_type="text/markdown",
|
||||||
|
keywords=['screenreader', 'a11y', 'accessibility', 'terminal', 'TTY', 'console'],
|
||||||
|
license="License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
|
||||||
|
url="https://git.stormux.org/storm/fenrir/",
|
||||||
|
classifiers=[
|
||||||
|
"Programming Language :: Python",
|
||||||
|
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
|
||||||
|
"Development Status :: 5 - Production/Stable",
|
||||||
|
"Topic :: Multimedia :: Sound/Audio :: Speech",
|
||||||
|
"Environment :: Console",
|
||||||
|
],
|
||||||
|
|
||||||
if __name__ == "__main__":
|
# Application author details:
|
||||||
setup(data_files=get_data_files())
|
author="Storm Dragon, Jeremiah, Chrys and others",
|
||||||
|
author_email="storm_dragon@stormux.org",
|
||||||
|
|
||||||
|
# Packages
|
||||||
|
package_dir={'': 'src'},
|
||||||
|
packages=find_namespace_packages(
|
||||||
|
where='src',
|
||||||
|
include=['fenrirscreenreader*']
|
||||||
|
),
|
||||||
|
scripts=['src/fenrir'],
|
||||||
|
|
||||||
|
# Include additional files into the package
|
||||||
|
include_package_data=True,
|
||||||
|
zip_safe=False,
|
||||||
|
|
||||||
|
data_files=dataFiles,
|
||||||
|
|
||||||
|
# Dependent packages (distributions)
|
||||||
|
python_requires='>=3.6',
|
||||||
|
install_requires=[
|
||||||
|
"evdev>=1.1.2",
|
||||||
|
"daemonize>=2.5.0",
|
||||||
|
"dbus-python>=1.2.8",
|
||||||
|
"pyudev>=0.21.0",
|
||||||
|
"setuptools",
|
||||||
|
"pexpect",
|
||||||
|
"pyte>=0.7.0",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
if not forceSettingsFlag:
|
||||||
|
print('')
|
||||||
|
# create settings file from example if not exist
|
||||||
|
if not os.path.isfile('/etc/fenrirscreenreader/settings/settings.conf'):
|
||||||
|
try:
|
||||||
|
copyfile('/etc/fenrirscreenreader/settings/settings.conf.example', '/etc/fenrirscreenreader/settings/settings.conf')
|
||||||
|
print('create settings file in /etc/fenrirscreenreader/settings/settings.conf')
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
print('settings.conf file found. It is not overwritten automatical')
|
||||||
|
|
||||||
|
print('')
|
||||||
|
print('To have Fenrir start at boot:')
|
||||||
|
print('sudo systemctl enable fenrir')
|
||||||
|
print('Pulseaudio users may want to run:')
|
||||||
|
print('/usr/share/fenrirscreenreader/tools/configure_pulse.sh')
|
||||||
|
print('once as their user account and once as root to configure Pulseaudio.')
|
||||||
|
print('Please install the following packages manually:')
|
||||||
|
print('- Speech-dispatcher: for the default speech driver')
|
||||||
|
print('- Espeak: as basic TTS engine')
|
||||||
|
print('- sox: is a player for the generic sound driver')
|
||||||
|
@@ -4,5 +4,5 @@
|
|||||||
# Fenrir TTY screen reader
|
# Fenrir TTY screen reader
|
||||||
# By Chrys, Storm Dragon, and contributers.
|
# By Chrys, Storm Dragon, and contributers.
|
||||||
|
|
||||||
version = "2024.12.20"
|
version = "2025.02.26"
|
||||||
codeName = "testing"
|
codeName = "master"
|
||||||
|
@@ -201,7 +201,7 @@ class FenrirConfigTool:
|
|||||||
|
|
||||||
# Test voice configuration
|
# Test voice configuration
|
||||||
if self.test_voice(moduleChoice, voice):
|
if self.test_voice(moduleChoice, voice):
|
||||||
config = configparser.ConfigParser()
|
config = configparser.ConfigParser(interpolation=None)
|
||||||
config.read(self.settingsFile)
|
config.read(self.settingsFile)
|
||||||
|
|
||||||
if 'speech' not in config:
|
if 'speech' not in config:
|
||||||
@@ -244,7 +244,7 @@ class FenrirConfigTool:
|
|||||||
|
|
||||||
def edit_general_config(self) -> None:
|
def edit_general_config(self) -> None:
|
||||||
while True:
|
while True:
|
||||||
config = configparser.ConfigParser()
|
config = configparser.ConfigParser(interpolation=None)
|
||||||
config.read(self.settingsFile)
|
config.read(self.settingsFile)
|
||||||
sections = config.sections()
|
sections = config.sections()
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user