UNPKG

molstar

Version:

A comprehensive macromolecular library.

94 lines 3.92 kB
"use strict"; /** * Copyright (c) 2020-2021 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Sebastian Bittrich <sebastian.bittrich@rcsb.org> * @author Alexander Rose <alexander.rose@weirdbyte.de> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.parseSdf = void 0; var tslib_1 = require("tslib"); var db_1 = require("../../../mol-data/db"); var parser_1 = require("../mol/parser"); var mol_task_1 = require("../../../mol-task"); var result_1 = require("../result"); var tokenizer_1 = require("../common/text/tokenizer"); var token_1 = require("../common/text/column/token"); var delimiter = '$$$$'; function handleDataItems(tokenizer) { var dataHeader = tokenizer_1.TokenBuilder.create(tokenizer.data, 32); var data = tokenizer_1.TokenBuilder.create(tokenizer.data, 32); while (tokenizer.position < tokenizer.length) { var line = tokenizer_1.Tokenizer.readLine(tokenizer); if (line.startsWith(delimiter)) break; if (!line) continue; if (line.startsWith('> ')) { tokenizer_1.TokenBuilder.add(dataHeader, tokenizer.tokenStart + 2, tokenizer.tokenEnd); tokenizer_1.Tokenizer.markLine(tokenizer); var start = tokenizer.tokenStart; var end = tokenizer.tokenEnd; var added = false; while (tokenizer.position < tokenizer.length) { var line2 = tokenizer_1.Tokenizer.readLine(tokenizer); if (!line2 || line2.startsWith(delimiter) || line2.startsWith('> ')) { tokenizer_1.TokenBuilder.add(data, start, end); added = true; break; } end = tokenizer.tokenEnd; } if (!added) { tokenizer_1.TokenBuilder.add(data, start, end); } } } return { dataHeader: (0, token_1.TokenColumnProvider)(dataHeader)(db_1.Column.Schema.str), data: (0, token_1.TokenColumnProvider)(data)(db_1.Column.Schema.str) }; } function handleMolFile(tokenizer) { var title = tokenizer_1.Tokenizer.readLine(tokenizer).trim(); var program = tokenizer_1.Tokenizer.readLine(tokenizer).trim(); var comment = tokenizer_1.Tokenizer.readLine(tokenizer).trim(); var counts = tokenizer_1.Tokenizer.readLine(tokenizer); var atomCount = +counts.substr(0, 3), bondCount = +counts.substr(3, 3); if (Number.isNaN(atomCount) || Number.isNaN(bondCount)) { // try to skip to next molecule while (tokenizer.position < tokenizer.length) { var line = tokenizer_1.Tokenizer.readLine(tokenizer); if (line.startsWith(delimiter)) break; } return; } var atoms = (0, parser_1.handleAtoms)(tokenizer, atomCount); var bonds = (0, parser_1.handleBonds)(tokenizer, bondCount); var dataItems = handleDataItems(tokenizer); return { molFile: { title: title, program: program, comment: comment, atoms: atoms, bonds: bonds }, dataItems: dataItems }; } function parseInternal(data) { var tokenizer = (0, tokenizer_1.Tokenizer)(data); var compounds = []; while (tokenizer.position < tokenizer.length) { var c = handleMolFile(tokenizer); if (c) compounds.push(c); } return result_1.ReaderResult.success({ compounds: compounds }); } function parseSdf(data) { var _this = this; return mol_task_1.Task.create('Parse Sdf', function () { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { return (0, tslib_1.__generator)(this, function (_a) { return [2 /*return*/, parseInternal(data)]; }); }); }); } exports.parseSdf = parseSdf; //# sourceMappingURL=parser.js.map