Skip to content

Instantly share code, notes, and snippets.

@m1sta
Last active August 29, 2015 14:18
Show Gist options
  • Save m1sta/6ac61ed37285f5e8ec9c to your computer and use it in GitHub Desktop.
Save m1sta/6ac61ed37285f5e8ec9c to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<html>
<textarea id="input" rows="30"></textarea>
<textarea id="output" rows="30"></textarea>
<script>
function indentToBracketString(input) {
//todo: handle comments
var output = '';
var indent = [''];
var lines = (input + "\n;").match(/[^\n]+/g)
for(var i=0; i < lines.length; i++){
var line = lines[i]
if (/^\s*$/.test(line)) output += "\n"
else {
for (var firstNonWs = 0; firstNonWs < line.length; firstNonWs++) if (line.charAt(firstNonWs) !== ' ' && line.charAt(firstNonWs) !== '\t') break;
var lineWs = line.substring(0, firstNonWs);
var lineBody = line.substring(firstNonWs);
if(lineWs !== indent[indent.length - 1]) {
//look for nearest match
for(var nearest=indent.length - 1; nearest > -1; nearest--) if(lineWs.indexOf(indent[nearest]) == 0) break;
var indentLevel = (indent.indexOf(lineWs) < 0 && nearest > -1) ? nearest + 1 : indent.indexOf(lineWs);
//close brackets
while (indent.length - 1 > indentLevel) {
indent.pop();
output = output.slice(0, -1) + " }\n";
}
//open brackets
if(lineWs !== indent[indent.length - 1]){
indent.push(lineWs);
output = output.slice(0, -1) + " {\n";
}
}
output += line + "\n";
}
}
return output;
}
//demo
document.getElementById("input").oninput = function(){
document.getElementById("output").value = indentToBracketString( document.getElementById("input").value)
}
</script>
</body>
</html>
@m1sta
Copy link
Author

m1sta commented Mar 31, 2015

Basically untested.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment