import { LanguageService } from "../services/languageService"; import { Types } from "./types"; import Decimal from "decimal.js"; import { Config } from "../util/config"; export function toInt (str) { return new Decimal(str); } export function toString (str) { let value = str.replace(/^"/, ""); value = value.replace(/"$/, ""); value = value.replace(/\\b/g, "\b"); value = value.replace(/\\t/g, "\t"); value = value.replace(/\\n/g, "\n"); value = value.replace(/\\r/g, "\r"); value = value.replace(/\\"/g, '"'); value = value.replace(/\\'/g, "'"); value = value.replace(/\\\\/g, "\\"); return value; } export function toChar (str) { //console.debug(str, str.length); let value = str.replace(/^'/, ""); value = value.replace(/'$/, ""); value = value.replace(/\\b/g, "\b"); value = value.replace(/\\t/g, "\t"); value = value.replace(/\\n/g, "\n"); value = value.replace(/\\r/g, "\r"); value = value.replace(/\\"/g, '"'); value = value.replace(/\\'/g, "'"); value = value[0]; return value; } export function toReal (value) { return new Decimal(value); } export function toBool (str) { const val = str; const lexer = LanguageService.getCurrentLexer(); if (lexer.getReservedKeys()[lexer.getRules().RK_TRUE] === val) { return true; } else if (lexer.getReservedKeys()[lexer.getRules().RK_FALSE] === val) { return false; } else { // TODO: better error message throw new Error(str + "not a valid boolean"); } } export function convertBoolToString (bool) { const lexer = LanguageService.getCurrentLexer(); let result = null; if (bool) { result = lexer.getReservedKeys()[lexer.getRules().RK_TRUE]; } else { result = lexer.getReservedKeys()[lexer.getRules().RK_FALSE]; } //console.debug(result) return result.replace(/'/g, ""); } export function convertToString (value, type) { switch (type.ord) { case Types.INTEGER.ord: return value.toString(); case Types.REAL.ord: { if (value.dp() <= 0) { return value.toFixed(1); } else { return value.toFixed(Config.decimalPlaces); } } case Types.BOOLEAN.ord: return convertBoolToString(value); default: return value; } }