
    TAi*                       S r SSKJr  SSKrSSKrSSKrSSKJr  SSKJ	r	  SSKJ
r
  SSKJr  SSKJrJr  SS	KJr  SS
KJrJr  SSKJrJrJr  SSKJr  SSKJrJrJr  \" / SQ5      r \RB                  S:X  a  SOSr"\RF                  " \$5      r% " S S\RL                  5      r'\%RQ                  \'" \%5      5        S!S jr)S"S jr*S"S jr+SSSSSS.                 S#S jjr, " S S5      r-SSSSS.           S$S  jjr.g)%z$Interface to Ghostscript executable.    )annotationsN)deque)BytesIOfspath)Path)PIPECalledProcessError)Version)ImageUnidentifiedImageError)ColorConversionNeededErrorInputFileErrorSubprocessOutputError)
Resolution)get_versionrunrun_polling_stderr)CMYKGrayLeaveColorUnchangedRGBUseDeviceIndependentColorntgswin64cgsc                  ,    \ rS rSrSrSSS jjrS rSrg)	DuplicateFilter,   zFilter out duplicate log messages.

A context window of default 5 messages is used to determine if a message is a
duplicate. This is because some Ghostscript messages are word wrapped.
c                f    [        / US9U l        Xl        [        R                  U l        SU l        g )N)maxlenr   )r   windowloggerloggingDEBUGlevelnocount)selfr#   context_windows      V/var/www/html/land-ocr/venv/lib/python3.13/site-packages/ocrmypdf/_exec/ghostscript.py__init__DuplicateFilter.__init__3   s'    "'>"B}}
    c                   UR                   U R                  ;   a'  U =R                  S-  sl        UR                  U l        gU R                  S:  aW  SU R                   S3nSU l        U R                  R                  U R                  U5        U R                  R                  5         U R                  R                  UR                   5        g)N   Fz(suppressed z repeated lines)r   T)msgr"   r'   r&   r#   logclearappend)r(   recordrep_msgs      r*   filterDuplicateFilter.filter9   s    ::$JJ!OJ!>>DLzzQ(4DE
