A basic JavaScript drawing interpreter

Coding for fun… An attempt to make a fully JavaScript based canvas drawing interpreter in മലയാളം/Malayalam.

Try in action here – https://ninethsense.github.io/code-share/CanvasDrawing/

Source Code:

001 <html>
002     <head>
003         <meta http-equiv="content-type" content="text/html; charset=utf-8">
004         <style>
005             #c {
006               displayflex;
007                 width:100%;
008                 height:100%;
009             }
010             #t {
011               width:100%;
012             }
013             .col {
014               flex:1;min-height:80%;
015               background-color#eee;
016               margin:1px 1px;
017             }
018             #e {
019               font-familymonospace;
020               font-weightbold;
021               font-size:12pt;
022               caret-colorred;
023             }
024         </style>
025     </head>
026     <body>
027       <div style="display:flex;min-height:80%;border:solid 1px black;">
028         <div id="e" class="col" contenteditable>
029           മായ്‌ക്കുക<br>
030           രേഖ (ഇടത്=100മുകൾ=100വീതി=200ഉയരം =200)<br>
031           വൃത്തം (ഇടത്=200മുകൾ=200ആരം=50നിറം ="പച്ച" )<br>
032           ചതുരം (ഇടത്=50മുകൾ=50വീതി=300ഉയരം=200)<br>
033           ചതുരം (ഇടത്=50മുകൾ=50വീതി=300ഉയരം=200നിറം "ചുവപ്പ്")<br>
034           രേഖ (ഇടത്=100മുകൾ=100വീതി=200ഉയരം =300,  നിറം ="#0000ff")
035         </div>
036         <div class="col">
037           <canvas id="c"></canvas>
038             <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
039           </svg>
040         </div>
041       </div>
042       
043       <input type="button" value="Draw" id="ok" />
044       
045
046     <script>
047       var document.getElementById("c");
048       c.width c.offsetWidth;
049       c.height c.offsetHeight;
050       var cx c.getContext("2d");
051       
052       document.getElementById("ok").addEventListener("click", function(){
053         
054         var pgm document.getElementById("e").innerText;
055         var lines pgm.split("\n");
056         
057         lines.forEach(function(stmti) {
058           if (!stmt.trim()) return;
059           
060           var cmd stmt.split(/{|\(| /)[0];
061           
062           var params stmt.replace(cmd"" ).replace(/=/g,":").replace(/\(/g,"{").replace(/\)/g,"}");
063           
064
065           params params.replace(/ഇടത്|മുകൾ|ആരം|വീതി|ഉയരം|നിറം/gi, function(matched){
066                   return {
067                     "ഇടത്":"\"left\""
068                     "മുകൾ":"\"top\""
069                     "ആരം":"\"radius\"",
070                     "വീതി":"\"width\"",
071                     "ഉയരം":"\"height\"",
072                     "നിറം":"\"color\""
073                   }[matched];
074                 });
075           var col = {"പച്ച":"#00ff00""ചുവപ്പ്":"#ff0000""നീല":"#0000ff"};
076                 
077           var = {};
078           try {
079             JSON.parseparams );
080             
081           } catch {
082             if (cmd != "മായ്‌ക്കുക") {
083               Err();
084               return;
085             }
086           }
087
088           if ('color' in j) {
089             if (j.color in col) {
090               cx.strokeStyle col[j.color];
091             } else {
092               cx.strokeStyle j.color;
093             }
094           } else {
095             cx.strokeStyle "#000";
096           }
097           
098           cx.beginPath();
099           switch(cmd) {
100             case "മായ്‌ക്കുക":
101               cx.clearRect(0,0,c.offsetWidth,c.offsetHeight);
102               break;
103             case "വൃത്തം":
104               if ( !Number.isInteger(j.left) || !Number.isInteger(j.top) || !Number.isInteger(j.radius)) {
105                 Err();
106               }
107                 cx.arc(j.leftj.top,j.radius,0Math.PIfalse);
108               break;
109             case "രേഖ":
110               cx.moveTo(j.leftj.top);
111               cx.lineTo(j.widthj.height);
112               break;
113             case "ചതുരം":
114               cx.rect(j.leftj.topj.widthj.height);
115               break;
116             default:
117               Err();
118               break;
119           }
120           function Err() {
121             alert(`Syntax Error in "${cmd}" at line ${i+1}`);
122           }
123
124           if (cmd != "മായ്‌ക്കുക"cx.stroke();
125           cx.closePath();
126         });
127       });
128       
129     </script>
130     </body>
131 </html>

View in GitHub | Made with wp-showgithubfile plugin