diff options
Diffstat (limited to 'trunk/infrastructure/ace/easysync-notes.txt')
-rw-r--r-- | trunk/infrastructure/ace/easysync-notes.txt | 129 |
1 files changed, 0 insertions, 129 deletions
diff --git a/trunk/infrastructure/ace/easysync-notes.txt b/trunk/infrastructure/ace/easysync-notes.txt deleted file mode 100644 index 6808f40..0000000 --- a/trunk/infrastructure/ace/easysync-notes.txt +++ /dev/null @@ -1,129 +0,0 @@ -Goals: - -- no unicode (for efficient escaping, sightliness) -- efficient operations for ACE and collab (attributed text, etc.) -- good for time-slider -- good for API -- line-ending aware -X more coherent (deleting or styling text merging with insertion) -- server-side syntax highlighting? -- unify author map with attribute pool -- unify attributed text with changeset rep -- not: reversible -- force final newline of document to be preserved - -- Unicode bad: - - ugly (hard to read) - - more complex to parse - - harder to store and transmit correctly - - doesn't save all that much space anyway - - blows up in size when string-escaped - - embarrassing for API - - -# Attributes: - -An "attribute" is a (key,value) pair such as (author,abc123456) or -(bold,true). Sometimes an attribute is treated as an instruction to -add that attribute, in which case an empty value means to remove it. -So (bold,) removes the "bold" attribute. Attributes are interned and -given numeric IDs, so the number "6" could represent "(bold,true)", -for example. This mapping is stored in an attribute "pool" which may -be shared by multiple changesets. - -Entries in the pool must be unique, so that attributes can be compared -by their IDs. Attribute names cannot contain commas. - -A changeset looks something like the following: - -Z:5g>1|5=2p=v*4*5+1$x - -With the corresponding pool containing these entries: - -... -4 -> (author,1059348573) -5 -> (bold,true) -... - -This changeset, together with the pool, represents inserting -a bold letter "x" into the middle of a line. The string consists of: - -- a letter Z (the "magic character" and format version identifier) -- a series of opcodes (punctuation) and numeric values in base 36 (the - alphanumerics) -- a dollar sign ($) -- a string of characters used by insertion operations (the "char bank") - -If we separate out the operations and convert the numbers to base 10, we get: - -Z :196 >1 |5=97 =31 *4 *5 +1 $"x" - -Here are descriptions of the operations, where capital letters are variables: - -":N" : Source text has length N (must be first op) -">N" : Final text is N (positive) characters longer than source text (must be second op) -"<N" : Final text is N (positive) characters shorter than source text (must be second op) -">0" : Final text is same length as source text -"+N" : Insert N characters from the bank, none of them newlines -"-N" : Skip over (delete) N characters from the source text, none of them newlines -"=N" : Keep N characters from the source text, none of them newlines -"|L+N" : Insert N characters from the source text, containing L newlines. The last - character inserted MUST be a newline, but not the (new) document's final newline. -"|L-N" : Delete N characters from the source text, containing L newlines. The last - character inserted MUST be a newline, but not the (old) document's final newline. -"|L=N" : Keep N characters from the source text, containing L newlines. The last character - kept MUST be a newline, and the final newline of the document is allowed. -"*I" : Apply attribute I from the pool to the following +, =, |+, or |= command. - In other words, any number of * ops can come before a +, =, or | but not - between a | and the corresponding + or =. - If +, text is inserted having this attribute. If =, text is kept but with - the attribute applied as an attribute addition or removal. - Consecutive attributes must be sorted lexically by (key,value) with key - and value taken as strings. It's illegal to have duplicate keys - for (key,value) pairs that apply to the same text. It's illegal to - have an empty value for a key in the case of an insertion (+), the - pair should just be omitted. - -Characters from the source text that aren't accounted for are assumed to be kept -with the same attributes. - -Additional Constraints: - -- Consecutive +, -, and = ops of the same type that could be combined are not allowed. - Whether combination is possible depends on the attributes of the ops and whether - each is multiline or not. For example, two multiline deletions can never be - consecutive, nor can any insertion come after a non-multiline insertion with the - same attributes. -- "No-op" ops are not allowed, such as deleting 0 characters. However, attribute - applications that don't have any effect are allowed. -- Characters at the end of the source text cannot be explicitly kept with no changes; - if the change doesn't affect the last N characters, those "keep" ops must be left off. -- In any consecutive sequence of insertions (+) and deletions (-) with no keeps (=), - the deletions must come before the insertions. -- The document text before and after will always end with a newline. This policy avoids - a lot of special-casing of the end of the document. If a final newline is - always added when importing text and removed when exporting text, then the - changeset representation can be used to process text files that may or may not - have a final newline. - -Attribution string: - -An "attribution string" is a series of inserts with no deletions or keeps. -For example, "*3+8|1+5" describes the attributes of a string of length 13, -where the first 8 chars have attribute 3 and the next 5 chars have no -attributes, with the last of these 5 chars being a newline. Constraints -apply similar to those affecting changesets, but the restriction about -the final newline of the new document being added doesn't apply. - -Attributes in an attribution string cannot be empty, like "(bold,)", they should -instead be absent. - - - - - -------- -Considerations: - -- composing changesets/attributions with different pools -- generalizing "applyToAttribution" to make "mutateAttributionLines" and "compose" |