UNPKG

teroshdl

Version:

Backend for terosHDL IDE

129 lines (117 loc) 3.53 kB
const json5 = require('json5'); function remove_description_spaces(description){ let description_split = description.split(/\r?\n/); let description_trail = ''; for (let i = 0; i < description_split.length; i++) { const element = description_split[i]; description_trail += element.trim() + '\n'; } return description_trail; } function remove_description_first_space(description){ let description_split = description.split(/\r?\n/); let description_trail = ''; for (let i = 0; i < description_split.length; i++) { const element = description_split[i]; if (element[0] === ' '){ description_trail += element.substring(1) + '\n'; } else{ description_trail += element + '\n'; } } return description_trail; } function get_wavedrom_svg(text) { //Search json candidates let json_candidates = get_json_candidates(text); let svg_diagrams = []; let text_modified = text; let wavedrom = require('wavedrom'); var render = require('bit-field/lib/render'); let onml = require('onml'); let counter = 0; for (let i = 0; i < json_candidates.length; ++i) { try { let json = json5.parse(json_candidates[i]); let diagram = wavedrom.renderAny(0, json, wavedrom.waveSkin); let diagram_svg = onml.s(diagram); svg_diagrams.push(diagram_svg); text_modified = text_modified.replace(json_candidates[i], "\n" + "$cholosimeone$" + counter + " \n"); ++counter; } catch (error) { try { let json = json5.parse(json_candidates[i]); let options = { hspace: 888 }; let jsonml = render(json, options); let diagram_svg = onml.stringify(jsonml); svg_diagrams.push(diagram_svg); text_modified = text_modified.replace(json_candidates[i], "\n" + "$cholosimeone$" + counter + " \n"); ++counter; } // eslint-disable-next-line no-console catch (error) { console.log(""); } } } return { description: text_modified, wavedrom: svg_diagrams }; } function get_json_candidates(text) { let json = []; let i = 0; let brackets = 0; let character_number_begin = 0; while (i < text.length) { if (text[i] === '{') { character_number_begin = i; ++brackets; ++i; while (i < text.length) { if (text[i] === '{') { ++brackets; ++i; } else if (text[i] === '}') { --brackets; if (brackets === 0) { json.push(text.slice(character_number_begin, i + 1)); break; } ++i; } else { ++i; } } } else { ++i; } } return json; } function makeid(length) { var result = ''; var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; var charactersLength = characters.length; for (var i = 0; i < length; i++) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result; } function normalize_description(description){ let desc_inst = description.replace(/\n\s*\n/g, '<br> '); desc_inst = desc_inst.replace(/\n/g, ' '); desc_inst = desc_inst.replace(/<br \/>/g,' '); return desc_inst; } module.exports = { remove_description_first_space: remove_description_first_space, remove_description_spaces: remove_description_spaces, get_wavedrom_svg: get_wavedrom_svg, get_json_candidates: get_json_candidates, makeid: makeid, normalize_description : normalize_description };