Réécriture de l’alias epdf vers pdf – manque encore la partie info, la liste des composants et l’extraction et on est bon
This commit is contained in:
		
							parent
							
								
									d0069b2c99
								
							
						
					
					
						commit
						958f4a22ce
					
				
					 2 changed files with 264 additions and 5 deletions
				
			
		
							
								
								
									
										253
									
								
								aliases/pdf.elv
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										253
									
								
								aliases/pdf.elv
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,253 @@
 | 
				
			||||||
 | 
					use moi/util/format
 | 
				
			||||||
 | 
					use moi/util/pdf
 | 
				
			||||||
 | 
					use re
 | 
				
			||||||
 | 
					use str
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -must-pdf {|file|
 | 
				
			||||||
 | 
					  if (not (pdf:is-pdf $file)) {
 | 
				
			||||||
 | 
					    fail (printf '%s n’est pas un fichier pdf' $file)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -must-exist {|file|
 | 
				
			||||||
 | 
					  if (pdf:not-exist $file) {
 | 
				
			||||||
 | 
					    fail (printf '%s n’existe pas' $file)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -must-not-exist {|file|
 | 
				
			||||||
 | 
					  if (pdf:exist $file) {
 | 
				
			||||||
 | 
					    fail (printf '%s existe déjà' $file)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -must-pdf-exist {|file|
 | 
				
			||||||
 | 
					  -must-pdf $file
 | 
				
			||||||
 | 
					  -must-exist $file
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -must-pdf-not-exist {|file|
 | 
				
			||||||
 | 
					  -must-pdf $file
 | 
				
			||||||
 | 
					  -must-not-exist $file
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -must-valid {|v cond|
 | 
				
			||||||
 | 
					  if (not ($cond $v)) {
 | 
				
			||||||
 | 
					    fail (printf '%s: paramètre invalide' $v)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -out {|in suffix|
 | 
				
			||||||
 | 
					  var out = (str:trim-suffix $in .pdf)
 | 
				
			||||||
 | 
					  str:join '' [ $out $suffix ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn help {|@args|
 | 
				
			||||||
 | 
					  cat $E:HOME/.config/elvish/aliases/pdf.help
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn decrypt {|@args|
 | 
				
			||||||
 | 
					  var l = (count $args)
 | 
				
			||||||
 | 
					  if (or (< $l 1) (> $l 3)) {
 | 
				
			||||||
 | 
					    fail 'decrypt doit contenir entre 1 et 3 paramètres'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  var in     = $args[0]
 | 
				
			||||||
 | 
					  var out    = (-out $in _decrypted.pdf)
 | 
				
			||||||
 | 
					  var passwd = []
 | 
				
			||||||
 | 
					  -must-pdf-exist $in
 | 
				
			||||||
 | 
					  if (> $l 1) {
 | 
				
			||||||
 | 
					    set @passwd = $args[1]
 | 
				
			||||||
 | 
					    if (> $l 2) {
 | 
				
			||||||
 | 
					      set out = $args[2]
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  -must-pdf-not-exist $out
 | 
				
			||||||
 | 
					  pdf:decrypt &out=$out $in $@passwd
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn rotate {|@args|
 | 
				
			||||||
 | 
					  var l = (- (count $args) 1)
 | 
				
			||||||
 | 
					  if (< $l 1) {
 | 
				
			||||||
 | 
					    fail 'rotate doit contenir au moins 1 paramètres'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  var in  = $args[0]
 | 
				
			||||||
 | 
					  var out = (-out $in _rotated.pdf)
 | 
				
			||||||
 | 
					  if (pdf:is-pdf $args[$l]) {
 | 
				
			||||||
 | 
					    set @args out = (all $args[1..])
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  -must-pdf-exist $in
 | 
				
			||||||
 | 
					  -must-pdf-not-exist $out
 | 
				
			||||||
 | 
					  each {|e|
 | 
				
			||||||
 | 
					    -must-valid $e $pdf:is-rotate-selection~
 | 
				
			||||||
 | 
					  } $args
 | 
				
			||||||
 | 
					  pdf:rotate &keep=$true &out=$out $in $@args
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn merge {|@args|
 | 
				
			||||||
 | 
					  var l = (- (count $args) 1)
 | 
				
			||||||
 | 
					  if (< $l 1) {
 | 
				
			||||||
 | 
					    fail 'merge doit contenir au moins 2 paramètres'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  var @selection out = $@args
 | 
				
			||||||
 | 
					  -must-pdf-not-exist $out
 | 
				
			||||||
 | 
					  var has-in = $false
 | 
				
			||||||
 | 
					  each {|e|
 | 
				
			||||||
 | 
					    if (pdf:is-pdf $e) {
 | 
				
			||||||
 | 
					      -must-exist $e
 | 
				
			||||||
 | 
					      set has-in = $true
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      if (not $has-in) {
 | 
				
			||||||
 | 
					        fail 'Une sélection doit être précédée d’un fichier d’entrée'
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      -must-valid $e $pdf:is-selection~
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  } $selection
 | 
				
			||||||
 | 
					  pdf:cat &out=$out $@selection
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn unmerge {|@args|
 | 
				
			||||||
 | 
					  var l = (- (count $args) 1)
 | 
				
			||||||
 | 
					  if (< $l 1) {
 | 
				
			||||||
 | 
					    fail 'unmerge doit contenir au moins 2 paramètres'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  var in  = $args[0]
 | 
				
			||||||
 | 
					  var out = (-out $in _unmerged)
 | 
				
			||||||
 | 
					  if (not (pdf:is-selection $args[$l])) {
 | 
				
			||||||
 | 
					    set @args out = (all $args[1..])
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  -must-pdf-exist $in
 | 
				
			||||||
 | 
					  -must-not-exist $out
 | 
				
			||||||
 | 
					  each {|e|
 | 
				
			||||||
 | 
					    -must-valid $e $pdf:is-selection~
 | 
				
			||||||
 | 
					  } $args
 | 
				
			||||||
 | 
					  pdf:uncat $in $out $@args
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn split {|@args|
 | 
				
			||||||
 | 
					  var l = (- (count $args) 1)
 | 
				
			||||||
 | 
					  if (< $l 1) {
 | 
				
			||||||
 | 
					    fail 'split doit contenir au moins 2 paramètres'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  var out  = $args[$l]
 | 
				
			||||||
 | 
					  set args = $args[..$l]
 | 
				
			||||||
 | 
					  -must-not-exist $out
 | 
				
			||||||
 | 
					  var s = 1
 | 
				
			||||||
 | 
					  if (pdf:is-number $args[0]) {
 | 
				
			||||||
 | 
					    set s @args = $@args
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  var t = (pdf:-t)
 | 
				
			||||||
 | 
					  try {
 | 
				
			||||||
 | 
					    pdf:cat &out=$t $@args
 | 
				
			||||||
 | 
					    pdf:split &size=$s $t $out
 | 
				
			||||||
 | 
					  } finally {
 | 
				
			||||||
 | 
					    rm -f $t
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn split-at {|@args|
 | 
				
			||||||
 | 
					  var l = (count $args)
 | 
				
			||||||
 | 
					  if (!= $l 3) {
 | 
				
			||||||
 | 
					    fail 'split-at doit contenir 3 paramètres'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  var rg in out = $@args
 | 
				
			||||||
 | 
					  -must-pdf-exist $in
 | 
				
			||||||
 | 
					  -must-not-exist $out
 | 
				
			||||||
 | 
					  -must-valid $rg {|e| re:match '^\d+(,\d+)*$' $e }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var b sel = 1 []
 | 
				
			||||||
 | 
					  str:split ',' $rg | order | each {|s|
 | 
				
			||||||
 | 
					    var e = (- $s 1)
 | 
				
			||||||
 | 
					    if (== $b $e) {
 | 
				
			||||||
 | 
					      set @sel = $@sel $b
 | 
				
			||||||
 | 
					      set b    = $s
 | 
				
			||||||
 | 
					    } elif (< $b $e) {
 | 
				
			||||||
 | 
					      set @sel = $@sel (printf '%d-%d' $b $e)
 | 
				
			||||||
 | 
					      set b    = $s
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  set @sel = $@sel (printf '%d-z' $b)
 | 
				
			||||||
 | 
					  unmerge $in $@sel $out
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn zip {|@args|
 | 
				
			||||||
 | 
					  var l = (- (count $args) 1)
 | 
				
			||||||
 | 
					  if (< $l 1) {
 | 
				
			||||||
 | 
					    fail 'zip doit contenir au moins 2 paramètres'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  var @selection out = $@args
 | 
				
			||||||
 | 
					  -must-pdf-not-exist $out
 | 
				
			||||||
 | 
					  var has-in = $false
 | 
				
			||||||
 | 
					  each {|e|
 | 
				
			||||||
 | 
					    if (pdf:is-pdf $e) {
 | 
				
			||||||
 | 
					      -must-exist $e
 | 
				
			||||||
 | 
					      set has-in = $true
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      if (not $has-in) {
 | 
				
			||||||
 | 
					        fail 'Une sélection doit être précédée d’un fichier d’entrée'
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      -must-valid $e $pdf:is-selection~
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  } $selection
 | 
				
			||||||
 | 
					  pdf:cat &collate=$true &out=$out $@selection
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn unzip {|@args|
 | 
				
			||||||
 | 
					  var l = (- (count $args) 1)
 | 
				
			||||||
 | 
					  if (< $l 1) {
 | 
				
			||||||
 | 
					    fail 'unzip doit contenir au moins 2 paramètres'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  var in @sel out = $@args
 | 
				
			||||||
 | 
					  var mod         = 2
 | 
				
			||||||
 | 
					  if (pdf:is-number $in) {
 | 
				
			||||||
 | 
					    set mod = $in
 | 
				
			||||||
 | 
					    if (eq (count $sel) 0) {
 | 
				
			||||||
 | 
					      fail 'unzip doit contenir au moins 3 paramètres'
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    set in @sel = $@sel
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  -must-not-exist $out
 | 
				
			||||||
 | 
					  var t    = (pdf:-t)
 | 
				
			||||||
 | 
					  try {
 | 
				
			||||||
 | 
					    pdf:cat &out=$t $in $@sel
 | 
				
			||||||
 | 
					    var n = (pdf:nb-pages $t)
 | 
				
			||||||
 | 
					    mkdir $out
 | 
				
			||||||
 | 
					    range 1 (+ 1 $mod) | each {|m|
 | 
				
			||||||
 | 
					      var sel = (range 1 (+ $n 1) | each {|i|
 | 
				
			||||||
 | 
					        var s = (% $i $mod)
 | 
				
			||||||
 | 
					        if (== $s 0) {
 | 
				
			||||||
 | 
					          set s = $mod
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (== $s $m) {
 | 
				
			||||||
 | 
					          put $i
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      } | each $to-string~ | str:join ',')
 | 
				
			||||||
 | 
					      pdf:cat &out=(printf '%s/%d.pdf' $out $m) $t $sel
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  } finally {
 | 
				
			||||||
 | 
					    rm -f $t
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					edit:add-var pdf~ {|action @args|
 | 
				
			||||||
 | 
					  var actions = [
 | 
				
			||||||
 | 
					    &help=$help~
 | 
				
			||||||
 | 
					    &decrypt=$decrypt~
 | 
				
			||||||
 | 
					    &rotate=$rotate~
 | 
				
			||||||
 | 
					    &merge=$merge~
 | 
				
			||||||
 | 
					    &cat=$merge~
 | 
				
			||||||
 | 
					    &unmerge=$unmerge~
 | 
				
			||||||
 | 
					    &uncat=$unmerge~
 | 
				
			||||||
 | 
					    &split=$split~
 | 
				
			||||||
 | 
					    &split-at=$split-at~
 | 
				
			||||||
 | 
					    &cut=$split-at~
 | 
				
			||||||
 | 
					    &zip=$zip~
 | 
				
			||||||
 | 
					    &unzip=$unzip~
 | 
				
			||||||
 | 
					    #&info=$info~
 | 
				
			||||||
 | 
					    #&list=$list~
 | 
				
			||||||
 | 
					    #&extract=$extract~
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					  if (not (has-key $actions $action)) {
 | 
				
			||||||
 | 
					    fail (printf '%s: action inconnue' $action)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  $actions[$action] $@args
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -3,12 +3,18 @@ Usage: epdf (commande) [options]
 | 
				
			||||||
Commandes:
 | 
					Commandes:
 | 
				
			||||||
  merge: <inputfile> [<pagerange>] ... <outputfile>
 | 
					  merge: <inputfile> [<pagerange>] ... <outputfile>
 | 
				
			||||||
    Fusionne la liste des pages sélectionnées dans le fichier de sortie
 | 
					    Fusionne la liste des pages sélectionnées dans le fichier de sortie
 | 
				
			||||||
 | 
					  cat: alias de merge
 | 
				
			||||||
 | 
					  unmerge: <inputfile> <pagerange>... [<outputdir>]
 | 
				
			||||||
 | 
					    Crée un nouveau pdf pour chaque pagerange défini
 | 
				
			||||||
 | 
					    Défauts : <outputdir> = <inputfile>_unmerged
 | 
				
			||||||
 | 
					  uncat: alias de unmerge
 | 
				
			||||||
  split: [<size>] <inputfile> [pagerange] .... <outputdir>
 | 
					  split: [<size>] <inputfile> [pagerange] .... <outputdir>
 | 
				
			||||||
    Découpe les fichiers d’entrée en fichiers de <size> pages
 | 
					    Découpe les fichiers d’entrée en fichiers de <size> pages
 | 
				
			||||||
    et place les découpes dans les fichiers <outputdir>/{1,2,…}.pdf
 | 
					    et place les découpes dans les fichiers <outputdir>/{1,2,…}.pdf
 | 
				
			||||||
    Défauts : <size> = 1
 | 
					    Défauts : <size> = 1
 | 
				
			||||||
  split_at: <pageselect> <inputfile> [pagerange] ... <outputdir>
 | 
					  split-at: <pageselect> <inputfile> [pagerange] ... <outputdir>
 | 
				
			||||||
    Découpe les fichiers d’entrée aux pages indiquées (séparées par des virgules)
 | 
					    Découpe les fichiers d’entrée aux pages indiquées (séparées par des virgules)
 | 
				
			||||||
 | 
					  cut: alias de split-at
 | 
				
			||||||
  zip: <inputfile> [<pagerange>] ... <outputfile>
 | 
					  zip: <inputfile> [<pagerange>] ... <outputfile>
 | 
				
			||||||
    Réunit alternativement chaque page de chaque fichier d’entrée
 | 
					    Réunit alternativement chaque page de chaque fichier d’entrée
 | 
				
			||||||
    dans le fichier de sortie
 | 
					    dans le fichier de sortie
 | 
				
			||||||
| 
						 | 
					@ -16,13 +22,13 @@ Commandes:
 | 
				
			||||||
    Sépare alternativement chaque page dans les fichiers <outputdir>/{1,2,…}.pdf
 | 
					    Sépare alternativement chaque page dans les fichiers <outputdir>/{1,2,…}.pdf
 | 
				
			||||||
    Le nombre de fichiers créé est indiqué par le modulo.
 | 
					    Le nombre de fichiers créé est indiqué par le modulo.
 | 
				
			||||||
    Défauts : <modulo> = 2
 | 
					    Défauts : <modulo> = 2
 | 
				
			||||||
  rotate: <inputfile> <pagerange> ...
 | 
					  rotate: <inputfile> <pagerange> ... [<outputfile>]
 | 
				
			||||||
    Copie le fichier en tournant les pages demandées
 | 
					    Copie le fichier en tournant les pages demandées
 | 
				
			||||||
    Fichier de sortie : <input_file>_rotated.pdf
 | 
					    Fichier de sortie par défaut : <inputfile>_rotated.pdf
 | 
				
			||||||
  decrypt: <inputfile> [<password>]
 | 
					  decrypt: <inputfile> [<password>] [<outputfile>]
 | 
				
			||||||
    Retourne un fichier déchiffré. Si aucun mot de passe n’est donné, tente le déchiffrement
 | 
					    Retourne un fichier déchiffré. Si aucun mot de passe n’est donné, tente le déchiffrement
 | 
				
			||||||
    avec un mot de passe à blanc
 | 
					    avec un mot de passe à blanc
 | 
				
			||||||
    Fichier de sortie : <inputfile>_decrypted.pdf
 | 
					    Fichier de sortie par défaut : <inputfile>_decrypted.pdf
 | 
				
			||||||
  list: (a(ttachments)|i(mages)|f(onts)) <inputfile>
 | 
					  list: (a(ttachments)|i(mages)|f(onts)) <inputfile>
 | 
				
			||||||
    Affiche la liste des fichiers inclus en filtrant selon le type (pièce-jointe, image ou police)
 | 
					    Affiche la liste des fichiers inclus en filtrant selon le type (pièce-jointe, image ou police)
 | 
				
			||||||
  extract:  (a(ttachments)|i(mages)|f(onts)) <inputfile> <outputdir>
 | 
					  extract:  (a(ttachments)|i(mages)|f(onts)) <inputfile> <outputdir>
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue