*start* 00593 00112 US gvMsgID: Horning.pa $ 3#14@ 1-Sep-82 9:19:00 PDT Categories: interscript-t-sep82-dec82 Date: 1 Sept. 1982 9:19 am PDT (Wednesday) From: Horning.pa Subject: Re: Forward Compatibility on Node Types In-reply-to: Ayers' message of 31-Aug-82 16:02:24 PDT (Tuesday) To: Ayers cc: Interscript Bob, Is the proposal that the ordering relationship be strictly numeric? PARA-10$ includes PARA-9$, etc. I foresee a demand (which should probably be resisted), for subversions (PARA-1.1$), incompatible alternatives that are both incompatible (PARA-1A$, PARA-1B$), etc. Jim H. *start* 01144 00112 US gvMsgID: Horning.pa $ 3#14@ 1-Sep-82 9:30:00 PDT Categories: interscript-t-sep82-dec82 Date: 1 Sept. 1982 9:30 am PDT (Wednesday) From: Horning.pa Subject: Re: Motivation: Forward Compatibility on Node Types In-reply-to: Ayers' message of 31-Aug-82 18:55:18 PDT (Tuesday) To: Ayers cc: Interscript Bob, [I should have read the whole correspondence before answering.] There is also possibility 4. Use marks as originally contemplated. Leave the definition of PARA$ unchanged, and add the mark COLOR$ to nodes with color. Old editors can accept new scripts, but will not be able to edit PARA$ COLOR$ nodes (although they can continue to edit PARA$ nodes that don't have COLOR$, and to display PARA$ COLOR$ nodes). New editors can accept and edit both, since they "automatically" "know" that they can treat the PARA$ like PARA$. Arrangement 4. is not only more bountiful than arrangement 3, it doesn't require a linearization of something that is sure to be a lattice. It has the drawback that PARA$COLOR$GRAPHICS$BARCHARTS$THREED$ is somewhat longer and clumsier than PARA-43$. Jim H. *start* 00764 00113 US gvMsgID: McGregor.pa $ 3#14@ 1-Sep-82 10:15:40 PDT Categories: interscript-t-sep82-dec82 Date: 1-Sep-82 10:15:40 PDT From: McGregor.pa Subject: Re: Motivation: Forward Compatibility on Node Types In-reply-to: Horning's message of 1 Sept. 1982 9:30 am PDT (Wednesday) To: Horning.pa cc: Ayers, Interscript I strongly approve of Jim's suggestion to use marks. They provide all of the functionality of proposals 1-3 without the problem of assigning ordered versions if several editors all want to add new functionality to paragraphs. E.g. PARA-43$ has both color and texture, PARA-42$ only had color and $PARA-41$ only had texture. The verbosity of PARA$COLOR$GRAPHICS$BARCHARTS$THREED$ probably goes away with encoding schemes. Scott. *start* 00557 00113 US gvMsgID: Mitchell.PA $ 3#14@ 1-Sep-82 10:30:00 PDT Categories: interscript-t-sep82-dec82 Date: 1 Sept. 1982 10:30 am PDT (Wednesday) From: Mitchell.PA Subject: Re: Motivation: Forward Compatibility on Node Types In-reply-to: McGregor's message of 1-Sep-82 10:15:40 PDT To: McGregor cc: Horning, Ayers, Interscript I agree, and the verbosity goes away by using something like: r ← 'PARA$ COLOR$ GRAPHICS$ BARCHARTS$ THREED$' once and then simply invoking r as necessary: {r <Now is the time for ... Interscript>} Jim M. *start* 00468 00110 US gvMsgID: Ayers.PA $ 3#14@ 2-Sep-82 11:16:47 PDT Categories: interscript-t-sep82-dec82 Date: 2-Sep-82 11:16:47 PDT (Thursday) From: Ayers.PA Subject: Draft Concepts and Facilities To: JMoyer cc: Interscript The (fragmentary) draft Concepts and Facilities that is to be sent to Charles' subcommitee can be found as McKinley > PubliC Ayers > InterS C and F 1sept82. It is formatted for each document in the folder to be printed two-sided. Bob *start* 00689 00110 US gvMsgID: Ayers.PA $ 3#14@18-Sep-82 11:28:04 PDT Categories: interscript-t-sep82-dec82 Date: 18-Sep-82 11:28:04 PDT (Saturday) From: Ayers.PA Subject: Seybold Report on Publishing: Watchtower/IBM Publishing System To: Interscript Recommended reading: a twelve page report in the current Seybold on the Watchtower (Jehovah Witness printing arm) designed and developed publishing system that is now available as a "installed user program" from IBM. Features: styles a la GML, page-layout via boxes and text flow from box to box, tables, math, horizontal and vertical justification via TEX-like "penalties", fancy run-around (e.g. around a circular picture ... Bob *start* 00727 00110 US gvMsgID: Ayers.PA $ 3#14@21-Sep-82 14:21:47 PDT Categories: interscript-t-sep82-dec82 Date: 21-Sep-82 14:21:47 PDT (Tuesday) From: Ayers.PA Subject: Found in a Ms ... To: Interscript From the "First Working Draft" of X3J6's "Computer Languages for the Processing of Text" Section 15: Formatting: "... Any who expect two different implementations of this standard to produce identical output on identical devices from identical input will be disappointed. It may be possible to guarantee that the output form will be the same, but differences in widowing, hyphenation, kerning and other such procedural items will make it unlikely that page and line breaks occur in the same places." Bob *start* 00450 00110 US gvMsgID: Ayers.PA $ 3#14@28-Sep-82 16:45:04 PDT Categories: interscript-t-sep82-dec82 Date: 28-Sep-82 16:45:04 PDT (Tuesday) From: Ayers.PA Subject: Private Tags ?? To: Mitchell cc: Horning, Ayers I see that tag ::= universal "$" I thought that we could have "wellknown" tags like TEXT$ and also private tags like graphicsframe$ and we told them apart based on upper-case-ness. Was this just a delusion of mine? Bob *start* 00467 00112 US gvMsgID: Horning.pa $ 3#14@28-Sep-82 17:45:00 PDT Categories: interscript-t-sep82-dec82 Date: 28 Sept. 1982 5:45 pm PDT (Tuesday) From: Horning.pa Subject: Re: "Node" => "Span" ?? In-reply-to: Ayers' message of 28-Sep-82 16:34:58 PDT (Tuesday) To: Ayers cc: Interscript Bob, Reads OK to me. I'd been playing with "Group" or "Unit," but "Span" is pretty neutral (therefore, likely to be trouble-free), unless you're a SNOBOL hacker. Jim H. *start* 00438 00110 US gvMsgID: Ayers.PA $ 3#14@28-Sep-82 16:34:58 PDT Categories: interscript-t-sep82-dec82 Date: 28-Sep-82 16:34:58 PDT (Tuesday) From: Ayers.PA Subject: "Node" => "Span" ?? To: Interscript I've never liked the word "node" in the language [node ::= "{" item* "}"]. It seems to computer-ese and not enough document-ese. How about "span"? I'm starting to write the standard and "span" reads much more naturally. Bob *start* 00339 00113 US gvMsgID: Mitchell.PA $ 3#14@29-Sep-82 9:48:00 PDT Categories: interscript-t-sep82-dec82 Date: 29 Sept. 1982 9:48 am PDT (Wednesday) From: Mitchell.PA Subject: Re: "Node" => "Span" ?? In-reply-to: Ayers' message of 28-Sep-82 16:34:58 PDT (Tuesday) To: Ayers cc: Interscript I think "span" is a fine term. Jim M. *start* 00347 00112 US gvMsgID: Horning.pa $ 3#14@28-Sep-82 17:46:00 PDT Categories: interscript-t-sep82-dec82 Date: 28 Sept. 1982 5:46 pm PDT (Tuesday) From: Horning.pa Subject: Re: Private Tags ?? In-reply-to: Ayers' message of 28-Sep-82 16:45:04 PDT (Tuesday) To: Ayers cc: Mitchell, Horning Bob, If so, I've suppressed the memory. Jim H. *start* 00791 00110 US gvMsgID: Ayers.PA $ 3#14@28-Sep-82 17:07:22 PDT Categories: interscript-t-sep82-dec82 Date: 28-Sep-82 17:07:22 PDT (Tuesday) From: Ayers.PA Subject: Untagged nodes To: Interscript A while back, we discussed the untagged node. Example: { TEXT$ <cat dog > { font.italic←TRUE <unicorn> } < fox bat> } where the utility of the untagged node is precisely that the "}" pops local changes to the environment. I suggest that we shouldn't use a node for this purpose, but use some more lightweight mechanism [up arrow and down arrow in the syntax?]. Even if we DO use a node like this, I propose to CALL it something else. E.g. call a 'real' node a "span" as in "text span" and call the untagged node used for push-pop purposes a "interval"? "descent"? "chunk"? Bob *start* 00430 00112 US gvMsgID: Horning.pa $ 3#14@28-Sep-82 17:49:00 PDT Categories: interscript-t-sep82-dec82 Date: 28 Sept. 1982 5:49 pm PDT (Tuesday) From: Horning.pa Subject: Re: Untagged nodes In-reply-to: Ayers' message of 28-Sep-82 17:07:22 PDT (Tuesday) To: Ayers cc: Interscript ? Why not "untagged span"? Or are you proposing that the weight of the mechanism should differ by more than the presence/absence of tags? *start* 00824 00113 US gvMsgID: Mitchell.PA $ 3#14@29-Sep-82 9:54:00 PDT Categories: interscript-t-sep82-dec82 Date: 29 Sept. 1982 9:54 am PDT (Wednesday) From: Mitchell.PA Subject: Re: Private Tags ?? In-reply-to: Ayers' message of 28-Sep-82 16:45:04 PDT (Tuesday) To: Ayers cc: Mitchell, Horning I see no reason why private tags shouldn't be universal ids (i.e., like Lisp atoms). You are perfectly free to use a private tag like GRAPHICSFRAME$. I don't see any need to tell them apart, since there will undoubtedly be public tags that a given editor doesn't understand either. You might worry that a private tag might conflict with a future, legitimate, but unrelated public tag (e.g., GRAPHICSFRAME$). In that case, one could use some simple convention like PRIVATEGRAPHICSFRAME$ to ensure uniqueness. Jim M. *start* 00695 00113 US gvMsgID: Mitchell.PA $ 3#14@29-Sep-82 10:00:00 PDT Categories: interscript-t-sep82-dec82 Date: 29 Sept. 1982 10:00 am PDT (Wednesday) From: Mitchell.PA Subject: Re: Untagged nodes In-reply-to: Horning's message of 28 Sept. 1982 5:49 pm PDT (Tuesday) To: Horning cc: Ayers, Interscript This is in response to Jim Horning's comment about untagged spans. I think we should reserve untagged spans for simple nesting and scope. This is a need that has cropped up from time to time. If untagged spans could also denote spans with private meanings but no tags, I think it would cause trouble. So I vote for using them solely for grouping a sequence of (sub)spans. Jim M. *start* 06009 00110 US gvMsgID: Ayers.PA $ 3#14@29-Sep-82 10:45:30 PDT Categories: interscript-t-sep82-dec82 Date: 29-Sep-82 10:45:30 PDT (Wednesday) From: Ayers.PA Subject: On "Pure Subsets" To: Mitchell That was really the same conversation as the one on forward compatibility. Horning's suggestion of "PARA$ COLOR$" seems to have been the best one. ---------- Date: 31-Aug-82 16:02:24 PDT (Tuesday) From: Ayers.PA Subject: Forward Compatibility on Node Types To: Interscript I propose that we allow for smooth extensibility of our standard node types. If we name our paragraph node a PARA-0$, then we can, later, define a PARA-1$ which incorporates everything in a PARA-0$ with some new goodies. Then an editor which "understands" a PARA-1$ node can easily know that it also "understands" all PARA-0$ nodes just by considering that they are the same as a PARA-1$. Bob ---------- Date: 31 Aug. 1982 5:37 pm PDT (Tuesday) From: Mitchell.PA Subject: Re: Forward Compatibility on Node Types In-reply-to: Ayers' message of 31-Aug-82 16:02:24 PDT (Tuesday) To: Ayers cc: Interscript If you just call them PARA0$ and PARA1$ the current language will even allow it. It sounds like a fine idea (but I immediately have visions of PARA43$. Why is that?). Jim ---------- Date: 31-Aug-82 17:55:39 PDT (Tuesday) From: Ayers.PA Subject: Re: Forward Compatibility on Node Types In-reply-to: Mitchell's message of 31 Aug. 1982 5:37 pm PDT (Tuesday) To: Mitchell cc: Interscript Yes, I understand that the language allows it. What I was trying to suggest was that we institutionalize, via the semantics in the standard, that PARA23$ MUST define a strict superset of PARA22$. This would allow editors to implement back-compatibility without a bound-in list of the flavor "NEWPARA$ is a superset of PARA81$ is a superset of PARA$ ..." That's all. Bob --------- Date: 31-Aug-82 18:55:18 PDT (Tuesday) From: Ayers.PA Subject: Motivation: Forward Compatibility on Node Types In-reply-to: Karlton's message of 31-Aug-82 17:58:04 PDT (Tuesday) To: Karlton cc: Interscript Suppose that, after the Interscript standard is approved, we see the need to add a new semantic (say "color") to the PARA$. We have three choices: 1. Update to a new INCOMPATIBLE version (Interscript83) of the standard which has "color" in a PARA$. Old editors (that understood Interscript82) would not be able to accept any Interscript83 documents. New editors that wanted to continue to process Interscript82 would contain special compatibility code. 2. Update to a new COMPATIBLE version of the standard by introducing a new node, the PARAX$, which is like a PARA$ but with "color." Old editors can accept new scripts, but will not be able to edit PARAX$s. New Editors will contain special code reminding them that they can, luckily, display and edit PARA$s with the same module that plays with PARAX$s. 3. Arrange things so we can update to a new compatible version of the standard with a PARA-1$, which is like a PARA-0$ but with "color." Old editors can accept new scripts, but will not be able to edit PARA-1$s. New editors can accept and edit both, since they "automatically" "know" that they can treat the PARA-1$ like a PARA-0$. Arrangement three seems the most bountiful. Bob ---------- Date: 1 Sept. 1982 9:19 am PDT (Wednesday) From: Horning.pa Subject: Re: Forward Compatibility on Node Types In-reply-to: Ayers' message of 31-Aug-82 16:02:24 PDT (Tuesday) To: Ayers cc: Interscript Bob, Is the proposal that the ordering relationship be strictly numeric? PARA-10$ includes PARA-9$, etc. I foresee a demand (which should probably be resisted), for subversions (PARA-1.1$), incompatible alternatives that are both incompatible (PARA-1A$, PARA-1B$), etc. Jim H. ---------- Date: 1 Sept. 1982 9:30 am PDT (Wednesday) From: Horning.pa Subject: Re: Motivation: Forward Compatibility on Node Types In-reply-to: Ayers' message of 31-Aug-82 18:55:18 PDT (Tuesday) To: Ayers cc: Interscript Bob, [I should have read the whole correspondence before answering.] There is also possibility 4. Use marks as originally contemplated. Leave the definition of PARA$ unchanged, and add the mark COLOR$ to nodes with color. Old editors can accept new scripts, but will not be able to edit PARA$ COLOR$ nodes (although they can continue to edit PARA$ nodes that don't have COLOR$, and to display PARA$ COLOR$ nodes). New editors can accept and edit both, since they "automatically" "know" that they can treat the PARA$ like PARA$. Arrangement 4. is not only more bountiful than arrangement 3, it doesn't require a linearization of something that is sure to be a lattice. It has the drawback that PARA$COLOR$GRAPHICS$BARCHARTS$THREED$ is somewhat longer and clumsier than PARA-43$. Jim H. ---------- Date: 1-Sep-82 10:15:40 PDT From: McGregor.pa Subject: Re: Motivation: Forward Compatibility on Node Types In-reply-to: Horning's message of 1 Sept. 1982 9:30 am PDT (Wednesday) To: Horning.pa cc: Ayers, Interscript I strongly approve of Jim's suggestion to use marks. They provide all of the functionality of proposals 1-3 without the problem of assigning ordered versions if several editors all want to add new functionality to paragraphs. E.g. PARA-43$ has both color and texture, PARA-42$ only had color and $PARA-41$ only had texture. The verbosity of PARA$COLOR$GRAPHICS$BARCHARTS$THREED$ probably goes away with encoding schemes. Scott. ---------- Date: 1 Sept. 1982 10:30 am PDT (Wednesday) From: Mitchell.PA Subject: Re: Motivation: Forward Compatibility on Node Types In-reply-to: McGregor's message of 1-Sep-82 10:15:40 PDT To: McGregor cc: Horning, Ayers, Interscript I agree, and the verbosity goes away by using something like: r ← 'PARA$ COLOR$ GRAPHICS$ BARCHARTS$ THREED$' once and then simply invoking r as necessary: {r <Now is the time for ... Interscript>} Jim M. *start* 00466 00113 US gvMsgID: Mitchell.PA $ 3#14@ 2-Sep-82 18:12:00 PDT Categories: interscript-t-sep82-dec82 Date: 2 Sept. 1982 6:12 pm PDT (Thursday) From: Mitchell.PA Subject: Part of a document model for Karlton's Interscript implementation To: Mitchell cc: Interscript, Mitchell span := [ | preSp←0 size←NIL postSp←0] box := [ | x ← span y←span] pageFrame := [box| x.size←8.5*inch y.size←11*inch] placement := [ | n←FLUSH s←RAGGED w←FLUSH e←RAGGED] *start* 01178 00110 US gvMsgID: Ayers.pa $ 3#14@ 9-Sep-82 17:57:42 PDT Categories: interscript-t-sep82-dec82 Date: 9-Sep-82 17:57:42 PDT (Thursday) From: Ayers.pa Subject: Character Numbers To: Interscript We state that the charcaters in the text are, effectively, numbers .. positive integers. Let's bound them. Otherwise someone will create a script with the character "1234567890987654321234567890123456789 " in it and complain about the editor that doesn't handle it. Proposal: 1. We allow only characters in [0..65535] 2. Within that range, we (as the Japanese Industrial Standard does) allow only characters that are either: a. In [40B..176B] or in [240B..376B] (ISO graphic positions) b. Such that their high order byte and their low order byte are both in [40B..176B] or in [240B..376B]. The above happens to match the current Xerox Character Set Standard. [Note: What JIS did was to arrange things so that any non-ISO646 character was a sixteen bit character such that each half appears to be a ISO646 character. Thus they avoid all difficulties with a byte turning out to be a control code.] Bob PS: Meeting Friday is at 3:30 in 100G as usual. *start* 01663 00112 US gvMsgID: Lampson.PA $ 3#14@ 5-Oct-82 19:23:00 PDT Categories: interscript-t-sep82-dec82 Date: 5 Oct. 1982 10:23 pm EDT (Tuesday) From: Lampson.PA Subject: Re: External References in Scripts In-reply-to: GCurry.ES's message of 29-Sep-82 11:00:56 PDT (Wednesday) To: GCurry.ES cc: Mitchell, Interscript Interpress has an encoding notation which allows a distinct file to be included, using an installation-specific convention for naming. The semantics is defined to be identical to textually including the file (possibly after some installation-specific transformation) in the master. This seems like a reasonable way of handling voice and fax information, which logically is part of the document. The basic idea is that the separation is strictly an encoding device, and has no impact on the standard. It is possible to make a convention that, for instance, something included must be a complete node, or whatever else might make it easy to skip over the inclusion. The naming conventions are strictly those of the installation, and the implementation should provide a way of making a script in which all the inclusions are replaced by copies, for transmission to non-cooperating installations. Of course, "installation" doesn't necessarily mean a single site, just a single naming environment and set of conventions for turning the inclusion into legal tokens. I think the proper way to handle style sheets is by a notion of parameterization, as is done in System Modelling. A parameterized script is turned into a complete script only when arguments are supplied for the parameters. But I haven't tried to think this through. Butler *start* 01124 00112 US gvMsgID: Horning.pa $ 3#14@ 6-Oct-82 9:54:00 PDT Categories: interscript-t-sep82-dec82 Date: 6 Oct. 1982 9:54 am PDT (Wednesday) From: Horning.pa Subject: Re: External References in Scripts In-reply-to: Lampson's message of 5 Oct. 1982 10:23 pm EDT (Tuesday) To: Lampson cc: Interscript Butler, I think I agree with most of that. The "natural" way to parameterize a script is by using identifiers without explicit local bindings. Their values will be taken from the (installation-dependent) global context. Again, a fully bound script can be produced simply by copying the bindings for all free identifiers from the global context into the script. Might it be natural to view "the file system" as a globally bound identifier, too? Then access to a component would be just like the use of any other qualified name, e.g., FILESYS.filename. The only problem I see with this way of formalizing external references is that it requires a standardized form of file name. (I seem to recall that at one point in the distant past this was the justification for including quoted strings as id's.) Jim H. *start* 01346 00113 US gvMsgID: Mitchell.PA $ 3#14@ 6-Oct-82 10:23:00 PDT Categories: interscript-t-sep82-dec82 Date: 6 Oct. 1982 10:23 am PDT (Wednesday) From: Mitchell.PA Subject: Re: External References in Scripts In-reply-to: Lampson's message of 5 Oct. 1982 10:23 pm EDT (Tuesday) To: Lampson cc: GCurry.ES, Mitchell, Interscript I agree about the inclusion issue. My proposal is that a node (now being called a "span") tagged as INCLUDE$ would be replaced by the script that it names, but at the same level as the INCLUDEd span, not nested within it. This will allow sets of standard definitions to be included with the result being visible at the same level as the INCLUDE$ span. Proposed standard: Tag: INCLUDE Contents: a file name specified as a string constant. Depending on the installation, this may correspond to a print name or a UID for the external script. Semantics: {INCLUDE$ <name>} is replaced by the body of the script in the named file, with the standard heading ("Interscript/Interchange/1.0 {") and trailer ("} ENDSCRIPT") stripped off leaving just the internals of the root span of the included script. E.g., whien included, the following script results in the sequence "default.font ← TimesRoman10" replacing the INCLUDE$ span: Interscript/Interchange/1.0 { default.font ← TimesRoman10 } ENDSCRIPT Jim M. *start* 01986 00111 US gvMsgID: GCurry.ES $ 3#14@29-Sep-82 11:00:56 PDT Categories: interscript-t-sep82-dec82 Date: 29-Sep-82 11:00:56 PDT (Wednesday) From: GCurry.ES Subject: External References in Scripts To: Mitchell.pa cc: Interscript.pa Jim, Interscript currently decrees that scripts are self-contained. That seems to cause problems in two concrete situations (described below). This message wonders what recourses we have. STYLES DATABASE - Is it now the case that Cedar (and later, Star) documents will refer to a styles database for stylistic information. The information may very well be invoked in a document by reference, rather than by value; the intent may be for style editing to happen in the database, rather than in the document. I don't think we have any way to represent this kind of document. VOICE AND FAX IN DOCUMENTS - We are now considering (have prototypes of) voice and facsimile frames in documents. Voice and FAX information is so large that it is very difficult to treat in the same way as other, smaller document components. This is leading us to consider strategies such as voice/FAX servers, which would be responsible for managing the bulk, digitized information. Voice/FAX information in document would REFER to uniquely named readonly originals on a given server. I don't think we can represent these documents either. THE GENERAL PROBLEM - seems to be that we are already beginning to work in a "distributed document"s world, where components are readable shared (e.g., voice, fAX) or even writable shared (e.g., styles in a database). We will encounter some of the same problems you sought to avoid in Interscript (e.g., file system concerns) while not having to deal with others (rigorous specification). We will either have to relax our assumptions about the self-containedness of scripts or agree to limit our implementations to those without external references. Neither of those seems very pleasant. Any ideas? Gael *start* 02197 00111 US gvMsgID: GCurry.ES $ 3#14@ 6-Oct-82 14:27:19 PDT Categories: interscript-t-sep82-dec82 Date: 6-Oct-82 14:27:19 PDT (Wednesday) From: GCurry.ES Subject: Re: External References in Scripts In-reply-to: Lampson.PA's message of 5 Oct. 1982 10:23 pm EDT (Tuesday) To: Lampson.PA cc: GCurry, Mitchell.PA, Horning.pa, Interscript.PA I paraphrased your suggestion for my own understanding and drew some conclusions; is the following what you intended? ILLUSTRATING YOUR SUGGESTION WITH AN EXAMPLE - Suppose there are two "installations", A and B. A document D is created in installation A. Suppose its ENCODING (representation) has two parts, SUPER and SUB; the SUPER part contains a reference to SUB. The VALUE of the document is an Interscript (as defined in Mitchell and Horning's August document) and may be calculated at any INSTANT by textual substitution with other simple transformations. The encoding is installation-specific. If the document must leave the installation, it leaves as its VALUE (i.e., as a single Interscript). Installation B, which receives the Interscript, may then encode the document according to its own conventions (including breaking it into parts). CONSEQUENCES (?) - The reference from SUPER to SUB is NOT STRUCTURE which must be preserved. That is, it would not be possible to support (with Interscript) a scheme which permitted independent editing of SUPER and SUB. In particular, it would not be possible to support databases of shared, editable document components, where the value of a document at an instant was derived from the "latest" value of its components. I can see utility to this editable database kind of approach, but it also seems more difficult to manage across installation boundaries, since it relies on the ability of the evaluator of a document to be able to get the latest version of a referenced document component. Databases of readonly document components would be consistent with your suggestion, however. ALTERNATIVES(?) - might be to permit true references within installations which can support them, but to "dereference" them as a document crossed an installation's boundaries. Gael *start* 00405 00112 US gvMsgID: Horning.pa $ 3#14@ 8-Oct-82 13:17:00 PDT Categories: interscript-t-sep82-dec82 Date: 8 Oct. 1982 1:17 pm PDT (Friday) From: Horning.pa Subject: Re: External References in Scripts In-reply-to: Karlton's message of 7-Oct-82 12:08:56 PDT (Thursday) To: Karlton cc: Interscript Phil, "Would an invocation (INCLUDE["...."]) be more consistent?" It certainly would. Jim H. *start* 00437 00110 US gvMsgID: Ayers.PA $ 3#14@12-Oct-82 14:32:29 PDT Categories: interscript-t-sep82-dec82 Date: 12-Oct-82 14:32:29 PDT (Tuesday) From: Ayers.PA Subject: 31 August Document: BNF page 21 To: Mitchell cc: Ayers What does it mean to allow a 'node' as a 'rhs' ?? Foo ← { TAG$ < content > 1.0 27 assign ← ment } [Note no quotes anywhere] This is allowed since 'rhs' can be a 'content' and 'content' can be a 'node' *start* 00651 00113 US gvMsgID: Mitchell.PA $ 3#14@12-Oct-82 16:11:00 PDT Categories: interscript-t-sep82-dec82 Date: 12 Oct. 1982 4:11 pm PDT (Tuesday) From: Mitchell.PA Subject: Re: 31 August Document: BNF page 21 In-reply-to: Your message of 12-Oct-82 14:32:29 PDT (Tuesday) To: Ayers cc: Mitchell After you say Foo ← { TAG$ < content > 1.0 27 assign ← ment } you can then invoke Foo in a node and its value will there appear; e.g., {Foo <random text> Foo} is equivalent to { { TAG$ < content > 1.0 27 assign ← ment } <random text> { TAG$ < content > 1.0 27 assign ← ment } } Does this answer your question or raise any more? Jim M. *start* 00481 00110 US gvMsgID: Ayers.PA $ 3#14@12-Oct-82 16:16:27 PDT Categories: interscript-t-sep82-dec82 Date: 12-Oct-82 16:16:27 PDT (Tuesday) From: Ayers.PA Subject: Re: invoke Foo in a node and its value will there appear In-reply-to: Your message of 12 Oct. 1982 4:11 pm PDT (Tuesday) To: Mitchell cc: Ayers I thought that I did that with Foo ← "{ TAG$ < content > 1.0 27 assign ← ment }" rather than with Foo ← { TAG$ < content > 1.0 27 assign ← ment } Bob *start* 00697 00113 US gvMsgID: Mitchell.PA $ 3#14@13-Oct-82 10:04:00 PDT Categories: interscript-t-sep82-dec82 Date: 13 Oct. 1982 10:04 am PDT (Wednesday) From: Mitchell.PA Subject: Re: invoke Foo in a node and its value will there appear In-reply-to: Your message of 12-Oct-82 16:16:27 PDT (Tuesday) To: Ayers cc: Mitchell The difference between Foo ← "{ TAG$ < content > 1.0 27 assign ← ment }" and Foo ← { TAG$ < content > 1.0 27 assign ← ment } is that in the latter, ment is invoked and evaluated in the current context, whereas in the former, it (and anything else needing evaluation in the node value) is evaluated in the context extant whenever Foo is invoked. Jim M. *start* 00552 00112 US gvMsgID: Karlton.PA $ 3#14@ 7-Oct-82 12:08:56 PDT Categories: interscript-t-sep82-dec82 Date: 7-Oct-82 12:08:56 PDT (Thursday) From: Karlton.PA Subject: Re: External References in Scripts In-reply-to: Mitchell's message of 6 Oct. 1982 10:23 am PDT (Wednesday) To: Mitchell cc: Lampson, GCurry.ES, Interscript I am uneasy about the suggestion that we have a special case in which the {}s do not have the semantics of popping the values assigned within that span. Would an invocation (INCLUDE["...."]) be more consistent? PK *start* 01089 00110 US gvMsgID: Ayers.PA $ 3#14@11-Oct-82 14:27:17 PDT Categories: interscript-t-sep82-dec82 Date: 11-Oct-82 14:27:17 PDT (Monday) From: Ayers.PA Subject: Strawman to kick around! To: deLaBeaujardiere, GCurry.es, McGregor, Mitchell cc: Interscript OK, gang, here it is. Yours truly's attempt at defining the "well known" document constructs like TEXT and PARAGRAPH and PAGE -- the "document model". I claim that the proposal is reasonably "complete" -- you really can create a script for your favorite document -- no "loose ends." On the other hand, you may think that choices that I made are lousy. It is available as McKinley > PubliC Ayers > I Script Stand'd S4. I am mailing copies to the "To" list, Star mail to Jean-Marie and Gael, paper mail to Scott and Jim. How about the five of us get together late this week and talk things over? How about Friday from 10 to 11, with maybe another session after lunch depending? Direct questions welcome via net or phone; I've stared at it so long that it's hard to tell from here how understandable it all is. Bob *start* 00618 00110 US gvMsgID: Ayers.PA $ 3#14@31-Oct-82 19:26:04 PST Categories: interscript-t-sep82-dec82 Date: 31-Oct-82 19:26:04 PST (Sunday) From: Ayers.PA Subject: On Content as Bindings To: Mitchell, McGregor cc: Ayers As I'm rewriting section four, I notice that when we convert from Paragraph content "width" to a binding to "width", we don't get to take defaults. The Paragraph that wants a "width" of [0,infinity] (the normal case) has to do a binding, lest it get screwed by some binding nearer the root. The default binding could be subsumed into the expansion of "Para$", but still its a cost. Bob *start* 00504 00113 US gvMsgID: McGregor.pa $ 3#14@ 1-Nov-82 8:51:37 PST Categories: interscript-t-sep82-dec82 Date: 1-Nov-82 8:51:37 PST From: McGregor.pa Subject: Re: On Content as Bindings In-reply-to: Ayers' message of 31-Oct-82 19:26:04 PST (Sunday) To: Ayers.pa cc: Mitchell I'm in favor of including defaults to solve you width binding problem in the expansion of Para$. I expect most interscript readers to be clever and efficient when expanding standard abbreviations like Para$. Scott. *start* 01837 00113 US gvMsgID: Mitchell.PA $ 3#14@ 1-Nov-82 9:09:00 PST Categories: interscript-t-sep82-dec82 Date: 1 Nov. 1982 9:09 am PST (Monday) From: Mitchell.PA Subject: Re: On Content as Bindings In-reply-to: Ayers' message of 31-Oct-82 19:26:04 PST (Sunday) To: Ayers cc: Mitchell, McGregor For the record, I think it is a bad idea to consider the precise position of unnamed contents as important and to somehow indicate their absence by omitting one. The only relationship between unnamed contents that is reasonable is that of immediate sequencing, but not that of absolute position. In my view of the world, therefore, we never did get to "take defaults" by omitting a piece of unnamed content. You could get that effect if you put the width in as content (which I also think unwise) and then invoked something like default.width at the correct position to cause the default value to appear. Well, of course, you can perfectly do that if you use a binding for width. You are no worse off. Placing the width as content also removes it from considerations of scope because it has no name, but, again, you can get the same effect with a binding (remembered I promised that named contents are not a problem). So, again, you are no worse off. It seems to me the two cases are roughly equivalent on this issue. Note that a PARA$ node that wants a "width" of [0,infinity] only has to do a binding if the EDITOR THAT IS EXTERNALIZING the script knows that there is a binding between it and the root THAT IS DIFFERENT than what it wants for the given PARA$ node. It can supposedly find this out from its own data structures during externalization. Alternatively, the default binding could be subsumed into the expansion of PARA$ as you suggest, supposedly as something like "box.horizontal.size←default.size". Jim M. *start* 01299 00110 US gvMsgID: Ayers.PA $ 3#14@31-Oct-82 20:59:10 PST Categories: interscript-t-sep82-dec82 Date: 31-Oct-82 20:59:10 PST (Sunday) From: Ayers.PA Subject: New(er) "Section 4" To: deLaBeaujardiere, GCurry.es, Mitchell, McGregor cc: Ayers I've just sent a draft out to you-all. Paper mail to PARC, Star mail to SDD. It's also available in McKinley > PubliC Ayers. It is only partly baked, but I wanted to get it out so that Scott could mull things over while he's vacationing in Dallas. I tried to incorporate all of the action items of our last two meetings, but didn't get to these: 1. Define and allow "stickouts" and sibling overlap. 2. Incorporate outstanding issue list at front of draft (the typewriter-typeface internal issues are still there) A new issue: having replaced the "content" values for things like "width" and "sibling-distance" with bindings, there is no effective defaulting. So most any box has to make a whole bunch of uninteresting assignments like containeeMinimums ← [0,0,0,0] My plan: I'd like to fix this section up a bit with your inputs, add a few pages of prose, and send it out to Interscript.dl. Think it's baked enough to give the dl a peek? Bob PS: It is fairly likely that I'll be in ElSeg this coming Thursday and Friday. *start* 00878 00115 US gvMsgID: Johnston.DLOS $ 3#14@16-Feb-82 6:52:00 PST Categories: interscript-t-sep82-dec82 Date: 16 Feb. 1982 8:52 am CST (Tuesday) From: Johnston.DLOS To: Ayers.PA Subject: Margins & Tabs & Multi-columns Categories: Save cc: Mitchell.PA,Horning.PA,Johnston.DLOS In reading about margins and tabs, I have a question as to whether the handling of multiple columns is considered in InterDoc, and if so, how? I haven't been able to read through all the material available yet, but the question about relative margins posed by Ayers got me to think about our aborted project for multiple columns on the 860. Our approach there was to define an absolute left page margin, and then each column carried its own relative margins and tabs, which allowed columns to be inserted or deleted without any impact on existing columns. How do you handle this? Rick *start* 00431 00113 US gvMsgID: Mitchell.PA $ 3#14@ 1-Sep-82 17:03:00 PDT Categories: interscript-t-sep82-dec82 Date: 1 Sept. 1982 5:03 pm PDT (Wednesday) From: Mitchell.PA Subject: Phil's forcing function To: Mitchell indirections separate issue from tags, but part of safety rules only assign to assignable attributes (specified for each tag) each tag must say what the relevant attributes are [private-only identifiers] *start* 00755 00110 US gvMsgID: Ayers.PA $ 3#14@21-Sep-82 11:03:47 PDT Categories: interscript-t-sep82-dec82 Date: 21-Sep-82 11:03:47 PDT (Tuesday) From: Ayers.PA Subject: Interscript "Boxes" and how they Arrange Themselves To: Mitchell, Horning cc: Ayers One of the things that got left out of the "Concepts and Facilities" was a discussion of the layout parameters of the "boxes". The C&F talked about how the boxes are filled, but did not describe the metrics associated with each box, nor the semantics of those metrics. You-all (especially JimH?) seemed interested in this last month. Is the time ripe for a "strawman" proposal on box metrics? Would it be appropriate for you-all (with my secretarial assistance, perhaps) to generate one? Bob *start* 01410 00110 US gvMsgID: Ayers.PA $ 3#14@29-Sep-82 10:06:02 PDT Categories: interscript-t-sep82-dec82 Date: 29-Sep-82 10:06:02 PDT (Wednesday) From: Ayers.PA Subject: "Untagged Node" Motivation To: Horning cc: Interscript The proposal suggested that we might find a new name (and perhaps a new syntax). The motivation for a new name: I'm writing up the standard and I get to a place where I would like to write something like "A text node may not contain any imbedded nodes" Since we wish to allow the "untagged node" for push/pop purposes, the "any" in the above really refers only to tagged nodes. So we have to qualify it: "A text node may not contain any tagged imbedded nodes" Then, to avoid someone reading the above and thinking that 'contain' means direct containment, I have to further qualify: A text node may not contain any tagged imbedded nodes at any level" Now this is awkward enough, but it gets worse when we want to allow an X node to (directly) contain only Y nodes [Y nodes can be children of an X, but Z nodes cannot]: "An X node may directly contain only Y nodes and untagged nodes. Untagged nodes directly contained within a X node, or untagged nodes whose closest tagged ancestor node is an X node, may contain only untagged nodes or Y nodes." Most of this horrible verbage will go away if the "untagged node" becomes a non-node. *start* 04088 00112 US gvMsgID: Farrell.pa $ 3#14@30-Sep-82 18:51:30 PDT Categories: interscript-t-sep82-dec82 Date: 30-Sep-82 18:51:30 PDT (Thursday) From: Farrell.pa Subject: uppercase / lowercase: what's the difference? To: SDD-AD↑, @[iris]<Morrison>Styles>StylesInterest.dl, SDD-CUSP↑ cc: Farrell.pa Reply-To: Farrell.pa From several angles, it seems to be getting urgent to clarify Star's position on case of letters. The CUSP project is extending its design into the realm of text and properties, and the usefulness of these facilities will be severely restricted if case is not handled in a reasonable fashion. At the same time, Jerry Morrison's Styles design is beginning to grapple with items like setting headers in small caps. I don't know that the Interscript project will be affected, but that seems quite possible. Integration of Star & the Mesa Development Environment looks like another arena. There may be more. For the sake of recipients of this message who don't want to be involved in this discussion, I will collect the first round of responses & publish them to folks who indicate interest; the rest of you can delete & continue now. The basic question (from my vantage point) is, what do we say it means to make a letter uppercase or lowercase? Note that the positions I describe here may be implemented in multiple fashions; in particular, saying that upper- and lower-case forms of a letter are in some sense identical doesn't mean they have to have the same caracter code. There seem to be two positions and an ill-defined middle ground; they all have problems. 1) A # a; upper- and lowercase letters are different characters. Mesa believes this; so does ASCII. Unfortunately, it gives the wrong answer in most interesting cases. The default option for FIND is to ignore case. RP and CUSP currently can't express the option, so they too ignore case. In general, we don't want "ZAP" to sort ahead of "aardvark" in English. As Jean-Marie has argued, if we're going to attend to case at all in a comparison, it should operate at a lower level than characters: "the" < "The" < "this" (accepting for now J-M's contention that lowercase comes first). 2) A = a; case is a property. I have argued this before; I believe Joe Becker has too, in the Character Code standard. It gives a reasonable model for comparisons that may or may not care; it permits use of an existing Star paradigm in a consistent fashion (for instance, selecting a span of text & raising it to uppercase). This position causes serious problems for SameAs (you *DON'T* want to clobber everything to be the same case as your model!) It may also get in the way of higher level properties such as Jerry Morrison is trying to work into Styles: Interactions with SmallCaps may be intelligible; AllCaps has serious problems, if you want to recover the original appearance of text when you turn that off. Finally, the user's keyboard actions are going to have to stay the way things are; this leaves a really obnoxious conflict with the way you set other properties -- which is to say, we can't really treat it as a property all the way, because we can't force users to change the way they set case in typing. and do we want text typed after a capital letter to start out upper case? 3) Neither of the above. It's something like a property, but not quite. A = a, but the distinction between them is not a property. This has two problems: Star likes to talk about the world in terms of objects and their properties; it's ugly (at best) to be introducing new types into the world. Second, this leaves us with the whole specification & education problem. If they're not separate characters, and case isn't a property, what is it? Is it unique in its third state, or are there other aspects of text which also fall in this middle gorund? Does each domain (Cusp, RP, Find, Styles, ...) define it anew from its own viewpoint? Is it it kosher to have one domain (say, Cusp) say "well for our purposes, it's a property" and have another say it's a thing all its own? *start* 02259 00111 US gvMsgID: GCurry.es $ 3#14@13-Oct-82 7:29:38 PDT Categories: interscript-t-sep82-dec82 Date: 13-Oct-82 7:29:38 PDT (Wednesday) From: GCurry.es Subject: Re: External References in Scripts In-reply-to: Mitchell.PA's message of 6 Oct. 1982 10:23 am PDT (Wednesday) To: Mitchell.PA cc: Lampson.PA, GCurry, Interscript.PA Jim, I like the INCLUDE proposal, but still have some questions about it: RELATIONSHIP TO ENCODING - Do you view this strictly as an encoding device? Is it fair to replace the invocation with its value without loss of information (i.e., is the name of the file structure?). If the file name is not "official" Interscript structure, but we tend to preserve it by convention, are we relying on the encoding to carry some interchange semantics? INTERNALIZING A SCRIPT WITH INCLUDES - What happens when we internalize a script and an INCLUDEd name is busy? Can the INCLUDEd name be busy? If it can be shared, there will be a chance that it will not be immediately readable. I am only worried about this when the INCLUDEd name is not accessible because someone else is EDITING it (rather, the value to which it is bound). This seems strange because the (shared) document component is being edited even though the document is not. What happens if the INCLUDEd name cannot be found in the environment? INCLUDED DOCUMENTS VS. INCLUDED DOCUMENT COMPONENTS - How much structure do we require on the value bound to an INCLUDEd name? Your proposal suggested that the value be a well-formed Interscript. We can talk about scripts being well-formed at layer 1 (meaning they satisfy the syntax and semantic rules, if any) and about them being well-formed at layer 2 (meaning they satisfy additional constraints imposed by that layer of the standard - e.g., every document has exactly one DOCUMENT$ node). How to we ensure that the reduction of a file with INCLUDEs results in a well-formed file? I see two alternatives in the general case: (a) permit the values bound to INCLUDEd names to be well-formed Interscript layer 1 fragments, (b) extend the naming scheme so it not only names a file (containing a well-formed layer 2 script) but also names a component of the document described by that file. Gael *start* 03108 00113 US gvMsgID: Mitchell.PA $ 3#14@ 3-Nov-82 12:36:00 PST Categories: interscript-t-sep82-dec82 Date: 3 Nov. 1982 12:36 pm PST (Wednesday) From: Mitchell.PA Subject: How an editor internalizes a script To: Interscript.pa cc: , Mitchell At a document modelling meeting last Friday, October 29, Bob Ayers, Scott McGregor, and I worked out the following method by which an editor can internalize scripts. A little background will help: You should imagine that a script is completely "compiled" into an abstract tree form in which bindings, pieces of contents, etc. are all in the most basic form. Any expressions will have been evaluated, the marks and links for a node will have been collected, etc. Basically, a node in the tree will contain a sequence of bindings and unnamed contents. (Of course, we intend that we will not actually have to build such a tree and will be able to produce a document from a script "as we go", but this model simplifies thinking about the problem, just as it does for compilers). What I want to describe is how an editor then walks around this tree to produce another structure, which is the script's representation as a document in the editor's internal format, whatever that may be. Here is the algorithm for a single node with a single mark that the editor understands: When the right bracket of the node is reached, use its mark, M, to call the relevant procedure, ConvertM, for converting the node into the editor's internal format. ConvertM proceeds to build its data structure (probably one or more records with fields corresponding to relevant attributes) by asking for the values of relevant attributes in the context of the node (just inside the right bracket) and lading its data structures with these values. Note that it is immaterial to this process whether the relevant attributes are bound locally or in some outer scope; all that matters is that it is possible to ask for the value of an attribute and get one (it may be NIL if the attribute is not defined in the scope of this node). What about the node's contents? Well, those were collected in a list in a right-to-left fashion as each piece was evaluated. If a piece of content is just a simple value, this evaluation was simple. If a piece of content is a node, this evaluation mechanism was applied to it recursively and yielded a handle on the resulting data structure to be used when building the data structures for this parent node. If a node has multiple marks, it is not clear what to do. What if the editor has more than one conversion routine that might be applicable to the node? E.g., suppose the editor can handle mark sets (A), (B), and (B C), and a node has marks A, B, and C. Which (subset) of ConvertA, ConvertB, or ConvertBC should it invoke and in what order? I expect that this problem will not arise in practice because marks will not be combined in random combinations, and because an editor will be able to place an ordering on mark sets to enable it to pick a conversion routine, but I am not certain. Your suggestions are welcome. Jim Mitchell *start* 02902 00113 US gvMsgID: Mitchell.PA $ 3#14@16-Nov-82 13:42:00 PST Categories: interscript-t-sep82-dec82 Date: 16 Nov. 1982 1:42 pm PST (Tuesday) From: Mitchell.PA Subject: Interscript meeting with BWL To: Ayers cc: Horning, Mitchell Bob, I have reserved 13.00-15.00 this Thursday with Butler to talk about Interscript. I propose that you, Jim Horning, and I get together with Butler to thrash out the issue of relevant attributes (and their possible declaration) and safety rules for Interscript-conforming editors. This seems a natural follo-on to our discussion last Friday morning as well as to the last discussion among Lampson, Horning, and me. Can you make it? Attached are some sketchy notes from our last discussion on this topic. Jim M. ------------------- Date: 18-Oct-82 17:51:36 PDT From: Horning.pa Subject: Board Transcription: Relevant Attributes To: Mitchell, Lampson cc: Horning.pa "How do you know which attributes are relevant to a node whose tag(s) you don't understand?" 0) The basis for the safety rules is the fact that each node is created by an editor that understands all its tags. The validity of its invariant will be maintained by any editor that preserves the values of its contents and all its relevant attributes. 1) In principle, each script must contain "declarations" for all the tags it contains--although many declarations might be subsumed by a reference to a certain level of the standard. PARA = (foo height justified) 2) A tag's declaration may refer to other tags (a form of subclassing). BAZ = PARA + (x y height) The interpretation is drawn from the "predicate" view of types: the invariant of BAZ is implied by the invariant of PARA, except possibly for terms involving (x y height). 3) Quoted expressions can be tagged to indicate THEIR relevant attributes. We considered restricting quoted expressions so that no other variables appeared free. q ← 'PARA$ cont%' This would restrict -the use of q% to contexts where the relevant attributes of PARA$ were suitably bound, and -the binding of cont in such contexts to expressions in which at most (foo height justified) were free. 4) The statement of the safety rules will be in terms of analysis of the "free variables" (either appear explicitly or are relevant to a tag, and are not bound)--should we perhaps use the term "parameters"? 5) The specifications of tags in the standard will contain more information than the declarations in scripts: The invariants implied will be stated (formally or informally), and at least some of the implications will be made explicit (to create a "free variable logic"). Recap: An edit is safe if it does not result in a node whose invariants cannot be guaranteed -because its tags are all understood, or -because its contents and relevant attributes are all the same as a given node with those tags. Jim H. ------------------- *start* 02514 00110 US gvMsgID: Ayers.PA $ 3#14@15-Nov-82 11:50:52 PST Categories: interscript-t-sep82-dec82 Date: 15-Nov-82 11:50:52 PST (Monday) From: Ayers.PA Subject: Minutes of Fridays (12nov82) Meeting To: deLaBeaujardiere, GCurry.es, Mitchell, McGregor cc: Ayers 1. Mitchell (?) proposed that the "Box" span be separated from the "Para" span. Suggested that this would allow for a repeating box to serve as the container for a sequence of (similar) paragraphs. 2. Scott was against mentioning "widow control" and the like in the verbiage on paragraph layout. He believes that this sort of thing is (purely) an editor function. This got us off into discussing Tioga "glue" and that got us (somehow) discussing bindings ... 3. Mitchell (the 'owner' of the language) asserts that bindings can be distributed by an editor, and that this is not an alteration of (the content of) a script. E.g. an editor can accept a script { PARA$ font.points ← 12 { TEXT$ <foo> } { TEXT$ < goo> } ... } and emit the script { PARA$ { TEXT$ font.points ← 12 <foo> } { TEXT$ font.points ← 12 < goo> } ... } and it hasn't done anything wrong. After much (sometimes loud, sorry about that) discussion, we noted that an editor that wished to not allow the above rearrangement could alter the original script to { PARA$ temp ← 'font.points ← 12' temp% { TEXT$ <foo> } { TEXT$ < goo> } ... } Some of the attendees felt that the usage where the binding cannot be moved is really the editing world's normal case. If so, we should revisit and maybe put some sugar on the latter example. 5. Getting back to Scott and Tioga 'glue', we took up his suggestion that he (Tioga) be allowed to simply mention the 'glue' via a binding, and NOT warn anyone by retagging the PARA$ as also a TIOGAPARA$. But this conflicts with Horning's rules about an editor moving/copying a span. If it does not know all about the movee, it must test whether "all the relevent attributes are the same in the target location". This makes it very useful to easily acertain what the relevent attributes are. We noted that there are three flavors of binding <=> node connection 1. Binding is totally irrelevent. 2. Binding is relevent, but NOT an invarient on the content. 3. Binding is an invarient on content: changing content may invalidate binding. We suggested (but did not bake) that we might add, to the syntax, an arrangement that allowed one to call out the flavor #2 and #3 bindings for any node-tag. Bob *start* 00818 00112 US gvMsgID: Lampson.PA $ 3#14@20-Oct-82 19:19:00 PDT Categories: interscript-t-sep82-dec82 Date: 20 Oct. 1982 10:19 pm EDT (Wednesday) From: Lampson.PA Subject: Re: Board Transcription: Relevant Attributes In-reply-to: Horning's message of 18-Oct-82 17:51:36 PDT To: Horning cc: Mitchell, Lampson 2) "Declarations" could be optional in their absence the ability to edit a node containing anything not understood is severely limited. 3) I sort of believe that this treatment of quoted expressions is adequate. However, I think you have gone beyond what we thrashed out. Would you care to give a more detailed explanation of why this scheme works. 4) I am opposed (I think) to calling free variables parameters. Things are confused enough already in this non-lambda-calculus language. Butler *start* 01117 00113 US gvMsgID: Mitchell.PA $ 3#14@23-Nov-82 14:59:00 PST Categories: interscript-t-sep82-dec82 Date: 23 Nov. 1982 2:59 pm PST (Tuesday) From: Mitchell.PA Subject: Interscript semantics meeting - Thursday, Nov. 18/82 To: Horning, Lampson cc: Ayers, Mitchell Here is a summary from my whiteboard of what we talked about last Thursday. The following aspects of the language do not affect the "structure" of a script: the order of the tags in a span abbreviations (invocations not in the RHS of a binding) the order of target links in a span scope of bindings (this was what took most of the time to decide) The following semantic constructs do contribute to the structure of a script: Spans {} LINKS ↑ Tags $ Order of contents Bindings -------------------------------------------------------------------------- variables appearing on the RHS of bindings (all have an implicit % attached) indirections % Structural indirections (the things below the dashed line) are the only structure-contributing constructs that are not reflected in the surrent semantics (and need to be). Jim M. *start* 01183 00113 US gvMsgID: Subhana.PA $ 3#198@ 7-Dec-82 11:36:54 PST Categories: interscript-t-sep82-dec82 Date: 7 Dec. 1982 11:37 am PST (Tuesday) From: Subhana.PA Subject: What Interscript requires in an editor's data structures (11/24/82) To: Mitchell cc: Subhana Script Parse---Decorated--Document Normalized Trees ← NODAL STRUCTURE - marks - target links - mark-specific representation for attributes - list of contents - list of indirections to check if reevaluation is necessary (includes both bindings and indirections) [play the thesis game] : do any indirections need to be evaluated? If so, evaluate in each context [=node,pg]s'n where it occurs in this node. [if there's a selection on any of the contents derived from an indirection, what should be done?] Type of contents rope, integer, real, atom, Boolean, node, indirection, binding with indirection (could do all bindings this way except that most don't change indirectly after internalization) An indirection: - expression - ref to node containing it What about indirections that are supposed to affect a set of nodes? e.g. {. . .a%{}{}. . .} --Jim Mitchell *start* 03253 00113 US gvMsgID: gcurry.es $ 60#161@ 9-Dec-82 10:51:31 PST Categories: interscript-t-sep82-dec82 Date: 9-Dec-82 10:51:42 PST (Thursday) From: gcurry.es Subject: Some Comments on the 8/31 Interscript Document To: Mitchell.pa cc: , gcurry.es Jim, I have been looking at Interscript as a description language for property sheets in a user-interface protocol, and have built a little parser, but in so doing read the August document more carefully than previously. This message points out candidates for typos and places where I had difficulty. TYPOS p21. reference to Appendix D should be to C instead. p29. The delimiter rules at the top of the page exclude the empty delimiter following identifiers if the next char is "-" and for integers if the next char is "F" and "-". Are these particular exclusions necessary? p29. are brackets really tokens, or simply characters which are used to form string literal tokens p29. According to the definition given, illegal tokens which start with uc chars and contain lc chars can be constructed. A rule which allows universals to end with empty delimiters when the next char was a lc char would eliminate the possibility (with some cost in readability?). p29. There seems to be an extra quote at the end of the "bracket" production, and the "=" token should probably be ":=". DIFFICULTIES I was trying to use the reference encoding. I was trying to do a recursive descent parser without backup, and using lookahead for a small number of TOKENS (like 2). I wanted to separate the syntactic processing from the semantic processing in order to make it easy to write other kinds of Interscript applications (like my property sheet application, or a formatter). I wanted to use recursive descent in order to permit semantic processing to control the amount of work done at lower levels, esp the scanner: 1. for certain applications, there is no need to calculate internal forms of literals (multiplication for integers etc is slow on the DLion). 2. applications which don't "understand" a particular node, perhaps should be able to scan over it without resolving all the tokens in the node. I also wanted to use recursive descent in order to be able to use the stack for context storage. I had problems in two places: 1. distinguishing between selections and vectors, since both can start ( term, and 2. with "name"s in general, since they were multi-token objects as presented. In order to workaround the first, I took the liberty of changing the syntax of vectors FROM (...) TO <...> AND strings FROM <...> to "...". This was just a quick and dirty change on my part; there might be good reasons for not doing this. In order to workaround the second, I pushed the "name" non-terminal into the scanner to make it a token (even though that might not be good from the point of view of processing name semantics). I am not sure that these were necessary, but it does seem like a good idea to ensure that Interscript can be processed left-to-right, without backup, by a recursive descent parser with small number of token lookahead. Comments? Gael I'm in PA today, and will probably be in building 33 to talk with Doug Brotz later today if you want to talk about this. *start* 01200 00114 US gvMsgID: mitchell.pa $ 3#171@ 8-Dec-82 10:55:33 PST Categories: interscript-t-sep82-dec82 Date: 8-Dec-82 10:55:52 PST From: mitchell.pa Subject: What Interscript requires in an editor's data structures (11/24/82) To: Mitchell Parse Alpha Script -----> Decorated -----> Document Normalized Trees NODAL STRUCTURE - marks - target links - mark-specific representation for attributes - list of contents - list of indirections to check if reevaluation is necessary (includes both bindings and indirections) [play the thesis game] Alpha: do any indirections need to be evaluated? If so, evaluate in each context ( =[node,position]) where it occurs in this node. [editor question: if there's a selection on any of the contents derived from an indirection, what should be done?] Type of contents rope, integer, real, atom, Boolean, node, indirection, binding with indirection (could do all bindings this way except that most don't change indirectly after internalization) An indirection: - expression - ref to node containing it What about indirections that are supposed to affect a set of nodes? e.g. {. . .a%{}{}. . .} --Jim Mitchell *start* 02871 00113 US gvMsgID: Subhana.PA $ 3#198@ 7-Dec-82 11:14:21 PST Categories: interscript-t-sep82-dec82 Date: 7 Dec. 1982 11:14 am PST (Tuesday) Sender: Subhana.PA Subject: Reversing my field (or) The medium and the message From: Horning To: Mitchell cc: Horning, Subhana I've been reflecting on our difficulty in sorting out what is "content" and what is "attribute." I've come to the somewhat surprising conclusion that the best (perhaps the only) principle for sorting them out is to look at the script, NOT the standard. The distinguishing property of attributes is that they distribute over content (within their scope, to which they are relevant). I now believe that it is ONLY this non-local binding, and not any "semantic" property, that distinguishes them. [Consider the Juniper tree poem, whose margin is certainly content, and a page in a font sampler, whose content is the family name-- everything else being inherited.] Thus, my current position is that every tag defines a set of relevant attributes, some of which will be extracted (in any particular case) from content and others from the environment. Interscript must define the semantics of attribute distribution uniformly, so that particular scripts (or nodes within scripts) may treat the same attribute differently. There seem to be three reasonable ways to associate content with an attribute - by name margin←10 - by type <text> {Boundary $ . . . } - by position {Cartesian$ 7.0 9.25}, but only one for extracting an attribute from the environment (name). Also, it seems that a content value should always override an environment value, if present--else why include it in the content? Thus, each tag's definition is similar to a record definition: an ordered collection of name, type (type=primitive type | tag | union | list) pairs. A node is evaluated by converting its explicit content into further bindings (using type and order within type to discriminate) and then completing the record value by looking up all unbound "relevant," i.e., in the definition, attributes in the containing environment. Note that distributing an attribute binding to all of the nodes in its scope to which it is relevant is a value-preserving but structure-losing operation. The (uniform) equivalent for Look? is to evaluate the non-manifest attributes of the node, and present the list of bindings as text. This would also be a simple editing interface, although low-capability editors may have difficulty checking the invariants, or rendering the result, except as a binding list. In the environment {x0←0 y0←1 x1←10 y1←20 = caption←<Hi>. . . if the relevant attributes of Box$ are x0,x1,y0,y1: Integer; caption: Text then all of the following nodes evaluate to the same result {Box$ 0 1 10 20 <Hi>} {Box$} {Box$ <Hi> 0 1} {Box$ y1←20} --Jim Horning *start* 00685 00113 US gvMsgID: Horning.pa $ 3#203@17-Dec-82 16:55:52 PST Categories: interscript-t-sep82-dec82 Date: 17-Dec-82 16:55:56 PST From: Horning.pa Subject: Re: Indirection semantics, canonical form, and names of relevant attributes In-reply-to: mitchell's message of 15-Dec-82 17:04:40 PST To: mitchell.pa cc: Horning, Lampson Jim, That seems to capture the essence. I trust that we will be able to reconstruct the detail next time it is needed. One slight caveat: your notes suggest that they deal only with bindings where the RHS is quoted. I believe that the same principles cover non-quoted RHSs (i.e., that indirection and quoting are orthogonal issues). Jim H. *start* 07797 00113 US gvMsgID: Mitchell.PA $ 3#14@15-Feb-82 18:04:00 PST Categories: interscript-t-sep82-dec82 Date: 15 Feb. 1982 6:04 pm PST (Monday) From: Mitchell.PA To: Interdoc.PA Subject: First cut at defining some marks and attributes Categories: Save The following is my first try at an answer to that age-old question, "What is a paragraph?" It is only half, not fully baked, but it might be a reasonable place to begin. Your comments and questions are earnestly solicited. Jim M. ------------------------------------------------------------------------ Conventions used: <<material in brackets like these are comments or questions>> Example: <<the term record is used to describe a value which is an environment with Outer=NIL>> ------------------------------------------------------------------------ Primitive nodes: A string value <sequence of characters> is syntactic sugar for a node of the form {CHAR$ c0 c1 ... cN} where the ith character (i in [0..N]) of the original string constant has been mapped into a number, ci. Examples: <abcdefg> is the same as {CHAR$ 97 98 99 100 101 102 103} ------------------------------------------------------------------------ Text nodes: Mark: TEXT Contents: the evaluated contents of a TEXT node can only be a sequence of strings of text (or, equivalently, a sequence of CHAR nodes). It cannot contain any other kind of nested subnodes. Examples: {TEXT$ <Now is the time for ... party!>} {TEXT$ <Now ><is ><the ><time ><for ><... ><party><!>} ------------------------------------------------------------------------ Margins: Margins are represented by values all with the following common structure: margins = [ | left←0.0 right←0.0 relative←F] If relative=T, this means the margins are to be interpreted relative to margins at outer levels. Non-negative values indicate offsets to the right, and negative values indicate offsets to the left. <<this bothers me in that it seems that it introduces a level of semantics that every implementation must support, but which is above the base language.>><< if relative is not present in a margins record (environment), its value is the atom "relative", which should be treated as F>> This is used in the following definition for a paragraph. ------------------------------------------------------------------------ Mark: PARAGRAPH Contents: The contents of a PARAGRAPH node can be a mixed sequence of text strings and arbitrary subnodes. If a PARAGRAPH node is also marked as TEXT, then its evaluated contents must comprise a sequence of strings of text. Relevant Attributes and Constraints: margins = [ | left←0.0 right←0.0 relative←T first←0.0] -- distance Margins for a paragraph are relative to the margins current in the environment of a node with the mark PARAGRAPH$. "Left" specifies how much the left margin of the paragraph is offset relative to the current left margin; "right" specifies how much the right margin is offset relative to the current right margin; and "first" specifies how much the first line of a paragraph is offset relative to the current left margin. The values are all distances in the standard Interdoc units. Note: left, right, and first are independent of each other. align = [ | horizontal←FlushLeft -- IN (FlushLeft Centered FlushRight) justified←F -- Boolean vertical←FlushTop] -- IN (FlushBottom Centered FlushTop) "Align" specifies how a paragraph is aligned in some frame and has three components, "horizontal", "justified", and "vertical". The horizontal component specifies whether the paragraph is FlushLeft: the text of the paragraph is to be displayed aligned against the left or first margin, as appropriate; FlushRight: the text of the paragraph is to be displayed aligned against the indented right margin; or Centered: each line of text should be centered between the paragraph's left and right indented margins. The "justified" component acts as a modifier for the horizontal component. A paragraph for which align.justified=T specifies that its text is to be displayed aligned against its left or first and right margins. If align.justified=F, then the right (left) edge of a FlushLeft (FlushRight) paragraph will be displayed raggedly. The vertical component specifies whether the paragraph is FlushTop: the text of the paragraph is to be displayed aligned against the top margin of its enclosing frame (if any); FlushBottom: the text of the paragraph is to be displayed aligned against the bottom of its enclosing frame; or Centered: the body of the paragraph should be centered between its enclosing frame's top and bottom margins. <<might use something like (-1, 0, 1) in place of (FlushLeft Centered FlushRight) and (FlushBottom Centered FlushTop)>> ------------------------------------------------------------------------ spacing = [ | top←12*pt between←3*pt bottom←0*pt] "Spacing" specifies how much white space is to be used when displaying a paragraph. Spacing.top is the amount of space that is to appear before the first line of text of the paragraph. Spacing.between is the number of spaces between lines of the paragraph. It is applicable to internal spaces only (i.e., it is not added to spacing.top to determine the total top space before the paragraph, nor to spacing.bottom to give the total space following the last line of the paragraph). It is independent of the size(s) of font(s) used for text in the paragraph. Spacing.bottom is the amount of space that is to appear below the last displayed line of text of the paragraph. ------------------------------------------------------------------------ hyphenate←F This attribute specifies whether <<and how?>> words in the text of the paragraph are to be hyphenated. Notice that this is properly an attribute of the paragraph and not of the text in it. ------------------------------------------------------------------------ tab = [ | position←0 alignment←FlushLeft -- IN (FlushLeft Centered FlushRight Decimal) ] A tab is a record containing a position for the tab and a tab alignment. The position is a distance relative to the paragraph's left margin. The alignment specifies how the tabbed text, i.e., the text affected by the tab, is to be placed. The tabbed text consists of the paragraph contents up to but not including the end of the paragraph, another tab character, or a newline character, whichever occurs first. The definitions of the alignment values are FlushLeft: the tabbed text will be left justified at the tab's position; Centered: the tabbed text will be centered about the tab's position; FlushRight: the tabbed text will have the right edge of its rightmost character at the tab's position; or Decimal: the tabbed text, which may contain zero or more decimal points, is placed so that the left edge of the leftmost decimal point following a numeric character in the tabbed text is at the tab's position. If there is no such decimal point in the tabbed text, the text is positioned as if a decimal point followed its last numeric character. If there are no numeric characters in it, the tabbed text is positioned as if Centered had been specified. A paragraph has a "tabs" attribute to describe the tab values associated with it. This value is a sequence of tab records. ------------------------------------------------------------------------ Examples: {PARAGRAPH$ TEXT$ align ← [| horizontal←FlushLeft] margins ← [| left←inch right←inch] <Now ><is ><the ><time ><for ><... ><party><!> } ------------------------------------------------------------------------ *start* 02895 00113 US gvMsgID: Mitchell.PA $ 3#14@25-Feb-82 15:55:00 PST Categories: interscript-t-sep82-dec82 Date: 25 Feb. 1982 3:55 pm PST (Thursday) From: Mitchell.PA To: Horning.PA,Guttag.PA,Donahue.PA Subject: How to present the Interdoc transcription semantics - Version 1.0 Categories: Save cc: Mitchell.PA Here are the contents of my whiteboard after today's meeting, with extra comments thrown in as my memory dictates and as my stamina allows tonight: Literals Boolean: T, F string: <A sequence of ascii characters in angle brackets> integer: ..., -3,-2,-1,0,1,2,3,... hex integer: AA AB AC ... BA BB ... PN PO PP real { literal } the simplest documents, e.g., {} -- an empty document {NIL} -- also an empty document {<>} -- the empty string=NIL, so this is also empty {<This is the sole content of this document>} {TRUE} { literal* } contents in left-to-right order, e.g., {<This> < is > <the> < sole > <content> < of> < this> < document>} {<This> < is > <the> < sole > <content> NIL <of> < this> < document> NIL} -- NILs disappear {TRUE TRUE TRUE} {2.7 3.2 7.5} -- a coordinate sequence, perhaps { (literal | node)* } nested nodes are used to represent the dominant hierarchical structure in a document, e.g., { {<This>} {< is >} {<the> < sole > <content>} {< of> {< this> < document>} } } Marks means of attaching one or more properties to a node marks provide a node's "aspects", e.g., {$Sentence {$Subject $Pronoun <This>} {$Verb < is >} {$Object $NounPhrase <the> < sole > <content> {$AdjectivalPhrase < of> < this> < document>} } } {$Cartesian 2.7 3.2 7.5} -- a coordinate sequence Nodes and links a means of denoting associations among nodes other than those implied by the dominant hierarchy introduce Contents,Links,Marks,Sources,Targets functions Examples: {$Sentence theSubject@! theObject@! {$Subject $Pronoun <This> theSubject@} {$Verb theSubject! < is > theObject!} {$Object $NounPhrase <the> < sole > <content> theObject@ {$AdjectivalPhrase < of> < this> < document>} } } Variables in the global environment and nodes with variable invocations there is a global, pre-existing environment with certain names defined; these variables can be named in the script to obtain their values as contents Examples: { ... <Signed this > DATE < in the county of ...> ... } Simple bindings in the global environment (e.g., LeftMargin := 10) Declared VARs at the root node only Nested environments and VARs introduce identifier lookup rule introduce R, B Decorated tree as the semantic model Local bindings and const Simple expressions: + * / Conditionals Environments as values qualified names, e.g., a.b ← foo invocation Quoted expressions invocation Node values Function application built-in functions: LT, EQ, ... *start* 01243 00113 US gvMsgID: Mitchell.PA $ 3#14@14-May-82 14:58:00 PDT Categories: interscript-t-sep82-dec82 Date: 14 May 1982 2:58 pm PDT (Friday) From: Mitchell.PA To: Horning.PA Subject: semantics of Interscript without environments Categories: Save cc: Mitchell.PA Here are the contents of my whiteboard. Comments and questions follow them. ------------------- X: (reduced) exp -- context RR: x * e -> (reduced) exp -- with node structure R: x * e -> (reduced) exp L: x * id -> exp -- the Lookup function C(R(x,e)) projects to contents Lab(R(x,e)) projects to labels RR(x, e) = append(x, R(x, e)) RR({item*}, e) = { item* R({item*}, e) } R(x, Nil) = Nil R(x, item item*) = R(RR(x, item), item*) R(x, label) = label R(x, "'" item "'") = item R(x, {item*}) = {R(x, item*)} R(x, id "←" rhs) = id←R(x, rhs) R(x, id.name "←" rhs) = id←{inner(id%) name←R(x, rhs)} R(x, literal) = literal R(x, id) = R(x, L(x, id)) R(x, name "%") = name% L(Nil, id) = Universal(id) L({item* id' "←" rhs}, id) = IF id=id' THEN rhs ELSE L({item*}, id) -- eval ids!! L({item* nonbindingItem}, id) = L({item*}, id) L(x, id.name) = L(L(x, id), name) L({item* name' "%"}, name) = L({item* R(item*, name')}, name) C, Lab similarly ------------------- *start* 01410 00112 US gvMsgID: Horning.PA $ 3#14@14-May-82 17:40:56 PDT Categories: interscript-t-sep82-dec82 Date: 14-May-82 17:40:56 PDT From: Horning.PA To: Mitchell.PA Subject: Re: semantics of Interscript without environments Categories: Save cc: Horning.PA I think that we want to call R and L something else; maybe Normalize and Value? We can drop the curlies around a context. There is no consistency in quoting terminals. X: (normalized) exp -- context NC: x, e -> (reduced) item* -- the Normalization into context function N: x, e -> (reduced) exp -- the Normalization function V: x, id -> exp -- the Lookup function C(N(x, e)) projects to contents L(N(x, e)) projects to labels NC(item*, e) = item* N(item*, e) N(x, Nil) = Nil N(x, item item*) = N(NC(x, item), item*) N(x, label) = label N(x, {item*}) = {N(x, item*)} N(x, id "←" e) = id "←" N(x, e) N(x, id "←" "'" item* "'") = id "←" item* N(x, id.name "←" rhs) = id "←" {inner(id "%") N(x, name "←" rhs)} N(x, literal) = literal N(x, id) = N(x, V(x, id)) N(x, name "%") = name "%" V(Nil, id) = Universal(id) V(item* id' "←" rhs, id) = IF id=id' THEN rhs ELSE V(item*, id) -- eval ids!! V(item* {, id) = V(item*, id) -- here's where we go to the containing scope V(item* nonbindingItem, id) = V(item*, id) V(x, e.id) = V(V(x, e), id) V(item* name' "%", name) = V(item* N(item*, name'), name) C, L similarly *start* 03861 00112 US gvMsgID: Horning.pa $ 3#14@ 8-Jul-82 16:04:00 PDT Categories: interscript-t-sep82-dec82 Date: 8 July 1982 4:04 pm PDT (Thursday) From: Horning.pa Subject: Generalized Boxes, Boundaries, and Spaces To: Interdoc This is to record the outline of some tentative conclusions that Jim Mitchell and I reached in a discussion of Generalized Boxes this afternoon, triggered by concern about whether Interscript could handle both Tioga's and Star's treatment of paragraph top and bottom leading. First, we convinced ourselves that the problem is real, and cannot simply be legislated out of existence by deciding that one or the other is wrong. We concluded this after enumerating a number of other similar phenomena that will have to be dealt with, too [see below]. We also concluded that it is not reasonable to expect two editors with arbitrarily different geometric models to exchange scripts so that each would render precisely according to the other's model. Rather, the standard should identify a small set of "standard layout attributes" for cross-editor renderings. Each editor should provide definitions for these properties (or at least, for acceptable approximations) in terms of the values of attributes in which it traffics; conversely, each editor should be prepared to translate any incoming standard layout attributes into acceptable approximations in terms of the attributes it uses. (Of course, it would be nice if compatible families of editors actually trafficked in standard attributes, but that is a probably an insuperable political problem--as Tony Hoare says, you can only realistically standardize when the choice doesn't matter.) Next, we tried to group the two kinds of behavior, to see whether we could abstract any general principles. Do not put too much weight on the particular terms used; they are nonce identifiers. BOUNDARIES - around SPACES - between ----------------------- ------------------ Page margins Character spacing Columns (relative to margins) (graphics) Frames Line leading Paragraph margins Tioga paragraph leading Paragraph indents (top and bottom) Star paragraph leading Star paragraph leading (relative to other paras) (relative to page margins) Tabs Both refer to geometric properties of the layout, and ensure a certain amount of white space. The distinguishing characteristic seems to be that the white spaces in the first column may not overlap (and hence are additive), while those in the second column can (and hence maximize). For example, character spacing is there because the "last" space on a line can overlap into the paragraph, column, and page margins. Most often, items in both columns will be specified by dimensions relating them to other boundaries (containing and/or contained). We have been using the term "offset" for a dimension in the first column, and "separation" for one in the second. Of course, not everything can be specified independently. Some thought needs to be given to Defaulting unspecified dimensions. Deriving implicit dimensions from explicit dimensions and geometrical constraints. E.g., A pair of boundary lines may be related by up to two offsets and two separations (one of each from each). The minimum distance allowed between them is MAX(offset[1]+offset[2], separation[1], separation[2]) Consider the following example: a paragraph style has top and bottom offsets of 15 points, and separations of 20 points. Two consecutive paragraphs on a page are separated by at least 30 points. At the top of a page, a new paragraph is 15 points down from the page margin. Within a bordered frame with 0 offset and separation, a new paragraph is 20 points down. More thought is needed. This is sent now partly to transcribe my whiteboard, and partly to get you all thinking about these issues. Jim H. *start* 01799 00112 US gvMsgID: Horning.pa $ 3#14@30-Sep-82 18:27:00 PDT Categories: interscript-t-sep82-dec82 Date: 30 Sept. 1982 6:27 pm PDT (Thursday) From: Horning.pa Subject: Re: semantics of Interscript without environments To: Mitchell cc: Horning.PA Queries: -item vs. exp X = item* -- context (normalized) item -- as per grammar id -- as per grammar N: X, item -> item -- Normalization of item NL: X, item* -> item* -- Normalization of item list V: X, id -> item -- Value lookup C: item -> item | Nil -- Project onto content, if present CL: item* -> item* -- Project onto contents NC: X, item* -> item* -- Normalized contents L: item -> item | Nil -- Project onto label, if present LL: item* -> item* -- Project onto labels NL: X, item* -> item* -- Normalized labels N(x, literal) = literal N(x, id) = N(x, V(x, id)) N(x, label) = label N(x, "{" item* "}" ) = "{" NL(x, item*) "}" N(x, name "%") = name "%" N(x, id "←" e) = id "←" N(x, e) N(x, id "←'" item* "'") = id "←" item* --?? bracket item* ?? N(x, id.name "←" rhs) = id "←{" inner(x, id "%" ) N(x, name "←" rhs) "}" where inner = ??? NL(x, Nil) = Nil NL(x, item item*) = NL(x N(x, item), item*) V(Nil, id) = Universal(id) V(item* id' "←" rhs, id) = IF id=id' THEN rhs ELSE V(item*, id) V(item* "{" , id) = V(item*, id) -- here's where we go to the containing scope V(item* nonbindingItem, id) = V(item*, id) V(x, e.id) = V(V(x, e), id) V(item* name' "%", name) = V(item* N(item*, name'), name) -- follow indirections for value lookup C(content) = content C(label) = Nil C(binding) = Nil CL(Nil) = Nil CL(item item*) = C(item) CL(item*) NC(x, e) = CL(N(x, e)) L(label) = label L(content) = Nil L(binding) = Nil LL(Nil) = Nil LL(item item*) = L(item) LL(item*) NL(x, e) = LL(N(x, e)) *start* 01701 00113 US gvMsgID: Mitchell.PA $ 3#14@15-Oct-82 13:58:00 PDT Categories: interscript-t-sep82-dec82 Date: 15 Oct. 1982 1:58 pm PDT (Friday) From: Mitchell.PA Subject: Boxes, paragraphs, and lines To: Mitchell default.size := [ | min←0, max←infinity] default.interval := [ | preSp←0 size←default.size postSp←0] default.vec := [ | rho←0 theta←0] unitVec := [default.vec | rho←1 ] unitDown := [unitVec | theta←270] default.coordRotation := 0*degree default.positions := [ | n←0*meter e←NIL s←NIL w←0*meter] box := [ | horizontal ← default.interval vertical←default.interval layoutProceeds←unitDown coordRotation←default.coordRotation positioning←default.positions] USpage := [box| horizontal ← [default.interval | size←[default.size | min←8.5*inch max←min]] vertical ← [default.interval | size←[default.size | min←11*inch max←min]] ] BravoParaBox := [box| vertical ← [default.interval | preSp←18*pt]] BravoLineBox := [box| vertical ← [default.interval | preSp←12*pt size←[ | min←10*pt max←min]] ] TiogaLineBox := [BravoLineBox| vertical.preSp←0] -- now do this using BOX$, REPEATS$, and BREAKS$ {BOX$ box←box} {BOX$ box←BravoParaBox {BOX$ box←BravoLineBox REPEATS$} Ayers' model (slightly transformed): default.positioning := [ | fromSiblings ← (0 0 0 0) fromContainer ← (0 0 0 0) locations ← (0 0 0 0)] {BOX$ area←[ | height←default.size width←default.size] positioning←default.positioning layoutProceeds←unitDown *start* 02101 00110 US gvMsgID: Ayers.PA $ 3#14@16-Oct-82 13:36:56 PDT Categories: interscript-t-sep82-dec82 Date: 16-Oct-82 13:36:56 PDT (Saturday) From: Ayers.PA Subject: Interscript Design Review Meeting of 15 Oct 82: Notes To: deLaBeaujardiere, GCurry.es, Mitchell, McGregor cc: Ayers Thanks for your fruitful participation. Here are my notes on the "issues" and "difficulties" and action items. Issues Are boxes appropriate for layout. Yes. If so, how fine grain? Is the "line" a reasonable stop? Line box is ok (some reservations). We should NOT go finer-grain than lines. Can we perturb Star. Yes, but probably can't transform it. Need to be up-front with Star folk. Important to capture user intent. We agreed. Difficulties Assignment inside a target (line) box [e.g. to alter font-on-first-line]. Arrangement as described is bogus. We will go with a binding to "FontFiddle". Coloring LINK usage. Alter language to allow a source or target to be a rhs to an assignment or named content. Where is "language" property attached. Anywhere, via binding of "Language". [a "paragraph's language" is the binding upon entry to pargraph; a "word's language" is the binding in effect at its characters]. Clipping at container edge. 1. We should allow stick-outs to be defined, e.g. via negative margins. 2. Stick-outs don't clip. Overlap of siblings. 1. Overlap ok, if specified via box layout. 2. Z-plane via depth-first box-tree traversal. 3. Boxes may be "opaque" or not. [This still needs work] PFCs [we didn't discuss] Action Items: I will publish these notes, I will alter "section 4" of the standard and re-distribute, hopefully early next week. Will include an attached "outstanding issue" list. Will include more illustration of box's "container" and "sibling" margins. Will fix up content (named, not positional). Will fix up "NIL" content values. [I have a meeting from noon Mon thru Wed afternoon (!); this may not get out 'til late in the week;] Jim M says "There will be named content and we'll work it out" Bob *start* 02209 00112 US gvMsgID: Horning.pa $ 3#14@18-Oct-82 17:51:36 PDT Categories: interscript-t-sep82-dec82 Date: 18-Oct-82 17:51:36 PDT From: Horning.pa Subject: Board Transcription: Relevant Attributes To: Mitchell, Lampson cc: Horning.pa "How do you know which attributes are relevant to a node whose tag(s) you don't understand?" 0) The basis for the safety rules is the fact that each node is created by an editor that understands all its tags. The validity of its invariant will be maintained by any editor that preserves the values of its contents and all its relevant attributes. 1) In principle, each script must contain "declarations" for all the tags it contains--although many declarations might be subsumed by a reference to a certain level of the standard. PARA = (foo height justified) 2) A tag's declaration may refer to other tags (a form of subclassing). BAZ = PARA + (x y height) The interpretation is drawn from the "predicate" view of types: the invariant of BAZ is implied by the invariant of PARA, except possibly for terms involving (x y height). 3) Quoted expressions can be tagged to indicate THEIR relevant attributes. We considered restricting quoted expressions so that no other variables appeared free. q ← 'PARA$ cont%' This would restrict -the use of q% to contexts where the relevant attributes of PARA$ were suitably bound, and -the binding of cont in such contexts to expressions in which at most (foo height justified) were free. 4) The statement of the safety rules will be in terms of analysis of the "free variables" (either appear explicitly or are relevant to a tag, and are not bound)--should we perhaps use the term "parameters"? 5) The specifications of tags in the standard will contain more information than the declarations in scripts: The invariants implied will be stated (formally or informally), and at least some of the implications will be made explicit (to create a "free variable logic"). Recap: An edit is safe if it does not result in a node whose invariants cannot be guaranteed -because its tags are all understood, or -because its contents and relevant attributes are all the same as a given node with those tags. Jim H. *start* 00818 00112 US gvMsgID: Lampson.PA $ 3#14@20-Oct-82 19:19:00 PDT Categories: interscript-t-sep82-dec82 Date: 20 Oct. 1982 10:19 pm EDT (Wednesday) From: Lampson.PA Subject: Re: Board Transcription: Relevant Attributes In-reply-to: Horning's message of 18-Oct-82 17:51:36 PDT To: Horning cc: Mitchell, Lampson 2) "Declarations" could be optional in their absence the ability to edit a node containing anything not understood is severely limited. 3) I sort of believe that this treatment of quoted expressions is adequate. However, I think you have gone beyond what we thrashed out. Would you care to give a more detailed explanation of why this scheme works. 4) I am opposed (I think) to calling free variables parameters. Things are confused enough already in this non-lambda-calculus language. Butler *start* 04507 00111 US gvMsgID: Ayers.PA $ 60#91@ 4-Jan-83 14:41:57 PST Categories: interscript-t-sep82-dec82 Date: 4-Jan-83 14:43:37 PST (Tuesday) From: Ayers.PA Subject: FYI To: Mitchell ------------------------------ Date: 2-Jan-83 20:15:31 PST (Sunday) From: Lauer.PA Subject: Interscript in OS 5.0 Star To: DeSantis.es, Harslem.es, Nikora.es cc: Ayers, Kabcenell.es, Lauer I would like to try to articulate a strategy for Interscript implementation and its relationship to OS 5.0 Star. This would be both a subject for discussion and a constraint that the Star redesign would have to consider. This message, of limited distribution, is my first attempt to explain my thoughts. Interscript should be the lingua franca of editable documents on the network. First class citizens of the network should both speak and understand Interscript as a matter of preference. Citizens of the network who don't understand Interscript are definitely second class. While a subset of citizens speaking a different format can communicate among themselves, members of that subset cannot expect that the rest of the world will necessarily speak their language nor that documents that they wish to read or edit will necessarily be available in their form. Instead, they have to appeal to a conversion service which knows how to translate between Interscript and the other form. Note that a citizen is not prohibited from mailing or storing a document in his own language, but he accepts the risk that others will not be prepared to understand him. In general, SDD's strategy should be to NOT provide automatic conversion of document formats to and from Interscript in the basic services of the network. In particular, the mail service should NOT be required to determine what sort of client it has, then locate and invoke an appropriate conversion service to satisfy the needs of that client. Instead, it is the client systems responsibility to cause the conversion to happen when needed. Whether or not this is visible to the user is a matter of the design of the individual clients systems. Very primitive clients may force their users to explicitly mail documents to conversion services; but better implementations should provide automatic or semi-automatic conversion, either within the same system element or by invoking a service. Star should be the model first-class citizen. It should speak Interscript as a matter of preference in all documents stored or mailed externally. That is, Interscript should be, as a matter of policy, the external document format of Star. Star workstations should communicate with each other in Interscript, not the internal format (if that be different). From the practical point of view, it is unlikely that Star can fully implement Interscript or that the Interscript standard will have evolved to the point where it can fully describe a Star document. This is okay. It is reasonable that the introduction of Interscript be evolutionary, starting with, say, the main body of text of a document and gradually expanding in later releases to include graphics, equations, and other facilities included in Star documents. That is, some of the parts of a document implementation might be in a private format for some temporary period, provided that they are hidden by legal Interscript escape sequences. HOWEVER, the Interscript architecture and strategy must be included in the redesigned Star from the beginning. Given this strategy, there are a number of issues that must be discussed and resolved: 1. Should the internal and external document formats of Star be different? or is it reasonable that Star can directly manipulate an Interscript document? [My intuition is that internal and external document formats ARE different. This is based on observations of Bravo and other editing subsystems around here.] 2. Assuming that internal and external formats are different, when should the conversion be done? Some possibilities are: at the time the document is opened or closed (makes open very slow) at the time the document is prepared for editing (e.g., when the user presses the 'edit' button and again when he 'saves') when the document is transmitted onto the network or to a floppy (but this means looking inside of each folder and doing conversion on the fly) others? Comments? other issues? suggestions about wider distribution? /Hugh ----------------------------------------------------------------