From b330b74347278f47666b56295befdc37fb7022f1 Mon Sep 17 00:00:00 2001
From: chylex <contact@chylex.com>
Date: Sat, 10 Jun 2017 23:25:55 +0200
Subject: [PATCH] Implement token reading in template plugin

---
 Resources/Plugins/templates/browser.js | 49 ++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/Resources/Plugins/templates/browser.js b/Resources/Plugins/templates/browser.js
index 67d418ea..8e4ec5f3 100644
--- a/Resources/Plugins/templates/browser.js
+++ b/Resources/Plugins/templates/browser.js
@@ -82,6 +82,55 @@ enabled(){
   
   // template implementation
   
+  var readTemplateToken = (contents, token) => {
+    let tokenStart = "{"+token;
+    let currentIndex = -1;
+    let startIndex = -1;
+    let endIndex = -1;
+    
+    let data = [];
+    
+    while((currentIndex = contents.indexOf(tokenStart, currentIndex)) !== -1){
+      let entry = [ currentIndex ];
+      
+      startIndex = currentIndex+tokenStart.length;
+      endIndex = startIndex;
+      
+      if (contents[endIndex] === '#'){
+        ++endIndex;
+        
+        let bracketCount = 1;
+        
+        for(; endIndex < contents.length; endIndex++){
+          if (contents[endIndex] === '{'){
+            ++bracketCount;
+          }
+          else if (contents[endIndex] === '}'){
+            if (--bracketCount === 0){
+              entry.push(contents.substring(startIndex+1, endIndex));
+              break;
+            }
+          }
+          else if (contents[endIndex] === '#'){
+            entry.push(contents.substring(startIndex+1, endIndex));
+            startIndex = endIndex;
+          }
+          else if (contents[endIndex] === '\\'){
+            ++endIndex;
+          }
+        }
+      }
+      else if (contents[endIndex] !== '}'){
+        continue;
+      }
+      
+      data.push(entry);
+      contents = contents.substring(0, currentIndex)+contents.substring(endIndex+1);
+    }
+    
+    return [ contents, data ];
+  };
+  
   var useTemplate = (contents, append) => {
     let ele = $(".js-compose-text");