added comment highlighting...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2013-12-30 23:12:26 +04:00
parent 858fab4d56
commit 145967ce8f
2 changed files with 50 additions and 13 deletions

View File

@ -72,6 +72,25 @@
opacity: 0.8;
}
/* syntax... */
pre .comment {
font-style: italic;
color: gray;
}
pre :not(.comment) {
font-weight: bold;
}
pre :not(.comment) .string {
font-style: italic;
color: blue;
}
pre :not(.comment) .word {
font-weight: bold;
color: blue;
}
</style>
<script src="slang.js"></script>
@ -210,10 +229,28 @@ function showAvailableWords(){
<div id="stack"></div>
</body>
<script>
document.getElementById('bootstrap').innerHTML='<pre>'+BOOTSTRAP
var bootstrap = BOOTSTRAP
// basic HTML compatibility stuff...
.replace(/&/g, '&amp;')
.replace(/>/g, '&gt;')
.replace(/</g, '&lt;')+'</pre>'
.replace(/</g, '&lt;')
// very basic syntax highlighting...
// comments...
.replace(/(\(.*)-(.*\))/g, '<span class="comment">$1&minus;$2</span>')
.replace(/(\([^\)]*\))/g, '<span class="comment">$1</span>')
.replace(/(\s*--.*\n)/g, '<span class="comment">$1</span>')
/*
Object.keys(NAMESPACE).forEach(function(k){
bootstrap = bootstrap.replace(
RegExp('('+k
.replace('&', '&amp;')
.replace('<', '&lt;')
.replace('>', '&gt;')
.replace(/([\|\[\]\.\*\/\\\?\+\-])/g, '\\$1')+')', 'g'),
'<span class="word">$1</span>')
})
*/
document.getElementById('bootstrap').innerHTML='<pre>'+bootstrap+'</pre>'
document.getElementById('console')
.addEventListener("keyup", function(e) {

View File

@ -396,7 +396,7 @@ var NAMESPACE = {
// NOTE: hate how JS handles multi-line strings...
var BOOTSTRAP = [
'(------------------------------------------------------------------------------',
'-------------------------------------------------------------------------------',
'',
' Slang is a simple and complete [S]tack [lang]uage.',
'',
@ -500,7 +500,7 @@ var BOOTSTRAP = [
' NOTE: this notation is currently used as a means to documenting words and is',
' not interpreted in any way.',
'',
'------------------------------------------------------------------------------)',
'-------------------------------------------------------------------------------',
'--',
'-- With that out of the way, let\'s start with the bootstrap...',
'--',
@ -570,9 +570,10 @@ var BOOTSTRAP = [
'-- Here is an infix operator example...',
'-- :: + ( a | b -- c | ) [ \\ exec 2 0 _swapN \\ exec \\ add 2 1 _swapN ]',
'-- now let\'s make a meta function to make things shorter...',
'-- first the helper...',
':: _infix ( op word -- ) [',
':: infix: ( | op word -- | ) [',
' [',
' -- format the word definition...',
' -- NAME WORD -> :: NAME WORD',
' s2b \\ :: -3 before b2s',
'',
' -- our template...',
@ -580,14 +581,13 @@ var BOOTSTRAP = [
' [ \\ exec 2 0 _swapN',
' -- exec the right side and arragne the args for WORD...',
' \\ exec \\ WORD 2 1 _swapN ] clone',
' -- replace WORD with the actual target word...',
' -- get the WORD and insert it into the template above (opsition 8)...',
' swap 8 to',
'',
' -- push to code / run',
' 3 0 _swapN ]',
'',
'-- formatter for the _infix word...',
':: infix: ( | op word -- | ) [ \\ _infix 1 2 _swapN ]',
' 3 0 _swapN ',
' -- swap the arguments and the code to be executed...',
' ] \\ exec 2 2 _swapN ]',
'',
'-- Now making a word/2 an infix operator is trivial...',
'-- NOTE: these are at this point stupid and do not support priorities...',