diff --git a/aio/transforms/examples-package/services/region-parser.js b/aio/transforms/examples-package/services/region-parser.js index a664325eef..d9bd731af1 100644 --- a/aio/transforms/examples-package/services/region-parser.js +++ b/aio/transforms/examples-package/services/region-parser.js @@ -103,7 +103,7 @@ function regionParserImpl(contents, fileType) { } return { contents: lines.join('\n'), - regions: mapObject(regionMap, (regionName, region) => region.lines.join('\n')) + regions: mapObject(regionMap, (regionName, region) => leftAlign(region.lines).join('\n')) }; } else { return {contents, regions: {}}; @@ -119,6 +119,17 @@ function removeLast(array, item) { 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) { const lineNum = index + 1; this.message = `regionParser: ${message} (at line ${lineNum}).`; diff --git a/aio/transforms/examples-package/services/region-parser.spec.js b/aio/transforms/examples-package/services/region-parser.spec.js index 3c81a9ab25..e9b8e93fad 100644 --- a/aio/transforms/examples-package/services/region-parser.spec.js +++ b/aio/transforms/examples-package/services/region-parser.spec.js @@ -43,6 +43,17 @@ describe('regionParser service', () => { 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', () => { const output =