Compare commits
25 Commits
2024.12.10
...
71d92e9702
Author | SHA1 | Date | |
---|---|---|---|
|
71d92e9702 | ||
|
ed918a0334 | ||
|
760b873abe | ||
|
46c348634c | ||
|
9da925c80d | ||
|
9c45ca1b5f | ||
|
d1be848ebb | ||
|
bc4319bf5e | ||
|
6f8139ed8f | ||
|
f1a6c75459 | ||
|
1d746eb709 | ||
|
80f549fde9 | ||
|
9f57f7faec | ||
|
099d49d670 | ||
|
67b6c79678 | ||
|
191181a6a5 | ||
|
c77d2bddd8 | ||
|
90d8e62db0 | ||
|
d6a9332f80 | ||
|
55ce73322b | ||
|
78ca59a938 | ||
|
dd52d08171 | ||
|
29a2db0e0c | ||
|
b6201235e6 | ||
|
f7584463e3 |
@@ -46,28 +46,33 @@ _:===:Lienie unten
|
||||
[customDict]
|
||||
|
||||
[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*|'|"]<{-.-}>:===:Raves
|
||||
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses
|
||||
regex;[\s*|'|"][\s*|'|"]:-/:===:confused
|
||||
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged
|
||||
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing
|
||||
regex;[\s*|'|"][\s*|'|"]8-X:===:skull
|
||||
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile
|
||||
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile
|
||||
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray
|
||||
regex;[\s*|'|"][\s*|'|"]:/:===:confused
|
||||
regex;[\s*|'|"][\s*|'|"]8\):===:smile with sunglasses
|
||||
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh
|
||||
regex;[\s*|'|"];\)[\s*|'|"]:===:wink
|
||||
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL
|
||||
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile
|
||||
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile
|
||||
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right
|
||||
# example for arrow left
|
||||
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left
|
||||
# or
|
||||
#([ |^])<-([ ,.!?$]):===:arrow left\2
|
||||
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left
|
||||
regex;[\s*|'|"][O|o][O|o][\s*|'|"]:===:WTF?
|
||||
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile
|
||||
regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
|
||||
regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
|
||||
regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
|
||||
regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
|
||||
regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
|
||||
regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
|
||||
regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
|
||||
regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
|
||||
regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
|
||||
regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
|
||||
regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
|
||||
regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
|
||||
regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
|
||||
regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
|
||||
regex;(?:^|\s)XD(?:\s|$):===:laughing hard
|
||||
regex;(?:^|\s)\^_\^(?:\s|$):===:happy
|
||||
regex;(?:^|\s)-_-(?:\s|$):===:annoyed
|
||||
regex;(?:^|\s)o_O(?:\s|$):===:confused
|
||||
regex;(?:^|\s)>_<(?:\s|$):===:frustrated
|
||||
regex;(?:^|\s)\\o/(?:\s|$):===:hurray
|
||||
regex;(?:^|\s)<3(?:\s|$):===:heart
|
||||
regex;(?:^|\s)</3(?:\s|$):===:broken heart
|
||||
regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
|
||||
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]
|
||||
|
||||
[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*|'|"]<{-.-}>:===:Raves
|
||||
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses
|
||||
regex;[\s*|'|"][\s*|'|"]:-/:===:confused
|
||||
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged
|
||||
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing
|
||||
regex;[\s*|'|"][\s*|'|"]8-X:===:skull
|
||||
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile
|
||||
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile
|
||||
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray
|
||||
regex;[\s*|'|"][\s*|'|"]:/:===:confused
|
||||
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh
|
||||
regex;[\s*|'|"];\)[\s*|'|"]:===:wink
|
||||
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL
|
||||
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile
|
||||
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile
|
||||
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right
|
||||
# example for arrow left
|
||||
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left
|
||||
# or
|
||||
#([ |^])<-([ ,.!?$]):===:arrow left\2
|
||||
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left
|
||||
regex;[\s+|'|"](Oo)|(oO)[\s+|'|"]:===:WTF?
|
||||
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile
|
||||
regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
|
||||
regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
|
||||
regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
|
||||
regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
|
||||
regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
|
||||
regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
|
||||
regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
|
||||
regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
|
||||
regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
|
||||
regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
|
||||
regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
|
||||
regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
|
||||
regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
|
||||
regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
|
||||
regex;(?:^|\s)XD(?:\s|$):===:laughing hard
|
||||
regex;(?:^|\s)\^_\^(?:\s|$):===:happy
|
||||
regex;(?:^|\s)-_-(?:\s|$):===:annoyed
|
||||
regex;(?:^|\s)o_O(?:\s|$):===:confused
|
||||
regex;(?:^|\s)>_<(?:\s|$):===:frustrated
|
||||
regex;(?:^|\s)\\o/(?:\s|$):===:hurray
|
||||
regex;(?:^|\s)<3(?:\s|$):===:heart
|
||||
regex;(?:^|\s)</3(?:\s|$):===:broken heart
|
||||
regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
|
||||
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]
|
||||
|
||||
[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*|'|"]<{-.-}>:===:Raves
|
||||
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses
|
||||
regex;[\s*|'|"][\s*|'|"]:-/:===:confused
|
||||
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged
|
||||
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing
|
||||
regex;[\s*|'|"][\s*|'|"]8-X:===:skull
|
||||
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile
|
||||
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile
|
||||
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray
|
||||
regex;[\s*|'|"][\s*|'|"]:/:===:confused
|
||||
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh
|
||||
regex;[\s*|'|"];\)[\s*|'|"]:===:wink
|
||||
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL
|
||||
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile
|
||||
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile
|
||||
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right
|
||||
# example for arrow left
|
||||
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left
|
||||
# or
|
||||
#([ |^])<-([ ,.!?$]):===:arrow left\2
|
||||
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left
|
||||
regex;[\s+|'|"][O|o][O|o][\s+|'|"]:===:WTF?
|
||||
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile
|
||||
regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
|
||||
regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
|
||||
regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
|
||||
regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
|
||||
regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
|
||||
regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
|
||||
regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
|
||||
regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
|
||||
regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
|
||||
regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
|
||||
regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
|
||||
regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
|
||||
regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
|
||||
regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
|
||||
regex;(?:^|\s)XD(?:\s|$):===:laughing hard
|
||||
regex;(?:^|\s)\^_\^(?:\s|$):===:happy
|
||||
regex;(?:^|\s)-_-(?:\s|$):===:annoyed
|
||||
regex;(?:^|\s)o_O(?:\s|$):===:confused
|
||||
regex;(?:^|\s)>_<(?:\s|$):===:frustrated
|
||||
regex;(?:^|\s)\\o/(?:\s|$):===:hurray
|
||||
regex;(?:^|\s)<3(?:\s|$):===:heart
|
||||
regex;(?:^|\s)</3(?:\s|$):===:broken heart
|
||||
regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
|
||||
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]
|
||||
|
||||
[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*|'|"]<{-.-}>:===:Raves
|
||||
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses
|
||||
regex;[\s*|'|"][\s*|'|"]:-/:===:confused
|
||||
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged
|
||||
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing
|
||||
regex;[\s*|'|"][\s*|'|"]8-X:===:skull
|
||||
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile
|
||||
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile
|
||||
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray
|
||||
regex;[\s*|'|"][\s*|'|"]:/:===:confused
|
||||
regex;[\s*|'|"][\s*|'|"]8\):===:smile with sunglasses
|
||||
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh
|
||||
regex;[\s*|'|"];\)[\s*|'|"]:===:wink
|
||||
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL
|
||||
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile
|
||||
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile
|
||||
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right
|
||||
# example for arrow left
|
||||
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left
|
||||
# or
|
||||
#([ |^])<-([ ,.!?$]):===:arrow left\2
|
||||
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left
|
||||
regex;[\s*|'|"][O|o][O|o][\s*|'|"]:===:WTF?
|
||||
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile
|
||||
regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
|
||||
regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
|
||||
regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
|
||||
regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
|
||||
regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
|
||||
regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
|
||||
regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
|
||||
regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
|
||||
regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
|
||||
regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
|
||||
regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
|
||||
regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
|
||||
regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
|
||||
regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
|
||||
regex;(?:^|\s)XD(?:\s|$):===:laughing hard
|
||||
regex;(?:^|\s)\^_\^(?:\s|$):===:happy
|
||||
regex;(?:^|\s)-_-(?:\s|$):===:annoyed
|
||||
regex;(?:^|\s)o_O(?:\s|$):===:confused
|
||||
regex;(?:^|\s)>_<(?:\s|$):===:frustrated
|
||||
regex;(?:^|\s)\\o/(?:\s|$):===:hurray
|
||||
regex;(?:^|\s)<3(?:\s|$):===:heart
|
||||
regex;(?:^|\s)</3(?:\s|$):===:broken heart
|
||||
regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
|
||||
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 @@ _:===:souligné
|
||||
[customDict]
|
||||
|
||||
[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*|'|"]<{-.-}>:===:Raves
|
||||
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses
|
||||
regex;[\s*|'|"][\s*|'|"]:-/:===:confused
|
||||
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged
|
||||
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing
|
||||
regex;[\s*|'|"][\s*|'|"]8-X:===:skull
|
||||
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile
|
||||
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile
|
||||
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray
|
||||
regex;[\s*|'|"][\s*|'|"]:/:===:confused
|
||||
regex;[\s*|'|"][\s*|'|"]8\):===:smile with sunglasses
|
||||
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh
|
||||
regex;[\s*|'|"];\)[\s*|'|"]:===:wink
|
||||
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL
|
||||
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile
|
||||
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile
|
||||
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right
|
||||
# example for arrow left
|
||||
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left
|
||||
# or
|
||||
#([ |^])<-([ ,.!?$]):===:arrow left\2
|
||||
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left
|
||||
regex;[\s*|'|"][O|o][O|o][\s*|'|"]:===:WTF?
|
||||
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile
|
||||
regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
|
||||
regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
|
||||
regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
|
||||
regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
|
||||
regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
|
||||
regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
|
||||
regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
|
||||
regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
|
||||
regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
|
||||
regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
|
||||
regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
|
||||
regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
|
||||
regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
|
||||
regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
|
||||
regex;(?:^|\s)XD(?:\s|$):===:laughing hard
|
||||
regex;(?:^|\s)\^_\^(?:\s|$):===:happy
|
||||
regex;(?:^|\s)-_-(?:\s|$):===:annoyed
|
||||
regex;(?:^|\s)o_O(?:\s|$):===:confused
|
||||
regex;(?:^|\s)>_<(?:\s|$):===:frustrated
|
||||
regex;(?:^|\s)\\o/(?:\s|$):===:hurray
|
||||
regex;(?:^|\s)<3(?:\s|$):===:heart
|
||||
regex;(?:^|\s)</3(?:\s|$):===:broken heart
|
||||
regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
|
||||
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 @@ _:===:podkreślnik
|
||||
[customDict]
|
||||
|
||||
[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*|'|"]<{-.-}>:===:Raves
|
||||
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses
|
||||
regex;[\s*|'|"][\s*|'|"]:-/:===:confused
|
||||
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged
|
||||
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing
|
||||
regex;[\s*|'|"][\s*|'|"]8-X:===:skull
|
||||
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile
|
||||
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile
|
||||
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray
|
||||
regex;[\s*|'|"][\s*|'|"]:/:===:confused
|
||||
regex;[\s*|'|"][\s*|'|"]8\):===:smile with sunglasses
|
||||
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh
|
||||
regex;[\s*|'|"];\)[\s*|'|"]:===:wink
|
||||
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL
|
||||
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile
|
||||
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile
|
||||
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right
|
||||
# example for arrow left
|
||||
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left
|
||||
# or
|
||||
#([ |^])<-([ ,.!?$]):===:arrow left\2
|
||||
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left
|
||||
regex;[\s*|'|"][O|o][O|o][\s*|'|"]:===:WTF?
|
||||
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile
|
||||
regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
|
||||
regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
|
||||
regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
|
||||
regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
|
||||
regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
|
||||
regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
|
||||
regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
|
||||
regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
|
||||
regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
|
||||
regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
|
||||
regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
|
||||
regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
|
||||
regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
|
||||
regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
|
||||
regex;(?:^|\s)XD(?:\s|$):===:laughing hard
|
||||
regex;(?:^|\s)\^_\^(?:\s|$):===:happy
|
||||
regex;(?:^|\s)-_-(?:\s|$):===:annoyed
|
||||
regex;(?:^|\s)o_O(?:\s|$):===:confused
|
||||
regex;(?:^|\s)>_<(?:\s|$):===:frustrated
|
||||
regex;(?:^|\s)\\o/(?:\s|$):===:hurray
|
||||
regex;(?:^|\s)<3(?:\s|$):===:heart
|
||||
regex;(?:^|\s)</3(?:\s|$):===:broken heart
|
||||
regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
|
||||
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
|
||||
|
@@ -52,27 +52,33 @@ regex;(?i)shit:===:shitt
|
||||
regex;(?i)slither:===:slitther
|
||||
|
||||
[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*|'|"]<{-.-}>:===:Raves
|
||||
regex;[\s*|'|"][\s*|'|"]8-\):===:smile with sunglasses
|
||||
regex;[\s*|'|"][\s*|'|"]:-/:===:confused
|
||||
regex;[\s*|'|"][\s*|'|"]-\.-:===:bugged
|
||||
regex;[\s*|'|"][\s*|'|"]>\.<:===:laughing
|
||||
regex;[\s*|'|"][\s*|'|"]8-X:===:skull
|
||||
regex;[\s*|'|"][\s*|'|"]>:\):===:evil smile
|
||||
regex;[\s*|'|"][\s*|'|"]>:-\):===:evil smile
|
||||
regex;[\s*|'|"][\s*|'|"]\\o/:===:Hurray
|
||||
regex;[\s*|'|"][\s*|'|"]:/:===:confused
|
||||
regex;[\s*|'|"]:D[\s*|'|"]:===:laugh
|
||||
regex;[\s*|'|"];\)[\s*|'|"]:===:wink
|
||||
regex;[\s*|'|"]XD[\s*|'|"]:===:LOL
|
||||
regex;[\s*|'|"]:-\)[\s*|'|"]:===:smile
|
||||
regex;[\s*|'|"]:\)[\s*|'|"]:===:smile
|
||||
regex;[\s*|'|"]->[\s*|'|"]:===:arrow right
|
||||
# example for arrow left
|
||||
#(?:[ |^])(<-)(?:[ ,.!?$]):===:arrow left
|
||||
# or
|
||||
#([ |^])<-([ ,.!?$]):===:arrow left\2
|
||||
regex;[\s*|'|"]<-[\s*|'|"]:===:arrow left
|
||||
regex;[\s+|'|"][O|o][O|o][\s+|'|"]:===:WTF?
|
||||
regex;[\s*|'|"]\^\^[\s*|'|"]:===:enjoy smile
|
||||
regex;(?:^|\s)(?::-\)|:\))(?:\s|$):===:smile
|
||||
regex;(?:^|\s)(?::-\(|:\()(?:\s|$):===:frown
|
||||
regex;(?:^|\s)(?::-D|:D)(?:\s|$):===:big grin
|
||||
regex;(?:^|\s)(?:;-\)|;\))(?:\s|$):===:wink
|
||||
regex;(?:^|\s)(?::-P|:P)(?:\s|$):===:tongue out
|
||||
regex;(?:^|\s)(?::-O|:O)(?:\s|$):===:surprised
|
||||
regex;(?:^|\s)(?::-/|:/)(?:\s|$):===:skeptical
|
||||
regex;(?:^|\s)(?:>:-\(|>:\()(?:\s|$):===:angry
|
||||
regex;(?:^|\s)(?::'\(|:'-\()(?:\s|$):===:crying
|
||||
regex;(?:^|\s)(?::-\||:\|)(?:\s|$):===:neutral
|
||||
regex;(?:^|\s)(?:8-\)|B-\))(?:\s|$):===:cool
|
||||
regex;(?:^|\s)8-X(?:\s|$):===:skull and crossbones
|
||||
regex;(?:^|\s)(?:X-X|x-x)(?:\s|$):===:knocked out
|
||||
regex;(?:^|\s)(?::-X|:-x|:X|:x)(?:\s|$):===:lips sealed
|
||||
regex;(?:^|\s)XD(?:\s|$):===:laughing hard
|
||||
regex;(?:^|\s)\^_\^(?:\s|$):===:happy
|
||||
regex;(?:^|\s)-_-(?:\s|$):===:annoyed
|
||||
regex;(?:^|\s)o_O(?:\s|$):===:confused
|
||||
regex;(?:^|\s)>_<(?:\s|$):===:frustrated
|
||||
regex;(?:^|\s)\\o/(?:\s|$):===:hurray
|
||||
regex;(?:^|\s)<3(?:\s|$):===:heart
|
||||
regex;(?:^|\s)</3(?:\s|$):===:broken heart
|
||||
regex;(?:^|\s)(?:Oo|oO)(?:\s|$):===:WTF?
|
||||
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
|
||||
|
@@ -33,14 +33,11 @@ genericFrequencyCommand=play -q -v fenrirVolume -n -c1 synth fenrirDuration sine
|
||||
enabled=True
|
||||
|
||||
# Select speech driver, options are speechdDriver or genericDriver:
|
||||
#driver=speechdDriver
|
||||
driver=genericDriver
|
||||
|
||||
# server path for emacspeak
|
||||
# serverPath=
|
||||
driver=speechdDriver
|
||||
#driver=genericDriver
|
||||
|
||||
# The rate selects how fast Fenrir will speak. Options range from 0, slowest, to 1.0, fastest.
|
||||
rate=0.65
|
||||
rate=0.5
|
||||
|
||||
# Pitch controls the pitch of the voice, select from 0, lowest, to 1.0, highest.
|
||||
pitch=0.5
|
||||
|
55
setup.py
55
setup.py
@@ -1,21 +1,29 @@
|
||||
#!/usr/bin/env python3
|
||||
#https://python-packaging.readthedocs.io/en/latest/minimal.html
|
||||
import os, glob, sys
|
||||
import os.path
|
||||
from shutil import copyfile
|
||||
from setuptools import find_packages
|
||||
from setuptools import find_namespace_packages
|
||||
from setuptools import setup
|
||||
|
||||
fenrirVersion = '1.9.9'
|
||||
packageVersion = 'post1'
|
||||
|
||||
# handle flags for package manager like aurman and pacaur.
|
||||
forceSettings = False
|
||||
# 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:
|
||||
forceSettings = True
|
||||
sys.argv.remove("--force-settings")
|
||||
|
||||
data_files = []
|
||||
dataFiles = []
|
||||
|
||||
# Handle locale files
|
||||
localeFiles = glob.glob('locale/*/LC_MESSAGES/*.mo')
|
||||
for localeFile in localeFiles:
|
||||
lang = localeFile.split(os.sep)[1]
|
||||
destDir = f'/usr/share/locale/{lang}/LC_MESSAGES'
|
||||
dataFiles.append((destDir, [localeFile]))
|
||||
|
||||
# Handle other configuration files
|
||||
directories = glob.glob('config/*')
|
||||
for directory in directories:
|
||||
files = glob.glob(directory+'/*')
|
||||
@@ -26,25 +34,25 @@ for directory in directories:
|
||||
destDir = '/etc/fenrirscreenreader/keyboard'
|
||||
elif 'config/settings' in directory:
|
||||
destDir = '/etc/fenrirscreenreader/settings'
|
||||
if not forceSettings:
|
||||
if not forceSettingsFlag:
|
||||
try:
|
||||
del(files[files.index('config/settings/settings.conf')])
|
||||
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 != '':
|
||||
data_files.append((destDir, files))
|
||||
dataFiles.append((destDir, files))
|
||||
|
||||
files = glob.glob('config/sound/default/*')
|
||||
destDir = '/usr/share/sounds/fenrirscreenreader/default'
|
||||
data_files.append((destDir, files))
|
||||
dataFiles.append((destDir, files))
|
||||
files = glob.glob('config/sound//template/*')
|
||||
destDir = '/usr/share/sounds/fenrirscreenreader/template'
|
||||
data_files.append((destDir, files))
|
||||
dataFiles.append((destDir, files))
|
||||
files = glob.glob('tools/*')
|
||||
data_files.append(('/usr/share/fenrirscreenreader/tools', files))
|
||||
data_files.append(('/usr/share/man/man1', ['docs/fenrir.1']))
|
||||
dataFiles.append(('/usr/share/fenrirscreenreader/tools', files))
|
||||
dataFiles.append(('/usr/share/man/man1', ['docs/fenrir.1']))
|
||||
|
||||
def read(fname):
|
||||
return open(os.path.join(os.path.dirname(__file__), fname)).read()
|
||||
@@ -52,15 +60,13 @@ def read(fname):
|
||||
setup(
|
||||
# Application name:
|
||||
name="fenrir-screenreader",
|
||||
# Version number:
|
||||
version=fenrirVersion + '.' + packageVersion,
|
||||
# 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/",
|
||||
download_url = 'https://git.stormux.org/storm/fenrir/archive/' + fenrirVersion + '.tar.gz',
|
||||
classifiers=[
|
||||
"Programming Language :: Python",
|
||||
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
|
||||
@@ -74,17 +80,21 @@ setup(
|
||||
author_email="storm_dragon@stormux.org",
|
||||
|
||||
# Packages
|
||||
packages=find_packages('src/'),
|
||||
package_dir={'': 'src/'},
|
||||
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=data_files,
|
||||
data_files=dataFiles,
|
||||
|
||||
# Dependent packages (distributions)
|
||||
python_requires='>=3.6',
|
||||
install_requires=[
|
||||
"evdev>=1.1.2",
|
||||
"daemonize>=2.5.0",
|
||||
@@ -95,10 +105,9 @@ setup(
|
||||
"pyttsx3",
|
||||
"pyte>=0.7.0",
|
||||
],
|
||||
|
||||
)
|
||||
|
||||
if not forceSettings:
|
||||
if not forceSettingsFlag:
|
||||
print('')
|
||||
# create settings file from example if not exist
|
||||
if not os.path.isfile('/etc/fenrirscreenreader/settings/settings.conf'):
|
||||
|
@@ -98,7 +98,7 @@ def main():
|
||||
argumentParser.error(errorMsg)
|
||||
sys.exit(1)
|
||||
|
||||
if cliArgs.foreground:
|
||||
if cliArgs.foreground or cliArgs.emulated_pty:
|
||||
# Run directly in foreground
|
||||
run_fenrir()
|
||||
else:
|
||||
|
@@ -1,25 +0,0 @@
|
||||
#!/bi[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]/py[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]ho[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]
|
||||
# -*- [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]odi[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]g: u[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]f-8 -*-
|
||||
|
||||
# F[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]i[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']] TTY [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']] [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]d[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]
|
||||
# By Ch[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]y[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']], S[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]o[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]m [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]go[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']], [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]d [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]o[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]ibu[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']].
|
||||
|
||||
f[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]om [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]o[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']] impo[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']] d[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]bug
|
||||
|
||||
[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]l[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']] [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]omm[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]d():
|
||||
d[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]f __i[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]i[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]__([['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]lf):
|
||||
p[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]
|
||||
d[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]f i[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]i[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]i[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]liz[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]([['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]lf, [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]vi[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]o[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]m[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]):
|
||||
[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]lf.[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]v = [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]vi[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]o[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]m[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]
|
||||
d[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]f [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]hu[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]dow[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]([['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]lf):
|
||||
p[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]
|
||||
d[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]f g[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]ip[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]io[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]([['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]lf):
|
||||
[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]u[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']] [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]No d[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]ip[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]io[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']] fou[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]d[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]
|
||||
d[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]f [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]u[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]([['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]lf):
|
||||
#p[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]i[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]([['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]w [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']], [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]lf.[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]v[[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]][[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]wAppli[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]io[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]])
|
||||
#p[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]i[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]([['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]old [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']], [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]lf.[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]v[[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]][[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]oldAppli[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]io[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]])
|
||||
#p[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]i[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]([['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]-----------[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']])
|
||||
p[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]
|
||||
|
||||
d[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]f [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]C[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]llb[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]k([['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]lf, [['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]llb[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]k):
|
||||
p[['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']][['screen']['screen']['screen']['screen']['screen']['screen']['screen']['screen']]
|
@@ -4,5 +4,5 @@
|
||||
# Fenrir TTY screen reader
|
||||
# By Chrys, Storm Dragon, and contributers.
|
||||
|
||||
version = "2024.12.10"
|
||||
codeName = "stable"
|
||||
version = "2025.01.08"
|
||||
codeName = "testing"
|
||||
|
@@ -1,70 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Fenrir TTY screen reader
|
||||
# By Chrys, Storm Dragon, and contributers.
|
||||
# generic driver
|
||||
|
||||
import pexpect
|
||||
import shlex
|
||||
import time
|
||||
from fenrirscreenreader.core import debug
|
||||
from fenrirscreenreader.core.speechDriver import speechDriver
|
||||
|
||||
class driver(speechDriver):
|
||||
def __init__(self):
|
||||
speechDriver.__init__(self)
|
||||
def initialize(self, environment):
|
||||
self.env = environment
|
||||
try:
|
||||
self.server = pexpect.spawn('tclsh ' + self.env['runtime']['settingsManager'].getSetting('speech', 'serverPath'))
|
||||
self._isInitialized = True
|
||||
except Exception as e:
|
||||
self.env['runtime']['debug'].writeDebugOut('speechDriver:initialize:' + str(e),debug.debugLevel.ERROR)
|
||||
|
||||
def shutdown(self):
|
||||
if self.server:
|
||||
try:
|
||||
self.server.terminate()
|
||||
except Exception as e:
|
||||
self.env['runtime']['debug'].writeDebugOut('speechDriver:shutdown:self.server.terminate():' + str(e),debug.debugLevel.ERROR)
|
||||
|
||||
def speak(self,text, queueable=True):
|
||||
if not self._isInitialized:
|
||||
return
|
||||
if not queueable:
|
||||
self.cancel()
|
||||
try:
|
||||
cleanText = text
|
||||
for c in '[]{}\\|_@#^*<>\"`~^':
|
||||
cleanText.replace(c,'')
|
||||
cleanText = shlex.split(cleanText)
|
||||
for idx, word in enumerate(cleanText):
|
||||
cleanText[idx] = word
|
||||
cleanText = ' '.join(cleanText)
|
||||
cleanText = 'tts_say \"' + cleanText +'\"'
|
||||
self.server.sendline(cleanText)
|
||||
except Exception as e:
|
||||
self.env['runtime']['debug'].writeDebugOut('speechDriver:speak:self.server.sendline():' + str(e),debug.debugLevel.ERROR)
|
||||
|
||||
def cancel(self):
|
||||
if not self._isInitialized:
|
||||
return
|
||||
try:
|
||||
self.server.sendline('stop')
|
||||
except Exception as e:
|
||||
print(e)
|
||||
self.env['runtime']['debug'].writeDebugOut('speechDriver:cancel:self.server.sendline():' + str(e),debug.debugLevel.ERROR)
|
||||
|
||||
def setRate(self, rate):
|
||||
if not self._isInitialized:
|
||||
return
|
||||
try:
|
||||
self.server.sendline('tts_set_speech_rate ' + str(int(rate * 400)))
|
||||
except Exception as e:
|
||||
self.env['runtime']['debug'].writeDebugOut('speechDriver:setRate:self.server.sendline():' + str(e),debug.debugLevel.ERROR)
|
||||
|
||||
def setLanguage(self, language):
|
||||
if not self._isInitialized:
|
||||
return
|
||||
self.server.sendline('set_lang ' + language)
|
@@ -1,85 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Fenrir TTY screen reader
|
||||
# By Chrys, Storm Dragon, and contributers.
|
||||
# Espeak driver
|
||||
|
||||
from threading import Thread, Lock
|
||||
from fenrirscreenreader.core import debug
|
||||
from fenrirscreenreader.core.speechDriver import speechDriver
|
||||
|
||||
class driver(speechDriver):
|
||||
def __init__(self):
|
||||
speechDriver.__init__(self)
|
||||
self._engine = None
|
||||
def initialize(self, environment):
|
||||
self.env = environment
|
||||
def shutdown(self):
|
||||
if self._isInitialized:
|
||||
self.cancel()
|
||||
self._engine.endLoop()
|
||||
self._initialized = False
|
||||
def eventLoop(self):
|
||||
self._engine.startLoop()
|
||||
def startEngine(self):
|
||||
try:
|
||||
import pyttsx3
|
||||
if self.module != '':
|
||||
self._engine = pyttsx3.init(self.module)
|
||||
else:
|
||||
self._engine = pyttsx3.init()
|
||||
self.eventLoopThread = Thread(target=self.eventLoop)
|
||||
self._isInitialized = True
|
||||
self.eventLoopThread.start()
|
||||
except Exception as e:
|
||||
self.env['runtime']['debug'].writeDebugOut('SpeechDriver:initialize:' + str(e),debug.debugLevel.ERROR)
|
||||
|
||||
def speak(self,text, interrupt=True):
|
||||
if not self._isInitialized:
|
||||
self.startEngine()
|
||||
if not self._isInitialized:
|
||||
return
|
||||
if not interrupt:
|
||||
self.cancel()
|
||||
try:
|
||||
self._engine.setProperty('volume', self.volume)
|
||||
except Exception as e:
|
||||
self.env['runtime']['debug'].writeDebugOut('SpeechDriver:speak:volume:' + str(e),debug.debugLevel.ERROR)
|
||||
try:
|
||||
self._engine.setProperty('rate', self.rate)
|
||||
except Exception as e:
|
||||
self.env['runtime']['debug'].writeDebugOut('SpeechDriver:speak:rate:' + str(e),debug.debugLevel.ERROR)
|
||||
try:
|
||||
self._engine.setProperty('pitch', self.pitch)
|
||||
except Exception as e:
|
||||
self.env['runtime']['debug'].writeDebugOut('SpeechDriver:speak:pitch:' + str(e),debug.debugLevel.ERROR)
|
||||
if self.language != None:
|
||||
if self.language != '':
|
||||
try:
|
||||
self._engine.setProperty('voice', self.language)
|
||||
except Exception as e:
|
||||
self.env['runtime']['debug'].writeDebugOut('SpeechDriver:speak:language:' + str(e),debug.debugLevel.ERROR)
|
||||
|
||||
elif self.voice != None:
|
||||
if self.voice != '':
|
||||
try:
|
||||
self._engine.setProperty('voice', self.voice)
|
||||
except Exception as e:
|
||||
self.env['runtime']['debug'].writeDebugOut('SpeechDriver:speak:voice:' + str(e),debug.debugLevel.ERROR)
|
||||
self._engine.say(text)
|
||||
|
||||
def cancel(self):
|
||||
if not self._isInitialized:
|
||||
return
|
||||
self._engine.stop()
|
||||
|
||||
def setPitch(self, pitch):
|
||||
if not self._isInitialized:
|
||||
return
|
||||
self.pitch = pitch
|
||||
|
||||
def setRate(self, rate):
|
||||
if not self._isInitialized:
|
||||
return
|
||||
self.rate = rate
|
@@ -201,7 +201,7 @@ class FenrirConfigTool:
|
||||
|
||||
# Test voice configuration
|
||||
if self.test_voice(moduleChoice, voice):
|
||||
config = configparser.ConfigParser()
|
||||
config = configparser.ConfigParser(interpolation=None)
|
||||
config.read(self.settingsFile)
|
||||
|
||||
if 'speech' not in config:
|
||||
@@ -244,7 +244,7 @@ class FenrirConfigTool:
|
||||
|
||||
def edit_general_config(self) -> None:
|
||||
while True:
|
||||
config = configparser.ConfigParser()
|
||||
config = configparser.ConfigParser(interpolation=None)
|
||||
config.read(self.settingsFile)
|
||||
sections = config.sections()
|
||||
|
||||
|
Reference in New Issue
Block a user