Clean up types

- merge `ItemType`/`BlockType` to `TextType`
- fix bug with duplicate and flattened types
This commit is contained in:
Johannes Zillmann 2024-04-02 11:18:55 -06:00
parent 3c31c12768
commit b5f3075bdf
19 changed files with 327 additions and 178 deletions

View File

@ -36,34 +36,34 @@
} }
{"page":0,"change":"ContentChange","types":["H1"],"str":"SHERLOCK","dir":"ltr","width":"363.20","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","656.26"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":656.262,"line":0} {"page":0,"change":"ContentChange","types":["H1"],"str":"SHERLOCK","dir":"ltr","width":"363.20","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","656.26"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":656.262,"line":0}
{"page":0,"change":"ContentChange","types":["H1"],"str":"HOLMES","dir":"ltr","width":"275.57","height":"59.78","transform":["59.78","0.00","0.00","59.78","159.37","592.48"],"fontName":"NVBKCW+RoyalInitialen","x":159.372,"y":592.4789999999999,"line":1} {"page":0,"change":"ContentChange","types":["H1"],"str":"HOLMES","dir":"ltr","width":"275.57","height":"59.78","transform":["59.78","0.00","0.00","59.78","159.37","592.48"],"fontName":"NVBKCW+RoyalInitialen","x":159.372,"y":592.4789999999999,"line":1}
{"page":1,"change":"ContentChange","types":["H5"],"str":"S IR A RTHUR I GNATIUS","line":0,"x":196.324,"y":702.187,"width":"186.21","height":"20.66","fontName":["KKLGKN+NimbusRomNo9L-Regu"],"dir":["ltr"]} {"page":1,"change":"ContentChange","types":["H4"],"str":"S IR A RTHUR I GNATIUS","line":0,"x":196.324,"y":702.187,"width":"186.21","height":"20.66","fontName":["KKLGKN+NimbusRomNo9L-Regu"],"dir":["ltr"]}
{"page":1,"change":"ContentChange","types":["H2"],"str":"C ONAN D OYLE","line":1,"x":214.04500000000002,"y":678.946,"width":"156.34","height":"24.79","fontName":["INBNCB+NimbusRomNo9L-Medi"],"dir":["ltr"]} {"page":1,"change":"ContentChange","types":["H2"],"str":"C ONAN D OYLE","line":1,"x":214.04500000000002,"y":678.946,"width":"156.34","height":"24.79","fontName":["INBNCB+NimbusRomNo9L-Medi"],"dir":["ltr"]}
{"page":1,"change":"ContentChange","types":["H3"],"str":"T HE A DVENTURES O F","line":3,"x":149.122,"y":483.32700000000006,"width":"273.72","height":"29.89","fontName":["INBNCB+NimbusRomNo9L-Medi"],"dir":["ltr"]} {"page":1,"change":"ContentChange","types":["H3"],"str":"T HE A DVENTURES O F","line":3,"x":149.122,"y":483.32700000000006,"width":"273.72","height":"29.89","fontName":["INBNCB+NimbusRomNo9L-Medi"],"dir":["ltr"]}
{"page":1,"change":"ContentChange","types":["H3"],"str":"SHERLOCK HOLMES","dir":"ltr","width":"327.51","height":"29.89","transform":["29.89","0.00","0.00","29.89","133.40","433.72"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":133.40100000000007,"y":433.7180000000001,"line":4} {"page":1,"change":"ContentChange","types":["H3"],"str":"SHERLOCK HOLMES","dir":"ltr","width":"327.51","height":"29.89","transform":["29.89","0.00","0.00","29.89","133.40","433.72"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":133.40100000000007,"y":433.7180000000001,"line":4}
{"page":4,"change":"ContentChange","types":["H5"],"str":"Adventure I","dir":"ltr","width":"106.74","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} {"page":4,"change":"ContentChange","types":["H4"],"str":"Adventure I","dir":"ltr","width":"106.74","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0}
{"page":4,"change":"ContentChange","types":["H6"],"str":"I","dir":"ltr","width":"5.58","height":"14.35","transform":["14.35","0.00","0.00","14.35","117.83","522.94"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":522.942,"line":2} {"page":4,"change":"ContentChange","types":["H5"],"str":"I","dir":"ltr","width":"5.58","height":"14.35","transform":["14.35","0.00","0.00","14.35","117.83","522.94"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":522.942,"line":2}
{"page":4,"change":"ContentChange","types":["H2"],"str":"T","dir":"ltr","width":"44.05","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","456.23"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":456.232,"line":3} {"page":4,"change":"ContentChange","types":["H2"],"str":"T","dir":"ltr","width":"44.05","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","456.23"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":456.232,"line":3}
{"page":11,"change":"ContentChange","types":["H6"],"str":"II","dir":"ltr","width":"11.16","height":"14.35","transform":["14.35","0.00","0.00","14.35","117.83","494.00"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.82799999999993,"y":494.00400000000036,"line":15} {"page":11,"change":"ContentChange","types":["H5"],"str":"II","dir":"ltr","width":"11.16","height":"14.35","transform":["14.35","0.00","0.00","14.35","117.83","494.00"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.82799999999993,"y":494.00400000000036,"line":15}
{"page":18,"change":"ContentChange","types":["H6"],"str":"III","dir":"ltr","width":"16.74","height":"14.35","transform":["14.35","0.00","0.00","14.35","117.83","304.32"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.82799999999999,"y":304.3160000000006,"line":29} {"page":18,"change":"ContentChange","types":["H5"],"str":"III","dir":"ltr","width":"16.74","height":"14.35","transform":["14.35","0.00","0.00","14.35","117.83","304.32"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.82799999999999,"y":304.3160000000006,"line":29}
{"page":22,"change":"ContentChange","types":["H5"],"str":"Adventure II","dir":"ltr","width":"114.78","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} {"page":22,"change":"ContentChange","types":["H4"],"str":"Adventure II","dir":"ltr","width":"114.78","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0}
{"page":22,"change":"ContentChange","types":["H2"],"str":"I","dir":"ltr","width":"37.06","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","485.40"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":485.39500000000004,"line":2} {"page":22,"change":"ContentChange","types":["H2"],"str":"I","dir":"ltr","width":"37.06","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","485.40"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":485.39500000000004,"line":2}
{"page":39,"change":"ContentChange","types":["H5"],"str":"Adventure III","dir":"ltr","width":"122.82","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} {"page":39,"change":"ContentChange","types":["H4"],"str":"Adventure III","dir":"ltr","width":"122.82","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0}
{"page":39,"change":"ContentChange","types":["H2"],"str":"“ M","line":2,"x":117.828,"y":486.678,"width":"49.74","height":"59.78","fontName":["KKLGKN+NimbusRomNo9L-Regu","NVBKCW+RoyalInitialen"],"dir":["ltr"]} {"page":39,"change":"ContentChange","types":["H2"],"str":"“ M","line":2,"x":117.828,"y":486.678,"width":"49.74","height":"59.78","fontName":["KKLGKN+NimbusRomNo9L-Regu","NVBKCW+RoyalInitialen"],"dir":["ltr"]}
{"page":52,"change":"ContentChange","types":["H5"],"str":"Adventure IV","dir":"ltr","width":"121.66","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} {"page":52,"change":"ContentChange","types":["H4"],"str":"Adventure IV","dir":"ltr","width":"121.66","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0}
{"page":52,"change":"ContentChange","types":["H2"],"str":"W","dir":"ltr","width":"48.90","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","485.34"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":485.336,"line":2} {"page":52,"change":"ContentChange","types":["H2"],"str":"W","dir":"ltr","width":"48.90","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","485.34"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":485.336,"line":2}
{"page":70,"change":"ContentChange","types":["H5"],"str":"Adventure V","dir":"ltr","width":"113.62","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} {"page":70,"change":"ContentChange","types":["H4"],"str":"Adventure V","dir":"ltr","width":"113.62","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0}
{"page":70,"change":"ContentChange","types":["H2"],"str":"W","dir":"ltr","width":"48.90","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","485.34"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":485.336,"line":2} {"page":70,"change":"ContentChange","types":["H2"],"str":"W","dir":"ltr","width":"48.90","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","485.34"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":485.336,"line":2}
{"page":84,"change":"ContentChange","types":["H5"],"str":"Adventure VI","dir":"ltr","width":"121.66","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} {"page":84,"change":"ContentChange","types":["H4"],"str":"Adventure VI","dir":"ltr","width":"121.66","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0}
{"page":84,"change":"ContentChange","types":["H2"],"str":"I","dir":"ltr","width":"37.06","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","485.40"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":485.39500000000004,"line":2} {"page":84,"change":"ContentChange","types":["H2"],"str":"I","dir":"ltr","width":"37.06","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","485.40"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":485.39500000000004,"line":2}
{"page":101,"change":"ContentChange","types":["H5"],"str":"Adventure VII","dir":"ltr","width":"129.70","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} {"page":101,"change":"ContentChange","types":["H4"],"str":"Adventure VII","dir":"ltr","width":"129.70","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0}
{"page":101,"change":"ContentChange","types":["H2"],"str":"I","dir":"ltr","width":"37.06","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","455.51"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":455.508,"line":3} {"page":101,"change":"ContentChange","types":["H2"],"str":"I","dir":"ltr","width":"37.06","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","455.51"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":455.508,"line":3}
{"page":116,"change":"ContentChange","types":["H5"],"str":"Adventure VIII","dir":"ltr","width":"137.74","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} {"page":116,"change":"ContentChange","types":["H4"],"str":"Adventure VIII","dir":"ltr","width":"137.74","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0}
{"page":116,"change":"ContentChange","types":["H2"],"str":"O","dir":"ltr","width":"50.09","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","455.81"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":455.806,"line":3} {"page":116,"change":"ContentChange","types":["H2"],"str":"O","dir":"ltr","width":"50.09","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","455.81"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":455.806,"line":3}
{"page":134,"change":"ContentChange","types":["H5"],"str":"Adventure IX","dir":"ltr","width":"121.66","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} {"page":134,"change":"ContentChange","types":["H4"],"str":"Adventure IX","dir":"ltr","width":"121.66","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0}
{"page":134,"change":"ContentChange","types":["H2"],"str":"O","dir":"ltr","width":"50.09","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","455.81"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":455.806,"line":3} {"page":134,"change":"ContentChange","types":["H2"],"str":"O","dir":"ltr","width":"50.09","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","455.81"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":455.806,"line":3}
{"page":149,"change":"ContentChange","types":["H5"],"str":"Adventure X","dir":"ltr","width":"113.62","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} {"page":149,"change":"ContentChange","types":["H4"],"str":"Adventure X","dir":"ltr","width":"113.62","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0}
{"page":149,"change":"ContentChange","types":["H2"],"str":"T","dir":"ltr","width":"44.05","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","455.57"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":455.567,"line":3} {"page":149,"change":"ContentChange","types":["H2"],"str":"T","dir":"ltr","width":"44.05","height":"59.78","transform":["59.78","0.00","0.00","59.78","117.83","455.57"],"fontName":"NVBKCW+RoyalInitialen","x":117.828,"y":455.567,"line":3}
{"page":165,"change":"ContentChange","types":["H5"],"str":"Adventure XI","dir":"ltr","width":"121.66","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} {"page":165,"change":"ContentChange","types":["H4"],"str":"Adventure XI","dir":"ltr","width":"121.66","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0}
{"page":165,"change":"ContentChange","types":["H2"],"str":"“ H","line":3,"x":117.828,"y":456.22499999999997,"width":"46.75","height":"59.78","fontName":["KKLGKN+NimbusRomNo9L-Regu","NVBKCW+RoyalInitialen"],"dir":["ltr"]} {"page":165,"change":"ContentChange","types":["H2"],"str":"“ H","line":3,"x":117.828,"y":456.22499999999997,"width":"46.75","height":"59.78","fontName":["KKLGKN+NimbusRomNo9L-Regu","NVBKCW+RoyalInitialen"],"dir":["ltr"]}
{"page":183,"change":"ContentChange","types":["H5"],"str":"Adventure XII","dir":"ltr","width":"129.70","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0} {"page":183,"change":"ContentChange","types":["H4"],"str":"Adventure XII","dir":"ltr","width":"129.70","height":"20.66","transform":["20.66","0.00","0.00","20.66","117.83","630.54"],"fontName":"INBNCB+NimbusRomNo9L-Medi","x":117.828,"y":630.539,"line":0}
{"page":183,"change":"ContentChange","types":["H2"],"str":"“ T","line":3,"x":117.828,"y":455.56699999999995,"width":"48.90","height":"59.78","fontName":["KKLGKN+NimbusRomNo9L-Regu","NVBKCW+RoyalInitialen"],"dir":["ltr"]} {"page":183,"change":"ContentChange","types":["H2"],"str":"“ T","line":3,"x":117.828,"y":455.56699999999995,"width":"48.90","height":"59.78","fontName":["KKLGKN+NimbusRomNo9L-Regu","NVBKCW+RoyalInitialen"],"dir":["ltr"]}

View File

@ -34,14 +34,14 @@
], ],
"globals": {} "globals": {}
} }
{"page":0,"change":"ContentChange","types":["H3"],"str":"Freies Wissen dank ","dir":"ltr","width":"178.49","height":"15.22","transform":["10.76","10.76","-10.76","10.76","123.28","395.24"],"fontName":"QMZZIE+AvenirLTStd-Black","x":123.278,"y":395.2377,"line":0} {"page":0,"change":"ContentChange","types":["H2"],"str":"Freies Wissen dank ","dir":"ltr","width":"178.49","height":"15.22","transform":["10.76","10.76","-10.76","10.76","123.28","395.24"],"fontName":"QMZZIE+AvenirLTStd-Black","x":123.278,"y":395.2377,"line":0}
{"page":0,"change":"ContentChange","types":["H3"],"str":"Creative-Commons-Lizenzen","dir":"ltr","width":"255.25","height":"15.22","transform":["10.76","10.76","-10.76","10.76","81.29","322.31"],"fontName":"QMZZIE+AvenirLTStd-Black","x":81.28529540000001,"y":322.30753500000003,"line":1} {"page":0,"change":"ContentChange","types":["H2"],"str":"Creative-Commons-Lizenzen","dir":"ltr","width":"255.25","height":"15.22","transform":["10.76","10.76","-10.76","10.76","81.29","322.31"],"fontName":"QMZZIE+AvenirLTStd-Black","x":81.28529540000001,"y":322.30753500000003,"line":1}
{"page":1,"change":"ContentChange","types":["H4"],"str":"CC-Lizenzen","dir":"ltr","width":"100.79","height":"14.00","transform":["14.00","0.00","0.00","14.00","34.02","512.47"],"fontName":"QMZZIE+AvenirLTStd-Black","x":34.0158,"y":512.4728,"line":26} {"page":1,"change":"ContentChange","types":["H3"],"str":"CC-Lizenzen","dir":"ltr","width":"100.79","height":"14.00","transform":["14.00","0.00","0.00","14.00","34.02","512.47"],"fontName":"QMZZIE+AvenirLTStd-Black","x":34.0158,"y":512.4728,"line":26}
{"page":2,"change":"ContentChange","types":["H5"],"str":"John H. Weitzmann","dir":"ltr","width":"96.43","height":"13.00","transform":["13.00","0.00","0.00","13.00","34.02","86.93"],"fontName":"QMZZIE+AGaramond-Italic","x":34.0157,"y":86.9291,"line":16} {"page":2,"change":"ContentChange","types":["H4"],"str":"John H. Weitzmann","dir":"ltr","width":"96.43","height":"13.00","transform":["13.00","0.00","0.00","13.00","34.02","86.93"],"fontName":"QMZZIE+AGaramond-Italic","x":34.0157,"y":86.9291,"line":16}
{"page":5,"change":"ContentChange","types":["H5"],"str":"Stell dir eine Welt vor, in der","dir":"ltr","width":"136.99","height":"13.00","transform":["13.00","0.00","0.00","13.00","34.02","482.93"],"fontName":"QMZZIE+AGaramond-Italic","x":34.0157,"y":482.9292,"line":1} {"page":5,"change":"ContentChange","types":["H4"],"str":"Stell dir eine Welt vor, in der","dir":"ltr","width":"136.99","height":"13.00","transform":["13.00","0.00","0.00","13.00","34.02","482.93"],"fontName":"QMZZIE+AGaramond-Italic","x":34.0157,"y":482.9292,"line":1}
{"page":5,"change":"ContentChange","types":["H5"],"str":" jeder Mensch an der Gesamtheit ","dir":"ltr","width":"159.60","height":"13.00","transform":["13.00","0.00","0.00","13.00","34.02","470.93"],"fontName":"QMZZIE+AGaramond-Italic","x":34.0157,"y":470.93019999999996,"line":2} {"page":5,"change":"ContentChange","types":["H4"],"str":" jeder Mensch an der Gesamtheit ","dir":"ltr","width":"159.60","height":"13.00","transform":["13.00","0.00","0.00","13.00","34.02","470.93"],"fontName":"QMZZIE+AGaramond-Italic","x":34.0157,"y":470.93019999999996,"line":2}
{"page":5,"change":"ContentChange","types":["H5"],"str":"des Wissens teilhaben kann. ","dir":"ltr","width":"134.30","height":"13.00","transform":["13.00","0.00","0.00","13.00","34.02","458.93"],"fontName":"QMZZIE+AGaramond-Italic","x":34.0157,"y":458.93119999999993,"line":3} {"page":5,"change":"ContentChange","types":["H4"],"str":"des Wissens teilhaben kann. ","dir":"ltr","width":"134.30","height":"13.00","transform":["13.00","0.00","0.00","13.00","34.02","458.93"],"fontName":"QMZZIE+AGaramond-Italic","x":34.0157,"y":458.93119999999993,"line":3}
{"page":5,"change":"ContentChange","types":["H5"],"str":"Das ist unsere Mission.","dir":"ltr","width":"108.99","height":"13.00","transform":["13.00","0.00","0.00","13.00","34.02","446.93"],"fontName":"QMZZIE+AGaramond-Italic","x":34.0157,"y":446.9321999999999,"line":4} {"page":5,"change":"ContentChange","types":["H4"],"str":"Das ist unsere Mission.","dir":"ltr","width":"108.99","height":"13.00","transform":["13.00","0.00","0.00","13.00","34.02","446.93"],"fontName":"QMZZIE+AGaramond-Italic","x":34.0157,"y":446.9321999999999,"line":4}
{"page":5,"change":"ContentChange","types":["H2"],"str":"1","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","34.02","345.93"],"fontName":"QMZZIE+AvenirLTStd-Black","x":34.0157,"y":345.9292,"line":6} {"page":5,"change":"ContentChange","types":["H2"],"str":"1","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","34.02","345.93"],"fontName":"QMZZIE+AvenirLTStd-Black","x":34.0157,"y":345.9292,"line":6}
{"page":7,"change":"ContentChange","types":["H2"],"str":"2","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","215.76","503.81"],"fontName":"QMZZIE+AvenirLTStd-Black","x":215.7638,"y":503.8094,"line":37} {"page":7,"change":"ContentChange","types":["H2"],"str":"2","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","215.76","503.81"],"fontName":"QMZZIE+AvenirLTStd-Black","x":215.7638,"y":503.8094,"line":37}
{"page":8,"change":"ContentChange","types":["H2"],"str":"3","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","215.76","503.81"],"fontName":"QMZZIE+AvenirLTStd-Black","x":215.7638,"y":503.8094,"line":33} {"page":8,"change":"ContentChange","types":["H2"],"str":"3","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","215.76","503.81"],"fontName":"QMZZIE+AvenirLTStd-Black","x":215.7638,"y":503.8094,"line":33}
@ -51,4 +51,4 @@
{"page":12,"change":"ContentChange","types":["H2"],"str":"7","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","34.02","358.93"],"fontName":"QMZZIE+AvenirLTStd-Black","x":34.0157,"y":358.9292,"line":11} {"page":12,"change":"ContentChange","types":["H2"],"str":"7","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","34.02","358.93"],"fontName":"QMZZIE+AvenirLTStd-Black","x":34.0157,"y":358.9292,"line":11}
{"page":13,"change":"ContentChange","types":["H2"],"str":"8","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","34.02","429.93"],"fontName":"QMZZIE+AvenirLTStd-Black","x":34.0157,"y":429.9292,"line":5} {"page":13,"change":"ContentChange","types":["H2"],"str":"8","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","34.02","429.93"],"fontName":"QMZZIE+AvenirLTStd-Black","x":34.0157,"y":429.9292,"line":5}
{"page":14,"change":"ContentChange","types":["H2"],"str":"9","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","34.02","503.81"],"fontName":"QMZZIE+AvenirLTStd-Black","x":34.0157,"y":503.8094,"line":1} {"page":14,"change":"ContentChange","types":["H2"],"str":"9","dir":"ltr","width":"14.21","height":"24.00","transform":["24.00","0.00","0.00","24.00","34.02","503.81"],"fontName":"QMZZIE+AvenirLTStd-Black","x":34.0157,"y":503.8094,"line":1}
{"page":22,"change":"ContentChange","types":["H4"],"str":"Paul Klimpel","dir":"ltr","width":"70.42","height":"14.00","transform":["14.00","0.00","0.00","14.00","215.88","230.93"],"fontName":"QMZZIE+AGaramond-Italic","x":215.8819,"y":230.9291,"line":53} {"page":22,"change":"ContentChange","types":["H3"],"str":"Paul Klimpel","dir":"ltr","width":"70.42","height":"14.00","transform":["14.00","0.00","0.00","14.00","215.88","230.93"],"fontName":"QMZZIE+AGaramond-Italic","x":215.8819,"y":230.9291,"line":53}

