LAMB is a markup language for cats. You read that correctly. Currently, it translates into HTML. Here's what it looks like:
THINGS I HATE ILL NEVER LET GO HEADING LEFT.
=^..^=Milk( * )LOLBUTTHOLE
REEEROROMHAGH I AM LORD HIGHLIGHTED EggsSTAHHHHHHHHHHP
IM GONNA HURL I AM 12 AND WHAT IS THIS CRAP??????!??!? Bread STAHP
...which becomes:
<ul class="heading left">
<li>Milk</li>
<li id="highlighted">Eggs</li>
<li class="crap">Break</li>
</ul>
There are a few ways to use LAMB:
Whatever you'd call this method:
var lamb = require('../path/to/lamb');
lamb($strLAMBMarkup, function(err, data){
... // data == html
});
...and as Express 3.x middleware:
var express = require('express'),
lamb = require('../path/to/lamb'),
app = express();
app.engine('lamb', lamb().__express);
app.set('views', __dirname + '/views'); // where you keep your .lamb files
app.set('view engine', 'lamb');
app.get('/', function (req, res) {
res.render('home');
})
app.listen(3000);
Check out the /test directory for more examples:
npm basic // prints additional examples
npm line {your LAMB markup} // converts one line of LAMB markup
npm middleware // creates an express http server at localhost:3000
- restructure tags to inherit from architypes (think: self-closing vs. open/close)
- support for basic text transformations (as it stands, basically all attributes get lcase'd)
- write support utilities for quickly testing tags (chiefly the regex)
- write generator for a sublime text plug-in (syntax highlighting, code completion, etc. ...bahahaha)
#Here's the markup:
Output: <html$class>
Tag Patterns
/(?:MEOWWWW)/gi
Fragments
- $class
Closer: </html>
--
Output: <head>
Tag Patterns
/(?:IM\s*IN\s*UR\s*CEILING)/gi
/(?:SCRATCHING\s*POST)/gi
Closer: </head>
--
Output: <title>
Tag Patterns
/(?:I\s+DUB\s+THEE\.\.\.)/gi
Closer: </title>
--
Output: <body$id$class>
Tag Patterns
/(?:MORE\s*LIKE\s*BODY\s*COUNT\s*AMIRITE\?)/gi
/(?:WUNDERLAND)/gi
Fragments
-
$id
-
$class
Closer: </body>
--
Output: <div$id$class>
Tag Patterns
/(?:IF\s*I\s*FITS\s*I\s*SITS)/gi
/(?:THIS\s*IS\s*MAH\s*BOX)/gi
/(?:SQUARE\s+THINGY)/gi
/(?:DOVE\!\@\#\$)/gi
Fragments
-
$id
-
$class
Closer: </div>
--
Output: <form$id$class$method$action>
Tag Patterns
/(?:MAKIN\s*DEALZ\s*WITH\s*BUSINESSCAT\.JPG)/gi
/(?:FARM(?:M*))/gi
Fragments
-
$id
-
$class
-
$method
-
$action
Closer: </form>
--
Output: <link type='text/css' rel='stylesheet'$href />
Tag Patterns
/(?:IM\s*SO\s*FLY)/gi
/(?:MILKPOOTS)/gi
Fragments
- $href
Closer: none
--
Output: <script $src type='text/javascript'></script>
Tag Patterns
/(?:DOCUMENTZ)/gi
/(?:WAIT\.\.\.THIS\s*ISNT\s*YARN\s*WTF\?)/gi
Fragments
- $src
Closer: none
--
Output: <script>
Tag Patterns
/(?:POOOOOPT)/gi
/(?:WE\s+LEIK\s+TO\s+PARTY\.)/gi
Closer: </script>
--
Output: <img$id$class $src />
Tag Patterns
/(?:CHEEEESEEEE)/gi
/(?:I\s*DREW\s*A\s*PICTURE\s*FOR\s*YOU)/gi
/(?:SQUARE\s*VOMIT)/gi
Fragments
-
$id
-
$class
-
$src
Closer: none
--
Output: <!DOCTYPE HTML>
Tag Patterns
/(?:IM\s*A\s*CAT\.\s*LOOK\s*AT\s*MY\s*BUTTHOLE\.)/gi
/(?:\( \* \)\<\-\-\s*TOTALLY\s*A\s*CAT\s*BUTTHOLE\.)/gi
Closer: none
--
Output: <span$id$class>
Tag Patterns
/(?:(SPOOOOON\!\!))/gi
Fragments
-
$id
-
$class
Closer: none
--
Output: </span>
Tag Patterns
/(?:( NEVERMIND))/gi
Closer: none
--
Output: <hr$id$class />
Tag Patterns
/(?:\*BOOP\*)/gi
Fragments
-
$id
-
$class
Closer: none
--
Output: <ul$id$class>
Tag Patterns
/(?:THINGS\s+I\s+HATE)/gi
Fragments
-
$id
-
$class
Closer: </ul>
--
Output: <ol$id$class>
Tag Patterns
/(?:ONE\s+TWO\s+THREE\.\.\.\.\.\.IM\s+GONNA\s+KILL\s+YOU)/gi
Fragments
-
$id
-
$class
Closer: </ol>
--
Output: <h2$id$class>
Tag Patterns
/(?:PAY\s*ATTENSHUN\s)/gi
Fragments
-
$id
-
$class
Closer: </h2>
--
Output: <p$id$class>
Tag Patterns
/(?:PARROTGRAPH\.\.)/gi
Fragments
-
$id
-
$class
Closer: </p>
--
Output: {{
Tag Patterns
/(?:\:\:HUUUURGGEHH\:\:)/gi
Closer: none
--
Output: }}
Tag Patterns
/(?:\:\:BLEAURGHHHCH\:\:)/gi
Closer: none
--
Output: <li$id$class>
Tag Patterns
/(?:IM\s+GONNA\s+HURL)/gi
/(?:REEEROROMHAGH)/gi
Fragments
-
$id
-
$class
Closer: </li>
--
Output: <li>
Tag Patterns
/(?:\=\^\.\.\^\=)/gi
Closer: none
--
Output: </li>
Tag Patterns
/(?:\( \* \)LOLBUTTHOLE)/gi
Closer: none
--
Output: <a$id$class$href>
Tag Patterns
/(?:CLICK\.\.\.\.(?:(?:CLICK.+)+\^))/gi
Fragments
-
$id
-
$class
-
$href
Closer: </a>
--
Output: {{{
Tag Patterns
/(?:OMGOMGOMG\s+ITS\s+A\s+PORTAL\s)/gi
Closer: }}}
--
Output: <input$type$id$class$name$placeholder$required />
Tag Patterns
/(?:OM\s*(?:(?:NOM\s*)+))/gi
/(?:BUSINESS\s+CAT)/gi
Fragments
-
$id
-
$class
-
$type
-
$name
-
$placeholder
-
$required
Closer: none
--
Output: <button$id$class>
Tag Patterns
/(?:BEEP\s+(?:(?:BOOP\s+|BEEP\s+)+))/gi
Fragments
-
$id
-
$class
Closer: </button>
--
Output: ``
Tag Patterns
/(\s*DONT\s*RUB\s*MY\s*BELLEH\!)/gi
/(\s*STAH(?:H*)P)/gi
/(\s*I\s*WILL\s*DESTROY\s*YOU\.)/gi
Closer: none
--
Output: id="##"
Fragment Patterns
/(?:IM\s+(?:KING|CHIEF|PRINCE|MASTER|DEMIGOD|THE|LORD)?\s+([a-zA-Z0-9_]+))/gi
/(?:WHAT\s+A\s+STUPID\s+([a-zA-Z0-9_]+))/gi
--
Output: class="##"
Fragment Patterns
/(?:I\s*AM\s*(?:TOTALLY|DEFINITELY|COMPLETELY|ABSOLUTELY|SUCH|)?\s*A\s*([a-zA-Z0-9_ ]+)(?:\.|\!|\?)+)/gi
/(?:ILL\s*NEVER\s*LET\s*GO\s*([a-zA-Z0-9_ ]+)(?:\.|\!|\?)+)/gi
/(?:I\s*AM\s*12\s*AND\s*WHAT\s*IS\s*THIS\s*([a-zA-Z0-9_ ]+)(?:\.|\!|\?)+)/gi
/(?:OOOOOOOOHHHHH\s*([a-zA-Z0-9_ ]+)(?:\.|\!|\?)+)/gi
--
Output: src="##"
Fragment Patterns
/(?:I\s*HATE\s*(.*)\s*ALAWTT >=O)/gi
/(?:OMG\s*A\s*RAINBOW\s*D\:\s+(.*))/gi
/(?:OMG(?:LAZERS|BIRDS)\s*(.*))/gi
--
Output: href="##"
Fragment Patterns
/(?:I\s*ATE\s*YOUR\s*(.*)\sIM\s*NOT\s*EVEN\s*SORRY)/gi
/(?:RRRRRRRMRMRMPHHHHH\s*(.*)\s+SIGH\.\.\.)/gi
--
Output: type="##"
Fragment Patterns
/(?:THROW\s+SUM\s+([a-zA-Z0-9_ .-]+)\s+IN\s+HIS\s+FAEC)/gi
--
Output: name="##"
Fragment Patterns
/(?:YOU\s+MUST\s+BE\s+([a-zA-Z0-9_.-]+))/gi
--
Output: method="##"
Fragment Patterns
/(?:I\s*GET\s*WHATEVER\s*THE\s*(GET|POST|PUT|DELETE|HEAD|OPTIONS)\s*I\s*WANT)/gi
--
Output: action="##"
Fragment Patterns
/(?:FOR\s*SWEET\s*PICTURES\s*OF\s*MY\s*(?:POOP|VOMIT|EX|HAIRBALLZ)\:(.*)\.com\.net\.ru\.cat\.biz)/gi
--
Output: placeholder="##"
Fragment Patterns
/(?:CHECK\s+OUT\s+MAH\s+GRAFFITI\:\s(.*))/gi
--
Output: required##
Fragment Patterns
/(?:NAO\!)/gi
--