module Derive.Scale.Symbols where
import qualified Data.Text as Text
import qualified Ui.Symbol as Symbol
import qualified Perform.Pitch as Pitch
import Global
symbols :: [Symbol.Symbol]
symbols :: [Symbol]
symbols = [Symbol]
dotted_numbers forall a. Semigroup a => a -> a -> a
<> [Symbol]
staff_symbols forall a. Semigroup a => a -> a -> a
<> [Symbol]
工尺譜
dotted_number :: Int -> Int -> Pitch.Note
dotted_number :: Int -> Int -> Note
dotted_number Int
num Int
oct
| Int
oct forall a. Eq a => a -> a -> Bool
== Int
0 = Text -> Note
Pitch.Note Text
nums
| Int
oct forall a. Ord a => a -> a -> Bool
< Int
0 = Text -> Note
Pitch.Note forall a b. (a -> b) -> a -> b
$ Text
"`" forall a. Semigroup a => a -> a -> a
<> Text
nums forall a. Semigroup a => a -> a -> a
<> Int -> Text -> Text
Text.replicate (forall a. Num a => a -> a
abs Int
oct) Text
"." forall a. Semigroup a => a -> a -> a
<> Text
"`"
| Bool
otherwise = Text -> Note
Pitch.Note forall a b. (a -> b) -> a -> b
$ Text
"`" forall a. Semigroup a => a -> a -> a
<> Text
nums forall a. Semigroup a => a -> a -> a
<> Int -> Text -> Text
Text.replicate Int
oct Text
"^" forall a. Semigroup a => a -> a -> a
<> Text
"`"
where nums :: Text
nums = forall a. Show a => a -> Text
showt Int
num
dot :: Symbol.Glyph
dot :: Glyph
dot = Text -> Glyph
Symbol.glyph Text
"•"
dot_above :: Text -> Symbol.Symbol
dot_above :: Text -> Symbol
dot_above Text
s = Text -> Bool -> [Glyph] -> Symbol
Symbol.Symbol (Text
s forall a. Semigroup a => a -> a -> a
<> Text
"^") Bool
True
[Text -> Glyph
Symbol.glyph Text
s, Int -> (Double, Double) -> Glyph -> Glyph
Symbol.glyph_at Int
0 (Double
0.5, -Double
0.3) Glyph
dot]
dot2_above :: Text -> Symbol.Symbol
dot2_above :: Text -> Symbol
dot2_above Text
s = Text -> Bool -> [Glyph] -> Symbol
Symbol.Symbol (Text
s forall a. Semigroup a => a -> a -> a
<> Text
"^^") Bool
True
[Text -> Glyph
Symbol.glyph Text
s,
Int -> (Double, Double) -> Glyph -> Glyph
Symbol.glyph_at Int
0 (-Double
0.3, -Double
0.3) Glyph
dot,
Int -> (Double, Double) -> Glyph -> Glyph
Symbol.glyph_at Int
0 (Double
0.5, -Double
0.3) Glyph
dot]
dot_below :: Text -> Symbol.Symbol
dot_below :: Text -> Symbol
dot_below Text
s = Text -> Bool -> [Glyph] -> Symbol
Symbol.Symbol (Text
s forall a. Semigroup a => a -> a -> a
<> Text
".") Bool
True
[Text -> Glyph
Symbol.glyph Text
s, Int -> (Double, Double) -> Glyph -> Glyph
Symbol.glyph_at Int
0 (Double
0.5, Double
0.3) Glyph
dot]
dot2_below :: Text -> Symbol.Symbol
dot2_below :: Text -> Symbol
dot2_below Text
s = Text -> Bool -> [Glyph] -> Symbol
Symbol.Symbol (Text
s forall a. Semigroup a => a -> a -> a
<> Text
"..") Bool
True
[ Text -> Glyph
Symbol.glyph Text
s
, Int -> (Double, Double) -> Glyph -> Glyph
Symbol.glyph_at Int
0 (-Double
0.3, Double
0.3) Glyph
dot
, Int -> (Double, Double) -> Glyph -> Glyph
Symbol.glyph_at Int
0 (Double
0.5, Double
0.3) Glyph
dot
]
dotted_numbers :: [Symbol.Symbol]
dotted_numbers :: [Symbol]
dotted_numbers = forall a b. (a -> b) -> [a] -> [b]
map Text -> Symbol
dot_above [Text]
cs forall a. Semigroup a => a -> a -> a
<> forall a b. (a -> b) -> [a] -> [b]
map Text -> Symbol
dot2_above
[Text]
cs forall a. Semigroup a => a -> a -> a
<> forall a b. (a -> b) -> [a] -> [b]
map Text -> Symbol
dot_below [Text]
cs forall a. Semigroup a => a -> a -> a
<> forall a b. (a -> b) -> [a] -> [b]
map Text -> Symbol
dot2_below [Text]
cs
where
cs :: [Text]
cs = forall a b. (a -> b) -> [a] -> [b]
map forall a. Show a => a -> Text
showt [Integer
0..Integer
9]
staff_symbols :: [Symbol.Symbol]
staff_symbols :: [Symbol]
staff_symbols =
[ Text -> [Glyph] -> Symbol
Symbol.symbol Text
"#" [Text -> Int -> Glyph
g Text
"\x266f" Int
1]
, Text -> [Glyph] -> Symbol
Symbol.symbol Text
"##" [Text -> Int -> Glyph
g Text
"\x1d12a" Int
10]
, Text -> [Glyph] -> Symbol
Symbol.symbol Text
"b" [Text -> Int -> Glyph
g Text
"\x266d" Int
1]
, Text -> [Glyph] -> Symbol
Symbol.symbol Text
"bb" [Text -> Int -> Glyph
g Text
"\x1d12b" Int
4]
, Text -> [Glyph] -> Symbol
Symbol.symbol Text
"n" [Text -> Int -> Glyph
g Text
"\x266e" Int
1]
]
where g :: Text -> Int -> Glyph
g Text
str Int
size = (Text -> Glyph
Symbol.glyph Text
str) { glyph_size :: Int
Symbol.glyph_size = Int
size }
工尺譜 :: [Symbol.Symbol]
工尺譜 :: [Symbol]
工尺譜 =
[ Text -> Text -> Symbol
Symbol.simple Text
"si" Text
"士"
, Text -> Text -> Symbol
Symbol.simple Text
"e" Text
"下"
, Text -> Text -> Symbol
Symbol.simple Text
"che" Text
"ㄨ"
, Text -> Text -> Symbol
Symbol.simple Text
"gong" Text
"工"
, Text -> Text -> Symbol
Symbol.simple Text
"liu" Text
"六"
, Text -> Text -> Symbol
Symbol.simple Text
"kou" Text
"口"
, Text -> Text -> Symbol
Symbol.simple Text
"upstroke" Text
"㇀"
, Text -> Text -> Symbol
Symbol.simple Text
"L" Text
"㇄"
, Text -> [Glyph] -> Symbol
placed Text
"dagger" [(Text -> Glyph
Symbol.glyph Text
"†") { glyph_size :: Int
Symbol.glyph_size = Int
4 }]
, Text -> [Glyph] -> Symbol
placed Text
"wu1"
[ Text -> (Double, Double) -> Glyph
glyph_at Text
wu (Double
0, Double
0)
, Text -> (Double, Double) -> Glyph
glyph_at Text
dian (-Double
0.5, Double
0)
]
, Text -> [Glyph] -> Symbol
placed Text
"wu666"
[ Text -> (Double, Double) -> Glyph
glyph_at Text
wu (Double
0, Double
0)
, Text -> (Double, Double) -> Glyph
glyph_at Text
dian (-Double
0.5, Double
0)
, Text -> (Double, Double) -> Glyph
glyph_at Text
dian (Double
0, Double
0.5)
]
, Text -> [Glyph] -> Symbol
placed Text
"wu866"
[ Text -> (Double, Double) -> Glyph
glyph_at Text
wu (Double
0, Double
0)
, Text -> (Double, Double) -> Glyph
glyph_at Text
dian (-Double
0.5, Double
0.2)
, Text -> (Double, Double) -> Glyph
glyph_at Text
dian (-Double
0.5, -Double
0.2)
]
, Text -> Text -> Symbol
Symbol.simple Text
"ling" Text
"○"
, Text -> Text -> Symbol
Symbol.simple Text
"dian" Text
dian
]
where
placed :: Text -> [Glyph] -> Symbol
placed Text
name [Glyph]
glyphs = Text -> Bool -> [Glyph] -> Symbol
Symbol.Symbol Text
name Bool
True [Glyph]
glyphs
glyph_at :: Text -> (Double, Double) -> Glyph
glyph_at Text
str (Double, Double)
align = (Text -> Glyph
Symbol.glyph Text
str) { glyph_align :: (Double, Double)
Symbol.glyph_align = (Double, Double)
align }
dian :: Text
dian = Text
"、"
wu :: Text
wu = Text
"ㄨ"