refacto ts + ajout de dessin simple + ajout pinceau
WIP lib graphique
This commit is contained in:
Vendored
+7
@@ -0,0 +1,7 @@
|
|||||||
|
import { Bitmap } from '@jimp/core'
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
interface Pencil extends Bitmap {
|
||||||
|
color: number[],
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@types/jimp": "^0.2.28",
|
||||||
"@types/node": "^17.0.14",
|
"@types/node": "^17.0.14",
|
||||||
"node-gyp": "^8.4.1"
|
"node-gyp": "^8.4.1"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,9 +58,9 @@ async function readImgFile(filepath) {
|
|||||||
/**
|
/**
|
||||||
* @param { number } x
|
* @param { number } x
|
||||||
* @param { number } y
|
* @param { number } y
|
||||||
* @param { import('@jimp/core').Bitmap } bitmap
|
* @param { import('@jimp/core').Bitmap | Pencil } bitmap
|
||||||
*/
|
*/
|
||||||
function drawBitmap(x, y, bitmap) {
|
function drawBitmap(x, y, bitmap, handleTransparency = true) {
|
||||||
for(let dy = 0; dy < bitmap.height; dy++) {
|
for(let dy = 0; dy < bitmap.height; dy++) {
|
||||||
let bitmapLineEnd = bitmap.width * screen.byteDepth * (dy + 1)
|
let bitmapLineEnd = bitmap.width * screen.byteDepth * (dy + 1)
|
||||||
let bitmapLineStart = bitmap.width * screen.byteDepth * dy
|
let bitmapLineStart = bitmap.width * screen.byteDepth * dy
|
||||||
@@ -94,7 +94,25 @@ function drawBitmap(x, y, bitmap) {
|
|||||||
|
|
||||||
|
|
||||||
const line = bitmap.data.subarray(bitmapLineStart, bitmapLineEnd)
|
const line = bitmap.data.subarray(bitmapLineStart, bitmapLineEnd)
|
||||||
buffer.set(Array.from(line), dx * screen.byteDepth + screen.width * (dy + y) * screen.byteDepth)
|
|
||||||
|
const bufferPlacement = dx * screen.byteDepth + screen.width * (dy + y) * screen.byteDepth
|
||||||
|
|
||||||
|
if(handleTransparency) {
|
||||||
|
const currentLine = buffer.subarray(bufferPlacement, bufferPlacement + line.length)
|
||||||
|
for(let i=0; i < line.length; i += 4) {
|
||||||
|
const transparency = line.readUInt8(i+3) / 255
|
||||||
|
if(transparency < 1) {
|
||||||
|
/** @type { Uint8Array } */
|
||||||
|
const newLine = new Uint8Array(3)
|
||||||
|
for(let j=0; j < 3; j++) {
|
||||||
|
newLine[j] = (currentLine.readUInt8(j+i)*1-transparency + line.readUInt8(j+i)*transparency)
|
||||||
|
}
|
||||||
|
line.set(newLine, i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer.set(Array.from(line), bufferPlacement)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,13 @@ async function init() {
|
|||||||
mount("dummy", "/tmp", "tmpfs", flags.MS_NODEV, "")
|
mount("dummy", "/tmp", "tmpfs", flags.MS_NODEV, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type { string[] }
|
||||||
|
*/
|
||||||
const after = [] // list of init script to load before
|
const after = [] // list of init script to load before
|
||||||
|
/**
|
||||||
|
* @type { string[] }
|
||||||
|
*/
|
||||||
const before = []
|
const before = []
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|||||||
@@ -1,27 +1,36 @@
|
|||||||
//@ts-check
|
//@ts-check
|
||||||
const graphics = require('../../chibrax/graphics')
|
const graphics = require('../../chibrax/graphics')
|
||||||
|
const shapes = require('../lib/shapes')
|
||||||
|
const path = require('path')
|
||||||
|
|
||||||
graphics.clear()
|
graphics.clear()
|
||||||
drawChibrax()
|
drawChibrax()
|
||||||
|
|
||||||
|
const bitmap = shapes.createBitmap(400, 400)
|
||||||
|
const pencil = shapes.pencilFromBitmap(bitmap, [0,255, 0,255])
|
||||||
|
shapes.drawCircle(pencil, 200, 200, 190)
|
||||||
|
graphics.drawBitmap(0, 0, pencil)
|
||||||
|
|
||||||
|
|
||||||
graphics.flip()
|
graphics.flip()
|
||||||
|
|
||||||
|
|
||||||
function drawChibrax() {
|
function drawChibrax() {
|
||||||
//LA LETTRE C
|
//LA LETTRE C
|
||||||
for(let i = 0; i < 100; i++) {
|
for(let i = 0; i < 100; i++) {
|
||||||
for(let j = 0; j < 10; j++) {
|
for(let j = 0; j < 10; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let i = 0; i < 20; i++) {
|
for(let i = 0; i < 20; i++) {
|
||||||
for(let j = 10; j < 110; j++) {
|
for(let j = 10; j < 110; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(let i = 0; i < 100; i++) {
|
for(let i = 0; i < 100; i++) {
|
||||||
for(let j = 110; j < 120; j++) {
|
for(let j = 110; j < 120; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -29,106 +38,106 @@ function drawChibrax() {
|
|||||||
//LA LETTRE H
|
//LA LETTRE H
|
||||||
for(let i = 110; i < 130; i++) {
|
for(let i = 110; i < 130; i++) {
|
||||||
for(let j = 0; j < 100; j++) {
|
for(let j = 0; j < 100; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let i = 110; i < 210; i++) {
|
for(let i = 110; i < 210; i++) {
|
||||||
for(let j = 50; j < 60; j++) {
|
for(let j = 50; j < 60; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(let i = 210; i < 230; i++) {
|
for(let i = 210; i < 230; i++) {
|
||||||
for(let j = 0; j < 100; j++) {
|
for(let j = 0; j < 100; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//LA LETTRE I
|
//LA LETTRE I
|
||||||
for(let i = 240; i < 260; i++) {
|
for(let i = 240; i < 260; i++) {
|
||||||
for(let j = 0; j < 100; j++) {
|
for(let j = 0; j < 100; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//LA LETTRE B
|
//LA LETTRE B
|
||||||
for(let i = 270; i < 280; i++) {
|
for(let i = 270; i < 280; i++) {
|
||||||
for(let j = 0; j < 100; j++) {
|
for(let j = 0; j < 100; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let i = 380; i < 390; i++) {
|
for(let i = 380; i < 390; i++) {
|
||||||
for(let j = 0; j < 100; j++) {
|
for(let j = 0; j < 100; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let i = 270; i < 390; i++) {
|
for(let i = 270; i < 390; i++) {
|
||||||
for(let j = 0; j < 10; j++) {
|
for(let j = 0; j < 10; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let i = 270; i < 390; i++) {
|
for(let i = 270; i < 390; i++) {
|
||||||
for(let j = 50; j < 60; j++) {
|
for(let j = 50; j < 60; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let i = 270; i < 390; i++) {
|
for(let i = 270; i < 390; i++) {
|
||||||
for(let j = 90; j < 100; j++) {
|
for(let j = 90; j < 100; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//LA LETTRE R
|
//LA LETTRE R
|
||||||
for(let i = 400; i < 410; i++) {
|
for(let i = 400; i < 410; i++) {
|
||||||
for(let j = 0; j < 100; j++) {
|
for(let j = 0; j < 100; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let i = 510; i < 520; i++) {
|
for(let i = 510; i < 520; i++) {
|
||||||
for(let j = 0; j < 100; j++) {
|
for(let j = 0; j < 100; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let i = 400; i < 520; i++) {
|
for(let i = 400; i < 520; i++) {
|
||||||
for(let j = 0; j < 10; j++) {
|
for(let j = 0; j < 10; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let i = 400; i < 520; i++) {
|
for(let i = 400; i < 520; i++) {
|
||||||
for(let j = 50; j < 60; j++) {
|
for(let j = 50; j < 60; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//LA LETTRE E
|
//LA LETTRE E
|
||||||
for(let i = 530; i < 630; i++) {
|
for(let i = 530; i < 630; i++) {
|
||||||
for(let j = 0; j < 10; j++) {
|
for(let j = 0; j < 10; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let i = 530; i < 550; i++) {
|
for(let i = 530; i < 550; i++) {
|
||||||
for(let j = 10; j < 110; j++) {
|
for(let j = 10; j < 110; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let i = 530; i < 630; i++) {
|
for(let i = 530; i < 630; i++) {
|
||||||
for(let j = 50; j < 60; j++) {
|
for(let j = 50; j < 60; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let i = 530; i < 630; i++) {
|
for(let i = 530; i < 630; i++) {
|
||||||
for(let j = 110; j < 120; j++) {
|
for(let j = 110; j < 120; j++) {
|
||||||
graphics.setPixel(i,j, [0,0,255,0])
|
graphics.setPixel(i,j, [0,0,255, 255])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ let aliases = require("../lib/sheebr/aliases")
|
|||||||
let { spawn } = require('child_process')
|
let { spawn } = require('child_process')
|
||||||
|
|
||||||
//utiliser ce code au lieux de execSync permet d'afficher le stdout au fur et a mesure ce qui fait qu'on a les logs quand une application throw une erreur
|
//utiliser ce code au lieux de execSync permet d'afficher le stdout au fur et a mesure ce qui fait qu'on a les logs quand une application throw une erreur
|
||||||
|
/**
|
||||||
|
* @param { string } cmd
|
||||||
|
* @param { import('child_process').SpawnOptionsWithoutStdio } [option]
|
||||||
|
*/
|
||||||
async function spawnAndWait(cmd, option) {
|
async function spawnAndWait(cmd, option) {
|
||||||
const child = spawn(cmd, option)
|
const child = spawn(cmd, option)
|
||||||
|
|
||||||
@@ -36,6 +40,10 @@ async function start(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param { string } input
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
async function evaluate(input){
|
async function evaluate(input){
|
||||||
let lexer = new Lexer(input)
|
let lexer = new Lexer(input)
|
||||||
let args = lexer.scanTokens()
|
let args = lexer.scanTokens()
|
||||||
@@ -70,12 +78,13 @@ async function evaluate(input){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string[]} args
|
||||||
|
*/
|
||||||
async function evaluateProgram(args){
|
async function evaluateProgram(args){
|
||||||
|
|
||||||
let found = false;
|
let found = false;
|
||||||
for(let path of environment.path){
|
for(let path of environment.path.split(':')){
|
||||||
let tobreak = false;
|
let tobreak = false;
|
||||||
const files = fs.readdirSync(path);
|
const files = fs.readdirSync(path);
|
||||||
if(files.includes(`${args[0]}.js`)){
|
if(files.includes(`${args[0]}.js`)){
|
||||||
@@ -95,6 +104,10 @@ async function evaluateProgram(args){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string[]} args
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
function evaluateEnvironmentVariables(args){
|
function evaluateEnvironmentVariables(args){
|
||||||
let newArgs = []
|
let newArgs = []
|
||||||
for(let arg of args){
|
for(let arg of args){
|
||||||
@@ -111,6 +124,10 @@ function evaluateEnvironmentVariables(args){
|
|||||||
return newArgs;
|
return newArgs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param { string[] } args
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
function evaluateAliases(args){
|
function evaluateAliases(args){
|
||||||
if(args[0] in aliases){
|
if(args[0] in aliases){
|
||||||
return aliases[args[0]].concat(args.slice(1))
|
return aliases[args[0]].concat(args.slice(1))
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
// Faire une lib en relatif
|
||||||
|
|
||||||
|
// Faire une api a la xorg
|
||||||
|
|
||||||
|
// Faire une api de changement de resolution
|
||||||
|
|
||||||
|
// Faire des courbes de bézier
|
||||||
|
|
||||||
|
// Géré la transparence
|
||||||
|
|
||||||
|
// Objet de Forme => { stroke & fill }
|
||||||
|
|
||||||
|
// fonts
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
//@ts-check
|
||||||
|
/**
|
||||||
|
* DICKPICK is a image drawing library
|
||||||
|
*/
|
||||||
|
|
||||||
|
const graphics = require('../../chibrax/graphics')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param { number } x
|
||||||
|
* @param { number } y
|
||||||
|
* @param { number } dx length on the x axis
|
||||||
|
* @param { number } dy length on the y axis
|
||||||
|
* @param { string } color
|
||||||
|
*/
|
||||||
|
function drawRect(x, y, dx, dy, color) {
|
||||||
|
const bitmap = {
|
||||||
|
data: Buffer.alloc(dx*dy*4, Buffer.from(graphics.parseHexColor(color))),
|
||||||
|
width: dx,
|
||||||
|
height: dy
|
||||||
|
}
|
||||||
|
|
||||||
|
graphics.drawBitmap(x,y, bitmap)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param { import('@jimp/core').Bitmap } Bitmap
|
||||||
|
* @param { number[] } color
|
||||||
|
* @returns { Pencil }
|
||||||
|
*/
|
||||||
|
function pencilFromBitmap(Bitmap, color) {
|
||||||
|
return { ...Bitmap, color }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param { number } width
|
||||||
|
* @param { number } height
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
function createBitmap(width, height) {
|
||||||
|
const data = Buffer.alloc(width * height * 4, Buffer.from([0, 0, 0, 0]));
|
||||||
|
return { width, height, data }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param { Pencil } pencil
|
||||||
|
* @param { number } x
|
||||||
|
* @param { number } y
|
||||||
|
*/
|
||||||
|
function setPixel(pencil, x, y) {
|
||||||
|
pencil.data.set(pencil.color, y*pencil.width*4 + x*4)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param { number } x
|
||||||
|
* @param { number } y
|
||||||
|
* @param { number } xc
|
||||||
|
* @param { number } yc
|
||||||
|
* @param { Pencil } pencil
|
||||||
|
*/
|
||||||
|
function symetrie8Axes(xc, yc, x, y, pencil) {
|
||||||
|
setPixel(pencil, x+xc, y+yc)
|
||||||
|
setPixel(pencil, x+xc,-y+yc)
|
||||||
|
setPixel(pencil, -x+xc,-y+yc)
|
||||||
|
setPixel(pencil, -x+xc,y+yc)
|
||||||
|
setPixel(pencil, y+xc,x+yc)
|
||||||
|
setPixel(pencil, y+xc,-x+yc)
|
||||||
|
setPixel(pencil, -y+xc,-x+yc)
|
||||||
|
setPixel(pencil, -y+xc,x+yc,)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BresenhamCircle
|
||||||
|
* @param { Pencil } pencil
|
||||||
|
* @param { number } xc
|
||||||
|
* @param { number } yc
|
||||||
|
* @param { number } r
|
||||||
|
*/
|
||||||
|
function drawCircle(pencil, xc, yc, r) {
|
||||||
|
let x = 0
|
||||||
|
let y = r
|
||||||
|
let d = 3 - (2 * r);
|
||||||
|
symetrie8Axes(xc, yc, x, y, pencil);
|
||||||
|
|
||||||
|
while(x <= y) {
|
||||||
|
if(d <= 0) {
|
||||||
|
d = d + (4 * x) + 6;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
d = d + (4 * x) - (4 * y) + 10;
|
||||||
|
y = y - 1;
|
||||||
|
}
|
||||||
|
x = x + 1;
|
||||||
|
symetrie8Axes(xc, yc, x, y, pencil);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = { drawRect, setPixel, pencilFromBitmap, createBitmap, drawCircle }
|
||||||
@@ -1,3 +1,7 @@
|
|||||||
|
//@ts-check
|
||||||
|
/**
|
||||||
|
* @type {{ [key: string]: string[] }}
|
||||||
|
*/
|
||||||
const aliases = {
|
const aliases = {
|
||||||
ls: ["ls", "--color"]
|
ls: ["ls", "--color"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
|
//@ts-check
|
||||||
|
/**
|
||||||
|
* @type {{ [key: string]: string }}
|
||||||
|
*/
|
||||||
let environment = {
|
let environment = {
|
||||||
path: ["/usr/bin", "/usr/sbin", "/usr/lib/sheebr", "/usr/local/bin", "/usr/local/sbin/"],
|
path: ["/usr/bin", "/usr/sbin", "/usr/lib/sheebr", "/usr/local/bin", "/usr/local/sbin/"].join(':'),
|
||||||
ls_color: JSON.stringify({
|
ls_color: JSON.stringify({
|
||||||
di: [01, 34],
|
di: [1, 34],
|
||||||
ln: [01, 36],
|
ln: [1, 36],
|
||||||
ex: [01, 32]
|
ex: [1, 32]
|
||||||
}),
|
}),
|
||||||
node: "/usr/local/bin/node"
|
node: "/usr/local/bin/node"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
|
//@ts-check
|
||||||
const { isAlpha } = require('./utils')
|
const { isAlpha } = require('./utils')
|
||||||
|
|
||||||
|
|
||||||
class Lexer{
|
class Lexer{
|
||||||
|
/**
|
||||||
|
* @param { string } source
|
||||||
|
*/
|
||||||
constructor(source){
|
constructor(source){
|
||||||
|
/** @type { string[] } */
|
||||||
this.tokens = [];
|
this.tokens = [];
|
||||||
this.current = 0;
|
this.current = 0;
|
||||||
this.start = 0;
|
this.start = 0;
|
||||||
@@ -46,9 +51,9 @@ class Lexer{
|
|||||||
this.tokens.push(content)
|
this.tokens.push(content)
|
||||||
}
|
}
|
||||||
|
|
||||||
addToken(tokenType, value=""){
|
//addToken(tokenType, value=""){
|
||||||
this.tokens.push(Token(tokenType, value))
|
// this.tokens.push(Token(tokenType, value))
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,10 @@ async function getline(str) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param { string } str
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
function isAlpha(str){
|
function isAlpha(str){
|
||||||
return /^[a-zA-Z]*$/.test(str)
|
return /^[a-zA-Z]*$/.test(str)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"include": ["./**/*"],
|
"include": ["./definitions.d.ts", "./rootfs overrides/**/*"],
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
// Tells TypeScript to read JS files, as
|
// Tells TypeScript to read JS files, as
|
||||||
// normally they are ignored as source files
|
// normally they are ignored as source files
|
||||||
Reference in New Issue
Block a user