[web-devel] [hamlet] implicit spaces with newlines?

Michael Snoyman michael at snoyman.com
Tue May 24 19:53:27 CEST 2011


If people really want this, I'll consider it. But it looks to me like
a like of confusion and complexity for very little gain.

Michael

On Tue, May 24, 2011 at 5:05 PM, Greg Weber <greg at gregweber.info> wrote:
> Yes, that is the idea- all the inner content or descendant nodes will now
> have implicit spacing- adding a '>' to get the "huge win" scenario from the
> examples given. I do think it adds confusion for new users- it isn't
> something we would want to use in a tutorial. It would be a feature for
> users already comfortable with Hamlet. Perhaps '<p>>' is actually too
> subtle. Some alternatives:
> <p>spaced>
> <p>S>
> <p>#>
> <p>< >
> There is also a possibility of adding an indicator inside the tag.
> <p=>
> <p=spaced>
> <p=#>
>
>
> On Mon, May 23, 2011 at 11:22 PM, Mark Bradley <barkmadley at gmail.com> wrote:
>>
>> On Tue, May 24, 2011 at 4:13 PM, Michael Snoyman <michael at snoyman.com>
>> wrote:
>> > On Tue, May 24, 2011 at 7:00 AM, Greg Weber <greg at gregweber.info> wrote:
>> >>
>> >> The Yesod homepage looks like this:
>> >>         <p>
>> >>             If you are new to Yesod, you should start off with #
>> >>             <a href=@{FiveMinutesR}>the five minute start instructions
>> >>             . The #
>> >>             <a href=@{ScreencastsR}>screencasts
>> >>             \ give a nice introduction to some of the advanced
>> >> concepts, and
>> >> #
>> >>             <a href=@{BookR}>the book
>> >>             \ is the recommended approach to learning Yesod. Ask the #
>> >>             <a href=@{CommunityR}>commnunity
>> >>             \ for help.
>> >> Allowing one-line tags in positions other than the very beginning
>> >> allows for
>> >> the removal of the '#' character:
>> >>         <p>
>> >>             If you are new to Yesod, you should start off with
>> >>             \ <a href=@{FiveMinutesR}>the five minute start
>> >> instructions
>> >>             . The <a href=@{ScreencastsR}>screencasts
>> >>             \ give a nice introduction to some of the advanced
>> >> concepts, and
>> >>             \ <a href=@{BookR}>the book
>> >>             \ is the recommended approach to learning Yesod. Ask the
>> >>             \ <a href=@{CommunityR}>commnunity
>> >>             \ for help.
>> >> Having implicit spaces is actually a huge win here:
>> >>         <p>
>> >>             If you are new to Yesod, you should start off with
>> >>             <a href=@{FiveMinutesR}>the five minute start instructions
>> >>             The
>> >>             <a href=@{ScreencastsR}>screencasts
>> >>             give a nice introduction to some of the advanced concepts,
>> >> and
>> >>             <a href=@{BookR}>the book
>> >>             is the recommended approach to learning Yesod. Ask the
>> >>             <a href=@{CommunityR}>commnunity
>> >>             for help.
>> >> But I am wondering if it is best to keep things the way they are but
>> >> just
>> >> indicate when there should be implicit spaces. My thought is to somehow
>> >> use
>> >> angle brackets. Changing <p> to <p>> would indicate implicit spaces.
>> >
>> > What's the advantage of adding a new syntax for "implicit" space
>> > versus just explicitly adding the space?
>>
>> I think he means that the child nodes of <p>> would be affected by
>> some implicit spacing rules.
>>
>> Personally I prefer one consistent behaviour (explicit spacing every
>> time).  Trying to get too smart will get confusing and inaccurate
>> quickly.
>>
>> >
>> > Michael
>> >
>> >> Greg Weber
>> >> On Fri, May 20, 2011 at 8:22 AM, Patrick Brisbin <pbrisbin at gmail.com>
>> >> wrote:
>> >>>
>> >>> On 05/20/11 at 11:12am, Daniel Patterson wrote:
>> >>> > I think what the original author was saying was that when you make a
>> >>> > new
>> >>> > line with html, whitespace is inserted, not whether hamlet should
>> >>> > automatically insert space after every tag.
>> >>> >
>> >>> > So yes, writing <p>hello<strong>there</strong></p> should not put
>> >>> > white
>> >>> > spacing.
>> >>> >
>> >>> > But when you write, in html:
>> >>> > <p>hello
>> >>> >     <strong>there</strong></p>
>> >>> >
>> >>> > It is equivalent to <p>hello <strong>there</strong></p> (note the
>> >>> > space).
>> >>>
>> >>> Isn't that simply due to the fact that HTML compresses whitespace
>> >>> across
>> >>> the board? (turning that "\n\t" or "\n    " into just " ")
>> >>>
>> >>> Leading spaces in hamlet are used to define nesting, so also
>> >>> compressing
>> >>> this whitespace (rather than stripping it) would produce odd effects:
>> >>>
>> >>>  <div>
>> >>>      <p>Hey
>> >>>          <strong>there
>> >>>
>> >>> Would turn into
>> >>>
>> >>>  <div> <p>Hey <strong>there</strong></p></div>
>> >>>
>> >>> Which has an unneeded space after the parent <div>
>> >>>
>> >>> Right?
>> >>>
>> >>> >
>> >>> >
>> >>> > On May 19, 2011, at 11:57 PM, Michael Snoyman wrote:
>> >>> >
>> >>> > > On Thu, May 19, 2011 at 11:49 PM, Patrick Palka
>> >>> > > <patrick at parcs.ath.cx>
>> >>> > > wrote:
>> >>> > >> I find it a bit unintuitive that the hamlet code
>> >>> > >>
>> >>> > >> <p>hello
>> >>> > >>    <strong>there
>> >>> > >>
>> >>> > >> or
>> >>> > >>
>> >>> > >> <p>
>> >>> > >>     hello
>> >>> > >>     <strong>there
>> >>> > >>
>> >>> > >> generates the html
>> >>> > >>
>> >>> > >> <p>hello<strong>there</strong></p>
>> >>> > >>
>> >>> > >> I expected there to be a space between "hello" and "there"
>> >>> > >> similar to
>> >>> > >> what
>> >>> > >> the html specifications dictate. Is this behavior intentional or
>> >>> > >> an
>> >>> > >> oversight? If it's the former, then what is the recommended way
>> >>> > >> to
>> >>> > >> simulate
>> >>> > >> my expected behavior? Appending a space to the end of a line is
>> >>> > >> mentally ugly and syntactically obscure.
>> >>> > >
>> >>> > > I'm not sure what you mean by "what the html specifications
>> >>> > > dictate."
>> >>> > > HTML is whitespace-sensitive, meaning that:
>> >>> > >
>> >>> > >   <i>foo</i> <b>bar</b>
>> >>> > >
>> >>> > > and
>> >>> > >
>> >>> > >    <i>foo</i><b>bar</b>
>> >>> > >
>> >>> > > Are different. Now, in all likelihood in the above example, you
>> >>> > > will
>> >>> > > want to have the whitespace surrounding tags. But consider the
>> >>> > > following HTML:
>> >>> > >
>> >>> > >    <p>You are logged in as <i>Michael Snoyman</i>, <a
>> >>> > > href="/logout">logout</a>.</p><p>Another paragraph.</p>
>> >>> > >
>> >>> > > In the case of the <i> and <a> tags, we definitely do *not* want
>> >>> > > to
>> >>> > > add whitespace after the tag (though we do want it before the
>> >>> > > tag). In
>> >>> > > the case of <p>, we don't care one way or another, but adding the
>> >>> > > whitespace everywhere will take up (a trivial amount of) extra
>> >>> > > bandwidth. tl;dr: Sometimes you don't want the whitespace.
>> >>> > >
>> >>> > > So when designing Hamlet, I thought up a few possibilities:
>> >>> > >
>> >>> > > 1) What we do now: all whitespace must be explicit.
>> >>> > > 2) Implicitly add whitespace before/after every tag.
>> >>> > > 3) Do something "smart", adding whitespace where it's desired.
>> >>> > >
>> >>> > > (2) isn't really an option because it makes having a tag as the
>> >>> > > last
>> >>> > > word in a sentence impossible. (3) gives me the creeps: I like
>> >>> > > smart
>> >>> > > libraries, but I will *never* trust a library to do this kind of
>> >>> > > stuff
>> >>> > > correctly all the time, even if I'm the one making up the rules
>> >>> > > for it
>> >>> > > to follow! And I have no doubt that it will quickly devolve into
>> >>> > > 500
>> >>> > > lines of hairy code to try and cover millions of corner cases. Oh,
>> >>> > > and
>> >>> > > don't forget that there are other languages than English that
>> >>> > > might
>> >>> > > approach it differently.
>> >>> > >
>> >>> > > I suppose another possibility is (2) along with some special way
>> >>> > > of
>> >>> > > forcing the removal of extra whitespace, but this seemed much less
>> >>> > > intuitive than the current approach.
>> >>> > >
>> >>> > > Anyway, that's the reasoning behind this stuff, if people have
>> >>> > > better
>> >>> > > ideas, I'd like to hear them.
>> >>> > >
>> >>> > > Michael
>> >>> > >
>> >>> > > _______________________________________________
>> >>> > > web-devel mailing list
>> >>> > > web-devel at haskell.org
>> >>> > > http://www.haskell.org/mailman/listinfo/web-devel
>> >>> >
>> >>> >
>> >>> > _______________________________________________
>> >>> > web-devel mailing list
>> >>> > web-devel at haskell.org
>> >>> > http://www.haskell.org/mailman/listinfo/web-devel
>> >>>
>> >>> --
>> >>> patrick brisbin
>> >>>
>> >>> _______________________________________________
>> >>> web-devel mailing list
>> >>> web-devel at haskell.org
>> >>> http://www.haskell.org/mailman/listinfo/web-devel
>> >>
>> >>
>> >> _______________________________________________
>> >> web-devel mailing list
>> >> web-devel at haskell.org
>> >> http://www.haskell.org/mailman/listinfo/web-devel
>> >>
>> >>
>> >
>> > _______________________________________________
>> > web-devel mailing list
>> > web-devel at haskell.org
>> > http://www.haskell.org/mailman/listinfo/web-devel
>> >
>>
>>
>>
>> --
>> -barkmadley
>> sent from an internet enabled device
>
>



More information about the web-devel mailing list