a
    èÝEb£  ã                   @   sF  d dl mZ d dlmZ d dlmZ d dlZd dlZdZ	ej
ddd�\ZZZej
d	d
d�Zeej
de	d  dd�ƒZeej
de	d  dd�ƒZeedd„ dD ƒŽ ƒZeej
de	d  d
d�ƒZdgZede	d ƒD ]4Zed Zedd„ eeeƒƒD ƒƒd Ze e¡ qÒedd„ eD ƒƒZ[[edd„ eeƒD ƒƒZedd„ eeƒD ƒƒZedd„ eeƒD ƒƒZdd„ Z G dd„ de!ƒZ"G dd„ deƒZ#ee#dd �Z$ee#ed �Z%ee#ed �Z&ee#ee d �Z'ee#ee d �Z(ee#ee d �Z)ej*fd!d"„Z+e,d#k�rBe$ƒ Z-e- .d$¡ e- /d%¡ e- /d&¡ e- 0d'd(d)¡ e- /d*¡ e- 1¡  e2e-j3ƒ dS )+é    )ÚBasePen)Úpartial)ÚcountNé   zt x yT©ÚrealÚcFzx:%dé   zy:%dc                 c   s(   | ] }t jd td |f dd�V  qdS )zp:%d[%s]r	   Tr   N)ÚspÚsymbolsÚn)Ú.0Úw© r   úV/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/fontTools/misc/symfont.pyÚ	<genexpr>   ó    r   Z01zc:%d)r	   r   éÿÿÿÿc                 c   s"   | ]}t |d   t |  V  qdS ©r	   N)Úlast)r   Újr   r   r   r      r   ©r   c                 c   s   | ]}t |d d… ƒV  qd S )Nr   )Útuple)r   Úitemr   r   r   r      r   c                 #   s,   | ]$\‰ }t ‡ fd d„t|ƒD ƒƒV  qdS )c                 3   s.   | ]&\}}|t |  d t  ˆ |   V  qdS r   )Út)r   Úir   ©r   r   r   r      r   ú<genexpr>.<genexpr>N)r   Ú	enumerate)r   Zcoeffsr   r   r   r      s   ÿc                 #   s,   | ]$\}‰ t ‡ fd d„tdƒD ƒƒV  qdS )c                 3   s(   | ] ‰ t ‡ fd d„tˆƒD ƒƒV  qdS )c                 3   s"   | ]\}}t | ˆ  | V  qd S ©N)ÚP©r   r   Z	bernstein©r   r   r   r      r   z<genexpr>.<genexpr>.<genexpr>N©Úsumr   )r   ©Ú
bernsteinsr"   r   r      s   ÿr   é   N)r   Úrange)r   r   r   r%   r   r      s   þÿc                 c   s(   | ] \}}t d d„ t|ƒD ƒƒV  qdS )c                 s   s   | ]\}}t | | V  qd S r   )ÚCr!   r   r   r   r   #   r   r   Nr#   )r   r   r&   r   r   r   r   "   s   ÿc                 C   sT   t  t  | ¡t¡ } |  t|d t|d i¡} t  | t  |d t¡ tddf¡} | S )Nr   r	   )r
   Z	integrateZsympifyÚyÚsubsÚxÚdiffr   )ÚfZcurveXYr   r   r   Úgreen'   s    "r/   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_BezierFuncsLazyc                 C   s   || _ i | _d S r   )Ú_symfuncZ	_bezfuncs)ÚselfZsymfuncr   r   r   Ú__init__0   s    z_BezierFuncsLazy.__init__c                 C   sH   dd„ t |d ƒD ƒ}t| jt| ƒ}t | ttdƒ¡¡}t 	||¡S )Nc                 S   s   g | ]}d | ‘qS )zp%dr   )r   Údr   r   r   Ú
<listcomp>5   r   z0_BezierFuncsLazy.__missing__.<locals>.<listcomp>r	   r   )
r(   r/   r1   ÚBezierCurver
   Ú	gcd_termsÚcollectr$   r    Zlambdify)r2   r   Úargsr.   r   r   r   Ú__missing__4   s    z_BezierFuncsLazy.__missing__N)Ú__name__Ú
__module__Ú__qualname__r3   r:   r   r   r   r   r0   .   s   r0   c                   @   sV   e Zd Zi Zedd„ ƒZddd„Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚGreenPenc                 C   s*   t |ƒ}|| jvr t|ƒ| j|< | j| S r   )ÚstrÚ_BezierFuncsr0   )ZcelfÚfuncZfuncstrr   r   r   Ú_getGreenBezierFuncs>   s    
zGreenPen._getGreenBezierFuncsNc                 C   s"   t  | |¡ |  |¡| _d| _d S )Nr   )r   r3   rB   Ú_funcsÚvalue)r2   rA   Zglyphsetr   r   r   r3   E   s    zGreenPen.__init__c                 C   s
   || _ d S r   )Ú_GreenPen__startPoint©r2   Úp0r   r   r   Ú_moveToJ   s    zGreenPen._moveToc                 C   s"   |   ¡ }|| jkr|  | j¡ d S r   )Ú_getCurrentPointrE   Ú_lineTorF   r   r   r   Ú
