Browse Source

Ajout plugin yaml

idleman 4 years ago
parent
commit
63250e8221

+ 5 - 0
plugin/hackpoint/hackpoint.plugin.php

@@ -325,6 +325,11 @@ foreach(glob(__DIR__.SLASH.'js'.SLASH.'codemirror-mode'.SLASH.'*.js') as $file){
 	Plugin::addJs("/js/codemirror-mode/".basename($file)); 
 }
 
+$modes = array();
+Plugin::callHook('hackpoint_codemirror_modes',array(&$modes));
+foreach($modes as $file){
+	Plugin::addJs($file); 
+}
 
 //Mapping hook / fonctions
 Plugin::addHook("install", "hackpoint_install");

+ 13 - 0
plugin/yaml/app.json

@@ -0,0 +1,13 @@
+{
+	"id": "fr.idleman.yaml",
+	"name": "YAML",
+	"author" : {
+		"name" : "Valentin CARRUESCO",
+		"mail" : ""
+	},
+	"version": "1.0",
+	"url": "http://blog.idleman.fr",
+	"licence": {"name": "Copyright","url" : ""},
+	"description": "Exemple d'intégration de ressource (ici yaml)",
+	"require" : {}
+}

+ 120 - 0
plugin/yaml/js/yaml.js

@@ -0,0 +1,120 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+  if (typeof exports == "object" && typeof module == "object") // CommonJS
+    mod(require("../../lib/codemirror"));
+  else if (typeof define == "function" && define.amd) // AMD
+    define(["../../lib/codemirror"], mod);
+  else // Plain browser env
+    mod(CodeMirror);
+})(function(CodeMirror) {
+"use strict";
+
+CodeMirror.defineMode("yaml", function() {
+
+  var cons = ['true', 'false', 'on', 'off', 'yes', 'no'];
+  var keywordRegex = new RegExp("\\b(("+cons.join(")|(")+"))$", 'i');
+
+  return {
+    token: function(stream, state) {
+      var ch = stream.peek();
+      var esc = state.escaped;
+      state.escaped = false;
+      /* comments */
+      if (ch == "#" && (stream.pos == 0 || /\s/.test(stream.string.charAt(stream.pos - 1)))) {
+        stream.skipToEnd();
+        return "comment";
+      }
+
+      if (stream.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/))
+        return "string";
+
+      if (state.literal && stream.indentation() > state.keyCol) {
+        stream.skipToEnd(); return "string";
+      } else if (state.literal) { state.literal = false; }
+      if (stream.sol()) {
+        state.keyCol = 0;
+        state.pair = false;
+        state.pairStart = false;
+        /* document start */
+        if(stream.match(/---/)) { return "def"; }
+        /* document end */
+        if (stream.match(/\.\.\./)) { return "def"; }
+        /* array list item */
+        if (stream.match(/\s*-\s+/)) { return 'meta'; }
+      }
+      /* inline pairs/lists */
+      if (stream.match(/^(\{|\}|\[|\])/)) {
+        if (ch == '{')
+          state.inlinePairs++;
+        else if (ch == '}')
+          state.inlinePairs--;
+        else if (ch == '[')
+          state.inlineList++;
+        else
+          state.inlineList--;
+        return 'meta';
+      }
+
+      /* list seperator */
+      if (state.inlineList > 0 && !esc && ch == ',') {
+        stream.next();
+        return 'meta';
+      }
+      /* pairs seperator */
+      if (state.inlinePairs > 0 && !esc && ch == ',') {
+        state.keyCol = 0;
+        state.pair = false;
+        state.pairStart = false;
+        stream.next();
+        return 'meta';
+      }
+
+      /* start of value of a pair */
+      if (state.pairStart) {
+        /* block literals */
+        if (stream.match(/^\s*(\||\>)\s*/)) { state.literal = true; return 'meta'; };
+        /* references */
+        if (stream.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i)) { return 'variable-2'; }
+        /* numbers */
+        if (state.inlinePairs == 0 && stream.match(/^\s*-?[0-9\.\,]+\s?$/)) { return 'number'; }
+        if (state.inlinePairs > 0 && stream.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/)) { return 'number'; }
+        /* keywords */
+        if (stream.match(keywordRegex)) { return 'keyword'; }
+      }
+
+      /* pairs (associative arrays) -> key */
+      if (!state.pair && stream.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)) {
+        state.pair = true;
+        state.keyCol = stream.indentation();
+        return "atom";
+      }
+      if (state.pair && stream.match(/^:\s*/)) { state.pairStart = true; return 'meta'; }
+
+      /* nothing found, continue */
+      state.pairStart = false;
+      state.escaped = (ch == '\\');
+      stream.next();
+      return null;
+    },
+    startState: function() {
+      return {
+        pair: false,
+        pairStart: false,
+        keyCol: 0,
+        inlinePairs: 0,
+        inlineList: 0,
+        literal: false,
+        escaped: false
+      };
+    },
+    lineComment: "#",
+    fold: "indent"
+  };
+});
+
+CodeMirror.defineMIME("text/x-yaml", "yaml");
+CodeMirror.defineMIME("text/yaml", "yaml");
+
+});

+ 42 - 0
plugin/yaml/types/YamlType.class.php

@@ -0,0 +1,42 @@
+<?php
+
+require_once(__DIR__.SLASH.'..'.SLASH.'..'.SLASH.'hackpoint'.SLASH.'types'.SLASH.'ReadmeType.class.php');
+
+class YamlType extends ReadmeType{
+
+	public static function manifest(){
+		return array(
+			'uid' => 'yaml',
+			'label' => 'YAML',
+			'icon' => 'fas fa-indent',
+			'color' => '#ffffff',
+			'background' => '#222222',
+			'description' => 'Structure YAML',
+			'fromExtension' => array('yaml','yml'),
+			'toExtension' => 'yml',
+			'default' => 'web:
+    - restart:   with-hackpoint-only',
+
+		);
+	}
+
+	/* EDITION */
+	public static function toHtml($resource,$sketch=null){
+		$infos = self::manifest();
+		return array(
+			'html'=>'<textarea id="content" onblur="hackpoint_resource_save_content()" class="arduino-text">'.$resource->content.'</textarea>',
+			'javascript' => "
+				hackpoint_resource_mirrorify('.arduino-text',{
+					mode : 'text/x-yaml',	
+					lineNumbers : true,
+					theme : 'monokai',
+					readOnly : false
+				});
+			"
+		);
+	}
+
+
+	
+}
+?>

+ 14 - 0
plugin/yaml/yaml.plugin.php

@@ -0,0 +1,14 @@
+<?php
+
+
+function hackpoint_yaml_manage_types(&$types){
+	$types = array_merge($types,glob(__DIR__.SLASH.'types'.SLASH.'*.class.php'));
+}
+
+function hackpoint_yaml_mode(&$modes){
+	$modes[] = "/../yaml/js/yaml.js";
+}
+
+Plugin::addHook("hackpoint_resource_type", "hackpoint_yaml_manage_types");   
+Plugin::addHook("hackpoint_codemirror_modes", "hackpoint_yaml_mode");   
+?>