Commit f6742bdd authored by Krzysztof Kutt's avatar Krzysztof Kutt
Browse files

Merge branch 'xttviewer' into 'master'

xttviewer plugin (by Magda Chmielewska i Tomek Szczesniak)

See merge request !2
Showing with 18940 additions and 0 deletions
+18940 -0
xttviewer Plugin for DokuWiki
Visualisation of xtt2 tables.
All documentation for this plugin can be found at
http://student.agh.edu.pl/~aanti/
If you install this plugin manually, make sure it is installed in
lib/plugins/xttviewer/ - if the folder is called different it
will not work!
Please refer to http://www.dokuwiki.org/plugins for additional info
on how to install plugins in DokuWiki.
----
Copyright (C) Magda <aantii@o2.pl>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
See the COPYING file in your DokuWiki folder for details
svg {
fill: #F6F5F7;
background-color: #F6F5F7;
background: #F6F5F7;
}
line {
fill: black;
stroke: gray;
stroke-width: 1.0px;
}
.link {
fill:none;
stroke:gray;
stroke-width: 1px;
}
marker{
fill:gray;
stroke:gray;
}
.header rect {
font: 10px sans-serif;
fill: #313cbd;
}
.non-header rect {
font: 10px sans-serif;
fill: #7882f6;
}
rect {
stroke: #737373;
stroke-width: 1.5px;
}
rect.highlighted{
fill: #FCCA23;
}
.highlighted{
fill: #FCCA23;
}
#id-cell-10-2{
fill: #FCCA23;
}
text {
font: 9px sans-serif;
pointer-events: none;
fill: white;
}
text.header{
font-weight: bold;
}
text.labels{
font: 17px sans-serif;
fill: gray;
font-weight:bold;
pointer-events: none;
}
.buttonRect{
stroke:none;
}
text.forces.on{
fill: #7882f6;
}
.klasa {
position: absolute;
}
image#icon{
position: relative;
left: 80px;
top: 80px;
}
\ No newline at end of file
Copyright (c) 2013, Michael Bostock
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* The name Michael Bostock may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This diff is collapsed.
This diff is collapsed.
var scale = 0.5;
var tmp;
var width = 6000*scale,
height = 3500*scale;
var force;
var columnsWidths = [];
// Ustawienia rozmiaru komórek
var cellHeight = 30*scale;
var cellWidth = 200*scale;
var tables = [];
function draw(t){
tables = t;
setSize(tables);
// Przypisanie ilosci kolumn i wierszy do kazdej tabeli
tables.forEach(function(table){
//console.log(table);
table.cols = table.conditions.length + table.decisions.length;
table.rows = table.rules.length + 1;
//console.log("Rozmiar tabeli: " +table.cols + ", " + table.rows);
});
// Ustalenie szerokości kulumn
columnWidths = setColumnsWidths(tables);
//console.log(columnWidths);
//console.log("-----");
//console.log(columnWidths);
var table = tables[20];
var svg = d3.select(".klasa").append("svg")
.attr("width", width)
.attr("height", height);
showButtons(svg);
expandCollapse("collapse");
var j = -1;
var k = 0;
var links = setTablesLinks(tables);
force = d3.layout.force()
.charge(-20000)
.nodes(d3.values(tables))
.links(d3.values(links))
.linkDistance(function(d){//console.log(d);
return (d.source.outLinks.length + d.target.inLinks.length)*50+20;}) // wczesniej: 800
.size([width, height])
.gravity(0.2)
.friction(0.7)
.theta(1.2)
.start();
svg.append("svg:defs").selectAll("marker")
.data(["end"]) // Different link/path types can be defined here
.enter().append("svg:marker") // This section adds in the arrows
.attr("id", String)
.attr("viewBox", "0 -5 10 10")
.attr("refX", 10)
.attr("refY", 1)
.attr("markerWidth", 6)
.attr("markerHeight", 6)
.attr("orient", "auto")
.append("svg:path")
.attr("d", "M0,-5L10,0L0,5");
var link = svg.selectAll(".link")
.data(d3.values(links))
//.enter().append("line")
.enter().append("svg:path")
.attr("class", "link")
.attr("marker-end", "url(#end)");
//.style("stroke-width", function(d) { return Math.sqrt(d.value); });
var tableGroup = svg.selectAll("tables").data(tables)
.enter().append("svg:g")
.call(force.drag);
var drag = force.drag()
.on("dragstart", dragstart);
force.on("tick", function() {
tableGroup.attr("x", function(d){if (d.fixed); else if(d.inLinks.length == 0) return d.x = 40; else if (d.outLinks.length == 0) return d.x = (width-getTableWidth(d.id)-400); else return d.x = Math.max(50, Math.min(width - 50, d.x)); })
.attr("y", function(d){return d.y = Math.max(70, Math.min(height - 50, d.y)); });
tableGroup.attr("transform", function(d) {
return "translate(" + d.x + "," + d.y + ")"; });
//link.attr("x1", function(d) { return (d.source.x + getTableWidth(d.source)); })
// .attr("y1", function(d) { return d.source.y; })
// .attr("x2", function(d) { return d.target.x;})
// .attr("y2", function(d) { return d.target.y; });
link.attr("d", function(d) {
var dx = d.target.x - d.source.x,
dy = d.target.y - d.source.y,
dr = 0;//Math.sqrt(dx * dx + dy * dy);
return "M" +
(d.source.x + getTableWidth(d.source)) + "," +
d.source.y + "A" +
dr + "," + dr + " 0 0,1 " +
d.target.x + "," +
d.target.y;
});
});
// .attr("transform", function(d,i){
// var x = 50;
// var y = i*250;
// return "translate("+x+","+y+")";
// });
var rows = tableGroup.append("svg:g").selectAll("tab_rows")
.data(function(d){
var rules = [], header = {};
header.conditions = d.conditions;
header.decisions = d.decisions;
header.id = 0;
rules[0] = header;
return jQuery.merge(rules, d.rules);
})
.enter()
.append("svg:g")
.attr("class", function(d,i){if (i==0) return "header"; else return "non-header";})
//.attr("transform", "translate("+(-200*scale)+","+(-10*scale)+")");
.attr("transform", "translate("+-3+","+(-10*scale)+")");
var cell = rows.selectAll("cell")
.data(function(d){//console.log(jQuery.merge(jQuery.merge([],d.conditions),d.decisions));
return jQuery.merge(jQuery.merge([],d.conditions),d.decisions);})
.enter()
.append("svg:g")
.attr("transform", function(d,i){
var id = d3.select(this.parentNode).datum().id;
var parentId = d3.select(this.parentNode.parentNode).datum().id;
//var x = i*(cellWidth+3*scale)+5*scale;
//var x = i*(columnWidths[parentId][i]);//+3*scale)+5*scale;
var x = 5*scale;
if (i>0) x = sumArray(columnWidths[parentId],0,i-1)+5*scale;
var y = id*(cellHeight+3*scale)+5*scale;
return "translate("+x+","+y+")";
});
cell.append("rect")
.attr("class", function(d,i){//console.log(d);
var rowNum = d3.select(this.parentNode.parentNode).datum().id;
var rowType;
if (rowNum == 0) rowType = "header";
else rowType = "non-header";
var tabId = d3.select(this.parentNode.parentNode.parentNode).datum().id;
return "id-cell "+tabId+"-"+i+" "+rowType;})
//.attr("x", function(d, i){return i*150; })
//.attr("y", function(d, i){if(i%3 == 0) j=j+1; return j*cellHeight;})
//.attr("width", cellWidth)
.attr("width", function(d,i){var parentId = d3.select(this.parentNode.parentNode.parentNode).datum().id; return columnWidths[parentId][i];})
.attr("height", cellHeight)
.on("dblclick", function(d){highlightColumns(d);});
cell.append("text")
.attr("class", function(d){if (d3.select(this.parentNode.parentNode).datum().id == 0) return "header"; else return "non-header";})
.text(function(d){
if (d3.select(this.parentNode.parentNode).datum().id == 0) return d;
else return getSymbol(d.operator)+" "+d.value;})
.attr("x", 30*scale)
.attr("dy", 20*scale);
//d3.values(tables)[14].x = 4000;
//d3.values(tables)[14].fixed = true;
//d3.values(tables)[20].fixed = true;
//console.log(d3.values(tables));
}
function getSymbol(operator){
switch(operator)
{
case "eq":
return "=";
break;
case "neq":
return "";
break;
case "in":
return "";
break;
case "notin":
return "";
break;
case "set":
return ":=";
break;
case "lt":
return "<";
break;
case "lte":
return "";
break;
case "gt":
return ">";
break;
case "gte":
return "";
break;
default:
return operator;
}
}
function setColumnsWidths(tables){
var widths = [];
var columns, ruleColumns;
tables.forEach(function(t,i){
widths[t.id] = [];
columns = jQuery.merge(jQuery.merge([],t.conditions),t.decisions);
for (var j = 0; j < columns.length; j++){
var maxWidth = columns[j].length;
//console.log("przed: "+maxWidth);
for (var k = 0; k < t.rules.length; k++){
ruleColumns = jQuery.merge(jQuery.merge([],t.rules[k].conditions),t.rules[k].decisions);
if (ruleColumns[j].value.length > maxWidth) maxWidth = ruleColumns[j].value.length;
//console.log(ruleColumns[j].value.length);
}
//console.log("po: "+maxWidth);
// TODO: Ustalanie szerokości
//console.log(columns[j]);
//console.log(columns[j].length);
//widths[t.id][j] = 300*scale;
widths[t.id][j] = (maxWidth*10 + 55)*scale;//(columns[j].length*10 + 55)*scale;
}
});
//console.log(widths);
return widths;
}
function sumArray(tab,a,b){
var sum = 0;
if (b<a) return -1;
else{
for (var i = a; i <= b; i++){
sum = sum+tab[i];
}
return sum;
}
}
function getTableWidth(table){
//console.log(columnWidths[table.id]);
return sumArray(columnWidths[table.id], 0, table.cols-1);
}
function getTableHeight(table){
return table.rows*cellHeight;
}
function setTablesLinks(tables){
var links = [];
for (var i = 0; i < tables.length; i++){
tables[i].outLinks = [];
tables[i].inLinks = [];
}
for (var i = 0; i < tables.length; i++){
var tabDecisions = tables[i].decisions;
for (var j = 0; j < tabDecisions.length; j++){
var attribute = tabDecisions[j];
for (var k = 0; k < tables.length; k++){
if (i!=k){
var otherTabConditions = tables[k].conditions;
for (var m = 0; m < otherTabConditions.length; m++){
if (otherTabConditions[m] == attribute) {
var link = {};
link.source = i;
link.target = k;
links.push(link);
// dodanie list tabel wchodzacych i wychodzacych
tables[i].outLinks.push(tables[k].id);
tables[k].inLinks.push(tables[i].id);
}
}
}
}
}
}
function getStartTables(t){
return jQuery.grep(t, function(e){ return e.inLinks.length == 0; });
}
function getEndTables(t){
return jQuery.grep(t, function(e){ return e.outLinks.length == 0; });
}
return links;
}
function dragstart(d){
d.fixed = true;
}
function highlightColumns(d){
unhighlightAll();
if(typeof(d)=="string"){
for(var i = 0; i < tables.length; i++){
var conDec = getCondDecMerged(tables[i]);
if (conDec.indexOf(d)>=0){
jQuery(".non-header.id-cell."+tables[i].id+"-"+conDec.indexOf(d)).css( "fill", "#9F57F7" );
jQuery(".header.id-cell."+tables[i].id+"-"+conDec.indexOf(d)).css( "fill", "#673A9E" );
//document.getElementById( "#id-cell-"+tables[i].id+"-"+conDec.indexOf(d) ).style.fill = "green";
}
}
}
}
function getCondDecMerged(t){
return jQuery.merge(jQuery.merge([],t.conditions),t.decisions);
}
function unhighlightAll(){
jQuery(".id-cell").css( "fill", "" );
}
function showButtons(svg){
var dataset = [
{name:"expand", style: "expand", x:20, y:10, width:75, height:22},
{name:"collapse", style:"collapse", x:20, y:35, width:75, height:22, id:"inc_on"},
{name:"forces on", style:"collapse", x:130, y:10, width:80, height:22},
{name:"forces off", style:"collapse", x:130, y:35, width:80, height:22, id:"inc_on"}
];
var buttons = svg.selectAll(".button")
.data(dataset)
.enter().append("g")
.attr("class", function(d,i){return "button";});
buttons.append("rect")
.attr("x", function(d){return d.x})
.attr("y", function(d){return d.y})
.attr("width", function(d){return d.width;})
.attr("height", function(d){return d.height;})
.on("click", function(d){expandCollapse(d.name);})
.attr("class", function(d,i){return "buttonRect";});
buttons.insert("text")
.attr("x", function(d){return d.x+4;})
.attr("y", function(d){return d.y+d.height/2+5;})
.text(function(d) {return d.name;})
.attr("class", function(d,i){return d.name+" labels";})
.attr("id", function(d){return d.id;});
}
function expandCollapse(d){
if (d=="expand"){
jQuery(".klasa").css("position","absolute");
jQuery("svg").css("width",width);
jQuery("svg").css("height",height);
jQuery(".expand.labels").css('fill','#7882f6');
jQuery(".collapse.labels").css('fill','gray');
}
else if (d=="collapse"){
var tmpWidth = jQuery(".page.group").css("width");
jQuery(".klasa").css("position","relative");
jQuery("svg").css("width",tmpWidth);
jQuery("svg").css("height","240px");
jQuery(".collapse.labels").css('fill','#7882f6');
jQuery(".expand.labels").css('fill','gray');
}
else if (d == "forces on"){
force.nodes().forEach(function(d){d.fixed = false;});
jQuery(".forces.on").css('fill','#7882f6');
jQuery(".forces.off").css('fill','gray');
}
else if (d == "forces off"){
force.nodes().forEach(function(d){d.fixed = true;});
jQuery(".forces.off").css('fill','#7882f6');
jQuery(".forces.on").css('fill','gray');
}
}
function setSize(t){
if (t.length < 10){
width = 3500*scale;
height = 2000*scale;
}
else if (t.length < 20){
width = 5000*scale;
height = 2500*scale;
}
else{
width = 6000*scale;
height = 3500*scale;
}
}
xttviewer/img/collapse.png

