<div dir="ltr">### Handling tabs everywhere is a feature<div><br>If I think about it, handling tabs everywhere is actually more correct. Consider the example you mentioned:<br><a href="http://johnmacfarlane.net/babelmark2/?normalize=1&amp;text=%09%09a%0A%09.%09a%0A%09..%09a%0A%09...%09a%0A%09....%09a">http://johnmacfarlane.net/babelmark2/?normalize=1&amp;text=%09%09a%0A%09.%09a%0A%09..%09a%0A%09...%09a%0A%09....%09a</a><br>

<br>As you said, most implementations convert the &quot;\t&quot; in a code block to a bunch of spaces, but that&#39;s not what the user would expect, right? And there&#39;s nothing in the user documentation that would explain this either. From the user&#39;s point of view, this would be unexpected arbitrary behaviour (which is exacerbated by the fact that most browsers use a tabstop of 8 columns).<br>

<br>### Handling tabs everywhere is easy</div><div><br></div><div>Also, though it initially appeared that it&#39;s hard to handled tabs everywhere instead of dealing with them in a preprocessor, I now think it&#39;s not that difficult. Among block-level elements, tabs are significant only for (1) lists and (2) code blocks.<br>

<br>Code blocks are easy: Instead of 4 spaces at the start of the line, we should look for either 4 spaces or 0-3 spaces + 1 tab.<br><br>Lists can be handled as I explained earlier (but actually, the behaviour of that algo looks about the same as the modulo-4 algo for all inputs - I&#39;m not sure yet - still working on verifying this).<br>

<br>For other block level elements, the pattern matching should consider tabs also instead of spaces, that&#39;s it.<br><br>For span-level elements, tabs are just like any other whitespace character, so it&#39;s very straightforward there.<br>

<br>So it appears to me that handling tabs as tabs wouldn&#39;t increase the complexity by many orders of magnitude. Maybe there is something else I&#39;m missing here?<br><br><br>Unless the complexity increases by several orders of magnitude, I would think that it&#39;s better to have a parser that gives a more correct interpretation, even if it&#39;s at the expense of a little higher complexity of programming.<br>

<br>roop.<br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Oct 1, 2013 at 8:11 PM, Michel Fortin <span dir="ltr">&lt;<a href="mailto:michel.fortin@michelf.ca" target="_blank">michel.fortin@michelf.ca</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Le 1-oct.-2013 à 8:15, Roopesh Chander &lt;<a href="mailto:roop@forwardbias.in">roop@forwardbias.in</a>&gt; a écrit :<br>


<div><div class="h5"><br>
&gt; I think I was being biased towards the expandtab-way of text editing, in my<br>
&gt; previous mails on this topic. Thinking from the point of view of a<br>
&gt; keep-tabs-as-tabs text editor, another solution becomes possible, which I<br>
&gt; describe below:<br>
&gt;<br>
&gt; This is how the user documentation would look like:<br>
&gt; --- snip ---<br>
&gt; The list bullet char should be followed by one or more spaces or a tab<br>
&gt; character.<br>
&gt;<br>
&gt; For multi-paragraph list items, the subsequent paragraphs should be<br>
&gt; indented to vertically align with the first paragraph of the list item,<br>
&gt; using either spaces or a tab. If you are using tabs for indentation, you<br>
&gt; should use the same number of tab characters to indent all paragraphs of<br>
&gt; the list item, including the first paragraph.<br>
&gt; --- snip ---<br>
&gt;<br>
&gt; The parser would operate as follows:<br>
&gt; --- snip ---<br>
&gt; - Let t be the number of tab characters occurring after the bullet<br>
&gt; character of a list item<br>
&gt; - If t &gt; 0, then<br>
&gt;  - First, look for t tab characters (with optional interspersed spaces) as<br>
&gt; indentation for subsequent paragraphs<br>
&gt;  - If previous step didn&#39;t match, look for tabs+spaces as indentation<br>
&gt; using the modulo-4 method<br>
&gt; - If t = 0, then<br>
&gt;  - Look for tabs+spaces as indentation using the modulo-4 method<br>
&gt; --- snip ---<br>
&gt;<br>
&gt; Advantage:<br>
&gt; - If the user doesn&#39;t mix space-indentation and tab-indentation, it would<br>
&gt; work for almost all cases (see below for the not-working case),<br>
&gt; irrespective of the tabstop setting he uses<br>
&gt; - If the user uses space-indentation in some parts of the list and<br>
&gt; tab-indentation in other parts of the list, things are only as bad as the<br>
&gt; modulo-4 method<br>
&gt;<br>
&gt; Disadvantage:<br>
&gt; - Even if the user doesn&#39;t mix space-indentation and tab-indentation, it<br>
&gt; doesn&#39;t work for the case where the (number of spaces before the bullet<br>
&gt; char) = (tabstop - 1). For example, with tabstop=4 (_ being tab and . being<br>
&gt; space):<br>
&gt;<br>
&gt; ...*____list item para 1<br>
&gt;<br>
&gt; ________list item para 2<br>
&gt;<br>
&gt; will be parsed unintuitively. This is why the user documentation above<br>
&gt; says: &quot;If you are using tabs for indentation, you should use the same<br>
&gt; number of tab characters to indent all paragraphs of the list item,<br>
&gt; including the first paragraph.&quot;<br>
&gt;<br>
&gt; What are your thoughts on this option?<br>
<br>
</div></div>Seems more complicated than just replacing tabs with spaces in the input. More complicated because now you have to handle tabs everywhere in the parser. This means more things can go wrong: there&#39;s many more edge cases to deal with and that will require a bigger test suite. And more complicated logic means more code to maintain/debug and potentially a slower parser. That&#39;s for the inconveniences, on the plus side we can deal with arbitrary tab-stop lengths in some cases.<br>


<br>
I think it&#39;s a good idea, but I&#39;m not convinced it is worth the trouble.<br>
<div class="HOEnZb"><div class="h5"><br>
--<br>
Michel Fortin<br>
<a href="mailto:michel.fortin@michelf.ca">michel.fortin@michelf.ca</a><br>
<a href="http://michelf.ca" target="_blank">http://michelf.ca</a><br>
<br>
_______________________________________________<br>
Markdown-Discuss mailing list<br>
<a href="mailto:Markdown-Discuss@six.pairlist.net">Markdown-Discuss@six.pairlist.net</a><br>
<a href="http://six.pairlist.net/mailman/listinfo/markdown-discuss" target="_blank">http://six.pairlist.net/mailman/listinfo/markdown-discuss</a><br>
</div></div></blockquote></div><br></div>