├── .gitignore ├── bin ├── hodor └── js2hd ├── tests ├── helloworld.hd └── server.hd ├── package.json ├── js2hd.js ├── hodor.js ├── README.md └── legend.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /bin/hodor: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require('../hodor'); -------------------------------------------------------------------------------- /bin/js2hd: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require('../js2hd'); -------------------------------------------------------------------------------- /tests/helloworld.hd: -------------------------------------------------------------------------------- 1 | $HODOR: hhodor? Hodor!? Hodor!? oHooodorrhodor orHodor!? d = HoDoRHoDoR () { 2 | hodor.hod('Hhodor? Hodor!? Hodor!? o HODOR!? orHodor!? d!'); 3 | }; 4 | 5 | hhodor? Hodor!? Hodor!? oHooodorrhodor orHodor!? d(); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hodor-lang", 3 | "version": "1.0.2", 4 | "description": "Hodor hodor hodor hodor hodor hodor.", 5 | "main": "hodor.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/hummingbirdtech/hodor.git" 12 | }, 13 | "keywords": [ 14 | "hodor", 15 | "hodor", 16 | "hodor", 17 | "hodor" 18 | ], 19 | "author": "Hodor", 20 | "license": "ISC", 21 | "bugs": { 22 | "url": "https://github.com/hummingbirdtech/hodor/issues" 23 | }, 24 | "bin": { 25 | "hodor": "./bin/hodor", 26 | "js2hd": "./bin/js2hd" 27 | }, 28 | "homepage": "https://github.com/hummingbirdtech/hodor", 29 | "dependencies": { 30 | "colors": "^1.0.3", 31 | "commander": "^2.7.1", 32 | "express": "^4.12.3", 33 | "pkginfo": "^0.3.0" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /tests/server.hd: -------------------------------------------------------------------------------- 1 | $HODOR: hodor? Hodor?!? HODOR. rhodor? Hodor Hodor = rhodor? Hodor!?! hodor!? Hodor? rhodor? ('hodor? Hodor?!? HODOR. rhodor? Hodor Hodor '); 2 | $HODOR: HODOR HODOR. HODOR. = hodor? Hodor?!? HODOR. rhodor? Hodor Hodor (); 3 | 4 | HODOR HODOR. HODOR. .hodor! hodor? hodor. ('/', HoDoRHoDoR (rhodor? Hodor!?! , rhodor? Hodor ) { 5 | rhodor? Hodor .Hodor hodor? HODOR? d('Hhodor? Hodor!? Hodor!? o Hooodorrhodor orHodor!? d!'); 6 | }); 7 | 8 | $HODOR: Hodor hodor? rHodor?! hodor? r = HODOR HODOR. HODOR. .Hodor!? Hodor? Hodor hodor. hodor? HODOR? (3000, HoDoRHoDoR () { 9 | 10 | $HODOR: hoHodor hodor. = Hodor hodor? rHodor?! hodor? r.HODOR ddrhodor? Hodor Hodor ().HODOR ddrhodor? Hodor Hodor ; 11 | $HODOR: HODOR. orhodor. = Hodor hodor? rHodor?! hodor? r.HODOR ddrhodor? Hodor Hodor ().HODOR. orhodor. ; 12 | 13 | hodor.hod('HooodorrHodor Hodor?!? HODOR Hodor. HODOR. Hodor!? hodor? HODOR HODOR. HODOR. Hodor!? Hodor? Hodor hodor. hodor? HODOR? Hodor? HODOR? hodor! HODOR hodor. hhodor. hodor. HODOR. ://%Hodor :%Hodor ', hoHodor hodor. , HODOR. orhodor. ); 14 | 15 | }); -------------------------------------------------------------------------------- /js2hd.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * Module dependencies. 5 | */ 6 | 7 | var program = require('commander'), 8 | pkginfo = require('pkginfo')(module, 'version'), 9 | colors = require("colors"), 10 | fs = require('fs'); 11 | 12 | var legend = require('./legend'); // ./ means current directory, and don't need .js b/c all require files are js 13 | 14 | program 15 | .version(module.exports.version, '-v, --version') 16 | .description('Hodor hodor hodor') 17 | .parse(process.argv); 18 | 19 | var hodor = program.args[0]; 20 | 21 | if( typeof(hodor) === 'undefined') { 22 | console.log('HODOR:'.bold.red + ' hodor hodor hodor!'.red); 23 | } else { 24 | if (hodor.search(".js") > 0) { // user entered a .js file 25 | console.log('HODOR: '.bold.cyan + hodor.bold.white + ' => '.yellow + hodor.replace('.js', '.hd').bold.white); 26 | var text = fs.readFileSync(hodor).toString(); // the contents of the file 27 | convertCode(text); 28 | } else { // user entered something apart from a js file 29 | console.log('HODOR:'.bold.red + ' hodor hodor!'.red); 30 | } 31 | } 32 | 33 | function convertCode (text) { 34 | var outputFileName = hodor.replace(".js", ".hd"); 35 | var hodorText = text; 36 | 37 | for (i = 0; i < legend.length; i++){ 38 | var query = legend[i]; 39 | var re = new RegExp(query.search, 'g'); 40 | 41 | hodorText = hodorText.replace(re, query.replace); 42 | } 43 | 44 | fs.writeFileSync(outputFileName, hodorText); 45 | } -------------------------------------------------------------------------------- /hodor.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * Module dependencies. 5 | */ 6 | 7 | String.prototype.replaceAll = function(substring, replacement) { 8 | var result = ''; 9 | var lastIndex = 0; 10 | 11 | while(true) { 12 | var index = this.indexOf(substring, lastIndex); 13 | if(index === -1) break; 14 | result += this.substring(lastIndex, index) + replacement; 15 | lastIndex = index + substring.length; 16 | } 17 | 18 | return result + this.substring(lastIndex); 19 | }; 20 | 21 | var program = require('commander'), 22 | pkginfo = require('pkginfo')(module, 'version'), 23 | colors = require("colors"), 24 | fs = require('fs'); 25 | 26 | var legend = require('./legend'); // ./ means current directory, and don't need .js b/c all require files are js 27 | 28 | program 29 | .version(module.exports.version, '-v, --version') 30 | .description('Hodor hodor hodor') 31 | .parse(process.argv); 32 | 33 | var hodor = program.args[0]; 34 | 35 | if( typeof(hodor) === 'undefined') { 36 | console.log('HODOR:'.bold.red + ' hodor hodor hodor!'.red); 37 | } else { 38 | if (hodor.search(".hd") > 0) { // user entered a .hd file 39 | console.log('HODOR: '.bold.cyan + '\\-> '.white + hodor.white); 40 | var text = fs.readFileSync(hodor).toString(); // the contents of the file 41 | convertCode(text); 42 | } else { // user entered something apart from a hd file 43 | console.log('HODOR:'.bold.red + ' hodor hodor!'.red); 44 | } 45 | } 46 | 47 | function convertCode (text) { 48 | var hodorText = text; 49 | 50 | for (i = (legend.length - 1); i >= 0; i--){ 51 | var query = legend[i]; 52 | 53 | hodorText = hodorText.replaceAll(query.replace, query.search); 54 | } 55 | 56 | hodorText = hodorText.replace(/hello,? world!?/ig, 'HODOR'); 57 | 58 | eval(hodorText); 59 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hodor 2 | Do you feel that there aren't enough programming languages or frameworks to get the job done right? We certainly do. As engineers, we want to focus on what we do best -- creating disruptive technology that just plain works. Using jumbled permutations of the word "hodor" over and over again we have simplified programming syntax to make it easier than ever before. We hope that you find Hodor as easy to use as we have! 3 | 4 | ## Installation 5 | To install Hodor please make sure you have [nodejs](https://nodejs.org/) installed on your machine. 6 | - `npm install -g hodor-lang` 7 | 8 | ## Features 9 | 1. Hodor 10 | 2. Hodor hodor hodor hodor 11 | 3. Hodor hodor hodor 12 | 4. Hodor HODOR hodor 13 | 5. Hodor! 14 | 15 | ## Hello World 16 | The classic Hello World example is made easy with Hodor. 17 | 18 | ```javascript 19 | $HODOR: hhodor? Hodor!? Hodor!? oHooodorrhodor orHodor!? d = HoDoRHoDoR () { 20 | hodor.hod('Hhodor? Hodor!? Hodor!? o HODOR!? orHodor!? d!'); 21 | }; 22 | 23 | hhodor? Hodor!? Hodor!? oHooodorrhodor orHodor!? d(); 24 | ``` 25 | 26 | Now run the hello world example. 27 | 28 | ```bash 29 | hodor tests/helloworld.hd 30 | HODOR: \-> tests/helloworld.hd 31 | HODOR! 32 | ``` 33 | 34 | ## Server 35 | Creating a server in Hodor is easy, just use the following example to get started! 36 | 37 | ```javascript 38 | $HODOR: hodor? Hodor?!? HODOR. rhodor? Hodor Hodor = rhodor? Hodor!?! hodor!? Hodor? rhodor? ('hodor? Hodor?!? HODOR. rhodor? Hodor Hodor '); 39 | $HODOR: HODOR HODOR. HODOR. = hodor? Hodor?!? HODOR. rhodor? Hodor Hodor (); 40 | 41 | HODOR HODOR. HODOR. .hodor! hodor? hodor. ('/', HoDoRHoDoR (rhodor? Hodor!?! , rhodor? Hodor ) { 42 | rhodor? Hodor .Hodor hodor? HODOR? d('Hhodor? Hodor!? Hodor!? o Hooodorrhodor orHodor!? d!'); 43 | }); 44 | 45 | $HODOR: Hodor hodor? rHodor?! hodor? r = HODOR HODOR. HODOR. .Hodor!? Hodor? Hodor hodor. hodor? HODOR? (3000, HoDoRHoDoR () { 46 | 47 | $HODOR: hoHodor hodor. = Hodor hodor? rHodor?! hodor? r.HODOR ddrhodor? Hodor Hodor ().HODOR ddrhodor? Hodor Hodor ; 48 | $HODOR: HODOR. orhodor. = Hodor hodor? rHodor?! hodor? r.HODOR ddrhodor? Hodor Hodor ().HODOR. orhodor. ; 49 | 50 | hodor.hod('HooodorrHodor Hodor?!? HODOR Hodor. HODOR. Hodor!? hodor? HODOR HODOR. HODOR. Hodor!? Hodor? Hodor hodor. hodor? HODOR? Hodor? HODOR? hodor! HODOR hodor. hhodor. hodor. HODOR. ://%Hodor :%Hodor ', hoHodor hodor. , HODOR. orhodor. ); 51 | 52 | }); 53 | ``` 54 | 55 | ## js2hd 56 | To hit the ground running, you can convert your old JavaScript files to Hodor using the js2hd tool. 57 | `js2hd myfile.js` -> `myfile.hd` 58 | 59 | ## Resources 60 | For more information please visit the website [hodor-lang.org](http://hodor-lang.org), thank you for using Hodor! 61 | -------------------------------------------------------------------------------- /legend.js: -------------------------------------------------------------------------------- 1 | var legend = [ 2 | // standard js words 3 | { search: 'break', replace: '!HODOR;;;' }, 4 | { search: 'case', replace: '?hooDooRrr' }, 5 | { search: 'catch', replace: '!!!HODOR!!!' }, 6 | { search: 'else', replace: 'hoDOR!!!' }, 7 | { search: 'for', replace: 'HODOR{}' }, 8 | { search: 'function', replace: 'HoDoRHoDoR' }, 9 | { search: 'if', replace: 'HOdor!!!' }, 10 | { search: 'instanceof', replace: 'hodorhodorho' }, 11 | { search: 'new', replace: 'HHHOOODDDDOOORRR!!!' }, 12 | { search: 'return', replace: 'HODOR::' }, 13 | { search: 'switch', replace: 'HODORHODOR' }, 14 | { search: 'throw', replace: '!hOdor!' }, 15 | { search: 'try', replace: '!hodOr!' }, 16 | { search: 'typeof', replace: 'Hodor?????????!?!?!?!?' }, 17 | { search: 'var', replace: '$HODOR:' }, 18 | { search: 'while', replace: 'hodor............' }, 19 | { search: 'console.log', replace: 'hodor.hod' }, 20 | 21 | // most common letters that are not h, o, d or r 22 | // s a c m p t b f g i n e l w u v j k q y z x 23 | // "x " 24 | { search: 's', replace: 'Hodor ' }, 25 | { search: 'a', replace: 'HODOR ' }, 26 | { search: 'c', replace: 'hodor ' }, 27 | 28 | // "x. " 29 | { search: 'm', replace: 'Hodor. ' }, 30 | { search: 'p', replace: 'HODOR. ' }, 31 | { search: 't', replace: 'hodor. ' }, 32 | 33 | // "x! " 34 | { search: 'b', replace: 'Hodor! ' }, 35 | { search: 'f', replace: 'HODOR! ' }, 36 | { search: 'g', replace: 'hodor! ' }, 37 | 38 | // "x? " 39 | { search: 'i', replace: 'Hodor? ' }, 40 | { search: 'n', replace: 'HODOR? ' }, 41 | { search: 'e', replace: 'hodor? ' }, 42 | 43 | // "x!? " 44 | { search: 'l', replace: 'Hodor!? ' }, 45 | { search: 'w', replace: 'HODOR!? ' }, 46 | { search: 'u', replace: 'hodor!? ' }, 47 | 48 | // "x?! " 49 | { search: 'v', replace: 'Hodor?! ' }, 50 | { search: 'j', replace: 'HODOR?! ' }, 51 | { search: 'k', replace: 'hodor?! ' }, 52 | 53 | // "x!?! " 54 | { search: 'q', replace: 'Hodor!?! ' }, 55 | { search: 'y', replace: 'HODOR!?! ' }, 56 | { search: 'z', replace: 'hodor!?! ' }, 57 | 58 | // "x?!? " 59 | { search: 'x', replace: 'Hodor?!? ' }, 60 | { search: 'S', replace: 'HODOR?!? ' }, 61 | { search: 'A', replace: 'hodor?!? ' }, 62 | 63 | // "x... " 64 | { search: 'C', replace: 'Hodor... ' }, 65 | { search: 'M', replace: 'HODOR... ' }, 66 | { search: 'P', replace: 'hodor... ' }, 67 | 68 | // "x-" 69 | { search: 'T', replace: 'Hodor- ' }, 70 | { search: 'B', replace: 'HODOR- ' }, 71 | { search: 'F', replace: 'hodor- ' }, 72 | 73 | // "prepending HoOodoOor" 74 | { search: 'G', replace: 'HoOodoOorHodor ' }, 75 | { search: 'I', replace: 'HoOodoOorHODOR ' }, 76 | { search: 'N', replace: 'HoOodoOorhodor ' }, 77 | 78 | // "prepending Hooodorr" 79 | { search: 'E', replace: 'HooodorrHodor ' }, 80 | { search: 'L', replace: 'HooodorrHODOR ' }, 81 | { search: 'W', replace: 'Hooodorrhodor ' }, 82 | 83 | // "appending Hooodorr" 84 | { search: 'U', replace: 'HodorHooodorr ' }, 85 | { search: 'V', replace: 'HODORHooodorr ' }, 86 | { search: 'J', replace: 'hodorHooodorr ' }, 87 | 88 | // "appending HoOodoOor" 89 | { search: 'K', replace: 'HodorHoOodoOor ' }, 90 | { search: 'Q', replace: 'HODORHoOodoOor ' }, 91 | { search: 'Y', replace: 'hodorHoOodoOor ' }, 92 | 93 | // "prepending HoOodoOorHooodorr" 94 | { search: 'Z', replace: 'HoOodoOorHooodorrHodor ' }, 95 | { search: 'X', replace: 'HoOodoOorHooodorrHODOR ' }, 96 | //Add Hungarian unique characters to Hodor language { search: 'á', replace: 'Hoodor ' }, 97 | { search: 'Á', replace: 'HOodor ' }, 98 | { search: 'é', replace: 'Hodoor ' }, 99 | { search: 'É', replace: 'HOdoor ' }, 100 | { search: 'ó', replace: 'Hooodor ' }, 101 | { search: 'Ó', replace: 'HOoodor ' }, 102 | { search: 'ü', replace: 'Hodooor ' }, 103 | { search: 'Ü', replace: 'HOdooor ' }, 104 | { search: 'ú', replace: 'Hoooodor ' }, 105 | { search: 'Ú', replace: 'HOooodor ' }, 106 | { search: 'ű', replace: 'Hodooor ' }, 107 | { search: 'Ű', replace: 'HOdooor ' }, 108 | { search: 'í', replace: 'Hooooodoor ' }, 109 | { search: 'Í', replace: 'HOoooodoor ' }, 110 | { search: 'ő', replace: 'HooooodoOOOor ' }, 111 | { search: 'Ő', replace: 'HOoooodoOOOor ' }, 112 | { search: 'ö', replace: 'HooooodoOOOOor ' }, 113 | { search: 'Ö', replace: 'HOoooodoOOOOor ' } 114 | ]; 115 | 116 | module.exports = legend; 117 | --------------------------------------------------------------------------------