Bonsoir
J'essaie de bidouiller un script pour éditer les fichiers xml décrivant les documents d' iWork.
Ça marche avec les fichiers "par défaut" dans lesquels tous les descripteurs xml sont à la queue leu leu sans sauts de lignes.
Par contre, lorsque les fichiers sont au format "human readable" c’est à dide découpés en ligne avec des indentations réalisées (par Apple) avec des espaces, je ne trouve pas la solution.
Voilà un script d’essai :
--[SCRIPT]
# prépare les valeurs à insérer dans les blocs de données
set w to 8.5
set h to 11
set wp to ((w as inches as number) * 72.0) as text # EDITED
set hp to ((h as inches as number) * 72.0) as text # EDITED
#===== ADDED from here
if text 2 of (0.5 as text) is "," then
set {oTIDs, AppleScript's text item delimiters} to {AppleScript's text item delimiters, ","}
set wp to text items of wp
set hp to text items of hp
set AppleScript's text item delimiters to "."
set wp to wp as text
set hp to hp as text
set AppleScript's text item delimiters to oTIDs
end if
# Définition d’un bloc de données
"<sl:print-info><sl:NSJobDisposition><sl:string sfa:string=\"NSPrintSpoolJob\"/></sl:NSJobDisposition><sl:NSPaperSize><sl:value><sfa:size sfa:w=\"595\" sfa:h=\"1234\"/></sl:value></sl:NSPaperSize>"
set source to quoted form of result
# Demande à sed de remp^lacer la valeur 595 par la valeur 612.0
do shell script "sed -E 's/(NSPaperSize><sl:value><sfa:size [^>]*sfa:w=\")[0-9.]+/\\1" & wp & "/' <<<" & source
do shell script "sed -E 's/(NSPaperSize><sl:value><sfa:size [^>]*sfa:h=\")[0-9.]+/\\1" & hp & "/ ;' <<<" & quoted form of result
--> "<sl:print-info><sl:NSJobDisposition><sl:string sfa:string=\"NSPrintSpoolJob\"/></sl:NSJobDisposition><sl:NSPaperSize><sl:value><sfa:size sfa:w=\"612.0\" sfa:h=\"792.0\"/></sl:value></sl:NSPaperSize>"
# BINGO, ça a marché. Il me reste à réunir les deux instructions en une seule.
# Un peu plus compliqué, il y a des espaces entre les tronçons de chaînes
" <sl:print-info>
<sl:NSJobDisposition>
<sl:string sfa:string=\"NSPrintSpoolJob\"/>
</sl:NSJobDisposition>
<sl:NSPaperSize> <sl:value> <sfa:size sfa:w=\"595\" sfa:h=\"842\"/>
</sl:value>
</sl:NSPaperSize>"
set source to quoted form of result
do shell script "sed -E 's/(NSPaperSize>.*<sl:value>.*<sfa:size [^>]*sfa:w=\")[0-9.]+/\\1" & wp & "/' <<<" & source
do shell script "sed -E 's/(NSPaperSize>.*<sl:value>.*<sfa:size [^>]*sfa:h=\")[0-9.]+/\\1" & hp & "/ ;' <<<" & quoted form of result
(* " <sl:print-info>
<sl:NSJobDisposition>
<sl:string sfa:string=\"NSPrintSpoolJob\"/>
</sl:NSJobDisposition>
<sl:NSPaperSize> <sl:value> <sfa:size sfa:w=\"612.0\" sfa:h=\"842\"/>
</sl:value>
</sl:NSPaperSize>"
*)
# BINGO, ça a marché !
# Maintenant ça se corse. Le bloc de données utile est découpé en lignes et il faut donc repérer la chaîne :
"<sl:NSPaperSize>
<sl:value>
<sfa:size sfa:w=\"595"
# et là, je ne trouve pas comment faire examiner trois lignes consécutives !
# C'est à dire :
"<sl:NSPaperSize>" & linefeed & "des espaces" & "<sl:value>" & linefeed & "des espaces" & "<sfa:size sfa:w=\"" & "des chiffres"
# définition du bloc de données
" <sl:print-info>
<sl:NSJobDisposition>
<sl:string sfa:string=\"NSPrintSpoolJob\"/>
</sl:NSJobDisposition>
<sl:NSPaperSize>
<sl:value>
<sfa:size sfa:w=\"595\" sfa:h=\"842\"/>
</sl:value>
</sl:NSPaperSize>"
set source to quoted form of result
# J’ai repris les deux instructions ci-dessus mais je ne trouve pas comment les modifier.
do shell script "sed -E 's/(NSPaperSize>.*<sl:value>.*<sfa:size [^>]*sfa:w=\")[0-9.]+/\\1" & wp & "/' <<<" & source
do shell script "sed -E 's/(NSPaperSize>.*<sl:value>.*<sfa:size [^>]*sfa:h=\")[0-9.]+/\\1" & hp & "/ ;' <<<" & quoted form of result
--[/SCRIPT]
Ça m’arrangerait si l'un d'entre vous pouvait m'indiquer l’incantation qui va bien.
Merci d’avance.
Yvan KOENIG (VALLAURIS, France) vendredi 26 octobre 2012 21:14:36
_______________________________________________
archives :
http://listes.patpro.net/list/sshfr.fr.html
http://listes.patpro.net/mailman/listinfo/script_shell_fr