Допустим есть схема:
Вложение:
			
			c++.png [ 20.08 КБ | Просмотров: 12785 ]
		
		
	 Эта схема генерирует текст на С++:
Код:
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. Ежели кто подобное предлагал раньше, на первенство не претендую : )