build(aio): left align code regions

This commit is contained in:
Peter Bacon Darwin 2017-03-27 08:57:23 +01:00 committed by Pete Bacon Darwin
parent 5e3ef775d5
commit 52ea193638
2 changed files with 23 additions and 1 deletions

View File

@ -103,7 +103,7 @@ function regionParserImpl(contents, fileType) {
} }
return { return {
contents: lines.join('\n'), contents: lines.join('\n'),
regions: mapObject(regionMap, (regionName, region) => region.lines.join('\n')) regions: mapObject(regionMap, (regionName, region) => leftAlign(region.lines).join('\n'))
}; };
} else { } else {
return {contents, regions: {}}; return {contents, regions: {}};
@ -119,6 +119,17 @@ function removeLast(array, item) {
array.splice(index, 1); array.splice(index, 1);
} }
function leftAlign(lines) {
let indent = Number.MAX_VALUE;
lines.forEach(line => {
const lineIndent = line.search(/\S/);
if (lineIndent !== -1) {
indent = Math.min(lineIndent, indent);
}
});
return lines.map(line => line.substr(indent));
}
function RegionParserError(message, index) { function RegionParserError(message, index) {
const lineNum = index + 1; const lineNum = index + 1;
this.message = `regionParser: ${message} (at line ${lineNum}).`; this.message = `regionParser: ${message} (at line ${lineNum}).`;

View File

@ -43,6 +43,17 @@ describe('regionParser service', () => {
expect(output.contents).toEqual(t('abc', 'def', 'ghi')); expect(output.contents).toEqual(t('abc', 'def', 'ghi'));
}); });
it('should left align the text of the region', () => {
const output = regionParser(
t(
'/* #docregion X */', ' all', ' indented', ' by', ' two', ' spaces', '/* #enddocregion X */',
'/* #docregion Y */', ' first', ' line', ' indented', ' more', ' than', ' later', ' lines', '/* #enddocregion Y */',
'/* #docregion Z */', ' ignore', ' ', ' empty', '', ' lines', '/* #enddocregion Z */'
), 'test-type');
expect(output.regions['X']).toEqual(t('all', ' indented', ' by', 'two', 'spaces'));
expect(output.regions['Y']).toEqual(t(' first', 'line', 'indented', ' more', 'than', 'later', 'lines'));
expect(output.regions['Z']).toEqual(t('ignore', '', 'empty', '', 'lines'));
});
it('should remove doc plaster annotations from the contents', () => { it('should remove doc plaster annotations from the contents', () => {
const output = const output =