Commit 5c2156c9 authored by Victor Yacovlev's avatar Victor Yacovlev

Documentation progress

parent 0029d630
This diff is collapsed.
......@@ -11,12 +11,16 @@ namespace DocBookViewer {
static const QString MainFontFamily =
"Droid Serif,PT Serif,Garamond,Times New Roman,serif";
static const QString GuiElementsFontFamily =
"Droid Sans, PT Sans, Tahoma, Arial, sans-serif";
#ifdef Q_OS_MAC
static const QString MainFontSize = "14pt";
static const QString GuiElementsFontSize = "16pt";
static const QString CodeFontSize = "14pt";
#else
static const QString MainFontSize = "12pt";
static const QString GuiElementsFontSize = "14pt";
static const QString CodeFontSize = "12pt";
#endif
......@@ -149,6 +153,14 @@ QString ContentView::wrapHTML(const QString &body) const
" font-size: " + MainFontSize + ";"
" margin: 10;"
"}"
".guimenu {"
" font-family: " + GuiElementsFontFamily + ";"
" font-size: " + GuiElementsFontSize + ";"
"}"
".guibutton {"
" font-family: " + GuiElementsFontFamily + ";"
" font-size: " + GuiElementsFontSize + ";"
"}"
".code {"
" font-family: " + CodeFontFamily + ";"
" font-size: " + CodeFontSize + ";"
......@@ -158,6 +170,7 @@ QString ContentView::wrapHTML(const QString &body) const
" margin: 30;"
"}"
"kbd {"
" font-family: " + GuiElementsFontFamily + ";"
" background-color: lightgray;"
"}"
"</style></head>"
......@@ -309,6 +322,15 @@ QString ContentView::renderElement(ModelPtr data) const
else if (data == DocBookModel::ListOfFunctions) {
return renderListOfFunctions(data);
}
else if (data == DocBookModel::GuiMenu) {
return renderGuiMenu(data);
}
else if (data == DocBookModel::GuiMenuItem) {
return renderGuiMenuItem(data);
}
else if (data == DocBookModel::GuiButton) {
return renderGuiButton(data);
}
else {
return "";
}
......@@ -323,7 +345,7 @@ QString ContentView::renderKeyCombo(ModelPtr data) const
}
result += renderElement(data->children().at(i));
}
return result;
return " " + result + " ";
}
QString ContentView::renderKeySym(ModelPtr data) const
......@@ -345,6 +367,37 @@ QString ContentView::renderKeySym(ModelPtr data) const
return result;
}
QString ContentView::renderGuiMenu(ModelPtr data) const
{
QString result;
foreach (ModelPtr child, data->children()) {
QString txt = child->text();
txt.replace(" ", "&nbsp;");
if (result.length() > 0)
result += "&nbsp;";
result += txt;
}
return " <span class='guimenu'>" + result + "</span> ";
}
QString ContentView::renderGuiButton(ModelPtr data) const
{
QString result;
foreach (ModelPtr child, data->children()) {
QString txt = child->text();
txt.replace(" ", "&nbsp;");
if (result.length() > 0)
result += "&nbsp;";
result += txt;
}
return " <span class='guibutton'>" + result + "</span> ";
}
QString ContentView::renderGuiMenuItem(ModelPtr data) const
{
return renderGuiMenu(data); // At present it uses the same appearance
}
QString ContentView::programTextForLanguage(const QString &source,
const QString &language)
{
......
......@@ -57,6 +57,9 @@ private:
QString renderCode(ModelPtr data) const;
QString renderKeyCombo(ModelPtr data) const;
QString renderKeySym(ModelPtr data) const;
QString renderGuiMenu(ModelPtr data) const;
QString renderGuiMenuItem(ModelPtr data) const;
QString renderGuiButton(ModelPtr data) const;
QString renderSubscript(ModelPtr data) const;
QString renderSuperscript(ModelPtr data) const;
static QString& wrapInlineElement(ModelPtr data, QString & result,
......
......@@ -234,6 +234,15 @@ bool DocBookFactory::startElement(
else if (element == "package") {
model = new DocBookModel(root_, DocBookModel::Package);
}
else if (element == "guimenu") {
model = new DocBookModel(root_, DocBookModel::GuiMenu);
}
else if (element == "guimenuitem") {
model = new DocBookModel(root_, DocBookModel::GuiMenuItem);
}
else if (element == "guibutton") {
model = new DocBookModel(root_, DocBookModel::GuiButton);
}
else if (element == "xref") {
model = new DocBookModel(root_, DocBookModel::Xref);
model->xrefLinkEnd_ = atts.value("linkend");
......@@ -294,7 +303,7 @@ bool DocBookFactory::startElement(
}
else if (element == "msup" && MathML.indexIn(namespaceURI) != -1) {
model = new DocBookModel(root_, DocBookModel::MathML_MSup);
}
}
else {
model = new DocBookModel(root_, DocBookModel::Unknown);
buffer_.clear();
......
......@@ -89,6 +89,10 @@ public:
MathML_MText,
MathML_MSup,
GuiMenu,
GuiMenuItem,
GuiButton,
// virtual entries
ListOfExamples,
ListOfTables,
......
......@@ -212,7 +212,8 @@ void SidePanel::createNavigationItems(QTreeWidgetItem *item,
itemsOfModels_[child] = childItem;
createNavigationItems(childItem, child);
item->addChild(childItem);
item->setExpanded(true);
const DocBookModel::ModelType type = child->modelType();
item->setExpanded(type == DocBookModel::Book);
}
}
}
......
......@@ -4,6 +4,6 @@
[]>
<set xmlns="http://www.oasis-open.org/docbook/xml/4.5/" xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Справка</title>
<xi:include href="system.xml"/>
<xi:include href="language/index.xml"/>
<xi:include href="system/index.xml"/>
</set>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="559.94379"
height="188.57678"
id="svg4792"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="edit-find.svg"
inkscape:export-filename="/home/victor/Projects/NIISI/kumir/kumir2-master/userdocs/system/edit-find.png"
inkscape:export-xdpi="69.519997"
inkscape:export-ydpi="69.519997">
<defs
id="defs4794">
<marker
inkscape:stockid="Arrow1Lstart"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lstart"
style="overflow:visible">
<path
id="path4071"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(0.8,0,0,0.8,10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lstart"
orient="auto"
refY="0"
refX="0"
id="marker4812"
style="overflow:visible">
<path
id="path4814"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(0.8,0,0,0.8,10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lstart"
orient="auto"
refY="0"
refX="0"
id="marker4812-6"
style="overflow:visible">
<path
id="path4814-0"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(0.8,0,0,0.8,10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lstart"
orient="auto"
refY="0"
refX="0"
id="marker4812-68"
style="overflow:visible">
<path
id="path4814-03"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(0.8,0,0,0.8,10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lstart"
orient="auto"
refY="0"
refX="0"
id="marker4812-7"
style="overflow:visible">
<path
id="path4814-8"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(0.8,0,0,0.8,10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lstart"
orient="auto"
refY="0"
refX="0"
id="marker4812-5"
style="overflow:visible">
<path
id="path4814-1"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(0.8,0,0,0.8,10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lstart"
orient="auto"
refY="0"
refX="0"
id="marker4812-0"
style="overflow:visible">
<path
id="path4814-2"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(0.8,0,0,0.8,10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lstart"
orient="auto"
refY="0"
refX="0"
id="marker4812-72"
style="overflow:visible">
<path
id="path4814-07"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(0.8,0,0,0.8,10,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4142136"
inkscape:cx="324.96274"
inkscape:cy="50.021042"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1680"
inkscape:window-height="994"
inkscape:window-x="-2"
inkscape:window-y="-3"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
showguides="true"
inkscape:guide-bbox="true" />
<metadata
id="metadata4797">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-49.34922,-31.333361)">
<rect
style="fill:none;stroke:#000000;stroke-width:1.24999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="rect4942"
width="558.69379"
height="43.75"
x="49.97422"
y="60.020435" />
<text
xml:space="preserve"
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:OpenGost Type A;-inkscape-font-specification:Sans"
x="57.142857"
y="59.505039"
id="text5516"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5518"
x="57.142857"
y="59.505039" /></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.625;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#marker4812)"
d="m 507.56712,96.00593 -38.68885,62.9325 -224.47211,0"
id="path5756-25"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<text
xml:space="preserve"
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:OpenGost Type A;-inkscape-font-specification:Sans"
x="245.72089"
y="153.64398"
id="text5942-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5944-48"
x="245.72089"
y="153.64398"
style="font-size:18px;font-style:italic;-inkscape-font-specification:OpenGost Type A Italic">Поиск следующего входжения текста</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.625;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#marker4812)"
d="m 340.98991,68.557884 -25.25382,-20.606343 -92.47212,0"
id="path5756-25-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<text
xml:space="preserve"
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:OpenGost Type A;-inkscape-font-specification:Sans"
x="227.61273"
y="42.787907"
id="text5942-0-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5944-48-5"
x="227.61273"
y="42.787907"
style="font-size:18px;font-style:italic;-inkscape-font-specification:OpenGost Type A Italic">Строка поиска</tspan></text>
<text
xml:space="preserve"
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:OpenGost Type A;-inkscape-font-specification:Sans"
x="140.88817"
y="86.41893"
id="text13209"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan13211"
x="140.88817"
y="86.41893"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:OpenGost Type B;-inkscape-font-specification:OpenGost Type B">Найти:</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="rect13213"
width="255.97266"
height="23.75"
x="187.55722"
y="70.020432"
rx="0"
ry="19.091883" />
<g
id="g14050"
transform="translate(0,2.4017525)">
<rect
y="67.618683"
x="457.67206"
height="23.75"
width="28.75"
id="rect13753"
style="fill:none;stroke:#000000;stroke-width:1.25000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/victor/Projects/NIISI/kumir/kumir2/share/kumir2/editor/find-previous.png"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="path3755-87"
d="m 479.54481,82.991428 -7.54432,-6.99549 -7.45118,6.90913"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
id="g14054"
transform="translate(52.325902,-107.6753)">
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/victor/Projects/NIISI/kumir/kumir2/share/kumir2/editor/find-next.png"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="path3755"
d="m 449.13873,186.07299 7.54432,6.9955 7.45117,-6.90913"
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<rect
y="177.69574"
x="442.26147"
height="23.75"
width="28.75"
id="rect13753-4"
style="fill:none;stroke:#000000;stroke-width:1.25000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
</g>
<g
id="g14058"
transform="translate(19.798989,-103.43266)">
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/victor/Projects/NIISI/kumir/kumir2/share/kumir2/editor/find-options.png"
style="fill:none"
transform="translate(394.05751,139.88597)"
id="g3890">
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 129.57732,38.547834 15.90991,0"
id="path3884"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 129.57732,45.442148 11.49049,0"
id="path3886"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 129.57732,52.336416 15.02602,0"
id="path3888"
inkscape:connector-curvature="0" />
</g>
<rect
y="173.45309"
x="517.21478"
height="23.75"
width="28.75"
id="rect13753-5"
style="fill:none;stroke:#000000;stroke-width:1.25000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
</g>
<g
id="g14065"
transform="translate(-0.70710686,-105.55398)">
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/victor/Projects/NIISI/kumir/kumir2/share/kumir2/editor/find-close.png"
style="fill:none"
transform="translate(456.0881,138.82672)"
id="g3860">
<path
style="fill:none;stroke:#ffffff;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 124.50225,41.864435 7.54432,6.995496 7.45118,-6.909132"
id="path3755-8-9"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ffffff;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 139.63833,55.380961 -7.54432,-6.9955 -7.45118,6.90913"
id="path3755-8-9-9"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 139.63833,55.380961 -7.54432,-6.9955 -7.45118,6.90913"
id="path3755-4-4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 124.50225,41.864435 7.54432,6.995496 7.45118,-6.909132"
id="path3755-4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
</g>
<rect
y="175.57442"
x="573.78339"
height="23.75"
width="28.75"
id="rect13753-6"
style="fill:none;stroke:#000000;stroke-width:1.25000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
</g>
<path
style="fill:none;stroke:#000000;stroke-width:0.625;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#marker4812)"
d="m 471.09637,96.724018 -25.25382,33.941122 -224.47211,0"
id="path5756-25-87"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<text
xml:space="preserve"
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:OpenGost Type A;-inkscape-font-specification:Sans"
x="222.68518"
y="125.37068"
id="text5942-0-6"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5944-48-6"
x="222.68518"
y="125.37068"
style="font-size:18px;font-style:italic;-inkscape-font-specification:OpenGost Type A Italic">Поиск предыдущего входжения текста</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.625;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#marker4812)"
d="m 550.00806,96.318425 -64.14469,90.509665 -252.47211,0"
id="path5756-25-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<text
xml:space="preserve"
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:OpenGost Type A;-inkscape-font-specification:Sans"
x="232.70596"
y="181.53363"
id="text5942-0-7"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5944-48-2"
x="232.70596"
y="181.53363"
style="font-size:18px;font-style:italic;-inkscape-font-specification:OpenGost Type A Italic">Отображение дополнительных параметров</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.625;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#marker4812)"
d="m 588.11213,97.26818 -50.70966,122.32947 -202.4721,0"
id="path5756-25-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<text
xml:space="preserve"
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:OpenGost Type A;-inkscape-font-specification:Sans"
x="336.24509"
y="214.30319"
id="text5942-0-72"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5944-48-0"
x="336.24509"
y="214.30319"
style="font-size:18px;font-style:italic;-inkscape-font-specification:OpenGost Type A Italic">Закрытие области поиска/замены</tspan></text>
</g>
</svg>
This diff is collapsed.
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []>
<chapter>
<title>Редактор программ</title>
<section>
<title>Общие сведения</title>
<para>