Skip to content

Instantly share code, notes, and snippets.

@andrewdblevins
Last active July 21, 2017 18:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andrewdblevins/fca66e033d07fe2b7df1f4bee8eff84b to your computer and use it in GitHub Desktop.
Save andrewdblevins/fca66e033d07fe2b7df1f4bee8eff84b to your computer and use it in GitHub Desktop.
John wilkins beasts
license: mit
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="https://d3js.org/d3-shape.v1.min.js"></script>
<script src="wilkinssymbol.js"></script>
<script src="wilkinspronounce.js"></script>
<style>
body { margin:0;top:0;right:0;bottom:0;left:0; }
.node text { font: 12px sans-serif; }
.node--internal text {
text-shadow: 0 1px 0 #fff, 0 -1px 0 #fff, 1px 0 0 #fff, -1px 0 0 #fff;
}
.link {
fill: none;
stroke: #111;
stroke-width: 1px;
opacity:.2;
}
.animatedsymb {
stroke:black;
stroke-linecap:round;
stroke-width: 6px;
stroke-dasharray: 1000;
stroke-dashoffset: 1000;
animation: dash 10s linear forwards;
}
@keyframes dash {
to {
stroke-dashoffset: 0;
}
}
</style>
</head>
<body>
<h3><b> THE ANALYTICAL LANGUAGE OF JOHN WILKINS </b></h3>
<p>
</body>
<script>
var data = {
"name": "Beast",
"taxtype": "Genus",
"symbolname": "beast",
"_children": null,
"children": [{
"name": "Whole Hoof",
"taxtype": "Difference",
"_children": null,
"children": [{
"name": "Horse",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-1-1"
}, {
"name": " Donkey",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-1-2"
}, {
"name": " Camel",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-1-3"
}, {
"name": " Elephant",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-1-4"
}],
"symbolname": "beast-1"
}, {
"name": " Cloven Hoof",
"taxtype": "Difference",
"_children": null,
"children": [{
"name": "Cow",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-2-1"
}, {
"name": " Sheep",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-2-2"
}, {
"name": " Elk",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-2-3"
}, {
"name": " Deer",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-2-4"
}, {
"name": " Roebuck",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-2-5"
}, {
"name": " Rhinoceros",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-2-6"
}, {
"name": " Giraffe",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-2-7"
}, {
"name": " Pig",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-2-8"
}],
"symbolname": "beast-2"
}, {
"name": " Not Rapacious",
"taxtype": "Difference",
"_children": null,
"children": [{
"name": "Ape",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-3-1"
}, {
"name": " Monkey",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-3-2"
}, {
"name": " Hare",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-3-3"
}, {
"name": " Rabbit",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-3-4"
}, {
"name": " Porcupine",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-3-5"
}, {
"name": " Squirrel",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-3-6"
}, {
"name": " Rat",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-3-7"
}, {
"name": " Mole",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-3-8"
}],
"symbolname": "beast-3"
}, {
"name": " Feline",
"taxtype": "Difference",
"_children": null,
"children": [{
"name": "Lion",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-4-1"
}, {
"name": " Tiger",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-4-2"
}, {
"name": " Lynx",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-4-3"
}, {
"name": " Cat",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-4-4"
}, {
"name": " Ferret",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-4-5"
}, {
"name": " Martin",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-4-6"
}, {
"name": " Stoat",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-4-7"
}, {
"name": " Beaver",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-4-8"
}],
"symbolname": "beast-4"
}, {
"name": " Canine",
"taxtype": "Difference",
"_children": null,
"children": [{
"name": "Dog",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-5-1"
}, {
"name": " Fox",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-5-2"
}, {
"name": "Seal",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-5-3"
}, {
"name": "Jackal",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-5-4"
}, {
"name": "Anteater",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-5-5"
}, {
"name": "Caraguya",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-5-6"
}],
"symbolname": "beast-5"
}, {
"name": " Oviparous",
"taxtype": "Difference",
"_children": null,
"children": [{
"name": "Tortoise",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-6-1"
}, {
"name": "Frog",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-6-2"
}, {
"name": "Crocodile",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-6-3"
}, {
"name": "Lizard",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-6-4"
}, {
"name": "Salamander",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-6-5"
}, {
"name": "Serpent",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-6-6"
}, {
"name": "Snake",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-6-7"
}, {
"name": "Slow worm",
"taxtype": "Species",
"_children": null,
"symbolname": "beast-6-8"
}],
"symbolname": "beast-6"
}]
};
// set the dimensions and margins of the diagram
var margin = {top: 20, right: 90, bottom: 30, left: 90},
width = 960 - margin.left - margin.right,
height = 960 - margin.top - margin.bottom;
// declares a tree layout and assigns the size
var treemap = d3.tree()
.size([2 * Math.PI, height/2- margin.bottom])
.separation(function(a, b) { return (a.parent == b.parent ? 1 : 2) / a.depth; });
// assigns the data to a hierarchy using parent-child relationships
var nodes = d3.hierarchy(data, function(d) {
return d.children;
});
// maps the node data to the tree layout
nodes = treemap(nodes);
// append the svg object to the body of the page
// appends a 'group' element to 'svg'
// moves the 'group' element to the top left margin
var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom),
g = svg.append("g").attr("transform", "translate(" + (width / 2 + 80) + "," + (height / 2 + 20)+")");
// adds the links between the nodes
var links = g.selectAll(".link")
.data(nodes.links())
.enter().append("path")
.attr("class", "link")
.attr("d", d3.linkRadial()
.angle(function(d) { return d.x; })
.radius(function(d) { return d.y; }));
// adds each node as a group
var node = g.selectAll(".node")
.data(nodes.descendants())
.enter().append("g")
.attr("class", function(d) {
return "node" +
(d.children ? " node--internal" : " node--leaf"); })
.attr("transform", function(d) {
return "translate(" +radialPoint(d.x, d.y)+")"; });
// adds the text to the node
node.append("text")
.attr("y", function(d) { return d.children ? 30 : 20; })
.attr("dy",'.35em')
.style("text-anchor", function(d) {
return d.children ? "middle" : "middle"; })
.text(function(d) { return d.data.name; });
node.append("text")
.attr("y", function(d) { return d.children ? 45 : 30; })
.attr("dy",'.35em')
.style("text-anchor", function(d) {
return d.children ? "middle" : "middle"; })
.style("font-style", "italic")
.text(function(d) { return pronounce(d.data.symbolname); });
node.append("path")
.attr("d", d=>WilkinsSymbol(d.data.symbolname,400))
.attr("x", function(d) { return d.children ? -13 : 13; })
.attr("class","animatedsymb");
function radialPoint(x, y) {
return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];
}
</script>
var GeneraCV = d3.map({
'transgen': 'B\u{0003b1}',
'transrel': 'Ba',
'transact': 'Be',
'discourse':'Bi',
'god':'D\u{0003b1}',
'world': 'Da',
'element': 'De',
'stone': 'Di',
'metal': 'Do',
'leaf': 'G\u{0003b1}',
'flower': 'Ga',
'seed': 'Ge',
'shrub':'Gi',
'tree':'Go',
'exsanguious': 'Z\u{0003b1}',
'fish': 'Za',
'bird': 'Ze',
'beast': 'Zi',
'partspec': 'P\u{0003b1}',
'partgen':'Pa',
'magnitude':'Pe',
'space':'Pi',
'measure':'Po',
'power':'T\u{0003b1}',
'habit':'Ta',
'manner':'Te',
'sensible':'Ti',
'disease':'To',
'spiritact':'C\u{0003b1}',
'corporact':'Ca',
'motionact':'Ce',
'operationact':'Ci',
'econ':'Co',
'posses':'C\u{000223}',
'provis':'S\u{0003b1}',
'civil':'Sa',
'judicial':'Se',
'military':'Si',
'naval':'So',
'eccles':'S\u{000223}',
});
var DifferenceC = d3.map({
'1': 'b',
'2': 'd',
'3': 'g',
'4': 'p',
'5': 't',
'6': 'c',
'7': 'z',
'8': 's',
'9': 'z',
'0': ''
});
var SpeciesV = d3.map({
'1': '\u{0003b1}',
'2': 'a',
'3': 'e',
'4': 'i',
'5': 'o',
'6': '\u{000223}',
'7': 'y',
'8': 'yi',
'9': 'y\u{000223}',
'0': ''
});
function pronounce(symboltype) {
var genera = symboltype.split("-")[0];
var diff = symboltype.split("-")[1];
if (diff == null){
diff = '0';
}
var spec = symboltype.split("-")[2];
if (spec == null){
spec = '0';
}
try{
var g = GeneraCV.get(genera)
var d = DifferenceC.get(diff)
var s = SpeciesV.get(spec);
if(spec>18){
g = g.slice(0,1) +"r"+ g.slice(1)
s = SpeciesV.get(spec - 18);
}
else if (spec>9){
g = g.slice(0,1) +"l"+ g.slice(1)
s = SpeciesV.get(spec - 9);
}
return g+d+s;
}
catch (e) {
return ""
}
}
var GeneraSymbol = d3.map({
'transgen': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size / 3) + ',' + 0 +
'l' + (size / 3) + ',' + -size / 2 +
'l' + (size / 3) + ',' + size / 2 +
'l' + (2 * size / 3) + ',' + 0;
},
'transrel': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size ) + ',' + 0 +
'l' + (2 * size / 3) + ',' + 0 +
'l' + (size / 3) + ',' + size / 2 +
'l' + (size / 3) + ',' + -size / 2 +
'l' + (2 * size / 3) + ',' + 0;
},
'transact': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size / 3) + ',' + 0 +
'A' + size / 3 + ',' + size / 3 + ',1,1,1' + size / 3 + ',' + 0 +
'l' + (2 * size / 3) + ',' + 0;
},
'discourse': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size / 3) + ',' + 0 +
'A' + size / 3 + ',' + size / 3 + ',1,1,0' + size / 3 + ',' + 0 +
'l' + (2 * size / 3) + ',' + 0;
},
'god': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (size * 2) + ',' + 0;
},
'world': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + size / 2 +
'l' + 0 + ',' + -size;
},
'element': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2;
},
'stone': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + size / 2;
},
'metal': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + -pad + ',' + -size / 2 +
'l' + pad * 2 + ',' + size;
},
'leaf': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + pad + ',' + size / 2;
},
'fish': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + size / 2 +
'l' + size / 6 + ',' + -size / 4 + '';
},
'exsanguious': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2 +
'l' + -size / 6 + ',' + size / 4 + '';
},
'beast': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + size / 2 +
'l' + size / 6 + ',' + 0 + '';
},
'bird': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2 +
'l' + -size / 6 + ',' + 0 + '';
},
'partspec': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + size/2 +
'l' + 0 + ',' + -size +
'l' + -size / 6 + ',' + size / 4 + '';
},
'partgen': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + -size / 2 +
'l' + 0 + ',' + size +
'l' + size / 6 + ',' + -size/4 + '';
},
'magnitude': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + (-size / 3) +
'a'+size/5+' '+size/5+' 0 1 0 ' + (-size/5 * 2) +' '+ 0 +'';
},
'space': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + (size / 3) +
'a'+size/5+' '+size/5+' 0 1 0 ' + (size/5 * 2) +' '+ 0 +'';
},
'measure': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + (size/3) +
'l' + 0 + ',' + (-size / 3 * 2) +
'a'+size/5+' '+size/5+' 0 1 0 ' + (-size/5 * 2) +' '+ 0 +'';
},
'power': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + -size/4*.707 + ',' + (-size/4 + -size/4*.707) +
'a' + (size/4) +' '+ (size/4)+' 0 1 0 ' + (size/4*1.414) +' '+ 0 +'';
},
'habit': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + -size/4*.707 + ',' + (size/4 + size/4*.707) +
'a' + (size/4) +' '+ (size/4)+' 0 1 1 ' + (size/4*1.414) +' '+ 0 +'';
},
'manner': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2 +
'l' + -size / 6 + ',' + 0 + '';
},
'sensible': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2 +
'l' + -size / 6 + ',' + 0 + '';
},
'disease': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2 +
'l' + -size / 6 + ',' + 0 + '';
},
'spiritact': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2 +
'l' + -size / 6 + ',' + 0 + '';
},
'corporact': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2 +
'l' + -size / 6 + ',' + 0 + '';
},
'motionact': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2 +
'l' + -size / 6 + ',' + 0 + '';
},
'operationact': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2 +
'l' + -size / 6 + ',' + 0 + '';
},
'econ': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2 +
'l' + -size / 6 + ',' + 0 + '';
},
'posses': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2 +
'l' + -size / 6 + ',' + 0 + '';
},
'provis': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2 +
'l' + -size / 6 + ',' + 0 + '';
},
'civil': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2 +
'l' + -size / 6 + ',' + 0 + '';
},
'judicial': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2 +
'l' + -size / 6 + ',' + 0 + '';
},
'military': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2 +
'l' + -size / 6 + ',' + 0 + '';
},
'naval': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2 +
'l' + -size / 6 + ',' + 0 + '';
},
'eccles': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
'l' + (2 * size) + ',' + 0 + '' +
'M' + 0 + ',' + 0 +
'l' + 0 + ',' + -size / 2 +
'l' + -size / 6 + ',' + 0 + '';
},
});
var DifferenceSymbol = d3.map({
'1': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
' l' + (size / 2) + ',' + (-size / 2) + '';
},
'2': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
' l' + 0 + ',' + (-size / 2) + '';
},
'3': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
' l' + (-size / 2) + ',' + (-size / 2) + '';
},
'4': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
' l' + (-size / 2) + ',' + (size / 2) + '';
},
'5': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
' l' + 0 + ',' + (size / 2) + '';
},
'6': function(size) {
size = Math.sqrt(size);
var r = size / 8;
return 'M' + (-size) + ',' + 0 +
' l' + (size / 2) + ',' + (size / 2) + '';
},
'7': function(size) {
size = Math.sqrt(size);
var r = size / 8;
return 'M' + (-size/2) + ',' + (-size / 2) +
' l' + (-size) + ',' + (size) + '';
},
'8': function(size) {
size = Math.sqrt(size);
var r = size / 8;
return 'M' + (-size) + ',' + (-size/2) +
' l' + 0 + ',' + (size) + '';
},
'9': function(size) {
size = Math.sqrt(size);
var r = size / 8;
return 'M' + (-3 * size/2) + ',' + (-size/2) +
' l' + (size) + ',' + (size) + '';
}, '0': function(size) {
return '';
}
});
var SpeciesSymbol = d3.map({
'1': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (size) + ',' + 0 +
' l' + (-size / 2) + ',' + (-size / 2) + '';
},
'2': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (size) + ',' + 0 +
' l' + 0 + ',' + (-size / 2) + '';
},
'3': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (size) + ',' + 0 +
' l' + (size / 2) + ',' + (-size / 2) + '';
},
'4': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (size) + ',' + 0 +
' l' + (size / 2) + ',' + (size / 2) + '';
},
'5': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (size) + ',' + 0 +
' l' + 0 + ',' + (size / 2) + '';
},
'6': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (size) + ',' + 0 +
' l' + (-size / 2) + ',' + (size / 2) + '';
},
'7': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (size/2) + ',' + (-size/2) +
' l' + (size) + ',' + (size) + '';
},
'8': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (size) + ',' + (-size/2) +
' l' + 0 + ',' + (size) + '';
},
'9': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return 'M' + (3*size/2) + ',' + (-size/2) +
' l' + (-size) + ',' + (size) + '';
},
'0': function(size) {
size = Math.sqrt(size);
var pad = size / 5;
var r = size / 8;
return '';
}
});
function WilkinsSymbol(type, size) {
size = size || 64;
var symboltype = type.split('-');
var genera = symboltype[0];
var diff = symboltype[1];
if (diff == null){
diff = '0';
}
var spec = symboltype[2];
if (spec == null){
spec = '0';
}
try{
var constructed_symbol = GeneraSymbol.get(genera)(size) +
DifferenceSymbol.get(diff)(size) +
SpeciesSymbol.get(spec)(size);
return constructed_symbol;
}
catch (e) {
return ""
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment