1
0
mirror of https://github.com/svg/svgo.git synced 2025-07-29 20:21:14 +03:00

Corrected path merging

This commit is contained in:
GreLI
2015-02-25 22:40:49 +03:00
parent 14f139709d
commit 20af96a6b5
3 changed files with 29 additions and 58 deletions

View File

@ -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;
}