g6!!#KKvzz*r-   )r'   r&   r#   r"   N)   )r#   zlogging.Logger)__name__
__module____qualname____firstlineno____doc__r+   r6   __static_attributes__ r-   r*   r   r   ,   s    r-   r   c                 2    [        [        [        5      5      $ N)r   r   GSr?   r-   r*   versionrC   K   s    ;r?##r-   c                `    [         R                  " SU [         R                  S9n[        U5      $ )Nerrorflags)research
IGNORECASEboolstreammatchs     r*   _gs_error_reportedrO   O   s"    IIhbmm<E;r-   c                    [         R                  " SU [         R                  [         R                  -  S9n[	        U5      $ )zDid Ghostscript warn about a DeviceN with inappropriate alternate?

If so, we need the user to select a color conversion, or the resulting PDF will
not present correctly in some PDF viewers.
z DeviceN.*inappropriate alternaterF   )rH   rI   rJ   	MULTILINErK   rL   s     r*   _gs_devicen_reportedrR   T   s4     II+mmbll*E
 ;r-   r/   F)pagenopage_dpirotationfilter_vectorstop_on_errorc                  UR                  S5      nU(       d  Un[        SSSSSU 3SU 3SU 3S	UR                  S
 SUR                  S
 3/	U(       a  S/O/ -   U(       a  S/O/ -   S[	        U5      SSS[	        U 5      /-   n	 [        U	[        [        SS9n
U
R                  R                  SS9n[        U5      (       aE  [        R                  U5        U(       a)  SU;   a#  [        U5      R                  SS9  [!        S5      e ["        R$                  " U5       nUb  [        R'                  SU5        US:X  a*  UR)                  ["        R*                  R,                  5      nO_US:X  a*  UR)                  ["        R*                  R.                  5      nO/US:X  a)  UR)                  ["        R*                  R0                  5      nUS-  S:X  a  UR3                  5       nUR5                  XS9  SSS5        g! [         aU  n[        R                  UR                  R                  SS95        [        U5      R                  SS9  [        S5      UeSnAff = f! , (       d  f       g= f! [6         a    [        R                  S U S!U S"35        e [8         a,  n[        R                  S U S!U S"35        [7        5       UeSnAff = f)#zERasterize one page of a PDF at resolution raster_dpi in canvas units.   -dSAFER-dBATCH	-dNOPAUSEz-dInterpolateControl=-1z	-sDEVICE=z-dFirstPage=z-dLastPage=z-rfxz-dFILTERVECTOR-dPDFSTOPONERROR-o-sstdout=%stderr-dAutoRotatePages=/Nonez-fT)stdoutstderrcheckreplace)errors)
missing_okzGhostscript rasterizing failedNzrecoverable image errora  Ghostscript rasterizing failed. The input file contains errors that cause PDF viewers to interpret it differently and incorrectly. Try using --continue-on-soft-render-error and manually inspect the input and output files to check for visual differences or errors.zRotating output by %iZ      i  )dpizGhostscript (using z at z* dpi) produced an invalid page image file.)roundrB   r^   yr   r   r	   r
   r1   rE   rd   decoder   unlinkr   rO   r   r   opendebug	transpose	Transpose	ROTATE_90
ROTATE_180
ROTATE_270	flip_axissaver   OSError)
input_fileoutput_fileraster_device
raster_dpirS   rT   rU   rV   rW   args_gsperd   ims                 r*   rasterize_pdfr   b   s    !!!$J %'6(#&"a *,,q!12
	
 "/B	8 $1b	: ;%:
	
 0MT> XX__I_.F&!!		&6&@$$$5 T .ZZ$#		18< r>eoo&?&?@B_eoo&@&@AB_eoo&@&@ABc>R''113HGGKG. %$%  M		!((///34[  D 1#$DE1LM$ %$ " 		!-ZL A* *	
 	 .		!-ZL A* *	
 %&A-.sP   G8 I+ CI/I+ 8
IAII
I($I+ (I+ +0K'KKc                  x    \ rS rSrSr\R                  " S5      r\R                  " S5      rS r	S r
S rS rS	rg
)GhostscriptFollower   zHParses the output of Ghostscript and uses it to update the progress bar.z#Processing pages \d+ through (\d+).z
Page (\d+)c                ,    SU l         Xl        S U l        g )Nr   )r'   progressbar_classprogressbar)r(   r   s     r*   r+   GhostscriptFollower.__init__   s    
!2r-   c                    U $ rA   r?   )r(   s    r*   	__enter__GhostscriptFollower.__enter__   s	     r-   c                ^    U R                   (       a  U R                   R                  XU5      $ g)NF)r   __exit__)r(   exc_type	exc_value	tracebacks       r*   r   GhostscriptFollower.__exit__   s'    ##,,X)LLr-   c                   U R                   (       d  g U R                  (       d  U R                  R                  UR	                  5       5      nU(       aZ  [        UR                  S5      5      U l        U R                  U R                  SSS9U l        U R                  R                  5         g g U R                  R                  UR	                  5       5      (       a  U R                  R                  5         g g )Nr/   zPDF/A conversionpage)totaldescunit)r   r   
re_processrN   stripintgroupr'   r   re_pageupdate)r(   linems      r*   __call__GhostscriptFollower.__call__   s    %%%%djjl3A _
#'#9#9**+=F $: $    **,  ||!!$**,//  '') 0r-   )r'   r   r   N)r9   r:   r;   r<   r=   rH   compiler   r   r+   r   r   r   r>   r?   r-   r*   r   r      s6    RBCJjj'G 

*r-   r   z1.52)pdf_version	pdfa_partr   rW   c               $   / nUS:X  a  / SQnOUS:X  a  / SQnOSS/n[        5       n	U	[        S5      :X  a  UR                  S5        [        R                  S	:X  a  S
n[
        SSSS[        U5       3SSSU 3/U(       a  S/O/ -   U-   SSSU 3SS[        U5      S/-   n
U
R                  S U  5       5         [        U5       n[        U
[        SSSSUS9nS S S 5        WR                  n[        U5      (       a-  UR                  S5       H  n[        R!                  U5        M     [#        U5      (       a
  [%        5       eg ! , (       d  f       Nr= f! [&         a0  n[        R!                  UR                  5        [)        S5      UeS nAff = f) Njpeg)-dAutoFilterColorImages=falsez-dColorImageFilter=/DCTEncode-dAutoFilterGrayImages=falsez-dGrayImageFilter=/DCTEncodelossless)r   z-dColorImageFilter=/FlateEncoder   z-dGrayImageFilter=/FlateEncodez-dAutoFilterColorImages=truez-dAutoFilterGrayImages=truez9.56.0z-dNEWPDF=falser   Fr[   r\   rZ   z-dCompatibilityLevel=z-sDEVICE=pdfwriterb   z-sColorConversionStrategy=r_   z
-dJPEGQ=95z-dSubsetFonts=falsez-dPDFA=z-dPDFACompatibilityPolicy=1r`   ra   c              3  8   #    U  H  n[        U5      v   M     g 7frA   r   ).0ss     r*   	<genexpr> generate_pdfa.<locals>.<genexpr>)  s     0i6!99is   Tzutf-8rf   )rd   re   textencodingrg   callbackz****z"Ghostscript PDF/A rendering failed)rC   r   r3   osnamerB   strr   extendr   r   r	   rd   rO   splitr1   rE   rR   r   r
   r   )	pdf_pagesr{   compressioncolor_conversion_strategyr   r   r   rW   compression_args
gs_versionr~   pbarr   rd   partr   s                   r*   generate_pdfar      s    f
 

	"
 +)

 JWX&& 	 01	ww$ #C$4#56%()B(CD		
 $1b
	: 	 !i[!);
	
 . NN0i00/ !23t"  A 4   f%%
 V,		$ -'',.. (5 43  Q 			!((#$HIqP	Qs0   9E EE 
EE 
F+F

F)returnr   )r   rK   )rz   os.PathLiker{   r   r|   r   r}   r   rS   r   rT   zResolution | NonerU   z
int | NonerV   rK   rW   rK   )r{   r   r   r   r   r   r   r   r   r   rW   rK   )/r=   
__future__r   r$   r   rH   collectionsr   ior   r   pathlibr   
subprocessr	   r
   packaging.versionr   PILr   r   ocrmypdf.exceptionsr   r   r   ocrmypdf.helpersr   ocrmypdf.subprocessr   r   r   	frozensetCOLOR_CONVERSION_STRATEGIESr   rB   	getLoggerr9   r1   Filterr   	addFilterrC   rO   rR   r   r   r   r?   r-   r*   <module>r      s}   + "  	 	     / % - 
 ( D D'  77d?Z !gnn 8 oc" #$
( "&V.V.V. 	V.
 V. V.  V. V. V. V.r$* $*Z d/d/ 	d/
  #d/ d/ d/ d/r-   