
    BPc.                         d Z ddlmZmZmZ ddlZddlZddlmZ	  G d d          Z
 G d dej                  Zed	k    r e                                             dS dS )
zK
This basic extension allows you to automatically draw guides in inkscape.
    )cossinsqrtN)inkex_gettextc                   2    e Zd ZdZdej        ddfdZd ZdS )
GuidesOptsz8Manager of current-page-related values for GuidesCreatorsvgreturnNc                     |j                                         | _        |                                | _        |j        |j        f| j        dd<   |                     d           d S )N         )	namedview	get_pagespagesget_viewboxviewboxviewbox_widthviewbox_heightset_page)selfr	   s     0/usr/share/inkscape/extensions/guides_creator.py__init__zGuidesOpts.__init__*   s]     ],,..
((-s/AAQqSa    c                 V   || _         |dz
  }|t          | j                  k     rX| j        |         j        | j        |         j        f| _        | j        |         j        | _        | j        |         j        | _        ny|dk    rd| j        s| j        dd         n#| j        d         j        | j        d         j        f| _        | j        d         | _        | j        d         | _        nt          d          t          | j        d          dfdt          | j        d          ff| _        dS )zEUpdate guide origin and width/height based on page number (1-indexed)r   r   Nr      zInvalid page numberr   )
pagenumberlenr   xypage_originwidthheightr   
ValueErrorroundorientation)r   r   s     r   r   zGuidesOpts.set_page3   s   $!^
DJ'' $
: 6 8$*Z:P:RSDJ/5DJ*Z07DKK1__ z8RaR  jmotz!}7 
 aDJ,q/DKK2333 #4;22A6E$*a<P<P8QRr   )__name__
__module____qualname____doc__inkexSvgDocumentElementr   r    r   r   r   r   &   sS        BBE4     S S S S Sr   r   c                   V     e Zd ZdZd Z fdZd Zd Zd Zd Z	dd	Z
ddZd Z xZS )GuidesCreatorz1Create a set of guides based on the given optionsc                    |                     d|                                 dd           |                     d|                     d          dd	           |                     d
dd           |                     dt          dd	           |                     dt          dd	           |                     dt          j        d           |                     dt          j        dd	           |                     dt          j        dd	           |                     dt          j        dd	           |                     dt          j        dd	           |                     d dg d!d"#           |                     d$t          d%d&	           |                     d't          d%d(	           |                     d)t          d*d+	           |                     d,t          d*d-	           |                     d.t          d*d/	           |                     d0t          d*d1	           |                     d2t          j        d3           |                     d4t          j        d5d6           d S )7Nz--pageszPOn which pages the guides are created, e.g. "1, 2, 4-6, 8-". Default: All pages.z1-)typehelpdefaultz--tabgenerateregular_guideszType of guides to create.)r1   r3   r2   z--guides_presetcustomPreset)r3   r2   z--vertical_guidesr   zVertical guidesz--horizontal_guidesr   zHorizontal guidesz--start_from_edgeszStart from edges)r1   r2   z--ulFzUpper left cornerz--urzUpper right cornerz--llzLower left cornerz--lrzLower right cornerz--margins_preset)r6   	book_left
book_rightbook_alternating_rightbook_alternating_leftzMargins preset)r3   choicesr2   z--vertr   zVert subdivisionsz--horzzHorz subdivisionsz--header_margin
   zHeader marginz--footer_marginzFooter marginz--left_marginzLeft marginz--right_marginzRight marginz--deletezDelete existing guidesz--nodupzOmit duplicated guidesT)add_argumentarg_number_ranges
arg_methodintr+   Boolean)r   parss     r   add_argumentszGuidesCreator.add_argumentsM   s   ''))" 	 	
 	
 	
 	,,$,	 	 	
 	
 	
 	+XHMMMc1;L 	 	
 	
 	
 	!Q=P 	 	
 	
 	
 	 u};M 	 	
 	
 	
 	<O 	 	
 	
 	
 	<P 	 	
 	
 	
 	<O 	 	
 	
 	
 	<P 	 	
 	
 	
 	   " 	 	
 	
 	
 	(a>QRRR(a>QRRR+#rXXX+#rXXX/RmTTT*b~VVV*5=?WXXXEM0HRV 	 	
 	
 	
 	
 	
r   c                 V    t                                                       d | _        d S )N)superr   store)r   	__class__s    r   r   zGuidesCreator.__init__   s$    !%


