ea 0.6.127 → 0.6.129

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ea/fonts/carlito_gdi_widths.json +1 -0
  3. data/lib/ea/fonts/cjk_fallback_widths.json +1 -0
  4. data/lib/ea/fonts/metrics.rb +73 -15
  5. data/lib/ea/fonts/vertical_metrics.json +154 -0
  6. data/lib/ea/sources/qea/diagram_builder/association_class.rb +52 -0
  7. data/lib/ea/sources/qea/diagram_builder/auto_routing.rb +26 -4
  8. data/lib/ea/sources/qea/diagram_builder/routing.rb +90 -4
  9. data/lib/ea/sources/qea/diagram_builder.rb +29 -5
  10. data/lib/ea/sources/qea/relationship_builder.rb +6 -6
  11. data/lib/ea/sources/xmi/relationship_builder.rb +15 -8
  12. data/lib/ea/svg/ea_emitter/compartment/attributes.rb +1 -1
  13. data/lib/ea/svg/ea_emitter/compartment/header.rb +10 -1
  14. data/lib/ea/svg/ea_emitter/compartment/instance_slots.rb +24 -5
  15. data/lib/ea/svg/ea_emitter/compartment/note_body.rb +56 -20
  16. data/lib/ea/svg/ea_emitter/compartment/note_html.rb +18 -31
  17. data/lib/ea/svg/ea_emitter/connector_redock.rb +52 -3
  18. data/lib/ea/svg/ea_emitter/connectors.rb +1 -0
  19. data/lib/ea/svg/ea_emitter/element/header_renderer.rb +13 -3
  20. data/lib/ea/svg/ea_emitter/element/tagged_value_renderer.rb +14 -5
  21. data/lib/ea/svg/ea_emitter/elements.rb +13 -1
  22. data/lib/ea/svg/ea_emitter/font_resolver.rb +6 -1
  23. data/lib/ea/svg/ea_emitter/label/end_label.rb +182 -10
  24. data/lib/ea/svg/ea_emitter/label/midpoint_label.rb +28 -8
  25. data/lib/ea/svg/ea_emitter/label/plain_source_seat.rb +29 -0
  26. data/lib/ea/svg/ea_emitter/label/plain_target_seat.rb +28 -0
  27. data/lib/ea/svg/ea_emitter/label/source_stair_seat.rb +60 -0
  28. data/lib/ea/svg/ea_emitter/label/target_bend_seat.rb +45 -0
  29. data/lib/ea/svg/ea_emitter/label.rb +4 -0
  30. data/lib/ea/svg/ea_emitter/labels.rb +19 -3
  31. data/lib/ea/svg/ea_emitter/marker/diamond.rb +29 -5
  32. data/lib/ea/theme/definition.rb +9 -1
  33. data/lib/ea/version.rb +1 -1
  34. metadata +9 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 78f923bf1924106f7e6853841f3470c198e6ed0c9198e4501acd63aa3e84b3b6
4
- data.tar.gz: 46975a9dd5d9f80c027a4b7f906abb2dfaff6d7bfdcc8b0af82f3ce390f6a2c6
3
+ metadata.gz: 29ca7acdd9050d074b2b4db4206b75b9601a6a3241211dc371e4d4d0fb78e0f4
4
+ data.tar.gz: 12f9fa35b19bfcafac72caceb32217ab2ec98d8fac0cc6cd7e659c3dae0bada6
5
5
  SHA512:
