Допустим есть схема:
Вложение:
c++.png [ 20.08 КБ | Просмотров: 10223 ]
Эта схема генерирует текст на С++:
Код:
QString ClassA::function1(QString _s)
{
QString s = "abcd" + _s;
return s;
}
Само описание схемы в формате fbpro:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<fbstruct version_format="0.1" struct="schema" kind="sbs" start="obj{405f8b34-ec17-4d5a-90df-696219e34477}" start_pos="-157.248 -47.9311" sqty_objv="3">
<item name="vline">
<un v="obj{405f8b34-ec17-4d5a-90df-696219e34477}"/>
<vl_first v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/>
</item>
<item name="begin">
<un v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/>
<kind_object v="vertical"/>
<bound v="-50 0 100 56"/>
<text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">function1</p></body></html>]]></text_icon>
<text_icon_up><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ClassA</p></body></html>]]></text_icon_up>
<vline v="obj{405f8b34-ec17-4d5a-90df-696219e34477}"/>
<below v="obj{e7c1668a-0860-47ff-aee3-69ec613b88ee}"/>
<left v="obj{94d9212a-174e-434f-baff-14d80e191fe7}"/>
<right v="obj{5f3201e7-688a-4d91-93cb-667fabff7f5c}"/>
<text_tl><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">C++</p></body></html>]]></text_tl>
</item>
<item name="impact">
<un v="obj{94d9212a-174e-434f-baff-14d80e191fe7}"/>
<kind_object v="left"/>
<bound v="0 0 60 28"/>
<text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">QString</p></body></html>]]></text_icon>
<right_obj v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/>
</item>
<item name="param">
<un v="obj{5f3201e7-688a-4d91-93cb-667fabff7f5c}"/>
<kind_object v="right"/>
<bound v="0 0 80 28"/>
<text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">QString _s</p></body></html>]]></text_icon>
<left_obj v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/>
</item>
<item name="action">
<un v="obj{e7c1668a-0860-47ff-aee3-69ec613b88ee}"/>
<kind_object v="vertical"/>
<bound v="-78.3182 0 156.636 28"/>
<text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">QString s = "abcd" + _s;</p></body></html>]]></text_icon>
<vline v="obj{405f8b34-ec17-4d5a-90df-696219e34477}"/>
<above v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/>
<below v="obj{166280cd-de4a-49b3-967d-3f88b2787b4e}"/>
</item>
<item name="end">
<un v="obj{166280cd-de4a-49b3-967d-3f88b2787b4e}"/>
<kind_object v="vertical"/>
<bound v="-40 0 80 28"/>
<text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">return s</p></body></html>]]></text_icon>
<vline v="obj{405f8b34-ec17-4d5a-90df-696219e34477}"/>
<above v="obj{e7c1668a-0860-47ff-aee3-69ec613b88ee}"/>
<hidden v="no"/>
</item>
</fbstruct>
Если утеряется дракон-схема, то восстановить её автоматически будет затруднительно, а её оформление - невозможно.
Решить эту проблему можно следующим образом: в конце текста на ЯП вставить закоментированное (в стиле используемого ЯП) описание самой схемы. Тогда, для её восстановления, достаточно передать описание схемы в дракон-редактор и можно редактировать её содержание.
Код:
//.fabula
QString ClassA::function1(QString _s)
{
QString s = "abcd" + _s;
return s;
}
//.fabula
//<?xml version="1.0" encoding="UTF-8"?>
//<fbstruct version_format="0.1" struct="schema" kind="sbs" start="obj{405f8b34-ec17-4d5a-90df-696219e34477}" start_pos="-157.248 -47.9311" sqty_objv="3">
// <item name="vline">
// <un v="obj{405f8b34-ec17-4d5a-90df-696219e34477}"/>
// <vl_first v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/>
// </item>
// <item name="begin">
// <un v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/>
// <kind_object v="vertical"/>
// <bound v="-50 0 100 56"/>
// <text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
//<html><head><meta name="qrichtext" content="1" /><style type="text/css">
//p, li { white-space: pre-wrap; }
//</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;">
//<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">function1</p></body></html>]]></text_icon>
// <text_icon_up><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
//<html><head><meta name="qrichtext" content="1" /><style type="text/css">
//p, li { white-space: pre-wrap; }
//</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;">
//<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ClassA</p></body></html>]]></text_icon_up>
// <vline v="obj{405f8b34-ec17-4d5a-90df-696219e34477}"/>
// <below v="obj{e7c1668a-0860-47ff-aee3-69ec613b88ee}"/>
// <left v="obj{94d9212a-174e-434f-baff-14d80e191fe7}"/>
// <right v="obj{5f3201e7-688a-4d91-93cb-667fabff7f5c}"/>
// <text_tl><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
//<html><head><meta name="qrichtext" content="1" /><style type="text/css">
//p, li { white-space: pre-wrap; }
//</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;">
//<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">C++</p></body></html>]]></text_tl>
// </item>
// <item name="impact">
// <un v="obj{94d9212a-174e-434f-baff-14d80e191fe7}"/>
// <kind_object v="left"/>
// <bound v="0 0 60 28"/>
// <text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
//<html><head><meta name="qrichtext" content="1" /><style type="text/css">
//p, li { white-space: pre-wrap; }
//</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;">
//<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">QString</p></body></html>]]></text_icon>
// <right_obj v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/>
// </item>
// <item name="param">
// <un v="obj{5f3201e7-688a-4d91-93cb-667fabff7f5c}"/>
// <kind_object v="right"/>
// <bound v="0 0 80 28"/>
// <text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
//<html><head><meta name="qrichtext" content="1" /><style type="text/css">
//p, li { white-space: pre-wrap; }
//</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;">
//<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">QString _s</p></body></html>]]></text_icon>
// <left_obj v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/>
// </item>
// <item name="action">
// <un v="obj{e7c1668a-0860-47ff-aee3-69ec613b88ee}"/>
// <kind_object v="vertical"/>
// <bound v="-78.3182 0 156.636 28"/>
// <text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
//<html><head><meta name="qrichtext" content="1" /><style type="text/css">
//p, li { white-space: pre-wrap; }
//</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;">
//<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">QString s = "abcd" + _s;</p></body></html>]]></text_icon>
// <vline v="obj{405f8b34-ec17-4d5a-90df-696219e34477}"/>
// <above v="obj{87ada4c6-62a9-458b-a22f-32a8e3de6a19}"/>
// <below v="obj{166280cd-de4a-49b3-967d-3f88b2787b4e}"/>
// </item>
// <item name="end">
// <un v="obj{166280cd-de4a-49b3-967d-3f88b2787b4e}"/>
// <kind_object v="vertical"/>
// <bound v="-40 0 80 28"/>
// <text_icon><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
//<html><head><meta name="qrichtext" content="1" /><style type="text/css">
//p, li { white-space: pre-wrap; }
//</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;">
//<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">return s</p></body></html>]]></text_icon>
// <vline v="obj{405f8b34-ec17-4d5a-90df-696219e34477}"/>
// <above v="obj{e7c1668a-0860-47ff-aee3-69ec613b88ee}"/>
// <hidden v="no"/>
// </item>
//</fbstruct>
Из плюсов:
- простота реализации практически для любого ЯП и текстовых форматов описания дракон-схем. Например, для ИС Дракон подобная реализация элементарна;
- использование для декодирования описания схемы уже существующих функций;
Из минусов:
- сильно увеличивается объём текста на ЯП;
- нельзя редактировать текст программы в родном редакторе ЯП;
Что плохого и что хорошего ещё может быть в такой реализации?
P.S. Ежели кто подобное предлагал раньше, на первенство не претендую : )