From 94a7405671a75ad489f1ea2e1db2fdb4d166f79d Mon Sep 17 00:00:00 2001 From: Johannes Zillmann Date: Sun, 25 Apr 2021 14:41:50 +0200 Subject: [PATCH] Lookup and verify toc links --- KNOWN_ISSUES.md | 2 + core/src/FontType.ts | 17 + core/src/TOC.ts | 1 + core/src/support/items.ts | 24 + core/src/support/stringFunctions.ts | 8 + core/src/transformer/CacluclateStatistics.ts | 2 + core/src/transformer/DetectToc.ts | 69 +- core/src/transformer/TransformContext.ts | 4 + core/test/Files.test.ts | 6 +- core/test/support/stringFunctions.test.ts | 13 +- .../calculateStatistics.json | 1 + .../compactLines.json | 1 + .../detectTOC.json | 1143 +++++++++++++++++ .../removeRepetitiveItems.json | 1 + .../sortbyX.json | 1 + .../calculateStatistics.json | 1 + .../compactLines.json | 1 + .../detectTOC.json | 75 ++ .../removeRepetitiveItems.json | 1 + .../sortbyX.json | 1 + .../calculateStatistics.json | 1 + .../Alice-In-Wonderland/compactLines.json | 1 + examples/Alice-In-Wonderland/detectTOC.json | 81 ++ .../removeRepetitiveItems.json | 1 + examples/Alice-In-Wonderland/sortbyX.json | 1 + .../CC-NC_Leitfaden/calculateStatistics.json | 1 + examples/CC-NC_Leitfaden/compactLines.json | 1 + examples/CC-NC_Leitfaden/detectTOC.json | 147 +++ .../removeRepetitiveItems.json | 1 + examples/CC-NC_Leitfaden/sortbyX.json | 1 + .../calculateStatistics.json | 1 + .../compactLines.json | 1 + .../detectTOC.json | 1 + .../removeRepetitiveItems.json | 1 + .../sortbyX.json | 1 + .../Closed-Syllables/calculateStatistics.json | 1 + examples/Closed-Syllables/compactLines.json | 1 + examples/Closed-Syllables/detectTOC.json | 39 + .../removeRepetitiveItems.json | 1 + examples/Closed-Syllables/sortbyX.json | 1 + examples/ExamplePdf/calculateStatistics.json | 1 + examples/ExamplePdf/compactLines.json | 1 + examples/ExamplePdf/detectTOC.json | 1 + .../ExamplePdf/removeRepetitiveItems.json | 1 + examples/ExamplePdf/sortbyX.json | 1 + .../calculateStatistics.json | 1 + .../compactLines.json | 1 + .../Flash-Masques-Temperature/detectTOC.json | 1 + .../removeRepetitiveItems.json | 1 + .../Flash-Masques-Temperature/sortbyX.json | 1 + .../Grammar-Matters/calculateStatistics.json | 1 + examples/Grammar-Matters/compactLines.json | 1 + examples/Grammar-Matters/detectTOC.json | 1 + .../removeRepetitiveItems.json | 1 + examples/Grammar-Matters/sortbyX.json | 1 + .../calculateStatistics.json | 1 + .../compactLines.json | 1 + .../Life-Of-God-In-Soul-Of-Man/detectTOC.json | 297 +++++ .../removeRepetitiveItems.json | 1 + .../Life-Of-God-In-Soul-Of-Man/sortbyX.json | 1 + .../Made-with-cc/calculateStatistics.json | 1 + examples/Made-with-cc/compactLines.json | 1 + examples/Made-with-cc/detectTOC.json | 1 + .../Made-with-cc/removeRepetitiveItems.json | 1 + examples/Made-with-cc/sortbyX.json | 1 + .../calculateStatistics.json | 1 + examples/Safe-Communication/compactLines.json | 1 + examples/Safe-Communication/detectTOC.json | 57 + .../removeRepetitiveItems.json | 1 + examples/Safe-Communication/sortbyX.json | 1 + .../calculateStatistics.json | 1 + .../compactLines.json | 1 + .../detectTOC.json | 93 ++ .../removeRepetitiveItems.json | 1 + .../St-Mary-Witney-Social-Audit/sortbyX.json | 1 + .../calculateStatistics.0.json | 1 + .../compactLines.json | 1 + .../The-Art-of-Public-Speaking/detectTOC.json | 1 + .../removeRepetitiveItems.json | 1 + .../The-Art-of-Public-Speaking/sortbyX.json | 1 + .../calculateStatistics.json | 1 + .../compactLines.json | 1 + .../detectTOC.json | 1 + .../removeRepetitiveItems.json | 1 + .../sortbyX.json | 1 + .../calculateStatistics.json | 1 + .../The-Man-Without-A-Body/compactLines.json | 1 + .../The-Man-Without-A-Body/detectTOC.json | 1 + .../removeRepetitiveItems.json | 1 + examples/The-Man-Without-A-Body/sortbyX.json | 1 + .../calculateStatistics.json | 1 + .../The-War-of-the-Worlds/compactLines.json | 1 + examples/The-War-of-the-Worlds/detectTOC.json | 1 + .../removeRepetitiveItems.json | 1 + examples/The-War-of-the-Worlds/sortbyX.json | 1 + .../calculateStatistics.json | 1 + .../Tragedy-Of-The-Commons/compactLines.json | 1 + .../Tragedy-Of-The-Commons/detectTOC.json | 1 + .../removeRepetitiveItems.json | 1 + examples/Tragedy-Of-The-Commons/sortbyX.json | 1 + .../calculateStatistics.json | 1 + .../Watered-Soul-Blog-Book/compactLines.json | 1 + .../Watered-Soul-Blog-Book/detectTOC.json | 999 ++++++++++++++ .../removeRepetitiveItems.json | 1 + examples/Watered-Soul-Blog-Book/sortbyX.json | 1 + examples/WoodUp/calculateStatistics.json | 1 + examples/WoodUp/compactLines.json | 1 + examples/WoodUp/detectTOC.json | 57 + examples/WoodUp/removeRepetitiveItems.json | 1 + examples/WoodUp/sortbyX.json | 1 + .../detectTOC.json | 1 + .../removeRepetitiveItems.json | 1 + examples/dict/detectTOC.json | 423 ++++++ examples/dict/removeRepetitiveItems.json | 1 + 114 files changed, 3639 insertions(+), 11 deletions(-) diff --git a/KNOWN_ISSUES.md b/KNOWN_ISSUES.md index 8882711..6c705d5 100644 --- a/KNOWN_ISSUES.md +++ b/KNOWN_ISSUES.md @@ -9,6 +9,8 @@ The interesting thing is that rendering with pdfjs (online) looks good. So maybe - out of order items [Safe-Communication](examples/Safe-Communication.pdf) - items in wrong lines + numbers are not numbers [Life-Of-God-In-Soul-Of-Man](examples/Life-Of-God-In-Soul-Of-Man.pdf) +- CC-NC_Leitfaden.pdf: un-verified toc entries (and/und/&... etc...) +- Closed-Syllables.pdf: unverified toc entries ## Not yet reviewed test PDFS diff --git a/core/src/FontType.ts b/core/src/FontType.ts index 2ec5897..a0bdaeb 100644 --- a/core/src/FontType.ts +++ b/core/src/FontType.ts @@ -1,7 +1,24 @@ enum FontType { BOLD = 'BOLD', OBLIQUE = 'OBLIQUE', + //TODO remove bold/oblique BOLD_OBLIQUE = 'BOLD_OBLIQUE', } export default FontType; + +namespace FontType { + export function declaredFontTypes(fontName: string): FontType[] { + const fontNameLowerCase = fontName.toLowerCase(); + const bold = fontNameLowerCase.includes('bold') || fontNameLowerCase.includes('heavy'); + const italic = fontNameLowerCase.includes('oblique') || fontNameLowerCase.includes('italic'); + const fontTypes: FontType[] = []; + if (bold) { + fontTypes.push(FontType.BOLD); + } + if (italic) { + fontTypes.push(FontType.OBLIQUE); + } + return fontTypes; + } +} diff --git a/core/src/TOC.ts b/core/src/TOC.ts index 645d707..5f274c2 100644 --- a/core/src/TOC.ts +++ b/core/src/TOC.ts @@ -19,6 +19,7 @@ export default class TOC { export interface TocEntry { level: number; text: string; + verified: boolean; linkedPage: number; items: Item[]; } diff --git a/core/src/support/items.ts b/core/src/support/items.ts index 466d5ba..d94db50 100644 --- a/core/src/support/items.ts +++ b/core/src/support/items.ts @@ -1,6 +1,30 @@ +import { FontType } from 'pdfjs-dist/types/shared/util'; +import { assertDefined } from '../assert'; import Item from '../Item'; import ItemType from '../ItemType'; +function get(item: Item, name: string): any { + const value = item.data[name]; + assertDefined(value, `No '${name}' defined in ${JSON.stringify(item)}`); + return value; +} +export function getHeight(item: Item): number { + return get(item, 'height'); +} + +export function getText(item: Item): string { + return get(item, 'str'); +} + +export function getFontName(fontMap: Map, item: Item): string { + const fontId = item.data['fontName']; + const fontObject = fontMap.get(fontId); + if (!fontObject) { + return fontId; + } + return assertDefined(fontObject['name'], `No 'name' found in ${JSON.stringify(fontObject)}`); +} + export function itemWithType(item: Item, type: ItemType): Item { const existingTypes = item.data['types'] || []; return item.withDataAddition({ types: [...existingTypes, type] }); diff --git a/core/src/support/stringFunctions.ts b/core/src/support/stringFunctions.ts index 5481cbb..fbb84b6 100644 --- a/core/src/support/stringFunctions.ts +++ b/core/src/support/stringFunctions.ts @@ -1,5 +1,7 @@ import { assert } from '../assert'; +const TAB_CHAR_CODE = 9; +const WHITESPACE_CHAR_CODE = 32; const MIN_DIGIT_CHAR_CODE = 48; const MAX_DIGIT_CHAR_CODE = 57; @@ -19,6 +21,12 @@ export function filterOutDigits(text: string): string { return String.fromCharCode(...toCharcodes(text).filter((code) => !isDigit(code))); } +export function filterOutWhitespaces(text: string): string { + return String.fromCharCode( + ...toCharcodes(text).filter((code) => code != TAB_CHAR_CODE && code != WHITESPACE_CHAR_CODE), + ); +} + export function extractNumbers(text: string): number[] { return (text.match(/\d+/g) || []).map(Number); } diff --git a/core/src/transformer/CacluclateStatistics.ts b/core/src/transformer/CacluclateStatistics.ts index 451d5c7..f86edc1 100644 --- a/core/src/transformer/CacluclateStatistics.ts +++ b/core/src/transformer/CacluclateStatistics.ts @@ -15,6 +15,7 @@ export const MAX_X = new GlobalDefinition('maxX'); 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 PAGE_MAPPING = new GlobalDefinition('pageMapping'); const config = { @@ -115,6 +116,7 @@ export default class CalculateStatistics extends ItemTransformer { items: items, globals: [ MAX_HEIGHT.value(maxHeight), + MOST_USED_HEIGHT.value(mostUsedHeight), MIN_X.value(minX), MAX_X.value(maxX), MIN_Y.value(minY), diff --git a/core/src/transformer/DetectToc.ts b/core/src/transformer/DetectToc.ts index 0b3ede3..dfafc30 100644 --- a/core/src/transformer/DetectToc.ts +++ b/core/src/transformer/DetectToc.ts @@ -5,13 +5,14 @@ import ItemResult from '../ItemResult'; import TransformContext from './TransformContext'; import LineItemMerger from '../debug/LineItemMerger'; import { groupByLine, groupByPage, onlyUniques, transformGroupedByPage } from '../support/groupingUtils'; -import { PAGE_MAPPING } from './CacluclateStatistics'; -import { extractEndingNumber } from '../support/stringFunctions'; +import { MOST_USED_HEIGHT, PAGE_MAPPING } from './CacluclateStatistics'; +import { extractEndingNumber, filterOutWhitespaces } from '../support/stringFunctions'; import ItemType from '../ItemType'; import { numbersAreConsecutive } from '../support/numberFunctions'; import TOC, { TocEntry } from '../TOC'; +import FontType from '../FontType'; import { flatten, groupBy } from '../support/functional'; -import { itemWithType } from '../support/items'; +import { getHeight, getText, getFontName, itemWithType } from '../support/items'; const config = { // How many characters a line with a ending number needs to have minimally to be a valid link @@ -45,6 +46,7 @@ export default class DetectToc extends ItemTransformer { transform(context: TransformContext, inputItems: Item[]): ItemResult { const pageMapping = context.getGlobal(PAGE_MAPPING); + const mostUsedHeight = context.getGlobal(MOST_USED_HEIGHT); const maxPageToEvaluate = Math.min(context.pageCount / 2, 5 + Math.abs(pageMapping.pageFactor)); const pagesToEvaluate = groupByPage(inputItems.filter((item) => item.page <= maxPageToEvaluate)); const maxPageToBeLinkedTo = context.pageCount + pageMapping.pageFactor - 1; @@ -59,12 +61,27 @@ export default class DetectToc extends ItemTransformer { const tocItemUuids: Set = new Set( flatten(flatten(rawTocEntries.map((e) => e.entryLines))).map((item) => item.uuid), ); - const tocEntries: TocEntry[] = rawTocEntries.map((rawEntry) => ({ - level: 0, - text: 'string', - linkedPage: rawEntry.linkedPage, - items: flatten(rawEntry.entryLines), - })); + const tocEntries: TocEntry[] = rawTocEntries.map((rawEntry) => { + const headline = findHeadline( + context.fontMap, + inputItems, + mostUsedHeight, + rawEntry.linkedPage - pageMapping.pageFactor, + rawEntry.entryLines, + ); + return { + level: 0, + text: + headline || + flatten(rawEntry.entryLines) + .map((item) => getText(item)) + .join('') + .replace(/[\s.]+\w+$/, ''), + verified: !!headline, + linkedPage: rawEntry.linkedPage, + items: flatten(rawEntry.entryLines), + }; + }); return { items: inputItems.map((item) => { @@ -228,6 +245,40 @@ function selectRawTocEntries(tocArea: TocArea, inputItems: Item[]): RawTocEntry[ return rawTocEntries; } +function findHeadline( + fontMap: Map, + items: Item[], + mostUsedHeight: number, + targetPage: number, + entryLines: Item[][], +): string | undefined { + const tocEntryText = normalizeHeadlineChars( + entryLines.map((lineItems) => lineItems.map((item) => getText(item)).join('')).join(''), + ); + const pageItems = items.filter((item) => item.page == targetPage); + const possibleHeadlines = pageItems.filter( + (item) => + getHeight(item) > mostUsedHeight + config.minHeadlineDistance || + FontType.declaredFontTypes(getFontName(fontMap, item)).includes(FontType.BOLD), + ); + let hits = possibleHeadlines.filter((item) => { + return tocEntryText.includes(normalizeHeadlineChars(getText(item))); + }); + + if (hits.length > 0) { + return hits + .map((hit) => getText(hit)) + .join('') + .trim(); + } + + return undefined; +} + +function normalizeHeadlineChars(text: string) { + return filterOutWhitespaces(text).toLowerCase(); +} + /** * Pointer to pages/items which classified as TOC. */ diff --git a/core/src/transformer/TransformContext.ts b/core/src/transformer/TransformContext.ts index 8bf9110..ed1114d 100644 --- a/core/src/transformer/TransformContext.ts +++ b/core/src/transformer/TransformContext.ts @@ -27,4 +27,8 @@ export default class TransformContext { getGlobal(definition: GlobalDefinition): T { return this.globals.get(definition); } + + getGlobalOptionally(definition: GlobalDefinition): T | undefined { + return this.globals.getOptional(definition); + } } diff --git a/core/test/Files.test.ts b/core/test/Files.test.ts index 12c982e..67bffbd 100644 --- a/core/test/Files.test.ts +++ b/core/test/Files.test.ts @@ -139,8 +139,12 @@ function globalsToString(globals: Globals): object { if (key === TOC_GLOBAL.key) { value = { ...value, + entries: value.entries.map((entry: TocEntry) => { + const filteredEntry = { ...entry } as any; + delete filteredEntry.items; + return filteredEntry; + }), }; - delete value.entries; } obj[key] = value; return obj; diff --git a/core/test/support/stringFunctions.test.ts b/core/test/support/stringFunctions.test.ts index d88ea00..e478aa3 100644 --- a/core/test/support/stringFunctions.test.ts +++ b/core/test/support/stringFunctions.test.ts @@ -1,4 +1,9 @@ -import { filterOutDigits, extractNumbers, extractEndingNumber } from 'src/support/stringFunctions'; +import { + filterOutDigits, + filterOutWhitespaces, + extractNumbers, + extractEndingNumber, +} from 'src/support/stringFunctions'; test('filterOutDigits', async () => { expect(filterOutDigits('')).toEqual(''); @@ -6,6 +11,12 @@ test('filterOutDigits', async () => { expect(filterOutDigits('a1b 2c 3')).toEqual('ab c '); }); +test('filterOutWhitespaces', async () => { + expect(filterOutWhitespaces('')).toEqual(''); + expect(filterOutWhitespaces('a b c')).toEqual('abc'); + expect(filterOutWhitespaces('ab c ')).toEqual('abc'); +}); + test('extractNumbers', async () => { expect(extractNumbers('')).toEqual([]); expect(extractNumbers('a b c')).toEqual([]); diff --git a/examples/Achieving-The-Paris-Climate-Agreement/calculateStatistics.json b/examples/Achieving-The-Paris-Climate-Agreement/calculateStatistics.json index 5ae8820..7de474c 100644 --- a/examples/Achieving-The-Paris-Climate-Agreement/calculateStatistics.json +++ b/examples/Achieving-The-Paris-Climate-Agreement/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 66, + "mostUsedHeight": 8, "minX": 41.38153078000005, "maxX": 400.56930541, "minY": 36.71720123, diff --git a/examples/Achieving-The-Paris-Climate-Agreement/compactLines.json b/examples/Achieving-The-Paris-Climate-Agreement/compactLines.json index eb70fc9..ca74f6e 100644 --- a/examples/Achieving-The-Paris-Climate-Agreement/compactLines.json +++ b/examples/Achieving-The-Paris-Climate-Agreement/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 66, + "mostUsedHeight": 8, "minX": 41.38153078000005, "maxX": 400.56930541, "minY": 36.71720123, diff --git a/examples/Achieving-The-Paris-Climate-Agreement/detectTOC.json b/examples/Achieving-The-Paris-Climate-Agreement/detectTOC.json index 9a59dce..3f99151 100644 --- a/examples/Achieving-The-Paris-Climate-Agreement/detectTOC.json +++ b/examples/Achieving-The-Paris-Climate-Agreement/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 66, + "mostUsedHeight": 8, "minX": 41.38153078000005, "maxX": 400.56930541, "minY": 36.71720123, @@ -56,6 +57,1148 @@ 44, 45, 46 + ], + "entries": [ + { + "level": 0, + "text": "Fig. 3.11Distribution of human resources required to manufacture the main components of a 50 MW solar photovoltaic power plant. (IRENA 2017)..........................................................58Fig. 3.12Differences between the raw LDF emission scenario data...........62Fig. 3.13The 2.0 °C and 1.5 °C scenarios and their absolute fossil and industry CO2 emissions until 2050. The energy-related", + "verified": false, + "linkedPage": 2 + }, + { + "level": 0, + "text": "xliiof the 1.5 °C and 2.0 °C Scenarios can be seen to result in an increasing percentile rank among all the literature-reported scenarios (increasing purple–red line in the lower panel)", + "verified": false, + "linkedPage": 64 + }, + { + "level": 0, + "text": "Fig. 3.14Example distributions of emissions scenario characteristics", + "verified": false, + "linkedPage": 66 + }, + { + "level": 0, + "text": "Fig. 4.1Land-use sequestration pathways showing annual sequestration rates over time", + "verified": false, + "linkedPage": 80 + }, + { + "level": 0, + "text": "2", + "verified": true, + "linkedPage": 82 + }, + { + "level": 0, + "text": "Fig. 4.3Global and regional methane emissions from fossil, industrial, and land-use-related sources", + "verified": false, + "linkedPage": 84 + }, + { + "level": 0, + "text": "Fig. 4.4Global and regional methane emissions from fossil, industrial, and land-use-related sources", + "verified": false, + "linkedPage": 85 + }, + { + "level": 0, + "text": "Fig. 4.5Global SF6 emission levels from literature-reported scenarios and the LDF pathways derived in this study", + "verified": false, + "linkedPage": 86 + }, + { + "level": 0, + "text": "Fig. 4.6Global tetrafluoromethane (CF4) emissions from the collection of assessed literature-reported scenarios and the LDF pathways derived in this study", + "verified": false, + "linkedPage": 86 + }, + { + "level": 0, + "text": "Fig. 4.7Global and regional sulfate dioxide (SOX) emissions in the literature-reported scenarios considered and the LDF pathways derived in this study", + "verified": false, + "linkedPage": 87 + }, + { + "level": 0, + "text": "Fig. 4.8Global and regional nitrate aerosol (NOX) emissions in the literature-reported scenarios considered and the LDF pathways derived in this study", + "verified": false, + "linkedPage": 88 + }, + { + "level": 0, + "text": "Fig. 4.9Global and regional black carbon BC emissions in the literature-reported scenarios considered and the LDF pathways derived in this study", + "verified": false, + "linkedPage": 89 + }, + { + "level": 0, + "text": "Fig. 4.10Global and regional organic carbon OC emissions in the literature-reported scenarios considered and the LDF pathways derived in this study", + "verified": false, + "linkedPage": 90 + }, + { + "level": 0, + "text": "Fig. 5.1Historic development and projections of oil prices (bottom lines) and historical world oil production and projections (top lines) by the IEA according to Wachtmeister et al. (2018)", + "verified": false, + "linkedPage": 104 + }, + { + "level": 0, + "text": "Fig. 5.2Global supply curve for primary biomass in 2030 (IRENA 2014)", + "verified": false, + "linkedPage": 111 + }, + { + "level": 0, + "text": "Fig. 5.3Development of the specific final energy use (per $GDP) in all stationary sectors (i.e., without transport) per world region under the 2.0 °C Scenario (left) and 1.5 °C Scenario (right)", + "verified": false, + "linkedPage": 119 + }, + { + "level": 0, + "text": "Fig. 5.4Development of the average global RES shares in total power generation in the 2.0 °C Scenario", + "verified": false, + "linkedPage": 122 + }, + { + "level": 0, + "text": "erahsnoitarenegreoplabolgegareva", + "verified": true, + "linkedPage": 124 + }, + { + "level": 0, + "text": "List of FiguresxliiiFig. 5.6Development of the average global shares of future heat-generation options in the ‘Residential and other’ sector under the 2.0 °C scenario", + "verified": false, + "linkedPage": 125 + }, + { + "level": 0, + "text": "6.1", + "verified": true, + "linkedPage": 133 + }, + { + "level": 0, + "text": "Fig. 6.2Transport mode performances of road, rail, and aviation", + "verified": false, + "linkedPage": 133 + }, + { + "level": 0, + "text": "Fig. 6.3Powertrain split for all transport modes in 2015 by transport performance (pkm or tkm)", + "verified": false, + "linkedPage": 134 + }, + { + "level": 0, + "text": "Fig. 6.4Final energy use by world transport in 2015 according to region", + "verified": false, + "linkedPage": 134 + }, + { + "level": 0, + "text": "Fig. 6.5Powertrain split for all transport modes in 2050 under the 5.0 °C Scenario in terms of transport performance", + "verified": false, + "linkedPage": 136 + }, + { + "level": 0, + "text": "Fig. 6.6Powertrain split (fleet) of passenger cars in selected regions in 2030 (left) and 2050 (right) under the 2.0 °C Scenario", + "verified": false, + "linkedPage": 137 + }, + { + "level": 0, + "text": "The 2.0 °C Scenario", + "verified": true, + "linkedPage": 138 + }, + { + "level": 0, + "text": "The 2.0 °C Scenario", + "verified": true, + "linkedPage": 138 + }, + { + "level": 0, + "text": "0", + "verified": true, + "linkedPage": 139 + }, + { + "level": 0, + "text": "Fig. 6.10Powertrain split of the world passenger car fleet in the 2.0 °C Scenario (left) and 1.5 °C Scenario (right)", + "verified": false, + "linkedPage": 140 + }, + { + "level": 0, + "text": "Fig. 6.11Final energy demand in urban and inter-urban passenger transport modes in 2015 (world averages)", + "verified": false, + "linkedPage": 140 + }, + { + "level": 0, + "text": "Fig. 6.12Final energy demand in freight transport modes in 2015 (world averages)", + "verified": false, + "linkedPage": 141 + }, + { + "level": 0, + "text": "Fig. 6.13World average energy consumption development for passenger cars per powertrain in 2015 (left) and 2050 (right)", + "verified": false, + "linkedPage": 142 + }, + { + "level": 0, + "text": "Fig. 6.14Average global energy intensities of truck drivetrain technologies in 2015 and 2050", + "verified": false, + "linkedPage": 143 + }, + { + "level": 0, + "text": "Fig. 6.15Average global energy intensities of bus drivetrain technologies in 2015 (left) and 2050 (right)", + "verified": false, + "linkedPage": 144 + }, + { + "level": 0, + "text": "Fig. 6.16Average global energy intensities of two-wheel vehicles (left) and three-wheel vehicles (right) by drivetrain technology in 2015 (left bar) and 2050 (right bar)", + "verified": false, + "linkedPage": 145 + }, + { + "level": 0, + "text": "Fig. 6.17MJ/tkm of freight rail trains (left) and MJ/pkm of passenger rail trains (right) for 2015 (left) and 2050 (right)", + "verified": false, + "linkedPage": 146 + }, + { + "level": 0, + "text": "Fig. 6.18Region-specific MJ/tkm and MJ/pkm in 2015 and 2050 for freight rail trains (left) and passenger rail trains (right)", + "verified": false, + "linkedPage": 146 + }, + { + "level": 0, + "text": "Fig. 6.19Shares of bio- and synfuels in all world regions under all scenarios", + "verified": false, + "linkedPage": 147 + }, + { + "level": 0, + "text": "Fig. 6.20Relative growth in world transport demand (2015 = 100% pkm/tkm) in the 5.0 °C scenario", + "verified": false, + "linkedPage": 150 + }, + { + "level": 0, + "text": "List of FiguresxlivFig. 6.21Relative growth in world transport demand (2015 = 100% pkm/tkm) in the 2.0 °C Scenario (left) and 1.5 °C Scenario (right)", + "verified": false, + "linkedPage": 150 + }, + { + "level": 0, + "text": "Fig. 6.22Regional pkm development", + "verified": false, + "linkedPage": 151 + }, + { + "level": 0, + "text": "Fig. 6.23World pkm development in all scenarios", + "verified": false, + "linkedPage": 152 + }, + { + "level": 0, + "text": "2.0°°C", + "verified": true, + "linkedPage": 152 + }, + { + "level": 0, + "text": "Fig. 6.25Pkm development in OECD Europe (left) Africa (middle), and China (right) in the 2.0 °C Scenario", + "verified": false, + "linkedPage": 153 + }, + { + "level": 0, + "text": "mm", + "verified": true, + "linkedPage": 154 + }, + { + "level": 0, + "text": "mm", + "verified": true, + "linkedPage": 154 + }, + { + "level": 0, + "text": "tkm", + "verified": true, + "linkedPage": 156 + }, + { + "level": 0, + "text": "tkm", + "verified": true, + "linkedPage": 156 + }, + { + "level": 0, + "text": "Fig. 6.30Rail tkm in the 2.0 °C Scenario", + "verified": false, + "linkedPage": 157 + }, + { + "level": 0, + "text": "Fig. 6.31Share of rail tkm in total rail + road tkm in the 2.0 °C Scenario", + "verified": false, + "linkedPage": 157 + }, + { + "level": 0, + "text": "Plants", + "verified": true, + "linkedPage": 166 + }, + { + "level": 0, + "text": "Fig. 7.2Solar potential in Africa", + "verified": false, + "linkedPage": 166 + }, + { + "level": 0, + "text": "Fig. 7.3Europe’s potential for utility-scale solar power plants", + "verified": false, + "linkedPage": 167 + }, + { + "level": 0, + "text": "Fig. 7.4OECD North America: existing and potential wind power sites", + "verified": false, + "linkedPage": 168 + }, + { + "level": 0, + "text": "Fig. 7.5Latin America: potential and existing wind power sites", + "verified": false, + "linkedPage": 169 + }, + { + "level": 0, + "text": "8.1CCCFig. 8.1", + "verified": true, + "linkedPage": 176 + }, + { + "level": 0, + "text": "Fig. 8.2", + "verified": true, + "linkedPage": 177 + }, + { + "level": 0, + "text": "Fig. 8.3", + "verified": true, + "linkedPage": 178 + }, + { + "level": 0, + "text": "Fig. 8.4", + "verified": true, + "linkedPage": 179 + }, + { + "level": 0, + "text": "Fig. 8.5", + "verified": true, + "linkedPage": 179 + }, + { + "level": 0, + "text": "0 0Fig. 8.6", + "verified": true, + "linkedPage": 180 + }, + { + "level": 0, + "text": "yFig. 8.7", + "verified": true, + "linkedPage": 181 + }, + { + "level": 0, + "text": "Fig. 8.8", + "verified": true, + "linkedPage": 182 + }, + { + "level": 0, + "text": "Fig. 8.9", + "verified": true, + "linkedPage": 183 + }, + { + "level": 0, + "text": "0CCCCCCCCCCrdEl heatingr heatingsFig. 8.10", + "verified": true, + "linkedPage": 184 + }, + { + "level": 0, + "text": "Fig. 8.11", + "verified": true, + "linkedPage": 186 + }, + { + "level": 0, + "text": "2CCCCCCCCCCrNaral sFig. 8.12", + "verified": true, + "linkedPage": 187 + }, + { + "level": 0, + "text": "0 02015CO2SavingsFig. 8.13", + "verified": true, + "linkedPage": 188 + }, + { + "level": 0, + "text": "Fig. 8.14", + "verified": true, + "linkedPage": 189 + }, + { + "level": 0, + "text": "00Fig. 8.15", + "verified": true, + "linkedPage": 190 + }, + { + "level": 0, + "text": "Fig. 8.16", + "verified": true, + "linkedPage": 202 + }, + { + "level": 0, + "text": "rFig. 8.17", + "verified": true, + "linkedPage": 210 + }, + { + "level": 0, + "text": "Fig. 8.18", + "verified": true, + "linkedPage": 212 + }, + { + "level": 0, + "text": "Fig. 8.19", + "verified": true, + "linkedPage": 213 + }, + { + "level": 0, + "text": "Fig. 8.20", + "verified": true, + "linkedPage": 214 + }, + { + "level": 0, + "text": "dFig. 8.21", + "verified": true, + "linkedPage": 215 + }, + { + "level": 0, + "text": "Fig. 8.22", + "verified": true, + "linkedPage": 216 + }, + { + "level": 0, + "text": "2Fig. 8.23", + "verified": true, + "linkedPage": 218 + }, + { + "level": 0, + "text": "00150200000000000CCCCCCCCCC2015CO2 SavingsFig. 8.24", + "verified": true, + "linkedPage": 219 + }, + { + "level": 0, + "text": "0Fig. 8.25", + "verified": true, + "linkedPage": 220 + }, + { + "level": 0, + "text": "CCCCCCCCCCryFig. 8.26", + "verified": true, + "linkedPage": 231 + }, + { + "level": 0, + "text": "Fig. 8.27", + "verified": true, + "linkedPage": 232 + }, + { + "level": 0, + "text": "238cton Fig. 8.28", + "verified": true, + "linkedPage": 233 + }, + { + "level": 0, + "text": "Fig. 8.29", + "verified": true, + "linkedPage": 235 + }, + { + "level": 0, + "text": "00000000CCCCCCCCCC0rdElicheatinglar heatingsFig. 8.30", + "verified": true, + "linkedPage": 236 + }, + { + "level": 0, + "text": "Fig. 8.31", + "verified": true, + "linkedPage": 237 + }, + { + "level": 0, + "text": "rFig. 8.32", + "verified": true, + "linkedPage": 239 + }, + { + "level": 0, + "text": "0204002015cumulated emissions COemi2 ssions SavingsFig. 8.33", + "verified": true, + "linkedPage": 240 + }, + { + "level": 0, + "text": "Fig. 8.34", + "verified": true, + "linkedPage": 241 + }, + { + "level": 0, + "text": "CCCCCCCCCCrssFig. 8.35", + "verified": true, + "linkedPage": 251 + }, + { + "level": 0, + "text": "Fig. 8.36268", + "verified": true, + "linkedPage": 253 + }, + { + "level": 0, + "text": "28Fig. 8.37", + "verified": true, + "linkedPage": 253 + }, + { + "level": 0, + "text": "Fig. 8.38", + "verified": true, + "linkedPage": 255 + }, + { + "level": 0, + "text": "CCCCCCCCCCggsFig. 8.39", + "verified": true, + "linkedPage": 256 + }, + { + "level": 0, + "text": "Fig. 8.40", + "verified": true, + "linkedPage": 257 + }, + { + "level": 0, + "text": "CCCCCCCCCCsFig. 8.41", + "verified": true, + "linkedPage": 259 + }, + { + "level": 0, + "text": "02060 00000000CCCCCCCCCC20150emissions COemissions 2 SavingsCCFig. 8.42", + "verified": true, + "linkedPage": 260 + }, + { + "level": 0, + "text": "CCCCCCCCCCdsrFig. 8.43", + "verified": true, + "linkedPage": 261 + }, + { + "level": 0, + "text": "AfricaCCCCCCCCCCyFig. 8.44", + "verified": true, + "linkedPage": 269 + }, + { + "level": 0, + "text": "CCCCCCCCCCPolFig. 8.45", + "verified": true, + "linkedPage": 271 + }, + { + "level": 0, + "text": "Fig. 8.46", + "verified": true, + "linkedPage": 272 + }, + { + "level": 0, + "text": "CCCCCCCCCCgsgsFig. 8.47", + "verified": true, + "linkedPage": 274 + }, + { + "level": 0, + "text": "CCCCCCCCCCgsgsFig. 8.48", + "verified": true, + "linkedPage": 274 + }, + { + "level": 0, + "text": "Fig. 8.49", + "verified": true, + "linkedPage": 276 + }, + { + "level": 0, + "text": "0000000CCCCCCCCCC0nsFig. 8.50", + "verified": true, + "linkedPage": 278 + }, + { + "level": 0, + "text": "020 0CCCCCCCCCC2010emissions COemissions 2 SavingsCFig. 8.51 00CCCCCCCCCC20150s", + "verified": true, + "linkedPage": 279 + }, + { + "level": 0, + "text": "CCCCCCCCCC522 sCCCCCCCCCCCsFig. 8.52", + "verified": true, + "linkedPage": 279 + }, + { + "level": 0, + "text": "CCCCCCCCCCsTyFig. 8.53", + "verified": true, + "linkedPage": 287 + }, + { + "level": 0, + "text": "CCCCCCCCCCPsolFig. 8.54", + "verified": true, + "linkedPage": 289 + }, + { + "level": 0, + "text": "Fig. 8.55", + "verified": true, + "linkedPage": 290 + }, + { + "level": 0, + "text": "CCCCCCCCCCsslFig. 8.56", + "verified": true, + "linkedPage": 292 + }, + { + "level": 0, + "text": "CCCCCCCCCCysslFig. 8.57", + "verified": true, + "linkedPage": 292 + }, + { + "level": 0, + "text": "Fig. 8.58", + "verified": true, + "linkedPage": 294 + }, + { + "level": 0, + "text": "2CCCCCCCCCCsFig. 8.59", + "verified": true, + "linkedPage": 296 + }, + { + "level": 0, + "text": "02060 0CCCCCCCCCC2010emissions COemissions 2 SavingsCCFig. 8.60000000CCCCCCCCCC20150sr", + "verified": true, + "linkedPage": 297 + }, + { + "level": 0, + "text": "CCCCCCCCCC2 CCCCCCCCCCCCsrFig. 8.61", + "verified": true, + "linkedPage": 297 + }, + { + "level": 0, + "text": "Eastern Europe/Eurasia 0 00TFig. 8.62", + "verified": true, + "linkedPage": 306 + }, + { + "level": 0, + "text": "0000000CCCCCCCCCC0rPsorleFig. 8.63", + "verified": true, + "linkedPage": 309 + }, + { + "level": 0, + "text": "0000000CCCCCCCCCC0rPsorleFig. 8.64", + "verified": true, + "linkedPage": 309 + }, + { + "level": 0, + "text": "Fig. 8.65", + "verified": true, + "linkedPage": 311 + }, + { + "level": 0, + "text": "CCCCCCCCCCnsgsFig. 8.66", + "verified": true, + "linkedPage": 312 + }, + { + "level": 0, + "text": "Fig. 8.67", + "verified": true, + "linkedPage": 314 + }, + { + "level": 0, + "text": "CCCCCCCCCCysFig. 8.68", + "verified": true, + "linkedPage": 315 + }, + { + "level": 0, + "text": "020 000000CCCCCCCCCC20150emissions COemissions 2 SavingsCCFig. 8.69", + "verified": true, + "linkedPage": 316 + }, + { + "level": 0, + "text": "0CCCCCCCCCC0dsrFig. 8.70Scenario", + "verified": true, + "linkedPage": 317 + }, + { + "level": 0, + "text": "CCCCCCCCCCrsIyyFig. 8.71Non-OECD Asia", + "verified": true, + "linkedPage": 325 + }, + { + "level": 0, + "text": "yeFig. 8.72", + "verified": true, + "linkedPage": 327 + }, + { + "level": 0, + "text": "Fig. 8.73", + "verified": true, + "linkedPage": 328 + }, + { + "level": 0, + "text": "Fig. 8.74", + "verified": true, + "linkedPage": 329 + }, + { + "level": 0, + "text": "00000CCCCCCCCCC0ngsslFig. 8.75", + "verified": true, + "linkedPage": 330 + }, + { + "level": 0, + "text": "Fig. 8.76", + "verified": true, + "linkedPage": 332 + }, + { + "level": 0, + "text": "CCCCCCCCCCsFig. 8.77", + "verified": true, + "linkedPage": 333 + }, + { + "level": 0, + "text": "2 Emissions020 0000000CCCCCCCCCC2010emissions COemissions 2 SavingsCCFig. 8.78", + "verified": true, + "linkedPage": 334 + }, + { + "level": 0, + "text": "CCCCCCCCCCsFig. 8.79", + "verified": true, + "linkedPage": 335 + }, + { + "level": 0, + "text": "India 0000000000 000000000CCCCCCCCCC0y 0Fig. 8.80", + "verified": true, + "linkedPage": 345 + }, + { + "level": 0, + "text": "eFig. 8.81", + "verified": true, + "linkedPage": 347 + }, + { + "level": 0, + "text": "Fig. 8.82", + "verified": true, + "linkedPage": 348 + }, + { + "level": 0, + "text": "Fig. 8.83", + "verified": true, + "linkedPage": 349 + }, + { + "level": 0, + "text": "00CCCCCCCCCC0gsgsFig. 8.84", + "verified": true, + "linkedPage": 350 + }, + { + "level": 0, + "text": "2Fig. 8.85", + "verified": true, + "linkedPage": 352 + }, + { + "level": 0, + "text": "Fig. 8.86", + "verified": true, + "linkedPage": 353 + }, + { + "level": 0, + "text": "020 02015CO2SavingsFig. 8.87", + "verified": true, + "linkedPage": 354 + }, + { + "level": 0, + "text": "CCCCCCCCCCsrFig. 8.88", + "verified": true, + "linkedPage": 355 + }, + { + "level": 0, + "text": "ChinaFig. 8.89", + "verified": true, + "linkedPage": 361 + }, + { + "level": 0, + "text": "0lFig. 8.90", + "verified": true, + "linkedPage": 363 + }, + { + "level": 0, + "text": "Fig. 8.91", + "verified": true, + "linkedPage": 364 + }, + { + "level": 0, + "text": "Fig. 8.92", + "verified": true, + "linkedPage": 366 + }, + { + "level": 0, + "text": "Fig. 8.93", + "verified": true, + "linkedPage": 366 + }, + { + "level": 0, + "text": "Fig. 8.94", + "verified": true, + "linkedPage": 369 + }, + { + "level": 0, + "text": "0Fig. 8.95", + "verified": true, + "linkedPage": 370 + }, + { + "level": 0, + "text": "0 02015CO2 SavingsFig. 8.96 0000000CCCCCCCCCC2015sr", + "verified": true, + "linkedPage": 371 + }, + { + "level": 0, + "text": "CCCCCCCCCCsrFig. 8.97", + "verified": true, + "linkedPage": 371 + }, + { + "level": 0, + "text": "OECD PacificCCCCCCCCCCsyyFig. 8.98", + "verified": true, + "linkedPage": 381 + }, + { + "level": 0, + "text": "CCCCCCCCCCrPolleFig. 8.99", + "verified": true, + "linkedPage": 383 + }, + { + "level": 0, + "text": "Fig. 8.100", + "verified": true, + "linkedPage": 384 + }, + { + "level": 0, + "text": "Fig. 8.101", + "verified": true, + "linkedPage": 385 + }, + { + "level": 0, + "text": "0Fig. 8.102", + "verified": true, + "linkedPage": 386 + }, + { + "level": 0, + "text": "Fig. 8.103", + "verified": true, + "linkedPage": 388 + }, + { + "level": 0, + "text": "00000000CCCCCCCCCCysFig. 8.104", + "verified": true, + "linkedPage": 389 + }, + { + "level": 0, + "text": "2 Emissions01020 02015CO2 SavingsFig. 8.105", + "verified": true, + "linkedPage": 390 + }, + { + "level": 0, + "text": "00CCCCCCCCCCsrFig. 8.106", + "verified": true, + "linkedPage": 391 + }, + { + "level": 0, + "text": "List of FigureslFig. 9.1Global coal production in 1981–2017 (BP 2018—Statistical Review)", + "verified": false, + "linkedPage": 405 + }, + { + "level": 0, + "text": "Fig. 9.2Global coal production until 2050 under the three scenarios", + "verified": false, + "linkedPage": 405 + }, + { + "level": 0, + "text": "Fig. 9.3Global oil production in 1965–2017 (BP 2018—Statistical Review)", + "verified": false, + "linkedPage": 406 + }, + { + "level": 0, + "text": "Fig. 9.4Global oil production until 2050 under the three scenarios", + "verified": false, + "linkedPage": 407 + }, + { + "level": 0, + "text": "9.5", + "verified": true, + "linkedPage": 408 + }, + { + "level": 0, + "text": "Fig. 9.6Global gas production until 2050 under the three scenarios", + "verified": false, + "linkedPage": 408 + }, + { + "level": 0, + "text": "Fig. 10.1World employment in the energy sector under the 5.0 °C and 2.0 °C Scenarios (left) and the 5.0 °C and 1.5 °C Scenarios (right)", + "verified": false, + "linkedPage": 418 + }, + { + "level": 0, + "text": "Fig. 10.2Distribution of human resources required to manufacture the main components of a 50 MW solar photovoltaic power plant. (IRENA 2017a)", + "verified": false, + "linkedPage": 420 + }, + { + "level": 0, + "text": "Fig. 10.3Division of occupations between fossil fuels and renewable energy in 2015 and 2025 under the 1.5 °C Scenario", + "verified": false, + "linkedPage": 427 + }, + { + "level": 0, + "text": "Fig. 10.4Division of occupations between fossil fuels and renewable energy in 2015 and 2025 under the 2.0 °C Scenario", + "verified": false, + "linkedPage": 428 + }, + { + "level": 0, + "text": "......", + "verified": true, + "linkedPage": 433 + }, + { + "level": 0, + "text": "Fig. 10.6Employment changes between 2015 and 2025 by occupational breakdown under the 1.5 °C Scenario", + "verified": false, + "linkedPage": 434 + }, + { + "level": 0, + "text": "Fig. 11.1Overview of key metal requirements and supply chain for solar PV", + "verified": false, + "linkedPage": 439 + }, + { + "level": 0, + "text": "Fig. 11.2Overview of key metal requirements and supply chain for wind power", + "verified": false, + "linkedPage": 440 + }, + { + "level": 0, + "text": "Fig. 11.3Overview of key metal requirements and supply chain for LIB and EV", + "verified": false, + "linkedPage": 441 + }, + { + "level": 0, + "text": "Fig. 11.4Cumulative demand from renewable energy and transport technologies to 2050 compared with reserves", + "verified": false, + "linkedPage": 446 + }, + { + "level": 0, + "text": "Fig. 11.5Annual demand from renewable energy and storage technologies in 2050 compared with current production rates (note that scale varies across the metals)", + "verified": false, + "linkedPage": 446 + }, + { + "level": 0, + "text": "Fig. 11.6Annual primary demand for cobalt from EVs and storage", + "verified": false, + "linkedPage": 447 + }, + { + "level": 0, + "text": "Fig. 11.7Cumulative primary demand for cobalt from EVs and storage by 2050", + "verified": false, + "linkedPage": 447 + }, + { + "level": 0, + "text": "Fig. 11.8Annual primary demand for lithium from EVs and storage", + "verified": false, + "linkedPage": 448 + }, + { + "level": 0, + "text": "Fig. 11.9Cumulative primary demand for lithium from EVs and storage by 2050", + "verified": false, + "linkedPage": 449 + }, + { + "level": 0, + "text": "List of FiguresliFig. 11.10Annual primary demand for silver from solar PV (c-Si)", + "verified": false, + "linkedPage": 449 + }, + { + "level": 0, + "text": "Fig. 11.11Cumulative primary demand for silver from solar PV (c-Si) by 2050", + "verified": false, + "linkedPage": 450 + }, + { + "level": 0, + "text": "Fig. 11.12Top five oil-producing countries (left) versus lithium-producing countries (right)", + "verified": false, + "linkedPage": 453 + }, + { + "level": 0, + "text": "Fig. 12.1Global CO2, CH4 and N2O concentrations under various scenarios. The so-called SSP scenarios are going to inform the Sixth Assessment Report by the IPCC, the RCP scenarios are the previous generation of scenarios and the LDF scenarios are those developed in this study", + "verified": false, + "linkedPage": 462 + }, + { + "level": 0, + "text": "Fig. 12.2CO2 equivalence concentrations and radiative forcing of main IPCC scenarios for the forthcoming Sixth Assessment (so-called SSP scenarios), the RCP scenarios underlying the Fifth IPCC Assessment Report and the LDF scenarios developed in this study", + "verified": false, + "linkedPage": 463 + }, + { + "level": 0, + "text": "Fig. 12.3Global cumulative CO2 emissions – 2.0 °C and 1.5 °C scenarios", + "verified": false, + "linkedPage": 464 + }, + { + "level": 0, + "text": "Fig. 12.4Global-mean surface air temperature projections", + "verified": false, + "linkedPage": 467 + }, + { + "level": 0, + "text": "Fig. 12.5Global-mean sea level rise projections under the three scenarios developed in this study", + "verified": false, + "linkedPage": 468 + } ] } } diff --git a/examples/Achieving-The-Paris-Climate-Agreement/removeRepetitiveItems.json b/examples/Achieving-The-Paris-Climate-Agreement/removeRepetitiveItems.json index df77867..8288b2a 100644 --- a/examples/Achieving-The-Paris-Climate-Agreement/removeRepetitiveItems.json +++ b/examples/Achieving-The-Paris-Climate-Agreement/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 66, + "mostUsedHeight": 8, "minX": 41.38153078000005, "maxX": 400.56930541, "minY": 36.71720123, diff --git a/examples/Achieving-The-Paris-Climate-Agreement/sortbyX.json b/examples/Achieving-The-Paris-Climate-Agreement/sortbyX.json index c4a0e9f..2a06fcd 100644 --- a/examples/Achieving-The-Paris-Climate-Agreement/sortbyX.json +++ b/examples/Achieving-The-Paris-Climate-Agreement/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 66, + "mostUsedHeight": 8, "minX": 41.38153078000005, "maxX": 400.56930541, "minY": 36.71720123, diff --git a/examples/Adventures-Of-Sherlock-Holmes/calculateStatistics.json b/examples/Adventures-Of-Sherlock-Holmes/calculateStatistics.json index ce788f4..8acfa35 100644 --- a/examples/Adventures-Of-Sherlock-Holmes/calculateStatistics.json +++ b/examples/Adventures-Of-Sherlock-Holmes/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 59.7758, + "mostUsedHeight": 10, "minX": 117.8279999999999, "maxX": 471.0319307, "minY": 95.28300000000016, diff --git a/examples/Adventures-Of-Sherlock-Holmes/compactLines.json b/examples/Adventures-Of-Sherlock-Holmes/compactLines.json index 79aa7c0..5bfb91b 100644 --- a/examples/Adventures-Of-Sherlock-Holmes/compactLines.json +++ b/examples/Adventures-Of-Sherlock-Holmes/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 59.7758, + "mostUsedHeight": 10, "minX": 117.8279999999999, "maxX": 471.0319307, "minY": 95.28300000000016, diff --git a/examples/Adventures-Of-Sherlock-Holmes/detectTOC.json b/examples/Adventures-Of-Sherlock-Holmes/detectTOC.json index 18d9c13..e663416 100644 --- a/examples/Adventures-Of-Sherlock-Holmes/detectTOC.json +++ b/examples/Adventures-Of-Sherlock-Holmes/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 59.7758, + "mostUsedHeight": 10, "minX": 117.8279999999999, "maxX": 471.0319307, "minY": 95.28300000000016, @@ -46,6 +47,80 @@ "toc": { "pages": [ 3 + ], + "entries": [ + { + "level": 0, + "text": "A Scandal In BohemiaI", + "verified": true, + "linkedPage": 3 + }, + { + "level": 0, + "text": "The Red-Headed League", + "verified": true, + "linkedPage": 21 + }, + { + "level": 0, + "text": "A Case Of Identity", + "verified": true, + "linkedPage": 38 + }, + { + "level": 0, + "text": "The Boscombe Valley Mystery", + "verified": true, + "linkedPage": 51 + }, + { + "level": 0, + "text": "The Five Orange Pips", + "verified": true, + "linkedPage": 69 + }, + { + "level": 0, + "text": "The Man With The Twisted LipI", + "verified": true, + "linkedPage": 83 + }, + { + "level": 0, + "text": "The Adventure Of The BlueCarbuncle", + "verified": true, + "linkedPage": 100 + }, + { + "level": 0, + "text": "The Adventure Of The SpeckledBandO", + "verified": true, + "linkedPage": 115 + }, + { + "level": 0, + "text": "The Adventure Of TheEngineer’s ThumbO", + "verified": true, + "linkedPage": 133 + }, + { + "level": 0, + "text": "The Adventure Of The NobleBachelorT", + "verified": true, + "linkedPage": 148 + }, + { + "level": 0, + "text": "The Adventure Of The BerylCoronetH", + "verified": true, + "linkedPage": 164 + }, + { + "level": 0, + "text": "The Adventure Of The CopperBeechesT", + "verified": true, + "linkedPage": 182 + } ] } } diff --git a/examples/Adventures-Of-Sherlock-Holmes/removeRepetitiveItems.json b/examples/Adventures-Of-Sherlock-Holmes/removeRepetitiveItems.json index c68f50a..248f822 100644 --- a/examples/Adventures-Of-Sherlock-Holmes/removeRepetitiveItems.json +++ b/examples/Adventures-Of-Sherlock-Holmes/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 59.7758, + "mostUsedHeight": 10, "minX": 117.8279999999999, "maxX": 471.0319307, "minY": 95.28300000000016, diff --git a/examples/Adventures-Of-Sherlock-Holmes/sortbyX.json b/examples/Adventures-Of-Sherlock-Holmes/sortbyX.json index 14ef5f7..88c596e 100644 --- a/examples/Adventures-Of-Sherlock-Holmes/sortbyX.json +++ b/examples/Adventures-Of-Sherlock-Holmes/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 59.7758, + "mostUsedHeight": 10, "minX": 117.8279999999999, "maxX": 471.0319307, "minY": 95.28300000000016, diff --git a/examples/Alice-In-Wonderland/calculateStatistics.json b/examples/Alice-In-Wonderland/calculateStatistics.json index ab4b7e6..d82b27a 100644 --- a/examples/Alice-In-Wonderland/calculateStatistics.json +++ b/examples/Alice-In-Wonderland/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 24.787, + "mostUsedHeight": 11, "minX": 102.88399999999984, "maxX": 488.43800000000005, "minY": 95.545, diff --git a/examples/Alice-In-Wonderland/compactLines.json b/examples/Alice-In-Wonderland/compactLines.json index 5fd3782..c7a3ea3 100644 --- a/examples/Alice-In-Wonderland/compactLines.json +++ b/examples/Alice-In-Wonderland/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 24.787, + "mostUsedHeight": 11, "minX": 102.88399999999984, "maxX": 488.43800000000005, "minY": 95.545, diff --git a/examples/Alice-In-Wonderland/detectTOC.json b/examples/Alice-In-Wonderland/detectTOC.json index f6ef8ee..7333fe6 100644 --- a/examples/Alice-In-Wonderland/detectTOC.json +++ b/examples/Alice-In-Wonderland/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 24.787, + "mostUsedHeight": 11, "minX": 102.88399999999984, "maxX": 488.43800000000005, "minY": 95.545, @@ -46,6 +47,86 @@ "toc": { "pages": [ 1 + ], + "entries": [ + { + "level": 0, + "text": "Poem", + "verified": true, + "linkedPage": 3 + }, + { + "level": 0, + "text": "Down the Rabbit-Hole", + "verified": true, + "linkedPage": 4 + }, + { + "level": 0, + "text": "The Pool of Tears", + "verified": true, + "linkedPage": 9 + }, + { + "level": 0, + "text": "A Caucus-Race and a Long Tale", + "verified": true, + "linkedPage": 14 + }, + { + "level": 0, + "text": "The Rabbit Sends in a Little Bill", + "verified": true, + "linkedPage": 19 + }, + { + "level": 0, + "text": "Advice from a Caterpillar", + "verified": true, + "linkedPage": 25 + }, + { + "level": 0, + "text": "Pig and Pepper", + "verified": true, + "linkedPage": 32 + }, + { + "level": 0, + "text": "A Mad Tea-Party", + "verified": true, + "linkedPage": 39 + }, + { + "level": 0, + "text": "The Queen’s Croquet-Ground", + "verified": true, + "linkedPage": 46 + }, + { + "level": 0, + "text": "The Mock Turtle’s Story", + "verified": true, + "linkedPage": 53 + }, + { + "level": 0, + "text": "The Lobster Quadrille", + "verified": true, + "linkedPage": 59 + }, + { + "level": 0, + "text": "Who Stole the Tarts?", + "verified": true, + "linkedPage": 65 + }, + { + "level": 0, + "text": "Alice’s Evidence", + "verified": true, + "linkedPage": 70 + } ] } } diff --git a/examples/Alice-In-Wonderland/removeRepetitiveItems.json b/examples/Alice-In-Wonderland/removeRepetitiveItems.json index 5a238e3..dda17a7 100644 --- a/examples/Alice-In-Wonderland/removeRepetitiveItems.json +++ b/examples/Alice-In-Wonderland/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 24.787, + "mostUsedHeight": 11, "minX": 102.88399999999984, "maxX": 488.43800000000005, "minY": 95.545, diff --git a/examples/Alice-In-Wonderland/sortbyX.json b/examples/Alice-In-Wonderland/sortbyX.json index 3554739..cee28de 100644 --- a/examples/Alice-In-Wonderland/sortbyX.json +++ b/examples/Alice-In-Wonderland/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 24.787, + "mostUsedHeight": 11, "minX": 102.88399999999984, "maxX": 488.43800000000005, "minY": 95.545, diff --git a/examples/CC-NC_Leitfaden/calculateStatistics.json b/examples/CC-NC_Leitfaden/calculateStatistics.json index 8b221b6..d3f5268 100644 --- a/examples/CC-NC_Leitfaden/calculateStatistics.json +++ b/examples/CC-NC_Leitfaden/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 24, + "mostUsedHeight": 9, "minX": 34.01229999999998, "maxX": 380.3863, "minY": 26.9291, diff --git a/examples/CC-NC_Leitfaden/compactLines.json b/examples/CC-NC_Leitfaden/compactLines.json index 64276ff..731b027 100644 --- a/examples/CC-NC_Leitfaden/compactLines.json +++ b/examples/CC-NC_Leitfaden/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 24, + "mostUsedHeight": 9, "minX": 34.01229999999998, "maxX": 380.3863, "minY": 26.9291, diff --git a/examples/CC-NC_Leitfaden/detectTOC.json b/examples/CC-NC_Leitfaden/detectTOC.json index 5eacaa9..34a2a76 100644 --- a/examples/CC-NC_Leitfaden/detectTOC.json +++ b/examples/CC-NC_Leitfaden/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 24, + "mostUsedHeight": 9, "minX": 34.01229999999998, "maxX": 380.3863, "minY": 26.9291, @@ -46,6 +47,152 @@ "toc": { "pages": [ 3 + ], + "entries": [ + { + "level": 0, + "text": "vorWort", + "verified": true, + "linkedPage": 3 + }, + { + "level": 0, + "text": "einFührung", + "verified": true, + "linkedPage": 5 + }, + { + "level": 0, + "text": "1Was versteht man unter Open COntent?", + "verified": true, + "linkedPage": 6 + }, + { + "level": 0, + "text": "2Warum Werden Inhalte unter eIneCC-lIzenz gestellt?", + "verified": true, + "linkedPage": 8 + }, + { + "level": 0, + "text": "3sChIedlIChe CC-lIzenzen?", + "verified": true, + "linkedPage": 9 + }, + { + "level": 0, + "text": "4WIe WIrkt sICh das nC-mOdul darauf aus, WIe Inhalte verbreItet Werden?", + "verified": true, + "linkedPage": 10 + }, + { + "level": 0, + "text": "5Was Ist kOmmerzIell?", + "verified": true, + "linkedPage": 11 + }, + { + "level": 0, + "text": "6kann eIne CC-lIzenz mIt nC-mOdul verhIndern, dass meIne Inhalte durCh reChtsradIkale Oder andere extremIsten genutzt Werden?", + "verified": true, + "linkedPage": 12 + }, + { + "level": 0, + "text": "7ICh WIll, dass meIn Inhalt unter eIner CC-lIzenz freIzugänglICh bleIbt. Ist das lIChkeIt, eIner aneIgnung merzIelle unternehmen vOrzubeugen?", + "verified": true, + "linkedPage": 13 + }, + { + "level": 0, + "text": "8kann eIn CC-nC lIzenzIerter gestellt Werden?", + "verified": true, + "linkedPage": 14 + }, + { + "level": 0, + "text": "9kann man eInen nC-lIzenzIerten Inhalt kung gesOndert für WIkI pedIa freIgeben?", + "verified": true, + "linkedPage": 15 + }, + { + "level": 0, + "text": "10verhIndert das nC-mOdul, dass Inhalte kOmmerzIell genutzt Werden?", + "verified": true, + "linkedPage": 15 + }, + { + "level": 0, + "text": "11bIn ICh bereIt, gegen eIne ner Inhalte vOrzugehen?", + "verified": true, + "linkedPage": 16 + }, + { + "level": 0, + "text": "12können nC-lIzenzIerteInhalte In zeItungenabgedruCkt Werden?", + "verified": true, + "linkedPage": 16 + }, + { + "level": 0, + "text": "13Inhalte In allen sChulen, sItäten genutzt Werden?", + "verified": true, + "linkedPage": 17 + }, + { + "level": 0, + "text": "14WIe Ist es zu beWerten, te zunäChst In der sChule verWendet, dann aber auCh nutzt Werden sOllen?", + "verified": true, + "linkedPage": 17 + }, + { + "level": 0, + "text": "15WIe WIrkt sICh nC auf mashups aus?", + "verified": true, + "linkedPage": 18 + }, + { + "level": 0, + "text": "16darf ICh als gema-mItglIed ter eIne CC-lIzenz mIt nC-mOdul stellen?", + "verified": true, + "linkedPage": 19 + }, + { + "level": 0, + "text": "17kann eIne kOmmerzIelle nutzung durCh drItte dem urheber nutzen?", + "verified": true, + "linkedPage": 20 + }, + { + "level": 0, + "text": "18darf eIn nutzer vOn CC-lIzenzIerten Inhalten den eIndruCk erWeCken, der urheber Würde dIe lICh unterstützen?", + "verified": true, + "linkedPage": 20 + }, + { + "level": 0, + "text": "19kann das nC-mOdul beI CC-lIzenzen sInnvOll seIn?", + "verified": true, + "linkedPage": 21 + }, + { + "level": 0, + "text": "20unter WelCher CC-lIzenz stehen WIkIpedIa-Inhalte?", + "verified": true, + "linkedPage": 21 + }, + { + "level": 0, + "text": "Literatur und Links zur Vertiefung", + "verified": false, + "linkedPage": 22 + }, + { + "level": 0, + "text": "impressum", + "verified": true, + "linkedPage": 23 + } ] } } diff --git a/examples/CC-NC_Leitfaden/removeRepetitiveItems.json b/examples/CC-NC_Leitfaden/removeRepetitiveItems.json index 47ab754..c04e69b 100644 --- a/examples/CC-NC_Leitfaden/removeRepetitiveItems.json +++ b/examples/CC-NC_Leitfaden/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 24, + "mostUsedHeight": 9, "minX": 34.01229999999998, "maxX": 380.3863, "minY": 26.9291, diff --git a/examples/CC-NC_Leitfaden/sortbyX.json b/examples/CC-NC_Leitfaden/sortbyX.json index 7e7a3ea..05eb295 100644 --- a/examples/CC-NC_Leitfaden/sortbyX.json +++ b/examples/CC-NC_Leitfaden/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 24, + "mostUsedHeight": 9, "minX": 34.01229999999998, "maxX": 380.3863, "minY": 26.9291, diff --git a/examples/CC_License_Agreement_of_siMPle/calculateStatistics.json b/examples/CC_License_Agreement_of_siMPle/calculateStatistics.json index 9e6a4f6..99e5c9e 100644 --- a/examples/CC_License_Agreement_of_siMPle/calculateStatistics.json +++ b/examples/CC_License_Agreement_of_siMPle/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 16.02, + "mostUsedHeight": 13, "minX": 25.86, "maxX": 535.44, "minY": 38.1, diff --git a/examples/CC_License_Agreement_of_siMPle/compactLines.json b/examples/CC_License_Agreement_of_siMPle/compactLines.json index eb58890..c2d1d83 100644 --- a/examples/CC_License_Agreement_of_siMPle/compactLines.json +++ b/examples/CC_License_Agreement_of_siMPle/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 16.02, + "mostUsedHeight": 13, "minX": 25.86, "maxX": 535.44, "minY": 38.1, diff --git a/examples/CC_License_Agreement_of_siMPle/detectTOC.json b/examples/CC_License_Agreement_of_siMPle/detectTOC.json index af42c79..1926af4 100644 --- a/examples/CC_License_Agreement_of_siMPle/detectTOC.json +++ b/examples/CC_License_Agreement_of_siMPle/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 16.02, + "mostUsedHeight": 13, "minX": 25.86, "maxX": 535.44, "minY": 38.1, diff --git a/examples/CC_License_Agreement_of_siMPle/removeRepetitiveItems.json b/examples/CC_License_Agreement_of_siMPle/removeRepetitiveItems.json index 1a474db..f537578 100644 --- a/examples/CC_License_Agreement_of_siMPle/removeRepetitiveItems.json +++ b/examples/CC_License_Agreement_of_siMPle/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 16.02, + "mostUsedHeight": 13, "minX": 25.86, "maxX": 535.44, "minY": 38.1, diff --git a/examples/CC_License_Agreement_of_siMPle/sortbyX.json b/examples/CC_License_Agreement_of_siMPle/sortbyX.json index 5012489..c218d9d 100644 --- a/examples/CC_License_Agreement_of_siMPle/sortbyX.json +++ b/examples/CC_License_Agreement_of_siMPle/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 16.02, + "mostUsedHeight": 13, "minX": 25.86, "maxX": 535.44, "minY": 38.1, diff --git a/examples/Closed-Syllables/calculateStatistics.json b/examples/Closed-Syllables/calculateStatistics.json index 7b912f2..5f75bef 100644 --- a/examples/Closed-Syllables/calculateStatistics.json +++ b/examples/Closed-Syllables/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 18, + "mostUsedHeight": 11, "minX": 72.024, "maxX": 534.58, "minY": 63.144, diff --git a/examples/Closed-Syllables/compactLines.json b/examples/Closed-Syllables/compactLines.json index ccefee6..a5303d5 100644 --- a/examples/Closed-Syllables/compactLines.json +++ b/examples/Closed-Syllables/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 18, + "mostUsedHeight": 11, "minX": 72.024, "maxX": 534.58, "minY": 63.144, diff --git a/examples/Closed-Syllables/detectTOC.json b/examples/Closed-Syllables/detectTOC.json index 2fe1f82..0017d60 100644 --- a/examples/Closed-Syllables/detectTOC.json +++ b/examples/Closed-Syllables/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 18, + "mostUsedHeight": 11, "minX": 72.024, "maxX": 534.58, "minY": 63.144, @@ -46,6 +47,44 @@ "toc": { "pages": [ 1 + ], + "entries": [ + { + "level": 0, + "text": "“short a”", + "verified": false, + "linkedPage": 3 + }, + { + "level": 0, + "text": "“short I”", + "verified": false, + "linkedPage": 8 + }, + { + "level": 0, + "text": "“short o”", + "verified": false, + "linkedPage": 10 + }, + { + "level": 0, + "text": "“short u”", + "verified": false, + "linkedPage": 12 + }, + { + "level": 0, + "text": "E", + "verified": false, + "linkedPage": 14 + }, + { + "level": 0, + "text": "Y", + "verified": false, + "linkedPage": 16 + } ] } } diff --git a/examples/Closed-Syllables/removeRepetitiveItems.json b/examples/Closed-Syllables/removeRepetitiveItems.json index 83d8489..28af7a2 100644 --- a/examples/Closed-Syllables/removeRepetitiveItems.json +++ b/examples/Closed-Syllables/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 18, + "mostUsedHeight": 11, "minX": 72.024, "maxX": 534.58, "minY": 63.144, diff --git a/examples/Closed-Syllables/sortbyX.json b/examples/Closed-Syllables/sortbyX.json index 30b0718..c394a6b 100644 --- a/examples/Closed-Syllables/sortbyX.json +++ b/examples/Closed-Syllables/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 18, + "mostUsedHeight": 11, "minX": 72.024, "maxX": 534.58, "minY": 63.144, diff --git a/examples/ExamplePdf/calculateStatistics.json b/examples/ExamplePdf/calculateStatistics.json index b12dd84..9a9899e 100644 --- a/examples/ExamplePdf/calculateStatistics.json +++ b/examples/ExamplePdf/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 30, + "mostUsedHeight": 11, "minX": 56.69069, "maxX": 507.3787, "minY": 45, diff --git a/examples/ExamplePdf/compactLines.json b/examples/ExamplePdf/compactLines.json index 77d3e5c..63f3f05 100644 --- a/examples/ExamplePdf/compactLines.json +++ b/examples/ExamplePdf/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 30, + "mostUsedHeight": 11, "minX": 56.69069, "maxX": 507.3787, "minY": 45, diff --git a/examples/ExamplePdf/detectTOC.json b/examples/ExamplePdf/detectTOC.json index 3575b0b..779b083 100644 --- a/examples/ExamplePdf/detectTOC.json +++ b/examples/ExamplePdf/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 30, + "mostUsedHeight": 11, "minX": 56.69069, "maxX": 507.3787, "minY": 45, diff --git a/examples/ExamplePdf/removeRepetitiveItems.json b/examples/ExamplePdf/removeRepetitiveItems.json index 1cd1102..9b2ed9f 100644 --- a/examples/ExamplePdf/removeRepetitiveItems.json +++ b/examples/ExamplePdf/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 30, + "mostUsedHeight": 11, "minX": 56.69069, "maxX": 507.3787, "minY": 45, diff --git a/examples/ExamplePdf/sortbyX.json b/examples/ExamplePdf/sortbyX.json index 40db82b..e0a2512 100644 --- a/examples/ExamplePdf/sortbyX.json +++ b/examples/ExamplePdf/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 30, + "mostUsedHeight": 11, "minX": 56.69069, "maxX": 507.3787, "minY": 45, diff --git a/examples/Flash-Masques-Temperature/calculateStatistics.json b/examples/Flash-Masques-Temperature/calculateStatistics.json index 5c0d243..c26eabc 100644 --- a/examples/Flash-Masques-Temperature/calculateStatistics.json +++ b/examples/Flash-Masques-Temperature/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 29, + "mostUsedHeight": 11, "minX": 37.1206, "maxX": 542.2816, "minY": 36.1763, diff --git a/examples/Flash-Masques-Temperature/compactLines.json b/examples/Flash-Masques-Temperature/compactLines.json index d787573..8d677fb 100644 --- a/examples/Flash-Masques-Temperature/compactLines.json +++ b/examples/Flash-Masques-Temperature/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 29, + "mostUsedHeight": 11, "minX": 37.1206, "maxX": 542.2816, "minY": 36.1763, diff --git a/examples/Flash-Masques-Temperature/detectTOC.json b/examples/Flash-Masques-Temperature/detectTOC.json index 711719b..3c3f85d 100644 --- a/examples/Flash-Masques-Temperature/detectTOC.json +++ b/examples/Flash-Masques-Temperature/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 29, + "mostUsedHeight": 11, "minX": 37.1206, "maxX": 542.2816, "minY": 36.1763, diff --git a/examples/Flash-Masques-Temperature/removeRepetitiveItems.json b/examples/Flash-Masques-Temperature/removeRepetitiveItems.json index 0531ba3..850bd50 100644 --- a/examples/Flash-Masques-Temperature/removeRepetitiveItems.json +++ b/examples/Flash-Masques-Temperature/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 29, + "mostUsedHeight": 11, "minX": 37.1206, "maxX": 542.2816, "minY": 36.1763, diff --git a/examples/Flash-Masques-Temperature/sortbyX.json b/examples/Flash-Masques-Temperature/sortbyX.json index 07f9c66..168bad6 100644 --- a/examples/Flash-Masques-Temperature/sortbyX.json +++ b/examples/Flash-Masques-Temperature/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 29, + "mostUsedHeight": 11, "minX": 37.1206, "maxX": 542.2816, "minY": 36.1763, diff --git a/examples/Grammar-Matters/calculateStatistics.json b/examples/Grammar-Matters/calculateStatistics.json index beef961..62e1639 100644 --- a/examples/Grammar-Matters/calculateStatistics.json +++ b/examples/Grammar-Matters/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 48, + "mostUsedHeight": 12, "minX": 62.03970999999996, "maxX": 536.37986, "minY": 22.6801, diff --git a/examples/Grammar-Matters/compactLines.json b/examples/Grammar-Matters/compactLines.json index 57c7f9c..e66e771 100644 --- a/examples/Grammar-Matters/compactLines.json +++ b/examples/Grammar-Matters/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 48, + "mostUsedHeight": 12, "minX": 62.03970999999996, "maxX": 536.37986, "minY": 22.6801, diff --git a/examples/Grammar-Matters/detectTOC.json b/examples/Grammar-Matters/detectTOC.json index 7395bab..1c73218 100644 --- a/examples/Grammar-Matters/detectTOC.json +++ b/examples/Grammar-Matters/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 48, + "mostUsedHeight": 12, "minX": 62.03970999999996, "maxX": 536.37986, "minY": 22.6801, diff --git a/examples/Grammar-Matters/removeRepetitiveItems.json b/examples/Grammar-Matters/removeRepetitiveItems.json index 0ba3895..77bb95a 100644 --- a/examples/Grammar-Matters/removeRepetitiveItems.json +++ b/examples/Grammar-Matters/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 48, + "mostUsedHeight": 12, "minX": 62.03970999999996, "maxX": 536.37986, "minY": 22.6801, diff --git a/examples/Grammar-Matters/sortbyX.json b/examples/Grammar-Matters/sortbyX.json index 2b2e8be..b29af95 100644 --- a/examples/Grammar-Matters/sortbyX.json +++ b/examples/Grammar-Matters/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 48, + "mostUsedHeight": 12, "minX": 62.03970999999996, "maxX": 536.37986, "minY": 22.6801, diff --git a/examples/Life-Of-God-In-Soul-Of-Man/calculateStatistics.json b/examples/Life-Of-God-In-Soul-Of-Man/calculateStatistics.json index daa4a9e..9db0dab 100644 --- a/examples/Life-Of-God-In-Soul-Of-Man/calculateStatistics.json +++ b/examples/Life-Of-God-In-Soul-Of-Man/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 45.974399999999996, + "mostUsedHeight": 7, "minX": 26.29161, "maxX": 273.69135, "minY": 15.08535, diff --git a/examples/Life-Of-God-In-Soul-Of-Man/compactLines.json b/examples/Life-Of-God-In-Soul-Of-Man/compactLines.json index add9d63..0e32746 100644 --- a/examples/Life-Of-God-In-Soul-Of-Man/compactLines.json +++ b/examples/Life-Of-God-In-Soul-Of-Man/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 45.974399999999996, + "mostUsedHeight": 7, "minX": 26.29161, "maxX": 273.69135, "minY": 15.08535, diff --git a/examples/Life-Of-God-In-Soul-Of-Man/detectTOC.json b/examples/Life-Of-God-In-Soul-Of-Man/detectTOC.json index f46bace..69de281 100644 --- a/examples/Life-Of-God-In-Soul-Of-Man/detectTOC.json +++ b/examples/Life-Of-God-In-Soul-Of-Man/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 45.974399999999996, + "mostUsedHeight": 7, "minX": 26.29161, "maxX": 273.69135, "minY": 15.08535, @@ -48,6 +49,302 @@ 14, 15, 16 + ], + "entries": [ + { + "level": 0, + "text": "THEOFOF", + "verified": true, + "linkedPage": 3 + }, + { + "level": 0, + "text": "MISTAKESABOUTT", + "verified": true, + "linkedPage": 4 + }, + { + "level": 0, + "text": "WHATRELIGION", + "verified": true, + "linkedPage": 6 + }, + { + "level": 0, + "text": "AndTHEPERMANENCYANDOFTpermanencyandmanand", + "verified": true, + "linkedPage": 7 + }, + { + "level": 0, + "text": "RELIGIONAandandAndandmanand", + "verified": true, + "linkedPage": 13 + }, + { + "level": 0, + "text": "WHATTHENATURALThe", + "verified": true, + "linkedPage": 14 + }, + { + "level": 0, + "text": "ofTHEDIFFERENTOFTHERAL", + "verified": true, + "linkedPage": 15 + }, + { + "level": 0, + "text": "THEDOTH", + "verified": true, + "linkedPage": 20 + }, + { + "level": 0, + "text": "RELIGIONBETTERUNDERSTOODBYACTIONSTHANBYby", + "verified": true, + "linkedPage": 24 + }, + { + "level": 0, + "text": "LOVEEXEMPLIFIEDOUR", + "verified": true, + "linkedPage": 26 + }, + { + "level": 0, + "text": "IOURCONSTANTA", + "verified": true, + "linkedPage": 28 + }, + { + "level": 0, + "text": "OURCHARITYTO", + "verified": true, + "linkedPage": 29 + }, + { + "level": 0, + "text": "TOUR", + "verified": true, + "linkedPage": 31 + }, + { + "level": 0, + "text": "andandTHEANDADVANTAGEOFAND", + "verified": true, + "linkedPage": 38 + }, + { + "level": 0, + "text": "TheLTHEEXCELLENCYOF", + "verified": true, + "linkedPage": 39 + }, + { + "level": 0, + "text": "THEADVANTAGESOFThe", + "verified": true, + "linkedPage": 44 + }, + { + "level": 0, + "text": "THEWORTHOFTHE", + "verified": true, + "linkedPage": 45 + }, + { + "level": 0, + "text": "THECERTAINTYTOBELOVEDA", + "verified": true, + "linkedPage": 46 + }, + { + "level": 0, + "text": "HeLoveTHEOFTHEBELOVED", + "verified": true, + "linkedPage": 48 + }, + { + "level": 0, + "text": "makesTHELOVEMAKESUSPARTAKEOFANmakes", + "verified": true, + "linkedPage": 49 + }, + { + "level": 0, + "text": "HETHATLOVETHGODSWEETNESSEVERYNeverI", + "verified": true, + "linkedPage": 51 + }, + { + "level": 0, + "text": "himTHEDUTIESOFRELIGIONAREDELIGHTFULTOof", + "verified": true, + "linkedPage": 52 + }, + { + "level": 0, + "text": "THEOFThe", + "verified": true, + "linkedPage": 54 + }, + { + "level": 0, + "text": "THEPLEASURETHATATTENDSA", + "verified": true, + "linkedPage": 56 + }, + { + "level": 0, + "text": "THEEXCELLENCYOF", + "verified": true, + "linkedPage": 58 + }, + { + "level": 0, + "text": "THEDELIGHTAFFORDEDBYA", + "verified": true, + "linkedPage": 59 + }, + { + "level": 0, + "text": "THEEXCELLENCYOF", + "verified": true, + "linkedPage": 60 + }, + { + "level": 0, + "text": "THEPLEASUREANDSWEETNESSOFANHUMBLETEMPER.AandandandHeTheandandhumbleAnd", + "verified": true, + "linkedPage": 62 + }, + { + "level": 0, + "text": "A", + "verified": true, + "linkedPage": 65 + }, + { + "level": 0, + "text": "mememememeOOTHEDESPONDENTTHOUGHTSOFSOMELYAWAKENEDTOARIGHTSENSEOFT", + "verified": true, + "linkedPage": 66 + }, + { + "level": 0, + "text": "THEUNREASONABLENESSOFTHESE", + "verified": true, + "linkedPage": 69 + }, + { + "level": 0, + "text": "weandTheAndandandAndweandMUSTDOWHATWEANDDEPENDONTHEASSISTANCEandand", + "verified": true, + "linkedPage": 74 + }, + { + "level": 0, + "text": "weWEMUSTSHUNALLMANNEROFwewewewewewe", + "verified": true, + "linkedPage": 78 + }, + { + "level": 0, + "text": "weweweWEMUSTTHETEMPTATIONSOFBYTHETHEYWILLDRAWONweweweWewe", + "verified": true, + "linkedPage": 82 + }, + { + "level": 0, + "text": "weweTORESTRAINOURSELVESMANYLAWFULweweweweWemany", + "verified": true, + "linkedPage": 91 + }, + { + "level": 0, + "text": "MUSTTOPUTOURSELVESOUTOFLOVEWITHTHE", + "verified": true, + "linkedPage": 93 + }, + { + "level": 0, + "text": "WEMUSTDOTHOSEOUTWARDACTIONSTHATAREweweweweandwewe", + "verified": true, + "linkedPage": 98 + }, + { + "level": 0, + "text": "tion,Charity,&c", + "verified": false, + "linkedPage": 100 + }, + { + "level": 0, + "text": "TOBEGETWEMUSTCONSIDERTHEOFTHE", + "verified": true, + "linkedPage": 104 + }, + { + "level": 0, + "text": "GodweweandandweWESHOULDMEDITATEONGOODNESSANDwewe", + "verified": true, + "linkedPage": 108 + }, + { + "level": 0, + "text": "TOBEGETCHARITYWEMUSTREMEMBERTHATALLMENARENEARLYRELATEDUNTOweGod", + "verified": true, + "linkedPage": 113 + }, + { + "level": 0, + "text": "GodTHATTHEYCARRYIMAGEUPONAimageuponthemimage", + "verified": true, + "linkedPage": 114 + }, + { + "level": 0, + "text": "TOBEGETWESHOULDCONSIDERTHEDIGNITYOFOURwewewe", + "verified": true, + "linkedPage": 116 + }, + { + "level": 0, + "text": "WESHOULDMEDITATEOFTENONTHEJOYSOFHEAVEN.wewewewewe", + "verified": true, + "linkedPage": 117 + }, + { + "level": 0, + "text": "HUMILITYFROMTHECONSIDERATIONOFOUR", + "verified": true, + "linkedPage": 118 + }, + { + "level": 0, + "text": "THOUGHTSOFGODUSTHELOWESTTHOUGHTSOFOurwewewewe", + "verified": true, + "linkedPage": 120 + }, + { + "level": 0, + "text": "PRAYER,ANOTHEROFANDTHEADVANTAGESOFMENTALandand", + "verified": true, + "linkedPage": 121 + }, + { + "level": 0, + "text": "RELIGIONTOBYTHESAMEMEANSBYWHICHBEGUN;ANDTHEUSEOFTHEHOLYTOWARDSwhichandsamemeanswhichwhichwhichand", + "verified": true, + "linkedPage": 124 + }, + { + "level": 0, + "text": "AA", + "verified": true, + "linkedPage": 126 + } ] } } diff --git a/examples/Life-Of-God-In-Soul-Of-Man/removeRepetitiveItems.json b/examples/Life-Of-God-In-Soul-Of-Man/removeRepetitiveItems.json index 50ef185..35255ca 100644 --- a/examples/Life-Of-God-In-Soul-Of-Man/removeRepetitiveItems.json +++ b/examples/Life-Of-God-In-Soul-Of-Man/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 45.974399999999996, + "mostUsedHeight": 7, "minX": 26.29161, "maxX": 273.69135, "minY": 15.08535, diff --git a/examples/Life-Of-God-In-Soul-Of-Man/sortbyX.json b/examples/Life-Of-God-In-Soul-Of-Man/sortbyX.json index 671907f..64e1f3c 100644 --- a/examples/Life-Of-God-In-Soul-Of-Man/sortbyX.json +++ b/examples/Life-Of-God-In-Soul-Of-Man/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 45.974399999999996, + "mostUsedHeight": 7, "minX": 26.29161, "maxX": 273.69135, "minY": 15.08535, diff --git a/examples/Made-with-cc/calculateStatistics.json b/examples/Made-with-cc/calculateStatistics.json index 92944c2..d651fbc 100644 --- a/examples/Made-with-cc/calculateStatistics.json +++ b/examples/Made-with-cc/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 190, + "mostUsedHeight": 11, "minX": -97.924, "maxX": 566.7790999999999, "minY": 21.3071, diff --git a/examples/Made-with-cc/compactLines.json b/examples/Made-with-cc/compactLines.json index 47e1bad..9265312 100644 --- a/examples/Made-with-cc/compactLines.json +++ b/examples/Made-with-cc/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 190, + "mostUsedHeight": 11, "minX": -97.924, "maxX": 566.7790999999999, "minY": 21.3071, diff --git a/examples/Made-with-cc/detectTOC.json b/examples/Made-with-cc/detectTOC.json index 829ea31..0cb9a76 100644 --- a/examples/Made-with-cc/detectTOC.json +++ b/examples/Made-with-cc/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 190, + "mostUsedHeight": 11, "minX": -97.924, "maxX": 566.7790999999999, "minY": 21.3071, diff --git a/examples/Made-with-cc/removeRepetitiveItems.json b/examples/Made-with-cc/removeRepetitiveItems.json index 17d993b..14a9b52 100644 --- a/examples/Made-with-cc/removeRepetitiveItems.json +++ b/examples/Made-with-cc/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 190, + "mostUsedHeight": 11, "minX": -97.924, "maxX": 566.7790999999999, "minY": 21.3071, diff --git a/examples/Made-with-cc/sortbyX.json b/examples/Made-with-cc/sortbyX.json index 11f4f14..d2526da 100644 --- a/examples/Made-with-cc/sortbyX.json +++ b/examples/Made-with-cc/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 190, + "mostUsedHeight": 11, "minX": -97.924, "maxX": 566.7790999999999, "minY": 21.3071, diff --git a/examples/Safe-Communication/calculateStatistics.json b/examples/Safe-Communication/calculateStatistics.json index 1c6e121..6e98330 100644 --- a/examples/Safe-Communication/calculateStatistics.json +++ b/examples/Safe-Communication/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 36, + "mostUsedHeight": 11, "minX": 53.88, "maxX": 797.38, "minY": 23.04, diff --git a/examples/Safe-Communication/compactLines.json b/examples/Safe-Communication/compactLines.json index b1bbc4e..372fb86 100644 --- a/examples/Safe-Communication/compactLines.json +++ b/examples/Safe-Communication/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 36, + "mostUsedHeight": 11, "minX": 53.88, "maxX": 797.38, "minY": 23.04, diff --git a/examples/Safe-Communication/detectTOC.json b/examples/Safe-Communication/detectTOC.json index d69e1f2..0be6926 100644 --- a/examples/Safe-Communication/detectTOC.json +++ b/examples/Safe-Communication/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 36, + "mostUsedHeight": 11, "minX": 53.88, "maxX": 797.38, "minY": 23.04, @@ -46,6 +47,62 @@ "toc": { "pages": [ 1 + ], + "entries": [ + { + "level": 0, + "text": "Acknowledgements", + "verified": true, + "linkedPage": 3 + }, + { + "level": 0, + "text": "References", + "verified": true, + "linkedPage": 3 + }, + { + "level": 0, + "text": "Distribution & reproductionpage", + "verified": false, + "linkedPage": 3 + }, + { + "level": 0, + "text": "Executive summary", + "verified": true, + "linkedPage": 4 + }, + { + "level": 0, + "text": "Introduction", + "verified": true, + "linkedPage": 5 + }, + { + "level": 0, + "text": "Where can things go wrong?", + "verified": true, + "linkedPage": 6 + }, + { + "level": 0, + "text": "P", + "verified": true, + "linkedPage": 8 + }, + { + "level": 0, + "text": "Useful resources", + "verified": true, + "linkedPage": 40 + }, + { + "level": 0, + "text": "Appendices", + "verified": true, + "linkedPage": 42 + } ] } } diff --git a/examples/Safe-Communication/removeRepetitiveItems.json b/examples/Safe-Communication/removeRepetitiveItems.json index 58e1bd5..cfe7d01 100644 --- a/examples/Safe-Communication/removeRepetitiveItems.json +++ b/examples/Safe-Communication/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 36, + "mostUsedHeight": 11, "minX": 53.88, "maxX": 797.38, "minY": 23.04, diff --git a/examples/Safe-Communication/sortbyX.json b/examples/Safe-Communication/sortbyX.json index fccb4cd..e83caab 100644 --- a/examples/Safe-Communication/sortbyX.json +++ b/examples/Safe-Communication/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 36, + "mostUsedHeight": 11, "minX": 53.88, "maxX": 797.38, "minY": 23.04, diff --git a/examples/St-Mary-Witney-Social-Audit/calculateStatistics.json b/examples/St-Mary-Witney-Social-Audit/calculateStatistics.json index 131ff28..c5bfe7f 100644 --- a/examples/St-Mary-Witney-Social-Audit/calculateStatistics.json +++ b/examples/St-Mary-Witney-Social-Audit/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 36, + "mostUsedHeight": 12, "minX": 6.487999999999971, "maxX": 815.833, "minY": 16.345999999999947, diff --git a/examples/St-Mary-Witney-Social-Audit/compactLines.json b/examples/St-Mary-Witney-Social-Audit/compactLines.json index ab86fa9..d183f0d 100644 --- a/examples/St-Mary-Witney-Social-Audit/compactLines.json +++ b/examples/St-Mary-Witney-Social-Audit/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 36, + "mostUsedHeight": 12, "minX": 6.487999999999971, "maxX": 815.833, "minY": 16.345999999999947, diff --git a/examples/St-Mary-Witney-Social-Audit/detectTOC.json b/examples/St-Mary-Witney-Social-Audit/detectTOC.json index dc026ad..5455704 100644 --- a/examples/St-Mary-Witney-Social-Audit/detectTOC.json +++ b/examples/St-Mary-Witney-Social-Audit/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 36, + "mostUsedHeight": 12, "minX": 6.487999999999971, "maxX": 815.833, "minY": 16.345999999999947, @@ -46,6 +47,98 @@ "toc": { "pages": [ 2 + ], + "entries": [ + { + "level": 0, + "text": "Introduction", + "verified": true, + "linkedPage": 5 + }, + { + "level": 0, + "text": "History", + "verified": true, + "linkedPage": 7 + }, + { + "level": 0, + "text": "Setting and context", + "verified": true, + "linkedPage": 10 + }, + { + "level": 0, + "text": "Witney’s people", + "verified": true, + "linkedPage": 12 + }, + { + "level": 0, + "text": "Health", + "verified": true, + "linkedPage": 14 + }, + { + "level": 0, + "text": "Witney at work", + "verified": true, + "linkedPage": 15 + }, + { + "level": 0, + "text": "Housing", + "verified": true, + "linkedPage": 16 + }, + { + "level": 0, + "text": "Crime and safety", + "verified": true, + "linkedPage": 17 + }, + { + "level": 0, + "text": "Education", + "verified": true, + "linkedPage": 18 + }, + { + "level": 0, + "text": "Transport", + "verified": true, + "linkedPage": 20 + }, + { + "level": 0, + "text": "Lifestyle and deprivation", + "verified": true, + "linkedPage": 21 + }, + { + "level": 0, + "text": "Conclusions", + "verified": true, + "linkedPage": 23 + }, + { + "level": 0, + "text": "What St Mary’s offers", + "verified": true, + "linkedPage": 25 + }, + { + "level": 0, + "text": "Recommendations", + "verified": true, + "linkedPage": 27 + }, + { + "level": 0, + "text": "Further information and links", + "verified": true, + "linkedPage": 28 + } ] } } diff --git a/examples/St-Mary-Witney-Social-Audit/removeRepetitiveItems.json b/examples/St-Mary-Witney-Social-Audit/removeRepetitiveItems.json index f75f48a..397b2db 100644 --- a/examples/St-Mary-Witney-Social-Audit/removeRepetitiveItems.json +++ b/examples/St-Mary-Witney-Social-Audit/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 36, + "mostUsedHeight": 12, "minX": 6.487999999999971, "maxX": 815.833, "minY": 16.345999999999947, diff --git a/examples/St-Mary-Witney-Social-Audit/sortbyX.json b/examples/St-Mary-Witney-Social-Audit/sortbyX.json index 6091fd5..20a4981 100644 --- a/examples/St-Mary-Witney-Social-Audit/sortbyX.json +++ b/examples/St-Mary-Witney-Social-Audit/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 36, + "mostUsedHeight": 12, "minX": 6.487999999999971, "maxX": 815.833, "minY": 16.345999999999947, diff --git a/examples/The-Art-of-Public-Speaking/calculateStatistics.0.json b/examples/The-Art-of-Public-Speaking/calculateStatistics.0.json index ba8d3e6..895730b 100644 --- a/examples/The-Art-of-Public-Speaking/calculateStatistics.0.json +++ b/examples/The-Art-of-Public-Speaking/calculateStatistics.0.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 28.799999999999997, + "mostUsedHeight": 14, "minX": 72, "maxX": 537.4124748000004, "minY": 75.60000000000002, diff --git a/examples/The-Art-of-Public-Speaking/compactLines.json b/examples/The-Art-of-Public-Speaking/compactLines.json index d6e321b..bd30d5f 100644 --- a/examples/The-Art-of-Public-Speaking/compactLines.json +++ b/examples/The-Art-of-Public-Speaking/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 28.799999999999997, + "mostUsedHeight": 14, "minX": 72, "maxX": 537.4124748000004, "minY": 75.60000000000002, diff --git a/examples/The-Art-of-Public-Speaking/detectTOC.json b/examples/The-Art-of-Public-Speaking/detectTOC.json index b2c9471..28fc326 100644 --- a/examples/The-Art-of-Public-Speaking/detectTOC.json +++ b/examples/The-Art-of-Public-Speaking/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 28.799999999999997, + "mostUsedHeight": 14, "minX": 72, "maxX": 537.4124748000004, "minY": 75.60000000000002, diff --git a/examples/The-Art-of-Public-Speaking/removeRepetitiveItems.json b/examples/The-Art-of-Public-Speaking/removeRepetitiveItems.json index 6e72476..a528646 100644 --- a/examples/The-Art-of-Public-Speaking/removeRepetitiveItems.json +++ b/examples/The-Art-of-Public-Speaking/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 28.799999999999997, + "mostUsedHeight": 14, "minX": 72, "maxX": 537.4124748000004, "minY": 75.60000000000002, diff --git a/examples/The-Art-of-Public-Speaking/sortbyX.json b/examples/The-Art-of-Public-Speaking/sortbyX.json index c77eebd..ff5ea0f 100644 --- a/examples/The-Art-of-Public-Speaking/sortbyX.json +++ b/examples/The-Art-of-Public-Speaking/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 28.799999999999997, + "mostUsedHeight": 14, "minX": 72, "maxX": 537.4124748000004, "minY": 75.60000000000002, diff --git a/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/calculateStatistics.json b/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/calculateStatistics.json index 97ae08b..bc286db 100644 --- a/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/calculateStatistics.json +++ b/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 36, + "mostUsedHeight": 11, "minX": 74.904, "maxX": 518.5, "minY": 99.864, diff --git a/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/compactLines.json b/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/compactLines.json index af7bc86..679f270 100644 --- a/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/compactLines.json +++ b/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 36, + "mostUsedHeight": 11, "minX": 74.904, "maxX": 518.5, "minY": 99.864, diff --git a/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/detectTOC.json b/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/detectTOC.json index 09608fe..4c8d8e9 100644 --- a/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/detectTOC.json +++ b/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 36, + "mostUsedHeight": 11, "minX": 74.904, "maxX": 518.5, "minY": 99.864, diff --git a/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/removeRepetitiveItems.json b/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/removeRepetitiveItems.json index 4a97d7e..9f54e92 100644 --- a/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/removeRepetitiveItems.json +++ b/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 36, + "mostUsedHeight": 11, "minX": 74.904, "maxX": 518.5, "minY": 99.864, diff --git a/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/sortbyX.json b/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/sortbyX.json index 2e1b006..660d876 100644 --- a/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/sortbyX.json +++ b/examples/The-Impact-of-Open-Access-Latin-American-Scholarship/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 36, + "mostUsedHeight": 11, "minX": 74.904, "maxX": 518.5, "minY": 99.864, diff --git a/examples/The-Man-Without-A-Body/calculateStatistics.json b/examples/The-Man-Without-A-Body/calculateStatistics.json index 950f342..db2b931 100644 --- a/examples/The-Man-Without-A-Body/calculateStatistics.json +++ b/examples/The-Man-Without-A-Body/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 11, + "mostUsedHeight": 11, "minX": 72.025, "maxX": 536.73, "minY": 75.025, diff --git a/examples/The-Man-Without-A-Body/compactLines.json b/examples/The-Man-Without-A-Body/compactLines.json index 47c522b..e537b6a 100644 --- a/examples/The-Man-Without-A-Body/compactLines.json +++ b/examples/The-Man-Without-A-Body/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 11, + "mostUsedHeight": 11, "minX": 72.025, "maxX": 536.73, "minY": 75.025, diff --git a/examples/The-Man-Without-A-Body/detectTOC.json b/examples/The-Man-Without-A-Body/detectTOC.json index a7771cc..70065b2 100644 --- a/examples/The-Man-Without-A-Body/detectTOC.json +++ b/examples/The-Man-Without-A-Body/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 11, + "mostUsedHeight": 11, "minX": 72.025, "maxX": 536.73, "minY": 75.025, diff --git a/examples/The-Man-Without-A-Body/removeRepetitiveItems.json b/examples/The-Man-Without-A-Body/removeRepetitiveItems.json index 1ff6eab..9b6f70c 100644 --- a/examples/The-Man-Without-A-Body/removeRepetitiveItems.json +++ b/examples/The-Man-Without-A-Body/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 11, + "mostUsedHeight": 11, "minX": 72.025, "maxX": 536.73, "minY": 75.025, diff --git a/examples/The-Man-Without-A-Body/sortbyX.json b/examples/The-Man-Without-A-Body/sortbyX.json index 1ff6eab..9b6f70c 100644 --- a/examples/The-Man-Without-A-Body/sortbyX.json +++ b/examples/The-Man-Without-A-Body/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 11, + "mostUsedHeight": 11, "minX": 72.025, "maxX": 536.73, "minY": 75.025, diff --git a/examples/The-War-of-the-Worlds/calculateStatistics.json b/examples/The-War-of-the-Worlds/calculateStatistics.json index 13df7c9..b4dcfd2 100644 --- a/examples/The-War-of-the-Worlds/calculateStatistics.json +++ b/examples/The-War-of-the-Worlds/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 24, + "mostUsedHeight": 12, "minX": 57.59999999999991, "maxX": 312.78, "minY": 44.76, diff --git a/examples/The-War-of-the-Worlds/compactLines.json b/examples/The-War-of-the-Worlds/compactLines.json index 1cd6298..12f5bd3 100644 --- a/examples/The-War-of-the-Worlds/compactLines.json +++ b/examples/The-War-of-the-Worlds/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 24, + "mostUsedHeight": 12, "minX": 57.59999999999991, "maxX": 312.78, "minY": 44.76, diff --git a/examples/The-War-of-the-Worlds/detectTOC.json b/examples/The-War-of-the-Worlds/detectTOC.json index 852de93..ff26ed2 100644 --- a/examples/The-War-of-the-Worlds/detectTOC.json +++ b/examples/The-War-of-the-Worlds/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 24, + "mostUsedHeight": 12, "minX": 57.59999999999991, "maxX": 312.78, "minY": 44.76, diff --git a/examples/The-War-of-the-Worlds/removeRepetitiveItems.json b/examples/The-War-of-the-Worlds/removeRepetitiveItems.json index 5f1fff9..f1f6135 100644 --- a/examples/The-War-of-the-Worlds/removeRepetitiveItems.json +++ b/examples/The-War-of-the-Worlds/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 24, + "mostUsedHeight": 12, "minX": 57.59999999999991, "maxX": 312.78, "minY": 44.76, diff --git a/examples/The-War-of-the-Worlds/sortbyX.json b/examples/The-War-of-the-Worlds/sortbyX.json index a9b61fc..88d24eb 100644 --- a/examples/The-War-of-the-Worlds/sortbyX.json +++ b/examples/The-War-of-the-Worlds/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 24, + "mostUsedHeight": 12, "minX": 57.59999999999991, "maxX": 312.78, "minY": 44.76, diff --git a/examples/Tragedy-Of-The-Commons/calculateStatistics.json b/examples/Tragedy-Of-The-Commons/calculateStatistics.json index 6eabc8a..3f557a2 100644 --- a/examples/Tragedy-Of-The-Commons/calculateStatistics.json +++ b/examples/Tragedy-Of-The-Commons/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 22.5, + "mostUsedHeight": 11, "minX": 13.799999999999926, "maxX": 550.2000000000003, "minY": 1.4400099999998357, diff --git a/examples/Tragedy-Of-The-Commons/compactLines.json b/examples/Tragedy-Of-The-Commons/compactLines.json index ae319e0..e00daab 100644 --- a/examples/Tragedy-Of-The-Commons/compactLines.json +++ b/examples/Tragedy-Of-The-Commons/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 22.5, + "mostUsedHeight": 11, "minX": 13.799999999999926, "maxX": 550.2000000000003, "minY": 1.4400099999998357, diff --git a/examples/Tragedy-Of-The-Commons/detectTOC.json b/examples/Tragedy-Of-The-Commons/detectTOC.json index a32dc4d..22b7eaa 100644 --- a/examples/Tragedy-Of-The-Commons/detectTOC.json +++ b/examples/Tragedy-Of-The-Commons/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 22.5, + "mostUsedHeight": 11, "minX": 13.799999999999926, "maxX": 550.2000000000003, "minY": 1.4400099999998357, diff --git a/examples/Tragedy-Of-The-Commons/removeRepetitiveItems.json b/examples/Tragedy-Of-The-Commons/removeRepetitiveItems.json index 9217701..408520a 100644 --- a/examples/Tragedy-Of-The-Commons/removeRepetitiveItems.json +++ b/examples/Tragedy-Of-The-Commons/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 22.5, + "mostUsedHeight": 11, "minX": 13.799999999999926, "maxX": 550.2000000000003, "minY": 1.4400099999998357, diff --git a/examples/Tragedy-Of-The-Commons/sortbyX.json b/examples/Tragedy-Of-The-Commons/sortbyX.json index 39cb517..476e961 100644 --- a/examples/Tragedy-Of-The-Commons/sortbyX.json +++ b/examples/Tragedy-Of-The-Commons/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 22.5, + "mostUsedHeight": 11, "minX": 13.799999999999926, "maxX": 550.2000000000003, "minY": 1.4400099999998357, diff --git a/examples/Watered-Soul-Blog-Book/calculateStatistics.json b/examples/Watered-Soul-Blog-Book/calculateStatistics.json index 0920590..b8bd209 100644 --- a/examples/Watered-Soul-Blog-Book/calculateStatistics.json +++ b/examples/Watered-Soul-Blog-Book/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 24.7871, + "mostUsedHeight": 9, "minX": 35.99999999999977, "maxX": 1433.711, "minY": 39.59999999999997, diff --git a/examples/Watered-Soul-Blog-Book/compactLines.json b/examples/Watered-Soul-Blog-Book/compactLines.json index c02eea8..317052f 100644 --- a/examples/Watered-Soul-Blog-Book/compactLines.json +++ b/examples/Watered-Soul-Blog-Book/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 24.7871, + "mostUsedHeight": 9, "minX": 35.99999999999977, "maxX": 1433.711, "minY": 39.59999999999997, diff --git a/examples/Watered-Soul-Blog-Book/detectTOC.json b/examples/Watered-Soul-Blog-Book/detectTOC.json index eeb5089..92a96d6 100644 --- a/examples/Watered-Soul-Blog-Book/detectTOC.json +++ b/examples/Watered-Soul-Blog-Book/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 24.7871, + "mostUsedHeight": 9, "minX": 35.99999999999977, "maxX": 1433.711, "minY": 39.59999999999997, @@ -50,6 +51,1004 @@ 4, 5, 6 + ], + "entries": [ + { + "level": 0, + "text": "1.1 March", + "verified": true, + "linkedPage": 13 + }, + { + "level": 0, + "text": "2010Spring Is Here-What’s Springing Up Within You?", + "verified": true, + "linkedPage": 13 + }, + { + "level": 0, + "text": "Any Mud on Your Soul?", + "verified": true, + "linkedPage": 15 + }, + { + "level": 0, + "text": "Mindful Ponderings", + "verified": true, + "linkedPage": 16 + }, + { + "level": 0, + "text": "Hide & Seek", + "verified": true, + "linkedPage": 16 + }, + { + "level": 0, + "text": "Always Forever", + "verified": true, + "linkedPage": 17 + }, + { + "level": 0, + "text": "If Not Him, Then Who?", + "verified": true, + "linkedPage": 18 + }, + { + "level": 0, + "text": "Up for a Challenge", + "verified": true, + "linkedPage": 19 + }, + { + "level": 0, + "text": "1.2 April", + "verified": true, + "linkedPage": 20 + }, + { + "level": 0, + "text": "Ready, Set, Go", + "verified": true, + "linkedPage": 20 + }, + { + "level": 0, + "text": "Bare But Not Barren", + "verified": true, + "linkedPage": 22 + }, + { + "level": 0, + "text": "Buried in Him", + "verified": true, + "linkedPage": 24 + }, + { + "level": 0, + "text": "Contractually Connected to a Covenant Keeping Christ", + "verified": true, + "linkedPage": 25 + }, + { + "level": 0, + "text": "Time for Revisiting the Tomb", + "verified": true, + "linkedPage": 26 + }, + { + "level": 0, + "text": "D is the Day", + "verified": true, + "linkedPage": 28 + }, + { + "level": 0, + "text": "The Eyes Have It", + "verified": true, + "linkedPage": 31 + }, + { + "level": 0, + "text": "F is for F.A.M.I.L.Y.", + "verified": true, + "linkedPage": 33 + }, + { + "level": 0, + "text": "Are You Growing?", + "verified": true, + "linkedPage": 34 + }, + { + "level": 0, + "text": "Power in Your Hands", + "verified": true, + "linkedPage": 36 + }, + { + "level": 0, + "text": "I is for", + "verified": true, + "linkedPage": 38 + }, + { + "level": 0, + "text": "Imposter on the Loose", + "verified": true, + "linkedPage": 39 + }, + { + "level": 0, + "text": "Capturing the Journey", + "verified": true, + "linkedPage": 41 + }, + { + "level": 0, + "text": "K is for King", + "verified": true, + "linkedPage": 44 + }, + { + "level": 0, + "text": "Lifting the Labels", + "verified": true, + "linkedPage": 46 + }, + { + "level": 0, + "text": "My Mind is Pondering", + "verified": true, + "linkedPage": 48 + }, + { + "level": 0, + "text": "Never Say Never", + "verified": true, + "linkedPage": 51 + }, + { + "level": 0, + "text": "Open to Opportunity", + "verified": true, + "linkedPage": 53 + }, + { + "level": 0, + "text": "Essential P\u0019s in the Race of Life", + "verified": true, + "linkedPage": 56 + }, + { + "level": 0, + "text": "Quiet Please", + "verified": true, + "linkedPage": 58 + }, + { + "level": 0, + "text": "Re", + "verified": true, + "linkedPage": 61 + }, + { + "level": 0, + "text": "Satisfaction Guaranteed", + "verified": true, + "linkedPage": 63 + }, + { + "level": 0, + "text": "Quench Your Thirst", + "verified": true, + "linkedPage": 65 + }, + { + "level": 0, + "text": "Until When?", + "verified": true, + "linkedPage": 68 + }, + { + "level": 0, + "text": "You’re the Vessel", + "verified": true, + "linkedPage": 71 + }, + { + "level": 0, + "text": "Never Walk Alone", + "verified": true, + "linkedPage": 73 + }, + { + "level": 0, + "text": "Random Things about Me", + "verified": true, + "linkedPage": 74 + }, + { + "level": 0, + "text": "X Marks the Spot", + "verified": true, + "linkedPage": 76 + }, + { + "level": 0, + "text": "Y is for Yield", + "verified": true, + "linkedPage": 78 + }, + { + "level": 0, + "text": "Z is for", + "verified": true, + "linkedPage": 79 + }, + { + "level": 0, + "text": "1.3 May", + "verified": true, + "linkedPage": 82 + }, + { + "level": 0, + "text": "Z is for Zachariah", + "verified": true, + "linkedPage": 82 + }, + { + "level": 0, + "text": "Reflections on the A to Z Challenge", + "verified": true, + "linkedPage": 84 + }, + { + "level": 0, + "text": "Word Filled Wednesday", + "verified": true, + "linkedPage": 88 + }, + { + "level": 0, + "text": "I’m It but You May Be Next", + "verified": true, + "linkedPage": 91 + }, + { + "level": 0, + "text": "Imprisoned Thoughts", + "verified": true, + "linkedPage": 93 + }, + { + "level": 0, + "text": "For Mothers", + "verified": true, + "linkedPage": 96 + }, + { + "level": 0, + "text": "The Blahs", + "verified": true, + "linkedPage": 97 + }, + { + "level": 0, + "text": "Some Things Don’t Change", + "verified": true, + "linkedPage": 98 + }, + { + "level": 0, + "text": "Steps Along the Way", + "verified": true, + "linkedPage": 102 + }, + { + "level": 0, + "text": "Finding My Strength", + "verified": true, + "linkedPage": 104 + }, + { + "level": 0, + "text": "Quiet Confidence", + "verified": true, + "linkedPage": 105 + }, + { + "level": 0, + "text": "You’re Unforgettable", + "verified": true, + "linkedPage": 107 + }, + { + "level": 0, + "text": "Your View of Windows", + "verified": true, + "linkedPage": 109 + }, + { + "level": 0, + "text": "It’s Him You Seek", + "verified": true, + "linkedPage": 111 + }, + { + "level": 0, + "text": "Teaser Tuesday", + "verified": true, + "linkedPage": 112 + }, + { + "level": 0, + "text": "Overloaded?", + "verified": true, + "linkedPage": 113 + }, + { + "level": 0, + "text": "Lessons Learned Along the Way", + "verified": true, + "linkedPage": 116 + }, + { + "level": 0, + "text": "The If(s)", + "verified": true, + "linkedPage": 118 + }, + { + "level": 0, + "text": "Memorial Day", + "verified": true, + "linkedPage": 120 + }, + { + "level": 0, + "text": "Favorite Finds", + "verified": true, + "linkedPage": 121 + }, + { + "level": 0, + "text": "Teaser Tuedays", + "verified": true, + "linkedPage": 123 + }, + { + "level": 0, + "text": "1.4 June", + "verified": true, + "linkedPage": 125 + }, + { + "level": 0, + "text": "Teaser Tuedays", + "verified": true, + "linkedPage": 125 + }, + { + "level": 0, + "text": "Shammah!", + "verified": true, + "linkedPage": 126 + }, + { + "level": 0, + "text": "No Need to be Discouraged", + "verified": true, + "linkedPage": 129 + }, + { + "level": 0, + "text": "No Incompletes in God", + "verified": true, + "linkedPage": 132 + }, + { + "level": 0, + "text": "Interesting Finds", + "verified": true, + "linkedPage": 134 + }, + { + "level": 0, + "text": "Making Sense of the Nonsense", + "verified": true, + "linkedPage": 135 + }, + { + "level": 0, + "text": "Discarded Things", + "verified": true, + "linkedPage": 137 + }, + { + "level": 0, + "text": "Extinguish My Drought, Lord", + "verified": true, + "linkedPage": 139 + }, + { + "level": 0, + "text": "You Choose What to Carry", + "verified": true, + "linkedPage": 142 + }, + { + "level": 0, + "text": "Like Three P’s in a Pod", + "verified": true, + "linkedPage": 144 + }, + { + "level": 0, + "text": "Things That Made Me Go...Hmmm", + "verified": true, + "linkedPage": 145 + }, + { + "level": 0, + "text": "Where Does the Time Go?", + "verified": true, + "linkedPage": 147 + }, + { + "level": 0, + "text": "Don’t Want to Dance to My Own Tune", + "verified": true, + "linkedPage": 149 + }, + { + "level": 0, + "text": "God of the Detours", + "verified": true, + "linkedPage": 152 + }, + { + "level": 0, + "text": "To The Fathers...", + "verified": true, + "linkedPage": 154 + }, + { + "level": 0, + "text": "Access Granted...", + "verified": true, + "linkedPage": 155 + }, + { + "level": 0, + "text": "Can\u0019t Afford to Trash it", + "verified": true, + "linkedPage": 157 + }, + { + "level": 0, + "text": "Linky Love", + "verified": true, + "linkedPage": 161 + }, + { + "level": 0, + "text": "Recyclable You", + "verified": true, + "linkedPage": 163 + }, + { + "level": 0, + "text": "Sins of the Mother", + "verified": true, + "linkedPage": 164 + }, + { + "level": 0, + "text": "Whatcha Got Cookin?", + "verified": true, + "linkedPage": 166 + }, + { + "level": 0, + "text": "1.5 July", + "verified": true, + "linkedPage": 169 + }, + { + "level": 0, + "text": "Nobody Likes Me", + "verified": true, + "linkedPage": 169 + }, + { + "level": 0, + "text": "Freedom", + "verified": true, + "linkedPage": 171 + }, + { + "level": 0, + "text": "Becoming A Woman Who Loves", + "verified": true, + "linkedPage": 173 + }, + { + "level": 0, + "text": "Flow to You", + "verified": true, + "linkedPage": 174 + }, + { + "level": 0, + "text": "Some things are made to last", + "verified": true, + "linkedPage": 176 + }, + { + "level": 0, + "text": "Proclamation", + "verified": true, + "linkedPage": 179 + }, + { + "level": 0, + "text": "No longer the same", + "verified": true, + "linkedPage": 180 + }, + { + "level": 0, + "text": "No Death Today: Resuscitate Instead", + "verified": true, + "linkedPage": 181 + }, + { + "level": 0, + "text": "Swept Away", + "verified": true, + "linkedPage": 185 + }, + { + "level": 0, + "text": "Sweep a Little Love to a Sista", + "verified": true, + "linkedPage": 188 + }, + { + "level": 0, + "text": "Lost & Found", + "verified": true, + "linkedPage": 190 + }, + { + "level": 0, + "text": "A Little Out = A Little Back", + "verified": true, + "linkedPage": 193 + }, + { + "level": 0, + "text": "This Sings My Soul", + "verified": true, + "linkedPage": 196 + }, + { + "level": 0, + "text": "A Lil Something Sweet", + "verified": true, + "linkedPage": 197 + }, + { + "level": 0, + "text": "A Sweet Offer{CSN Store Giveaway}Closed", + "verified": true, + "linkedPage": 199 + }, + { + "level": 0, + "text": "Teaser Tuesday{Six-Liter Club}", + "verified": true, + "linkedPage": 202 + }, + { + "level": 0, + "text": "The Power of a Song & Praise", + "verified": true, + "linkedPage": 204 + }, + { + "level": 0, + "text": "Overwhelming Victory", + "verified": true, + "linkedPage": 208 + }, + { + "level": 0, + "text": "Yes, You Matter to Me", + "verified": true, + "linkedPage": 209 + }, + { + "level": 0, + "text": "1.6 August", + "verified": true, + "linkedPage": 211 + }, + { + "level": 0, + "text": "Infused with Power", + "verified": true, + "linkedPage": 211 + }, + { + "level": 0, + "text": "Keeping Watch of the Time", + "verified": true, + "linkedPage": 213 + }, + { + "level": 0, + "text": "Is It Time For a Makeover?", + "verified": true, + "linkedPage": 217 + }, + { + "level": 0, + "text": "We Have Winner", + "verified": true, + "linkedPage": 220 + }, + { + "level": 0, + "text": "It\u0019s Ok to Begin Again", + "verified": true, + "linkedPage": 220 + }, + { + "level": 0, + "text": "He Holds The Future{Word-Filled Wednesday}", + "verified": true, + "linkedPage": 222 + }, + { + "level": 0, + "text": "13 Well Wishes for You", + "verified": true, + "linkedPage": 226 + }, + { + "level": 0, + "text": "Even When I Don\u0019t Do Right", + "verified": true, + "linkedPage": 229 + }, + { + "level": 0, + "text": "Worth the Wait{Word Filled Wednesday}", + "verified": true, + "linkedPage": 232 + }, + { + "level": 0, + "text": "No More Cave Dwelling", + "verified": true, + "linkedPage": 236 + }, + { + "level": 0, + "text": "A Heart Full of Sweet P\u0019s", + "verified": true, + "linkedPage": 239 + }, + { + "level": 0, + "text": "Son or Slave ?{Monday Manna}", + "verified": true, + "linkedPage": 241 + }, + { + "level": 0, + "text": "It\u0019s All in There", + "verified": true, + "linkedPage": 242 + }, + { + "level": 0, + "text": "I Can\u0019t Hear You", + "verified": true, + "linkedPage": 244 + }, + { + "level": 0, + "text": "Arise Oh\u0019Lord", + "verified": true, + "linkedPage": 248 + }, + { + "level": 0, + "text": "He\u0019s With Me", + "verified": true, + "linkedPage": 252 + }, + { + "level": 0, + "text": "Give Me Eyes to See", + "verified": true, + "linkedPage": 253 + }, + { + "level": 0, + "text": "Your Recommendation Says What?", + "verified": true, + "linkedPage": 255 + }, + { + "level": 0, + "text": "1.7 Septembers", + "verified": true, + "linkedPage": 258 + }, + { + "level": 0, + "text": "Sweet P\u0019s", + "verified": true, + "linkedPage": 258 + }, + { + "level": 0, + "text": "Centered on Truth-{Monday Manna}", + "verified": true, + "linkedPage": 260 + }, + { + "level": 0, + "text": "Fasten to Truth", + "verified": true, + "linkedPage": 263 + }, + { + "level": 0, + "text": "Looking Unto Him", + "verified": true, + "linkedPage": 267 + }, + { + "level": 0, + "text": "Darkness Doesn\u0019t Last", + "verified": true, + "linkedPage": 270 + }, + { + "level": 0, + "text": "No Girls Allowed:Devotions for Boys", + "verified": true, + "linkedPage": 272 + }, + { + "level": 0, + "text": "Web-Free Building", + "verified": true, + "linkedPage": 273 + }, + { + "level": 0, + "text": "You Know How to Brighten the Day", + "verified": true, + "linkedPage": 277 + }, + { + "level": 0, + "text": "Victory Through Him", + "verified": true, + "linkedPage": 281 + }, + { + "level": 0, + "text": "But, I want to go this way{Monday Manna}", + "verified": true, + "linkedPage": 283 + }, + { + "level": 0, + "text": "Psalms{Life Change Series}", + "verified": true, + "linkedPage": 285 + }, + { + "level": 0, + "text": "Heard the News", + "verified": true, + "linkedPage": 287 + }, + { + "level": 0, + "text": "Stress Free Life :Seven Keys to Extraordinary Life", + "verified": true, + "linkedPage": 291 + }, + { + "level": 0, + "text": "Just a Few Steps From Home", + "verified": true, + "linkedPage": 294 + }, + { + "level": 0, + "text": "Spreading the Sweet Stuff", + "verified": true, + "linkedPage": 296 + }, + { + "level": 0, + "text": "1.8 October", + "verified": true, + "linkedPage": 300 + }, + { + "level": 0, + "text": "He\u0019s Still Working Miracles", + "verified": true, + "linkedPage": 300 + }, + { + "level": 0, + "text": "The Familiar Stranger{Teaser Tuesday}", + "verified": true, + "linkedPage": 302 + }, + { + "level": 0, + "text": "As Weeks Go By", + "verified": true, + "linkedPage": 303 + }, + { + "level": 0, + "text": "Pebble or Rock", + "verified": true, + "linkedPage": 306 + }, + { + "level": 0, + "text": "A Prayer", + "verified": true, + "linkedPage": 310 + }, + { + "level": 0, + "text": "Can you give it all away?", + "verified": true, + "linkedPage": 312 + }, + { + "level": 0, + "text": "Just a Matter of Moments", + "verified": true, + "linkedPage": 317 + }, + { + "level": 0, + "text": "Not Without a Fight!", + "verified": true, + "linkedPage": 319 + }, + { + "level": 0, + "text": "A Never Ending Hope", + "verified": true, + "linkedPage": 324 + }, + { + "level": 0, + "text": "The Waiting ̃ Blog Tour", + "verified": true, + "linkedPage": 328 + }, + { + "level": 0, + "text": "Children Learn What They Live", + "verified": true, + "linkedPage": 331 + }, + { + "level": 0, + "text": "The Artist", + "verified": true, + "linkedPage": 332 + }, + { + "level": 0, + "text": "Mailbox Monday", + "verified": true, + "linkedPage": 333 + }, + { + "level": 0, + "text": "Flourish", + "verified": true, + "linkedPage": 337 + }, + { + "level": 0, + "text": "Slipping Away", + "verified": true, + "linkedPage": 338 + }, + { + "level": 0, + "text": "Got Questions for You", + "verified": true, + "linkedPage": 342 + }, + { + "level": 0, + "text": "1.9 November", + "verified": true, + "linkedPage": 347 + }, + { + "level": 0, + "text": "Despite What\u0019s Seen", + "verified": true, + "linkedPage": 347 + }, + { + "level": 0, + "text": "Sleep But No Rest", + "verified": true, + "linkedPage": 352 + }, + { + "level": 0, + "text": "It\u0019s No Secret by Rachel Olsen", + "verified": true, + "linkedPage": 358 + }, + { + "level": 0, + "text": "Do You Want It or Not?", + "verified": true, + "linkedPage": 360 + }, + { + "level": 0, + "text": "The Need", + "verified": true, + "linkedPage": 365 + }, + { + "level": 0, + "text": "Tuesday\u0019s T(s): Teaser & Thanks", + "verified": true, + "linkedPage": 368 + }, + { + "level": 0, + "text": "Ever Asked Why?", + "verified": true, + "linkedPage": 370 + }, + { + "level": 0, + "text": "Any time is a good time", + "verified": true, + "linkedPage": 375 + }, + { + "level": 0, + "text": "In Need of a Boost", + "verified": true, + "linkedPage": 376 + }, + { + "level": 0, + "text": "The Real ID", + "verified": true, + "linkedPage": 378 + } ] } } diff --git a/examples/Watered-Soul-Blog-Book/removeRepetitiveItems.json b/examples/Watered-Soul-Blog-Book/removeRepetitiveItems.json index 7950d94..f7cfd28 100644 --- a/examples/Watered-Soul-Blog-Book/removeRepetitiveItems.json +++ b/examples/Watered-Soul-Blog-Book/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 24.7871, + "mostUsedHeight": 9, "minX": 35.99999999999977, "maxX": 1433.711, "minY": 39.59999999999997, diff --git a/examples/Watered-Soul-Blog-Book/sortbyX.json b/examples/Watered-Soul-Blog-Book/sortbyX.json index e777e62..2e58214 100644 --- a/examples/Watered-Soul-Blog-Book/sortbyX.json +++ b/examples/Watered-Soul-Blog-Book/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 24.7871, + "mostUsedHeight": 9, "minX": 35.99999999999977, "maxX": 1433.711, "minY": 39.59999999999997, diff --git a/examples/WoodUp/calculateStatistics.json b/examples/WoodUp/calculateStatistics.json index c407ba3..7d8b19d 100644 --- a/examples/WoodUp/calculateStatistics.json +++ b/examples/WoodUp/calculateStatistics.json @@ -28,6 +28,7 @@ ], "globals": { "maxHeight": 64, + "mostUsedHeight": 9, "minX": 46.323, "maxX": 436.5, "minY": 37.73867999999993, diff --git a/examples/WoodUp/compactLines.json b/examples/WoodUp/compactLines.json index 599df3d..75f8c6c 100644 --- a/examples/WoodUp/compactLines.json +++ b/examples/WoodUp/compactLines.json @@ -32,6 +32,7 @@ ], "globals": { "maxHeight": 64, + "mostUsedHeight": 9, "minX": 46.323, "maxX": 436.5, "minY": 37.73867999999993, diff --git a/examples/WoodUp/detectTOC.json b/examples/WoodUp/detectTOC.json index 3584169..291d5ab 100644 --- a/examples/WoodUp/detectTOC.json +++ b/examples/WoodUp/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 64, + "mostUsedHeight": 9, "minX": 46.323, "maxX": 436.5, "minY": 37.73867999999993, @@ -46,6 +47,62 @@ "toc": { "pages": [ 5 + ], + "entries": [ + { + "level": 0, + "text": "Einleitung", + "verified": true, + "linkedPage": 1 + }, + { + "level": 0, + "text": "Neuester Stand der Technik der Vergasung von Holzbiomasse in Südtirol und technisch-wirtschaftliche Analyse möglicher Verbesserungen in Hinblick auf eine polygenerative Strukturierung", + "verified": true, + "linkedPage": 5 + }, + { + "level": 0, + "text": "Extraktion aus Holzrückständen für Anwendungen in der Lebensmittel-und Pharmabranche", + "verified": true, + "linkedPage": 49 + }, + { + "level": 0, + "text": "Nutzung von Kohle als Bodenverbesserungsmittel:Keim-und Phytotoxizitätstests mit Kohle aus Südtiroler Vergasungsanlagen", + "verified": true, + "linkedPage": 75 + }, + { + "level": 0, + "text": "Auswirkungen der Einbringung von Biochar in den Boden auf Ertrag und Qualität von Reb-und Obst-anlagen in SüdtirolLösch", + "verified": true, + "linkedPage": 95 + }, + { + "level": 0, + "text": "Anwendung von Biochar als Bodenverbesserungsmittel: Wirkungen auf den Stickstoffzyklus und die Trockenstresstoleranz beiim Topf angebauten Weinpflanzenanotelli", + "verified": true, + "linkedPage": 143 + }, + { + "level": 0, + "text": "Wirkung des Zusatzes von Biochar zum Boden auf Treibhausgas-Emissionen und Kohlenstoffbestand----ch", + "verified": true, + "linkedPage": 173 + }, + { + "level": 0, + "text": "Erzeugung und Nutzung von Biochar in Südtirol: Lebenszyklusanalyse (LCA) der Produktionskette", + "verified": true, + "linkedPage": 207 + }, + { + "level": 0, + "text": "Schlussfolgerungen", + "verified": true, + "linkedPage": 251 + } ] } } diff --git a/examples/WoodUp/removeRepetitiveItems.json b/examples/WoodUp/removeRepetitiveItems.json index 5b9069f..39ea24a 100644 --- a/examples/WoodUp/removeRepetitiveItems.json +++ b/examples/WoodUp/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 64, + "mostUsedHeight": 9, "minX": 46.323, "maxX": 436.5, "minY": 37.73867999999993, diff --git a/examples/WoodUp/sortbyX.json b/examples/WoodUp/sortbyX.json index 30d15b7..d547d92 100644 --- a/examples/WoodUp/sortbyX.json +++ b/examples/WoodUp/sortbyX.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 64, + "mostUsedHeight": 9, "minX": 46.323, "maxX": 436.5, "minY": 37.73867999999993, diff --git a/examples/compressed.tracemonkey-pldi-09/detectTOC.json b/examples/compressed.tracemonkey-pldi-09/detectTOC.json index 69458fb..e8fc710 100644 --- a/examples/compressed.tracemonkey-pldi-09/detectTOC.json +++ b/examples/compressed.tracemonkey-pldi-09/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 17.9328, + "mostUsedHeight": 8, "minX": 53.99990000000005, "maxX": 553.8755000000001, "minY": 68.44329999999982, diff --git a/examples/compressed.tracemonkey-pldi-09/removeRepetitiveItems.json b/examples/compressed.tracemonkey-pldi-09/removeRepetitiveItems.json index be2b014..10f9838 100644 --- a/examples/compressed.tracemonkey-pldi-09/removeRepetitiveItems.json +++ b/examples/compressed.tracemonkey-pldi-09/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 17.9328, + "mostUsedHeight": 8, "minX": 53.99990000000005, "maxX": 553.8755000000001, "minY": 68.44329999999982, diff --git a/examples/dict/detectTOC.json b/examples/dict/detectTOC.json index 2de384b..e942038 100644 --- a/examples/dict/detectTOC.json +++ b/examples/dict/detectTOC.json @@ -35,6 +35,7 @@ ], "globals": { "maxHeight": 24.7871, + "mostUsedHeight": 11, "minX": 52.262, "maxX": 571.0594300000001, "minY": 76.19790000000002, @@ -48,6 +49,428 @@ 1, 2, 3 + ], + "entries": [ + { + "level": 0, + "text": "1. Shortest paths and trees", + "verified": true, + "linkedPage": 5 + }, + { + "level": 0, + "text": "1.1. Shortest paths with nonnegative lengths", + "verified": true, + "linkedPage": 5 + }, + { + "level": 0, + "text": "1.2. Speeding up Dijkstra’s algorithm with heaps", + "verified": true, + "linkedPage": 9 + }, + { + "level": 0, + "text": "1.3. Shortest paths with arbitrary lengths", + "verified": true, + "linkedPage": 12 + }, + { + "level": 0, + "text": "1.4. Minimum spanning trees", + "verified": true, + "linkedPage": 19 + }, + { + "level": 0, + "text": "2. Polytopes, polyhedra, Farkas’lemma, and linear programming", + "verified": true, + "linkedPage": 23 + }, + { + "level": 0, + "text": "2.1. Convex sets", + "verified": true, + "linkedPage": 23 + }, + { + "level": 0, + "text": "2.2. Polytopes and polyhedra", + "verified": true, + "linkedPage": 25 + }, + { + "level": 0, + "text": "2.3. Farkas’ lemma", + "verified": true, + "linkedPage": 30 + }, + { + "level": 0, + "text": "2.4. Linear programming", + "verified": true, + "linkedPage": 33 + }, + { + "level": 0, + "text": "3. Matchings and covers inbipartite graphs", + "verified": true, + "linkedPage": 39 + }, + { + "level": 0, + "text": "3.1. Matchings, covers, and Gallai’s theorem", + "verified": true, + "linkedPage": 39 + }, + { + "level": 0, + "text": "3.2.M-augmenting paths", + "verified": true, + "linkedPage": 40 + }, + { + "level": 0, + "text": "3.3. K ̋onig’s theorems", + "verified": true, + "linkedPage": 41 + }, + { + "level": 0, + "text": "3.4. Cardinality bipartite matching algorithm", + "verified": true, + "linkedPage": 45 + }, + { + "level": 0, + "text": "3.5. Weighted bipartite matching", + "verified": true, + "linkedPage": 47 + }, + { + "level": 0, + "text": "3.6. The matching polytope", + "verified": true, + "linkedPage": 50 + }, + { + "level": 0, + "text": "4. Menger’s theorem, flows, andcirculations", + "verified": true, + "linkedPage": 54 + }, + { + "level": 0, + "text": "4.1. Menger’s theorem", + "verified": true, + "linkedPage": 54 + }, + { + "level": 0, + "text": "4.2. Flows in networks", + "verified": true, + "linkedPage": 58 + }, + { + "level": 0, + "text": "4.3. Finding a maximum flow", + "verified": true, + "linkedPage": 60 + }, + { + "level": 0, + "text": "4.4. Speeding up the maximum flow algorithm", + "verified": true, + "linkedPage": 65 + }, + { + "level": 0, + "text": "4.5. Circulations", + "verified": true, + "linkedPage": 68 + }, + { + "level": 0, + "text": "4.6. Minimum-cost flows", + "verified": true, + "linkedPage": 70 + }, + { + "level": 0, + "text": "5. Nonbipartite matching", + "verified": true, + "linkedPage": 78 + }, + { + "level": 0, + "text": "5.1. Tutte’s 1-factor theorem and the Tutte-Bergeformula", + "verified": true, + "linkedPage": 78 + }, + { + "level": 0, + "text": "5.2. Cardinality matching algorithm", + "verified": true, + "linkedPage": 81 + }, + { + "level": 0, + "text": "5.3. Weighted matching algorithm", + "verified": true, + "linkedPage": 85 + }, + { + "level": 0, + "text": "5.4. The matching polytope", + "verified": true, + "linkedPage": 91 + }, + { + "level": 0, + "text": "5.5. The Cunningham-Marsh formula", + "verified": true, + "linkedPage": 94 + }, + { + "level": 0, + "text": "6. Problems, algorithms, andrunning time", + "verified": true, + "linkedPage": 97 + }, + { + "level": 0, + "text": "6.1. Introduction", + "verified": true, + "linkedPage": 97 + }, + { + "level": 0, + "text": "6.2. Words", + "verified": true, + "linkedPage": 98 + }, + { + "level": 0, + "text": "6.3. Problems", + "verified": true, + "linkedPage": 100 + }, + { + "level": 0, + "text": "6.4. Algorithms and running time", + "verified": true, + "linkedPage": 100 + }, + { + "level": 0, + "text": "6.5. The class NP", + "verified": true, + "linkedPage": 101 + }, + { + "level": 0, + "text": "6.6. The class co-NP", + "verified": true, + "linkedPage": 102 + }, + { + "level": 0, + "text": "6.7. NP-completeness", + "verified": true, + "linkedPage": 103 + }, + { + "level": 0, + "text": "6.8. NP-completeness of the satisfiability problem", + "verified": true, + "linkedPage": 103 + }, + { + "level": 0, + "text": "6.9. NP-completeness of some other problems", + "verified": true, + "linkedPage": 106 + }, + { + "level": 0, + "text": "6.10. Turing machines", + "verified": true, + "linkedPage": 108 + }, + { + "level": 0, + "text": "7. Cliques, stable sets, andcolourings", + "verified": true, + "linkedPage": 111 + }, + { + "level": 0, + "text": "7.1. Introduction", + "verified": true, + "linkedPage": 111 + }, + { + "level": 0, + "text": "7.2. Edge-colourings of bipartite graphs", + "verified": true, + "linkedPage": 115 + }, + { + "level": 0, + "text": "7.3. Partially ordered sets", + "verified": true, + "linkedPage": 121 + }, + { + "level": 0, + "text": "7.4. Perfect graphs", + "verified": true, + "linkedPage": 125 + }, + { + "level": 0, + "text": "7.5. Chordal graphs", + "verified": true, + "linkedPage": 128 + }, + { + "level": 0, + "text": "8. Integer linear programming andtotally unimodular matrices", + "verified": true, + "linkedPage": 132 + }, + { + "level": 0, + "text": "8.1. Integer linear programming", + "verified": true, + "linkedPage": 132 + }, + { + "level": 0, + "text": "8.2. Totally unimodular matrices", + "verified": true, + "linkedPage": 134 + }, + { + "level": 0, + "text": "8.3. Totally unimodular matrices from bipartitegraphs", + "verified": true, + "linkedPage": 139 + }, + { + "level": 0, + "text": "8.4. Totally unimodular matrices from directed graphs", + "verified": true, + "linkedPage": 143 + }, + { + "level": 0, + "text": "9. Multicommodity flows anddisjoint paths", + "verified": true, + "linkedPage": 148 + }, + { + "level": 0, + "text": "9.1. Introduction", + "verified": true, + "linkedPage": 148 + }, + { + "level": 0, + "text": "9.2. Two commodities", + "verified": true, + "linkedPage": 153 + }, + { + "level": 0, + "text": "9.3. Disjoint paths in acyclic directed graphs", + "verified": true, + "linkedPage": 157 + }, + { + "level": 0, + "text": "9.4. Vertex-disjoint paths in planar graphs", + "verified": true, + "linkedPage": 159 + }, + { + "level": 0, + "text": "9.5. Edge-disjoint paths in planar graphs", + "verified": true, + "linkedPage": 165 + }, + { + "level": 0, + "text": "modity flows", + "verified": true, + "linkedPage": 168 + }, + { + "level": 0, + "text": "10. Matroids", + "verified": true, + "linkedPage": 173 + }, + { + "level": 0, + "text": "10.1. Matroids and the greedy algorithm", + "verified": true, + "linkedPage": 173 + }, + { + "level": 0, + "text": "10.2. Equivalent axioms for matroids", + "verified": true, + "linkedPage": 176 + }, + { + "level": 0, + "text": "10.3. Examples of matroids", + "verified": true, + "linkedPage": 180 + }, + { + "level": 0, + "text": "10.4. Two technical lemmas", + "verified": true, + "linkedPage": 183 + }, + { + "level": 0, + "text": "10.5. Matroid intersection", + "verified": true, + "linkedPage": 184 + }, + { + "level": 0, + "text": "10.6. Weighted matroid intersection", + "verified": true, + "linkedPage": 190 + }, + { + "level": 0, + "text": "10.7. Matroids and polyhedra", + "verified": true, + "linkedPage": 194 + }, + { + "level": 0, + "text": "References", + "verified": true, + "linkedPage": 199 + }, + { + "level": 0, + "text": "Name index", + "verified": true, + "linkedPage": 210 + }, + { + "level": 0, + "text": "Subject index", + "verified": true, + "linkedPage": 212 + } ] } } diff --git a/examples/dict/removeRepetitiveItems.json b/examples/dict/removeRepetitiveItems.json index d9e8318..38aa938 100644 --- a/examples/dict/removeRepetitiveItems.json +++ b/examples/dict/removeRepetitiveItems.json @@ -31,6 +31,7 @@ ], "globals": { "maxHeight": 24.7871, + "mostUsedHeight": 11, "minX": 52.262, "maxX": 571.0594300000001, "minY": 76.19790000000002,