6
- metadata.gz: e9b5fcacddafe90bac1b21015a6649227fd9676e01e8f5367e9eec96c0eac8712ff6303e49fadfa1d3db0c19c648eec056030ddcdb0e8d68609191502fd26193
7
- data.tar.gz: 3f95877c62d6dc05b74096bba8ecd49961a2c40bd363a98fde2d5e27f53a31e43ecb871a210e010ef5721b7c6e4d58c2cd94c6bf16e3826a712e80c1f0f7055e
6
+ metadata.gz: 6482340f93e344e5cd7a034d3af0db2152b0738f6f85eb1fb5d0a5114ff119d0b8bd0fa150b5f8e4795e92b8b5743a03f8e668f38a4b5e9ba665bcbf19c1e050
7
+ data.tar.gz: 2ded830ba84797da9a07c0d9c0e70351292b5e68869f4fce38692774d55977fe3808a4651e35313025644304d9458e03f5b13225a47830013bf8a673f113376a
@@ -0,0 +1 @@
1
+ {"face":"Carlito","source":"GDI GetCharWidth32W at 96 DPI, Windows Server 2022, lutaml/ea run 39276232219","key":"logical height:weight:style","widths":{"10:400:italic":{" ":2,"(":3,")":3,"-":3,".":3,"0":5,"2":5,"3":5,":":3,"C":5,"D":6,"E":5,"G":6,"L":4,"M":9,"R":5,"S":5,"U":6,"X":5,"a":5,"c":4,"e":5,"f":3,"g":5,"h":5,"i":2,"l":2,"m":8,"n":5,"o":5,"p":5,"r":3,"t":3,"v":4,"y":4},"10:400:normal":{" ":2,"(":3,")":3,"-":3,".":3,"0":5,"2":5,"3":5,":":3,"C":5,"D":6,"E":5,"G":6,"L":4,"M":9,"R":5,"S":5,"U":6,"X":5,"a":5,"c":4,"e":5,"f":3,"g":5,"h":5,"i":2,"l":2,"m":8,"n":5,"o":5,"p":5,"r":3,"t":3,"v":5,"y":5},"10:700:italic":{" ":2,"(":3,")":3,"-":3,".":3,"0":5,"2":5,"3":5,":":3,"C":5,"D":6,"E":5,"G":6,"L":4,"M":9,"R":6,"S":5,"U":7,"X":6,"a":5,"c":4,"e":5,"f":3,"g":5,"h":5,"i":2,"l":2,"m":8,"n":5,"o":5,"p":5,"r":4,"t":3,"v":5,"y":5},"10:700:normal":{" ":2,"(":3,")":3,"-":3,".":3,"0":5,"2":5,"3":5,":":3,"C":5,"D":6,"E":5,"G":6,"L":4,"M":9,"R":6,"S":5,"U":7,"X":6,"a":5,"c":4,"e":5,"f":3,"g":5,"h":5,"i":2,"l":2,"m":8,"n":5,"o":5,"p":5,"r":4,"t":3,"v":5,"y":5},"12:400:italic":{" ":3,"(":4,")":4,"-":4,".":3,"0":6,"2":6,"3":6,":":3,"C":6,"D":7,"E":6,"G":8,"L":5,"M":10,"R":7,"S":5,"U":8,"X":6,"a":6,"c":5,"e":6,"f":4,"g":6,"h":6,"i":3,"l":3,"m":10,"n":6,"o":6,"p":6,"r":4,"t":4,"v":5,"y":5},"12:400:normal":{" ":3,"(":4,")":4,"-":4,".":3,"0":6,"2":6,"3":6,":":3,"C":6,"D":7,"E":6,"G":8,"L":5,"M":10,"R":7,"S":6,"U":8,"X":6,"a":6,"c":5,"e":6,"f":4,"g":6,"h":6,"i":3,"l":3,"m":10,"n":6,"o":6,"p":6,"r":4,"t":4,"v":5,"y":5},"12:700:italic":{" ":3,"(":4,")":4,"-":4,".":3,"0":6,"2":6,"3":6,":":3,"C":6,"D":8,"E":6,"G":8,"L":5,"M":10,"R":7,"S":6,"U":8,"X":7,"a":6,"c":5,"e":6,"f":4,"g":6,"h":6,"i":3,"l":3,"m":10,"n":6,"o":6,"p":6,"r":4,"t":4,"v":6,"y":6},"12:700:normal":{" ":3,"(":4,")":4,"-":4,".":3,"0":6,"2":6,"3":6,":":3,"C":6,"D":8,"E":6,"G":8,"L":5,"M":10,"R":7,"S":6,"U":8,"X":7,"a":6,"c":5,"e":6,"f":4,"g":6,"h":6,"i":3,"l":3,"m":10,"n":6,"o":6,"p":6,"r":4,"t":4,"v":6,"y":6},"13:400:italic":{" ":3,"(":4,")":4,"-":4,".":3,"0":7,"2":7,"3":7,":":3,"C":7,"D":8,"E":6,"G":8,"L":5,"M":11,"R":7,"S":6,"U":8,"X":7,"a":7,"c":5,"e":6,"f":4,"g":7,"h":7,"i":3,"l":3,"m":10,"n":7,"o":7,"p":7,"r":4,"t":4,"v":6,"y":6},"13:400:normal":{" ":3,"(":4,")":4,"-":4,".":3,"0":7,"2":7,"3":7,":":3,"C":7,"D":8,"E":6,"G":8,"L":5,"M":11,"R":7,"S":6,"U":8,"X":7,"a":6,"c":6,"e":6,"f":4,"g":6,"h":7,"i":3,"l":3,"m":10,"n":7,"o":7,"p":7,"r":5,"t":4,"v":6,"y":6},"13:700:italic":{" ":3,"(":4,")":4,"-":4,".":3,"0":7,"2":7,"3":7,":":4,"C":7,"D":8,"E":6,"G":8,"L":6,"M":11,"R":7,"S":6,"U":8,"X":7,"a":7,"c":5,"e":6,"f":4,"g":7,"h":7,"i":3,"l":3,"m":10,"n":7,"o":7,"p":7,"r":5,"t":5,"v":6,"y":6},"13:700:normal":{" ":3,"(":4,")":4,"-":4,".":3,"0":7,"2":7,"3":7,":":4,"C":7,"D":8,"E":6,"G":8,"L":6,"M":11,"R":7,"S":6,"U":8,"X":7,"a":6,"c":5,"e":7,"f":4,"g":6,"h":7,"i":3,"l":3,"m":11,"n":7,"o":7,"p":7,"r":5,"t":5,"v":6,"y":6},"14:400:italic":{" ":3,"(":4,")":4,"-":4,".":4,"0":7,"2":7,"3":7,":":4,"C":7,"D":9,"E":7,"G":9,"L":6,"M":12,"R":8,"S":6,"U":9,"X":7,"a":7,"c":6,"e":7,"f":4,"g":7,"h":7,"i":3,"l":3,"m":11,"n":7,"o":7,"p":7,"r":5,"t":5,"v":6,"y":6},"14:400:normal":{" ":3,"(":4,")":4,"-":4,".":4,"0":7,"2":7,"3":7,":":4,"C":7,"D":9,"E":7,"G":9,"L":6,"M":12,"R":8,"S":6,"U":9,"X":7,"a":7,"c":6,"e":7,"f":4,"g":7,"h":7,"i":3,"l":3,"m":11,"n":7,"o":7,"p":7,"r":5,"t":5,"v":6,"y":6},"14:700:italic":{" ":3,"(":4,")":4,"-":4,".":4,"0":7,"2":7,"3":7,":":4,"C":7,"D":9,"E":7,"G":9,"L":6,"M":12,"R":8,"S":7,"U":9,"X":8,"a":7,"c":6,"e":7,"f":4,"g":7,"h":7,"i":3,"l":3,"m":11,"n":7,"o":7,"p":7,"r":5,"t":5,"v":7,"y":7},"14:700:normal":{" ":3,"(":4,")":4,"-":4,".":4,"0":7,"2":7,"3":7,":":4,"C":7,"D":9,"E":7,"G":9,"L":6,"M":12,"R":8,"S":7,"U":9,"X":8,"a":7,"c":6,"e":7,"f":4,"g":7,"h":8,"i":3,"l":3,"m":11,"n":8,"o":8,"p":8,"r":5,"t":5,"v":7,"y":7},"17:400:italic":{" ":4,"(":5,")":5,"-":5,".":4,"0":9,"2":9,"3":9,":":5,"C":9,"D":10,"E":8,"G":11,"L":7,"M":15,"R":9,"S":8,"U":11,"X":9,"a":9,"c":7,"e":8,"f":5,"g":9,"h":9,"i":4,"l":4,"m":13,"n":9,"o":9,"p":9,"r":6,"t":6,"v":8,"y":8},"17:400:normal":{" ":4,"(":5,")":5,"-":5,".":4,"0":9,"2":9,"3":9,":":5,"C":9,"D":10,"E":8,"G":11,"L":7,"M":15,"R":9,"S":8,"U":11,"X":9,"a":8,"c":7,"e":8,"f":5,"g":8,"h":9,"i":4,"l":4,"m":14,"n":9,"o":9,"p":9,"r":6,"t":6,"v":8,"y":8},"17:700:italic":{" ":4,"(":5,")":5,"-":5,".":5,"0":9,"2":9,"3":9,":":5,"C":9,"D":11,"E":8,"G":11,"L":7,"M":15,"R":10,"S":8,"U":11,"X":9,"a":9,"c":7,"e":8,"f":5,"g":9,"h":9,"i":4,"l":4,"m":14,"n":9,"o":9,"p":9,"r":6,"t":6,"v":8,"y":8},"17:700:normal":{" ":4,"(":5,")":5,"-":5,".":5,"0":9,"2":9,"3":9,":":5,"C":9,"D":11,"E":8,"G":11,"L":7,"M":15,"R":10,"S":8,"U":11,"X":9,"a":8,"c":7,"e":9,"f":5,"g":8,"h":9,"i":4,"l":4,"m":14,"n":9,"o":9,"p":9,"r":6,"t":6,"v":8,"y":8}}}
@@ -0,0 +1 @@
1
+ {"face":"MS UI Gothic","source":"GDI GetCharWidth32W at 96 DPI, Windows Server 2022, lutaml/ea run 39276232219","key":"logical height:weight:style","widths":{"10:400:italic":{"、":7,"。":7,"い":8,"う":6,"え":8,"が":8,"け":8,"こ":7,"さ":7,"し":7,"じ":7,"す":8,"そ":7,"た":8,"て":8,"で":8,"と":6,"な":9,"に":8,"の":8,"は":9,"び":8,"べ":8,"め":8,"よ":8,"り":6,"る":8,"れ":9,"を":8,"ん":8,"ク":7,"シ":8,"ス":8,"タ":7,"ッ":6,"デ":8,"ト":7,"ネ":8,"メ":7,"モ":8,"ュ":7,"ラ":7,"リ":6,"ル":8,"ン":7,"・":5,"ー":8,"上":10,"下":10,"交":10,"仕":10,"他":10,"位":10,"例":10,"修":10,"備":10,"傷":10,"元":10,"全":10,"内":10,"凡":10,"出":10,"利":10,"化":10,"区":10,"参":10,"及":10,"合":10,"噴":10,"因":10,"囲":10,"図":10,"土":10,"地":10,"埋":10,"域":10,"基":10,"堆":10,"堤":10,"報":10,"場":10,"壊":10,"定":10,"害":10,"層":10,"山":10,"崩":10,"川":10,"差":10,"市":10,"広":10,"建":10,"形":10,"徒":10,"情":10,"指":10,"損":10,"数":10,"施":10,"木":10,"本":10,"林":10,"査":10,"梁":10,"植":10,"構":10,"様":10,"橋":10,"次":10,"正":10,"歩":10,"民":10,"水":10,"決":10,"河":10,"泥":10,"洪":10,"流":10,"火":10,"災":10,"照":10,"物":10,"現":10,"生":10,"用":10,"画":10,"異":10,"盛":10,"石":10,"砂":10,"礎":10,"示":10,"積":10,"空":10,"範":10,"築":10,"系":10,"置":10,"義":10,"腹":10,"致":10,"航":10,"街":10,"表":10,"計":10,"設":10,"調":10,"起":10,"路":10,"通":10,"造":10,"道":10,"部":10,"都":10,"鉄":10,"間":10,"雪":10,"(":5,")":5},"10:400:normal":{"、":7,"。":7,"い":8,"う":6,"え":8,"が":8,"け":8,"こ":7,"さ":7,"し":7,"じ":7,"す":8,"そ":7,"た":8,"て":8,"で":8,"と":6,"な":9,"に":8,"の":8,"は":9,"び":8,"べ":8,"め":8,"よ":8,"り":6,"る":8,"れ":9,"を":8,"ん":8,"ク":7,"シ":8,"ス":8,"タ":7,"ッ":6,"デ":8,"ト":7,"ネ":8,"メ":7,"モ":8,"ュ":7,"ラ":7,"リ":6,"ル":8,"ン":7,"・":5,"ー":8,"上":10,"下":10,"交":10,"仕":10,"他":10,"位":10,"例":10,"修":10,"備":10,"傷":10,"元":10,"全":10,"内":10,"凡":10,"出":10,"利":10,"化":10,"区":10,"参":10,"及":10,"合":10,"噴":10,"因":10,"囲":10,"図":10,"土":10,"地":10,"埋":10,"域":10,"基":10,"堆":10,"堤":10,"報":10,"場":10,"壊":10,"定":10,"害":10,"層":10,"山":10,"崩":10,"川":10,"差":10,"市":10,"広":10,"建":10,"形":10,"徒":10,"情":10,"指":10,"損":10,"数":10,"施":10,"木":10,"本":10,"林":10,"査":10,"梁":10,"植":10,"構":10,"様":10,"橋":10,"次":10,"正":10,"歩":10,"民":10,"水":10,"決":10,"河":10,"泥":10,"洪":10,"流":10,"火":10,"災":10,"照":10,"物":10,"現":10,"生":10,"用":10,"画":10,"異":10,"盛":10,"石":10,"砂":10,"礎":10,"示":10,"積":10,"空":10,"範":10,"築":10,"系":10,"置":10,"義":10,"腹":10,"致":10,"航":10,"街":10,"表":10,"計":10,"設":10,"調":10,"起":10,"路":10,"通":10,"造":10,"道":10,"部":10,"都":10,"鉄":10,"間":10,"雪":10,"(":5,")":5},"10:700:italic":{"、":8,"。":8,"い":9,"う":7,"え":9,"が":9,"け":9,"こ":8,"さ":8,"し":8,"じ":8,"す":9,"そ":8,"た":9,"て":9,"で":9,"と":7,"な":10,"に":9,"の":9,"は":10,"び":9,"べ":9,"め":9,"よ":9,"り":7,"る":9,"れ":10,"を":9,"ん":9,"ク":8,"シ":9,"ス":9,"タ":8,"ッ":7,"デ":9,"ト":8,"ネ":9,"メ":8,"モ":9,"ュ":8,"ラ":8,"リ":7,"ル":9,"ン":8,"・":6,"ー":9,"上":11,"下":11,"交":11,"仕":11,"他":11,"位":11,"例":11,"修":11,"備":11,"傷":11,"元":11,"全":11,"内":11,"凡":11,"出":11,"利":11,"化":11,"区":11,"参":11,"及":11,"合":11,"噴":11,"因":11,"囲":11,"図":11,"土":11,"地":11,"埋":11,"域":11,"基":11,"堆":11,"堤":11,"報":11,"場":11,"壊":11,"定":11,"害":11,"層":11,"山":11,"崩":11,"川":11,"差":11,"市":11,"広":11,"建":11,"形":11,"徒":11,"情":11,"指":11,"損":11,"数":11,"施":11,"木":11,"本":11,"林":11,"査":11,"梁":11,"植":11,"構":11,"様":11,"橋":11,"次":11,"正":11,"歩":11,"民":11,"水":11,"決":11,"河":11,"泥":11,"洪":11,"流":11,"火":11,"災":11,"照":11,"物":11,"現":11,"生":11,"用":11,"画":11,"異":11,"盛":11,"石":11,"砂":11,"礎":11,"示":11,"積":11,"空":11,"範":11,"築":11,"系":11,"置":11,"義":11,"腹":11,"致":11,"航":11,"街":11,"表":11,"計":11,"設":11,"調":11,"起":11,"路":11,"通":11,"造":11,"道":11,"部":11,"都":11,"鉄":11,"間":11,"雪":11,"(":6,")":6},"10:700:normal":{"、":8,"。":8,"い":9,"う":7,"え":9,"が":9,"け":9,"こ":8,"さ":8,"し":8,"じ":8,"す":9,"そ":8,"た":9,"て":9,"で":9,"と":7,"な":10,"に":9,"の":9,"は":10,"び":9,"べ":9,"め":9,"よ":9,"り":7,"る":9,"れ":10,"を":9,"ん":9,"ク":8,"シ":9,"ス":9,"タ":8,"ッ":7,"デ":9,"ト":8,"ネ":9,"メ":8,"モ":9,"ュ":8,"ラ":8,"リ":7,"ル":9,"ン":8,"・":6,"ー":9,"上":11,"下":11,"交":11,"仕":11,"他":11,"位":11,"例":11,"修":11,"備":11,"傷":11,"元":11,"全":11,"内":11,"凡":11,"出":11,"利":11,"化":11,"区":11,"参":11,"及":11,"合":11,"噴":11,"因":11,"囲":11,"図":11,"土":11,"地":11,"埋":11,"域":11,"基":11,"堆":11,"堤":11,"報":11,"場":11,"壊":11,"定":11,"害":11,"層":11,"山":11,"崩":11,"川":11,"差":11,"市":11,"広":11,"建":11,"形":11,"徒":11,"情":11,"指":11,"損":11,"数":11,"施":11,"木":11,"本":11,"林":11,"査":11,"梁":11,"植":11,"構":11,"様":11,"橋":11,"次":11,"正":11,"歩":11,"民":11,"水":11,"決":11,"河":11,"泥":11,"洪":11,"流":11,"火":11,"災":11,"照":11,"物":11,"現":11,"生":11,"用":11,"画":11,"異":11,"盛":11,"石":11,"砂":11,"礎":11,"示":11,"積":11,"空":11,"範":11,"築":11,"系":11,"置":11,"義":11,"腹":11,"致":11,"航":11,"街":11,"表":11,"計":11,"設":11,"調":11,"起":11,"路":11,"通":11,"造":11,"道":11,"部":11,"都":11,"鉄":11,"間":11,"雪":11,"(":6,")":6},"12:400:italic":{"、":8,"。":8,"い":10,"う":7,"え":9,"が":10,"け":10,"こ":8,"さ":8,"し":9,"じ":9,"す":10,"そ":9,"た":9,"て":9,"で":10,"と":8,"な":10,"に":9,"の":10,"は":10,"び":10,"べ":10,"め":10,"よ":9,"り":8,"る":9,"れ":11,"を":9,"ん":10,"ク":8,"シ":10,"ス":9,"タ":8,"ッ":7,"デ":10,"ト":8,"ネ":10,"メ":8,"モ":9,"ュ":8,"ラ":8,"リ":7,"ル":10,"ン":9,"・":6,"ー":10,"上":12,"下":12,"交":12,"仕":12,"他":12,"位":12,"例":12,"修":12,"備":12,"傷":12,"元":12,"全":12,"内":12,"凡":12,"出":12,"利":12,"化":12,"区":12,"参":12,"及":12,"合":12,"噴":12,"因":12,"囲":12,"図":12,"土":12,"地":12,"埋":12,"域":12,"基":12,"堆":12,"堤":12,"報":12,"場":12,"壊":12,"定":12,"害":12,"層":12,"山":12,"崩":12,"川":12,"差":12,"市":12,"広":12,"建":12,"形":12,"徒":12,"情":12,"指":12,"損":12,"数":12,"施":12,"木":12,"本":12,"林":12,"査":12,"梁":12,"植":12,"構":12,"様":12,"橋":12,"次":12,"正":12,"歩":12,"民":12,"水":12,"決":12,"河":12,"泥":12,"洪":12,"流":12,"火":12,"災":12,"照":12,"物":12,"現":12,"生":12,"用":12,"画":12,"異":12,"盛":12,"石":12,"砂":12,"礎":12,"示":12,"積":12,"空":12,"範":12,"築":12,"系":12,"置":12,"義":12,"腹":12,"致":12,"航":12,"街":12,"表":12,"計":12,"設":12,"調":12,"起":12,"路":12,"通":12,"造":12,"道":12,"部":12,"都":12,"鉄":12,"間":12,"雪":12,"(":6,")":6},"12:400:normal":{"、":8,"。":8,"い":10,"う":7,"え":9,"が":10,"け":10,"こ":8,"さ":8,"し":9,"じ":9,"す":10,"そ":9,"た":9,"て":9,"で":10,"と":8,"な":10,"に":9,"の":10,"は":10,"び":10,"べ":10,"め":10,"よ":9,"り":8,"る":9,"れ":11,"を":9,"ん":10,"ク":8,"シ":10,"ス":9,"タ":8,"ッ":7,"デ":10,"ト":8,"ネ":10,"メ":8,"モ":9,"ュ":8,"ラ":8,"リ":7,"ル":10,"ン":9,"・":6,"ー":10,"上":12,"下":12,"交":12,"仕":12,"他":12,"位":12,"例":12,"修":12,"備":12,"傷":12,"元":12,"全":12,"内":12,"凡":12,"出":12,"利":12,"化":12,"区":12,"参":12,"及":12,"合":12,"噴":12,"因":12,"囲":12,"図":12,"土":12,"地":12,"埋":12,"域":12,"基":12,"堆":12,"堤":12,"報":12,"場":12,"壊":12,"定":12,"害":12,"層":12,"山":12,"崩":12,"川":12,"差":12,"市":12,"広":12,"建":12,"形":12,"徒":12,"情":12,"指":12,"損":12,"数":12,"施":12,"木":12,"本":12,"林":12,"査":12,"梁":12,"植":12,"構":12,"様":12,"橋":12,"次":12,"正":12,"歩":12,"民":12,"水":12,"決":12,"河":12,"泥":12,"洪":12,"流":12,"火":12,"災":12,"照":12,"物":12,"現":12,"生":12,"用":12,"画":12,"異":12,"盛":12,"石":12,"砂":12,"礎":12,"示":12,"積":12,"空":12,"範":12,"築":12,"系":12,"置":12,"義":12,"腹":12,"致":12,"航":12,"街":12,"表":12,"計":12,"設":12,"調":12,"起":12,"路":12,"通":12,"造":12,"道":12,"部":12,"都":12,"鉄":12,"間":12,"雪":12,"(":6,")":6},"12:700:italic":{"、":9,"。":9,"い":11,"う":8,"え":10,"が":11,"け":11,"こ":9,"さ":9,"し":10,"じ":10,"す":11,"そ":10,"た":10,"て":10,"で":11,"と":9,"な":11,"に":10,"の":11,"は":11,"び":11,"べ":11,"め":11,"よ":10,"り":9,"る":10,"れ":12,"を":10,"ん":11,"ク":9,"シ":11,"ス":10,"タ":9,"ッ":8,"デ":11,"ト":9,"ネ":11,"メ":9,"モ":10,"ュ":9,"ラ":9,"リ":8,"ル":11,"ン":10,"・":7,"ー":11,"上":13,"下":13,"交":13,"仕":13,"他":13,"位":13,"例":13,"修":13,"備":13,"傷":13,"元":13,"全":13,"内":13,"凡":13,"出":13,"利":13,"化":13,"区":13,"参":13,"及":13,"合":13,"噴":13,"因":13,"囲":13,"図":13,"土":13,"地":13,"埋":13,"域":13,"基":13,"堆":13,"堤":13,"報":13,"場":13,"壊":13,"定":13,"害":13,"層":13,"山":13,"崩":13,"川":13,"差":13,"市":13,"広":13,"建":13,"形":13,"徒":13,"情":13,"指":13,"損":13,"数":13,"施":13,"木":13,"本":13,"林":13,"査":13,"梁":13,"植":13,"構":13,"様":13,"橋":13,"次":13,"正":13,"歩":13,"民":13,"水":13,"決":13,"河":13,"泥":13,"洪":13,"流":13,"火":13,"災":13,"照":13,"物":13,"現":13,"生":13,"用":13,"画":13,"異":13,"盛":13,"石":13,"砂":13,"礎":13,"示":13,"積":13,"空":13,"範":13,"築":13,"系":13,"置":13,"義":13,"腹":13,"致":13,"航":13,"街":13,"表":13,"計":13,"設":13,"調":13,"起":13,"路":13,"通":13,"造":13,"道":13,"部":13,"都":13,"鉄":13,"間":13,"雪":13,"(":7,")":7},"12:700:normal":{"、":9,"。":9,"い":11,"う":8,"え":10,"が":11,"け":11,"こ":9,"さ":9,"し":10,"じ":10,"す":11,"そ":10,"た":10,"て":10,"で":11,"と":9,"な":11,"に":10,"の":11,"は":11,"び":11,"べ":11,"め":11,"よ":10,"り":9,"る":10,"れ":12,"を":10,"ん":11,"ク":9,"シ":11,"ス":10,"タ":9,"ッ":8,"デ":11,"ト":9,"ネ":11,"メ":9,"モ":10,"ュ":9,"ラ":9,"リ":8,"ル":11,"ン":10,"・":7,"ー":11,"上":13,"下":13,"交":13,"仕":13,"他":13,"位":13,"例":13,"修":13,"備":13,"傷":13,"元":13,"全":13,"内":13,"凡":13,"出":13,"利":13,"化":13,"区":13,"参":13,"及":13,"合":13,"噴":13,"因":13,"囲":13,"図":13,"土":13,"地":13,"埋":13,"域":13,"基":13,"堆":13,"堤":13,"報":13,"場":13,"壊":13,"定":13,"害":13,"層":13,"山":13,"崩":13,"川":13,"差":13,"市":13,"広":13,"建":13,"形":13,"徒":13,"情":13,"指":13,"損":13,"数":13,"施":13,"木":13,"本":13,"林":13,"査":13,"梁":13,"植":13,"構":13,"様":13,"橋":13,"次":13,"正":13,"歩":13,"民":13,"水":13,"決":13,"河":13,"泥":13,"洪":13,"流":13,"火":13,"災":13,"照":13,"物":13,"現":13,"生":13,"用":13,"画":13,"異":13,"盛":13,"石":13,"砂":13,"礎":13,"示":13,"積":13,"空":13,"範":13,"築":13,"系":13,"置":13,"義":13,"腹":13,"致":13,"航":13,"街":13,"表":13,"計":13,"設":13,"調":13,"起":13,"路":13,"通":13,"造":13,"道":13,"部":13,"都":13,"鉄":13,"間":13,"雪":13,"(":7,")":7},"13:400:italic":{"、":9,"。":9,"い":11,"う":8,"え":10,"が":11,"け":11,"こ":9,"さ":9,"し":9,"じ":9,"す":11,"そ":10,"た":10,"て":10,"で":11,"と":8,"な":11,"に":10,"の":11,"は":11,"び":11,"べ":11,"め":11,"よ":10,"り":8,"る":10,"れ":12,"を":10,"ん":11,"ク":9,"シ":11,"ス":10,"タ":9,"ッ":8,"デ":11,"ト":9,"ネ":11,"メ":9,"モ":10,"ュ":9,"ラ":9,"リ":8,"ル":11,"ン":10,"・":7,"ー":11,"上":13,"下":13,"交":13,"仕":13,"他":13,"位":13,"例":13,"修":13,"備":13,"傷":13,"元":13,"全":13,"内":13,"凡":13,"出":13,"利":13,"化":13,"区":13,"参":13,"及":13,"合":13,"噴":13,"因":13,"囲":13,"図":13,"土":13,"地":13,"埋":13,"域":13,"基":13,"堆":13,"堤":13,"報":13,"場":13,"壊":13,"定":13,"害":13,"層":13,"山":13,"崩":13,"川":13,"差":13,"市":13,"広":13,"建":13,"形":13,"徒":13,"情":13,"指":13,"損":13,"数":13,"施":13,"木":13,"本":13,"林":13,"査":13,"梁":13,"植":13,"構":13,"様":13,"橋":13,"次":13,"正":13,"歩":13,"民":13,"水":13,"決":13,"河":13,"泥":13,"洪":13,"流":13,"火":13,"災":13,"照":13,"物":13,"現":13,"生":13,"用":13,"画":13,"異":13,"盛":13,"石":13,"砂":13,"礎":13,"示":13,"積":13,"空":13,"範":13,"築":13,"系":13,"置":13,"義":13,"腹":13,"致":13,"航":13,"街":13,"表":13,"計":13,"設":13,"調":13,"起":13,"路":13,"通":13,"造":13,"道":13,"部":13,"都":13,"鉄":13,"間":13,"雪":13,"(":7,")":7},"13:400:normal":{"、":9,"。":9,"い":11,"う":8,"え":10,"が":11,"け":11,"こ":9,"さ":9,"し":9,"じ":9,"す":11,"そ":10,"た":10,"て":10,"で":11,"と":8,"な":11,"に":10,"の":11,"は":11,"び":11,"べ":11,"め":11,"よ":10,"り":8,"る":10,"れ":12,"を":10,"ん":11,"ク":9,"シ":11,"ス":10,"タ":9,"ッ":8,"デ":11,"ト":9,"ネ":11,"メ":9,"モ":10,"ュ":9,"ラ":9,"リ":8,"ル":11,"ン":10,"・":7,"ー":11,"上":13,"下":13,"交":13,"仕":13,"他":13,"位":13,"例":13,"修":13,"備":13,"傷":13,"元":13,"全":13,"内":13,"凡":13,"出":13,"利":13,"化":13,"区":13,"参":13,"及":13,"合":13,"噴":13,"因":13,"囲":13,"図":13,"土":13,"地":13,"埋":13,"域":13,"基":13,"堆":13,"堤":13,"報":13,"場":13,"壊":13,"定":13,"害":13,"層":13,"山":13,"崩":13,"川":13,"差":13,"市":13,"広":13,"建":13,"形":13,"徒":13,"情":13,"指":13,"損":13,"数":13,"施":13,"木":13,"本":13,"林":13,"査":13,"梁":13,"植":13,"構":13,"様":13,"橋":13,"次":13,"正":13,"歩":13,"民":13,"水":13,"決":13,"河":13,"泥":13,"洪":13,"流":13,"火":13,"災":13,"照":13,"物":13,"現":13,"生":13,"用":13,"画":13,"異":13,"盛":13,"石":13,"砂":13,"礎":13,"示":13,"積":13,"空":13,"範":13,"築":13,"系":13,"置":13,"義":13,"腹":13,"致":13,"航":13,"街":13,"表":13,"計":13,"設":13,"調":13,"起":13,"路":13,"通":13,"造":13,"道":13,"部":13,"都":13,"鉄":13,"間":13,"雪":13,"(":7,")":7},"13:700:italic":{"、":10,"。":10,"い":12,"う":9,"え":11,"が":12,"け":12,"こ":10,"さ":10,"し":10,"じ":10,"す":12,"そ":11,"た":11,"て":11,"で":12,"と":9,"な":12,"に":11,"の":12,"は":12,"び":12,"べ":12,"め":12,"よ":11,"り":9,"る":11,"れ":13,"を":11,"ん":12,"ク":10,"シ":12,"ス":11,"タ":10,"ッ":9,"デ":12,"ト":10,"ネ":12,"メ":10,"モ":11,"ュ":10,"ラ":10,"リ":9,"ル":12,"ン":11,"・":8,"ー":12,"上":14,"下":14,"交":14,"仕":14,"他":14,"位":14,"例":14,"修":14,"備":14,"傷":14,"元":14,"全":14,"内":14,"凡":14,"出":14,"利":14,"化":14,"区":14,"参":14,"及":14,"合":14,"噴":14,"因":14,"囲":14,"図":14,"土":14,"地":14,"埋":14,"域":14,"基":14,"堆":14,"堤":14,"報":14,"場":14,"壊":14,"定":14,"害":14,"層":14,"山":14,"崩":14,"川":14,"差":14,"市":14,"広":14,"建":14,"形":14,"徒":14,"情":14,"指":14,"損":14,"数":14,"施":14,"木":14,"本":14,"林":14,"査":14,"梁":14,"植":14,"構":14,"様":14,"橋":14,"次":14,"正":14,"歩":14,"民":14,"水":14,"決":14,"河":14,"泥":14,"洪":14,"流":14,"火":14,"災":14,"照":14,"物":14,"現":14,"生":14,"用":14,"画":14,"異":14,"盛":14,"石":14,"砂":14,"礎":14,"示":14,"積":14,"空":14,"範":14,"築":14,"系":14,"置":14,"義":14,"腹":14,"致":14,"航":14,"街":14,"表":14,"計":14,"設":14,"調":14,"起":14,"路":14,"通":14,"造":14,"道":14,"部":14,"都":14,"鉄":14,"間":14,"雪":14,"(":8,")":8},"13:700:normal":{"、":10,"。":10,"い":12,"う":9,"え":11,"が":12,"け":12,"こ":10,"さ":10,"し":10,"じ":10,"す":12,"そ":11,"た":11,"て":11,"で":12,"と":9,"な":12,"に":11,"の":12,"は":12,"び":12,"べ":12,"め":12,"よ":11,"り":9,"る":11,"れ":13,"を":11,"ん":12,"ク":10,"シ":12,"ス":11,"タ":10,"ッ":9,"デ":12,"ト":10,"ネ":12,"メ":10,"モ":11,"ュ":10,"ラ":10,"リ":9,"ル":12,"ン":11,"・":8,"ー":12,"上":14,"下":14,"交":14,"仕":14,"他":14,"位":14,"例":14,"修":14,"備":14,"傷":14,"元":14,"全":14,"内":14,"凡":14,"出":14,"利":14,"化":14,"区":14,"参":14,"及":14,"合":14,"噴":14,"因":14,"囲":14,"図":14,"土":14,"地":14,"埋":14,"域":14,"基":14,"堆":14,"堤":14,"報":14,"場":14,"壊":14,"定":14,"害":14,"層":14,"山":14,"崩":14,"川":14,"差":14,"市":14,"広":14,"建":14,"形":14,"徒":14,"情":14,"指":14,"損":14,"数":14,"施":14,"木":14,"本":14,"林":14,"査":14,"梁":14,"植":14,"構":14,"様":14,"橋":14,"次":14,"正":14,"歩":14,"民":14,"水":14,"決":14,"河":14,"泥":14,"洪":14,"流":14,"火":14,"災":14,"照":14,"物":14,"現":14,"生":14,"用":14,"画":14,"異":14,"盛":14,"石":14,"砂":14,"礎":14,"示":14,"積":14,"空":14,"範":14,"築":14,"系":14,"置":14,"義":14,"腹":14,"致":14,"航":14,"街":14,"表":14,"計":14,"設":14,"調":14,"起":14,"路":14,"通":14,"造":14,"道":14,"部":14,"都":14,"鉄":14,"間":14,"雪":14,"(":8,")":8},"14:400:italic":{"、":9,"。":9,"い":11,"う":8,"え":11,"が":12,"け":11,"こ":10,"さ":10,"し":10,"じ":10,"す":12,"そ":10,"た":11,"て":11,"で":11,"と":9,"な":12,"に":11,"の":11,"は":12,"び":12,"べ":11,"め":11,"よ":11,"り":9,"る":11,"れ":12,"を":11,"ん":11,"ク":10,"シ":11,"ス":11,"タ":10,"ッ":8,"デ":11,"ト":10,"ネ":11,"メ":10,"モ":11,"ュ":9,"ラ":10,"リ":8,"ル":11,"ン":10,"・":7,"ー":11,"上":14,"下":14,"交":14,"仕":14,"他":14,"位":14,"例":14,"修":14,"備":14,"傷":14,"元":14,"全":14,"内":14,"凡":14,"出":14,"利":14,"化":14,"区":14,"参":14,"及":14,"合":14,"噴":14,"因":14,"囲":14,"図":14,"土":14,"地":14,"埋":14,"域":14,"基":14,"堆":14,"堤":14,"報":14,"場":14,"壊":14,"定":14,"害":14,"層":14,"山":14,"崩":14,"川":14,"差":14,"市":14,"広":14,"建":14,"形":14,"徒":14,"情":14,"指":14,"損":14,"数":14,"施":14,"木":14,"本":14,"林":14,"査":14,"梁":14,"植":14,"構":14,"様":14,"橋":14,"次":14,"正":14,"歩":14,"民":14,"水":14,"決":14,"河":14,"泥":14,"洪":14,"流":14,"火":14,"災":14,"照":14,"物":14,"現":14,"生":14,"用":14,"画":14,"異":14,"盛":14,"石":14,"砂":14,"礎":14,"示":14,"積":14,"空":14,"範":14,"築":14,"系":14,"置":14,"義":14,"腹":14,"致":14,"航":14,"街":14,"表":14,"計":14,"設":14,"調":14,"起":14,"路":14,"通":14,"造":14,"道":14,"部":14,"都":14,"鉄":14,"間":14,"雪":14,"(":7,")":7},"14:400:normal":{"、":9,"。":9,"い":11,"う":8,"え":11,"が":12,"け":11,"こ":10,"さ":10,"し":10,"じ":10,"す":12,"そ":10,"た":11,"て":11,"で":11,"と":9,"な":12,"に":11,"の":11,"は":12,"び":12,"べ":11,"め":11,"よ":11,"り":9,"る":11,"れ":12,"を":11,"ん":11,"ク":10,"シ":11,"ス":11,"タ":10,"ッ":8,"デ":11,"ト":10,"ネ":11,"メ":10,"モ":11,"ュ":9,"ラ":10,"リ":8,"ル":11,"ン":10,"・":7,"ー":11,"上":14,"下":14,"交":14,"仕":14,"他":14,"位":14,"例":14,"修":14,"備":14,"傷":14,"元":14,"全":14,"内":14,"凡":14,"出":14,"利":14,"化":14,"区":14,"参":14,"及":14,"合":14,"噴":14,"因":14,"囲":14,"図":14,"土":14,"地":14,"埋":14,"域":14,"基":14,"堆":14,"堤":14,"報":14,"場":14,"壊":14,"定":14,"害":14,"層":14,"山":14,"崩":14,"川":14,"差":14,"市":14,"広":14,"建":14,"形":14,"徒":14,"情":14,"指":14,"損":14,"数":14,"施":14,"木":14,"本":14,"林":14,"査":14,"梁":14,"植":14,"構":14,"様":14,"橋":14,"次":14,"正":14,"歩":14,"民":14,"水":14,"決":14,"河":14,"泥":14,"洪":14,"流":14,"火":14,"災":14,"照":14,"物":14,"現":14,"生":14,"用":14,"画":14,"異":14,"盛":14,"石":14,"砂":14,"礎":14,"示":14,"積":14,"空":14,"範":14,"築":14,"系":14,"置":14,"義":14,"腹":14,"致":14,"航":14,"街":14,"表":14,"計":14,"設":14,"調":14,"起":14,"路":14,"通":14,"造":14,"道":14,"部":14,"都":14,"鉄":14,"間":14,"雪":14,"(":7,")":7},"14:700:italic":{"、":10,"。":10,"い":12,"う":9,"え":12,"が":13,"け":12,"こ":11,"さ":11,"し":11,"じ":11,"す":13,"そ":11,"た":12,"て":12,"で":12,"と":10,"な":13,"に":12,"の":12,"は":13,"び":13,"べ":12,"め":12,"よ":12,"り":10,"る":12,"れ":13,"を":12,"ん":12,"ク":11,"シ":12,"ス":12,"タ":11,"ッ":9,"デ":12,"ト":11,"ネ":12,"メ":11,"モ":12,"ュ":10,"ラ":11,"リ":9,"ル":12,"ン":11,"・":8,"ー":12,"上":15,"下":15,"交":15,"仕":15,"他":15,"位":15,"例":15,"修":15,"備":15,"傷":15,"元":15,"全":15,"内":15,"凡":15,"出":15,"利":15,"化":15,"区":15,"参":15,"及":15,"合":15,"噴":15,"因":15,"囲":15,"図":15,"土":15,"地":15,"埋":15,"域":15,"基":15,"堆":15,"堤":15,"報":15,"場":15,"壊":15,"定":15,"害":15,"層":15,"山":15,"崩":15,"川":15,"差":15,"市":15,"広":15,"建":15,"形":15,"徒":15,"情":15,"指":15,"損":15,"数":15,"施":15,"木":15,"本":15,"林":15,"査":15,"梁":15,"植":15,"構":15,"様":15,"橋":15,"次":15,"正":15,"歩":15,"民":15,"水":15,"決":15,"河":15,"泥":15,"洪":15,"流":15,"火":15,"災":15,"照":15,"物":15,"現":15,"生":15,"用":15,"画":15,"異":15,"盛":15,"石":15,"砂":15,"礎":15,"示":15,"積":15,"空":15,"範":15,"築":15,"系":15,"置":15,"義":15,"腹":15,"致":15,"航":15,"街":15,"表":15,"計":15,"設":15,"調":15,"起":15,"路":15,"通":15,"造":15,"道":15,"部":15,"都":15,"鉄":15,"間":15,"雪":15,"(":8,")":8},"14:700:normal":{"、":10,"。":10,"い":12,"う":9,"え":12,"が":13,"け":12,"こ":11,"さ":11,"し":11,"じ":11,"す":13,"そ":11,"た":12,"て":12,"で":12,"と":10,"な":13,"に":12,"の":12,"は":13,"び":13,"べ":12,"め":12,"よ":12,"り":10,"る":12,"れ":13,"を":12,"ん":12,"ク":11,"シ":12,"ス":12,"タ":11,"ッ":9,"デ":12,"ト":11,"ネ":12,"メ":11,"モ":12,"ュ":10,"ラ":11,"リ":9,"ル":12,"ン":11,"・":8,"ー":12,"上":15,"下":15,"交":15,"仕":15,"他":15,"位":15,"例":15,"修":15,"備":15,"傷":15,"元":15,"全":15,"内":15,"凡":15,"出":15,"利":15,"化":15,"区":15,"参":15,"及":15,"合":15,"噴":15,"因":15,"囲":15,"図":15,"土":15,"地":15,"埋":15,"域":15,"基":15,"堆":15,"堤":15,"報":15,"場":15,"壊":15,"定":15,"害":15,"層":15,"山":15,"崩":15,"川":15,"差":15,"市":15,"広":15,"建":15,"形":15,"徒":15,"情":15,"指":15,"損":15,"数":15,"施":15,"木":15,"本":15,"林":15,"査":15,"梁":15,"植":15,"構":15,"様":15,"橋":15,"次":15,"正":15,"歩":15,"民":15,"水":15,"決":15,"河":15,"泥":15,"洪":15,"流":15,"火":15,"災":15,"照":15,"物":15,"現":15,"生":15,"用":15,"画":15,"異":15,"盛":15,"石":15,"砂":15,"礎":15,"示":15,"積":15,"空":15,"範":15,"築":15,"系":15,"置":15,"義":15,"腹":15,"致":15,"航":15,"街":15,"表":15,"計":15,"設":15,"調":15,"起":15,"路":15,"通":15,"造":15,"道":15,"部":15,"都":15,"鉄":15,"間":15,"雪":15,"(":8,")":8},"17:400:italic":{"、":11,"。":11,"い":14,"う":10,"え":13,"が":14,"け":14,"こ":12,"さ":12,"し":12,"じ":12,"す":14,"そ":13,"た":13,"て":13,"で":14,"と":11,"な":15,"に":13,"の":14,"は":15,"び":14,"べ":14,"め":14,"よ":13,"り":11,"る":13,"れ":15,"を":13,"ん":14,"ク":12,"シ":14,"ス":13,"タ":12,"ッ":10,"デ":14,"ト":12,"ネ":14,"メ":12,"モ":13,"ュ":11,"ラ":12,"リ":10,"ル":14,"ン":13,"・":9,"ー":14,"上":17,"下":17,"交":17,"仕":17,"他":17,"位":17,"例":17,"修":17,"備":17,"傷":17,"元":17,"全":17,"内":17,"凡":17,"出":17,"利":17,"化":17,"区":17,"参":17,"及":17,"合":17,"噴":17,"因":17,"囲":17,"図":17,"土":17,"地":17,"埋":17,"域":17,"基":17,"堆":17,"堤":17,"報":17,"場":17,"壊":17,"定":17,"害":17,"層":17,"山":17,"崩":17,"川":17,"差":17,"市":17,"広":17,"建":17,"形":17,"徒":17,"情":17,"指":17,"損":17,"数":17,"施":17,"木":17,"本":17,"林":17,"査":17,"梁":17,"植":17,"構":17,"様":17,"橋":17,"次":17,"正":17,"歩":17,"民":17,"水":17,"決":17,"河":17,"泥":17,"洪":17,"流":17,"火":17,"災":17,"照":17,"物":17,"現":17,"生":17,"用":17,"画":17,"異":17,"盛":17,"石":17,"砂":17,"礎":17,"示":17,"積":17,"空":17,"範":17,"築":17,"系":17,"置":17,"義":17,"腹":17,"致":17,"航":17,"街":17,"表":17,"計":17,"設":17,"調":17,"起":17,"路":17,"通":17,"造":17,"道":17,"部":17,"都":17,"鉄":17,"間":17,"雪":17,"(":9,")":9},"17:400:normal":{"、":11,"。":11,"い":14,"う":10,"え":13,"が":14,"け":14,"こ":12,"さ":12,"し":12,"じ":12,"す":14,"そ":13,"た":13,"て":13,"で":14,"と":11,"な":15,"に":13,"の":14,"は":15,"び":14,"べ":14,"め":14,"よ":13,"り":11,"る":13,"れ":15,"を":13,"ん":14,"ク":12,"シ":14,"ス":13,"タ":12,"ッ":10,"デ":14,"ト":12,"ネ":14,"メ":12,"モ":13,"ュ":11,"ラ":12,"リ":10,"ル":14,"ン":13,"・":9,"ー":14,"上":17,"下":17,"交":17,"仕":17,"他":17,"位":17,"例":17,"修":17,"備":17,"傷":17,"元":17,"全":17,"内":17,"凡":17,"出":17,"利":17,"化":17,"区":17,"参":17,"及":17,"合":17,"噴":17,"因":17,"囲":17,"図":17,"土":17,"地":17,"埋":17,"域":17,"基":17,"堆":17,"堤":17,"報":17,"場":17,"壊":17,"定":17,"害":17,"層":17,"山":17,"崩":17,"川":17,"差":17,"市":17,"広":17,"建":17,"形":17,"徒":17,"情":17,"指":17,"損":17,"数":17,"施":17,"木":17,"本":17,"林":17,"査":17,"梁":17,"植":17,"構":17,"様":17,"橋":17,"次":17,"正":17,"歩":17,"民":17,"水":17,"決":17,"河":17,"泥":17,"洪":17,"流":17,"火":17,"災":17,"照":17,"物":17,"現":17,"生":17,"用":17,"画":17,"異":17,"盛":17,"石":17,"砂":17,"礎":17,"示":17,"積":17,"空":17,"範":17,"築":17,"系":17,"置":17,"義":17,"腹":17,"致":17,"航":17,"街":17,"表":17,"計":17,"設":17,"調":17,"起":17,"路":17,"通":17,"造":17,"道":17,"部":17,"都":17,"鉄":17,"間":17,"雪":17,"(":9,")":9},"17:700:italic":{"、":12,"。":12,"い":15,"う":11,"え":14,"が":15,"け":15,"こ":13,"さ":13,"し":13,"じ":13,"す":15,"そ":14,"た":14,"て":14,"で":15,"と":12,"な":16,"に":14,"の":15,"は":16,"び":15,"べ":15,"め":15,"よ":14,"り":12,"る":14,"れ":16,"を":14,"ん":15,"ク":13,"シ":15,"ス":14,"タ":13,"ッ":11,"デ":15,"ト":13,"ネ":15,"メ":13,"モ":14,"ュ":12,"ラ":13,"リ":11,"ル":15,"ン":14,"・":10,"ー":15,"上":18,"下":18,"交":18,"仕":18,"他":18,"位":18,"例":18,"修":18,"備":18,"傷":18,"元":18,"全":18,"内":18,"凡":18,"出":18,"利":18,"化":18,"区":18,"参":18,"及":18,"合":18,"噴":18,"因":18,"囲":18,"図":18,"土":18,"地":18,"埋":18,"域":18,"基":18,"堆":18,"堤":18,"報":18,"場":18,"壊":18,"定":18,"害":18,"層":18,"山":18,"崩":18,"川":18,"差":18,"市":18,"広":18,"建":18,"形":18,"徒":18,"情":18,"指":18,"損":18,"数":18,"施":18,"木":18,"本":18,"林":18,"査":18,"梁":18,"植":18,"構":18,"様":18,"橋":18,"次":18,"正":18,"歩":18,"民":18,"水":18,"決":18,"河":18,"泥":18,"洪":18,"流":18,"火":18,"災":18,"照":18,"物":18,"現":18,"生":18,"用":18,"画":18,"異":18,"盛":18,"石":18,"砂":18,"礎":18,"示":18,"積":18,"空":18,"範":18,"築":18,"系":18,"置":18,"義":18,"腹":18,"致":18,"航":18,"街":18,"表":18,"計":18,"設":18,"調":18,"起":18,"路":18,"通":18,"造":18,"道":18,"部":18,"都":18,"鉄":18,"間":18,"雪":18,"(":10,")":10},"17:700:normal":{"、":12,"。":12,"い":15,"う":11,"え":14,"が":15,"け":15,"こ":13,"さ":13,"し":13,"じ":13,"す":15,"そ":14,"た":14,"て":14,"で":15,"と":12,"な":16,"に":14,"の":15,"は":16,"び":15,"べ":15,"め":15,"よ":14,"り":12,"る":14,"れ":16,"を":14,"ん":15,"ク":13,"シ":15,"ス":14,"タ":13,"ッ":11,"デ":15,"ト":13,"ネ":15,"メ":13,"モ":14,"ュ":12,"ラ":13,"リ":11,"ル":15,"ン":14,"・":10,"ー":15,"上":18,"下":18,"交":18,"仕":18,"他":18,"位":18,"例":18,"修":18,"備":18,"傷":18,"元":18,"全":18,"内":18,"凡":18,"出":18,"利":18,"化":18,"区":18,"参":18,"及":18,"合":18,"噴":18,"因":18,"囲":18,"図":18,"土":18,"地":18,"埋":18,"域":18,"基":18,"堆":18,"堤":18,"報":18,"場":18,"壊":18,"定":18,"害":18,"層":18,"山":18,"崩":18,"川":18,"差":18,"市":18,"広":18,"建":18,"形":18,"徒":18,"情":18,"指":18,"損":18,"数":18,"施":18,"木":18,"本":18,"林":18,"査":18,"梁":18,"植":18,"構":18,"様":18,"橋":18,"次":18,"正":18,"歩":18,"民":18,"水":18,"決":18,"河":18,"泥":18,"洪":18,"流":18,"火":18,"災":18,"照":18,"物":18,"現":18,"生":18,"用":18,"画":18,"異":18,"盛":18,"石":18,"砂":18,"礎":18,"示":18,"積":18,"空":18,"範":18,"築":18,"系":18,"置":18,"義":18,"腹":18,"致":18,"航":18,"街":18,"表":18,"計":18,"設":18,"調":18,"起":18,"路":18,"通":18,"造":18,"道":18,"部":18,"都":18,"鉄":18,"間":18,"雪":18,"(":10,")":10}}}
@@ -45,8 +45,28 @@ module Ea
45
45
  File.expand_path("cambria_7_styled_widths.json", __dir__)
46
46
  )).freeze
47
47
  CAMBRIA_7_GUILLEMET_PAIR_WIDTH = 10
48
+ # Per-family OS/2 win metrics and, where the font has one, its
49
+ # 1:1 VDMX table (ppem => [ascent, descent] in pixels), read
50
+ # from the font files named in each entry's version.
51
+ VERTICAL_METRICS = JSON.parse(File.read(
52
+ File.expand_path("vertical_metrics.json", __dir__)
53
+ )).freeze
54
+ # Carlito and Cambria have no CJK glyphs. EA's CJK widths for them
55
+ # match MS UI Gothic's GDI advances, measured on Windows per
56
+ # "height:weight:style"; that match does not prove the linked face.
57
+ CJK_FALLBACK_WIDTHS = JSON.parse(File.read(
58
+ File.expand_path("cjk_fallback_widths.json", __dir__)
59
+ )).fetch("widths").freeze
60
+ CJK_FALLBACK_FAMILIES = %w[Carlito Cambria].freeze
61
+ # Carlito ASCII advances measured on Windows per "height:weight:style";
62
+ # they take precedence over the quantized design advances.
63
+ CARLITO_GDI_WIDTHS = JSON.parse(File.read(
64
+ File.expand_path("carlito_gdi_widths.json", __dir__)
65
+ )).fetch("widths").freeze
48
66
  private_constant :CAMBRIA_7_REGULAR_WIDTHS, :CAMBRIA_7_STYLED_WIDTHS,
49
- :CAMBRIA_7_GUILLEMET_PAIR_WIDTH
67
+ :CAMBRIA_7_GUILLEMET_PAIR_WIDTH, :VERTICAL_METRICS,
68
+ :CJK_FALLBACK_WIDTHS, :CJK_FALLBACK_FAMILIES,
69
+ :CARLITO_GDI_WIDTHS
50
70
 
51
71
  # Advance used for codepoints missing from the tables.
52
72
  DEFAULT_ADVANCE = 0.25
@@ -54,11 +74,9 @@ module Ea
54
74
  # Inferred subpixel steps that reproduce EA's near-half-pixel rounding.
55
75
  GDI_SUBPIXELS = 64
56
76
 
57
- # Carlito/Arial have no CJK glyphs; EA's renderer falls back to
58
- # a proportional CJK font whose advances measure ~0.709em at
59
- # the NOMINAL size (not scaled by the per-style factors) —
60
- # fitted from EA-published textLengths (52 mixed-script
61
- # samples).
77
+ # Advance for CJK glyphs with no measured fallback width: ~0.709em
78
+ # at the NOMINAL size (not scaled by the per-style factors),
79
+ # fitted from EA-published textLengths (52 mixed-script samples).
62
80
  CJK_ADVANCE = 0.709
63
81
  CJK_RANGES = [
64
82
  (0x3000..0x303F), # CJK punctuation
@@ -92,6 +110,20 @@ module Ea
92
110
  (size.to_f * 10 / 7).round
93
111
  end
94
112
 
113
+ # GDI text-cell [ascent, descent] in pixels at logical height
114
+ # `height`: the VDMX entry when the font has one (GDI prefers it
115
+ # for hinted fonts), else the rounded usWinAscent/usWinDescent.
116
+ # Nil when the family has no vertical data.
117
+ def gdi_cell_metrics(family, height)
118
+ data = VERTICAL_METRICS[resolve_family(family)]
119
+ return nil unless data && height
120
+
121
+ data.fetch("vdmx", {})[height.to_s] ||
122
+ [data["win_ascent"], data["win_descent"]].map do |units|
123
+ (units * height.to_f / data["units_per_em"]).round
124
+ end
125
+ end
126
+
95
127
  # Quantize before rounding: near-half-pixel Carlito advances
96
128
  # round up in EA's output. The 1/64px step is inferred.
97
129
  def gdi_pixel_advance(advance, height)
@@ -126,13 +158,17 @@ module Ea
126
158
  if GDI_HEIGHT_FAMILIES.include?(resolved)
127
159
  height = logical_height || gdi_logical_height(size_pt)
128
160
  table = table_for(family, weight, style)
161
+ fallback = cjk_fallback_widths(resolved, height, weight, style)
162
+ measured_latin = measured_carlito_widths(resolved, height, weight, style)
129
163
  latin = 0
130
164
  cjk_count = 0
131
165
  text.each_char do |ch|
132
166
  if cjk?(ch.ord)
133
- cjk_count += 1
167
+ measured = fallback[ch]
168
+ measured ? latin += measured : cjk_count += 1
134
169
  else
135
- latin += gdi_pixel_advance(table[cp_key(ch)] || DEFAULT_ADVANCE, height)
170
+ latin += measured_latin[ch] ||
171
+ gdi_pixel_advance(table[cp_key(ch)] || DEFAULT_ADVANCE, height)
136
172
  end
137
173
  end
138
174
  return latin + cjk_count * CJK_ADVANCE * size_pt.to_f
@@ -146,30 +182,52 @@ module Ea
146
182
 
147
183
  private_class_method :advance_text_length
148
184
 
185
+ # Measured fallback advances for `family` at this height and style,
186
+ # keyed by character; empty when the configuration was not measured.
187
+ def cjk_fallback_widths(family, height, weight, style)
188
+ return {} unless CJK_FALLBACK_FAMILIES.include?(family)
189
+
190
+ CJK_FALLBACK_WIDTHS.fetch("#{height}:#{bold?(weight) ? 700 : 400}:#{italic?(style) ? "italic" : "normal"}", {})
191
+ end
192
+ private_class_method :cjk_fallback_widths
193
+
194
+ def measured_carlito_widths(family, height, weight, style)
195
+ return {} unless family == "Carlito"
196
+
197
+ CARLITO_GDI_WIDTHS.fetch("#{height}:#{bold?(weight) ? 700 : 400}:#{italic?(style) ? "italic" : "normal"}", {})
198
+ end
199
+ private_class_method :measured_carlito_widths
200
+
149
201
  def cambria_text_length(text, size_pt, weight, style)
150
202
  return nil unless size_pt.to_f.to_r == 7
151
203
  return nil unless ["", "0", "400", "normal", "700", "bold"].include?(weight.to_s)
152
204
  return nil unless ["", "normal", "italic"].include?(style.to_s)
153
205
 
206
+ fallback = cambria_cjk_widths(weight, style)
154
207
  key = STYLE_KEYS.fetch([bold?(weight), italic?(style)])
155
- return cambria_styled_length(text, key) unless key == :regular
208
+ return cambria_styled_length(text, key, fallback) unless key == :regular
156
209
 
157
- return cambria_ascii_length(text) unless text.start_with?("«") && text.end_with?("»")
210
+ return cambria_ascii_length(text, fallback) unless text.start_with?("«") && text.end_with?("»")
158
211
 
159
- inner_width = cambria_ascii_length(text[1...-1])
212
+ inner_width = cambria_ascii_length(text[1...-1], fallback)
160
213
  inner_width + CAMBRIA_7_GUILLEMET_PAIR_WIDTH if inner_width
161
214
  end
162
215
  private_class_method :cambria_text_length
163
216
 
164
- def cambria_styled_length(text, key)
217
+ def cambria_cjk_widths(weight, style)
218
+ cjk_fallback_widths("Cambria", gdi_logical_height(7), weight, style)
219
+ end
220
+ private_class_method :cambria_cjk_widths
221
+
222
+ def cambria_styled_length(text, key, fallback)
165
223
  table = CAMBRIA_7_STYLED_WIDTHS.fetch(key.to_s)
166
- widths = text.each_char.map { |char| table[char] }
224
+ widths = text.each_char.map { |char| table[char] || fallback[char] }
167
225
  widths.sum unless widths.empty? || widths.include?(nil)
168
226
  end
169
227
  private_class_method :cambria_styled_length
170
228
 
171
- def cambria_ascii_length(text)
172
- widths = text.each_char.map { |char| CAMBRIA_7_REGULAR_WIDTHS[char] }
229
+ def cambria_ascii_length(text, fallback)
230
+ widths = text.each_char.map { |char| CAMBRIA_7_REGULAR_WIDTHS[char] || fallback[char] }
173
231
  widths.sum unless widths.empty? || widths.include?(nil)
174
232
  end
175
233
  private_class_method :cambria_ascii_length
@@ -0,0 +1,154 @@
1
+ {
2
+ "Arial": {
3
+ "units_per_em": 2048,
4
+ "win_ascent": 1854,
5
+ "win_descent": 434,
6
+ "version": "Version 5.01.2x",
7
+ "vdmx": {
8
+ "8": [
9
+ 8,
10
+ 2
11
+ ],
12
+ "9": [
13
+ 9,
14
+ 3
15
+ ],
16
+ "10": [
17
+ 10,
18
+ 3
19
+ ],
20
+ "11": [
21
+ 11,
22
+ 3
23
+ ],
24
+ "12": [
25
+ 12,
26
+ 3
27
+ ],
28
+ "13": [
29
+ 13,
30
+ 3
31
+ ],
32
+ "14": [
33
+ 13,
34
+ 3
35
+ ],
36
+ "15": [
37
+ 14,
38
+ 3
39
+ ],
40
+ "16": [
41
+ 15,
42
+ 3
43
+ ],
44
+ "17": [
45
+ 15,
46
+ 4
47
+ ],
48
+ "18": [
49
+ 17,
50
+ 4
51
+ ],
52
+ "19": [
53
+ 18,
54
+ 4
55
+ ],
56
+ "20": [
57
+ 19,
58
+ 4
59
+ ],
60
+ "21": [
61
+ 19,
62
+ 5
63
+ ],
64
+ "22": [
65
+ 20,
66
+ 5
67
+ ],
68
+ "23": [
69
+ 21,
70
+ 5
71
+ ],
72
+ "24": [
73
+ 21,
74
+ 6
75
+ ],
76
+ "25": [
77
+ 23,
78
+ 5
79
+ ],
80
+ "26": [
81
+ 25,
82
+ 6
83
+ ],
84
+ "27": [
85
+ 26,
86
+ 6
87
+ ],
88
+ "28": [
89
+ 26,
90
+ 6
91
+ ],
92
+ "29": [
93
+ 27,
94
+ 6
95
+ ],
96
+ "30": [
97
+ 28,
98
+ 7
99
+ ],
100
+ "31": [
101
+ 28,
102
+ 7
103
+ ],
104
+ "32": [
105
+ 29,
106
+ 7
107
+ ],
108
+ "33": [
109
+ 31,
110
+ 7
111
+ ],
112
+ "34": [
113
+ 32,
114
+ 7
115
+ ],
116
+ "35": [
117
+ 32,
118
+ 8
119
+ ],
120
+ "36": [
121
+ 33,
122
+ 8
123
+ ],
124
+ "37": [
125
+ 34,
126
+ 8
127
+ ],
128
+ "38": [
129
+ 34,
130
+ 9
131
+ ],
132
+ "39": [
133
+ 35,
134
+ 9
135
+ ],
136
+ "40": [
137
+ 36,
138
+ 9
139
+ ]
140
+ }
141
+ },
142
+ "Carlito": {
143
+ "units_per_em": 2048,
144
+ "win_ascent": 1950,
145
+ "win_descent": 550,
146
+ "version": "Version 1.104"
147
+ },
148
+ "Cambria": {
149
+ "units_per_em": 2048,
150
+ "win_ascent": 2075,
151
+ "win_descent": 455,
152
+ "version": "Version 5.24"
153
+ }
154
+ }
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ea
4
+ module Sources
5
+ module Qea
6
+ class DiagramBuilder
7
+ # Association-class tethers use coincident proxies as the saved
8
+ # association anchor; PDATA1 identifies the attached classifier.
9
+ module AssociationClass
10
+ private
11
+
12
+ def mark_association_class(model, connector, diagram)
13
+ return model unless association_class_connector?(connector) && association_proxies?(connector)
14
+
15
+ attached = placed_association_class(connector, diagram)
16
+ return model unless attached && coincident_anchors?(model)
17
+
18
+ model.style[:association_class_ref] = IdNormalizer.from_guid(attached.ea_guid)
19
+ model
20
+ end
21
+
22
+ def association_class_connector?(connector)
23
+ connector&.connector_type == "Association" && connector.subtype == "Class" &&
24
+ connector.pdata1.to_s.match?(/\A[1-9]\d*\z/)
25
+ end
26
+
27
+ def placed_association_class(connector, diagram)
28
+ attached = database.find_object(connector.pdata1.to_i)
29
+ return unless attached&.object_type == "Class"
30
+ return unless diagram_object_placement(diagram.diagram_id, attached.ea_object_id)
31
+
32
+ attached
33
+ end
34
+
35
+ def association_proxies?(connector)
36
+ proxies = [connector.start_object_id, connector.end_object_id].map { |id| database.find_object(id) }
37
+ return false unless proxies.all? { |object| object&.object_type == "ProxyConnector" }
38
+
39
+ guid = proxies.first.classifier_guid
40
+ !guid.to_s.empty? && guid == proxies.last.classifier_guid
41
+ end
42
+
43
+ def coincident_anchors?(model)
44
+ first = model.source_anchor
45
+ last = model.target_anchor
46
+ first && last && first.x == last.x && first.y == last.y
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -34,13 +34,14 @@ module Ea
34
34
  # A Mode 2 Association with equal SX/EX (vertical EDGE 1/3) or
35
35
  # equal SY/EY (horizontal EDGE 2/4) and no custom Path docks as a
36
36
  # straight line through the middle of the boxes' overlap, moved
37
- # by the shared stored offset. Stored SY counts upward.
37
+ # by the shared stored offset. Empty flush Mode 3 routes facing
38
+ # right use the same row. Stored SY counts upward.
38
39
  def overlap_ray_origins(model, link_row, diagram_row, geom, context)
39
40
  return model if context
40
41
  return model unless overlap_ray_candidate?(model, link_row, geom)
41
42
 
42
43
  source, target = stored_ray_boxes(link_row, diagram_row)
43
- origins = overlap_origins(source, target, geom)
44
+ origins = overlap_origins(source, target, geom, model.style[:mode])
44
45
  return model unless origins && overlap_correction?(source, target, geom)
45
46
 
46
47
  model.source_anchor, model.target_anchor = origins.map do |ox, oy|
@@ -50,9 +51,20 @@ module Ea
50
51
  model.waypoints = port_waypoints(model, [model.source_anchor, model.target_anchor])
51
52
  end
52
53
  model.style[:overlap_ray] = true
54
+ flush_overlap_ports(model, source, target)
53
55
  model
54
56
  end
55
57
 
58
+ def flush_overlap_ports(model, source, target)
59
+ return unless model.style[:mode] == "3"
60
+
61
+ row = model.source_anchor.y
62
+ model.source_port = Ea::Model::Point.new(x: source.x + source.width, y: row)
63
+ model.target_port = Ea::Model::Point.new(x: target.x, y: row)
64
+ model.waypoints = port_waypoints(model, [model.source_port, model.target_port])
65
+ model.style[:flush_overlap_ray] = true
66
+ end
67
+
56
68
  # Aligned, zero-offset EDGE 2 routes already have their legacy docks.
57
69
  def overlap_correction?(source, target, geom)
58
70
  geom[:edge] != 2 || !geom[:sy].zero? ||
@@ -61,7 +73,9 @@ module Ea
61
73
 
62
74
  # Both ray origins share the overlap coordinate on the axis the
63
75
  # offsets move and sit at each box's centre on the other axis.
64
- def overlap_origins(source, target, geom)
76
+ def overlap_origins(source, target, geom, mode = nil)
77
+ return nil if mode == "3" && !source_row_faces_target?(source, target, geom[:edge])
78
+
65
79
  along, across, offset = overlap_axes(geom)
66
80
  coordinate = overlap_ray_coordinate(*box_span(source, along), *box_span(target, along), offset)
67
81
  return nil unless coordinate && disjoint_span?(*box_span(source, across), *box_span(target, across))
@@ -85,11 +99,19 @@ module Ea
85
99
  end
86
100
 
87
101
  def overlap_ray_candidate?(model, link_row, geom)
88
- model.connector_type == "Association" && model.style[:mode] == "2" &&
102
+ model.connector_type == "Association" && overlap_ray_style?(model.style, geom) &&
89
103
  [2, 3].include?(model.waypoints.size) && link_row.path.to_s.empty? && !model.style[:tree] &&
90
104
  model.has_geometry_offsets && uniform_overlap_offsets?(geom)
91
105
  end
92
106
 
107
+ def overlap_ray_style?(style, geom)
108
+ return true if style[:mode] == "2"
109
+
110
+ # All-zero offsets retain the default center ray.
111
+ style[:mode] == "3" && style[:lwidth] == "0" && geom[:edge] == 2 &&
112
+ geom.values_at(:sx, :sy, :ex, :ey).any? { |offset| offset.to_i.nonzero? }
113
+ end
114
+
93
115
  def uniform_overlap_offsets?(geom)
94
116
  return false unless geom.values_at(:sx, :sy, :ex, :ey).all?
95
117