View File

@ -37,40 +37,40 @@
{"page":0,"change":"ContentChange","types":["H1"],"str":"Safe C ommun i cation","line":1,"x":99.264,"y":436.9,"width":"395.03","height":"36.00","fontName":["ABCDEE+Lucida Calligraphy"],"dir":["ltr"]} {"page":0,"change":"ContentChange","types":["H1"],"str":"Safe C ommun i cation","line":1,"x":99.264,"y":436.9,"width":"395.03","height":"36.00","fontName":["ABCDEE+Lucida Calligraphy"],"dir":["ltr"]}
{"page":0,"change":"ContentChange","types":["H2"],"str":"Design, implement and measure: A guide to ","line":2,"x":99.264,"y":387.31,"width":"549.00","height":"26.04","fontName":[null],"dir":["ltr"]} {"page":0,"change":"ContentChange","types":["H2"],"str":"Design, implement and measure: A guide to ","line":2,"x":99.264,"y":387.31,"width":"549.00","height":"26.04","fontName":[null],"dir":["ltr"]}
{"page":0,"change":"ContentChange","types":["H2"],"str":"improving transfers of care and handover","line":3,"x":99.264,"y":352.99,"width":"507.23","height":"26.04","fontName":[null],"dir":["ltr"]} {"page":0,"change":"ContentChange","types":["H2"],"str":"improving transfers of care and handover","line":3,"x":99.264,"y":352.99,"width":"507.23","height":"26.04","fontName":[null],"dir":["ltr"]}
{"page":0,"change":"ContentChange","types":["H4"],"str":"Authors :","line":4,"x":526.63,"y":111.26,"width":"66.46","height":"15.96","fontName":[null],"dir":["ltr"]} {"page":0,"change":"ContentChange","types":["H3"],"str":"Authors :","line":4,"x":526.63,"y":111.26,"width":"66.46","height":"15.96","fontName":[null],"dir":["ltr"]}
{"page":0,"change":"ContentChange","types":["H4"],"str":"Nicola Davey & Ali Cole","line":5,"x":526.63,"y":80.04,"width":"175.03","height":"15.96","fontName":[null],"dir":["ltr"]} {"page":0,"change":"ContentChange","types":["H3"],"str":"Nicola Davey & Ali Cole","line":5,"x":526.63,"y":80.04,"width":"175.03","height":"15.96","fontName":[null],"dir":["ltr"]}
{"page":1,"change":"ContentChange","types":["H2"],"str":"Contents :","line":1,"x":99.264,"y":512.26,"width":"130.55","height":"27.96","fontName":[null],"dir":["ltr"]} {"page":1,"change":"ContentChange","types":["H2"],"str":"Contents :","line":1,"x":99.264,"y":512.26,"width":"130.55","height":"27.96","fontName":[null],"dir":["ltr"]}
{"page":2,"change":"ContentChange","types":["H4"],"str":"Creative Commons Attribution non - commercial ","line":25,"x":99.264,"y":130.34,"width":"344.85","height":"15.96","fontName":[null,"Arial"],"dir":["ltr"]} {"page":2,"change":"ContentChange","types":["H3"],"str":"Creative Commons Attribution non - commercial ","line":25,"x":99.264,"y":130.34,"width":"344.85","height":"15.96","fontName":[null,"Arial"],"dir":["ltr"]}
{"page":4,"change":"ContentChange","types":["H4"],"str":"Why use this guide?","dir":"ltr","width":"155.37","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","284.57"],"x":99.264,"y":284.57,"line":13} {"page":4,"change":"ContentChange","types":["H3"],"str":"Why use this guide?","dir":"ltr","width":"155.37","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","284.57"],"x":99.264,"y":284.57,"line":13}
{"page":6,"change":"ContentChange","types":["H4"],"str":"Passing the baton","dir":"ltr","width":"146.56","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","523.66"],"fontName":"Arial,Bold","x":99.264,"y":523.66,"line":1} {"page":6,"change":"ContentChange","types":["H3"],"str":"Passing the baton","dir":"ltr","width":"146.56","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","523.66"],"fontName":"Arial,Bold","x":99.264,"y":523.66,"line":1}
{"page":7,"change":"ContentChange","types":["H2"],"str":"P lanned, structured transfer of care : what does ","line":1,"x":99.264,"y":512.26,"width":"636.03","height":"27.96","fontName":[null],"dir":["ltr"]} {"page":7,"change":"ContentChange","types":["H2"],"str":"P lanned, structured transfer of care : what does ","line":1,"x":99.264,"y":512.26,"width":"636.03","height":"27.96","fontName":[null],"dir":["ltr"]}
{"page":7,"change":"ContentChange","types":["H2"],"str":"it look like?","dir":"ltr","width":"153.92","height":"27.96","transform":["27.96","0.00","0.00","27.96","99.26","479.98"],"x":99.264,"y":479.98,"line":2} {"page":7,"change":"ContentChange","types":["H2"],"str":"it look like?","dir":"ltr","width":"153.92","height":"27.96","transform":["27.96","0.00","0.00","27.96","99.26","479.98"],"x":99.264,"y":479.98,"line":2}
{"page":8,"change":"ContentChange","types":["H2"],"str":"How do you achieve it?","dir":"ltr","width":"311.11","height":"27.96","transform":["27.96","0.00","0.00","27.96","99.26","512.26"],"x":99.264,"y":512.26,"line":1} {"page":8,"change":"ContentChange","types":["H2"],"str":"How do you achieve it?","dir":"ltr","width":"311.11","height":"27.96","transform":["27.96","0.00","0.00","27.96","99.26","512.26"],"x":99.264,"y":512.26,"line":1}
{"page":9,"change":"ContentChange","types":["H3"],"str":"Start out","dir":"ltr","width":"98.74","height":"24.00","transform":["24.00","0.00","0.00","24.00","155.18","484.18"],"x":155.18,"y":484.18,"line":1} {"page":9,"change":"ContentChange","types":["H2"],"str":"Start out","dir":"ltr","width":"98.74","height":"24.00","transform":["24.00","0.00","0.00","24.00","155.18","484.18"],"x":155.18,"y":484.18,"line":1}
{"page":11,"change":"ContentChange","types":["H4"],"str":"What does good look like?","line":1,"x":99.264,"y":523.66,"width":"207.10","height":"15.96","fontName":[null,"Arial,Bold"],"dir":["ltr"]} {"page":11,"change":"ContentChange","types":["H3"],"str":"What does good look like?","line":1,"x":99.264,"y":523.66,"width":"207.10","height":"15.96","fontName":[null,"Arial,Bold"],"dir":["ltr"]}
{"page":12,"change":"ContentChange","types":["H3"],"str":"Define and scope","dir":"ltr","width":"198.62","height":"24.00","transform":["24.00","0.00","0.00","24.00","156.26","488.50"],"x":156.26,"y":488.5,"line":1} {"page":12,"change":"ContentChange","types":["H2"],"str":"Define and scope","dir":"ltr","width":"198.62","height":"24.00","transform":["24.00","0.00","0.00","24.00","156.26","488.50"],"x":156.26,"y":488.5,"line":1}
{"page":12,"change":"ContentChange","types":["H4"],"str":"What are we trying to accomplish?","dir":"ltr","width":"263.95","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","276.65"],"x":99.264,"y":276.65,"line":11} {"page":12,"change":"ContentChange","types":["H3"],"str":"What are we trying to accomplish?","dir":"ltr","width":"263.95","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","276.65"],"x":99.264,"y":276.65,"line":11}
{"page":13,"change":"ContentChange","types":["H4"],"str":"Link your improvement project to your organisation s strategic aims ","line":1,"x":99.264,"y":523.66,"width":"523.31","height":"15.96","fontName":[null,"Arial,Bold"],"dir":["ltr"]} {"page":13,"change":"ContentChange","types":["H3"],"str":"Link your improvement project to your organisation s strategic aims ","line":1,"x":99.264,"y":523.66,"width":"523.31","height":"15.96","fontName":[null,"Arial,Bold"],"dir":["ltr"]}
{"page":15,"change":"ContentChange","types":["H4"],"str":"What is the scale of your improvement project?","line":1,"x":99.264,"y":523.66,"width":"356.43","height":"15.96","fontName":[null],"dir":["ltr"]} {"page":15,"change":"ContentChange","types":["H3"],"str":"What is the scale of your improvement project?","line":1,"x":99.264,"y":523.66,"width":"356.43","height":"15.96","fontName":[null],"dir":["ltr"]}
{"page":15,"change":"ContentChange","types":["H4"],"str":"E ngage staff, patients and users and s et up your project team ","line":6,"x":99.264,"y":432.22,"width":"469.06","height":"15.96","fontName":[null],"dir":["ltr"]} {"page":15,"change":"ContentChange","types":["H3"],"str":"E ngage staff, patients and users and s et up your project team ","line":6,"x":99.264,"y":432.22,"width":"469.06","height":"15.96","fontName":[null],"dir":["ltr"]}
{"page":16,"change":"ContentChange","types":["H4"],"str":"Who to include in your team?","dir":"ltr","width":"223.84","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","523.66"],"x":99.264,"y":523.66,"line":1} {"page":16,"change":"ContentChange","types":["H3"],"str":"Who to include in your team?","dir":"ltr","width":"223.84","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","523.66"],"x":99.264,"y":523.66,"line":1}
{"page":17,"change":"ContentChange","types":["H4"],"str":"P utting it all together","line":1,"x":99.264,"y":495.1,"width":"159.71","height":"15.96","fontName":[null],"dir":["ltr"]} {"page":17,"change":"ContentChange","types":["H3"],"str":"P utting it all together","line":1,"x":99.264,"y":495.1,"width":"159.71","height":"15.96","fontName":[null],"dir":["ltr"]}
{"page":18,"change":"ContentChange","types":["H3"],"str":"Measure and understand","dir":"ltr","width":"284.04","height":"24.00","transform":["24.00","0.00","0.00","24.00","158.42","478.18"],"x":158.42,"y":478.18,"line":1} {"page":18,"change":"ContentChange","types":["H2"],"str":"Measure and understand","dir":"ltr","width":"284.04","height":"24.00","transform":["24.00","0.00","0.00","24.00","158.42","478.18"],"x":158.42,"y":478.18,"line":1}
{"page":20,"change":"ContentChange","types":["H4"],"str":"Choose your measures and start collecting your baseline data","line":1,"x":99.264,"y":523.66,"width":"468.22","height":"15.96","fontName":[null],"dir":["ltr"]} {"page":20,"change":"ContentChange","types":["H3"],"str":"Choose your measures and start collecting your baseline data","line":1,"x":99.264,"y":523.66,"width":"468.22","height":"15.96","fontName":[null],"dir":["ltr"]}
{"page":22,"change":"ContentChange","types":["H4"],"str":"Capture and display the data","dir":"ltr","width":"218.57","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","523.66"],"x":99.264,"y":523.66,"line":1} {"page":22,"change":"ContentChange","types":["H3"],"str":"Capture and display the data","dir":"ltr","width":"218.57","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","523.66"],"x":99.264,"y":523.66,"line":1}
{"page":23,"change":"ContentChange","types":["H3"],"str":"Design and plan","dir":"ltr","width":"185.38","height":"24.00","transform":["24.00","0.00","0.00","24.00","154.82","484.18"],"x":154.82,"y":484.18,"line":1} {"page":23,"change":"ContentChange","types":["H2"],"str":"Design and plan","dir":"ltr","width":"185.38","height":"24.00","transform":["24.00","0.00","0.00","24.00","154.82","484.18"],"x":154.82,"y":484.18,"line":1}
{"page":24,"change":"ContentChange","types":["H4"],"str":"Where to s tart?","line":4,"x":99.264,"y":453.46,"width":"117.23","height":"15.96","fontName":[null],"dir":["ltr"]} {"page":24,"change":"ContentChange","types":["H3"],"str":"Where to s tart?","line":4,"x":99.264,"y":453.46,"width":"117.23","height":"15.96","fontName":[null],"dir":["ltr"]}
{"page":26,"change":"ContentChange","types":["H4"],"str":"Generate imp rovement ideas","line":1,"x":99.264,"y":523.66,"width":"219.53","height":"15.96","fontName":[null],"dir":["ltr"]} {"page":26,"change":"ContentChange","types":["H3"],"str":"Generate imp rovement ideas","line":1,"x":99.264,"y":523.66,"width":"219.53","height":"15.96","fontName":[null],"dir":["ltr"]}
{"page":27,"change":"ContentChange","types":["H4"],"str":"Design your change intervention ( s )","line":1,"x":99.264,"y":523.66,"width":"268.18","height":"15.96","fontName":[null],"dir":["ltr"]} {"page":27,"change":"ContentChange","types":["H3"],"str":"Design your change intervention ( s )","line":1,"x":99.264,"y":523.66,"width":"268.18","height":"15.96","fontName":[null],"dir":["ltr"]}
{"page":28,"change":"ContentChange","types":["H4"],"str":"Make it your own","dir":"ltr","width":"129.68","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","523.66"],"x":99.264,"y":523.66,"line":1} {"page":28,"change":"ContentChange","types":["H3"],"str":"Make it your own","dir":"ltr","width":"129.68","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","523.66"],"x":99.264,"y":523.66,"line":1}
{"page":29,"change":"ContentChange","types":["H4"],"str":"Use d ot v oting to define your minimum data set ","line":1,"x":99.264,"y":523.66,"width":"374.53","height":"15.96","fontName":["Arial,Bold",null],"dir":["ltr"]} {"page":29,"change":"ContentChange","types":["H3"],"str":"Use d ot v oting to define your minimum data set ","line":1,"x":99.264,"y":523.66,"width":"374.53","height":"15.96","fontName":["Arial,Bold",null],"dir":["ltr"]}
{"page":30,"change":"ContentChange","types":["H4"],"str":"Using structured communication t ool s","line":1,"x":99.264,"y":523.66,"width":"293.07","height":"15.96","fontName":[null,"Arial,Bold"],"dir":["ltr"]} {"page":30,"change":"ContentChange","types":["H3"],"str":"Using structured communication t ool s","line":1,"x":99.264,"y":523.66,"width":"293.07","height":"15.96","fontName":[null,"Arial,Bold"],"dir":["ltr"]}
{"page":32,"change":"ContentChange","types":["H4"],"str":"Document y our s tandard p rocess","line":8,"x":99.264,"y":402.31,"width":"255.06","height":"15.96","fontName":[null],"dir":["ltr"]} {"page":32,"change":"ContentChange","types":["H3"],"str":"Document y our s tandard p rocess","line":8,"x":99.264,"y":402.31,"width":"255.06","height":"15.96","fontName":[null],"dir":["ltr"]}
{"page":32,"change":"ContentChange","types":["H4"],"str":"Choose and review your measures ","line":13,"x":99.264,"y":310.85,"width":"268.19","height":"15.96","fontName":[null],"dir":["ltr"]} {"page":32,"change":"ContentChange","types":["H3"],"str":"Choose and review your measures ","line":13,"x":99.264,"y":310.85,"width":"268.19","height":"15.96","fontName":[null],"dir":["ltr"]}
{"page":33,"change":"ContentChange","types":["H3"],"str":"Pilot and implement","dir":"ltr","width":"228.10","height":"24.00","transform":["24.00","0.00","0.00","24.00","155.18","488.50"],"x":155.18,"y":488.5,"line":1} {"page":33,"change":"ContentChange","types":["H2"],"str":"Pilot and implement","dir":"ltr","width":"228.10","height":"24.00","transform":["24.00","0.00","0.00","24.00","155.18","488.50"],"x":155.18,"y":488.5,"line":1}
{"page":35,"change":"ContentChange","types":["H4"],"str":"Plan for implementation","dir":"ltr","width":"182.10","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","523.66"],"x":99.264,"y":523.66,"line":1} {"page":35,"change":"ContentChange","types":["H3"],"str":"Plan for implementation","dir":"ltr","width":"182.10","height":"15.96","transform":["15.96","0.00","0.00","15.96","99.26","523.66"],"x":99.264,"y":523.66,"line":1}
{"page":37,"change":"ContentChange","types":["H3"],"str":"Sustain and share","dir":"ltr","width":"206.64","height":"24.00","transform":["24.00","0.00","0.00","24.00","159.38","480.82"],"x":159.38,"y":480.82,"line":1} {"page":37,"change":"ContentChange","types":["H2"],"str":"Sustain and share","dir":"ltr","width":"206.64","height":"24.00","transform":["24.00","0.00","0.00","24.00","159.38","480.82"],"x":159.38,"y":480.82,"line":1}
{"page":38,"change":"ContentChange","types":["H4"],"str":"Share and celebrate success","line":1,"x":99.264,"y":523.66,"width":"215.03","height":"15.96","fontName":[null],"dir":["ltr"]} {"page":38,"change":"ContentChange","types":["H3"],"str":"Share and celebrate success","line":1,"x":99.264,"y":523.66,"width":"215.03","height":"15.96","fontName":[null],"dir":["ltr"]}
{"page":38,"change":"ContentChange","types":["H4"],"str":"Keep measuring ....","line":11,"x":99.264,"y":332.11,"width":"142.18","height":"15.96","fontName":[null],"dir":["ltr"]} {"page":38,"change":"ContentChange","types":["H3"],"str":"Keep measuring ....","line":11,"x":99.264,"y":332.11,"width":"142.18","height":"15.96","fontName":[null],"dir":["ltr"]}
{"page":48,"change":"ContentChange","types":["H5"],"str":"Acute example","dir":"ltr","width":"86.67","height":"14.40","transform":["14.44","0.00","0.00","14.40","367.83","485.36"],"fontName":"ABCDEE+Calibri","x":367.828903554016,"y":485.358469,"line":4} {"page":48,"change":"ContentChange","types":["H4"],"str":"Acute example","dir":"ltr","width":"86.67","height":"14.40","transform":["14.44","0.00","0.00","14.40","367.83","485.36"],"fontName":"ABCDEE+Calibri","x":367.828903554016,"y":485.358469,"line":4}
{"page":59,"change":"ContentChange","types":["H4"],"str":"Product timeline ","dir":"ltr","width":"119.09","height":"15.96","transform":["15.96","0.00","0.00","15.96","53.88","520.78"],"x":53.88,"y":520.78,"line":1} {"page":59,"change":"ContentChange","types":["H3"],"str":"Product timeline ","dir":"ltr","width":"119.09","height":"15.96","transform":["15.96","0.00","0.00","15.96","53.88","520.78"],"x":53.88,"y":520.78,"line":1}

View File

@ -34,9 +34,9 @@
], ],
"globals": {} "globals": {}
} }
{"page":0,"change":"ContentChange","types":["H3"],"str":"St Mary the Virgin, Witney","dir":"ltr","width":"299.73","height":"24.00","transform":["24.00","0.00","0.00","24.00","501.17","180.62"],"fontName":"Gill Sans MT Bold","x":501.167,"y":180.623,"line":0} {"page":0,"change":"ContentChange","types":["H2"],"str":"St Mary the Virgin, Witney","dir":"ltr","width":"299.73","height":"24.00","transform":["24.00","0.00","0.00","24.00","501.17","180.62"],"fontName":"Gill Sans MT Bold","x":501.167,"y":180.623,"line":0}
{"page":0,"change":"ContentChange","types":["H4"],"str":"Social Audit January 2012","dir":"ltr","width":"298.23","height":"18.00","transform":["18.00","0.00","0.00","18.00","501.17","147.59"],"fontName":"Gill Sans MT","x":501.167,"y":147.591,"line":1} {"page":0,"change":"ContentChange","types":["H3"],"str":"Social Audit January 2012","dir":"ltr","width":"298.23","height":"18.00","transform":["18.00","0.00","0.00","18.00","501.17","147.59"],"fontName":"Gill Sans MT","x":501.167,"y":147.591,"line":1}
{"page":0,"change":"ContentChange","types":["H5"],"str":"Catriona Robertson","dir":"ltr","width":"148.81","height":"16.00","transform":["16.00","0.00","0.00","16.00","503.78","78.51"],"fontName":"Gill Sans MT Bold","x":503.776,"y":78.514,"line":2} {"page":0,"change":"ContentChange","types":["H4"],"str":"Catriona Robertson","dir":"ltr","width":"148.81","height":"16.00","transform":["16.00","0.00","0.00","16.00","503.78","78.51"],"fontName":"Gill Sans MT Bold","x":503.776,"y":78.514,"line":2}
{"page":5,"change":"ContentChange","types":["H2"],"str":"Introduction","dir":"ltr","width":"184.61","height":"36.00","transform":["36.00","0.00","0.00","36.00","34.02","525.26"],"fontName":"Gill Sans MT","x":34.015,"y":525.26,"line":0} {"page":5,"change":"ContentChange","types":["H2"],"str":"Introduction","dir":"ltr","width":"184.61","height":"36.00","transform":["36.00","0.00","0.00","36.00","34.02","525.26"],"fontName":"Gill Sans MT","x":34.015,"y":525.26,"line":0}
{"page":7,"change":"ContentChange","types":["H2"],"str":"History","dir":"ltr","width":"112.19","height":"36.00","transform":["36.00","0.00","0.00","36.00","34.02","525.26"],"fontName":"Gill Sans MT","x":34.015,"y":525.26,"line":0} {"page":7,"change":"ContentChange","types":["H2"],"str":"History","dir":"ltr","width":"112.19","height":"36.00","transform":["36.00","0.00","0.00","36.00","34.02","525.26"],"fontName":"Gill Sans MT","x":34.015,"y":525.26,"line":0}
{"page":8,"change":"ContentChange","types":["H2"],"str":"History","dir":"ltr","width":"112.19","height":"36.00","transform":["36.00","0.00","0.00","36.00","462.74","525.26"],"fontName":"Gill Sans MT","x":462.744,"y":525.26,"line":0} {"page":8,"change":"ContentChange","types":["H2"],"str":"History","dir":"ltr","width":"112.19","height":"36.00","transform":["36.00","0.00","0.00","36.00","462.74","525.26"],"fontName":"Gill Sans MT","x":462.744,"y":525.26,"line":0}