r   c                    | j         j        r5| j        j                                        D ]}|                                 t          | j                  | _        | j                             t          t          | j        j        
                                          d                    D ]5}| j                            |           | j                                          6d S )Nr   )optionsdeleter	   r   
get_guidesr   rG   r   maxr   r   r   tab)r   guideis      r   effectzGuidesCreator.effect   s    < 	+6688  ))
##CDH,>,H,H,J,J(K(KQ$O$OPP 	 	AJ"""L	 	r   c                    | j         j        }| j         j        }|dk    rT| j         j        }| j         j        }|r|pd}|pd}|                     ||d           |                     ||d           dS |dk    rdt          d          z   dz  }t          d|z  dd|z  z
  gdz  g d	          D ]X\  }}|| j        j	        | j        j
        f|         z  }|                     |dk    rd
|fn|d
f| j        j        |                    Y|r2|                     ddd           |                     ddd           dS dS d|v rt          |                    d          d
                   }t          |                    d          d                   }|                     ||d           |                     ||d           dS t          j        t#          d                              |                    )z Generate a regular set of guidesr6   r   TvertFgolden   r   r   r   r   r   r   ;zUnknown guide preset: {}N)rJ   guides_presetstart_from_edgeshorizontal_guidesvertical_guidesdraw_guidesr   ziprG   r"   r#   
draw_guider&   rA   splitr+   AbortExtension_format)	r   preset
from_edges
h_division
v_divisiongoldfractionindexpositions	            r   generate_regular_guidesz%GuidesCreator.generate_regular_guides   s9   +\2
X7J5J -'_1
'_1
Z$???Z%@@@@@xQK1$D#&D!a$h,'?!'C\\\#R#R  %#tz'79J&KE&RR%*aZZQMMh]J*51   
  5  Du 555  Dt 444445 5
 F]]V\\#..q122JV\\#..q122JZ$???Z%@@@@@&q)C'D'D'K'KF'S'STTTr   c                    d\  }}| j         j        | j         j        }}d}||ft          |          t          |          ff||ft	          |           t	          |          ff||ft          |           t          |          ff||ft	          |           t	          |           ffd}|                                D ]3\  }\  }}	t          | j        |          r|                     ||	           4dS )zGenerate diagonal guides)r   r   -   )ulurlllrN)	rG   r"   r#   r   r   itemsgetattrrJ   r_   )
r   leftbottomrighttopanglecorner_guideskeyrk   r&   s
             r   generate_diagonal_guidesz&GuidesCreator.generate_diagonal_guides   s    fj&
(9s  #;USZZ 893<3u::+s5zz!:;&>SZZKU#<=6?c%jj[3u::+$>?	
 
 -:,?,?,A,A 	7 	7(C((Kt|S)) 7+666	7 	7r   c           	         | j         j        r|                     d| j        j        f| j        j        d                    |                     | j        j        df| j        j        d                    |                     d| j        j        f| j        j        d                    |                     | j        j        df| j        j        d                    | j         j        dk    rd t          | j        j        | j         j	        dz
  z  | j        j        | j        j        | j        j        | j         j
        dz
  z  f| j         j	        | j         j        | j         j        | j         j
        f          D             }ddd}| j         j        }|                    d          r| j        j        d	z  d
|v rdndk    rdnd}||v r?d t          ||         d	| j        j        gz  d	| j        j        gz  z             D             }d t          || j        j        dd| j        j        g          D             \  }}}}t          |g d          D ]:\  }}	||                     |	dk    r|dfnd|f| j        j        |	                    ;||z
  }
||z
  }t          | j         j        | j         j        fd||f          D ](\  }}}|dk    r|                     ||
