/** * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose */ import { transpileMolScript } from './script/mol-script/symbols'; import { parseMolScript } from './language/parser'; import Expression from './language/expression'; import { StructureElement, QueryContext, StructureSelection, Structure, QueryFn } from '../mol-model/structure'; import { compile } from './runtime/query/compiler'; export { Script } interface Script { expression: string, language: Script.Language } function Script(expression: string, language: Script.Language): Script { return { expression, language } } namespace Script { export type Language = 'mol-script' export function areEqual(a: Script, b: Script) { return a.language === b.language && a.expression === b.expression } export function toExpression(script: Script): Expression { switch (script.language) { case 'mol-script': const parsed = parseMolScript(script.expression) if (parsed.length === 0) throw new Error('No query') return transpileMolScript(parsed[0]) } throw new Error('unsupported script language') } export function toQuery(script: Script): QueryFn { const expression = toExpression(script) return compile(expression); } export function toLoci(script: Script, structure: Structure): StructureElement.Loci { const query = toQuery(script) const result = query(new QueryContext(structure)) return StructureSelection.toLoci2(result) } }