o
    ¼Çh$*  ã                   @   s¤   d dl mZ ddlZedƒZedƒZedƒZe d¡Ze d¡Z	e d	¡Z
e d
¡Zdd„ Zde	fde	fde	fde
fde
fde	fde	ffZdd„ Zdefdd„ZdS )é   )ÚEllipticalArcé    NÚMmZzLlHhVvCcSsQqTtAaÚAaÚ
MZLHVCSQTAz([MmZzLlHhVvCcSsQqTtAa])z\[-+]?(?:(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:[eE][-+]?[0-9]+)?|(?:\.[0-9]+(?:[eE][-+]?[0-9]+)?))z^[01]z[, 	]c                 c   s–    d }t  | ¡D ]@}|tv r|tv r|nd }|V  q|r=z	t|ƒE d H  W q ty< } ztd|› |› dƒ|‚d }~ww t |¡D ]}|V  qBqd S )NzInvalid arc command: 'ú')Ú
COMMAND_REÚsplitÚCOMMANDSÚARC_COMMANDSÚ_tokenize_arc_argumentsÚ
ValueErrorÚFLOAT_REÚfindall)ÚpathdefÚarc_cmdÚxÚeÚtoken© r   úp/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/fontTools/svgLib/path/parser.pyÚ_tokenize_path"   s$   €€ÿÿôr   ÚrxÚryzx-axis-rotationzlarge-arc-flagz
sweep-flagr   Úyc           	      c   sÚ    dd„ t  | ¡D ƒ}|std| › dƒ‚| ¡  d}|r_| ¡ }t| \}}| |¡}|s8td|› d|›ƒ‚| ¡ \}}|||… V  ||d … }|rR| |¡ |dkrYd}n|d	7 }|s|dkrktd| › dƒ‚d S )
Nc                 S   s   g | ]}|r|‘qS r   r   )Ú.0Úsr   r   r   Ú
<listcomp>@   s    z+_tokenize_arc_arguments.<locals>.<listcomp>zNot enough arguments: 'r   r   zInvalid argument for 'z' parameter: é   r   )	ÚSEPARATOR_REr	   r   ÚreverseÚpopÚARC_ARGUMENT_TYPESÚsearchÚspanÚappend)	ÚarcdefÚraw_argsÚiÚargÚnameÚpatternÚmatchÚjÚkr   r   r   r   ?   s0   €

íÿr   )r   r   c              	   C   sL  t |Ž }tt| ƒƒ}| ¡  d}d}d}t|dƒ}|r™|d tv r1|}	| ¡ }|tv }
| ¡ }n|du rEt	d| t
|  ¡ ƒt
|ƒ f ƒ‚|}	|dkr}| ¡ }| ¡ }t|ƒt|ƒd  }|
rb|}n||7 }|durn| ¡  | |j|jf¡ |}d}n|dkrš||krŽ| |j|jf¡ | ¡  |}d}d}ný|dkrÃ| ¡ }| ¡ }t|ƒt|ƒd  }|
s¶||7 }| |j|jf¡ |}nÔ|d	krè| ¡ }t|ƒ|jd  }|
sÛ||j7 }| |j|jf¡ |}n¯|d
kr| ¡ }|jt|ƒd  }|
s||jd 7 }| |j|jf¡ |}n†|dkrht| ¡ ƒt| ¡ ƒd  }t| ¡ ƒt| ¡ ƒd  }t| ¡ ƒt| ¡ ƒd  }|
sO||7 }||7 }||7 }| |j|jf|j|jf|j|jf¡ |}|}n/|dkrº|	dvru|}n|| | }t| ¡ ƒt| ¡ ƒd  }t| ¡ ƒt| ¡ ƒd  }|
s¢||7 }||7 }| |j|jf|j|jf|j|jf¡ |}|}nÝ|dkrùt| ¡ ƒt| ¡ ƒd  }t| ¡ ƒt| ¡ ƒd  }|
sæ||7 }||7 }| |j|jf|j|jf¡ |}|}nž|dkr4|	dvr|}n|| | }t| ¡ ƒt| ¡ ƒd  }|
s!||7 }| |j|jf|j|jf¡ |}|}nc|dkr—tt| ¡ ƒƒ}tt| ¡ ƒƒ}t| ¡ ƒ}tt| ¡ ƒƒ}tt| ¡ ƒƒ}t| ¡ ƒt| ¡ ƒd  }|
st||7 }|r†| ||||||j|jf¡ n||||||||ƒ}| |¡ |}|s|dur¤| ¡  dS dS )a_  Parse SVG path definition (i.e. "d" attribute of <path> elements)
    and call a 'pen' object's moveTo, lineTo, curveTo, qCurveTo and closePath
    methods.

    If 'current_pos' (2-float tuple) is provided, the initial moveTo will
    be relative to that instead being absolute.

    If the pen has an "arcTo" method, it is called with the original values
    of the elliptical arc curve commands:

    .. code-block::

        pen.arcTo(rx, ry, rotation, arc_large, arc_sweep, (x, y))

    Otherwise, the arcs are approximated by series of cubic Bezier segments
    ("curveTo"), one every 90 degrees.
    NÚarcToéÿÿÿÿz-Unallowed implicit command in %s, position %sÚMy              ð?ÚLÚZÚHÚVÚCÚSÚCSÚQÚTÚQTÚA)ÚcomplexÚlistr   r    Úhasattrr
   r!   Ú	UPPERCASEÚupperr   Úlenr	   ÚfloatÚendPathÚmoveToÚrealÚimagÚlineToÚ	closePathÚcurveToÚqCurveToÚabsÚboolÚintr/   Údraw)r   ÚpenÚcurrent_posÚ	arc_classÚelementsÚ	start_posÚcommandÚlast_controlÚ
have_arcToÚlast_commandÚabsoluter   r   ÚposÚcontrol1Úcontrol2ÚendÚcontrolr   r   ÚrotationÚ	arc_largeÚ	arc_sweepÚarcr   r   r   Ú
parse_path_   s  

ÿÿ





ý




ý




ú	ÿ
 Â 
Aÿrc   )rb   r   ÚreÚsetr
   r   r@   Úcompiler   r   ÚBOOL_REr   r   r"   r   rc   r   r   r   r   Ú<module>   s,   	
ÿ

ù 