diff --git a/plugins/mergePaths.js b/plugins/mergePaths.js
index 66243514..dd45ee01 100644
--- a/plugins/mergePaths.js
+++ b/plugins/mergePaths.js
@@ -17,7 +17,13 @@ exports.fn = function(item) {
if (item.isElem() && !item.isEmpty()) {
var prevContentItem,
- delim = '';
+ delim = '',
+ prevContentItemKeys = null,
+ prevItemPathClosed = false,
+ contentItemKeys = null,
+ contentItemPathClosed = false,
+ equalData,
+ attrName;
item.content = item.content.filter(function(contentItem) {
@@ -25,25 +31,65 @@ exports.fn = function(item) {
if (prevContentItem &&
prevContentItem.isElem('path') &&
prevContentItem.hasAttr('d') &&
- Object.keys(prevContentItem.attrs).length === 1 &&
- prevContentItem.attr('d').value.charAt(prevContentItem.attr('d').value.length - 1) === 'z' &&
contentItem.isElem('path') &&
- contentItem.hasAttr('d') &&
- Object.keys(contentItem.attrs).length === 1
+ contentItem.hasAttr('d')
) {
+
+ prevItemPathClosed = prevContentItem.attr('d').value.charAt(prevContentItem.attr('d').value.length-1) === 'z';
+ contentItemPathClosed = contentItem.attr('d').value.charAt(contentItem.attr('d').value.length-1) === 'z';
+
+ if (!prevItemPathClosed && contentItemPathClosed){
+ //console.log('Previous path not closed, current plath closed', prevContentItem.attr('d').value, contentItem.attr('d').value);
+ prevContentItem = contentItem;
+ prevContentItemKeys = null;
+ return true;
+ }
+
+ if (prevContentItemKeys === null){
+ prevContentItemKeys = Object.keys(prevContentItem.attrs);
+ }
+
+ contentItemKeys = Object.keys(contentItem.attrs);
+ if (contentItemKeys.length !== 1 || prevContentItemKeys.length !== 1){
+ if (contentItemKeys.length !== prevContentItemKeys.length){
+ prevContentItem = contentItem;
+ prevContentItemKeys = null;
+ return true;
+ }
+
+ equalData = true;
+ for(var i = 0, I = contentItemKeys.length; i < I; i++){
+ attrName = contentItemKeys[i];
+ if (attrName != 'd'){
+ if(typeof prevContentItem.attrs[attrName] === "undefined"){
+ equalData = false;
+ break;
+ } else if (prevContentItem.attrs[attrName].value !== contentItem.attrs[attrName].value){
+ equalData = false;
+ break;
+ }
+ }
+ }
+ if (!equalData){
+ prevContentItem = contentItem;
+ prevContentItemKeys = null;
+ return true;
+ }
+ }
// "zM", but "z m"
// looks like a FontForge parsing bug
if (contentItem.attr('d').value.charAt(0) === 'm') {
delim = ' ';
+ } else {
+ delim = ''; // reset delim from looping
}
prevContentItem.attr('d').value += delim + contentItem.attr('d').value;
-
return false;
}
prevContentItem = contentItem;
-
+ prevContentItemKeys = null;
return true;
});
diff --git a/test/plugins/mergePaths.02.svg b/test/plugins/mergePaths.02.svg
new file mode 100644
index 00000000..d791884e
--- /dev/null
+++ b/test/plugins/mergePaths.02.svg
@@ -0,0 +1,27 @@
+
+
+@@@
+
+