Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forums MacBidouille _ Technologies Apple _ quarkxpress - Automatiser rechercher/remplacer

Écrit par : jjalias 30 May 2018, 07:41

Bonjour,
Nouveau sur ce forum, je viens demander de l'aide pour la création d'un script pour Quarkxpress.
Je travaille dans un petit journal local, et je perds un temps fou sur certaines parties, comme le programme tv.
J'ai fait des recherches sur l'applescript, mais avec mon faible niveau de programmation, pas évident biggrin.gif

En fait, je dispose d'un pdf comme ceci :


07.00 Nom de l'émission 1 qui MAG
07.30 Nom de l'émission 2
08.00 Nom de l'émission 3 DOC


Je voudrais que mon script fasse 4 actions :
1) Appliquer un style
2) Mettre en gras les horaires
3) Supprimer les sauts de lignes
4) Supprimer certains mots qui apparaissent en fin de ligne, comme ici "MAG" et "DOC"

Pour l'action 4, j'ai commencé à faire ce script qui fonctionne plutôt bien :

tell application "QuarkXPress"
tell document 1
delete (text of every text of every story where it is "MAG")
end tell
end tell


Malheureusement, si le nom d'une émission comporte le mot "mag" (exemple: "07.30 Magasin de légumes MAG"), il va me supprimer les deux "mag". Comment définir que je ne veux que les "MAG" en fin de ligne ?

Je vous remercie d'avance pour votre précieuse aide !

Écrit par : jjalias 30 May 2018, 14:55

Bon du coup, j'ai avancé un peu, j'ai réussi à faire supprimer les fins de paragraphes pour que tout fasse un gros bloc :

