| var __rest = (this && this.__rest) || function (s, e) { | |
| var t = {}; | |
| for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) | |
| t[p] = s[p]; | |
| if (s != null && typeof Object.getOwnPropertySymbols === "function") | |
| for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { | |
| if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) | |
| t[p[i]] = s[p[i]]; | |
| } | |
| return t; | |
| }; | |
| import { Markers } from '../primitives.js'; | |
| import { rewireSource } from '../util.js'; | |
| const zeroWidth = { | |
| start: 0, | |
| tag: 0, | |
| type: 0, | |
| name: 0, | |
| }; | |
| const getWidth = (markers = Markers) => (w, { tokens: t }) => ({ | |
| start: t.delimiter === markers.start ? t.start.length : w.start, | |
| tag: Math.max(w.tag, t.tag.length), | |
| type: Math.max(w.type, t.type.length), | |
| name: Math.max(w.name, t.name.length), | |
| }); | |
| const space = (len) => ''.padStart(len, ' '); | |
| export default function align(markers = Markers) { | |
| let intoTags = false; | |
| let w; | |
| function update(line) { | |
| const tokens = Object.assign({}, line.tokens); | |
| if (tokens.tag !== '') | |
| intoTags = true; | |
| const isEmpty = tokens.tag === '' && | |
| tokens.name === '' && | |
| tokens.type === '' && | |
| tokens.description === ''; | |
| // dangling '*/' | |
| if (tokens.end === markers.end && isEmpty) { | |
| tokens.start = space(w.start + 1); | |
| return Object.assign(Object.assign({}, line), { tokens }); | |
| } | |
| switch (tokens.delimiter) { | |
| case markers.start: | |
| tokens.start = space(w.start); | |
| break; | |
| case markers.delim: | |
| tokens.start = space(w.start + 1); | |
| break; | |
| default: | |
| tokens.delimiter = ''; | |
| tokens.start = space(w.start + 2); // compensate delimiter | |
| } | |
| if (!intoTags) { | |
| tokens.postDelimiter = tokens.description === '' ? '' : ' '; | |
| return Object.assign(Object.assign({}, line), { tokens }); | |
| } | |
| const nothingAfter = { | |
| delim: false, | |
| tag: false, | |
| type: false, | |
| name: false, | |
| }; | |
| if (tokens.description === '') { | |
| nothingAfter.name = true; | |
| tokens.postName = ''; | |
| if (tokens.name === '') { | |
| nothingAfter.type = true; | |
| tokens.postType = ''; | |
| if (tokens.type === '') { | |
| nothingAfter.tag = true; | |
| tokens.postTag = ''; | |
| if (tokens.tag === '') { | |
| nothingAfter.delim = true; | |
| } | |
| } | |
| } | |
| } | |
| tokens.postDelimiter = nothingAfter.delim ? '' : ' '; | |
| if (!nothingAfter.tag) | |
| tokens.postTag = space(w.tag - tokens.tag.length + 1); | |
| if (!nothingAfter.type) | |
| tokens.postType = space(w.type - tokens.type.length + 1); | |
| if (!nothingAfter.name) | |
| tokens.postName = space(w.name - tokens.name.length + 1); | |
| return Object.assign(Object.assign({}, line), { tokens }); | |
| } | |
| return (_a) => { | |
| var { source } = _a, fields = __rest(_a, ["source"]); | |
| w = source.reduce(getWidth(markers), Object.assign({}, zeroWidth)); | |
| return rewireSource(Object.assign(Object.assign({}, fields), { source: source.map(update) })); | |
| }; | |
| } |