
    3j                        d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ  ej                  d      Z
 G d	 d
ej                  j                        Zedk(  rddlZ ej                          yy)a  
This is an example of how converter.subConverters.SubConverter
can be subclassed in order to parse and write an unsupported format
in this case, the format, .qm, consists of a line of letters separated
by spaces:

    C E G D F

and turns each of them into a quarter note in octave 4 in 4/4.

Consult the code to see how it works.  To use, call
`converter.registerSubConverter(converter.qmConverter.QMConverter)`
then `myStream = converter.parse('quarterMusic: C E G D F')`
    )annotations)	converter)environment)meter)note)streamzconverter.qmConverterc                  0    e Zd ZdZdZdZddZddZddZy)	QMConverter)qmquarterMusic)r   Nc                @   |j                         }t        j                         }t        j                  d      }|j                  d|       |D ]9  }t        j                  |      }d|j                  _	        |j                  |       ; |j                         | _        y)a  
        Parse the data.  The number attribute is not used.

        >>> from music21.converter.qmConverter import QMConverter
        >>> qmc = QMConverter()
        >>> qmc.parseData('C D E G C')
        >>> q_stream = qmc.stream
        >>> q_stream.show('text')
        {0.0} <music21.stream.Measure 1 offset=0.0>
            {0.0} <music21.clef.TrebleClef>
            {0.0} <music21.meter.TimeSignature 4/4>
            {0.0} <music21.note.Note C>
            {1.0} <music21.note.Note D>
            {2.0} <music21.note.Note E>
            {3.0} <music21.note.Note G>
        {4.0} <music21.stream.Measure 2 offset=4.0>
            {0.0} <music21.note.Note C>
            {1.0} <music21.bar.Barline type=final>
        z4/4r      N)splitr   Partr   TimeSignatureinsertr   NotedurationquarterLengthappendmakeMeasures)selfstrDatanumberstrDataListsmbeatnObjs           J/DATA/.local/lib/python3.12/site-packages/music21/converter/qmConverter.py	parseDatazQMConverter.parseData(   su    ( mmoKKM&	AD99T?D*+DMM'HHTN  
 nn&    c                    t        |dd      5 }| j                  |j                                ddd       y# 1 sw Y   yxY w)a  
        parse a file from disk.  If QMConverter is registered, then any
        file ending in .qm will automatically be parsed.

        >>> import os
        >>> parserPath = common.getSourceFilePath() / 'converter'
        >>> testPath = parserPath / 'quarterMusicTestIn.qm'

        >>> from music21.converter.qmConverter import QMConverter
        >>> qmc = QMConverter()
        >>> qmc.parseFile(testPath)
        >>> s = qmc.stream
        >>> s.show('text')
        {0.0} <music21.stream.Measure 1 offset=0.0>
            {0.0} <music21.clef.TrebleClef>
            {0.0} <music21.meter.TimeSignature 4/4>
            {0.0} <music21.note.Note C>
            {1.0} <music21.note.Note E>
            {2.0} <music21.note.Note G>
            {3.0} <music21.note.Note F>
        {4.0} <music21.stream.Measure 2 offset=4.0>
            {0.0} <music21.note.Note E>
            {1.0} <music21.note.Note D>
            {2.0} <music21.note.Note C>
            {3.0} <music21.bar.Barline type=final>
        rutf-8encodingN)openr!   read)r   filePathr   keywordsfs        r    	parseFilezQMConverter.parseFileH   s0    6 (C'2aNN1668$ 322s	    8Ac                   d}|t         j                  d      }|j                         j                  D ]  }||j                  z   dz   } |dz  }t        |dd      5 }|j                  |       d d d        |S # 1 sw Y   |S xY w)N z.qm 
wr%   r&   )environLocalgetTempFileflattennotesnamer(   write)	r   objfmtfp
subformatsr+   musicnr,   s	            r    r8   zQMConverter.writef   s    :))%0B$$AAFFNS(E %"cG,GGEN - 	 - 	s   A::B)N)N )	__name__
__module____qualname__registerFormatsregisterInputExtensionsregisterOutputExtensionsr!   r-   r8   r?   r"   r    r
   r
   #   s#    ,O%&'@%<r"   r
   __main__N)__doc__
__future__r   music21r   r   r   r   r   Environmentr3   subConvertersSubConverterr
   r@   mainTestr?   r"   r    <module>rN      sl    #     &{&&'>?O)))66 Od zG r"   