diff --git a/plugins/mergePaths.js b/plugins/mergePaths.js
index 154ff72a..c4abc011 100644
--- a/plugins/mergePaths.js
+++ b/plugins/mergePaths.js
@@ -17,13 +17,7 @@ exports.fn = function(item) {
if (item.isElem() && !item.isEmpty()) {
var prevContentItem,
- delim = '',
- prevContentItemKeys = null,
- prevItemPathClosed = false,
- contentItemKeys = null,
- contentItemPathClosed = false,
- equalData,
- attrName;
+ prevContentItemKeys = null;
item.content = item.content.filter(function(contentItem) {
@@ -35,56 +29,36 @@ exports.fn = function(item) {
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);
}
- 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;
+ var 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;
- }
- }
+ var equalData = contentItemKeys.every(function(key) {
+ return key == 'd' ||
+ prevContentItem.hasAttr(key) &&
+ prevContentItem.attr(key).value == contentItem.attr(key).value;
+ });
+ if (!equalData) {
+ prevContentItem = contentItem;
+ prevContentItemKeys = null;
+ return true;
}
- 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;
+ prevContentItem.attr('d').value += contentItem.attr('d').value.replace(/m/i, 'M');
+
+ var pathJS = prevContentItem.pathJS;
+ if (pathJS) {
+ pathJS.push.apply(pathJS, contentItem.pathJS);
+ }
return false;
}
diff --git a/test/plugins/mergePaths.01.svg b/test/plugins/mergePaths.01.svg
index 0cbda86a..454f4ffc 100644
--- a/test/plugins/mergePaths.01.svg
+++ b/test/plugins/mergePaths.01.svg
@@ -11,8 +11,7 @@
@@@
diff --git a/test/plugins/mergePaths.02.svg b/test/plugins/mergePaths.02.svg
index d791884e..77a4e88e 100644
--- a/test/plugins/mergePaths.02.svg
+++ b/test/plugins/mergePaths.02.svg
@@ -18,10 +18,8 @@
@@@