I think I learned about perhaps four new markup languages this week. I’m going to skip to the finish line they seem to be approaching.
Here I present to you the stupidest markup
language in the world, made with
love nihilism. I’ll start with a 10-second tutorial, wander into a rant, and then recite “what if” questions I now anticipate after arguing with invisible critics in the shower.
The Required SpecificationYou have ten seconds to learn the language. Ready? Go.
- UTF–8 only.
- The first character is the control character.
- Whatever follows a control character is for a program to read. Doesn’t matter how, except the program should know when to stop.
- The result of a parse is just a list of annotated strings.
- Outside of the above rules, type whatever you want.
٭ hi ٭(b "all") in Racket yields
'("hi " (b "all")). So does
^ hi ^(b "all"), because it’s the same document. The parser is 30
lines of code, including blank lines. You can extend it easily.
The Optional RantI know what you are going to say. “What trash. There’s no standard. You have to have the right program for any given document.”
If ISML were well-adopted, then everyone would have their own format, parser and validator. And even then, 10% of those would work well and about eight formats would be inexplicably popular. That would be some damning criticism you've got there if the world wasn’t already like this.
Even with standards backing battle-tested markup languages I've seen people paste base64 blobs into YAML and reinvent booleans as "yes" or "no" in JSON, forcing their teams to write code to accomodate the human need to bastardize. Even the ubiquitous Markdown has been extended in enough ways to make the name “Markdown” meaningless. I say this as an author of one such extension.
In other words, you always have to deal with finding “the right program” for a markup language, no matter how established it is. Humans want programs to do what they mean, which is why we end up with things like HTML6.
I don’t expect you to use ISML, but I do expect you to ask yourself what you really want when you get ready to add new languages and tooling to support YAML, TOML, PML, Markdown, Pollen Markup, Polymath or (and?!) the other ISMLs out there. Will you all just stop it and write? Markup is annotated text. That's it. Quit with the overengineering. Quit making me install crap. You can whip up a parser over lunch in your chosen language using the above rules and add functions from there. If all markup languages bring added configuration and training, why not control that?
The Supplemental Dialogue
What if I want to escape the control character?
You can’t. Pick a different character.
What if I start an ISML document with a space?
Then your control character is a space.
What if I think that’s too sensitive?
Some languages need a semicolon after every statement. If you can’t trust yourself to not put a space at the front of a document, then I can’t help you.
What if I want to use a language other than Racket?
Then do that.
What if I don’t want to write a program just to parse my document?Then you'll do what everyone else does. You'll grab a well-adopted markup language and the libraries that come with it because muh pragmatism. Then you'll still write a bunch of code, except now it's code you didn't expect to write.
What if I want everyone to write ISML documents that match a specific schema?
If you really mean “everyone”, then you likely have the brain parasite that makes you write another markup language that nobody needs.
If you mean a subset of people who consent to a document format, then use your own reader procedure for the expressions after control characters.
What if I want my team to use this?