Skip to content

Commit 7fd29df

Browse files
committed
fix string quotes breaking the whole code (not really, single quotes are broke)
1 parent 17705d1 commit 7fd29df

File tree

1 file changed

+29
-29
lines changed

1 file changed

+29
-29
lines changed

src/lexer.ts

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ function isInt(src: string) {
5353
}
5454

5555
function opr(line: number, character: number): Range {
56-
return { end: { line, character:character+1 }, start: { line, character:character } };
56+
return { end: { line, character: character + 1 }, start: { line, character: character } };
5757
}
5858

5959
function pos(line: number, character: number): Position {
@@ -69,42 +69,42 @@ function tpr(start: Position, end: Position): Range {
6969
* @param {string} source Source string.
7070
* @returns A list of tokens generated from source string.
7171
* @author efekos
72-
* @version 1.0.8
72+
* @version 1.0.9
7373
* @since 0.0.2-alpha
7474
*/
7575
export function tokenizeSyx(source: string): Token[] {
7676
const tokens: Token[] = [];
7777
const src = source.split('');
7878
let lastString = 'n';
7979
let inString = false;
80-
function t(s:string){
81-
if(lastString==='\''&&s==='\'') {lastString='n';inString = !inString;}
82-
if(lastString==='"'&&s==='"') {lastString='n';inString = !inString;}
83-
if(lastString==='n') {lastString=s;inString=!inString;}
80+
//TODO single quotes aren't working
81+
function t(s: string) {
82+
if (lastString === 'n') { lastString = s; inString = true; }
83+
else if (lastString === '\'' && s === '\'' || (lastString === '"' && s === '"')) { lastString = 'n'; inString = false; };
8484
}
8585
let curPos = 1;
8686
let curLine = 1;
8787

8888
while (src.length > 0) {
89-
if (src[0] === '/' && src[1] === '/'&&!inString) {
89+
if (src[0] === '/' && src[1] === '/' && !inString) {
9090
while (src.length > 0 && src[0] as string !== '\n') {
9191
src.shift();
9292
curPos++;
9393
}
9494
}
95-
if (src[0] === '(') tokens.push({ type: inString?20:TokenType.OpenParen, value: src.shift(), range: opr(curLine, curPos++) });
96-
else if (src[0] === ')') tokens.push({ type: inString?20:TokenType.CloseParen, value: src.shift(), range: opr(curLine, curPos++) });
97-
else if (src[0] === '{') tokens.push({ type: inString?20:TokenType.OpenBrace, value: src.shift(), range: opr(curLine, curPos++) });
98-
else if (src[0] === '}') tokens.push({ type: inString?20:TokenType.CloseBrace, value: src.shift(), range: opr(curLine, curPos++) });
99-
else if (src[0] === '[') tokens.push({ type: inString?20:TokenType.OpenSquare, value: src.shift(), range: opr(curLine, curPos++) });
100-
else if (src[0] === ']') tokens.push({ type: inString?20:TokenType.CloseSquare, value: src.shift(), range: opr(curLine, curPos++) });
101-
else if (src[0] === ',') tokens.push({ type: inString?20:TokenType.Comma, value: src.shift(), range: opr(curLine, curPos++) });
102-
else if (src[0] === ';') tokens.push({ type: inString?20:TokenType.Semicolon, value: src.shift(), range: opr(curLine, curPos++) });
103-
else if (src[0] === '<') tokens.push({ type: inString?20:TokenType.OpenDiamond, value: src.shift(), range: opr(curLine, curPos++) });
104-
else if (src[0] === '>') tokens.push({ type: inString?20:TokenType.CloseDiamond, value: src.shift(), range: opr(curLine, curPos++) });
105-
else if (src[0] === '\'') {tokens.push({ type: TokenType.SingleQuote, value: src.shift(), range: opr(curLine, curPos++) });t('\'');}
106-
else if (src[0] === '"') {tokens.push({ type: TokenType.DoubleQuote, value: src.shift(), range: opr(curLine, curPos++) });t('"');}
107-
else if (src[0] === '|') tokens.push({ type: inString?20:TokenType.VarSeperator, value: src.shift(), range: opr(curLine, curPos++) });
95+
if (src[0] === '(') tokens.push({ type: TokenType.OpenParen, value: src.shift(), range: opr(curLine, curPos++) });
96+
else if (src[0] === ')') tokens.push({ type: TokenType.CloseParen, value: src.shift(), range: opr(curLine, curPos++) });
97+
else if (src[0] === '{') tokens.push({ type: TokenType.OpenBrace, value: src.shift(), range: opr(curLine, curPos++) });
98+
else if (src[0] === '}') tokens.push({ type: TokenType.CloseBrace, value: src.shift(), range: opr(curLine, curPos++) });
99+
else if (src[0] === '[') tokens.push({ type: TokenType.OpenSquare, value: src.shift(), range: opr(curLine, curPos++) });
100+
else if (src[0] === ']') tokens.push({ type: TokenType.CloseSquare, value: src.shift(), range: opr(curLine, curPos++) });
101+
else if (src[0] === ',') tokens.push({ type: TokenType.Comma, value: src.shift(), range: opr(curLine, curPos++) });
102+
else if (src[0] === ';') tokens.push({ type: TokenType.Semicolon, value: src.shift(), range: opr(curLine, curPos++) });
103+
else if (src[0] === '<') tokens.push({ type: TokenType.OpenDiamond, value: src.shift(), range: opr(curLine, curPos++) });
104+
else if (src[0] === '>') tokens.push({ type: TokenType.CloseDiamond, value: src.shift(), range: opr(curLine, curPos++) });
105+
else if (src[0] === '\'') { tokens.push({ type: TokenType.SingleQuote, value: src.shift(), range: opr(curLine, curPos++) }); t('\''); }
106+
else if (src[0] === '"') { tokens.push({ type: TokenType.DoubleQuote, value: src.shift(), range: opr(curLine, curPos++) }); t('"'); }
107+
else if (src[0] === '|') tokens.push({ type: TokenType.VarSeperator, value: src.shift(), range: opr(curLine, curPos++) });
108108
else if (src[0] === '+' && chars.includes(src[1])) {
109109
if (src[1] === 's') tokens.push({ type: TokenType.WhitespaceIdentifier, value: '+s', range: tpr(pos(curLine, curPos), pos(curLine, curPos + 2)) });
110110
curPos += 2;
@@ -128,7 +128,7 @@ export function tokenizeSyx(source: string): Token[] {
128128

129129
const reserved = keywords[ident];
130130
tokens.push({ type: reserved ?? TokenType.Identifier, value: ident, range: tpr(pos(curLine, startPos), pos(curLine, curPos)) });
131-
} else if (isSkippable(src[0])&&!inString) {
131+
} else if (isSkippable(src[0]) && !inString) {
132132
src.shift();
133133
curPos++;
134134
if (src[0] === '\n') { curLine++; curPos = 0; };
@@ -153,19 +153,19 @@ export function tokenizeSys(source: string): Token[] {
153153
const tokens: Token[] = [];
154154
let lastString = 'n';
155155
let inString = false;
156-
function t(s:string){
157-
if(lastString==='\''&&s==='\'') {lastString='n';inString = !inString;}
158-
if(lastString==='"'&&s==='"') {lastString='n';inString = !inString;}
159-
if(lastString==='n') {lastString=s;inString=!inString;}
156+
function t(s: string) {
157+
if (lastString === '\'' && s === '\'') { lastString = 'n'; inString = !inString; }
158+
if (lastString === '"' && s === '"') { lastString = 'n'; inString = !inString; }
159+
if (lastString === 'n') { lastString = s; inString = !inString; }
160160
}
161161

162162
let curPos = 0;
163163
let curLine = 1;
164164

165165
while (src.length > 0 && `${src[0]}${src[1]}${src[2]}` !== ':::') {
166-
if (src[0] === ';') tokens.push({ type: inString?20:TokenType.Semicolon, value: src.shift(), range: opr(curLine, curPos++) });
167-
else if (src[0] === '\'') {tokens.push({ type: TokenType.SingleQuote, value: src.shift(), range: opr(curLine, curPos++) });t('\'');}
168-
else if (src[0] === '"') {tokens.push({ type: TokenType.DoubleQuote, value: src.shift(), range: opr(curLine, curPos++) });t('"');}
166+
if (src[0] === ';') tokens.push({ type: TokenType.Semicolon, value: src.shift(), range: opr(curLine, curPos++) });
167+
else if (src[0] === '\'') { tokens.push({ type: TokenType.SingleQuote, value: src.shift(), range: opr(curLine, curPos++) }); t('\''); }
168+
else if (src[0] === '"') { tokens.push({ type: TokenType.DoubleQuote, value: src.shift(), range: opr(curLine, curPos++) }); t('"'); }
169169
else if (isAlphabetic(src[0])) {
170170
let ident = '';
171171
const startPos = curPos;
@@ -176,7 +176,7 @@ export function tokenizeSys(source: string): Token[] {
176176

177177
const reserved = keywords[ident];
178178
tokens.push({ type: reserved ?? TokenType.Identifier, value: ident, range: tpr(pos(curLine, startPos), pos(curLine, curPos)) });
179-
} else if (isSkippable(src[0])&&!inString) {
179+
} else if (isSkippable(src[0]) && !inString) {
180180
src.shift();
181181
curPos++;
182182
if (src[0] === '\n') curLine++;

0 commit comments

Comments
 (0)