Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

backup

got multiple lite port views in a single html page.
hovering over a rule in the parse tree should hilite the reduced text.
It is broken, well, never worked.

removed p6 presentation draft that I dumped in a hurry for eiro
  • Loading branch information...
commit 309905982b83d230208c0b17539d98aceb9ae953 1 parent 414d69e
@cognominal authored
View
51 css/zbrew.css
@@ -1,4 +1,19 @@
-.parse-path {
+.liteViewport {
+ border-width: 2px;
+ border-color : #A0A0A0;
+ border-style: solid;
+}
+
+div.text {
+ margin-top: 4em;
+ margin-bottom: 4em;
+ font-size:11px;
+ font-family: arial, helvetica, geneva, 'sans-serif';
+ line-height:15px;
+
+}
+
+.parsePathPane {
border-width : 4px;
min-height : 15ex;
overflow: scroll;
@@ -14,24 +29,36 @@
box-shadow: 0 3px 5px rgba(0,0,0,0.1);
}
-.opr { color: #ff0000 }
-.opd :not(.opr) { color: #0000ff }
-.current-item { background-color : #FF8; }
+.currentRulePane {
+ height: 2em;
+ background-color: #E0E0E0;
+ border-width: 2px;
+ border-color : #A0A0A0;
+ border-style: solid;
-#offset-content {
- height: 100px;
}
-.parse-crumb {
- padding: 4px;
+.codePane {
+ background-color: #E0E0E0;
+/* border-width: 2px;
+ border-color : #A0A0A0;
+ border-style: solid;
+*/
}
-.parsePathSubcomponent:hover {
+.opr { color: #ff0000 }
+.opd :not(.opr) { color: #0000ff }
+.hilitedRuleNm { background-color : #FF8; }
+.DHReducedCode { background-color : #FF8; }
+
+.parsePathItem { padding: 4px; }
+
+.parsePathSubItem:hover {
/* padding: 4px;*/
background-color : #BBB
}
-.parsePathSubcomponent {
+.parsePathSubItem {
display: block;
}
@@ -60,8 +87,8 @@
/*--------------------- Layout and Typography ----------------------------*/
body { /* probably need to select further */
font-family: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;
- font-size: 15px;
- line-height: 22px;
+ font-size: 11px;
+ line-height: 15px;
color: #252519;
margin: 0; padding: 0;
}
View
26 i.html
@@ -1,13 +1,31 @@
+<!doctype html>
<html>
<head>
-<title>Code Hiliter</title>
+<title>Code Hiliter Early </title>
<link rel="stylesheet" type="text/css" href="css/zbrew.css"/>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.mobile-1.1.0.js"></script>
<script type="text/javascript" src="js/jquery.easing.1.3.js"></script>
-<script type="text/javascript" src="js/hilite.js"></script>
+<script type="text/javascript" src="js/liteViewport.js"></script>
</head>
<body>
- <div id="viewport">
+<div class="text">
+ <p>A lite portview has three panes when it is expanded. The lower pane contains code and the two
+ top panes contain information about how that code is parsed. When you hover over the code the information displayed over the two top panes changes, as well as the dynamic highlighting in the code pane. We say that the code hovered over is current. The information and hightlighting gives a lot information on how the current code is parsed.</p>
+
+ <p>Dynamic higlighting in the code pane : the current operator is displayed with a reddish background. If it has operands it is in a blueish background. Whatever the term operator and operands denote here depends very much on the language and the context. You will figure it out.</p>
+
+ <p>The middle pane displays the rule used to recognize the current code.</p>
+ <p>the top pane is called the parse path paned. Going from left to right, it shows the path in the parse tree to reach the said rule. When a sequence of rules reduces to the same string it is show top to bottom instead of left to
+ right.</p>
+
+ <p>Currently the code pane is readonly.</p>
+</div>
+
+<div class="text">The current page contains two lite portviews. The shows the parsing of a simple arithmetic expression</div>
+
+<div id="viewport-dh"></div>
+<div class="text">The second portview shows how json is parsed used a Perl 6 grammar. We note a problem when hovering over 666. I don't know how to select a rule after its longname. So using the short name, there is ambiguity and we
+peek the wrong rule</div>
+<div id="viewport-parsed"></div>
</body>
-</html>
View
178 js/LiteViewport.js
@@ -2,15 +2,15 @@
(function() {
$(function() {
- var MarkupForLiteViewport, ViewportPaneId, cloneLiteViewport, dehilite, dynamicHiliteP, generateLitePortview, hilite, insertParseTree, j, liteId, ruleElt, ruleNm, showParsePath, showRule, _i, _len, _ref, _results;
+ var cloneLiteViewport, dehilite, dynamicHiliteP, generateLite, generateLitePortviewContent, hilite, insertParseTree, j, liteId, markupForLiteViewport, paneId, ruleNm, showParsePath, showRule, _i, _len, _ref, _results;
dynamicHiliteP = true;
- MarkupForLiteViewport = function(idSuffix) {
+ markupForLiteViewport = function(viewportId) {
var idAndClass;
- idSuffix = escape(idSuffix);
- idAndClass = function(prefix) {
- return "id=${prefix+'-'+idSuffix} class=${prefix}";
+ viewportId = escape(viewportId);
+ idAndClass = function(paneNm) {
+ return "id=" + (paneNm + '-' + viewportId) + " class=" + paneNm;
};
- return "<div " + (idAndClass('liteViewport')) + ">\n <div " + (idAndClass('ruleSummaryPane')) + "\n <div id=\"mcs_container\">\n <div class=\"customScrollBox\">\n <div class=\"horWrapper\">\n <div class=\"container\">\n <div " + (idAndClass('parsePathPane')) + "/>\n </div>\n <div class=\"dragger_container\">\n <div class=\"dragger\"></div>\n </div>\n </div>\n </div>\n </div>\n <div " + (idAndClass('currentRulePane')) + " />\n <div id=\"codePane" + id + "/>\n</div>";
+ return "<div " + (idAndClass('liteViewport')) + ">\n <div " + (idAndClass('ruleSummaryPane')) + "\n <div id=\"mcs_container\">\n <div class=\"customScrollBox\">\n <div class=\"horWrapper\">\n <div class=\"container\">\n <div " + (idAndClass('parsePathPane')) + "/>\n </div>\n <div class=\"dragger_container\">\n <div class=\"dragger\"></div>\n </div>\n </div>\n </div>\n </div>\n <div " + (idAndClass('currentRulePane')) + " />\n <div " + (idAndClass('codePane')) + ">\n</div>";
};
cloneLiteViewport = function(topElt, suffix, dest) {
var html, re;
@@ -22,43 +22,45 @@
return to.html(html);
};
$(".code").live('vmouseover', function(ev) {
- if (!dynamicHyliteP) {
+ if (!dynamicHiliteP) {
return;
}
ev.stopPropagation();
return hilite(ev);
});
- ViewportPaneId = function(elt, paneNm) {
- var id, re, suffix;
- id = $(elt).parents().filter(".liteViewport").attr('id')[0];
- re = /-(\w)$/;
- re.exec(id);
- if (!match.length) {
+ $(".parsePathItem").live('vmouseover', function(ev) {
+ var elt;
+ return elt = ev.currentTarget;
+ });
+ $(".parsePathSubitem").live('vmouseover', function(ev) {
+ var elt, id, lid;
+ elt = ev.currentTarget;
+ lid = liteId(elt);
+ dehilite(lid);
+ elt = ev.currentTarget;
+ id = elt.id;
+ $(elt).addClass("hilitedRuleNm");
+ showRule(elt, $(elt).text());
+ return $('#' + id.substring(5)).addClass("hilitedRuleNm");
+ });
+ paneId = function(elt, paneNm) {
+ var id, match, re;
+ id = $(elt).parents().filter(".liteViewport").attr('id');
+ re = /-(\w+)$/;
+ match = re.exec(id);
+ if (!(match != null ? match.length : void 0)) {
alert;
}
- suffix = match[0];
- console.log(idNr);
- return "#" + (componentNm + '-' + suffix);
+ id = match[1];
+ if (paneNm) {
+ return "#" + (paneNm + '-' + id);
+ }
+ return id;
};
liteId = function(elt) {
- return VieportComponentId(elt, 'liteViewport');
+ return paneId(elt, 'liteViewport');
};
- $(".parsePathComponent").live('vmouseover', function(ev) {
- var bread_components_on_hove, elt, id, lid;
- elt = ev.currentTarget;
- lid = liteId(elt);
- $("" + lid + " .code").removeClass("editing");
- bread_components_on_hove = 0;
- $(".code").removeClass("currentItem");
- $(".parse-subcomponent").removeClass("currentItem");
- elt = ev.currentTarget;
- id = elt.id;
- $(elt).addClass("currentItem");
- console.log("" + (id.substring(5)) + " " + id);
- showRule($(elt).text());
- return $('#' + id.substring(5)).addClass("currentItem");
- });
ruleNm = function(elt) {
var classNm, m, _i, _len, _ref;
_ref = elt.className.split(' ');
@@ -71,14 +73,12 @@
}
return '';
};
- ruleElt = function(portviewId) {
- return $("" + portviewId + " > .currentRule")[0];
- };
- showRule = function(portviewId, ruleNm) {
- var rules;
+ showRule = function(elt, ruleNm) {
+ var ruleElt, rules;
+ ruleElt = $(paneId(elt, "currentRulePane"));
rules = JSON.parse(ruleElt.attr('data'));
if (rules[ruleNm]) {
- return ruleElt(litePortviewId).text(rules[ruleNm]);
+ return ruleElt.text(rules[ruleNm]);
}
};
hilite = function(ev) {
@@ -89,7 +89,7 @@
showParsePath(elt, lid);
dad = elt.parentNode;
if (rule = ruleNm(dad)) {
- showRule(rule);
+ showRule(elt, rule);
}
$(dad).addClass('opd');
unnamedP = function(i) {
@@ -101,7 +101,7 @@
};
dehilite = function(lid) {
var klass, _i, _len, _ref, _results;
- _ref = ['opd', 'opr', 'editing'];
+ _ref = ['opd', 'opr', 'editing', 'hilitedRuleNm'];
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
klass = _ref[_i];
@@ -109,12 +109,12 @@
}
return _results;
};
- showParsePath = function(elt) {
- var AddToPath, ParsePathElt, component, componentHtml, components, subcomponent, text, _i, _j, _len, _len1, _ref, _results;
- $("${lid} .code").removeClass("currentItem");
- components = [];
+ showParsePath = function(elt, lid) {
+ var AddToPath, ParsePathElt, item, itemHtml, parsePath, prevText, sameText, si, text, _i, _j, _len, _len1, _results;
+ $("" + lid + " .code").removeClass("hilitedRuleNm");
+ parsePath = [];
AddToPath = function(elt, sameText) {
- var bundle, obj;
+ var obj;
if (sameText == null) {
sameText = false;
}
@@ -124,40 +124,37 @@
text: $(elt).text()
};
if (sameText) {
- return bundle = components[components.length - 1].push(obj);
+ return parsePath[0].unshift(obj);
} else {
- return components.unshift([obj]);
+ return parsePath.unshift([obj]);
}
};
AddToPath(elt);
- text = $(elt).text();
+ prevText = $(elt).text();
while ($(elt.parentNode).hasClass('code')) {
elt = elt.parentNode;
- AddToPath(elt, text === $(elt).text());
+ text = $(elt).text();
+ sameText = text === prevText;
+ prevText = text;
+ AddToPath(elt, sameText);
}
- ParsePathElt = $(".parse-path");
+ ParsePathElt = $("" + lid + " .parsePathPane");
ParsePathElt.html("<table><tr></tr></table>");
_results = [];
- for (_i = 0, _len = components.length; _i < _len; _i++) {
- component = components[_i];
- componentHtml = '';
- _ref = component.reverse();
- for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
- subcomponent = _ref[_j];
- componentHtml += "<div class='parse-subcomponent' id='component" + subcomponent.id + "'>" + subcomponent.cnm + "</div>";
+ for (_i = 0, _len = parsePath.length; _i < _len; _i++) {
+ item = parsePath[_i];
+ itemHtml = '';
+ for (_j = 0, _len1 = item.length; _j < _len1; _j++) {
+ si = item[_j];
+ itemHtml += "<div class='parsePathSubitem' id='item" + si.id + "'>" + si.cnm + "</div>";
}
- _results.push(ParsePathElt.append($("<td class='parse-component'>" + componentHtml + "</td>")));
+ _results.push(ParsePathElt.append("<td class='parsePathItem'>" + itemHtml + "</td>"));
}
return _results;
};
- insertParseTree = function(elt, data, id, prefix) {
- var appendElt, docco, insertSubtree, parseTree;
- if (id == null) {
- id = 0;
- }
- if (prefix == null) {
- prefix = '';
- }
+ insertParseTree = function(elt, data, liteId) {
+ var appendElt, docco, id, insertSubtree, parseTree;
+ id = 0;
appendElt = function(elt, s, klass) {
var d, e;
elt.append('<span>');
@@ -172,16 +169,16 @@
e.addClass('rule-' + klass);
e.addClass('named');
}
- e.attr('id', prefix + id++);
+ e.attr('id', "" + liteId + "-" + (id++));
e.addClass('code');
- return e;
+ return [e, id];
};
- insertSubtree = function(elt, subtree) {
- var k, obj, v, _results;
+ insertSubtree = function(elt, subtree, id) {
+ var k, obj, v, _ref, _results;
_results = [];
for (k in subtree) {
v = subtree[k];
- elt = appendElt(elt, null, k);
+ _ref = appendElt(elt, null, k), elt = _ref[0], id = _ref[1];
_results.push((function() {
var _i, _len, _results1;
_results1 = [];
@@ -200,32 +197,31 @@
};
parseTree = data.parseTree;
docco = data.docco;
- return insertSubtree(elt, parseTree);
+ return insertSubtree(elt, parseTree, id);
};
- generateLitePortview = function(elt, data, id, prefix) {
- if (id == null) {
- id = 0;
- }
- if (prefix == null) {
- prefix = '';
- }
- insertParseTree(elt, data);
- return $(".currentRule").attr('data', JSON.stringify(data.rules));
+ generateLitePortviewContent = function(elt, data, liteId) {
+ var ruleElt;
+ insertParseTree(elt, data, liteId);
+ ruleElt = $("#currentRulePane-" + liteId);
+ return ruleElt.attr('data', JSON.stringify(data.rules));
};
- _ref = ['parsed', 'dh'];
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- j = _ref[_i];
- _results.push($.getJSON("data/" + j + ".json", function(data) {
+ generateLite = function(j) {
+ return $.getJSON("data/" + j + ".json", function(data) {
var elt, m;
- m = MarkupForLiteViewport(j);
- $('#viewport').append(m);
- elt = $()[0];
+ m = markupForLiteViewport(j);
+ $("#viewport-" + j).append(m);
+ elt = $("#codePane-" + j);
if (!elt) {
alert("can't find liteViewport element");
}
- return generateLitePortview(elt, eltId, data);
- }));
+ return generateLitePortviewContent(elt, data, j);
+ });
+ };
+ _ref = ['dh', 'parsed'];
+ _results = [];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ j = _ref[_i];
+ _results.push(generateLite(j));
}
return _results;
});
View
284 p6.text
@@ -1,284 +0,0 @@
-= La place de Perl dans l'univers :)
-
-42 ou 666?
-
-[le Web pourrait] etre une sphère infinie dont le centre est partout, la circonférence nulle part. (adapté de Pascal)
-
-Individuation et grammatisation : quand la technique fait sens... (Bernard Stiegler)
-
-= hommes XXième siècle
-
-- Edward Bernays (manufacture du consentement)
--- manipulation de la démocratie, sufragettes fumeuse 1928
-- Henry Ford (les produits du capitalisme pour tous)
- -Norman Borlaug (Révolution Verte - Fondations Rockfeller/Ford)
--- mais Armatyan Sen : distribution > production
-- Turing/Shannon/Neuman/Gordon Moore/Vint Cerf/Tim Berners Lee
-
-Bell Labs (transistor, laser, Unix, C/C++)
-
-Et le XXIième?
-
-- Craig Venter
-
-= Histoire du capitalisme industriel
-
--énergie pas chère exploitée par les machines
-
-- première révolution industrielle
--- quasi esclavage des ex-paysans
---... au service d'une minorité bourgeoise
-- seconde révolution industrielle
--- Taylorisme
--- la Ford T vendue aux ouvriers qui la construisent
--- démocratisation de la machine à laver
--- plan Marshall et American Way of life en Europe
--- géostratégie du pétrole
-
-= histoire du capitalisme (suite)
-
-- cancer Bernaysien
--- captation de l'attention par les mass media
---- assymétrie des média
---- financé par la publicité
-
-= Histoire du capitalisme depuis 1970
-
--- pipeau de la société post-industrielle
---confiscation de la richesse par une minorité
--- pic pétrolier per capita passé
---bulle de l'éducation
---échec de l'informatisation de l'éducation
---- la question du hardware est mineure
---- mais l'iPad est cool
-
-= Repenser le capitalisme
-
-- Réponse de Stiegler : repenser le capitalisme
--- media réticulaire et économie de la contribution
--- Internet
--- l'amateur est créatif car il se fout des silos des professionnels
-
-mais aussi
-
-- la génomique et les cellules synthétiques
-- progrès du séquencage : vite que la loi de Moore
--- industrie biologique plutot que physico-chimique.
-
-= la place de Perl là dedans?
-
--penser la "digital littéracy".
-
-création d'un média lettré réticulaire, et économie de la contribution
-en résistance au despotisme, voire du cancer Bernaysien
-
--Avantage de Perl : concu par un linguiste
--Multiplication future des slangs
--Mais nécessité de s'adapter au web.
-
-= Lecture
-
-- Propaganda (Bernays 1908)
-- Manufacturing of Consent (Chomsky 1989)
-- Debt : 5000 the first years (Graeber 2011)
-- The Shock Doctrine (Naomy Klein) 2007
-- Le site Ars Industrialis
-- et les bouquins de Bernard Stiegler (mais inégaux)
-
-= lectures techniques
-
-- 6model (blog de jnthn)
-
-Notion de type
-
-- Real World Haskell
-- Type and programming languages
-- les papiers de Wadler
-
-= Perl : passé, présent, futur
-
-= Larry Wall
-=* concepteur et implémenteur de Perl
-
-- mais aussi
--- de rn, lecteur de news usenet
--- de patch, la contrepartie de diff
--- le concepteur de Perl 6
-
-- TIMTOWTDI => TimToady
-
-= Perl 5
-
-- emphase sur la rétrocompatibilité
-- vivant, release importante annuelle
-- backport de fonctionalités de Perl 6
-- avantages de CPAN
-- difficultés de choix dans CPAN (le danger de TIMTOWTDI)
-- monstruosité des dépendances CPAN
-- partie intégrante de UNIX
-- REPL
-
-= Perl 5 et la linguistique
-
-- huffmanization
--- le pronom universel $_
--- TIMTOWTDI
-- contexte
-
-= Principe Généraux
-
-- Whirlpool par opposition à la conception en cascade
-- feedback en cercle concentrique
-- ni une religion/ni un business
--- Comparer avec la programmation Agile
---- en C++ !
-
-= Releases
-
-- 1.0 déc. 87
-- 2.0 juin 88 meilleures regexps, variables locales
-- 3.0 oct. 89 données binaires. pack/unpack, ioctl...
-- 4.0 mars 91 marketting "programming Perl"
-- 5.0 variables lexicales, pod et perldoc
-
-= originalité de Perl 1-5
-
-- un awk gonflés aux hormones
-- accès aux appel système
-- un condensé d'Unix dans un seul exécutable
-- opposé des approches traditionnelles
--- programmation en C
---- gestion manuelle de la mémoire
--- programmation en shell
---- inconvénient : cout des pipe et forks
-- les sigils
-
-= la concurrence traditionnelle
-=* les "batards" de Perl
-
-- langages "dynamiques"
--- Python (1990)
--- Ruby (1995)
--- PHP
-
-= Mais bien d'autres
-
--haskell : fonctionnel, statiquement typé
--les enfants de Java
--- Java le language est une merde
--- mais le VM est cool
--- Scalar, Groovy, Clojure
-
-= New kid on the block
-
-- Node.js
-- basé sur V8 de
-- toutes les librairies sont asynchrones
-- coffeescript
-- iced coffeescript
-
-
-== Perl et le web
-==* opportunités manquées
-
-- 1991 première édition de Programming Perl
-- Tim O'reilly propose un chapitre sur le web
-- Larry refuse de spécialiser Perl sur une niche
-
-== internet Web et le cloud
-
--une décentralisation
--une centralisation
-- mais des trucs cool au niveau OS
--- Heroku, Joyent (SmartOS: Zfs, Zones, Dtrace)
-
-= IDE et collaboration sur le web
-
-- irc/ mail lists
-- Github
-- Cloud9
--Komodo?
-
-= Perl et le web
-=* opportunités saisies
-
-- Komodo par ActiveState 1997
-- Dancer un clone de Sinatra
-- Spore: Specifications to a Portable REST Environment
-
-= Perl 6, une spec et des implantations
-
-- les synopsis sont la spec
-- il y aura plusieurs implémentations
-- le jeu de test est le critère de conformité
-
-= Perl 6 aujourdh'hui
-
--Machine Parrot
--Compilateur Rakudo
--Découplage de Rakudo par rapport à parrot
-- Portage de Rakudo
-
-= Les distributions Perl 6
-
-- basées sur rakudo
--- rakudo : le compilateur
--- rakudo star :
---- le compilateur plus des bibliothèques
-
-
-= les bibliothèques Perl 6
-
-= les dépots github Perl 6
-
-- specs : les synopsys
-- pugs : divers trucs, dont historique
-- parrot : parrot, le vm
-- nqp : not quite perl
-- rakudo
-
-= parrot/nqp/rakudo
-
-- Parrot est le VM
-- NQP : Not Quite Perl
-
-= la paresse
-
-- les listes sont paresseuses
-
-TBD : Expandre les points essentiels de la présentation de pmichaud
-
-= 6model
-
--interface avec les implémentation de types
--interface avec les implémentations d'objet
-
-= blizkost/zavolaj
-
-- zavolaj : Interface avec les bibliothèques C
-- blizkost : Embedding de Perl 5 dans Perl 6
-
-= Autres projets de compilateur Perl 6
-
-- Perl 6 sur .net
-- Perlito
-- ...
-
-= Pod
-
-Une nouvelle version de Pod
-
-= Perl 6, information éclatée
-
-Un visionnaire mais pas de direction de projet
-
-- mailing lists
-- irc
-- github
-- blogs divers
-- gestion de bugs:
--- Parrot : ???
--- Rakudo: Request Tracker
-
-
-
View
284 p6.txt
@@ -1,284 +0,0 @@
-= La place de Perl dans l'univers :)
-
-42 ou 666?
-
-[le Web pourrait] etre une sphère infinie dont le centre est partout, la circonférence nulle part. (adapté de Pascal)
-
-Individuation et grammatisation : quand la technique fait sens... (Bernard Stiegler)
-
-= hommes XXième siècle
-
-- Edward Bernays (manufacture du consentement)
--- manipulation de la démocratie, sufragettes fumeuse 1928
-- Henry Ford (les produits du capitalisme pour tous)
- -Norman Borlaug (Révolution Verte - Fondations Rockfeller/Ford)
--- mais Armatyan Sen : distribution > production
-- Turing/Shannon/Neuman/Gordon Moore/Vint Cerf/Tim Berners Lee
-
-Bell Labs (transistor, laser, Unix, C/C++)
-
-Et le XXIième?
-
-- Craig Venter
-
-= Histoire du capitalisme industriel
-
--énergie pas chère exploitée par les machines
-
-- première révolution industrielle
--- quasi esclavage des ex-paysans
---... au service d'une minorité bourgeoise
-- seconde révolution industrielle
--- Taylorisme
--- la Ford T vendue aux ouvriers qui la construisent
--- démocratisation de la machine à laver
--- plan Marshall et American Way of life en Europe
--- géostratégie du pétrole
-
-= histoire du capitalisme (suite)
-
-- cancer Bernaysien
--- captation de l'attention par les mass media
---- assymétrie des média
---- financé par la publicité
-
-= Histoire du capitalisme depuis 1970
-
--- pipeau de la société post-industrielle
---confiscation de la richesse par une minorité
--- pic pétrolier per capita passé
---bulle de l'éducation
---échec de l'informatisation de l'éducation
---- la question du hardware est mineure
---- mais l'iPad est cool
-
-= Repenser le capitalisme
-
-- Réponse de Stiegler : repenser le capitalisme
--- media réticulaire et économie de la contribution
--- Internet
--- l'amateur est créatif car il se fout des silos des professionnels
-
-mais aussi
-
-- la génomique et les cellules synthétiques
-- progrès du séquencage : vite que la loi de Moore
--- industrie biologique plutot que physico-chimique.
-
-= la place de Perl là dedans?
-
--penser la "digital littéracy".
-
-création d'un média lettré réticulaire, et économie de la contribution
-en résistance au despotisme, voire du cancer Bernaysien
-
--Avantage de Perl : concu par un linguiste
--Multiplication future des slangs
--Mais nécessité de s'adapter au web.
-
-= Lecture
-
-- Propaganda (Bernays 1908)
-- Manufacturing of Consent (Chomsky 1989)
-- Debt : 5000 the first years (Graeber 2011)
-- The Shock Doctrine (Naomy Klein) 2007
-- Le site Ars Industrialis
-- et les bouquins de Bernard Stiegler (mais inégaux)
-
-= lectures techniques
-
-- 6model (blog de jnthn)
-
-Notion de type
-
-- Real World Haskell
-- Type and programming languages
-- les papiers de Wadler
-
-= Perl : passé, présent, futur
-
-= Larry Wall
-=* concepteur et implémenteur de Perl
-
-- mais aussi
--- de rn, lecteur de news usenet
--- de patch, la contrepartie de diff
--- le concepteur de Perl 6
-
-- TIMTOWTDI => TimToady
-
-= Perl 5
-
-- emphase sur la rétrocompatibilité
-- vivant, release importante annuelle
-- backport de fonctionalités de Perl 6
-- avantages de CPAN
-- difficultés de choix dans CPAN (le danger de TIMTOWTDI)
-- monstruosité des dépendances CPAN
-- partie intégrante de UNIX
-- REPL
-
-= Perl 5 et la linguistique
-
-- huffmanization
--- le pronom universel $_
--- TIMTOWTDI
-- contexte
-
-= Principe Généraux
-
-- Whirlpool par opposition à la conception en cascade
-- feedback en cercle concentrique
-- ni une religion/ni un business
--- Comparer avec la programmation Agile
---- en C++ !
-
-= Releases
-
-- 1.0 déc. 87
-- 2.0 juin 88 meilleures regexps, variables locales
-- 3.0 oct. 89 données binaires. pack/unpack, ioctl...
-- 4.0 mars 91 marketting "programming Perl"
-- 5.0 variables lexicales, pod et perldoc
-
-= originalité de Perl 1-5
-
-- un awk gonflés aux hormones
-- accès aux appel système
-- un condensé d'Unix dans un seul exécutable
-- opposé des approches traditionnelles
--- programmation en C
---- gestion manuelle de la mémoire
--- programmation en shell
---- inconvénient : cout des pipe et forks
-- les sigils
-
-= la concurrence traditionnelle
-=* les "batards" de Perl
-
-- langages "dynamiques"
--- Python (1990)
--- Ruby (1995)
--- PHP
-
-= Mais bien d'autres
-
--haskell : fonctionnel, statiquement typé
--les enfants de Java
--- Java le language est une merde
--- mais le VM est cool
--- Scalar, Groovy, Clojure
-
-= New kid on the block
-
-- Node.js
-- basé sur V8 de
-- toutes les librairies sont asynchrones
-- coffeescript
-- iced coffeescript
-
-
-== Perl et le web
-==* opportunités manquées
-
-- 1991 première édition de Programming Perl
-- Tim O'reilly propose un chapitre sur le web
-- Larry refuse de spécialiser Perl sur une niche
-
-== internet Web et le cloud
-
--une décentralisation
--une centralisation
-- mais des trucs cool au niveau OS
--- Heroku, Joyent (SmartOS: Zfs, Zones, Dtrace)
-
-= IDE et collaboration sur le web
-
-- irc/ mail lists
-- Github
-- Cloud9
--Komodo?
-
-= Perl et le web
-=* opportunités saisies
-
-- Komodo par ActiveState 1997
-- Dancer un clone de Sinatra
-- Spore: Specifications to a Portable REST Environment
-
-= Perl 6, une spec et des implantations
-
-- les synopsis sont la spec
-- il y aura plusieurs implémentations
-- le jeu de test est le critère de conformité
-
-= Perl 6 aujourdh'hui
-
--Machine Parrot
--Compilateur Rakudo
--Découplage de Rakudo par rapport à parrot
-- Portage de Rakudo
-
-= Les distributions Perl 6
-
-- basées sur rakudo
--- rakudo : le compilateur
--- rakudo star :
---- le compilateur plus des bibliothèques
-
-
-= les bibliothèques Perl 6
-
-= les dépots github Perl 6
-
-- specs : les synopsys
-- pugs : divers trucs, dont historique
-- parrot : parrot, le vm
-- nqp : not quite perl
-- rakudo
-
-= parrot/nqp/rakudo
-
-- Parrot est le VM
-- NQP : Not Quite Perl
-
-= la paresse
-
-- les listes sont paresseuses
-
-TBD : Expandre les points essentiels de la présentation de pmichaud
-
-= 6model
-
--interface avec les implémentation de types
--interface avec les implémentations d'objet
-
-= blizkost/zavolaj
-
-- zavolaj : Interface avec les bibliothèques C
-- blizkost : Embedding de Perl 5 dans Perl 6
-
-= Autres projets de compilateur Perl 6
-
-- Perl 6 sur .net
-- Perlito
-- ...
-
-= Pod
-
-Une nouvelle version de Pod
-
-= Perl 6, information éclatée
-
-Un visionnaire mais pas de direction de projet
-
-- mailing lists
-- irc
-- github
-- blogs divers
-- gestion de bugs:
--- Parrot : ???
--- Rakudo: Request Tracker
-
-
-
View
185 src/LiteViewport.coffee
@@ -1,13 +1,24 @@
-# really need to refactor to emphasize the logic, not the jquery operations
+# A viewport is a composite widget that contains many pane. Each panes within a viewport
+# instance is uniquely identified by a string suffixed by "Pane".
+# The ode is refactored to support multiple lite viewports on a single page.
+# `&MarkupForLiteViewport' generates markup. The inner routine `idAndClass` appends the
+# string `viewportId` is appended to the component panes' class names to create an unique id
+# $("#{lid} .code").removeClass "hilitedRuleNm"
+
+# class names used for DH.
+# `opr` for current operator, `opd` for associated operands if any
+# `hilitedRuleNm`
+# `DHReducedCode`
# code for editing is commented out
$ ->
dynamicHiliteP = true # false after first click on code/doc
# id is escaped to protect from rogue callers
- MarkupForLiteViewport = (idSuffix) ->
- idSuffix = escape idSuffix
- idAndClass = (prefix) -> "id=${prefix+'-'+idSuffix} class=${prefix}"
+ markupForLiteViewport = (viewportId) ->
+ viewportId = escape viewportId
+ # the dash used between `paneNm` and `viewportId` is used to extract the `viewPortId`
+ idAndClass = (paneNm) -> "id=#{paneNm+'-'+viewportId} class=#{paneNm}"
"""
<div #{ idAndClass 'liteViewport'}>
<div #{ idAndClass 'ruleSummaryPane'}
@@ -24,7 +35,7 @@ $ ->
</div>
</div>
<div #{ idAndClass 'currentRulePane'} />
- <div id="codePane#{id}/>
+ <div #{idAndClass 'codePane'}>
</div>
"""
@@ -37,8 +48,8 @@ $ ->
html.replace re, (-> "#{$0}-#{$1}0" ), 'g'
to.html html
- $(".code").live 'vmouseover', (ev) ->
- return unless dynamicHyliteP
+ $(".code").live 'vmouseover', ( ev) ->
+ return unless dynamicHiliteP
ev.stopPropagation()
hilite ev
@@ -53,41 +64,22 @@ $ ->
# $(elt).addClass "editing"
# hilite ev
+ $(".parsePathItem").live 'vmouseover', (ev) ->
+ elt = ev.currentTarget
-# A viewport is constituted of pane.
-# each pane of a viewport (including the view port) has an html id of the form
-# paneName-suffix. All the panes have a unique name within a viewport.
-# The suffix is unique within a viewport
-
-# so far we have only one viewport type which liteViewPort.
-
- # get the id of a pane named `paneNm` that is a parent of `elt`
- ViewportPaneId = (elt, paneNm) ->
- # get the id of the viewport to extract the unique suffix
- id = $(elt).parents().filter(".liteViewport").attr('id')[0]
- re = /-(\w)$/;
- re.exec(id)
- alert unless match.length
- suffix = match[0]
- console.log idNr
- "##{componentNm+'-'+suffix}"
-
- liteId = (elt) -> VieportComponentId elt, 'liteViewport'
-
-
- $(".parsePathComponent").live 'vmouseover', (ev) ->
+ $(".parsePathSubitem").live 'vmouseover', (ev) ->
elt = ev.currentTarget
lid = liteId elt
- $("#{lid} .code").removeClass "editing"
- bread_components_on_hove = 0
- $(".code").removeClass "currentItem"
- $(".parse-subcomponent").removeClass "currentItem"
+ dehilite lid
+# $("#{lid} .code").removeClass "editing"
+# dynamicHiliteP = false
+# $("#{lid} .code").removeClass "hilitedRuleNm"
+# $("#{lid} .parsePathSubItem").removeClass "hilitedRuleNm"
elt = ev.currentTarget
id = elt.id
- $(elt).addClass "currentItem" # color the subcomponent
- console.log "#{ id.substring 5} #{id}"
- showRule $(elt).text()
- $( '#' + id.substring 5 ).addClass "currentItem" # color the corresponding code
+ $(elt).addClass "hilitedRuleNm" # color the subcomponent
+ showRule elt, $(elt).text()
+ $( '#' + id.substring 5 ).addClass "hilitedRuleNm" # color the corresponding code chunk
# # need to support keymaps
# # inhibited handler
@@ -99,10 +91,10 @@ $ ->
# dadInCode = ($(".editing").parent().filter(".code"))[0];
# console.log dadInC ode
# if dadInCode?
-# $(".parse-subcomponent").removeClass "currentItem"
+# $(".parse-subcomponent").removeClass "hilitedRuleNm"
# $(".code").removeClass "editing"
# $(dadInCode).addClass "editing"
-# $( "#component#{dadInCode.id}" ).addClass "currentItem"
+# $( "#component#{dadInCode.id}" ).addClass "hilitedRuleNm"
# if ev.keyCode = 13 && ev.shiftKey
# t
# if ev.keyCode = 13 && ev.ctrlKey
@@ -110,11 +102,28 @@ $ ->
+# A viewport is constituted of panes.
+# Each pane of a viewport (including the view port) has an html id of the form
+# "paneName-viewPortSpecificSuffix". Each pane has a unique `paneName` within a viewport.
+# so far we have only one viewport type which is "liteViewPort".
+
+ # get the html id of a pane named `paneNm` that is a parent of `elt`
+ paneId = (elt, paneNm) ->
+ # get the id of the viewport to extract the unique suffix
+ id = $(elt).parents().filter(".liteViewport").attr('id')
+ re = /-(\w+)$/;
+ match = re.exec(id)
+ alert unless match?.length
+ id = match[1]
+ return "##{paneNm+'-'+id}" if paneNm
+ id;
+
+ liteId = (elt) -> paneId elt, 'liteViewport'
# given an `elt`, extract the associated rule name
# from the class name of the form rule-*.
-# If a class name if rule-string the extracted name is "string"
+# If a class name is "rule-string" the extracted name is "string"
ruleNm = (elt) ->
for classNm in elt.className.split(' ')
@@ -122,11 +131,12 @@ $ ->
return m[1] if m?
return ''
- ruleElt = (portviewId) -> $("#{portviewId} > .currentRule")[0]
+# ruleElt = (litePortviewId) -> $("#currentRulePane-#{litePortviewId}")
- showRule = (portviewId, ruleNm) ->
+ showRule = (elt, ruleNm) ->
+ ruleElt = $( paneId elt, "currentRulePane")
rules = JSON.parse ruleElt.attr('data')
- ruleElt(litePortviewId).text rules[ruleNm] if rules[ruleNm]
+ ruleElt.text rules[ruleNm] if rules[ruleNm]
# `hilite` does dynamic hightlighting
@@ -141,7 +151,7 @@ $ ->
showParsePath(elt, lid)
# extract the current rule code to add it to the rule pane
dad = elt.parentNode
- showRule rule if rule = ruleNm dad
+ showRule elt, rule if rule = ruleNm dad
# DH of an operator and its operand(s).
# I am not documenting much because I will change it.
# see TBD about json and html minimization
@@ -151,49 +161,53 @@ $ ->
$(dad).children().filter(unnamedP).addClass 'opr'
dehilite = (lid) ->
- $("#{lid} .#{klass}").removeClass klass for klass in [ 'opd' , 'opr', 'editing']
-
-
+ for klass in [ 'opd' , 'opr', 'editing', 'hilitedRuleNm']
+ $("#{lid} .#{klass}").removeClass klass
# A parsepath vieport displays the reduction sequence from the parse root.
-# When a # inner reduction element has the same text as the outer,
-# the corresponding parse components are grouped into an td element;
-#that is, they are displayed in a # vertical group.
+# When a inner reduction element has the same text as the outer,
+# the corresponding parse components are grouped into an td element;
+# that is, they are grouped vertically
- showParsePath = (elt) ->
- $("${lid} .code").removeClass "currentItem"
- components = []
+ showParsePath = (elt, lid) ->
+ $("#{lid} .code").removeClass "hilitedRuleNm"
+ parsePath = []
-# `sameText` is true when the text reduced by the current rule as memorized
-# has the 'code' class attribute value
AddToPath = (elt, sameText = false) ->
obj = { cnm: ruleNm(elt), id: elt.id, text: $(elt).text() }
if sameText
- # != -1 will be a good example of DH to disambiguate parsing
- bundle = components[ components.length - 1].push obj
+ parsePath[0].unshift obj
else
- components.unshift [obj]
+ parsePath.unshift [obj]
+# generate the parse path
AddToPath elt
- text = $(elt).text()
+ prevText = $(elt).text()
while $( elt.parentNode ).hasClass('code')
elt = elt.parentNode
- AddToPath elt, text == $(elt).text()
-# we calculated the breadcomponents in `components`
- ParsePathElt = $(".parse-path")
+ text = $(elt).text()
+ sameText = text == prevText
+ prevText = text
+ AddToPath elt, sameText
+
+# display the parse path
+ ParsePathElt = $("#{lid} .parsePathPane")
ParsePathElt.html("<table><tr></tr></table>")
- for component in components
- componentHtml =''
- for subcomponent in component.reverse()
- componentHtml += "<div class='parse-subcomponent' id='component#{subcomponent.id}'>#{subcomponent.cnm}</div>"
- ParsePathElt.append $("<td class='parse-component'>#{componentHtml}</td>")
+ for item in parsePath
+ itemHtml =''
+ for si in item
+ itemHtml += "<div class='parsePathSubitem' id='item#{si.id}'>#{si.cnm}</div>"
+ ParsePathElt.append "<td class='parsePathItem'>#{itemHtml}</td>"
+
+ insertParseTree = (elt, data, liteId) ->
+ id = 0
- insertParseTree = (elt, data, id=0, prefix='') ->
appendElt = (elt, s, klass) ->
elt.append '<span>'
- e = $ elt[0].lastChild # this is sooo ugly
+ # e is set to the element just appended. There is got to be a better way
+ e = $ elt[0].lastChild
e.text s if s
if klass
@@ -204,13 +218,13 @@ $ ->
# 'named' means 'rule-*'. Used for DH.
e.addClass 'named'
# unique id to hilite from the parse path pane (broken feature. why?)
- e.attr 'id', prefix + id++ # `prefix` will be the viewport name.
+ e.attr 'id', "#{liteId}-#{id++}" # `prefix` will be the viewport name.
e.addClass 'code' # is that necessary except for the englobing element?
- return e
+ [ e, id ]
- insertSubtree = (elt, subtree) ->
+ insertSubtree = (elt, subtree, id) ->
for k, v of subtree
- elt = appendElt elt, null, k
+ [elt, id] = appendElt elt, null, k
for obj in v
if $.type(obj) == "string"
appendElt elt, obj
@@ -219,20 +233,25 @@ $ ->
parseTree = data.parseTree
docco = data.docco
- insertSubtree elt, parseTree
+ insertSubtree elt, parseTree, id
- generateLitePortview = (elt, data, id=0, prefix='') ->
- insertParseTree elt, data;
- $(".currentRule").attr('data', JSON.stringify(data.rules))
+ generateLitePortviewContent = (elt, data, liteId) ->
+ insertParseTree elt, data, liteId;
+ ruleElt = $("#currentRulePane-#{liteId}")
+ ruleElt.attr('data', JSON.stringify(data.rules))
- # generate
- for j in [ 'parsed', 'dh' ]
+ generateLite = (j) ->
$.getJSON "data/#{j}.json", (data) ->
- m = MarkupForLiteViewport j
- $('#viewport').append m
- elt = $( )[0]
+ m = markupForLiteViewport j
+ $("#viewport-#{j}").append m
+ elt = $("#codePane-#{j}"); # [0]
alert "can't find liteViewport element" unless elt;
- generateLitePortview elt, eltId, data
+ generateLitePortviewContent elt, data, j
+
+
+ # generate
+ generateLite j for j in [ 'dh', 'parsed' ]
+
View
39 src/hi.coffee
@@ -1,39 +0,0 @@
-$ ->
- bread_crumbs_on_hover = 1 # 0 after first click on code/doc
-
-# we update breadcrumbs on code hovering until we click on the code
- # $(".code").live('vmouseover',
- (ev) ->
- return unless bread_crumbs_on_hover
- ev.stopPropagation()
- hilite ev
-# )
-
-# inhibited handler
-# $(".code").live('vclick',
- (ev) ->
- bread_crumbs_on_hover = 0
- ev.stopPropagation()
- $(".code").removeClass "editing"
- elt = ev.currentTarget
- $(elt).addClass "editing"
- hilite ev
-# )
-
- codeElts = (litePortViewId) -> $("##(litePortViewId) > .code")
- litePortViewId = (elt) ->
- $(elt).parents().filter(".litePortView").attr('id')[0]
-
-
- $(".parse-subcrumb").live('vmouseover', (ev) ->
- $(".code").removeClass "editing"
- bread_crumbs_on_hove = 0
- $(".code").removeClass "currentItem"
- $(".parse-subcrumb").removeClass "currentItem"
- elt = ev.currentTarget
- id = elt.id
- $(elt).addClass "currentItem" # color the subcrumb
- console.log "#{ id.substring 5} #{id}"
- showRule $(elt).text()
- $( '#' + id.substring 5 ).addClass "currentItem" # color the corresponding code
- )
View
54 src/hilite.js
@@ -1,54 +0,0 @@
-// Generated by CoffeeScript 1.3.3
-(function() {
-
- $(function() {
- var docco, recurse;
- docco = {
- TOP: 'TOP',
- string: 's',
- number: 'm'
- };
- recurse = function(elt, jsonMatch) {
- var append, k, m, v, _results;
- append = function(elt, s, klass) {
- var d, e;
- elt.append('<span>');
- e = $(elt[0].lastChild);
- if (s) {
- e.text(s);
- }
- console.log("=" + klass);
- if (klass && (d = docco[klass])) {
- e.addClass('docco-' + d);
- }
- return e;
- };
- _results = [];
- for (k in jsonMatch) {
- v = jsonMatch[k];
- elt = append(elt, null, k);
- _results.push((function() {
- var _i, _len, _results1;
- _results1 = [];
- for (_i = 0, _len = v.length; _i < _len; _i++) {
- m = v[_i];
- console.log("'" + m + "' " + ($.type(m)));
- if ($.type(m) === "string") {
- _results1.push(append(elt, m));
- } else {
- _results1.push(recurse(elt, m));
- }
- }
- return _results1;
- })());
- }
- return _results;
- };
- return $.getJSON('e.json', function(data) {
- console.log(data);
- console.log($.type(data));
- return recurse($('.code'), data);
- });
- });
-
-}).call(this);
View
2  t
@@ -3,5 +3,5 @@ grammar G {
token add { <term> '+' <term> }
token term { <int> || <id> }
token int { \d+ }
- toekn id { \w+ }
+ toekn id { \w+ }
}
Please sign in to comment.
Something went wrong with that request. Please try again.