2.95 KB

xttviewer/img/expand.png

2.89 KB

This diff is collapsed.
function onSubmitCode(){
//console.log(document.getElementById("code-area").value);
parse(document.getElementById("code-area").value);
}
function parse(data){
//data = String(data);
data = data.replace(/\\n/g, "\n");
//data = data.replace(/\\/g, "\");
data = data.replace(/\\\//g, "\/");
//console.log(data);
var map = {};
var tables = [];
var rules = [];
//console.log(JSON.parse(data));
// Wyciecie komentarzy
var data2 = data.split("\n");
//console.log(data2);
//data2 = data;
data = "";
for (var i = 0; i < data2.length; i++){
if (data2[i].trim()[0] != "%"){
data = data.concat(data2[i]).concat("\n");
}
}
//console.log(data);
data = data.slice(0,-1);
data = data.split(/\.[^0-9]/);
if (data[data.length-1] == "") data.pop();
for(var i = 0; i < data.length; i++){
data[i] = data[i].trim();
}
//console.log(data);
for (var i = 0; i < data.length; i++){
if (data[i].indexOf("xschm")==0) {
// wykryto tabele
var tmp = data[i].split(":");
var id = tmp[0].split(" ");
id = id[id.length-1];
if (id[0]=="\'") id = id.slice(1,-1);
tmp = tmp[1].split("==>");
conditions = (tmp[0].trim()).slice(1,-1).split(",");
decisions = (tmp[1].trim()).slice(1,-1).split(",");
var table = new Table(id, conditions, decisions);
map[id] = tables.length;
tables.push(table);
}
else if (data[i].indexOf("xrule")==0){
// wykryto regule
data[i] = data[i].replace(/ +(?= )/g,'');
var tmp = data[i].trim().split(":");
var ruleDeclaration = tmp[0].split(" ")[1].split("/");
var id = ruleDeclaration[1].trim();
var tableId = ruleDeclaration[0];
if (tableId[0]=="\'") tableId = tableId.slice(1,-1);
var ruleDefinition = tmp[1].trim().split("==>");
var conditions = ruleDefinition[0].trim();
var decisions = ruleDefinition[1].trim();
var actions = null;
var destinationTable = null;
// sprawdzenie czy regula zawiera liste akcji [actions]
if (decisions.split("**>").length>1){
// lista akcji istnieje
decisions = decisions.split("**>")[0];
actions = decisions.split("**>")[1].slice(1,-1).split(",");
}
// podzial 'conditions' i 'decisions' po "," - uwtorzenie tablic elementow
conditions = conditions.slice(1,-1).split(",\n");
decisions = decisions.slice(1,-1).split(",");
for(var j = 0; j < conditions.length; j++){
conditions[j] = conditions[j].trim();
// Rozdzielenie czesci warunkowej na (attribute_name ALSV_OPERATOR value)
var cond = conditions[j];
cond = cond.split(" ");
if(cond.length > 3){
for(var k = cond.length-2; k >= 2; k--){
if (cond[k] == "to") cond[k] = ",";
cond[k] = cond[k].concat(cond.pop());
}
}
conditions[j] = new Condition(cond[0],cond[1],cond[2]);
//console.log(conditions[j]);
}
for(var j = 0; j < decisions.length; j++){
decisions[j] = decisions[j].trim();
var d = decisions[j].split(" ");
decisions[j] = new Decision(d[0],d[1],d[2]);
}
// (...) a schema (table) name that should be given a token when inference mode is set to Token-Driven
// sprawdzenie obecnosci elementu
if(tmp.length>2){
// element istnieje
destinationTable = tmp[2];
}
var rule = new Rule(id, tableId, conditions, decisions, actions, destinationTable);
rules.push(rule);
// console.log("id: " + id + " tableId: " + tableId);
// console.log("conditions: " + conditions);
// console.log("decisions: " + decisions);
}
}
// Przypisanie reguł do odpowiednich tabel
for (var i = 0; i < rules.length; i++){
tables[map[rules[i].tableId]].rules.push(rules[i]);
}
//console.log(tables);
draw(tables);
//localStorage.setItem('tables', JSON.stringify(tables));
}
function Rule(id, conditions, decisions){
this.id = id;
this.conditions = conditions;
this.decisions = decisions;
}
function Rule(id, tableId, conditions, decisions){
this.id = id;
this.tableId = tableId;
this.conditions = conditions;
this.decisions = decisions;
}
function Rule(id, tableId, conditions, decisions, actions, destinationTable){
this.id = id;
this.tableId = tableId;
this.conditions = conditions;
this.decisions = decisions;
this.actions = actions;
this.destinationTable = destinationTable;
}
function Table(id, conditions, decisions, rules){
this.id = id;
this.conditions = conditions;
this.decisions = decisions;
this.rules = rules;
}
function Table(id, conditions, decisions){
this.id = id;
this.conditions = conditions;
this.decisions = decisions;
this.rules = [];
}
function Condition(attribute, operator, value){
this.attribute = attribute;
this.operator = operator;
this.value = value;
}
function Decision(attribute, operator, value){
this.attribute = attribute;
this.operator = operator;
this.value = value;
}
function setTableId(rule, id){
rule.tableId = id;
}
function writeTables(){
document.getE.writeln("ohoho");
}
base xttviewer
author M. Chmielewska, T. Szczęśniak
email aantii@o2.pl
date 2014-05-18
name xttviewer plugin
desc Visualisation of xtt2 tables.
url http://student.agh.edu.pl/~aanti/
<?php
/**
* DokuWiki Plugin xttviewer (Syntax Component)
*
* @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
* @author Magda <aantii@o2.pl>
*/
// must be run within Dokuwiki
if(!defined('DOKU_INC')) die();
class syntax_plugin_xttviewer extends DokuWiki_Syntax_Plugin {
/**
* @return string Syntax mode type
*/
public function getType() {
return 'protected';
//return 'disabled';
}
/**
* @return string Paragraph type
*/
public function getPType() {
return 'normal'; // normal, stack, block
}
/**
* @return int Sort order - Low numbers go before high numbers
*/
public function getSort() {
return 999;
}
/**
* Connect lookup pattern to lexer.
*
* @param string $mode Parser mode
*/
public function connectTo($mode) {
//$this->Lexer->addSpecialPattern('<hmr>',$mode,'plugin_xttviewer');
$this->Lexer->addEntryPattern('<hmr>',$mode,'plugin_xttviewer');
}
public function postConnect() {
$this->Lexer->addExitPattern('</hmr>','plugin_xttviewer');
}
/**
* Handle matches of the xttviewer syntax
*
* @param string $match The match of the syntax
* @param int $state The state of the handler
* @param int $pos The position in the document
* @param Doku_Handler $handler The handler
* @return array Data for the renderer
*/
public function handle($match, $state, $pos, Doku_Handler &$handler){
switch ($state) {
case DOKU_LEXER_ENTER :
break;
case DOKU_LEXER_MATCHED :
break;
case DOKU_LEXER_UNMATCHED :
$lines = explode("\n",$match);
return array($state, $match);
break;
case DOKU_LEXER_EXIT :
break;
case DOKU_LEXER_SPECIAL :
break;
}
return array();
}
/**
* Render xhtml output or metadata
*
* @param string $mode Renderer mode (supported modes: xhtml)
* @param Doku_Renderer $renderer The renderer
* @param array $data The data from the handler() function
* @return bool If rendering was successful.
*/
public function render($mode, Doku_Renderer &$renderer, $data) {
list($state,$match) = $data;
if($mode == 'xhtml') {
switch ($state) {
case DOKU_LEXER_ENTER :
$renderer->doc .= 'some text';
break;
case DOKU_LEXER_MATCHED :
break;
case DOKU_LEXER_UNMATCHED :
//$mat = var_dump($match);
//$mat2 = explode("\n", $match);
$mat2 = addslashes(json_encode($match));
$plugin_path = DOKU_REL.'lib/plugins/xttviewer/';
$renderer->doc .= "<div class=\"klasa\"></div>";
//$renderer->doc .= "<script src=\"http://d3js.org/d3.v3.min.js\"></script>";
$renderer->doc .= "<script src=".$plugin_path."d3/d3.v3.js"."></script>";
$renderer->doc .= "<script src=".$plugin_path."jquery/jquery-2.0.3.js"."></script>";
$renderer->doc .= "<script type=\"text/javascript\" src=".$plugin_path."drawer.js"."></script>";
$renderer->doc .= "<script type=\"text/javascript\" src=".$plugin_path."parser.js"."></script>";
$renderer->doc .= "<script language=\"javascript\">parse('$mat2');</script>";
//$renderer->doc .= '<script type=\"text/javascript\" src=\"../lib/plugins/xttviewer/parser.js\"></script>';
echo "<script type=\"text/javascript\" src=".$plugin_path."parser.js"."></script>";
echo "<script type=\"text/javascript\" src=".$plugin_path."drawer.js"."></script>";
echo "<script src=\"http://d3js.org/d3.v3.min.js\"></script>";
//echo "<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">";
//echo "<circle cx=\"100\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"red\" /></svg>";
//echo "<script language=\"javascript\">";
//echo "parse('$mat2');";
//echo "</script>";
break;
case DOKU_LEXER_EXIT :
break;
case DOKU_LEXER_SPECIAL :
break;
}
return true;
}
return false;
}
}
// vim:ts=4:sw=4:et:
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment