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; }, 'flower': 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; }, 'seed': 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; }, 'tree': 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; }, 'shrub': 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 ' + -size/4 +' '+ 0+ ' C '+-size/2+' '+-size/2+ ' '+size/2 +' '+ -size/2+ ' '+size/4 +' '+ 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 ' + -size/4 +' '+ 0+ ' C '+-size/2+' '+size/2+ ' '+size/2 +' '+ size/2+ ' '+size/4 +' '+ 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 ' + -size/4 +' '+ 0+ ' C '+-size/2+' '+size/2+ ' '+size/2 +' '+ size/2+ ' '+size/4 +' '+ 0+ 'M ' + -size/4 +' '+ 0+ ' C '+-size/2+' '+-size/2+ ' '+size/2 +' '+ -size/2+ ' '+size/4 +' '+ 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+ ' A '+size/4+' '+size/4+ ' 0 1 0 '+-size/6 +' '+ -size/3; }, '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+ ' A '+size/4+' '+size/4+ ' 0 1 0 '+size/6 +' '+ size/3; }, '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+ ' A '+size/4+' '+size/4+ ' 0 1 1 '+size/6 +' '+ -size/3; }, '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+ ' A '+size/4+' '+size/4+ ' 0 1 1 '+-size/6 +' '+ size/3; }, 'econ': function(size) { size = Math.sqrt(size); var pad = size / 5; var r = size / 8; return 'M' + (-size) + ',' + 0 + 'l' + (2 * size) + ',' + 0 + '' + 'M ' + -size/6 +' '+ -size/3+ ' A '+size/4+' '+size/4+ ' 0 1 1 0 0'+ ' A '+size/4+' '+size/4+ ' 0 1 1 '+-size/6 +' '+ size/3; }, 'posses': function(size) { size = Math.sqrt(size); var pad = size / 5; var r = size / 8; return 'M' + (-size) + ',' + 0 + 'l' + (2 * size) + ',' + 0 + '' + 'M ' + size/6 +' '+ -size/3+ ' A '+size/4+' '+size/4+ ' 0 1 0 0 0'+ ' A '+size/4+' '+size/4+ ' 0 1 0 '+size/6 +' '+ size/3; }, 'provis': function(size) { size = Math.sqrt(size); var pad = size / 5; var r = size / 8; return 'M' + (-size) + ',' + 0 + 'l' + (2 * size) + ',' + 0 + '' + 'M ' + -size/6 +' '+ -size/3+ ' A '+size/4+' '+size/4+ ' 0 1 1 0 0'+ ' A '+size/4+' '+size/4+ ' 0 1 0 '+size/6 +' '+ size/3; }, 'civil': function(size) { size = Math.sqrt(size); var pad = size / 5; var r = size / 8; return 'M' + (-size) + ',' + 0 + 'l' + (2 * size) + ',' + 0 + '' + 'M ' + size/6 +' '+ -size/3+ ' A '+size/4+' '+size/4+ ' 0 1 0 0 0'+ ' A '+size/4+' '+size/4+ ' 0 1 1 '+-size/6 +' '+ size/3; }, '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+ ' A '+size/4+' '+size/4+' 0 1 0 '+0+' '+ -size/2 +' '+ ' A '+size/4+' '+size/4+' 0 1 0 '+0+' '+ 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+ ' A '+size/4+' '+size/4+' 0 1 0 '+0+' '+ size/2 +' '+ ' A '+size/4+' '+size/4+' 0 1 0 '+0+' '+ 0; }, 'naval': function(size) { size = Math.sqrt(size); var pad = size / 5; var r = size / 8; return 'M' + (-size) + ',' + 0 + 'L' + -size/3 + ',' + 0 + ' A '+size/4+' '+size/4+' 0 1 0 '+0+' '+ -size/2 +' '+ ' A '+size/4+' '+size/4+' 0 1 0 '+size/3+' '+ 0 + 'L' + size + ' ' + 0; }, 'eccles': function(size) { size = Math.sqrt(size); var pad = size / 5; var r = size / 8; return 'M' + (-size) + ',' + 0 + 'L' + -size/3 + ',' + 0 + ' A '+size/4+' '+size/4+' 0 1 1 '+0+' '+ size/2 +' '+ ' A '+size/4+' '+size/4+' 0 1 1 '+size/3+' '+ 0 + 'L' + size + ' ' + 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 "" } }