Files
logseq/assets/MLE23_paper_2_1691614458443_0.edn
T
2025-06-05 22:07:12 +02:00

832 lines
44 KiB
Clojure
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{:highlights [{:id #uuid "64d5ee7b-088e-4206-b0ba-e9eb449eb080",
:page 1,
:position {:bounding {:x1 135.02676391601562,
:y1 60.63541793823242,
:x2 606.0177001953125,
:y2 92.63542175292969,
:width 738,
:height 955.0588235294117},
:rects ({:x1 135.02676391601562,
:y1 60.63541793823242,
:x2 606.0177001953125,
:y2 92.63542175292969,
:width 738,
:height 955.0588235294117}),
:page 1},
:content {:text "apid Prototyping Language Workbench"},
:properties {:color "green"}}
{:id #uuid "64d5f222-1145-4bf7-8e85-e9c0f0e49d81",
:page 1,
:position {:bounding {:x1 0,
:y1 109.33333587646484,
:x2 440.03485107421875,
:y2 378.61981201171875,
:width 897.6,
:height 1161.6000000000001},
:rects ({:x1 0,
:y1 109.33333587646484,
:x2 0,
:y2 130.6666717529297,
:width 897.6,
:height 1161.6000000000001}
{:x1 0,
:y1 125.33333587646484,
:x2 0,
:y2 146.6666717529297,
:width 897.6,
:height 1161.6000000000001}
{:x1 0,
:y1 141.33334350585938,
:x2 0,
:y2 162.6666717529297,
:width 897.6,
:height 1161.6000000000001}
{:x1 144.33636474609375,
:y1 320.11981201171875,
:x2 440.0334167480469,
:y2 334.7864685058594,
:width 897.6,
:height 1161.6000000000001}
{:x1 71.8125,
:y1 334.72918701171875,
:x2 440.033447265625,
:y2 349.3958435058594,
:width 897.6,
:height 1161.6000000000001}
{:x1 71.8125,
:y1 349.34375,
:x2 440.03485107421875,
:y2 364.01043701171875,
:width 897.6,
:height 1161.6000000000001}
{:x1 71.8125,
:y1 363.953125,
:x2 112.25776672363281,
:y2 378.61981201171875,
:width 897.6,
:height 1161.6000000000001}),
:page 1},
:content {:text "Metamodel-based DSL development in language workbenches like Xtext allows language engineers to focus more on metamodels and domain concepts rather than grammar details."},
:properties {:color "green"}}
{:id #uuid "64d5f235-7b01-4cfc-9caf-a8186d797fe9",
:page 1,
:position {:bounding {:x1 84.86979675292969,
:y1 533.921875,
:x2 221.79092407226562,
:y2 551.2552185058594,
:width 1060.8,
:height 1372.8},
:rects ({:x1 84.86979675292969,
:y1 533.921875,
:x2 221.79092407226562,
:y2 551.2552185058594,
:width 1060.8,
:height 1372.8}),
:page 1},
:content {:text "GrammarOptimizer"},
:properties {:color "green"}}
{:id #uuid "64d5f24a-954c-4359-b5b4-54612557795e",
:page 1,
:position {:bounding {:x1 0,
:y1 301.3333435058594,
:x2 520.0435638427734,
:y2 672.1354370117188,
:width 1060.8,
:height 1372.8},
:rects ({:x1 0,
:y1 301.3333435058594,
:x2 0,
:y2 322.6666717529297,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 317.3333435058594,
:x2 0,
:y2 338.6666717529297,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 333.3333435058594,
:x2 0,
:y2 354.6666717529297,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 349.3333435058594,
:x2 0,
:y2 370.6666717529297,
:width 1060.8,
:height 1372.8}
{:x1 283.21331787109375,
:y1 585.7291870117188,
:x2 520.039794921875,
:y2 603.0625,
:width 1060.8,
:height 1372.8}
{:x1 84.86979675292969,
:y1 602.9948120117188,
:x2 520.0396575927734,
:y2 620.328125,
:width 1060.8,
:height 1372.8}
{:x1 84.86979675292969,
:y1 620.265625,
:x2 520.0422210693359,
:y2 637.5989685058594,
:width 1060.8,
:height 1372.8}
{:x1 84.86979675292969,
:y1 637.53125,
:x2 520.0435638427734,
:y2 654.8645935058594,
:width 1060.8,
:height 1372.8}
{:x1 84.86979675292969,
:y1 654.8020935058594,
:x2 149.30557250976562,
:y2 672.1354370117188,
:width 1060.8,
:height 1372.8}),
:page 1},
:content {:text " In this paper, we present our vision for and current progress towards a language workbench that integrates GrammarOptimizers grammar optimization rules to support rapid prototyping and evolution of metamodel-based language"},
:properties {:color "purple"}}
{:id #uuid "64d5f2a6-5c44-4c2b-a567-dba7838e95c7",
:page 1,
:position {:bounding {:x1 0,
:y1 413.33333587646484,
:x2 520.0439910888672,
:y2 741.2083435058594,
:width 1060.8,
:height 1372.8},
:rects ({:x1 0,
:y1 413.33333587646484,
:x2 0,
:y2 434.6666717529297,
:width 1060.8,
:height 1372.8}
{:x1 176.86351013183594,
:y1 706.609375,
:x2 520.0439910888672,
:y2 723.9427185058594,
:width 1060.8,
:height 1372.8}
{:x1 84.86979675292969,
:y1 723.875,
:x2 473.63340759277344,
:y2 741.2083435058594,
:width 1060.8,
:height 1372.8}),
:page 1},
:content {:text "inference of a grammar based on examples from model instances and offers a selection of language styles."},
:properties {:color "green"}}
{:id #uuid "64d5f3e0-fcc7-49e5-a17c-e026e0c9cc4a",
:page 1,
:position {:bounding {:x1 0,
:y1 765.3333358764648,
:x2 519.82373046875,
:y2 1245.7083740234375,
:width 1060.8,
:height 1372.8},
:rects ({:x1 0,
:y1 765.3333358764648,
:x2 0,
:y2 786.6666717529297,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 781.3333358764648,
:x2 0,
:y2 802.6666717529297,
:width 1060.8,
:height 1372.8}
{:x1 162.40176391601562,
:y1 1184.9270935058594,
:x2 519.570556640625,
:y2 1204.2604370117188,
:width 1060.8,
:height 1372.8}
{:x1 84.86979675292969,
:y1 1205.6510620117188,
:x2 519.82373046875,
:y2 1224.984375,
:width 1060.8,
:height 1372.8}
{:x1 84.86979675292969,
:y1 1226.375,
:x2 501.65513610839844,
:y2 1245.7083740234375,
:width 1060.8,
:height 1372.8}),
:page 1},
:content {:text "We refer to this DSL development approach as metamodel-based development. To our knowledge, the only available workbench supporting this approach is Xtext [3]."},
:properties {:color "green"}}
{:id #uuid "64d5f443-aa8e-4a45-90aa-9882e48eba1c",
:page 1,
:position {:bounding {:x1 0,
:y1 846.4889831542969,
:x2 1201.231689453125,
:y2 1163.3778991699219,
:width 1305.6,
:height 1689.6},
:rects ({:x1 759.4432830810547,
:y1 846.4889831542969,
:x2 1201.1446533203125,
:y2 870.3111267089844,
:width 1305.6,
:height 1689.6}
{:x1 665.550048828125,
:y1 871.9944763183594,
:x2 1201.231689453125,
:y2 895.8167419433594,
:width 1305.6,
:height 1689.6}
{:x1 665.550048828125,
:y1 897.5000915527344,
:x2 1195.3443603515625,
:y2 921.3222961425781,
:width 1305.6,
:height 1689.6}
{:x1 0,
:y1 1123.5556335449219,
:x2 0,
:y2 1146.3112487792969,
:width 1305.6,
:height 1689.6}
{:x1 0,
:y1 1140.6223449707031,
:x2 0,
:y2 1163.3778991699219,
:width 1305.6,
:height 1689.6}),
:page 1},
:content {:text "Some of these elements are necessary, but the grammars typically become lengthy and rely on deep nesting, making it cumbersome to write code in the resulting DSL"},
:properties {:color "green"}}
{:id #uuid "64d5f452-f5a7-4718-9fe0-2ebe80853d40",
:page 1,
:position {:bounding {:x1 0,
:y1 923.0001220703125,
:x2 1201.2315521240234,
:y2 1214.5779418945312,
:width 1305.6,
:height 1689.6},
:rects ({:x1 781.4776000976562,
:y1 923.0001220703125,
:x2 1201.2300415039062,
:y2 946.8222961425781,
:width 1305.6,
:height 1689.6}
{:x1 665.5500946044922,
:y1 948.5056457519531,
:x2 1201.2315521240234,
:y2 972.3278198242188,
:width 1305.6,
:height 1689.6}
{:x1 665.5500946044922,
:y1 974.0111694335938,
:x2 882.2230224609375,
:y2 997.8334350585938,
:width 1305.6,
:height 1689.6}
{:x1 0,
:y1 1174.7556762695312,
:x2 0,
:y2 1197.5111694335938,
:width 1305.6,
:height 1689.6}
{:x1 0,
:y1 1191.8223266601562,
:x2 0,
:y2 1214.5779418945312,
:width 1305.6,
:height 1689.6}),
:page 1},
:content {:text "he generated grammar often requires manual adjustments to be effectively used—we call this adjustment grammar optimization."},
:properties {:color "green"}}
{:id #uuid "64d5f476-9a2f-45b0-a9dc-9d1f16f47a28",
:page 1,
:position {:bounding {:x1 0,
:y1 1104.4166870117188,
:x2 1126.1535034179688,
:y2 1298.6666870117188,
:width 1224,
:height 1584},
:rects ({:x1 815.40625,
:y1 1104.4166870117188,
:x2 1126.1123046875,
:y2 1126.75,
:width 1224,
:height 1584}
{:x1 623.953125,
:y1 1128.328125,
:x2 1126.1535034179688,
:y2 1150.6614990234375,
:width 1224,
:height 1584}
{:x1 623.953125,
:y1 1152.2396240234375,
:x2 1066.6900634765625,
:y2 1174.5729370117188,
:width 1224,
:height 1584}
{:x1 0,
:y1 1261.3333740234375,
:x2 0,
:y2 1282.6666870117188,
:width 1224,
:height 1584}
{:x1 0,
:y1 1277.3333740234375,
:x2 0,
:y2 1298.6666870117188,
:width 1224,
:height 1584}),
:page 1},
:content {:text "Therefore, we argue that there is today no language workbench that allows for metamodel-based DSL development, while also supporting rapid prototyping."},
:properties {:color "blue"}}
{:id #uuid "64d5f4e7-f553-48f9-a1b3-028b634ef241",
:page 2,
:position {:bounding {:x1 0,
:y1 205.33334350585938,
:x2 600.130859375,
:y2 528.9896240234375,
:width 1224,
:height 1584},
:rects ({:x1 0,
:y1 205.33334350585938,
:x2 0,
:y2 226.66668701171875,
:width 1224,
:height 1584}
{:x1 0,
:y1 221.33334350585938,
:x2 0,
:y2 242.66668701171875,
:width 1224,
:height 1584}
{:x1 0,
:y1 237.33334350585938,
:x2 0,
:y2 258.66668701171875,
:width 1224,
:height 1584}
{:x1 0,
:y1 253.33334350585938,
:x2 0,
:y2 274.66668701171875,
:width 1224,
:height 1584}
{:x1 504.6846923828125,
:y1 411.015625,
:x2 600.130859375,
:y2 433.3489685058594,
:width 1224,
:height 1584}
{:x1 97.92708587646484,
:y1 434.9270935058594,
:x2 600.130485534668,
:y2 457.26043701171875,
:width 1224,
:height 1584}
{:x1 97.92708587646484,
:y1 458.83856201171875,
:x2 600.130729675293,
:y2 481.171875,
:width 1224,
:height 1584}
{:x1 97.92708587646484,
:y1 482.75,
:x2 600.05078125,
:y2 505.0833740234375,
:width 1224,
:height 1584}
{:x1 97.92708587646484,
:y1 506.65625,
:x2 263.81053924560547,
:y2 528.9896240234375,
:width 1224,
:height 1584}),
:page 2},
:content {:text " Our goal is for the envisioned language workbench to facilitate the rapid prototyping of languages in iterative cycles of engineering, reducing manual work, shortening development time, and improving efficiency"},
:properties {:color "blue"}}
{:id #uuid "64d5f599-feb8-4740-bb16-e87e2a4c88c6",
:page 2,
:position {:bounding {:x1 163.08726501464844,
:y1 769.4166870117188,
:x2 320.2217102050781,
:y2 791.75,
:width 1224,
:height 1584},
:rects ({:x1 163.08726501464844,
:y1 769.4166870117188,
:x2 320.2217102050781,
:y2 791.75,
:width 1224,
:height 1584}),
:page 2},
:content {:text "GrammarOptimizer"},
:properties {:color "green"}}
{:id #uuid "64d5f5c0-9ad1-4f9e-b24d-e6de57a0be1e",
:page 2,
:position {:bounding {:x1 342.526123046875,
:y1 1032.4323120117188,
:x2 594.6958618164062,
:y2 1054.765625,
:width 1224,
:height 1584},
:rects ({:x1 342.526123046875,
:y1 1032.4323120117188,
:x2 594.6958618164062,
:y2 1054.765625,
:width 1224,
:height 1584}),
:page 2},
:content {:text " 31 lines of optimization rules"},
:properties {:color "green"}}
{:id #uuid "64d698b2-6fbc-434d-9c65-b3341987bd4e",
:page 2,
:position {:bounding {:x1 240.23046875,
:y1 888.96875,
:x2 556.5859375,
:y2 911.6354064941406,
:width 1224,
:height 1584},
:rects ({:x1 240.23046875,
:y1 888.96875,
:x2 556.5859375,
:y2 911.6354064941406,
:width 1224,
:height 1584}),
:page 2},
:content {:text " removing the keyword shortName"},
:properties {:color "green"}}
{:id #uuid "64d69905-e18e-4e09-a94a-8b18fa8f4e7b",
:page 2,
:position {:bounding {:x1 0,
:y1 733.3333320617676,
:x2 600.1201171875,
:y2 1270.2135620117188,
:width 1224,
:height 1584},
:rects ({:x1 0,
:y1 733.3333320617676,
:x2 0,
:y2 754.6666660308838,
:width 1224,
:height 1584}
{:x1 389.4239196777344,
:y1 1223.96875,
:x2 600.1201171875,
:y2 1246.3020935058594,
:width 1224,
:height 1584}
{:x1 97.92708587646484,
:y1 1247.8802185058594,
:x2 382.31517791748047,
:y2 1270.2135620117188,
:width 1224,
:height 1584}),
:page 2},
:content {:text "GrammarOptimizer leads to a substantial manual overhead"},
:properties {:color "green"}}
{:id #uuid "64d734d2-3cf4-49ae-add6-893337469a4a",
:page 2,
:position {:bounding {:x1 716.2610778808594,
:y1 421.0677185058594,
:x2 783.0171813964844,
:y2 440.40106201171875,
:width 1060.8,
:height 1372.8},
:rects ({:x1 716.2610778808594,
:y1 421.0677185058594,
:x2 783.0171813964844,
:y2 440.40106201171875,
:width 1060.8,
:height 1372.8}),
:page 2},
:content {:text "MetaEdit"},
:properties {:color "green"}}
{:id #uuid "64d734d9-2fd2-443c-b04d-912a84f5286a",
:page 2,
:position {:bounding {:x1 0,
:y1 441.79168701171875,
:x2 976.0991516113281,
:y2 1170.666748046875,
:width 1060.8,
:height 1372.8},
:rects ({:x1 904.0798645019531,
:y1 441.79168701171875,
:x2 975.8096008300781,
:y2 461.125,
:width 1060.8,
:height 1372.8}
{:x1 540.7604370117188,
:y1 462.515625,
:x2 976.0991516113281,
:y2 481.8489685058594,
:width 1060.8,
:height 1372.8}
{:x1 540.7604370117188,
:y1 483.234375,
:x2 636.0856323242188,
:y2 502.5677185058594,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 1133.3333740234375,
:x2 0,
:y2 1154.666748046875,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 1149.3333740234375,
:x2 0,
:y2 1170.666748046875,
:width 1060.8,
:height 1372.8}),
:page 2},
:content {:text "MetaEdit+ has evolved into one of the most comprehensive language workbenche"},
:properties {:color "green"}}
{:id #uuid "64d734ea-99bc-4513-af22-2cd22ba22a30",
:page 2,
:position {:bounding {:x1 0,
:y1 483.234375,
:x2 976.1004333496094,
:y2 1266.6666870117188,
:width 1060.8,
:height 1372.8},
:rects ({:x1 703.8787536621094,
:y1 483.234375,
:x2 976.0962829589844,
:y2 502.5677185058594,
:width 1060.8,
:height 1372.8}
{:x1 540.7604370117188,
:y1 503.9583435058594,
:x2 976.0996398925781,
:y2 523.2916870117188,
:width 1060.8,
:height 1372.8}
{:x1 540.7604370117188,
:y1 524.6823120117188,
:x2 976.0991516113281,
:y2 544.015625,
:width 1060.8,
:height 1372.8}
{:x1 540.7604370117188,
:y1 545.40625,
:x2 976.0996398925781,
:y2 564.7395935058594,
:width 1060.8,
:height 1372.8}
{:x1 540.7604370117188,
:y1 566.125,
:x2 976.0957336425781,
:y2 585.4583435058594,
:width 1060.8,
:height 1372.8}
{:x1 540.7604370117188,
:y1 586.8489685058594,
:x2 976.1004333496094,
:y2 606.1823120117188,
:width 1060.8,
:height 1372.8}
{:x1 540.7604370117188,
:y1 607.5677185058594,
:x2 917.0052185058594,
:y2 626.9010620117188,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 1165.3333740234375,
:x2 0,
:y2 1186.6666870117188,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 1181.3333740234375,
:x2 0,
:y2 1202.6666870117188,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 1197.3333740234375,
:x2 0,
:y2 1218.6666870117188,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 1213.3333740234375,
:x2 0,
:y2 1234.6666870117188,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 1229.3333740234375,
:x2 0,
:y2 1250.6666870117188,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 1245.3333740234375,
:x2 0,
:y2 1266.6666870117188,
:width 1060.8,
:height 1372.8}),
:page 2},
:content {:text "Erdweg listed a total of 34 features covering various aspects, including notation, semantics, validation, testing, composability, editing mode, syntactic services, and semantic services. From their report, it can be observed that MetaEdit+ now covers the majority of these features, even supporting symbolic notation, which is not typically supported by many other language workbenches. "},
:properties {:color "purple"}}
{:id #uuid "64d73507-9f97-460a-a8bc-480c89e31b51",
:page 2,
:position {:bounding {:x1 0,
:y1 711.1823120117188,
:x2 976.0983581542969,
:y2 1362.666748046875,
:width 1060.8,
:height 1372.8},
:rects ({:x1 904.0171813964844,
:y1 711.1823120117188,
:x2 976.0983581542969,
:y2 730.515625,
:width 1060.8,
:height 1372.8}
{:x1 540.7604370117188,
:y1 731.9010620117188,
:x2 912.4637145996094,
:y2 751.234375,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 1341.3333740234375,
:x2 0,
:y2 1362.666748046875,
:width 1060.8,
:height 1372.8}),
:page 2},
:content {:text "xceptions of graphical notation, free form, and live translation."},
:properties {:color "green"}}
{:id #uuid "64d73517-c1fa-4f12-96ed-99c2348cd55f",
:page 2,
:position {:bounding {:x1 0,
:y1 794.0729370117188,
:x2 976.0994567871094,
:y2 1426.666748046875,
:width 1060.8,
:height 1372.8},
:rects ({:x1 834.9768981933594,
:y1 794.0729370117188,
:x2 976.0994567871094,
:y2 813.40625,
:width 1060.8,
:height 1372.8}
{:x1 540.7604370117188,
:y1 814.7916870117188,
:x2 905.6925964355469,
:y2 834.125,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 1405.3333740234375,
:x2 0,
:y2 1426.666748046875,
:width 1060.8,
:height 1372.8}),
:page 2},
:content {:text " it does not support DSL debugging, projectional editing, or quick fixes"},
:properties {:color "purple"}}
{:id #uuid "64d735c6-9c25-4c7a-9382-71891d64fb0d",
:page 3,
:position {:bounding {:x1 0,
:y1 205.33334350585938,
:x2 520.2086029052734,
:y2 458.5208435058594,
:width 1060.8,
:height 1372.8},
:rects ({:x1 0,
:y1 205.33334350585938,
:x2 0,
:y2 226.6666717529297,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 221.33334350585938,
:x2 0,
:y2 242.6666717529297,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 237.33334350585938,
:x2 0,
:y2 258.66668701171875,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 253.33334350585938,
:x2 0,
:y2 274.66668701171875,
:width 1060.8,
:height 1372.8}
{:x1 84.86979675292969,
:y1 356.296875,
:x2 520.2047576904297,
:y2 375.6302185058594,
:width 1060.8,
:height 1372.8}
{:x1 84.86979675292969,
:y1 377.015625,
:x2 519.6174774169922,
:y2 396.3489685058594,
:width 1060.8,
:height 1372.8}
{:x1 84.86979675292969,
:y1 397.7395935058594,
:x2 520.2086029052734,
:y2 417.07293701171875,
:width 1060.8,
:height 1372.8}
{:x1 84.86979675292969,
:y1 418.46356201171875,
:x2 520.2073822021484,
:y2 437.796875,
:width 1060.8,
:height 1372.8}
{:x1 84.86979675292969,
:y1 439.1875,
:x2 277.1968688964844,
:y2 458.5208435058594,
:width 1060.8,
:height 1372.8}),
:page 3},
:content {:text "If the language engineer finds that the grammar does not reach the desired state while verifying models in the DSL editor, she will iterate back to the manual modification of the grammar. This iterative process continues until the language engineer is satisfied with the grammar."},
:properties {:color "purple"}}
{:id #uuid "64d736b3-ed21-427e-a0ec-ce5135da2804",
:page 3,
:position {:bounding {:x1 0,
:y1 429.33333587646484,
:x2 520.2063903808594,
:y2 706.6666870117188,
:width 1060.8,
:height 1372.8},
:rects ({:x1 0,
:y1 429.33333587646484,
:x2 0,
:y2 450.6666717529297,
:width 1060.8,
:height 1372.8}
{:x1 388.69110107421875,
:y1 666.6145935058594,
:x2 520.2063903808594,
:y2 685.9479370117188,
:width 1060.8,
:height 1372.8}
{:x1 84.86979293823242,
:y1 687.3333435058594,
:x2 375.1027946472168,
:y2 706.6666870117188,
:width 1060.8,
:height 1372.8}),
:page 3},
:content {:text "rammarOptimizer can run as a standalone Eclipse plugin"},
:properties {:color "green"}}
{:id #uuid "64d737e9-514e-4625-862e-3a7eff7f91ca",
:page 3,
:position {:bounding {:x1 0,
:y1 338.1822967529297,
:x2 976.09716796875,
:y2 1090.6666870117188,
:width 1060.8,
:height 1372.8},
:rects ({:x1 594.6123657226562,
:y1 338.1822967529297,
:x2 976.09716796875,
:y2 357.515625,
:width 1060.8,
:height 1372.8}
{:x1 540.7604217529297,
:y1 358.9010467529297,
:x2 976.0961151123047,
:y2 378.234375,
:width 1060.8,
:height 1372.8}
{:x1 540.7604217529297,
:y1 379.625,
:x2 638.62451171875,
:y2 398.9583435058594,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 1053.3333740234375,
:x2 0,
:y2 1074.6666870117188,
:width 1060.8,
:height 1372.8}
{:x1 0,
:y1 1069.3333740234375,
:x2 0,
:y2 1090.6666870117188,
:width 1060.8,
:height 1372.8}),
:page 3},
:content {:text "configure optimization rules through a graphical user interface, integrated into the development environment they are familiar with. "},
:properties {:color "green"}}],
:extra {:page 5}}