const PROG_FACTORIAL = `YOU WON'T WANT TO MISS 'Hello, World!' DISCOVER HOW TO factorial WITH n RUMOR HAS IT WHAT IF n IS ACTUALLY 0 SHOCKING DEVELOPMENT 1 LIES! SHOCKING DEVELOPMENT n TIMES factorial OF n MINUS 1 END OF STORY EXPERTS CLAIM result TO BE factorial OF 10 YOU WON'T WANT TO MISS 'Result is' YOU WON'T WANT TO MISS result PLEASE LIKE AND SUBSCRIBE`; const PROG_FIBONACCI = `DISCOVER HOW TO fibonacci WITH a, b, n RUMOR HAS IT WHAT IF n SMALLER THAN 1 SHOCKING DEVELOPMENT b LIES! RUMOR HAS IT YOU WON'T WANT TO MISS b SHOCKING DEVELOPMENT fibonacci OF b, a PLUS b, n MINUS 1 END OF STORY END OF STORY EXPERTS CLAIM limit TO BE 10 YOU WON'T WANT TO MISS 'First 10 Fibonacci numbers' EXPERTS CLAIM nothing TO BE fibonacci OF 1, 1, limit PLEASE LIKE AND SUBSCRIBE`; const PROG_DEFAULT = PROG_FIBONACCI; const HEADLINES = [ `You Won't Believe What This Programming Language Can Do!`, `The Best Programming Language You Haven't Heard Of (It Will Surprise You!)`, `Shocking New Programming Language Bewilders Programmers at Google and Facebook!`, `Programmer Who Made Everything Now Predicts the Next Big Language!`, `The Secret Programming Language Every 10x Programmer Recommends!`, `Programmers at Microsoft Hate This One Trick to Get Good at that Code Thing!`, ]; function randomHeadline() { return HEADLINES[~~(Math.random() * HEADLINES.length)]; } const { Component, } = window.Torus; class Editor extends Component { init() { this.prog = PROG_DEFAULT; // script appends to it this.output = ''; this.errors = ''; this.handleRun = () => this.eval(); this.handleInput = evt => { this.prog = evt.target.value; this.render(); } this.handleKeydown = evt => { if (evt.key === 'Tab') { evt.preventDefault(); const idx = evt.target.selectionStart; if (idx !== null) { const front = this.prog.substr(0, idx); const back = this.prog.substr(idx); this.prog = front + ' ' + back; this.render(); evt.target.setSelectionRange(idx + 4, idx + 4); } } } this.setFactorial = () => { this.prog = PROG_FACTORIAL; this.output = this.errors = ''; this.render(); } this.setFibonacci= () => { this.prog = PROG_FIBONACCI; this.output = this.errors = ''; this.render(); } } eval() { this.output = ''; this.errors = ''; try { const tokens = tokenize(this.prog); const nodes = new Parser(tokens).parse(); const env = new Environment({ print: s => { this.output += s.toString().toUpperCase() + '!\n'; this.render(); }, }); env.run(nodes); } catch (e) { this.errors = e.toString(); } this.render(); } compose() { return jdom`
${this.prog.split('\n') .map(line => jdom`

${line.trim() ? line : '-'}

`)}
${this.output ? this.output .split('\n') .map(line => jdom`${line}`) : jdom`No output.`}
${this.errors ? jdom`
${this.errors.split('\n').map(line => jdom`${line}`)}
` : null}
`; } } class App extends Component { init() { this.editor = new Editor(); } compose() { return jdom`

${randomHeadline()}

Tabloid: The Clickbait Headline Programming Language

${this.editor.node}

What?

Tabloid is a turing-complete programming language for writing programs in the style of clickbait news headlines.

Here are a few things${' '}the Top Five Most Popular Quirks and Features of the Tabloid programming language (Number Four Will Shock You!)

But why?

Didn't want to do homework for my database systems class, and needed something to do to procrastinate. Will I finish the homework? Did I get enough sleep?

Stay tuned to find out!

Does it actually work?

Yes. Tabloid is a fully functioning, turing complete programming language with an interpreter written in JavaScript. Tabloid currently only supports numbers, strings, and booleans, but with these elements, you can write any program you'd want to write. You can edit and run the program above, or see how it works for yourself.

Before making Tabloid, I also created a more useful and well-designed${' '}boring and unpopular programming language, called Ink.

How much is there?

Here's the full list of standard keywords that Tabloid currently uses:

`; } } const app = new App(); document.body.appendChild(app.node);