CODE
tell application "QuarkXPress"
tell document 1
delete (text of every text of every story where it is "MAG
")
end tell

tell document 1
set text of every text of every story where it is "
" to " "
end tell
end tell


Maintenant, il faut que je mette les 5 premiers caractères de chaque ligne (ex:18.00) en gras. Au boulot, ils appliquent une certaine police, en medium au lieu de regular.
J'ai réussi à mettre en gras simple avec ce bout de code (mais que pour la première ligne, je ne sais pas comment utiliser la fonction Repeat pour chaque ligne) :

CODE
tell application "QuarkXPress"
tell document 1
set style of character 1 of text box 1 to bold
set style of character 2 of text box 1 to bold
set style of character 3 of text box 1 to bold
set style of character 4 of text box 1 to bold
set style of character 5 of text box 1 to bold
end tell
end tell


Mettre en gras ok, mais changer la font, impossible sad.gif
D'après ce que j'ai trouvé sur le web, ça devrait être quelque chose du genre :

CODE
tell application "QuarkXPress"
tell document 1
set fontname of text of every text of every story to "Formata-Bold"
end tell
end tell


Mais malheureusement, il me sort toujours une erreur sad.gif

Écrit par : baron 30 May 2018, 17:10

Bonjour et bienvenue ! smile.gif

Pour ma part, je n'utilise pas Quark XPress et ne pourrais vraiment pas t'aider directement mais il serait utile pour d'autres de préciser la version utilisée…

Par ailleurs, ce qui peut être pratique : dans le Finder, tu saisis l'icône d'XPress et tu la lâches sur celle de l'Editeur AppleScript (dans le dossier Utilitaires) : tu obtiens une fenêtre qui reprend et détaille toutes les commandes AppleScript supportées par XPress.

Pour les cinq premiers caractères de chaque ligne, il est normal que tu n'y arrives plus après avoir supprimé les retours à la ligne ; commence par changer leur police en recherchant les cinq caractères après le saut de ligne, puis ensuite seulement tu supprimeras les sauts de ligne. wink.gif

Enfin, regarde aussi si XPress ne supporte pas les expressions régulières (Recherche GREP ou Styles GREP). Avec InDesign en tout cas, c'est ainsi que je te dirais de procéder…

P.S. Il semble qu'avec XPress, il y ait des « styles conditionnels » qui s'en approchent :
• http://www.ludovic-martin.com/2011/04/quark-xpress-9-teste-et-approuve.html

Écrit par : CMJS 31 May 2018, 09:39

Les styles conditionnels vont effectivement faire ce que tu veux pour la mise sous style.
Et tu ne dis pas dans quelle version tu travailles. La dernière en date est la 2018, mais perso je travaille encore (pas uniquement) en 9.5.

Écrit par : jjalias 31 May 2018, 15:01

Citation (baron @ 30 May 2018, 18:10) *
Bonjour et bienvenue ! smile.gif

Pour ma part, je n'utilise pas Quark XPress et ne pourrais vraiment pas t'aider directement mais il serait utile pour d'autres de préciser la version utilisée…

Par ailleurs, ce qui peut être pratique : dans le Finder, tu saisis l'icône d'XPress et tu la lâches sur celle de l'Editeur AppleScript (dans le dossier Utilitaires) : tu obtiens une fenêtre qui reprend et détaille toutes les commandes AppleScript supportées par XPress.

Pour les cinq premiers caractères de chaque ligne, il est normal que tu n'y arrives plus après avoir supprimé les retours à la ligne ; commence par changer leur police en recherchant les cinq caractères après le saut de ligne, puis ensuite seulement tu supprimeras les sauts de ligne. wink.gif

Enfin, regarde aussi si XPress ne supporte pas les expressions régulières (Recherche GREP ou Styles GREP). Avec InDesign en tout cas, c'est ainsi que je te dirais de procéder…

P.S. Il semble qu'avec XPress, il y ait des « styles conditionnels » qui s'en approchent :
• http://www.ludovic-martin.com/2011/04/quark-xpress-9-teste-et-approuve.html


Merci pour ta réponse wink.gif

Malheureusement, Xpress ne gère pas les expressions régulières (ça aurait été tellement plus simple sad.gif )

Effectivement, pour les 5 premiers caractères, j'ai bien mis ce bout de code avant le premier pour que ça marche.
J'ai un peu avancé, j'arrive à mettre les 5 premiers caractères en gras avec "set style" (solution provisoire), changer la taille avec "set size", mais changer la police, impossible !
J'ai beau regardé sur plein de forums en anglais, mais je dois sûrement disposer d'une commande fausse (set font, set fontname, set font name, etc...).
Voilà le bout de code que j'ai pour l'instant :

CODE
tell application "QuarkXPress"
tell document 1
set numParagraphs to (count paragraphs of text of every text of every story)
set paragraphNum to 1
repeat while paragraphNum ≤ numParagraphs
set style of character 1 of every paragraph of text of every text of every story to bold
set style of character 2 of every paragraph of text of every text of every story to bold
set style of character 3 of every paragraph of text of every text of every story to bold
set style of character 4 of every paragraph of text of every text of every story to bold
set style of character 5 of every paragraph of text of every text of every story to bold
set paragraphNum to paragraphNum + 1
end repeat
end tell
tell document 1
set text of every text of every story where it is "MAG
" to "- "
set text of every text of every story where it is "DOC
" to "- "
set text of every text of every story where it is "MUSIQUE
" to "- "
set text of every text of every story where it is "DIRECT
" to "- "
set text of every text of every story where it is "DIV
" to "- "
set text of every text of every story where it is "Conf
" to "- "
set text of every text of every story where it is "
" to " - "
end tell
end tell


Écrit par : CMJS 1 Jun 2018, 09:09

Pour appliquer une police, c'est

Code
set font to "Helvetica"
par exemple.
Plutôt que d'avoir 5 lignes avec
Code
set style of character…
tu peux le faire en une seule :
Code
set style of character 1 thru 5 to…

Il y a une boucle inutile : si tu appliques un style aux caractères 1 à 5 de tous les paragraphes de toutes les stories, il n'y a pas de raison de vouloir mettre à l'intérieur d'une boucle. C'est fait une fois pour toutes.
Tu peux également remplacer la série de remplacements de texte en rassemblant dans un ensemble tout ce que tu veux changer (par exemple,
Code
set Texte_a_remplacer to {"MAG","DOC","MUSIQUE","DIRECT","DIV"}
), puis dans une boucle opérer tes changements : par exemple,
Code
    tell document 1
        repeat with i from 1 to length of Texte_a_remplacer
            set (every text of every story where it is (item i of Texte_a_remplacer)) to "- "
        end repeat
    end tell

De la sorte, si tu as un ajout à faire, tu n'as pas besoin d'ajouter une ligne, mais juste le texte dans l'ensemble. Et si tu devais remplacer du texte en fonction de celui-ci (par exemple, remplacer MAG par Magazine, DOC par Documentaire, etc.), il te suffirait de jouer avec deux listes correpondantes.

Écrit par : jjalias 1 Jun 2018, 09:57

Citation (CMJS @ 1 Jun 2018, 10:09) *
Pour appliquer une police, c'est
Code
set font to "Helvetica"
par exemple.
Plutôt que d'avoir 5 lignes avec
Code
set style of character…
tu peux le faire en une seule :
Code
set style of character 1 thru 5 to…

Il y a une boucle inutile : si tu appliques un style aux caractères 1 à 5 de tous les paragraphes de toutes les stories, il n'y a pas de raison de vouloir mettre à l'intérieur d'une boucle. C'est fait une fois pour toutes.
Tu peux également remplacer la série de remplacements de texte en rassemblant dans un ensemble tout ce que tu veux changer (par exemple,
Code
set Texte_a_remplacer to {"MAG","DOC","MUSIQUE","DIRECT","DIV"}
), puis dans une boucle opérer tes changements : par exemple,
Code
    tell document 1
        repeat with i from 1 to length of Texte_a_remplacer
            set (every text of every story where it is (item i of Texte_a_remplacer)) to "- "
        end repeat
    end tell

De la sorte, si tu as un ajout à faire, tu n'as pas besoin d'ajouter une ligne, mais juste le texte dans l'ensemble. Et si tu devais remplacer du texte en fonction de celui-ci (par exemple, remplacer MAG par Magazine, DOC par Documentaire, etc.), il te suffirait de jouer avec deux listes correpondantes.


Wow, merci beaucoup pour cette réponse si complète !

1) Pour le "set font to "Helvetica", j'avais trouvé ça sur le web, mais ça ne passe pas, je ne sais pas pq sad.gif
Exemple :
CODE
set font of every paragraph of text of every text of every story to "Formata-Medium"

Message d'erreur : "Erreur dans QuarkXPress : Le type de certaines données est incorrect."
ou
CODE
set font to "Formata-Medium"

Message d'erreur : "Erreur dans QuarkXPress : Il est impossible de régler font of document 1 à "Formata-Medium"."
(je précise que j'ai bien récupéré le nom Postcript de la police dans le livre des polices.

2) Pour la technique de réduire à 1 ligne les 5 lignes de codes pour mettre les 5 premiers caractères en gras, j'avais aussi essayé la méthode que tu dis, mais pareil, j'ai à chaque fois un message d'erreur :
"Erreur dans QuarkXPress : Il est impossible de régler style of characters 1 thru 5 of every paragraph of every text of every text of every story of document 1 à bold."
Mais en 5 lignes, il marche parfaitement sad.gif

3) Pour le "set Texte_a_remplacer to {"MAG","DOC","MUSIQUE","DIRECT","DIV"}", je vais essayer ça, et je te dirais si ça marche. C'est vrai que ça a l'air beaucoup plus propre, rapide et efficace.

Encore une fois merci pour ton aide !!

Ps: j'ai la version 9.5.4.1 de QuarkXpress

Écrit par : CMJS 4 Jun 2018, 10:15

Attention, le langage AppleScript est très précis et il s'agit absolument d'associer les actions aux bons destinataires.

Si tu as :