f|d||           )dS )zGenerate margin guidesr   r   r6   c                 H    g | ]\  }}t          |          d k    r||z  nd S )r   N)rA   .0rP   js      r   
<listcomp>z2GuidesCreator.generate_margins.<locals>.<listcomp>   sB       Aq a&&A++Q4  r   )qq?qq?r   r   )r   r   gqq?g98?)r8   r9   book_alternatingr   ru   r8   r9   c                     g | ]
\  }}||z  S r-   r-   r   s      r   r   z2GuidesCreator.generate_margins.<locals>.<listcomp>   s0       Aq A  r   c                     g | ]	\  }}|p|
S r-   r-   r   s      r   r   z2GuidesCreator.generate_margins.<locals>.<listcomp>  s-     /
 /
 /
q!AF/
 /
 /
r   rW   N)FT)edgesshiftrT   )rJ   rZ   r_   rG   r#   r&   r"   margins_presetr^   header_marginright_marginfooter_marginleft_margin
startswithr   horzrT   _draw_guides)r   marginsbook_optionsr   y_headery_footerx_leftx_rightlengthrk   rectangle_heightrectangle_widthsubdivrT   
begin_froms                  r   generate_marginszGuidesCreator.generate_margins   sj    <( 	NOOQ
 12DJ4J14MNNNOOTZ-q14:3I!3LMMM OOQ
 12DJ4J14MNNNOOTZ-q14:3I!3LMMM<&(22 
)T\-G!-KL
)
(
(DL,E,IJ	 2201	   G& 66
 
 4$$%788 	 :(1,f6N6NTUVV !  \))  0*++a4:3C2D.DD   G/
 /
"7TZ->1djFV,WXX/
 /
 /
+(FG !$G\\\ : : 	 	FH~OO'1}}1f+
&x0    $h.!F*(+\ 12MHfCU)
 )
 
	 
	$FD* {{!!$&67$ "   	
	 
	r   Fc                 `    |                      | j        j        | j        j        f|||          S )z#Draw a vertical or horizontal linesrS   )r   rG   r"   r#   )r   divisionr   rT   s       r   r]   zGuidesCreator.draw_guides   s7      Ztz018U ! 
 
 	
r   r   c                    |dk    rd S fd}t          t          |                    }t          d|dz
  d|z  z             D ]}|t                              |z  }	t          |	||z
  |	z  z   |z   d          }
t          |t                             d          }|                      ||
           ||                     d S )Nr   c                     r| dfnd| fS )Nr   r-   )r   rT   s    r   ortz'GuidesCreator._draw_guides.<locals>.ort+  s    !-Aq661v-r   r   r   r   )rA   boolranger%   r_   )r   vectorr   r   r   rT   r   varr   divrk   r&   s        `      r   r   zGuidesCreator._draw_guides&  s    q==F	. 	. 	. 	. 	. $u++q(Q,S011 	= 	=AT$ZZ(83CSAGs?2U:A>>HtDzz 2A66KOOCCMM33{+;+;<<<<		= 	=r   c                 N   |d         | j         j        d         z   |d         | j         j        d         z   | j         j        z
  | j         j        d         z
  g}| j        j        r"| j        j                            ||           dS | j        j        	                    ||           dS )zDraw the guidesr   r   r   N)
rG   r!   r   r#   rJ   nodupr	   r   new_unique_guide	new_guide)r   rk   r&   newposs       r   r_   zGuidesCreator.draw_guide5  s     QK$*033QKj #$j  j$Q'(
 < 	>H//DDDDDH((=====r   )F)r   F)r'   r(   r)   r*   rD   r   rQ   rl   r|   r   r]   r   r_   __classcell__)rH   s   @r   r/   r/   J   s        ;;9
 9
 9
v& & & & &	 	 	#U #U #UJ7 7 7(N N N`
 
 
 
= = = => > > > > > >r   r/   __main__)r*   mathr   r   r   rer+   inkex.localizationr   rb   r   EffectExtensionr/   r'   runr-   r   r   <module>r      s   4             				  1 1 1 1 1 1!S !S !S !S !S !S !S !SHw> w> w> w> w>E) w> w> w>t zMOO r   