
    'jn                    .   d dl mZ d dlmZmZ  G d de          ZdZ ed          Z ed          Z	 ed          Z
 ed	          Z ed
          Z ed          Z ed          ZdZd)dZg dZd*dZd+dZd,dZd-dZd.dZd/d0d%Z	 d1d2d'Zd(S )3    )annotations)
NamedTupleSequencec                  $    e Zd ZU ded<   ded<   dS )CommandstrnamezSequence[bytes]argsN)__name__
__module____qualname____annotations__     V/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/addons/hpgl2/tokenizer.pyr   r      s'         IIIr   r      ;%-"ABZ   sbytesiintreturnc                   	 | |         t           k    rdS | |dz            t          k    rdS d}| |dz            t          k    r|dz  }d}d| |dz            cxk     rdk     rn n| |dz            t          k    r|S n# t          $ r Y nw xY wdS )	Nr               /   4   r   )ESCAPEPERCENTMINUSCHAR_B
IndexError)r   r   lengths      r   #get_enter_hpgl2_mode_command_lengthr-   !   s    Q46>>1QU8w1QU8uFAF!a%2!AE(f"4"4M   1s   A8 A8 AA8 8
BB)s   BPINs   BP;INs   INPSs   IN;PSs   INDFs   IN;DFbboolc                J    t           D ]}|                     |          r dS dS )NTF)KNOWN_START_SEQUENCES
startswith)r.   start_sequences     r   has_known_start_sequencer4   6   s6    /  <<'' 	44	5r   startc                    	 	 |                      d|          }n# t          $ r t          |           cY S w xY wt          | |          }|r||z   S |dz  }T)NTs   %r#   )index
ValueErrorlenr-   )r   r5   r7   r,   s       r   find_hpgl2_entry_pointr:   =   sz    	GGE5))EE 	 	 	q66MMM	4Q>> 	"6>!
s    66list[Command]c                R   	
 t           d	
 fd}d
 fd	dfd
}g t                     
t                     rd}nt           d          }|
k     rˉ |         }|}|t          k    rt           |          },|dk    r|dz  }8|dz   }|
k    r | |d                    nz ||         }|dk    r 	|t
                    }|dz  }n|dk    r 	|          }n ||          } | ||                    |
k     r |         t
          k    r|dz  }|
k     ˉS )a4  Low level plot file parser, extracts the HPGL/2 from the byte stream `b`.

    .. Important::

        This parser expects the "Enter HPGL/2 mode" escape sequence to recognize
        HPGL/2 commands. The sequence looks like this: ``[ESC]%1B``, multiple variants
        of this sequence are supported.

    r   r   r   c                    | k     rc|          }|t           k    r | dz   t                     } n0t          |cxk    rt          k    sn |t          k    s|t          k    rn| dz  } | k     c| S Nr!   )
QUOTE_CHARCHAR_ACHAR_Z	SEMICOLONr'   )r   c	find_markr,   r   s     r   find_terminatorz'hpgl2_commands.<locals>.find_terminatorU   s    &jj!AJIa!eZ00A''''''''ANNa6kkFA &jj r   markc                `    | k     r#|          |k    r| dz  } | k     r|          |k    | dz   S r>   r   )r   rF   r,   r   s     r   rD   z!hpgl2_commands.<locals>.find_mark_   sA    &jjQqTT\\FA &jjQqTT\\1ur   r.   r   Nonec                    | d d         dk    r&t          |           dk    r
| d         d S t          d S                     t          |                      d S )Nr#   s   DT)r9   DEFAULT_TEXT_TERMINATORappendmake_command)r.   commandstext_terminators    r   append_commandz&hpgl2_commands.<locals>.append_commandd   sW    RaR5E>>1vvzz"#A$"9OOLOO,,,,,r   r       r!   r#   Ns   PEs   LB)r   r   r   r   )r   r   rF   r   r   r   )r.   r   r   rH   )rJ   r9   r4   r:   r'   rB   )r   rE   rO   r7   charr5   index_plus_2commandrM   rD   r,   rN   s   `       @@@@r   hpgl2_commandsrT   I   s    .O             
- - - - - - - !HVVF"" -&q!,,
&..x6>> +1e44E2::QJEqy6!!N1UVV9%%%E,&'eIlI66EQJEEIlO<<EE $OL11Equ~&&&6>>ah)33QJEC &..D Or   cmdc                P   | st          dt                                S | d d                                         }|dk    r#t          d | dd          D                       f}n4t          d | dd                              d          D                       }t          ||          S )NNOOPr#   PEc                    g | ]
}|d k    |S )rP   r   ).0rC   s     r   
<listcomp>z make_command.<locals>.<listcomp>   s    444QQVVqVVVr   c              3     K   | ]}|V  d S )Nr   )rZ   r   s     r   	<genexpr>zmake_command.<locals>.<genexpr>   s"      441Q444444r      ,)r   tupledecoder   split)rU   r	   r
   s      r   rL   rL      s     (vuww'''rr7>>Dt||44#abb'44455744ABBd 3 3444444r   decimal_placesc                &    t          | dz            S )Ngp=
ף
@)round)rb   s    r   fractional_bitsre      s    $&'''r   @   valuefloat	frac_bitsbasec                   |r| d|z  z  } t          |           }nt          |           }|dk    r|dz  }nt          |          dz  dz   }t                      }||k    r1t          ||          \  }}|                    d|z              ||k    1|dk    r|                    d|z              n|                    d|z              t          |          S )Nr!   r   r#   ?   rf      _   )rd   abs	bytearraydivmodrK   r   )rg   ri   rj   xcharsrs         r   	pe_encoderu      s     i%LL%LLAvv	QFFQJNKKE
t))a1R!V t)) rzzS1WR!V<<r   tuple[list[float], int]c                   fd}d|z  }dk    rd}nd}g }g t          |t          |                     D ]}| |         }	|	dk     r||fc S |	|k    r`                    |	|z
              |            }
|r|                    |
|z             Y|                    t          |
                     |                    |	dz
             |t          |           fS )Nc                                                       d} D ]
}| z  |z   }                                  | dz  r| dz
   } | dz	  } | S )Nr   r!   )reverseclear)rr   frj   factorss     r   _decodezpe_decode.<locals>._decode   sh     	 	AD1AAq5 	a%AFr   r!   rf   rm   rn   rl   )ranger9   rK   rh   )r   ri   rj   r5   r}   n
terminatorvaluesr7   rg   rr   r|   s     `        @r   	pe_decoder      s   	 	 	 	 	 	 	
YArzz


FGuc!ff%% ' '%2::5=   JNN5:-...		A (a!e$$$$eAhh''''NN52:&&&&3q66>r   N)r   r   r   r   r   r   )r.   r   r   r/   )r   r   r5   r   r   r   )r   r   r   r;   )rU   r   r   r   )rb   r   r   r   )r   rf   )rg   rh   ri   r   rj   r   r   r   )r   rf   r   )r   r   ri   r   r5   r   r   rv   )
__future__r   typingr   r   r   r'   ordrB   r(   r)   r?   r@   r*   rA   rJ   r-   r1   r4   r:   rT   rL   re   ru   r   r   r   r   <module>r      s   # " " " " " ' ' ' ' ' ' ' '    j   
 
CHH	
#c((CSXX
	S	S	S    $ RQQ    	 	 	 	M M M M`   ( ( ( (    . 9:" " " " " " "r   