Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 10x 10x 6x 6x 4x 4x 4x 1x 7x 7x 2x 2x 5x 5x 5x 1x 14x 14x 14x 14x 14x 14x 14x 2x 2x 14x 14x 5x 5x 5x 2x 2x 2x 5x 3x 3x 5x 5x 5x 14x 14x 7x 7x 14x 14x 3x 3x 14x 14x 3x 3x 3x 3x 14x 14x 14x 1x 3x 3x 3x 1x 1x 1x 1x | export type FilterSpec = { /** Filter name */ filter: string /** Filter ID */ id?: string /** Filter options */ options?: string[] | { [key: string]: string } /** Filter input link labels */ inputs?: string[] /** Filter output link labels */ outputs?: string[] } export type FilterChain = FilterSpec[] export type FilterGraph = FilterChain[] function escapeOption(option: string): string { if (option.match(/[\\':]/)) { return option.replace(/([\\':])/g, '\\$1') } return option } function escapeFilter(filter: string): string { if (filter.match(/[\\'[\],;]/)) { return filter.replace(/([\\'[\],;])/g, '\\$1') } return filter } export function generateFilter( spec: FilterSpec, escape: boolean = false ): string { let filterString = spec.filter if (spec.id) { filterString = `${filterString}@${spec.id}` } if (spec.options) { let options = spec.options if (!Array.isArray(options)) { options = Object.entries(options).map( ([key, value]) => `${key}=${escapeOption(value)}` ) } else { options = options.map((o) => escapeOption(o)) } filterString = `${filterString}=${options.join(':')}` } if (escape) { filterString = escapeFilter(filterString) } if (spec.inputs) { filterString = `${spec.inputs.map((i) => `[${i}]`).join('')}${filterString}` } if (spec.outputs) { filterString = `${filterString}${spec.outputs .map((o) => `[${o}]`) .join('')}` } return filterString } export function generateFilterChain(chain: FilterChain): string { return chain.map((spec) => generateFilter(spec, true)).join(',') } export function generateFilterGraph(graph: FilterGraph): string { return graph.map((chain) => generateFilterChain(chain)).join(';') } |