[Pythonmac-SIG] Re: Re: appscript and XXXX - what is my app instance returning?

Peter Waibel waibel at opix.de
Fri Apr 1 20:03:37 CEST 2005


Try this:
####################################
#!/usr/bin/pythonw
from appscript import *
qxd = app('QuarkXPress')
# get the page width
pw_hm = qxd.documents[1].page_width.get()
# pw_hm is quarks class horizontal_measurement
# coerce horizontal_measurement to k.Float
pw_float = qxd.coerce(pw_hm,to=k.Float)
print pw_float
###################################
Quark uses a lot of special data types:
 agate_units
 centimeter_units
 cicero_units
 inch_units
 inch_decimal_units
 millimeter_units
 pica_units
 point_units
 base_units
 font_units
 grid_increment_units
 inset_units
 leading_units
 outset_units
 thick_units
 trap_units
 agates_point
 agates_rectangle
 centimeters_point
 centimeters_rectangle
 ciceros_point
 ciceros_rectangle
 inches_point
 inches_rectangle
 measurements_point
 measurements_rectangle
 millimeters_point
 millimeters_rectangle
 percent_point
 picas_point
 picas_rectangle
 points_point
 points_rectangle
 angle_measurement
You must be very carefull to use the right data type.
This is not an appscript problem! This is a Quark "feature".
If you use has's help() function for the document object you will get 
exactly the info you need. Try
qxd.help('-t document')
and you will get:
======================================================================== 
========
Appscript Help (-t document)
Reference: app(u'/Applications/QuarkXPress/QuarkXPress.app')
------------------------------------------------------------------------ 
--------
Terminology for document class
Class: document -- A document
 Parent:
 default_document
 Properties:
	......
 page_height : k.vertical_measurement (r/o) -- the height of a 
page in this document
 page_width : k.horizontal_measurement (r/o) -- the width of a 
page in this document
	-------
page_height and page_width are properties of the class document.
The page inherits these properties from the document.
This is another Quark "feature". The object hierachy in Quark is not 
tree but a labyrinth.
I did coding with AppleScript for years. Most of them to drive 
QuarkXpress and I agree with has's statments
that you have to distinguish application-related problems from 
language-related problems!
For the past 2 hours I did my first lines of code with appscript. I'm 
pretty sure that I will switch to appscript!
Has did a really good job!
Peter
Am 01.04.2005 um 16:23 schrieb has:
> 'me' wrote:
>>>> tell application "QuarkXPress"
>>> 	tell document 1
>>> 		set pw to page width as real
>> pw = app('QuarkXPress').documents[1].page_width.get(astype=k.Float)
>>> But I haven't a clue where to find Quark's coercion method,
>> You pass the type you want the result returned as as an optional 
> argument to the command. It's the same for any app, e.g.:
>> from appscript import *
> print app('Finder').home.items.get(astype=k.alias_list) # return a 
> list of Carbon.File.Aliases
>> Of course, working out what coercions an application implements can be 
> a barrel of laughs as it's one of those items that's often not 
> documented by the developer.
>>>> or the keyword for number.
>> AE type constants are in Carbon/AppleEvents.py. Appscript scrapes the 
> constant names and lops off the 'type' so that e.g. typeChar becomes 
> k.Char, typeFloat becomes k.Float, etc. A better system is definitely 
> needed, but I haven't figured one out yet.
>>>> Any other suggestions for converting this AppleScript coercion into 
>> python?
>> tell application "QuarkXpress"
>> tell document 1
>> set pw to (page width as number)
>>>> pw.get(astype=k.Char) ## it doesn't like 'astype' or 'k.Char'
>> The 'astype' argument should work ok. The problem is figuring out what 
> value to supply; you'll get a coercion error otherwise. Try k.Float 
> (what AS calls 'real').
>>>> pw.get(type=appscript.k.inch_units)
>> Unfortunately, using one of Quark's classes simply returns
>> another <_AE.AEDesc object>
>> The 'type' keyword argument isn't recognised, so is simply ignored. (I 
> should really go back to raising an error on unknown argument names.)
>>>> The trick of passing a coercion was a complete surprise.
>> It's what AS does, except AS obfuscates it to look like it's the 
> language doing the coercion, not the application. AS is master of 
> leaky abstractions.
>>>> That idea isn't really obvious from the very nice documentation for 
>> appscript.
>> That's because I somehow forgot to document it. Apologies; I've added 
> it to my TO DO list.
>>>> I am still hoping to spawn a more fruitful discussion of how to 
>> explore an app's interface using appscript.
>> What do you need to know?
>> The built-in help() system is good for interactive exploration. Of 
> course, since it depends on the application's terminology resource it 
> can't show you any information not already supplied there; all it does 
> is present what is available in a more helpful fashion. The appscript 
> documentation still lacks a section on the basic concepts and 
> principles behind application scripting which is a problem if you 
> don't already know what you're looking at; obviously this will be 
> addressed at some point.
>>>> But if we're complaining about having to be pre-cognizant of the most 
>> minute detail
>> for an App's implementation of AppleScript before being able to do 
>> anything with it;
>> I'd like to point out that being omniscient is a standard requirement 
>> for writing IN AppleScript.
>> Yep. Appscript is NOT a magic fix for the problems caused by 
> individual applications' weird or broken scripting implementations and 
> painfully inadequate documentation; the only solution for that is for 
> individual users to petition those applications' developers to fix 
> these problems. File bug reports, file feature requests, have all your 
> fellow users get onto them too.
>> The one thing appscript does give you is a decent language to write 
> your scripts in. The AppleScript language, while it has some nice 
> features and [largely unrealised] ideas, is mostly a piece of crud: 
> slow, buggy, woefully short on the sorts of basic functionality you'd 
> expect from any half-decent scripting language, and virtually zero 
> library support. (Not the fault of the AS developers; blame the 
> clueless suits in Apple management for suddenly choking off its life 
> support two minutes after it was born and neglecting it ever since.)
>>>> To do the most simple thing, you must bang your head against the wall 
>> until you hit upon the secret. Either by chance or by reading other 
>> people's discoveries. You're never, ever privy to the source. Don't 
>> even try to ask.
>> The first really useful thing to learn in AppleScript is how to 
> distinguish application-related problems from language-related 
> problems. At least with appscript you only have the 
> application-related problems to deal with (well, once it's finished, 
> anyway; for now there's still some appscript-related issues to knock 
> out, which is why threads like this are always very helpful for me 
> too). And once you know a problem is application related, you'll know 
> exactly whose balls to go bust until it gets fixed. :) No doubt 
> starting with lots of very insistent requests for radically improved 
> documentation.
>>>> I am honestly amazed appscript works at all.
>> I'm not. The underlying technology - Apple events - is really quite 
> sound, if not quite of the comfort levels we're used to seeing in 
> these days of XML-RPC, SOAP, etc. (Remember, OS 7 was designed to run 
> on 30MHz machines with a couple MB of RAM.) Probably the biggest 
> problem is that the original APIs for resolving Apple events and 
> object specifiers are pretty hairy, much harder to master than the 
> equivalent APIs for assembing GUI interfaces, so designing and 
> implementing scripting interfaces was really tough for application 
> developers to do well. Plus you've got good old early-90s Apple 
> slinging all this wonderful powerful complex technology out the door 
> and then not bothering to explain to anyone how to actually use it.
>> Cocoa Scripting was created to address the former problem (though CS 
> still has lots of problems of its own), and Apple are ever-so-slowly 
> starting to move on the latter (but still have a very long way to go). 
> And hopefully application developers will start providing better 
> documentation and implementations, especially if/when appscript and 
> its ilk start drawing in sizeable numbers of tech-savvy and very 
> demanding new users for this technology, cos there's nothing like a 
> big vocal userbase banging at the door to motivate developers to do 
> better. ;)
>> Cheers,
>> has
> -- 
> http://freespace.virgin.net/hamish.sanderson/
> _______________________________________________
> Pythonmac-SIG maillist - Pythonmac-SIG at python.org
> http://mail.python.org/mailman/listinfo/pythonmac-sig
>


More information about the Pythonmac-SIG mailing list

AltStyle によって変換されたページ (->オリジナル) /