

Introducing Nemo: A Pythonic Haml - true_religion
https://github.com/9cloud/Nemo

======
Kilimanjaro
I like what I see and of course I had to optimize it for my very peculiar
taste:

    
    
        html
        head
          title My web page
          meta name=this content=that
          link rel=stylesheet href=style.css
          script src=jquery.js
        body
          header
            logo
              img src=logo.jpg
          main
            content .center
              h1 Welcome to my site
              p
                This is my first post
                Feel free to comment at the end.
        
              pre #hello
                a=1+2+3
                print a
        
          footer
            p no copyrights at all
    
    

Assume every first word is a known tag or convert it to div with id. Use
significant white space. Content tags like 'p' or 'pre' are closed by a blank
line.

It may work for 90% of my own projects and it is by far the simplest markup I
have seen, evar.

~~~
true_religion
Did you fork it on Github?

I'd love to see your code.

Right now, its' looking like a better version of SPHaml, but who can tell
without seeing the gotchas'.

Like when it comes to assumptions, you'd be surprised how many times I write
the word "option" as the first thing in a sentence. =)

~~~
Kilimanjaro
No no that's just a quick brain dump just to see if it could be optimized a
bit further. I love simplicity and always try to simplify stuff just for the
fun of it.

~~~
true_religion
Got it.

If you do get the time, check out the code and see if you can tweak things to
your liking.

I'll be doing a cleanup/refactoring later this week to make things better.

However, the core of Nemos' parsing is handled by pyparsing, so if you can
read and write eBNF, then you can tweak Nemos' syntax to your liking pretty
easily.

------
true_religion
I should probably mention. Nemo is built on top of Mako, so there's a tiny
speed bump for Nemo processing then its as fast as Mako once the templates are
compiled and cached.

Mako is faster than Django templates--at least by a factor of 4--and in the
neighborhood of speed with Cheetah. Only Spitfire templates are faster.

This is important for any app that is CPU bound due to rendering speed.

------
oofoe
A while back, I wrote a very small Python HTML rendering library that gives
some of the benefits of this notation while still being Python source code.
You _may_ find it interesting if this is the sort of thing you find
interesting...

<http://hotwax.cjmunday.com/python.html#sec-1.2>

See the CherryPy file browser example later in the page for a demonstration of
how it's used.

~~~
true_religion
Oh definitely.

To me, it seems that _everyone_ is striving to find an easier way to
programmatically create HTML in Python. The current range of templating
languages just don't cut it.

I think there's no definitive solution partially because everyone is copying
Haml, and Hamls' syntax and trade-offs aren't really appropriate for Python
users.

------
dmclain
I've been contributing to another HAML derivitive for python called HamlPy
(<https://github.com/jessemiller/HamlPy>). It compiles down to Django
templates, which made it very easy for me to convert my existing project. It's
under pretty active development right now.

~~~
raineri
I forked that project and made it compile down to a Mako template (I use
pylons). <https://github.com/raineri/MakoHaml> :)

~~~
true_religion
You might want to update your readme file so everyone knows that it compiles
down to Mako just at a glance.

Right now its confusing.

But if I'd known about this project a few days ago, you'd have definitely been
added to my list of Muses.

Also, does your fork support the full range of Mako control structures?
Looking at the nodes.py it seems that its still targeted towards a Django-
templates backend.

~~~
raineri
Yeah, I quickly hacked it together, I will update the readme soon. It does
support the mako control structures. You see them rendered around line 200 in
nodes.py.

~~~
true_religion
You forgot to change the list of self-closing tags.

I'd suggest making 'while' self closing.

How do you handle Mako defs, and namespace tags?

------
allenp
"Mixed content documents, and more rope than you know what to do with. That's
Nemo."

Hilarious. And probably true.

------
gawker
Love it! And will definitely use it. I was looking at using Haml to build my
sites alongside Django but I'll give this a try!

------
piranha
Another one: <https://github.com/riffm/mint>

~~~
true_religion
Ah I forgot about Mint.

I don't want to talk badly about it--because to be honest it has some really
cool features like chained-method-calls that allow you to quickly compose HTML
attributes via inheritance----but Mint has always struck me as more Perl than
Python.

Look at this:

    
    
        @p.class(title).title({{ doc.title }}) {{ doc.title }}
    

That transforms into this HTML (unescaped urls because Mint produces XML by
default):

    
    
        <p class="title" title="&gt;b&lt;title&gt;/b&lt;">
            <b>title</b>
        </p>
    

The alternative in Nemo is:

    
    
        % p .'title' title='${doc.title}'   ||   ${ doc.title }
    

I don't know why Nemo looks better in my eyes but I think it has to do with
explicit separation, and string substitution instead of a method-call syntax.

Mint feels like a programming language that happens to produce HTML as a side-
effect.

------
hswolff
So awesome! Was looking just for this last week! Than you sir! Kudos! =)