Code
Message d'erreur : "Erreur dans QuarkXPress : Il est impossible de régler font of document 1 à "Formata-Medium"."
, c'est qu'une police ne peut pas être appliquée au document en tant que tel, mais au texte seulement. Tu dois donc "dire" au bon élément ce que tu veux faire, en l'occurrence insérer un bloc
Code
tell story 1 of current box
, par exemple, ou plutôt, comme tu veux modifier toutes les occurrences dans tous les blocs de texte :
Code
set font of every text of every story to "Formata-Medium"
.

2)
Code
"Erreur dans QuarkXPress : Il est impossible de régler style of characters 1 thru 5 of every paragraph of every text of every text of every story of document 1 à bold."
Idem : un style de caractère est appliqué à du texte, lui-même étant un élément d'une story, élément d'un document, donc il faudrait simplifier comme ceci :
Code
set style of characters 1 thru 5 of every story to bold.
(ici, j'ai supprimé of document 1 parce qu'on se trouve déjà dans un bloc tell document 1.

Tiens-nous au courant.

P.-S. — Bien que le forum ne soit plus vraiment actif, tu trouveras beaucoup de bons conseils sur http://publi-script.com/forums/index.php?action=collapse;c=2;sa=expand;c8ea68b=bd2f4762b076f03915fc4888eebc1236#c2. C'est en anglais, mais je suppose et j'espère que tu comprends cette langue (ça aide énormément pour l'AppleScript).

P.-S. 2 — Ci-joint une visualisation de la hiérarchie des éléments (screenshot du Dictionnaire de QuarkXPress 2017 dans Script Debugger).

 

Écrit par : jjalias 6 Jun 2018, 09:52

Merci pour ta réponse.
Malheureusement, ça ne marche toujours pas.
Regarde ce petit bout de code :

CODE
tell application "QuarkXPress"
tell document 1
tell every text of current box
set size to 8
set font to "Formata-Medium"
end tell
end tell
end tell


Le "set size to 8" fonctionne bien.
Le "set font to "Formata-Medium" me retourne :

CODE
tell application "QuarkXPress"
set size of every text of current box of document 1 to 8
set font of every text of current box of document 1 to "Formata-Medium"
--> error number -1703
Résultat :
error "Erreur dans QuarkXPress : Le type de certaines données est incorrect." number -1703 to item


Je n'arrive vraiment pas à comprendre le problème sad.gif

Écrit par : hellomorld 6 Jun 2018, 13:05

Et si au lieu de changer la police et la taille, tu changeais la feuille de style ?

Écrit par : jjalias 6 Jun 2018, 16:57

Citation (hellomorld @ 6 Jun 2018, 14:05) *
Et si au lieu de changer la police et la taille, tu changeais la feuille de style ?


J'ai aussi essayé, mais j'ai aussi un message d'erreur à chaque fois sad.gif
Je t'aurais bien donné le code que j'ai essayé pour changer le style, mais c'est sur l'ordi du boulot, je te l'écris demain

Écrit par : CMJS 8 Jun 2018, 08:40

Citation (jjalias @ 6 Jun 2018, 10:52) *
Malheureusement, ça ne marche toujours pas.
Regarde ce petit bout de code :

CODE
tell application "QuarkXPress"
tell document 1
tell every text of current box
set size to 8
set font to "Formata-Medium"
end tell
end tell
end tell


C'est parce que tu ne t'adresses pas correctement à l'objet texte (non-respect de la hiérarchie des éléments). Le texte ne fait pas partie des "box", mais des stories. Donc, essaie plutôt ceci :

CODE
tell application "QuarkXPress"
tell document 1
tell every text of story 1 of current box
set size to 8
set font to "Formata-Medium"
end tell
end tell
end tell


EDIT : Pour t'aider à mieux comprendre, je te donne des saisies d'écran de Script Debugger (vues du Dictionnaire de l'application > text). J'espère que cela t'aidera à mieux comprendre et visualiser la question de la hiérarchie des éléments (Where used). Sinon, dis-moi.

 

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)