From 34fb6a810445f8f94dbab7615e6ef57201b41f0d Mon Sep 17 00:00:00 2001 From: David Sehnal <david.sehnal@gmail.com> Date: Wed, 13 Feb 2019 17:04:11 +0100 Subject: [PATCH] wip PDB parser --- src/mol-io/reader/ccp4/parser.ts | 2 +- src/mol-io/reader/cif/binary/parser.ts | 2 +- src/mol-io/reader/cif/text/parser.ts | 2 +- src/mol-io/reader/common/text/tokenizer.ts | 12 ++++---- src/mol-io/reader/csv/parser.ts | 2 +- src/mol-io/reader/dsn6/parser.ts | 2 +- src/mol-io/reader/gro/parser.ts | 4 +-- src/mol-io/reader/mol2/parser.ts | 2 +- src/mol-io/reader/obj/parser.ts | 2 +- src/mol-io/reader/pdb/parser.ts | 14 +++++++++ src/mol-io/reader/pdb/schema.ts | 11 +++++++ src/mol-io/reader/result.ts | 34 +++++++++++----------- 12 files changed, 57 insertions(+), 32 deletions(-) create mode 100644 src/mol-io/reader/pdb/parser.ts create mode 100644 src/mol-io/reader/pdb/schema.ts diff --git a/src/mol-io/reader/ccp4/parser.ts b/src/mol-io/reader/ccp4/parser.ts index 43cc24a83..d48c343e5 100644 --- a/src/mol-io/reader/ccp4/parser.ts +++ b/src/mol-io/reader/ccp4/parser.ts @@ -6,7 +6,7 @@ import { Task, RuntimeContext } from 'mol-task'; import { Ccp4File, Ccp4Header } from './schema' -import Result from '../result' +import { ReaderResult as Result } from '../result' import { FileHandle } from '../../common/file-handle'; async function parseInternal(file: FileHandle, ctx: RuntimeContext): Promise<Result<Ccp4File>> { diff --git a/src/mol-io/reader/cif/binary/parser.ts b/src/mol-io/reader/cif/binary/parser.ts index 8a5f0ea1a..4cf3ae57f 100644 --- a/src/mol-io/reader/cif/binary/parser.ts +++ b/src/mol-io/reader/cif/binary/parser.ts @@ -7,7 +7,7 @@ import * as Data from '../data-model' import { EncodedCategory, EncodedFile } from '../../../common/binary-cif' import Field from './field' -import Result from '../../result' +import { ReaderResult as Result } from '../../result' import decodeMsgPack from '../../../common/msgpack/decode' import { Task } from 'mol-task' diff --git a/src/mol-io/reader/cif/text/parser.ts b/src/mol-io/reader/cif/text/parser.ts index 3ee75e270..96ce54472 100644 --- a/src/mol-io/reader/cif/text/parser.ts +++ b/src/mol-io/reader/cif/text/parser.ts @@ -25,7 +25,7 @@ import * as Data from '../data-model' import Field from './field' import { Tokens, TokenBuilder } from '../../common/text/tokenizer' -import Result from '../../result' +import { ReaderResult as Result } from '../../result' import { Task, RuntimeContext, chunkedSubtask } from 'mol-task' /** diff --git a/src/mol-io/reader/common/text/tokenizer.ts b/src/mol-io/reader/common/text/tokenizer.ts index 523bb9061..e88b68dd5 100644 --- a/src/mol-io/reader/common/text/tokenizer.ts +++ b/src/mol-io/reader/common/text/tokenizer.ts @@ -8,7 +8,9 @@ import { chunkedSubtask, RuntimeContext } from 'mol-task' -export interface Tokenizer { +export { Tokenizer } + +interface Tokenizer { data: string, position: number, @@ -25,7 +27,7 @@ export interface Tokens { indices: ArrayLike<number> } -export function Tokenizer(data: string): Tokenizer { +function Tokenizer(data: string): Tokenizer { return { data, position: 0, @@ -36,7 +38,7 @@ export function Tokenizer(data: string): Tokenizer { }; } -export namespace Tokenizer { +namespace Tokenizer { export function getTokenString(state: Tokenizer) { return state.data.substring(state.tokenStart, state.tokenEnd); } @@ -269,6 +271,4 @@ export namespace TokenBuilder { indices: new Uint32Array(size) } } -} - -export default Tokenizer \ No newline at end of file +} \ No newline at end of file diff --git a/src/mol-io/reader/csv/parser.ts b/src/mol-io/reader/csv/parser.ts index d5bc68535..779aca07b 100644 --- a/src/mol-io/reader/csv/parser.ts +++ b/src/mol-io/reader/csv/parser.ts @@ -8,7 +8,7 @@ import { Tokens, TokenBuilder, Tokenizer } from '../common/text/tokenizer' import * as Data from './data-model' import Field from './field' -import Result from '../result' +import { ReaderResult as Result } from '../result' import { Task, RuntimeContext, chunkedSubtask, } from 'mol-task' const enum CsvTokenType { diff --git a/src/mol-io/reader/dsn6/parser.ts b/src/mol-io/reader/dsn6/parser.ts index a77c96866..35416d7a8 100644 --- a/src/mol-io/reader/dsn6/parser.ts +++ b/src/mol-io/reader/dsn6/parser.ts @@ -6,7 +6,7 @@ import { Task, RuntimeContext } from 'mol-task'; import { Dsn6File, Dsn6Header } from './schema' -import Result from '../result' +import { ReaderResult as Result } from '../result' import { FileHandle } from '../../common/file-handle'; function parseBrixHeader(str: string): Dsn6Header { diff --git a/src/mol-io/reader/gro/parser.ts b/src/mol-io/reader/gro/parser.ts index 6183a9a5f..0367a3ee8 100644 --- a/src/mol-io/reader/gro/parser.ts +++ b/src/mol-io/reader/gro/parser.ts @@ -6,10 +6,10 @@ */ import { Column } from 'mol-data/db' -import Tokenizer from '../common/text/tokenizer' +import { Tokenizer } from '../common/text/tokenizer' import FixedColumn from '../common/text/column/fixed' import * as Schema from './schema' -import Result from '../result' +import { ReaderResult as Result } from '../result' import { Task, RuntimeContext } from 'mol-task' interface State { diff --git a/src/mol-io/reader/mol2/parser.ts b/src/mol-io/reader/mol2/parser.ts index 297e15026..45e0b6cca 100644 --- a/src/mol-io/reader/mol2/parser.ts +++ b/src/mol-io/reader/mol2/parser.ts @@ -15,7 +15,7 @@ import { Column } from 'mol-data/db' import { TokenBuilder, Tokenizer } from '../common/text/tokenizer' import TokenColumn from '../common/text/column/token' import * as Schema from './schema' -import Result from '../result' +import { ReaderResult as Result } from '../result' import { Task, RuntimeContext, chunkedSubtask } from 'mol-task' const { skipWhitespace, eatValue, markLine, getTokenString, readLine } = Tokenizer; diff --git a/src/mol-io/reader/obj/parser.ts b/src/mol-io/reader/obj/parser.ts index 046143b30..a8b113a33 100644 --- a/src/mol-io/reader/obj/parser.ts +++ b/src/mol-io/reader/obj/parser.ts @@ -4,7 +4,7 @@ * @author Alexander Rose <alexander.rose@weirdbyte.de> */ -import Result from '../result' +import { ReaderResult as Result } from '../result' import { Task, RuntimeContext } from 'mol-task' import { Mesh } from 'mol-geo/geometry/mesh/mesh'; diff --git a/src/mol-io/reader/pdb/parser.ts b/src/mol-io/reader/pdb/parser.ts new file mode 100644 index 000000000..4936fe9c9 --- /dev/null +++ b/src/mol-io/reader/pdb/parser.ts @@ -0,0 +1,14 @@ +/** + * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info. + * + * @author David Sehnal <david.sehnal@gmail.com> + */ + +import { PdbFile } from './schema'; +import { Task } from 'mol-task'; +import { ReaderResult } from '../result'; +import { Tokenizer } from '../common/text/tokenizer'; + +export function parse(data: string): Task<ReaderResult<PdbFile>> { + return Task.create('Parse PDB', async ctx => ReaderResult.success({ lines: await Tokenizer.readAllLinesAsync(data, ctx) })); +} \ No newline at end of file diff --git a/src/mol-io/reader/pdb/schema.ts b/src/mol-io/reader/pdb/schema.ts new file mode 100644 index 000000000..d5ab67905 --- /dev/null +++ b/src/mol-io/reader/pdb/schema.ts @@ -0,0 +1,11 @@ +/** + * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info. + * + * @author David Sehnal <david.sehnal@gmail.com> + */ + +import { Tokens } from '../common/text/tokenizer'; + +export interface PdbFile { + lines: Tokens +} \ No newline at end of file diff --git a/src/mol-io/reader/result.ts b/src/mol-io/reader/result.ts index 4eb76dd37..255ae0c9e 100644 --- a/src/mol-io/reader/result.ts +++ b/src/mol-io/reader/result.ts @@ -5,7 +5,7 @@ * @author David Sehnal <david.sehnal@gmail.com> */ -type ReaderResult<T> = Success<T> | Error +type ReaderResult<T> = ReaderResult.Success<T> | ReaderResult.Error namespace ReaderResult { export function error<T>(message: string, line = -1): ReaderResult<T> { @@ -15,28 +15,28 @@ namespace ReaderResult { export function success<T>(result: T, warnings: string[] = []): ReaderResult<T> { return new Success<T>(result, warnings); } -} -export class Error { - isError: true = true; + export class Error { + isError: true = true; - toString() { - if (this.line >= 0) { - return `[Line ${this.line}] ${this.message}`; + toString() { + if (this.line >= 0) { + return `[Line ${this.line}] ${this.message}`; + } + return this.message; } - return this.message; - } - constructor( - public message: string, - public line: number) { + constructor( + public message: string, + public line: number) { + } } -} -export class Success<T> { - isError: false = false; + export class Success<T> { + isError: false = false; - constructor(public result: T, public warnings: string[]) { } + constructor(public result: T, public warnings: string[]) { } + } } -export default ReaderResult \ No newline at end of file +export { ReaderResult } \ No newline at end of file -- GitLab