From 2323b1ed20a836a003232f4297bd2696f977d08c Mon Sep 17 00:00:00 2001 From: Wentao Kuang Date: Tue, 8 Sep 2026 16:43:09 +1200 Subject: [PATCH 01/11] Add the config and fixups for carto_text --- .../kart-import/config/carto_text_styling.csv | 554 ++++++++++++++++++ .../config/themes/nztopo50_carto_text.yml | 39 ++ .../kart-import/src/kart_import/config.py | 3 + .../kart-import/src/kart_import/fixups.py | 93 +++ .../src/features/next/nztopo50_carto_text.tsp | 4 +- schema/next/nztopo50_carto_text.json | 8 +- 6 files changed, 699 insertions(+), 2 deletions(-) create mode 100644 packages/kart-import/config/carto_text_styling.csv create mode 100644 packages/kart-import/config/themes/nztopo50_carto_text.yml diff --git a/packages/kart-import/config/carto_text_styling.csv b/packages/kart-import/config/carto_text_styling.csv new file mode 100644 index 00000000..9d5f271b --- /dev/null +++ b/packages/kart-import/config/carto_text_styling.csv @@ -0,0 +1,554 @@ +text_bend,text_height,text_placement,style,colour,size,offset,placement,textanchor,labelanchor,charplace,chardistance +0,0.0012,1,Narrow,black,5.0,-1.6,AL,,,StretchCharacterSpacingToFit, +0,0.0012,2,Italic,process_blue,5.0,,OL,,,StretchCharacterSpacingToFit, +0,0.0012,31,Narrow,black,5.0,-1.6,AL,,,StretchCharacterSpacingToFit, +0,0.0013,1,Narrow,black,5.0,-1.5,AL,,,StretchCharacterSpacingToFit, +0,0.0013,2,Italic,process_blue,5.0,,OL,,,StretchCharacterSpacingToFit, +0,0.0013,31,Italic,process_blue,5.0,-1.5,AL,,,StretchWordSpacingToFit, +0,0.0013,31,Narrow,black,5.0,-1.5,AL,,,StretchCharacterSpacingToFit, +0,0.0014,1,Italic,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit, +0,0.0014,1,Italic,process_blue,6.0,-2.3,AL,,,StretchCharacterSpacingToFit, +0,0.0014,1,Narrow,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit, +0,0.0014,1,Narrow Italic,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit, +0,0.0014,2,Italic,black,6.0,,OL,,,StretchWordSpacingToFit, +0,0.0014,2,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, +0,0.0014,2,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit, +0,0.0014,2,Narrow Italic,black,6.0,,OL,,,, +0,0.0014,3,Italic,black,6.0,-1.5,BL,,,StretchCharacterSpacingToFit, +0,0.0014,3,Italic,process_blue,6.0,-1.5,BL,,,StretchWordSpacingToFit, +0,0.0014,3,Narrow,black,6.0,-1.5,BL,,,StretchCharacterSpacingToFit, +0,0.0014,21,Narrow,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit, +0,0.0014,31,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, +0,0.0014,31,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, +0,0.0014,31,Narrow,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit, +0,0.0014,32,Italic,black,6.0,,OL,,,StretchWordSpacingToFit, +0,0.0014,32,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, +0,0.0014,32,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit, +0,0.0014,33,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, +0,0.0014,33,Narrow,black,6.0,-1.5,BL,,,StretchWordSpacingToFit, +0,0.0015,1,Narrow,black,6.0,-1.9,AL,,,StretchCharacterSpacingToFit, +0,0.0017,1,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +0,0.0017,1,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, +0,0.0017,1,Narrow,black,7.0,-2.4,AL,,,StretchCharacterSpacingToFit, +0,0.0017,1,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +0,0.0017,1,Regular,black,5.0,-1.8,AL,,,StretchWordSpacingToFit, +0,0.0017,2,Italic,black,7.0,,OL,,,StretchWordSpacingToFit, +0,0.0017,2,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit, +0,0.0017,2,Narrow,black,7.0,,OL,,,StretchCharacterSpacingToFit, +0,0.0017,2,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +0,0.0017,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, +0,0.0017,31,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +0,0.0017,31,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, +0,0.0017,31,Narrow,black,7.0,-2.4,AL,,,StretchCharacterSpacingToFit, +0,0.0017,31,Narrow Italic,black,7.0,-2.4,AL,,,StretchCharacterSpacingToFit, +0,0.0017,32,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit, +0,0.0017,32,Narrow Italic,black,7.0,,OL,,,StretchWordSpacingToFit, +0,0.0017,32,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, +0,0.0019,1,Italic,black,7.5,-2.3,AL,,,StretchWordSpacingToFit, +0,0.0019,1,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit, +0,0.0019,1,Narrow,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit, +0,0.0019,1,Narrow Bold,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, +0,0.0019,1,Narrow Italic,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit, +0,0.0019,1,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit, +0,0.0019,2,Italic,black,7.5,,OL,,,StretchWordSpacingToFit, +0,0.0019,2,Italic,process_blue,7.5,,OL,,,StretchWordSpacingToFit, +0,0.0019,2,Narrow,black,8.0,,OL,,,StretchCharacterSpacingToFit, +0,0.0019,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +0,0.0019,3,Narrow,black,8.0,-2.0,BL,,,StretchCharacterSpacingToFit, +0,0.0019,3,Regular,black,5.5,-1.5,BL,,,StretchWordSpacingToFit, +0,0.0019,31,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit, +0,0.0019,31,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit, +0,0.0019,31,Narrow,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit, +0,0.0019,31,Narrow Italic,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit, +0,0.0019,31,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit, +0,0.0019,32,Italic,process_blue,7.5,-2.0,BL,,,StretchWordSpacingToFit, +0,0.0019,32,Narrow,black,8.0,,OL,,,, +0,0.0019,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +0,0.0019,33,Narrow,black,8.0,-2.0,BL,right,0.5,, +0,0.0022,1,Italic,black,8.5,-2.4,AL,,,StretchWordSpacingToFit, +0,0.0022,1,Narrow,black,8.5,-3.0,AL,,,StretchWordSpacingToFit, +0,0.0022,1,Narrow Bold,black,8.5,-2.7,AL,,,StretchWordSpacingToFit, +0,0.0022,2,Italic,black,8.5,,OL,,,StretchWordSpacingToFit, +0,0.0022,2,Italic,process_blue,8.5,,OL,,,StretchWordSpacingToFit, +0,0.0022,31,Narrow,black,8.5,-3.0,AL,,,StretchWordSpacingToFit, +0,0.0022,31,Narrow Bold,black,8.5,-3.0,AL,,,StretchWordSpacingToFit, +0,0.0024,1,Italic,black,9.5,-2.7,AL,,,StretchCharacterSpacingToFit, +0,0.0024,1,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit, +0,0.0024,1,Narrow,black,9.5,-3.0,AL,,,StretchWordSpacingToFit, +0,0.0024,1,Narrow Bold,black,9.5,-3.0,AL,,,StretchWordSpacingToFit, +0,0.0024,1,Narrow Italic,black,9.5,-3.2,AL,,,StretchCharacterSpacingToFit, +0,0.0024,2,Italic,process_blue,9.5,,OL,,,CharactersAtVertices, +0,0.0024,31,Italic,black,9.5,-2.7,AL,,,StretchWordSpacingToFit, +0,0.0024,31,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit, +0,0.0026,1,Narrow Bold,black,10.5,-3.0,AL,,,StretchWordSpacingToFit, +0,0.0029,1,Italic,black,12.0,-4.0,AL,,,StretchCharacterSpacingToFit, +0,0.0029,1,Italic,process_blue,12.0,-4.0,AL,,,StretchCharacterSpacingToFit, +0,0.0029,1,Narrow Bold,black,12.0,-4.0,AL,,,StretchCharacterSpacingToFit, +0,0.0029,31,Narrow Bold,black,12.0,-4.0,AL,,,StretchCharacterSpacingToFit, +0,0.0031,1,Narrow Italic,black,12.5,-3.9,AL,,,StretchWordSpacingToFit, +0,0.0034,1,Narrow Bold,black,13.0,-4.0,AL,,,StretchCharacterSpacingToFit, +0,0.0043,1,Narrow Bold,black,17.0,-5.0,AL,,,StretchCharacterSpacingToFit, +0,4.1,1,Narrow,black,6.0,-2.0,AL,,,StretchCharacterSpacingToFit, +0,4.1,1,Narrow Italic,black,6.0,-2.0,AL,,,StretchCharacterSpacingToFit, +0,4.1,5,Narrow,black,6.0,,OL,,,StretchCharacterSpacingToFit, +0,4.1,51,Narrow,black,6.0,-2.0,AL,,,, +0,4.2,1,Narrow Italic,black,6.0,-2.0,AL,,,, +0,4.8,1,Regular,black,5.0,-1.6,AL,,,StretchWordSpacingToFit, +0,4.8,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, +0,4.8,32,Regular,black,5.0,,OL,left,0.45,StretchWordSpacingToFit, +0,5.0,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +0,5.0,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +0,5.5,1,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit, +0,5.5,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +0,5.5,3,Regular,black,5.5,-1.4,BL,,,StretchWordSpacingToFit, +0,5.5,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +0,67.0,1,Narrow,black,5.5,-2.0,AL,,,, +0,67.0,31,Narrow,black,5.5,-2.0,AL,left,0.8,, +0,68.5,1,Italic,process_blue,6.0,-2.0,AL,,,StretchCharacterSpacingToFit, +0,75.0,1,Italic,process_blue,6.0,-2.0,AL,left,0.5,, +0,75.0,1,Narrow Italic,black,6.0,-2.1,AL,,,StretchWordSpacingToFit, +0,75.0,1,Regular,black,6.0,-2.1,AL,,,StretchCharacterSpacingToFit, +0,75.0,3,Narrow Italic,black,6.0,-1.4,BL,,,StretchCharacterSpacingToFit, +0,75.0,21,Narrow Italic,black,6.0,-2.1,AL,,,StretchCharacterSpacingToFit, +0,75.0,31,Narrow Italic,black,6.0,-2.1,AL,,,StretchWordSpacingToFit, +0,75.0,33,Narrow Italic,black,6.0,-1.4,BL,,,, +1,0.0012,1,Italic,black,5.0,-1.6,AL,left,0.6,, +1,0.0012,5,Narrow Italic,black,5.0,,OL,,,, +1,0.0012,31,Italic,black,5.0,-1.6,AL,left,0.41,, +1,0.0012,31,Narrow Italic,black,5.0,-1.6,AL,left,0.6,, +1,0.0013,1,Italic,black,5.0,-1.5,AL,left,0.6,, +1,0.0013,1,Italic,process_blue,5.0,-1.5,AL,left,0.55,, +1,0.0013,1,Narrow,black,5.0,-1.5,AL,left,0.6,, +1,0.0013,2,Italic,process_blue,5.0,,OL,left,0.55,, +1,0.0013,7,Narrow,black,5.0,-1.5,AL,right,0.3,, +1,0.0013,8,Italic,black,5.0,,OL,right,0.35,, +1,0.0014,1,Italic,black,6.0,-2.3,AL,left,0.6,, +1,0.0014,1,Italic,process_blue,6.0,-2.3,AL,left,0.6,, +1,0.0014,1,Narrow,black,6.0,-2.3,AL,left,0.6,, +1,0.0014,1,Narrow Italic,black,6.0,-2.3,AL,left,0.6,, +1,0.0014,1,Regular,black,6.0,-2.3,AL,left,0.6,, +1,0.0014,2,Italic,black,6.0,,OL,left,0.6,, +1,0.0014,2,Italic,process_blue,6.0,,OL,left,0.6,, +1,0.0014,2,Narrow,black,6.0,,OL,left,0.6,, +1,0.0014,3,Italic,black,6.0,-1.5,BL,left,0.6,, +1,0.0014,3,Italic,process_blue,6.0,-1.5,BL,right,0.25,, +1,0.0014,3,Narrow,black,6.0,-1.5,BL,left,0.6,, +1,0.0014,4,Italic,black,6.0,-2.3,AL,,,, +1,0.0014,4,Italic,process_blue,6.0,-2.3,AL,left,0.6,, +1,0.0014,4,Narrow,black,6.0,-2.3,AL,,,, +1,0.0014,5,Italic,black,6.0,,OL,,,, +1,0.0014,5,Italic,process_blue,6.0,,OL,,,, +1,0.0014,5,Narrow,black,6.0,,OL,left,0.5,, +1,0.0014,5,Narrow Italic,black,6.0,,OL,left,0.5,, +1,0.0014,6,Narrow,black,6.0,-1.5,BL,left,0.5,, +1,0.0014,7,Italic,black,6.0,-2.3,AL,right,0.37,, +1,0.0014,7,Italic,process_blue,6.0,-2.3,AL,right,0.37,, +1,0.0014,7,Narrow,black,6.0,-2.3,AL,left,0.6,StretchWordSpacingToFit, +1,0.0014,8,Italic,black,6.0,,OL,right,0.37,, +1,0.0014,8,Italic,process_blue,6.0,,OL,right,0.37,, +1,0.0014,8,Narrow,black,6.0,,OL,left,0.35,, +1,0.0014,9,Italic,black,6.0,-1.5,BL,right,0.37,, +1,0.0014,9,Italic,process_blue,6.0,-1.5,BL,right,0.25,, +1,0.0014,9,Narrow,black,6.0,-1.5,BL,right,0.4,, +1,0.0014,21,Narrow,black,6.0,-2.3,AL,left,0.85,, +1,0.0014,31,Italic,black,6.0,-2.3,AL,right,0.6,, +1,0.0014,31,Narrow,black,6.0,-2.3,AL,left,0.6,, +1,0.0014,34,Narrow,black,6.0,-2.3,AL,left,0.4,, +1,0.0015,1,Narrow,black,6.0,-1.9,AL,left,0.68,, +1,0.0017,1,Italic,black,7.0,-2.4,AL,left,0.6,, +1,0.0017,1,Italic,process_blue,7.0,-2.4,AL,left,0.6,, +1,0.0017,1,Narrow,black,7.0,-2.4,AL,left,0.6,, +1,0.0017,1,Narrow,warm_red,7.0,-2.4,AL,left,0.6,, +1,0.0017,1,Narrow Italic,black,7.0,-2.4,AL,centre,0.6,, +1,0.0017,1,Regular,black,5.0,-1.8,AL,centre,0.6,, +1,0.0017,2,Italic,black,7.0,,OL,left,0.6,, +1,0.0017,2,Italic,process_blue,7.0,,OL,left,0.6,, +1,0.0017,2,Narrow,black,7.0,,OL,left,0.6,, +1,0.0017,2,Narrow Italic,black,7.0,,OL,left,0.6,, +1,0.0017,3,Narrow Italic,black,7.0,-1.8,BL,left,0.6,, +1,0.0017,4,Italic,black,7.0,-2.4,AL,right,0.47,, +1,0.0017,4,Narrow,black,7.0,-2.4,AL,,,, +1,0.0017,4,Narrow Italic,black,7.0,-2.4,AL,centre,0.5,, +1,0.0017,5,Italic,black,7.0,,OL,,,, +1,0.0017,5,Italic,process_blue,7.0,,OL,,,, +1,0.0017,5,Regular,black,5.0,,OL,centre,0.6,, +1,0.0017,6,Narrow Italic,black,7.0,-1.8,BL,right,0.47,, +1,0.0017,7,Italic,black,7.0,-2.4,AL,right,0.35,, +1,0.0017,7,Italic,process_blue,7.0,-2.4,AL,right,0.35,, +1,0.0017,7,Narrow Italic,black,7.0,-2.4,AL,right,0.4,, +1,0.0017,8,Narrow Italic,black,7.0,,OL,right,0.38,, +1,0.0017,9,Narrow Italic,black,7.0,-1.8,BL,right,0.38,, +1,0.0017,21,Narrow Italic,black,7.0,-2.4,AL,left,0.6,, +1,0.0017,32,Regular,black,5.0,,OL,centre,0.6,, +1,0.0019,1,Italic,black,7.5,-2.3,AL,left,0.65,, +1,0.0019,1,Italic,process_blue,7.5,-2.3,AL,left,0.67,, +1,0.0019,1,Narrow,black,8.0,-2.7,AL,left,0.65,, +1,0.0019,1,Narrow Italic,black,8.0,-2.7,AL,left,0.69,, +1,0.0019,1,Regular,black,5.5,-2.0,AL,left,0.65,, +1,0.0019,2,Italic,black,7.5,,OL,left,0.65,, +1,0.0019,2,Italic,process_blue,7.5,,OL,left,0.65,, +1,0.0019,2,Narrow,black,8.0,,OL,left,0.65,, +1,0.0019,2,Regular,black,5.5,,OL,left,0.62,, +1,0.0019,3,Narrow,black,8.0,-2.0,BL,right,0.62,, +1,0.0019,3,Narrow Italic,black,8.0,-1.8,BL,left,0.65,, +1,0.0019,3,Regular,black,5.5,-1.5,BL,left,0.65,, +1,0.0019,4,Narrow,black,8.0,-2.7,AL,,,, +1,0.0019,4,Narrow Italic,black,8.0,-2.7,AL,left,0.5,, +1,0.0019,5,Italic,black,7.5,,OL,,,, +1,0.0019,5,Narrow,black,8.0,,OL,left,0.65,, +1,0.0019,5,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +1,0.0019,7,Italic,black,7.5,-2.1,AL,right,0.35,, +1,0.0019,7,Narrow,black,8.0,-2.1,AL,right,0.35,, +1,0.0019,7,Narrow Italic,black,8.0,-2.7,AL,right,0.35,, +1,0.0019,8,Narrow,black,8.0,,OL,right,0.35,, +1,0.0019,9,Narrow,black,8.0,-2.0,BL,right,0.4,, +1,0.0019,21,Narrow,black,8.0,-2.7,AL,left,0.65,, +1,0.0019,31,Narrow,black,8.0,-2.7,AL,left,0.65,, +1,0.0019,32,Regular,black,5.5,,OL,left 0.62,,, +1,0.0019,34,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit, +1,0.0022,1,Italic,black,8.5,-2.4,AL,left,0.64,, +1,0.0022,1,Narrow,black,8.5,-3.0,AL,left,0.64,, +1,0.0022,1,Narrow,warm_red,8.5,-3.0,AL,left,0.64,, +1,0.0022,1,Narrow Bold,black,8.5,-2.7,AL,left,0.64,, +1,0.0024,1,Italic,black,9.5,-2.7,AL,left,0.69,, +1,0.0024,1,Italic,process_blue,9.5,-3.0,AL,left,0.64,, +1,0.0024,1,Narrow,black,9.5,-3.0,AL,left,0.64,, +1,0.0024,1,Narrow Bold,black,9.5,-3.0,AL,left,0.64,, +1,0.0024,4,Narrow,black,9.5,-3.0,AL,,,, +1,0.0024,4,Narrow Italic,black,9.5,-3.2,AL,,,, +1,0.0024,7,Italic,black,9.5,-2.7,AL,right,0.35,, +1,0.0029,1,Italic,black,12.0,-4.0,AL,left,0.68,, +1,0.0029,1,Narrow Bold,black,12.0,-4.0,AL,left,0.68,, +1,0.0029,2,Narrow Bold,black,12.0,,OL,left,0.68,, +1,0.0034,1,Narrow Bold,black,13.0,-4.0,AL,left,0.66,, +1,0.0038,1,Italic,black,15.0,-4.6,AL,left,0.66,, +1,0.0043,1,Narrow Bold,black,17.0,-5.0,AL,left,0.67,, +1,4.1,1,Narrow Italic,black,6.0,-2.0,AL,left,0.5,, +1,4.1,5,Narrow Italic,black,6.0,,OL,left,0.5,, +1,4.8,1,Regular,black,5.0,-1.6,AL,left,0.35,, +1,5.0,3,Regular,black,5.5,-1.0,BL,,,StretchWordSpacingToFit, +1,5.0,5,Regular,black,5.5,,OL,,,, +1,5.0,32,Regular,black,5.5,,OL,left,0.33,, +1,5.5,5,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +1,5.5,32,Regular,black,5.5,,OL,left,0.35,, +1,67.0,1,Narrow,black,5.5,-2.0,AL,left,0.8,, +1,67.0,7,Narrow,black,5.5,-2.0,AL,left,0.8,, +1,75.0,1,Italic,process_blue,6.0,-2.0,AL,left,0.65,, +1,75.0,1,Narrow Italic,black,6.0,-2.1,AL,left,0.65,, +1,75.0,1,Regular,black,6.0,-2.1,AL,left,0.65,, +1,75.0,3,Italic,process_blue,6.0,,BL,left,0.65,, +1,75.0,5,Italic,process_blue,6.0,,OL,,,, +1,75.0,6,Narrow Italic,black,6.0,-1.4,BL,,,, +1,75.0,6,Regular,black,6.0,-2.0,BL,,,, +1,75.0,7,Italic,process_blue,6.0,-2.0,AL,left,0.4,, +1,75.0,7,Narrow Italic,black,6.0,-2.1,AL,,,StretchWordSpacingToFit, +1,75.0,34,Narrow Italic,black,6.0,-2.1,AL,,,, +1,75.0,61,Narrow Italic,black,6.0,-2.1,AL,left,0.6,, +7,0.0012,1,Italic,black,5.0,-1.6,AL,,,StretchCharacterSpacingToFit, +7,0.0012,1,Italic,process_blue,5.0,-1.6,AL,,,StretchCharacterSpacingToFit, +7,0.0012,2,Italic,black,5.0,,OL,,,StretchCharacterSpacingToFit, +7,0.0012,2,Italic,process_blue,5.0,,OL,,,StretchCharacterSpacingToFit, +7,0.0013,1,Italic,process_blue,5.0,-1.5,AL,,,StretchWordSpacingToFit, +7,0.0013,2,Italic,black,5.0,,OL,,,StretchCharacterSpacingToFit, +7,0.0013,2,Italic,process_blue,5.0,,OL,,,StretchWordSpacingToFit, +7,0.0013,3,Italic,process_blue,5.0,-1.2,,,,StretchWordSpacingToFit, +7,0.0013,32,Italic,process_blue,5.0,,OL,,,StretchWordSpacingToFit, +7,0.0014,1,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, +7,0.0014,1,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, +7,0.0014,1,Italic,warm_red,6.0,-2.3,AL,,,StretchWordSpacingToFit, +7,0.0014,1,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, +7,0.0014,1,Narrow,warm_red,6.0,,OL,,,StretchWordSpacingToFit, +7,0.0014,2,Italic,black,6.0,,OL,,,StretchWordSpacingToFit, +7,0.0014,2,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, +7,0.0014,2,Italic,warm_red,6.0,,OL,,,StretchWordSpacingToFit, +7,0.0014,2,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit, +7,0.0014,2,Narrow Italic,black,6.0,,OL,,,, +7,0.0014,3,Italic,black,6.0,-1.5,BL,,,StretchWordSpacingToFit, +7,0.0014,3,Italic,process_blue,6.0,-1.5,BL,,,StretchWordSpacingToFit, +7,0.0014,3,Narrow,black,6.0,-1.5,BL,,,StretchWordSpacingToFit, +7,0.0014,12,Italic,black,6.0,,OL,,,StretchWordSpacingToFit, +7,0.0014,12,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, +7,0.0014,31,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, +7,0.0014,31,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, +7,0.0014,31,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, +7,0.0014,32,Italic,black,6.0,,OL,,,StretchWordSpacingToFit, +7,0.0014,32,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, +7,0.0014,32,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit, +7,0.0016,1,Italic,process_blue,6.0,-1.9,AL,,,StretchWordSpacingToFit, +7,0.0017,1,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +7,0.0017,1,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, +7,0.0017,1,Narrow,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +7,0.0017,1,Narrow,warm_red,7.0,-2.4,AL,,,StretchWordSpacingToFit, +7,0.0017,1,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +7,0.0017,1,Regular,black,5.0,-1.8,AL,,,StretchWordSpacingToFit, +7,0.0017,2,Italic,black,7.0,,OL,,,StretchWordSpacingToFit, +7,0.0017,2,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit, +7,0.0017,2,Narrow,black,7.0,,OL,,,StretchWordSpacingToFit, +7,0.0017,2,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +7,0.0017,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, +7,0.0017,3,Italic,process_blue,7.0,-1.8,BL,,,StretchWordSpacingToFit, +7,0.0017,3,Regular,black,5.0,-1.8,BL,,,StretchWordSpacingToFit, +7,0.0017,12,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit, +7,0.0017,31,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +7,0.0017,31,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, +7,0.0017,31,Narrow,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +7,0.0017,31,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +7,0.0017,32,Italic,black,7.0,,OL,,,StretchWordSpacingToFit, +7,0.0017,32,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit, +7,0.0017,32,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, +7,0.0017,42,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit, +7,0.0018,2,Italic,process_blue,8.0,,OL,,,StretchWordSpacingToFit, +7,0.0019,1,Italic,black,7.5,-2.3,AL,,,StretchWordSpacingToFit, +7,0.0019,1,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit, +7,0.0019,1,Narrow,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, +7,0.0019,1,Narrow Bold,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit, +7,0.0019,1,Narrow Italic,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, +7,0.0019,1,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit, +7,0.0019,2,Italic,black,7.5,,OL,,,StretchWordSpacingToFit, +7,0.0019,2,Italic,process_blue,7.5,,OL,,,StretchWordSpacingToFit, +7,0.0019,2,Narrow,black,8.0,,OL,,,StretchWordSpacingToFit, +7,0.0019,2,Narrow Italic,black,8.0,,OL,,,StretchWordSpacingToFit, +7,0.0019,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +7,0.0019,3,Italic,black,7.5,-0.9,BL,,,StretchWordSpacingToFit, +7,0.0019,3,Italic,process_blue,7.5,-2.0,BL,,,StretchWordSpacingToFit, +7,0.0019,3,Narrow,black,8.0,-2.0,BL,,,StretchWordSpacingToFit, +7,0.0019,3,Regular,black,5.5,-1.5,BL,,,StretchWordSpacingToFit, +7,0.0019,12,Italic,process_blue,7.5,,OL,,,StretchWordSpacingToFit, +7,0.0019,12,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +7,0.0019,31,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit, +7,0.0019,31,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit, +7,0.0019,31,Narrow,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit, +7,0.0019,31,Narrow Italic,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, +7,0.0019,32,Italic,black,7.5,,OL,,,StretchWordSpacingToFit, +7,0.0019,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +7,0.0019,33,Italic,process_blue,7.5,-2.0,BL,,,StretchWordSpacingToFit, +7,0.0022,1,Italic,black,8.5,-2.4,AL,,,StretchWordSpacingToFit, +7,0.0022,1,Italic,process_blue,8.5,-2.7,AL,,,StretchCharacterSpacingToFit, +7,0.0022,1,Narrow,black,8.5,-3.0,AL,,,StretchCharacterSpacingToFit, +7,0.0022,1,Narrow,process_blue,8.5,-2.7,AL,,,StretchCharacterSpacingToFit, +7,0.0022,1,Narrow Bold,black,8.5,-2.7,AL,,,StretchCharacterSpacingToFit, +7,0.0022,2,Italic,black,8.5,,OL,,,StretchWordSpacingToFit, +7,0.0022,2,Italic,process_blue,8.5,,OL,,,StretchWordSpacingToFit, +7,0.0024,1,Italic,black,9.5,-2.7,AL,,,StretchCharacterSpacingToFit, +7,0.0024,1,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit, +7,0.0024,1,Narrow Bold,black,9.5,-3.0,AL,,,StretchWordSpacingToFit, +7,0.0024,1,Narrow Italic,black,9.5,-3.2,AL,,,StretchWordSpacingToFit, +7,0.0024,2,Italic,black,9.5,,OL,,,StretchWordSpacingToFit, +7,0.0024,2,Italic,process_blue,9.5,,OL,,,StretchWordSpacingToFit, +7,0.0024,3,Italic,process_blue,9.5,-2.5,BL,,,StretchWordSpacingToFit, +7,0.0024,12,Italic,black,9.5,,OL,,,StretchWordSpacingToFit, +7,0.0024,31,Italic,black,9.5,-2.7,AL,,,StretchWordSpacingToFit, +7,0.0024,31,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit, +7,0.0024,31,Narrow Bold,black,9.5,-3.2,AL,,,StretchWordSpacingToFit, +7,0.0024,32,Italic,black,9.5,,OL,,,StretchWordSpacingToFit, +7,0.0026,1,Italic,process_blue,10.5,-3.0,AL,,,StretchWordSpacingToFit, +7,0.0029,1,Italic,black,12.0,-4.0,AL,,,StretchWordSpacingToFit, +7,0.0029,1,Italic,process_blue,12.0,-4.0,AL,,,StretchWordSpacingToFit, +7,0.0029,1,Narrow Bold,black,12.0,-4.0,AL,,,StretchCharacterSpacingToFit, +7,0.0029,2,Italic,black,12.0,,OL,,,StretchWordSpacingToFit, +7,0.0029,2,Italic,process_blue,12.0,,OL,,,StretchWordSpacingToFit, +7,0.0029,31,Italic,process_blue,12.0,-4.0,AL,,,StretchWordSpacingToFit, +7,0.0029,32,Italic,black,12.0,,OL,,,StretchWordSpacingToFit, +7,0.0029,32,Italic,process_blue,12.0,,OL,,,StretchWordSpacingToFit, +7,0.0034,1,Italic,process_blue,13.0,-4.0,AL,,,StretchWordSpacingToFit, +7,0.0034,1,Narrow Bold,black,13.0,-4.0,AL,,,StretchCharacterSpacingToFit, +7,0.0034,2,Italic,black,13.0,,OL,,,StretchWordSpacingToFit, +7,0.0034,2,Italic,process_blue,13.0,,OL,,,StretchWordSpacingToFit, +7,0.0034,31,Italic,process_blue,13.0,-4.0,AL,,,StretchWordSpacingToFit, +7,0.0034,32,Italic,process_blue,13.0,,OL,,,StretchWordSpacingToFit, +7,0.0038,1,Italic,black,15.0,-4.6,AL,,,StretchWordSpacingToFit, +7,0.0043,1,Narrow,warm_red,17.0,-5.0,AL,,,StretchWordSpacingToFit, +7,0.0051,1,Narrow,warm_red,21.0,-7.0,AL,,,StretchWordSpacingToFit, +7,0.0058,1,Narrow,warm_red,23.0,-7.0,AL,,,StretchWordSpacingToFit, +7,4.1,1,Narrow,black,6.0,-2.0,AL,,,StretchCharacterSpacingToFit, +7,4.5,32,Regular,black,5.0,,OL,,,StretchCharacterSpacingToFit, +7,4.8,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, +7,4.8,32,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, +7,5.0,1,Regular,black,5.5,-1.7,AL,,,StretchWordSpacingToFit, +7,5.0,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +7,5.0,3,Regular,black,5.5,-1.0,BL,,,StretchWordSpacingToFit, +7,5.0,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +7,5.5,1,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit, +7,5.5,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +7,5.5,3,Regular,black,5.5,-1.4,BL,,,StretchWordSpacingToFit, +7,5.5,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +7,75.0,1,Italic,process_blue,6.0,-2.0,AL,,,, +7,75.0,1,Narrow Italic,black,6.0,-2.1,AL,,,StretchWordSpacingToFit, +7,75.0,1,Regular,black,6.0,-2.1,AL,,,StretchCharacterSpacingToFit, +7,75.0,3,Narrow Italic,black,6.0,-1.4,BL,,,StretchCharacterSpacingToFit, +7,75.0,31,Narrow Italic,black,6.0,-2.1,AL,,,StretchWordSpacingToFit, +7,75.0,33,Narrow Italic,black,6.0,-1.4,BL,,,StretchCharacterSpacingToFit, +7,75.0,36,Narrow Italic,black,6.0,-1.4,BL,,,StretchCharacterSpacingToFit, +9,0.0012,2,Italic,process_blue,5.0,,OL,,,StretchCharacterSpacingToFit, +9,0.0012,31,Italic,black,5.0,-1.6,AL,,,, +9,0.0012,34,Italic,black,5.0,-1.6,AL,,,, +9,0.0012,34,Italic,process_blue,5.0,-1.6,AL,,,StretchWordSpacingToFit, +9,0.0013,1,Italic,black,5.0,-1.5,AL,,,StretchWordSpacingToFit, +9,0.0013,1,Narrow,black,5.0,-1.5,AL,,,StretchCharacterSpacingToFit, +9,0.0013,2,Italic,black,5.0,,OL,,,StretchWordSpacingToFit, +9,0.0013,31,Italic,black,5.0,-1.5,AL,left,0.5,, +9,0.0013,31,Italic,process_blue,5.0,-1.5,AL,,,StretchWordSpacingToFit, +9,0.0013,32,Italic,black,5.0,,OL,,,StretchWordSpacingToFit, +9,0.0013,34,Italic,black,5.0,-1.5,AL,,,StretchWordSpacingToFit, +9,0.0013,34,Italic,process_blue,5.0,-1.5,AL,,,StretchWordSpacingToFit, +9,0.0013,34,Narrow,black,5.0,-1.5,AL,,,StretchWordSpacingToFit, +9,0.0013,35,Italic,process_blue,5.0,,OL,,,StretchWordSpacingToFit, +9,0.0013,38,Italic,process_blue,5.0,,OL,,,StretchWordSpacingToFit, +9,0.0014,1,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0014,1,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0014,1,Narrow,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit, +9,0.0014,1,Narrow Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0014,2,Italic,black,6.0,,OL,,,StretchWordSpacingToFit, +9,0.0014,2,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, +9,0.0014,2,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit, +9,0.0014,3,Italic,process_blue,6.0,-1.5,BL,,,StretchWordSpacingToFit, +9,0.0014,3,Narrow,black,6.0,-1.5,BL,,,StretchWordSpacingToFit, +9,0.0014,4,Italic,black,6.0,-2.3,AL,,,, +9,0.0014,4,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0014,4,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0014,5,Italic,black,6.0,,OL,,,, +9,0.0014,5,Italic,process_blue,6.0,,OL,,,, +9,0.0014,5,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit, +9,0.0014,6,Italic,black,6.0,-1.5,BL,,,, +9,0.0014,6,Italic,process_blue,6.0,-1.5,BL,,,, +9,0.0014,6,Narrow,black,6.0,-1.5,BL,,,, +9,0.0014,6,Narrow,process_blue,6.0,-1.5,BL,,,, +9,0.0014,7,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0014,31,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0014,31,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0014,31,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0014,32,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, +9,0.0014,32,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit, +9,0.0014,33,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, +9,0.0014,33,Narrow,black,6.0,-1.5,BL,,,StretchWordSpacingToFit, +9,0.0014,34,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0014,34,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0014,34,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0014,34,Narrow,warm_red,6.0,-2.3,AL,,,, +9,0.0014,34,Narrow Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0014,35,Italic,black,6.0,,OL,,,StretchWordSpacingToFit, +9,0.0014,35,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, +9,0.0014,35,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit, +9,0.0014,36,Italic,black,6.0,-1.5,BL,,,, +9,0.0014,36,Italic,process_blue,6.0,-1.5,BL,,,, +9,0.0014,36,Narrow,black,6.0,-1.5,BL,,,StretchWordSpacingToFit, +9,0.0014,37,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0014,37,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0014,37,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0014,38,Italic,black,6.0,,OL,,,StretchWordSpacingToFit, +9,0.0014,38,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, +9,0.0014,54,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0014,3534,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0017,1,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +9,0.0017,1,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, +9,0.0017,1,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +9,0.0017,1,Regular,black,5.0,-1.8,AL,,,StretchWordSpacingToFit, +9,0.0017,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, +9,0.0017,4,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +9,0.0017,4,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, +9,0.0017,4,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +9,0.0017,5,Italic,black,7.0,,OL,,,StretchWordSpacingToFit, +9,0.0017,5,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit, +9,0.0017,5,Regular,black,5.0,,OL,,,, +9,0.0017,6,Italic,process_blue,7.0,-1.8,BL,,,StretchWordSpacingToFit, +9,0.0017,31,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +9,0.0017,31,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, +9,0.0017,31,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +9,0.0017,31,Regular,black,5.0,-1.8,AL,,,StretchWordSpacingToFit, +9,0.0017,32,Narrow Italic,black,7.0,,OL,,,StretchWordSpacingToFit, +9,0.0017,32,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, +9,0.0017,34,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +9,0.0017,34,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, +9,0.0017,34,Narrow,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +9,0.0017,34,Narrow,warm_red,7.0,-2.4,AL,,,StretchWordSpacingToFit, +9,0.0017,34,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +9,0.0017,34,Regular,black,5.0,-2.4,AL,,,StretchWordSpacingToFit, +9,0.0017,35,Italic,black,7.0,,OL,,,StretchWordSpacingToFit, +9,0.0017,35,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit, +9,0.0017,35,Narrow Italic,black,7.0,,OL,,,StretchWordSpacingToFit, +9,0.0017,35,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, +9,0.0017,36,Italic,black,7.0,-1.8,BL,,,StretchWordSpacingToFit, +9,0.0017,36,Italic,process_blue,7.0,-1.8,BL,,,StretchWordSpacingToFit, +9,0.0017,36,Narrow Italic,black,7.0,-1.8,BL,,,, +9,0.0017,36,Regular,black,5.0,-1.8,BL,,,StretchWordSpacingToFit, +9,0.0017,37,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, +9,0.0017,37,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, +9,0.0017,38,Italic,black,7.0,,OL,,,StretchWordSpacingToFit, +9,0.0017,38,Narrow Italic,black,7.0,,OL,,,StretchWordSpacingToFit, +9,0.0017,38,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, +9,0.0018,35,Regular,black,8.0,,OL,,,StretchWordSpacingToFit, +9,0.0019,1,Italic,black,7.5,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0019,1,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0019,1,Narrow,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, +9,0.0019,1,Narrow Italic,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, +9,0.0019,1,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit, +9,0.0019,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +9,0.0019,4,Narrow,black,8.0,-2.7,AL,,,, +9,0.0019,5,Italic,black,7.5,,OL,,,StretchWordSpacingToFit, +9,0.0019,5,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0019,5,Narrow,black,8.0,,OL,left,0.65,, +9,0.0019,5,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +9,0.0019,31,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit, +9,0.0019,31,Narrow,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, +9,0.0019,31,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit, +9,0.0019,32,Italic,process_blue,7.5,-2.0,BL,,,StretchWordSpacingToFit, +9,0.0019,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +9,0.0019,34,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit, +9,0.0019,34,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit, +9,0.0019,34,Narrow,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, +9,0.0019,34,Narrow Bold,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, +9,0.0019,34,Narrow Italic,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, +9,0.0019,34,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit, +9,0.0019,35,Italic,black,7.5,,OL,,,StretchWordSpacingToFit, +9,0.0019,35,Italic,process_blue,7.5,,OL,,,StretchWordSpacingToFit, +9,0.0019,35,Narrow,black,8.0,,OL,,,StretchWordSpacingToFit, +9,0.0019,35,Narrow Bold,black,8.0,,OL,,,StretchWordSpacingToFit, +9,0.0019,35,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +9,0.0019,36,Narrow Bold,black,8.0,,OL,,,StretchWordSpacingToFit, +9,0.0019,37,Narrow Italic,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, +9,0.0019,37,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit, +9,0.0019,54,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit, +9,0.0022,31,Narrow Bold,black,8.5,-3.0,AL,,,StretchWordSpacingToFit, +9,0.0022,34,Italic,process_blue,8.5,-3.0,AL,,,StretchWordSpacingToFit, +9,0.0022,34,Narrow,black,8.5,-3.0,AL,,,StretchWordSpacingToFit, +9,0.0022,34,Narrow Bold,black,8.5,-3.0,AL,,,StretchWordSpacingToFit, +9,0.0022,35,Narrow,black,8.5,,OL,,,StretchWordSpacingToFit, +9,0.0024,1,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit, +9,0.0024,4,Narrow,black,9.5,-3.0,AL,,,, +9,0.0024,4,Narrow Italic,black,9.5,-3.2,AL,,,StretchWordSpacingToFit, +9,0.0024,34,Italic,black,9.5,-2.7,AL,,,StretchWordSpacingToFit, +9,0.0024,34,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit, +9,0.0024,34,Narrow Italic,black,9.5,-3.2,AL,,,StretchWordSpacingToFit, +9,0.0024,35,Italic,black,9.5,,OL,,,StretchWordSpacingToFit, +9,0.0029,34,Italic,process_blue,12.0,-4.0,AL,,,StretchWordSpacingToFit, +9,0.0029,34,Narrow Bold,black,12.0,-4.0,AL,,,StretchCharacterSpacingToFit, +9,0.0029,35,Italic,black,12.0,,OL,,,StretchWordSpacingToFit, +9,0.0029,35,Italic,process_blue,12.0,,OL,,,StretchWordSpacingToFit, +9,0.0034,34,Italic,process_blue,13.0,-4.0,AL,,,StretchWordSpacingToFit, +9,4.5,1,Regular,black,5.0,-1.7,AL,,,StretchWordSpacingToFit, +9,4.5,32,Regular,black,5.0,,OL,,,StretchCharacterSpacingToFit, +9,4.5,34,Regular,black,5.0,-1.7,AL,,,StretchWordSpacingToFit, +9,4.8,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, +9,4.8,32,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, +9,4.8,34,Regular,black,5.0,-1.6,AL,,,StretchWordSpacingToFit, +9,4.8,35,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, +9,4.8,36,Regular,black,5.0,-1.5,BL,,,StretchWordSpacingToFit, +9,4.8,38,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, +9,5.0,1,Regular,black,5.5,-1.7,AL,,,StretchWordSpacingToFit, +9,5.0,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +9,5.0,5,Regular,black,5.5,,OL,,,, +9,5.0,31,Regular,black,5.5,-1.7,AL,,,StretchWordSpacingToFit, +9,5.0,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +9,5.0,34,Regular,black,5.5,-1.7,AL,,,StretchWordSpacingToFit, +9,5.0,35,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +9,5.0,37,Regular,black,5.5,-1.7,AL,,,StretchWordSpacingToFit, +9,5.0,38,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +9,5.5,1,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit, +9,5.5,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +9,5.5,5,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +9,5.5,31,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit, +9,5.5,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +9,5.5,34,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit, +9,5.5,35,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, +9,5.5,37,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit, +9,75.0,1,Narrow Italic,black,6.0,-2.1,AL,,,, diff --git a/packages/kart-import/config/themes/nztopo50_carto_text.yml b/packages/kart-import/config/themes/nztopo50_carto_text.yml new file mode 100644 index 00000000..923f54ca --- /dev/null +++ b/packages/kart-import/config/themes/nztopo50_carto_text.yml @@ -0,0 +1,39 @@ +name: nztopo50_carto_text +target_repo: topographic-product-data +target_epsg: EPSG:2193 + +datasets: + - source: + url: git@github.com:linz/topographic-source-data + dataset: linz_carto_text + name: linz_carto_text + mapping: + t50_fid: null + example_point_id: null + full_text: $full_text + text_bend: $text_bend + text_char_spacing_distance: $t_c_s_d + text_colour: $text_colou + text_font: $text_font + text_height: $text_heigh + text_orientation: $text_orien + text_placement: $text_place + text_size_type: $txt_size_t + text_stretch_length: $txt_s_l + text_string: $text_strin + text_word_spacing_distance: $t_w_s_d + # Styling fields: seeded null, then filled by the carto_text_styling fixup below. + font: null + style: null + colour: null + size: null + placement: null + offset: null + textanchor: null + labelanchor: null + charplace: null + chardistance: null + metadata: null + fixups: + # Reproduce the legacy CartoTextProcessor styling from the mapped text_* fields. + - fn: carto_text_styling diff --git a/packages/kart-import/src/kart_import/config.py b/packages/kart-import/src/kart_import/config.py index fa89cfbe..17c1bc8a 100644 --- a/packages/kart-import/src/kart_import/config.py +++ b/packages/kart-import/src/kart_import/config.py @@ -24,6 +24,9 @@ CONFIG_DIR_RELEASE = CONFIG_DIR / "topo50_release.yml" CONFIG_DIR_REPOS = CONFIG_DIR / "repos.yml" +# Static style mappings table for the `carto_text_styling` fixup. +CONFIG_DIR_CARTO_TEXT_STYLING = CONFIG_DIR / "carto_text_styling.csv" + # source/ — raw Kart repos and GeoJSON release snapshots SOURCE_DIR = DATA_DIR / "source" diff --git a/packages/kart-import/src/kart_import/fixups.py b/packages/kart-import/src/kart_import/fixups.py index 0a6d20e7..983cc6f4 100644 --- a/packages/kart-import/src/kart_import/fixups.py +++ b/packages/kart-import/src/kart_import/fixups.py @@ -29,6 +29,7 @@ import logging from collections.abc import Callable from datetime import UTC, datetime +from functools import cache from typing import TYPE_CHECKING, NamedTuple from .fixups_map_sheet import ( @@ -495,6 +496,97 @@ def contour_number(gdf: gpd.GeoDataFrame, td: ThemeDataset, release_id: int) -> gdf["label"] = gdf["label"].astype("Int64").astype("string") return gdf +CARTO_TEXT_COLOUR: dict[int, str] = {9: "black", 5: "warm_red", 6: "process_blue"} +CARTO_TEXT_COLOUR_DEFAULT = "black" +"""`text_colour` integer code -> `colour` enum. Legacy decoded any other code to black.""" + +CARTO_TEXT_FONT = "Nimbus Sans LINZ" +CARTO_TEXT_STYLE: dict[str, str] = { + "ATTriumMou-Regular": "Regular", + "ATTriumMou-Cond": "Narrow", + "ATTriumMou-CondBold": "Narrow Bold", + "ATTriumMou-CondItalic": "Narrow Italic", + "ATTriumMou-Italic": "Italic", + "ATTrium-Italic": "Regular", + "Courier Bold Oblique": "Regular", +} +"""mapping from source `text_font` values to `style` enum.""" + +def _carto_text_key(bend, height, place, style, colour): + """Join the five key columns into one string, e.g. `0|67.0000|31|Narrow|black` for looks up mapping from csv file.""" + import pandas as pd + + def as_text(series, decimals): + return series.astype("Float64").map(lambda v: f"{v:.{decimals}f}" if pd.notna(v) else pd.NA).astype("string") + + parts = [ + as_text(bend, 0), + as_text(height, 4), + as_text(place, 0), + style.astype("string"), + colour.astype("string"), + ] + + key = parts[0] + for part in parts[1:]: + key = key.str.cat(part, sep="|", na_rep="\x00") + return key + + +# Columns filled from the carto_text_styling table split by output dtype. +_CARTO_TEXT_STRING_FIELDS = ("placement", "textanchor", "charplace") +_CARTO_TEXT_NUMBER_FIELDS = ("size", "offset", "labelanchor", "chardistance") +_CARTO_TEXT_KEY_INPUTS = ("text_bend", "text_height", "text_placement", "text_colour", "text_font") + +@cache +def _carto_text_styling_table(): + """Read the carto_text_styling table from the carto_text_styling.csv file and prepare it for lookups.""" + import pandas as pd + + from .config import CONFIG_DIR_CARTO_TEXT_STYLING + + df = pd.read_csv(CONFIG_DIR_CARTO_TEXT_STYLING) + for column in _CARTO_TEXT_STRING_FIELDS + ("style", "colour"): + df[column] = df[column].astype("string").str.strip() + for column in _CARTO_TEXT_NUMBER_FIELDS: + df[column] = pd.to_numeric(df[column]).astype("Float64") + df["key"] = _carto_text_key(df["text_bend"], df["text_height"], df["text_placement"], df["style"], df["colour"]) + if df["key"].duplicated().any(): + raise ValueError("carto_text_styling.csv has duplicate composite keys") + return df.set_index("key") + + +def carto_text_styling(gdf: gpd.GeoDataFrame, td: ThemeDataset, release_id: int) -> gpd.GeoDataFrame: + """Fill the cartographic styling fields for carto_text based on the mapping from carto_text_styling.csv. + """ + import pandas as pd + + missing = set(_CARTO_TEXT_KEY_INPUTS) - set(gdf.columns) + if missing: + raise ValueError(f"carto_text_styling needs columns {sorted(missing)}, absent from '{td.name}'") + + table = _carto_text_styling_table() + + colour = gdf["text_colour"].map(CARTO_TEXT_COLOUR).astype("string").fillna(CARTO_TEXT_COLOUR_DEFAULT) + style = gdf["text_font"].map(CARTO_TEXT_STYLE).astype("string") + key = _carto_text_key(gdf["text_bend"], gdf["text_height"], gdf["text_placement"], style, colour) + matched = key.isin(table.index) + + gdf = gdf.copy() + gdf["colour"] = colour.where(matched) + gdf["style"] = style.where(matched) + gdf["font"] = pd.Series(CARTO_TEXT_FONT, index=gdf.index, dtype="string").where(matched) + for column in _CARTO_TEXT_STRING_FIELDS: + gdf[column] = key.map(table[column]).astype("string") + for column in _CARTO_TEXT_NUMBER_FIELDS: + gdf[column] = pd.to_numeric(key.map(table[column]), errors="coerce").astype("Float64") + + logger.info( + "carto_text_styling", + extra={"dataset": td.name, "release": release_id, "matched": int(matched.sum()), "total": len(gdf)}, + ) + return gdf + def _grid_values(low: float, high: float, interval: float) -> list[float]: """Grid line positions covering ``low``..``high``, snapped outward to whole intervals.""" @@ -615,6 +707,7 @@ def generate_dms_grid_features(gdf: gpd.GeoDataFrame, td: ThemeDataset, release_ FIXUPS: dict[str, Fixup] = { "build_nzgb_metadata": build_nzgb_metadata, "build_road_metadata": build_road_metadata, + "carto_text_styling": carto_text_styling, "drop_degenerate_fences": drop_degenerate_fences, "drop_degenerate_roads": drop_degenerate_roads, "drop_degenerate_tracks": drop_degenerate_tracks, diff --git a/packages/schema/src/features/next/nztopo50_carto_text.tsp b/packages/schema/src/features/next/nztopo50_carto_text.tsp index 591752b1..fcaf4295 100644 --- a/packages/schema/src/features/next/nztopo50_carto_text.tsp +++ b/packages/schema/src/features/next/nztopo50_carto_text.tsp @@ -7,6 +7,8 @@ using TypeSpec.JsonSchema; @extension("additionalProperties", false) model nztopo50_carto_text { ...ProductFeature; + created_at: utcDateTime; + updated_at: utcDateTime; /** id (UUID) of the example feature. */ example_point_id: string | null; @@ -33,6 +35,7 @@ model nztopo50_carto_text { labelanchor: float64 | null; charplace: carto_charplace | null; chardistance: float64 | null; + ...TopographicMetadata; ...GeoParquet; } @@ -70,7 +73,6 @@ enum carto_textanchor { _: "", Centre: "centre", Left: "left", - LeftWithSpace: "left ", // Note trailing space; not a typo. TODO: Need to fix source data to remove this. Left062: "left 0.62", Right: "right", } diff --git a/schema/next/nztopo50_carto_text.json b/schema/next/nztopo50_carto_text.json index a98df760..c1620ec5 100644 --- a/schema/next/nztopo50_carto_text.json +++ b/schema/next/nztopo50_carto_text.json @@ -8,6 +8,8 @@ "anyOf": [{ "type": "integer", "minimum": 0, "maximum": 4294967295 }, { "type": "null" }], "description": "Reference topo50 feature ID.\n\nWill be null if the feature is new and has not been published in a Topo50 edition." }, + "created_at": { "type": "string", "format": "date-time" }, + "updated_at": { "type": "string", "format": "date-time" }, "example_point_id": { "anyOf": [{ "type": "string" }, { "type": "null" }], "description": "id (UUID) of the example feature." @@ -48,12 +50,15 @@ "labelanchor": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "charplace": { "anyOf": [{ "$ref": "#/$defs/carto_charplace" }, { "type": "null" }] }, "chardistance": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, + "metadata": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "geometry": { "description": "GeoParquet 1.1 covering geometry struct.", "not": { "type": "null" } }, "bbox": { "$ref": "#/$defs/BBox", "description": "GeoParquet 1.1 covering bbox struct." } }, "required": [ "id", "t50_fid", + "created_at", + "updated_at", "example_point_id", "full_text", "text_bend", @@ -77,6 +82,7 @@ "labelanchor", "charplace", "chardistance", + "metadata", "geometry" ], "additionalProperties": false, @@ -97,7 +103,7 @@ "carto_style": { "type": "string", "enum": ["", "Italic", "Narrow", "Narrow Bold", "Narrow Italic", "Regular"] }, "carto_colour": { "type": "string", "enum": ["", "black", "process_blue", "warm_red"] }, "carto_placement": { "type": "string", "enum": ["", "AL", "BL", "OL"] }, - "carto_textanchor": { "type": "string", "enum": ["", "centre", "left", "left ", "left 0.62", "right"] }, + "carto_textanchor": { "type": "string", "enum": ["", "centre", "left", "left 0.62", "right"] }, "carto_charplace": { "type": "string", "enum": ["", "CharactersAtVertices", "StretchCharacterSpacingToFit", "StretchWordSpacingToFit"] From 1b9a7f91190529d6c13cf59fe983a98077175a39 Mon Sep 17 00:00:00 2001 From: Wentao Kuang Date: Thu, 10 Sep 2026 15:02:11 +1200 Subject: [PATCH 02/11] Add unit tests and worddistance --- .../config/themes/nztopo50_carto_text.yml | 1 + .../kart-import/src/kart_import/fixups.py | 2 +- .../src/kart_import/fixups_test.py | 103 ++++++++++++++++++ .../src/features/next/nztopo50_carto_text.tsp | 1 + .../src/features/nztopo50_carto_text.tsp | 1 + schema/next/nztopo50_carto_text.json | 2 + schema/nztopo50_carto_text.json | 2 + 7 files changed, 111 insertions(+), 1 deletion(-) diff --git a/packages/kart-import/config/themes/nztopo50_carto_text.yml b/packages/kart-import/config/themes/nztopo50_carto_text.yml index 923f54ca..0ebfd9b6 100644 --- a/packages/kart-import/config/themes/nztopo50_carto_text.yml +++ b/packages/kart-import/config/themes/nztopo50_carto_text.yml @@ -33,6 +33,7 @@ datasets: labelanchor: null charplace: null chardistance: null + worddistance: null metadata: null fixups: # Reproduce the legacy CartoTextProcessor styling from the mapped text_* fields. diff --git a/packages/kart-import/src/kart_import/fixups.py b/packages/kart-import/src/kart_import/fixups.py index 983cc6f4..c1a2cd3d 100644 --- a/packages/kart-import/src/kart_import/fixups.py +++ b/packages/kart-import/src/kart_import/fixups.py @@ -535,7 +535,7 @@ def as_text(series, decimals): # Columns filled from the carto_text_styling table split by output dtype. _CARTO_TEXT_STRING_FIELDS = ("placement", "textanchor", "charplace") -_CARTO_TEXT_NUMBER_FIELDS = ("size", "offset", "labelanchor", "chardistance") +_CARTO_TEXT_NUMBER_FIELDS = ("size", "offset", "labelanchor", "chardistance", "worddistance") _CARTO_TEXT_KEY_INPUTS = ("text_bend", "text_height", "text_placement", "text_colour", "text_font") @cache diff --git a/packages/kart-import/src/kart_import/fixups_test.py b/packages/kart-import/src/kart_import/fixups_test.py index d53edb33..9ce3227e 100644 --- a/packages/kart-import/src/kart_import/fixups_test.py +++ b/packages/kart-import/src/kart_import/fixups_test.py @@ -4,6 +4,7 @@ import geopandas as gpd import numpy as np +import pandas as pd import pytest from shapely.geometry import LineString, Point, Polygon from shapely.geometry.base import BaseGeometry @@ -14,8 +15,12 @@ from .assets.transform import apply_fixups from .config import Release, Theme, ThemeDataset from .fixups import ( + CARTO_TEXT_COLOUR, + CARTO_TEXT_FONT, + CARTO_TEXT_STYLE, _drop_listed_empty, _generate_grid_features, + carto_text_styling, drop_degenerate_fences, drop_empty_residential_areas, generate_dms_grid_features, @@ -671,3 +676,101 @@ def test_grid_fixups_are_wired_to_their_own_settings(fn, directions, vertices, i lons, lats = _values(out, along_y), _values(out, along_x) assert (lons[0], lons[-1], lats[0], lats[-1]) == extent assert lats[1] - lats[0] == pytest.approx(interval) + + +CARTO_TEXT_STYLING_FIELDS = ( + "font", + "style", + "colour", + "size", + "offset", + "placement", + "textanchor", + "labelanchor", + "charplace", + "chardistance", +) + + +def _carto_text_gdf(rows: list[dict]) -> gpd.GeoDataFrame: + """A frame shaped like `normalize_fields`' output for linz_carto_text: the five decode + inputs typed as the schema types them, and the ten styling fields seeded null.""" + gdf = gpd.GeoDataFrame( + { + "text_bend": pd.array([r["bend"] for r in rows], dtype="Int32"), + "text_height": pd.array([r["height"] for r in rows], dtype="Float64"), + "text_colour": pd.array([r["colour"] for r in rows], dtype="Int32"), + "text_font": pd.array([r["font"] for r in rows], dtype="string"), + "text_placement": pd.array([r["place"] for r in rows], dtype="Int32"), + }, + geometry=[Point(0, 0)] * len(rows), + crs="EPSG:2193", + ) + for field in CARTO_TEXT_STYLING_FIELDS: + gdf[field] = pd.NA + return gdf + + +def test_carto_text_styling_fills_a_matched_key_from_the_table(): + """A row whose derived key is in `carto_text_styling.csv` gets the table's values, the + decoded colour/style, and the constant font. Empty table cells stay null.""" + gdf = _carto_text_gdf([{"bend": 0, "height": 0.0012, "place": 1, "font": "ATTriumMou-Cond", "colour": 9}]) + row = carto_text_styling(gdf, _td([], "linz_carto_text"), 66).iloc[0] + + assert row["colour"] == "black" + assert row["style"] == "Narrow" + assert row["font"] == CARTO_TEXT_FONT + assert row["size"] == 5.0 + assert row["offset"] == -1.6 + assert row["placement"] == "AL" + assert row["charplace"] == "StretchCharacterSpacingToFit" + assert pd.isna(row["textanchor"]) + assert pd.isna(row["labelanchor"]) + assert pd.isna(row["chardistance"]) + + +def test_carto_text_styling_matches_a_point_scale_height_and_strips_textanchor(): + """`text_height` is matched to 4 dp, so the point-scale value 67.0 keys the table the same + way a metre-scale value does. `textanchor` comes back `left`, not the legacy `left ` - the + table's trailing space is stripped, so the `carto_textanchor` enum needs no `left ` member.""" + gdf = _carto_text_gdf([{"bend": 0, "height": 67.0, "place": 31, "font": "ATTriumMou-Cond", "colour": 9}]) + row = carto_text_styling(gdf, _td([], "linz_carto_text"), 66).iloc[0] + + assert row["style"] == "Narrow" + assert row["size"] == 5.5 + assert row["offset"] == -2.0 + assert row["textanchor"] == "left" + assert row["labelanchor"] == 0.8 + + +def test_carto_text_styling_decodes_colour_codes(): + """`text_colour` 5 and 6 decode to warm_red / process_blue; the map itself is the contract.""" + assert CARTO_TEXT_COLOUR == {9: "black", 5: "warm_red", 6: "process_blue"} + assert CARTO_TEXT_STYLE["ATTriumMou-CondItalic"] == "Narrow Italic" + assert CARTO_TEXT_STYLE["Courier Bold Oblique"] == "Regular" + + +def test_carto_text_styling_leaves_an_unmatched_key_null(): + """A key absent from the table (matched nothing in the legacy process either) keeps every + styling field null rather than inventing a value.""" + gdf = _carto_text_gdf([{"bend": 0, "height": 0.0014, "place": 1, "font": "ATTrium-Italic", "colour": 9}]) + row = carto_text_styling(gdf, _td([], "linz_carto_text"), 66).iloc[0] + + for field in CARTO_TEXT_STYLING_FIELDS: + assert pd.isna(row[field]), field + + +def test_carto_text_styling_odd_colour_code_stays_unstyled(): + """An unlisted `text_colour` decodes to the black fallback, but with no table row for its + full key the feature is left unstyled - reproducing the legacy blank.""" + gdf = _carto_text_gdf([{"bend": 1, "height": 15.0, "place": 1, "font": "ATTrium-Italic", "colour": 3348}]) + row = carto_text_styling(gdf, _td([], "linz_carto_text"), 66).iloc[0] + + for field in CARTO_TEXT_STYLING_FIELDS: + assert pd.isna(row[field]), field + + +def test_carto_text_styling_requires_its_key_columns(): + gdf = _carto_text_gdf([{"bend": 0, "height": 0.0012, "place": 1, "font": "ATTriumMou-Cond", "colour": 9}]) + with pytest.raises(ValueError, match="text_font"): + carto_text_styling(gdf.drop(columns="text_font"), _td([], "linz_carto_text"), 66) diff --git a/packages/schema/src/features/next/nztopo50_carto_text.tsp b/packages/schema/src/features/next/nztopo50_carto_text.tsp index fcaf4295..1b9f141b 100644 --- a/packages/schema/src/features/next/nztopo50_carto_text.tsp +++ b/packages/schema/src/features/next/nztopo50_carto_text.tsp @@ -35,6 +35,7 @@ model nztopo50_carto_text { labelanchor: float64 | null; charplace: carto_charplace | null; chardistance: float64 | null; + worddistance: float64 | null; ...TopographicMetadata; ...GeoParquet; } diff --git a/packages/schema/src/features/nztopo50_carto_text.tsp b/packages/schema/src/features/nztopo50_carto_text.tsp index 9a6e203c..1a10fe39 100644 --- a/packages/schema/src/features/nztopo50_carto_text.tsp +++ b/packages/schema/src/features/nztopo50_carto_text.tsp @@ -33,6 +33,7 @@ model nztopo50_carto_text { labelanchor: float64 | null; charplace: carto_charplace | null; chardistance: float64 | null; + worddistance: float64 | null; ...GeoParquet; } diff --git a/schema/next/nztopo50_carto_text.json b/schema/next/nztopo50_carto_text.json index c1620ec5..c23a9cc7 100644 --- a/schema/next/nztopo50_carto_text.json +++ b/schema/next/nztopo50_carto_text.json @@ -50,6 +50,7 @@ "labelanchor": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "charplace": { "anyOf": [{ "$ref": "#/$defs/carto_charplace" }, { "type": "null" }] }, "chardistance": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, + "worddistance": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "metadata": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "geometry": { "description": "GeoParquet 1.1 covering geometry struct.", "not": { "type": "null" } }, "bbox": { "$ref": "#/$defs/BBox", "description": "GeoParquet 1.1 covering bbox struct." } @@ -82,6 +83,7 @@ "labelanchor", "charplace", "chardistance", + "worddistance", "metadata", "geometry" ], diff --git a/schema/nztopo50_carto_text.json b/schema/nztopo50_carto_text.json index 0e00f2c7..d67709a5 100644 --- a/schema/nztopo50_carto_text.json +++ b/schema/nztopo50_carto_text.json @@ -48,6 +48,7 @@ "labelanchor": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "charplace": { "anyOf": [{ "$ref": "#/$defs/carto_charplace" }, { "type": "null" }] }, "chardistance": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, + "worddistance": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "geometry": { "description": "GeoParquet 1.1 covering geometry struct.", "not": { "type": "null" } }, "bbox": { "$ref": "#/$defs/BBox", "description": "GeoParquet 1.1 covering bbox struct." } }, @@ -77,6 +78,7 @@ "labelanchor", "charplace", "chardistance", + "worddistance", "geometry" ], "additionalProperties": false, From c5b71d3576355237198e5951a2c2239cc6718bb5 Mon Sep 17 00:00:00 2001 From: Wentao Kuang Date: Mon, 14 Sep 2026 16:07:08 +1200 Subject: [PATCH 03/11] Populate the example_point_id fixeup --- .../kart-import/config/carto_text_styling.csv | 1108 ++++++++--------- .../config/themes/nztopo50_carto_text.yml | 31 +- .../kart-import/src/kart_import/fixups.py | 111 ++ 3 files changed, 682 insertions(+), 568 deletions(-) diff --git a/packages/kart-import/config/carto_text_styling.csv b/packages/kart-import/config/carto_text_styling.csv index 9d5f271b..fba96ab7 100644 --- a/packages/kart-import/config/carto_text_styling.csv +++ b/packages/kart-import/config/carto_text_styling.csv @@ -1,554 +1,554 @@ -text_bend,text_height,text_placement,style,colour,size,offset,placement,textanchor,labelanchor,charplace,chardistance -0,0.0012,1,Narrow,black,5.0,-1.6,AL,,,StretchCharacterSpacingToFit, -0,0.0012,2,Italic,process_blue,5.0,,OL,,,StretchCharacterSpacingToFit, -0,0.0012,31,Narrow,black,5.0,-1.6,AL,,,StretchCharacterSpacingToFit, -0,0.0013,1,Narrow,black,5.0,-1.5,AL,,,StretchCharacterSpacingToFit, -0,0.0013,2,Italic,process_blue,5.0,,OL,,,StretchCharacterSpacingToFit, -0,0.0013,31,Italic,process_blue,5.0,-1.5,AL,,,StretchWordSpacingToFit, -0,0.0013,31,Narrow,black,5.0,-1.5,AL,,,StretchCharacterSpacingToFit, -0,0.0014,1,Italic,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit, -0,0.0014,1,Italic,process_blue,6.0,-2.3,AL,,,StretchCharacterSpacingToFit, -0,0.0014,1,Narrow,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit, -0,0.0014,1,Narrow Italic,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit, -0,0.0014,2,Italic,black,6.0,,OL,,,StretchWordSpacingToFit, -0,0.0014,2,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, -0,0.0014,2,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit, -0,0.0014,2,Narrow Italic,black,6.0,,OL,,,, -0,0.0014,3,Italic,black,6.0,-1.5,BL,,,StretchCharacterSpacingToFit, -0,0.0014,3,Italic,process_blue,6.0,-1.5,BL,,,StretchWordSpacingToFit, -0,0.0014,3,Narrow,black,6.0,-1.5,BL,,,StretchCharacterSpacingToFit, -0,0.0014,21,Narrow,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit, -0,0.0014,31,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, -0,0.0014,31,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, -0,0.0014,31,Narrow,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit, -0,0.0014,32,Italic,black,6.0,,OL,,,StretchWordSpacingToFit, -0,0.0014,32,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, -0,0.0014,32,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit, -0,0.0014,33,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, -0,0.0014,33,Narrow,black,6.0,-1.5,BL,,,StretchWordSpacingToFit, -0,0.0015,1,Narrow,black,6.0,-1.9,AL,,,StretchCharacterSpacingToFit, -0,0.0017,1,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -0,0.0017,1,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, -0,0.0017,1,Narrow,black,7.0,-2.4,AL,,,StretchCharacterSpacingToFit, -0,0.0017,1,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -0,0.0017,1,Regular,black,5.0,-1.8,AL,,,StretchWordSpacingToFit, -0,0.0017,2,Italic,black,7.0,,OL,,,StretchWordSpacingToFit, -0,0.0017,2,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit, -0,0.0017,2,Narrow,black,7.0,,OL,,,StretchCharacterSpacingToFit, -0,0.0017,2,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -0,0.0017,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, -0,0.0017,31,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -0,0.0017,31,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, -0,0.0017,31,Narrow,black,7.0,-2.4,AL,,,StretchCharacterSpacingToFit, -0,0.0017,31,Narrow Italic,black,7.0,-2.4,AL,,,StretchCharacterSpacingToFit, -0,0.0017,32,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit, -0,0.0017,32,Narrow Italic,black,7.0,,OL,,,StretchWordSpacingToFit, -0,0.0017,32,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, -0,0.0019,1,Italic,black,7.5,-2.3,AL,,,StretchWordSpacingToFit, -0,0.0019,1,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit, -0,0.0019,1,Narrow,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit, -0,0.0019,1,Narrow Bold,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, -0,0.0019,1,Narrow Italic,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit, -0,0.0019,1,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit, -0,0.0019,2,Italic,black,7.5,,OL,,,StretchWordSpacingToFit, -0,0.0019,2,Italic,process_blue,7.5,,OL,,,StretchWordSpacingToFit, -0,0.0019,2,Narrow,black,8.0,,OL,,,StretchCharacterSpacingToFit, -0,0.0019,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -0,0.0019,3,Narrow,black,8.0,-2.0,BL,,,StretchCharacterSpacingToFit, -0,0.0019,3,Regular,black,5.5,-1.5,BL,,,StretchWordSpacingToFit, -0,0.0019,31,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit, -0,0.0019,31,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit, -0,0.0019,31,Narrow,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit, -0,0.0019,31,Narrow Italic,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit, -0,0.0019,31,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit, -0,0.0019,32,Italic,process_blue,7.5,-2.0,BL,,,StretchWordSpacingToFit, -0,0.0019,32,Narrow,black,8.0,,OL,,,, -0,0.0019,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -0,0.0019,33,Narrow,black,8.0,-2.0,BL,right,0.5,, -0,0.0022,1,Italic,black,8.5,-2.4,AL,,,StretchWordSpacingToFit, -0,0.0022,1,Narrow,black,8.5,-3.0,AL,,,StretchWordSpacingToFit, -0,0.0022,1,Narrow Bold,black,8.5,-2.7,AL,,,StretchWordSpacingToFit, -0,0.0022,2,Italic,black,8.5,,OL,,,StretchWordSpacingToFit, -0,0.0022,2,Italic,process_blue,8.5,,OL,,,StretchWordSpacingToFit, -0,0.0022,31,Narrow,black,8.5,-3.0,AL,,,StretchWordSpacingToFit, -0,0.0022,31,Narrow Bold,black,8.5,-3.0,AL,,,StretchWordSpacingToFit, -0,0.0024,1,Italic,black,9.5,-2.7,AL,,,StretchCharacterSpacingToFit, -0,0.0024,1,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit, -0,0.0024,1,Narrow,black,9.5,-3.0,AL,,,StretchWordSpacingToFit, -0,0.0024,1,Narrow Bold,black,9.5,-3.0,AL,,,StretchWordSpacingToFit, -0,0.0024,1,Narrow Italic,black,9.5,-3.2,AL,,,StretchCharacterSpacingToFit, -0,0.0024,2,Italic,process_blue,9.5,,OL,,,CharactersAtVertices, -0,0.0024,31,Italic,black,9.5,-2.7,AL,,,StretchWordSpacingToFit, -0,0.0024,31,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit, -0,0.0026,1,Narrow Bold,black,10.5,-3.0,AL,,,StretchWordSpacingToFit, -0,0.0029,1,Italic,black,12.0,-4.0,AL,,,StretchCharacterSpacingToFit, -0,0.0029,1,Italic,process_blue,12.0,-4.0,AL,,,StretchCharacterSpacingToFit, -0,0.0029,1,Narrow Bold,black,12.0,-4.0,AL,,,StretchCharacterSpacingToFit, -0,0.0029,31,Narrow Bold,black,12.0,-4.0,AL,,,StretchCharacterSpacingToFit, -0,0.0031,1,Narrow Italic,black,12.5,-3.9,AL,,,StretchWordSpacingToFit, -0,0.0034,1,Narrow Bold,black,13.0,-4.0,AL,,,StretchCharacterSpacingToFit, -0,0.0043,1,Narrow Bold,black,17.0,-5.0,AL,,,StretchCharacterSpacingToFit, -0,4.1,1,Narrow,black,6.0,-2.0,AL,,,StretchCharacterSpacingToFit, -0,4.1,1,Narrow Italic,black,6.0,-2.0,AL,,,StretchCharacterSpacingToFit, -0,4.1,5,Narrow,black,6.0,,OL,,,StretchCharacterSpacingToFit, -0,4.1,51,Narrow,black,6.0,-2.0,AL,,,, -0,4.2,1,Narrow Italic,black,6.0,-2.0,AL,,,, -0,4.8,1,Regular,black,5.0,-1.6,AL,,,StretchWordSpacingToFit, -0,4.8,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, -0,4.8,32,Regular,black,5.0,,OL,left,0.45,StretchWordSpacingToFit, -0,5.0,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -0,5.0,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -0,5.5,1,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit, -0,5.5,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -0,5.5,3,Regular,black,5.5,-1.4,BL,,,StretchWordSpacingToFit, -0,5.5,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -0,67.0,1,Narrow,black,5.5,-2.0,AL,,,, -0,67.0,31,Narrow,black,5.5,-2.0,AL,left,0.8,, -0,68.5,1,Italic,process_blue,6.0,-2.0,AL,,,StretchCharacterSpacingToFit, -0,75.0,1,Italic,process_blue,6.0,-2.0,AL,left,0.5,, -0,75.0,1,Narrow Italic,black,6.0,-2.1,AL,,,StretchWordSpacingToFit, -0,75.0,1,Regular,black,6.0,-2.1,AL,,,StretchCharacterSpacingToFit, -0,75.0,3,Narrow Italic,black,6.0,-1.4,BL,,,StretchCharacterSpacingToFit, -0,75.0,21,Narrow Italic,black,6.0,-2.1,AL,,,StretchCharacterSpacingToFit, -0,75.0,31,Narrow Italic,black,6.0,-2.1,AL,,,StretchWordSpacingToFit, -0,75.0,33,Narrow Italic,black,6.0,-1.4,BL,,,, -1,0.0012,1,Italic,black,5.0,-1.6,AL,left,0.6,, -1,0.0012,5,Narrow Italic,black,5.0,,OL,,,, -1,0.0012,31,Italic,black,5.0,-1.6,AL,left,0.41,, -1,0.0012,31,Narrow Italic,black,5.0,-1.6,AL,left,0.6,, -1,0.0013,1,Italic,black,5.0,-1.5,AL,left,0.6,, -1,0.0013,1,Italic,process_blue,5.0,-1.5,AL,left,0.55,, -1,0.0013,1,Narrow,black,5.0,-1.5,AL,left,0.6,, -1,0.0013,2,Italic,process_blue,5.0,,OL,left,0.55,, -1,0.0013,7,Narrow,black,5.0,-1.5,AL,right,0.3,, -1,0.0013,8,Italic,black,5.0,,OL,right,0.35,, -1,0.0014,1,Italic,black,6.0,-2.3,AL,left,0.6,, -1,0.0014,1,Italic,process_blue,6.0,-2.3,AL,left,0.6,, -1,0.0014,1,Narrow,black,6.0,-2.3,AL,left,0.6,, -1,0.0014,1,Narrow Italic,black,6.0,-2.3,AL,left,0.6,, -1,0.0014,1,Regular,black,6.0,-2.3,AL,left,0.6,, -1,0.0014,2,Italic,black,6.0,,OL,left,0.6,, -1,0.0014,2,Italic,process_blue,6.0,,OL,left,0.6,, -1,0.0014,2,Narrow,black,6.0,,OL,left,0.6,, -1,0.0014,3,Italic,black,6.0,-1.5,BL,left,0.6,, -1,0.0014,3,Italic,process_blue,6.0,-1.5,BL,right,0.25,, -1,0.0014,3,Narrow,black,6.0,-1.5,BL,left,0.6,, -1,0.0014,4,Italic,black,6.0,-2.3,AL,,,, -1,0.0014,4,Italic,process_blue,6.0,-2.3,AL,left,0.6,, -1,0.0014,4,Narrow,black,6.0,-2.3,AL,,,, -1,0.0014,5,Italic,black,6.0,,OL,,,, -1,0.0014,5,Italic,process_blue,6.0,,OL,,,, -1,0.0014,5,Narrow,black,6.0,,OL,left,0.5,, -1,0.0014,5,Narrow Italic,black,6.0,,OL,left,0.5,, -1,0.0014,6,Narrow,black,6.0,-1.5,BL,left,0.5,, -1,0.0014,7,Italic,black,6.0,-2.3,AL,right,0.37,, -1,0.0014,7,Italic,process_blue,6.0,-2.3,AL,right,0.37,, -1,0.0014,7,Narrow,black,6.0,-2.3,AL,left,0.6,StretchWordSpacingToFit, -1,0.0014,8,Italic,black,6.0,,OL,right,0.37,, -1,0.0014,8,Italic,process_blue,6.0,,OL,right,0.37,, -1,0.0014,8,Narrow,black,6.0,,OL,left,0.35,, -1,0.0014,9,Italic,black,6.0,-1.5,BL,right,0.37,, -1,0.0014,9,Italic,process_blue,6.0,-1.5,BL,right,0.25,, -1,0.0014,9,Narrow,black,6.0,-1.5,BL,right,0.4,, -1,0.0014,21,Narrow,black,6.0,-2.3,AL,left,0.85,, -1,0.0014,31,Italic,black,6.0,-2.3,AL,right,0.6,, -1,0.0014,31,Narrow,black,6.0,-2.3,AL,left,0.6,, -1,0.0014,34,Narrow,black,6.0,-2.3,AL,left,0.4,, -1,0.0015,1,Narrow,black,6.0,-1.9,AL,left,0.68,, -1,0.0017,1,Italic,black,7.0,-2.4,AL,left,0.6,, -1,0.0017,1,Italic,process_blue,7.0,-2.4,AL,left,0.6,, -1,0.0017,1,Narrow,black,7.0,-2.4,AL,left,0.6,, -1,0.0017,1,Narrow,warm_red,7.0,-2.4,AL,left,0.6,, -1,0.0017,1,Narrow Italic,black,7.0,-2.4,AL,centre,0.6,, -1,0.0017,1,Regular,black,5.0,-1.8,AL,centre,0.6,, -1,0.0017,2,Italic,black,7.0,,OL,left,0.6,, -1,0.0017,2,Italic,process_blue,7.0,,OL,left,0.6,, -1,0.0017,2,Narrow,black,7.0,,OL,left,0.6,, -1,0.0017,2,Narrow Italic,black,7.0,,OL,left,0.6,, -1,0.0017,3,Narrow Italic,black,7.0,-1.8,BL,left,0.6,, -1,0.0017,4,Italic,black,7.0,-2.4,AL,right,0.47,, -1,0.0017,4,Narrow,black,7.0,-2.4,AL,,,, -1,0.0017,4,Narrow Italic,black,7.0,-2.4,AL,centre,0.5,, -1,0.0017,5,Italic,black,7.0,,OL,,,, -1,0.0017,5,Italic,process_blue,7.0,,OL,,,, -1,0.0017,5,Regular,black,5.0,,OL,centre,0.6,, -1,0.0017,6,Narrow Italic,black,7.0,-1.8,BL,right,0.47,, -1,0.0017,7,Italic,black,7.0,-2.4,AL,right,0.35,, -1,0.0017,7,Italic,process_blue,7.0,-2.4,AL,right,0.35,, -1,0.0017,7,Narrow Italic,black,7.0,-2.4,AL,right,0.4,, -1,0.0017,8,Narrow Italic,black,7.0,,OL,right,0.38,, -1,0.0017,9,Narrow Italic,black,7.0,-1.8,BL,right,0.38,, -1,0.0017,21,Narrow Italic,black,7.0,-2.4,AL,left,0.6,, -1,0.0017,32,Regular,black,5.0,,OL,centre,0.6,, -1,0.0019,1,Italic,black,7.5,-2.3,AL,left,0.65,, -1,0.0019,1,Italic,process_blue,7.5,-2.3,AL,left,0.67,, -1,0.0019,1,Narrow,black,8.0,-2.7,AL,left,0.65,, -1,0.0019,1,Narrow Italic,black,8.0,-2.7,AL,left,0.69,, -1,0.0019,1,Regular,black,5.5,-2.0,AL,left,0.65,, -1,0.0019,2,Italic,black,7.5,,OL,left,0.65,, -1,0.0019,2,Italic,process_blue,7.5,,OL,left,0.65,, -1,0.0019,2,Narrow,black,8.0,,OL,left,0.65,, -1,0.0019,2,Regular,black,5.5,,OL,left,0.62,, -1,0.0019,3,Narrow,black,8.0,-2.0,BL,right,0.62,, -1,0.0019,3,Narrow Italic,black,8.0,-1.8,BL,left,0.65,, -1,0.0019,3,Regular,black,5.5,-1.5,BL,left,0.65,, -1,0.0019,4,Narrow,black,8.0,-2.7,AL,,,, -1,0.0019,4,Narrow Italic,black,8.0,-2.7,AL,left,0.5,, -1,0.0019,5,Italic,black,7.5,,OL,,,, -1,0.0019,5,Narrow,black,8.0,,OL,left,0.65,, -1,0.0019,5,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -1,0.0019,7,Italic,black,7.5,-2.1,AL,right,0.35,, -1,0.0019,7,Narrow,black,8.0,-2.1,AL,right,0.35,, -1,0.0019,7,Narrow Italic,black,8.0,-2.7,AL,right,0.35,, -1,0.0019,8,Narrow,black,8.0,,OL,right,0.35,, -1,0.0019,9,Narrow,black,8.0,-2.0,BL,right,0.4,, -1,0.0019,21,Narrow,black,8.0,-2.7,AL,left,0.65,, -1,0.0019,31,Narrow,black,8.0,-2.7,AL,left,0.65,, -1,0.0019,32,Regular,black,5.5,,OL,left 0.62,,, -1,0.0019,34,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit, -1,0.0022,1,Italic,black,8.5,-2.4,AL,left,0.64,, -1,0.0022,1,Narrow,black,8.5,-3.0,AL,left,0.64,, -1,0.0022,1,Narrow,warm_red,8.5,-3.0,AL,left,0.64,, -1,0.0022,1,Narrow Bold,black,8.5,-2.7,AL,left,0.64,, -1,0.0024,1,Italic,black,9.5,-2.7,AL,left,0.69,, -1,0.0024,1,Italic,process_blue,9.5,-3.0,AL,left,0.64,, -1,0.0024,1,Narrow,black,9.5,-3.0,AL,left,0.64,, -1,0.0024,1,Narrow Bold,black,9.5,-3.0,AL,left,0.64,, -1,0.0024,4,Narrow,black,9.5,-3.0,AL,,,, -1,0.0024,4,Narrow Italic,black,9.5,-3.2,AL,,,, -1,0.0024,7,Italic,black,9.5,-2.7,AL,right,0.35,, -1,0.0029,1,Italic,black,12.0,-4.0,AL,left,0.68,, -1,0.0029,1,Narrow Bold,black,12.0,-4.0,AL,left,0.68,, -1,0.0029,2,Narrow Bold,black,12.0,,OL,left,0.68,, -1,0.0034,1,Narrow Bold,black,13.0,-4.0,AL,left,0.66,, -1,0.0038,1,Italic,black,15.0,-4.6,AL,left,0.66,, -1,0.0043,1,Narrow Bold,black,17.0,-5.0,AL,left,0.67,, -1,4.1,1,Narrow Italic,black,6.0,-2.0,AL,left,0.5,, -1,4.1,5,Narrow Italic,black,6.0,,OL,left,0.5,, -1,4.8,1,Regular,black,5.0,-1.6,AL,left,0.35,, -1,5.0,3,Regular,black,5.5,-1.0,BL,,,StretchWordSpacingToFit, -1,5.0,5,Regular,black,5.5,,OL,,,, -1,5.0,32,Regular,black,5.5,,OL,left,0.33,, -1,5.5,5,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -1,5.5,32,Regular,black,5.5,,OL,left,0.35,, -1,67.0,1,Narrow,black,5.5,-2.0,AL,left,0.8,, -1,67.0,7,Narrow,black,5.5,-2.0,AL,left,0.8,, -1,75.0,1,Italic,process_blue,6.0,-2.0,AL,left,0.65,, -1,75.0,1,Narrow Italic,black,6.0,-2.1,AL,left,0.65,, -1,75.0,1,Regular,black,6.0,-2.1,AL,left,0.65,, -1,75.0,3,Italic,process_blue,6.0,,BL,left,0.65,, -1,75.0,5,Italic,process_blue,6.0,,OL,,,, -1,75.0,6,Narrow Italic,black,6.0,-1.4,BL,,,, -1,75.0,6,Regular,black,6.0,-2.0,BL,,,, -1,75.0,7,Italic,process_blue,6.0,-2.0,AL,left,0.4,, -1,75.0,7,Narrow Italic,black,6.0,-2.1,AL,,,StretchWordSpacingToFit, -1,75.0,34,Narrow Italic,black,6.0,-2.1,AL,,,, -1,75.0,61,Narrow Italic,black,6.0,-2.1,AL,left,0.6,, -7,0.0012,1,Italic,black,5.0,-1.6,AL,,,StretchCharacterSpacingToFit, -7,0.0012,1,Italic,process_blue,5.0,-1.6,AL,,,StretchCharacterSpacingToFit, -7,0.0012,2,Italic,black,5.0,,OL,,,StretchCharacterSpacingToFit, -7,0.0012,2,Italic,process_blue,5.0,,OL,,,StretchCharacterSpacingToFit, -7,0.0013,1,Italic,process_blue,5.0,-1.5,AL,,,StretchWordSpacingToFit, -7,0.0013,2,Italic,black,5.0,,OL,,,StretchCharacterSpacingToFit, -7,0.0013,2,Italic,process_blue,5.0,,OL,,,StretchWordSpacingToFit, -7,0.0013,3,Italic,process_blue,5.0,-1.2,,,,StretchWordSpacingToFit, -7,0.0013,32,Italic,process_blue,5.0,,OL,,,StretchWordSpacingToFit, -7,0.0014,1,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, -7,0.0014,1,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, -7,0.0014,1,Italic,warm_red,6.0,-2.3,AL,,,StretchWordSpacingToFit, -7,0.0014,1,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, -7,0.0014,1,Narrow,warm_red,6.0,,OL,,,StretchWordSpacingToFit, -7,0.0014,2,Italic,black,6.0,,OL,,,StretchWordSpacingToFit, -7,0.0014,2,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, -7,0.0014,2,Italic,warm_red,6.0,,OL,,,StretchWordSpacingToFit, -7,0.0014,2,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit, -7,0.0014,2,Narrow Italic,black,6.0,,OL,,,, -7,0.0014,3,Italic,black,6.0,-1.5,BL,,,StretchWordSpacingToFit, -7,0.0014,3,Italic,process_blue,6.0,-1.5,BL,,,StretchWordSpacingToFit, -7,0.0014,3,Narrow,black,6.0,-1.5,BL,,,StretchWordSpacingToFit, -7,0.0014,12,Italic,black,6.0,,OL,,,StretchWordSpacingToFit, -7,0.0014,12,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, -7,0.0014,31,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, -7,0.0014,31,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, -7,0.0014,31,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, -7,0.0014,32,Italic,black,6.0,,OL,,,StretchWordSpacingToFit, -7,0.0014,32,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, -7,0.0014,32,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit, -7,0.0016,1,Italic,process_blue,6.0,-1.9,AL,,,StretchWordSpacingToFit, -7,0.0017,1,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -7,0.0017,1,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, -7,0.0017,1,Narrow,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -7,0.0017,1,Narrow,warm_red,7.0,-2.4,AL,,,StretchWordSpacingToFit, -7,0.0017,1,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -7,0.0017,1,Regular,black,5.0,-1.8,AL,,,StretchWordSpacingToFit, -7,0.0017,2,Italic,black,7.0,,OL,,,StretchWordSpacingToFit, -7,0.0017,2,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit, -7,0.0017,2,Narrow,black,7.0,,OL,,,StretchWordSpacingToFit, -7,0.0017,2,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -7,0.0017,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, -7,0.0017,3,Italic,process_blue,7.0,-1.8,BL,,,StretchWordSpacingToFit, -7,0.0017,3,Regular,black,5.0,-1.8,BL,,,StretchWordSpacingToFit, -7,0.0017,12,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit, -7,0.0017,31,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -7,0.0017,31,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, -7,0.0017,31,Narrow,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -7,0.0017,31,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -7,0.0017,32,Italic,black,7.0,,OL,,,StretchWordSpacingToFit, -7,0.0017,32,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit, -7,0.0017,32,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, -7,0.0017,42,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit, -7,0.0018,2,Italic,process_blue,8.0,,OL,,,StretchWordSpacingToFit, -7,0.0019,1,Italic,black,7.5,-2.3,AL,,,StretchWordSpacingToFit, -7,0.0019,1,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit, -7,0.0019,1,Narrow,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, -7,0.0019,1,Narrow Bold,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit, -7,0.0019,1,Narrow Italic,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, -7,0.0019,1,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit, -7,0.0019,2,Italic,black,7.5,,OL,,,StretchWordSpacingToFit, -7,0.0019,2,Italic,process_blue,7.5,,OL,,,StretchWordSpacingToFit, -7,0.0019,2,Narrow,black,8.0,,OL,,,StretchWordSpacingToFit, -7,0.0019,2,Narrow Italic,black,8.0,,OL,,,StretchWordSpacingToFit, -7,0.0019,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -7,0.0019,3,Italic,black,7.5,-0.9,BL,,,StretchWordSpacingToFit, -7,0.0019,3,Italic,process_blue,7.5,-2.0,BL,,,StretchWordSpacingToFit, -7,0.0019,3,Narrow,black,8.0,-2.0,BL,,,StretchWordSpacingToFit, -7,0.0019,3,Regular,black,5.5,-1.5,BL,,,StretchWordSpacingToFit, -7,0.0019,12,Italic,process_blue,7.5,,OL,,,StretchWordSpacingToFit, -7,0.0019,12,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -7,0.0019,31,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit, -7,0.0019,31,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit, -7,0.0019,31,Narrow,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit, -7,0.0019,31,Narrow Italic,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, -7,0.0019,32,Italic,black,7.5,,OL,,,StretchWordSpacingToFit, -7,0.0019,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -7,0.0019,33,Italic,process_blue,7.5,-2.0,BL,,,StretchWordSpacingToFit, -7,0.0022,1,Italic,black,8.5,-2.4,AL,,,StretchWordSpacingToFit, -7,0.0022,1,Italic,process_blue,8.5,-2.7,AL,,,StretchCharacterSpacingToFit, -7,0.0022,1,Narrow,black,8.5,-3.0,AL,,,StretchCharacterSpacingToFit, -7,0.0022,1,Narrow,process_blue,8.5,-2.7,AL,,,StretchCharacterSpacingToFit, -7,0.0022,1,Narrow Bold,black,8.5,-2.7,AL,,,StretchCharacterSpacingToFit, -7,0.0022,2,Italic,black,8.5,,OL,,,StretchWordSpacingToFit, -7,0.0022,2,Italic,process_blue,8.5,,OL,,,StretchWordSpacingToFit, -7,0.0024,1,Italic,black,9.5,-2.7,AL,,,StretchCharacterSpacingToFit, -7,0.0024,1,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit, -7,0.0024,1,Narrow Bold,black,9.5,-3.0,AL,,,StretchWordSpacingToFit, -7,0.0024,1,Narrow Italic,black,9.5,-3.2,AL,,,StretchWordSpacingToFit, -7,0.0024,2,Italic,black,9.5,,OL,,,StretchWordSpacingToFit, -7,0.0024,2,Italic,process_blue,9.5,,OL,,,StretchWordSpacingToFit, -7,0.0024,3,Italic,process_blue,9.5,-2.5,BL,,,StretchWordSpacingToFit, -7,0.0024,12,Italic,black,9.5,,OL,,,StretchWordSpacingToFit, -7,0.0024,31,Italic,black,9.5,-2.7,AL,,,StretchWordSpacingToFit, -7,0.0024,31,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit, -7,0.0024,31,Narrow Bold,black,9.5,-3.2,AL,,,StretchWordSpacingToFit, -7,0.0024,32,Italic,black,9.5,,OL,,,StretchWordSpacingToFit, -7,0.0026,1,Italic,process_blue,10.5,-3.0,AL,,,StretchWordSpacingToFit, -7,0.0029,1,Italic,black,12.0,-4.0,AL,,,StretchWordSpacingToFit, -7,0.0029,1,Italic,process_blue,12.0,-4.0,AL,,,StretchWordSpacingToFit, -7,0.0029,1,Narrow Bold,black,12.0,-4.0,AL,,,StretchCharacterSpacingToFit, -7,0.0029,2,Italic,black,12.0,,OL,,,StretchWordSpacingToFit, -7,0.0029,2,Italic,process_blue,12.0,,OL,,,StretchWordSpacingToFit, -7,0.0029,31,Italic,process_blue,12.0,-4.0,AL,,,StretchWordSpacingToFit, -7,0.0029,32,Italic,black,12.0,,OL,,,StretchWordSpacingToFit, -7,0.0029,32,Italic,process_blue,12.0,,OL,,,StretchWordSpacingToFit, -7,0.0034,1,Italic,process_blue,13.0,-4.0,AL,,,StretchWordSpacingToFit, -7,0.0034,1,Narrow Bold,black,13.0,-4.0,AL,,,StretchCharacterSpacingToFit, -7,0.0034,2,Italic,black,13.0,,OL,,,StretchWordSpacingToFit, -7,0.0034,2,Italic,process_blue,13.0,,OL,,,StretchWordSpacingToFit, -7,0.0034,31,Italic,process_blue,13.0,-4.0,AL,,,StretchWordSpacingToFit, -7,0.0034,32,Italic,process_blue,13.0,,OL,,,StretchWordSpacingToFit, -7,0.0038,1,Italic,black,15.0,-4.6,AL,,,StretchWordSpacingToFit, -7,0.0043,1,Narrow,warm_red,17.0,-5.0,AL,,,StretchWordSpacingToFit, -7,0.0051,1,Narrow,warm_red,21.0,-7.0,AL,,,StretchWordSpacingToFit, -7,0.0058,1,Narrow,warm_red,23.0,-7.0,AL,,,StretchWordSpacingToFit, -7,4.1,1,Narrow,black,6.0,-2.0,AL,,,StretchCharacterSpacingToFit, -7,4.5,32,Regular,black,5.0,,OL,,,StretchCharacterSpacingToFit, -7,4.8,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, -7,4.8,32,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, -7,5.0,1,Regular,black,5.5,-1.7,AL,,,StretchWordSpacingToFit, -7,5.0,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -7,5.0,3,Regular,black,5.5,-1.0,BL,,,StretchWordSpacingToFit, -7,5.0,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -7,5.5,1,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit, -7,5.5,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -7,5.5,3,Regular,black,5.5,-1.4,BL,,,StretchWordSpacingToFit, -7,5.5,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -7,75.0,1,Italic,process_blue,6.0,-2.0,AL,,,, -7,75.0,1,Narrow Italic,black,6.0,-2.1,AL,,,StretchWordSpacingToFit, -7,75.0,1,Regular,black,6.0,-2.1,AL,,,StretchCharacterSpacingToFit, -7,75.0,3,Narrow Italic,black,6.0,-1.4,BL,,,StretchCharacterSpacingToFit, -7,75.0,31,Narrow Italic,black,6.0,-2.1,AL,,,StretchWordSpacingToFit, -7,75.0,33,Narrow Italic,black,6.0,-1.4,BL,,,StretchCharacterSpacingToFit, -7,75.0,36,Narrow Italic,black,6.0,-1.4,BL,,,StretchCharacterSpacingToFit, -9,0.0012,2,Italic,process_blue,5.0,,OL,,,StretchCharacterSpacingToFit, -9,0.0012,31,Italic,black,5.0,-1.6,AL,,,, -9,0.0012,34,Italic,black,5.0,-1.6,AL,,,, -9,0.0012,34,Italic,process_blue,5.0,-1.6,AL,,,StretchWordSpacingToFit, -9,0.0013,1,Italic,black,5.0,-1.5,AL,,,StretchWordSpacingToFit, -9,0.0013,1,Narrow,black,5.0,-1.5,AL,,,StretchCharacterSpacingToFit, -9,0.0013,2,Italic,black,5.0,,OL,,,StretchWordSpacingToFit, -9,0.0013,31,Italic,black,5.0,-1.5,AL,left,0.5,, -9,0.0013,31,Italic,process_blue,5.0,-1.5,AL,,,StretchWordSpacingToFit, -9,0.0013,32,Italic,black,5.0,,OL,,,StretchWordSpacingToFit, -9,0.0013,34,Italic,black,5.0,-1.5,AL,,,StretchWordSpacingToFit, -9,0.0013,34,Italic,process_blue,5.0,-1.5,AL,,,StretchWordSpacingToFit, -9,0.0013,34,Narrow,black,5.0,-1.5,AL,,,StretchWordSpacingToFit, -9,0.0013,35,Italic,process_blue,5.0,,OL,,,StretchWordSpacingToFit, -9,0.0013,38,Italic,process_blue,5.0,,OL,,,StretchWordSpacingToFit, -9,0.0014,1,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0014,1,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0014,1,Narrow,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit, -9,0.0014,1,Narrow Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0014,2,Italic,black,6.0,,OL,,,StretchWordSpacingToFit, -9,0.0014,2,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, -9,0.0014,2,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit, -9,0.0014,3,Italic,process_blue,6.0,-1.5,BL,,,StretchWordSpacingToFit, -9,0.0014,3,Narrow,black,6.0,-1.5,BL,,,StretchWordSpacingToFit, -9,0.0014,4,Italic,black,6.0,-2.3,AL,,,, -9,0.0014,4,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0014,4,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0014,5,Italic,black,6.0,,OL,,,, -9,0.0014,5,Italic,process_blue,6.0,,OL,,,, -9,0.0014,5,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit, -9,0.0014,6,Italic,black,6.0,-1.5,BL,,,, -9,0.0014,6,Italic,process_blue,6.0,-1.5,BL,,,, -9,0.0014,6,Narrow,black,6.0,-1.5,BL,,,, -9,0.0014,6,Narrow,process_blue,6.0,-1.5,BL,,,, -9,0.0014,7,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0014,31,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0014,31,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0014,31,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0014,32,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, -9,0.0014,32,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit, -9,0.0014,33,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, -9,0.0014,33,Narrow,black,6.0,-1.5,BL,,,StretchWordSpacingToFit, -9,0.0014,34,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0014,34,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0014,34,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0014,34,Narrow,warm_red,6.0,-2.3,AL,,,, -9,0.0014,34,Narrow Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0014,35,Italic,black,6.0,,OL,,,StretchWordSpacingToFit, -9,0.0014,35,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, -9,0.0014,35,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit, -9,0.0014,36,Italic,black,6.0,-1.5,BL,,,, -9,0.0014,36,Italic,process_blue,6.0,-1.5,BL,,,, -9,0.0014,36,Narrow,black,6.0,-1.5,BL,,,StretchWordSpacingToFit, -9,0.0014,37,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0014,37,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0014,37,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0014,38,Italic,black,6.0,,OL,,,StretchWordSpacingToFit, -9,0.0014,38,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit, -9,0.0014,54,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0014,3534,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0017,1,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -9,0.0017,1,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, -9,0.0017,1,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -9,0.0017,1,Regular,black,5.0,-1.8,AL,,,StretchWordSpacingToFit, -9,0.0017,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, -9,0.0017,4,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -9,0.0017,4,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, -9,0.0017,4,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -9,0.0017,5,Italic,black,7.0,,OL,,,StretchWordSpacingToFit, -9,0.0017,5,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit, -9,0.0017,5,Regular,black,5.0,,OL,,,, -9,0.0017,6,Italic,process_blue,7.0,-1.8,BL,,,StretchWordSpacingToFit, -9,0.0017,31,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -9,0.0017,31,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, -9,0.0017,31,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -9,0.0017,31,Regular,black,5.0,-1.8,AL,,,StretchWordSpacingToFit, -9,0.0017,32,Narrow Italic,black,7.0,,OL,,,StretchWordSpacingToFit, -9,0.0017,32,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, -9,0.0017,34,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -9,0.0017,34,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, -9,0.0017,34,Narrow,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -9,0.0017,34,Narrow,warm_red,7.0,-2.4,AL,,,StretchWordSpacingToFit, -9,0.0017,34,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -9,0.0017,34,Regular,black,5.0,-2.4,AL,,,StretchWordSpacingToFit, -9,0.0017,35,Italic,black,7.0,,OL,,,StretchWordSpacingToFit, -9,0.0017,35,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit, -9,0.0017,35,Narrow Italic,black,7.0,,OL,,,StretchWordSpacingToFit, -9,0.0017,35,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, -9,0.0017,36,Italic,black,7.0,-1.8,BL,,,StretchWordSpacingToFit, -9,0.0017,36,Italic,process_blue,7.0,-1.8,BL,,,StretchWordSpacingToFit, -9,0.0017,36,Narrow Italic,black,7.0,-1.8,BL,,,, -9,0.0017,36,Regular,black,5.0,-1.8,BL,,,StretchWordSpacingToFit, -9,0.0017,37,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit, -9,0.0017,37,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit, -9,0.0017,38,Italic,black,7.0,,OL,,,StretchWordSpacingToFit, -9,0.0017,38,Narrow Italic,black,7.0,,OL,,,StretchWordSpacingToFit, -9,0.0017,38,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, -9,0.0018,35,Regular,black,8.0,,OL,,,StretchWordSpacingToFit, -9,0.0019,1,Italic,black,7.5,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0019,1,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0019,1,Narrow,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, -9,0.0019,1,Narrow Italic,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, -9,0.0019,1,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit, -9,0.0019,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -9,0.0019,4,Narrow,black,8.0,-2.7,AL,,,, -9,0.0019,5,Italic,black,7.5,,OL,,,StretchWordSpacingToFit, -9,0.0019,5,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0019,5,Narrow,black,8.0,,OL,left,0.65,, -9,0.0019,5,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -9,0.0019,31,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit, -9,0.0019,31,Narrow,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, -9,0.0019,31,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit, -9,0.0019,32,Italic,process_blue,7.5,-2.0,BL,,,StretchWordSpacingToFit, -9,0.0019,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -9,0.0019,34,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit, -9,0.0019,34,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit, -9,0.0019,34,Narrow,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, -9,0.0019,34,Narrow Bold,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, -9,0.0019,34,Narrow Italic,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, -9,0.0019,34,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit, -9,0.0019,35,Italic,black,7.5,,OL,,,StretchWordSpacingToFit, -9,0.0019,35,Italic,process_blue,7.5,,OL,,,StretchWordSpacingToFit, -9,0.0019,35,Narrow,black,8.0,,OL,,,StretchWordSpacingToFit, -9,0.0019,35,Narrow Bold,black,8.0,,OL,,,StretchWordSpacingToFit, -9,0.0019,35,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -9,0.0019,36,Narrow Bold,black,8.0,,OL,,,StretchWordSpacingToFit, -9,0.0019,37,Narrow Italic,black,8.0,-2.7,AL,,,StretchWordSpacingToFit, -9,0.0019,37,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit, -9,0.0019,54,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit, -9,0.0022,31,Narrow Bold,black,8.5,-3.0,AL,,,StretchWordSpacingToFit, -9,0.0022,34,Italic,process_blue,8.5,-3.0,AL,,,StretchWordSpacingToFit, -9,0.0022,34,Narrow,black,8.5,-3.0,AL,,,StretchWordSpacingToFit, -9,0.0022,34,Narrow Bold,black,8.5,-3.0,AL,,,StretchWordSpacingToFit, -9,0.0022,35,Narrow,black,8.5,,OL,,,StretchWordSpacingToFit, -9,0.0024,1,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit, -9,0.0024,4,Narrow,black,9.5,-3.0,AL,,,, -9,0.0024,4,Narrow Italic,black,9.5,-3.2,AL,,,StretchWordSpacingToFit, -9,0.0024,34,Italic,black,9.5,-2.7,AL,,,StretchWordSpacingToFit, -9,0.0024,34,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit, -9,0.0024,34,Narrow Italic,black,9.5,-3.2,AL,,,StretchWordSpacingToFit, -9,0.0024,35,Italic,black,9.5,,OL,,,StretchWordSpacingToFit, -9,0.0029,34,Italic,process_blue,12.0,-4.0,AL,,,StretchWordSpacingToFit, -9,0.0029,34,Narrow Bold,black,12.0,-4.0,AL,,,StretchCharacterSpacingToFit, -9,0.0029,35,Italic,black,12.0,,OL,,,StretchWordSpacingToFit, -9,0.0029,35,Italic,process_blue,12.0,,OL,,,StretchWordSpacingToFit, -9,0.0034,34,Italic,process_blue,13.0,-4.0,AL,,,StretchWordSpacingToFit, -9,4.5,1,Regular,black,5.0,-1.7,AL,,,StretchWordSpacingToFit, -9,4.5,32,Regular,black,5.0,,OL,,,StretchCharacterSpacingToFit, -9,4.5,34,Regular,black,5.0,-1.7,AL,,,StretchWordSpacingToFit, -9,4.8,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, -9,4.8,32,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, -9,4.8,34,Regular,black,5.0,-1.6,AL,,,StretchWordSpacingToFit, -9,4.8,35,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, -9,4.8,36,Regular,black,5.0,-1.5,BL,,,StretchWordSpacingToFit, -9,4.8,38,Regular,black,5.0,,OL,,,StretchWordSpacingToFit, -9,5.0,1,Regular,black,5.5,-1.7,AL,,,StretchWordSpacingToFit, -9,5.0,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -9,5.0,5,Regular,black,5.5,,OL,,,, -9,5.0,31,Regular,black,5.5,-1.7,AL,,,StretchWordSpacingToFit, -9,5.0,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -9,5.0,34,Regular,black,5.5,-1.7,AL,,,StretchWordSpacingToFit, -9,5.0,35,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -9,5.0,37,Regular,black,5.5,-1.7,AL,,,StretchWordSpacingToFit, -9,5.0,38,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -9,5.5,1,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit, -9,5.5,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -9,5.5,5,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -9,5.5,31,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit, -9,5.5,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -9,5.5,34,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit, -9,5.5,35,Regular,black,5.5,,OL,,,StretchWordSpacingToFit, -9,5.5,37,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit, -9,75.0,1,Narrow Italic,black,6.0,-2.1,AL,,,, +text_bend,text_height,text_placement,style,colour,size,offset,placement,textanchor,labelanchor,charplace,chardistance,worddistance +0,0.0012,1,Narrow,black,5.0,-1.6,AL,,,StretchCharacterSpacingToFit,, +0,0.0012,2,Italic,process_blue,5.0,,OL,,,StretchCharacterSpacingToFit,, +0,0.0012,31,Narrow,black,5.0,-1.6,AL,,,StretchCharacterSpacingToFit,, +0,0.0013,1,Narrow,black,5.0,-1.5,AL,,,StretchCharacterSpacingToFit,, +0,0.0013,2,Italic,process_blue,5.0,,OL,,,StretchCharacterSpacingToFit,, +0,0.0013,31,Italic,process_blue,5.0,-1.5,AL,,,StretchWordSpacingToFit,, +0,0.0013,31,Narrow,black,5.0,-1.5,AL,,,StretchCharacterSpacingToFit,, +0,0.0014,1,Italic,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit,, +0,0.0014,1,Italic,process_blue,6.0,-2.3,AL,,,StretchCharacterSpacingToFit,, +0,0.0014,1,Narrow,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit,, +0,0.0014,1,Narrow Italic,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit,, +0,0.0014,2,Italic,black,6.0,,OL,,,StretchWordSpacingToFit,, +0,0.0014,2,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit,, +0,0.0014,2,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit,, +0,0.0014,2,Narrow Italic,black,6.0,,OL,,,,, +0,0.0014,3,Italic,black,6.0,-1.5,BL,,,StretchCharacterSpacingToFit,, +0,0.0014,3,Italic,process_blue,6.0,-1.5,BL,,,StretchWordSpacingToFit,, +0,0.0014,3,Narrow,black,6.0,-1.5,BL,,,StretchCharacterSpacingToFit,, +0,0.0014,21,Narrow,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit,, +0,0.0014,31,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +0,0.0014,31,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +0,0.0014,31,Narrow,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit,, +0,0.0014,32,Italic,black,6.0,,OL,,,StretchWordSpacingToFit,, +0,0.0014,32,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit,, +0,0.0014,32,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit,, +0,0.0014,33,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit,, +0,0.0014,33,Narrow,black,6.0,-1.5,BL,,,StretchWordSpacingToFit,, +0,0.0015,1,Narrow,black,6.0,-1.9,AL,,,StretchCharacterSpacingToFit,, +0,0.0017,1,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +0,0.0017,1,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +0,0.0017,1,Narrow,black,7.0,-2.4,AL,,,StretchCharacterSpacingToFit,, +0,0.0017,1,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +0,0.0017,1,Regular,black,5.0,-1.8,AL,,,StretchWordSpacingToFit,, +0,0.0017,2,Italic,black,7.0,,OL,,,StretchWordSpacingToFit,, +0,0.0017,2,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit,, +0,0.0017,2,Narrow,black,7.0,,OL,,,StretchCharacterSpacingToFit,, +0,0.0017,2,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +0,0.0017,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit,, +0,0.0017,31,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +0,0.0017,31,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +0,0.0017,31,Narrow,black,7.0,-2.4,AL,,,StretchCharacterSpacingToFit,, +0,0.0017,31,Narrow Italic,black,7.0,-2.4,AL,,,StretchCharacterSpacingToFit,, +0,0.0017,32,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit,, +0,0.0017,32,Narrow Italic,black,7.0,,OL,,,StretchWordSpacingToFit,, +0,0.0017,32,Regular,black,5.0,,OL,,,StretchWordSpacingToFit,, +0,0.0019,1,Italic,black,7.5,-2.3,AL,,,StretchWordSpacingToFit,, +0,0.0019,1,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit,, +0,0.0019,1,Narrow,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit,, +0,0.0019,1,Narrow Bold,black,8.0,-2.7,AL,,,StretchWordSpacingToFit,, +0,0.0019,1,Narrow Italic,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit,, +0,0.0019,1,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit,, +0,0.0019,2,Italic,black,7.5,,OL,,,StretchWordSpacingToFit,, +0,0.0019,2,Italic,process_blue,7.5,,OL,,,StretchWordSpacingToFit,, +0,0.0019,2,Narrow,black,8.0,,OL,,,StretchCharacterSpacingToFit,, +0,0.0019,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +0,0.0019,3,Narrow,black,8.0,-2.0,BL,,,StretchCharacterSpacingToFit,, +0,0.0019,3,Regular,black,5.5,-1.5,BL,,,StretchWordSpacingToFit,, +0,0.0019,31,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit,, +0,0.0019,31,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit,, +0,0.0019,31,Narrow,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit,, +0,0.0019,31,Narrow Italic,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit,, +0,0.0019,31,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit,, +0,0.0019,32,Italic,process_blue,7.5,-2.0,BL,,,StretchWordSpacingToFit,, +0,0.0019,32,Narrow,black,8.0,,OL,,,,, +0,0.0019,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +0,0.0019,33,Narrow,black,8.0,-2.0,BL,right,0.5,,, +0,0.0022,1,Italic,black,8.5,-2.4,AL,,,StretchWordSpacingToFit,, +0,0.0022,1,Narrow,black,8.5,-3.0,AL,,,StretchWordSpacingToFit,, +0,0.0022,1,Narrow Bold,black,8.5,-2.7,AL,,,StretchWordSpacingToFit,, +0,0.0022,2,Italic,black,8.5,,OL,,,StretchWordSpacingToFit,, +0,0.0022,2,Italic,process_blue,8.5,,OL,,,StretchWordSpacingToFit,, +0,0.0022,31,Narrow,black,8.5,-3.0,AL,,,StretchWordSpacingToFit,, +0,0.0022,31,Narrow Bold,black,8.5,-3.0,AL,,,StretchWordSpacingToFit,, +0,0.0024,1,Italic,black,9.5,-2.7,AL,,,StretchCharacterSpacingToFit,, +0,0.0024,1,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit,, +0,0.0024,1,Narrow,black,9.5,-3.0,AL,,,StretchWordSpacingToFit,, +0,0.0024,1,Narrow Bold,black,9.5,-3.0,AL,,,StretchWordSpacingToFit,, +0,0.0024,1,Narrow Italic,black,9.5,-3.2,AL,,,StretchCharacterSpacingToFit,, +0,0.0024,2,Italic,process_blue,9.5,,OL,,,CharactersAtVertices,, +0,0.0024,31,Italic,black,9.5,-2.7,AL,,,StretchWordSpacingToFit,, +0,0.0024,31,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit,, +0,0.0026,1,Narrow Bold,black,10.5,-3.0,AL,,,StretchWordSpacingToFit,, +0,0.0029,1,Italic,black,12.0,-4.0,AL,,,StretchCharacterSpacingToFit,, +0,0.0029,1,Italic,process_blue,12.0,-4.0,AL,,,StretchCharacterSpacingToFit,, +0,0.0029,1,Narrow Bold,black,12.0,-4.0,AL,,,StretchCharacterSpacingToFit,, +0,0.0029,31,Narrow Bold,black,12.0,-4.0,AL,,,StretchCharacterSpacingToFit,, +0,0.0031,1,Narrow Italic,black,12.5,-3.9,AL,,,StretchWordSpacingToFit,, +0,0.0034,1,Narrow Bold,black,13.0,-4.0,AL,,,StretchCharacterSpacingToFit,, +0,0.0043,1,Narrow Bold,black,17.0,-5.0,AL,,,StretchCharacterSpacingToFit,, +0,4.1,1,Narrow,black,6.0,-2.0,AL,,,StretchCharacterSpacingToFit,, +0,4.1,1,Narrow Italic,black,6.0,-2.0,AL,,,StretchCharacterSpacingToFit,, +0,4.1,5,Narrow,black,6.0,,OL,,,StretchCharacterSpacingToFit,, +0,4.1,51,Narrow,black,6.0,-2.0,AL,,,,, +0,4.2,1,Narrow Italic,black,6.0,-2.0,AL,,,,, +0,4.8,1,Regular,black,5.0,-1.6,AL,,,StretchWordSpacingToFit,, +0,4.8,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit,, +0,4.8,32,Regular,black,5.0,,OL,left,0.45,StretchWordSpacingToFit,, +0,5.0,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +0,5.0,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +0,5.5,1,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit,, +0,5.5,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +0,5.5,3,Regular,black,5.5,-1.4,BL,,,StretchWordSpacingToFit,, +0,5.5,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +0,67.0,1,Narrow,black,5.5,-2.0,AL,,,,, +0,67.0,31,Narrow,black,5.5,-2.0,AL,left,0.8,,, +0,68.5,1,Italic,process_blue,6.0,-2.0,AL,,,StretchCharacterSpacingToFit,, +0,75.0,1,Italic,process_blue,6.0,-2.0,AL,left,0.5,,, +0,75.0,1,Narrow Italic,black,6.0,-2.1,AL,,,StretchWordSpacingToFit,, +0,75.0,1,Regular,black,6.0,-2.1,AL,,,StretchCharacterSpacingToFit,, +0,75.0,3,Narrow Italic,black,6.0,-1.4,BL,,,StretchCharacterSpacingToFit,, +0,75.0,21,Narrow Italic,black,6.0,-2.1,AL,,,StretchCharacterSpacingToFit,, +0,75.0,31,Narrow Italic,black,6.0,-2.1,AL,,,StretchWordSpacingToFit,, +0,75.0,33,Narrow Italic,black,6.0,-1.4,BL,,,,, +1,0.0012,1,Italic,black,5.0,-1.6,AL,left,0.6,,, +1,0.0012,5,Narrow Italic,black,5.0,,OL,,,,, +1,0.0012,31,Italic,black,5.0,-1.6,AL,left,0.41,,, +1,0.0012,31,Narrow Italic,black,5.0,-1.6,AL,left,0.6,,, +1,0.0013,1,Italic,black,5.0,-1.5,AL,left,0.6,,, +1,0.0013,1,Italic,process_blue,5.0,-1.5,AL,left,0.55,,, +1,0.0013,1,Narrow,black,5.0,-1.5,AL,left,0.6,,, +1,0.0013,2,Italic,process_blue,5.0,,OL,left,0.55,,, +1,0.0013,7,Narrow,black,5.0,-1.5,AL,right,0.3,,, +1,0.0013,8,Italic,black,5.0,,OL,right,0.35,,, +1,0.0014,1,Italic,black,6.0,-2.3,AL,left,0.6,,, +1,0.0014,1,Italic,process_blue,6.0,-2.3,AL,left,0.6,,, +1,0.0014,1,Narrow,black,6.0,-2.3,AL,left,0.6,,, +1,0.0014,1,Narrow Italic,black,6.0,-2.3,AL,left,0.6,,, +1,0.0014,1,Regular,black,6.0,-2.3,AL,left,0.6,,, +1,0.0014,2,Italic,black,6.0,,OL,left,0.6,,, +1,0.0014,2,Italic,process_blue,6.0,,OL,left,0.6,,, +1,0.0014,2,Narrow,black,6.0,,OL,left,0.6,,, +1,0.0014,3,Italic,black,6.0,-1.5,BL,left,0.6,,, +1,0.0014,3,Italic,process_blue,6.0,-1.5,BL,right,0.25,,, +1,0.0014,3,Narrow,black,6.0,-1.5,BL,left,0.6,,, +1,0.0014,4,Italic,black,6.0,-2.3,AL,,,,, +1,0.0014,4,Italic,process_blue,6.0,-2.3,AL,left,0.6,,, +1,0.0014,4,Narrow,black,6.0,-2.3,AL,,,,, +1,0.0014,5,Italic,black,6.0,,OL,,,,, +1,0.0014,5,Italic,process_blue,6.0,,OL,,,,, +1,0.0014,5,Narrow,black,6.0,,OL,left,0.5,,, +1,0.0014,5,Narrow Italic,black,6.0,,OL,left,0.5,,, +1,0.0014,6,Narrow,black,6.0,-1.5,BL,left,0.5,,, +1,0.0014,7,Italic,black,6.0,-2.3,AL,right,0.37,,, +1,0.0014,7,Italic,process_blue,6.0,-2.3,AL,right,0.37,,, +1,0.0014,7,Narrow,black,6.0,-2.3,AL,left,0.6,StretchWordSpacingToFit,, +1,0.0014,8,Italic,black,6.0,,OL,right,0.37,,, +1,0.0014,8,Italic,process_blue,6.0,,OL,right,0.37,,, +1,0.0014,8,Narrow,black,6.0,,OL,left,0.35,,, +1,0.0014,9,Italic,black,6.0,-1.5,BL,right,0.37,,, +1,0.0014,9,Italic,process_blue,6.0,-1.5,BL,right,0.25,,, +1,0.0014,9,Narrow,black,6.0,-1.5,BL,right,0.4,,, +1,0.0014,21,Narrow,black,6.0,-2.3,AL,left,0.85,,, +1,0.0014,31,Italic,black,6.0,-2.3,AL,right,0.6,,, +1,0.0014,31,Narrow,black,6.0,-2.3,AL,left,0.6,,, +1,0.0014,34,Narrow,black,6.0,-2.3,AL,left,0.4,,, +1,0.0015,1,Narrow,black,6.0,-1.9,AL,left,0.68,,, +1,0.0017,1,Italic,black,7.0,-2.4,AL,left,0.6,,, +1,0.0017,1,Italic,process_blue,7.0,-2.4,AL,left,0.6,,, +1,0.0017,1,Narrow,black,7.0,-2.4,AL,left,0.6,,, +1,0.0017,1,Narrow,warm_red,7.0,-2.4,AL,left,0.6,,, +1,0.0017,1,Narrow Italic,black,7.0,-2.4,AL,centre,0.6,,, +1,0.0017,1,Regular,black,5.0,-1.8,AL,centre,0.6,,, +1,0.0017,2,Italic,black,7.0,,OL,left,0.6,,, +1,0.0017,2,Italic,process_blue,7.0,,OL,left,0.6,,, +1,0.0017,2,Narrow,black,7.0,,OL,left,0.6,,, +1,0.0017,2,Narrow Italic,black,7.0,,OL,left,0.6,,, +1,0.0017,3,Narrow Italic,black,7.0,-1.8,BL,left,0.6,,, +1,0.0017,4,Italic,black,7.0,-2.4,AL,right,0.47,,, +1,0.0017,4,Narrow,black,7.0,-2.4,AL,,,,, +1,0.0017,4,Narrow Italic,black,7.0,-2.4,AL,centre,0.5,,, +1,0.0017,5,Italic,black,7.0,,OL,,,,, +1,0.0017,5,Italic,process_blue,7.0,,OL,,,,, +1,0.0017,5,Regular,black,5.0,,OL,centre,0.6,,, +1,0.0017,6,Narrow Italic,black,7.0,-1.8,BL,right,0.47,,, +1,0.0017,7,Italic,black,7.0,-2.4,AL,right,0.35,,, +1,0.0017,7,Italic,process_blue,7.0,-2.4,AL,right,0.35,,, +1,0.0017,7,Narrow Italic,black,7.0,-2.4,AL,right,0.4,,, +1,0.0017,8,Narrow Italic,black,7.0,,OL,right,0.38,,, +1,0.0017,9,Narrow Italic,black,7.0,-1.8,BL,right,0.38,,, +1,0.0017,21,Narrow Italic,black,7.0,-2.4,AL,left,0.6,,, +1,0.0017,32,Regular,black,5.0,,OL,centre,0.6,,, +1,0.0019,1,Italic,black,7.5,-2.3,AL,left,0.65,,, +1,0.0019,1,Italic,process_blue,7.5,-2.3,AL,left,0.67,,, +1,0.0019,1,Narrow,black,8.0,-2.7,AL,left,0.65,,, +1,0.0019,1,Narrow Italic,black,8.0,-2.7,AL,left,0.69,,, +1,0.0019,1,Regular,black,5.5,-2.0,AL,left,0.65,,, +1,0.0019,2,Italic,black,7.5,,OL,left,0.65,,, +1,0.0019,2,Italic,process_blue,7.5,,OL,left,0.65,,, +1,0.0019,2,Narrow,black,8.0,,OL,left,0.65,,, +1,0.0019,2,Regular,black,5.5,,OL,left,0.62,,, +1,0.0019,3,Narrow,black,8.0,-2.0,BL,right,0.62,,, +1,0.0019,3,Narrow Italic,black,8.0,-1.8,BL,left,0.65,,, +1,0.0019,3,Regular,black,5.5,-1.5,BL,left,0.65,,, +1,0.0019,4,Narrow,black,8.0,-2.7,AL,,,,, +1,0.0019,4,Narrow Italic,black,8.0,-2.7,AL,left,0.5,,, +1,0.0019,5,Italic,black,7.5,,OL,,,,, +1,0.0019,5,Narrow,black,8.0,,OL,left,0.65,,, +1,0.0019,5,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +1,0.0019,7,Italic,black,7.5,-2.1,AL,right,0.35,,, +1,0.0019,7,Narrow,black,8.0,-2.1,AL,right,0.35,,, +1,0.0019,7,Narrow Italic,black,8.0,-2.7,AL,right,0.35,,, +1,0.0019,8,Narrow,black,8.0,,OL,right,0.35,,, +1,0.0019,9,Narrow,black,8.0,-2.0,BL,right,0.4,,, +1,0.0019,21,Narrow,black,8.0,-2.7,AL,left,0.65,,, +1,0.0019,31,Narrow,black,8.0,-2.7,AL,left,0.65,,, +1,0.0019,32,Regular,black,5.5,,OL,left 0.62,,,, +1,0.0019,34,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit,, +1,0.0022,1,Italic,black,8.5,-2.4,AL,left,0.64,,, +1,0.0022,1,Narrow,black,8.5,-3.0,AL,left,0.64,,, +1,0.0022,1,Narrow,warm_red,8.5,-3.0,AL,left,0.64,,, +1,0.0022,1,Narrow Bold,black,8.5,-2.7,AL,left,0.64,,, +1,0.0024,1,Italic,black,9.5,-2.7,AL,left,0.69,,, +1,0.0024,1,Italic,process_blue,9.5,-3.0,AL,left,0.64,,, +1,0.0024,1,Narrow,black,9.5,-3.0,AL,left,0.64,,, +1,0.0024,1,Narrow Bold,black,9.5,-3.0,AL,left,0.64,,, +1,0.0024,4,Narrow,black,9.5,-3.0,AL,,,,, +1,0.0024,4,Narrow Italic,black,9.5,-3.2,AL,,,,, +1,0.0024,7,Italic,black,9.5,-2.7,AL,right,0.35,,, +1,0.0029,1,Italic,black,12.0,-4.0,AL,left,0.68,,, +1,0.0029,1,Narrow Bold,black,12.0,-4.0,AL,left,0.68,,, +1,0.0029,2,Narrow Bold,black,12.0,,OL,left,0.68,,, +1,0.0034,1,Narrow Bold,black,13.0,-4.0,AL,left,0.66,,, +1,0.0038,1,Italic,black,15.0,-4.6,AL,left,0.66,,, +1,0.0043,1,Narrow Bold,black,17.0,-5.0,AL,left,0.67,,, +1,4.1,1,Narrow Italic,black,6.0,-2.0,AL,left,0.5,,, +1,4.1,5,Narrow Italic,black,6.0,,OL,left,0.5,,, +1,4.8,1,Regular,black,5.0,-1.6,AL,left,0.35,,, +1,5.0,3,Regular,black,5.5,-1.0,BL,,,StretchWordSpacingToFit,, +1,5.0,5,Regular,black,5.5,,OL,,,,, +1,5.0,32,Regular,black,5.5,,OL,left,0.33,,, +1,5.5,5,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +1,5.5,32,Regular,black,5.5,,OL,left,0.35,,, +1,67.0,1,Narrow,black,5.5,-2.0,AL,left,0.8,,, +1,67.0,7,Narrow,black,5.5,-2.0,AL,left,0.8,,, +1,75.0,1,Italic,process_blue,6.0,-2.0,AL,left,0.65,,, +1,75.0,1,Narrow Italic,black,6.0,-2.1,AL,left,0.65,,, +1,75.0,1,Regular,black,6.0,-2.1,AL,left,0.65,,, +1,75.0,3,Italic,process_blue,6.0,,BL,left,0.65,,, +1,75.0,5,Italic,process_blue,6.0,,OL,,,,, +1,75.0,6,Narrow Italic,black,6.0,-1.4,BL,,,,, +1,75.0,6,Regular,black,6.0,-2.0,BL,,,,, +1,75.0,7,Italic,process_blue,6.0,-2.0,AL,left,0.4,,, +1,75.0,7,Narrow Italic,black,6.0,-2.1,AL,,,StretchWordSpacingToFit,, +1,75.0,34,Narrow Italic,black,6.0,-2.1,AL,,,,, +1,75.0,61,Narrow Italic,black,6.0,-2.1,AL,left,0.6,,, +7,0.0012,1,Italic,black,5.0,-1.6,AL,,,StretchCharacterSpacingToFit,, +7,0.0012,1,Italic,process_blue,5.0,-1.6,AL,,,StretchCharacterSpacingToFit,, +7,0.0012,2,Italic,black,5.0,,OL,,,StretchCharacterSpacingToFit,, +7,0.0012,2,Italic,process_blue,5.0,,OL,,,StretchCharacterSpacingToFit,, +7,0.0013,1,Italic,process_blue,5.0,-1.5,AL,,,StretchWordSpacingToFit,, +7,0.0013,2,Italic,black,5.0,,OL,,,StretchCharacterSpacingToFit,, +7,0.0013,2,Italic,process_blue,5.0,,OL,,,StretchWordSpacingToFit,, +7,0.0013,3,Italic,process_blue,5.0,-1.2,,,,StretchWordSpacingToFit,, +7,0.0013,32,Italic,process_blue,5.0,,OL,,,StretchWordSpacingToFit,, +7,0.0014,1,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +7,0.0014,1,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +7,0.0014,1,Italic,warm_red,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +7,0.0014,1,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +7,0.0014,1,Narrow,warm_red,6.0,,OL,,,StretchWordSpacingToFit,, +7,0.0014,2,Italic,black,6.0,,OL,,,StretchWordSpacingToFit,, +7,0.0014,2,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit,, +7,0.0014,2,Italic,warm_red,6.0,,OL,,,StretchWordSpacingToFit,, +7,0.0014,2,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit,, +7,0.0014,2,Narrow Italic,black,6.0,,OL,,,,, +7,0.0014,3,Italic,black,6.0,-1.5,BL,,,StretchWordSpacingToFit,, +7,0.0014,3,Italic,process_blue,6.0,-1.5,BL,,,StretchWordSpacingToFit,, +7,0.0014,3,Narrow,black,6.0,-1.5,BL,,,StretchWordSpacingToFit,, +7,0.0014,12,Italic,black,6.0,,OL,,,StretchWordSpacingToFit,, +7,0.0014,12,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit,, +7,0.0014,31,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +7,0.0014,31,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +7,0.0014,31,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +7,0.0014,32,Italic,black,6.0,,OL,,,StretchWordSpacingToFit,, +7,0.0014,32,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit,, +7,0.0014,32,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit,, +7,0.0016,1,Italic,process_blue,6.0,-1.9,AL,,,StretchWordSpacingToFit,, +7,0.0017,1,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +7,0.0017,1,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +7,0.0017,1,Narrow,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +7,0.0017,1,Narrow,warm_red,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +7,0.0017,1,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +7,0.0017,1,Regular,black,5.0,-1.8,AL,,,StretchWordSpacingToFit,, +7,0.0017,2,Italic,black,7.0,,OL,,,StretchWordSpacingToFit,, +7,0.0017,2,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit,, +7,0.0017,2,Narrow,black,7.0,,OL,,,StretchWordSpacingToFit,, +7,0.0017,2,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +7,0.0017,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit,, +7,0.0017,3,Italic,process_blue,7.0,-1.8,BL,,,StretchWordSpacingToFit,, +7,0.0017,3,Regular,black,5.0,-1.8,BL,,,StretchWordSpacingToFit,, +7,0.0017,12,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit,, +7,0.0017,31,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +7,0.0017,31,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +7,0.0017,31,Narrow,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +7,0.0017,31,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +7,0.0017,32,Italic,black,7.0,,OL,,,StretchWordSpacingToFit,, +7,0.0017,32,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit,, +7,0.0017,32,Regular,black,5.0,,OL,,,StretchWordSpacingToFit,, +7,0.0017,42,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit,, +7,0.0018,2,Italic,process_blue,8.0,,OL,,,StretchWordSpacingToFit,, +7,0.0019,1,Italic,black,7.5,-2.3,AL,,,StretchWordSpacingToFit,, +7,0.0019,1,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit,, +7,0.0019,1,Narrow,black,8.0,-2.7,AL,,,StretchWordSpacingToFit,, +7,0.0019,1,Narrow Bold,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit,, +7,0.0019,1,Narrow Italic,black,8.0,-2.7,AL,,,StretchWordSpacingToFit,, +7,0.0019,1,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit,, +7,0.0019,2,Italic,black,7.5,,OL,,,StretchWordSpacingToFit,, +7,0.0019,2,Italic,process_blue,7.5,,OL,,,StretchWordSpacingToFit,, +7,0.0019,2,Narrow,black,8.0,,OL,,,StretchWordSpacingToFit,, +7,0.0019,2,Narrow Italic,black,8.0,,OL,,,StretchWordSpacingToFit,, +7,0.0019,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +7,0.0019,3,Italic,black,7.5,-0.9,BL,,,StretchWordSpacingToFit,, +7,0.0019,3,Italic,process_blue,7.5,-2.0,BL,,,StretchWordSpacingToFit,, +7,0.0019,3,Narrow,black,8.0,-2.0,BL,,,StretchWordSpacingToFit,, +7,0.0019,3,Regular,black,5.5,-1.5,BL,,,StretchWordSpacingToFit,, +7,0.0019,12,Italic,process_blue,7.5,,OL,,,StretchWordSpacingToFit,, +7,0.0019,12,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +7,0.0019,31,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit,, +7,0.0019,31,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit,, +7,0.0019,31,Narrow,black,8.0,-2.7,AL,,,StretchCharacterSpacingToFit,, +7,0.0019,31,Narrow Italic,black,8.0,-2.7,AL,,,StretchWordSpacingToFit,, +7,0.0019,32,Italic,black,7.5,,OL,,,StretchWordSpacingToFit,, +7,0.0019,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +7,0.0019,33,Italic,process_blue,7.5,-2.0,BL,,,StretchWordSpacingToFit,, +7,0.0022,1,Italic,black,8.5,-2.4,AL,,,StretchWordSpacingToFit,, +7,0.0022,1,Italic,process_blue,8.5,-2.7,AL,,,StretchCharacterSpacingToFit,, +7,0.0022,1,Narrow,black,8.5,-3.0,AL,,,StretchCharacterSpacingToFit,, +7,0.0022,1,Narrow,process_blue,8.5,-2.7,AL,,,StretchCharacterSpacingToFit,, +7,0.0022,1,Narrow Bold,black,8.5,-2.7,AL,,,StretchCharacterSpacingToFit,, +7,0.0022,2,Italic,black,8.5,,OL,,,StretchWordSpacingToFit,, +7,0.0022,2,Italic,process_blue,8.5,,OL,,,StretchWordSpacingToFit,, +7,0.0024,1,Italic,black,9.5,-2.7,AL,,,StretchCharacterSpacingToFit,, +7,0.0024,1,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit,, +7,0.0024,1,Narrow Bold,black,9.5,-3.0,AL,,,StretchWordSpacingToFit,, +7,0.0024,1,Narrow Italic,black,9.5,-3.2,AL,,,StretchWordSpacingToFit,, +7,0.0024,2,Italic,black,9.5,,OL,,,StretchWordSpacingToFit,, +7,0.0024,2,Italic,process_blue,9.5,,OL,,,StretchWordSpacingToFit,, +7,0.0024,3,Italic,process_blue,9.5,-2.5,BL,,,StretchWordSpacingToFit,, +7,0.0024,12,Italic,black,9.5,,OL,,,StretchWordSpacingToFit,, +7,0.0024,31,Italic,black,9.5,-2.7,AL,,,StretchWordSpacingToFit,, +7,0.0024,31,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit,, +7,0.0024,31,Narrow Bold,black,9.5,-3.2,AL,,,StretchWordSpacingToFit,, +7,0.0024,32,Italic,black,9.5,,OL,,,StretchWordSpacingToFit,, +7,0.0026,1,Italic,process_blue,10.5,-3.0,AL,,,StretchWordSpacingToFit,, +7,0.0029,1,Italic,black,12.0,-4.0,AL,,,StretchWordSpacingToFit,, +7,0.0029,1,Italic,process_blue,12.0,-4.0,AL,,,StretchWordSpacingToFit,, +7,0.0029,1,Narrow Bold,black,12.0,-4.0,AL,,,StretchCharacterSpacingToFit,, +7,0.0029,2,Italic,black,12.0,,OL,,,StretchWordSpacingToFit,, +7,0.0029,2,Italic,process_blue,12.0,,OL,,,StretchWordSpacingToFit,, +7,0.0029,31,Italic,process_blue,12.0,-4.0,AL,,,StretchWordSpacingToFit,, +7,0.0029,32,Italic,black,12.0,,OL,,,StretchWordSpacingToFit,, +7,0.0029,32,Italic,process_blue,12.0,,OL,,,StretchWordSpacingToFit,, +7,0.0034,1,Italic,process_blue,13.0,-4.0,AL,,,StretchWordSpacingToFit,, +7,0.0034,1,Narrow Bold,black,13.0,-4.0,AL,,,StretchCharacterSpacingToFit,, +7,0.0034,2,Italic,black,13.0,,OL,,,StretchWordSpacingToFit,, +7,0.0034,2,Italic,process_blue,13.0,,OL,,,StretchWordSpacingToFit,, +7,0.0034,31,Italic,process_blue,13.0,-4.0,AL,,,StretchWordSpacingToFit,, +7,0.0034,32,Italic,process_blue,13.0,,OL,,,StretchWordSpacingToFit,, +7,0.0038,1,Italic,black,15.0,-4.6,AL,,,StretchWordSpacingToFit,, +7,0.0043,1,Narrow,warm_red,17.0,-5.0,AL,,,StretchWordSpacingToFit,, +7,0.0051,1,Narrow,warm_red,21.0,-7.0,AL,,,StretchWordSpacingToFit,, +7,0.0058,1,Narrow,warm_red,23.0,-7.0,AL,,,StretchWordSpacingToFit,, +7,4.1,1,Narrow,black,6.0,-2.0,AL,,,StretchCharacterSpacingToFit,, +7,4.5,32,Regular,black,5.0,,OL,,,StretchCharacterSpacingToFit,, +7,4.8,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit,, +7,4.8,32,Regular,black,5.0,,OL,,,StretchWordSpacingToFit,, +7,5.0,1,Regular,black,5.5,-1.7,AL,,,StretchWordSpacingToFit,, +7,5.0,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +7,5.0,3,Regular,black,5.5,-1.0,BL,,,StretchWordSpacingToFit,, +7,5.0,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +7,5.5,1,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit,, +7,5.5,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +7,5.5,3,Regular,black,5.5,-1.4,BL,,,StretchWordSpacingToFit,, +7,5.5,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +7,75.0,1,Italic,process_blue,6.0,-2.0,AL,,,,, +7,75.0,1,Narrow Italic,black,6.0,-2.1,AL,,,StretchWordSpacingToFit,, +7,75.0,1,Regular,black,6.0,-2.1,AL,,,StretchCharacterSpacingToFit,, +7,75.0,3,Narrow Italic,black,6.0,-1.4,BL,,,StretchCharacterSpacingToFit,, +7,75.0,31,Narrow Italic,black,6.0,-2.1,AL,,,StretchWordSpacingToFit,, +7,75.0,33,Narrow Italic,black,6.0,-1.4,BL,,,StretchCharacterSpacingToFit,, +7,75.0,36,Narrow Italic,black,6.0,-1.4,BL,,,StretchCharacterSpacingToFit,, +9,0.0012,2,Italic,process_blue,5.0,,OL,,,StretchCharacterSpacingToFit,, +9,0.0012,31,Italic,black,5.0,-1.6,AL,,,,, +9,0.0012,34,Italic,black,5.0,-1.6,AL,,,,, +9,0.0012,34,Italic,process_blue,5.0,-1.6,AL,,,StretchWordSpacingToFit,, +9,0.0013,1,Italic,black,5.0,-1.5,AL,,,StretchWordSpacingToFit,, +9,0.0013,1,Narrow,black,5.0,-1.5,AL,,,StretchCharacterSpacingToFit,, +9,0.0013,2,Italic,black,5.0,,OL,,,StretchWordSpacingToFit,, +9,0.0013,31,Italic,black,5.0,-1.5,AL,left,0.5,,, +9,0.0013,31,Italic,process_blue,5.0,-1.5,AL,,,StretchWordSpacingToFit,, +9,0.0013,32,Italic,black,5.0,,OL,,,StretchWordSpacingToFit,, +9,0.0013,34,Italic,black,5.0,-1.5,AL,,,StretchWordSpacingToFit,, +9,0.0013,34,Italic,process_blue,5.0,-1.5,AL,,,StretchWordSpacingToFit,, +9,0.0013,34,Narrow,black,5.0,-1.5,AL,,,StretchWordSpacingToFit,, +9,0.0013,35,Italic,process_blue,5.0,,OL,,,StretchWordSpacingToFit,, +9,0.0013,38,Italic,process_blue,5.0,,OL,,,StretchWordSpacingToFit,, +9,0.0014,1,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0014,1,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0014,1,Narrow,black,6.0,-2.3,AL,,,StretchCharacterSpacingToFit,, +9,0.0014,1,Narrow Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0014,2,Italic,black,6.0,,OL,,,StretchWordSpacingToFit,, +9,0.0014,2,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit,, +9,0.0014,2,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit,, +9,0.0014,3,Italic,process_blue,6.0,-1.5,BL,,,StretchWordSpacingToFit,, +9,0.0014,3,Narrow,black,6.0,-1.5,BL,,,StretchWordSpacingToFit,, +9,0.0014,4,Italic,black,6.0,-2.3,AL,,,,, +9,0.0014,4,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0014,4,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0014,5,Italic,black,6.0,,OL,,,,, +9,0.0014,5,Italic,process_blue,6.0,,OL,,,,, +9,0.0014,5,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit,, +9,0.0014,6,Italic,black,6.0,-1.5,BL,,,,, +9,0.0014,6,Italic,process_blue,6.0,-1.5,BL,,,,, +9,0.0014,6,Narrow,black,6.0,-1.5,BL,,,,, +9,0.0014,6,Narrow,process_blue,6.0,-1.5,BL,,,,, +9,0.0014,7,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0014,31,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0014,31,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0014,31,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0014,32,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit,, +9,0.0014,32,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit,, +9,0.0014,33,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit,, +9,0.0014,33,Narrow,black,6.0,-1.5,BL,,,StretchWordSpacingToFit,, +9,0.0014,34,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0014,34,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0014,34,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0014,34,Narrow,warm_red,6.0,-2.3,AL,,,,, +9,0.0014,34,Narrow Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0014,35,Italic,black,6.0,,OL,,,StretchWordSpacingToFit,, +9,0.0014,35,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit,, +9,0.0014,35,Narrow,black,6.0,,OL,,,StretchWordSpacingToFit,, +9,0.0014,36,Italic,black,6.0,-1.5,BL,,,,, +9,0.0014,36,Italic,process_blue,6.0,-1.5,BL,,,,, +9,0.0014,36,Narrow,black,6.0,-1.5,BL,,,StretchWordSpacingToFit,, +9,0.0014,37,Italic,black,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0014,37,Italic,process_blue,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0014,37,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0014,38,Italic,black,6.0,,OL,,,StretchWordSpacingToFit,, +9,0.0014,38,Italic,process_blue,6.0,,OL,,,StretchWordSpacingToFit,, +9,0.0014,54,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0014,3534,Narrow,black,6.0,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0017,1,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +9,0.0017,1,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +9,0.0017,1,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +9,0.0017,1,Regular,black,5.0,-1.8,AL,,,StretchWordSpacingToFit,, +9,0.0017,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit,, +9,0.0017,4,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +9,0.0017,4,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +9,0.0017,4,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +9,0.0017,5,Italic,black,7.0,,OL,,,StretchWordSpacingToFit,, +9,0.0017,5,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit,, +9,0.0017,5,Regular,black,5.0,,OL,,,,, +9,0.0017,6,Italic,process_blue,7.0,-1.8,BL,,,StretchWordSpacingToFit,, +9,0.0017,31,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +9,0.0017,31,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +9,0.0017,31,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +9,0.0017,31,Regular,black,5.0,-1.8,AL,,,StretchWordSpacingToFit,, +9,0.0017,32,Narrow Italic,black,7.0,,OL,,,StretchWordSpacingToFit,, +9,0.0017,32,Regular,black,5.0,,OL,,,StretchWordSpacingToFit,, +9,0.0017,34,Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +9,0.0017,34,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +9,0.0017,34,Narrow,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +9,0.0017,34,Narrow,warm_red,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +9,0.0017,34,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +9,0.0017,34,Regular,black,5.0,-2.4,AL,,,StretchWordSpacingToFit,, +9,0.0017,35,Italic,black,7.0,,OL,,,StretchWordSpacingToFit,, +9,0.0017,35,Italic,process_blue,7.0,,OL,,,StretchWordSpacingToFit,, +9,0.0017,35,Narrow Italic,black,7.0,,OL,,,StretchWordSpacingToFit,, +9,0.0017,35,Regular,black,5.0,,OL,,,StretchWordSpacingToFit,, +9,0.0017,36,Italic,black,7.0,-1.8,BL,,,StretchWordSpacingToFit,, +9,0.0017,36,Italic,process_blue,7.0,-1.8,BL,,,StretchWordSpacingToFit,, +9,0.0017,36,Narrow Italic,black,7.0,-1.8,BL,,,,, +9,0.0017,36,Regular,black,5.0,-1.8,BL,,,StretchWordSpacingToFit,, +9,0.0017,37,Italic,process_blue,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +9,0.0017,37,Narrow Italic,black,7.0,-2.4,AL,,,StretchWordSpacingToFit,, +9,0.0017,38,Italic,black,7.0,,OL,,,StretchWordSpacingToFit,, +9,0.0017,38,Narrow Italic,black,7.0,,OL,,,StretchWordSpacingToFit,, +9,0.0017,38,Regular,black,5.0,,OL,,,StretchWordSpacingToFit,, +9,0.0018,35,Regular,black,8.0,,OL,,,StretchWordSpacingToFit,, +9,0.0019,1,Italic,black,7.5,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0019,1,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0019,1,Narrow,black,8.0,-2.7,AL,,,StretchWordSpacingToFit,, +9,0.0019,1,Narrow Italic,black,8.0,-2.7,AL,,,StretchWordSpacingToFit,, +9,0.0019,1,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit,, +9,0.0019,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +9,0.0019,4,Narrow,black,8.0,-2.7,AL,,,,, +9,0.0019,5,Italic,black,7.5,,OL,,,StretchWordSpacingToFit,, +9,0.0019,5,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0019,5,Narrow,black,8.0,,OL,left,0.65,,, +9,0.0019,5,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +9,0.0019,31,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit,, +9,0.0019,31,Narrow,black,8.0,-2.7,AL,,,StretchWordSpacingToFit,, +9,0.0019,31,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit,, +9,0.0019,32,Italic,process_blue,7.5,-2.0,BL,,,StretchWordSpacingToFit,, +9,0.0019,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +9,0.0019,34,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit,, +9,0.0019,34,Italic,process_blue,7.5,-2.3,AL,,,StretchWordSpacingToFit,, +9,0.0019,34,Narrow,black,8.0,-2.7,AL,,,StretchWordSpacingToFit,, +9,0.0019,34,Narrow Bold,black,8.0,-2.7,AL,,,StretchWordSpacingToFit,, +9,0.0019,34,Narrow Italic,black,8.0,-2.7,AL,,,StretchWordSpacingToFit,, +9,0.0019,34,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit,, +9,0.0019,35,Italic,black,7.5,,OL,,,StretchWordSpacingToFit,, +9,0.0019,35,Italic,process_blue,7.5,,OL,,,StretchWordSpacingToFit,, +9,0.0019,35,Narrow,black,8.0,,OL,,,StretchWordSpacingToFit,, +9,0.0019,35,Narrow Bold,black,8.0,,OL,,,StretchWordSpacingToFit,, +9,0.0019,35,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +9,0.0019,36,Narrow Bold,black,8.0,,OL,,,StretchWordSpacingToFit,, +9,0.0019,37,Narrow Italic,black,8.0,-2.7,AL,,,StretchWordSpacingToFit,, +9,0.0019,37,Regular,black,5.5,-2.0,AL,,,StretchWordSpacingToFit,, +9,0.0019,54,Italic,black,7.5,-2.1,AL,,,StretchWordSpacingToFit,, +9,0.0022,31,Narrow Bold,black,8.5,-3.0,AL,,,StretchWordSpacingToFit,, +9,0.0022,34,Italic,process_blue,8.5,-3.0,AL,,,StretchWordSpacingToFit,, +9,0.0022,34,Narrow,black,8.5,-3.0,AL,,,StretchWordSpacingToFit,, +9,0.0022,34,Narrow Bold,black,8.5,-3.0,AL,,,StretchWordSpacingToFit,, +9,0.0022,35,Narrow,black,8.5,,OL,,,StretchWordSpacingToFit,, +9,0.0024,1,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit,, +9,0.0024,4,Narrow,black,9.5,-3.0,AL,,,,, +9,0.0024,4,Narrow Italic,black,9.5,-3.2,AL,,,StretchWordSpacingToFit,, +9,0.0024,34,Italic,black,9.5,-2.7,AL,,,StretchWordSpacingToFit,, +9,0.0024,34,Italic,process_blue,9.5,-3.0,AL,,,StretchWordSpacingToFit,, +9,0.0024,34,Narrow Italic,black,9.5,-3.2,AL,,,StretchWordSpacingToFit,, +9,0.0024,35,Italic,black,9.5,,OL,,,StretchWordSpacingToFit,, +9,0.0029,34,Italic,process_blue,12.0,-4.0,AL,,,StretchWordSpacingToFit,, +9,0.0029,34,Narrow Bold,black,12.0,-4.0,AL,,,StretchCharacterSpacingToFit,, +9,0.0029,35,Italic,black,12.0,,OL,,,StretchWordSpacingToFit,, +9,0.0029,35,Italic,process_blue,12.0,,OL,,,StretchWordSpacingToFit,, +9,0.0034,34,Italic,process_blue,13.0,-4.0,AL,,,StretchWordSpacingToFit,, +9,4.5,1,Regular,black,5.0,-1.7,AL,,,StretchWordSpacingToFit,, +9,4.5,32,Regular,black,5.0,,OL,,,StretchCharacterSpacingToFit,, +9,4.5,34,Regular,black,5.0,-1.7,AL,,,StretchWordSpacingToFit,, +9,4.8,2,Regular,black,5.0,,OL,,,StretchWordSpacingToFit,, +9,4.8,32,Regular,black,5.0,,OL,,,StretchWordSpacingToFit,, +9,4.8,34,Regular,black,5.0,-1.6,AL,,,StretchWordSpacingToFit,, +9,4.8,35,Regular,black,5.0,,OL,,,StretchWordSpacingToFit,, +9,4.8,36,Regular,black,5.0,-1.5,BL,,,StretchWordSpacingToFit,, +9,4.8,38,Regular,black,5.0,,OL,,,StretchWordSpacingToFit,, +9,5.0,1,Regular,black,5.5,-1.7,AL,,,StretchWordSpacingToFit,, +9,5.0,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +9,5.0,5,Regular,black,5.5,,OL,,,,, +9,5.0,31,Regular,black,5.5,-1.7,AL,,,StretchWordSpacingToFit,, +9,5.0,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +9,5.0,34,Regular,black,5.5,-1.7,AL,,,StretchWordSpacingToFit,, +9,5.0,35,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +9,5.0,37,Regular,black,5.5,-1.7,AL,,,StretchWordSpacingToFit,, +9,5.0,38,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +9,5.5,1,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit,, +9,5.5,2,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +9,5.5,5,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +9,5.5,31,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit,, +9,5.5,32,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +9,5.5,34,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit,, +9,5.5,35,Regular,black,5.5,,OL,,,StretchWordSpacingToFit,, +9,5.5,37,Regular,black,5.5,-1.8,AL,,,StretchWordSpacingToFit,, +9,75.0,1,Narrow Italic,black,6.0,-2.1,AL,,,,, diff --git a/packages/kart-import/config/themes/nztopo50_carto_text.yml b/packages/kart-import/config/themes/nztopo50_carto_text.yml index 0ebfd9b6..2726291c 100644 --- a/packages/kart-import/config/themes/nztopo50_carto_text.yml +++ b/packages/kart-import/config/themes/nztopo50_carto_text.yml @@ -7,9 +7,10 @@ datasets: url: git@github.com:linz/topographic-source-data dataset: linz_carto_text name: linz_carto_text + depends_on_themes: [geographic_name, trig_point] mapping: t50_fid: null - example_point_id: null + example_point_id: { fixup: true } full_text: $full_text text_bend: $text_bend text_char_spacing_distance: $t_c_s_d @@ -22,19 +23,21 @@ datasets: text_stretch_length: $txt_s_l text_string: $text_strin text_word_spacing_distance: $t_w_s_d - # Styling fields: seeded null, then filled by the carto_text_styling fixup below. - font: null - style: null - colour: null - size: null - placement: null - offset: null - textanchor: null - labelanchor: null - charplace: null - chardistance: null - worddistance: null + # Styling fields: filled by the carto_text_styling fixup below. + font: { fixup: true } + style: { fixup: true } + colour: { fixup: true } + size: { fixup: true } + placement: { fixup: true } + offset: { fixup: true } + textanchor: { fixup: true } + labelanchor: { fixup: true } + charplace: { fixup: true } + chardistance: { fixup: true } + worddistance: { fixup: true } metadata: null fixups: - # Reproduce the legacy CartoTextProcessor styling from the mapped text_* fields. + # Populate the styling fields based on the mapped fields from carto_text_styling.csv - fn: carto_text_styling + # Resolve example_point_id from geographic_name (by name) then trig_point (by code). + - fn: carto_text_example_point_id diff --git a/packages/kart-import/src/kart_import/fixups.py b/packages/kart-import/src/kart_import/fixups.py index c1a2cd3d..6a735b9f 100644 --- a/packages/kart-import/src/kart_import/fixups.py +++ b/packages/kart-import/src/kart_import/fixups.py @@ -45,6 +45,7 @@ if TYPE_CHECKING: import geopandas as gpd + import pandas as pd from kart_import.config import ThemeDataset @@ -704,9 +705,119 @@ def generate_dms_grid_features(gdf: gpd.GeoDataFrame, td: ThemeDataset, release_ ) +def _create_example_point_ids_lookup(release_id: int) -> gpd.GeoDataFrame: + """ + Create lookup table combining trig_point and geographic_name with spatial coordinates. + + Generates lookups.example_point_ids table with geometry transformed to EPSG:2193 (NZTM), + enabling proximity-based matching for ambiguous place names. Combines both trig_point + and geographic_name sources via UNION. + """ + import geopandas as gpd_ + import pandas as pd + + from .assets.transform import read_transform + from .config import TRANSFORM_SUFFIX, WORKING_TRANSFORM_DIR, get_theme_by_name + + def read_theme(theme_name: str): + release_dir = WORKING_TRANSFORM_DIR / f"release_{release_id}" + for dataset in get_theme_by_name(theme_name).datasets: + yield read_transform(release_dir / f"{dataset.name}{TRANSFORM_SUFFIX}") + + example_ids: set[str] = set() + for map_sheet in read_theme("nztopo50_map_sheet"): + example_ids.update(map_sheet["example_point_id"].dropna().astype("string")) + + named = [] + for theme_name, name_column in (("trig_point", "code"), ("geographic_name", "name")): + for frame in read_theme(theme_name): + point = frame[["id", name_column, "geometry"]].rename(columns={name_column: "name"}) + named.append(point.to_crs("EPSG:2193")) + + points = gpd_.GeoDataFrame(pd.concat(named, ignore_index=True), geometry="geometry", crs="EPSG:2193") + points["id"] = points["id"].astype("string") + points = points[points["id"].isin(example_ids)].dropna(subset=["name"]) + return points.reset_index(drop=True) + + +def _update_carto_text_via_name(labels: pd.Series, points: gpd.GeoDataFrame) -> pd.Series: + """ + Update carto_text example_point_id for unambiguous name matches. + + Only updates records where a place name in carto_text matches exactly one + example_id in the lookup table (name appears only once geographically). + """ + labels_per_name = labels.value_counts() + unique = points[points["name"].map(labels_per_name).eq(1)] + name_to_id = unique.drop_duplicates("name").set_index("name")["id"] + return labels.map(name_to_id).astype("string") + + +def _update_carto_text_via_geom( + labels: pd.Series, + label_geometry: gpd.GeoSeries, + points: gpd.GeoDataFrame, + linked: pd.Series, + max_distance: float = 200.0, +) -> pd.Series: + """ + Update carto_text example_point_id for ambiguous names using spatial proximity. + + For place names that map to multiple geographic points, selects the closest + example_id within 200m distance using PostGIS ST_DWithin and ST_Distance. + Uses DISTINCT ON to ensure one match per carto_text record. + """ + linked = linked.copy() + labels_per_name = labels.value_counts() + ambiguous = points[points["name"].map(labels_per_name).gt(1)] + if ambiguous.empty: + return linked + + for label_index in labels.index[labels.isin(set(ambiguous["name"]))]: + same_name = ambiguous[ambiguous["name"] == labels.loc[label_index]] + distances = same_name.geometry.distance(label_geometry.loc[label_index]) + nearest = distances.idxmin() + if distances.loc[nearest] <= max_distance: + linked.loc[label_index] = ambiguous.loc[nearest, "id"] + return linked + + +def carto_text_example_point_id(gdf: gpd.GeoDataFrame, td: ThemeDataset, release_id: int) -> gpd.GeoDataFrame: + """Mark the carto_text label that draws each map-sheet example point. + + A map sheet showcases one example point and needs the id of the label that renders it, so it + can find and highlight that label. + + Step 1: links a label whose text names exactly one example point; + Step 2: resolves a repeated name nearest example within 200 m. + Every other label is left null. + """ + points = _create_example_point_ids_lookup(release_id) + labels = gdf["full_text"] + label_geometry = gdf.geometry.to_crs("EPSG:2193") + + linked = _update_carto_text_via_name(labels, points) + linked = _update_carto_text_via_geom(labels, label_geometry, points, linked) + + gdf = gdf.copy() + gdf["example_point_id"] = linked.astype("string") + + logger.info( + "carto_text_example_point_id", + extra={ + "dataset": td.name, + "release": release_id, + "matched": int(linked.notna().sum()), + "total": len(gdf), + }, + ) + return gdf + + FIXUPS: dict[str, Fixup] = { "build_nzgb_metadata": build_nzgb_metadata, "build_road_metadata": build_road_metadata, + "carto_text_example_point_id": carto_text_example_point_id, "carto_text_styling": carto_text_styling, "drop_degenerate_fences": drop_degenerate_fences, "drop_degenerate_roads": drop_degenerate_roads, From dd8421d4dc98311b0473131731427a1fe5446410 Mon Sep 17 00:00:00 2001 From: Wentao Kuang Date: Mon, 14 Sep 2026 16:07:51 +1200 Subject: [PATCH 04/11] Add map_sheet theme for carto_text dependencies --- packages/kart-import/config/themes/nztopo50_carto_text.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kart-import/config/themes/nztopo50_carto_text.yml b/packages/kart-import/config/themes/nztopo50_carto_text.yml index 2726291c..598dfb2d 100644 --- a/packages/kart-import/config/themes/nztopo50_carto_text.yml +++ b/packages/kart-import/config/themes/nztopo50_carto_text.yml @@ -7,7 +7,7 @@ datasets: url: git@github.com:linz/topographic-source-data dataset: linz_carto_text name: linz_carto_text - depends_on_themes: [geographic_name, trig_point] + depends_on_themes: [nztopo50_map_sheet, geographic_name, trig_point] mapping: t50_fid: null example_point_id: { fixup: true } From bfb14c2160d408a622ae0ebe505452a8dd04cdc0 Mon Sep 17 00:00:00 2001 From: Wentao Kuang Date: Tue, 15 Sep 2026 13:44:26 +1200 Subject: [PATCH 05/11] Unit tests for example point id --- .../src/kart_import/fixups_test.py | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/packages/kart-import/src/kart_import/fixups_test.py b/packages/kart-import/src/kart_import/fixups_test.py index 9ce3227e..839f6216 100644 --- a/packages/kart-import/src/kart_import/fixups_test.py +++ b/packages/kart-import/src/kart_import/fixups_test.py @@ -774,3 +774,79 @@ def test_carto_text_styling_requires_its_key_columns(): gdf = _carto_text_gdf([{"bend": 0, "height": 0.0012, "place": 1, "font": "ATTriumMou-Cond", "colour": 9}]) with pytest.raises(ValueError, match="text_font"): carto_text_styling(gdf.drop(columns="text_font"), _td([], "linz_carto_text"), 66) + + +def test_carto_text_example_point_id_two_pass(monkeypatch): + """Only the map-sheet example points are candidates. Pass 1 links a name carried by exactly + one label - however far away; pass 2 sends a name shared by several labels to the nearest one + within 200 m, leaving > 200 m and unmatched labels null.""" + from . import config + from .assets import transform as transform_mod + + # The four features a map sheet nominates as its example point. + map_sheet = pd.DataFrame({"example_point_id": ["tp0", "gnW", "gn1153", "gn2413"]}) + trig_point = gpd.GeoDataFrame( + {"id": ["tp0"], "code": ["A1AA"]}, + geometry=[Point(1000, 2000)], + crs="EPSG:2193", + ) + geographic_name = gpd.GeoDataFrame( + {"id": ["gnW", "gn1153", "gn2413"], "name": ["Windsor Point", "1153", "2413"]}, + geometry=[Point(0, 0), Point(5000, 6000), Point(8000, 8000)], + crs="EPSG:2193", + ) + frames = {"ms": map_sheet, "tp": trig_point, "gn": geographic_name} + + def fake_theme(name): + dataset_name = {"nztopo50_map_sheet": "ms", "trig_point": "tp", "geographic_name": "gn"}[name] + return Theme( + name=name, + target_repo="r", + target_epsg="EPSG:2193", + datasets=[ + ThemeDataset.model_validate( + {"name": dataset_name, "source": "kart@data.koordinates.com:linz/x-topo-150k"} + ) + ], + ) + + monkeypatch.setattr(config, "get_theme_by_name", fake_theme) + monkeypatch.setattr(transform_mod, "read_transform", lambda path: frames[path.stem]) + + gdf = gpd.GeoDataFrame( + { + "full_text": [ + "A1AA", # one label, on the trig -> tp0 + "Windsor Point", # one label, 600 m away -> gnW (name match ignores distance) + "1153", # three labels -> nearest within 200 m wins + "1153", + "1153", + "2413", # two labels -> nearest is 250 m away -> null + "2413", + "Nowhere", # not an example point -> null + ] + }, + geometry=[ + Point(1050, 2000), + Point(600, 0), + Point(5010, 6000), # 10 m from gn1153 + Point(50000, 60000), + Point(60000, 60000), + Point(8250, 8000), # 250 m from gn2413 + Point(90000, 8000), + Point(0, 0), + ], + crs="EPSG:2193", + ) + + out = fixups.carto_text_example_point_id(gdf, _td([], "linz_carto_text"), 66) + result = list(out["example_point_id"]) + + assert result[0] == "tp0" + assert result[1] == "gnW" + assert result[2] == "gn1153" + assert pd.isna(result[3]) + assert pd.isna(result[4]) + assert pd.isna(result[5]) + assert pd.isna(result[6]) + assert pd.isna(result[7]) From f5b44b73435990cce817643040775f9e4d89aa5c Mon Sep 17 00:00:00 2001 From: Wentao Kuang Date: Tue, 15 Sep 2026 14:35:22 +1200 Subject: [PATCH 06/11] Fix format --- packages/kart-import/src/kart_import/fixups.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/kart-import/src/kart_import/fixups.py b/packages/kart-import/src/kart_import/fixups.py index 6a735b9f..b7feb3bd 100644 --- a/packages/kart-import/src/kart_import/fixups.py +++ b/packages/kart-import/src/kart_import/fixups.py @@ -708,7 +708,7 @@ def generate_dms_grid_features(gdf: gpd.GeoDataFrame, td: ThemeDataset, release_ def _create_example_point_ids_lookup(release_id: int) -> gpd.GeoDataFrame: """ Create lookup table combining trig_point and geographic_name with spatial coordinates. - + Generates lookups.example_point_ids table with geometry transformed to EPSG:2193 (NZTM), enabling proximity-based matching for ambiguous place names. Combines both trig_point and geographic_name sources via UNION. @@ -762,7 +762,7 @@ def _update_carto_text_via_geom( ) -> pd.Series: """ Update carto_text example_point_id for ambiguous names using spatial proximity. - + For place names that map to multiple geographic points, selects the closest example_id within 200m distance using PostGIS ST_DWithin and ST_Distance. Uses DISTINCT ON to ensure one match per carto_text record. @@ -786,10 +786,10 @@ def carto_text_example_point_id(gdf: gpd.GeoDataFrame, td: ThemeDataset, release """Mark the carto_text label that draws each map-sheet example point. A map sheet showcases one example point and needs the id of the label that renders it, so it - can find and highlight that label. + can find and highlight that label. Step 1: links a label whose text names exactly one example point; - Step 2: resolves a repeated name nearest example within 200 m. + Step 2: resolves a repeated name nearest example within 200 m. Every other label is left null. """ points = _create_example_point_ids_lookup(release_id) From 0f2a1f4fc0a666b6cd2c35d40211693d65503d19 Mon Sep 17 00:00:00 2001 From: Wentao Kuang Date: Tue, 15 Sep 2026 14:37:50 +1200 Subject: [PATCH 07/11] Fix format --- packages/kart-import/src/kart_import/fixups.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/kart-import/src/kart_import/fixups.py b/packages/kart-import/src/kart_import/fixups.py index b7feb3bd..f8329a26 100644 --- a/packages/kart-import/src/kart_import/fixups.py +++ b/packages/kart-import/src/kart_import/fixups.py @@ -497,6 +497,7 @@ def contour_number(gdf: gpd.GeoDataFrame, td: ThemeDataset, release_id: int) -> gdf["label"] = gdf["label"].astype("Int64").astype("string") return gdf + CARTO_TEXT_COLOUR: dict[int, str] = {9: "black", 5: "warm_red", 6: "process_blue"} CARTO_TEXT_COLOUR_DEFAULT = "black" """`text_colour` integer code -> `colour` enum. Legacy decoded any other code to black.""" @@ -513,6 +514,7 @@ def contour_number(gdf: gpd.GeoDataFrame, td: ThemeDataset, release_id: int) -> } """mapping from source `text_font` values to `style` enum.""" + def _carto_text_key(bend, height, place, style, colour): """Join the five key columns into one string, e.g. `0|67.0000|31|Narrow|black` for looks up mapping from csv file.""" import pandas as pd @@ -539,6 +541,7 @@ def as_text(series, decimals): _CARTO_TEXT_NUMBER_FIELDS = ("size", "offset", "labelanchor", "chardistance", "worddistance") _CARTO_TEXT_KEY_INPUTS = ("text_bend", "text_height", "text_placement", "text_colour", "text_font") + @cache def _carto_text_styling_table(): """Read the carto_text_styling table from the carto_text_styling.csv file and prepare it for lookups.""" @@ -558,8 +561,7 @@ def _carto_text_styling_table(): def carto_text_styling(gdf: gpd.GeoDataFrame, td: ThemeDataset, release_id: int) -> gpd.GeoDataFrame: - """Fill the cartographic styling fields for carto_text based on the mapping from carto_text_styling.csv. - """ + """Fill the cartographic styling fields for carto_text based on the mapping from carto_text_styling.csv.""" import pandas as pd missing = set(_CARTO_TEXT_KEY_INPUTS) - set(gdf.columns) From cad4d083ba5580f3ba170dc35059e2bed2782e7a Mon Sep 17 00:00:00 2001 From: Wentao Kuang Date: Thu, 17 Sep 2026 15:11:52 +1200 Subject: [PATCH 08/11] Refactory the logic for carto text example_point_id --- .../kart-import/src/kart_import/fixups.py | 87 ++++++++++--------- schema/nztopo50_carto_text.json | 2 + 2 files changed, 46 insertions(+), 43 deletions(-) diff --git a/packages/kart-import/src/kart_import/fixups.py b/packages/kart-import/src/kart_import/fixups.py index f8329a26..45932bb0 100644 --- a/packages/kart-import/src/kart_import/fixups.py +++ b/packages/kart-import/src/kart_import/fixups.py @@ -742,77 +742,78 @@ def read_theme(theme_name: str): return points.reset_index(drop=True) -def _update_carto_text_via_name(labels: pd.Series, points: gpd.GeoDataFrame) -> pd.Series: - """ - Update carto_text example_point_id for unambiguous name matches. - - Only updates records where a place name in carto_text matches exactly one - example_id in the lookup table (name appears only once geographically). - """ - labels_per_name = labels.value_counts() - unique = points[points["name"].map(labels_per_name).eq(1)] - name_to_id = unique.drop_duplicates("name").set_index("name")["id"] - return labels.map(name_to_id).astype("string") - - -def _update_carto_text_via_geom( +def _link_example_points( labels: pd.Series, label_geometry: gpd.GeoSeries, points: gpd.GeoDataFrame, - linked: pd.Series, max_distance: float = 200.0, -) -> pd.Series: - """ - Update carto_text example_point_id for ambiguous names using spatial proximity. +) -> tuple[list[str | None], list[dict]]: + """Link each label to its nearest example point of the same name. - For place names that map to multiple geographic points, selects the closest - example_id within 200m distance using PostGIS ST_DWithin and ST_Distance. - Uses DISTINCT ON to ensure one match per carto_text record. + Returns the linked point id per label (None if unlinked), and a list of match dictionaries. """ - linked = linked.copy() labels_per_name = labels.value_counts() - ambiguous = points[points["name"].map(labels_per_name).gt(1)] - if ambiguous.empty: - return linked - - for label_index in labels.index[labels.isin(set(ambiguous["name"]))]: - same_name = ambiguous[ambiguous["name"] == labels.loc[label_index]] - distances = same_name.geometry.distance(label_geometry.loc[label_index]) + points_by_name = dict(tuple(points.groupby("name"))) + + linked: list[str | None] = [] + matches: list[dict] = [] + for index, (name, label_geom) in enumerate(zip(labels, label_geometry, strict=True)): + candidates = points_by_name.get(name) + if candidates is None: + linked.append(None) + continue + + # Distance from this label to every example point sharing its name + distances = candidates.distance(label_geom) nearest = distances.idxmin() - if distances.loc[nearest] <= max_distance: - linked.loc[label_index] = ambiguous.loc[nearest, "id"] - return linked + distance = float(distances[nearest]) + + # keep the link if only one match, or the nearest is within the max distance + keep = labels_per_name[name] == 1 or distance <= max_distance + linked.append(candidates.at[nearest, "id"] if keep else None) + + matches.append( + { + "label_index": index, + "name": name, + "labels_with_name": int(labels_per_name[name]), + "candidate_points": len(candidates), + "nearest_id": candidates.at[nearest, "id"], + "distance_m": round(distance, 1), + "linked": keep, + } + ) + return linked, matches def carto_text_example_point_id(gdf: gpd.GeoDataFrame, td: ThemeDataset, release_id: int) -> gpd.GeoDataFrame: - """Mark the carto_text label that draws each map-sheet example point. + """Set `example_point_id` on each carto_text label to the example point it renders. - A map sheet showcases one example point and needs the id of the label that renders it, so it - can find and highlight that label. - - Step 1: links a label whose text names exactly one example point; - Step 2: resolves a repeated name nearest example within 200 m. - Every other label is left null. + A map sheet highlights one example point by the id of the label drawing it. A label naming a + unique example point links at any distance; a shared name links to the nearest within 200 m. """ + import pandas as pd + points = _create_example_point_ids_lookup(release_id) labels = gdf["full_text"] label_geometry = gdf.geometry.to_crs("EPSG:2193") - linked = _update_carto_text_via_name(labels, points) - linked = _update_carto_text_via_geom(labels, label_geometry, points, linked) + linked, matches = _link_example_points(labels, label_geometry, points) gdf = gdf.copy() - gdf["example_point_id"] = linked.astype("string") + gdf["example_point_id"] = pd.Series(linked, index=gdf.index, dtype="string") logger.info( "carto_text_example_point_id", extra={ "dataset": td.name, "release": release_id, - "matched": int(linked.notna().sum()), + "matched": sum(point_id is not None for point_id in linked), "total": len(gdf), }, ) + # Every name match and the distance behind its link/reject, for debugging the output. + logger.debug("carto_text_example_point_matches", extra={"dataset": td.name, "matches": matches}) return gdf diff --git a/schema/nztopo50_carto_text.json b/schema/nztopo50_carto_text.json index d67709a5..21efb8ca 100644 --- a/schema/nztopo50_carto_text.json +++ b/schema/nztopo50_carto_text.json @@ -49,6 +49,7 @@ "charplace": { "anyOf": [{ "$ref": "#/$defs/carto_charplace" }, { "type": "null" }] }, "chardistance": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "worddistance": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, + "metadata": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "geometry": { "description": "GeoParquet 1.1 covering geometry struct.", "not": { "type": "null" } }, "bbox": { "$ref": "#/$defs/BBox", "description": "GeoParquet 1.1 covering bbox struct." } }, @@ -79,6 +80,7 @@ "charplace", "chardistance", "worddistance", + "metadata", "geometry" ], "additionalProperties": false, From 2a69a6ba10054ad7eb75973f556e6fc8f154cb94 Mon Sep 17 00:00:00 2001 From: Wentao Kuang Date: Fri, 18 Sep 2026 08:52:16 +1200 Subject: [PATCH 09/11] fix format --- packages/kart-import/src/kart_import/fixups.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/kart-import/src/kart_import/fixups.py b/packages/kart-import/src/kart_import/fixups.py index 45932bb0..e4abae2a 100644 --- a/packages/kart-import/src/kart_import/fixups.py +++ b/packages/kart-import/src/kart_import/fixups.py @@ -753,13 +753,12 @@ def _link_example_points( Returns the linked point id per label (None if unlinked), and a list of match dictionaries. """ labels_per_name = labels.value_counts() - points_by_name = dict(tuple(points.groupby("name"))) linked: list[str | None] = [] matches: list[dict] = [] for index, (name, label_geom) in enumerate(zip(labels, label_geometry, strict=True)): - candidates = points_by_name.get(name) - if candidates is None: + candidates = points[points["name"] == name] + if candidates.empty: linked.append(None) continue @@ -767,10 +766,11 @@ def _link_example_points( distances = candidates.distance(label_geom) nearest = distances.idxmin() distance = float(distances[nearest]) + nearest_id = str(candidates.at[nearest, "id"]) # keep the link if only one match, or the nearest is within the max distance keep = labels_per_name[name] == 1 or distance <= max_distance - linked.append(candidates.at[nearest, "id"] if keep else None) + linked.append(nearest_id if keep else None) matches.append( { @@ -778,7 +778,7 @@ def _link_example_points( "name": name, "labels_with_name": int(labels_per_name[name]), "candidate_points": len(candidates), - "nearest_id": candidates.at[nearest, "id"], + "nearest_id": nearest_id, "distance_m": round(distance, 1), "linked": keep, } From bad1866d6253a73b6187036d6129c41837a67b87 Mon Sep 17 00:00:00 2001 From: Wentao Kuang Date: Fri, 18 Sep 2026 08:59:32 +1200 Subject: [PATCH 10/11] Add missing metadata in schema --- packages/schema/src/features/nztopo50_carto_text.tsp | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/schema/src/features/nztopo50_carto_text.tsp b/packages/schema/src/features/nztopo50_carto_text.tsp index 1a10fe39..9c99e8e2 100644 --- a/packages/schema/src/features/nztopo50_carto_text.tsp +++ b/packages/schema/src/features/nztopo50_carto_text.tsp @@ -34,6 +34,7 @@ model nztopo50_carto_text { charplace: carto_charplace | null; chardistance: float64 | null; worddistance: float64 | null; + ...TopographicMetadata; ...GeoParquet; } From caccdbbe787aaade59c5dd984b08a684eb3b6d76 Mon Sep 17 00:00:00 2001 From: Wentao Kuang Date: Mon, 21 Sep 2026 09:57:20 +1200 Subject: [PATCH 11/11] Regroup the carto_text and grid fixups together --- .../kart-import/src/kart_import/fixups.py | 220 +++++++++--------- 1 file changed, 110 insertions(+), 110 deletions(-) diff --git a/packages/kart-import/src/kart_import/fixups.py b/packages/kart-import/src/kart_import/fixups.py index e4abae2a..03031871 100644 --- a/packages/kart-import/src/kart_import/fixups.py +++ b/packages/kart-import/src/kart_import/fixups.py @@ -591,6 +591,116 @@ def carto_text_styling(gdf: gpd.GeoDataFrame, td: ThemeDataset, release_id: int) return gdf +def _create_example_point_ids_lookup(release_id: int) -> gpd.GeoDataFrame: + """ + Create lookup table combining trig_point and geographic_name with spatial coordinates. + + Generates lookups.example_point_ids table with geometry transformed to EPSG:2193 (NZTM), + enabling proximity-based matching for ambiguous place names. Combines both trig_point + and geographic_name sources via UNION. + """ + import geopandas as gpd_ + import pandas as pd + + from .assets.transform import read_transform + from .config import TRANSFORM_SUFFIX, WORKING_TRANSFORM_DIR, get_theme_by_name + + def read_theme(theme_name: str): + release_dir = WORKING_TRANSFORM_DIR / f"release_{release_id}" + for dataset in get_theme_by_name(theme_name).datasets: + yield read_transform(release_dir / f"{dataset.name}{TRANSFORM_SUFFIX}") + + example_ids: set[str] = set() + for map_sheet in read_theme("nztopo50_map_sheet"): + example_ids.update(map_sheet["example_point_id"].dropna().astype("string")) + + named = [] + for theme_name, name_column in (("trig_point", "code"), ("geographic_name", "name")): + for frame in read_theme(theme_name): + point = frame[["id", name_column, "geometry"]].rename(columns={name_column: "name"}) + named.append(point.to_crs("EPSG:2193")) + + points = gpd_.GeoDataFrame(pd.concat(named, ignore_index=True), geometry="geometry", crs="EPSG:2193") + points["id"] = points["id"].astype("string") + points = points[points["id"].isin(example_ids)].dropna(subset=["name"]) + return points.reset_index(drop=True) + + +def _link_example_points( + labels: pd.Series, + label_geometry: gpd.GeoSeries, + points: gpd.GeoDataFrame, + max_distance: float = 200.0, +) -> tuple[list[str | None], list[dict]]: + """Link each label to its nearest example point of the same name. + + Returns the linked point id per label (None if unlinked), and a list of match dictionaries. + """ + labels_per_name = labels.value_counts() + + linked: list[str | None] = [] + matches: list[dict] = [] + for index, (name, label_geom) in enumerate(zip(labels, label_geometry, strict=True)): + candidates = points[points["name"] == name] + if candidates.empty: + linked.append(None) + continue + + # Distance from this label to every example point sharing its name + distances = candidates.distance(label_geom) + nearest = distances.idxmin() + distance = float(distances[nearest]) + nearest_id = str(candidates.at[nearest, "id"]) + + # keep the link if only one match, or the nearest is within the max distance + keep = labels_per_name[name] == 1 or distance <= max_distance + linked.append(nearest_id if keep else None) + + matches.append( + { + "label_index": index, + "name": name, + "labels_with_name": int(labels_per_name[name]), + "candidate_points": len(candidates), + "nearest_id": nearest_id, + "distance_m": round(distance, 1), + "linked": keep, + } + ) + return linked, matches + + +def carto_text_example_point_id(gdf: gpd.GeoDataFrame, td: ThemeDataset, release_id: int) -> gpd.GeoDataFrame: + """Set `example_point_id` on each carto_text label to the example point it renders. + + A map sheet highlights one example point by the id of the label drawing it. A label naming a + unique example point links at any distance; a shared name links to the nearest within 200 m. + """ + import pandas as pd + + points = _create_example_point_ids_lookup(release_id) + labels = gdf["full_text"] + label_geometry = gdf.geometry.to_crs("EPSG:2193") + + linked, matches = _link_example_points(labels, label_geometry, points) + + gdf = gdf.copy() + gdf["example_point_id"] = pd.Series(linked, index=gdf.index, dtype="string") + + logger.info( + "carto_text_example_point_id", + extra={ + "dataset": td.name, + "release": release_id, + "matched": sum(point_id is not None for point_id in linked), + "total": len(gdf), + }, + ) + # Every name match and the distance behind its link/reject, for debugging the output. + logger.debug("carto_text_example_point_matches", extra={"dataset": td.name, "matches": matches}) + return gdf + + def _grid_values(low: float, high: float, interval: float) -> list[float]: """Grid line positions covering ``low``..``high``, snapped outward to whole intervals.""" import math @@ -707,116 +817,6 @@ def generate_dms_grid_features(gdf: gpd.GeoDataFrame, td: ThemeDataset, release_ ) -def _create_example_point_ids_lookup(release_id: int) -> gpd.GeoDataFrame: - """ - Create lookup table combining trig_point and geographic_name with spatial coordinates. - - Generates lookups.example_point_ids table with geometry transformed to EPSG:2193 (NZTM), - enabling proximity-based matching for ambiguous place names. Combines both trig_point - and geographic_name sources via UNION. - """ - import geopandas as gpd_ - import pandas as pd - - from .assets.transform import read_transform - from .config import TRANSFORM_SUFFIX, WORKING_TRANSFORM_DIR, get_theme_by_name - - def read_theme(theme_name: str): - release_dir = WORKING_TRANSFORM_DIR / f"release_{release_id}" - for dataset in get_theme_by_name(theme_name).datasets: - yield read_transform(release_dir / f"{dataset.name}{TRANSFORM_SUFFIX}") - - example_ids: set[str] = set() - for map_sheet in read_theme("nztopo50_map_sheet"): - example_ids.update(map_sheet["example_point_id"].dropna().astype("string")) - - named = [] - for theme_name, name_column in (("trig_point", "code"), ("geographic_name", "name")): - for frame in read_theme(theme_name): - point = frame[["id", name_column, "geometry"]].rename(columns={name_column: "name"}) - named.append(point.to_crs("EPSG:2193")) - - points = gpd_.GeoDataFrame(pd.concat(named, ignore_index=True), geometry="geometry", crs="EPSG:2193") - points["id"] = points["id"].astype("string") - points = points[points["id"].isin(example_ids)].dropna(subset=["name"]) - return points.reset_index(drop=True) - - -def _link_example_points( - labels: pd.Series, - label_geometry: gpd.GeoSeries, - points: gpd.GeoDataFrame, - max_distance: float = 200.0, -) -> tuple[list[str | None], list[dict]]: - """Link each label to its nearest example point of the same name. - - Returns the linked point id per label (None if unlinked), and a list of match dictionaries. - """ - labels_per_name = labels.value_counts() - - linked: list[str | None] = [] - matches: list[dict] = [] - for index, (name, label_geom) in enumerate(zip(labels, label_geometry, strict=True)): - candidates = points[points["name"] == name] - if candidates.empty: - linked.append(None) - continue - - # Distance from this label to every example point sharing its name - distances = candidates.distance(label_geom) - nearest = distances.idxmin() - distance = float(distances[nearest]) - nearest_id = str(candidates.at[nearest, "id"]) - - # keep the link if only one match, or the nearest is within the max distance - keep = labels_per_name[name] == 1 or distance <= max_distance - linked.append(nearest_id if keep else None) - - matches.append( - { - "label_index": index, - "name": name, - "labels_with_name": int(labels_per_name[name]), - "candidate_points": len(candidates), - "nearest_id": nearest_id, - "distance_m": round(distance, 1), - "linked": keep, - } - ) - return linked, matches - - -def carto_text_example_point_id(gdf: gpd.GeoDataFrame, td: ThemeDataset, release_id: int) -> gpd.GeoDataFrame: - """Set `example_point_id` on each carto_text label to the example point it renders. - - A map sheet highlights one example point by the id of the label drawing it. A label naming a - unique example point links at any distance; a shared name links to the nearest within 200 m. - """ - import pandas as pd - - points = _create_example_point_ids_lookup(release_id) - labels = gdf["full_text"] - label_geometry = gdf.geometry.to_crs("EPSG:2193") - - linked, matches = _link_example_points(labels, label_geometry, points) - - gdf = gdf.copy() - gdf["example_point_id"] = pd.Series(linked, index=gdf.index, dtype="string") - - logger.info( - "carto_text_example_point_id", - extra={ - "dataset": td.name, - "release": release_id, - "matched": sum(point_id is not None for point_id in linked), - "total": len(gdf), - }, - ) - # Every name match and the distance behind its link/reject, for debugging the output. - logger.debug("carto_text_example_point_matches", extra={"dataset": td.name, "matches": matches}) - return gdf - - FIXUPS: dict[str, Fixup] = { "build_nzgb_metadata": build_nzgb_metadata, "build_road_metadata": build_road_metadata,