View File

@ -38,51 +38,51 @@
{"page":0,"change":"ContentChange","types":["H2"],"str":"Aufwertung der Produktionskette ","dir":"ltr","width":"284.97","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","375.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":375.9803,"line":1} {"page":0,"change":"ContentChange","types":["H2"],"str":"Aufwertung der Produktionskette ","dir":"ltr","width":"284.97","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","375.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":375.9803,"line":1}
{"page":0,"change":"ContentChange","types":["H2"],"str":"von Holzbiokohle für Energie, ","dir":"ltr","width":"252.66","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","353.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":353.9803,"line":2} {"page":0,"change":"ContentChange","types":["H2"],"str":"von Holzbiokohle für Energie, ","dir":"ltr","width":"252.66","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","353.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":353.9803,"line":2}
{"page":0,"change":"ContentChange","types":["H2"],"str":"Bodenfruchtbarkeit und Klimaschutz","dir":"ltr","width":"305.41","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","331.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":331.9803,"line":3} {"page":0,"change":"ContentChange","types":["H2"],"str":"Bodenfruchtbarkeit und Klimaschutz","dir":"ltr","width":"305.41","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","331.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":331.9803,"line":3}
{"page":0,"change":"ContentChange","types":["H4"],"str":"Giustino Tonon (Hrsg.)","dir":"ltr","width":"132.32","height":"13.00","transform":["13.00","0.00","0.00","13.00","56.27","296.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":296.9803,"line":4} {"page":0,"change":"ContentChange","types":["H3"],"str":"Giustino Tonon (Hrsg.)","dir":"ltr","width":"132.32","height":"13.00","transform":["13.00","0.00","0.00","13.00","56.27","296.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":296.9803,"line":4}
{"page":3,"change":"ContentChange","types":["H1"],"str":"WOOD-UP","dir":"ltr","width":"312.99","height":"64.00","transform":["64.00","0.00","0.00","64.00","55.56","408.09"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":55.5591,"y":408.0945,"line":0} {"page":3,"change":"ContentChange","types":["H1"],"str":"WOOD-UP","dir":"ltr","width":"312.99","height":"64.00","transform":["64.00","0.00","0.00","64.00","55.56","408.09"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":55.5591,"y":408.0945,"line":0}
{"page":3,"change":"ContentChange","types":["H2"],"str":"Aufwertung der Produktionskette ","dir":"ltr","width":"284.97","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","375.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":375.9803,"line":1} {"page":3,"change":"ContentChange","types":["H2"],"str":"Aufwertung der Produktionskette ","dir":"ltr","width":"284.97","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","375.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":375.9803,"line":1}
{"page":3,"change":"ContentChange","types":["H2"],"str":"von Holzbiokohle für Energie, ","dir":"ltr","width":"252.66","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","353.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":353.9803,"line":2} {"page":3,"change":"ContentChange","types":["H2"],"str":"von Holzbiokohle für Energie, ","dir":"ltr","width":"252.66","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","353.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":353.9803,"line":2}
{"page":3,"change":"ContentChange","types":["H2"],"str":"Bodenfruchtbarkeit und Klimaschutz","dir":"ltr","width":"305.41","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","331.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":331.9803,"line":3} {"page":3,"change":"ContentChange","types":["H2"],"str":"Bodenfruchtbarkeit und Klimaschutz","dir":"ltr","width":"305.41","height":"18.00","transform":["18.00","0.00","0.00","18.00","56.27","331.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":331.9803,"line":3}
{"page":3,"change":"ContentChange","types":["H4"],"str":"Giustino Tonon (Hrsg.)","dir":"ltr","width":"132.32","height":"13.00","transform":["13.00","0.00","0.00","13.00","56.27","296.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":296.9803,"line":4} {"page":3,"change":"ContentChange","types":["H3"],"str":"Giustino Tonon (Hrsg.)","dir":"ltr","width":"132.32","height":"13.00","transform":["13.00","0.00","0.00","13.00","56.27","296.98"],"fontName":"NXPYEX+AkzidenzGroteskPro-Bold","x":56.2677,"y":296.9803,"line":4}
{"page":12,"change":"ContentChange","types":["H5"],"str":"1. Einleitung","line":6,"x":68.04,"y":480.36,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":12,"change":"ContentChange","types":["H4"],"str":"1. Einleitung","line":6,"x":68.04,"y":480.36,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":14,"change":"ContentChange","types":["H5"],"str":"2. Materialien und Methoden","line":15,"x":68.03999999999999,"y":352.38,"width":"148.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":14,"change":"ContentChange","types":["H4"],"str":"2. Materialien und Methoden","line":15,"x":68.03999999999999,"y":352.38,"width":"148.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":21,"change":"ContentChange","types":["H5"],"str":"3. Ergebnisse und Diskussion","line":5,"x":70.92,"y":492.36,"width":"154.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":21,"change":"ContentChange","types":["H4"],"str":"3. Ergebnisse und Diskussion","line":5,"x":70.92,"y":492.36,"width":"154.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":41,"change":"ContentChange","types":["H5"],"str":"4. Technisch- wirtschaftliche Analyse möglicher Eingriffe ","line":2,"x":70.92,"y":564.36,"width":"295.98","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":41,"change":"ContentChange","types":["H4"],"str":"4. Technisch- wirtschaftliche Analyse möglicher Eingriffe ","line":2,"x":70.92,"y":564.36,"width":"295.98","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":41,"change":"ContentChange","types":["H5"],"str":"zur Anlagenoptimierung in Hinblick auf Polygeneration","dir":"ltr","width":"288.06","height":"12.00","transform":["12.00","0.00","0.00","12.00","87.90","550.56"],"fontName":"CRDKGT+ArialMT","x":87.89999999999999,"y":550.5600000000001,"line":3} {"page":41,"change":"ContentChange","types":["H4"],"str":"zur Anlagenoptimierung in Hinblick auf Polygeneration","dir":"ltr","width":"288.06","height":"12.00","transform":["12.00","0.00","0.00","12.00","87.90","550.56"],"fontName":"CRDKGT+ArialMT","x":87.89999999999999,"y":550.5600000000001,"line":3}
{"page":51,"change":"ContentChange","types":["H5"],"str":"5. Schlussfolgerungen","line":2,"x":70.92,"y":564.36,"width":"115.35","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":51,"change":"ContentChange","types":["H4"],"str":"5. Schlussfolgerungen","line":2,"x":70.92,"y":564.36,"width":"115.35","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":56,"change":"ContentChange","types":["H5"],"str":"1. Einleitung","line":2,"x":68.04,"y":564.24,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":56,"change":"ContentChange","types":["H4"],"str":"1. Einleitung","line":2,"x":68.04,"y":564.24,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":59,"change":"ContentChange","types":["H5"],"str":"2. Materialien und Methoden ","line":13,"x":70.92,"y":394.26,"width":"155.40","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":59,"change":"ContentChange","types":["H4"],"str":"2. Materialien und Methoden ","line":13,"x":70.92,"y":394.26,"width":"155.40","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":62,"change":"ContentChange","types":["H5"],"str":"3. Ergebnisse und Diskussion ","line":11,"x":68.04,"y":408.24,"width":"161.40","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":62,"change":"ContentChange","types":["H4"],"str":"3. Ergebnisse und Diskussion ","line":11,"x":68.04,"y":408.24,"width":"161.40","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":76,"change":"ContentChange","types":["H5"],"str":"4. Schlussfolgerungen","line":26,"x":68.04,"y":198.24,"width":"115.35","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":76,"change":"ContentChange","types":["H4"],"str":"4. Schlussfolgerungen","line":26,"x":68.04,"y":198.24,"width":"115.35","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":82,"change":"ContentChange","types":["H5"],"str":"1. Einleitung","line":2,"x":68.04,"y":569.9999,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":82,"change":"ContentChange","types":["H4"],"str":"1. Einleitung","line":2,"x":68.04,"y":569.9999,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":84,"change":"ContentChange","types":["H5"],"str":"2. Materialien und Methoden","line":24,"x":68.04,"y":232.02,"width":"148.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":84,"change":"ContentChange","types":["H4"],"str":"2. Materialien und Methoden","line":24,"x":68.04,"y":232.02,"width":"148.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":88,"change":"ContentChange","types":["H5"],"str":"3. Ergebnisse und Diskussion","line":4,"x":68.04,"y":512.04,"width":"154.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":88,"change":"ContentChange","types":["H4"],"str":"3. Ergebnisse und Diskussion","line":4,"x":68.04,"y":512.04,"width":"154.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":97,"change":"ContentChange","types":["H5"],"str":"4. Schlussfolgerungen","line":3,"x":70.92,"y":569.9999,"width":"115.35","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":97,"change":"ContentChange","types":["H4"],"str":"4. Schlussfolgerungen","line":3,"x":70.92,"y":569.9999,"width":"115.35","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":102,"change":"ContentChange","types":["H5"],"str":"1. Einleitung","line":16,"x":68.04,"y":342.42,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":102,"change":"ContentChange","types":["H4"],"str":"1. Einleitung","line":16,"x":68.04,"y":342.42,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":106,"change":"ContentChange","types":["H5"],"str":"2. Materialien und Methoden","line":2,"x":68.04,"y":561.42,"width":"148.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":106,"change":"ContentChange","types":["H4"],"str":"2. Materialien und Methoden","line":2,"x":68.04,"y":561.42,"width":"148.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":119,"change":"ContentChange","types":["H5"],"str":"3. Ergebnisse","line":19,"x":70.92,"y":279.42,"width":"69.99","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":119,"change":"ContentChange","types":["H4"],"str":"3. Ergebnisse","line":19,"x":70.92,"y":279.42,"width":"69.99","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":139,"change":"ContentChange","types":["H5"],"str":"4. Diskussion","line":11,"x":70.92,"y":368.16,"width":"67.93","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":139,"change":"ContentChange","types":["H4"],"str":"4. Diskussion","line":11,"x":70.92,"y":368.16,"width":"67.93","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":144,"change":"ContentChange","types":["H5"],"str":"5. Schlussfolgerungen","line":14,"x":68.04,"y":363.42,"width":"115.35","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":144,"change":"ContentChange","types":["H4"],"str":"5. Schlussfolgerungen","line":14,"x":68.04,"y":363.42,"width":"115.35","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":150,"change":"ContentChange","types":["H5"],"str":"1. Anwendung von Biochar als Bodenverbesserungsmittel: ","line":20,"x":68.04,"y":291.24,"width":"307.49","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":150,"change":"ContentChange","types":["H4"],"str":"1. Anwendung von Biochar als Bodenverbesserungsmittel: ","line":20,"x":68.04,"y":291.24,"width":"307.49","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":150,"change":"ContentChange","types":["H5"],"str":"Wirkungen auf die Gesamtfruchtbarkeit der Böden und ","dir":"ltr","width":"293.46","height":"12.00","transform":["12.00","0.00","0.00","12.00","85.02","277.44"],"fontName":"CRDKGT+ArialMT","x":85.01999999999998,"y":277.44,"line":21} {"page":150,"change":"ContentChange","types":["H4"],"str":"Wirkungen auf die Gesamtfruchtbarkeit der Böden und ","dir":"ltr","width":"293.46","height":"12.00","transform":["12.00","0.00","0.00","12.00","85.02","277.44"],"fontName":"CRDKGT+ArialMT","x":85.01999999999998,"y":277.44,"line":21}
{"page":150,"change":"ContentChange","types":["H5"],"str":"die Wachstumsperformance der Pflanzen","dir":"ltr","width":"219.96","height":"12.00","transform":["12.00","0.00","0.00","12.00","85.02","263.64"],"fontName":"CRDKGT+ArialMT","x":85.01999999999998,"y":263.64,"line":22} {"page":150,"change":"ContentChange","types":["H4"],"str":"die Wachstumsperformance der Pflanzen","dir":"ltr","width":"219.96","height":"12.00","transform":["12.00","0.00","0.00","12.00","85.02","263.64"],"fontName":"CRDKGT+ArialMT","x":85.01999999999998,"y":263.64,"line":22}
{"page":154,"change":"ContentChange","types":["H5"],"str":"2. W irkungen der Anwendung von Biochar auf den Stick -","line":2,"x":68.04,"y":564.24,"width":"307.54","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":154,"change":"ContentChange","types":["H4"],"str":"2. W irkungen der Anwendung von Biochar auf den Stick -","line":2,"x":68.04,"y":564.24,"width":"307.54","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":154,"change":"ContentChange","types":["H5"],"str":"stoffzyklus von getopften Weinpflanzen","line":3,"x":85.02000000000004,"y":550.44,"width":"208.09","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":154,"change":"ContentChange","types":["H4"],"str":"stoffzyklus von getopften Weinpflanzen","line":3,"x":85.02000000000004,"y":550.44,"width":"208.09","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":165,"change":"ContentChange","types":["H5"],"str":"3. Wirkungen der Nutzung von Biochar auf die hydrischen ","line":2,"x":70.92,"y":564.24,"width":"306.75","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":165,"change":"ContentChange","types":["H4"],"str":"3. Wirkungen der Nutzung von Biochar auf die hydrischen ","line":2,"x":70.92,"y":564.24,"width":"306.75","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":165,"change":"ContentChange","types":["H5"],"str":"Eigenschaften der Substrate und die potenziellen ","dir":"ltr","width":"264.90","height":"12.00","transform":["12.00","0.00","0.00","12.00","87.90","550.44"],"fontName":"CRDKGT+ArialMT","x":87.89999999999999,"y":550.44,"line":3} {"page":165,"change":"ContentChange","types":["H4"],"str":"Eigenschaften der Substrate und die potenziellen ","dir":"ltr","width":"264.90","height":"12.00","transform":["12.00","0.00","0.00","12.00","87.90","550.44"],"fontName":"CRDKGT+ArialMT","x":87.89999999999999,"y":550.44,"line":3}
{"page":165,"change":"ContentChange","types":["H5"],"str":"Stickstoffverluste durch Auslaugung ","dir":"ltr","width":"194.14","height":"12.00","transform":["12.00","0.00","0.00","12.00","87.90","536.64"],"fontName":"CRDKGT+ArialMT","x":87.89999999999999,"y":536.6400000000001,"line":4} {"page":165,"change":"ContentChange","types":["H4"],"str":"Stickstoffverluste durch Auslaugung ","dir":"ltr","width":"194.14","height":"12.00","transform":["12.00","0.00","0.00","12.00","87.90","536.64"],"fontName":"CRDKGT+ArialMT","x":87.89999999999999,"y":536.6400000000001,"line":4}
{"page":169,"change":"ContentChange","types":["H5"],"str":"4. Wirkungen der Anwendung von Biochar auf den ","line":6,"x":70.92,"y":273.24,"width":"268.11","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":169,"change":"ContentChange","types":["H4"],"str":"4. Wirkungen der Anwendung von Biochar auf den ","line":6,"x":70.92,"y":273.24,"width":"268.11","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":169,"change":"ContentChange","types":["H5"],"str":"physiologischen Zustand der einem zunehmenden ","dir":"ltr","width":"271.44","height":"12.00","transform":["12.00","0.00","0.00","12.00","87.90","259.44"],"fontName":"CRDKGT+ArialMT","x":87.89999999999999,"y":259.44,"line":7} {"page":169,"change":"ContentChange","types":["H4"],"str":"physiologischen Zustand der einem zunehmenden ","dir":"ltr","width":"271.44","height":"12.00","transform":["12.00","0.00","0.00","12.00","87.90","259.44"],"fontName":"CRDKGT+ArialMT","x":87.89999999999999,"y":259.44,"line":7}
{"page":169,"change":"ContentChange","types":["H5"],"str":"Trockenstress ausgesetzten Weinpflanzen","dir":"ltr","width":"226.08","height":"12.00","transform":["12.00","0.00","0.00","12.00","87.90","245.64"],"fontName":"CRDKGT+ArialMT","x":87.89999999999999,"y":245.64,"line":8} {"page":169,"change":"ContentChange","types":["H4"],"str":"Trockenstress ausgesetzten Weinpflanzen","dir":"ltr","width":"226.08","height":"12.00","transform":["12.00","0.00","0.00","12.00","87.90","245.64"],"fontName":"CRDKGT+ArialMT","x":87.89999999999999,"y":245.64,"line":8}
{"page":173,"change":"ContentChange","types":["H5"],"str":"5. Schluss bemerkungen","line":2,"x":70.92,"y":564.24,"width":"125.34","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":173,"change":"ContentChange","types":["H4"],"str":"5. Schluss bemerkungen","line":2,"x":70.92,"y":564.24,"width":"125.34","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":180,"change":"ContentChange","types":["H5"],"str":"1. Einleitung","line":26,"x":68.04,"y":210.24,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":180,"change":"ContentChange","types":["H4"],"str":"1. Einleitung","line":26,"x":68.04,"y":210.24,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":182,"change":"ContentChange","types":["H5"],"str":"2. Materialien und Methoden","line":2,"x":68.04,"y":564.24,"width":"148.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":182,"change":"ContentChange","types":["H4"],"str":"2. Materialien und Methoden","line":2,"x":68.04,"y":564.24,"width":"148.71","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":187,"change":"ContentChange","types":["H2"],"str":"𝑓𝑓 =","line":3,"x":70.92,"y":539.7,"width":"18.13","height":"13.98","fontName":["CJUSQJ+CambriaMath","WASIKV+CambriaMath"],"dir":["ltr"]} {"page":187,"change":"ContentChange","types":["H2"],"str":"𝑓𝑓 =","line":3,"x":70.92,"y":539.7,"width":"18.13","height":"13.98","fontName":["CJUSQJ+CambriaMath","WASIKV+CambriaMath"],"dir":["ltr"]}
{"page":190,"change":"ContentChange","types":["H5"],"str":"3. Ergebnisse ","line":20,"x":68.04,"y":279.24,"width":"73.38","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":190,"change":"ContentChange","types":["H4"],"str":"3. Ergebnisse ","line":20,"x":68.04,"y":279.24,"width":"73.38","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":200,"change":"ContentChange","types":["H5"],"str":"4. Diskussion","line":28,"x":68.04,"y":278.94,"width":"67.93","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":200,"change":"ContentChange","types":["H4"],"str":"4. Diskussion","line":28,"x":68.04,"y":278.94,"width":"67.93","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":207,"change":"ContentChange","types":["H5"],"str":"5. Schlussfolgerungen","line":13,"x":70.92,"y":394.62,"width":"115.35","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":207,"change":"ContentChange","types":["H4"],"str":"5. Schlussfolgerungen","line":13,"x":70.92,"y":394.62,"width":"115.35","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":214,"change":"ContentChange","types":["H5"],"str":"1. Einleitung","line":16,"x":68.04,"y":345.24,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":214,"change":"ContentChange","types":["H4"],"str":"1. Einleitung","line":16,"x":68.04,"y":345.24,"width":"62.60","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":216,"change":"ContentChange","types":["H5"],"str":"2. Mate rialien und Methoden","line":19,"x":68.04,"y":296.22,"width":"148.74","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]} {"page":216,"change":"ContentChange","types":["H4"],"str":"2. Mate rialien und Methoden","line":19,"x":68.04,"y":296.22,"width":"148.74","height":"12.00","fontName":["CRDKGT+ArialMT"],"dir":["ltr"]}
{"page":235,"change":"ContentChange","types":["H5"],"str":"3. Ergebnisse und Diskussion","dir":"ltr","width":"158.04","height":"12.00","transform":["12.00","0.00","0.00","12.00","70.92","564.24"],"fontName":"CRDKGT+ArialMT","x":70.92,"y":564.24,"line":2} {"page":235,"change":"ContentChange","types":["H4"],"str":"3. Ergebnisse und Diskussion","dir":"ltr","width":"158.04","height":"12.00","transform":["12.00","0.00","0.00","12.00","70.92","564.24"],"fontName":"CRDKGT+ArialMT","x":70.92,"y":564.24,"line":2}
{"page":249,"change":"ContentChange","types":["H5"],"str":"4. Perspektiven","dir":"ltr","width":"82.68","height":"12.00","transform":["12.00","0.00","0.00","12.00","70.92","564.24"],"fontName":"CRDKGT+ArialMT","x":70.92,"y":564.24,"line":2} {"page":249,"change":"ContentChange","types":["H4"],"str":"4. Perspektiven","dir":"ltr","width":"82.68","height":"12.00","transform":["12.00","0.00","0.00","12.00","70.92","564.24"],"fontName":"CRDKGT+ArialMT","x":70.92,"y":564.24,"line":2}
{"page":251,"change":"ContentChange","types":["H5"],"str":"5. Schlussfolgerungen","dir":"ltr","width":"118.68","height":"12.00","transform":["12.00","0.00","0.00","12.00","70.92","506.22"],"fontName":"CRDKGT+ArialMT","x":70.92,"y":506.22,"line":4} {"page":251,"change":"ContentChange","types":["H4"],"str":"5. Schlussfolgerungen","dir":"ltr","width":"118.68","height":"12.00","transform":["12.00","0.00","0.00","12.00","70.92","506.22"],"fontName":"CRDKGT+ArialMT","x":70.92,"y":506.22,"line":4}

View File

@ -2,7 +2,7 @@
"pages": 218, "pages": 218,
"items": 51104, "items": 51104,
"groupedItems": 8481, "groupedItems": 8481,
"changes": 2, "changes": 5,
"schema": [ "schema": [
{ {
"name": "line" "name": "line"
@ -35,4 +35,7 @@
"globals": {} "globals": {}
} }
{"page":0,"change":"ContentChange","types":["H1"],"str":"A Course in Combinatorial Optimization","dir":"ltr","width":"407.49","height":"24.79","transform":["24.79","0.00","0.00","24.79","112.60","584.96"],"fontName":"HVHZFT+CMR17","x":112.599,"y":584.959,"line":0} {"page":0,"change":"ContentChange","types":["H1"],"str":"A Course in Combinatorial Optimization","dir":"ltr","width":"407.49","height":"24.79","transform":["24.79","0.00","0.00","24.79","112.60","584.96"],"fontName":"HVHZFT+CMR17","x":112.599,"y":584.959,"line":0}
{"page":0,"change":"ContentChange","types":["H2"],"str":"Alexander Schrijver","dir":"ltr","width":"162.77","height":"20.66","transform":["20.66","0.00","0.00","20.66","234.96","508.10"],"fontName":"HVHZFT+CMR17","x":234.96300000000002,"y":508.09919999999994,"line":1} {"page":0,"change":"ContentChange","types":["H2"],"str":"Alexander Schrijver","dir":"ltr","width":"162.77","height":"20.66","transform":["20.66","0.00","0.00","20.66","234.96","508.10"],"fontName":"HVHZFT+CMR17","x":234.96300000000002,"y":508.09919999999994,"line":1}
{"page":198,"change":"ContentChange","types":["H2","H3"],"str":"References","dir":"ltr","width":"90.64","height":"17.22","transform":["17.22","0.00","0.00","17.22","100.35","701.16"],"fontName":"KXBFBK+CMBX12","x":100.34999999999997,"y":701.1583,"line":1}
{"page":209,"change":"ContentChange","types":["H2","H3"],"str":"Name index","dir":"ltr","width":"101.96","height":"17.22","transform":["17.22","0.00","0.00","17.22","233.80","685.71"],"fontName":"KXBFBK+CMBX12","x":233.80200000000002,"y":685.7142,"line":1}
{"page":211,"change":"ContentChange","types":["H2","H3"],"str":"Subject index","dir":"ltr","width":"116.68","height":"17.22","transform":["17.22","0.00","0.00","17.22","226.44","685.71"],"fontName":"KXBFBK+CMBX12","x":226.44,"y":685.7142,"line":1}

View File

@ -1,24 +0,0 @@
import { assertDefined } from './assert';
enum ItemType {
H1 = 'H1',
H2 = 'H2',
H3 = 'H3',
H4 = 'H4',
H5 = 'H5',
H6 = 'H6',
}
export default ItemType;
namespace ItemType {
/**
* @param level 1-6
* @returns
*/
export function header(level: number): ItemType {
const type = ItemType[`H${level}`];
assertDefined(type, `No header for level '${level}' defined`);
return type;
}
}

View File

@ -1,11 +1,15 @@
import Item from './Item'; import Item from './Item';
import ItemType from './ItemType'; import { HeadlineType } from './text-types';
/** /**
* Table of contents usually parsed by `DetectToc.ts`. * Table of contents usually parsed by `DetectToc.ts`.
*/ */
export default class TOC { export default class TOC {
constructor(public tocHeadlineItems: Item[], public pages: number[], public detectedHeadlineLevels: Set<ItemType>) {} constructor(
public tocHeadlineItems: Item[],
public pages: number[],
public detectedHeadlineLevels: Set<HeadlineType>,
) {}
startPage(): number { startPage(): number {
return Math.min(...this.pages); return Math.min(...this.pages);

View File

@ -12,6 +12,7 @@ export default class LineItemMerger extends ItemMerger {
merge(evaluationTracker: EvaluationTracker, changeTracker: ChangeTracker, schema: string[], items: Item[]): Item { merge(evaluationTracker: EvaluationTracker, changeTracker: ChangeTracker, schema: string[], items: Item[]): Item {
const page = items[0].page; const page = items[0].page;
const block = items[0].data['block'];
const line = items[0].data['line']; const line = items[0].data['line'];
const str = items.map((item) => item.data['str']).join(' '); const str = items.map((item) => item.data['str']).join(' ');
const x = Math.min(...items.map((item) => item.data['x'])); const x = Math.min(...items.map((item) => item.data['x']));
@ -23,6 +24,7 @@ export default class LineItemMerger extends ItemMerger {
const newItem = new Item(page, { const newItem = new Item(page, {
str, str,
block,
line, line,
x, x,
y, y,

View File

@ -16,6 +16,24 @@ export function descending(a: number, b: number): number {
return b - a; return b - a;
} }
export function min(array: number[], prevMin?: number): number {
return array.reduce((prev, curr) => {
if (prev === undefined || curr < prev) {
return curr;
}
return prev;
}, prevMin);
}
export function max(array: number[], prevMin?: number): number {
return array.reduce((prev, curr) => {
if (prev === undefined || curr > prev) {
return curr;
}
return prev;
}, prevMin);
}
export function count<T>(array: T[], find: (entry: T) => boolean): number { export function count<T>(array: T[], find: (entry: T) => boolean): number {
return array.reduce((count, entry) => (find(entry) ? count + 1 : count), 0); return array.reduce((count, entry) => (find(entry) ? count + 1 : count), 0);
} }

View File

@ -1,6 +1,7 @@
import { TextType } from 'src/text-types';
import { assertDefined } from '../assert'; import { assertDefined } from '../assert';
import Item from '../Item'; import Item from '../Item';
import ItemType from '../ItemType'; import { onlyUniques } from './groupingUtils';
function get(item: Item, name: string): any { function get(item: Item, name: string): any {
const value = item.data[name]; const value = item.data[name];
@ -28,7 +29,7 @@ export function getFontName(fontMap: Map<string, object>, item: Item): string {
return assertDefined(fontObject['name'], `No 'name' found in ${JSON.stringify(fontObject)}`); return assertDefined(fontObject['name'], `No 'name' found in ${JSON.stringify(fontObject)}`);
} }
export function itemWithType(item: Item, type: ItemType): Item { export function itemWithType(item: Item, type: TextType): Item {
const existingTypes = item.data['types'] || []; const existingTypes = item.data['types'] || [];
return item.withDataAddition({ types: [...existingTypes, type] }); return item.withDataAddition({ types: [...existingTypes, type].filter(onlyUniques) });
} }

View File

@ -43,3 +43,19 @@ export function extractEndingNumber(text: string): number | undefined {
} }
return undefined; return undefined;
} }
export function isListItemCharacter(string) {
if (string.length > 1) {
return false;
}
const char = string.charAt(0);
return char === '-' || char === '•' || char === '';
}
export function isListItem(value: string) {
return /^[\s]*[-•–][\s].*$/g.test(value);
}
export function isNumberedListItem(value: string) {
return /^[\s]*\d*\.(?:\s|$)/g.test(value);
}

38
src/text-types.ts Normal file
View File

@ -0,0 +1,38 @@
import { assert } from './assert';
export type HeadlineType = 'H1' | 'H2' | 'H3' | 'H4' | 'H5' | 'H6';
export type ListType = 'LIST' | 'NUMBERED_LIST';
export type TextType = HeadlineType | 'TOC' | 'FOOTNOTES' | 'CODE' | ListType | 'PARAGRAPH';
function types(...types: TextType[]) {
return types;
}
export function isHeadline(type: TextType) {
return types('H1', 'H2', 'H3', 'H4', 'H5', 'H6').includes(type);
}
export function toHeadlineType(number: 1 | 2 | 3 | 4 | 5 | 6 | number): HeadlineType {
assert(number > 0 && number < 7, `Expected headline level between 1 and 6 but was ${number}`);
return `H${number.toString()}` as HeadlineType;
}
export function headlineLevel(type: TextType) {
const level = parseInt(type[1]);
assert(level > 0 && level < 7, `Expected headline level between 1 and 6 but was ${level} (from '${type}')`);
return level;
}
export function mergeToBlock(type: TextType) {
return types('FOOTNOTES', 'CODE', 'LIST', 'NUMBERED_LIST').includes(type);
}
export function mergeFollowingNonTypedItems(type: TextType) {
return types('FOOTNOTES').includes(type);
}
export function mergeFollowingNonTypedItemsWithSmallDistance(type: TextType) {
return types('LIST', 'NUMBERED_LIST').includes(type);
}

View File

@ -4,11 +4,11 @@ import ItemTransformer from './ItemTransformer';
import TransformContext from './TransformContext'; import TransformContext from './TransformContext';
import LineItemMerger from '../debug/LineItemMerger'; import LineItemMerger from '../debug/LineItemMerger';
import { groupByLine, onlyUniques } from '../support/groupingUtils'; import { groupByLine, onlyUniques } from '../support/groupingUtils';
import { MAX_HEIGHT, MOST_USED_DISTANCE, MOST_USED_FONT, MOST_USED_HEIGHT } from './CacluclateStatistics'; import { MAX_HEIGHT, MOST_USED_HEIGHT } from './CacluclateStatistics';
import { HEADLINE_TYPE_TO_HEIGHT_RANGE, TOC_GLOBAL } from './DetectToc'; import { HEADLINE_TYPE_TO_HEIGHT_RANGE, TOC_GLOBAL } from './DetectToc';
import ItemType from '../ItemType';
import { flatten } from '../support/functional'; import { flatten } from '../support/functional';
import { itemWithType } from '../support/items'; import { itemWithType } from '../support/items';
import { HeadlineType, TextType, isHeadline, toHeadlineType } from '../text-types';
const config = { const config = {
// How much taller a text must be to be a headline (relative to mostUsedHeight) // How much taller a text must be to be a headline (relative to mostUsedHeight)
@ -30,13 +30,14 @@ export default class DetectHeaders extends ItemTransformer {
transform(context: TransformContext, inputItems: Item[]): ItemResult { transform(context: TransformContext, inputItems: Item[]): ItemResult {
const maxHeight = context.getGlobal(MAX_HEIGHT); const maxHeight = context.getGlobal(MAX_HEIGHT);
const mostUsedHeight = context.getGlobal(MOST_USED_HEIGHT); const mostUsedHeight = context.getGlobal(MOST_USED_HEIGHT);
const mostUsedDistance = context.getGlobal(MOST_USED_DISTANCE); // const mostUsedDistance = context.getGlobal(MOST_USED_DISTANCE);
const mostUsedFont = context.getGlobal(MOST_USED_FONT); // const mostUsedFont = context.getGlobal(MOST_USED_FONT);
const toc = context.getGlobalOptionally(TOC_GLOBAL); const toc = context.getGlobalOptionally(TOC_GLOBAL);
const headlineTypeToHeightRange = context.getGlobalOptionally(HEADLINE_TYPE_TO_HEIGHT_RANGE); const headlineTypeToHeightRange = context.getGlobalOptionally(HEADLINE_TYPE_TO_HEIGHT_RANGE);
const itemsByLine = groupByLine(inputItems); const itemsByLine = groupByLine(inputItems);
const itemToLevel: Map<string, ItemType> = new Map(); const itemToLevel: Map<string, HeadlineType> = new Map();
// Handle title pages: Title pages often have multiple lines of extraordinary height. // Handle title pages: Title pages often have multiple lines of extraordinary height.
// Starting the leveling here would already consume most of the available headline levels. // Starting the leveling here would already consume most of the available headline levels.
@ -51,24 +52,19 @@ export default class DetectHeaders extends ItemTransformer {
itemToLevel, itemToLevel,
); );
const hasHeaderType = (types: ItemType[]) => const hasHeaderType = (types: TextType[]) => types.find((t) => isHeadline(t));
types.includes(ItemType.H1) ||
types.includes(ItemType.H2) ||
types.includes(ItemType.H3) ||
types.includes(ItemType.H4) ||
types.includes(ItemType.H5) ||
types.includes(ItemType.H6);
if (toc && headlineTypeToHeightRange) { if (toc && headlineTypeToHeightRange) {
// Use existing headline heights to find additional headlines // Use existing headline heights to find additional headlines
const headlineTypes = Object.keys(headlineTypeToHeightRange) as ItemType[]; const headlineTypes = Object.keys(headlineTypeToHeightRange) as HeadlineType[];
headlineTypes.forEach((headlineType) => { headlineTypes.forEach((headlineType) => {
const range = headlineTypeToHeightRange[headlineType]; const range = headlineTypeToHeightRange[headlineType];
if (range.max > mostUsedHeight) { if (range.max > mostUsedHeight) {
// use only very clear headlines, only use max // use only very clear headlines, only use max
inputItems.forEach((item) => { inputItems.forEach((item) => {
const itemHeight = item.data['height']; const itemHeight = item.data['height'];
const types: ItemType[] = item.data['types'] || itemToLevel.get(item.uuid) || []; const types: TextType[] =
item.data['types'] || itemToLevel.has(item.uuid) ? [itemToLevel.get(item.uuid)] : [];
const isHeader = hasHeaderType(types); const isHeader = hasHeaderType(types);
if (!isHeader && itemHeight === range.max) { if (!isHeader && itemHeight === range.max) {
itemToLevel.set(item.uuid, headlineType); itemToLevel.set(item.uuid, headlineType);
@ -89,12 +85,12 @@ export default class DetectHeaders extends ItemTransformer {
heights.push(maxHeight); heights.push(maxHeight);
} }
}); });
const heightToHeadline: Map<number, ItemType> = new Map(); const heightToHeadline: Map<number, HeadlineType> = new Map();
heights.sort((a, b) => b - a); heights.sort((a, b) => b - a);
heights.forEach((height, i) => { heights.forEach((height, i) => {
const headlineLevel = i + 2; const headlineLevel = i + 2;
if (headlineLevel <= 6) { if (headlineLevel <= 6) {
const headlineType = ItemType.header(2 + i); const headlineType = toHeadlineType(2 + i);
heightToHeadline.set(height, headlineType); heightToHeadline.set(height, headlineType);
} }
}); });
@ -103,10 +99,10 @@ export default class DetectHeaders extends ItemTransformer {
.filter((lineItems) => !itemToLevel.has(lineItems[0].uuid)) .filter((lineItems) => !itemToLevel.has(lineItems[0].uuid))
.forEach((lineItems) => { .forEach((lineItems) => {
const maxHeight = Math.max(...lineItems.map((item) => item.data['height'])); const maxHeight = Math.max(...lineItems.map((item) => item.data['height']));
const types = flatten(lineItems.map((item) => item.data['types'] || [])).filter(onlyUniques) as ItemType[]; const types = flatten(lineItems.map((item) => item.data['types'] || [])).filter(onlyUniques) as TextType[];
if (!hasHeaderType(types) && !itemToLevel.has(lineItems[0].uuid)) { if (!hasHeaderType(types) && !itemToLevel.has(lineItems[0].uuid)) {
const headlineType = heightToHeadline.get(maxHeight); const headlineType = heightToHeadline.get(maxHeight);
if (headlineType && !types.includes(ItemType.H1) && !types.includes(ItemType.H2)) { if (headlineType && !types.includes('H1') && !types.includes('H2')) {
lineItems.forEach((item) => itemToLevel.set(item.uuid, headlineType)); lineItems.forEach((item) => itemToLevel.set(item.uuid, headlineType));
detectedHeaders++; detectedHeaders++;
} }
@ -147,7 +143,7 @@ export default class DetectHeaders extends ItemTransformer {
// } // }
return { return {
items: inputItems.map((item, i) => { items: inputItems.map((item) => {
const headerType = itemToLevel.get(item.uuid); const headerType = itemToLevel.get(item.uuid);
if (headerType) { if (headerType) {
return itemWithType(item, headerType); return itemWithType(item, headerType);
@ -165,7 +161,7 @@ function detectTitlePageHeaders(
maxTitlePage: number, maxTitlePage: number,
mostUsedHeight: number, mostUsedHeight: number,
maxHeight: number, maxHeight: number,
itemToLevel: Map<string, ItemType>, itemToLevel: Map<string, HeadlineType>,
): number { ): number {
const min2ndLevelHeaderHeigthOnMaxPage = mostUsedHeight + (maxHeight - mostUsedHeight) / 4; const min2ndLevelHeaderHeigthOnMaxPage = mostUsedHeight + (maxHeight - mostUsedHeight) / 4;
const pagesHavingMaxHeightItems = inputItems const pagesHavingMaxHeightItems = inputItems
@ -180,9 +176,9 @@ function detectTitlePageHeaders(
const height = Math.max(...lineItems.map((item) => item.data['height'])); const height = Math.max(...lineItems.map((item) => item.data['height']));
if (height > min2ndLevelHeaderHeigthOnMaxPage) { if (height > min2ndLevelHeaderHeigthOnMaxPage) {
if (height == maxHeight) { if (height == maxHeight) {
lineItems.forEach((item) => itemToLevel.set(item.uuid, ItemType.H1)); lineItems.forEach((item) => itemToLevel.set(item.uuid, 'H1'));
} else { } else {
lineItems.forEach((item) => itemToLevel.set(item.uuid, ItemType.H2)); lineItems.forEach((item) => itemToLevel.set(item.uuid, 'H2'));
} }
detectedHeaders++; detectedHeaders++;
} }

View File

@ -16,12 +16,12 @@ import {
WHITESPACE_CHAR_CODE, WHITESPACE_CHAR_CODE,
PERIOD_CHAR_CODES, PERIOD_CHAR_CODES,
} from '../support/stringFunctions'; } from '../support/stringFunctions';
import ItemType from '../ItemType';
import { numbersAreConsecutive } from '../support/numberFunctions'; import { numbersAreConsecutive } from '../support/numberFunctions';
import TOC from '../TOC'; import TOC from '../TOC';
import FontType, { declaredFontTypes } from '../FontType'; import FontType, { declaredFontTypes } from '../FontType';
import { flatten, groupBy } from '../support/functional'; import { flatten, groupBy } from '../support/functional';
import { getHeight, getText, getFontName, itemWithType } from '../support/items'; import { getHeight, getText, getFontName, itemWithType } from '../support/items';
import { HeadlineType, toHeadlineType } from '../text-types';
export interface HeadlineRange { export interface HeadlineRange {
min: number; min: number;
@ -129,12 +129,12 @@ export default class DetectToc extends ItemTransformer {
uidToLevel.set(uuid, headline.level); uidToLevel.set(uuid, headline.level);
}); });
return uidToLevel; return uidToLevel;
}, new Map<string, ItemType>()); }, new Map<string, HeadlineType>());
const headlineTypes = foundHeadlines.reduce((allLevels, headline) => { const headlineTypes = foundHeadlines.reduce((allLevels, headline) => {
allLevels.add(headline.level); allLevels.add(headline.level);
return allLevels; return allLevels;
}, new Set<ItemType>()); }, new Set<HeadlineType>());
const tocHeadlineUuids = new Set(tocHeadline.map((item) => item.uuid)); const tocHeadlineUuids = new Set(tocHeadline.map((item) => item.uuid));
return { return {
@ -327,7 +327,7 @@ function findTocHeadline(
return itemsGroupedByLine[itemsGroupedByLine.length - 1]; return itemsGroupedByLine[itemsGroupedByLine.length - 1];
} }
function findTocEntryHeadlineLevels(rawTocEntries: RawTocEntry[]): ItemType[] { function findTocEntryHeadlineLevels(rawTocEntries: RawTocEntry[]): HeadlineType[] {
// We focus on heights since it seems the most consistent metric to determining levels so far. // We focus on heights since it seems the most consistent metric to determining levels so far.
//Other options would be looking at X-coordinates (per page), or at leading numbering (e.g. /^(\d)+.(\d)+.(\d)+/). //Other options would be looking at X-coordinates (per page), or at leading numbering (e.g. /^(\d)+.(\d)+.(\d)+/).
const height = (entry: RawTocEntry) => Math.round(getHeight(entry.entryLines[0][0])); const height = (entry: RawTocEntry) => Math.round(getHeight(entry.entryLines[0][0]));
@ -335,12 +335,12 @@ function findTocEntryHeadlineLevels(rawTocEntries: RawTocEntry[]): ItemType[] {
// we start with H2 (H1 is reserved for the document title) // we start with H2 (H1 is reserved for the document title)
if (allHeights.length > 3) { if (allHeights.length > 3) {
return rawTocEntries.map(() => ItemType.H2); return rawTocEntries.map(() => 'H2');
} }
return rawTocEntries.map((entry) => { return rawTocEntries.map((entry) => {
const index = allHeights.indexOf(height(entry)); const index = allHeights.indexOf(height(entry));
return ItemType.header(index + 2); return toHeadlineType(index + 2);
}); });
} }
@ -465,7 +465,7 @@ interface RawTocEntry {
} }
interface Headline { interface Headline {
level: ItemType; level: HeadlineType;
uuids: Set<string>; uuids: Set<string>;
} }

View File

@ -1,13 +0,0 @@
import ItemType from 'src/ItemType';
test('headers', async () => {
expect(ItemType.header(1)).toEqual(ItemType.H1);
expect(ItemType.header(2)).toEqual(ItemType.H2);
expect(ItemType.header(3)).toEqual(ItemType.H3);
expect(ItemType.header(4)).toEqual(ItemType.H4);
expect(ItemType.header(5)).toEqual(ItemType.H5);
expect(ItemType.header(6)).toEqual(ItemType.H6);
expect(() => ItemType.header(0)).toThrow("No header for level '0' defined");
expect(() => ItemType.header(7)).toThrow("No header for level '7' defined");
});

View File

@ -9,11 +9,13 @@ import {
flatMap, flatMap,
onlyUniques, onlyUniques,
count, count,
min,
max,
} from 'src/support/groupingUtils'; } from 'src/support/groupingUtils';
import { items } from 'test/testItems'; import { items } from 'test/testItems';
test('count', async () => { test('count', async () => {
expect(count([], (_) => true)).toEqual(0); expect(count([], () => true)).toEqual(0);
expect(count([1, 2, 3, 4, 5, 6], (e) => e % 2 == 0)).toEqual(3); expect(count([1, 2, 3, 4, 5, 6], (e) => e % 2 == 0)).toEqual(3);
expect(count(['A', 'B', 'c'], (e) => e === e.toUpperCase())).toEqual(2); expect(count(['A', 'B', 'c'], (e) => e === e.toUpperCase())).toEqual(2);
}); });
@ -30,6 +32,28 @@ test('onlyUniques', async () => {
expect([1, 2, 3, 3, 2, 1].filter(onlyUniques)).toEqual([1, 2, 3]); expect([1, 2, 3, 3, 2, 1].filter(onlyUniques)).toEqual([1, 2, 3]);
}); });
test('min', async () => {
expect(min([])).toBeUndefined();
expect(min([1])).toEqual(1);
expect(min([1, 2])).toEqual(1);
expect(min([2, 1])).toEqual(1);
expect(min([1, 4, -3, 5])).toEqual(-3);
expect(min([2, 3], 1)).toEqual(1);
expect(min([2, 3], 4)).toEqual(2);
});
test('max', async () => {
expect(max([])).toBeUndefined();
expect(max([1])).toEqual(1);
expect(max([1, 2])).toEqual(2);
expect(max([2, 1])).toEqual(2);
expect(max([1, 4, -3, 5])).toEqual(5);
expect(max([2, 3], 1)).toEqual(3);
expect(max([2, 3], 4)).toEqual(4);
});
describe('groupByPage', () => { describe('groupByPage', () => {
test('empty', async () => { test('empty', async () => {
expect(groupByPage([])).toEqual([]); expect(groupByPage([])).toEqual([]);

View File

@ -3,6 +3,8 @@ import {
filterOutWhitespaces, filterOutWhitespaces,
extractNumbers, extractNumbers,
extractEndingNumber, extractEndingNumber,
isListItem,
isNumberedListItem,
} from 'src/support/stringFunctions'; } from 'src/support/stringFunctions';
test('filterOutDigits', async () => { test('filterOutDigits', async () => {
@ -31,3 +33,45 @@ test('extractEndingNumbers', async () => {
expect(extractEndingNumber('a12 21 304')).toEqual(304); expect(extractEndingNumber('a12 21 304')).toEqual(304);
expect(extractEndingNumber('abc ... 304')).toEqual(304); expect(extractEndingNumber('abc ... 304')).toEqual(304);
}); });
describe('functions: isListItem', () => {
it('Match', () => {
expect(isListItem('- my text')).toEqual(true);
expect(isListItem('- my text -')).toEqual(true);
expect(isListItem(' - my text')).toEqual(true);
expect(isListItem(' - my text')).toEqual(true);
expect(isListItem(' - my text')).toEqual(true);
expect(isListItem('• my text')).toEqual(true);
expect(isListItem(' • my text')).toEqual(true);
expect(isListItem(' • my text')).toEqual(true);
expect(isListItem(' my text')).toEqual(true);
expect(isListItem(' my text')).toEqual(true);
});
it('No Match', () => {
expect(isListItem('my text')).toEqual(false);
expect(isListItem('-my text')).toEqual(false);
expect(isListItem('•my text')).toEqual(false);
expect(isListItem(' -my text')).toEqual(false);
});
});
describe('functions: isNumberedListItem', () => {
it('Match', () => {
expect(isNumberedListItem('1.')).toEqual(true);
expect(isNumberedListItem('1. my text')).toEqual(true);
expect(isNumberedListItem('2. my text')).toEqual(true);
expect(isNumberedListItem('23. my text')).toEqual(true);
expect(isNumberedListItem('23. my text')).toEqual(true);
expect(isNumberedListItem(' 23. my text')).toEqual(true);
expect(isNumberedListItem(' 23. my text')).toEqual(true);
});
it('No Match', () => {
expect(isNumberedListItem('1two')).toEqual(false);
expect(isNumberedListItem('1 two')).toEqual(false);
expect(isNumberedListItem('1.two')).toEqual(false);
});
});

40
test/text-types.test.ts Normal file
View File

@ -0,0 +1,40 @@
import { TextType, isHeadline, headlineLevel, toHeadlineType } from 'src/text-types';
describe('headline', () => {
test('isHeadline', async () => {
expect(isHeadline('H0' as TextType)).toBe(false);
expect(isHeadline('H1')).toBe(true);
expect(isHeadline('H2')).toBe(true);
expect(isHeadline('H3')).toBe(true);
expect(isHeadline('H4')).toBe(true);
expect(isHeadline('H5')).toBe(true);
expect(isHeadline('H6')).toBe(true);
expect(isHeadline('H7' as TextType)).toBe(false);
});
test('headlineLevel', async () => {
expect(headlineLevel('H1')).toBe(1);
expect(headlineLevel('H2')).toBe(2);
expect(headlineLevel('H3')).toBe(3);
expect(headlineLevel('H4')).toBe(4);
expect(headlineLevel('H5')).toBe(5);
expect(headlineLevel('H6')).toBe(6);
expect(() => headlineLevel('H0' as TextType)).toThrow(
Error("Expected headline level between 1 and 6 but was 0 (from 'H0')"),
);
expect(() => headlineLevel('H7' as TextType)).toThrow(
Error("Expected headline level between 1 and 6 but was 7 (from 'H7')"),
);
});
test('toHeadlineType', async () => {
expect(toHeadlineType(1)).toEqual('H1');
expect(toHeadlineType(2)).toEqual('H2');
expect(toHeadlineType(3)).toEqual('H3');
expect(toHeadlineType(4)).toEqual('H4');
expect(toHeadlineType(5)).toEqual('H5');
expect(toHeadlineType(6)).toEqual('H6');
expect(() => toHeadlineType(1 - 1)).toThrow(Error('Expected headline level between 1 and 6 but was 0'));
expect(() => toHeadlineType(6 + 1)).toThrow(Error('Expected headline level between 1 and 6 but was 7'));
});
});