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 @@ @@@ - - + - - - + +