Début alias qpdf
This commit is contained in:
		
							parent
							
								
									87eb82a791
								
							
						
					
					
						commit
						8b927a63e8
					
				
					 2 changed files with 332 additions and 0 deletions
				
			
		
							
								
								
									
										294
									
								
								aliases/qpdf.elv
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										294
									
								
								aliases/qpdf.elv
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,294 @@
 | 
				
			||||||
 | 
					use re
 | 
				
			||||||
 | 
					use str
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var cmd      = $e:qpdf~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -is-pdf {|f|
 | 
				
			||||||
 | 
					  str:has-suffix $f .pdf
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -is-number {|arg|
 | 
				
			||||||
 | 
					  re:match '^\d+$' $arg
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -is-rotate {|arg|
 | 
				
			||||||
 | 
					  re:match '^(\+|-)(\d+):.*' $arg
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -is-seq {|arg|
 | 
				
			||||||
 | 
					  re:match '^\d+(,\d+)*$' $arg
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -must-pdf {|f|
 | 
				
			||||||
 | 
					  if (not (-is-pdf $f)) {
 | 
				
			||||||
 | 
					    fail $f' n’est pas un fichier PDF'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -must-not-exist {|f|
 | 
				
			||||||
 | 
					  var exist = ?(stat $f 2>&- > /dev/null)
 | 
				
			||||||
 | 
					  if (bool $exist) {
 | 
				
			||||||
 | 
					    fail $f' existe déjà'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -must-exist {|f|
 | 
				
			||||||
 | 
					  var exist = ?(stat $f 2>&- > /dev/null)
 | 
				
			||||||
 | 
					  if (not (bool $exist)) {
 | 
				
			||||||
 | 
					    fail $f' n’existe pas'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -make-tmp {
 | 
				
			||||||
 | 
					  mktemp -q /tmp/qpdf_XXXXXXXXXX.pdf
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -make-seq {|seq|
 | 
				
			||||||
 | 
					  if (not (-is-seq $seq)) {
 | 
				
			||||||
 | 
					    fail $seq': pas une séquence'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  set @seq = (order (str:split , $seq))
 | 
				
			||||||
 | 
					  var b = 1
 | 
				
			||||||
 | 
					  each {|ei|
 | 
				
			||||||
 | 
					    var e = (- $ei 1)
 | 
				
			||||||
 | 
					    if (== $b $e) {
 | 
				
			||||||
 | 
					      put $b
 | 
				
			||||||
 | 
					      set b = $ei
 | 
				
			||||||
 | 
					    } elif (< $b $e) {
 | 
				
			||||||
 | 
					      put $b'-'$e
 | 
				
			||||||
 | 
					      set b = $ei
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  } $seq
 | 
				
			||||||
 | 
					  put $b'-z'
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -out {|in suffix|
 | 
				
			||||||
 | 
					  var out = (str:trim-suffix $in .pdf)
 | 
				
			||||||
 | 
					  str:join '' [ $out .pdf ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -parse-selection {|in selection|
 | 
				
			||||||
 | 
					  if (-is-rotate $selection) {
 | 
				
			||||||
 | 
					    var out   = (-make-tmp)
 | 
				
			||||||
 | 
					    var i     = (str:index $selection :)
 | 
				
			||||||
 | 
					    var r sel = $selection[..$i] $selection[(+ $i 1)..]
 | 
				
			||||||
 | 
					    if (eq sel '') {
 | 
				
			||||||
 | 
					      set @sel = $in
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      set @sel = $in $sel
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    $cmd --empty --pages $@sel -- $out
 | 
				
			||||||
 | 
					    $cmd $out --replace-input --rotate=$r
 | 
				
			||||||
 | 
					    put $out
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    put $in $selection
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -parse-all {|args|
 | 
				
			||||||
 | 
					  var tmpfiles  = []
 | 
				
			||||||
 | 
					  var selection = []
 | 
				
			||||||
 | 
					  var in        = $nil
 | 
				
			||||||
 | 
					  var miss      = $nil
 | 
				
			||||||
 | 
					  try {
 | 
				
			||||||
 | 
					    each {|e|
 | 
				
			||||||
 | 
					      if (-is-pdf $e) {
 | 
				
			||||||
 | 
					        -must-exist $e
 | 
				
			||||||
 | 
					        if (not-eq $miss $nil) {
 | 
				
			||||||
 | 
					          set @selection = $@selection $miss
 | 
				
			||||||
 | 
					          set miss = $e
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        set in = $e
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        if (eq $in $nil) {
 | 
				
			||||||
 | 
					          fail 'Le pagerange doit être déclaré après un fichier d’entrée'
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        var @s = (-parse-selection $in $e)
 | 
				
			||||||
 | 
					        if (== (count $s) 1) {
 | 
				
			||||||
 | 
					          set @tmpfiles = $@tmpfiles $@s
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        set @selection = $@selection $@s
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    } $args
 | 
				
			||||||
 | 
					  } finally {
 | 
				
			||||||
 | 
					    put $selection $tmpfiles
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn -merge {|&collate=$nil selection out|
 | 
				
			||||||
 | 
					  if (< (count $selection) 1) {
 | 
				
			||||||
 | 
					    fail 'Aucune sélection'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  var @args = --empty --pages $@selection -- $out
 | 
				
			||||||
 | 
					  if (not-eq $collate $nil) {
 | 
				
			||||||
 | 
					    if (-is-number $collate) {
 | 
				
			||||||
 | 
					      set @args = $collate $@args
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    set @args = --collate $@args
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  $cmd $@args
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn merge {|@args|
 | 
				
			||||||
 | 
					  var l = (- (count $args) 1)
 | 
				
			||||||
 | 
					  if (< $l 1) {
 | 
				
			||||||
 | 
					    fail "la commande doit contenir au moins 2 paramètres"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  var out = $args[$l]
 | 
				
			||||||
 | 
					  -must-pdf $out
 | 
				
			||||||
 | 
					  -must-not-exist $out
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var sel tmp = [] []
 | 
				
			||||||
 | 
					  try {
 | 
				
			||||||
 | 
					    set sel tmp = (-parse-all $args[..$l])
 | 
				
			||||||
 | 
					    -merge $sel $out
 | 
				
			||||||
 | 
					  } finally {
 | 
				
			||||||
 | 
					    if (> (count $tmp) 0) {
 | 
				
			||||||
 | 
					      rm -f $@tmp
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn split {|@args|
 | 
				
			||||||
 | 
					  var l = (- (count $args) 1)
 | 
				
			||||||
 | 
					  if (< $l 1) {
 | 
				
			||||||
 | 
					    fail "la commande doit contenir au moins 2 paramètres"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  var out = $args[$l]
 | 
				
			||||||
 | 
					  -must-pdf $out
 | 
				
			||||||
 | 
					  -must-not-exist $out
 | 
				
			||||||
 | 
					  set args = $args[..$l]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var size = $nil
 | 
				
			||||||
 | 
					  if (-is-number $args[0]) {
 | 
				
			||||||
 | 
					    set size @args = @args
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var sel tmp = [] []
 | 
				
			||||||
 | 
					  try {
 | 
				
			||||||
 | 
					    set sel tmp = (-parse-all $args[..$l])
 | 
				
			||||||
 | 
					    var t = (-make-tmp)
 | 
				
			||||||
 | 
					    -merge $sel $t
 | 
				
			||||||
 | 
					    set @tmp = $@tmp $t
 | 
				
			||||||
 | 
					    var @ac = --split-pages
 | 
				
			||||||
 | 
					    if (not-eq $size $nil) {
 | 
				
			||||||
 | 
					      set @ac = $@ac $size
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    set @ac = $@ac $t $out/%d.pdf
 | 
				
			||||||
 | 
					    mkdir $out
 | 
				
			||||||
 | 
					    $cmd $@ac
 | 
				
			||||||
 | 
					  } finally {
 | 
				
			||||||
 | 
					    if (> (count $tmp) 0) {
 | 
				
			||||||
 | 
					      rm -f $@tmp
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn split-at {|@args|
 | 
				
			||||||
 | 
					  var l = (- (count $args) 1)
 | 
				
			||||||
 | 
					  if (< $l 2) {
 | 
				
			||||||
 | 
					    fail "la commande doit contenir au moins 3 paramètres"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  var out = $args[$l]
 | 
				
			||||||
 | 
					  -must-pdf $out
 | 
				
			||||||
 | 
					  -must-not-exist $out
 | 
				
			||||||
 | 
					  var @seq = (-make-seq $args[0])
 | 
				
			||||||
 | 
					  set args = $args[1..$l]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var sel tmp = [] []
 | 
				
			||||||
 | 
					  try {
 | 
				
			||||||
 | 
					    set sel tmp = (-parse-all $args[..$l])
 | 
				
			||||||
 | 
					    var t = (-make-tmp)
 | 
				
			||||||
 | 
					    -merge $sel $t
 | 
				
			||||||
 | 
					    set @tmp = $@tmp $t
 | 
				
			||||||
 | 
					    var i = 1
 | 
				
			||||||
 | 
					    each {|s|
 | 
				
			||||||
 | 
					      $cmd --empty --pages $t $s -- $out/$i.pdf
 | 
				
			||||||
 | 
					      set i = (+ $i 1)
 | 
				
			||||||
 | 
					    } $seq
 | 
				
			||||||
 | 
					  } finally {
 | 
				
			||||||
 | 
					    if (> (count $tmp) 0) {
 | 
				
			||||||
 | 
					      rm -f $@tmp
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn zip {|@args|
 | 
				
			||||||
 | 
					  var l = (- (count $args) 1)
 | 
				
			||||||
 | 
					  if (< $l 1) {
 | 
				
			||||||
 | 
					    fail "la commande doit contenir au moins 2 paramètres"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  var out = $args[$l]
 | 
				
			||||||
 | 
					  var col = $true
 | 
				
			||||||
 | 
					  -must-pdf $out
 | 
				
			||||||
 | 
					  -must-not-exist $out
 | 
				
			||||||
 | 
					  set args = $args[..$l]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (-is-number $args[0]) {
 | 
				
			||||||
 | 
					    set col @args = $@args
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var sel tmp = [] []
 | 
				
			||||||
 | 
					  try {
 | 
				
			||||||
 | 
					    set sel tmp = (-parse-all $args)
 | 
				
			||||||
 | 
					    -merge &collate=$col $sel $out
 | 
				
			||||||
 | 
					  } finally {
 | 
				
			||||||
 | 
					    if (> (count $tmp) 0) {
 | 
				
			||||||
 | 
					      rm -f $@tmp
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn unzip {|@args|
 | 
				
			||||||
 | 
					  echo '<en construction…>'
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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]
 | 
				
			||||||
 | 
					  -must-pdf $in
 | 
				
			||||||
 | 
					  -must-exist $in
 | 
				
			||||||
 | 
					  var out = (-out $in _decrypted.pdf)
 | 
				
			||||||
 | 
					  var p   = $nil
 | 
				
			||||||
 | 
					  if (> $l 1) {
 | 
				
			||||||
 | 
					    set p = $args[1]
 | 
				
			||||||
 | 
					    if (== $l 3) {
 | 
				
			||||||
 | 
					      set out = $args[2]
 | 
				
			||||||
 | 
					      -must-pdf $out
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  -must-not-exist $out
 | 
				
			||||||
 | 
					  if (eq $p $nil) {
 | 
				
			||||||
 | 
					    $cmd $in $out --decrypt
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    $cmd $in $out --decrypt $p
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn help {|@args|
 | 
				
			||||||
 | 
					  cat $E:HOME/.config/elvish/aliases/qpdf.help
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn info {|@args|
 | 
				
			||||||
 | 
					  echo '<en construction…>'
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					edit:add-var epdf~ {|action @args|
 | 
				
			||||||
 | 
					  var actions = [
 | 
				
			||||||
 | 
					    &merge=$merge~
 | 
				
			||||||
 | 
					    &split=$split~
 | 
				
			||||||
 | 
					    &split-at=$split-at~
 | 
				
			||||||
 | 
					    &zip=$zip~
 | 
				
			||||||
 | 
					    &unzip=$unzip~
 | 
				
			||||||
 | 
					    &decrypt=$decrypt~
 | 
				
			||||||
 | 
					    &help=$help~
 | 
				
			||||||
 | 
					    &info=$info~
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					  if (not (has-key $actions $action)) {
 | 
				
			||||||
 | 
					    fail $action': action inconnue'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  $actions[$action] $@args
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										38
									
								
								aliases/qpdf.help
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								aliases/qpdf.help
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,38 @@
 | 
				
			||||||
 | 
					Usage: epdf (commande) [options]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Commandes:
 | 
				
			||||||
 | 
					  merge: <inputfile> [<pagerange>] ... <outputfile>
 | 
				
			||||||
 | 
					    Fusionne la liste des pages sélectionnées dans le fichier de sortie
 | 
				
			||||||
 | 
					  split: [<size>] <inputfile> [pagerange] .... <outputdir>
 | 
				
			||||||
 | 
					    Découpe les fichiers d’entrée en fichiers de <size> pages
 | 
				
			||||||
 | 
					    et place les découpes dans les fichiers <outputdir>/{1,2,…}.pdf
 | 
				
			||||||
 | 
					    Défauts : <size> = 1
 | 
				
			||||||
 | 
					  split_at: <pageselect> <inputfile> [pagerange] ... <outputdir>
 | 
				
			||||||
 | 
					    Découpe les fichiers d’entrée aux pages indiquées (séparées par des virgules)
 | 
				
			||||||
 | 
					  zip: <inputfile> [<pagerange>] ... <outputfile>
 | 
				
			||||||
 | 
					    Réunit alternativement chaque page de chaque fichier d’entrée
 | 
				
			||||||
 | 
					    dans le fichier de sortie
 | 
				
			||||||
 | 
					  unzip: [<modulo>] <inputfile> [<pagerange>] ... <outputdir>
 | 
				
			||||||
 | 
					    Sépare alternativement chaque page dans les fichiers <outputdir>/{1,2,…}.pdf
 | 
				
			||||||
 | 
					    Le nombre de fichiers créé est indiqué par le modulo.
 | 
				
			||||||
 | 
					    Défauts : <modulo> = 2
 | 
				
			||||||
 | 
					  decrypt: <inputfile> [<password>]
 | 
				
			||||||
 | 
					    Retourne un fichier déchiffré. Si aucun mot de passe n’est donné, tente le déchiffrement
 | 
				
			||||||
 | 
					    avec un mot de passe à blanc
 | 
				
			||||||
 | 
					    Fichier de sortie : <inputfile>_decrypted.pdf
 | 
				
			||||||
 | 
					  info: <inputfile> [<field> ...]
 | 
				
			||||||
 | 
					    Affiche les propriétés du document
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Sélection des pages:
 | 
				
			||||||
 | 
					  Les sélections peuvent comprendre les éléments suivants. Plusieurs sélection sont séparées par des virgules
 | 
				
			||||||
 | 
					    n u        uniquement la page n (ie. 15)
 | 
				
			||||||
 | 
					    n-m        de la page n à m range (ie. 3-6)
 | 
				
			||||||
 | 
					    m-n        pareil mais en sens inverse (ie. 6-3)
 | 
				
			||||||
 | 
					    z          représente la dernière page du document (pour remplacer un n° de page)
 | 
				
			||||||
 | 
					    r          compte à partir de la dernière page (ie. 3-r2)
 | 
				
			||||||
 | 
					    ...:even   pour une sélection donnée, ne conserve que que les pages paires (ie. 1-10:even)
 | 
				
			||||||
 | 
					    ...:odd    pareil mais pour les pages impaires
 | 
				
			||||||
 | 
					    +90:       tourne le groupe de sélection vers la droite (ie. +90:1-5,8,z-12 tourne les pages 1 à 5,
 | 
				
			||||||
 | 
					                 8 et de la dernière page à la 12è)
 | 
				
			||||||
 | 
					    -90:       pareil mais à gauche
 | 
				
			||||||
 | 
					    +180:      pareil mais en bas
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue