Untitled

mail@pastecode.io avatar
unknown
tsx
a year ago
10 kB
20
Indexable
Never
import {javascriptGenerator} from 'blockly/javascript';
import { Renommage, Selection, Projection, Ensemble, Difference, Union, Intersection, Produit } from '../../assets/classes/Noeuds';
import * as Blockly from "blockly";

export const sampleGenerator : any = new Blockly.Generator('Algebre')

Blockly.defineBlocksWithJsonArray([
    Renommage.toBlockly(),
    Selection.toBlockly(),
    Projection.toBlockly(),
    Ensemble.toBlockly(),
    Difference.toBlockly(),
    Union.toBlockly(),
    Intersection.toBlockly(),
    Produit.toBlockly(),
    {
      "type": "debut",
      "message0": "Début",
      "nextStatement": "Noeud",
      "colour": 60,
      "tooltip": "",
      "helpUrl": ""
    }
  ]);

  /* -------------------------------------------------------------------------- */
  /*                            JAVASCRIPT GENERATOR                            */
  /* -------------------------------------------------------------------------- */

  javascriptGenerator['selection'] = function(block: any) {
    var value_champs = javascriptGenerator.valueToCode(block, 'Champs', javascriptGenerator.ORDER_ATOMIC);
    var statements_elements = javascriptGenerator.statementToCode(block, 'ensemble');
    var code = '\\sigma_{' + value_champs + '}(' + statements_elements + ')';
    return code;
  };
  javascriptGenerator['renommage'] = function(block: any) {
    var value_champs = javascriptGenerator.valueToCode(block, 'Champs', javascriptGenerator.ORDER_ATOMIC);
    var statements_elements = javascriptGenerator.statementToCode(block, 'ensemble');
    var code = '\\rho_{' + value_champs + ' }(' + statements_elements + ')';
    return code;
  };
  javascriptGenerator['projection'] = function(block: any) {
    var value_champs = javascriptGenerator.valueToCode(block, 'Champs', javascriptGenerator.ORDER_ATOMIC);
    var statements_elements = javascriptGenerator.statementToCode(block, 'ensemble');
    var code = '\\pi_{' + value_champs + ' }(' + statements_elements + ')';
    return code;
  };
  javascriptGenerator['ensemble'] = function(block: any) {
    var value_champs = javascriptGenerator.valueToCode(block, 'name', javascriptGenerator.ORDER_ATOMIC);
    var code = value_champs;
    return code;
  };
  javascriptGenerator['text'] = function(block: any) {
    const textValue = block.getFieldValue('TEXT');
    var code = textValue;
    return [code, javascriptGenerator.ORDER_ATOMIC];
  }
  javascriptGenerator['difference'] = function(block: any) {
    var statements_elements1 = javascriptGenerator.statementToCode(block, 'ensemble1');
    var statements_elements2 = javascriptGenerator.statementToCode(block, 'ensemble2');
    var code = '(' + statements_elements1 + ') \/ (' + statements_elements2 + ')';

    return code;
  }
  
  javascriptGenerator['intersection'] = function(block: any) {
    var statements_elements1 = javascriptGenerator.statementToCode(block, 'ensemble1');
    var statements_elements2 = javascriptGenerator.statementToCode(block, 'ensemble2');
    var code = '(' + statements_elements1 + ') \\cup (' + statements_elements2 + ')';
    return code;
  }
  
  javascriptGenerator['union'] = function(block: any) {
    var statements_elements1 = javascriptGenerator.statementToCode(block, 'ensemble1');
    var statements_elements2 = javascriptGenerator.statementToCode(block, 'ensemble2');
    
    var code = '(' + statements_elements1 + ') \\cap (' + statements_elements2 + ')';
    return code;
  }
  javascriptGenerator['produit'] = function(block: any) {
    var statements_elements1 = javascriptGenerator.statementToCode(block, 'ensemble1');
    var statements_elements2 = javascriptGenerator.statementToCode(block, 'ensemble2');
    var code = '(' + statements_elements1 + ') \\times (' + statements_elements2 + ')';
    return code;
  }
  javascriptGenerator['debut'] = function(block: any) {
    var statements_elements = javascriptGenerator.statementToCode(block, 'nextStatement');
    var code = statements_elements;
    return code;
  }

  /* -------------------------------------------------------------------------- */
  /*                          FIN JAVASCRIPT GENERATOR                          */
  /* -------------------------------------------------------------------------- */

  /* -------------------------------------------------------------------------- */
  /*                              CUSTOM GENERATOR                              */
  /* -------------------------------------------------------------------------- */

    sampleGenerator['renommage'] = function(block: any) {
        console.log("renommage");
        var value_champs = sampleGenerator.statementToCode(block, 'Champs');
        var statements_elements = sampleGenerator.statementToCode(block, 'ensemble');
        var code = '\\rho_{' + value_champs + ' }(' + statements_elements + ')';
        return code;
    };
    sampleGenerator['selection'] = function(block: any) {
        console.log("selection");
        var value_champs = sampleGenerator.statementToCode(block, 'Champs');
        var statements_elements = sampleGenerator.statementToCode(block, 'ensemble');
        var code = '\\sigma_{' + value_champs + '}(' + statements_elements + ')';
        return code;
    };

    sampleGenerator['projection'] = function(block: any) {
        console.log("projection");
        var value_champs = sampleGenerator.statementToCode(block, 'Champs');
        var statements_elements = sampleGenerator.statementToCode(block, 'ensemble');
        var code = '\\pi_{' + value_champs + ' }(' + statements_elements + ')';
        return code;
    };

    sampleGenerator['ensemble'] = function(block: any) {
        console.log("ensemble");
        var value_champs = sampleGenerator.statementToCode(block, 'name');
        var code = value_champs;
        return code;
    };

    sampleGenerator['text'] = function(block: any) {
        console.log("text");
        const textValue = block.getFieldValue('TEXT');
        var code = textValue;
        return code;
    }

    sampleGenerator['difference'] = function(block: any) {
        console.log("difference");
        var statements_elements1 = sampleGenerator.statementToCode(block, 'ensemble1');
        var statements_elements2 = sampleGenerator.statementToCode(block, 'ensemble2');
        var code = '(' + statements_elements1 + ') \/ (' + statements_elements2 + ')';
        return code;
    }

    sampleGenerator['intersection'] = function(block: any) {
        console.log("intersection");
        var statements_elements1 = sampleGenerator.statementToCode(block, 'ensemble1');
        var statements_elements2 = sampleGenerator.statementToCode(block, 'ensemble2');
        var code = '(' + statements_elements1 + ') \\cup (' + statements_elements2 + ')';
        return code;
    }

    sampleGenerator['union'] = function(block: any) {
        console.log("union");
        var statements_elements1 = sampleGenerator.statementToCode(block, 'ensemble1');
        var statements_elements2 = sampleGenerator.statementToCode(block, 'ensemble2');
        var code = '(' + statements_elements1 + ') \\cap (' + statements_elements2 + ')';
        return code;
    }

    sampleGenerator['produit'] = function(block: any) {
        console.log("produit");
        var statements_elements1 = sampleGenerator.statementToCode(block, 'ensemble1');
        var statements_elements2 = sampleGenerator.statementToCode(block, 'ensemble2');
        var code = '(' + statements_elements1 + ') \\times (' + statements_elements2 + ')';
        return code;
    }

    sampleGenerator['debut'] = function(block: any) {
        console.log("debut");
        var statements_elements = sampleGenerator.statementToCode(block, 'nextStatement');
        var code = statements_elements;
        return code;
    }

    /* -------------------------------------------------------------------------- */
    /*                           FIN DU CUSTOM GENERATOR                          */
    /* -------------------------------------------------------------------------- */




  var toolbox = {
    "kind":"categoryToolbox",
    "contents": [
      {
        "kind": "category",
        "name": "Unaire",
        "contents": [
          {
            "kind": "block",
            "type": "renommage"
          },
          {
            "kind": "block",
            "type": "selection"
          },
          {
            "kind": "block",
            "type": "projection"
          },
        ]
      },

      {
        "kind": "category",
        "name": "Binaire",
        "contents": [
          {
            "kind": "block",
            "type": "difference"
          },
          {
            "kind": "block",
            "type": "union"
          },
          {
            "kind": "block",
            "type": "intersection"
          },          
          {
            "kind": "block",
            "type": "produit"
          },
        ]
      },

      {
        "kind": "category",
        "name": "Autre",
        "contents": [
          {
            "kind": "block",
            "type": "ensemble"
          },
          {
            "kind": "block",
            "type": "text"
          }
        ]
      }
    ]
  };


  export var options = { 
    toolbox : toolbox, 
    collapse : true, 
    comments : true, 
    disable : true, 
    maxBlocks : Infinity, 
    trashcan : true, 
    horizontalLayout : true, 
    toolboxPosition : 'start', 
    css : true, 
    media : 'https://blockly-demo.appspot.com/static/media/', 
    rtl : false, 
    // scrollbars : true, 
    sounds : false, 
    oneBasedIndex : true, 
    zoom : {
      controls : false, 
      wheel : true, 
      startScale : 1, 
      maxScale : 3, 
      minScale : 0.3, 
      scaleSpeed : 1.2
    }
  };