├── testfiles ├── lipidnames-invalid-01.txt ├── lipidnames-invalid.txt ├── lipidnames.txt ├── lipidnames.csv ├── shorthand-test.csv └── lipid-masses.csv ├── .gitignore ├── goslin.png ├── renovate.json ├── docs ├── uml-class-diagram.png ├── goslin-class-diagram.png ├── goslin-webapp-form-01.png ├── goslin-webapp-form-02.png ├── goslin-webapp-rest-05.png ├── goslin-webapp-form-02a.png ├── goslin-webapp-result-03.png ├── goslin-webapp-result-detail-04.png └── grammars │ ├── HMDB │ ├── dark.css │ └── light.css │ ├── FattyAcids │ ├── dark.css │ └── light.css │ ├── Goslin │ ├── dark.css │ └── light.css │ ├── LipidMaps │ ├── dark.css │ └── light.css │ ├── SumFormula │ ├── dark.css │ └── light.css │ ├── GoslinFragments │ ├── dark.css │ └── light.css │ ├── Shorthand2020 │ ├── dark.css │ └── light.css │ └── SwissLipids │ ├── dark.css │ └── light.css ├── .github ├── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md └── workflows │ └── check-grammars.yml ├── CITATION.cff ├── LICENSE ├── SumFormula.g4 ├── functional-groups.csv ├── README.md ├── CODE_OF_CONDUCT.md ├── trivial_mediators.csv ├── goslin.svg ├── SwissLipids.g4 ├── FattyAcids.g4 ├── GoslinFragments.g4 └── HMDB.g4 /testfiles/lipidnames-invalid-01.txt: -------------------------------------------------------------------------------- 1 | SM(32:0) -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .antlr/ 2 | .gradle/ 3 | build/ 4 | -------------------------------------------------------------------------------- /goslin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lifs-tools/goslin/HEAD/goslin.png -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "config:recommended" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /docs/uml-class-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lifs-tools/goslin/HEAD/docs/uml-class-diagram.png -------------------------------------------------------------------------------- /docs/goslin-class-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lifs-tools/goslin/HEAD/docs/goslin-class-diagram.png -------------------------------------------------------------------------------- /docs/goslin-webapp-form-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lifs-tools/goslin/HEAD/docs/goslin-webapp-form-01.png -------------------------------------------------------------------------------- /docs/goslin-webapp-form-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lifs-tools/goslin/HEAD/docs/goslin-webapp-form-02.png -------------------------------------------------------------------------------- /docs/goslin-webapp-rest-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lifs-tools/goslin/HEAD/docs/goslin-webapp-rest-05.png -------------------------------------------------------------------------------- /docs/goslin-webapp-form-02a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lifs-tools/goslin/HEAD/docs/goslin-webapp-form-02a.png -------------------------------------------------------------------------------- /docs/goslin-webapp-result-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lifs-tools/goslin/HEAD/docs/goslin-webapp-result-03.png -------------------------------------------------------------------------------- /docs/goslin-webapp-result-detail-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lifs-tools/goslin/HEAD/docs/goslin-webapp-result-detail-04.png -------------------------------------------------------------------------------- /testfiles/lipidnames-invalid.txt: -------------------------------------------------------------------------------- 1 | PE 18:3:1-16:2 2 | CL 18:1/18:1-18:1-18:1 3 | MLL 18:1-18:1-18:1 4 | M(IP )2C 18:0;3/26:0;1 5 | PET 16:0-18:1 6 | CDPDAG 18:1-18:1-18:1 7 | BeMP 18:1-18:1 8 | PE O18:0a-22:6 9 | GB3 18:1;2-24:1;12 10 | DGDGDG 16:0-16:1 11 | DG 16:0-16:1 12 | LCB 17:1;2/6:0 13 | LP 19:1p 14 | xx2-34 15 | Hex2Cer 18:1;2/12:0/2:0 16 | Cer 18:1;2\\16:0 17 | MAG 16:0-12:0 18 | PC 21:0+22:6 -------------------------------------------------------------------------------- /testfiles/lipidnames.txt: -------------------------------------------------------------------------------- 1 | PE 18:3;1-16:2 2 | PE 16:2-18:3;1 3 | PE 16:2-18:3;1 4 | PE 16:2_18:3;1 5 | PE 16:2/18:3;1 6 | PE 16:2\18:3;1 7 | CL 18:1-18:1-18:1-18:1 8 | MLCL 18:1-18:1-18:1 9 | SHexCer 18:0;3/26:0;1 10 | PEt 16:0-18:1 11 | CDPDAG 18:1-18:1 12 | BMP 18:1-18:1 13 | PE O 18:0a/22:6 14 | GB3 18:1;2/24:1 15 | DGDG 16:0-16:1 16 | LCB 17:1;2 17 | LPE O 19:1p 18 | Hex2Cer 18:1;2/12:0 19 | Cer 18:1;2/16:0 20 | MAG 16:0 21 | PIP2 21:0-22:6 22 | 12-HETE 23 | Palmitic acid 24 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /CITATION.cff: -------------------------------------------------------------------------------- 1 | cff-version: 1.2.0 2 | message: "If you use this software, please cite it as below." 3 | authors: 4 | - family-names: Kopczynski 5 | given-names: Dominik 6 | orcid: https://orcid.org/0000-0001-5885-4568 7 | - family-names: Hoffmann 8 | given-names: Nils 9 | orcid: https://orcid.org/0000-0002-6540-6875 10 | - family-names: Peng 11 | given-names: Bing 12 | orcid: https://orcid.org/0000-0001-5006-7041 13 | - family-names: Ahrends 14 | given-names: Robert 15 | orcid: http://orcid.org/0000-0003-0232-3375 16 | title: "Goslin is the Grammar on succinct lipid nomenclature." 17 | version: 1.1.2 18 | date-released: 2020-06-26 19 | identifiers: 20 | - description: "Main Publication: Goslin: A Grammar of Succinct Lipid Nomenclature" 21 | type: doi 22 | value: "10.1021/acs.analchem.0c01690" 23 | license: MIT 24 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Dominik Kopczynski - dominik.kopczynski {at} univie.ac.at 4 | Nils Hoffmann - nils.hoffmann {at} cebitec.uni-bielefeld.de 5 | Bing Peng - bing.peng {at} ki.se 6 | Robert Ahrends - robert.ahrends {at} univie.ac.at 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in all 16 | copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 | SOFTWARE. 25 | -------------------------------------------------------------------------------- /.github/workflows/check-grammars.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: Check Grammars 4 | 5 | # Controls when the workflow will run 6 | on: 7 | # Triggers the workflow on push or pull request events but only for the master branch 8 | push: 9 | branches: [ master ] 10 | pull_request: 11 | branches: [ master ] 12 | 13 | # Allows you to run this workflow manually from the Actions tab 14 | workflow_dispatch: 15 | 16 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 17 | jobs: 18 | # This workflow contains a single job called "build" 19 | build: 20 | # The type of runner that the job will run on 21 | runs-on: ubuntu-latest 22 | 23 | # Steps represent a sequence of tasks that will be executed as part of the job 24 | steps: 25 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 26 | - uses: actions/checkout@v4 27 | - name: Set up JDK 11 28 | uses: actions/setup-java@v4 29 | with: 30 | java-version: '11' 31 | distribution: 'adopt' 32 | cache: 'gradle' 33 | - name: Gradle Build Action 34 | uses: gradle/gradle-build-action@v3.5.0 35 | with: 36 | gradle-version: '7.2' 37 | arguments: build --continue # continue build on task errors to get overview of all tasks 38 | # Includes the AsciiDoctor GitHub Pages Action to convert adoc files to html and publish to gh-pages branch 39 | - name: asciidoctor-ghpages 40 | uses: manoelcampos/asciidoctor-ghpages-action@v2 41 | with: 42 | pdf_build: false 43 | # asciidoctor_params: --attribute=nofooter 44 | # adoc_file_ext: .ascii # default is .adoc 45 | # source_dir: docs/ # default is . 46 | # slides_build: true 47 | # pre_build: 48 | # post_build: -------------------------------------------------------------------------------- /testfiles/lipidnames.csv: -------------------------------------------------------------------------------- 1 | # regular lipid names on precursor level 2 | LPA 16:1p,LPA 16:1p 3 | LPS 12:0a,LPS 12:0a 4 | LPE O-20:1p,LPE O-20:1p 5 | PE 16:2-18:3;1,PE 16:2-18:3;1 6 | CL 18:1-18:1-18:1-18:1,CL 18:1-18:1-18:1-18:1 7 | MLCL 18:1-18:1-18:1,MLCL 18:1-18:1-18:1 8 | SHexCer 18:0;3/26:0;1,SHexCer 18:0;3/26:0;1 9 | PEt 16:0-18:1,PEt 16:0-18:1 10 | CDPDAG 18:1-18:1,CDPDAG 18:1-18:1 11 | BMP 18:1-18:1,BMP 18:1-18:1 12 | PE O-18:0a/22:6,PE O-18:0a/22:6 13 | Hex3Cer 18:1;2/24:1,Hex3Cer 18:1;2/24:1 14 | DGDG 16:0-16:1,DGDG 16:0-16:1 15 | LCB 17:1;2,LCB 17:1;2 16 | LPE O-19:1p,LPE O-19:1p 17 | Hex2Cer 18:1;2/12:0,Hex2Cer 18:1;2/12:0 18 | Cer 18:1;2/16:0,Cer 18:1;2/16:0 19 | MAG 16:0,MAG 16:0 20 | PIP2 21:0-22:6,PIP2 21:0-22:6 21 | 12-HETE,12-HETE 22 | Palmitic acid,Palmitic acid 23 | 24 | # lipids on precursor level with one heavy labeled building block 25 | HexCer(+[13]C4) 18:1;2/16:0,HexCer(+[13]C4) 18:1;2/16:0 26 | MAG(+[18]O) 16:0,MAG(+[18]O) 16:0 27 | Ch(+[13]C),Ch(+[13]C) 28 | 12-HETE(+[2]H2),12-HETE(+[2]H2) 29 | MAG 16:0(+[18]O),MAG 16:0(+[18]O) 30 | CL 18:1-18:1-18:1(+[13]C18)-18:1,CL 18:1-18:1-18:1(+[13]C18)-18:1 31 | PE O-18:0a/22:6(+[18]O),PE O-18:0a/22:6(+[18]O) 32 | LPE(+[13]C4) O-12:1a,LPE(+[13]C4) O-12:1a 33 | PC(+[13]C4) O-12:1a/10:1,PC(+[13]C4) O-12:1a/10:1 34 | 35 | # lipids on precursor level with several heavy labeled building blocks 36 | CDPDAG(+[18]O13) 18:1(+[13]C18)-18:1(+[13]C18),CDPDAG(+[18]O13) 18:1(+[13]C18)-18:1(+[13]C18) 37 | BMP(+[2]H10[32]P) 18:1-18:1(+[13]C18),BMP(+[2]H10[32]P) 18:1-18:1(+[13]C18) 38 | PE O-18:0a(+[13]C18)/22:6(+[18]O),PE O-18:0a(+[13]C18)/22:6(+[18]O) 39 | PC O-18:0a(+[13]C18)/22:6(+[18]O),PC O-18:0a(+[13]C18)/22:6(+[18]O) 40 | LPE O-18:1p(+[13]C18),LPE O-18:1p(+[13]C18) 41 | LPC O-16:1a(+[13]C16),LPC O-16:1a(+[13]C16) 42 | Hex3Cer(+[2]H30[13]C18) 18:1;2/24:1(+[13]C24),Hex3Cer(+[2]H30[13]C18) 18:1;2/24:1(+[13]C24) 43 | CL 18:1(+[13]C18)-18:1(+[13]C18)-18:1(+[13]C18)-18:1(+[13]C18),CL 18:1(+[13]C18)-18:1(+[13]C18)-18:1(+[13]C18)-18:1(+[13]C18) 44 | 45 | -------------------------------------------------------------------------------- /SumFormula.g4: -------------------------------------------------------------------------------- 1 | //////////////////////////////////////////////////////////////////////////////// 2 | // MIT License 3 | // 4 | // Copyright (c) the authors (listed in global LICENSE file) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | // SOFTWARE. 23 | //////////////////////////////////////////////////////////////////////////////// 24 | 25 | //// This is a BNF grammer for lipid subspecies identifiers followed by 26 | //// J.K. Pauling et al. 2017, PLoS One, 12(11):e0188394. 27 | 28 | grammar SumFormula; 29 | 30 | /* first rule is always start rule */ 31 | molecule: molecule_rule EOF; 32 | molecule_rule: molecule_group; 33 | molecule_group: element_group | single_element | molecule_group molecule_group; 34 | element_group: element count; 35 | single_element: element; 36 | element: 'C' | 'H' | 'N' | 'O' | 'P' | 'S' | 'Br' | 'I' | 'F' | 'Cl' | 'As' | 'B'; 37 | count: number | '-' number; 38 | number : digit | digit number; 39 | digit: '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'; 40 | 41 | -------------------------------------------------------------------------------- /functional-groups.csv: -------------------------------------------------------------------------------- 1 | Type,Name,Elements,Double bonds,is atomic,stereo bound,Description,Synonyms, 2 | FG,oxy,O,0,0,0,Alkoxy / ether,, 3 | FG,NH2,NH,0,0,1,Amino,, 4 | FG,COOH,CO2,1,0,1,Carboxyl,, 5 | FG,CN,CNH-1,0,0,1,Cyano,, 6 | FG,Ep,OH-2,1,0,1,Epoxy,, 7 | FG,Et,C2H4,0,0,1,Ethyl,, 8 | FG,OOH,O2,0,0,1,Hydroperoxy,, 9 | FG,OH,O,0,0,1,Hydroxyl,, 10 | FG,OMe,CH2O,0,0,1,Methoxy,, 11 | FG,Me,CH2,0,0,1,Methyl,, 12 | FG,NO2,NO2H-1,1,0,1,Nitro,, 13 | FG,oxo,OH-2,1,0,0,Keto,CHO,Ke 14 | FG,OO,O2,0,0,1,Peroxy,, 15 | FG,Ph,PO4H,0,0,1,Phosphate,, 16 | FG,SH,S,0,0,1,Sulfanyl,, 17 | FG,Su,SO4,0,0,1,Sulfate,, 18 | FG,My,C,1,0,0,Methylene,, 19 | FG,dME,C,0,0,1,Methylen,, 20 | FG,X,O,0,0,0,Hidden,, 21 | FG,d,O-1H-1,0,0,0,Deoxy,, 22 | FG,MMAs,C2H5OAs,1,0,1,Dimethylarsinoyl,, 23 | FG,BOO,C4H8O2,0,0,1,Butylperoxy,, 24 | FG,T,SO3H,0,0,1,,, 25 | FG,G,NH,0,0,1,,, 26 | HGD,Hex,C6H10O6,0,0,0,,, 27 | HGD,Hex2,C12H20O11,0,0,0,,, 28 | HGD,Hex3,C18H30O16,0,0,0,,, 29 | HGD,Lac,C12H20O11,0,0,0,,, 30 | HGD,Gal,C6H10O6,0,0,0,,, 31 | HGD,Glc,C6H10O6,0,0,0,,, 32 | HGD,NeuAc,O9NC11H17,0,0,0,,, 33 | HGD,OAc-NeuAc,O10NC13H19,0,0,0,,, 34 | HGD,SGal,O9H10C6S1,0,0,0,,, 35 | HGD,S(3')Gal,O9H10C6S1,0,0,0,,, 36 | HGD,SHex,O9H10C6S1,0,0,0,,, 37 | HGD,S(3')Hex,O9H10C6S1,0,0,0,,, 38 | HGD,SHex2,C12H20O14S1,0,0,0,,, 39 | HGD,S(3')Hex2,C12H20O14S1,0,0,0,,, 40 | HGD,GlcA,C6O6H8,0,0,0,,, 41 | HGD,HexA,C6O6H8,0,0,0,,, 42 | HGD,HexNAc,C8H13O6N,0,0,0,,, 43 | HGD,GalNAc,C8H13O6N,0,0,0,,, 44 | HGD,GlcNAc,C8H13O6N,0,0,0,,, 45 | HGD,Man,C6H10O6,0,0,0,,, 46 | HGD,Neu,C9H14O8N,0,0,0,,, 47 | HGD,NeuGc,C11H17NO10,0,0,0,,, 48 | HGD,NAc,C6H10O5,0,0,0,,, 49 | HGD,Fuc,C6H10O5,0,0,0,,, 50 | HGD,Kdn,C9H14O9,0,0,0,,, 51 | HGD,KDN,C9H14O9,0,0,0,,, 52 | HGD,Xyl,C29H52O26,0,0,0,,, 53 | HGD,COG,C18H19N5O,0,0,0,,, 54 | HGD,COT,C6H14N2O2,0,0,0,,, 55 | HGD,OGlc,C6H10O5,0,0,0,,, 56 | FG,H,H,0,0,0,,, 57 | HGD,OGlcNAc,,0,0,0,,, 58 | HGD,NeuAc2,,0,0,0,,, 59 | FG,O,O,0,1,0,,, 60 | FG,N,NH,0,1,0,,, 61 | FG,P,PH,0,1,0,,, 62 | FG,S,S,0,1,0,,, 63 | FG,Br,BrH-1,0,1,0,,, 64 | FG,F,FH-1,0,1,0,,, 65 | FG,I,IH-1,0,1,0,,, 66 | FG,Cl,ClH-1,0,1,0,,, 67 | FG,As,AsH-1,0,1,0,,, 68 | FG,B,BH-1,0,1,0,,, 69 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Goslin 2 | 3 | 4 | Goslin is the **G**rammar **o**n **s**uccinct **li**pid **n**omenclature. 5 | 6 | Goslin defines multiple grammers compatible with ANTLRv4 for different sources of shorthand lipid nomenclature. This allows to generate parsers based on the defined grammars, which provide immediate feedback whether a processed lipid shorthand notation string is compliant with a particular grammar, or not. 7 | 8 | [Overview of Goslin and Tutorials](docs/) 9 | 10 | > Goslin 2.0 supports the [updated lipid shorthand nomenclature with new structural levels](https://pubmed.ncbi.nlm.nih.gov/33037133/). 11 | 12 | General information on Goslin is also available on the LIFS Tools [website](https://lifs-tools.org/goslin). 13 | 14 | ## Citing Goslin 15 | If you use Goslin or any of the specific implementations in your work, we kindly ask you to cite the original publication: 16 | 17 | * [D. Kopczynski _et al._,https://lifs.isas.de/tools/goslin **Goslin - A Grammar of Succinct Lipid Nomenclature**, Analytical Chemistry, June 26th, 2020.](https://pubs.acs.org/doi/10.1021/acs.analchem.0c01690) [doi:10.1021/acs.analchem.0c01690](https://doi.org/10.1021/acs.analchem.0c01690) 18 | 19 | If you are using any of the new features of Goslin 2.0, please cite the following, updated Goslin 2.0 publication: 20 | 21 | * [D. Kopczynski _et al._, **Goslin 2.0 Implements the Recent Lipid Shorthand Nomenclature for MS-Derived Lipid Structures**, Analytical Chemistry, April 11th, 2022.](https://pubs.acs.org/doi/full/10.1021/acs.analchem.1c05430) [doi:10.1021/acs.analchem.1c05430](https://doi.org/10.1021/acs.analchem.1c05430) 22 | 23 | ## References 24 | * [D. Kopczynski, N. Hoffmann *et al.*, Analytical Chemistry, April 11th, 2022](https://doi.org/10.1021/acs.analchem.1c05430) 25 | * [D. Kopczynski, N. Hoffmann *et al.*, Analytical Chemistry, June 26th, 2020](https://pubs.acs.org/doi/10.1021/acs.analchem.0c01690) 26 | * [D. Kopczynski, N. Hoffmann *et al.*, Biorxiv, April 20th, 2020 (Preprint)](https://doi.org/10.1101/2020.04.17.046656) 27 | 28 | ## Related Projects 29 | 30 | - [This project](http://github.com/lifs-tools/goslin) 31 | - [C++ implementation](https://github.com/lifs-tools/cppgoslin) 32 | - [C# implementation](https://github.com/lifs-tools/csgoslin) 33 | - [Java implementation](https://github.com/lifs-tools/jgoslin) 34 | - [Python implementation](https://github.com/lifs-tools/pygoslin) 35 | - [R implementation](https://github.com/lifs-tools/rgoslin) 36 | - [Webapplication and REST API](https://github.com/lifs-tools/goslin-webapp) 37 | 38 | ## Test data 39 | 40 | 1. testfiles/lipidmaps-names-Feb-10-2020.tsv - generated from [LipidMAPS LMSDB](https://www.lipidmaps.org/) export on Feb. 10th, 2020. Filtered all entries without an abbreviation. 41 | 2. testfiles/swisslipids-names-Feb-10-2020.tsv - generated from [Swiss Lipids](https://www.swisslipids.org) (lipids table) export on Feb. 10th ,2020. 42 | 43 | Short samples of lipid names used for testing of the implementations are available from the [testfiles directory](testfiles/). 44 | 45 | ## License 46 | 47 | The Goslin grammars are licensed under the terms of the MIT license (see [LICENSE](LICENSE)). 48 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at lifs-support@isas.de. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /trivial_mediators.csv: -------------------------------------------------------------------------------- 1 | 10-HDoHE 4Z,7Z,11E,13Z,16Z,19Z 2 | 10-HOME 11E 3 | 10-HpOME 8E 4 | 10,17-DiHDoHE 4Z,7Z,11E,13Z,15E,19Z 5 | 10(11)-EpDPE 4Z,7Z,13Z,16Z,19Z 6 | 10R-HOME 11Z 7 | 10R-HpOME 11Z 8 | 10S-HOME 11Z 9 | 10S,17S-DiHDoHE 4Z,7Z,11E,13Z,15E,19Z 10 | 11-HDoHE 4Z,7Z,9E,13Z,16Z,19Z 11 | 11-HEPE 5Z,8Z,12E,14Z,17Z 12 | 11-HETE 5Z,8Z,12E,14Z 13 | 11-HOME 12 14 | 11-HpODE 9Z,12Z 15 | 11-HpOME 9Z 16 | 11,12-EET 5Z,8Z,14Z 17 | 11R-HETE 5Z,8Z,12E,14Z 18 | 11R-HOME 12Z 19 | 11R,12S-EpETrE 5Z,8Z,14Z 20 | 11S-HETE 5Z,8Z,12E,14Z 21 | 11S-HOME 12Z 22 | 11S-HpODE 9Z,12Z 23 | 11S,12R-EpETrE 5Z,8Z,14Z 24 | 12-HEPE 5Z,8Z,10E,14Z,17Z 25 | 12-HETE 5Z,8Z,10E,14Z 26 | 12-HHTrE 5Z,8E,10E 27 | 12-HOME 13 28 | 12-HpOME 13 29 | 12-oxoHT 5Z,8E,10E 30 | 12,13-DiHOME 9Z 31 | 12,13-EpODE 9,11 32 | 12,13-EpOME 9 33 | 12,13S-EOT 9Z,11,15Z 34 | 12,13S-EpODE 9Z,11 35 | 12(13)-EpOME 9Z 36 | 12(S)-HETE 5E,8Z,10Z,14Z 37 | 12R-HETE 5Z,8Z,10E,14Z 38 | 12R-HHTrE 5,8,10 39 | 12R-HODE 9Z,15Z 40 | 12R-HOME 13Z 41 | 12R-HpOME 13 42 | 12S-HETE 5Z,8Z,10E,14Z 43 | 12S-HHTrE 5Z,8E,10E 44 | 12S-HOME 13Z 45 | 12S-HpOME 13 46 | 12S,13R-EpOME 9Z 47 | 13-HDoHE 4Z,7Z,10Z,14E,16Z,19Z 48 | 13-HETE 5Z,8Z,11Z,17Z 49 | 13-HODE 9Z,11E 50 | 13-HOME 11 51 | 13-HOTrE 9,11,15 52 | 13-HpOME 14E 53 | 13-HpOTrE 9,11E,15Z 54 | 13-Oxo-ODE 9Z,11E 55 | 13(14)-EpDPE 4Z,7Z,10Z,16Z,19Z 56 | 13R-HETE 5Z,8Z,11Z,14Z 57 | 13R-HODE 9,11 58 | 13R-HOME 11E 59 | 13R-HpOME 11E 60 | 13S-HODE 9Z,11E 61 | 13S-HOME 11E 62 | 13S-HOTrE 9Z,11E,15Z 63 | 13S-HpODE 9Z,11E 64 | 13S-HpOME 11E 65 | 13S-HpOTrE 9Z,11E,15Z 66 | 14-HDoHE 4Z,7Z,10Z,12E,16Z,19Z 67 | 14-HpOME 12 68 | 14,15-DiHETrE 5Z,8Z,11Z 69 | 14,15-EET 5Z,8Z,11Z 70 | 14,15-EpETrE 5Z,8Z,11Z 71 | 14R-HpOME 12E 72 | 14R,15S-EpETrE 5Z,8Z,11Z 73 | 14S-HpOME 12E 74 | 14S,15R-EpETrE 5Z,8Z,11Z 75 | 15-HETE 5Z,8Z,11Z,13Z 76 | 15-HETrE 8Z,11Z,13E 77 | 15-HpETE 5Z,8Z,11Z,13E 78 | 15-HPETE 5Z,8Z,11Z,13E 79 | 15-oxoETE 5,8,11,13 80 | 15,16-DiHODE 9Z,12Z 81 | 15(R)-HETE 5E,8Z,11Z,13Z 82 | 15R-HETE 5Z,8Z,11E,13Z 83 | 15R-HpETE 5,8,11,13 84 | 15S-HETE 5Z,8Z,11Z,13E 85 | 15S-HpETE 5Z,8Z,11Z,13E 86 | 16-HDoHE 4Z,7Z,10Z,13Z,17E,19Z 87 | 16-HETE 5Z,8Z,11Z,14Z 88 | 16(17)-EpDPE 4Z,7Z,10Z,13Z,19Z 89 | 17-HDoHE 4Z,7Z,10Z,13Z,15E,19Z 90 | 17,18-diHEPE 5Z,8Z,11Z,13E,15E 91 | 17,18-EpETE 5,8,11,14 92 | 17R,18R-diHEPE 5Z,8Z,11Z,13E,15E 93 | 17R,18S-diHEPE 5Z,8Z,11Z,13E,15E 94 | 17R,18S-EpETE 5Z,8Z,11Z,14Z 95 | 19-HETE 5Z,8Z,11Z,14Z 96 | 19(20)-EpDPE 4Z,7Z,10Z,13Z,16Z 97 | 20-HDoHE 4Z,7Z,10Z,13Z,16Z,18E 98 | 20-HETE 5Z,8Z,11Z,14Z 99 | 4-HDoHE 5E,7Z,10Z,13Z,16Z,19Z 100 | 5-HETrE 6E,8Z,11Z 101 | 5-HpETE 6E,8Z,11Z,14Z 102 | 5-HPETE 6E,8Z,11Z,14Z 103 | 5,11-DiHETE 6,8,12,14 104 | 5,12-diHETE 6,8,10,14 105 | 5,12-DiHETE 6,8,10,14 106 | 5,15-DiHETE 6,8,11,13 107 | 5,6-EET 8Z,11Z,14Z 108 | 5,6-EpETrE 8Z,11Z,14Z 109 | 5R-HpETE 6,8,11,14 110 | 5R,6S-EpETrE 8Z,11Z,14Z 111 | 5S-HpETE 6E,8Z,11Z,14Z 112 | 5S,11R-DiHETE 6E,8Z,12E,14Z 113 | 5S,12R-diHETE 6Z,8E,10E,14Z 114 | 5S,6R-EpETrE 8Z,11Z,14Z 115 | 6-HpOME 7E 116 | 7-HDoHE 4Z,7Z,10Z,13Z,15E,19Z 117 | 7-HpOME 5E 118 | 7,8-DiHODE 9Z,12Z 119 | 7,8-DiHOME 9 120 | 7,8-DiHOTrE 9,12,15 121 | 7(8)-EpDPE 4Z,10Z,13Z,16Z,19Z 122 | 7S,8S-DiHODE 9Z,12Z 123 | 7S,8S-DiHOME 9Z 124 | 7S,8S-DiHOTrE 9Z,12Z,15Z 125 | 8-HDoHE 4Z,6E,10Z,13Z,16Z,19Z 126 | 8-HETE 5E,9Z,11Z,14Z 127 | 8-HETrE 9E,11Z,14Z 128 | 8-HODE 9,12 129 | 8-HOME 9 130 | 8-HpETE 5Z,9E,11Z,14Z 131 | 8-HpODE 9,12 132 | 8-HpOME 9 133 | 8,9-EET 5Z,11Z,14Z 134 | 8,9-EpETrE 5Z,11Z,14Z 135 | 8R-HODE 9Z,12Z 136 | 8R-HOME 9Z 137 | 8R-HpETE 5Z,9E,11Z,14Z 138 | 8R-HpODE 9Z,12Z 139 | 8R-HpOME 9Z 140 | 8R,9S-EpETrE 5Z,11Z,14Z 141 | 8S-HODE 9Z,12Z 142 | 8S-HpETE 5Z,9E,11Z,14Z 143 | 8S,9R-EpETrE 5Z,11Z,14Z 144 | 9-HETE 5E,7Z,11Z,14Z 145 | 9-HODE 10E,12Z 146 | 9-HOTrE 10E,12Z,15Z 147 | 9-HpODE 10E,12Z 148 | 9-HpOME 7E 149 | 9-OxoODE 10E,12Z 150 | 9,10-DiHOME 12Z 151 | 9,10-EpOME 12Z 152 | 9(10)-EpOME 12Z 153 | 9R,10S-EpOME 12Z 154 | 9S-HODE 10E,12Z 155 | 9S-HOTrE 10E,12Z,15Z 156 | 9S-HpODE 10E,12Z 157 | -------------------------------------------------------------------------------- /testfiles/shorthand-test.csv: -------------------------------------------------------------------------------- 1 | PC 18:1(11Z)/16:0,PC 18:1(11)/16:0,PC 18:1/16:0,PC 18:1_16:0,PC 34:1,C42H82NO8P, 2 | "CL O-16:0;3Me,7Me,11Me,15Me/O-16:0;3Me,7Me,11Me,15Me/O-16:0;3Me,7Me,11Me,15Me/O-16:0;3Me,7Me,11Me,15Me",CL O-16:0;(Me)4/O-16:0;(Me)4/O-16:0;(Me)4/O-16:0;(Me)4,CL O-20:0/O-20:0/O-20:0/O-20:0,CL O-20:0_O-20:0_O-20:0_O-20:0,CL eO-80:0,, 3 | PC O-16:0/O-18:1(9Z),PC O-16:0/O-18:1(9),PC O-16:0/O-18:1,PC O-16:0_O-18:1,PC dO-34:1,, 4 | "Cer 18:0;1OH,3OH/16:0",Cer 18:0;(OH)2/16:0,Cer 18:0;O2/16:0,Cer 18:0;O2/16:0,Cer 34:0;O2,, 5 | "IPC(1) 18:1(8E);3OH,4OH/24:0;2OH",IPC 18:1(8);(OH)2/24:0;OH,IPC 18:1;O3/24:0;O,IPC 18:1;O3/24:0;O,IPC 42:1;O4,, 6 | CerP(1) 18:1(4E);3OH/16:0;2OH,CerP 18:1(4);OH/16:0;OH,CerP 18:1;O2/16:0;O,CerP 18:1;O2/16:0;O,CerP 34:1;O3,C34H68NO7P, 7 | Gal-Gal-Glc-Cer(1) 18:1(4E);3OH/26:1(17Z),Gal-Gal-Glc-Cer 18:1(4);OH/26:1(17),Hex3Cer 18:1;O2/26:1,Hex3Cer 18:1;O2/26:1,Hex3Cer 44:2;O2,C62H115NO18, 8 | "PC 16:0/20:2(5Z,13E);[8-12cy5:0;11OH;9oxo];15OH","PC 16:0/20:2(5,13);[cy5:0;OH;oxo];OH",PC 16:0/20:4;O3,PC 16:0_20:4;O3,PC 36:4;O3,, 9 | "PE-N(FA 8:0) 30:5(12Z,15Z,18Z,21Z,24Z)/18:0","PE-N(FA 8:0) 30:5(12,15,18,21,24)/18:0",PE-N(FA 8:0) 30:5/18:0,PE-N(FA 8:0) 30:5_18:0,PE-N(FA) 56:5,C61H110NO9P, 10 | LPC O-16:1(11Z)/0:0,LPC O-16:1(11)/0:0,LPC O-16:1/0:0,LPC O-16:1,LPC O-16:1,, 11 | PE P-16:0/18:1(9Z),PE P-16:0/18:1(9),PE P-16:0/18:1,PE P-16:0_18:1,PE O-34:2,, 12 | PE O-18:1(11E);5OMe/22:0;3OH,PE O-18:1(11);OMe/22:0;OH,PE O-19:1;O/22:0;O,PE O-19:1;O_22:0;O,PE O-41:1;O2,C46H92NO9P, 13 | "M(IP)2C(1) 20:0;3OH,4OH/26:0;2OH",M(IP)2C 20:0;(OH)2/26:0;OH,M(IP)2C 20:0;O3/26:0;O,M(IP)2C 20:0;O3/26:0;O,M(IP)2C 46:0;O4,, 14 | SPB 18:0;3OH,SPB 18:0;OH,SPB 18:0;O,SPB 18:0;O,SPB 18:0;O,, 15 | SPB 18:0;1OH;3oxo,SPB 18:0;OH;oxo,SPB 18:1;O2,SPB 18:1;O2,SPB 18:1;O2,, 16 | PIP(3') 16:0/18:1(9Z),PIP(3') 16:0/18:1(9),PIP(3') 16:0/18:1,PIP(3') 16:0_18:1,PIP 34:1,, 17 | "Cer 18:0;1OH,3OH,4OH/26:0;2OH,3OH",Cer 18:0;(OH)3/26:0;(OH)2,Cer 18:0;O3/26:0;O2,Cer 18:0;O3/26:0;O2,Cer 44:0;O5,, 18 | "Cer 18:1(5Z);1OH,3OH/14:0",Cer 18:1(5);(OH)2/14:0,Cer 18:1;O2/14:0,Cer 18:1;O2/14:0,Cer 32:1;O2,C32H63NO3, 19 | "PIP2(3',5') 17:0/20:4(5Z,8Z,11Z,14Z)","PIP2(3',5') 17:0/20:4(5,8,11,14)","PIP2(3',5') 17:0/20:4","PIP2(3',5') 17:0_20:4",PIP2 37:4,C46H83O19P3, 20 | "PE O-16:0/18:2(9Z,12Z)","PE O-16:0/18:2(9,12)",PE O-16:0/18:2,PE O-16:0_18:2,PE O-34:2,C39H76NO7P, 21 | "PS-N(6:0) 16:0/18:3(9Z,12Z,15Z)","PS-N(6:0) 16:0/18:3(9,12,15)",PS-N(6:0) 16:0/18:3,PS-N(6:0) 16:0_18:3,PS-N(Alk) 40:3,, 22 | TG 16:0;5O(FA 16:0)/18:1(9Z)/18:1(9Z),TG 16:0;O(FA 16:0)/18:1(9)/18:1(9),TG 32:1;O2/18:1/18:1,TG 32:1;O2_18:1_18:1,TG 68:3;O2,, 23 | TG O-18:1(9Z)/O-16:0/O-18:1(9Z),TG O-18:1(9)/O-16:0/O-18:1(9),TG O-18:1/O-16:0/O-18:1,TG O-18:1_O-16:0_O-18:1,TG tO-52:2,, 24 | "FA 22:4(4Z,7Z,10Z,18E);[13-17cy5:0;14OH,16OH];20OH","FA 22:4(4,7,10,18);[cy5:0;(OH)2];OH",FA 22:5;O3,FA 22:5;O3,FA 22:5;O3,C22H34O5, 25 | "FA 20:2(5Z,13E);[8-13cy6:0;9OH,11OH;11oxy];15OH","FA 20:2(5,13);[cy6:0;(OH)2;oxy];OH",FA 20:3;O4,FA 20:3;O4,FA 20:3;O4,C20H34O6, 26 | "FA 20:4(6Z,8E,10E,14Z);5OH,12OH","FA 20:4(6,8,10,14);(OH)2",FA 20:4;O2,FA 20:4;O2,FA 20:4;O2,C20H32O4, 27 | "FA 22:0;4O(FA 10:0),5O(FA 10:0)","FA 22:0;O(FA 10:0),O(FA 10:0)",FA 42:2;O4,FA 42:2;O4,FA 42:2;O4,C42H80O6, 28 | FA 22:0;4O(FA 10:0);5O(10:0),FA 22:0;O(FA 10:0);O(10:0),FA 42:1;O3,FA 42:1;O3,FA 42:1;O3,, 29 | "DG 20:1(11Z)/0:0/22:2(13Z,16Z)","DG 20:1(11)/0:0/22:2(13,16)",DG 20:1/0:0/22:2,DG 20:1_22:2,DG 42:3,C45H82O5, 30 | MG 0:0/O-6:0/0:0,MG 0:0/O-6:0/0:0,MG 0:0/O-6:0/0:0,MG O-6:0,MG O-6:0,C9H20O3, 31 | MG 18:0/0:0/0:0,MG 18:0/0:0/0:0,MG 18:0/0:0/0:0,MG 18:0,MG 18:0,C21H42O4, 32 | "LCL 18:2(9Z,12Z)/18:2(9Z,12Z)/18:2(9Z,12Z)/0:0","LCL 18:2(9,12)/18:2(9,12)/18:2(9,12)/0:0",LCL 18:2/18:2/18:2/0:0,LCL 18:2_18:2_18:2,LCL 54:6,C63H112O16P2, 33 | "MIPC(1) 20:0;3OH,4OH/20:0;2OH",MIPC 20:0;(OH)2/20:0;OH,MIPC 20:0;O3/20:0;O,MIPC 20:0;O3/20:0;O,MIPC 40:0;O4,C52H102NO18P, 34 | LPC 20:1(11Z)/0:0,LPC 20:1(11)/0:0,LPC 20:1/0:0,LPC 20:1,LPC 20:1,C28H56NO7P, 35 | "SPB 18:0;1OH,3OH",SPB 18:0;(OH)2,SPB 18:0;O2,SPB 18:0;O2,SPB 18:0;O2,C18H39NO2, 36 | LPIM1 19:1(9Z)/0:0,LPIM1 19:1(9)/0:0,LPIM1 19:1/0:0,LPIM1 19:1,LPIM1 19:1,C34H63O17P, 37 | "Gal-Glc-Cer(1) 17:1(5E);15Me;3OH,4OH/22:0;2OH",Gal-Glc-Cer 17:1(5);Me;(OH)2/22:0;OH,Hex2Cer 18:1;O3/22:0;O,Hex2Cer 18:1;O3/22:0;O,Hex2Cer 40:1;O4,C52H99NO15, 38 | "Glc-Cer(1) 21:0;[13-15cy3:0];3OH,4OH/22:1(16E);2OH;15oxo",Glc-Cer 21:0;[cy3:0];(OH)2/22:1(16);OH;oxo,HexCer 21:1;O3/22:2;O2,HexCer 21:1;O3/22:2;O2,HexCer 43:3;O5,C49H91NO11, 39 | FA 8:0;[6-8SScy5:0],FA 8:0;[SScy5:0],FA 8:1;S2,FA 8:1;S2,FA 8:1;S2,C8H14O2S2, 40 | "FA 20:0;[12-15Ocy5:2(12E,13E);13Me,14Me]","FA 20:0;[Ocy5:2(12,13);(Me)2]",FA 22:3;O,FA 22:3;O,FA 22:3;O,C22H38O3, 41 | DG O-16:0/0:0/O-16:1(9Z),DG O-16:0/0:0/O-16:1(9),DG O-16:0/0:0/O-16:1,DG O-16:0_O-16:1,DG dO-32:1,C35H70O3, 42 | LPC 0:0/O-18:1(9Z),LPC 0:0/O-18:1(9),LPC 0:0/O-18:1,LPC O-18:1,LPC O-18:1,, 43 | ACer(FA 14:0)(1) 18:1(4E);3OH/16:0,ACer(FA 14:0) 18:1(4);OH/16:0,ACer(FA 14:0) 18:1;O2/16:0,ACer(FA 14:0) 18:1;O2/16:0,ACer(FA) 48:1;O2,C48H93NO4, 44 | -------------------------------------------------------------------------------- /docs/grammars/HMDB/dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Mike Lischke. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | */ 5 | 6 | /* 7 | * This file contains all default CSS rules for the dark vscode them, used for various diagrams and graphs. 8 | * Use the "antlr4.customCSS" setting in vscode to specify your own file, if you like to override some rules. 9 | * 10 | * Usually most of the appearance is defined in light.css and here we only have some adjustments for 11 | * the dark theme. 12 | */ 13 | 14 | /* ATN graphs. */ 15 | 16 | body.vscode-dark .marker { 17 | fill: #eee; 18 | stroke: none; 19 | } 20 | 21 | body.vscode-dark .stateLabel { 22 | fill: #202020; 23 | } 24 | 25 | body.vscode-dark .stateTypeLabel { 26 | fill: #404040; 27 | } 28 | 29 | body.vscode-dark .linkLabel { 30 | fill: #ddd; 31 | } 32 | 33 | body.vscode-dark .linkLabel > .heading { 34 | fill: cadetblue; 35 | } 36 | 37 | body.vscode-dark .state { 38 | stroke: white; 39 | filter: url(#white-glow); 40 | } 41 | 42 | /* Railroad diagrams */ 43 | 44 | body.vscode-dark .atn-graph-save-image { 45 | background: rgba(206, 11, 70, 1) url('../misc/save-dark.png'); 46 | } 47 | 48 | body.vscode-dark .call-graph-save-image { 49 | background: url('../misc/save-svg-dark.svg'); 50 | } 51 | 52 | body.vscode-dark .parse-tree-save-image { 53 | background: rgba(49, 112, 212, 1) url('../misc/save-dark.png'); 54 | } 55 | 56 | body.vscode-dark svg.railroad-diagram path { 57 | /* The connection lines. */ 58 | stroke-width: 2; 59 | stroke: darkgray; 60 | fill: rgba(0, 0, 0, 0); 61 | } 62 | 63 | body.vscode-dark svg.railroad-diagram text { 64 | /* All text except comments. */ 65 | font: bold 12px Hack, "Source Code Pro", monospace; 66 | text-anchor: middle; 67 | fill: #404040; 68 | /* Use fill instead of color for svg text. */ 69 | } 70 | 71 | body.vscode-dark svg.railroad-diagram text.comment { 72 | /* Comment text */ 73 | font: italic 10px Hack, "Source Code Pro", monospace; 74 | fill: #909090; 75 | } 76 | 77 | body.vscode-dark svg.railroad-diagram g.non-terminal rect { 78 | /* The non-terminal boxes. */ 79 | stroke-width: 2; 80 | stroke: #404040; 81 | fill: rgba(255, 255, 255, 1); 82 | } 83 | 84 | body.vscode-dark svg.railroad-diagram g.terminal rect { 85 | /* The terminal boxes. */ 86 | stroke-width: 2; 87 | stroke: #404040; 88 | fill: rgba(255, 255, 255, 0.7); 89 | } 90 | 91 | body.vscode-dark svg.railroad-diagram text.diagram-text { 92 | /* Multiple choice text, not working atm. */ 93 | font-size: 12px Hack, "Source Code Pro", monospace; 94 | fill: red; 95 | } 96 | 97 | body.vscode-dark svg.railroad-diagram path.diagram-text { 98 | /* Multiple choice text, not working atm. */ 99 | stroke-width: 1; 100 | stroke: red; 101 | fill: white; 102 | cursor: help; 103 | } 104 | 105 | body.vscode-dark svg.railroad-diagram g.diagram-text:hover path.diagram-text { 106 | /* Multiple choice text, not working atm. */ 107 | fill: #f00; 108 | } 109 | 110 | /* Call graphs */ 111 | 112 | body.vscode-dark .node-source { 113 | fill: #e6db74; 114 | } 115 | 116 | body.vscode-dark .node-target { 117 | fill: #45aa73; 118 | } 119 | 120 | body.vscode-dark .module-1 { 121 | fill: #0ca9fd; 122 | } 123 | 124 | body.vscode-dark .module-2 { 125 | fill: #63bf8d; 126 | } 127 | 128 | body.vscode-dark .module-3 { 129 | fill: #ff8801; 130 | } 131 | 132 | body.vscode-dark .module-4 { 133 | fill: #b9fc34; 134 | } 135 | 136 | body.vscode-dark .module-5 { 137 | fill: #90e0e0; 138 | } 139 | 140 | body.vscode-dark .module-6 { 141 | fill: #b4a3f5; 142 | } 143 | 144 | body.vscode-dark .module-7 { 145 | fill: #f92672; 146 | } 147 | 148 | body.vscode-dark .module-8 { 149 | fill: #e9e901; 150 | } 151 | 152 | body.vscode-dark .module-9 { 153 | fill: #83be69; 154 | } 155 | 156 | body.vscode-dark .module-10 { 157 | fill: #f1d18c; 158 | } 159 | 160 | body.vscode-dark .node:hover { 161 | fill: #fff; 162 | } 163 | 164 | body.vscode-dark .node-source { 165 | fill: #ff5711; 166 | } 167 | 168 | body.vscode-dark .node-target { 169 | fill: #45aa73; 170 | } 171 | 172 | body.vscode-dark .link-source, 173 | body.vscode-dark .link-target { 174 | stroke-opacity: 1; 175 | stroke-width: 2px; 176 | } 177 | 178 | body.vscode-dark .link { 179 | stroke: #fff; 180 | stroke-opacity: .2; 181 | fill: none; 182 | pointer-events: none; 183 | } 184 | 185 | body.vscode-dark .link-source { 186 | stroke-opacity: 1; 187 | stroke-width: 2px; 188 | stroke: #45aa73; 189 | } 190 | 191 | body.vscode-dark .link-target { 192 | stroke-opacity: 1; 193 | stroke-width: 2px; 194 | stroke: #ff5711; 195 | } 196 | 197 | body.vscode-dark .link-dimmed { 198 | stroke-opacity: 0.075; 199 | } 200 | 201 | /* Parse trees */ 202 | body.vscode-dark .tree-node { 203 | stroke-width: 2; 204 | stroke: #404040; 205 | fill: rgba(255, 255, 255, 1); 206 | } 207 | 208 | body.vscode-dark g .tree-root { 209 | stroke-width: 2; 210 | fill: #3a3c37; 211 | stroke: #ffffff; 212 | } 213 | 214 | body.vscode-dark g .tree-leaf { 215 | stroke-width: 2; 216 | fill: #828e66; 217 | stroke: #ffffff; 218 | } 219 | 220 | body.vscode-dark g .tree-error { 221 | stroke-width: 2; 222 | fill: rgb(187, 43, 33); 223 | stroke: #ffffff; 224 | } 225 | 226 | body.vscode-dark g .token-value { 227 | fill: white; 228 | stroke: none; 229 | font: 12pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 230 | } 231 | 232 | body.vscode-dark g .token-range { 233 | fill: #bb832c; 234 | stroke: none; 235 | font: 8pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 236 | } 237 | 238 | body.vscode-dark .saveSVGButton { 239 | background-image: url(./save-svg-dark.svg); 240 | } 241 | 242 | body.vscode-dark .saveHTMLButton { 243 | background-image: url(./save-html-dark.svg); 244 | } 245 | 246 | body.vscode-dark .rrdIcon { 247 | background-image: url(./rrd-dark.svg); 248 | } 249 | 250 | body.vscode-dark .atnIcon { 251 | background-image: url(./atn-dark.png); 252 | } 253 | -------------------------------------------------------------------------------- /docs/grammars/FattyAcids/dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Mike Lischke. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | */ 5 | 6 | /* 7 | * This file contains all default CSS rules for the dark vscode them, used for various diagrams and graphs. 8 | * Use the "antlr4.customCSS" setting in vscode to specify your own file, if you like to override some rules. 9 | * 10 | * Usually most of the appearance is defined in light.css and here we only have some adjustments for 11 | * the dark theme. 12 | */ 13 | 14 | /* ATN graphs. */ 15 | 16 | body.vscode-dark .marker { 17 | fill: #eee; 18 | stroke: none; 19 | } 20 | 21 | body.vscode-dark .stateLabel { 22 | fill: #202020; 23 | } 24 | 25 | body.vscode-dark .stateTypeLabel { 26 | fill: #404040; 27 | } 28 | 29 | body.vscode-dark .linkLabel { 30 | fill: #ddd; 31 | } 32 | 33 | body.vscode-dark .linkLabel > .heading { 34 | fill: cadetblue; 35 | } 36 | 37 | body.vscode-dark .state { 38 | stroke: white; 39 | filter: url(#white-glow); 40 | } 41 | 42 | /* Railroad diagrams */ 43 | 44 | body.vscode-dark .atn-graph-save-image { 45 | background: rgba(206, 11, 70, 1) url('../misc/save-dark.png'); 46 | } 47 | 48 | body.vscode-dark .call-graph-save-image { 49 | background: url('../misc/save-svg-dark.svg'); 50 | } 51 | 52 | body.vscode-dark .parse-tree-save-image { 53 | background: rgba(49, 112, 212, 1) url('../misc/save-dark.png'); 54 | } 55 | 56 | body.vscode-dark svg.railroad-diagram path { 57 | /* The connection lines. */ 58 | stroke-width: 2; 59 | stroke: darkgray; 60 | fill: rgba(0, 0, 0, 0); 61 | } 62 | 63 | body.vscode-dark svg.railroad-diagram text { 64 | /* All text except comments. */ 65 | font: bold 12px Hack, "Source Code Pro", monospace; 66 | text-anchor: middle; 67 | fill: #404040; 68 | /* Use fill instead of color for svg text. */ 69 | } 70 | 71 | body.vscode-dark svg.railroad-diagram text.comment { 72 | /* Comment text */ 73 | font: italic 10px Hack, "Source Code Pro", monospace; 74 | fill: #909090; 75 | } 76 | 77 | body.vscode-dark svg.railroad-diagram g.non-terminal rect { 78 | /* The non-terminal boxes. */ 79 | stroke-width: 2; 80 | stroke: #404040; 81 | fill: rgba(255, 255, 255, 1); 82 | } 83 | 84 | body.vscode-dark svg.railroad-diagram g.terminal rect { 85 | /* The terminal boxes. */ 86 | stroke-width: 2; 87 | stroke: #404040; 88 | fill: rgba(255, 255, 255, 0.7); 89 | } 90 | 91 | body.vscode-dark svg.railroad-diagram text.diagram-text { 92 | /* Multiple choice text, not working atm. */ 93 | font-size: 12px Hack, "Source Code Pro", monospace; 94 | fill: red; 95 | } 96 | 97 | body.vscode-dark svg.railroad-diagram path.diagram-text { 98 | /* Multiple choice text, not working atm. */ 99 | stroke-width: 1; 100 | stroke: red; 101 | fill: white; 102 | cursor: help; 103 | } 104 | 105 | body.vscode-dark svg.railroad-diagram g.diagram-text:hover path.diagram-text { 106 | /* Multiple choice text, not working atm. */ 107 | fill: #f00; 108 | } 109 | 110 | /* Call graphs */ 111 | 112 | body.vscode-dark .node-source { 113 | fill: #e6db74; 114 | } 115 | 116 | body.vscode-dark .node-target { 117 | fill: #45aa73; 118 | } 119 | 120 | body.vscode-dark .module-1 { 121 | fill: #0ca9fd; 122 | } 123 | 124 | body.vscode-dark .module-2 { 125 | fill: #63bf8d; 126 | } 127 | 128 | body.vscode-dark .module-3 { 129 | fill: #ff8801; 130 | } 131 | 132 | body.vscode-dark .module-4 { 133 | fill: #b9fc34; 134 | } 135 | 136 | body.vscode-dark .module-5 { 137 | fill: #90e0e0; 138 | } 139 | 140 | body.vscode-dark .module-6 { 141 | fill: #b4a3f5; 142 | } 143 | 144 | body.vscode-dark .module-7 { 145 | fill: #f92672; 146 | } 147 | 148 | body.vscode-dark .module-8 { 149 | fill: #e9e901; 150 | } 151 | 152 | body.vscode-dark .module-9 { 153 | fill: #83be69; 154 | } 155 | 156 | body.vscode-dark .module-10 { 157 | fill: #f1d18c; 158 | } 159 | 160 | body.vscode-dark .node:hover { 161 | fill: #fff; 162 | } 163 | 164 | body.vscode-dark .node-source { 165 | fill: #ff5711; 166 | } 167 | 168 | body.vscode-dark .node-target { 169 | fill: #45aa73; 170 | } 171 | 172 | body.vscode-dark .link-source, 173 | body.vscode-dark .link-target { 174 | stroke-opacity: 1; 175 | stroke-width: 2px; 176 | } 177 | 178 | body.vscode-dark .link { 179 | stroke: #fff; 180 | stroke-opacity: .2; 181 | fill: none; 182 | pointer-events: none; 183 | } 184 | 185 | body.vscode-dark .link-source { 186 | stroke-opacity: 1; 187 | stroke-width: 2px; 188 | stroke: #45aa73; 189 | } 190 | 191 | body.vscode-dark .link-target { 192 | stroke-opacity: 1; 193 | stroke-width: 2px; 194 | stroke: #ff5711; 195 | } 196 | 197 | body.vscode-dark .link-dimmed { 198 | stroke-opacity: 0.075; 199 | } 200 | 201 | /* Parse trees */ 202 | body.vscode-dark .tree-node { 203 | stroke-width: 2; 204 | stroke: #404040; 205 | fill: rgba(255, 255, 255, 1); 206 | } 207 | 208 | body.vscode-dark g .tree-root { 209 | stroke-width: 2; 210 | fill: #3a3c37; 211 | stroke: #ffffff; 212 | } 213 | 214 | body.vscode-dark g .tree-leaf { 215 | stroke-width: 2; 216 | fill: #828e66; 217 | stroke: #ffffff; 218 | } 219 | 220 | body.vscode-dark g .tree-error { 221 | stroke-width: 2; 222 | fill: rgb(187, 43, 33); 223 | stroke: #ffffff; 224 | } 225 | 226 | body.vscode-dark g .token-value { 227 | fill: white; 228 | stroke: none; 229 | font: 12pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 230 | } 231 | 232 | body.vscode-dark g .token-range { 233 | fill: #bb832c; 234 | stroke: none; 235 | font: 8pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 236 | } 237 | 238 | body.vscode-dark .saveSVGButton { 239 | background-image: url(./save-svg-dark.svg); 240 | } 241 | 242 | body.vscode-dark .saveHTMLButton { 243 | background-image: url(./save-html-dark.svg); 244 | } 245 | 246 | body.vscode-dark .rrdIcon { 247 | background-image: url(./rrd-dark.svg); 248 | } 249 | 250 | body.vscode-dark .atnIcon { 251 | background-image: url(./atn-dark.png); 252 | } 253 | -------------------------------------------------------------------------------- /docs/grammars/Goslin/dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Mike Lischke. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | */ 5 | 6 | /* 7 | * This file contains all default CSS rules for the dark vscode them, used for various diagrams and graphs. 8 | * Use the "antlr4.customCSS" setting in vscode to specify your own file, if you like to override some rules. 9 | * 10 | * Usually most of the appearance is defined in light.css and here we only have some adjustments for 11 | * the dark theme. 12 | */ 13 | 14 | /* ATN graphs. */ 15 | 16 | body.vscode-dark .marker { 17 | fill: #eee; 18 | stroke: none; 19 | } 20 | 21 | body.vscode-dark .stateLabel { 22 | fill: #202020; 23 | } 24 | 25 | body.vscode-dark .stateTypeLabel { 26 | fill: #404040; 27 | } 28 | 29 | body.vscode-dark .linkLabel { 30 | fill: #ddd; 31 | } 32 | 33 | body.vscode-dark .linkLabel > .heading { 34 | fill: cadetblue; 35 | } 36 | 37 | body.vscode-dark .state { 38 | stroke: white; 39 | filter: url(#white-glow); 40 | } 41 | 42 | /* Railroad diagrams */ 43 | 44 | body.vscode-dark .atn-graph-save-image { 45 | background: rgba(206, 11, 70, 1) url('../misc/save-dark.png'); 46 | } 47 | 48 | body.vscode-dark .call-graph-save-image { 49 | background: url('../misc/save-svg-dark.svg'); 50 | } 51 | 52 | body.vscode-dark .parse-tree-save-image { 53 | background: rgba(49, 112, 212, 1) url('../misc/save-dark.png'); 54 | } 55 | 56 | body.vscode-dark svg.railroad-diagram path { 57 | /* The connection lines. */ 58 | stroke-width: 2; 59 | stroke: darkgray; 60 | fill: rgba(0, 0, 0, 0); 61 | } 62 | 63 | body.vscode-dark svg.railroad-diagram text { 64 | /* All text except comments. */ 65 | font: bold 12px Hack, "Source Code Pro", monospace; 66 | text-anchor: middle; 67 | fill: #404040; 68 | /* Use fill instead of color for svg text. */ 69 | } 70 | 71 | body.vscode-dark svg.railroad-diagram text.comment { 72 | /* Comment text */ 73 | font: italic 10px Hack, "Source Code Pro", monospace; 74 | fill: #909090; 75 | } 76 | 77 | body.vscode-dark svg.railroad-diagram g.non-terminal rect { 78 | /* The non-terminal boxes. */ 79 | stroke-width: 2; 80 | stroke: #404040; 81 | fill: rgba(255, 255, 255, 1); 82 | } 83 | 84 | body.vscode-dark svg.railroad-diagram g.terminal rect { 85 | /* The terminal boxes. */ 86 | stroke-width: 2; 87 | stroke: #404040; 88 | fill: rgba(255, 255, 255, 0.7); 89 | } 90 | 91 | body.vscode-dark svg.railroad-diagram text.diagram-text { 92 | /* Multiple choice text, not working atm. */ 93 | font-size: 12px Hack, "Source Code Pro", monospace; 94 | fill: red; 95 | } 96 | 97 | body.vscode-dark svg.railroad-diagram path.diagram-text { 98 | /* Multiple choice text, not working atm. */ 99 | stroke-width: 1; 100 | stroke: red; 101 | fill: white; 102 | cursor: help; 103 | } 104 | 105 | body.vscode-dark svg.railroad-diagram g.diagram-text:hover path.diagram-text { 106 | /* Multiple choice text, not working atm. */ 107 | fill: #f00; 108 | } 109 | 110 | /* Call graphs */ 111 | 112 | body.vscode-dark .node-source { 113 | fill: #e6db74; 114 | } 115 | 116 | body.vscode-dark .node-target { 117 | fill: #45aa73; 118 | } 119 | 120 | body.vscode-dark .module-1 { 121 | fill: #0ca9fd; 122 | } 123 | 124 | body.vscode-dark .module-2 { 125 | fill: #63bf8d; 126 | } 127 | 128 | body.vscode-dark .module-3 { 129 | fill: #ff8801; 130 | } 131 | 132 | body.vscode-dark .module-4 { 133 | fill: #b9fc34; 134 | } 135 | 136 | body.vscode-dark .module-5 { 137 | fill: #90e0e0; 138 | } 139 | 140 | body.vscode-dark .module-6 { 141 | fill: #b4a3f5; 142 | } 143 | 144 | body.vscode-dark .module-7 { 145 | fill: #f92672; 146 | } 147 | 148 | body.vscode-dark .module-8 { 149 | fill: #e9e901; 150 | } 151 | 152 | body.vscode-dark .module-9 { 153 | fill: #83be69; 154 | } 155 | 156 | body.vscode-dark .module-10 { 157 | fill: #f1d18c; 158 | } 159 | 160 | body.vscode-dark .node:hover { 161 | fill: #fff; 162 | } 163 | 164 | body.vscode-dark .node-source { 165 | fill: #ff5711; 166 | } 167 | 168 | body.vscode-dark .node-target { 169 | fill: #45aa73; 170 | } 171 | 172 | body.vscode-dark .link-source, 173 | body.vscode-dark .link-target { 174 | stroke-opacity: 1; 175 | stroke-width: 2px; 176 | } 177 | 178 | body.vscode-dark .link { 179 | stroke: #fff; 180 | stroke-opacity: .2; 181 | fill: none; 182 | pointer-events: none; 183 | } 184 | 185 | body.vscode-dark .link-source { 186 | stroke-opacity: 1; 187 | stroke-width: 2px; 188 | stroke: #45aa73; 189 | } 190 | 191 | body.vscode-dark .link-target { 192 | stroke-opacity: 1; 193 | stroke-width: 2px; 194 | stroke: #ff5711; 195 | } 196 | 197 | body.vscode-dark .link-dimmed { 198 | stroke-opacity: 0.075; 199 | } 200 | 201 | /* Parse trees */ 202 | body.vscode-dark .tree-node { 203 | stroke-width: 2; 204 | stroke: #404040; 205 | fill: rgba(255, 255, 255, 1); 206 | } 207 | 208 | body.vscode-dark g .tree-root { 209 | stroke-width: 2; 210 | fill: #3a3c37; 211 | stroke: #ffffff; 212 | } 213 | 214 | body.vscode-dark g .tree-leaf { 215 | stroke-width: 2; 216 | fill: #828e66; 217 | stroke: #ffffff; 218 | } 219 | 220 | body.vscode-dark g .tree-error { 221 | stroke-width: 2; 222 | fill: rgb(187, 43, 33); 223 | stroke: #ffffff; 224 | } 225 | 226 | body.vscode-dark g .token-value { 227 | fill: white; 228 | stroke: none; 229 | font: 12pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 230 | } 231 | 232 | body.vscode-dark g .token-range { 233 | fill: #bb832c; 234 | stroke: none; 235 | font: 8pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 236 | } 237 | 238 | body.vscode-dark .saveSVGButton { 239 | background-image: url(./save-svg-dark.svg); 240 | } 241 | 242 | body.vscode-dark .saveHTMLButton { 243 | background-image: url(./save-html-dark.svg); 244 | } 245 | 246 | body.vscode-dark .rrdIcon { 247 | background-image: url(./rrd-dark.svg); 248 | } 249 | 250 | body.vscode-dark .atnIcon { 251 | background-image: url(./atn-dark.png); 252 | } 253 | -------------------------------------------------------------------------------- /docs/grammars/LipidMaps/dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Mike Lischke. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | */ 5 | 6 | /* 7 | * This file contains all default CSS rules for the dark vscode them, used for various diagrams and graphs. 8 | * Use the "antlr4.customCSS" setting in vscode to specify your own file, if you like to override some rules. 9 | * 10 | * Usually most of the appearance is defined in light.css and here we only have some adjustments for 11 | * the dark theme. 12 | */ 13 | 14 | /* ATN graphs. */ 15 | 16 | body.vscode-dark .marker { 17 | fill: #eee; 18 | stroke: none; 19 | } 20 | 21 | body.vscode-dark .stateLabel { 22 | fill: #202020; 23 | } 24 | 25 | body.vscode-dark .stateTypeLabel { 26 | fill: #404040; 27 | } 28 | 29 | body.vscode-dark .linkLabel { 30 | fill: #ddd; 31 | } 32 | 33 | body.vscode-dark .linkLabel > .heading { 34 | fill: cadetblue; 35 | } 36 | 37 | body.vscode-dark .state { 38 | stroke: white; 39 | filter: url(#white-glow); 40 | } 41 | 42 | /* Railroad diagrams */ 43 | 44 | body.vscode-dark .atn-graph-save-image { 45 | background: rgba(206, 11, 70, 1) url('../misc/save-dark.png'); 46 | } 47 | 48 | body.vscode-dark .call-graph-save-image { 49 | background: url('../misc/save-svg-dark.svg'); 50 | } 51 | 52 | body.vscode-dark .parse-tree-save-image { 53 | background: rgba(49, 112, 212, 1) url('../misc/save-dark.png'); 54 | } 55 | 56 | body.vscode-dark svg.railroad-diagram path { 57 | /* The connection lines. */ 58 | stroke-width: 2; 59 | stroke: darkgray; 60 | fill: rgba(0, 0, 0, 0); 61 | } 62 | 63 | body.vscode-dark svg.railroad-diagram text { 64 | /* All text except comments. */ 65 | font: bold 12px Hack, "Source Code Pro", monospace; 66 | text-anchor: middle; 67 | fill: #404040; 68 | /* Use fill instead of color for svg text. */ 69 | } 70 | 71 | body.vscode-dark svg.railroad-diagram text.comment { 72 | /* Comment text */ 73 | font: italic 10px Hack, "Source Code Pro", monospace; 74 | fill: #909090; 75 | } 76 | 77 | body.vscode-dark svg.railroad-diagram g.non-terminal rect { 78 | /* The non-terminal boxes. */ 79 | stroke-width: 2; 80 | stroke: #404040; 81 | fill: rgba(255, 255, 255, 1); 82 | } 83 | 84 | body.vscode-dark svg.railroad-diagram g.terminal rect { 85 | /* The terminal boxes. */ 86 | stroke-width: 2; 87 | stroke: #404040; 88 | fill: rgba(255, 255, 255, 0.7); 89 | } 90 | 91 | body.vscode-dark svg.railroad-diagram text.diagram-text { 92 | /* Multiple choice text, not working atm. */ 93 | font-size: 12px Hack, "Source Code Pro", monospace; 94 | fill: red; 95 | } 96 | 97 | body.vscode-dark svg.railroad-diagram path.diagram-text { 98 | /* Multiple choice text, not working atm. */ 99 | stroke-width: 1; 100 | stroke: red; 101 | fill: white; 102 | cursor: help; 103 | } 104 | 105 | body.vscode-dark svg.railroad-diagram g.diagram-text:hover path.diagram-text { 106 | /* Multiple choice text, not working atm. */ 107 | fill: #f00; 108 | } 109 | 110 | /* Call graphs */ 111 | 112 | body.vscode-dark .node-source { 113 | fill: #e6db74; 114 | } 115 | 116 | body.vscode-dark .node-target { 117 | fill: #45aa73; 118 | } 119 | 120 | body.vscode-dark .module-1 { 121 | fill: #0ca9fd; 122 | } 123 | 124 | body.vscode-dark .module-2 { 125 | fill: #63bf8d; 126 | } 127 | 128 | body.vscode-dark .module-3 { 129 | fill: #ff8801; 130 | } 131 | 132 | body.vscode-dark .module-4 { 133 | fill: #b9fc34; 134 | } 135 | 136 | body.vscode-dark .module-5 { 137 | fill: #90e0e0; 138 | } 139 | 140 | body.vscode-dark .module-6 { 141 | fill: #b4a3f5; 142 | } 143 | 144 | body.vscode-dark .module-7 { 145 | fill: #f92672; 146 | } 147 | 148 | body.vscode-dark .module-8 { 149 | fill: #e9e901; 150 | } 151 | 152 | body.vscode-dark .module-9 { 153 | fill: #83be69; 154 | } 155 | 156 | body.vscode-dark .module-10 { 157 | fill: #f1d18c; 158 | } 159 | 160 | body.vscode-dark .node:hover { 161 | fill: #fff; 162 | } 163 | 164 | body.vscode-dark .node-source { 165 | fill: #ff5711; 166 | } 167 | 168 | body.vscode-dark .node-target { 169 | fill: #45aa73; 170 | } 171 | 172 | body.vscode-dark .link-source, 173 | body.vscode-dark .link-target { 174 | stroke-opacity: 1; 175 | stroke-width: 2px; 176 | } 177 | 178 | body.vscode-dark .link { 179 | stroke: #fff; 180 | stroke-opacity: .2; 181 | fill: none; 182 | pointer-events: none; 183 | } 184 | 185 | body.vscode-dark .link-source { 186 | stroke-opacity: 1; 187 | stroke-width: 2px; 188 | stroke: #45aa73; 189 | } 190 | 191 | body.vscode-dark .link-target { 192 | stroke-opacity: 1; 193 | stroke-width: 2px; 194 | stroke: #ff5711; 195 | } 196 | 197 | body.vscode-dark .link-dimmed { 198 | stroke-opacity: 0.075; 199 | } 200 | 201 | /* Parse trees */ 202 | body.vscode-dark .tree-node { 203 | stroke-width: 2; 204 | stroke: #404040; 205 | fill: rgba(255, 255, 255, 1); 206 | } 207 | 208 | body.vscode-dark g .tree-root { 209 | stroke-width: 2; 210 | fill: #3a3c37; 211 | stroke: #ffffff; 212 | } 213 | 214 | body.vscode-dark g .tree-leaf { 215 | stroke-width: 2; 216 | fill: #828e66; 217 | stroke: #ffffff; 218 | } 219 | 220 | body.vscode-dark g .tree-error { 221 | stroke-width: 2; 222 | fill: rgb(187, 43, 33); 223 | stroke: #ffffff; 224 | } 225 | 226 | body.vscode-dark g .token-value { 227 | fill: white; 228 | stroke: none; 229 | font: 12pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 230 | } 231 | 232 | body.vscode-dark g .token-range { 233 | fill: #bb832c; 234 | stroke: none; 235 | font: 8pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 236 | } 237 | 238 | body.vscode-dark .saveSVGButton { 239 | background-image: url(./save-svg-dark.svg); 240 | } 241 | 242 | body.vscode-dark .saveHTMLButton { 243 | background-image: url(./save-html-dark.svg); 244 | } 245 | 246 | body.vscode-dark .rrdIcon { 247 | background-image: url(./rrd-dark.svg); 248 | } 249 | 250 | body.vscode-dark .atnIcon { 251 | background-image: url(./atn-dark.png); 252 | } 253 | -------------------------------------------------------------------------------- /docs/grammars/SumFormula/dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Mike Lischke. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | */ 5 | 6 | /* 7 | * This file contains all default CSS rules for the dark vscode them, used for various diagrams and graphs. 8 | * Use the "antlr4.customCSS" setting in vscode to specify your own file, if you like to override some rules. 9 | * 10 | * Usually most of the appearance is defined in light.css and here we only have some adjustments for 11 | * the dark theme. 12 | */ 13 | 14 | /* ATN graphs. */ 15 | 16 | body.vscode-dark .marker { 17 | fill: #eee; 18 | stroke: none; 19 | } 20 | 21 | body.vscode-dark .stateLabel { 22 | fill: #202020; 23 | } 24 | 25 | body.vscode-dark .stateTypeLabel { 26 | fill: #404040; 27 | } 28 | 29 | body.vscode-dark .linkLabel { 30 | fill: #ddd; 31 | } 32 | 33 | body.vscode-dark .linkLabel > .heading { 34 | fill: cadetblue; 35 | } 36 | 37 | body.vscode-dark .state { 38 | stroke: white; 39 | filter: url(#white-glow); 40 | } 41 | 42 | /* Railroad diagrams */ 43 | 44 | body.vscode-dark .atn-graph-save-image { 45 | background: rgba(206, 11, 70, 1) url('../misc/save-dark.png'); 46 | } 47 | 48 | body.vscode-dark .call-graph-save-image { 49 | background: url('../misc/save-svg-dark.svg'); 50 | } 51 | 52 | body.vscode-dark .parse-tree-save-image { 53 | background: rgba(49, 112, 212, 1) url('../misc/save-dark.png'); 54 | } 55 | 56 | body.vscode-dark svg.railroad-diagram path { 57 | /* The connection lines. */ 58 | stroke-width: 2; 59 | stroke: darkgray; 60 | fill: rgba(0, 0, 0, 0); 61 | } 62 | 63 | body.vscode-dark svg.railroad-diagram text { 64 | /* All text except comments. */ 65 | font: bold 12px Hack, "Source Code Pro", monospace; 66 | text-anchor: middle; 67 | fill: #404040; 68 | /* Use fill instead of color for svg text. */ 69 | } 70 | 71 | body.vscode-dark svg.railroad-diagram text.comment { 72 | /* Comment text */ 73 | font: italic 10px Hack, "Source Code Pro", monospace; 74 | fill: #909090; 75 | } 76 | 77 | body.vscode-dark svg.railroad-diagram g.non-terminal rect { 78 | /* The non-terminal boxes. */ 79 | stroke-width: 2; 80 | stroke: #404040; 81 | fill: rgba(255, 255, 255, 1); 82 | } 83 | 84 | body.vscode-dark svg.railroad-diagram g.terminal rect { 85 | /* The terminal boxes. */ 86 | stroke-width: 2; 87 | stroke: #404040; 88 | fill: rgba(255, 255, 255, 0.7); 89 | } 90 | 91 | body.vscode-dark svg.railroad-diagram text.diagram-text { 92 | /* Multiple choice text, not working atm. */ 93 | font-size: 12px Hack, "Source Code Pro", monospace; 94 | fill: red; 95 | } 96 | 97 | body.vscode-dark svg.railroad-diagram path.diagram-text { 98 | /* Multiple choice text, not working atm. */ 99 | stroke-width: 1; 100 | stroke: red; 101 | fill: white; 102 | cursor: help; 103 | } 104 | 105 | body.vscode-dark svg.railroad-diagram g.diagram-text:hover path.diagram-text { 106 | /* Multiple choice text, not working atm. */ 107 | fill: #f00; 108 | } 109 | 110 | /* Call graphs */ 111 | 112 | body.vscode-dark .node-source { 113 | fill: #e6db74; 114 | } 115 | 116 | body.vscode-dark .node-target { 117 | fill: #45aa73; 118 | } 119 | 120 | body.vscode-dark .module-1 { 121 | fill: #0ca9fd; 122 | } 123 | 124 | body.vscode-dark .module-2 { 125 | fill: #63bf8d; 126 | } 127 | 128 | body.vscode-dark .module-3 { 129 | fill: #ff8801; 130 | } 131 | 132 | body.vscode-dark .module-4 { 133 | fill: #b9fc34; 134 | } 135 | 136 | body.vscode-dark .module-5 { 137 | fill: #90e0e0; 138 | } 139 | 140 | body.vscode-dark .module-6 { 141 | fill: #b4a3f5; 142 | } 143 | 144 | body.vscode-dark .module-7 { 145 | fill: #f92672; 146 | } 147 | 148 | body.vscode-dark .module-8 { 149 | fill: #e9e901; 150 | } 151 | 152 | body.vscode-dark .module-9 { 153 | fill: #83be69; 154 | } 155 | 156 | body.vscode-dark .module-10 { 157 | fill: #f1d18c; 158 | } 159 | 160 | body.vscode-dark .node:hover { 161 | fill: #fff; 162 | } 163 | 164 | body.vscode-dark .node-source { 165 | fill: #ff5711; 166 | } 167 | 168 | body.vscode-dark .node-target { 169 | fill: #45aa73; 170 | } 171 | 172 | body.vscode-dark .link-source, 173 | body.vscode-dark .link-target { 174 | stroke-opacity: 1; 175 | stroke-width: 2px; 176 | } 177 | 178 | body.vscode-dark .link { 179 | stroke: #fff; 180 | stroke-opacity: .2; 181 | fill: none; 182 | pointer-events: none; 183 | } 184 | 185 | body.vscode-dark .link-source { 186 | stroke-opacity: 1; 187 | stroke-width: 2px; 188 | stroke: #45aa73; 189 | } 190 | 191 | body.vscode-dark .link-target { 192 | stroke-opacity: 1; 193 | stroke-width: 2px; 194 | stroke: #ff5711; 195 | } 196 | 197 | body.vscode-dark .link-dimmed { 198 | stroke-opacity: 0.075; 199 | } 200 | 201 | /* Parse trees */ 202 | body.vscode-dark .tree-node { 203 | stroke-width: 2; 204 | stroke: #404040; 205 | fill: rgba(255, 255, 255, 1); 206 | } 207 | 208 | body.vscode-dark g .tree-root { 209 | stroke-width: 2; 210 | fill: #3a3c37; 211 | stroke: #ffffff; 212 | } 213 | 214 | body.vscode-dark g .tree-leaf { 215 | stroke-width: 2; 216 | fill: #828e66; 217 | stroke: #ffffff; 218 | } 219 | 220 | body.vscode-dark g .tree-error { 221 | stroke-width: 2; 222 | fill: rgb(187, 43, 33); 223 | stroke: #ffffff; 224 | } 225 | 226 | body.vscode-dark g .token-value { 227 | fill: white; 228 | stroke: none; 229 | font: 12pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 230 | } 231 | 232 | body.vscode-dark g .token-range { 233 | fill: #bb832c; 234 | stroke: none; 235 | font: 8pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 236 | } 237 | 238 | body.vscode-dark .saveSVGButton { 239 | background-image: url(./save-svg-dark.svg); 240 | } 241 | 242 | body.vscode-dark .saveHTMLButton { 243 | background-image: url(./save-html-dark.svg); 244 | } 245 | 246 | body.vscode-dark .rrdIcon { 247 | background-image: url(./rrd-dark.svg); 248 | } 249 | 250 | body.vscode-dark .atnIcon { 251 | background-image: url(./atn-dark.png); 252 | } 253 | -------------------------------------------------------------------------------- /docs/grammars/GoslinFragments/dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Mike Lischke. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | */ 5 | 6 | /* 7 | * This file contains all default CSS rules for the dark vscode them, used for various diagrams and graphs. 8 | * Use the "antlr4.customCSS" setting in vscode to specify your own file, if you like to override some rules. 9 | * 10 | * Usually most of the appearance is defined in light.css and here we only have some adjustments for 11 | * the dark theme. 12 | */ 13 | 14 | /* ATN graphs. */ 15 | 16 | body.vscode-dark .marker { 17 | fill: #eee; 18 | stroke: none; 19 | } 20 | 21 | body.vscode-dark .stateLabel { 22 | fill: #202020; 23 | } 24 | 25 | body.vscode-dark .stateTypeLabel { 26 | fill: #404040; 27 | } 28 | 29 | body.vscode-dark .linkLabel { 30 | fill: #ddd; 31 | } 32 | 33 | body.vscode-dark .linkLabel > .heading { 34 | fill: cadetblue; 35 | } 36 | 37 | body.vscode-dark .state { 38 | stroke: white; 39 | filter: url(#white-glow); 40 | } 41 | 42 | /* Railroad diagrams */ 43 | 44 | body.vscode-dark .atn-graph-save-image { 45 | background: rgba(206, 11, 70, 1) url('../misc/save-dark.png'); 46 | } 47 | 48 | body.vscode-dark .call-graph-save-image { 49 | background: url('../misc/save-svg-dark.svg'); 50 | } 51 | 52 | body.vscode-dark .parse-tree-save-image { 53 | background: rgba(49, 112, 212, 1) url('../misc/save-dark.png'); 54 | } 55 | 56 | body.vscode-dark svg.railroad-diagram path { 57 | /* The connection lines. */ 58 | stroke-width: 2; 59 | stroke: darkgray; 60 | fill: rgba(0, 0, 0, 0); 61 | } 62 | 63 | body.vscode-dark svg.railroad-diagram text { 64 | /* All text except comments. */ 65 | font: bold 12px Hack, "Source Code Pro", monospace; 66 | text-anchor: middle; 67 | fill: #404040; 68 | /* Use fill instead of color for svg text. */ 69 | } 70 | 71 | body.vscode-dark svg.railroad-diagram text.comment { 72 | /* Comment text */ 73 | font: italic 10px Hack, "Source Code Pro", monospace; 74 | fill: #909090; 75 | } 76 | 77 | body.vscode-dark svg.railroad-diagram g.non-terminal rect { 78 | /* The non-terminal boxes. */ 79 | stroke-width: 2; 80 | stroke: #404040; 81 | fill: rgba(255, 255, 255, 1); 82 | } 83 | 84 | body.vscode-dark svg.railroad-diagram g.terminal rect { 85 | /* The terminal boxes. */ 86 | stroke-width: 2; 87 | stroke: #404040; 88 | fill: rgba(255, 255, 255, 0.7); 89 | } 90 | 91 | body.vscode-dark svg.railroad-diagram text.diagram-text { 92 | /* Multiple choice text, not working atm. */ 93 | font-size: 12px Hack, "Source Code Pro", monospace; 94 | fill: red; 95 | } 96 | 97 | body.vscode-dark svg.railroad-diagram path.diagram-text { 98 | /* Multiple choice text, not working atm. */ 99 | stroke-width: 1; 100 | stroke: red; 101 | fill: white; 102 | cursor: help; 103 | } 104 | 105 | body.vscode-dark svg.railroad-diagram g.diagram-text:hover path.diagram-text { 106 | /* Multiple choice text, not working atm. */ 107 | fill: #f00; 108 | } 109 | 110 | /* Call graphs */ 111 | 112 | body.vscode-dark .node-source { 113 | fill: #e6db74; 114 | } 115 | 116 | body.vscode-dark .node-target { 117 | fill: #45aa73; 118 | } 119 | 120 | body.vscode-dark .module-1 { 121 | fill: #0ca9fd; 122 | } 123 | 124 | body.vscode-dark .module-2 { 125 | fill: #63bf8d; 126 | } 127 | 128 | body.vscode-dark .module-3 { 129 | fill: #ff8801; 130 | } 131 | 132 | body.vscode-dark .module-4 { 133 | fill: #b9fc34; 134 | } 135 | 136 | body.vscode-dark .module-5 { 137 | fill: #90e0e0; 138 | } 139 | 140 | body.vscode-dark .module-6 { 141 | fill: #b4a3f5; 142 | } 143 | 144 | body.vscode-dark .module-7 { 145 | fill: #f92672; 146 | } 147 | 148 | body.vscode-dark .module-8 { 149 | fill: #e9e901; 150 | } 151 | 152 | body.vscode-dark .module-9 { 153 | fill: #83be69; 154 | } 155 | 156 | body.vscode-dark .module-10 { 157 | fill: #f1d18c; 158 | } 159 | 160 | body.vscode-dark .node:hover { 161 | fill: #fff; 162 | } 163 | 164 | body.vscode-dark .node-source { 165 | fill: #ff5711; 166 | } 167 | 168 | body.vscode-dark .node-target { 169 | fill: #45aa73; 170 | } 171 | 172 | body.vscode-dark .link-source, 173 | body.vscode-dark .link-target { 174 | stroke-opacity: 1; 175 | stroke-width: 2px; 176 | } 177 | 178 | body.vscode-dark .link { 179 | stroke: #fff; 180 | stroke-opacity: .2; 181 | fill: none; 182 | pointer-events: none; 183 | } 184 | 185 | body.vscode-dark .link-source { 186 | stroke-opacity: 1; 187 | stroke-width: 2px; 188 | stroke: #45aa73; 189 | } 190 | 191 | body.vscode-dark .link-target { 192 | stroke-opacity: 1; 193 | stroke-width: 2px; 194 | stroke: #ff5711; 195 | } 196 | 197 | body.vscode-dark .link-dimmed { 198 | stroke-opacity: 0.075; 199 | } 200 | 201 | /* Parse trees */ 202 | body.vscode-dark .tree-node { 203 | stroke-width: 2; 204 | stroke: #404040; 205 | fill: rgba(255, 255, 255, 1); 206 | } 207 | 208 | body.vscode-dark g .tree-root { 209 | stroke-width: 2; 210 | fill: #3a3c37; 211 | stroke: #ffffff; 212 | } 213 | 214 | body.vscode-dark g .tree-leaf { 215 | stroke-width: 2; 216 | fill: #828e66; 217 | stroke: #ffffff; 218 | } 219 | 220 | body.vscode-dark g .tree-error { 221 | stroke-width: 2; 222 | fill: rgb(187, 43, 33); 223 | stroke: #ffffff; 224 | } 225 | 226 | body.vscode-dark g .token-value { 227 | fill: white; 228 | stroke: none; 229 | font: 12pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 230 | } 231 | 232 | body.vscode-dark g .token-range { 233 | fill: #bb832c; 234 | stroke: none; 235 | font: 8pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 236 | } 237 | 238 | body.vscode-dark .saveSVGButton { 239 | background-image: url(./save-svg-dark.svg); 240 | } 241 | 242 | body.vscode-dark .saveHTMLButton { 243 | background-image: url(./save-html-dark.svg); 244 | } 245 | 246 | body.vscode-dark .rrdIcon { 247 | background-image: url(./rrd-dark.svg); 248 | } 249 | 250 | body.vscode-dark .atnIcon { 251 | background-image: url(./atn-dark.png); 252 | } 253 | -------------------------------------------------------------------------------- /docs/grammars/Shorthand2020/dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Mike Lischke. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | */ 5 | 6 | /* 7 | * This file contains all default CSS rules for the dark vscode them, used for various diagrams and graphs. 8 | * Use the "antlr4.customCSS" setting in vscode to specify your own file, if you like to override some rules. 9 | * 10 | * Usually most of the appearance is defined in light.css and here we only have some adjustments for 11 | * the dark theme. 12 | */ 13 | 14 | /* ATN graphs. */ 15 | 16 | body.vscode-dark .marker { 17 | fill: #eee; 18 | stroke: none; 19 | } 20 | 21 | body.vscode-dark .stateLabel { 22 | fill: #202020; 23 | } 24 | 25 | body.vscode-dark .stateTypeLabel { 26 | fill: #404040; 27 | } 28 | 29 | body.vscode-dark .linkLabel { 30 | fill: #ddd; 31 | } 32 | 33 | body.vscode-dark .linkLabel > .heading { 34 | fill: cadetblue; 35 | } 36 | 37 | body.vscode-dark .state { 38 | stroke: white; 39 | filter: url(#white-glow); 40 | } 41 | 42 | /* Railroad diagrams */ 43 | 44 | body.vscode-dark .atn-graph-save-image { 45 | background: rgba(206, 11, 70, 1) url('../misc/save-dark.png'); 46 | } 47 | 48 | body.vscode-dark .call-graph-save-image { 49 | background: url('../misc/save-svg-dark.svg'); 50 | } 51 | 52 | body.vscode-dark .parse-tree-save-image { 53 | background: rgba(49, 112, 212, 1) url('../misc/save-dark.png'); 54 | } 55 | 56 | body.vscode-dark svg.railroad-diagram path { 57 | /* The connection lines. */ 58 | stroke-width: 2; 59 | stroke: darkgray; 60 | fill: rgba(0, 0, 0, 0); 61 | } 62 | 63 | body.vscode-dark svg.railroad-diagram text { 64 | /* All text except comments. */ 65 | font: bold 12px Hack, "Source Code Pro", monospace; 66 | text-anchor: middle; 67 | fill: #404040; 68 | /* Use fill instead of color for svg text. */ 69 | } 70 | 71 | body.vscode-dark svg.railroad-diagram text.comment { 72 | /* Comment text */ 73 | font: italic 10px Hack, "Source Code Pro", monospace; 74 | fill: #909090; 75 | } 76 | 77 | body.vscode-dark svg.railroad-diagram g.non-terminal rect { 78 | /* The non-terminal boxes. */ 79 | stroke-width: 2; 80 | stroke: #404040; 81 | fill: rgba(255, 255, 255, 1); 82 | } 83 | 84 | body.vscode-dark svg.railroad-diagram g.terminal rect { 85 | /* The terminal boxes. */ 86 | stroke-width: 2; 87 | stroke: #404040; 88 | fill: rgba(255, 255, 255, 0.7); 89 | } 90 | 91 | body.vscode-dark svg.railroad-diagram text.diagram-text { 92 | /* Multiple choice text, not working atm. */ 93 | font-size: 12px Hack, "Source Code Pro", monospace; 94 | fill: red; 95 | } 96 | 97 | body.vscode-dark svg.railroad-diagram path.diagram-text { 98 | /* Multiple choice text, not working atm. */ 99 | stroke-width: 1; 100 | stroke: red; 101 | fill: white; 102 | cursor: help; 103 | } 104 | 105 | body.vscode-dark svg.railroad-diagram g.diagram-text:hover path.diagram-text { 106 | /* Multiple choice text, not working atm. */ 107 | fill: #f00; 108 | } 109 | 110 | /* Call graphs */ 111 | 112 | body.vscode-dark .node-source { 113 | fill: #e6db74; 114 | } 115 | 116 | body.vscode-dark .node-target { 117 | fill: #45aa73; 118 | } 119 | 120 | body.vscode-dark .module-1 { 121 | fill: #0ca9fd; 122 | } 123 | 124 | body.vscode-dark .module-2 { 125 | fill: #63bf8d; 126 | } 127 | 128 | body.vscode-dark .module-3 { 129 | fill: #ff8801; 130 | } 131 | 132 | body.vscode-dark .module-4 { 133 | fill: #b9fc34; 134 | } 135 | 136 | body.vscode-dark .module-5 { 137 | fill: #90e0e0; 138 | } 139 | 140 | body.vscode-dark .module-6 { 141 | fill: #b4a3f5; 142 | } 143 | 144 | body.vscode-dark .module-7 { 145 | fill: #f92672; 146 | } 147 | 148 | body.vscode-dark .module-8 { 149 | fill: #e9e901; 150 | } 151 | 152 | body.vscode-dark .module-9 { 153 | fill: #83be69; 154 | } 155 | 156 | body.vscode-dark .module-10 { 157 | fill: #f1d18c; 158 | } 159 | 160 | body.vscode-dark .node:hover { 161 | fill: #fff; 162 | } 163 | 164 | body.vscode-dark .node-source { 165 | fill: #ff5711; 166 | } 167 | 168 | body.vscode-dark .node-target { 169 | fill: #45aa73; 170 | } 171 | 172 | body.vscode-dark .link-source, 173 | body.vscode-dark .link-target { 174 | stroke-opacity: 1; 175 | stroke-width: 2px; 176 | } 177 | 178 | body.vscode-dark .link { 179 | stroke: #fff; 180 | stroke-opacity: .2; 181 | fill: none; 182 | pointer-events: none; 183 | } 184 | 185 | body.vscode-dark .link-source { 186 | stroke-opacity: 1; 187 | stroke-width: 2px; 188 | stroke: #45aa73; 189 | } 190 | 191 | body.vscode-dark .link-target { 192 | stroke-opacity: 1; 193 | stroke-width: 2px; 194 | stroke: #ff5711; 195 | } 196 | 197 | body.vscode-dark .link-dimmed { 198 | stroke-opacity: 0.075; 199 | } 200 | 201 | /* Parse trees */ 202 | body.vscode-dark .tree-node { 203 | stroke-width: 2; 204 | stroke: #404040; 205 | fill: rgba(255, 255, 255, 1); 206 | } 207 | 208 | body.vscode-dark g .tree-root { 209 | stroke-width: 2; 210 | fill: #3a3c37; 211 | stroke: #ffffff; 212 | } 213 | 214 | body.vscode-dark g .tree-leaf { 215 | stroke-width: 2; 216 | fill: #828e66; 217 | stroke: #ffffff; 218 | } 219 | 220 | body.vscode-dark g .tree-error { 221 | stroke-width: 2; 222 | fill: rgb(187, 43, 33); 223 | stroke: #ffffff; 224 | } 225 | 226 | body.vscode-dark g .token-value { 227 | fill: white; 228 | stroke: none; 229 | font: 12pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 230 | } 231 | 232 | body.vscode-dark g .token-range { 233 | fill: #bb832c; 234 | stroke: none; 235 | font: 8pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 236 | } 237 | 238 | body.vscode-dark .saveSVGButton { 239 | background-image: url(./save-svg-dark.svg); 240 | } 241 | 242 | body.vscode-dark .saveHTMLButton { 243 | background-image: url(./save-html-dark.svg); 244 | } 245 | 246 | body.vscode-dark .rrdIcon { 247 | background-image: url(./rrd-dark.svg); 248 | } 249 | 250 | body.vscode-dark .atnIcon { 251 | background-image: url(./atn-dark.png); 252 | } 253 | -------------------------------------------------------------------------------- /docs/grammars/SwissLipids/dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Mike Lischke. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | */ 5 | 6 | /* 7 | * This file contains all default CSS rules for the dark vscode them, used for various diagrams and graphs. 8 | * Use the "antlr4.customCSS" setting in vscode to specify your own file, if you like to override some rules. 9 | * 10 | * Usually most of the appearance is defined in light.css and here we only have some adjustments for 11 | * the dark theme. 12 | */ 13 | 14 | /* ATN graphs. */ 15 | 16 | body.vscode-dark .marker { 17 | fill: #eee; 18 | stroke: none; 19 | } 20 | 21 | body.vscode-dark .stateLabel { 22 | fill: #202020; 23 | } 24 | 25 | body.vscode-dark .stateTypeLabel { 26 | fill: #404040; 27 | } 28 | 29 | body.vscode-dark .linkLabel { 30 | fill: #ddd; 31 | } 32 | 33 | body.vscode-dark .linkLabel > .heading { 34 | fill: cadetblue; 35 | } 36 | 37 | body.vscode-dark .state { 38 | stroke: white; 39 | filter: url(#white-glow); 40 | } 41 | 42 | /* Railroad diagrams */ 43 | 44 | body.vscode-dark .atn-graph-save-image { 45 | background: rgba(206, 11, 70, 1) url('../misc/save-dark.png'); 46 | } 47 | 48 | body.vscode-dark .call-graph-save-image { 49 | background: url('../misc/save-svg-dark.svg'); 50 | } 51 | 52 | body.vscode-dark .parse-tree-save-image { 53 | background: rgba(49, 112, 212, 1) url('../misc/save-dark.png'); 54 | } 55 | 56 | body.vscode-dark svg.railroad-diagram path { 57 | /* The connection lines. */ 58 | stroke-width: 2; 59 | stroke: darkgray; 60 | fill: rgba(0, 0, 0, 0); 61 | } 62 | 63 | body.vscode-dark svg.railroad-diagram text { 64 | /* All text except comments. */ 65 | font: bold 12px Hack, "Source Code Pro", monospace; 66 | text-anchor: middle; 67 | fill: #404040; 68 | /* Use fill instead of color for svg text. */ 69 | } 70 | 71 | body.vscode-dark svg.railroad-diagram text.comment { 72 | /* Comment text */ 73 | font: italic 10px Hack, "Source Code Pro", monospace; 74 | fill: #909090; 75 | } 76 | 77 | body.vscode-dark svg.railroad-diagram g.non-terminal rect { 78 | /* The non-terminal boxes. */ 79 | stroke-width: 2; 80 | stroke: #404040; 81 | fill: rgba(255, 255, 255, 1); 82 | } 83 | 84 | body.vscode-dark svg.railroad-diagram g.terminal rect { 85 | /* The terminal boxes. */ 86 | stroke-width: 2; 87 | stroke: #404040; 88 | fill: rgba(255, 255, 255, 0.7); 89 | } 90 | 91 | body.vscode-dark svg.railroad-diagram text.diagram-text { 92 | /* Multiple choice text, not working atm. */ 93 | font-size: 12px Hack, "Source Code Pro", monospace; 94 | fill: red; 95 | } 96 | 97 | body.vscode-dark svg.railroad-diagram path.diagram-text { 98 | /* Multiple choice text, not working atm. */ 99 | stroke-width: 1; 100 | stroke: red; 101 | fill: white; 102 | cursor: help; 103 | } 104 | 105 | body.vscode-dark svg.railroad-diagram g.diagram-text:hover path.diagram-text { 106 | /* Multiple choice text, not working atm. */ 107 | fill: #f00; 108 | } 109 | 110 | /* Call graphs */ 111 | 112 | body.vscode-dark .node-source { 113 | fill: #e6db74; 114 | } 115 | 116 | body.vscode-dark .node-target { 117 | fill: #45aa73; 118 | } 119 | 120 | body.vscode-dark .module-1 { 121 | fill: #0ca9fd; 122 | } 123 | 124 | body.vscode-dark .module-2 { 125 | fill: #63bf8d; 126 | } 127 | 128 | body.vscode-dark .module-3 { 129 | fill: #ff8801; 130 | } 131 | 132 | body.vscode-dark .module-4 { 133 | fill: #b9fc34; 134 | } 135 | 136 | body.vscode-dark .module-5 { 137 | fill: #90e0e0; 138 | } 139 | 140 | body.vscode-dark .module-6 { 141 | fill: #b4a3f5; 142 | } 143 | 144 | body.vscode-dark .module-7 { 145 | fill: #f92672; 146 | } 147 | 148 | body.vscode-dark .module-8 { 149 | fill: #e9e901; 150 | } 151 | 152 | body.vscode-dark .module-9 { 153 | fill: #83be69; 154 | } 155 | 156 | body.vscode-dark .module-10 { 157 | fill: #f1d18c; 158 | } 159 | 160 | body.vscode-dark .node:hover { 161 | fill: #fff; 162 | } 163 | 164 | body.vscode-dark .node-source { 165 | fill: #ff5711; 166 | } 167 | 168 | body.vscode-dark .node-target { 169 | fill: #45aa73; 170 | } 171 | 172 | body.vscode-dark .link-source, 173 | body.vscode-dark .link-target { 174 | stroke-opacity: 1; 175 | stroke-width: 2px; 176 | } 177 | 178 | body.vscode-dark .link { 179 | stroke: #fff; 180 | stroke-opacity: .2; 181 | fill: none; 182 | pointer-events: none; 183 | } 184 | 185 | body.vscode-dark .link-source { 186 | stroke-opacity: 1; 187 | stroke-width: 2px; 188 | stroke: #45aa73; 189 | } 190 | 191 | body.vscode-dark .link-target { 192 | stroke-opacity: 1; 193 | stroke-width: 2px; 194 | stroke: #ff5711; 195 | } 196 | 197 | body.vscode-dark .link-dimmed { 198 | stroke-opacity: 0.075; 199 | } 200 | 201 | /* Parse trees */ 202 | body.vscode-dark .tree-node { 203 | stroke-width: 2; 204 | stroke: #404040; 205 | fill: rgba(255, 255, 255, 1); 206 | } 207 | 208 | body.vscode-dark g .tree-root { 209 | stroke-width: 2; 210 | fill: #3a3c37; 211 | stroke: #ffffff; 212 | } 213 | 214 | body.vscode-dark g .tree-leaf { 215 | stroke-width: 2; 216 | fill: #828e66; 217 | stroke: #ffffff; 218 | } 219 | 220 | body.vscode-dark g .tree-error { 221 | stroke-width: 2; 222 | fill: rgb(187, 43, 33); 223 | stroke: #ffffff; 224 | } 225 | 226 | body.vscode-dark g .token-value { 227 | fill: white; 228 | stroke: none; 229 | font: 12pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 230 | } 231 | 232 | body.vscode-dark g .token-range { 233 | fill: #bb832c; 234 | stroke: none; 235 | font: 8pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 236 | } 237 | 238 | body.vscode-dark .saveSVGButton { 239 | background-image: url(./save-svg-dark.svg); 240 | } 241 | 242 | body.vscode-dark .saveHTMLButton { 243 | background-image: url(./save-html-dark.svg); 244 | } 245 | 246 | body.vscode-dark .rrdIcon { 247 | background-image: url(./rrd-dark.svg); 248 | } 249 | 250 | body.vscode-dark .atnIcon { 251 | background-image: url(./atn-dark.png); 252 | } 253 | -------------------------------------------------------------------------------- /goslin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 21 | 28 | 32 | 36 | 40 | 44 | 45 | 48 | 52 | 53 | 54 | 76 | 78 | 79 | 81 | image/svg+xml 82 | 84 | 85 | 86 | 87 | 88 | 93 | 100 | 107 | 110 | 112 | 115 | 117 | 122 | 127 | 132 | 137 | 142 | 147 | 152 | 157 | 162 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | -------------------------------------------------------------------------------- /SwissLipids.g4: -------------------------------------------------------------------------------- 1 | /* 2 | * MIT License 3 | * 4 | * Copyright (c) the authors (listed in global LICENSE file) 5 | * 6 | * Permission is hereby granted, free of charge, to any person obtaining a copy 7 | * of this software and associated documentation files (the 'Software'), to deal 8 | * in the Software without restriction, including without limitation the rights 9 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | * copies of the Software, and to permit persons to whom the Software is 11 | * furnished to do so, subject to the following conditions:; 12 | * 13 | * The above copyright notice and this permission notice shall be included in all 14 | * copies or substantial portions of the Software. 15 | * 16 | * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | * LIABILITY, WHether IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | * SOFTWARE. 23 | */ 24 | 25 | 26 | 27 | grammar SwissLipids; 28 | 29 | 30 | /* first rule is always start rule */ 31 | lipid : lipid_pure EOF | lipid_pure adduct_info EOF | lipid_pure variants EOF; 32 | lipid_pure : fatty_acid | gl | pl | sl | st; 33 | 34 | variants : variant | variant variants; 35 | variant : adduct_separator abc | abc | adduct_separator npos | npos; 36 | abc : '(a)' | '(b)' | '(c)' | '(d)' | '(e)' | '(f)' | '(g)'; 37 | npos : '(n' number ')' | '[sn' number ']' | '[' number '_sn' number ']'; 38 | 39 | /* adduct information */ 40 | adduct_info : adduct_sep | adduct_separator adduct_sep; 41 | adduct_sep : '[M' adduct ']' charge_sign | '[M' adduct ']' charge charge_sign; 42 | adduct : adduct_set; 43 | adduct_set : adduct_element | adduct_element adduct_set; 44 | adduct_element : element | element number | number element | plus_minus element | plus_minus element number | plus_minus number element; 45 | 46 | 47 | /* fatty acyl rules */ 48 | fa : fa_p | fa_p '.'; 49 | fa_p : fa_core | fa_lcb_prefix fa_core | fa_core fa_lcb_suffix | fa_lcb_prefix fa_core fa_lcb_suffix; 50 | fa_core : carbon carbon_db_separator db | ether_type carbon carbon_db_separator db; 51 | 52 | lcb : lcb_core | fa_lcb_prefix lcb_core | lcb_core fa_lcb_suffix | fa_lcb_prefix lcb_core fa_lcb_suffix; 53 | lcb_core : hydroxyl carbon carbon_db_separator db; 54 | 55 | carbon : number; 56 | db : db_count | db_count db_positions; 57 | db_count : number; 58 | db_positions : ROB db_position RCB; 59 | db_position : db_single_position | db_position db_position_separator db_position; 60 | db_single_position : db_position_number | db_position_number cistrans; 61 | db_position_number : number; 62 | cistrans : 'E' | 'Z'; 63 | ether_type : ether '-' | ether '.'; 64 | ether : 'O' | 'P'; 65 | hydroxyl : 'm' | 'd' | 't'; 66 | fa_lcb_suffix : fa_lcb_suffix_core | fa_lcb_suffix_separator fa_lcb_suffix_core | ROB fa_lcb_suffix_core RCB; 67 | fa_lcb_suffix_core : fa_lcb_suffix_number fa_lcb_suffix_type | fa_lcb_suffix_number fa_lcb_suffix_separator fa_lcb_suffix_type; 68 | fa_lcb_suffix_type : 'OH' | 'me'; 69 | fa_lcb_suffix_number : number; 70 | fa_lcb_prefix : fa_lcb_prefix_type | fa_lcb_prefix_type fa_lcb_prefix_separator; 71 | fa_lcb_prefix_type : 'iso'; 72 | 73 | /* different fatty acyl types */ 74 | fa_species : fa; 75 | 76 | fa2 : fa2_sorted | fa2_unsorted; 77 | fa2_sorted : fa sorted_fa_separator fa; 78 | fa2_unsorted : fa unsorted_fa_separator fa; 79 | 80 | fa3 : fa3_sorted | fa3_unsorted; 81 | fa3_sorted : fa sorted_fa_separator fa sorted_fa_separator fa; 82 | fa3_unsorted : fa unsorted_fa_separator fa unsorted_fa_separator fa; 83 | 84 | fa4 : fa4_sorted | fa4_unsorted; 85 | fa4_sorted : fa sorted_fa_separator fa sorted_fa_separator fa sorted_fa_separator fa; 86 | fa4_unsorted : fa unsorted_fa_separator fa unsorted_fa_separator fa unsorted_fa_separator fa; 87 | 88 | 89 | 90 | 91 | 92 | /* fatty acid rules */ 93 | fatty_acid : fa_hg fa_fa | fa_hg headgroup_separator fa_fa | mediator; 94 | fa_hg : 'FFA' | 'FA' | 'fatty acid' | 'fatty alcohol' | 'NAE' | 'GP-NAE'; 95 | fa_fa : ROB fa RCB; 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | /* mediator rules */ 104 | mediator : mediator_single | mediator_single headgroup_separator med_positions; 105 | mediator_single : mediator_single mediator_single | mediator_single '-' mediator_single | db_positions | med_positions | 'KETE' | 'keto' | 'oxo' | 'Hp' | 'EPE' | 'ETE' | 'ODE' | 'EPT' | 'H' | 'LXA4' | 'hydroxy' | 'Di' | 'RvE1' | 'glyceryl' | 'EpETrE' | 'DHE' | 'ETrE' | 'DHA' | 'DoHA' | 'LTB4' | 'PGE2' | ' PGE2' | 'PGF2alpha' | 'trihydroxy' | 'TriH' | 'OTrE' | 'dihydroxy' | 'Ep' | 'LXB4' | 'Tri' | 'PAHSA' | 'MUFA' | 'GPGP' | 'GPIP' | 'PGE1' | 'PGG2' | 'SFA' | 'PUFA' | 'PGI2' | 'TXA2' | 'CoA' | 'FAOH' | 'EA' | 'beta' | 'PGH2' | 'LTD4' | 'kete' | 'DPE' | ' PGD2' | 'PGD2' | 'PGF2' | 'LTC4' | 'LTA4' | 'PGD1' | 'PGA1' | 'LTDE4' | 'epoxyoleate' | 'epoxystearate' | 'carboxy' | 'PGH1' | 'EtrE' | 'HXA3' | 'HxA3' | 'HXA3-C'; 106 | 107 | 108 | 109 | med_positions : med_position | ROB med_position RCB; 110 | med_position : med_position med_position_separator med_position | number med_suffix | number; 111 | med_suffix : 'S' | 'R'; 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | /* glycerolipid rules */ 120 | gl : gl_regular | gl_mono | gl_molecular; 121 | 122 | gl_regular : gl_hg gl_fa | gl_hg headgroup_separator gl_fa | gl_hg_tg gl_half_sub_fa | gl_hg_tg headgroup_separator gl_half_sub_fa; 123 | gl_fa : ROB fa_species RCB | ROB fa3 RCB; 124 | gl_hg : 'MG' | 'DG' | gl_hg_tg | 'MAG' | 'DAG'; 125 | gl_hg_tg : 'TG' | 'TAG'; 126 | 127 | gl_molecular : gl_molecular_hg gl_molecular_fa | gl_molecular_hg headgroup_separator gl_molecular_fa; 128 | gl_molecular_fa : ROB fa2 RCB; 129 | gl_molecular_hg : 'DG' | 'DAG'; 130 | 131 | 132 | gl_mono : gl_mono_hg gl_mono_fa | gl_mono_hg headgroup_separator gl_mono_fa; 133 | gl_mono_fa : ROB fa_species RCB | ROB fa2 RCB; 134 | gl_mono_hg : 'MHDG' | 'DHDG' | 'MGDG' | 'DGDG'; 135 | 136 | gl_half_sub_fa : fa_species 'FA' fa_species; 137 | 138 | 139 | 140 | 141 | 142 | /* phospholipid rules */ 143 | pl : pl_regular | pl_three | pl_four; 144 | 145 | pl_regular : pl_hg pl_fa | pl_hg headgroup_separator pl_fa; 146 | pl_fa : ROB fa_species RCB | ROB fa2 RCB; 147 | pl_hg : 'LPA' | 'LPC' | 'LPE' | 'LPG' | 'LPI' | 'LPS' | 'PA' | 'PC' | 'PE' | 'PG' | 'PI' | 'PS' | 'PGP' | 'PIP' | 'PIP[3]' | 'PIP[4]' | 'PIP[5]' | 'PIP2' | 'PIP2[3,4]' | 'PIP2[3,5]' | 'PIP2[4,5]' | 'PIP3' | 'PIP3[3,4,5]' | 'CDP-DAG'; 148 | 149 | pl_three : pl_three_hg pl_three_fa | pl_three_hg headgroup_separator pl_three_fa; 150 | pl_three_fa : ROB fa_species RCB | ROB fa3 RCB; 151 | pl_three_hg : 'NAPE'; 152 | 153 | pl_four : pl_four_hg pl_four_fa | pl_four_hg headgroup_separator pl_four_fa; 154 | pl_four_fa : ROB fa_species RCB | ROB fa2 RCB | ROB fa4 RCB; 155 | pl_four_hg : 'BMP' | 'LBPA' | 'Lysobisphosphatidate' | 'CL' | 'MLCL' | 'DLCL'; 156 | 157 | 158 | 159 | 160 | /* sphingolipid rules */ 161 | sl : sl_hg sl_lcb | sl_hg headgroup_separator sl_lcb | sl_hg lcb_18_1_fa; 162 | sl_hg : sl_hg_names | sl_hg_prefix sl_hg_names | sl_hg_names sl_hg_suffix | sl_hg_prefix sl_hg_names sl_hg_suffix; 163 | sl_hg_names : 'HexCer' | 'Hex2Cer' | 'SM' | 'PE-Cer' | 'Cer' | 'CER' | 'DCER' | 'LCER' | 'HCER' | 'CerP' | 'GD1a' | 'GM1b' | 'GT1b' | 'GQ1b' | 'GT1a' | 'GQ1c' | 'GP1c' | 'GD1c' | 'GD1b' | 'GT1c' | 'IPC' | 'MIPC' | 'M(IP)2C' | 'Gb3Cer' | 'Gb4Cer' | 'Forssman' | 'MSGG' | 'DSGG' | 'NOR1' | 'NORint' | 'NOR2' | 'Globo-H' | 'Globo-A' | 'SB1a' | 'SM1b' | 'SM1a' | 'Branched-Forssman' | 'Globo-B' | 'Para-Forssman' | 'Globo-Lex-9' | glyco_sphingo_lipid; 164 | glyco_sphingo_lipid : 'GA1' | 'Ga1' | 'GA2' | 'Ga2' | 165 | 'GB3' | 'Gb3' | 'GB4' | 'Gb4' | 166 | 'GD1' | 'Gd1' | 'GD2' | 'Gd2' | 'GD3' | 'Gd3' | 167 | 'GM1' | 'Gm1' | 'GM2' | 'Gm2' | 'GM3' | 'Gm3' | 'GM4' | 'Gm4' | 168 | 'GP1' | 'Gp1' | 169 | 'GQ1' | 'Gq1' | 170 | 'GT1' | 'Gt1' | 'GT2' | 'Gt2' | 'GT3' | 'Gt3'; 171 | 172 | sl_hg_prefix : sl_hg_prefix '-' | sl_hg_prefix sl_hg_prefix | ROB sl_hg_prefix RCB | 'Glc' | 'NAc' | 'Gal' | 'Fuc' | 'SO3' | 'NeuGc' | 'i' | 'NeuAc' | 'Lac' | 'Lex' | '(3\'-sulfo)' | 'Ac-O-9' | '(alpha2-8)' | '(alpha2-6)' | 'NeuAc' | 'Sulfo'; 173 | sl_hg_suffix : sl_hg_suffix sl_hg_suffix | sl_hg_suffix '/' | ROB sl_hg_suffix RCB | 'NeuAc' | 'NeuGc' | ' alpha'; 174 | 175 | sl_lcb : sl_lcb_species | sl_lcb_subspecies; 176 | sl_lcb_species : ROB lcb RCB; 177 | sl_lcb_subspecies : ROB lcb sorted_fa_separator fa RCB; 178 | lcb_18_1_fa : fa_fa; 179 | 180 | 181 | 182 | /* sterol rules */ 183 | st : st_species | st_sub1 | st_sub2; 184 | 185 | st_species : st_species_hg st_species_fa | st_species_hg headgroup_separator st_species_fa; 186 | st_species_hg : 'SE'; 187 | st_species_fa : ROB fa_species RCB; 188 | 189 | st_sub1 : st_sub1_hg st_sub1_fa | st_sub1_hg headgroup_separator st_sub1_fa; 190 | st_sub1_hg : 'CE'; 191 | st_sub1_fa : ROB fa RCB; 192 | 193 | st_sub2 : st_sub2_hg sorted_fa_separator fa RCB; 194 | st_sub2_hg : 'SE' ROB number COLON number; 195 | 196 | 197 | /* separators */ 198 | SPACE : ' '; 199 | COLON : ':'; 200 | SEMICOLON : ';'; 201 | DASH : '-'; 202 | UNDERSCORE : '_'; 203 | SLASH : '/'; 204 | BACKSLASH : '\\'; 205 | COMMA: ','; 206 | ROB: '(' | '.'; 207 | RCB: ')' | '.'; 208 | 209 | unsorted_fa_separator : UNDERSCORE | '.'; 210 | adduct_separator : SPACE; 211 | sorted_fa_separator : SLASH | '.'; 212 | headgroup_separator : SPACE; 213 | carbon_db_separator : COLON | '.'; 214 | db_position_separator : COMMA; 215 | med_position_separator : COMMA; 216 | fa_lcb_suffix_separator : DASH; 217 | fa_lcb_prefix_separator : DASH; 218 | 219 | number : digit | digit number; 220 | digit : '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'; 221 | 222 | element: 'C' | 'H' | 'N' | 'O' | 'P' | 'S' | 'Br' | 'I' | 'F' | 'Cl' | 'As'; 223 | charge : '1' | '2' | '3' | '4'; 224 | charge_sign : plus_minus; 225 | plus_minus : '-' | '+'; 226 | -------------------------------------------------------------------------------- /docs/grammars/Goslin/light.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Mike Lischke. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | */ 5 | 6 | /* 7 | * This file contains all default CSS rules for the light vscode them, used for various diagrams and graphs. 8 | * Use the "antlr4.customCSS" setting in vscode to specify your own file, if you like to override some rules. 9 | * 10 | * Most of the appearance is defined here, while only some adjustments for the dark theme exist in dark.css. 11 | * This style sheet is also used for exported svg files. 12 | */ 13 | 14 | 15 | /* ATN graphs */ 16 | 17 | .transition { 18 | fill: none; 19 | stroke: #AAA; 20 | stroke-width: 2px; 21 | } 22 | 23 | .marker { 24 | fill: #999; 25 | stroke: none; 26 | } 27 | 28 | .stateLabel { 29 | font: bold 11pt "Helvetica Neue", Arial, sans-serif; 30 | fill: white; 31 | text-anchor: middle; 32 | pointer-events: none; 33 | } 34 | 35 | .stateTypeLabel { 36 | font: bold 7pt monospace; 37 | fill: #EEE; 38 | text-anchor: middle; 39 | pointer-events: none; 40 | } 41 | 42 | .linkLabel { 43 | font: 9pt monospace; 44 | fill: #606060; 45 | text-anchor: middle; 46 | pointer-events: none; 47 | white-space: pre; 48 | } 49 | 50 | .linkLabel > .heading { 51 | fill: cornflowerblue; 52 | font-weight: 800; 53 | } 54 | 55 | .linkLabel > .predicate { 56 | fill: gray; 57 | font-weight: 400; 58 | font-size: 7pt 59 | } 60 | 61 | .state { 62 | stroke: #505050; 63 | stroke-width: 3px; 64 | cursor: move; 65 | pointer-events: all; 66 | /*filter: url(#black-glow);*/ 67 | } 68 | 69 | .state.BASIC { 70 | fill: #AAA; 71 | } 72 | 73 | .state.START { 74 | fill: #36bde0; 75 | } 76 | 77 | .state.BSTART { 78 | fill: #f39900; 79 | } 80 | 81 | .state.PBSTART { 82 | fill: #98c000; 83 | } 84 | 85 | .state.SBSTART { 86 | fill: #607dbd; 87 | } 88 | 89 | .state.TSTART { 90 | fill: #ffd300; 91 | } 92 | 93 | .state.STOP { 94 | fill: #2baa5b; 95 | } 96 | 97 | .state.BEND { 98 | fill: #c2c269; 99 | } 100 | 101 | .state.SLBACK { 102 | fill: #608b4e; 103 | } 104 | 105 | .state.SLENTRY { 106 | fill: #a260cb; 107 | } 108 | 109 | .state.PLBACK { 110 | fill: #517979; 111 | } 112 | 113 | .state.LEND { 114 | fill: #9b90c3; 115 | } 116 | 117 | .state.RULE { 118 | fill: #b73645; 119 | } 120 | 121 | .state.RULE.recursive { 122 | fill: #36bde0; 123 | } 124 | 125 | 126 | /* Railroad diagrams */ 127 | 128 | /* The connection lines. */ 129 | svg.railroad-diagram path { 130 | stroke-width: 2; 131 | stroke: darkgray; 132 | fill: rgba(0, 0, 0, 0); 133 | } 134 | 135 | /* All text except comments. */ 136 | svg.railroad-diagram text { 137 | font: bold 12px Hack, "Source Code Pro", monospace; 138 | text-anchor: middle; 139 | fill: #404040; 140 | } 141 | 142 | /* Comment text */ 143 | svg.railroad-diagram text.comment { 144 | font: italic 10px Hack, "Source Code Pro", monospace; 145 | fill: #404040; 146 | } 147 | 148 | /* The terminal boxes. */ 149 | svg.railroad-diagram g.terminal rect { 150 | stroke-width: 2; 151 | stroke: #404040; 152 | fill: rgba(200, 200, 200, 1); 153 | } 154 | 155 | svg.railroad-diagram g.non-terminal rect { 156 | /* The non-terminal boxes. */ 157 | stroke-width: 2; 158 | stroke: #404040; 159 | fill: rgba(255, 255, 255, 1); 160 | } 161 | 162 | /* Multiple choice text, not working atm. */ 163 | svg.railroad-diagram text.diagram-text { 164 | font-size: 12px Hack, "Source Code Pro", monospace; 165 | fill: red; 166 | } 167 | 168 | /* Multiple choice text, not working atm. */ 169 | svg.railroad-diagram path.diagram-text { 170 | stroke-width: 1; 171 | stroke: red; 172 | fill: red; 173 | cursor: help; 174 | } 175 | 176 | /* Multiple choice text, not working atm. */ 177 | svg.railroad-diagram g.diagram-text:hover path.diagram-text { 178 | fill: #f00; 179 | } 180 | 181 | /* Call graphs */ 182 | 183 | .node { 184 | font: 200 10px "Helvetica Neue", Helvetica, Arial, sans-serif; 185 | } 186 | 187 | .link { 188 | stroke: #000; 189 | stroke-opacity: .2; 190 | fill: none; 191 | pointer-events: none; 192 | } 193 | 194 | .module-1 { 195 | fill: #0ca9fd; 196 | } 197 | 198 | .module-2 { 199 | fill: #63bf8d; 200 | } 201 | 202 | .module-3 { 203 | fill: #ff8801; 204 | } 205 | 206 | .module-4 { 207 | fill: #b9fc34; 208 | } 209 | 210 | .module-5 { 211 | fill: #90e0e0; 212 | } 213 | 214 | .module-6 { 215 | fill: #b4a3f5; 216 | } 217 | 218 | .module-7 { 219 | fill: #f92672; 220 | } 221 | 222 | .module-8 { 223 | fill: #e9e901; 224 | } 225 | 226 | .module-9 { 227 | fill: #83be69; 228 | } 229 | 230 | .module-10 { 231 | fill: #f1d18c; 232 | } 233 | 234 | .node:hover { 235 | fill: #000; 236 | } 237 | 238 | .node:hover, 239 | .node-source, 240 | .node-target { 241 | font: 700 12px "Helvetica Neue", Helvetica, Arial, sans-serif; 242 | cursor: pointer; 243 | } 244 | 245 | .node-source { 246 | fill: #ff5711; 247 | } 248 | 249 | .node-target { 250 | fill: #45aa73; 251 | } 252 | 253 | .link-source, 254 | .link-target { 255 | stroke-opacity: 1; 256 | stroke-width: 2px; 257 | } 258 | 259 | .link-source { 260 | stroke: #3dcd92; 261 | } 262 | 263 | .link-target { 264 | stroke: #ff5711; 265 | } 266 | 267 | @keyframes fadeOut { 268 | 0% { 269 | stroke-opacity: 0.2; 270 | } 271 | 272 | 100% { 273 | stroke-opacity: 0.075; 274 | } 275 | } 276 | 277 | @keyframes fadeIn { 278 | 0% { 279 | stroke-opacity: 0.075; 280 | } 281 | 282 | 100% { 283 | stroke-opacity: 0.2; 284 | } 285 | } 286 | 287 | .link-dimmed { 288 | stroke-opacity: 0.075; 289 | } 290 | 291 | 292 | /* Parse trees */ 293 | .tree-node { 294 | stroke-width: 2; 295 | stroke: #C0C0C0; 296 | fill: rgba(255, 255, 255, 1); 297 | } 298 | 299 | .tree-root { 300 | stroke-width: 2; 301 | fill: #7db6dd; 302 | stroke: #7db6dd; 303 | } 304 | 305 | .tree-leaf { 306 | cursor: default; 307 | stroke-width: 2; 308 | fill: rgba(160, 171, 136, 1); 309 | stroke: rgba(117, 119, 91, 1); 310 | } 311 | 312 | .tree-error { 313 | stroke-width: 2; 314 | fill: #dd8f7d; 315 | stroke: rgba(188, 106, 122, 1); 316 | } 317 | 318 | .tree-node text { 319 | cursor: default; 320 | font: 16px "Helvetica Neue", sans-serif; 321 | fill: rgba(41, 41, 41, 1); 322 | stroke: none; 323 | } 324 | 325 | .tree-leaf text, 326 | .tree-root text, 327 | .tree-error text { 328 | font: 16px "Helvetica Neue", sans-serif; 329 | fill: #ffffff; 330 | stroke: none; 331 | } 332 | 333 | .tree-link { 334 | stroke-width: 2px; 335 | fill: none; 336 | stroke: rgba(128, 128, 128, 1); 337 | } 338 | 339 | g .token-value { 340 | fill: #404040; 341 | stroke: none; 342 | font: 14pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 343 | } 344 | 345 | g .token-range { 346 | fill: rgba(0, 77, 98, 1); 347 | stroke: none; 348 | font: 8pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 349 | } 350 | 351 | .saveSVGButton { 352 | background-image: url(./save-svg-light.svg); 353 | width: 32px; 354 | height: 32px; 355 | 356 | margin-left: 8px; 357 | 358 | background-position: center; 359 | background-repeat: no-repeat; 360 | } 361 | 362 | .saveHTMLButton { 363 | background-image: url(./save-html-light.svg); 364 | width: 32px; 365 | height: 32px; 366 | 367 | background-position: center; 368 | background-repeat: no-repeat; 369 | } 370 | 371 | .headerIcon { 372 | width: 90px; 373 | height: 90px; 374 | margin-top: 20px; 375 | 376 | background-position: center; 377 | background-repeat: no-repeat; 378 | background-size: contain; 379 | } 380 | 381 | .rrdIcon { 382 | background-image: url(./rrd-light.svg); 383 | } 384 | 385 | .atnIcon { 386 | background-image: url(./atn-light.png); 387 | } 388 | 389 | g .rrd-warning { 390 | stroke: orange; 391 | } 392 | 393 | g .rrd-predicate { 394 | stroke: rgba(23, 159, 255, 0.5); 395 | } 396 | 397 | .atn-graph-color { 398 | color: crimson; 399 | } 400 | 401 | .rrd-graph-color { 402 | color: rgba(10, 188, 80, 1); 403 | } 404 | 405 | .call-graph-color { 406 | color: rgba(255, 191, 15, 1); 407 | } 408 | 409 | .call-graph-save-image { 410 | background: url('../misc/save-svg-light.png'); 411 | vertical-align: middle; 412 | margin-left: 5px; 413 | width: 24px; 414 | height: 24px; 415 | display: inline-block; 416 | cursor: pointer; 417 | } 418 | 419 | .parse-tree-color { 420 | color: rgba(49, 112, 212, 1); 421 | } 422 | 423 | .parse-tree-save-image { 424 | background: rgba(49, 112, 212, 1) url('../misc/save.png'); 425 | vertical-align: middle; 426 | margin-left: 5px; 427 | width: 24px; 428 | height: 24px; 429 | display: inline-block; 430 | cursor: pointer; 431 | } 432 | 433 | .switch label { 434 | width: 100%; 435 | height: 100%; 436 | margin: 0; 437 | padding: 0; 438 | display: block; 439 | position: absolute; 440 | top: 0; 441 | left: 0; 442 | z-index: 10; 443 | } 444 | 445 | .switch input { 446 | display: none; 447 | } 448 | 449 | .switch > span { 450 | display: inline-block; 451 | top: 3px; 452 | transition: left 0.2s; 453 | } 454 | 455 | .switch-border { 456 | height: 12px; 457 | width: 24px; 458 | position: relative; 459 | border: 1px solid rgba(49, 112, 212, 0.75); 460 | background-color: rgba(49, 112, 212, 0.75); 461 | border-radius: 3.5em; 462 | } 463 | 464 | .switch-handle-top { 465 | width: 12px; 466 | height: 12px; 467 | position: absolute; 468 | left: 0; 469 | top: 0; 470 | z-index: 4; 471 | background-color: white; 472 | border-radius: 2.5em; 473 | transition: left 0.2s; 474 | } 475 | 476 | .switch input:checked ~ .switch-handle-top { 477 | top: 0; 478 | left: 12px; 479 | } 480 | -------------------------------------------------------------------------------- /docs/grammars/HMDB/light.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Mike Lischke. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | */ 5 | 6 | /* 7 | * This file contains all default CSS rules for the light vscode them, used for various diagrams and graphs. 8 | * Use the "antlr4.customCSS" setting in vscode to specify your own file, if you like to override some rules. 9 | * 10 | * Most of the appearance is defined here, while only some adjustments for the dark theme exist in dark.css. 11 | * This style sheet is also used for exported svg files. 12 | */ 13 | 14 | 15 | /* ATN graphs */ 16 | 17 | .transition { 18 | fill: none; 19 | stroke: #AAA; 20 | stroke-width: 2px; 21 | } 22 | 23 | .marker { 24 | fill: #999; 25 | stroke: none; 26 | } 27 | 28 | .stateLabel { 29 | font: bold 11pt "Helvetica Neue", Arial, sans-serif; 30 | fill: white; 31 | text-anchor: middle; 32 | pointer-events: none; 33 | } 34 | 35 | .stateTypeLabel { 36 | font: bold 7pt monospace; 37 | fill: #EEE; 38 | text-anchor: middle; 39 | pointer-events: none; 40 | } 41 | 42 | .linkLabel { 43 | font: 9pt monospace; 44 | fill: #606060; 45 | text-anchor: middle; 46 | pointer-events: none; 47 | white-space: pre; 48 | } 49 | 50 | .linkLabel > .heading { 51 | fill: cornflowerblue; 52 | font-weight: 800; 53 | } 54 | 55 | .linkLabel > .predicate { 56 | fill: gray; 57 | font-weight: 400; 58 | font-size: 7pt 59 | } 60 | 61 | .state { 62 | stroke: #505050; 63 | stroke-width: 3px; 64 | cursor: move; 65 | pointer-events: all; 66 | /*filter: url(#black-glow);*/ 67 | } 68 | 69 | .state.BASIC { 70 | fill: #AAA; 71 | } 72 | 73 | .state.START { 74 | fill: #36bde0; 75 | } 76 | 77 | .state.BSTART { 78 | fill: #f39900; 79 | } 80 | 81 | .state.PBSTART { 82 | fill: #98c000; 83 | } 84 | 85 | .state.SBSTART { 86 | fill: #607dbd; 87 | } 88 | 89 | .state.TSTART { 90 | fill: #ffd300; 91 | } 92 | 93 | .state.STOP { 94 | fill: #2baa5b; 95 | } 96 | 97 | .state.BEND { 98 | fill: #c2c269; 99 | } 100 | 101 | .state.SLBACK { 102 | fill: #608b4e; 103 | } 104 | 105 | .state.SLENTRY { 106 | fill: #a260cb; 107 | } 108 | 109 | .state.PLBACK { 110 | fill: #517979; 111 | } 112 | 113 | .state.LEND { 114 | fill: #9b90c3; 115 | } 116 | 117 | .state.RULE { 118 | fill: #b73645; 119 | } 120 | 121 | .state.RULE.recursive { 122 | fill: #36bde0; 123 | } 124 | 125 | 126 | /* Railroad diagrams */ 127 | 128 | /* The connection lines. */ 129 | svg.railroad-diagram path { 130 | stroke-width: 2; 131 | stroke: darkgray; 132 | fill: rgba(0, 0, 0, 0); 133 | } 134 | 135 | /* All text except comments. */ 136 | svg.railroad-diagram text { 137 | font: bold 12px Hack, "Source Code Pro", monospace; 138 | text-anchor: middle; 139 | fill: #404040; 140 | } 141 | 142 | /* Comment text */ 143 | svg.railroad-diagram text.comment { 144 | font: italic 10px Hack, "Source Code Pro", monospace; 145 | fill: #404040; 146 | } 147 | 148 | /* The terminal boxes. */ 149 | svg.railroad-diagram g.terminal rect { 150 | stroke-width: 2; 151 | stroke: #404040; 152 | fill: rgba(200, 200, 200, 1); 153 | } 154 | 155 | svg.railroad-diagram g.non-terminal rect { 156 | /* The non-terminal boxes. */ 157 | stroke-width: 2; 158 | stroke: #404040; 159 | fill: rgba(255, 255, 255, 1); 160 | } 161 | 162 | /* Multiple choice text, not working atm. */ 163 | svg.railroad-diagram text.diagram-text { 164 | font-size: 12px Hack, "Source Code Pro", monospace; 165 | fill: red; 166 | } 167 | 168 | /* Multiple choice text, not working atm. */ 169 | svg.railroad-diagram path.diagram-text { 170 | stroke-width: 1; 171 | stroke: red; 172 | fill: red; 173 | cursor: help; 174 | } 175 | 176 | /* Multiple choice text, not working atm. */ 177 | svg.railroad-diagram g.diagram-text:hover path.diagram-text { 178 | fill: #f00; 179 | } 180 | 181 | /* Call graphs */ 182 | 183 | .node { 184 | font: 200 10px "Helvetica Neue", Helvetica, Arial, sans-serif; 185 | } 186 | 187 | .link { 188 | stroke: #000; 189 | stroke-opacity: .2; 190 | fill: none; 191 | pointer-events: none; 192 | } 193 | 194 | .module-1 { 195 | fill: #0ca9fd; 196 | } 197 | 198 | .module-2 { 199 | fill: #63bf8d; 200 | } 201 | 202 | .module-3 { 203 | fill: #ff8801; 204 | } 205 | 206 | .module-4 { 207 | fill: #b9fc34; 208 | } 209 | 210 | .module-5 { 211 | fill: #90e0e0; 212 | } 213 | 214 | .module-6 { 215 | fill: #b4a3f5; 216 | } 217 | 218 | .module-7 { 219 | fill: #f92672; 220 | } 221 | 222 | .module-8 { 223 | fill: #e9e901; 224 | } 225 | 226 | .module-9 { 227 | fill: #83be69; 228 | } 229 | 230 | .module-10 { 231 | fill: #f1d18c; 232 | } 233 | 234 | .node:hover { 235 | fill: #000; 236 | } 237 | 238 | .node:hover, 239 | .node-source, 240 | .node-target { 241 | font: 700 12px "Helvetica Neue", Helvetica, Arial, sans-serif; 242 | cursor: pointer; 243 | } 244 | 245 | .node-source { 246 | fill: #ff5711; 247 | } 248 | 249 | .node-target { 250 | fill: #45aa73; 251 | } 252 | 253 | .link-source, 254 | .link-target { 255 | stroke-opacity: 1; 256 | stroke-width: 2px; 257 | } 258 | 259 | .link-source { 260 | stroke: #3dcd92; 261 | } 262 | 263 | .link-target { 264 | stroke: #ff5711; 265 | } 266 | 267 | @keyframes fadeOut { 268 | 0% { 269 | stroke-opacity: 0.2; 270 | } 271 | 272 | 100% { 273 | stroke-opacity: 0.075; 274 | } 275 | } 276 | 277 | @keyframes fadeIn { 278 | 0% { 279 | stroke-opacity: 0.075; 280 | } 281 | 282 | 100% { 283 | stroke-opacity: 0.2; 284 | } 285 | } 286 | 287 | .link-dimmed { 288 | stroke-opacity: 0.075; 289 | } 290 | 291 | 292 | /* Parse trees */ 293 | .tree-node { 294 | stroke-width: 2; 295 | stroke: #C0C0C0; 296 | fill: rgba(255, 255, 255, 1); 297 | } 298 | 299 | .tree-root { 300 | stroke-width: 2; 301 | fill: #7db6dd; 302 | stroke: #7db6dd; 303 | } 304 | 305 | .tree-leaf { 306 | cursor: default; 307 | stroke-width: 2; 308 | fill: rgba(160, 171, 136, 1); 309 | stroke: rgba(117, 119, 91, 1); 310 | } 311 | 312 | .tree-error { 313 | stroke-width: 2; 314 | fill: #dd8f7d; 315 | stroke: rgba(188, 106, 122, 1); 316 | } 317 | 318 | .tree-node text { 319 | cursor: default; 320 | font: 16px "Helvetica Neue", sans-serif; 321 | fill: rgba(41, 41, 41, 1); 322 | stroke: none; 323 | } 324 | 325 | .tree-leaf text, 326 | .tree-root text, 327 | .tree-error text { 328 | font: 16px "Helvetica Neue", sans-serif; 329 | fill: #ffffff; 330 | stroke: none; 331 | } 332 | 333 | .tree-link { 334 | stroke-width: 2px; 335 | fill: none; 336 | stroke: rgba(128, 128, 128, 1); 337 | } 338 | 339 | g .token-value { 340 | fill: #404040; 341 | stroke: none; 342 | font: 14pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 343 | } 344 | 345 | g .token-range { 346 | fill: rgba(0, 77, 98, 1); 347 | stroke: none; 348 | font: 8pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 349 | } 350 | 351 | .saveSVGButton { 352 | background-image: url(./save-svg-light.svg); 353 | width: 32px; 354 | height: 32px; 355 | 356 | margin-left: 8px; 357 | 358 | background-position: center; 359 | background-repeat: no-repeat; 360 | } 361 | 362 | .saveHTMLButton { 363 | background-image: url(./save-html-light.svg); 364 | width: 32px; 365 | height: 32px; 366 | 367 | background-position: center; 368 | background-repeat: no-repeat; 369 | } 370 | 371 | .headerIcon { 372 | width: 90px; 373 | height: 90px; 374 | margin-top: 20px; 375 | 376 | background-position: center; 377 | background-repeat: no-repeat; 378 | background-size: contain; 379 | } 380 | 381 | .rrdIcon { 382 | background-image: url(./rrd-light.svg); 383 | } 384 | 385 | .atnIcon { 386 | background-image: url(./atn-light.png); 387 | } 388 | 389 | g .rrd-warning { 390 | stroke: orange; 391 | } 392 | 393 | g .rrd-predicate { 394 | stroke: rgba(23, 159, 255, 0.5); 395 | } 396 | 397 | .atn-graph-color { 398 | color: crimson; 399 | } 400 | 401 | .rrd-graph-color { 402 | color: rgba(10, 188, 80, 1); 403 | } 404 | 405 | .call-graph-color { 406 | color: rgba(255, 191, 15, 1); 407 | } 408 | 409 | .call-graph-save-image { 410 | background: url('../misc/save-svg-light.png'); 411 | vertical-align: middle; 412 | margin-left: 5px; 413 | width: 24px; 414 | height: 24px; 415 | display: inline-block; 416 | cursor: pointer; 417 | } 418 | 419 | .parse-tree-color { 420 | color: rgba(49, 112, 212, 1); 421 | } 422 | 423 | .parse-tree-save-image { 424 | background: rgba(49, 112, 212, 1) url('../misc/save.png'); 425 | vertical-align: middle; 426 | margin-left: 5px; 427 | width: 24px; 428 | height: 24px; 429 | display: inline-block; 430 | cursor: pointer; 431 | } 432 | 433 | .switch label { 434 | width: 100%; 435 | height: 100%; 436 | margin: 0; 437 | padding: 0; 438 | display: block; 439 | position: absolute; 440 | top: 0; 441 | left: 0; 442 | z-index: 10; 443 | } 444 | 445 | .switch input { 446 | display: none; 447 | } 448 | 449 | .switch > span { 450 | display: inline-block; 451 | top: 3px; 452 | transition: left 0.2s; 453 | } 454 | 455 | .switch-border { 456 | height: 12px; 457 | width: 24px; 458 | position: relative; 459 | border: 1px solid rgba(49, 112, 212, 0.75); 460 | background-color: rgba(49, 112, 212, 0.75); 461 | border-radius: 3.5em; 462 | } 463 | 464 | .switch-handle-top { 465 | width: 12px; 466 | height: 12px; 467 | position: absolute; 468 | left: 0; 469 | top: 0; 470 | z-index: 4; 471 | background-color: white; 472 | border-radius: 2.5em; 473 | transition: left 0.2s; 474 | } 475 | 476 | .switch input:checked ~ .switch-handle-top { 477 | top: 0; 478 | left: 12px; 479 | } 480 | -------------------------------------------------------------------------------- /docs/grammars/FattyAcids/light.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Mike Lischke. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | */ 5 | 6 | /* 7 | * This file contains all default CSS rules for the light vscode them, used for various diagrams and graphs. 8 | * Use the "antlr4.customCSS" setting in vscode to specify your own file, if you like to override some rules. 9 | * 10 | * Most of the appearance is defined here, while only some adjustments for the dark theme exist in dark.css. 11 | * This style sheet is also used for exported svg files. 12 | */ 13 | 14 | 15 | /* ATN graphs */ 16 | 17 | .transition { 18 | fill: none; 19 | stroke: #AAA; 20 | stroke-width: 2px; 21 | } 22 | 23 | .marker { 24 | fill: #999; 25 | stroke: none; 26 | } 27 | 28 | .stateLabel { 29 | font: bold 11pt "Helvetica Neue", Arial, sans-serif; 30 | fill: white; 31 | text-anchor: middle; 32 | pointer-events: none; 33 | } 34 | 35 | .stateTypeLabel { 36 | font: bold 7pt monospace; 37 | fill: #EEE; 38 | text-anchor: middle; 39 | pointer-events: none; 40 | } 41 | 42 | .linkLabel { 43 | font: 9pt monospace; 44 | fill: #606060; 45 | text-anchor: middle; 46 | pointer-events: none; 47 | white-space: pre; 48 | } 49 | 50 | .linkLabel > .heading { 51 | fill: cornflowerblue; 52 | font-weight: 800; 53 | } 54 | 55 | .linkLabel > .predicate { 56 | fill: gray; 57 | font-weight: 400; 58 | font-size: 7pt 59 | } 60 | 61 | .state { 62 | stroke: #505050; 63 | stroke-width: 3px; 64 | cursor: move; 65 | pointer-events: all; 66 | /*filter: url(#black-glow);*/ 67 | } 68 | 69 | .state.BASIC { 70 | fill: #AAA; 71 | } 72 | 73 | .state.START { 74 | fill: #36bde0; 75 | } 76 | 77 | .state.BSTART { 78 | fill: #f39900; 79 | } 80 | 81 | .state.PBSTART { 82 | fill: #98c000; 83 | } 84 | 85 | .state.SBSTART { 86 | fill: #607dbd; 87 | } 88 | 89 | .state.TSTART { 90 | fill: #ffd300; 91 | } 92 | 93 | .state.STOP { 94 | fill: #2baa5b; 95 | } 96 | 97 | .state.BEND { 98 | fill: #c2c269; 99 | } 100 | 101 | .state.SLBACK { 102 | fill: #608b4e; 103 | } 104 | 105 | .state.SLENTRY { 106 | fill: #a260cb; 107 | } 108 | 109 | .state.PLBACK { 110 | fill: #517979; 111 | } 112 | 113 | .state.LEND { 114 | fill: #9b90c3; 115 | } 116 | 117 | .state.RULE { 118 | fill: #b73645; 119 | } 120 | 121 | .state.RULE.recursive { 122 | fill: #36bde0; 123 | } 124 | 125 | 126 | /* Railroad diagrams */ 127 | 128 | /* The connection lines. */ 129 | svg.railroad-diagram path { 130 | stroke-width: 2; 131 | stroke: darkgray; 132 | fill: rgba(0, 0, 0, 0); 133 | } 134 | 135 | /* All text except comments. */ 136 | svg.railroad-diagram text { 137 | font: bold 12px Hack, "Source Code Pro", monospace; 138 | text-anchor: middle; 139 | fill: #404040; 140 | } 141 | 142 | /* Comment text */ 143 | svg.railroad-diagram text.comment { 144 | font: italic 10px Hack, "Source Code Pro", monospace; 145 | fill: #404040; 146 | } 147 | 148 | /* The terminal boxes. */ 149 | svg.railroad-diagram g.terminal rect { 150 | stroke-width: 2; 151 | stroke: #404040; 152 | fill: rgba(200, 200, 200, 1); 153 | } 154 | 155 | svg.railroad-diagram g.non-terminal rect { 156 | /* The non-terminal boxes. */ 157 | stroke-width: 2; 158 | stroke: #404040; 159 | fill: rgba(255, 255, 255, 1); 160 | } 161 | 162 | /* Multiple choice text, not working atm. */ 163 | svg.railroad-diagram text.diagram-text { 164 | font-size: 12px Hack, "Source Code Pro", monospace; 165 | fill: red; 166 | } 167 | 168 | /* Multiple choice text, not working atm. */ 169 | svg.railroad-diagram path.diagram-text { 170 | stroke-width: 1; 171 | stroke: red; 172 | fill: red; 173 | cursor: help; 174 | } 175 | 176 | /* Multiple choice text, not working atm. */ 177 | svg.railroad-diagram g.diagram-text:hover path.diagram-text { 178 | fill: #f00; 179 | } 180 | 181 | /* Call graphs */ 182 | 183 | .node { 184 | font: 200 10px "Helvetica Neue", Helvetica, Arial, sans-serif; 185 | } 186 | 187 | .link { 188 | stroke: #000; 189 | stroke-opacity: .2; 190 | fill: none; 191 | pointer-events: none; 192 | } 193 | 194 | .module-1 { 195 | fill: #0ca9fd; 196 | } 197 | 198 | .module-2 { 199 | fill: #63bf8d; 200 | } 201 | 202 | .module-3 { 203 | fill: #ff8801; 204 | } 205 | 206 | .module-4 { 207 | fill: #b9fc34; 208 | } 209 | 210 | .module-5 { 211 | fill: #90e0e0; 212 | } 213 | 214 | .module-6 { 215 | fill: #b4a3f5; 216 | } 217 | 218 | .module-7 { 219 | fill: #f92672; 220 | } 221 | 222 | .module-8 { 223 | fill: #e9e901; 224 | } 225 | 226 | .module-9 { 227 | fill: #83be69; 228 | } 229 | 230 | .module-10 { 231 | fill: #f1d18c; 232 | } 233 | 234 | .node:hover { 235 | fill: #000; 236 | } 237 | 238 | .node:hover, 239 | .node-source, 240 | .node-target { 241 | font: 700 12px "Helvetica Neue", Helvetica, Arial, sans-serif; 242 | cursor: pointer; 243 | } 244 | 245 | .node-source { 246 | fill: #ff5711; 247 | } 248 | 249 | .node-target { 250 | fill: #45aa73; 251 | } 252 | 253 | .link-source, 254 | .link-target { 255 | stroke-opacity: 1; 256 | stroke-width: 2px; 257 | } 258 | 259 | .link-source { 260 | stroke: #3dcd92; 261 | } 262 | 263 | .link-target { 264 | stroke: #ff5711; 265 | } 266 | 267 | @keyframes fadeOut { 268 | 0% { 269 | stroke-opacity: 0.2; 270 | } 271 | 272 | 100% { 273 | stroke-opacity: 0.075; 274 | } 275 | } 276 | 277 | @keyframes fadeIn { 278 | 0% { 279 | stroke-opacity: 0.075; 280 | } 281 | 282 | 100% { 283 | stroke-opacity: 0.2; 284 | } 285 | } 286 | 287 | .link-dimmed { 288 | stroke-opacity: 0.075; 289 | } 290 | 291 | 292 | /* Parse trees */ 293 | .tree-node { 294 | stroke-width: 2; 295 | stroke: #C0C0C0; 296 | fill: rgba(255, 255, 255, 1); 297 | } 298 | 299 | .tree-root { 300 | stroke-width: 2; 301 | fill: #7db6dd; 302 | stroke: #7db6dd; 303 | } 304 | 305 | .tree-leaf { 306 | cursor: default; 307 | stroke-width: 2; 308 | fill: rgba(160, 171, 136, 1); 309 | stroke: rgba(117, 119, 91, 1); 310 | } 311 | 312 | .tree-error { 313 | stroke-width: 2; 314 | fill: #dd8f7d; 315 | stroke: rgba(188, 106, 122, 1); 316 | } 317 | 318 | .tree-node text { 319 | cursor: default; 320 | font: 16px "Helvetica Neue", sans-serif; 321 | fill: rgba(41, 41, 41, 1); 322 | stroke: none; 323 | } 324 | 325 | .tree-leaf text, 326 | .tree-root text, 327 | .tree-error text { 328 | font: 16px "Helvetica Neue", sans-serif; 329 | fill: #ffffff; 330 | stroke: none; 331 | } 332 | 333 | .tree-link { 334 | stroke-width: 2px; 335 | fill: none; 336 | stroke: rgba(128, 128, 128, 1); 337 | } 338 | 339 | g .token-value { 340 | fill: #404040; 341 | stroke: none; 342 | font: 14pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 343 | } 344 | 345 | g .token-range { 346 | fill: rgba(0, 77, 98, 1); 347 | stroke: none; 348 | font: 8pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 349 | } 350 | 351 | .saveSVGButton { 352 | background-image: url(./save-svg-light.svg); 353 | width: 32px; 354 | height: 32px; 355 | 356 | margin-left: 8px; 357 | 358 | background-position: center; 359 | background-repeat: no-repeat; 360 | } 361 | 362 | .saveHTMLButton { 363 | background-image: url(./save-html-light.svg); 364 | width: 32px; 365 | height: 32px; 366 | 367 | background-position: center; 368 | background-repeat: no-repeat; 369 | } 370 | 371 | .headerIcon { 372 | width: 90px; 373 | height: 90px; 374 | margin-top: 20px; 375 | 376 | background-position: center; 377 | background-repeat: no-repeat; 378 | background-size: contain; 379 | } 380 | 381 | .rrdIcon { 382 | background-image: url(./rrd-light.svg); 383 | } 384 | 385 | .atnIcon { 386 | background-image: url(./atn-light.png); 387 | } 388 | 389 | g .rrd-warning { 390 | stroke: orange; 391 | } 392 | 393 | g .rrd-predicate { 394 | stroke: rgba(23, 159, 255, 0.5); 395 | } 396 | 397 | .atn-graph-color { 398 | color: crimson; 399 | } 400 | 401 | .rrd-graph-color { 402 | color: rgba(10, 188, 80, 1); 403 | } 404 | 405 | .call-graph-color { 406 | color: rgba(255, 191, 15, 1); 407 | } 408 | 409 | .call-graph-save-image { 410 | background: url('../misc/save-svg-light.png'); 411 | vertical-align: middle; 412 | margin-left: 5px; 413 | width: 24px; 414 | height: 24px; 415 | display: inline-block; 416 | cursor: pointer; 417 | } 418 | 419 | .parse-tree-color { 420 | color: rgba(49, 112, 212, 1); 421 | } 422 | 423 | .parse-tree-save-image { 424 | background: rgba(49, 112, 212, 1) url('../misc/save.png'); 425 | vertical-align: middle; 426 | margin-left: 5px; 427 | width: 24px; 428 | height: 24px; 429 | display: inline-block; 430 | cursor: pointer; 431 | } 432 | 433 | .switch label { 434 | width: 100%; 435 | height: 100%; 436 | margin: 0; 437 | padding: 0; 438 | display: block; 439 | position: absolute; 440 | top: 0; 441 | left: 0; 442 | z-index: 10; 443 | } 444 | 445 | .switch input { 446 | display: none; 447 | } 448 | 449 | .switch > span { 450 | display: inline-block; 451 | top: 3px; 452 | transition: left 0.2s; 453 | } 454 | 455 | .switch-border { 456 | height: 12px; 457 | width: 24px; 458 | position: relative; 459 | border: 1px solid rgba(49, 112, 212, 0.75); 460 | background-color: rgba(49, 112, 212, 0.75); 461 | border-radius: 3.5em; 462 | } 463 | 464 | .switch-handle-top { 465 | width: 12px; 466 | height: 12px; 467 | position: absolute; 468 | left: 0; 469 | top: 0; 470 | z-index: 4; 471 | background-color: white; 472 | border-radius: 2.5em; 473 | transition: left 0.2s; 474 | } 475 | 476 | .switch input:checked ~ .switch-handle-top { 477 | top: 0; 478 | left: 12px; 479 | } 480 | -------------------------------------------------------------------------------- /docs/grammars/LipidMaps/light.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Mike Lischke. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | */ 5 | 6 | /* 7 | * This file contains all default CSS rules for the light vscode them, used for various diagrams and graphs. 8 | * Use the "antlr4.customCSS" setting in vscode to specify your own file, if you like to override some rules. 9 | * 10 | * Most of the appearance is defined here, while only some adjustments for the dark theme exist in dark.css. 11 | * This style sheet is also used for exported svg files. 12 | */ 13 | 14 | 15 | /* ATN graphs */ 16 | 17 | .transition { 18 | fill: none; 19 | stroke: #AAA; 20 | stroke-width: 2px; 21 | } 22 | 23 | .marker { 24 | fill: #999; 25 | stroke: none; 26 | } 27 | 28 | .stateLabel { 29 | font: bold 11pt "Helvetica Neue", Arial, sans-serif; 30 | fill: white; 31 | text-anchor: middle; 32 | pointer-events: none; 33 | } 34 | 35 | .stateTypeLabel { 36 | font: bold 7pt monospace; 37 | fill: #EEE; 38 | text-anchor: middle; 39 | pointer-events: none; 40 | } 41 | 42 | .linkLabel { 43 | font: 9pt monospace; 44 | fill: #606060; 45 | text-anchor: middle; 46 | pointer-events: none; 47 | white-space: pre; 48 | } 49 | 50 | .linkLabel > .heading { 51 | fill: cornflowerblue; 52 | font-weight: 800; 53 | } 54 | 55 | .linkLabel > .predicate { 56 | fill: gray; 57 | font-weight: 400; 58 | font-size: 7pt 59 | } 60 | 61 | .state { 62 | stroke: #505050; 63 | stroke-width: 3px; 64 | cursor: move; 65 | pointer-events: all; 66 | /*filter: url(#black-glow);*/ 67 | } 68 | 69 | .state.BASIC { 70 | fill: #AAA; 71 | } 72 | 73 | .state.START { 74 | fill: #36bde0; 75 | } 76 | 77 | .state.BSTART { 78 | fill: #f39900; 79 | } 80 | 81 | .state.PBSTART { 82 | fill: #98c000; 83 | } 84 | 85 | .state.SBSTART { 86 | fill: #607dbd; 87 | } 88 | 89 | .state.TSTART { 90 | fill: #ffd300; 91 | } 92 | 93 | .state.STOP { 94 | fill: #2baa5b; 95 | } 96 | 97 | .state.BEND { 98 | fill: #c2c269; 99 | } 100 | 101 | .state.SLBACK { 102 | fill: #608b4e; 103 | } 104 | 105 | .state.SLENTRY { 106 | fill: #a260cb; 107 | } 108 | 109 | .state.PLBACK { 110 | fill: #517979; 111 | } 112 | 113 | .state.LEND { 114 | fill: #9b90c3; 115 | } 116 | 117 | .state.RULE { 118 | fill: #b73645; 119 | } 120 | 121 | .state.RULE.recursive { 122 | fill: #36bde0; 123 | } 124 | 125 | 126 | /* Railroad diagrams */ 127 | 128 | /* The connection lines. */ 129 | svg.railroad-diagram path { 130 | stroke-width: 2; 131 | stroke: darkgray; 132 | fill: rgba(0, 0, 0, 0); 133 | } 134 | 135 | /* All text except comments. */ 136 | svg.railroad-diagram text { 137 | font: bold 12px Hack, "Source Code Pro", monospace; 138 | text-anchor: middle; 139 | fill: #404040; 140 | } 141 | 142 | /* Comment text */ 143 | svg.railroad-diagram text.comment { 144 | font: italic 10px Hack, "Source Code Pro", monospace; 145 | fill: #404040; 146 | } 147 | 148 | /* The terminal boxes. */ 149 | svg.railroad-diagram g.terminal rect { 150 | stroke-width: 2; 151 | stroke: #404040; 152 | fill: rgba(200, 200, 200, 1); 153 | } 154 | 155 | svg.railroad-diagram g.non-terminal rect { 156 | /* The non-terminal boxes. */ 157 | stroke-width: 2; 158 | stroke: #404040; 159 | fill: rgba(255, 255, 255, 1); 160 | } 161 | 162 | /* Multiple choice text, not working atm. */ 163 | svg.railroad-diagram text.diagram-text { 164 | font-size: 12px Hack, "Source Code Pro", monospace; 165 | fill: red; 166 | } 167 | 168 | /* Multiple choice text, not working atm. */ 169 | svg.railroad-diagram path.diagram-text { 170 | stroke-width: 1; 171 | stroke: red; 172 | fill: red; 173 | cursor: help; 174 | } 175 | 176 | /* Multiple choice text, not working atm. */ 177 | svg.railroad-diagram g.diagram-text:hover path.diagram-text { 178 | fill: #f00; 179 | } 180 | 181 | /* Call graphs */ 182 | 183 | .node { 184 | font: 200 10px "Helvetica Neue", Helvetica, Arial, sans-serif; 185 | } 186 | 187 | .link { 188 | stroke: #000; 189 | stroke-opacity: .2; 190 | fill: none; 191 | pointer-events: none; 192 | } 193 | 194 | .module-1 { 195 | fill: #0ca9fd; 196 | } 197 | 198 | .module-2 { 199 | fill: #63bf8d; 200 | } 201 | 202 | .module-3 { 203 | fill: #ff8801; 204 | } 205 | 206 | .module-4 { 207 | fill: #b9fc34; 208 | } 209 | 210 | .module-5 { 211 | fill: #90e0e0; 212 | } 213 | 214 | .module-6 { 215 | fill: #b4a3f5; 216 | } 217 | 218 | .module-7 { 219 | fill: #f92672; 220 | } 221 | 222 | .module-8 { 223 | fill: #e9e901; 224 | } 225 | 226 | .module-9 { 227 | fill: #83be69; 228 | } 229 | 230 | .module-10 { 231 | fill: #f1d18c; 232 | } 233 | 234 | .node:hover { 235 | fill: #000; 236 | } 237 | 238 | .node:hover, 239 | .node-source, 240 | .node-target { 241 | font: 700 12px "Helvetica Neue", Helvetica, Arial, sans-serif; 242 | cursor: pointer; 243 | } 244 | 245 | .node-source { 246 | fill: #ff5711; 247 | } 248 | 249 | .node-target { 250 | fill: #45aa73; 251 | } 252 | 253 | .link-source, 254 | .link-target { 255 | stroke-opacity: 1; 256 | stroke-width: 2px; 257 | } 258 | 259 | .link-source { 260 | stroke: #3dcd92; 261 | } 262 | 263 | .link-target { 264 | stroke: #ff5711; 265 | } 266 | 267 | @keyframes fadeOut { 268 | 0% { 269 | stroke-opacity: 0.2; 270 | } 271 | 272 | 100% { 273 | stroke-opacity: 0.075; 274 | } 275 | } 276 | 277 | @keyframes fadeIn { 278 | 0% { 279 | stroke-opacity: 0.075; 280 | } 281 | 282 | 100% { 283 | stroke-opacity: 0.2; 284 | } 285 | } 286 | 287 | .link-dimmed { 288 | stroke-opacity: 0.075; 289 | } 290 | 291 | 292 | /* Parse trees */ 293 | .tree-node { 294 | stroke-width: 2; 295 | stroke: #C0C0C0; 296 | fill: rgba(255, 255, 255, 1); 297 | } 298 | 299 | .tree-root { 300 | stroke-width: 2; 301 | fill: #7db6dd; 302 | stroke: #7db6dd; 303 | } 304 | 305 | .tree-leaf { 306 | cursor: default; 307 | stroke-width: 2; 308 | fill: rgba(160, 171, 136, 1); 309 | stroke: rgba(117, 119, 91, 1); 310 | } 311 | 312 | .tree-error { 313 | stroke-width: 2; 314 | fill: #dd8f7d; 315 | stroke: rgba(188, 106, 122, 1); 316 | } 317 | 318 | .tree-node text { 319 | cursor: default; 320 | font: 16px "Helvetica Neue", sans-serif; 321 | fill: rgba(41, 41, 41, 1); 322 | stroke: none; 323 | } 324 | 325 | .tree-leaf text, 326 | .tree-root text, 327 | .tree-error text { 328 | font: 16px "Helvetica Neue", sans-serif; 329 | fill: #ffffff; 330 | stroke: none; 331 | } 332 | 333 | .tree-link { 334 | stroke-width: 2px; 335 | fill: none; 336 | stroke: rgba(128, 128, 128, 1); 337 | } 338 | 339 | g .token-value { 340 | fill: #404040; 341 | stroke: none; 342 | font: 14pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 343 | } 344 | 345 | g .token-range { 346 | fill: rgba(0, 77, 98, 1); 347 | stroke: none; 348 | font: 8pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 349 | } 350 | 351 | .saveSVGButton { 352 | background-image: url(./save-svg-light.svg); 353 | width: 32px; 354 | height: 32px; 355 | 356 | margin-left: 8px; 357 | 358 | background-position: center; 359 | background-repeat: no-repeat; 360 | } 361 | 362 | .saveHTMLButton { 363 | background-image: url(./save-html-light.svg); 364 | width: 32px; 365 | height: 32px; 366 | 367 | background-position: center; 368 | background-repeat: no-repeat; 369 | } 370 | 371 | .headerIcon { 372 | width: 90px; 373 | height: 90px; 374 | margin-top: 20px; 375 | 376 | background-position: center; 377 | background-repeat: no-repeat; 378 | background-size: contain; 379 | } 380 | 381 | .rrdIcon { 382 | background-image: url(./rrd-light.svg); 383 | } 384 | 385 | .atnIcon { 386 | background-image: url(./atn-light.png); 387 | } 388 | 389 | g .rrd-warning { 390 | stroke: orange; 391 | } 392 | 393 | g .rrd-predicate { 394 | stroke: rgba(23, 159, 255, 0.5); 395 | } 396 | 397 | .atn-graph-color { 398 | color: crimson; 399 | } 400 | 401 | .rrd-graph-color { 402 | color: rgba(10, 188, 80, 1); 403 | } 404 | 405 | .call-graph-color { 406 | color: rgba(255, 191, 15, 1); 407 | } 408 | 409 | .call-graph-save-image { 410 | background: url('../misc/save-svg-light.png'); 411 | vertical-align: middle; 412 | margin-left: 5px; 413 | width: 24px; 414 | height: 24px; 415 | display: inline-block; 416 | cursor: pointer; 417 | } 418 | 419 | .parse-tree-color { 420 | color: rgba(49, 112, 212, 1); 421 | } 422 | 423 | .parse-tree-save-image { 424 | background: rgba(49, 112, 212, 1) url('../misc/save.png'); 425 | vertical-align: middle; 426 | margin-left: 5px; 427 | width: 24px; 428 | height: 24px; 429 | display: inline-block; 430 | cursor: pointer; 431 | } 432 | 433 | .switch label { 434 | width: 100%; 435 | height: 100%; 436 | margin: 0; 437 | padding: 0; 438 | display: block; 439 | position: absolute; 440 | top: 0; 441 | left: 0; 442 | z-index: 10; 443 | } 444 | 445 | .switch input { 446 | display: none; 447 | } 448 | 449 | .switch > span { 450 | display: inline-block; 451 | top: 3px; 452 | transition: left 0.2s; 453 | } 454 | 455 | .switch-border { 456 | height: 12px; 457 | width: 24px; 458 | position: relative; 459 | border: 1px solid rgba(49, 112, 212, 0.75); 460 | background-color: rgba(49, 112, 212, 0.75); 461 | border-radius: 3.5em; 462 | } 463 | 464 | .switch-handle-top { 465 | width: 12px; 466 | height: 12px; 467 | position: absolute; 468 | left: 0; 469 | top: 0; 470 | z-index: 4; 471 | background-color: white; 472 | border-radius: 2.5em; 473 | transition: left 0.2s; 474 | } 475 | 476 | .switch input:checked ~ .switch-handle-top { 477 | top: 0; 478 | left: 12px; 479 | } 480 | -------------------------------------------------------------------------------- /docs/grammars/Shorthand2020/light.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Mike Lischke. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | */ 5 | 6 | /* 7 | * This file contains all default CSS rules for the light vscode them, used for various diagrams and graphs. 8 | * Use the "antlr4.customCSS" setting in vscode to specify your own file, if you like to override some rules. 9 | * 10 | * Most of the appearance is defined here, while only some adjustments for the dark theme exist in dark.css. 11 | * This style sheet is also used for exported svg files. 12 | */ 13 | 14 | 15 | /* ATN graphs */ 16 | 17 | .transition { 18 | fill: none; 19 | stroke: #AAA; 20 | stroke-width: 2px; 21 | } 22 | 23 | .marker { 24 | fill: #999; 25 | stroke: none; 26 | } 27 | 28 | .stateLabel { 29 | font: bold 11pt "Helvetica Neue", Arial, sans-serif; 30 | fill: white; 31 | text-anchor: middle; 32 | pointer-events: none; 33 | } 34 | 35 | .stateTypeLabel { 36 | font: bold 7pt monospace; 37 | fill: #EEE; 38 | text-anchor: middle; 39 | pointer-events: none; 40 | } 41 | 42 | .linkLabel { 43 | font: 9pt monospace; 44 | fill: #606060; 45 | text-anchor: middle; 46 | pointer-events: none; 47 | white-space: pre; 48 | } 49 | 50 | .linkLabel > .heading { 51 | fill: cornflowerblue; 52 | font-weight: 800; 53 | } 54 | 55 | .linkLabel > .predicate { 56 | fill: gray; 57 | font-weight: 400; 58 | font-size: 7pt 59 | } 60 | 61 | .state { 62 | stroke: #505050; 63 | stroke-width: 3px; 64 | cursor: move; 65 | pointer-events: all; 66 | /*filter: url(#black-glow);*/ 67 | } 68 | 69 | .state.BASIC { 70 | fill: #AAA; 71 | } 72 | 73 | .state.START { 74 | fill: #36bde0; 75 | } 76 | 77 | .state.BSTART { 78 | fill: #f39900; 79 | } 80 | 81 | .state.PBSTART { 82 | fill: #98c000; 83 | } 84 | 85 | .state.SBSTART { 86 | fill: #607dbd; 87 | } 88 | 89 | .state.TSTART { 90 | fill: #ffd300; 91 | } 92 | 93 | .state.STOP { 94 | fill: #2baa5b; 95 | } 96 | 97 | .state.BEND { 98 | fill: #c2c269; 99 | } 100 | 101 | .state.SLBACK { 102 | fill: #608b4e; 103 | } 104 | 105 | .state.SLENTRY { 106 | fill: #a260cb; 107 | } 108 | 109 | .state.PLBACK { 110 | fill: #517979; 111 | } 112 | 113 | .state.LEND { 114 | fill: #9b90c3; 115 | } 116 | 117 | .state.RULE { 118 | fill: #b73645; 119 | } 120 | 121 | .state.RULE.recursive { 122 | fill: #36bde0; 123 | } 124 | 125 | 126 | /* Railroad diagrams */ 127 | 128 | /* The connection lines. */ 129 | svg.railroad-diagram path { 130 | stroke-width: 2; 131 | stroke: darkgray; 132 | fill: rgba(0, 0, 0, 0); 133 | } 134 | 135 | /* All text except comments. */ 136 | svg.railroad-diagram text { 137 | font: bold 12px Hack, "Source Code Pro", monospace; 138 | text-anchor: middle; 139 | fill: #404040; 140 | } 141 | 142 | /* Comment text */ 143 | svg.railroad-diagram text.comment { 144 | font: italic 10px Hack, "Source Code Pro", monospace; 145 | fill: #404040; 146 | } 147 | 148 | /* The terminal boxes. */ 149 | svg.railroad-diagram g.terminal rect { 150 | stroke-width: 2; 151 | stroke: #404040; 152 | fill: rgba(200, 200, 200, 1); 153 | } 154 | 155 | svg.railroad-diagram g.non-terminal rect { 156 | /* The non-terminal boxes. */ 157 | stroke-width: 2; 158 | stroke: #404040; 159 | fill: rgba(255, 255, 255, 1); 160 | } 161 | 162 | /* Multiple choice text, not working atm. */ 163 | svg.railroad-diagram text.diagram-text { 164 | font-size: 12px Hack, "Source Code Pro", monospace; 165 | fill: red; 166 | } 167 | 168 | /* Multiple choice text, not working atm. */ 169 | svg.railroad-diagram path.diagram-text { 170 | stroke-width: 1; 171 | stroke: red; 172 | fill: red; 173 | cursor: help; 174 | } 175 | 176 | /* Multiple choice text, not working atm. */ 177 | svg.railroad-diagram g.diagram-text:hover path.diagram-text { 178 | fill: #f00; 179 | } 180 | 181 | /* Call graphs */ 182 | 183 | .node { 184 | font: 200 10px "Helvetica Neue", Helvetica, Arial, sans-serif; 185 | } 186 | 187 | .link { 188 | stroke: #000; 189 | stroke-opacity: .2; 190 | fill: none; 191 | pointer-events: none; 192 | } 193 | 194 | .module-1 { 195 | fill: #0ca9fd; 196 | } 197 | 198 | .module-2 { 199 | fill: #63bf8d; 200 | } 201 | 202 | .module-3 { 203 | fill: #ff8801; 204 | } 205 | 206 | .module-4 { 207 | fill: #b9fc34; 208 | } 209 | 210 | .module-5 { 211 | fill: #90e0e0; 212 | } 213 | 214 | .module-6 { 215 | fill: #b4a3f5; 216 | } 217 | 218 | .module-7 { 219 | fill: #f92672; 220 | } 221 | 222 | .module-8 { 223 | fill: #e9e901; 224 | } 225 | 226 | .module-9 { 227 | fill: #83be69; 228 | } 229 | 230 | .module-10 { 231 | fill: #f1d18c; 232 | } 233 | 234 | .node:hover { 235 | fill: #000; 236 | } 237 | 238 | .node:hover, 239 | .node-source, 240 | .node-target { 241 | font: 700 12px "Helvetica Neue", Helvetica, Arial, sans-serif; 242 | cursor: pointer; 243 | } 244 | 245 | .node-source { 246 | fill: #ff5711; 247 | } 248 | 249 | .node-target { 250 | fill: #45aa73; 251 | } 252 | 253 | .link-source, 254 | .link-target { 255 | stroke-opacity: 1; 256 | stroke-width: 2px; 257 | } 258 | 259 | .link-source { 260 | stroke: #3dcd92; 261 | } 262 | 263 | .link-target { 264 | stroke: #ff5711; 265 | } 266 | 267 | @keyframes fadeOut { 268 | 0% { 269 | stroke-opacity: 0.2; 270 | } 271 | 272 | 100% { 273 | stroke-opacity: 0.075; 274 | } 275 | } 276 | 277 | @keyframes fadeIn { 278 | 0% { 279 | stroke-opacity: 0.075; 280 | } 281 | 282 | 100% { 283 | stroke-opacity: 0.2; 284 | } 285 | } 286 | 287 | .link-dimmed { 288 | stroke-opacity: 0.075; 289 | } 290 | 291 | 292 | /* Parse trees */ 293 | .tree-node { 294 | stroke-width: 2; 295 | stroke: #C0C0C0; 296 | fill: rgba(255, 255, 255, 1); 297 | } 298 | 299 | .tree-root { 300 | stroke-width: 2; 301 | fill: #7db6dd; 302 | stroke: #7db6dd; 303 | } 304 | 305 | .tree-leaf { 306 | cursor: default; 307 | stroke-width: 2; 308 | fill: rgba(160, 171, 136, 1); 309 | stroke: rgba(117, 119, 91, 1); 310 | } 311 | 312 | .tree-error { 313 | stroke-width: 2; 314 | fill: #dd8f7d; 315 | stroke: rgba(188, 106, 122, 1); 316 | } 317 | 318 | .tree-node text { 319 | cursor: default; 320 | font: 16px "Helvetica Neue", sans-serif; 321 | fill: rgba(41, 41, 41, 1); 322 | stroke: none; 323 | } 324 | 325 | .tree-leaf text, 326 | .tree-root text, 327 | .tree-error text { 328 | font: 16px "Helvetica Neue", sans-serif; 329 | fill: #ffffff; 330 | stroke: none; 331 | } 332 | 333 | .tree-link { 334 | stroke-width: 2px; 335 | fill: none; 336 | stroke: rgba(128, 128, 128, 1); 337 | } 338 | 339 | g .token-value { 340 | fill: #404040; 341 | stroke: none; 342 | font: 14pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 343 | } 344 | 345 | g .token-range { 346 | fill: rgba(0, 77, 98, 1); 347 | stroke: none; 348 | font: 8pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 349 | } 350 | 351 | .saveSVGButton { 352 | background-image: url(./save-svg-light.svg); 353 | width: 32px; 354 | height: 32px; 355 | 356 | margin-left: 8px; 357 | 358 | background-position: center; 359 | background-repeat: no-repeat; 360 | } 361 | 362 | .saveHTMLButton { 363 | background-image: url(./save-html-light.svg); 364 | width: 32px; 365 | height: 32px; 366 | 367 | background-position: center; 368 | background-repeat: no-repeat; 369 | } 370 | 371 | .headerIcon { 372 | width: 90px; 373 | height: 90px; 374 | margin-top: 20px; 375 | 376 | background-position: center; 377 | background-repeat: no-repeat; 378 | background-size: contain; 379 | } 380 | 381 | .rrdIcon { 382 | background-image: url(./rrd-light.svg); 383 | } 384 | 385 | .atnIcon { 386 | background-image: url(./atn-light.png); 387 | } 388 | 389 | g .rrd-warning { 390 | stroke: orange; 391 | } 392 | 393 | g .rrd-predicate { 394 | stroke: rgba(23, 159, 255, 0.5); 395 | } 396 | 397 | .atn-graph-color { 398 | color: crimson; 399 | } 400 | 401 | .rrd-graph-color { 402 | color: rgba(10, 188, 80, 1); 403 | } 404 | 405 | .call-graph-color { 406 | color: rgba(255, 191, 15, 1); 407 | } 408 | 409 | .call-graph-save-image { 410 | background: url('../misc/save-svg-light.png'); 411 | vertical-align: middle; 412 | margin-left: 5px; 413 | width: 24px; 414 | height: 24px; 415 | display: inline-block; 416 | cursor: pointer; 417 | } 418 | 419 | .parse-tree-color { 420 | color: rgba(49, 112, 212, 1); 421 | } 422 | 423 | .parse-tree-save-image { 424 | background: rgba(49, 112, 212, 1) url('../misc/save.png'); 425 | vertical-align: middle; 426 | margin-left: 5px; 427 | width: 24px; 428 | height: 24px; 429 | display: inline-block; 430 | cursor: pointer; 431 | } 432 | 433 | .switch label { 434 | width: 100%; 435 | height: 100%; 436 | margin: 0; 437 | padding: 0; 438 | display: block; 439 | position: absolute; 440 | top: 0; 441 | left: 0; 442 | z-index: 10; 443 | } 444 | 445 | .switch input { 446 | display: none; 447 | } 448 | 449 | .switch > span { 450 | display: inline-block; 451 | top: 3px; 452 | transition: left 0.2s; 453 | } 454 | 455 | .switch-border { 456 | height: 12px; 457 | width: 24px; 458 | position: relative; 459 | border: 1px solid rgba(49, 112, 212, 0.75); 460 | background-color: rgba(49, 112, 212, 0.75); 461 | border-radius: 3.5em; 462 | } 463 | 464 | .switch-handle-top { 465 | width: 12px; 466 | height: 12px; 467 | position: absolute; 468 | left: 0; 469 | top: 0; 470 | z-index: 4; 471 | background-color: white; 472 | border-radius: 2.5em; 473 | transition: left 0.2s; 474 | } 475 | 476 | .switch input:checked ~ .switch-handle-top { 477 | top: 0; 478 | left: 12px; 479 | } 480 | -------------------------------------------------------------------------------- /docs/grammars/SumFormula/light.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Mike Lischke. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | */ 5 | 6 | /* 7 | * This file contains all default CSS rules for the light vscode them, used for various diagrams and graphs. 8 | * Use the "antlr4.customCSS" setting in vscode to specify your own file, if you like to override some rules. 9 | * 10 | * Most of the appearance is defined here, while only some adjustments for the dark theme exist in dark.css. 11 | * This style sheet is also used for exported svg files. 12 | */ 13 | 14 | 15 | /* ATN graphs */ 16 | 17 | .transition { 18 | fill: none; 19 | stroke: #AAA; 20 | stroke-width: 2px; 21 | } 22 | 23 | .marker { 24 | fill: #999; 25 | stroke: none; 26 | } 27 | 28 | .stateLabel { 29 | font: bold 11pt "Helvetica Neue", Arial, sans-serif; 30 | fill: white; 31 | text-anchor: middle; 32 | pointer-events: none; 33 | } 34 | 35 | .stateTypeLabel { 36 | font: bold 7pt monospace; 37 | fill: #EEE; 38 | text-anchor: middle; 39 | pointer-events: none; 40 | } 41 | 42 | .linkLabel { 43 | font: 9pt monospace; 44 | fill: #606060; 45 | text-anchor: middle; 46 | pointer-events: none; 47 | white-space: pre; 48 | } 49 | 50 | .linkLabel > .heading { 51 | fill: cornflowerblue; 52 | font-weight: 800; 53 | } 54 | 55 | .linkLabel > .predicate { 56 | fill: gray; 57 | font-weight: 400; 58 | font-size: 7pt 59 | } 60 | 61 | .state { 62 | stroke: #505050; 63 | stroke-width: 3px; 64 | cursor: move; 65 | pointer-events: all; 66 | /*filter: url(#black-glow);*/ 67 | } 68 | 69 | .state.BASIC { 70 | fill: #AAA; 71 | } 72 | 73 | .state.START { 74 | fill: #36bde0; 75 | } 76 | 77 | .state.BSTART { 78 | fill: #f39900; 79 | } 80 | 81 | .state.PBSTART { 82 | fill: #98c000; 83 | } 84 | 85 | .state.SBSTART { 86 | fill: #607dbd; 87 | } 88 | 89 | .state.TSTART { 90 | fill: #ffd300; 91 | } 92 | 93 | .state.STOP { 94 | fill: #2baa5b; 95 | } 96 | 97 | .state.BEND { 98 | fill: #c2c269; 99 | } 100 | 101 | .state.SLBACK { 102 | fill: #608b4e; 103 | } 104 | 105 | .state.SLENTRY { 106 | fill: #a260cb; 107 | } 108 | 109 | .state.PLBACK { 110 | fill: #517979; 111 | } 112 | 113 | .state.LEND { 114 | fill: #9b90c3; 115 | } 116 | 117 | .state.RULE { 118 | fill: #b73645; 119 | } 120 | 121 | .state.RULE.recursive { 122 | fill: #36bde0; 123 | } 124 | 125 | 126 | /* Railroad diagrams */ 127 | 128 | /* The connection lines. */ 129 | svg.railroad-diagram path { 130 | stroke-width: 2; 131 | stroke: darkgray; 132 | fill: rgba(0, 0, 0, 0); 133 | } 134 | 135 | /* All text except comments. */ 136 | svg.railroad-diagram text { 137 | font: bold 12px Hack, "Source Code Pro", monospace; 138 | text-anchor: middle; 139 | fill: #404040; 140 | } 141 | 142 | /* Comment text */ 143 | svg.railroad-diagram text.comment { 144 | font: italic 10px Hack, "Source Code Pro", monospace; 145 | fill: #404040; 146 | } 147 | 148 | /* The terminal boxes. */ 149 | svg.railroad-diagram g.terminal rect { 150 | stroke-width: 2; 151 | stroke: #404040; 152 | fill: rgba(200, 200, 200, 1); 153 | } 154 | 155 | svg.railroad-diagram g.non-terminal rect { 156 | /* The non-terminal boxes. */ 157 | stroke-width: 2; 158 | stroke: #404040; 159 | fill: rgba(255, 255, 255, 1); 160 | } 161 | 162 | /* Multiple choice text, not working atm. */ 163 | svg.railroad-diagram text.diagram-text { 164 | font-size: 12px Hack, "Source Code Pro", monospace; 165 | fill: red; 166 | } 167 | 168 | /* Multiple choice text, not working atm. */ 169 | svg.railroad-diagram path.diagram-text { 170 | stroke-width: 1; 171 | stroke: red; 172 | fill: red; 173 | cursor: help; 174 | } 175 | 176 | /* Multiple choice text, not working atm. */ 177 | svg.railroad-diagram g.diagram-text:hover path.diagram-text { 178 | fill: #f00; 179 | } 180 | 181 | /* Call graphs */ 182 | 183 | .node { 184 | font: 200 10px "Helvetica Neue", Helvetica, Arial, sans-serif; 185 | } 186 | 187 | .link { 188 | stroke: #000; 189 | stroke-opacity: .2; 190 | fill: none; 191 | pointer-events: none; 192 | } 193 | 194 | .module-1 { 195 | fill: #0ca9fd; 196 | } 197 | 198 | .module-2 { 199 | fill: #63bf8d; 200 | } 201 | 202 | .module-3 { 203 | fill: #ff8801; 204 | } 205 | 206 | .module-4 { 207 | fill: #b9fc34; 208 | } 209 | 210 | .module-5 { 211 | fill: #90e0e0; 212 | } 213 | 214 | .module-6 { 215 | fill: #b4a3f5; 216 | } 217 | 218 | .module-7 { 219 | fill: #f92672; 220 | } 221 | 222 | .module-8 { 223 | fill: #e9e901; 224 | } 225 | 226 | .module-9 { 227 | fill: #83be69; 228 | } 229 | 230 | .module-10 { 231 | fill: #f1d18c; 232 | } 233 | 234 | .node:hover { 235 | fill: #000; 236 | } 237 | 238 | .node:hover, 239 | .node-source, 240 | .node-target { 241 | font: 700 12px "Helvetica Neue", Helvetica, Arial, sans-serif; 242 | cursor: pointer; 243 | } 244 | 245 | .node-source { 246 | fill: #ff5711; 247 | } 248 | 249 | .node-target { 250 | fill: #45aa73; 251 | } 252 | 253 | .link-source, 254 | .link-target { 255 | stroke-opacity: 1; 256 | stroke-width: 2px; 257 | } 258 | 259 | .link-source { 260 | stroke: #3dcd92; 261 | } 262 | 263 | .link-target { 264 | stroke: #ff5711; 265 | } 266 | 267 | @keyframes fadeOut { 268 | 0% { 269 | stroke-opacity: 0.2; 270 | } 271 | 272 | 100% { 273 | stroke-opacity: 0.075; 274 | } 275 | } 276 | 277 | @keyframes fadeIn { 278 | 0% { 279 | stroke-opacity: 0.075; 280 | } 281 | 282 | 100% { 283 | stroke-opacity: 0.2; 284 | } 285 | } 286 | 287 | .link-dimmed { 288 | stroke-opacity: 0.075; 289 | } 290 | 291 | 292 | /* Parse trees */ 293 | .tree-node { 294 | stroke-width: 2; 295 | stroke: #C0C0C0; 296 | fill: rgba(255, 255, 255, 1); 297 | } 298 | 299 | .tree-root { 300 | stroke-width: 2; 301 | fill: #7db6dd; 302 | stroke: #7db6dd; 303 | } 304 | 305 | .tree-leaf { 306 | cursor: default; 307 | stroke-width: 2; 308 | fill: rgba(160, 171, 136, 1); 309 | stroke: rgba(117, 119, 91, 1); 310 | } 311 | 312 | .tree-error { 313 | stroke-width: 2; 314 | fill: #dd8f7d; 315 | stroke: rgba(188, 106, 122, 1); 316 | } 317 | 318 | .tree-node text { 319 | cursor: default; 320 | font: 16px "Helvetica Neue", sans-serif; 321 | fill: rgba(41, 41, 41, 1); 322 | stroke: none; 323 | } 324 | 325 | .tree-leaf text, 326 | .tree-root text, 327 | .tree-error text { 328 | font: 16px "Helvetica Neue", sans-serif; 329 | fill: #ffffff; 330 | stroke: none; 331 | } 332 | 333 | .tree-link { 334 | stroke-width: 2px; 335 | fill: none; 336 | stroke: rgba(128, 128, 128, 1); 337 | } 338 | 339 | g .token-value { 340 | fill: #404040; 341 | stroke: none; 342 | font: 14pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 343 | } 344 | 345 | g .token-range { 346 | fill: rgba(0, 77, 98, 1); 347 | stroke: none; 348 | font: 8pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 349 | } 350 | 351 | .saveSVGButton { 352 | background-image: url(./save-svg-light.svg); 353 | width: 32px; 354 | height: 32px; 355 | 356 | margin-left: 8px; 357 | 358 | background-position: center; 359 | background-repeat: no-repeat; 360 | } 361 | 362 | .saveHTMLButton { 363 | background-image: url(./save-html-light.svg); 364 | width: 32px; 365 | height: 32px; 366 | 367 | background-position: center; 368 | background-repeat: no-repeat; 369 | } 370 | 371 | .headerIcon { 372 | width: 90px; 373 | height: 90px; 374 | margin-top: 20px; 375 | 376 | background-position: center; 377 | background-repeat: no-repeat; 378 | background-size: contain; 379 | } 380 | 381 | .rrdIcon { 382 | background-image: url(./rrd-light.svg); 383 | } 384 | 385 | .atnIcon { 386 | background-image: url(./atn-light.png); 387 | } 388 | 389 | g .rrd-warning { 390 | stroke: orange; 391 | } 392 | 393 | g .rrd-predicate { 394 | stroke: rgba(23, 159, 255, 0.5); 395 | } 396 | 397 | .atn-graph-color { 398 | color: crimson; 399 | } 400 | 401 | .rrd-graph-color { 402 | color: rgba(10, 188, 80, 1); 403 | } 404 | 405 | .call-graph-color { 406 | color: rgba(255, 191, 15, 1); 407 | } 408 | 409 | .call-graph-save-image { 410 | background: url('../misc/save-svg-light.png'); 411 | vertical-align: middle; 412 | margin-left: 5px; 413 | width: 24px; 414 | height: 24px; 415 | display: inline-block; 416 | cursor: pointer; 417 | } 418 | 419 | .parse-tree-color { 420 | color: rgba(49, 112, 212, 1); 421 | } 422 | 423 | .parse-tree-save-image { 424 | background: rgba(49, 112, 212, 1) url('../misc/save.png'); 425 | vertical-align: middle; 426 | margin-left: 5px; 427 | width: 24px; 428 | height: 24px; 429 | display: inline-block; 430 | cursor: pointer; 431 | } 432 | 433 | .switch label { 434 | width: 100%; 435 | height: 100%; 436 | margin: 0; 437 | padding: 0; 438 | display: block; 439 | position: absolute; 440 | top: 0; 441 | left: 0; 442 | z-index: 10; 443 | } 444 | 445 | .switch input { 446 | display: none; 447 | } 448 | 449 | .switch > span { 450 | display: inline-block; 451 | top: 3px; 452 | transition: left 0.2s; 453 | } 454 | 455 | .switch-border { 456 | height: 12px; 457 | width: 24px; 458 | position: relative; 459 | border: 1px solid rgba(49, 112, 212, 0.75); 460 | background-color: rgba(49, 112, 212, 0.75); 461 | border-radius: 3.5em; 462 | } 463 | 464 | .switch-handle-top { 465 | width: 12px; 466 | height: 12px; 467 | position: absolute; 468 | left: 0; 469 | top: 0; 470 | z-index: 4; 471 | background-color: white; 472 | border-radius: 2.5em; 473 | transition: left 0.2s; 474 | } 475 | 476 | .switch input:checked ~ .switch-handle-top { 477 | top: 0; 478 | left: 12px; 479 | } 480 | -------------------------------------------------------------------------------- /docs/grammars/SwissLipids/light.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Mike Lischke. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | */ 5 | 6 | /* 7 | * This file contains all default CSS rules for the light vscode them, used for various diagrams and graphs. 8 | * Use the "antlr4.customCSS" setting in vscode to specify your own file, if you like to override some rules. 9 | * 10 | * Most of the appearance is defined here, while only some adjustments for the dark theme exist in dark.css. 11 | * This style sheet is also used for exported svg files. 12 | */ 13 | 14 | 15 | /* ATN graphs */ 16 | 17 | .transition { 18 | fill: none; 19 | stroke: #AAA; 20 | stroke-width: 2px; 21 | } 22 | 23 | .marker { 24 | fill: #999; 25 | stroke: none; 26 | } 27 | 28 | .stateLabel { 29 | font: bold 11pt "Helvetica Neue", Arial, sans-serif; 30 | fill: white; 31 | text-anchor: middle; 32 | pointer-events: none; 33 | } 34 | 35 | .stateTypeLabel { 36 | font: bold 7pt monospace; 37 | fill: #EEE; 38 | text-anchor: middle; 39 | pointer-events: none; 40 | } 41 | 42 | .linkLabel { 43 | font: 9pt monospace; 44 | fill: #606060; 45 | text-anchor: middle; 46 | pointer-events: none; 47 | white-space: pre; 48 | } 49 | 50 | .linkLabel > .heading { 51 | fill: cornflowerblue; 52 | font-weight: 800; 53 | } 54 | 55 | .linkLabel > .predicate { 56 | fill: gray; 57 | font-weight: 400; 58 | font-size: 7pt 59 | } 60 | 61 | .state { 62 | stroke: #505050; 63 | stroke-width: 3px; 64 | cursor: move; 65 | pointer-events: all; 66 | /*filter: url(#black-glow);*/ 67 | } 68 | 69 | .state.BASIC { 70 | fill: #AAA; 71 | } 72 | 73 | .state.START { 74 | fill: #36bde0; 75 | } 76 | 77 | .state.BSTART { 78 | fill: #f39900; 79 | } 80 | 81 | .state.PBSTART { 82 | fill: #98c000; 83 | } 84 | 85 | .state.SBSTART { 86 | fill: #607dbd; 87 | } 88 | 89 | .state.TSTART { 90 | fill: #ffd300; 91 | } 92 | 93 | .state.STOP { 94 | fill: #2baa5b; 95 | } 96 | 97 | .state.BEND { 98 | fill: #c2c269; 99 | } 100 | 101 | .state.SLBACK { 102 | fill: #608b4e; 103 | } 104 | 105 | .state.SLENTRY { 106 | fill: #a260cb; 107 | } 108 | 109 | .state.PLBACK { 110 | fill: #517979; 111 | } 112 | 113 | .state.LEND { 114 | fill: #9b90c3; 115 | } 116 | 117 | .state.RULE { 118 | fill: #b73645; 119 | } 120 | 121 | .state.RULE.recursive { 122 | fill: #36bde0; 123 | } 124 | 125 | 126 | /* Railroad diagrams */ 127 | 128 | /* The connection lines. */ 129 | svg.railroad-diagram path { 130 | stroke-width: 2; 131 | stroke: darkgray; 132 | fill: rgba(0, 0, 0, 0); 133 | } 134 | 135 | /* All text except comments. */ 136 | svg.railroad-diagram text { 137 | font: bold 12px Hack, "Source Code Pro", monospace; 138 | text-anchor: middle; 139 | fill: #404040; 140 | } 141 | 142 | /* Comment text */ 143 | svg.railroad-diagram text.comment { 144 | font: italic 10px Hack, "Source Code Pro", monospace; 145 | fill: #404040; 146 | } 147 | 148 | /* The terminal boxes. */ 149 | svg.railroad-diagram g.terminal rect { 150 | stroke-width: 2; 151 | stroke: #404040; 152 | fill: rgba(200, 200, 200, 1); 153 | } 154 | 155 | svg.railroad-diagram g.non-terminal rect { 156 | /* The non-terminal boxes. */ 157 | stroke-width: 2; 158 | stroke: #404040; 159 | fill: rgba(255, 255, 255, 1); 160 | } 161 | 162 | /* Multiple choice text, not working atm. */ 163 | svg.railroad-diagram text.diagram-text { 164 | font-size: 12px Hack, "Source Code Pro", monospace; 165 | fill: red; 166 | } 167 | 168 | /* Multiple choice text, not working atm. */ 169 | svg.railroad-diagram path.diagram-text { 170 | stroke-width: 1; 171 | stroke: red; 172 | fill: red; 173 | cursor: help; 174 | } 175 | 176 | /* Multiple choice text, not working atm. */ 177 | svg.railroad-diagram g.diagram-text:hover path.diagram-text { 178 | fill: #f00; 179 | } 180 | 181 | /* Call graphs */ 182 | 183 | .node { 184 | font: 200 10px "Helvetica Neue", Helvetica, Arial, sans-serif; 185 | } 186 | 187 | .link { 188 | stroke: #000; 189 | stroke-opacity: .2; 190 | fill: none; 191 | pointer-events: none; 192 | } 193 | 194 | .module-1 { 195 | fill: #0ca9fd; 196 | } 197 | 198 | .module-2 { 199 | fill: #63bf8d; 200 | } 201 | 202 | .module-3 { 203 | fill: #ff8801; 204 | } 205 | 206 | .module-4 { 207 | fill: #b9fc34; 208 | } 209 | 210 | .module-5 { 211 | fill: #90e0e0; 212 | } 213 | 214 | .module-6 { 215 | fill: #b4a3f5; 216 | } 217 | 218 | .module-7 { 219 | fill: #f92672; 220 | } 221 | 222 | .module-8 { 223 | fill: #e9e901; 224 | } 225 | 226 | .module-9 { 227 | fill: #83be69; 228 | } 229 | 230 | .module-10 { 231 | fill: #f1d18c; 232 | } 233 | 234 | .node:hover { 235 | fill: #000; 236 | } 237 | 238 | .node:hover, 239 | .node-source, 240 | .node-target { 241 | font: 700 12px "Helvetica Neue", Helvetica, Arial, sans-serif; 242 | cursor: pointer; 243 | } 244 | 245 | .node-source { 246 | fill: #ff5711; 247 | } 248 | 249 | .node-target { 250 | fill: #45aa73; 251 | } 252 | 253 | .link-source, 254 | .link-target { 255 | stroke-opacity: 1; 256 | stroke-width: 2px; 257 | } 258 | 259 | .link-source { 260 | stroke: #3dcd92; 261 | } 262 | 263 | .link-target { 264 | stroke: #ff5711; 265 | } 266 | 267 | @keyframes fadeOut { 268 | 0% { 269 | stroke-opacity: 0.2; 270 | } 271 | 272 | 100% { 273 | stroke-opacity: 0.075; 274 | } 275 | } 276 | 277 | @keyframes fadeIn { 278 | 0% { 279 | stroke-opacity: 0.075; 280 | } 281 | 282 | 100% { 283 | stroke-opacity: 0.2; 284 | } 285 | } 286 | 287 | .link-dimmed { 288 | stroke-opacity: 0.075; 289 | } 290 | 291 | 292 | /* Parse trees */ 293 | .tree-node { 294 | stroke-width: 2; 295 | stroke: #C0C0C0; 296 | fill: rgba(255, 255, 255, 1); 297 | } 298 | 299 | .tree-root { 300 | stroke-width: 2; 301 | fill: #7db6dd; 302 | stroke: #7db6dd; 303 | } 304 | 305 | .tree-leaf { 306 | cursor: default; 307 | stroke-width: 2; 308 | fill: rgba(160, 171, 136, 1); 309 | stroke: rgba(117, 119, 91, 1); 310 | } 311 | 312 | .tree-error { 313 | stroke-width: 2; 314 | fill: #dd8f7d; 315 | stroke: rgba(188, 106, 122, 1); 316 | } 317 | 318 | .tree-node text { 319 | cursor: default; 320 | font: 16px "Helvetica Neue", sans-serif; 321 | fill: rgba(41, 41, 41, 1); 322 | stroke: none; 323 | } 324 | 325 | .tree-leaf text, 326 | .tree-root text, 327 | .tree-error text { 328 | font: 16px "Helvetica Neue", sans-serif; 329 | fill: #ffffff; 330 | stroke: none; 331 | } 332 | 333 | .tree-link { 334 | stroke-width: 2px; 335 | fill: none; 336 | stroke: rgba(128, 128, 128, 1); 337 | } 338 | 339 | g .token-value { 340 | fill: #404040; 341 | stroke: none; 342 | font: 14pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 343 | } 344 | 345 | g .token-range { 346 | fill: rgba(0, 77, 98, 1); 347 | stroke: none; 348 | font: 8pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 349 | } 350 | 351 | .saveSVGButton { 352 | background-image: url(./save-svg-light.svg); 353 | width: 32px; 354 | height: 32px; 355 | 356 | margin-left: 8px; 357 | 358 | background-position: center; 359 | background-repeat: no-repeat; 360 | } 361 | 362 | .saveHTMLButton { 363 | background-image: url(./save-html-light.svg); 364 | width: 32px; 365 | height: 32px; 366 | 367 | background-position: center; 368 | background-repeat: no-repeat; 369 | } 370 | 371 | .headerIcon { 372 | width: 90px; 373 | height: 90px; 374 | margin-top: 20px; 375 | 376 | background-position: center; 377 | background-repeat: no-repeat; 378 | background-size: contain; 379 | } 380 | 381 | .rrdIcon { 382 | background-image: url(./rrd-light.svg); 383 | } 384 | 385 | .atnIcon { 386 | background-image: url(./atn-light.png); 387 | } 388 | 389 | g .rrd-warning { 390 | stroke: orange; 391 | } 392 | 393 | g .rrd-predicate { 394 | stroke: rgba(23, 159, 255, 0.5); 395 | } 396 | 397 | .atn-graph-color { 398 | color: crimson; 399 | } 400 | 401 | .rrd-graph-color { 402 | color: rgba(10, 188, 80, 1); 403 | } 404 | 405 | .call-graph-color { 406 | color: rgba(255, 191, 15, 1); 407 | } 408 | 409 | .call-graph-save-image { 410 | background: url('../misc/save-svg-light.png'); 411 | vertical-align: middle; 412 | margin-left: 5px; 413 | width: 24px; 414 | height: 24px; 415 | display: inline-block; 416 | cursor: pointer; 417 | } 418 | 419 | .parse-tree-color { 420 | color: rgba(49, 112, 212, 1); 421 | } 422 | 423 | .parse-tree-save-image { 424 | background: rgba(49, 112, 212, 1) url('../misc/save.png'); 425 | vertical-align: middle; 426 | margin-left: 5px; 427 | width: 24px; 428 | height: 24px; 429 | display: inline-block; 430 | cursor: pointer; 431 | } 432 | 433 | .switch label { 434 | width: 100%; 435 | height: 100%; 436 | margin: 0; 437 | padding: 0; 438 | display: block; 439 | position: absolute; 440 | top: 0; 441 | left: 0; 442 | z-index: 10; 443 | } 444 | 445 | .switch input { 446 | display: none; 447 | } 448 | 449 | .switch > span { 450 | display: inline-block; 451 | top: 3px; 452 | transition: left 0.2s; 453 | } 454 | 455 | .switch-border { 456 | height: 12px; 457 | width: 24px; 458 | position: relative; 459 | border: 1px solid rgba(49, 112, 212, 0.75); 460 | background-color: rgba(49, 112, 212, 0.75); 461 | border-radius: 3.5em; 462 | } 463 | 464 | .switch-handle-top { 465 | width: 12px; 466 | height: 12px; 467 | position: absolute; 468 | left: 0; 469 | top: 0; 470 | z-index: 4; 471 | background-color: white; 472 | border-radius: 2.5em; 473 | transition: left 0.2s; 474 | } 475 | 476 | .switch input:checked ~ .switch-handle-top { 477 | top: 0; 478 | left: 12px; 479 | } 480 | -------------------------------------------------------------------------------- /docs/grammars/GoslinFragments/light.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Mike Lischke. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | */ 5 | 6 | /* 7 | * This file contains all default CSS rules for the light vscode them, used for various diagrams and graphs. 8 | * Use the "antlr4.customCSS" setting in vscode to specify your own file, if you like to override some rules. 9 | * 10 | * Most of the appearance is defined here, while only some adjustments for the dark theme exist in dark.css. 11 | * This style sheet is also used for exported svg files. 12 | */ 13 | 14 | 15 | /* ATN graphs */ 16 | 17 | .transition { 18 | fill: none; 19 | stroke: #AAA; 20 | stroke-width: 2px; 21 | } 22 | 23 | .marker { 24 | fill: #999; 25 | stroke: none; 26 | } 27 | 28 | .stateLabel { 29 | font: bold 11pt "Helvetica Neue", Arial, sans-serif; 30 | fill: white; 31 | text-anchor: middle; 32 | pointer-events: none; 33 | } 34 | 35 | .stateTypeLabel { 36 | font: bold 7pt monospace; 37 | fill: #EEE; 38 | text-anchor: middle; 39 | pointer-events: none; 40 | } 41 | 42 | .linkLabel { 43 | font: 9pt monospace; 44 | fill: #606060; 45 | text-anchor: middle; 46 | pointer-events: none; 47 | white-space: pre; 48 | } 49 | 50 | .linkLabel > .heading { 51 | fill: cornflowerblue; 52 | font-weight: 800; 53 | } 54 | 55 | .linkLabel > .predicate { 56 | fill: gray; 57 | font-weight: 400; 58 | font-size: 7pt 59 | } 60 | 61 | .state { 62 | stroke: #505050; 63 | stroke-width: 3px; 64 | cursor: move; 65 | pointer-events: all; 66 | /*filter: url(#black-glow);*/ 67 | } 68 | 69 | .state.BASIC { 70 | fill: #AAA; 71 | } 72 | 73 | .state.START { 74 | fill: #36bde0; 75 | } 76 | 77 | .state.BSTART { 78 | fill: #f39900; 79 | } 80 | 81 | .state.PBSTART { 82 | fill: #98c000; 83 | } 84 | 85 | .state.SBSTART { 86 | fill: #607dbd; 87 | } 88 | 89 | .state.TSTART { 90 | fill: #ffd300; 91 | } 92 | 93 | .state.STOP { 94 | fill: #2baa5b; 95 | } 96 | 97 | .state.BEND { 98 | fill: #c2c269; 99 | } 100 | 101 | .state.SLBACK { 102 | fill: #608b4e; 103 | } 104 | 105 | .state.SLENTRY { 106 | fill: #a260cb; 107 | } 108 | 109 | .state.PLBACK { 110 | fill: #517979; 111 | } 112 | 113 | .state.LEND { 114 | fill: #9b90c3; 115 | } 116 | 117 | .state.RULE { 118 | fill: #b73645; 119 | } 120 | 121 | .state.RULE.recursive { 122 | fill: #36bde0; 123 | } 124 | 125 | 126 | /* Railroad diagrams */ 127 | 128 | /* The connection lines. */ 129 | svg.railroad-diagram path { 130 | stroke-width: 2; 131 | stroke: darkgray; 132 | fill: rgba(0, 0, 0, 0); 133 | } 134 | 135 | /* All text except comments. */ 136 | svg.railroad-diagram text { 137 | font: bold 12px Hack, "Source Code Pro", monospace; 138 | text-anchor: middle; 139 | fill: #404040; 140 | } 141 | 142 | /* Comment text */ 143 | svg.railroad-diagram text.comment { 144 | font: italic 10px Hack, "Source Code Pro", monospace; 145 | fill: #404040; 146 | } 147 | 148 | /* The terminal boxes. */ 149 | svg.railroad-diagram g.terminal rect { 150 | stroke-width: 2; 151 | stroke: #404040; 152 | fill: rgba(200, 200, 200, 1); 153 | } 154 | 155 | svg.railroad-diagram g.non-terminal rect { 156 | /* The non-terminal boxes. */ 157 | stroke-width: 2; 158 | stroke: #404040; 159 | fill: rgba(255, 255, 255, 1); 160 | } 161 | 162 | /* Multiple choice text, not working atm. */ 163 | svg.railroad-diagram text.diagram-text { 164 | font-size: 12px Hack, "Source Code Pro", monospace; 165 | fill: red; 166 | } 167 | 168 | /* Multiple choice text, not working atm. */ 169 | svg.railroad-diagram path.diagram-text { 170 | stroke-width: 1; 171 | stroke: red; 172 | fill: red; 173 | cursor: help; 174 | } 175 | 176 | /* Multiple choice text, not working atm. */ 177 | svg.railroad-diagram g.diagram-text:hover path.diagram-text { 178 | fill: #f00; 179 | } 180 | 181 | /* Call graphs */ 182 | 183 | .node { 184 | font: 200 10px "Helvetica Neue", Helvetica, Arial, sans-serif; 185 | } 186 | 187 | .link { 188 | stroke: #000; 189 | stroke-opacity: .2; 190 | fill: none; 191 | pointer-events: none; 192 | } 193 | 194 | .module-1 { 195 | fill: #0ca9fd; 196 | } 197 | 198 | .module-2 { 199 | fill: #63bf8d; 200 | } 201 | 202 | .module-3 { 203 | fill: #ff8801; 204 | } 205 | 206 | .module-4 { 207 | fill: #b9fc34; 208 | } 209 | 210 | .module-5 { 211 | fill: #90e0e0; 212 | } 213 | 214 | .module-6 { 215 | fill: #b4a3f5; 216 | } 217 | 218 | .module-7 { 219 | fill: #f92672; 220 | } 221 | 222 | .module-8 { 223 | fill: #e9e901; 224 | } 225 | 226 | .module-9 { 227 | fill: #83be69; 228 | } 229 | 230 | .module-10 { 231 | fill: #f1d18c; 232 | } 233 | 234 | .node:hover { 235 | fill: #000; 236 | } 237 | 238 | .node:hover, 239 | .node-source, 240 | .node-target { 241 | font: 700 12px "Helvetica Neue", Helvetica, Arial, sans-serif; 242 | cursor: pointer; 243 | } 244 | 245 | .node-source { 246 | fill: #ff5711; 247 | } 248 | 249 | .node-target { 250 | fill: #45aa73; 251 | } 252 | 253 | .link-source, 254 | .link-target { 255 | stroke-opacity: 1; 256 | stroke-width: 2px; 257 | } 258 | 259 | .link-source { 260 | stroke: #3dcd92; 261 | } 262 | 263 | .link-target { 264 | stroke: #ff5711; 265 | } 266 | 267 | @keyframes fadeOut { 268 | 0% { 269 | stroke-opacity: 0.2; 270 | } 271 | 272 | 100% { 273 | stroke-opacity: 0.075; 274 | } 275 | } 276 | 277 | @keyframes fadeIn { 278 | 0% { 279 | stroke-opacity: 0.075; 280 | } 281 | 282 | 100% { 283 | stroke-opacity: 0.2; 284 | } 285 | } 286 | 287 | .link-dimmed { 288 | stroke-opacity: 0.075; 289 | } 290 | 291 | 292 | /* Parse trees */ 293 | .tree-node { 294 | stroke-width: 2; 295 | stroke: #C0C0C0; 296 | fill: rgba(255, 255, 255, 1); 297 | } 298 | 299 | .tree-root { 300 | stroke-width: 2; 301 | fill: #7db6dd; 302 | stroke: #7db6dd; 303 | } 304 | 305 | .tree-leaf { 306 | cursor: default; 307 | stroke-width: 2; 308 | fill: rgba(160, 171, 136, 1); 309 | stroke: rgba(117, 119, 91, 1); 310 | } 311 | 312 | .tree-error { 313 | stroke-width: 2; 314 | fill: #dd8f7d; 315 | stroke: rgba(188, 106, 122, 1); 316 | } 317 | 318 | .tree-node text { 319 | cursor: default; 320 | font: 16px "Helvetica Neue", sans-serif; 321 | fill: rgba(41, 41, 41, 1); 322 | stroke: none; 323 | } 324 | 325 | .tree-leaf text, 326 | .tree-root text, 327 | .tree-error text { 328 | font: 16px "Helvetica Neue", sans-serif; 329 | fill: #ffffff; 330 | stroke: none; 331 | } 332 | 333 | .tree-link { 334 | stroke-width: 2px; 335 | fill: none; 336 | stroke: rgba(128, 128, 128, 1); 337 | } 338 | 339 | g .token-value { 340 | fill: #404040; 341 | stroke: none; 342 | font: 14pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 343 | } 344 | 345 | g .token-range { 346 | fill: rgba(0, 77, 98, 1); 347 | stroke: none; 348 | font: 8pt "Source Code Pro", "Hack", "Consolas", "Andale Mono", monospace; 349 | } 350 | 351 | .saveSVGButton { 352 | background-image: url(./save-svg-light.svg); 353 | width: 32px; 354 | height: 32px; 355 | 356 | margin-left: 8px; 357 | 358 | background-position: center; 359 | background-repeat: no-repeat; 360 | } 361 | 362 | .saveHTMLButton { 363 | background-image: url(./save-html-light.svg); 364 | width: 32px; 365 | height: 32px; 366 | 367 | background-position: center; 368 | background-repeat: no-repeat; 369 | } 370 | 371 | .headerIcon { 372 | width: 90px; 373 | height: 90px; 374 | margin-top: 20px; 375 | 376 | background-position: center; 377 | background-repeat: no-repeat; 378 | background-size: contain; 379 | } 380 | 381 | .rrdIcon { 382 | background-image: url(./rrd-light.svg); 383 | } 384 | 385 | .atnIcon { 386 | background-image: url(./atn-light.png); 387 | } 388 | 389 | g .rrd-warning { 390 | stroke: orange; 391 | } 392 | 393 | g .rrd-predicate { 394 | stroke: rgba(23, 159, 255, 0.5); 395 | } 396 | 397 | .atn-graph-color { 398 | color: crimson; 399 | } 400 | 401 | .rrd-graph-color { 402 | color: rgba(10, 188, 80, 1); 403 | } 404 | 405 | .call-graph-color { 406 | color: rgba(255, 191, 15, 1); 407 | } 408 | 409 | .call-graph-save-image { 410 | background: url('../misc/save-svg-light.png'); 411 | vertical-align: middle; 412 | margin-left: 5px; 413 | width: 24px; 414 | height: 24px; 415 | display: inline-block; 416 | cursor: pointer; 417 | } 418 | 419 | .parse-tree-color { 420 | color: rgba(49, 112, 212, 1); 421 | } 422 | 423 | .parse-tree-save-image { 424 | background: rgba(49, 112, 212, 1) url('../misc/save.png'); 425 | vertical-align: middle; 426 | margin-left: 5px; 427 | width: 24px; 428 | height: 24px; 429 | display: inline-block; 430 | cursor: pointer; 431 | } 432 | 433 | .switch label { 434 | width: 100%; 435 | height: 100%; 436 | margin: 0; 437 | padding: 0; 438 | display: block; 439 | position: absolute; 440 | top: 0; 441 | left: 0; 442 | z-index: 10; 443 | } 444 | 445 | .switch input { 446 | display: none; 447 | } 448 | 449 | .switch > span { 450 | display: inline-block; 451 | top: 3px; 452 | transition: left 0.2s; 453 | } 454 | 455 | .switch-border { 456 | height: 12px; 457 | width: 24px; 458 | position: relative; 459 | border: 1px solid rgba(49, 112, 212, 0.75); 460 | background-color: rgba(49, 112, 212, 0.75); 461 | border-radius: 3.5em; 462 | } 463 | 464 | .switch-handle-top { 465 | width: 12px; 466 | height: 12px; 467 | position: absolute; 468 | left: 0; 469 | top: 0; 470 | z-index: 4; 471 | background-color: white; 472 | border-radius: 2.5em; 473 | transition: left 0.2s; 474 | } 475 | 476 | .switch input:checked ~ .switch-handle-top { 477 | top: 0; 478 | left: 12px; 479 | } 480 | -------------------------------------------------------------------------------- /FattyAcids.g4: -------------------------------------------------------------------------------- 1 | /* 2 | * MIT License 3 | * 4 | * Copyright (c) the authors (listed in global LICENSE file) 5 | * 6 | * Permission is hereby granted, free of charge, to any person obtaining a copy 7 | * of this software and associated documentation files (the 'Software'), to deal 8 | * in the Software without restriction, including without limitation the rights 9 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | * copies of the Software, and to permit persons to whom the Software is 11 | * furnished to do so, subject to the following conditions:; 12 | * 13 | * The above copyright notice and this permission notice shall be included in all 14 | * copies or substantial portions of the Software. 15 | * 16 | * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | * LIABILITY, WHether IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | * SOFTWARE. 23 | */ 24 | 25 | grammar FattyAcids; 26 | 27 | 28 | /* first rule is always start rule, EOF = end of file */ 29 | lipid : fatty_acid EOF; 30 | 31 | fatty_acid: regular_fatty_acid | wax | car | ethanolamine | amine | acetic_acid; 32 | fatty_acid_recursion: regular_fatty_acid; 33 | wax : wax_ester regular_fatty_acid; 34 | wax_ester : fatty_acid_recursion SPACE | ROB fatty_acid_recursion RCB SPACE | methyl SPACE | methyl DASH; 35 | methyl : 'methyl'; 36 | car : car_positions DASH car_fa '-4-(' car_spec ')butanoate'; 37 | car_fa : SOB regular_fatty_acid SCB | COB regular_fatty_acid CCB; 38 | car_spec : 'trimethylammonio' | 'trimethylazaniumyl'; 39 | 40 | car_positions : functional_position | ROB car_position RCB DASH functional_position; 41 | car_position : number; 42 | ethanolamine : amine_prefix ROB fatty_acid_recursion RCB DASH 'ethanolamine'; 43 | amine : amine_prefix amine_n DASH regular_fatty_acid SPACE 'amine'; 44 | amine_prefix : 'n-' | '(+/-)n-'; 45 | amine_n : fatty_acid_recursion | ROB fatty_acid_recursion RCB | methyl; 46 | acetic_acid : acetic_recursion 'acetic acid'; 47 | acetic_recursion : ROB fatty_acid_recursion RCB | SOB fatty_acid_recursion SCB | COB fatty_acid_recursion CCB; 48 | 49 | regular_fatty_acid : ate_type | 50 | ol_position_description | 51 | additional_len acid_type_regular | 52 | additional_len acid_type_double | 53 | additional_descriptions double_bond_positions fatty_length acid_type_double | 54 | sum_add fatty_length acid_type_regular | 55 | sum_add fatty_length acid_type_double | 56 | fg_pos_summary fatty_length acid_type_double | 57 | /* double_bond_positions fatty_length acid_type_double | */ 58 | fg_pos_summary double_bond_positions fatty_length acid_type_double | 59 | sum_add double_bond_positions fatty_length acid_type_double; 60 | 61 | additional_len : additional_descriptions fatty_length | fatty_length; 62 | sum_add : fg_pos_summary additional_descriptions; 63 | ol_position_description : ol_position DASH fatty_length ol_ending | 64 | fg_pos_summary ol_position DASH fatty_length ol_ending | 65 | fg_pos_summary DASH ol_position DASH fatty_length ol_ending | 66 | sum_add ol_position DASH fatty_length ol_ending | 67 | sum_add DASH ol_position DASH fatty_length ol_ending | 68 | additional_descriptions ol_position DASH fatty_length ol_ending | 69 | additional_descriptions DASH ol_position DASH fatty_length ol_ending; 70 | ol_ending : 'ol' | 'nol'; 71 | ol_position : ol_pos | ol_pos PRIME | ol_pos cistrans_b | ol_pos PRIME cistrans_b; 72 | ol_pos : number; 73 | 74 | 75 | fatty_length : notation_specials | notation_regular | cycle notation_specials | cycle notation_regular | tetrahydrofuran notation_specials; 76 | notation_regular : notation_last_digit | notation_last_digit notation_second_digit | notation_second_digit; 77 | /* 1, 2, 2, 3, 4, 4, 4, 5, 6, 7, 8, 9 */ 78 | notation_last_digit : 'un' | 'hen' | 'do' | 'di' | 'tri' | 'buta' | 'but' | 'tetra' | 'penta' | 'pent' | 'hexa' | 'hex' | 'hepta' | 'hept' | 'octa' | 'oct' | 'nona' | 'non'; 79 | /* 0, 10, 10, 20, 20, 30 */ 80 | notation_second_digit: 'deca' | 'dec' | 'cosa' | 'cos' | 'eicosa' | 'eicos' | 'triaconta' | 'triacont' | 'tetraconta' | 'tetracont' | 'pentaconta' | 'pantacont' | 'hexaconta' | 'hexacont' | 'heptaconta' | 'heptacont' | 'octaconta' | 'octacont' | 'nonaconta' | 'nonacont'; 81 | /* 4, 10, 20, 21, 21, 30, 30 */ 82 | notation_specials: 'etha' | 'eth' | 'buta' | 'but' | 'butr' | 'valer' | 'propa' | 'propi' | 'propio' | 'prop' | 'eicosa' | 'eicos' | 'icosa' | 'icos' | prosta | isoprop | furan; 83 | isoprop: 'isoprop'; 84 | prosta : 'prosta' | 'prost' | 'prostan'; 85 | tetrahydrofuran : 'tetrahydro'; 86 | furan : 'furan'; 87 | 88 | acid_type_regular: acid_single_type | acid_single_type cyclo_position; 89 | acid_type_double: db_num acid_type_regular; 90 | acid_single_type: 'noic acid' | 'nic acid' | 'nal' | dioic | 'noyloxy' | 'noyl' | ol | dial | 'noate' | 'nate' | coa | yl | 'ne' | 'yloxy'; 91 | coa : 'noyl' coa_ending | 'yl' coa_ending | 'nyl' coa_ending; 92 | coa_ending : 'coa' | '-coa'; 93 | yl : 'yl' | 'nyl' | 'n' DASH yl_ending DASH 'yl' | DASH yl_ending DASH 'yl'; 94 | yl_ending: number; 95 | 96 | db_num: DASH double_bond_positions DASH db_length db_suffix | DASH double_bond_positions DASH db_suffix | db_length db_suffix | db_suffix; 97 | db_suffix : 'e' | 'ne' | 'ene' | 'en' | 'n'; 98 | dial : 'dial'; 99 | db_length: notation_regular; 100 | dioic : 'n' DASH functional_positions DASH dioic_acid | DASH functional_positions DASH dioic_acid | 'ne' dioic_acid; 101 | dioic_acid : 'dioic acid'; 102 | ol : 'nol' | db_suffix DASH hydroxyl_positions DASH notation_regular 'ol' | db_suffix DASH hydroxyl_position DASH 'ol' | DASH hydroxyl_positions DASH notation_regular 'ol' | DASH hydroxyl_position DASH 'ol'; 103 | ate_type : ate | additional_descriptions ate; 104 | ate : 'formate' | 'acetate' | 'butyrate' | 'propionate' | 'valerate' | isobut; 105 | isobut : 'isobutyrate'; 106 | 107 | 108 | hydroxyl_positions : hydroxyl_positions pos_separator hydroxyl_positions | hydroxyl_position; 109 | hydroxyl_position : hydroxyl_number | hydroxyl_number cistrans_b | hydroxyl_number PRIME cistrans_b; 110 | hydroxyl_number : number; 111 | 112 | additional_descriptions : additional_descriptions_m | additional_descriptions_m DASH; 113 | additional_descriptions_m : additional_descriptions_m additional_descriptions_m | additional_description; 114 | additional_description : functional_group | functional_group DASH | pos_neg | reduction | reduction DASH; 115 | functional_group : multi_functional_group | single_functional_group | epoxy | methylene_group; 116 | pos_neg : '(+/-)-' | '(+)-' | '(-)-'; 117 | 118 | double_bond_positions : double_bond_positions_pure DASH | ROB double_bond_positions_pure RCB DASH | double_bond_positions_pure | ROB double_bond_positions_pure RCB; 119 | double_bond_positions_pure : double_bond_positions_pure pos_separator double_bond_positions_pure | double_bond_position; 120 | double_bond_position : db_number | db_number cistrans_b | db_number PRIME | db_number PRIME cistrans_b | cistrans_b; 121 | cistrans_b : cistrans | ROB cistrans RCB; 122 | cistrans : 'e' | 'z' | 'r' | 's' | 'a' | 'b' | 'c'; 123 | db_number : number; 124 | fg_pos_summary : functional_positions DASH; 125 | 126 | multi_functional_group : functional_positions DASH functional_length functional_group_type | functional_positions DASH functional_group_type; 127 | functional_length : notation_last_digit | notation_second_digit | notation_last_digit notation_second_digit; 128 | functional_positions : functional_positions_pure | ROB functional_positions_pure RCB; 129 | functional_positions_pure : functional_positions_pure pos_separator functional_positions_pure | functional_position; 130 | single_functional_group : functional_position DASH functional_group_type_name | functional_position functional_group_type_name | recursion_description | recursion_description DASH; 131 | functional_group_type_name : functional_group_type | ROB functional_group_type RCB; 132 | functional_group_type : 'hydroxy' | 'oxo' | 'bromo' | 'thio' | 'keto' | 'methyl' | 'hydroperoxy' | homo | 'phospho' | 'fluro' | 'fluoro' | 'chloro' | methylene | 'sulfooxy' | 'amino' | 'sulfanyl' | 'methoxy' | 'iodo' | 'cyano' | 'nitro' | 'oh' | 'thio' | 'mercapto' | 'carboxy' | 'acetoxy' | 'cysteinyl' | 'phenyl' | 's-glutathionyl' | 's-cysteinyl' | 'butylperoxy' | 'dimethylarsinoyl' | 'methylsulfanyl' | 'imino' | 's-cysteinylglycinyl'; 133 | epoxy : functional_position pos_separator functional_position DASH 'epoxy' | functional_position ROB functional_position RCB DASH 'epoxy' | ROB functional_position pos_separator functional_position RCB DASH 'epoxy'; 134 | methylene_group : functional_positions DASH methylene; 135 | methylene : 'methylene'; 136 | /* acetoxy : 'acetoxy'; */ 137 | 138 | functional_position : functional_position_pure | ROB functional_position_pure RCB; 139 | functional_position_pure : functional_pos | functional_pos PRIME | functional_pos func_stereo | functional_pos PRIME func_stereo | func_stereo; 140 | functional_pos : number; 141 | func_stereo : cistrans_b; 142 | reduction : functional_position DASH 'nor' | functional_positions DASH functional_length 'nor'; 143 | homo : 'homo'; 144 | 145 | cycle : 'cyclo'; 146 | cyclo_position : '-cyclo' SOB functional_position pos_separator functional_position SCB | ' cyclo' SOB functional_position pos_separator functional_position SCB | ' cyclo ' SOB functional_position pos_separator functional_position SCB | '-cyclo-' SOB functional_position pos_separator functional_position SCB | ' cyclo-' SOB functional_position pos_separator functional_position SCB; 147 | 148 | recursion_description : recursion_position DASH recursion; 149 | recursion : fatty_acid | ROB fatty_acid RCB | SOB fatty_acid SCB | COB fatty_acid CCB; 150 | recursion_position : ROB functional_positions RCB | recursion_pos | recursion_pos cistrans_b; 151 | recursion_pos : number; 152 | 153 | 154 | 155 | 156 | /* separators */ 157 | SPACE : ' '; 158 | COLON : ':'; 159 | SEMICOLON : ';'; 160 | DASH : '-' | '‐'; 161 | UNDERSCORE : '_'; 162 | SLASH : '/'; 163 | BACKSLASH : '\\'; 164 | COMMA: ','; 165 | ROB: '('; 166 | RCB: ')'; 167 | SOB: '['; 168 | SCB: ']'; 169 | COB: '{'; 170 | CCB: '}'; 171 | PRIME: '\''; 172 | pos_separator : COMMA; 173 | 174 | 175 | 176 | number : digit | digit number; 177 | digit : '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'; 178 | 179 | 180 | -------------------------------------------------------------------------------- /GoslinFragments.g4: -------------------------------------------------------------------------------- 1 | /* 2 | * MIT License 3 | * 4 | * Copyright (c) the authors (listed in global LICENSE file) 5 | * 6 | * Permission is hereby granted, free of charge, to any person obtaining a copy 7 | * of this software and associated documentation files (the 'Software'), to deal 8 | * in the Software without restriction, including without limitation the rights 9 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | * copies of the Software, and to permit persons to whom the Software is 11 | * furnished to do so, subject to the following conditions:; 12 | * 13 | * The above copyright notice and this permission notice shall be included in all 14 | * copies or substantial portions of the Software. 15 | * 16 | * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | * LIABILITY, WHether IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | * SOFTWARE. 23 | */ 24 | 25 | /* This is a BNF / ANTLR4 grammar for lipid subspecies identifiers following 26 | * J.K. Pauling et al. 2017, PLoS One, 12(11):e0188394. 27 | */ 28 | 29 | grammar GoslinFragments; 30 | 31 | /* first rule is always start rule */ 32 | lipid : lipid_eof EOF; 33 | lipid_eof : just_lipid | just_lipid FRAGMENT_SEPARATOR fragment_name; 34 | just_lipid : lipid_pure | lipid_pure adduct_info; 35 | lipid_pure : gl | pl | sl | sterol | mediatorc | saccharolipid; 36 | 37 | /* rules for fragments */ 38 | fragment_name : frag_char; 39 | frag_char : frag_char frag_char | character | sign; 40 | sign : '-' | '+' | ' ' | ',' | '(' | ')' | '[' | ']' | ':' | '*' | ';'; 41 | 42 | /* adduct information */ 43 | adduct_info : '[M' adduct ']' charge charge_sign | adduct_separator '[M' adduct ']' charge charge_sign; 44 | adduct : '+H' | '+2H' | '+NH4' | '-H' | '-2H' | '+HCOO' | '+CH3COO' | charge_sign arbitrary_adduct; 45 | arbitrary_adduct : adduct4 | adduct4 adduct4; 46 | adduct4 : adduct2 | adduct2 adduct2; 47 | adduct2 : character | character character; 48 | 49 | fa2 : fa2_unsorted | fa2_sorted; 50 | fa2_unsorted: fa DASH fa | fa UNDERSCORE fa; 51 | fa2_sorted: fa SLASH fa | fa BACKSLASH fa; 52 | fa3 : fa3_unsorted | fa3_sorted; 53 | fa3_unsorted: fa DASH fa DASH fa | fa UNDERSCORE fa UNDERSCORE fa; 54 | fa3_sorted: fa SLASH fa SLASH fa | fa BACKSLASH fa BACKSLASH fa; 55 | fa4 : fa4_unsorted | fa4_sorted; 56 | fa4_unsorted: fa DASH fa DASH fa DASH fa | fa UNDERSCORE fa UNDERSCORE fa UNDERSCORE fa; 57 | fa4_sorted: fa SLASH fa SLASH fa SLASH fa | fa BACKSLASH fa BACKSLASH fa BACKSLASH fa; 58 | 59 | /* glycerolipid rules */ 60 | gl : sqml | mgl | dgl | sgl | tgl; 61 | sqml : hg_sqml_full headgroup_separator fa; 62 | mgl : hg_mgl_full headgroup_separator fa; 63 | dgl : hg_dgl_full headgroup_separator gl_species | hg_dgl_full headgroup_separator dgl_subspecies; 64 | sgl : hg_sgl_full headgroup_separator gl_species | hg_sgl_full headgroup_separator dgl_subspecies; 65 | tgl : hg_tgl_full headgroup_separator gl_species | hg_tgl_full headgroup_separator tgl_subspecies; 66 | gl_species : fa; 67 | dgl_subspecies : fa2; 68 | tgl_subspecies : fa3; 69 | 70 | hg_sqml_full : hg_sqml | hg_mgl heavy_hg; 71 | hg_mgl_full : hg_mgl | hg_mgl heavy_hg; 72 | hg_dgl_full : hg_dgl | hg_dgl heavy_hg; 73 | hg_sgl_full : hg_sgl | hg_sgl heavy_hg; 74 | hg_tgl_full : hg_tgl | hg_tgl heavy_hg; 75 | 76 | hg_sqml : 'SQMG'; 77 | hg_mgl : 'MAG'; 78 | hg_dgl : 'DAG'; 79 | hg_sgl : 'MGDG' | 'DGDG' | 'SQDG'; 80 | hg_tgl : 'TAG'; 81 | 82 | 83 | 84 | /* phospholipid rules */ 85 | pl : lpl | dpl | tpl | pl_o | cl | mlcl | dlcl; 86 | pl_o : lpl_o | dpl_o; 87 | lpl : hg_lplc headgroup_separator fa; 88 | lpl_o : hg_lpl_oc plasmalogen_separator fa; 89 | dpl : hg_plc headgroup_separator pl_species | hg_plc headgroup_separator pl_subspecies; 90 | tpl : hg_tplc headgroup_separator pl_species | hg_tplc headgroup_separator tpl_subspecies; 91 | dpl_o : hg_pl_oc plasmalogen_separator pl_species | hg_pl_oc plasmalogen_separator pl_subspecies; 92 | dlcl : hg_dlclc headgroup_separator pl_species | hg_dlclc headgroup_separator dlcl_subspecies; 93 | mlcl : hg_mlclc headgroup_separator pl_species | hg_mlclc headgroup_separator mlcl_subspecies; 94 | cl : hg_clc headgroup_separator pl_species | hg_clc headgroup_separator cl_subspecies; 95 | 96 | pl_species : fa; 97 | pl_subspecies : fa2; 98 | tpl_subspecies : fa3; 99 | dlcl_subspecies : fa2; 100 | mlcl_subspecies : fa3; 101 | cl_subspecies : fa4; 102 | 103 | heavy_hg : heavy; 104 | 105 | 106 | hg_clc : hg_cl | hg_cl heavy_hg; 107 | hg_cl : 'CL'; 108 | hg_mlclc : hg_mlcl | hg_mlcl heavy_hg; 109 | hg_mlcl : 'MLCL'; 110 | hg_dlclc : hg_dlcl | hg_dlcl heavy_hg; 111 | hg_dlcl : 'DLCL'; 112 | hg_plc : hg_pl | hg_pl heavy_hg; 113 | hg_pl : 'BMP' | 'CDP-DAG' | 'DMPE' | 'MMPE' | 'PA' | 'PC' | 'PE' | 'PEt' | 'PG' | 'PI' | hg_pip | 'PS' | 'LBPA' | 'PGP' | 'PPA' | 'Glc-GP' | '6-Ac-Glc-GP' | hg_pim | 'PnC' | 'PnE' | 'PT' | 'PE-NMe2' | 'PE-NMe' | 'PIMIP' | 'CDPDAG'; 114 | hg_pim : 'PIM' hg_pim_number; 115 | hg_pim_number : number; 116 | hg_pip : hg_pip_pure | hg_pip_pure hg_pip_m | hg_pip_pure hg_pip_d | hg_pip_pure hg_pip_t; 117 | hg_pip_pure : 'PIP'; 118 | hg_pip_m : '[3\']' | '[4\']' | '[5\']'; 119 | hg_pip_d : '2' | '2[3\',4\']' | '2[4\',5\']' | '2[3\',5\']'; 120 | hg_pip_t : '3' | '3[3\',4\',5\']'; 121 | hg_tplc : hg_tpl | hg_tpl heavy_hg; 122 | hg_tpl : 'SLBPA' | 'NAPE'; 123 | hg_lplc : hg_lpl | hg_lpl heavy_hg; 124 | hg_lpl : 'LPA' | 'LPC' | 'LPE' | 'LPG' | 'LPI' | 'LPS' | hg_lpim | 'CPA' | 'LCDPDAG' | 'LDMPE' | 'LMMPE' | 'LPIMIP' | 'LPIN'; 125 | hg_lpim : 'LPIM' hg_lpim_number; 126 | hg_lpim_number : number; 127 | hg_lpl_oc : hg_lpl_o ' O' | hg_lpl_o heavy_hg ' O'; 128 | hg_lpl_o : hg_lpl; 129 | hg_pl_oc : hg_pl_o ' O' | hg_pl_o heavy_hg ' O'; 130 | hg_pl_o : hg_pl; 131 | 132 | 133 | 134 | /* sphingolipid rules */ 135 | sl : lsl | dsl; 136 | lsl : hg_lslc headgroup_separator lcb; 137 | dsl : hg_dslc headgroup_separator sl_species | hg_dslc headgroup_separator sl_subspecies; 138 | 139 | sl_species : lcb; 140 | sl_subspecies : lcb sorted_fa_separator fa; 141 | 142 | hg_lslc : hg_lsl | hg_lsl heavy_hg; 143 | hg_lsl : 'LCB' | 'LCBP' | 'LHexCer' | 'LSM'; 144 | hg_dslc : hg_dsl | hg_dsl heavy_hg; 145 | hg_dsl : 'Cer' | 'CerP' | 'EPC' | 'GB4' | 'GD3' | 'GB3' | 'GM1' | 'GM3' | 'GM4' | 'Hex3Cer' | 'Hex2Cer' | 'HexCer' | 'IPC' | 'M(IP)2C' | 'MIPC' | 'SHexCer' | 'SM' | 'FMC-5' | 'FMC-6' ; 146 | 147 | 148 | 149 | /* sterol lipids */ 150 | sterol : stc | ste | stes; 151 | stc : st | st heavy_hg; 152 | st : 'Ch' | 'Cholesterol' | 'ST 27:1;1' | 'ST 27:2;1' | 'ST 28:3;1' | 'ST 30:2;1' | 'ST 29:2;1' | 'ST 28:2;1' | 'Desmosterol' | 'Stigmasterol' | 'Ergosterol' | 'Lanosterol'; 153 | ste : hg_stc sorted_fa_separator fa; 154 | stes : hg_stcs headgroup_separator fa; 155 | hg_stc : hg_ste | hg_ste heavy_hg; 156 | hg_ste : 'SE 27:1' | 'SE 27:2' | 'SE 28:3' | 'SE 30:2' | 'SE 29:2' | 'SE 28:2'; 157 | hg_stcs : hg_stes | hg_ste heavy_hg; 158 | hg_stes : 'ChE' | 'CE'; 159 | 160 | 161 | /* mediator lipids */ 162 | mediatorc : mediator | mediator heavy_hg; 163 | mediator : '10-HDoHE' | '11-HDoHE' | '11-HETE' | '11,12-DHET' | '11(12)-EET'| '12-HEPE' | '12-HETE' | '12-HHTrE' | '12-OxoETE' | '12(13)-EpOME' | '13-HODE' | '13-HOTrE' | '14,15-DHET' | '14(15)-EET' | '14(15)-EpETE' | '15-HEPE' | '15-HETE' | '15d-PGJ2' | '16-HDoHE' | '16-HETE' | '18-HEPE' | '5-HEPE' | '5-HETE' | '5-HpETE' | '5-OxoETE' | '5,12-DiHETE' | '5,6-DiHETE' | '5,6,15-LXA4' | '5(6)-EET' | '8-HDoHE' | '8-HETE' | '8,9-DHET' | '8(9)-EET' | '9-HEPE' | '9-HETE' | '9-HODE' | '9-HOTrE' | '9(10)-EpOME' | 'AA' | 'alpha-LA' | 'DHA' | 'EPA' | 'Linoleic acid' | 'LTB4' | 'LTC4' | 'LTD4' | 'Maresin 1' | 'Palmitic acid' | 'PGB2' | 'PGD2' | 'PGE2' | 'PGF2alpha' | 'PGI2' | 'Resolvin D1' | 'Resolvin D2' | 'Resolvin D3' | 'Resolvin D5' | 'tetranor-12-HETE' | 'TXB1' | 'TXB2' | 'TXB3'; 164 | 165 | 166 | 167 | 168 | /* saccharolipids rules */ 169 | saccharolipid : sac_di | sac_f; 170 | sac_di : hg_sac_di_c headgroup_separator sac_species | hg_sac_di_c headgroup_separator sac_di_subspecies; 171 | hg_sac_di_c : hg_sac_di | hg_sac_di heavy_hg; 172 | hg_sac_di : 'DAT' | 'AC2SGL'; 173 | sac_f : hg_sac_f_c headgroup_separator sac_species | hg_sac_f_c headgroup_separator sac_f_subspecies; 174 | hg_sac_f_c : hg_sac_f | hg_sac_f heavy_hg; 175 | hg_sac_f : 'PAT16' | 'PAT18'; 176 | 177 | sac_species : fa; 178 | sac_di_subspecies : fa2; 179 | sac_f_subspecies : fa4; 180 | 181 | 182 | 183 | /* generic rules */ 184 | fa : fa_pure | fa_pure heavy_fa | fa_pure ether | fa_pure ether heavy_fa; 185 | heavy_fa : heavy; 186 | fa_pure : carbon carbon_db_separator db | carbon carbon_db_separator db db_hydroxyl_separator hydroxyl; 187 | ether : 'a' | 'p'; 188 | lcb : lcb_pure | lcb_pure heavy_lcb; 189 | heavy_lcb : heavy; 190 | lcb_pure : carbon carbon_db_separator db db_hydroxyl_separator hydroxyl | old_hydroxyl carbon carbon_db_separator db; 191 | carbon : number; 192 | db : db_count | db_count db_positions; 193 | db_count : number; 194 | db_positions : ROB db_position RCB; 195 | db_position : db_single_position | db_position db_position_separator db_position; 196 | db_single_position : db_position_number | db_position_number cistrans; 197 | db_position_number : number; 198 | cistrans : 'E' | 'Z'; 199 | hydroxyl : number; 200 | old_hydroxyl : 'd' | 't'; 201 | number : digit | digit number; 202 | digit : '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'; 203 | 204 | 205 | 206 | 207 | 208 | heavy : '(+' isotopes ')'; 209 | isotopes : isotopes isotopes | isotope; 210 | isotope : '[' isotope_number ']' isotope_element isotope_count | '[' isotope_number ']' isotope_element; 211 | isotope_number : number; 212 | isotope_element : element; 213 | isotope_count : number; 214 | element : 'C' | 'H' | 'O' | 'N' | 'P' | 'S'; 215 | 216 | /* separators */ 217 | SPACE : ' '; 218 | COLON : ':'; 219 | SEMICOLON : ';'; 220 | DASH : '-'; 221 | UNDERSCORE : '_'; 222 | SLASH : '/'; 223 | BACKSLASH : '\\'; 224 | COMMA: ','; 225 | ROB: '('; 226 | RCB: ')'; 227 | FRAGMENT_SEPARATOR : ' - '; 228 | 229 | sorted_fa_separator : SLASH | BACKSLASH; 230 | adduct_separator : SPACE; 231 | unsorted_fa_separator : DASH | UNDERSCORE; 232 | plasmalogen_separator : headgroup_separator | DASH; 233 | headgroup_separator : SPACE; 234 | carbon_db_separator : COLON; 235 | db_hydroxyl_separator : SEMICOLON; 236 | db_position_separator : COMMA; 237 | round_open_bracket : ROB; 238 | round_close_bracket : RCB; 239 | 240 | character : 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z' |'0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'; 241 | charge : '1' | '2' | '3' | '4'; 242 | charge_sign : '-' | '+'; 243 | -------------------------------------------------------------------------------- /testfiles/lipid-masses.csv: -------------------------------------------------------------------------------- 1 | Molecule List Name,Precursor Name,Precursor Ion Formula,Precursor Adduct,Precursor m/z,Precursor Charge 2 | PA,PA 16:0-18:1,C37H71O8P,[M-H]1-,673.4813805,-1 3 | PA,PA 16:0-18:1,C37H71O8P,[M-H]1-,673.4813805,-1 4 | PA,PA 16:0-18:1,C37H71O8P,[M-H]1-,673.4813805,-1 5 | PA,PA 16:0-18:1,C37H71O8P,[M-H]1-,673.4813805,-1 6 | PC,PC 21:0-22:6,C51H90NO8P,[M+CH3COO]1-,934.6542591,-1 7 | PC,PC 21:0-22:6,C51H90NO8P,[M+HCOO]1-,920.6386091,-1 8 | PC,PC 21:0-22:6,C51H90NO8P,[M+CH3COO]1-,934.6542591,-1 9 | PC,PC 21:0-22:6,C51H90NO8P,[M+HCOO]1-,920.6386091,-1 10 | PC,PC 21:0-22:6,C51H90NO8P,[M+H]1+,876.6476822,1 11 | PE,PE 17:0-17:0,C39H78NO8P,[M+H]1+,720.5537818,1 12 | PE,PE 17:0-17:0,C39H78NO8P,[M-H]1-,718.5392298,-1 13 | PG,PG 17:0-20:4,C43H77O10P,[M-H]1-,783.51816,-1 14 | PG,PG 17:0-20:4,C43H77O10P,[M-H]1-,783.51816,-1 15 | PG,PG 17:0-20:4,C43H77O10P,[M+H]1+,785.532712,1 16 | PI,PI 21:0-22:6,C52H89O13P,[M-H]1-,951.5968043,-1 17 | PI,PI 21:0-22:6,C52H89O13P,[M-H]1-,951.5968043,-1 18 | PI,PI 21:0-22:6,C52H89O13P,[M+H]1+,953.6113563,1 19 | PS,PS 12:0-13:0,C31H60NO10P,[M-H]1-,636.3882084,-1 20 | PS,PS 12:0-13:0,C31H60NO10P,[M-H]1-,636.3882084,-1 21 | PS,PS 12:0-13:0,C31H60NO10P,[M+H]1+,638.4027604,1 22 | PIP,PIP 17:0-20:4,C46H82O16P2,[M-H]1-,951.500535,-1 23 | PIP,PIP 17:0-20:4,C46H82O16P2,[M-H]1-,951.500535,-1 24 | PIP,PIP 17:0-20:4,C46H82O16P2,[M-H]1-,951.500535,-1 25 | PIP,PIP 17:0-20:4,C46H82O16P2,[M-H]1-,951.500535,-1 26 | PIP,PIP 17:0-20:4,C46H82O16P2,[M-H]1-,951.500535,-1 27 | PIP2,PIP2 17:0-20:4,C46H83O19P3,[M-H]1-,1031.466866,-1 28 | PIP2,PIP2 17:0-20:4,C46H83O19P3,[M-H]1-,1031.466866,-1 29 | PIP2,PIP2 17:0-20:4,C46H83O19P3,[M-H]1-,1031.466866,-1 30 | PIP2,PIP2 17:0-20:4,C46H83O19P3,[M-H]1-,1031.466866,-1 31 | PIP3,PIP3 17:0-20:4,C46H84O22P4,[M-H]1-,1111.433197,-1 32 | PIP3,PIP3 17:0-20:4,C46H84O22P4,[M-H]1-,1111.433197,-1 33 | PIP3,PIP3 17:0-20:4,C46H84O22P4,[M-H]1-,1111.433197,-1 34 | PIP3,PIP3 17:0-20:4,C46H84O22P4,[M-H]1-,1111.433197,-1 35 | MG,MAG 16:0,C19H38O4,[M+NH4]1+,348.3108354,1 36 | MG,MAG 16:0,C19H38O4,[M+NH4]1+,348.3108354,1 37 | DG,DAG 16:0-16:0,C35H68O5,[M+NH4]1+,586.5405011,1 38 | DG,DAG 16:0-16:0,C35H68O5,[M+NH4]1+,586.5405011,1 39 | TG,TAG 14:0-14:0-14:0,C45H86O6,[M+NH4]1+,740.6762664,1 40 | TG,TAG 14:0-14:0-14:0,C45H86O6,[M+NH4]1+,740.6762664,1 41 | CL,CL 18:1-18:1-18:1-18:1,C81H150O17P2,[M-H]1-,1456.027552,-1 42 | CL,CL 18:1-18:1-18:1-18:1,C81H150O17P2,[M-H]1-,1456.027552,-1 43 | CL,CL 18:1-18:1-18:1-18:1,C81H150O17P2,[M-H]1-,1456.027552,-1 44 | CL,CL 18:1-18:1-18:1-18:1,C81H150O17P2,[M-H]1-,1456.027552,-1 45 | LCL,MLCL 18:1-18:1-18:1,C63H118O16P2,[M-H]1-,1191.782236,-1 46 | LCL,MLCL 18:1-18:1-18:1,C63H118O16P2,[M-H]1-,1191.782236,-1 47 | LCL,MLCL 18:1-18:1-18:1,C63H118O16P2,[M-H]1-,1191.782236,-1 48 | LCL,MLCL 18:1-18:1-18:1,C63H118O16P2,[M-H]1-,1191.782236,-1 49 | Cer,Cer 18:1;2/16:0,C34H67NO3,[M+H]1+,538.5193712,1 50 | Cer,Cer 18:1;2/16:0,C34H67NO3,[M+H]1+,538.5193712,1 51 | Cer,Cer 18:1;2/16:0,C34H67NO3,[M+HCOO]1-,582.5102981,-1 52 | Cer,Cer 18:1;2/16:0,C34H67NO3,[M-H]1-,536.5048192,-1 53 | Cer,Cer 18:1;2/16:0,C34H67NO3,[M-H]1-,536.5048192,-1 54 | CerP,CerP 18:1;2/12:0,C30H60NO6P,[M+H]1+,562.4231019,1 55 | CerP,CerP 18:1;2/12:0,C30H60NO6P,[M+H]1+,562.4231019,1 56 | CerP,CerP 18:1;2/12:0,C30H60NO6P,[M-H]1-,560.4085499,-1 57 | HexCer,HexCer 18:1;2/12:0,C36H69NO8,[M+H]1+,644.5095945,1 58 | HexCer,HexCer 18:1;2/12:0,C36H69NO8,[M+H]1+,644.5095945,1 59 | HexCer,HexCer 18:1;2/12:0,C36H69NO8,[M+H]1+,644.5095945,1 60 | HexCer,HexCer 18:1;2/12:0,C36H69NO8,[M+HCOO]1-,688.5005213,-1 61 | HexCer,HexCer 18:1;2/12:0,C36H69NO8,[M-H]1-,642.4950425,-1 62 | SHexCer,SHexCer 18:1;2/12:0,C36H69NO11S,[M+H]1+,724.466409,1 63 | SHexCer,SHexCer 18:1;2/12:0,C36H69NO11S,[M+H]1+,724.466409,1 64 | SHexCer,SHexCer 18:1;2/12:0,C36H69NO11S,[M+H]1+,724.466409,1 65 | SHexCer,SHexCer 18:1;2/12:0,C36H69NO11S,[M-H]1-,722.451857,-1 66 | SHexCer,SHexCer 18:1;2/12:0,C36H69NO11S,[M-H]1-,722.451857,-1 67 | SHexCer,SHexCer 18:1;2/12:0,C36H69NO11S,[M-H]1-,722.451857,-1 68 | Hex2Cer,Hex2Cer 18:1;2/12:0,C42H79NO13,[M+H]1+,806.562418,1 69 | Hex2Cer,Hex2Cer 18:1;2/12:0,C42H79NO13,[M+H]1+,806.562418,1 70 | Hex2Cer,Hex2Cer 18:1;2/12:0,C42H79NO13,[M+HCOO]1-,850.5533448,-1 71 | Hex2Cer,Hex2Cer 18:1;2/12:0,C42H79NO13,[M-H]1-,804.547866,-1 72 | Hex2Cer,Hex2Cer 18:1;2/12:0,C42H79NO13,[M-H]1-,804.547866,-1 73 | MIPC,MIPC 18:0;3/26:0;1,C56H110NO18P,[M-H]1-,1114.738777,-1 74 | MIPC,MIPC 18:0;3/26:0;1,C56H110NO18P,[M-H]1-,1114.738777,-1 75 | M(IP)2C,M(IP)2C 18:0;3/26:0;1,C62H121NO26P2,[M-H]1-,1356.757932,-1 76 | M(IP)2C,M(IP)2C 18:0;3/26:0;1,C62H121NO26P2,[M-H]1-,1356.757932,-1 77 | M(IP)2C,M(IP)2C 18:0;3/26:0;1,C62H121NO26P2,[M-H]1-,1356.757932,-1 78 | EPC,EPC 17:1;2/12:0,C31H63N2O6P,[M+H]1+,591.449651,1 79 | IPC,IPC 18:0;3/26:0;1,C50H100NO13P,[M-H]1-,952.6859537,-1 80 | IPC,IPC 18:0;3/26:0;1,C50H100NO13P,[M-H]1-,952.6859537,-1 81 | IPC,IPC 18:0;3/26:0;1,C50H100NO13P,[M-H]1-,952.6859537,-1 82 | SM,SM 18:1;2/12:0,C35H71N2O6P,[M+H]1+,647.5122513,1 83 | SM,SM 18:1;2/12:0,C35H71N2O6P,[M+H]1+,647.5122513,1 84 | LPC,LPC 19:0,C27H56NO7P,[M+H]1+,538.3867164,1 85 | LPC,LPC 19:0,C27H56NO7P,[M+HCOO]1-,582.3776432,-1 86 | LPC,LPC O-19:1p,C27H56NO6P,[M+H]1+,522.3918017,1 87 | LPC,LPC O-19:1p,C27H56NO6P,[M+HCOO]1-,566.3827286,-1 88 | LPC,LPC O-19:0a,C27H58NO6P,[M+HCOO]1-,568.3983787,-1 89 | LPE,LPE 16:0,C21H44NO7P,[M+H]1+,454.292816,1 90 | LPE,LPE 16:0,C21H44NO7P,[M-H]1-,452.278264,-1 91 | LPE,LPE O-16:1p,C21H44NO6P,[M+H]1+,438.2979013,1 92 | LPE,LPE O-16:1p,C21H44NO6P,[M-H]1-,436.2833493,-1 93 | LPE,LPE O-16:0a,C21H46NO6P,[M+H]1+,440.3135514,1 94 | LPE,LPE O-16:0a,C21H46NO6P,[M-H]1-,438.2989994,-1 95 | LPI,LPI 17:1,C26H49O12P,[M+H]1+,585.3034403,1 96 | LPI,LPI 17:1,C26H49O12P,[M+H]1+,585.3034403,1 97 | LPI,LPI 17:1,C26H49O12P,[M-H]1-,583.2888883,-1 98 | LPI,LPI 17:1,C26H49O12P,[M-H]1-,583.2888883,-1 99 | LPG,LPG 17:1,C23H45O9P,[M-H]1-,495.2728442,-1 100 | LPG,LPG 17:1,C23H45O9P,[M-H]1-,495.2728442,-1 101 | LPG,LPG 17:1,C23H45O9P,[M+H]1+,497.2873962,1 102 | LPA,LPA 17:1,C20H39O7P,[M+NH4]1+,440.2771663,1 103 | LPA,LPA 17:1,C20H39O7P,[M+NH4]1+,440.2771663,1 104 | LPA,LPA 17:1,C20H39O7P,[M-H]1-,421.2360648,-1 105 | LPA,LPA 17:1,C20H39O7P,[M-H]1-,421.2360648,-1 106 | LPS,LPS 17:1,C23H44NO9P,[M+H]1+,510.2826452,1 107 | LPS,LPS 17:1,C23H44NO9P,[M+H]1+,510.2826452,1 108 | LPS,LPS 17:1,C23H44NO9P,[M-H]1-,508.2680932,-1 109 | LPS,LPS 17:1,C23H44NO9P,[M-H]1-,508.2680932,-1 110 | SPB,LCB 17:0;2,C17H37NO2,[M+H]1+,288.2897056,1 111 | SPB,LCB 17:0;2,C17H37NO2,[M+H]1+,288.2897056,1 112 | SPB,LCB 17:1;2,C17H35NO2,[M+H]1+,286.2740555,1 113 | SPB,LCB 17:1;2,C17H35NO2,[M+H]1+,286.2740555,1 114 | SPBP,LCBP 17:1;2,C17H36NO5P,[M+H]1+,366.2403864,1 115 | SPBP,LCBP 17:1;2,C17H36NO5P,[M+H]1+,366.2403864,1 116 | LSM,LSM 17:1;2,C22H47N2O5P,[M+H]1+,451.3295358,1 117 | LSM,LSM 17:1;2,C22H47N2O5P,[M+H]1+,451.3295358,1 118 | MMPE,MMPE 18:1-18:1,C42H80NO8P,[M+H]1+,758.5694318,1 119 | MMPE,MMPE 18:1-18:1,C42H80NO8P,[M+H]1+,758.5694318,1 120 | MMPE,MMPE 18:1-18:1,C42H80NO8P,[M+H]1+,758.5694318,1 121 | MMPE,MMPE 18:1-18:1,C42H80NO8P,[M-H]1-,756.5548798,-1 122 | MMPE,MMPE 18:1-18:1,C42H80NO8P,[M-H]1-,756.5548798,-1 123 | MMPE,MMPE 18:1-18:1,C42H80NO8P,[M-H]1-,756.5548798,-1 124 | DMPE,DMPE 18:1-18:1,C43H82NO8P,[M+H]1+,772.5850819,1 125 | DMPE,DMPE 18:1-18:1,C43H82NO8P,[M+H]1+,772.5850819,1 126 | DMPE,DMPE 18:1-18:1,C43H82NO8P,[M+H]1+,772.5850819,1 127 | DMPE,DMPE 18:1-18:1,C43H82NO8P,[M-H]1-,770.5705299,-1 128 | DMPE,DMPE 18:1-18:1,C43H82NO8P,[M-H]1-,770.5705299,-1 129 | DMPE,DMPE 18:1-18:1,C43H82NO8P,[M-H]1-,770.5705299,-1 130 | MGDG,MGDG 16:0-16:1,C41H76O10,[M+NH4]1+,746.5776745,1 131 | MGDG,MGDG 16:0-16:1,C41H76O10,[M+H]1+,729.551125,1 132 | MGDG,MGDG 16:0-16:1,C41H76O10,[M+CH3COO]1-,787.5577019,-1 133 | MGDG,MGDG 16:0-16:1,C41H76O10,[M-H]1-,727.536573,-1 134 | MGDG,MGDG 16:0-16:1,C41H76O10,[M-H]1-,727.536573,-1 135 | DGDG,DGDG 16:0-16:1,C47H86O15,[M+CH3COO]1-,949.6105254,-1 136 | DGDG,DGDG 16:0-16:1,C47H86O15,[M-H]1-,889.5893965,-1 137 | DGDG,DGDG 16:0-16:1,C47H86O15,[M-H]1-,889.5893965,-1 138 | DGDG,DGDG 16:0-16:1,C47H86O15,[M+NH4]1+,908.630498,1 139 | DGDG,DGDG 16:0-16:1,C47H86O15,[M+H]1+,891.6039485,1 140 | SQDG,SQDG 16:0-16:0,C41H78O12S,[M+NH4]1+,812.5552246,1 141 | SQDG,SQDG 16:0-16:0,C41H78O12S,[M+H]1+,795.528675,1 142 | SQDG,SQDG 16:0-16:0,C41H78O12S,[M-H]1-,793.514123,-1 143 | SQDG,SQDG 16:0-16:0,C41H78O12S,[M-H]1-,793.514123,-1 144 | Hex3Cer,Hex3Cer 18:1;2/24:1,C60H111NO18,[M+H]1+,1134.787392,1 145 | Hex3Cer,Hex3Cer 18:1;2/24:1,C60H111NO18,[M+H]1+,1134.787392,1 146 | Hex3HexNAcCer,GB4 18:1;2/24:1,C68H124N2O23,[M+H]1+,1337.866765,1 147 | Hex3HexNAcCer,GB4 18:1;2/24:1,C68H124N2O23,[M+H]1+,1337.866765,1 148 | Hex3HexNAcCer,GB4 18:1;2/24:1,C68H124N2O23,[M+H]1+,1337.866765,1 149 | Hex2NeuAc2Cer,GD3 18:1;2/24:0,C76H137N3O29,[M-H]1-,1554.9265,-1 150 | Hex2NeuAc2Cer,GD3 18:1;2/24:0,C76H137N3O29,[M-H]1-,1554.9265,-1 151 | Hex2NeuAcCer,GM3 18:1;2/24:1,C65H118N2O21,[M-H]1-,1261.815433,-1 152 | Hex2NeuAcCer,GM3 18:1;2/24:1,C65H118N2O21,[M-H]1-,1261.815433,-1 153 | HexNeuAcCer,GM4 18:1;2/24:0;1,C59H110N2O17,[M-H]1-,1117.773175,-1 154 | HexNeuAcCer,GM4 18:1;2/24:0;1,C59H110N2O17,[M-H]1-,1117.773175,-1 155 | PEt,PEt 16:0-18:1,C39H75O8P,[M+NH4]1+,720.5537822,1 156 | PEt,PEt 16:0-18:1,C39H75O8P,[M+H]1+,703.5272327,1 157 | PEt,PEt 16:0-18:1,C39H75O8P,[M+H]1+,703.5272327,1 158 | PEt,PEt 16:0-18:1,C39H75O8P,[M+H]1+,703.5272327,1 159 | PEt,PEt 16:0-18:1,C39H75O8P,[M+CH3COO]1-,761.5338096,-1 160 | PEt,PEt 16:0-18:1,C39H75O8P,[M-H]1-,701.5126807,-1 161 | PEt,PEt 16:0-18:1,C39H75O8P,[M-H]1-,701.5126807,-1 162 | CDPDAG,CDPDAG 18:1-18:1,C48H85N3O15P2,[M+H]1+,1006.552869,1 163 | CDPDAG,CDPDAG 18:1-18:1,C48H85N3O15P2,[M+H]1+,1006.552869,1 164 | CDPDAG,CDPDAG 18:1-18:1,C48H85N3O15P2,[M-H]1-,1004.538317,-1 165 | CDPDAG,CDPDAG 18:1-18:1,C48H85N3O15P2,[M-H]1-,1004.538317,-1 166 | BMP,BMP 18:1-18:1,C42H79O10P,[M+H]1+,775.5483621,1 167 | BMP,BMP 18:1-18:1,C42H79O10P,[M+H]1+,775.5483621,1 168 | BMP,BMP 18:1-18:1,C42H79O10P,[M-H]1-,773.5338101,-1 169 | LHexCer,LHexCer 18:1;2,C24H47NO7,[M+H]1+,462.3425291,1 170 | LHexCer,LHexCer 18:1;2,C24H47NO7,[M+CH3COO]1-,520.349106,-1 171 | LHexCer,LHexCer 18:1;2,C24H47NO7,[M-H]1-,460.3279771,-1 172 | ST 27:1;O,ST 27:1;1,C27H46O,[M+NH4]1+,404.3886918,1 173 | SE 27:1,SE 27:1/17:0,C44H78O2,[M+NH4]1+,656.6340076,1 174 | PC,PC O-18:1p/20:4,C46H84NO7P,[M+CH3COO]1-,852.6123943,-1 175 | PC,PC O-18:1p/20:4,C46H84NO7P,[M+CH3COO]1-,852.6123943,-1 176 | PC,PC O-18:1p/20:4,C46H84NO7P,[M+CH3COO]1-,852.6123943,-1 177 | PC,PC O-18:1p/20:4,C46H84NO7P,[M+CH3COO]1-,852.6123943,-1 178 | PC,PC O-18:1p/20:4,C46H84NO7P,[M+H]1+,794.6058174,1 179 | PC,PC O-18:0a/20:4,C46H86NO7P,[M+CH3COO]1-,854.6280444,-1 180 | PC,PC O-18:0a/20:4,C46H86NO7P,[M+H]1+,796.6214674,1 181 | PE,PE O-18:1p/22:6,C45H78NO7P,[M-H]1-,774.5443,-1 182 | PE,PE O-18:1p/22:6,C45H78NO7P,[M-H]1-,774.5443,-1 183 | PE,PE O-18:1p/22:6,C45H78NO7P,[M+H]1+,776.5588671,1 184 | PE,PE O-18:1p/22:6,C45H78NO7P,[M+H]1+,776.5588671,1 185 | PE,PE O-18:0a/22:6,C45H80NO7P,[M-H]1-,776.5599652,-1 186 | PE,PE O-18:0a/20:4,C43H80NO7P,[M+H]1+,754.5745172,1 187 | PE,PE O-18:0a/20:4,C43H80NO7P,[M+H]1+,754.5745172,1 188 | CL,CL 18:1-18:1-18:1-18:1,C81H150O17P2,[M-H]1-,1456.027552,-1 189 | LCL,MLCL 18:1-18:1-18:1,C63H118O16P2,[M-H]1-,1191.782236,-1 190 | M(IP)2C,M(IP)2C 18:0;3/26:0;1,C62H121NO26P2,[M-H]1-,1356.757932,-1 191 | -------------------------------------------------------------------------------- /HMDB.g4: -------------------------------------------------------------------------------- 1 | /* 2 | * MIT License 3 | * 4 | * Copyright (c) the authors (listed in global LICENSE file) 5 | * 6 | * Permission is hereby granted, free of charge, to any person obtaining a copy 7 | * of this software and associated documentation files (the 'Software'), to deal 8 | * in the Software without restriction, including without limitation the rights 9 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | * copies of the Software, and to permit persons to whom the Software is 11 | * furnished to do so, subject to the following conditions:; 12 | * 13 | * The above copyright notice and this permission notice shall be included in all 14 | * copies or substantial portions of the Software. 15 | * 16 | * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | * LIABILITY, WHether IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | * SOFTWARE. 23 | */ 24 | 25 | 26 | 27 | grammar HMDB; 28 | 29 | 30 | /* first rule is always start rule */ 31 | lipid : lipid_pure EOF | lipid_pure adduct_info EOF; 32 | lipid_pure : lipid_class | lipid_class lipid_suffix; 33 | lipid_class : fatty_acid | gl | pl | sl | st; 34 | 35 | lipid_suffix : '[rac]'; 36 | 37 | /* adduct information */ 38 | adduct_info : adduct_sep | adduct_separator adduct_sep; 39 | adduct_sep : '[M' adduct ']' charge_sign | '[M' adduct ']' charge charge_sign; 40 | adduct : adduct_set; 41 | adduct_set : adduct_element | adduct_element adduct_set; 42 | adduct_element : element | element number | number element | plus_minus element | plus_minus element number | plus_minus number element; 43 | 44 | 45 | 46 | 47 | /* fatty acyl rules */ 48 | fa : fa_core | furan_fa | fa_lcb_prefix fa_core | fa_core fa_lcb_suffix | fa_lcb_prefix fa_core fa_lcb_suffix | fa_synonym; 49 | fa_core : carbon carbon_db_separator db | ether carbon carbon_db_separator db | methyl carbon carbon_db_separator db; 50 | 51 | furan_fa : furan_fa_mono | furan_fa_di; 52 | furan_fa_mono : furan_first_number 'M' furan_second_number | 'MonoMe(' furan_first_number ',' furan_second_number ')'; 53 | furan_fa_di : furan_first_number 'D' furan_second_number | 'DiMe(' furan_first_number ',' furan_second_number ')'; 54 | furan_first_number : number; 55 | furan_second_number : number; 56 | 57 | fa_synonym : 'Palmitic acid' | 'Linoleic acid' | 'AA' | 'ALA' | 'EPA' | 'DHA' | 'LTB4' | 'Resolvin D3' | 'Maresin 1' | 'Resolvin D2' | 'Resolvin D5' | 'Resolvin D1' | 'TXB1' | 'TXB2' | 'TXB3' | 'PGF2alpha' | 'PGD2' | 'PGE2' | 'PGB2' | 'PGJ2' | '15d-PGJ2'; 58 | 59 | lcb : lcb_core | fa_lcb_prefix lcb_core | lcb_core fa_lcb_suffix | fa_lcb_prefix lcb_core fa_lcb_suffix; 60 | lcb_core : hydroxyl carbon carbon_db_separator db; 61 | 62 | carbon : number; 63 | db : db_count | db_count db_positions | db_count db_suffix | db_count db_positions db_suffix; 64 | db_count : number; 65 | db_suffix : 'e' | 'n' db_suffix_number; 66 | db_suffix_number : number; 67 | db_positions : ROB db_position RCB; 68 | db_position : db_single_position | db_position db_position_separator db_position; 69 | db_single_position : db_position_number | db_position_number cistrans; 70 | db_position_number : number; 71 | cistrans : 'E' | 'Z'; 72 | ether : ether_type | ether_link_pos ether_type; 73 | ether_link_pos : number '-'; 74 | ether_type : 'o-' | 'O-' | 'P-'; 75 | methyl : 'i-' | 'a-'; 76 | hydroxyl : 'm' | 'd' | 't'; 77 | fa_lcb_suffix : fa_lcb_suffix_core | fa_lcb_suffix_separator fa_lcb_suffix_core | ROB fa_lcb_suffix_core RCB | fa_lcb_suffix_full; 78 | fa_lcb_suffix_full : fa_lcb_suffix_full_sep fa_lcb_suffix_number fa_lcb_suffix_types ROB fa_lcb_suffix_positions RCB | fa_lcb_suffix_full_sep fa_lcb_suffix_types ROB fa_lcb_suffix_position_core RCB; 79 | fa_lcb_suffix_full_sep : fa_lcb_suffix_separator | '+='; 80 | fa_lcb_suffix_core : fa_lcb_suffix_type | fa_lcb_suffix_number fa_lcb_suffix_type | fa_lcb_suffix_number fa_lcb_suffix_separator fa_lcb_suffix_type; 81 | fa_lcb_suffix_type : 'OH' | 'me'; 82 | fa_lcb_suffix_types : 'OH' | 'me' | 'O'; 83 | fa_lcb_suffix_number : number; 84 | fa_lcb_prefix : fa_lcb_prefix_type | fa_lcb_prefix_type fa_lcb_prefix_separator; 85 | fa_lcb_prefix_type : 'iso'; 86 | fa_lcb_suffix_positions : fa_lcb_suffix_position_core COMMA fa_lcb_suffix_positions | fa_lcb_suffix_position_core; 87 | fa_lcb_suffix_position_core : fa_lcb_suffix_position | fa_lcb_suffix_position med_suffix; 88 | fa_lcb_suffix_position : number; 89 | 90 | /* different fatty acyl types */ 91 | fa_species : fa; 92 | 93 | fa2 : fa2_sorted | fa2_unsorted; 94 | fa2_sorted : fa sorted_fa_separator fa; 95 | fa2_unsorted : fa unsorted_fa_separator fa; 96 | 97 | fa3 : fa3_sorted | fa3_unsorted; 98 | fa3_sorted : fa sorted_fa_separator fa sorted_fa_separator fa; 99 | fa3_unsorted : fa unsorted_fa_separator fa unsorted_fa_separator fa; 100 | 101 | fa4 : fa4_sorted | fa4_unsorted; 102 | fa4_sorted : fa sorted_fa_separator fa sorted_fa_separator fa sorted_fa_separator fa; 103 | fa4_unsorted : fa unsorted_fa_separator fa unsorted_fa_separator fa unsorted_fa_separator fa; 104 | 105 | 106 | 107 | 108 | 109 | /* fatty acid rules */ 110 | fatty_acid : fa_hg fa_fa | fa_hg interlink_fa | fa_hg headgroup_separator fa_fa | mediator; 111 | fa_hg : 'FA' | 'fatty acid' | 'fatty alcohol' | 'NAE' | 'GP-NAE' | 'FAHFA'; 112 | fa_fa : ROB fa RCB; 113 | interlink_fa : ROB fa sorted_fa_separator fa RCB; 114 | 115 | 116 | 117 | 118 | 119 | /* mediator rules */ 120 | mediator : mediator_single | mediator_single headgroup_separator med_positions; 121 | mediator_single : mediator_single mediator_single | mediator_single '-' mediator_single | db_positions | med_positions | 'KETE' | 'keto' | 'oxo' | 'Hp' | 'EPE' | 'ETE' | 'ODE' | 'EPT' | 'H' | 'LXA4' | 'hydroxy' | 'Di' | 'RvE1' | 'glyceryl' | 'EpETrE' | 'DHE' | 'ETrE' | 'DHA' | 'DoHA' | 'LTB4' | 'PGE2' | ' PGE2' | 'PGF2alpha' | 'trihydroxy' | 'TriH' | 'OTrE' | 'dihydroxy' | 'Ep' | 'LXB4' | 'Tri' | 'PAHSA' | 'MUFA' | 'GPGP' | 'GPIP' | 'PGE1' | 'PGG2' | 'SFA' | 'PUFA' | 'PGI2' | 'TXA2' | 'CoA' | 'FAOH' | 'EA' | 'beta' | 'PGH2' | 'LTD4' | 'kete' | 'DPE' | ' PGD2' | 'PGD2' | 'PGF2' | 'LTC4' | 'LTA4' | 'PGD1' | 'PGA1' | 'LTDE4' | 'epoxyoleate' | 'epoxystearate' | 'carboxy' | 'PGH1' | 'EtrE' | 'HXA3' | 'HxA3' | 'HXA3-C'; 122 | 123 | 124 | 125 | med_positions : med_position | ROB med_position RCB; 126 | med_position : med_position med_position_separator med_position | number med_suffix | number; 127 | med_suffix : 'S' | 'R'; 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | /* glycerolipid rules */ 136 | gl : gl_regular | gl_mono | gl_molecular; 137 | 138 | gl_regular : gl_hg gl_fa | gl_hg headgroup_separator gl_fa; 139 | gl_fa : ROB fa_species RCB | ROB fa3 RCB; 140 | gl_hg : 'MG' | 'DG' | 'TG' | 'MAG' | 'DAG' | 'TAG'; 141 | 142 | gl_molecular : gl_molecular_hg gl_molecular_fa | gl_molecular_hg headgroup_separator gl_molecular_fa; 143 | gl_molecular_fa : ROB fa2 RCB; 144 | gl_molecular_hg : 'DG' | 'DAG'; 145 | 146 | 147 | gl_mono : gl_mono_hg gl_mono_fa | gl_mono_hg headgroup_separator gl_mono_fa; 148 | gl_mono_fa : ROB fa_species RCB | ROB fa2 RCB; 149 | gl_mono_hg : 'MHDG' | 'DHDG' | 'MGDG' | 'DGDG'; 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | /* phospholipid rules */ 158 | pl : pl_regular | pl_three | pl_four; 159 | 160 | pl_regular : pl_hg pl_fa | pl_hg headgroup_separator pl_fa; 161 | pl_fa : ROB fa_species RCB | ROB fa2 RCB; 162 | pl_hg : 'LPA' | 'LPC' | 'LPE' | 'LPG' | 'LPI' | 'LPS' | 'PA' | 'PC' | 'PE' | 'PG' | 'PI' | 'PS' | 'PGP' | 'PIP' | 'PIP[3]' | 'PIP[4]' | 'PIP[5]' | 'PIP2' | 'PIP2[3,4]' | 'PIP2[3,5]' | 'PIP2[4,5]' | 'PIP3' | 'PIP3[3,4,5]' | 'CDP-DAG' | 'LysoPA' | 'LysoPC' | 'LysoPE' | 'LysoPG' | 'LysoPI' | 'LysoPS' | 'PE-NMe' | 'PE-NMe2' | 'CDP-DG'; 163 | 164 | pl_three : pl_three_hg pl_three_fa | pl_three_hg headgroup_separator pl_three_fa; 165 | pl_three_fa : ROB fa_species RCB | ROB fa3 RCB; 166 | pl_three_hg : 'NAPE'; 167 | 168 | pl_four : pl_four_hg pl_four_fa | pl_four_hg headgroup_separator pl_four_fa; 169 | pl_four_fa : ROB fa_species RCB | ROB fa2 RCB | ROB fa4 RCB; 170 | pl_four_hg : 'BMP' | 'LBPA' | 'Lysobisphosphatidate' | 'CL' | 'MLCL' | 'DLCL'; 171 | 172 | 173 | 174 | 175 | /* sphingolipid rules */ 176 | sl : sl_hg sl_lcb | sl_hg headgroup_separator sl_lcb; 177 | sl_hg : all_sl_hg_names | sl_hg_prefix all_sl_hg_names | all_sl_hg_names sl_hg_suffix | sl_hg_prefix all_sl_hg_names sl_hg_suffix; 178 | all_sl_hg_names : sl_hg_names | ganglioside; 179 | sl_hg_names : 'HexCer' | 'Hex2Cer' | 'SM' | 'PE-Cer' | 'Cer' | 'CerP' | 'IPC' | 'MIPC' | 'M(IP)2C' | 'Gb3Cer' | 'Gb4Cer' | 'Forssman' | 'MSGG' | 'DSGG' | 'NOR1' | 'NORint' | 'NOR2' | 'Globo-H' | 'Globo-A' | 'SB1a' | 'SM1b' | 'SM1a' | 'Branched-Forssman' | 'Globo-B' | 'Para-Forssman' | 'Globo-Lex-9' | 'LysoSM' | 'Glucosylceramide' | 'Ceramide' | 'Tetrahexosylceramide'; 180 | ganglioside : 'Ganglioside' headgroup_separator ganglioside_names | ganglioside_names; 181 | ganglioside_names : 'Gb3' | 'GA2' | 'GA1' | 'GM3' | 'GM2' | 'GM1' | 'GD3' | 'GT3' | 'GD1' | 'GT1' | 'GQ1' | 'GM4' | 'GD2' | 'GT2' | 'GP1' | 'GD1a' | 'GM1b' | 'GT1b' | 'GQ1b' | 'GT1a' | 'GQ1c' | 'GP1c' | 'GD1c' | 'GD1b' | 'GT1c' | 'Ga1' | 'Ga2' | 'GB3' | 'Gb3' | 'GB4' | 'Gb4' | 'Gd1' | 'Gd2' | 'Gd3' | 'Gm1' | 'Gm2' | 'Gm3' | 'Gm4' | 'GP1' | 'Gp1' | 'Gq1' | 'Gt1' | 'Gt2' | 'Gt3'; 182 | 183 | sl_hg_prefix : sl_hg_prefix '-' | sl_hg_prefix sl_hg_prefix | ROB sl_hg_prefix RCB | 'Glc' | 'NAc' | 'Gal' | 'Fuc' | 'SO3' | 'NeuGc' | 'i' | 'NeuAc' | 'Lac' | 'Lex' | '(3\'-sulfo)' | 'Ac-O-9' | '(alpha2-8)' | '(alpha2-6)' | 'NeuAc' | 'Sulfo'; 184 | sl_hg_suffix : sl_hg_suffix sl_hg_suffix | sl_hg_suffix '/' | ROB sl_hg_suffix RCB | 'NeuAc' | 'NeuGc' | ' alpha'; 185 | 186 | sl_lcb : sl_lcb_species | sl_lcb_subspecies; 187 | sl_lcb_species : ROB lcb RCB; 188 | sl_lcb_subspecies : ROB lcb sorted_fa_separator fa RCB; 189 | 190 | 191 | 192 | 193 | /* sterol rules */ 194 | st : st_species | st_sub1 | st_sub2; 195 | 196 | st_species : st_species_hg st_species_fa | st_species_hg headgroup_separator st_species_fa; 197 | st_species_hg : 'SE'; 198 | st_species_fa : ROB fa_species RCB; 199 | 200 | st_sub1 : st_sub1_hg st_sub1_fa | st_sub1_hg headgroup_separator st_sub1_fa; 201 | st_sub1_hg : 'CE'; 202 | st_sub1_fa : ROB fa RCB; 203 | 204 | st_sub2 : st_sub2_hg st_sub2_fa | st_sub2_hg headgroup_separator st_sub2_fa; 205 | st_sub2_hg : 'SE'; 206 | st_sub2_fa : ROB fa2 RCB; 207 | 208 | 209 | /* separators */ 210 | SPACE : ' '; 211 | COLON : ':'; 212 | SEMICOLON : ';'; 213 | DASH : '-'; 214 | UNDERSCORE : '_'; 215 | SLASH : '/'; 216 | BACKSLASH : '\\'; 217 | COMMA: ','; 218 | ROB: '('; 219 | RCB: ')'; 220 | 221 | unsorted_fa_separator : UNDERSCORE; 222 | sorted_fa_separator : SLASH; 223 | adduct_separator : SPACE; 224 | headgroup_separator : SPACE; 225 | carbon_db_separator : COLON; 226 | db_position_separator : COMMA; 227 | med_position_separator : COMMA; 228 | fa_lcb_suffix_separator : DASH; 229 | fa_lcb_prefix_separator : DASH; 230 | 231 | number : digit | digit number; 232 | digit : '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'; 233 | 234 | element: 'C' | 'H' | 'N' | 'O' | 'P' | 'S' | 'Br' | 'I' | 'F' | 'Cl' | 'As'; 235 | charge : '1' | '2' | '3' | '4'; 236 | charge_sign : plus_minus; 237 | plus_minus : '-' | '+'; 238 | --------------------------------------------------------------------------------