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:
@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user