From 1d1ae715b53d2332f5b5be61a5f9cf0551069fac Mon Sep 17 00:00:00 2001 From: Alexander Yakovlev Date: Sat, 17 Jun 2017 15:40:37 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BA=D1=80=D0=B8=D0=BF=D1=82=20=D0=B2?= =?UTF-8?q?=D1=8B=D1=87=D0=B8=D1=81=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=87?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D0=BE=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- distribution.coffee | 63 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 distribution.coffee diff --git a/distribution.coffee b/distribution.coffee new file mode 100644 index 0000000..557cb9b --- /dev/null +++ b/distribution.coffee @@ -0,0 +1,63 @@ +# Improv distribution assessment +# Currently only for files + +CSON = require 'cson' +glob = require 'glob' + +distribution = {} +template = (phrase) -> + if phrase == undefined or phrase == '' + return [] + [openBracket, closeBracket] = [phrase.indexOf('['), phrase.indexOf(']')] + if openBracket == -1 + return phrase + if closeBracket == -1 + throw new Error("Missing close bracket in phrase: #{phrase}") + before = phrase.slice(0, openBracket) + after = phrase.slice(closeBracket + 1) + directive = phrase.substring(openBracket + 1, closeBracket) + return [directive, after] + +parseGroup = (group) -> + groups = [] + for phrase in group.phrases + nexttpl = null + templates = [] + while nexttpl != undefined + [nexttpl, after] = template (phrase) + if nexttpl != undefined + templates.push(nexttpl) + phrase = after + for tpl in templates + directive = tpl.slice(0, 1) + grp = tpl.substring(1, tpl.length) + if groups.indexOf(grp) == -1 + groups.push grp + if directive == ':' + distribution[grp] ?= 0 + distribution[grp] += 1 + for filename in groups + if spec[filename]? + for groupdata in spec[filename].groups + parseGroup(groupdata) + +files = glob.sync('data/*.cson') +spec = {} +for file in files + data = CSON.parseCSONFile(file) + if not data.groups? + data.groups = [] + if data.phrases? + data.groups.push({ + tags: [], + phrases: data.phrases + }) + data.phrases = null + key = file.substr(0, file.lastIndexOf('.')) || file + key = key.replace('data/', '') + spec[key] = data + +for group in spec.description.groups + parseGroup(group) + +console.log distribution