\begin{code}
module Music.Analysis.MusicXML.Level6 (
module Music.Analysis.MusicXML.Level6,
)where
import Music.Analysis.PF
import qualified Music.Analysis.MusicXML.Level5 as Layer5
import Data.Maybe (catMaybes)
import qualified Text.XML.MusicXML as MusicXML
\end{code}
\begin{code}
type Score_Partwise =
(MusicXML.Document_Attributes, (MusicXML.Score_Header, [Part]))
type Part = (MusicXML.ID, [Measure])
type Measure = ((MusicXML.CDATA, Maybe MusicXML.Yes_No,
Maybe MusicXML.Yes_No, Maybe MusicXML.Tenths), [Music_Data])
data Music_Data =
Music_Data_1 Note
| Music_Data_2 MusicXML.Backup
| Music_Data_3 MusicXML.Forward
| Music_Data_4 MusicXML.Direction
| Music_Data_5 Attributes
| Music_Data_6 MusicXML.Harmony
| Music_Data_7 MusicXML.Figured_Bass
| Music_Data_8 MusicXML.Print
| Music_Data_9 MusicXML.Sound
| Music_Data_10 MusicXML.Barline
| Music_Data_11 MusicXML.Grouping
| Music_Data_12 MusicXML.Link
| Music_Data_13 MusicXML.Bookmark
| Music_Data_14 Annotation
deriving (Eq, Show)
type Annotation = (Maybe MusicXML.Start_Stop, MusicXML.PCDATA)
type Note = Layer5.Note
type Attributes = Layer5.Attributes
\end{code}
\begin{code}
abst_Score_Partwise :: Score_Partwise -> Layer5.Score_Partwise
abst_Score_Partwise = (id >< (id >< map abst_Part))
abst_Part :: Part -> Layer5.Part
abst_Part = id >< map abst_Measure
abst_Measure :: Measure -> Layer5.Measure
abst_Measure = id >< catMaybes . fmap abst_Music_Data
abst_Music_Data :: Music_Data -> Maybe Layer5.Music_Data
abst_Music_Data (Music_Data_1 x) = return (Layer5.Music_Data_1 (abst_Note x))
abst_Music_Data (Music_Data_2 x) = return (Layer5.Music_Data_2 x)
abst_Music_Data (Music_Data_3 x) = return (Layer5.Music_Data_3 x)
abst_Music_Data (Music_Data_4 x) = return (Layer5.Music_Data_4 x)
abst_Music_Data (Music_Data_5 x) = (Just .Layer5.Music_Data_5 .abst_Attributes) x
abst_Music_Data (Music_Data_6 x) = return (Layer5.Music_Data_6 x)
abst_Music_Data (Music_Data_7 x) = return (Layer5.Music_Data_7 x)
abst_Music_Data (Music_Data_8 x) = return (Layer5.Music_Data_8 x)
abst_Music_Data (Music_Data_9 x) = return (Layer5.Music_Data_9 x)
abst_Music_Data (Music_Data_10 x) = return (Layer5.Music_Data_10 x)
abst_Music_Data (Music_Data_11 x) = return (Layer5.Music_Data_11 x)
abst_Music_Data (Music_Data_12 x) = return (Layer5.Music_Data_12 x)
abst_Music_Data (Music_Data_13 x) = return (Layer5.Music_Data_13 x)
abst_Music_Data (Music_Data_14 x) =
return (Layer5.Music_Data_11 (abst_Annotation x))
abst_Note :: Note -> Layer5.Note
abst_Note = id
abst_Attributes :: Attributes -> Layer5.Attributes
abst_Attributes = id
abst_Annotation :: Annotation -> MusicXML.Grouping
abst_Annotation (a,ann) =
((abst_SSS a, "1", Just "annotation"), [(Nothing, ann)])
abst_SSS :: Maybe MusicXML.Start_Stop -> MusicXML.Start_Stop_Single
abst_SSS (Just MusicXML.Start_Stop_1) = MusicXML.Start_Stop_Single_1
abst_SSS (Just MusicXML.Start_Stop_2) = MusicXML.Start_Stop_Single_2
abst_SSS Nothing = MusicXML.Start_Stop_Single_3
\end{code}
\begin{code}
rep_Score_Partwise :: Layer5.Score_Partwise -> Score_Partwise
rep_Score_Partwise = (id >< (id >< fmap rep_Part))
rep_Part :: Layer5.Part -> Part
rep_Part = id >< fmap rep_Measure
rep_Measure :: Layer5.Measure -> Measure
rep_Measure = id >< map rep_Music_Data
rep_Music_Data :: Layer5.Music_Data -> Music_Data
rep_Music_Data (Layer5.Music_Data_1 x) = Music_Data_1 (rep_Note x)
rep_Music_Data (Layer5.Music_Data_2 x) = Music_Data_2 x
rep_Music_Data (Layer5.Music_Data_3 x) = Music_Data_3 x
rep_Music_Data (Layer5.Music_Data_4 x) = Music_Data_4 x
rep_Music_Data (Layer5.Music_Data_5 x) = Music_Data_5 (rep_Attributes x)
rep_Music_Data (Layer5.Music_Data_6 x) = Music_Data_6 x
rep_Music_Data (Layer5.Music_Data_7 x) = Music_Data_7 x
rep_Music_Data (Layer5.Music_Data_8 x) = Music_Data_8 x
rep_Music_Data (Layer5.Music_Data_9 x) = Music_Data_9 x
rep_Music_Data (Layer5.Music_Data_10 x) = Music_Data_10 x
rep_Music_Data (Layer5.Music_Data_11 x) =
either Music_Data_14 Music_Data_11 (rep_Annotation x)
rep_Music_Data (Layer5.Music_Data_12 x) = Music_Data_12 x
rep_Music_Data (Layer5.Music_Data_13 x) = Music_Data_13 x
rep_Note :: Layer5.Note -> Note
rep_Note = id
rep_Attributes :: Layer5.Attributes -> Attributes
rep_Attributes = id
rep_Annotation :: MusicXML.Grouping -> Either Annotation MusicXML.Grouping
rep_Annotation ((a,_,Just "annotation"),[(_,ann)]) = i1 (rep_SSS a, ann)
rep_Annotation grouping = i2 grouping
rep_SSS :: MusicXML.Start_Stop_Single -> Maybe MusicXML.Start_Stop
rep_SSS MusicXML.Start_Stop_Single_1 = Just MusicXML.Start_Stop_1
rep_SSS MusicXML.Start_Stop_Single_2 = Just MusicXML.Start_Stop_2
rep_SSS MusicXML.Start_Stop_Single_3 = Nothing
\end{code}
\begin{code}
map_Score_Partwise :: (Music_Data -> Music_Data) ->
Score_Partwise -> Score_Partwise
map_Score_Partwise f = (id >< (id >< fmap (map_Part f)))
map_Part :: (Music_Data -> Music_Data) -> Part -> Part
map_Part f = (id >< fmap (map_Measure f))
map_Measure :: (Music_Data -> Music_Data) -> Measure -> Measure
map_Measure f = (id >< fmap (map_Music_Data f))
map_Music_Data :: (Music_Data -> Music_Data) ->
Music_Data -> Music_Data
map_Music_Data f = f
\end{code}