diff --git a/core/src/Debugger.ts b/core/src/Debugger.ts index 30ddff6..982c002 100644 --- a/core/src/Debugger.ts +++ b/core/src/Debugger.ts @@ -11,6 +11,7 @@ import ChangeTracker from './debug/ChangeTracker'; import PageViewport from './parse/PageViewport'; import Globals from './Globals'; +// TODO only cache the parse ? export default class Debugger { private transformers: ItemTransformer[]; private stageResultCache: StageResult[]; diff --git a/core/src/support/Range.ts b/core/src/support/Range.ts new file mode 100644 index 0000000..3f50620 --- /dev/null +++ b/core/src/support/Range.ts @@ -0,0 +1,22 @@ +import { ascending } from './groupingUtils'; +import { medianSorted } from 'simple-statistics'; + +export default class Range { + constructor(public min: number, public median: number, public max: number) {} + + description() { + return `${this.median}(${this.min}/${this.max})`; + } +} + +export function fromMiddle(middle: number, maxDeviation: number) { + return new Range(middle - maxDeviation, middle, middle + maxDeviation); +} + +export function deriveFromUnsorted(numbers: number[]) { + numbers.sort(ascending); + const median = medianSorted(numbers); + const min = numbers[0]; + const max = numbers[numbers.length - 1]; + return new Range(min, median, max); +} diff --git a/core/src/transformer/CacluclateStatistics.ts b/core/src/transformer/CacluclateStatistics.ts index b620382..10432e0 100644 --- a/core/src/transformer/CacluclateStatistics.ts +++ b/core/src/transformer/CacluclateStatistics.ts @@ -18,6 +18,8 @@ export const MIN_Y = new GlobalDefinition('minY'); export const MAX_Y = new GlobalDefinition('maxY'); export const MAX_HEIGHT = new GlobalDefinition('maxHeight'); export const MOST_USED_HEIGHT = new GlobalDefinition('mostUsedHeight'); +export const MOST_USED_DISTANCE = new GlobalDefinition('mostUsedDistance'); +export const MOST_USED_FONT = new GlobalDefinition('mostUsedFont'); export const PAGE_MAPPING = new GlobalDefinition('pageMapping'); const config = { @@ -30,11 +32,11 @@ export default class CalculateStatistics extends ItemTransformer { super('Calculate Statistics', 'Calculate global statistics that are used in downstream transformers', { requireColumns: ['str', 'fontName', 'y', 'height'], producesGlobels: [ - 'mostUsedHeight', - 'mostUsedFont', - 'mostUsedDistance', - 'maxHeight', - 'maxHeightFont', + MIN_X.key, //TODO + MOST_USED_HEIGHT.key, + MOST_USED_FONT.key, + MOST_USED_DISTANCE.key, + MAX_HEIGHT.key, 'fontToFormats', ], debug: { @@ -44,9 +46,17 @@ export default class CalculateStatistics extends ItemTransformer { } transform(context: TransformContext, items: Item[]): ItemResult { + // www.30secondsofcode.org/js/s/frequencies + // www.30secondsofcode.org/js/s/group-by + + // TODO + // filter out title pages + // filter out <= most used keys + x = 3 + // ckmeans(6) + const heights = items.map((item) => item.data['height'] as number); + const mostUsedByMedian = median(heights); - // const heightToOccurrence: { [key: string]: number } = {}; const heightToOccurrence = {}; const fontToOccurrence = {}; let maxHeight = 0; @@ -102,7 +112,7 @@ export default class CalculateStatistics extends ItemTransformer { } page = item.page; }); - // const mostUsedDistance = parseInt(getMostUsedKey(distanceToOccurrence)); + const mostUsedDistance = parseInt(getMostUsedKey(distanceToOccurrence)); const fontIdToName: string[] = []; const fontToType = new Map(); @@ -121,6 +131,8 @@ export default class CalculateStatistics extends ItemTransformer { globals: [ MAX_HEIGHT.value(maxHeight), MOST_USED_HEIGHT.value(mostUsedByMedian), + MOST_USED_DISTANCE.value(mostUsedDistance), + MOST_USED_FONT.value(mostUsedFont), MIN_X.value(minX), MAX_X.value(maxX), MIN_Y.value(minY), diff --git a/core/src/transformer/DetectHeaders.ts b/core/src/transformer/DetectHeaders.ts new file mode 100644 index 0000000..e9412e5 --- /dev/null +++ b/core/src/transformer/DetectHeaders.ts @@ -0,0 +1,189 @@ +import Item from '../Item'; +import ItemResult from '../ItemResult'; +import ItemTransformer from './ItemTransformer'; +import TransformContext from './TransformContext'; +import LineItemMerger from '../debug/LineItemMerger'; +import { groupByLine, onlyUniques } from '../support/groupingUtils'; +import { MAX_HEIGHT, MOST_USED_DISTANCE, MOST_USED_FONT, MOST_USED_HEIGHT } from './CacluclateStatistics'; +import { HEADLINE_TYPE_TO_HEIGHT_RANGE, TOC_GLOBAL } from './DetectToc'; +import ItemType from '../ItemType'; +import { flatten } from '../support/functional'; +import { itemWithType } from '../support/items'; + +const config = { + // How much taller a text must be to be a headline (relative to mostUsedHeight) + // TODO sync with DetectHeadline ?? + minHeadlineDistance: 1.3, +}; + +export default class DetectHeaders extends ItemTransformer { + constructor() { + super('Detect Headers', 'Detect Headers from Level 1 to 6', { + requireColumns: ['str', 'y', 'height', 'line', 'fontName'], + debug: { + // showAll: true, + itemMerger: new LineItemMerger(false), + }, + }); + } + + transform(context: TransformContext, inputItems: Item[]): ItemResult { + const maxHeight = context.getGlobal(MAX_HEIGHT); + const mostUsedHeight = context.getGlobal(MOST_USED_HEIGHT); + const mostUsedDistance = context.getGlobal(MOST_USED_DISTANCE); + const mostUsedFont = context.getGlobal(MOST_USED_FONT); + const toc = context.getGlobalOptionally(TOC_GLOBAL); + const headlineTypeToHeightRange = context.getGlobalOptionally(HEADLINE_TYPE_TO_HEIGHT_RANGE); + + const itemsByLine = groupByLine(inputItems); + const itemToLevel: Map = new Map(); + + // Handle title pages: Title pages often have multiple lines of extraordinary height. + // Starting the leveling here would already consume most of the available headline levels. + // Thus we handle those pages seperatly and make the biggest lines #1 and all others #2. + const maxTitlePage = toc ? toc.startPage() : Math.min(5, context.pageCount - 3); + let detectedHeaders = detectTitlePageHeaders( + inputItems, + itemsByLine, + maxTitlePage, + mostUsedHeight, + maxHeight, + itemToLevel, + ); + + if (toc && headlineTypeToHeightRange) { + //Use existing headline heights to find additional headlines + const headlineTypes = Object.keys(headlineTypeToHeightRange) as ItemType[]; + headlineTypes.forEach((headlineType) => { + const range = headlineTypeToHeightRange[headlineType]; + if (range.max > mostUsedHeight) { + //use only very clear headlines, only use max + inputItems.forEach((item) => { + const itemHeight = item.data['height']; + const types: ItemType[] = item.data['types'] || []; + const isHeader = + types.includes(ItemType.H1) || + types.includes(ItemType.H2) || + types.includes(ItemType.H3) || + types.includes(ItemType.H4) || + types.includes(ItemType.H5) || + types.includes(ItemType.H6); + if (!isHeader && itemHeight === range.max) { + itemToLevel.set(item.uuid, headlineType); + detectedHeaders++; + } + }); + } + }); + } else { + //Categorize headlines by the text heights + const heights: number[] = []; + + itemsByLine + .filter((lineItems) => !itemToLevel.has(lineItems[0].uuid)) + .map((lineItems) => { + const maxHeight = Math.max(...lineItems.map((item) => item.data['height'])); + if (maxHeight > mostUsedHeight * config.minHeadlineDistance && !heights.includes(maxHeight)) { + heights.push(maxHeight); + } + }); + const heightToHeadline: Map = new Map(); + heights.sort((a, b) => b - a); + + heights.forEach((height, i) => { + const headlineLevel = i + 2; + if (headlineLevel <= 6) { + const headlineType = ItemType.header(2 + i); + heightToHeadline.set(height, headlineType); + } + }); + + itemsByLine + .filter((lineItems) => !itemToLevel.has(lineItems[0].uuid)) + .forEach((lineItems) => { + const maxHeight = Math.max(...lineItems.map((item) => item.data['height'])); + const types = flatten(lineItems.map((item) => item.data['types'] || [])).filter(onlyUniques); + const headlineType = heightToHeadline.get(maxHeight); + if (headlineType && !types.includes(ItemType.H1) && !types.includes(ItemType.H2)) { + lineItems.forEach((item) => itemToLevel.set(item.uuid, headlineType)); + detectedHeaders++; + } + }); + } + + // TODO find headlines which have paragraph height + // var smallesHeadlineLevel = 1; + // parseResult.pages.forEach((page) => { + // page.items.forEach((item) => { + // if (item.type && item.type.headline) { + // smallesHeadlineLevel = Math.max(smallesHeadlineLevel, item.type.headlineLevel); + // } + // }); + // }); + // if (smallesHeadlineLevel < 6) { + // const nextHeadlineType = headlineByLevel(smallesHeadlineLevel + 1); + // parseResult.pages.forEach((page) => { + // var lastItem; + // page.items.forEach((item) => { + // if ( + // !item.type && + // item.height == mostUsedHeight && + // item.font !== mostUsedFont && + // (!lastItem || + // lastItem.y < item.y || + // (lastItem.type && lastItem.type.headline) || + // lastItem.y - item.y > mostUsedDistance * 2) && + // item.text() === item.text().toUpperCase() + // ) { + // detectedHeaders++; + // item.annotation = DETECTED_ANNOTATION; + // item.type = nextHeadlineType; + // } + // lastItem = item; + // }); + // }); + // } + + return { + items: inputItems.map((item) => { + const headerType = itemToLevel.get(item.uuid); + if (headerType) { + return itemWithType(item, headerType); + } + return item; + }), + messages: [`Detected ${detectedHeaders} headers`], + }; + } +} + +function detectTitlePageHeaders( + inputItems: Item[], + itemsByLine: Item[][], + maxTitlePage: number, + mostUsedHeight: number, + maxHeight: number, + itemToLevel: Map, +): number { + const min2ndLevelHeaderHeigthOnMaxPage = mostUsedHeight + (maxHeight - mostUsedHeight) / 4; + const pagesHavingMaxHeightItems = inputItems + .filter((item) => item.page <= maxTitlePage) + .filter((item) => item.data['height'] === maxHeight) + .map((item) => item.page) + .filter(onlyUniques); + let detectedHeaders = 0; + itemsByLine + .filter((items) => pagesHavingMaxHeightItems.includes(items[0].page)) + .forEach((lineItems) => { + const height = Math.max(...lineItems.map((item) => item.data['height'])); + if (height > min2ndLevelHeaderHeigthOnMaxPage) { + if (height == maxHeight) { + lineItems.forEach((item) => itemToLevel.set(item.uuid, ItemType.H1)); + } else { + lineItems.forEach((item) => itemToLevel.set(item.uuid, ItemType.H2)); + } + detectedHeaders++; + } + }); + return detectedHeaders; +} diff --git a/core/src/transformer/DetectToc.ts b/core/src/transformer/DetectToc.ts index b979718..a2de9f3 100644 --- a/core/src/transformer/DetectToc.ts +++ b/core/src/transformer/DetectToc.ts @@ -23,6 +23,11 @@ import FontType, { declaredFontTypes } from '../FontType'; import { flatten, groupBy } from '../support/functional'; import { getHeight, getText, getFontName, itemWithType } from '../support/items'; +export interface HeadlineRange { + min: number; + max: number; +} + const config = { // How many characters a line with a ending number needs to have minimally to be a valid link linkMinLength: 4, @@ -33,6 +38,9 @@ const config = { }; export const TOC_GLOBAL = new GlobalDefinition('toc'); +export const HEADLINE_TYPE_TO_HEIGHT_RANGE = new GlobalDefinition>( + 'headlineTypeToHeightRange', +); export default class DetectToc extends ItemTransformer { constructor() { @@ -41,7 +49,7 @@ export default class DetectToc extends ItemTransformer { 'Detect table of contents.', { requireColumns: ['x', 'y', 'str', 'line'], - producesGlobels: [TOC_GLOBAL.key], + producesGlobels: [TOC_GLOBAL.key, HEADLINE_TYPE_TO_HEIGHT_RANGE.key], debug: { itemMerger: new LineItemMerger(), }, @@ -78,30 +86,43 @@ export default class DetectToc extends ItemTransformer { ); const tocHeadline = findTocHeadline(context.fontMap, mostUsedHeight, tocArea, itemsInTocArea, tocItemUuids); - const isDefined = (items: T | undefined): items is T => { - return !!items; - }; - const foundHeadlines = rawTocEntries - .map((rawEntry, index) => { - const itemType = headlineLevels[index]; - const uuids = findHeadline( - context.fontMap, - inputItems, - mostUsedHeight, - rawEntry.linkedPage, - rawEntry.linkedPage - pageMapping.pageFactor, - rawEntry.entryLines, - ); - if (uuids) { - return { - level: itemType, - uuids, - } as Headline; + const notFoundHeadlines: RawTocEntry[] = []; + const foundHeadlines: Headline[] = []; + const headlineTypeToHeightRange: Record = {}; //H1={min:23, max:25} + + rawTocEntries.forEach((rawEntry, index) => { + const itemType = headlineLevels[index]; + const uuids = findHeadline( + context.fontMap, + inputItems, + mostUsedHeight, + rawEntry.linkedPage, + rawEntry.linkedPage - pageMapping.pageFactor, + rawEntry.entryLines, + ); + if (uuids) { + foundHeadlines.push({ level: itemType, uuids }); + + // add headline height + const headlineHeight = inputItems + .filter((item) => uuids.has(item.uuid)) + .reduce((maxHeight, item) => Math.max(maxHeight, item.data['height']), 0); + let range = headlineTypeToHeightRange[itemType]; + if (range) { + range.min = Math.min(range.min, headlineHeight); + range.max = Math.max(range.max, headlineHeight); + } else { + range = { + min: headlineHeight, + max: headlineHeight, + }; + headlineTypeToHeightRange[itemType] = range; } - return undefined; - }) - .filter(isDefined); + } else { + notFoundHeadlines.push(rawEntry); + } + }); const headlineUuidToLevelMap = foundHeadlines.reduce((uidToLevel, headline) => { headline.uuids.forEach((uuid) => { @@ -115,6 +136,7 @@ export default class DetectToc extends ItemTransformer { return allLevels; }, new Set()); const tocHeadlineUuids = new Set(tocHeadline.map((item) => item.uuid)); + return { items: inputItems .filter((item) => !tocHeadlineUuids.has(item.uuid)) @@ -130,7 +152,10 @@ export default class DetectToc extends ItemTransformer { `Detected and removed ${rawTocEntries.length} TOC entries`, `Found ${foundHeadlines.length} matching headlines`, ], - globals: [TOC_GLOBAL.value(new TOC(tocHeadline, tocArea.pages, headlineTypes))], + globals: [ + TOC_GLOBAL.value(new TOC(tocHeadline, tocArea.pages, headlineTypes)), + HEADLINE_TYPE_TO_HEIGHT_RANGE.value(headlineTypeToHeightRange), + ], }; } } diff --git a/examples/Achieving-The-Paris-Climate-Agreement/calculateStatistics.json b/examples/Achieving-The-Paris-Climate-Agreement/calculateStatistics.json index a33de69..e15e603 100644 --- a/examples/Achieving-The-Paris-Climate-Agreement/calculateStatistics.json +++ b/examples/Achieving-The-Paris-Climate-Agreement/calculateStatistics.json @@ -29,6 +29,8 @@ "globals": { "maxHeight": 66, "mostUsedHeight": 8.5, + "mostUsedDistance": 9, + "mostUsedFont": "g_d1_f198", "minX": 41.38153078000005, "maxX": 400.56930541, "minY": 36.71720123, diff --git a/examples/Achieving-The-Paris-Climate-Agreement/detectHeaders.json b/examples/Achieving-The-Paris-Climate-Agreement/detectHeaders.json new file mode 100644 index 0000000..d2dae0a --- /dev/null +++ b/examples/Achieving-The-Paris-Climate-Agreement/detectHeaders.json @@ -0,0 +1,84 @@ +{ + "pages": 526, + "items": 52758, + "groupedItems": 31211, + "changes": 104, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":0,"change":"ContentChange","types":["H1"],"str":"Achieving the ","dir":"ltr","width":"278.10","height":"66.00","transform":["66.00","0.00","0.00","66.00","41.38","353.78"],"fontName":"RMSSHF+SwjtkcMqqdthDkwlwrMyriadPro-Cond","x":41.38153078000005,"y":353.78381345,"line":0} +{"page":0,"change":"ContentChange","types":["H1"],"str":"Paris Climate ","dir":"ltr","width":"263.00","height":"66.00","transform":["66.00","0.00","0.00","66.00","41.38","293.79"],"fontName":"RMSSHF+SwjtkcMqqdthDkwlwrMyriadPro-Cond","x":41.38153078000005,"y":293.78979492,"line":1} +{"page":0,"change":"ContentChange","types":["H1"],"str":"Agreement Goals","dir":"ltr","width":"335.65","height":"66.00","transform":["66.00","0.00","0.00","66.00","41.38","233.80"],"fontName":"RMSSHF+SwjtkcMqqdthDkwlwrMyriadPro-Cond","x":41.38153078000005,"y":233.79580687,"line":2} +{"page":0,"change":"ContentChange","types":["H2"],"str":"Sven Teske Editor","line":3,"x":43.72393799000008,"y":450.26321411,"width":"151.82","height":"28.00","fontName":["RMSSHF+SwjtkcMqqdthDkwlwrMyriadPro-Cond","RMSSHF+BsmttdLmcghkPtgllqMyriadPro-CondIt"],"dir":["ltr"]} +{"page":0,"change":"ContentChange","types":["H2"],"str":"Global and Regional 100% Renewable","dir":"ltr","width":"324.10","height":"28.00","transform":["28.00","0.00","0.00","28.00","43.72","186.57"],"fontName":"RMSSHF+SwjtkcMqqdthDkwlwrMyriadPro-Cond","x":43.72393799000008,"y":186.56610107,"line":4} +{"page":0,"change":"ContentChange","types":["H2"],"str":"Energy Scenarios with Non-energy GHG","dir":"ltr","width":"335.43","height":"28.00","transform":["28.00","0.00","0.00","28.00","43.72","158.57"],"fontName":"RMSSHF+SwjtkcMqqdthDkwlwrMyriadPro-Cond","x":43.72393799000008,"y":158.56610107,"line":5} +{"page":0,"change":"ContentChange","types":["H2"],"str":"Pathways for +1.5°C and +2°C","dir":"ltr","width":"258.59","height":"28.00","transform":["28.00","0.00","0.00","28.00","43.72","130.57"],"fontName":"RMSSHF+SwjtkcMqqdthDkwlwrMyriadPro-Cond","x":43.72393799000008,"y":130.56610107,"line":6} +{"page":1,"change":"ContentChange","types":["H4"],"str":"Achieving the Paris Climate Agreement Goals","dir":"ltr","width":"295.77","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","592.46"],"fontName":"TGOZWB+JkylrpTwghlkTlcrnvTimesLTStd-Roman","x":53.85829925,"y":592.46166992,"line":0} +{"page":2,"change":"ContentChange","types":["H4"],"str":"Sven Teske","dir":"ltr","width":"72.69","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","593.06"],"fontName":"TGOZWB+JkylrpTwghlkTlcrnvTimesLTStd-Roman","x":53.85829925,"y":593.06170654,"line":0} +{"page":2,"change":"ContentChange","types":["H2"],"str":"Achieving the Paris Climate ","dir":"ltr","width":"322.42","height":"28.00","transform":["28.00","0.00","0.00","28.00","53.86","479.06"],"fontName":"TGOZWB+JkylrpTwghlkTlcrnvTimesLTStd-Roman","x":53.85829925,"y":479.06170654,"line":2} +{"page":2,"change":"ContentChange","types":["H2"],"str":"Agreement Goals","dir":"ltr","width":"196.73","height":"28.00","transform":["28.00","0.00","0.00","28.00","53.86","449.07"],"fontName":"TGOZWB+JkylrpTwghlkTlcrnvTimesLTStd-Roman","x":53.85829925,"y":449.07369995,"line":3} +{"page":2,"change":"ContentChange","types":["H3"],"str":"Global and Regional 100% Renewable ","dir":"ltr","width":"283.55","height":"18.00","transform":["18.00","0.00","0.00","18.00","53.86","413.06"],"fontName":"TGOZWB+JkylrpTwghlkTlcrnvTimesLTStd-Roman","x":53.85829925,"y":413.06170654,"line":4} +{"page":2,"change":"ContentChange","types":["H3"],"str":"Energy Scenarios with Non-energy GHG ","dir":"ltr","width":"300.78","height":"18.00","transform":["18.00","0.00","0.00","18.00","53.86","393.06"],"fontName":"TGOZWB+JkylrpTwghlkTlcrnvTimesLTStd-Roman","x":53.85829925,"y":393.0637207,"line":5} +{"page":2,"change":"ContentChange","types":["H3"],"str":"Pathways for +1.5°C and +2°C","dir":"ltr","width":"223.74","height":"18.00","transform":["18.00","0.00","0.00","18.00","53.86","373.07"],"fontName":"TGOZWB+JkylrpTwghlkTlcrnvTimesLTStd-Roman","x":53.85829925,"y":373.06570434,"line":6} +{"page":5,"change":"ContentChange","types":["H4"],"str":"Climate Model: Foreword","dir":"ltr","width":"177.77","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","592.46"],"fontName":"MTXJCP+NvqljkWdwfdjNcmgdgTimesLTStd-Bold","x":53.85829925,"y":592.461792,"line":28} +{"page":8,"change":"ContentChange","types":["H4"],"str":"Contact Information","dir":"ltr","width":"141.36","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","592.46"],"fontName":"MTXJCP+NvqljkWdwfdjNcmgdgTimesLTStd-Bold","x":53.85829925,"y":592.461792,"line":1} +{"page":10,"change":"ContentChange","types":["H4"],"str":"Executive Summary","dir":"ltr","width":"137.89","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","592.46"],"fontName":"MTXJCP+NvqljkWdwfdjNcmgdgTimesLTStd-Bold","x":53.85829925,"y":592.461792,"line":1} +{"page":33,"change":"ContentChange","types":["H4"],"str":"Acknowledgement","dir":"ltr","width":"126.05","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","592.46"],"fontName":"MTXJCP+NvqljkWdwfdjNcmgdgTimesLTStd-Bold","x":53.85829925,"y":592.461792,"line":1} +{"page":34,"change":"ContentChange","types":["H4"],"str":"Contents","dir":"ltr","width":"61.33","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","592.46"],"fontName":"MTXJCP+NvqljkWdwfdjNcmgdgTimesLTStd-Bold","x":53.85829925,"y":592.461792,"line":1} +{"page":47,"change":"ContentChange","types":["H4"],"str":"List of Tables","dir":"ltr","width":"91.39","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","592.46"],"fontName":"MTXJCP+NvqljkWdwfdjNcmgdgTimesLTStd-Bold","x":53.85829925,"y":592.461792,"line":29} +{"page":54,"change":"ContentChange","types":["H4"],"str":"Introduction","dir":"ltr","width":"86.83","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","576.03"],"fontName":"BVRIAQ+VnxxvjKxlcpvTrncyxTimesLTStd-Bold","x":53.85829828999998,"y":576.02770996,"line":4} +{"page":58,"change":"ContentChange","types":["H4"],"str":"State of Research","dir":"ltr","width":"118.78","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","576.03"],"fontName":"FBKGDD+TgytvtDqsrjtPqxhkhTimesLTStd-Bold","x":53.85829828999998,"y":576.02770996,"line":4} +{"page":77,"change":"ContentChange","types":["H4"],"str":"Methodology","dir":"ltr","width":"89.78","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","576.03"],"fontName":"XYDAEO+QqjpynNrvgmlJcvqybTimesLTStd-Bold","x":53.85829828999998,"y":576.02770996,"line":4} +{"page":90,"change":"ContentChange","types":["H5"],"str":"∑∑ == ∑ =","line":28,"x":132.10830688,"y":347.31600952,"width":"59.38","height":"15.00","fontName":["CYMZWE+XmrcwlVmqqxgJlwbyfSymbolMT"],"dir":["ltr"]} +{"page":92,"change":"ContentChange","types":["H5"],"str":"() = ∑ () ⋅ () ⋅ η et ()","line":12,"x":162.57699584,"y":283.04168701,"width":"94.77","height":"15.00","fontName":["CYMZWE+FxbflyGsfbsnXpxckjSymbolMT","CYMZWE+YkcncjSmyngrRlmqtyTimesLTStd-Italic"],"dir":["ltr"]} +{"page":92,"change":"ContentChange","types":["H5"],"str":"() = ∑ fe ()","line":17,"x":198.07699584,"y":251.04170227,"width":"52.15","height":"15.00","fontName":["CYMZWE+VmnspxJjprylKxyfwnSymbolMT","CYMZWE+PrjxyqBrsjnlCyvkvxTimes-Italic"],"dir":["ltr"]} +{"page":92,"change":"ContentChange","types":["H5"],"str":"() = ∑∑ () = ∑ () = ∑∑∑ () ⋅ et t tt fe","line":26,"x":92.38950347,"y":219.01049804,"width":"300.35","height":"15.00","fontName":["CYMZWE+FxbflyGsfbsnXpxckjSymbolMT","CYMZWE+RkrdqcCckkvhKdwwkcTimesLTStd-Italic"],"dir":["ltr"]} +{"page":93,"change":"ContentChange","types":["H5"],"str":"() = ∑∑ () ⋅ () ⋅ η ct ()","line":22,"x":160.35830688,"y":419.50350952,"width":"105.83","height":"15.00","fontName":["CYMZWE+FxbflyGsfbsnXpxckjSymbolMT","CYMZWE+LssxbjNdlrtrDyqlwdTimes-Italic"],"dir":["ltr"]} +{"page":93,"change":"ContentChange","types":["H5"],"str":"() = ∑ pe ()","line":25,"x":196.88949584,"y":385.50350952,"width":"53.37","height":"15.00","fontName":["CYMZWE+VmnspxJjprylKxyfwnSymbolMT","CYMZWE+BshqpvSpkmshWkjxslTimesLTStd-Italic"],"dir":["ltr"]} +{"page":110,"change":"ContentChange","types":["H5"],"str":"∑ −","line":21,"x":208.01449584,"y":84.50782775,"width":"13.87","height":"15.00","fontName":["CYMZWE+FqsltlTjdspvJgbmhfSymbolMT"],"dir":["ltr"]} +{"page":111,"change":"ContentChange","types":["H5"],"str":"1 ∑ −","line":8,"x":214.10830688,"y":551.47229003,"width":"16.76","height":"15.00","fontName":["CYMZWE+XmxrchHpvfbwGtgfhrTimesLTStd-Roman","CYMZWE+LlcbxwCjblldRrfmkqSymbolMT"],"dir":["ltr"]} +{"page":131,"change":"ContentChange","types":["H4"],"str":"Mitigation Scenarios for Non-energy GHG","dir":"ltr","width":"290.97","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","576.03"],"fontName":"YSZZWH+PvgvkqLpcflpCgcwwnTimesLTStd-Bold","x":53.85829828999998,"y":576.02770996,"line":4} +{"page":144,"change":"ContentChange","types":["H4"],"str":"Main Assumptions for Energy Pathways","dir":"ltr","width":"274.85","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","576.03"],"fontName":"WOKFGB+HpngqgBwvknsFxxyjwTimesLTStd-Bold","x":53.85829828999998,"y":576.02770996,"line":4} +{"page":182,"change":"ContentChange","types":["H4"],"str":"Transport Transition Concepts","dir":"ltr","width":"210.49","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","576.03"],"fontName":"SDLUMT+NnrmnsRgkybwGqmvwqTimesLTStd-Bold","x":53.85829828999998,"y":576.02770996,"line":4} +{"page":184,"change":"ContentChange","types":["H6"],"str":"2015","dir":"ltr","width":"29.21","height":"14.43","transform":["14.43","0.00","0.00","14.43","165.47","520.24"],"fontName":"LQUESH+MwrddlDxpdpgBwjtttCalibri-Bold","x":165.46769714,"y":520.24072265,"line":20} +{"page":211,"change":"ContentChange","types":["H4"],"str":"Renewable Energy Resource Assessment","dir":"ltr","width":"276.40","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","576.03"],"fontName":"YSCVIX+JkwjxdHrklctCdhgywTimesLTStd-Bold","x":53.85829828999998,"y":576.02770996,"line":4} +{"page":224,"change":"ContentChange","types":["H4"],"str":"Energy Scenario Results","dir":"ltr","width":"166.94","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","576.03"],"fontName":"HCVGTA+HrrpsrRfvtprJnvfvdTimesLTStd-Bold","x":53.85829828999998,"y":576.02770996,"line":4} +{"page":451,"change":"ContentChange","types":["H4"],"str":"Trajectories for a Just Transition ","dir":"ltr","width":"228.45","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","576.03"],"fontName":"YCQPZS+ChmcpvXdssdrTttfrxTimesLTStd-Bold","x":53.85829828999998,"y":576.02770996,"line":4} +{"page":451,"change":"ContentChange","types":["H4"],"str":"of the Fossil Fuel Industry","dir":"ltr","width":"179.17","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","558.03"],"fontName":"YCQPZS+ChmcpvXdssdrTttfrxTimesLTStd-Bold","x":53.85829828999998,"y":558.02770996,"line":5} +{"page":460,"change":"ContentChange","types":["H4"],"str":"Just Transition: Employment Projections ","dir":"ltr","width":"284.91","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","576.03"],"fontName":"YEUVQS+SdnkylMywmbtPfwdngTimesLTStd-Bold","x":53.85829828999998,"y":576.02770996,"line":4} +{"page":460,"change":"ContentChange","types":["H4"],"str":"for the 2.0 °C and 1.5 °C Scenarios","dir":"ltr","width":"236.83","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","558.03"],"fontName":"YEUVQS+SdnkylMywmbtPfwdngTimesLTStd-Bold","x":53.85829828999998,"y":558.02770996,"line":5} +{"page":483,"change":"ContentChange","types":["H4"],"str":"Requirements for Minerals and Metals ","dir":"ltr","width":"269.05","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","576.03"],"fontName":"SCYBSO+VrwybmLnjnkyKbcngcTimesLTStd-Bold","x":53.85829828999998,"y":576.02770996,"line":4} +{"page":483,"change":"ContentChange","types":["H4"],"str":"for 100% Renewable Scenarios","dir":"ltr","width":"212.46","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","558.03"],"fontName":"SCYBSO+VrwybmLnjnkyKbcngcTimesLTStd-Bold","x":53.85829828999998,"y":558.02770996,"line":5} +{"page":504,"change":"ContentChange","types":["H4"],"str":"Implications of the Developed Scenarios ","dir":"ltr","width":"276.48","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","576.03"],"fontName":"UFCXMJ+LwcyhkHrqnwrFvgtyxTimesLTStd-Bold","x":53.85829828999998,"y":576.02770996,"line":4} +{"page":504,"change":"ContentChange","types":["H4"],"str":"for Climate Change","dir":"ltr","width":"134.69","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","558.03"],"fontName":"UFCXMJ+LwcyhkHrqnwrFvgtyxTimesLTStd-Bold","x":53.85829828999998,"y":558.02770996,"line":5} +{"page":515,"change":"ContentChange","types":["H4"],"str":"Discussion, Conclusions ","dir":"ltr","width":"166.70","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","576.03"],"fontName":"WUUJUV+SxpbbsFmqqddLjmwxwTimesLTStd-Bold","x":53.85829828999998,"y":576.02770996,"line":4} +{"page":515,"change":"ContentChange","types":["H4"],"str":"and Recommendations","dir":"ltr","width":"156.00","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","558.03"],"fontName":"WUUJUV+SxpbbsFmqqddLjmwxwTimesLTStd-Bold","x":53.85829828999998,"y":558.02770996,"line":5} +{"page":532,"change":"ContentChange","types":["H4"],"str":"Annex","dir":"ltr","width":"44.45","height":"16.00","transform":["16.00","0.00","0.00","16.00","53.86","592.46"],"fontName":"FAZCPE+LhdrkvNllvybLsjfmjTimesLTStd-Bold","x":53.85829925,"y":592.461792,"line":1} \ No newline at end of file diff --git a/examples/Adventures-Of-Sherlock-Holmes/detectHeaders.json b/examples/Adventures-Of-Sherlock-Holmes/detectHeaders.json new file mode 100644 index 0000000..301b027 --- /dev/null +++ b/examples/Adventures-Of-Sherlock-Holmes/detectHeaders.json @@ -0,0 +1,69 @@ +{ + "pages": 199, + "items": 8436, + "groupedItems": 8308, + "changes": 55, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":0,"change":"ContentChange","types":["H1"],"str":"SHERLOCK","dir":"ltr","width":"363.20","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","656.26"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":656.262,"line":0} +{"page":0,"change":"ContentChange","types":["H1"],"str":"HOLMES","dir":"ltr","width":"275.57","height":"59.78","transform":["59.78","0.00","0.00","59.78","159.37","592.48"],"fontName":"NVBKCW+RoyalInitialen","x":159.372,"y":592.4789999999999,"line":1} +{"page":1,"change":"ContentChange","types":["H5"],"str":"S IR A RTHUR I GNATIUS","line":0,"x":196.324,"y":702.187,"width":"186.21","height":"20.66","fontName":["KKLGKN+NimbusRomNo9L-Regu"],"dir":["ltr"]} +{"page":1,"change":"ContentChange","types":["H4"],"str":"C ONAN D OYLE","line":1,"x":214.04500000000002,"y":678.946,"width":"156.34","height":"24.79","fontName":["INBNCB+NimbusRomNo9L-Medi"],"dir":["ltr"]} +{"page":1,"change":"ContentChange","types":["H3"],"str":"T HE A DVENTURES O F","line":3,"x":149.122,"y":483.32700000000006,"width":"273.72","height":"29.89","fontName":["INBNCB+NimbusRomNo9L-Medi"],"dir":["ltr"]} +{"page":1,"change":"ContentChange","types":["H3"],"str":"SHERLOCK HOLMES","dir":"ltr","width":"327.51","height":"29.89","transform":["29.89","0.00","0.00","29.89","133.40","433.72"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":133.40100000000007,"y":433.7180000000001,"line":4} +{"page":4,"change":"ContentChange","types":["H5"],"str":"Adventure I","dir":"ltr","width":"106.74","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} +{"page":4,"change":"ContentChange","types":["H6"],"str":"I","dir":"ltr","width":"5.58","height":"14.35","transform":["14.35","0.00","0.00","14.35","117.83","522.94"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":522.942,"line":2} +{"page":4,"change":"ContentChange","types":["H2"],"str":"T","dir":"ltr","width":"44.05","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","456.23"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":456.232,"line":3} +{"page":11,"change":"ContentChange","types":["H6"],"str":"II","dir":"ltr","width":"11.16","height":"14.35","transform":["14.35","0.00","0.00","14.35","117.83","494.00"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.82799999999993,"y":494.00400000000036,"line":15} +{"page":18,"change":"ContentChange","types":["H6"],"str":"III","dir":"ltr","width":"16.74","height":"14.35","transform":["14.35","0.00","0.00","14.35","117.83","304.32"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.82799999999999,"y":304.3160000000006,"line":29} +{"page":22,"change":"ContentChange","types":["H5"],"str":"Adventure II","dir":"ltr","width":"114.78","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} +{"page":22,"change":"ContentChange","types":["H2"],"str":"I","dir":"ltr","width":"37.06","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","485.40"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":485.39500000000004,"line":2} +{"page":39,"change":"ContentChange","types":["H5"],"str":"Adventure III","dir":"ltr","width":"122.82","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} +{"page":39,"change":"ContentChange","types":["H2"],"str":"“ M","line":2,"x":117.828,"y":486.678,"width":"49.74","height":"59.78","fontName":["KKLGKN+NimbusRomNo9L-Regu","NVBKCW+RoyalInitialen"],"dir":["ltr"]} +{"page":52,"change":"ContentChange","types":["H5"],"str":"Adventure IV","dir":"ltr","width":"121.66","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} +{"page":52,"change":"ContentChange","types":["H2"],"str":"W","dir":"ltr","width":"48.90","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","485.34"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":485.336,"line":2} +{"page":70,"change":"ContentChange","types":["H5"],"str":"Adventure V","dir":"ltr","width":"113.62","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} +{"page":70,"change":"ContentChange","types":["H2"],"str":"W","dir":"ltr","width":"48.90","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","485.34"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":485.336,"line":2} +{"page":84,"change":"ContentChange","types":["H5"],"str":"Adventure VI","dir":"ltr","width":"121.66","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} +{"page":84,"change":"ContentChange","types":["H2"],"str":"I","dir":"ltr","width":"37.06","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","485.40"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":485.39500000000004,"line":2} +{"page":101,"change":"ContentChange","types":["H5"],"str":"Adventure VII","dir":"ltr","width":"129.70","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} +{"page":101,"change":"ContentChange","types":["H2"],"str":"I","dir":"ltr","width":"37.06","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","455.51"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":455.508,"line":3} +{"page":116,"change":"ContentChange","types":["H5"],"str":"Adventure VIII","dir":"ltr","width":"137.74","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} +{"page":116,"change":"ContentChange","types":["H2"],"str":"O","dir":"ltr","width":"50.09","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","455.81"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":455.806,"line":3} +{"page":134,"change":"ContentChange","types":["H5"],"str":"Adventure IX","dir":"ltr","width":"121.66","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} +{"page":134,"change":"ContentChange","types":["H2"],"str":"O","dir":"ltr","width":"50.09","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","455.81"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":455.806,"line":3} +{"page":149,"change":"ContentChange","types":["H5"],"str":"Adventure X","dir":"ltr","width":"113.62","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} +{"page":149,"change":"ContentChange","types":["H2"],"str":"T","dir":"ltr","width":"44.05","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","455.57"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":455.567,"line":3} +{"page":165,"change":"ContentChange","types":["H5"],"str":"Adventure XI","dir":"ltr","width":"121.66","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} +{"page":165,"change":"ContentChange","types":["H2"],"str":"“ H","line":3,"x":117.828,"y":456.22499999999997,"width":"46.75","height":"59.78","fontName":["KKLGKN+NimbusRomNo9L-Regu","NVBKCW+RoyalInitialen"],"dir":["ltr"]} +{"page":183,"change":"ContentChange","types":["H5"],"str":"Adventure XII","dir":"ltr","width":"129.70","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} +{"page":183,"change":"ContentChange","types":["H2"],"str":"“ T","line":3,"x":117.828,"y":455.56699999999995,"width":"48.90","height":"59.78","fontName":["KKLGKN+NimbusRomNo9L-Regu","NVBKCW+RoyalInitialen"],"dir":["ltr"]} \ No newline at end of file diff --git a/examples/Alice-In-Wonderland/detectHeaders.json b/examples/Alice-In-Wonderland/detectHeaders.json new file mode 100644 index 0000000..f7831af --- /dev/null +++ b/examples/Alice-In-Wonderland/detectHeaders.json @@ -0,0 +1,53 @@ +{ + "pages": 75, + "items": 3043, + "groupedItems": 2561, + "changes": 30, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":0,"change":"ContentChange","types":["H1"],"str":"A LICE ’ S A DVENTURES","line":0,"x":171.72200000000004,"y":625.557,"width":"238.54","height":"24.79","fontName":["TBCMKD+NimbusRomNo9L-Medi"],"dir":["ltr"]} +{"page":0,"change":"ContentChange","types":["H1"],"str":"IN W ONDERLAND","line":1,"x":200.12800000000004,"y":596.081,"width":"185.63","height":"24.79","fontName":["TBCMKD+NimbusRomNo9L-Medi"],"dir":["ltr"]} +{"page":0,"change":"ContentChange","types":["H2"],"str":"by Lewis Carroll","dir":"ltr","width":"124.02","height":"17.21","transform":["17.21","0.00","0.00","17.21","235.15","537.55"],"fontName":"TBCMKD+NimbusRomNo9L-Medi","x":235.14600000000004,"y":537.5450000000001,"line":2} +{"page":3,"change":"ContentChange","types":["H2"],"str":"Poem","dir":"ltr","width":"58.70","height":"24.79","transform":["24.79","0.00","0.00","24.79","102.88","648.74"],"fontName":"TBCMKD+NimbusRomNo9L-Medi","x":102.88400000000001,"y":648.739,"line":0} +{"page":4,"change":"ContentChange","types":["H2"],"str":"Chapter I","dir":"ltr","width":"103.96","height":"24.79","transform":["24.79","0.00","0.00","24.79","102.88","623.57"],"fontName":"TBCMKD+NimbusRomNo9L-Medi","x":102.884,"y":623.565,"line":0} +{"page":9,"change":"ContentChange","types":["H2"],"str":"Chapter II","dir":"ltr","width":"113.60","height":"24.79","transform":["24.79","0.00","0.00","24.79","102.88","623.57"],"fontName":"TBCMKD+NimbusRomNo9L-Medi","x":102.884,"y":623.565,"line":0} +{"page":14,"change":"ContentChange","types":["H2"],"str":"Chapter III","dir":"ltr","width":"123.24","height":"24.79","transform":["24.79","0.00","0.00","24.79","102.88","623.57"],"fontName":"TBCMKD+NimbusRomNo9L-Medi","x":102.884,"y":623.565,"line":0} +{"page":19,"change":"ContentChange","types":["H2"],"str":"Chapter IV","dir":"ltr","width":"121.85","height":"24.79","transform":["24.79","0.00","0.00","24.79","102.88","623.57"],"fontName":"TBCMKD+NimbusRomNo9L-Medi","x":102.884,"y":623.565,"line":0} +{"page":25,"change":"ContentChange","types":["H2"],"str":"Chapter V","dir":"ltr","width":"112.21","height":"24.79","transform":["24.79","0.00","0.00","24.79","102.88","623.57"],"fontName":"TBCMKD+NimbusRomNo9L-Medi","x":102.884,"y":623.565,"line":0} +{"page":32,"change":"ContentChange","types":["H2"],"str":"Chapter VI","dir":"ltr","width":"121.85","height":"24.79","transform":["24.79","0.00","0.00","24.79","102.88","623.57"],"fontName":"TBCMKD+NimbusRomNo9L-Medi","x":102.884,"y":623.565,"line":0} +{"page":39,"change":"ContentChange","types":["H2"],"str":"Chapter VII","dir":"ltr","width":"131.50","height":"24.79","transform":["24.79","0.00","0.00","24.79","102.88","623.57"],"fontName":"TBCMKD+NimbusRomNo9L-Medi","x":102.884,"y":623.565,"line":0} +{"page":46,"change":"ContentChange","types":["H2"],"str":"Chapter VIII","dir":"ltr","width":"141.14","height":"24.79","transform":["24.79","0.00","0.00","24.79","102.88","623.57"],"fontName":"TBCMKD+NimbusRomNo9L-Medi","x":102.884,"y":623.565,"line":0} +{"page":53,"change":"ContentChange","types":["H2"],"str":"Chapter IX","dir":"ltr","width":"121.85","height":"24.79","transform":["24.79","0.00","0.00","24.79","102.88","623.57"],"fontName":"TBCMKD+NimbusRomNo9L-Medi","x":102.884,"y":623.565,"line":0} +{"page":59,"change":"ContentChange","types":["H2"],"str":"Chapter X","dir":"ltr","width":"112.21","height":"24.79","transform":["24.79","0.00","0.00","24.79","102.88","623.57"],"fontName":"TBCMKD+NimbusRomNo9L-Medi","x":102.884,"y":623.565,"line":0} +{"page":65,"change":"ContentChange","types":["H2"],"str":"Chapter XI","dir":"ltr","width":"121.85","height":"24.79","transform":["24.79","0.00","0.00","24.79","102.88","623.57"],"fontName":"TBCMKD+NimbusRomNo9L-Medi","x":102.884,"y":623.565,"line":0} +{"page":70,"change":"ContentChange","types":["H2"],"str":"Chapter XII","dir":"ltr","width":"131.50","height":"24.79","transform":["24.79","0.00","0.00","24.79","102.88","623.57"],"fontName":"TBCMKD+NimbusRomNo9L-Medi","x":102.884,"y":623.565,"line":0} +{"page":76,"change":"ContentChange","types":["H2"],"str":"T HE E ND","line":0,"x":248.313,"y":486.4889999999999,"width":"87.82","height":"24.79","fontName":["FZVLIH+NimbusRomNo9L-Regu"],"dir":["ltr"]} \ No newline at end of file diff --git a/examples/CC-NC_Leitfaden/detectHeaders.json b/examples/CC-NC_Leitfaden/detectHeaders.json new file mode 100644 index 0000000..67ede5f --- /dev/null +++ b/examples/CC-NC_Leitfaden/detectHeaders.json @@ -0,0 +1,54 @@ +{ + "pages": 24, + "items": 1264, + "groupedItems": 1164, + "changes": 18, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":0,"change":"ContentChange","types":["H3"],"str":"Freies Wissen dank ","dir":"ltr","width":"178.49","height":"15.22","transform":["10.76","10.76","-10.76","10.76","123.28","395.24"],"fontName":"QMZZIE+AvenirLTStd-Black","x":123.278,"y":395.2377,"line":0} +{"page":0,"change":"ContentChange","types":["H3"],"str":"Creative-Commons-Lizenzen","dir":"ltr","width":"255.25","height":"15.22","transform":["10.76","10.76","-10.76","10.76","81.29","322.31"],"fontName":"QMZZIE+AvenirLTStd-Black","x":81.28529540000001,"y":322.30753500000003,"line":1} +{"page":1,"change":"ContentChange","types":["H4"],"str":"CC-Lizenzen","dir":"ltr","width":"100.79","height":"14.00","transform":["14.00","0.00","0.00","14.00","34.02","512.47"],"fontName":"QMZZIE+AvenirLTStd-Black","x":34.0158,"y":512.4728,"line":26} +{"page":2,"change":"ContentChange","types":["H5"],"str":"John H. Weitzmann","dir":"ltr","width":"96.43","height":"13.00","transform":["13.00","0.00","0.00","13.00","34.02","86.93"],"fontName":"QMZZIE+AGaramond-Italic","x":34.0157,"y":86.9291,"line":16} +{"page":5,"change":"ContentChange","types":["H5"],"str":"Stell dir eine Welt vor, in der","dir":"ltr","width":"136.99","height":"13.00","transform":["13.00","0.00","0.00","13.00","34.02","482.93"],"fontName":"QMZZIE+AGaramond-Italic","x":34.0157,"y":482.9292,"line":1} +{"page":5,"change":"ContentChange","types":["H5"],"str":" jeder Mensch an der Gesamtheit ","dir":"ltr","width":"159.60","height":"13.00","transform":["13.00","0.00","0.00","13.00","34.02","470.93"],"fontName":"QMZZIE+AGaramond-Italic","x":34.0157,"y":470.93019999999996,"line":2} +{"page":5,"change":"ContentChange","types":["H5"],"str":"des Wissens teilhaben kann. ","dir":"ltr","width":"134.30","height":"13.00","transform":["13.00","0.00","0.00","13.00","34.02","458.93"],"fontName":"QMZZIE+AGaramond-Italic","x":34.0157,"y":458.93119999999993,"line":3} +{"page":5,"change":"ContentChange","types":["H5"],"str":"Das ist unsere Mission.","dir":"ltr","width":"108.99","height":"13.00","transform":["13.00","0.00","0.00","13.00","34.02","446.93"],"fontName":"QMZZIE+AGaramond-Italic","x":34.0157,"y":446.9321999999999,"line":4} +{"page":5,"change":"ContentChange","types":["H2"],"str":"1","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","34.02","345.93"],"fontName":"QMZZIE+AvenirLTStd-Black","x":34.0157,"y":345.9292,"line":6} +{"page":7,"change":"ContentChange","types":["H2"],"str":"2","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","215.76","503.81"],"fontName":"QMZZIE+AvenirLTStd-Black","x":215.7638,"y":503.8094,"line":37} +{"page":8,"change":"ContentChange","types":["H2"],"str":"3","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","215.76","503.81"],"fontName":"QMZZIE+AvenirLTStd-Black","x":215.7638,"y":503.8094,"line":33} +{"page":9,"change":"ContentChange","types":["H2"],"str":"4","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","215.76","503.81"],"fontName":"QMZZIE+AvenirLTStd-Black","x":215.7638,"y":503.8094,"line":24} +{"page":10,"change":"ContentChange","types":["H2"],"str":"5","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","34.02","345.93"],"fontName":"QMZZIE+AvenirLTStd-Black","x":34.0157,"y":345.9292,"line":11} +{"page":11,"change":"ContentChange","types":["H2"],"str":"6","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","215.76","417.93"],"fontName":"QMZZIE+AvenirLTStd-Black","x":215.7638,"y":417.9292,"line":42} +{"page":12,"change":"ContentChange","types":["H2"],"str":"7","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","34.02","358.93"],"fontName":"QMZZIE+AvenirLTStd-Black","x":34.0157,"y":358.9292,"line":11} +{"page":13,"change":"ContentChange","types":["H2"],"str":"8","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","34.02","429.93"],"fontName":"QMZZIE+AvenirLTStd-Black","x":34.0157,"y":429.9292,"line":5} +{"page":14,"change":"ContentChange","types":["H2"],"str":"9","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","34.02","503.81"],"fontName":"QMZZIE+AvenirLTStd-Black","x":34.0157,"y":503.8094,"line":1} +{"page":22,"change":"ContentChange","types":["H4"],"str":"Paul Klimpel","dir":"ltr","width":"70.42","height":"14.00","transform":["14.00","0.00","0.00","14.00","215.88","230.93"],"fontName":"QMZZIE+AGaramond-Italic","x":215.8819,"y":230.9291,"line":53} \ No newline at end of file diff --git a/examples/CC_License_Agreement_of_siMPle/detectHeaders.json b/examples/CC_License_Agreement_of_siMPle/detectHeaders.json new file mode 100644 index 0000000..c7de584 --- /dev/null +++ b/examples/CC_License_Agreement_of_siMPle/detectHeaders.json @@ -0,0 +1,38 @@ +{ + "pages": 7, + "items": 483, + "groupedItems": 217, + "changes": 11, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":0,"change":"ContentChange","types":["H1"],"str":"Creative Commons Attribution - ShareAlike 4.0 ","line":3,"x":56.7,"y":729.36,"width":"390.17","height":"16.02","fontName":["BCDGEE+Montserrat-Bold"],"dir":["ltr"]} +{"page":0,"change":"ContentChange","types":["H1"],"str":"International Public License Agreement of siMPle –","line":4,"x":56.7,"y":709.86,"width":"458.94","height":"16.02","fontName":["BCDGEE+Montserrat-Bold","BCDIEE+Montserrat-Bold"],"dir":["ltr"]} \ No newline at end of file diff --git a/examples/Closed-Syllables/detectHeaders.json b/examples/Closed-Syllables/detectHeaders.json new file mode 100644 index 0000000..b56749a --- /dev/null +++ b/examples/Closed-Syllables/detectHeaders.json @@ -0,0 +1,38 @@ +{ + "pages": 19, + "items": 1365, + "groupedItems": 1171, + "changes": 5, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":0,"change":"ContentChange","types":["H1"],"str":"Drill Bits","dir":"ltr","width":"60.68","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","702.82"],"fontName":"ABCDEE+Calibri","x":72.024,"y":702.82,"line":3} +{"page":0,"change":"ContentChange","types":["H1"],"str":"Drill Bits Phonics - oriented word lists for teachers ","line":4,"x":76.104,"y":639.34,"width":"360.52","height":"18.00","fontName":["ABCDEE+Calibri"],"dir":["ltr"]} \ No newline at end of file diff --git a/examples/ExamplePdf/detectHeaders.json b/examples/ExamplePdf/detectHeaders.json new file mode 100644 index 0000000..382e0fe --- /dev/null +++ b/examples/ExamplePdf/detectHeaders.json @@ -0,0 +1,44 @@ +{ + "pages": 6, + "items": 268, + "groupedItems": 145, + "changes": 10, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":0,"change":"ContentChange","types":["H1"],"str":"Mega Überschrift","dir":"ltr","width":"245.06","height":"30.00","transform":["30.00","0.00","0.00","30.00","175.00","756.00"],"fontName":"OMUGKQ+Helvetica-Bold","x":175,"y":756,"line":0} +{"page":0,"change":"ContentChange","types":["H2"],"str":"2te Überschrift","dir":"ltr","width":"130.06","height":"20.00","transform":["20.00","0.00","0.00","20.00","233.00","665.00"],"fontName":"JBRMKS+Helvetica","x":233,"y":665,"line":1} +{"page":2,"change":"ContentChange","types":["H2"],"str":"Paragraphen","dir":"ltr","width":"110.04","height":"18.00","transform":["18.00","0.00","0.00","18.00","57.00","767.00"],"fontName":"OMUGKQ+Helvetica-Bold","x":57,"y":767,"line":0} +{"page":3,"change":"ContentChange","types":["H2"],"str":"Schriftschnitt","dir":"ltr","width":"116.01","height":"18.00","transform":["18.00","0.00","0.00","18.00","57.00","767.00"],"fontName":"OMUGKQ+Helvetica-Bold","x":57,"y":767,"line":0} +{"page":4,"change":"ContentChange","types":["H2"],"str":"Listen","dir":"ltr","width":"53.01","height":"18.00","transform":["18.00","0.00","0.00","18.00","57.00","767.00"],"fontName":"OMUGKQ+Helvetica-Bold","x":57,"y":767,"line":0} +{"page":6,"change":"ContentChange","types":["H2"],"str":"Quotes & Spezielle Einschübe 8","line":0,"x":165,"y":767,"width":"264.73","height":"18.00","fontName":["OMUGKQ+Helvetica-Bold"],"dir":["ltr"]} +{"page":6,"change":"ContentChange","types":["H3"],"str":"Heading 2","dir":"ltr","width":"76.49","height":"16.00","transform":["16.00","0.00","0.00","16.00","57.00","449.00"],"fontName":"OMUGKQ+Helvetica-Bold","x":57,"y":449,"line":12} +{"page":6,"change":"ContentChange","types":["H3"],"str":"Heading 2 II","dir":"ltr","width":"89.85","height":"16.00","transform":["16.00","0.00","0.00","16.00","57.00","391.00"],"fontName":"OMUGKQ+Helvetica-Bold","x":57,"y":391,"line":14} \ No newline at end of file diff --git a/examples/Flash-Masques-Temperature/detectHeaders.json b/examples/Flash-Masques-Temperature/detectHeaders.json new file mode 100644 index 0000000..924ede2 --- /dev/null +++ b/examples/Flash-Masques-Temperature/detectHeaders.json @@ -0,0 +1,41 @@ +{ + "pages": 4, + "items": 134, + "groupedItems": 108, + "changes": 5, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":0,"change":"ContentChange","types":["H1"],"str":"La vraie température !","dir":"ltr","width":"307.05","height":"29.00","transform":["29.00","0.00","0.00","29.00","197.43","469.65"],"fontName":"NRVUEW+HelveticaNeue-Thin","x":197.4282,"y":469.654,"line":0} +{"page":0,"change":"ContentChange","types":["H2"],"str":"qui permet de laver en toute sécurité ","dir":"ltr","width":"328.32","height":"18.00","transform":["18.00","0.00","0.00","18.00","188.39","416.29"],"fontName":"NRVUEW+HelveticaNeue-Thin","x":188.3882,"y":416.2949,"line":1} +{"page":0,"change":"ContentChange","types":["H2"],"str":"les masques barrières en tissu","dir":"ltr","width":"268.07","height":"18.00","transform":["18.00","0.00","0.00","18.00","216.01","394.69"],"fontName":"NRVUEW+HelveticaNeue-Thin","x":216.0091,"y":394.6949,"line":2} +{"page":3,"change":"ContentChange","types":["H2"],"str":"Qui sommes-nous ?","dir":"ltr","width":"176.33","height":"18.00","transform":["18.00","0.00","0.00","18.00","127.30","768.06"],"fontName":"NRVUEW+HelveticaNeue-Thin","x":127.3039,"y":768.0642,"line":0} +{"page":3,"change":"ContentChange","types":["H2"],"str":"Les liens d’accès","dir":"ltr","width":"152.39","height":"18.00","transform":["18.00","0.00","0.00","18.00","127.30","192.63"],"fontName":"NRVUEW+HelveticaNeue-Thin","x":127.3039,"y":192.6311,"line":1} \ No newline at end of file diff --git a/examples/Grammar-Matters/detectHeaders.json b/examples/Grammar-Matters/detectHeaders.json new file mode 100644 index 0000000..9d66dfe --- /dev/null +++ b/examples/Grammar-Matters/detectHeaders.json @@ -0,0 +1,131 @@ +{ + "pages": 116, + "items": 7676, + "groupedItems": 3479, + "changes": 101, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":0,"change":"ContentChange","types":["H1"],"str":"Grammar Matters ","dir":"ltr","width":"422.48","height":"48.00","transform":["48.00","0.00","0.00","48.00","101.54","554.98"],"fontName":"YBJWME+CenturyGothic,Bold","x":101.53969000000006,"y":554.9793999999998,"line":1} +{"page":1,"change":"ContentChange","types":["H2"],"str":"Why is Proper Grammar so Important?","dir":"ltr","width":"441.53","height":"24.00","transform":["24.00","0.00","0.00","24.00","85.22","614.26"],"fontName":"SJUTSY+Arial,Bold","x":85.2237900000001,"y":614.2598999999999,"line":2} +{"page":2,"change":"ContentChange","types":["H4"],"str":"Common Errors in Business Writing","dir":"ltr","width":"310.15","height":"18.00","transform":["18.00","0.00","0.00","18.00","62.04","442.75"],"fontName":"SJUTSY+Arial,Bold","x":62.040039999999976,"y":442.75010000000003,"line":14} +{"page":3,"change":"ContentChange","types":["H4"],"str":"The Eight Parts of Speech","dir":"ltr","width":"223.02","height":"18.00","transform":["18.00","0.00","0.00","18.00","62.04","440.35"],"fontName":"SJUTSY+Arial,Bold","x":62.03981999999999,"y":440.3498,"line":15} +{"page":7,"change":"ContentChange","types":["H2"],"str":"Sentences","dir":"ltr","width":"119.98","height":"24.00","transform":["24.00","0.00","0.00","24.00","245.93","528.31"],"fontName":"SJUTSY+Arial,Bold","x":245.93,"y":528.31,"line":2} +{"page":8,"change":"ContentChange","types":["H4"],"str":"Sentence Types","dir":"ltr","width":"136.96","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","419.47"],"fontName":"SJUTSY+Arial,Bold","x":72.02379999999997,"y":419.46979999999996,"line":15} +{"page":9,"change":"ContentChange","types":["H4"],"str":"Phrases and Clauses","dir":"ltr","width":"181.04","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","457.99"],"fontName":"SJUTSY+Arial,Bold","x":72.02372,"y":457.98970000000014,"line":11} +{"page":11,"change":"ContentChange","types":["H4"],"str":"Sentence Varieties","dir":"ltr","width":"160.00","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","148.10"],"fontName":"SJUTSY+Arial,Bold","x":72.0238,"y":148.1002,"line":22} +{"page":13,"change":"ContentChange","types":["H4"],"str":"Sentence Faults: Fragments, Comma Splices, and ","dir":"ltr","width":"431.96","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.03","392.95"],"fontName":"SJUTSY+Arial,Bold","x":72.02526000000015,"y":392.94980000000015,"line":16} +{"page":13,"change":"ContentChange","types":["H4"],"str":"Run- Ons","line":17,"x":72.0238,"y":372.17,"width":"76.15","height":"18.00","fontName":["SJUTSY+Arial,Bold"],"dir":["ltr"]} +{"page":15,"change":"ContentChange","types":["H2"],"str":"Nouns","dir":"ltr","width":"74.57","height":"24.00","transform":["24.00","0.00","0.00","24.00","268.73","480.43"],"fontName":"SJUTSY+Arial,Bold","x":268.73076,"y":480.4300000000002,"line":11} +{"page":16,"change":"ContentChange","types":["H4"],"str":"Making Nouns Plural","dir":"ltr","width":"178.08","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","682.78"],"fontName":"SJUTSY+Arial,Bold","x":72.02416000000005,"y":682.7802,"line":1} +{"page":19,"change":"ContentChange","types":["H4"],"str":"Possessive Nouns ","dir":"ltr","width":"164.09","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","205.49"],"fontName":"SJUTSY+Arial,Bold","x":72.02408999999994,"y":205.48959999999977,"line":24} +{"page":20,"change":"ContentChange","types":["H4"],"str":"Using the Apostrophe","dir":"ltr","width":"187.94","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","468.79"],"fontName":"SJUTSY+Arial,Bold","x":72.02412000000004,"y":468.78990000000005,"line":13} +{"page":21,"change":"ContentChange","types":["H4"],"str":"Challenges with Possessive Nouns","dir":"ltr","width":"301.16","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","349.37"],"fontName":"SJUTSY+Arial,Bold","x":72.0236800000001,"y":349.36989999999986,"line":15} +{"page":24,"change":"ContentChange","types":["H2"],"str":"Pronouns","dir":"ltr","width":"111.94","height":"24.00","transform":["24.00","0.00","0.00","24.00","250.01","451.99"],"fontName":"SJUTSY+Arial,Bold","x":250.01036000000005,"y":451.99070000000006,"line":2} +{"page":24,"change":"ContentChange","types":["H4"],"str":"Personal Pronouns","dir":"ltr","width":"165.08","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","155.90"],"fontName":"SJUTSY+Arial,Bold","x":72.02399999999997,"y":155.89999999999995,"line":15} +{"page":27,"change":"ContentChange","types":["H4"],"str":"Pronoun-Antecedent Agreement","dir":"ltr","width":"276.85","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","384.91"],"fontName":"SJUTSY+Arial,Bold","x":72.02431000000013,"y":384.9099000000003,"line":18} +{"page":28,"change":"ContentChange","types":["H4"],"str":"Pronoun Challenges","dir":"ltr","width":"175.01","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","235.97"],"fontName":"SJUTSY+Arial,Bold","x":72.0243000000001,"y":235.96999999999997,"line":25} +{"page":33,"change":"ContentChange","types":["H2"],"str":"Verbs","dir":"ltr","width":"66.62","height":"24.00","transform":["24.00","0.00","0.00","24.00","272.69","452.11"],"fontName":"SJUTSY+Arial,Bold","x":272.6895,"y":452.1101,"line":10} +{"page":33,"change":"ContentChange","types":["H4"],"str":"Types of Verbs","dir":"ltr","width":"129.01","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","299.21"],"fontName":"SJUTSY+Arial,Bold","x":72.0238,"y":299.21000000000004,"line":16} +{"page":34,"change":"ContentChange","types":["H4"],"str":"Linking Verbs","dir":"ltr","width":"119.02","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","242.93"],"fontName":"SJUTSY+Arial,Bold","x":72.0238,"y":242.92999999999998,"line":24} +{"page":35,"change":"ContentChange","types":["H4"],"str":"Helping Verbs","dir":"ltr","width":"121.05","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","482.59"],"fontName":"SJUTSY+Arial,Bold","x":72.02416,"y":482.58979999999997,"line":16} +{"page":35,"change":"ContentChange","types":["H4"],"str":"Active Voice and Passive Voice","dir":"ltr","width":"268.96","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","244.73"],"fontName":"SJUTSY+Arial,Bold","x":72.02389999999998,"y":244.7301,"line":28} +{"page":36,"change":"ContentChange","types":["H2"],"str":"Verb Tenses","dir":"ltr","width":"142.66","height":"24.00","transform":["24.00","0.00","0.00","24.00","72.02","478.63"],"fontName":"SJUTSY+Arial,Bold","x":72.02379999999994,"y":478.63000000000005,"line":13} +{"page":37,"change":"ContentChange","types":["H4"],"str":"Participles What are participles? Participles are another form that a verb takes. ","line":38,"x":72.0238,"y":383.46979999999996,"width":"453.36","height":"18.00","fontName":["SJUTSY+Arial,Bold","XYXVPQ+Arial"],"dir":["ltr"]} +{"page":39,"change":"ContentChange","types":["H4"],"str":"Infinitives","dir":"ltr","width":"83.93","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","256.73"],"fontName":"SJUTSY+Arial,Bold","x":72.0238,"y":256.73,"line":23} +{"page":40,"change":"ContentChange","types":["H4"],"str":"Participle Phrases","dir":"ltr","width":"156.01","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","470.59"],"fontName":"SJUTSY+Arial,Bold","x":72.02381999999994,"y":470.5896,"line":13} +{"page":41,"change":"ContentChange","types":["H4"],"str":"Irregular Verbs","dir":"ltr","width":"128.07","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","449.95"],"fontName":"SJUTSY+Arial,Bold","x":72.0238,"y":449.9502,"line":14} +{"page":42,"change":"ContentChange","types":["H4"],"str":"Lay vs Lie","dir":"ltr","width":"86.94","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","520.75"],"fontName":"SJUTSY+Arial,Bold","x":72.0238,"y":520.7499,"line":7} +{"page":44,"change":"ContentChange","types":["H2"],"str":"Subject/Verb Agreement","dir":"ltr","width":"278.69","height":"24.00","transform":["24.00","0.00","0.00","24.00","166.58","412.51"],"fontName":"SJUTSY+Arial,Bold","x":166.5802600000001,"y":412.5094000000001,"line":2} +{"page":44,"change":"ContentChange","types":["H4"],"str":"Finding the subject","dir":"ltr","width":"164.97","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","214.85"],"fontName":"SJUTSY+Arial,Bold","x":72.02405,"y":214.85000000000002,"line":11} +{"page":45,"change":"ContentChange","types":["H4"],"str":"Basic Rules for Subject-Verb Agreement","dir":"ltr","width":"346.03","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","99.74"],"fontName":"SJUTSY+Arial,Bold","x":72.0239,"y":99.74389999999997,"line":34} +{"page":47,"change":"ContentChange","types":["H4"],"str":"Challenges with Subject/Verb Agreement","dir":"ltr","width":"350.93","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","218.21"],"fontName":"SJUTSY+Arial,Bold","x":72.0239,"y":218.20999999999998,"line":24} +{"page":50,"change":"ContentChange","types":["H2"],"str":"Adjectives and Adverbs ","dir":"ltr","width":"278.88","height":"24.00","transform":["24.00","0.00","0.00","24.00","169.94","442.39"],"fontName":"SJUTSY+Arial,Bold","x":169.94010000000003,"y":442.39009999999996,"line":15} +{"page":50,"change":"ContentChange","types":["H4"],"str":"Adjectives","dir":"ltr","width":"89.93","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","220.49"],"fontName":"SJUTSY+Arial,Bold","x":72.02391999999999,"y":220.4896999999999,"line":25} +{"page":54,"change":"ContentChange","types":["H2"],"str":"Adverbs","dir":"ltr","width":"95.93","height":"24.00","transform":["24.00","0.00","0.00","24.00","72.02","478.63"],"fontName":"SJUTSY+Arial,Bold","x":72.02398000000005,"y":478.63030000000026,"line":8} +{"page":55,"change":"ContentChange","types":["H2"],"str":"Comparative and Superlative Forms","dir":"ltr","width":"410.69","height":"24.00","transform":["24.00","0.00","0.00","24.00","72.02","478.63"],"fontName":"SJUTSY+Arial,Bold","x":72.02430000000001,"y":478.63020000000006,"line":10} +{"page":57,"change":"ContentChange","types":["H4"],"str":"Commonly Confused Adjectives and Adverbs","dir":"ltr","width":"389.97","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","247.25"],"fontName":"SJUTSY+Arial,Bold","x":72.0238,"y":247.2498,"line":28} +{"page":58,"change":"ContentChange","types":["H4"],"str":"Adverb and Adjective Placement","dir":"ltr","width":"278.94","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.03","380.95"],"fontName":"SJUTSY+Arial,Bold","x":72.02546000000018,"y":380.9498000000002,"line":16} +{"page":59,"change":"ContentChange","types":["H2"],"str":"Prepositions","dir":"ltr","width":"145.37","height":"24.00","transform":["24.00","0.00","0.00","24.00","233.33","456.79"],"fontName":"SJUTSY+Arial,Bold","x":233.33,"y":456.79,"line":6} +{"page":60,"change":"ContentChange","types":["H4"],"str":"Prepositions and Pronouns","dir":"ltr","width":"235.04","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","682.78"],"fontName":"SJUTSY+Arial,Bold","x":72.02416000000005,"y":682.7802,"line":1} +{"page":60,"change":"ContentChange","types":["H4"],"str":"Common Preposition Errors","dir":"ltr","width":"241.09","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","484.39"],"fontName":"SJUTSY+Arial,Bold","x":72.02420000000001,"y":484.3900000000001,"line":10} +{"page":61,"change":"ContentChange","types":["H4"],"str":"Commonly Confused Prepositions","dir":"ltr","width":"295.13","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","498.19"],"fontName":"SJUTSY+Arial,Bold","x":72.02395999999999,"y":498.1897999999998,"line":6} +{"page":62,"change":"ContentChange","types":["H4"],"str":"Necessary and Unnecessary Prepositions","dir":"ltr","width":"357.98","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","278.57"],"fontName":"SJUTSY+Arial,Bold","x":72.02389999999998,"y":278.5699,"line":24} +{"page":63,"change":"ContentChange","types":["H4"],"str":"Ending Sentences with a Preposition","dir":"ltr","width":"316.06","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","401.59"],"fontName":"SJUTSY+Arial,Bold","x":72.0238,"y":401.58979999999997,"line":17} +{"page":64,"change":"ContentChange","types":["H4"],"str":"Idioms","dir":"ltr","width":"58.12","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","675.82"],"fontName":"SJUTSY+Arial,Bold","x":72.02416000000005,"y":675.8199000000001,"line":1} +{"page":66,"change":"ContentChange","types":["H2"],"str":"Conjunctions","dir":"ltr","width":"175.78","height":"24.00","transform":["24.00","0.00","0.00","24.00","218.09","416.71"],"fontName":"FGNJWH+Verdana,Bold","x":218.09,"y":416.71,"line":2} +{"page":66,"change":"ContentChange","types":["H4"],"str":"Coordinating conjunctions","dir":"ltr","width":"229.07","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","319.37"],"fontName":"SJUTSY+Arial,Bold","x":72.02379999999998,"y":319.3701,"line":5} +{"page":67,"change":"ContentChange","types":["H4"],"str":"Punctuating compound sentences","dir":"ltr","width":"293.89","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","413.59"],"fontName":"SJUTSY+Arial,Bold","x":72.02313999999986,"y":413.58970000000005,"line":19} +{"page":68,"change":"ContentChange","types":["H4"],"str":"Conjunctive Adverbs","dir":"ltr","width":"179.83","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","608.62"],"fontName":"SJUTSY+Arial,Bold","x":72.02436000000002,"y":608.6198,"line":5} +{"page":68,"change":"ContentChange","types":["H4"],"str":"Parenthetical Adverbs","dir":"ltr","width":"189.95","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","184.70"],"fontName":"SJUTSY+Arial,Bold","x":72.02357999999997,"y":184.70009999999985,"line":26} +{"page":69,"change":"ContentChange","types":["H4"],"str":"Subordinating Conjunctions","dir":"ltr","width":"242.10","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","470.59"],"fontName":"SJUTSY+Arial,Bold","x":72.02449999999999,"y":470.58920000000035,"line":14} +{"page":70,"change":"ContentChange","types":["H4"],"str":"Parenthetical Clauses","dir":"ltr","width":"187.02","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","636.22"],"fontName":"SJUTSY+Arial,Bold","x":72.0239,"y":636.2196,"line":4} +{"page":70,"change":"ContentChange","types":["H4"],"str":"Relative Clauses","dir":"ltr","width":"142.94","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","456.79"],"fontName":"SJUTSY+Arial,Bold","x":72.02392000000005,"y":456.7897000000001,"line":11} +{"page":71,"change":"ContentChange","types":["H4"],"str":"Punctuation Review","dir":"ltr","width":"170.80","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","386.71"],"fontName":"SJUTSY+Arial,Bold","x":72.02465000000004,"y":386.7099,"line":16} +{"page":72,"change":"ContentChange","types":["H2"],"str":"Commas","dir":"ltr","width":"101.35","height":"24.00","transform":["24.00","0.00","0.00","24.00","255.29","375.67"],"fontName":"SJUTSY+Arial,Bold","x":255.28980000000007,"y":375.67010000000005,"line":2} +{"page":72,"change":"ContentChange","types":["H4"],"str":"Series Comma","dir":"ltr","width":"125.05","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","271.01"],"fontName":"SJUTSY+Arial,Bold","x":72.02380000000001,"y":271.01019999999994,"line":7} +{"page":73,"change":"ContentChange","types":["H4"],"str":"Direct Address","dir":"ltr","width":"128.03","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","268.25"],"fontName":"SJUTSY+Arial,Bold","x":72.0238,"y":268.25,"line":24} +{"page":74,"change":"ContentChange","types":["H4"],"str":"Adjectives","dir":"ltr","width":"89.93","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","423.55"],"fontName":"SJUTSY+Arial,Bold","x":72.0238,"y":423.55,"line":3} +{"page":74,"change":"ContentChange","types":["H4"],"str":"Independent Clauses","dir":"ltr","width":"180.88","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","128.54"],"fontName":"SJUTSY+Arial,Bold","x":72.0238,"y":128.54,"line":17} +{"page":75,"change":"ContentChange","types":["H4"],"str":"Introductory Dependent Clauses","dir":"ltr","width":"277.90","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","629.38"],"fontName":"SJUTSY+Arial,Bold","x":72.02458000000004,"y":629.3799,"line":3} +{"page":75,"change":"ContentChange","types":["H4"],"str":"Terminal Dependent Clauses","dir":"ltr","width":"246.96","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","415.39"],"fontName":"SJUTSY+Arial,Bold","x":72.02358000000008,"y":415.3906999999998,"line":13} +{"page":75,"change":"ContentChange","types":["H4"],"str":"Parenthetical Expressions","dir":"ltr","width":"225.11","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","161.90"],"fontName":"SJUTSY+Arial,Bold","x":72.0238,"y":161.9,"line":27} +{"page":76,"change":"ContentChange","types":["H4"],"str":"Commas and Appositives ","dir":"ltr","width":"225.11","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","416.47"],"fontName":"SJUTSY+Arial,Bold","x":72.02391999999999,"y":416.4699,"line":18} +{"page":76,"change":"ContentChange","types":["H4"],"str":"Commas and the Adverb too","line":33,"x":72.0238,"y":90.984,"width":"244.96","height":"18.00","fontName":["SJUTSY+Arial,Bold","JSXJHV+Arial,BoldItalic"],"dir":["ltr"]} +{"page":77,"change":"ContentChange","types":["H4"],"str":"Commas and Introductory Phrases","dir":"ltr","width":"299.00","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","421.99"],"fontName":"SJUTSY+Arial,Bold","x":72.0238,"y":421.99,"line":13} +{"page":78,"change":"ContentChange","types":["H4"],"str":"Dates, Time Zones, Addresses, and Geographic ","dir":"ltr","width":"412.97","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","703.42"],"fontName":"SJUTSY+Arial,Bold","x":72.0238,"y":703.42,"line":1} +{"page":78,"change":"ContentChange","types":["H4"],"str":"Locations","dir":"ltr","width":"85.07","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","682.78"],"fontName":"SJUTSY+Arial,Bold","x":72.0238,"y":682.78,"line":2} +{"page":79,"change":"ContentChange","types":["H4"],"str":"Contrasting Statements","dir":"ltr","width":"202.90","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","453.67"],"fontName":"SJUTSY+Arial,Bold","x":72.02399999999999,"y":453.67,"line":13} +{"page":79,"change":"ContentChange","types":["H4"],"str":"Clarity","dir":"ltr","width":"56.07","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","282.89"],"fontName":"SJUTSY+Arial,Bold","x":72.02382000000003,"y":282.8895999999999,"line":22} +{"page":79,"change":"ContentChange","types":["H4"],"str":"Short Quotations","dir":"ltr","width":"147.01","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","112.22"],"fontName":"SJUTSY+Arial,Bold","x":72.02368000000008,"y":112.21989999999995,"line":31} +{"page":80,"change":"ContentChange","types":["H4"],"str":"Degrees, Abbreviations, and Numbers","dir":"ltr","width":"325.94","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","567.22"],"fontName":"SJUTSY+Arial,Bold","x":72.0238,"y":567.22,"line":7} +{"page":81,"change":"ContentChange","types":["H4"],"str":"Quick List of Comma Rules","dir":"ltr","width":"233.91","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","668.98"],"fontName":"SJUTSY+Arial,Bold","x":72.02416000000005,"y":668.9801,"line":1} +{"page":82,"change":"ContentChange","types":["H2"],"str":"Semicolons, Colons, and Other ","dir":"ltr","width":"362.66","height":"24.00","transform":["24.00","0.00","0.00","24.00","127.94","336.41"],"fontName":"SJUTSY+Arial,Bold","x":127.93982000000003,"y":336.41010000000006,"line":3} +{"page":82,"change":"ContentChange","types":["H2"],"str":"Punctuation","dir":"ltr","width":"138.62","height":"24.00","transform":["24.00","0.00","0.00","24.00","236.69","308.81"],"fontName":"SJUTSY+Arial,Bold","x":236.69,"y":308.81,"line":4} +{"page":82,"change":"ContentChange","types":["H4"],"str":"Semicolons","dir":"ltr","width":"101.05","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","240.41"],"fontName":"SJUTSY+Arial,Bold","x":72.0238,"y":240.41000000000003,"line":5} +{"page":84,"change":"ContentChange","types":["H4"],"str":"Colons","dir":"ltr","width":"61.07","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","567.22"],"fontName":"SJUTSY+Arial,Bold","x":72.02412000000005,"y":567.2197000000001,"line":7} +{"page":86,"change":"ContentChange","types":["H4"],"str":"Periods ","dir":"ltr","width":"71.00","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","606.82"],"fontName":"SJUTSY+Arial,Bold","x":72.02418000000007,"y":606.8197000000001,"line":6} +{"page":88,"change":"ContentChange","types":["H4"],"str":"Question Marks","dir":"ltr","width":"135.04","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","629.38"],"fontName":"SJUTSY+Arial,Bold","x":72.02412000000005,"y":629.3799,"line":3} +{"page":88,"change":"ContentChange","types":["H4"],"str":"Exclamation Points","dir":"ltr","width":"166.01","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","113.90"],"fontName":"SJUTSY+Arial,Bold","x":72.02326000000002,"y":113.89969999999985,"line":25} +{"page":89,"change":"ContentChange","types":["H4"],"str":"Hyphens","dir":"ltr","width":"76.00","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","615.58"],"fontName":"SJUTSY+Arial,Bold","x":72.02408000000005,"y":615.58,"line":3} +{"page":90,"change":"ContentChange","types":["H4"],"str":"Dashes","dir":"ltr","width":"63.99","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","622.42"],"fontName":"SJUTSY+Arial,Bold","x":72.02416000000005,"y":622.4197000000001,"line":4} +{"page":91,"change":"ContentChange","types":["H4"],"str":"Parentheses","dir":"ltr","width":"106.97","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","177.50"],"fontName":"SJUTSY+Arial,Bold","x":72.02426000000003,"y":177.49990000000003,"line":23} +{"page":93,"change":"ContentChange","types":["H4"],"str":"Quotation Marks","dir":"ltr","width":"141.98","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","332.57"],"fontName":"SJUTSY+Arial,Bold","x":72.02400000000002,"y":332.5688000000003,"line":18} +{"page":94,"change":"ContentChange","types":["H4"],"str":"Italics","dir":"ltr","width":"51.08","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","290.09"],"fontName":"SJUTSY+Arial,Bold","x":72.02380000000001,"y":290.08959999999996,"line":23} +{"page":95,"change":"ContentChange","types":["H4"],"str":"Brackets","dir":"ltr","width":"75.98","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","555.22"],"fontName":"SJUTSY+Arial,Bold","x":72.02468000000005,"y":555.2199000000002,"line":5} +{"page":95,"change":"ContentChange","types":["H4"],"str":"Apostrophes","dir":"ltr","width":"110.95","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","343.13"],"fontName":"SJUTSY+Arial,Bold","x":72.02370000000002,"y":343.13009999999997,"line":16} +{"page":96,"change":"ContentChange","types":["H2"],"str":"Capitalization","dir":"ltr","width":"155.95","height":"24.00","transform":["24.00","0.00","0.00","24.00","228.05","304.13"],"fontName":"SJUTSY+Arial,Bold","x":228.05050000000017,"y":304.129,"line":8} +{"page":101,"change":"ContentChange","types":["H2"],"str":"Numbers","dir":"ltr","width":"103.94","height":"24.00","transform":["24.00","0.00","0.00","24.00","253.97","274.61"],"fontName":"SJUTSY+Arial,Bold","x":253.9699,"y":274.6094,"line":16} +{"page":106,"change":"ContentChange","types":["H4"],"str":"Quick Rules for Numbers","dir":"ltr","width":"216.00","height":"18.00","transform":["18.00","0.00","0.00","18.00","72.02","703.42"],"fontName":"SJUTSY+Arial,Bold","x":72.02389999999997,"y":703.4200000000001,"line":1} +{"page":107,"change":"ContentChange","types":["H2"],"str":"Commonly Confused Words and ","dir":"ltr","width":"378.65","height":"24.00","transform":["24.00","0.00","0.00","24.00","120.02","262.97"],"fontName":"SJUTSY+Arial,Bold","x":120.01999999999997,"y":262.97240000000016,"line":2} +{"page":107,"change":"ContentChange","types":["H2"],"str":"Phrases","dir":"ltr","width":"93.31","height":"24.00","transform":["24.00","0.00","0.00","24.00","259.37","235.37"],"fontName":"SJUTSY+Arial,Bold","x":259.37,"y":235.37,"line":3} +{"page":113,"change":"ContentChange","types":["H3"],"str":"Grammar Matters ","dir":"ltr","width":"171.19","height":"20.04","transform":["20.04","0.00","0.00","20.04","223.25","310.73"],"fontName":"SJUTSY+Arial,Bold","x":223.2498,"y":310.7289999999999,"line":9} +{"page":113,"change":"ContentChange","types":["H4"],"str":"Bibliography","dir":"ltr","width":"110.05","height":"18.00","transform":["18.00","0.00","0.00","18.00","250.97","276.29"],"fontName":"SJUTSY+Arial,Bold","x":250.97,"y":276.29,"line":10} \ No newline at end of file diff --git a/examples/Life-Of-God-In-Soul-Of-Man/detectHeaders.json b/examples/Life-Of-God-In-Soul-Of-Man/detectHeaders.json new file mode 100644 index 0000000..d8a2606 --- /dev/null +++ b/examples/Life-Of-God-In-Soul-Of-Man/detectHeaders.json @@ -0,0 +1,43 @@ +{ + "pages": 137, + "items": 24829, + "groupedItems": 3105, + "changes": 23, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":3,"change":"ContentChange","types":["H1"],"str":"(l^,^^^^i^^ ^","line":0,"x":35.055479999999996,"y":384.02991,"width":"97.70","height":"45.97","fontName":[null],"dir":["ltr"]} +{"page":6,"change":"ContentChange","types":["H1"],"str":"T OooulO^I ^ 4le.^A\\-^","line":0,"x":55.16928,"y":403.28168999999997,"width":"113.07","height":"23.47","fontName":[null],"dir":["ltr"]} +{"page":6,"change":"ContentChange","types":["H2"],"str":"LIFE OF GOD","line":2,"x":39.22191,"y":324.40686,"width":"161.05","height":"32.33","fontName":[null],"dir":["ltr"]} +{"page":6,"change":"ContentChange","types":["H5"],"str":"SOUL OF MAN","line":3,"x":75.13941,"y":226.56759,"width":"104.45","height":"21.23","fontName":[null],"dir":["ltr"]} +{"page":18,"change":"ContentChange","types":["H6"],"str":"THE LIFE OF GOD","line":0,"x":63.07113,"y":257.16929999999996,"width":"123.13","height":"18.12","fontName":[null],"dir":["ltr"]} +{"page":48,"change":"ContentChange","types":["H3"],"str":"T","dir":"ltr","width":"18.39","height":"30.65","transform":["30.65","0.00","0.00","30.65","36.49","54.45"],"x":36.49218,"y":54.45093,"line":20} +{"page":56,"change":"ContentChange","types":["H4"],"str":"L","dir":"ltr","width":"16.95","height":"28.26","transform":["28.26","0.00","0.00","28.26","39.94","46.12"],"x":39.940259999999995,"y":46.118069999999996,"line":20} \ No newline at end of file diff --git a/examples/Made-with-cc/detectHeaders.json b/examples/Made-with-cc/detectHeaders.json new file mode 100644 index 0000000..5648d73 --- /dev/null +++ b/examples/Made-with-cc/detectHeaders.json @@ -0,0 +1,105 @@ +{ + "pages": 153, + "items": 14949, + "groupedItems": 10600, + "changes": 73, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":2,"change":"ContentChange","types":["H5"],"str":"MADE","dir":"ltr","width":"167.82","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":1} +{"page":2,"change":"ContentChange","types":["H5"],"str":"WITH","dir":"ltr","width":"161.58","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","595.29"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000002,"y":595.2871,"line":2} +{"page":2,"change":"ContentChange","types":["H5"],"str":"CRE ATI V E","dir":"ltr","width":"284.76","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","525.27"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000002,"y":525.2671,"line":3} +{"page":2,"change":"ContentChange","types":["H5"],"str":"COMMONS","dir":"ltr","width":"290.05","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","455.25"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000002,"y":455.24710000000005,"line":4} +{"page":6,"change":"ContentChange","types":["H5"],"str":"CONTENTS","dir":"ltr","width":"303.53","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":1} +{"page":10,"change":"ContentChange","types":["H5"],"str":"FOREWORD","dir":"ltr","width":"332.05","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":1} +{"page":14,"change":"ContentChange","types":["H5"],"str":"INTRODUCTION ","dir":"ltr","width":"448.69","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":1} +{"page":16,"change":"ContentChange","types":["H2"],"str":"Part 1","dir":"ltr","width":"498.48","height":"190.00","transform":["190.00","0.00","0.00","190.00","70.87","399.31"],"fontName":"MJHCAV+AbrilFatface-Regular","x":70.8661,"y":399.3071,"line":1} +{"page":16,"change":"ContentChange","types":["H5"],"str":"THE BIG PICTURE","dir":"ltr","width":"482.92","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","245.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":245.3071,"line":2} +{"page":18,"change":"ContentChange","types":["H3"],"str":"1","dir":"ltr","width":"72.25","height":"170.00","transform":["170.00","0.00","0.00","170.00","500.98","594.38"],"fontName":"MJHCAV+AbrilFatface-Regular","x":500.9846,"y":594.3804,"line":1} +{"page":18,"change":"ContentChange","types":["H5"],"str":"THE NEW","dir":"ltr","width":"260.41","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":2} +{"page":18,"change":"ContentChange","types":["H5"],"str":"WORLD OF","dir":"ltr","width":"300.97","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","595.29"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000002,"y":595.2871,"line":3} +{"page":18,"change":"ContentChange","types":["H5"],"str":"DIGITA L","dir":"ltr","width":"228.62","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","525.27"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000002,"y":525.2671,"line":4} +{"page":18,"change":"ContentChange","types":["H5"],"str":"COMMONS","dir":"ltr","width":"290.05","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","455.25"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000005,"y":455.24710000000005,"line":5} +{"page":21,"change":"ContentChange","types":["H4"],"str":"[]","dir":"ltr","width":"84.28","height":"70.23","transform":["70.23","0.00","0.00","70.23","-97.92","28.19"],"fontName":"CCFPQP+BrysoShedcaps-Regular","x":-97.924,"y":28.1881,"line":68} +{"page":34,"change":"ContentChange","types":["H3"],"str":"2","dir":"ltr","width":"93.84","height":"170.00","transform":["170.00","0.00","0.00","170.00","480.64","595.16"],"fontName":"IDEEWD+AbrilFatface-Regular","x":480.6431,"y":595.156,"line":1} +{"page":34,"change":"ContentChange","types":["H5"],"str":"HOW","dir":"ltr","width":"137.48","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":2} +{"page":34,"change":"ContentChange","types":["H5"],"str":"TO BE","dir":"ltr","width":"163.37","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","595.29"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000002,"y":595.2871,"line":3} +{"page":34,"change":"ContentChange","types":["H5"],"str":"MADE WITH ","dir":"ltr","width":"351.30","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","525.27"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000002,"y":525.2671,"line":4} +{"page":34,"change":"ContentChange","types":["H5"],"str":"CRE ATI V E","dir":"ltr","width":"284.76","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","455.25"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000002,"y":455.24710000000005,"line":5} +{"page":34,"change":"ContentChange","types":["H5"],"str":"COMMONS","dir":"ltr","width":"290.05","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","385.23"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000002,"y":385.22710000000006,"line":6} +{"page":54,"change":"ContentChange","types":["H3"],"str":"3","dir":"ltr","width":"97.41","height":"170.00","transform":["170.00","0.00","0.00","170.00","479.07","596.16"],"fontName":"IDEEWD+AbrilFatface-Regular","x":479.0707,"y":596.156,"line":1} +{"page":54,"change":"ContentChange","types":["H5"],"str":"THE","dir":"ltr","width":"118.58","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":2} +{"page":54,"change":"ContentChange","types":["H5"],"str":"CRE ATI V E","dir":"ltr","width":"284.76","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","595.29"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":595.2871,"line":3} +{"page":54,"change":"ContentChange","types":["H5"],"str":"COMMONS","dir":"ltr","width":"290.05","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","525.27"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000002,"y":525.2671,"line":4} +{"page":54,"change":"ContentChange","types":["H5"],"str":"LICENSES","dir":"ltr","width":"265.79","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","455.25"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000002,"y":455.24710000000005,"line":5} +{"page":58,"change":"ContentChange","types":["H2"],"str":"Part 2","dir":"ltr","width":"474.73","height":"190.00","transform":["190.00","0.00","0.00","190.00","70.87","399.31"],"fontName":"MJHCAV+AbrilFatface-Regular","x":70.8661,"y":399.3071,"line":1} +{"page":58,"change":"ContentChange","types":["H5"],"str":"THE","dir":"ltr","width":"118.58","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","245.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":245.3071,"line":2} +{"page":58,"change":"ContentChange","types":["H5"],"str":"CASE STUDIES","dir":"ltr","width":"400.79","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","175.29"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":175.2871,"line":3} +{"page":62,"change":"ContentChange","types":["H5"],"str":"ARDUINO","dir":"ltr","width":"263.69","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":43} +{"page":66,"change":"ContentChange","types":["H5"],"str":"Á RTICA","dir":"ltr","width":"214.88","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":43} +{"page":70,"change":"ContentChange","types":["H5"],"str":"BLENDER","dir":"ltr","width":"263.58","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":31} +{"page":70,"change":"ContentChange","types":["H5"],"str":"INSTITUTE","dir":"ltr","width":"301.34","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","595.29"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000002,"y":595.2871,"line":32} +{"page":74,"change":"ContentChange","types":["H5"],"str":"CARDS AGAINST ","dir":"ltr","width":"466.69","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":39} +{"page":74,"change":"ContentChange","types":["H5"],"str":"HUMANITY","dir":"ltr","width":"309.97","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","595.29"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":595.2871,"line":40} +{"page":78,"change":"ContentChange","types":["H5"],"str":"THE","dir":"ltr","width":"118.58","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":1} +{"page":78,"change":"ContentChange","types":["H5"],"str":"CONVERSATION","dir":"ltr","width":"442.12","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","595.29"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":595.2871,"line":2} +{"page":82,"change":"ContentChange","types":["H5"],"str":"CORY","dir":"ltr","width":"152.22","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":39} +{"page":82,"change":"ContentChange","types":["H5"],"str":"DOCTOROW","dir":"ltr","width":"339.82","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","595.29"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86609999999999,"y":595.2871,"line":40} +{"page":86,"change":"ContentChange","types":["H5"],"str":"FIGSHARE","dir":"ltr","width":"287.27","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":50} +{"page":90,"change":"ContentChange","types":["H5"],"str":"FIGURE.NZ","dir":"ltr","width":"295.13","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"MJHCAV+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":44} +{"page":94,"change":"ContentChange","types":["H5"],"str":"KNOWLEDGE","dir":"ltr","width":"368.17","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":34} +{"page":94,"change":"ContentChange","types":["H5"],"str":"U N L ATCH ED","dir":"ltr","width":"346.66","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","595.29"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000002,"y":595.2871,"line":35} +{"page":98,"change":"ContentChange","types":["H5"],"str":"LUMEN","dir":"ltr","width":"194.33","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":39} +{"page":98,"change":"ContentChange","types":["H5"],"str":"LEARNING","dir":"ltr","width":"288.38","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","595.29"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86609999999999,"y":595.2871,"line":40} +{"page":102,"change":"ContentChange","types":["H5"],"str":"JONATH A N","dir":"ltr","width":"304.01","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":32} +{"page":102,"change":"ContentChange","types":["H5"],"str":"MANN","dir":"ltr","width":"168.95","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","595.29"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000002,"y":595.2871,"line":33} +{"page":106,"change":"ContentChange","types":["H5"],"str":"NOUN","dir":"ltr","width":"156.37","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":35} +{"page":106,"change":"ContentChange","types":["H5"],"str":"PROJECT","dir":"ltr","width":"257.50","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","595.29"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000002,"y":595.2871,"line":36} +{"page":110,"change":"ContentChange","types":["H5"],"str":"OPEN DATA","dir":"ltr","width":"308.87","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":34} +{"page":110,"change":"ContentChange","types":["H5"],"str":"INSTITUTE","dir":"ltr","width":"301.34","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","595.29"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000002,"y":595.2871,"line":35} +{"page":114,"change":"ContentChange","types":["H5"],"str":"OPENDESK","dir":"ltr","width":"303.24","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":38} +{"page":120,"change":"ContentChange","types":["H5"],"str":"OPENSTA X","dir":"ltr","width":"297.21","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":41} +{"page":124,"change":"ContentChange","types":["H5"],"str":"AMANDA","dir":"ltr","width":"251.28","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":34} +{"page":124,"change":"ContentChange","types":["H5"],"str":"PALMER","dir":"ltr","width":"231.42","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","595.29"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86610000000002,"y":595.2871,"line":35} +{"page":128,"change":"ContentChange","types":["H5"],"str":"PLOS","dir":"ltr","width":"143.81","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":25} +{"page":128,"change":"ContentChange","types":["H5"],"str":"( PUBLIC LIBRARY","line":26,"x":70.86610000000002,"y":595.2871,"width":"483.02","height":"60.00","fontName":["IDEEWD+AbrilFatface-Regular"],"dir":["ltr"]} +{"page":128,"change":"ContentChange","types":["H5"],"str":"OF SCIENCE )","line":27,"x":70.86609999999996,"y":525.2671,"width":"344.83","height":"60.00","fontName":["IDEEWD+AbrilFatface-Regular"],"dir":["ltr"]} +{"page":132,"change":"ContentChange","types":["H5"],"str":"RIJKSMUSEUM","dir":"ltr","width":"408.22","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":43} +{"page":136,"change":"ContentChange","types":["H5"],"str":"SHAREABLE","dir":"ltr","width":"344.92","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":41} +{"page":140,"change":"ContentChange","types":["H5"],"str":"S I Y AV U L A","dir":"ltr","width":"268.34","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":43} +{"page":146,"change":"ContentChange","types":["H5"],"str":"S PA R K F U N","dir":"ltr","width":"295.87","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":43} +{"page":150,"change":"ContentChange","types":["H5"],"str":"T E ACH A I DS","dir":"ltr","width":"329.00","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":39} +{"page":154,"change":"ContentChange","types":["H5"],"str":"TRIBE","dir":"ltr","width":"172.47","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":33} +{"page":154,"change":"ContentChange","types":["H5"],"str":"OF NOISE","dir":"ltr","width":"252.10","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","595.29"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.86609999999999,"y":595.2871,"line":34} +{"page":158,"change":"ContentChange","types":["H5"],"str":"WIKIMEDIA ","dir":"ltr","width":"343.11","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":35} +{"page":158,"change":"ContentChange","types":["H5"],"str":"FOUNDATION","dir":"ltr","width":"366.83","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","595.29"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":595.2871,"line":36} +{"page":162,"change":"ContentChange","types":["H5"],"str":"BIBLIOGRAPHY","dir":"ltr","width":"427.48","height":"60.00","transform":["60.00","0.00","0.00","60.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":1} +{"page":166,"change":"ContentChange","types":["H6"],"str":"ACK NOW L EDGM ENTS","dir":"ltr","width":"492.80","height":"49.00","transform":["49.00","0.00","0.00","49.00","70.87","665.31"],"fontName":"IDEEWD+AbrilFatface-Regular","x":70.8661,"y":665.3071,"line":1} \ No newline at end of file diff --git a/examples/Safe-Communication/detectHeaders.json b/examples/Safe-Communication/detectHeaders.json new file mode 100644 index 0000000..e231b3e --- /dev/null +++ b/examples/Safe-Communication/detectHeaders.json @@ -0,0 +1,76 @@ +{ + "pages": 60, + "items": 3968, + "groupedItems": 1429, + "changes": 118, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":0,"change":"ContentChange","types":["H1"],"str":"Safe C ommun i cation","line":1,"x":99.264,"y":436.9,"width":"395.03","height":"36.00","fontName":["ABCDEE+Lucida Calligraphy"],"dir":["ltr"]} +{"page":0,"change":"ContentChange","types":["H2"],"str":"Design, implement and measure: A guide to ","line":2,"x":99.264,"y":387.31,"width":"549.00","height":"26.04","fontName":[null],"dir":["ltr"]} +{"page":0,"change":"ContentChange","types":["H2"],"str":"improving transfers of care and handover","line":3,"x":99.264,"y":352.99,"width":"507.23","height":"26.04","fontName":[null],"dir":["ltr"]} +{"page":0,"change":"ContentChange","types":["H4"],"str":"Authors :","line":4,"x":526.63,"y":111.26,"width":"66.46","height":"15.96","fontName":[null],"dir":["ltr"]} +{"page":0,"change":"ContentChange","types":["H4"],"str":"Nicola Davey & Ali Cole","line":5,"x":526.63,"y":80.04,"width":"175.03","height":"15.96","fontName":[null],"dir":["ltr"]} +{"page":1,"change":"ContentChange","types":["H2"],"str":"Contents :","line":1,"x":99.264,"y":512.26,"width":"130.55","height":"27.96","fontName":[null],"dir":["ltr"]} +{"page":2,"change":"ContentChange","types":["H4"],"str":"Creative Commons Attribution – non - commercial ","line":25,"x":99.264,"y":130.34,"width":"344.85","height":"15.96","fontName":[null,"Arial"],"dir":["ltr"]} +{"page":4,"change":"ContentChange","types":["H4"],"str":"Why use this guide?","dir":"ltr","width":"155.37","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","284.57"],"x":99.264,"y":284.57,"line":13} +{"page":6,"change":"ContentChange","types":["H4"],"str":"‘Passing the baton’","dir":"ltr","width":"146.56","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","523.66"],"fontName":"Arial,Bold","x":99.264,"y":523.66,"line":1} +{"page":7,"change":"ContentChange","types":["H2"],"str":"P lanned, structured transfer of care : what does ","line":1,"x":99.264,"y":512.26,"width":"636.03","height":"27.96","fontName":[null],"dir":["ltr"]} +{"page":7,"change":"ContentChange","types":["H2"],"str":"it look like?","dir":"ltr","width":"153.92","height":"27.96","transform":["27.96","0.00","0.00","27.96","99.26","479.98"],"x":99.264,"y":479.98,"line":2} +{"page":8,"change":"ContentChange","types":["H2"],"str":"How do you achieve it?","dir":"ltr","width":"311.11","height":"27.96","transform":["27.96","0.00","0.00","27.96","99.26","512.26"],"x":99.264,"y":512.26,"line":1} +{"page":9,"change":"ContentChange","types":["H3"],"str":"Start out","dir":"ltr","width":"98.74","height":"24.00","transform":["24.00","0.00","0.00","24.00","155.18","484.18"],"x":155.18,"y":484.18,"line":1} +{"page":11,"change":"ContentChange","types":["H4"],"str":"What does ‘good’ look like?","line":1,"x":99.264,"y":523.66,"width":"207.10","height":"15.96","fontName":[null,"Arial,Bold"],"dir":["ltr"]} +{"page":12,"change":"ContentChange","types":["H3"],"str":"Define and scope","dir":"ltr","width":"198.62","height":"24.00","transform":["24.00","0.00","0.00","24.00","156.26","488.50"],"x":156.26,"y":488.5,"line":1} +{"page":12,"change":"ContentChange","types":["H4"],"str":"What are we trying to accomplish?","dir":"ltr","width":"263.95","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","276.65"],"x":99.264,"y":276.65,"line":11} +{"page":13,"change":"ContentChange","types":["H4"],"str":"Link your improvement project to your organisation ’s strategic aims ","line":1,"x":99.264,"y":523.66,"width":"523.31","height":"15.96","fontName":[null,"Arial,Bold"],"dir":["ltr"]} +{"page":15,"change":"ContentChange","types":["H4"],"str":"What is the scale of your improvement project?","line":1,"x":99.264,"y":523.66,"width":"356.43","height":"15.96","fontName":[null],"dir":["ltr"]} +{"page":15,"change":"ContentChange","types":["H4"],"str":"E ngage staff, patients and users and s et up your project team ","line":6,"x":99.264,"y":432.22,"width":"469.06","height":"15.96","fontName":[null],"dir":["ltr"]} +{"page":16,"change":"ContentChange","types":["H4"],"str":"Who to include in your team?","dir":"ltr","width":"223.84","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","523.66"],"x":99.264,"y":523.66,"line":1} +{"page":17,"change":"ContentChange","types":["H4"],"str":"P utting it all together","line":1,"x":99.264,"y":495.1,"width":"159.71","height":"15.96","fontName":[null],"dir":["ltr"]} +{"page":18,"change":"ContentChange","types":["H3"],"str":"Measure and understand","dir":"ltr","width":"284.04","height":"24.00","transform":["24.00","0.00","0.00","24.00","158.42","478.18"],"x":158.42,"y":478.18,"line":1} +{"page":20,"change":"ContentChange","types":["H4"],"str":"Choose your measures and start collecting your baseline data","line":1,"x":99.264,"y":523.66,"width":"468.22","height":"15.96","fontName":[null],"dir":["ltr"]} +{"page":22,"change":"ContentChange","types":["H4"],"str":"Capture and display the data","dir":"ltr","width":"218.57","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","523.66"],"x":99.264,"y":523.66,"line":1} +{"page":23,"change":"ContentChange","types":["H3"],"str":"Design and plan","dir":"ltr","width":"185.38","height":"24.00","transform":["24.00","0.00","0.00","24.00","154.82","484.18"],"x":154.82,"y":484.18,"line":1} +{"page":24,"change":"ContentChange","types":["H4"],"str":"Where to s tart?","line":4,"x":99.264,"y":453.46,"width":"117.23","height":"15.96","fontName":[null],"dir":["ltr"]} +{"page":26,"change":"ContentChange","types":["H4"],"str":"Generate imp rovement ideas","line":1,"x":99.264,"y":523.66,"width":"219.53","height":"15.96","fontName":[null],"dir":["ltr"]} +{"page":27,"change":"ContentChange","types":["H4"],"str":"Design your change intervention ( s )","line":1,"x":99.264,"y":523.66,"width":"268.18","height":"15.96","fontName":[null],"dir":["ltr"]} +{"page":28,"change":"ContentChange","types":["H4"],"str":"Make it your own","dir":"ltr","width":"129.68","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","523.66"],"x":99.264,"y":523.66,"line":1} +{"page":29,"change":"ContentChange","types":["H4"],"str":"Use ‘d ot v oting ’ to define your ‘ minimum data set ’","line":1,"x":99.264,"y":523.66,"width":"374.53","height":"15.96","fontName":["Arial,Bold",null],"dir":["ltr"]} +{"page":30,"change":"ContentChange","types":["H4"],"str":"Using ‘structured communication t ool s","line":1,"x":99.264,"y":523.66,"width":"293.07","height":"15.96","fontName":[null,"Arial,Bold"],"dir":["ltr"]} +{"page":32,"change":"ContentChange","types":["H4"],"str":"Document y our s tandard p rocess","line":8,"x":99.264,"y":402.31,"width":"255.06","height":"15.96","fontName":[null],"dir":["ltr"]} +{"page":32,"change":"ContentChange","types":["H4"],"str":"Choose and review your measures ","line":13,"x":99.264,"y":310.85,"width":"268.19","height":"15.96","fontName":[null],"dir":["ltr"]} +{"page":33,"change":"ContentChange","types":["H3"],"str":"Pilot and implement","dir":"ltr","width":"228.10","height":"24.00","transform":["24.00","0.00","0.00","24.00","155.18","488.50"],"x":155.18,"y":488.5,"line":1} +{"page":35,"change":"ContentChange","types":["H4"],"str":"Plan for implementation","dir":"ltr","width":"182.10","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","523.66"],"x":99.264,"y":523.66,"line":1} +{"page":37,"change":"ContentChange","types":["H3"],"str":"Sustain and share","dir":"ltr","width":"206.64","height":"24.00","transform":["24.00","0.00","0.00","24.00","159.38","480.82"],"x":159.38,"y":480.82,"line":1} +{"page":38,"change":"ContentChange","types":["H4"],"str":"Share and celebrate success","line":1,"x":99.264,"y":523.66,"width":"215.03","height":"15.96","fontName":[null],"dir":["ltr"]} +{"page":38,"change":"ContentChange","types":["H4"],"str":"Keep measuring ....","line":11,"x":99.264,"y":332.11,"width":"142.18","height":"15.96","fontName":[null],"dir":["ltr"]} +{"page":48,"change":"ContentChange","types":["H5"],"str":"Acute example","dir":"ltr","width":"86.67","height":"14.40","transform":["14.44","0.00","0.00","14.40","367.83","485.36"],"fontName":"ABCDEE+Calibri","x":367.828903554016,"y":485.358469,"line":4} +{"page":59,"change":"ContentChange","types":["H4"],"str":"Product timeline ","dir":"ltr","width":"119.09","height":"15.96","transform":["15.96","0.00","0.00","15.96","53.88","520.78"],"x":53.88,"y":520.78,"line":1} \ No newline at end of file diff --git a/examples/St-Mary-Witney-Social-Audit/detectHeaders.json b/examples/St-Mary-Witney-Social-Audit/detectHeaders.json new file mode 100644 index 0000000..79aa3c7 --- /dev/null +++ b/examples/St-Mary-Witney-Social-Audit/detectHeaders.json @@ -0,0 +1,48 @@ +{ + "pages": 26, + "items": 1843, + "groupedItems": 1506, + "changes": 12, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":0,"change":"ContentChange","types":["H3"],"str":"St Mary the Virgin, Witney","dir":"ltr","width":"299.73","height":"24.00","transform":["24.00","0.00","0.00","24.00","501.17","180.62"],"fontName":"Gill Sans MT Bold","x":501.167,"y":180.623,"line":0} +{"page":0,"change":"ContentChange","types":["H4"],"str":"Social Audit January 2012","dir":"ltr","width":"298.23","height":"18.00","transform":["18.00","0.00","0.00","18.00","501.17","147.59"],"fontName":"Gill Sans MT","x":501.167,"y":147.591,"line":1} +{"page":0,"change":"ContentChange","types":["H5"],"str":"Catriona Robertson","dir":"ltr","width":"148.81","height":"16.00","transform":["16.00","0.00","0.00","16.00","503.78","78.51"],"fontName":"Gill Sans MT Bold","x":503.776,"y":78.514,"line":2} +{"page":5,"change":"ContentChange","types":["H2"],"str":"Introduction","dir":"ltr","width":"184.61","height":"36.00","transform":["36.00","0.00","0.00","36.00","34.02","525.26"],"fontName":"Gill Sans MT","x":34.015,"y":525.26,"line":0} +{"page":7,"change":"ContentChange","types":["H2"],"str":"History","dir":"ltr","width":"112.19","height":"36.00","transform":["36.00","0.00","0.00","36.00","34.02","525.26"],"fontName":"Gill Sans MT","x":34.015,"y":525.26,"line":0} +{"page":8,"change":"ContentChange","types":["H2"],"str":"History","dir":"ltr","width":"112.19","height":"36.00","transform":["36.00","0.00","0.00","36.00","462.74","525.26"],"fontName":"Gill Sans MT","x":462.744,"y":525.26,"line":0} +{"page":10,"change":"ContentChange","types":["H2"],"str":"Setting and context","dir":"ltr","width":"287.58","height":"36.00","transform":["36.00","0.00","0.00","36.00","442.95","525.26"],"fontName":"Gill Sans MT","x":442.955,"y":525.26,"line":0} +{"page":12,"change":"ContentChange","types":["H2"],"str":"Witney’s people","dir":"ltr","width":"238.11","height":"36.00","transform":["36.00","0.00","0.00","36.00","450.94","525.26"],"fontName":"Gill Sans MT","x":450.944,"y":525.26,"line":0} +{"page":18,"change":"ContentChange","types":["H2"],"str":"Education","dir":"ltr","width":"145.13","height":"36.00","transform":["36.00","0.00","0.00","36.00","450.94","525.26"],"fontName":"Gill Sans MT","x":450.944,"y":525.26,"line":0} +{"page":21,"change":"ContentChange","types":["H2"],"str":"Lifestyle and deprivation","dir":"ltr","width":"359.54","height":"36.00","transform":["36.00","0.00","0.00","36.00","34.02","525.26"],"fontName":"Gill Sans MT","x":34.015,"y":525.26,"line":0} +{"page":23,"change":"ContentChange","types":["H2"],"str":"Conclusions","dir":"ltr","width":"180.77","height":"36.00","transform":["36.00","0.00","0.00","36.00","34.02","525.26"],"fontName":"Gill Sans MT","x":34.015,"y":525.26,"line":0} +{"page":25,"change":"ContentChange","types":["H2"],"str":"What St Mary’s offers","dir":"ltr","width":"321.78","height":"36.00","transform":["36.00","0.00","0.00","36.00","34.02","525.26"],"fontName":"Gill Sans MT","x":34.015,"y":525.26,"line":0} \ No newline at end of file diff --git a/examples/The-Art-of-Public-Speaking/detectHeaders.json b/examples/The-Art-of-Public-Speaking/detectHeaders.json new file mode 100644 index 0000000..5b1256f --- /dev/null +++ b/examples/The-Art-of-Public-Speaking/detectHeaders.json @@ -0,0 +1,41 @@ +{ + "pages": 466, + "items": 772193, + "groupedItems": 15227, + "changes": 85, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":2,"change":"ContentChange","types":["H1"],"str":"T h e A r t o f P u b l i c S p e a k i n g","line":0,"x":138.0375,"y":673.92,"width":"307.24","height":"28.80","fontName":["AAAAAB+LiberationSerif-Bold"],"dir":["ltr"]} +{"page":3,"change":"ContentChange","types":["H2"],"str":"J . B E R G E S E N W E I N","line":0,"x":210.51,"y":663.84,"width":"180.92","height":"20.16","fontName":["AAAAAB+LiberationSerif-Bold"],"dir":["ltr"]} +{"page":4,"change":"ContentChange","types":["H2"],"str":"D A L E C A R N A G E Y","line":0,"x":217.24876799999998,"y":663.84,"width":"172.47","height":"20.16","fontName":["AAAAAB+LiberationSerif-Bold"],"dir":["ltr"]} +{"page":9,"change":"ContentChange","types":["H2"],"str":"T H E A R T O F P U B L I C S P E A K I N G","line":0,"x":149.57999999999998,"y":663.84,"width":"294.60","height":"20.16","fontName":["AAAAAB+LiberationSerif-Bold"],"dir":["ltr"]} +{"page":300,"change":"ContentChange","types":["H2"],"str":"A P P E N D I C E S","line":0,"x":241.605,"y":663.84,"width":"128.80","height":"20.16","fontName":["AAAAAB+LiberationSerif-Bold"],"dir":["ltr"]} \ No newline at end of file diff --git a/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/detectHeaders.json b/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/detectHeaders.json new file mode 100644 index 0000000..f5d704c --- /dev/null +++ b/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/detectHeaders.json @@ -0,0 +1,52 @@ +{ + "pages": 16, + "items": 1242, + "groupedItems": 416, + "changes": 35, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":0,"change":"ContentChange","types":["H3"],"str":"Andrew W. Mellon Foundation ","dir":"ltr","width":"225.69","height":"15.96","transform":["15.96","0.00","0.00","15.96","78.02","245.69"],"fontName":"ABCDEE+Georgia,Italic","x":78.024,"y":245.69,"line":0} +{"page":0,"change":"ContentChange","types":["H3"],"str":"Grant 1711 - 05155","line":1,"x":78.024,"y":224.69,"width":"123.58","height":"15.96","fontName":["ABCDEE+Georgia,Italic"],"dir":["ltr"]} +{"page":0,"change":"ContentChange","types":["H3"],"str":"December 19 , 2019","line":2,"x":78.024,"y":203.57,"width":"127.25","height":"15.96","fontName":["ABCDEE+Georgia,Italic"],"dir":["ltr"]} +{"page":0,"change":"ContentChange","types":["H3"],"str":"John Kiplinger","dir":"ltr","width":"107.01","height":"15.96","transform":["15.96","0.00","0.00","15.96","80.66","138.14"],"fontName":"ABCDEE+Georgia,Italic","x":80.664,"y":138.14,"line":3} +{"page":0,"change":"ContentChange","types":["H3"],"str":"Valerie Yaw ","dir":"ltr","width":"91.40","height":"15.96","transform":["15.96","0.00","0.00","15.96","80.66","117.14"],"fontName":"ABCDEE+Georgia,Italic","x":80.664,"y":117.14,"line":4} +{"page":0,"change":"ContentChange","types":["H1"],"str":"The Impact of Open Access","dir":"ltr","width":"387.11","height":"36.00","transform":["36.00","0.00","0.00","36.00","75.02","461.11"],"fontName":"ABCDEE+Arial Narrow,Bold","x":75.024,"y":461.11,"line":5} +{"page":0,"change":"ContentChange","types":["H1"],"str":"Latin American Scholarship : ","line":6,"x":75.024,"y":413.59,"width":"416.70","height":"36.00","fontName":["ABCDEE+Arial Narrow,Bold"],"dir":["ltr"]} +{"page":0,"change":"ContentChange","types":["H2"],"str":"Digitizing the Backlist of El Colegio de ","line":7,"x":75.024,"y":373.63,"width":"424.66","height":"27.96","fontName":["ABCDEE+Arial Narrow,Bold"],"dir":["ltr"]} +{"page":0,"change":"ContentChange","types":["H2"],"str":"México’s Press","dir":"ltr","width":"165.77","height":"27.96","transform":["27.96","0.00","0.00","27.96","75.02","341.45"],"fontName":"ABCDEE+Arial Narrow,Bold","x":75.024,"y":341.45,"line":8} +{"page":0,"change":"ContentChange","types":["H2"],"str":"WHITE PAPER","dir":"ltr","width":"113.99","height":"20.04","transform":["20.04","0.00","0.00","20.04","74.90","534.79"],"fontName":"ABCDEE+Arial Narrow,Bold","x":74.904,"y":534.79,"line":9} +{"page":4,"change":"ContentChange","types":["H2"],"str":"Summary ","dir":"ltr","width":"95.16","height":"24.00","transform":["24.00","0.00","0.00","24.00","90.02","707.74"],"fontName":"ABCDEE+Arial Narrow,Bold","x":90.024,"y":707.74,"line":1} +{"page":4,"change":"ContentChange","types":["H2"],"str":"Introduction: History , Context , and ","line":26,"x":90.024,"y":254.81,"width":"324.60","height":"24.00","fontName":["ABCDEE+Arial Narrow,Bold"],"dir":["ltr"]} +{"page":4,"change":"ContentChange","types":["H2"],"str":"Significance of the Collection ","dir":"ltr","width":"281.06","height":"24.00","transform":["24.00","0.00","0.00","24.00","90.02","227.21"],"fontName":"ABCDEE+Arial Narrow,Bold","x":90.024,"y":227.21,"line":27} +{"page":6,"change":"ContentChange","types":["H2"],"str":"Our Approach: Selection and Digitization ","dir":"ltr","width":"389.16","height":"24.00","transform":["24.00","0.00","0.00","24.00","90.02","707.74"],"fontName":"ABCDEE+Arial Narrow,Bold","x":90.024,"y":707.74,"line":1} +{"page":11,"change":"ContentChange","types":["H2"],"str":"Usage : W hat We’ve Learned So Far ","line":1,"x":90.024,"y":676.06,"width":"335.81","height":"24.00","fontName":["ABCDEE+Arial Narrow,Bold","ABCDEE+Arial Narrow,Bold"],"dir":["ltr"]} +{"page":14,"change":"ContentChange","types":["H2"],"str":"Conclusion ","dir":"ltr","width":"112.54","height":"24.00","transform":["24.00","0.00","0.00","24.00","90.02","183.26"],"fontName":"ABCDEE+Arial Narrow,Bold","x":90.024,"y":183.26,"line":27} \ No newline at end of file diff --git a/examples/The-Man-Without-A-Body/detectHeaders.json b/examples/The-Man-Without-A-Body/detectHeaders.json new file mode 100644 index 0000000..d005e8c --- /dev/null +++ b/examples/The-Man-Without-A-Body/detectHeaders.json @@ -0,0 +1,36 @@ +{ + "pages": 4, + "items": 522, + "groupedItems": 378, + "changes": 0, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} \ No newline at end of file diff --git a/examples/The-War-of-the-Worlds/detectHeaders.json b/examples/The-War-of-the-Worlds/detectHeaders.json new file mode 100644 index 0000000..6394ad6 --- /dev/null +++ b/examples/The-War-of-the-Worlds/detectHeaders.json @@ -0,0 +1,43 @@ +{ + "pages": 293, + "items": 9255, + "groupedItems": 6520, + "changes": 7, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":0,"change":"ContentChange","types":["H1"],"str":"The War of the Worlds ","dir":"ltr","width":"240.30","height":"24.00","transform":["24.00","0.00","0.00","24.00","80.64","445.62"],"x":80.64,"y":445.62,"line":0} +{"page":2,"change":"ContentChange","types":["H2"],"str":"BOOK ONE ","dir":"ltr","width":"102.07","height":"18.00","transform":["18.00","0.00","0.00","18.00","149.22","437.22"],"x":149.22,"y":437.22,"line":2} +{"page":2,"change":"ContentChange","types":["H2"],"str":"THE COMING OF THE ","dir":"ltr","width":"197.00","height":"18.00","transform":["18.00","0.00","0.00","18.00","101.76","395.88"],"x":101.7594,"y":395.87940000000003,"line":3} +{"page":2,"change":"ContentChange","types":["H2"],"str":"MARTIANS ","dir":"ltr","width":"102.61","height":"18.00","transform":["18.00","0.00","0.00","18.00","148.92","375.12"],"x":148.9194,"y":375.12,"line":4} +{"page":180,"change":"ContentChange","types":["H2"],"str":"BOOK TWO ","dir":"ltr","width":"107.03","height":"18.00","transform":["18.00","0.00","0.00","18.00","146.76","437.22"],"x":146.76,"y":437.22,"line":2} +{"page":180,"change":"ContentChange","types":["H2"],"str":"THE EARTH UNDER THE ","dir":"ltr","width":"222.03","height":"18.00","transform":["18.00","0.00","0.00","18.00","89.22","395.88"],"x":89.22119999999998,"y":395.87940000000003,"line":3} +{"page":180,"change":"ContentChange","types":["H2"],"str":"MARTIANS ","dir":"ltr","width":"102.61","height":"18.00","transform":["18.00","0.00","0.00","18.00","148.92","375.12"],"x":148.9218,"y":375.12,"line":4} \ No newline at end of file diff --git a/examples/Tragedy-Of-The-Commons/detectHeaders.json b/examples/Tragedy-Of-The-Commons/detectHeaders.json new file mode 100644 index 0000000..bfd3d9d --- /dev/null +++ b/examples/Tragedy-Of-The-Commons/detectHeaders.json @@ -0,0 +1,40 @@ +{ + "pages": 7, + "items": 6779, + "groupedItems": 1096, + "changes": 27, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":0,"change":"ContentChange","types":["H2"],"str":"What Shanl We Mam?","line":0,"x":365.64,"y":738.30001,"width":"99.72","height":"14.40","fontName":["Courier"],"dir":["ltr"]} +{"page":0,"change":"ContentChange","types":["H1"],"str":"The Tragedy of the Commons","line":1,"x":66.35999999999996,"y":668.0399900000001,"width":"212.04","height":"22.50","fontName":["Courier"],"dir":["ltr"]} +{"page":0,"change":"ContentChange","types":["H2"],"str":"The population problem has no technical solution;","line":2,"x":48.95999999999998,"y":633.7200000000001,"width":"233.28","height":"15.40","fontName":["Courier"],"dir":["ltr"]} +{"page":0,"change":"ContentChange","types":["H2"],"str":"it requires a fundamental extension in morality.","line":3,"x":61.319999999999965,"y":617.2800000000001,"width":"219.12","height":"15.50","fontName":["Courier"],"dir":["ltr"]} \ No newline at end of file diff --git a/examples/Watered-Soul-Blog-Book/detectHeaders.json b/examples/Watered-Soul-Blog-Book/detectHeaders.json new file mode 100644 index 0000000..fcd3356 --- /dev/null +++ b/examples/Watered-Soul-Blog-Book/detectHeaders.json @@ -0,0 +1,58 @@ +{ + "pages": 644, + "items": 27118, + "groupedItems": 21363, + "changes": 26, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":2,"change":"ContentChange","types":["H1"],"str":"Contents","dir":"ltr","width":"108.89","height":"24.79","transform":["24.79","0.00","0.00","24.79","63.00","637.69"],"fontName":"AENRCE+CMBX12","x":63,"y":637.692,"line":0} +{"page":7,"change":"ContentChange","types":["H1"],"str":"A Million Ways to Die: The Only Way to Live (2010-11-27 21:23) . . . . . . . . . . . . . . 381","line":0,"x":77.455,"y":723.441,"width":"433.00","height":"10.91","fontName":["EFUEQI+CMR10"],"dir":["ltr"]} +{"page":12,"change":"ContentChange","types":["H3"],"str":"Chapter 1","dir":"ltr","width":"102.37","height":"20.66","transform":["20.66","0.00","0.00","20.66","63.00","642.26"],"fontName":"AENRCE+CMBX12","x":63,"y":642.263,"line":0} +{"page":12,"change":"ContentChange","types":["H2"],"str":"2010","dir":"ltr","width":"55.72","height":"24.79","transform":["24.79","0.00","0.00","24.79","63.00","585.99"],"fontName":"AENRCE+CMBX12","x":63,"y":585.991,"line":1} +{"page":388,"change":"ContentChange","types":["H4"],"str":"1.10 December","dir":"ltr","width":"115.42","height":"14.35","transform":["14.35","0.00","0.00","14.35","63.00","723.44"],"fontName":"AENRCE+CMBX12","x":63,"y":723.441,"line":0} +{"page":420,"change":"ContentChange","types":["H3"],"str":"Chapter 2","dir":"ltr","width":"102.37","height":"20.66","transform":["20.66","0.00","0.00","20.66","63.00","642.97"],"fontName":"AENRCE+CMBX12","x":63,"y":642.965,"line":0} +{"page":420,"change":"ContentChange","types":["H2"],"str":"2011","dir":"ltr","width":"55.72","height":"24.79","transform":["24.79","0.00","0.00","24.79","63.00","587.40"],"fontName":"AENRCE+CMBX12","x":63,"y":587.3960000000001,"line":1} +{"page":420,"change":"ContentChange","types":["H4"],"str":"2.1 January","dir":"ltr","width":"93.33","height":"14.35","transform":["14.35","0.00","0.00","14.35","63.00","523.86"],"fontName":"AENRCE+CMBX12","x":63,"y":523.8570000000001,"line":2} +{"page":439,"change":"ContentChange","types":["H4"],"str":"2.2 February","dir":"ltr","width":"100.36","height":"14.35","transform":["14.35","0.00","0.00","14.35","36.00","723.44"],"fontName":"AENRCE+CMBX12","x":36,"y":723.441,"line":0} +{"page":455,"change":"ContentChange","types":["H4"],"str":"2.3 March","dir":"ltr","width":"82.16","height":"14.35","transform":["14.35","0.00","0.00","14.35","36.00","723.44"],"fontName":"AENRCE+CMBX12","x":36,"y":723.441,"line":0} +{"page":472,"change":"ContentChange","types":["H4"],"str":"2.4 April","dir":"ltr","width":"73.43","height":"14.35","transform":["14.35","0.00","0.00","14.35","63.00","531.69"],"fontName":"AENRCE+CMBX12","x":63,"y":531.6900000000002,"line":10} +{"page":519,"change":"ContentChange","types":["H4"],"str":"2.5 May","dir":"ltr","width":"67.95","height":"14.35","transform":["14.35","0.00","0.00","14.35","36.00","723.44"],"fontName":"AENRCE+CMBX12","x":36,"y":723.441,"line":0} +{"page":538,"change":"ContentChange","types":["H4"],"str":"2.6 June","dir":"ltr","width":"70.37","height":"14.35","transform":["14.35","0.00","0.00","14.35","63.00","560.83"],"fontName":"AENRCE+CMBX12","x":63,"y":560.828,"line":7} +{"page":552,"change":"ContentChange","types":["H4"],"str":"2.7 July","dir":"ltr","width":"67.04","height":"14.35","transform":["14.35","0.00","0.00","14.35","63.00","127.81"],"fontName":"AENRCE+CMBX12","x":63,"y":127.80900000000014,"line":32} +{"page":563,"change":"ContentChange","types":["H4"],"str":"2.8 August","dir":"ltr","width":"87.55","height":"14.35","transform":["14.35","0.00","0.00","14.35","36.00","382.85"],"fontName":"AENRCE+CMBX12","x":36,"y":382.84500000000025,"line":18} +{"page":577,"change":"ContentChange","types":["H4"],"str":"2.9 September","dir":"ltr","width":"112.03","height":"14.35","transform":["14.35","0.00","0.00","14.35","36.00","447.09"],"fontName":"AENRCE+CMBX12","x":36,"y":447.08500000000026,"line":15} +{"page":584,"change":"ContentChange","types":["H4"],"str":"2.10 October","dir":"ltr","width":"101.78","height":"14.35","transform":["14.35","0.00","0.00","14.35","63.00","723.44"],"fontName":"AENRCE+CMBX12","x":63,"y":723.441,"line":0} +{"page":600,"change":"ContentChange","types":["H4"],"str":"2.11 November","dir":"ltr","width":"116.81","height":"14.35","transform":["14.35","0.00","0.00","14.35","63.00","659.39"],"fontName":"AENRCE+CMBX12","x":63,"y":659.388,"line":2} +{"page":618,"change":"ContentChange","types":["H4"],"str":"2.12 December","dir":"ltr","width":"115.42","height":"14.35","transform":["14.35","0.00","0.00","14.35","63.00","428.39"],"fontName":"AENRCE+CMBX12","x":63,"y":428.3919999999999,"line":18} +{"page":644,"change":"ContentChange","types":["H3"],"str":"Chapter 3","dir":"ltr","width":"102.37","height":"20.66","transform":["20.66","0.00","0.00","20.66","63.00","643.43"],"fontName":"AENRCE+CMBX12","x":63,"y":643.431,"line":0} +{"page":644,"change":"ContentChange","types":["H2"],"str":"2012","dir":"ltr","width":"55.72","height":"24.79","transform":["24.79","0.00","0.00","24.79","63.00","588.33"],"fontName":"AENRCE+CMBX12","x":63,"y":588.327,"line":1} +{"page":644,"change":"ContentChange","types":["H4"],"str":"3.1 January","dir":"ltr","width":"93.33","height":"14.35","transform":["14.35","0.00","0.00","14.35","63.00","525.25"],"fontName":"AENRCE+CMBX12","x":63,"y":525.253,"line":2} \ No newline at end of file diff --git a/examples/WoodUp/detectHeaders.json b/examples/WoodUp/detectHeaders.json new file mode 100644 index 0000000..72e1c34 --- /dev/null +++ b/examples/WoodUp/detectHeaders.json @@ -0,0 +1,88 @@ +{ + "pages": 255, + "items": 20093, + "groupedItems": 7254, + "changes": 123, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":0,"change":"ContentChange","types":["H1"],"str":"WOOD-UP","dir":"ltr","width":"312.99","height":"64.00","transform":["64.00","0.00","0.00","64.00","55.56","408.09"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":55.5591,"y":408.0945,"line":0} +{"page":0,"change":"ContentChange","types":["H2"],"str":"Aufwertung der Produktionskette ","dir":"ltr","width":"284.97","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","375.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":375.9803,"line":1} +{"page":0,"change":"ContentChange","types":["H2"],"str":"von Holzbiokohle für Energie, ","dir":"ltr","width":"252.66","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","353.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":353.9803,"line":2} +{"page":0,"change":"ContentChange","types":["H2"],"str":"Bodenfruchtbarkeit und Klimaschutz","dir":"ltr","width":"305.41","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","331.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":331.9803,"line":3} +{"page":0,"change":"ContentChange","types":["H4"],"str":"Giustino Tonon (Hrsg.)","dir":"ltr","width":"132.32","height":"13.00","transform":["13.00","0.00","0.00","13.00","56.27","296.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":296.9803,"line":4} +{"page":3,"change":"ContentChange","types":["H1"],"str":"WOOD-UP","dir":"ltr","width":"312.99","height":"64.00","transform":["64.00","0.00","0.00","64.00","55.56","408.09"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":55.5591,"y":408.0945,"line":0} +{"page":3,"change":"ContentChange","types":["H2"],"str":"Aufwertung der Produktionskette ","dir":"ltr","width":"284.97","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","375.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":375.9803,"line":1} +{"page":3,"change":"ContentChange","types":["H2"],"str":"von Holzbiokohle für Energie, ","dir":"ltr","width":"252.66","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","353.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":353.9803,"line":2} +{"page":3,"change":"ContentChange","types":["H2"],"str":"Bodenfruchtbarkeit und Klimaschutz","dir":"ltr","width":"305.41","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","331.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":331.9803,"line":3} +{"page":3,"change":"ContentChange","types":["H4"],"str":"Giustino Tonon (Hrsg.)","dir":"ltr","width":"132.32","height":"13.00","transform":["13.00","0.00","0.00","13.00","56.27","296.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":296.9803,"line":4} +{"page":12,"change":"ContentChange","types":["H5"],"str":"1. Einleitung","line":6,"x":68.04,"y":480.36,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":14,"change":"ContentChange","types":["H5"],"str":"2. Materialien und Methoden","line":15,"x":68.03999999999999,"y":352.38,"width":"148.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":21,"change":"ContentChange","types":["H5"],"str":"3. Ergebnisse und Diskussion","line":5,"x":70.92,"y":492.36,"width":"154.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":41,"change":"ContentChange","types":["H5"],"str":"4. Technisch- wirtschaftliche Analyse möglicher Eingriffe ","line":2,"x":70.92,"y":564.36,"width":"295.98","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":41,"change":"ContentChange","types":["H5"],"str":"zur Anlagenoptimierung in Hinblick auf Polygeneration","dir":"ltr","width":"288.06","height":"12.00","transform":["12.00","0.00","0.00","12.00","87.90","550.56"],"fontName":"CRDKGT+ArialMT","x":87.89999999999999,"y":550.5600000000001,"line":3} +{"page":51,"change":"ContentChange","types":["H5"],"str":"5. Schlussfolgerungen","line":2,"x":70.92,"y":564.36,"width":"115.35","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":56,"change":"ContentChange","types":["H5"],"str":"1. Einleitung","line":2,"x":68.04,"y":564.24,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":59,"change":"ContentChange","types":["H5"],"str":"2. Materialien und Methoden ","line":13,"x":70.92,"y":394.26,"width":"155.40","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":62,"change":"ContentChange","types":["H5"],"str":"3. Ergebnisse und Diskussion ","line":11,"x":68.04,"y":408.24,"width":"161.40","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":76,"change":"ContentChange","types":["H5"],"str":"4. Schlussfolgerungen","line":26,"x":68.04,"y":198.24,"width":"115.35","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":82,"change":"ContentChange","types":["H5"],"str":"1. Einleitung","line":2,"x":68.04,"y":569.9999,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":84,"change":"ContentChange","types":["H5"],"str":"2. Materialien und Methoden","line":24,"x":68.04,"y":232.02,"width":"148.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":88,"change":"ContentChange","types":["H5"],"str":"3. Ergebnisse und Diskussion","line":4,"x":68.04,"y":512.04,"width":"154.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":97,"change":"ContentChange","types":["H5"],"str":"4. Schlussfolgerungen","line":3,"x":70.92,"y":569.9999,"width":"115.35","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":102,"change":"ContentChange","types":["H5"],"str":"1. Einleitung","line":16,"x":68.04,"y":342.42,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":106,"change":"ContentChange","types":["H5"],"str":"2. Materialien und Methoden","line":2,"x":68.04,"y":561.42,"width":"148.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":119,"change":"ContentChange","types":["H5"],"str":"3. Ergebnisse","line":19,"x":70.92,"y":279.42,"width":"69.99","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":139,"change":"ContentChange","types":["H5"],"str":"4. Diskussion","line":11,"x":70.92,"y":368.16,"width":"67.93","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":144,"change":"ContentChange","types":["H5"],"str":"5. Schlussfolgerungen","line":14,"x":68.04,"y":363.42,"width":"115.35","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":150,"change":"ContentChange","types":["H5"],"str":"1. Anwendung von Biochar als Bodenverbesserungsmittel: ","line":20,"x":68.04,"y":291.24,"width":"307.49","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":150,"change":"ContentChange","types":["H5"],"str":"Wirkungen auf die Gesamtfruchtbarkeit der Böden und ","dir":"ltr","width":"293.46","height":"12.00","transform":["12.00","0.00","0.00","12.00","85.02","277.44"],"fontName":"CRDKGT+ArialMT","x":85.01999999999998,"y":277.44,"line":21} +{"page":150,"change":"ContentChange","types":["H5"],"str":"die Wachstumsperformance der Pflanzen","dir":"ltr","width":"219.96","height":"12.00","transform":["12.00","0.00","0.00","12.00","85.02","263.64"],"fontName":"CRDKGT+ArialMT","x":85.01999999999998,"y":263.64,"line":22} +{"page":154,"change":"ContentChange","types":["H5"],"str":"2. W irkungen der Anwendung von Biochar auf den Stick -","line":2,"x":68.04,"y":564.24,"width":"307.54","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":154,"change":"ContentChange","types":["H5"],"str":"stoffzyklus von getopften Weinpflanzen","line":3,"x":85.02000000000004,"y":550.44,"width":"208.09","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":165,"change":"ContentChange","types":["H5"],"str":"3. Wirkungen der Nutzung von Biochar auf die hydrischen ","line":2,"x":70.92,"y":564.24,"width":"306.75","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":165,"change":"ContentChange","types":["H5"],"str":"Eigenschaften der Substrate und die potenziellen ","dir":"ltr","width":"264.90","height":"12.00","transform":["12.00","0.00","0.00","12.00","87.90","550.44"],"fontName":"CRDKGT+ArialMT","x":87.89999999999999,"y":550.44,"line":3} +{"page":165,"change":"ContentChange","types":["H5"],"str":"Stickstoffverluste durch Auslaugung ","dir":"ltr","width":"194.14","height":"12.00","transform":["12.00","0.00","0.00","12.00","87.90","536.64"],"fontName":"CRDKGT+ArialMT","x":87.89999999999999,"y":536.6400000000001,"line":4} +{"page":169,"change":"ContentChange","types":["H5"],"str":"4. Wirkungen der Anwendung von Biochar auf den ","line":6,"x":70.92,"y":273.24,"width":"268.11","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":169,"change":"ContentChange","types":["H5"],"str":"physiologischen Zustand der einem zunehmenden ","dir":"ltr","width":"271.44","height":"12.00","transform":["12.00","0.00","0.00","12.00","87.90","259.44"],"fontName":"CRDKGT+ArialMT","x":87.89999999999999,"y":259.44,"line":7} +{"page":169,"change":"ContentChange","types":["H5"],"str":"Trockenstress ausgesetzten Weinpflanzen","dir":"ltr","width":"226.08","height":"12.00","transform":["12.00","0.00","0.00","12.00","87.90","245.64"],"fontName":"CRDKGT+ArialMT","x":87.89999999999999,"y":245.64,"line":8} +{"page":173,"change":"ContentChange","types":["H5"],"str":"5. Schluss bemerkungen","line":2,"x":70.92,"y":564.24,"width":"125.34","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":180,"change":"ContentChange","types":["H5"],"str":"1. Einleitung","line":26,"x":68.04,"y":210.24,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":182,"change":"ContentChange","types":["H5"],"str":"2. Materialien und Methoden","line":2,"x":68.04,"y":564.24,"width":"148.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":187,"change":"ContentChange","types":["H3"],"str":"𝑓𝑓 =","line":3,"x":70.92,"y":539.7,"width":"18.13","height":"13.98","fontName":["CJUSQJ+CambriaMath","WASIKV+CambriaMath"],"dir":["ltr"]} +{"page":190,"change":"ContentChange","types":["H5"],"str":"3. Ergebnisse ","line":20,"x":68.04,"y":279.24,"width":"73.38","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":200,"change":"ContentChange","types":["H5"],"str":"4. Diskussion","line":28,"x":68.04,"y":278.94,"width":"67.93","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":207,"change":"ContentChange","types":["H5"],"str":"5. Schlussfolgerungen","line":13,"x":70.92,"y":394.62,"width":"115.35","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":214,"change":"ContentChange","types":["H5"],"str":"1. Einleitung","line":16,"x":68.04,"y":345.24,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":216,"change":"ContentChange","types":["H5"],"str":"2. Mate rialien und Methoden","line":19,"x":68.04,"y":296.22,"width":"148.74","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} +{"page":235,"change":"ContentChange","types":["H5"],"str":"3. Ergebnisse und Diskussion","dir":"ltr","width":"158.04","height":"12.00","transform":["12.00","0.00","0.00","12.00","70.92","564.24"],"fontName":"CRDKGT+ArialMT","x":70.92,"y":564.24,"line":2} +{"page":249,"change":"ContentChange","types":["H5"],"str":"4. Perspektiven","dir":"ltr","width":"82.68","height":"12.00","transform":["12.00","0.00","0.00","12.00","70.92","564.24"],"fontName":"CRDKGT+ArialMT","x":70.92,"y":564.24,"line":2} +{"page":251,"change":"ContentChange","types":["H5"],"str":"5. Schlussfolgerungen","dir":"ltr","width":"118.68","height":"12.00","transform":["12.00","0.00","0.00","12.00","70.92","506.22"],"fontName":"CRDKGT+ArialMT","x":70.92,"y":506.22,"line":4} \ No newline at end of file diff --git a/examples/compressed.tracemonkey-pldi-09/detectHeaders.json b/examples/compressed.tracemonkey-pldi-09/detectHeaders.json new file mode 100644 index 0000000..1b2ae6d --- /dev/null +++ b/examples/compressed.tracemonkey-pldi-09/detectHeaders.json @@ -0,0 +1,38 @@ +{ + "pages": 14, + "items": 2430, + "groupedItems": 1499, + "changes": 2, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":0,"change":"ContentChange","types":["H1"],"str":"Trace-based Just-in-Time Type Specialization for Dynamic","dir":"ltr","width":"449.09","height":"17.93","transform":["17.93","0.00","0.00","17.93","80.52","700.67"],"fontName":"TACTGM+NimbusRomNo9L-Medi","x":80.5159,"y":700.6706,"line":0} +{"page":0,"change":"ContentChange","types":["H1"],"str":"Languages","dir":"ltr","width":"82.71","height":"17.93","transform":["17.93","0.00","0.00","17.93","263.71","680.75"],"fontName":"TACTGM+NimbusRomNo9L-Medi","x":263.706,"y":680.7453,"line":1} \ No newline at end of file diff --git a/examples/dict/detectHeaders.json b/examples/dict/detectHeaders.json new file mode 100644 index 0000000..2359d5f --- /dev/null +++ b/examples/dict/detectHeaders.json @@ -0,0 +1,98 @@ +{ + "pages": 218, + "items": 51104, + "groupedItems": 8481, + "changes": 65, + "schema": [ + { + "name": "line" + }, + { + "name": "types" + }, + { + "name": "x" + }, + { + "name": "y" + }, + { + "name": "width" + }, + { + "name": "height" + }, + { + "name": "str" + }, + { + "name": "fontName" + }, + { + "name": "dir" + } + ], + "globals": {} +} +{"page":0,"change":"ContentChange","types":["H1"],"str":"A Course in Combinatorial Optimization","dir":"ltr","width":"407.49","height":"24.79","transform":["24.79","0.00","0.00","24.79","112.60","584.96"],"fontName":"HVHZFT+CMR17","x":112.599,"y":584.959,"line":0} +{"page":0,"change":"ContentChange","types":["H2"],"str":"Alexander Schrijver","dir":"ltr","width":"162.77","height":"20.66","transform":["20.66","0.00","0.00","20.66","234.96","508.10"],"fontName":"HVHZFT+CMR17","x":234.96300000000002,"y":508.09919999999994,"line":1} +{"page":4,"change":"ContentChange","types":["H3","H3"],"str":"1.1. Shortest paths with nonnegative lengths","dir":"ltr","width":"380.91","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","652.49"],"fontName":"KXBFBK+CMBX12","x":100.34989999999999,"y":652.4861000000001,"line":2} +{"page":8,"change":"ContentChange","types":["H3","H3"],"str":"1.2. Speeding up Dijkstra’s algorithm with heaps","dir":"ltr","width":"417.68","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","364.17"],"fontName":"KXBFBK+CMBX12","x":100.35000000000002,"y":364.17109999999997,"line":46} +{"page":11,"change":"ContentChange","types":["H3","H3"],"str":"1.3. Shortest paths with arbitrary lengths","dir":"ltr","width":"356.03","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","239.99"],"fontName":"KXBFBK+CMBX12","x":72,"y":239.989,"line":21} +{"page":18,"change":"ContentChange","types":["H3","H3"],"str":"1.4. Minimum spanning trees","dir":"ltr","width":"249.95","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","603.18"],"fontName":"KXBFBK+CMBX12","x":100.35016000000005,"y":603.1841000000001,"line":5} +{"page":22,"change":"ContentChange","types":["H3","H3"],"str":"2.1. Convex sets","dir":"ltr","width":"139.47","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","623.73"],"fontName":"KXBFBK+CMBX12","x":100.35008999999998,"y":623.731,"line":3} +{"page":24,"change":"ContentChange","types":["H3","H3"],"str":"2.2. Polytopes and polyhedra","dir":"ltr","width":"249.83","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","525.49"],"fontName":"KXBFBK+CMBX12","x":100.34895,"y":525.4873000000001,"line":10} +{"page":29,"change":"ContentChange","types":["H3","H3"],"str":"2.3. Farkas’ lemma","dir":"ltr","width":"160.56","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","141.56"],"fontName":"KXBFBK+CMBX12","x":71.99573099999998,"y":141.5561900000001,"line":34} +{"page":32,"change":"ContentChange","types":["H3","H3"],"str":"2.4. Linear programming","dir":"ltr","width":"212.60","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","345.51"],"fontName":"KXBFBK+CMBX12","x":100.34994999999975,"y":345.5141019999998,"line":19} +{"page":38,"change":"ContentChange","types":["H3","H3"],"str":"3.1. Matchings, covers, and Gallai’s theorem","dir":"ltr","width":"378.59","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","624.43"],"fontName":"KXBFBK+CMBX12","x":100.34989999999999,"y":624.4333,"line":3} +{"page":39,"change":"ContentChange","types":["H3"],"str":"3.2. M -augmenting paths","line":21,"x":71.99984999999992,"y":296.53569999999996,"width":"203.88","height":"17.22","fontName":["KXBFBK+CMBX12","MGJTOM+CMMI12"],"dir":["ltr"]} +{"page":40,"change":"ContentChange","types":["H3","H3"],"str":"3.3. K ̋onig’s theorems","dir":"ltr","width":"186.22","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","359.57"],"fontName":"KXBFBK+CMBX12","x":100.35,"y":359.572,"line":17} +{"page":44,"change":"ContentChange","types":["H3","H3"],"str":"3.4. Cardinality bipartite matching algorithm","dir":"ltr","width":"386.84","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","701.16"],"fontName":"KXBFBK+CMBX12","x":100.34999999999997,"y":701.1583,"line":1} +{"page":46,"change":"ContentChange","types":["H3","H3"],"str":"3.5. Weighted bipartite matching","dir":"ltr","width":"282.53","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","555.66"],"fontName":"KXBFBK+CMBX12","x":100.35012999999998,"y":555.6638439999999,"line":7} +{"page":49,"change":"ContentChange","types":["H3","H3"],"str":"3.6. The matching polytope","dir":"ltr","width":"236.40","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","200.95"],"fontName":"KXBFBK+CMBX12","x":71.99974000000006,"y":200.94670000000002,"line":29} +{"page":53,"change":"ContentChange","types":["H3","H3"],"str":"4.1. Menger’s theorem","dir":"ltr","width":"192.31","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","625.31"],"fontName":"KXBFBK+CMBX12","x":72.00000000000003,"y":625.306,"line":3} +{"page":57,"change":"ContentChange","types":["H3","H3"],"str":"4.2. Flows in networks","dir":"ltr","width":"191.61","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","480.35"],"fontName":"KXBFBK+CMBX12","x":71.99936999999969,"y":480.3521700000001,"line":14} +{"page":59,"change":"ContentChange","types":["H3","H3"],"str":"4.3. Finding a maximum flow","dir":"ltr","width":"249.97","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","337.49"],"fontName":"KXBFBK+CMBX12","x":71.99978999999976,"y":337.4861000000001,"line":18} +{"page":64,"change":"ContentChange","types":["H3","H3"],"str":"4.4. Speeding up the maximum flow algorithm","dir":"ltr","width":"395.42","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","209.07"],"fontName":"KXBFBK+CMBX12","x":100.34913,"y":209.06558999999993,"line":40} +{"page":67,"change":"ContentChange","types":["H3","H3"],"str":"4.5. Circulations","dir":"ltr","width":"141.18","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","288.45"],"fontName":"KXBFBK+CMBX12","x":72.00049000000018,"y":288.45379999999994,"line":20} +{"page":69,"change":"ContentChange","types":["H3","H3"],"str":"4.6. Minimum-cost flows","dir":"ltr","width":"209.03","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","185.94"],"fontName":"KXBFBK+CMBX12","x":72.00026899999983,"y":185.93532000000005,"line":36} +{"page":77,"change":"ContentChange","types":["H3","H3"],"str":"5.1. Tutte’s 1-factor theorem and the Tutte-Berge","dir":"ltr","width":"432.02","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","641.75"],"fontName":"KXBFBK+CMBX12","x":72,"y":641.7494,"line":2} +{"page":77,"change":"ContentChange","types":["H3","H3"],"str":"formula","dir":"ltr","width":"64.67","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","619.83"],"fontName":"KXBFBK+CMBX12","x":72,"y":619.8342,"line":3} +{"page":80,"change":"ContentChange","types":["H3","H3"],"str":"5.2. Cardinality matching algorithm","dir":"ltr","width":"306.87","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","627.85"],"fontName":"KXBFBK+CMBX12","x":100.3506199999999,"y":627.8532,"line":4} +{"page":84,"change":"ContentChange","types":["H3","H3"],"str":"5.3. Weighted matching algorithm","dir":"ltr","width":"290.92","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","594.61"],"fontName":"KXBFBK+CMBX12","x":100.35,"y":594.607,"line":2} +{"page":90,"change":"ContentChange","types":["H3","H3"],"str":"5.4. The matching polytope","dir":"ltr","width":"236.40","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","217.70"],"fontName":"KXBFBK+CMBX12","x":100.351061,"y":217.69570000000016,"line":41} +{"page":93,"change":"ContentChange","types":["H3","H3"],"str":"5.5. The Cunningham-Marsh formula","dir":"ltr","width":"318.34","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","196.24"],"fontName":"KXBFBK+CMBX12","x":71.99741000000014,"y":196.24021000000002,"line":33} +{"page":96,"change":"ContentChange","types":["H3","H3"],"str":"6.1. Introduction","dir":"ltr","width":"145.32","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","626.23"],"fontName":"KXBFBK+CMBX12","x":100.3501,"y":626.2333,"line":3} +{"page":97,"change":"ContentChange","types":["H3","H3"],"str":"6.2. Words","dir":"ltr","width":"93.13","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","215.08"],"fontName":"KXBFBK+CMBX12","x":72,"y":215.07689999999997,"line":24} +{"page":99,"change":"ContentChange","types":["H3","H3"],"str":"6.3. Problems","dir":"ltr","width":"118.32","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","701.16"],"fontName":"KXBFBK+CMBX12","x":72,"y":701.1583,"line":1} +{"page":99,"change":"ContentChange","types":["H3","H3"],"str":"6.4. Algorithms and running time","dir":"ltr","width":"287.67","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","300.83"],"fontName":"KXBFBK+CMBX12","x":72.00158999999996,"y":300.8293000000004,"line":24} +{"page":100,"change":"ContentChange","types":["H3","H3"],"str":"6.5. The class NP","dir":"ltr","width":"151.77","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","354.09"],"fontName":"KXBFBK+CMBX12","x":100.34892000000013,"y":354.0911000000001,"line":25} +{"page":101,"change":"ContentChange","types":["H3","H3"],"str":"6.6. The class co-NP","dir":"ltr","width":"176.51","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","210.57"],"fontName":"KXBFBK+CMBX12","x":71.99976999999978,"y":210.56830000000036,"line":30} +{"page":102,"change":"ContentChange","types":["H3","H3"],"str":"6.7. NP-completeness","dir":"ltr","width":"184.22","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","392.60"],"fontName":"KXBFBK+CMBX12","x":100.35020000000006,"y":392.6020000000001,"line":20} +{"page":102,"change":"ContentChange","types":["H3","H3"],"str":"6.8. NP-completeness of the satisfiability problem","dir":"ltr","width":"424.13","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","158.85"],"fontName":"KXBFBK+CMBX12","x":100.35130000000021,"y":158.85417000000012,"line":33} +{"page":105,"change":"ContentChange","types":["H3","H3"],"str":"6.9. NP-completeness of some other problems","dir":"ltr","width":"389.78","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","701.16"],"fontName":"KXBFBK+CMBX12","x":72,"y":701.1583,"line":1} +{"page":107,"change":"ContentChange","types":["H3","H3"],"str":"6.10. Turing machines","dir":"ltr","width":"188.23","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","481.67"],"fontName":"KXBFBK+CMBX12","x":72,"y":481.666,"line":11} +{"page":110,"change":"ContentChange","types":["H3","H3"],"str":"7.1. Introduction","dir":"ltr","width":"145.32","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","621.87"],"fontName":"KXBFBK+CMBX12","x":100.35010000000005,"y":621.8681,"line":3} +{"page":114,"change":"ContentChange","types":["H3","H3"],"str":"7.2. Edge-colourings of bipartite graphs","dir":"ltr","width":"337.32","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","141.56"],"fontName":"KXBFBK+CMBX12","x":100.35259000000008,"y":141.5558,"line":19} +{"page":120,"change":"ContentChange","types":["H3","H3"],"str":"7.3. Partially ordered sets","dir":"ltr","width":"221.32","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","572.90"],"fontName":"KXBFBK+CMBX12","x":100.34971999999993,"y":572.8990899999999,"line":14} +{"page":124,"change":"ContentChange","types":["H3","H3"],"str":"7.4. Perfect graphs","dir":"ltr","width":"161.70","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","701.16"],"fontName":"KXBFBK+CMBX12","x":100.34999999999997,"y":701.1583,"line":1} +{"page":127,"change":"ContentChange","types":["H3","H3"],"str":"7.5. Chordal graphs","dir":"ltr","width":"169.26","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","170.52"],"fontName":"KXBFBK+CMBX12","x":71.99944399999993,"y":170.51789999999988,"line":24} +{"page":131,"change":"ContentChange","types":["H3","H3"],"str":"8.1. Integer linear programming","dir":"ltr","width":"273.03","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","619.28"],"fontName":"KXBFBK+CMBX12","x":72,"y":619.2763,"line":3} +{"page":133,"change":"ContentChange","types":["H3","H3"],"str":"8.2. Totally unimodular matrices","dir":"ltr","width":"280.06","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","701.16"],"fontName":"KXBFBK+CMBX12","x":72,"y":701.1583,"line":1} +{"page":138,"change":"ContentChange","types":["H3","H3"],"str":"8.3. Totally unimodular matrices from bipartite","dir":"ltr","width":"432.01","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","701.16"],"fontName":"KXBFBK+CMBX12","x":100.35000000000008,"y":701.1583,"line":1} +{"page":138,"change":"ContentChange","types":["H3","H3"],"str":"graphs","dir":"ltr","width":"56.18","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","679.24"],"fontName":"KXBFBK+CMBX12","x":100.35000000000008,"y":679.2431,"line":2} +{"page":142,"change":"ContentChange","types":["H3","H3"],"str":"8.4. Totally unimodular matrices from directed graphs","dir":"ltr","width":"452.40","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","270.96"],"fontName":"KXBFBK+CMBX12","x":100.35010900000005,"y":270.9585999999999,"line":23} +{"page":147,"change":"ContentChange","types":["H3","H3"],"str":"9.1. Introduction","dir":"ltr","width":"145.33","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","623.74"],"fontName":"KXBFBK+CMBX12","x":72,"y":623.74,"line":3} +{"page":152,"change":"ContentChange","types":["H3","H3"],"str":"9.2. Two commodities","dir":"ltr","width":"188.12","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","701.16"],"fontName":"KXBFBK+CMBX12","x":100.34999999999997,"y":701.1583,"line":1} +{"page":156,"change":"ContentChange","types":["H3","H3"],"str":"9.3. Disjoint paths in acyclic directed graphs","dir":"ltr","width":"380.87","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","644.08"],"fontName":"KXBFBK+CMBX12","x":100.34937999999991,"y":644.0802000000001,"line":3} +{"page":158,"change":"ContentChange","types":["H3","H3"],"str":"9.4. Vertex-disjoint paths in planar graphs","dir":"ltr","width":"361.94","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","701.16"],"fontName":"KXBFBK+CMBX12","x":100.34999999999997,"y":701.1583,"line":1} +{"page":164,"change":"ContentChange","types":["H3","H3"],"str":"9.5. Edge-disjoint paths in planar graphs","dir":"ltr","width":"347.58","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","443.97"],"fontName":"KXBFBK+CMBX12","x":100.34943999999979,"y":443.96552000000014,"line":15} +{"page":167,"change":"ContentChange","types":["H3","H3"],"str":"9.6. A column generation technique for multicom-","dir":"ltr","width":"432.00","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","318.47"],"fontName":"KXBFBK+CMBX12","x":72.00099400000013,"y":318.4694000000001,"line":20} +{"page":167,"change":"ContentChange","types":["H3","H3"],"str":"modity flows","dir":"ltr","width":"107.70","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","296.55"],"fontName":"KXBFBK+CMBX12","x":72.00099400000013,"y":296.55420000000015,"line":21} +{"page":172,"change":"ContentChange","types":["H3","H3"],"str":"10.1. Matroids and the greedy algorithm","dir":"ltr","width":"347.13","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","655.15"],"fontName":"KXBFBK+CMBX12","x":100.35000000000005,"y":655.1501000000001,"line":2} +{"page":175,"change":"ContentChange","types":["H3","H3"],"str":"10.2. Equivalent axioms for matroids","dir":"ltr","width":"313.85","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","599.73"],"fontName":"KXBFBK+CMBX12","x":72.00027000000017,"y":599.7281,"line":4} +{"page":179,"change":"ContentChange","types":["H3","H3"],"str":"10.3. Examples of matroids","dir":"ltr","width":"232.50","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","591.35"],"fontName":"KXBFBK+CMBX12","x":72.00033999999994,"y":591.3493000000001,"line":6} +{"page":182,"change":"ContentChange","types":["H3","H3"],"str":"10.4. Two technical lemmas","dir":"ltr","width":"236.21","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","451.78"],"fontName":"KXBFBK+CMBX12","x":100.35041999999993,"y":451.7771000000002,"line":13} +{"page":183,"change":"ContentChange","types":["H3","H3"],"str":"10.5. Matroid intersection","dir":"ltr","width":"222.26","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","242.82"],"fontName":"KXBFBK+CMBX12","x":71.9991999999998,"y":242.8154,"line":27} +{"page":189,"change":"ContentChange","types":["H3","H3"],"str":"10.6. Weighted matroid intersection","dir":"ltr","width":"306.13","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","243.80"],"fontName":"KXBFBK+CMBX12","x":72.00190999999978,"y":243.79659999999996,"line":27} +{"page":193,"change":"ContentChange","types":["H3","H3"],"str":"10.7. Matroids and polyhedra","dir":"ltr","width":"253.24","height":"17.22","transform":["17.22","0.00","0.00","17.22","72.00","701.16"],"fontName":"KXBFBK+CMBX12","x":72,"y":701.1583,"line":1} \ No newline at end of file