_closePathM   s    
zGreenPen._closePathc                 C   s   |   ¡ }|| jkrt‚d S r   )rI   rE   ÚNotImplementedErrorrF   r   r   r   Ú_endPathR   s    
zGreenPen._endPathc                 C   s&   |   ¡ }|  j| jd ||ƒ7  _d S )Nr	   ©rI   rD   rC   )r2   Úp1rG   r   r   r   rJ   X   s    zGreenPen._lineToc                 C   s(   |   ¡ }|  j| jd |||ƒ7  _d S )Nr'   rN   )r2   rO   Úp2rG   r   r   r   Ú_qCurveToOne\   s    zGreenPen._qCurveToOnec                 C   s*   |   ¡ }|  j| jd ||||ƒ7  _d S )Nr   rN   )r2   rO   rP   Zp3rG   r   r   r   Ú_curveToOne`   s    zGreenPen._curveToOne)N)r;   r<   r=   r@   ÚclassmethodrB   r3   rH   rK   rM   rJ   rQ   rR   r   r   r   r   r>   :   s   

r>   )rA   c           	         s˜  t d|  |d� |D ]\}}t d| |d� qt dd|d� dD �]‰ ˆ dkr\t d	|d� n*ˆ d
krrt d|d� nˆ dkr†t d|d� dd„ tˆ d ƒD ƒ‰‡ fdd„|D ƒ}dd„ |D ƒ}‡fdd„|D ƒ}tj|ddd„ tƒ D ƒd�\}}|D ]\}}t d||f |d� qòt |d� tdd„ |D ƒ|ƒD ]\}}t d||f |d� �q.q@t d|  |d� |D ]"\}}t d|t|ƒf |d� �qdt d|d� d S )Nz‡from fontTools.pens.basePen import BasePen

class %s(BasePen):

	def __init__(self, glyphset=None):
		BasePen.__init__(self, glyphset)
)Úfilez		self.%s = 0aN  
	def _moveTo(self, p0):
		self.__startPoint = p0

	def _closePath(self):
		p0 = self._getCurrentPoint()
		if p0 != self.__startPoint:
			self._lineTo(self.__startPoint)

	def _endPath(self):
		p0 = self._getCurrentPoint()
		if p0 != self.__startPoint:
			# Green theorem is not defined on open contours.
			raise NotImplementedError
Ú )ÚendrT   )r	   r'   r   r	   zH
	def _lineTo(self, p1):
		x0,y0 = self._getCurrentPoint()
		x1,y1 = p1
r'   z^
	def _qCurveToOne(self, p1, p2):
		x0,y0 = self._getCurrentPoint()
		x1,y1 = p1
		x2,y2 = p2
r   zn
	def _curveToOne(self, p1, p2, p3):
		x0,y0 = self._getCurrentPoint()
		x1,y1 = p1
		x2,y2 = p2
		x3,y3 = p3
c                 S   s4   i | ],}t d ƒD ]}t| | ttg| | “qqS )r'   )r(   r    ÚXÚY)r   r   r   r   r   r   Ú
<dictcomp>¢   r   z!printGreenPen.<locals>.<dictcomp>c                    s   g | ]\}}t |tˆ  ƒ‘qS r   )r/   r6   )r   Únamer.   r   r   r   r5   £   r   z!printGreenPen.<locals>.<listcomp>c              	   S   s"   g | ]}t  | ttd ƒ¡¡‘qS )r   )r
   r7   r8   r$   r    ©r   r.   r   r   r   r5   ¤   r   c                    s   g | ]}|  ˆ ¡‘qS r   ©r+   r[   r\   r   r   r5   ¥   r   Úbasicc                 s   s   | ]}t  d | ¡V  qdS )zr%dN)r
   ÚSymbol)r   r   r   r   r   r   ¨   r   z printGreenPen.<locals>.<genexpr>)Zoptimizationsr   z			%s = %sc                 S   s   g | ]}|d  ‘qS r   r   r[   r   r   r   r5   ¬   r   z		self.%s += %szj
if __name__ == '__main__':
	from fontTools.misc.symfont import x, y, printGreenPen
	printGreenPen('%s', [z		      ('%s', %s),z			     ]))Úprintr(   r
   Zcser   Úzipr?   )	ZpenNameÚfuncsrT   rZ   r.   ZgreensZdefsÚexprsrD   r   )r   r+   r   ÚprintGreenPeno   sZ    úùò
üûúþ

ýýrc   Ú__main__)éd   re   )re   éÈ   )rf   rf   )rf   éú   )é,  rh   )rg   i^  )rf   re   )4ZfontTools.pens.basePenr   Ú	functoolsr   Ú	itertoolsr   Zsympyr
   Úsysr   r   r   r,   r*   r   r   rW   rX   r`   r    r)   ZBinomialCoefficientr(   r   r   ÚlenÚthisÚappendr   ZBernsteinPolynomialr6   ZBezierCurveCr/   Údictr0   r>   ZAreaPenZ
MomentXPenZ
MomentYPenZMomentXXPenZMomentYYPenZMomentXYPenÚstdoutrc   r;   ÚpenZmoveToZlineToZcurveToZ	closePathr_   rD   r   r   r   r   Ú<module>   s\   þýþ-I




