Browse Source

added support for extra enum values to cif schema generator

Alexander Rose 6 years ago
parent
commit
4e6a08c93e
2 changed files with 22 additions and 1 deletions
  1. 21 0
      src/apps/schema-generator/util/cif-dic.ts
  2. 1 1
      src/mol-io/reader/cif/schema/mmcif.ts

+ 21 - 0
src/apps/schema-generator/util/cif-dic.ts

@@ -189,6 +189,20 @@ const SEMICOLON_SEPARATED_LIST_FIELDS = [
     '_chem_comp.pdbx_synonyms' // GLYCERIN; PROPANE-1,2,3-TRIOL
 ]
 
+/**
+ * Useful when a dictionary extension will add enum values to an existing dictionary.
+ * By adding them here, the dictionary extension can be tested before the added enum
+ * values are available in the existing dictionary.
+ */
+const EXTRA_ENUM_VALUES: { [k: string]: string[] } = {
+    // TODO for carbohydrate extension draft, remove when added to chem_comp dic
+    '_pdbx_chem_comp_identifier.type': [
+        'CONDENSED IUPAC CARB SYMBOL',
+        'IUPAC CARB SYMBOL',
+        'SNFG CARB SYMBOL'
+    ]
+}
+
 export function generateSchema (frames: CifFrame[]) {
     const schema: Database = {}
 
@@ -310,6 +324,13 @@ export function generateSchema (frames: CifFrame[]) {
                             console.log(`forcing space separated: ${d.header}`)
                         }
                     }
+                    if (d.header in EXTRA_ENUM_VALUES) {
+                        if (fieldType.type === 'enum') {
+                            fieldType.values.push(...EXTRA_ENUM_VALUES[d.header])
+                        } else {
+                            console.warn(`expected enum: ${d.header}`)
+                        }
+                    }
                     fields[itemName] = fieldType
                 } else {
                     console.log(`could not determine code for '${d.header}'`)

+ 1 - 1
src/mol-io/reader/cif/schema/mmcif.ts

@@ -1536,7 +1536,7 @@ export const mmCIF_Schema = {
         /**
          * This data item contains the identifier type.
          */
-        type: Aliased<'COMMON NAME' | 'SYSTEMATIC NAME' | 'CAS REGISTRY NUMBER' | 'PUBCHEM Identifier' | 'MDL Identifier' | 'SYNONYM'>(str),
+        type: Aliased<'COMMON NAME' | 'SYSTEMATIC NAME' | 'CAS REGISTRY NUMBER' | 'PUBCHEM Identifier' | 'MDL Identifier' | 'SYNONYM' | 'CONDENSED IUPAC CARB SYMBOL' | 'IUPAC CARB SYMBOL' | 'SNFG CARB SYMBOL'>(str),
         /**
          * This data item contains the name of the program
          * or library used to compute the identifier.