Collaboration Made Simple with Bracket Notation
While writing, I like to keep things simple. While I don’t go to the extremes of Khoi Vinh’s punishing Blockwriter, I generally use an editor that can’t even make text bold. When I write, it’s just the raw text and me, mano a mano. By using a bare-bones editor, the text can’t fight dirty by throwing frivolous fonts and formats in my eyes. At most, I use Markdown to add style to my text.
Must of my collaborators are the same way. We are often editing each-others’ work, but many hands in the copy-editing cookie jar means edits fly like popcorn kernels on the griddle. How do we keep collaboration simple, especially now that Etherpad is about to reach the end of its life? We need a robust method of keeping track of comments and edits. Standard revision control is too heavy weight, and most diff programs operate on a too-course line-level granularity. We needed another solution. Text interface design to the rescue!
The solution is simply three sets of square brackets and some customs: the first set of brackets denotes deletion, the second set denotes addition, and the third set denotes a comment. Apparently, a similar model is used to keep track of edits in the United Nations. The system easiest to explain by example. Let’s start with a simple sentence plagued by two typical errors:
They called to say that their coming over in an quarter-hour.
An editor might revise the sentence to:
They called to say that the[ir][y're] coming over in a[n] quarter-hour. [][][Be careful with "their" and "they're".]
The edits are deciphered like so:
- the[ir][y're]: “their” was used when “they’re” was meant. To fix this problem the editor suggestions deleting “ir” and replacing it with “y’re”.
- a[n]: “An” should only used before a word that begins with a vowel-like sound. The editor suggests removing the “n” of “an”.
- [][][Be careful...]: The editor is reprimanding the author for forgetting the rules of English. Notice the two sets of empty brackets that prefix the comment. They are needed to make sure that comment cannot be confused for an addition or deletion.
After you use bracket notation for even a little bit, the order of the brackets will become second nature. But, if you need a mnemonic, just remember that a number line always goes from negative to positive. The same is true of the markup, it starts with subtraction and goes to addition. Now let’s try a sentence in drastic need of some complex editorial help,
The silver quick-browed fox jum over thier lazy dog.
This might be edited as so:
The [silver] quick[-][ ]brow[ed][n] fox jum[][ped] over th[ier][eir][Remember, I before E, unless after C. Unless the word is weird.] lazy dog. [][][Shouldn't "their" really be "the"?]
This looks a bit scary at the outset (the density of comments is pretty high), but it is easy to follow the edits:
- [silver]: Delete “silver”.
- [-][ ]: Delete the hyphen and add a space. Notice how easy it was to show changes dealing even with white space.
- brow[ed][n]: Delete the “ed” and add a “n”, resulting in “brown”.
- jum[][ped]: Don’t delete anything and add “ped”, resulting in “jumped”.
- [ier][eir][Remember ...]: Delete “ier” and add “eir”, resulting in “their”. The editor has included a somewhat ironic comment about the inconsistency of English spelling.
- [][][Shouldn't ...]: Like in the first example, this is simply a comment.
Thus, if all changes were accepted, the edited sentence would be:
The quick brown fox jumped over the lazy dog.
The bracket notation method is never ambiguous, easily readable, and can be used with reckless abandon in email. To find changes. you just search for an open square bracket, accepting and rejecting comments is as simple as selecting and deleting text. Having been recently forced to used Word’s revision system, it is a true joy to come back to this elegant markup.
I mentioned earlier that bracket notation can be used for collaborative editing among many editors. So how do you know who has made what comment? Adding an author tag is easily accomplished by putting meta data in the comment section. For instance, “If it’s not chocolate, it’s not dessert” might be edited to:
If it['][]["It's" does not equal "its"! -Jono 7/4/05]s not chocolate, it[']s not des[s][][-Aza]ert.
In this way, adding any meta data about the edit is easily written, searched for, and read.
The only thing lacking is some simple syntax highlighting. It would be great if color could make the comments jump out at me to give that slight edge in readability. It’s a simple thing to implement for your favorite text editor.
Give bracket notation a try the next time you need to edit something. You might be pleasantly surprised at just how seamlessly it works. I’ve been using it for a long time and still use it frequently. It’s a simple solution to a possibly complex problem. It shows that sometimes the solution to an interface problem doesn’t involve inventing something brand new, but reusing something old.
RT @azaaza Collaboration Made Simple with Bracket Notation | Follow @azaaza on Twitter | All blog posts
JoshD
I really like this.
The only thing that bugs me is that it seems it would conflict badly with [markdown](http://daringfireball.net/projects/markdown/syntax).
That seems like it could be fixed by simply using pointybrackets, rather than square. That way, text inside [markdown links] wouldn’t be mucked up.
Linda
I also use this method of editing but I apply a broader convention meaning that instead of correcting spelling midwork, I usually recommend deleting the mispelled word and replacing it with the correctly spelled one. Easier on my brain as well.
I used this convention for editing my master’s thesis and numerous other papers. It works and the clean-up is minimal.
Frothy
^^ Your master? What are you, a dog?
Anonymous
I used this convention for editing my master[']s thesis and numerous other papers. [][][Is that what you meant, Frothy?]
Bryce
You’re a genious. A) This is useful! B) It makes a great coding project for students! To have them create a simple show/hide markup with a few simple options.
Digby Speed
In the times before computers editors used a somewhat similar method using some special signs and conventions. It worked really well.
Tomasz Dobrowolski
Why not doing it with less characters ?
[remove]
[remove[add]
[remove[add[comment]
[[add only]
[[[comment only]
or:
/remove\add/
/remove\add//comment/
/\add only/
/remove only\/
//comment only/
?/text not changed/
(where ? is any character but not /)
for a nicer symmetry, still with two special characters (/ and \). I could design comment as /\\comment only/ and save one character in /remove\added\comment/, but in a typical scenarios it looks like the same character count and less readable form. Also remove only could be /remove/, but it would be inconsistent and also hard to read.
Example:
Tom is hevinfanan.
Fixed:
Tom is h/e\a/vin/\g /f/a\u/n/an\/.
//no comments/
Note that added text is always in \ / funny slashed braces, like added from top, and removed is always inside / \, like pushing it down or away.
Fixed with your solution:
Tom is h[e][a]vin[][g ]f[a][u]n[an].
[][][no comments]
A bit longer with more characters (+5 overall), thus yours is less optimal encoding.
Anyway this problem of optimal/readable encoding of editorial changes was of course fun for me :)
You can now call my solution:
Tom’s Slashy Polish Notation :)
orcmid
The problem with eliminating trailing brackets is that you are stuck when new replacements sweep up existing markup that you still want to drag along.
This is maybe not a problem as a bracket-reduction situation in the manual case, but if you are change-tracking a text stream that has hierarchical structure that is being cut across as well, you need to keep the revision structure (with its own, separate brackets if others are used in the text) balanced in terms of bras (“[") and kets ("]“).
J. D. Waugh
This notation method has been used at the UN for decades. It’s how text gets negotiated by 100+ participants. It’s pretty effective until you have a text with changes from 100+ delegations – then you begin to annotate with numeral adverbs from the Latin; bis, ter, quater…
This is a good example of reusing something old, with the innovation of a comments signal, and you might actually have something to contribute to that venerable institution.
[ICR]
Tomasz Dobrowolski, one problem with your method is that slashes are often used in writing. Square brackets are often used for comments and such because they are rarely used for anything else.
Also, your first suggested optimisation seems to be harder to read for me. It’s very easy to count empty ([][][]). But how many are here ([[]]) Okay, it’s a little easier with fixed-width fonts, but if you program you’ll know how much of a pain nesting can be.
I like your idea with the slashes, with the concept of pushing and popping. However, it’s quite difficult alot of the time to match the pairs of slashes up.
I know you were having fun, I was just having fun analysing your suggestions ;)
My own personal notation is [Inserted Text^] [#Scrubbed Text] [@Comment] The justifications for the symbols being ^ is a caret, standard English symbol. # Looks like you’ve sribbled over the text. @ is a single character comment in alot of programming languages that is most visible (; is easily missed. I would have used * but it looks too much like a caret).
I find the advantage of this system is that you can easily timestamp things should they need it. E.g c[a^17/01] [17/01#e]t[@Bloody hell, you can't even spell cat!]
Ok, it’s not that readible, but then again I’ve not really found a datestampable system that is.
The reason ^ comes after, but # and@ come before is because when the caret is after, you read the inserted text as part of the document more, wheras # and @ are ques to skip.
This new system looks alot more readible though. I shall have to try it out.
I am intreaged now about the possibility of a simple editor that is able to keep track of revisions in documents. Sort of like a source control embedded into the document.
Michael Tinkler
Omigosh! You may finally have shown me a way to GRADE online! Microsoft editing things are horrible!!
I’m going to try this system this fall.
noswald
I am intr[ea][i]g[][u]ed now about the possibility of a simple editor that is able to keep track of revisions in documents. [][][Me too!]
Eric Blossom
I am intr[ea][i]g[][u]ed now about possibility of a simple editor that is able to keep track of revisions in documents. [][][[Me][I am] too!]
Steve Clay
Regular expressions could help fairly easily
convert this notation to “finalize” the edits or convert it to HTML like:
The<span title=”don’t do this! -Steve”><del datetime=”2006-07-05T08:02:00T-05:00″>ir</del><ins datetime=”2006-07-05T08:02:00T-05:00″>y’re</ins></span> on their way.
<ins title=”Just a dated comment.” datetime=”2006-07-05T08:02:00T-05:00″></ins>
Steve Clay
Eg. here’s a simple Javascript converter: http://mrclay.org/tests/bracket_notation.html
Mark
What’s wrong with using CVS and checking your documents in? At least then you don’t have to go through a ton of machinations to get the finalized version of a piece of text.
pmccann
The quick brown fox jump[ed][s][it's supposed to use every letter of the English alphabet!] over the lazy dog.
Gordon
Love the idea – just trying it out and wondered about using the flaired brackets { } instead of the square ones? I often use square brackets in rough typing to indicate boxes and I can’t remember ever using the flaired ones in anger :)
Gordon
Anonymous
“What’s wrong with using CVS and checking your documents in? At least then you don’t have to go through a ton of machinations to get the finalized version of a piece of text.”
When I edit documents, I do it on my desktop, sometimes my laptop, and on public terminals. It’s highly likely everyone else will be doing likewise. Installing a CVS (or SVN) client is not really practical.
Is there a web based CVS (or preferably SVN) client? That would solve the problem.
Wow Steve Clay, that is very good. If my hunting for a web based source control client fails, could I steal your code for my app, or at least the general structure? It’s a lot more succinct than I could ever make it.
Chris Niekel
Have people found ways of “merging” the results? If a text is changed like this, and you review it, it would be cool if there was a way to “fix” the changes under the cursor. Then you could easily “goto next change”, “accept”, “reject”.
The same goes for the editing, it seems light-weight to do it like this, but just changing the text and have the [][] appear would be nice, and easily doable in vim, emacs and other fine editors.
orcmid
That should work. You should be able to translate these into red/blue/annotation markup the way WYSIWYG editors do it too, and do accept-changes, reject changes, that sort of thing. The mapping is very clear here.
Aza Raskin
Anonymous has it exactly right: bracket notation excels because of the universality of raw text. It can be used anywhere, in any application, and at any time because it isn’t tied to any particular vendor or file format. And I’m not sure whether I could have taught our lawyer to use SVN :)
But seriously, the strength of SVN (or a Wiki) for text revision is only as good as the diffing engine it uses. I find it much easier to review, accept, and reject changes using bracket notation then by attempting to manually merge the desired changes using a diffing app. And even then, SVN (or a Wiki) does not give me freedom to explain why I’ve made various edits, because I’m only allowed one comment per commit. Bracket notation’s granularity is just much finer than standard revision controls’ granularity. What we’ve discovered at Humanized is that the revision tracking that version control provides is orthogonal to the edit tracking that bracket notation provides. So much so that when writing the patent we used both systems: SVN to record snapshots in time, and bracket notation to track editorial changes.
Bracket notation is also orthogonal to multi-user editors. At Humanized, we use a wonderful program called MoonEdit for collaboratively editing, brainstorming, and chatting. We also used MoonEdit in conjunction with bracket notation. We found that even though MoonEdit has a different color for each author, it just wasn’t robust enough for tracking changes: I need only copy-and-paste a chunk of text to destroy the original authorial information. Also, in MoonEdit–like in SVN–there was no way to justify or comment the changes I made. So we also used bracket notation. And it wasn’t a problem because bracket notation is just plain text.
That said, I think it would be wonderful if people could write various plug ins for the major text editors! I’m all for making the process even more slick. As a start, I’ve created a brief description of bracket notation on Wikipedia that will hopefully act as a repository of information and plugins (as they become available).
Finally, I like the idea of a simple online revision tracker that uses bracket notation. I’ll see what I can whip up on the next couple of days.
Eric Blossom
Aza, Is Jef Raskin your father?
This bracket notation looks a lot like a “diff” format. In my entirely too terse comment before I was trying to point out that while it might work for multiple edits, it would be ungainly at best. So one would still need to store different versions of an evolving document in some sort of revision control system like CVS.
As a diff format it is nice, readable, finer grained, and richer for commentary than other formats in common use.
(“Richer” as opposed to robust. I always thought robust meant “hard to break or wear out” as opposed to “full featured”. Fuller featured often makes something easier to break and hence less robust.)
Hi to your dad (if he is Jef).
Eric Blossom
What would be even more fun than a converter would be a side by side comaratore like kompare on Linux, WinDiff on Windows, or vimdiff that would highlight the differences with color and easily allow acceptance or rejection of individual changes.
Perhaps bracket notation could be added as an option to one (or more) of the comparators already out there.
Cire Mossolb
Eric, You are wrong. It is not a diff format. It is a markup language. A nice editor like an HTML editor would be more appropriate than a comparator.
Aza
Eric,
Jef is indeed my father. I would love to pass your greetings on to him, but it is with the gravest heart that I inform you that he passed away a little over a year ago. Carrying on his vision is, in part, why I have started Humanized.
Eric Blossom
Aza,
I am very saddened by and sorry for your loss. He contributed so very much to so very many.
His book still sits worn and frayed on my shelf as other shinier books have come and gone.
It’s good to see you carrying on in such fine fashion.
all the best,
Eric
Another Anon
What do you do when the text contains brackets? Eg, sometimes brackets are used for references. [1] And brackets are used a lot in technical writing.
Chris Vertonghen
This may be of interest to some people:
I just put some proof-of-concept code online at http://chris.vertonghen.org/prj/Bracketeer/
Bracketeer is a Perl-based CGI-script for converting text annotated with Bracket Notation into its “applied” form, or into a css/color-styled HTML page for improved reading/editing.
Greetings — Chris.
Aza
Chris,
This is very awesome! I’m going to have to give it a try the next time I do some serious editing.
I cannot wait until your “babe” magnet is complete :)
J
How about using Writeboard?
Stephen Dranger
I just saw this post… it’ old but I have to say: GNU wdiff pretty much does this.
Pgan
I love the simplicity and universality of this kind of solution. I used a similar system in the past, but the bracket syntax and its variants discussed above are more polished.
I suggest another variant:
[+add][-remove][comment]
I think it has several advantages:
1. It is almost self-explanatory. A reader can guess *that* there is a notation and its meaning.
2. It is easier to remember. After reading the article, I already had to go back and remind myself that “[x][y]” means “delete ‘x’ and add ‘y’”, and not “add ‘x’ and delete ‘y’”. Using [-x][+y] does not require remembering this arbitrary order.
3. It is easier to read. The reader need not search for and disambiguate the end-of-addition-or-insertion markers “][".
4. It fits the writer's thought process.
4.1. If I want to add text, I do not think about what I am deleting, because I am adding and not deleting.
4.2. I need not worry about the order of adding and deleting. With the existing notation, you need to take care not to end up with "original[][add] [del]” or even “original[][add][del]” when intending “original[del][add]“.
5. It is shorter if there are many additions and comments.
orcmid
I think that is a nice addition, by labeling the opening-bracket. You should do it for the comment also. [! comes to mind. Heh. It makes things more recoverable and it allows all of the abbreviated cases (insertions with no deletions, just comments, etc.
orcmid
Or [# to honor a well-known text-commenting practice.
Pgan
Do you think something similar is useful for editing code? When coding, I sometimes comment out lines by writing something like:
# PG200607 original(line, of, code)
# More efficient
modified(line, of, code) # PG200607
But perhaps a better scheme can be devised.
JC
Another variation:
+add+
-remove-
~comment~
Bob Mokk
Best wishes.
Halamadak!
Miro Jakubowski
None of the proposed solutions is universal. I am mathematician and use all sorts of brackets and other languages scripts (Latin, Greek, Hebrew, Arabic, Gothic, Cyrillic…) as regular characters.
Terrell Russell
What about requiring the system to always include 3 sets of open/close brackets? More overhead for humans, but less collisions for parsers.
For every wanted change/comment
1) it becomes very clear that there is an edit or comment being proposed and
2) parsers are less likely to be confused by footnote occurances of [1] or the like.
Example:
The [silver ]quick[-][ ]brow[ed][n] fox jum[][ped] over th[ier][eir][Remember, I before E, unless after C. Unless the word is weird.] lazy dog.[][][Shouldn't "their" really be "the"?]
would be
The [silver ][][]quick[-][ ][]brow[ed][n][] fox jum[][ped][] over th[ier][eir][Remember, I before E, unless after C. Unless the word is weird.] lazy dog.[][][Shouldn't "their" really be "the"?]
orcmid
It’s actually “unless sounded as ‘aye’ (as in their), or as in ‘the weird foreigner neither seizes leisure nor forfeits height’.”
Miro raises a special problem, and this requires some way to announce or agree on what brackets are used and maybe even have a way to escape the brackets used for the revision/editing. Probably over-engineering to come up with a scheme in advance (you need a way to indicate you are *not* escaping, etc.).
You do want a meta-[ and meta-] of some sort that is not to be confused with use of those characters and of other balanced structures in the text being marked up. Oh, I should have looked ahead to Pgan’s remark. OK, shut my mouth.
Well, one more thing: in a WYSIWYG there are lots of ways to deal with this, because of coloration, ways to inspect for style of a mark, etc. The difference is that the system can keep those marks as actually out of band (rather than being embedded control in a plaintext stream). Also, in a markup system (e.g., XML) there are ways out of it, of course, although one must have a way to preserve well-formedness while slicing and splicing across the hierarchy, if that is to be allowed.
But for simply plaintext streams, I think we have a winner already.
orcmid
I was reporting on this post and the comment thread on a list that I belong to. My remarks are at http://mailman.vse.cz/pipermail/sc34wg6/2010-July/000140.html
There, I needed to discuss what would happen when there are other matched brackets that need to be kept balanced but the changes may cross-cut through their innards.
What I did was introduce numbered opening brackets for as many flavors as I wanted to have. E.g., {1 ….}, {2 …}. I suppose this can be formalized better.
The normal case would be cutting through a large supply that already exists and have a notation for already, as when marking up a TeX or LaTeX script. Then the problem might be to differentiate the change-mark bracket from all of that, maybe with \\[ ... \\] or @[ ... ]@ or some other bogosity. The mind reels.
In any case, I think there are casual arrangements that work. I am going to continue my fascination with [- ...][+ ...][# ...].
Pgan
Miro, is right of course that the markup one uses for modifications must not occur in the content itself. And if the content is arbitrary, one needs a dedicated characters to represent modifications.
But some strings are highly unlikely to occur in normal use. Then finding an acceptable markup that will work in practice is a matter of finding such strings.
Perhaps this is acceptable for text mathematics and existing porgramming languages
With longer markup, it becomes better to mark up whole lines rather than words or characters.
Pozycjonowanie
What would be even more fun than a converter would be a side by side comaratore like kompare on Linux, WinDiff on Windows, or vimdiff that would highlight the differences with color and easily allow acceptance or rejection of individual changes.
Pozycjonowanie
This is very awesome! I’m going to have to give it a try the next time I do some serious editing.
indolering
How would one implement the syntax coloring without a mode?
I was thinking of simply using regular formating, with an apply bracket formating and remove bracket formating actions. Along with unlimited undoes I think it is fairly humane.
The only difficult thing is that it won’t have live updating of the notation. Maybe
displaying the syntax and non syntax colored versions side by side?
I would gray out the deleted section including it’s brackets to make it easier to skip over. I would use yellow brackets (leaving the text black) for the replacement text since it would match/group well visually with the current text and yellow (being an intense color) would bring attention to that edit but not to itself (being low in value.) Lastly use light blue for the comment bracket but gray for the text.
asdf
So how do you deal with editing source text that has the [ and ] characters in it?
Serg
The quick brown fox jump[ed][s][it's supposed to use every letter of the English alphabet!] over the lazy dog.
David
The best way to get into the books :)
http://www.txtapic.com/roadsign
Enjoy
My
I do not know what you mean Serg?
Banery reklamowe Rzeszów
Thanks for very interesting article.
Odlewnia
Very intriguging concept.
Simon
Zards Software – Cleanse uninstaller- uninstall fast, easy, complete program removal
tłumaczenia wałbrzych
Thank you, I found it very interesting; especially when there is not many such information on the net
Affordable
Interesting info
Thanks for article
hosting
great and interesting article. well done
erekcja
Thanks for very interesting article.
tenthousandwaves
“Pointybrackets”? “Flared brackets”?
They are actually called braces.
{You’re welcome!}
naisioxerloro
Hi.
Good design, who make it?
Domki na Kaszubach
Still learning English but this….is quite building article Aza. Am sitting already 45 mins on it trying to decrypt it :D Good work. Keep it up
ArticleActive
Thanks for interesting information
Gregg
Thomas Holloway
While I adore the simplicity, it’s fairly.. well unusable. It just doesn’t feel right and I can’t naturally look at the work and immediately notice the difference. I would prefer a method that separates content to demonstrate context. Like this:
Version 1:
We should remain silent so we don’t disturb others in their work.
// I disagree, I think we should comment to progress
Version 2:
This quick brown fox jumped over the towers of fears.
If you’re deleting content, you could use the strike-through in CSS to immediately show deletion.
Version 3:
This quick brown fox jumped over [and around] -the- towers of fear-s-.
But like in this simple comment box, since I don’t have strikethrough I can use the dash – to represent deletion, and the brackets [ ] to show addition. While comments are separated to bring in distinct context.
Just a thought
Thomas Holloway
Oh wait, I get it. At first I couldn’t understand why you would want to create a bracket system that seemingly made everything ambiguous. But now I can see the geniusness behind it.
First bracket: Delete
Second bracket: Add
Third bracket: Comment.
I do like it now, it took a bit to decipher though :/
zimbatm
How do you scale this further than a few back-and-forth edits ? Author A might adds some paragraphs, author B corrected the typos in the paragraphs.. At some point, either you accept recursive square-brackets or you have to “commit” the received changes.
Kadir
Sounds like a relly good system, thanks for explaining it, I’ll try it out for my edits. But what do you do, when you really need those brackets in your Text?
Martin Weigel
I started a TextMate Bundle for the bracket notation: http://github.com/MartinWeigel/bracket-notation.tmbundle
It supports:
* Highlighting brackets with different colors [red][green][yellow]
* A keystroke-snippet for brackets
* Commands to accept/reject changes of the selected text or the whole document
Feel free to use and fork it.
karl
At W3C inside the Team, we had a marker for saying here (this word, paragraph, etc) is still a draft and needs more work: a double “@@”.
Raghu
Super post as always Aza.
Gotta pull you up on one tiny misdemeanour though:
The quick brown fox jumped over the lazy dog.
The quick brown fox jump[ed][s] over the lazy dog.
Ta,
Kama
So you use a very basic text editor? That explains the spelling/grammar errors in most of your posts. They aren’t severe enough to detract from the quality of the post, but using “Must” instead of “Most” should have been caught by a word processor or at least be pretty obvious upon a second read.
I want to make a correction to your second example, though. It seems that there would be two spaces between “The” and “brown” after your bracket notion was parsed.
Auke Slotegraaf
par 2, line 1: for “Must”, read “Most”
par 2, 3rd last line: for “course”, read “coarse”.
Zayıflama Lida Fx15 Ve Biber Hapı Zlfvbh
This notation method has been used at the UN for decades. It’s how text gets negotiated by 100+ participants. It’s pretty effective until you have a text with changes from 100+ delegations – then you begin to annotate with numeral adverbs from the Latin; bis, ter, quater…
orcmid
I like this once I caught on that what you have are abbreviated triples. And I can see how these can be caught in further replacements without difficulty. It helps that the text is essentially unstructured.
I’ve been watching great confusion over how change-tracking is managed in XML-based documents such as those of the OpenDocument format. (Part of the problem is the lack of a simple explanation that one can understand is complete and handles all edge cases.)
This bracketing model might work as a way of conceptualizing what is happening. The only wrinkle is that this can break the hierarchical structure of XML by snipping (and pasting) fragments. This is actually where the current specifications turns to mush. There are ways to handle this, but it seems to be devilish to explain and show that there are no overlooked corner cases.
Thanks for the simplicity. I get that’s what you do, and I am grateful. I’m going to see what happens by starting with this and then explaining what happens when one cuts across the XML hierarchy, fortunately something folks are not expected to do by hand.
Nate
I think you and Jono are both fired as editors for that last sentence… “If its not chocolate, its not desert?”
That aside, I really like this for editing from afar. My problem with using source control for collaborative writing projects has been that the editor doesn’t own the text, the writer does. Using source control (or even Word’s track changes) feels less like editing and more like rewriting, whereas this method puts the edits in place for the writer to work with.
porno
That seems like it could be fixed by simply using pointybrackets, rather than square. That way, text inside [markdown links] wouldn’t be mucked up.
Sex
The only thing that bugs me is that it seems it would conflict badly with [markdown](http://daringfireball.net/projects/markdown/syntax).
gucci belts
MBT situation of Chinese mens belts workers on the continent cheap gucci belts has a poor cheap louis vuitton belts for men prognosis, cheap desiger belts gucci belts on sale with 60 percent during louis vuitton belts cheap fatigue and 76 percent in sub-health preserved.
sikis
I think that’s a pretty neat idea. My current watch is a Timex that mimics a chronograph digitally but has both an analog and digital face: I can hide the digital part of it by pressing a button and leave the clean lines of a analog watch (which I prefer). Since I enjoy the benefits of digital for cycling and training and such, it’s nice to have that option.
porno
olabilir adamım eskiden benim dedeminde böyle blogu varmış kurtuluş savaşı anılarını yazıyormuş =)
sikiş izle
Simple often isn’t. Spacious interfaces with few controls, artfully placed, may
basur
I am intreaged now about the possibility of a simple editor that is able to keep track of revisions in documents. Sort of like a source control embedded into the document.
Nod32 Güncel Serial Key
There was a particular part of the comic that people kept referring me to: page 21, which talks about the experience for opening a new tab.
angeline
i like this blog….very innovative i must say…
شات كتابي
University on her work; that lecture was similar to the one
شات صوتي
University on her
sexitim
Throughout this blog post, sexI’ll refer to the problem as switching between applications using alt-tab (PC) and command-tab (Mac), but the thinking applies just as well to tabs in Firefox—it is something we have been thinking a lot about recently.porno More on that later.
Penilarge
I want to make a correction to your second example, though. It seems that there would be two spaces between “The” and “brown” after your bracket notion was parsed.
Pralki automatyczne
Well done i realy like you post ,especially that old one
pellet mill manufacturer
i like this blog….very innovative i must say…
insomnie
beau soumission salement pour tout. votre site internet est tout uniment phénoménal et suprême