Keep trkpt and wpt on single line
to better match BRouter output
This commit is contained in:
parent
265583e0c5
commit
7caa7aeba6
3 changed files with 43 additions and 23 deletions
|
|
@ -104,23 +104,45 @@ BR.Gpx = {
|
|||
const newline = '\n';
|
||||
|
||||
// Remove all the newlines and then remove all the spaces between tags
|
||||
xml = xml.replace(/\s*(\r\n|\n|\r)\s*/gm, ' ').replace(/>\s+</g, '><');
|
||||
|
||||
// break into lines
|
||||
const reg = /(>)(<)(\/?)/g;
|
||||
let pad = 0;
|
||||
|
||||
xml = xml.replace(/>\s*(\r\n|\n|\r)\s*</gm, '><').replace(/>\s+</g, '><');
|
||||
xml = xml.replace('<metadata/>', '');
|
||||
xml = xml.replace(reg, `$1${newline}$2$3`);
|
||||
|
||||
let lines = xml.split(newline);
|
||||
// break into lines, keeping defined tags on a single line
|
||||
const reg = /><(\/?)([\w!?][^ />]*)/g;
|
||||
const singleLineTagList = ['trkpt', 'wpt'];
|
||||
let lines = [];
|
||||
let singleLineTag = null;
|
||||
let startIndex = 0;
|
||||
let match;
|
||||
while ((match = reg.exec(xml)) !== null) {
|
||||
const tag = match[2];
|
||||
if (singleLineTag) {
|
||||
if (singleLineTag === tag) {
|
||||
singleLineTag = null;
|
||||
}
|
||||
} else {
|
||||
if (singleLineTagList.includes(tag)) {
|
||||
singleLineTag = tag;
|
||||
}
|
||||
let endIndex = match.index + 1;
|
||||
lines.push(xml.substring(startIndex, endIndex));
|
||||
startIndex = endIndex;
|
||||
}
|
||||
}
|
||||
lines.push(xml.substring(startIndex));
|
||||
|
||||
// indent
|
||||
const startTextEnd = /.+<\/\w[^>]*>$/;
|
||||
const endTag = /^<\/\w/;
|
||||
const startTag = /^<\w[^>]*[^\/]>.*$/;
|
||||
let pad = 0;
|
||||
lines = lines.map((node, index) => {
|
||||
let indent = 0;
|
||||
if (node.match(/.+<\/\w[^>]*>$/)) {
|
||||
if (node.match(startTextEnd)) {
|
||||
indent = 0;
|
||||
} else if (node.match(/^<\/\w/) && pad > 0) {
|
||||
} else if (node.match(endTag) && pad > 0) {
|
||||
pad -= 1;
|
||||
} else if (node.match(/^<\w[^>]*[^\/]>.*$/)) {
|
||||
} else if (node.match(startTag)) {
|
||||
indent = 1;
|
||||
} else {
|
||||
indent = 0;
|
||||
|
|
@ -131,10 +153,10 @@ BR.Gpx = {
|
|||
return PADDING.repeat(pad - indent) + node;
|
||||
});
|
||||
|
||||
// break gpx attributes into separate lines
|
||||
for (const [i, line] of lines.entries()) {
|
||||
// break gpx attributes into separate lines
|
||||
if (line.includes('<gpx ')) {
|
||||
lines[i] = line.replace(/ ([a-z:]+=")/gi, ` ${newline}${PADDING}$1`);
|
||||
if (line.includes('<gpx ') && !line.includes(newline)) {
|
||||
lines[i] = line.replace(/ (\w[^=" ]*=")/g, ` ${newline}${PADDING}$1`);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue