diff --git a/s1000d/Converter14/editormainwindow.h b/s1000d/Converter14/editormainwindow.h index 881c5cd..ec1280b 100644 --- a/s1000d/Converter14/editormainwindow.h +++ b/s1000d/Converter14/editormainwindow.h @@ -25,7 +25,7 @@ class EditorMainWindow : public QMainWindow Q_OBJECT public: - QString version = "вер. 1.16"; + QString version = "вер. 1.15"; EditorMainWindow(QWidget *parent = nullptr); ~EditorMainWindow(); diff --git a/s1000d/Converter14/exportdialog.ui b/s1000d/Converter14/exportdialog.ui index cb003b6..fb39d09 100644 --- a/s1000d/Converter14/exportdialog.ui +++ b/s1000d/Converter14/exportdialog.ui @@ -447,22 +447,6 @@ - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 5 - - - - diff --git a/s1000d/Converter14/html.cpp b/s1000d/Converter14/html.cpp index 1086855..7e68931 100644 --- a/s1000d/Converter14/html.cpp +++ b/s1000d/Converter14/html.cpp @@ -182,7 +182,7 @@ void HTML::Generate(S1000D_Manager* _SM, bool _toScorm, SplashForm* _splash) { } if(newTitle == id) if(!SM->isConsole) - qDebug() << "[html: "+QString::number(i)+"] Ссылка не переименована: " + id + " ("+SM->item->fileName+")"; + qDebug() << "Ссылка не переименована: " << id << "("+SM->item->importedFromLyX+")"; SM->item->html[i].replace(SM->item->html[i].mid(_b, _e-_b), newTitle); } @@ -322,74 +322,12 @@ void HTML::parseNode(QDomNode node, int lvl) { } id = id.replace(".", "_").replace(":", "_").replace("-", "_").replace(" ", "_"); //normID - //qDebug() << "internalRef: "+id; - cat(""); cat("idTitle_"+id); //TODO cat(""); return; } - if(name == "dmSegmentRef") { - QString tPath = node.toElement().attribute("targetPath"); - //int _b = tPath.indexOf("'"); - //QString id = tPath.mid(_b+1, tPath.indexOf("'", _b+1)-(_b+1)); - QString refFileCode = SM->dmCodeIdentString(node.toElement().namedItem("dmRefIdent").namedItem("dmCode")); - QString refTechName = node.toElement().namedItem("dmRefAddressItems").namedItem("dmTitle").namedItem("techName").childNodes().at(0).toText().data(); - QString refInfoName = node.toElement().namedItem("dmRefAddressItems").namedItem("dmTitle").namedItem("infoName").childNodes().at(0).toText().data(); - int refItemInd = -1; - int tmpCurItem = SM->itemIndex; - for(int i=0;iitems.count();i++) - if(SM->items[i].moduleType == mtDM){ - SM->setCurItem(i); - QString itemFileCode = SM->dmIdentString("identAndStatusSection.dmAddress.dmIdent"); - QString itemTechName = SM->item->doc.namedItem("dmodule").namedItem("identAndStatusSection").namedItem("dmAddress").namedItem("dmAddressItems").namedItem("dmTitle").namedItem("techName").childNodes().at(0).toText().data(); - QString itemInfoName = SM->item->doc.namedItem("dmodule").namedItem("identAndStatusSection").namedItem("dmAddress").namedItem("dmAddressItems").namedItem("dmTitle").namedItem("infoName").childNodes().at(0).toText().data(); - if(refFileCode == itemFileCode && refTechName == itemTechName && refInfoName == itemInfoName) - { - refItemInd = i; break; - } - } - - if(refItemInd == -1) { - qDebug() << "HTML dmSegmentRef: ref item not found ("+refTechName+" "+refFileCode+")"; - return; - } - - QString labelTitle = ""; - QDomNode labelNode = SM->getNodeFromXPath(tPath); //, true - - if(labelNode.isNull()) { - qDebug() << "HTML dmSegmentRef: labelNode.isNull "; - qDebug() << " " << tPath; - qDebug() << " " << SM->item->fileName; - return; - } - else { - //qDebug() << "HTML dmSegmentRef: OK - " << tPath; - } - if(labelNode.toElement().namedItem("title").isNull()) { - qDebug() << "HTML dmSegmentRef: labelNode.title.isNull"; - //return; - } else { - labelTitle = labelNode.toElement().namedItem("title").toElement().firstChild().toText().data(); - } - - QString id = labelNode.attributes().namedItem("id").nodeValue(); - id = id.replace(".", "_").replace(":", "_").replace("-", "_").replace(" ", "_"); //normID - QString htmlFileName = QString(SM->item->fileName).replace(".xml", ".html"); - - SM->setCurItem(tmpCurItem); - //*********** - //qDebug() << ""; - - cat(""); - cat(refTechName + " / " + labelTitle); - cat(""); - - return; - } - if(name == "randomList") { bool oldParaIdent = paraIdent; paraIdent = false; if(node.firstChild().nodeName() == "title") { @@ -821,6 +759,8 @@ void HTML::parseNode(QDomNode node, int lvl) { paraIdent = oldParaIdent; return; } + //ОТКЛ + //ВКЛ if(name == "supScript" || name == "subScript") { if(node.childNodes().count() == 1) @@ -1023,10 +963,9 @@ void HTML::parseNode(QDomNode node, int lvl) { } QString s = "(-unknown-) " + node.nodeName() + " " + node.nodeValue() + "
"; - qDebug() << "Unknown S1000D node: "+node.nodeName(); add(0, s); - //for(int j=0;jitem-> if(curSubsectionItem != -1) SM->items[curSubsectionItem].lyxLog = lyxLog; - - //for(int i=0;iitems.count();i++) - // qDebug() << i << SM->items[i].fileName << SM->items[i].doc.namedItem("dmodule").nodeName() << SM->items[i].doc.namedItem("dmodule").childNodes().count(); - //qDebug() << ""; - - //SM->SaveProject(); - - connectRefsWithLabels(); - - for(int i=0;iitems.count();i++) - if(SM->items[i].lyxLog.count() == 2) SM->items[i].lyxLog.append("#Завершено без ошибок."); - return true; } @@ -271,7 +259,7 @@ void LyX::parseBlock(int _beg, int _end, QDomNode _domCurLevelNode) { appendChapter(title); checkForOldIdent(); SM->item->importedFromLyX = curLyXFileName; - domCurLevelNode = SM->item->doc.namedItem("pm").namedItem("content"); + domCurLevelNode.clear(); continue; } @@ -293,7 +281,7 @@ void LyX::parseBlock(int _beg, int _end, QDomNode _domCurLevelNode) { appendSection(title); checkForOldIdent(); SM->item->importedFromLyX = curLyXFileName; - domCurLevelNode = SM->item->doc.namedItem("pm").namedItem("content"); + domCurLevelNode.clear(); continue; } @@ -313,13 +301,12 @@ void LyX::parseBlock(int _beg, int _end, QDomNode _domCurLevelNode) { //if(DBG) qDebug() << " " + title; //qDebug() << internalRefList.count(); - /* for(int j=0;jitem->isQualifyed = false; ??? } - internalRefList.clear(); */ + internalRefList.clear(); if(docChapter == -1) appendChapter(""); if(docSection == -1) appendSection(""); @@ -547,67 +534,26 @@ void LyX::parseBlock(int _beg, int _end, QDomNode _domCurLevelNode) { } if(itemName == "\\begin_layout Enumerate" || itemName == "\\begin_layout Itemize") { // -// QDomNode titleNodeClone; -// if(domCurLevelNode.hasChildNodes()) -// if(domCurLevelNode.lastChild().nodeName() == "para") { -// titleNodeClone = domCurLevelNode.lastChild().cloneNode(); -// domCurLevelNode.removeChild(domCurLevelNode.lastChild()); -// titleNodeClone.toElement().setTagName("title"); -// } - QDomNode lastPara; + QDomNode titleNodeClone; if(domCurLevelNode.hasChildNodes()) - if(domCurLevelNode.lastChild().nodeName() == "para") - lastPara = domCurLevelNode.lastChild(); - + if(domCurLevelNode.lastChild().nodeName() == "para") { + titleNodeClone = domCurLevelNode.lastChild().cloneNode(); + domCurLevelNode.removeChild(domCurLevelNode.lastChild()); + titleNodeClone.toElement().setTagName("title"); + } QDomNode listNode; if(itemName == "\\begin_layout Enumerate") listNode = SM->item->doc.createElement("sequentialList"); if(itemName == "\\begin_layout Itemize") listNode = SM->item->doc.createElement("randomList"); domCurLevelNode.appendChild(listNode); -// QDomNode titleNode; -// if(titleNodeClone.isNull()) { -// //titleNode = SM->item->doc.createElement("title"); -// //titleNode.appendChild(SM->item->doc.createTextNode("")); -// //listNode.appendChild(titleNode); -// } -// else { -// titleNode = SM->item->doc.importNode(titleNodeClone, true); -// listNode.appendChild(titleNode); -// } - - if(!lastPara.isNull()) // вышестоящий абзац берем как заголовок, делаем из para -> title - { - QDomNode titleNode = SM->item->doc.createElement("title"); - while(lastPara.hasChildNodes()) { - QDomNode ch = lastPara.removeChild(lastPara.firstChild()); - titleNode.appendChild(ch); - } + QDomNode titleNode; + if(titleNodeClone.isNull()) { + //titleNode = SM->item->doc.createElement("title"); + //titleNode.appendChild(SM->item->doc.createTextNode("")); + //listNode.appendChild(titleNode); + } + else { + titleNode = SM->item->doc.importNode(titleNodeClone, true); listNode.appendChild(titleNode); - lastPara.parentNode().removeChild(lastPara); - - QList list; - QDomNode node; - list.append(titleNode); - - while(!list.isEmpty()) { // обновляем refList и labelList для перемещенных узлов - node = list.takeFirst(); - if(node.nodeName().startsWith("blankRefNode")) { - for(int n=0;refList.count();n++) - if(refList[n].nodeXPath.endsWith(node.nodeName())) { - refList[n].nodeXPath = SM->makeNodeXPath(node); - break; - } - } - QString nodeID = node.attributes().namedItem("id").nodeValue(); - if(nodeID != "") - for(int n=0;labelList.count();n++) - if(labelList[n].id == nodeID) { - labelList[n].nodeXPath = SM->makeNodeXPath(node); - break; - } - - for(int n=0;nitem->doc.createElement("internalRef"); if(foundLabel == -1) { if(internalRefList.indexOf(refID) == -1) internalRefList.append(refID); @@ -829,20 +774,19 @@ void LyX::parseBlock(int _beg, int _end, QDomNode _domCurLevelNode) { //qDebug() << "internalRef foundLabel: "+refID+" -> "+labelList[foundLabel].id; refID = labelList[foundLabel].id; } - */ - QDomNode internalRef = SM->item->doc.createElement("blankRefNode"+QString::number(refList.count())); + internalRef.toElement().setAttribute("xlink:actuate", "onRequest"); + internalRef.toElement().setAttribute("xlink:show", "replace"); + internalRef.toElement().setAttribute("xlink:href", "#"+refID); //labelList[foundLabel].id + internalRef.toElement().setAttribute("internalRefId", refID); //labelList[foundLabel].id + QString refTarget = "irtt07"; + if(refID.left(3) == "fig") refTarget = "irtt01"; + if(refID.left(3) == "tab") refTarget = "irtt02"; + if(refID.left(3) == "par") refTarget = "irtt07"; + if(refID.left(3) == "mma") refTarget = "irtt03"; + if(refID.left(3) == "fig" && refID.mid(9,3) == "hot") refTarget = "irtt11"; + internalRef.toElement().setAttribute("internalRefTargetType", refTarget); domCurLevelNode.appendChild(internalRef); - - refStruct ref; - ref.itemInd = SM->itemIndex; - ref.labelFound = false; - ref.lineNum = _insetBeg+lyxEmptyCnt[_insetBeg]; - ref.lyxRef = refID; - //internalRef = domCurLevelNode.childNodes().at(domCurLevelNode.childNodes().count()-1); - ref.nodeXPath = SM->makeNodeXPath(internalRef); - - refList.append(ref); } continue; // attribute internalRefTargetType - Тип объекта внутренней ссылки [BRDP-S1-00100] (Глава 3.9.6.1, таблица 25) @@ -967,17 +911,14 @@ void LyX::parseBlock(int _beg, int _end, QDomNode _domCurLevelNode) { } } else { labelStruct lbl; - lbl.itemInd = SM->itemIndex; lbl.lyxLabel = lyxID; - lbl.id = figureID; lbl.used = false; - lbl.lineNum = _insetBeg+lyxEmptyCnt[_insetBeg]; + lbl.id = figureID; labelList.append(lbl); foundLabel = labelList.count()-1; //qDebug() << "+fig: lyx="+lyxID+" id="+figureID+" internalRefList.count()="+QString::number(internalRefList.count()); } labelList[foundLabel].defined = true; - /* for(int j=0;jitem->isQualifyed = false; figureID = ""; + SM->item->isQualifyed = false; continue; } if(filename.startsWith("../")) filename = filename.mid(3); @@ -1055,7 +996,7 @@ void LyX::parseBlock(int _beg, int _end, QDomNode _domCurLevelNode) { } if(oldfilename == "") { lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Файл изображения не найден "+filename+" ("+figureTitle+")"); - SM->item->isQualifyed = false; figureID = ""; + SM->item->isQualifyed = false; continue; } newfilename = SM->projectPath+"/"+ QString::number(docChapter+1) + "." + QString::number(docSection+1) + "." + QString::number(docSubsection+1) + @@ -1081,12 +1022,6 @@ void LyX::parseBlock(int _beg, int _end, QDomNode _domCurLevelNode) { figure.appendChild(graphic); graphic.toElement().setAttribute("infoEntityIdent", QFileInfo(newfilename).fileName()); - int labelInd = -1; - for(int j=0;jmakeNodeXPath(figure); - // если есть файл .txt с хотспотами - копируем его и файлы в нем указанные QString txtoldfilename = oldfilename; txtoldfilename.replace(".svg", ".txt"); QString txtnewfilename = newfilename; txtnewfilename.replace(".svg", ".txt"); @@ -1183,7 +1118,7 @@ void LyX::parseBlock(int _beg, int _end, QDomNode _domCurLevelNode) { } if(insetName == "CommandInset label") { - lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Использование меток допускается только в сносках и плавающих таблицах/рисунках."); + lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Команда <метка> вне слоя, обратитесь к разработчику"); SM->item->isQualifyed = false; continue; } @@ -1230,15 +1165,13 @@ void LyX::parseBlock(int _beg, int _end, QDomNode _domCurLevelNode) { } } else { labelStruct lbl; - lbl.itemInd = SM->itemIndex; lbl.lyxLabel = lyxID; - lbl.id = tableID; lbl.used = false; - lbl.lineNum = _insetBeg+lyxEmptyCnt[_insetBeg]; + lbl.id = tableID; // в дальнейшем возможно пересмотреть и присваивать номера (tab-0001) labelList.append(lbl); foundLabel = labelList.count()-1; } labelList[foundLabel].defined = true; - /* + for(int j=0;jitem->doc.createElement("table"); domCurLevelNode.appendChild(table); table.toElement().setAttribute("frame", "topbot"); - if(tableID != "") - table.toElement().setAttribute("id", tableID); + if(tableID != "") table.toElement().setAttribute("id", tableID); table.toElement().setAttribute("colsep", "0"); table.toElement().setAttribute("rowsep", "0"); table.toElement().setAttribute("tocentry", "1"); @@ -1327,12 +1259,6 @@ void LyX::parseBlock(int _beg, int _end, QDomNode _domCurLevelNode) { tgroup.appendChild(colspec); // } - int labelInd = -1; - for(int j=0;jmakeNodeXPath(table); - QList> tableArr; // cellStruct** tableArr = new cellStruct*[rows]; @@ -1441,15 +1367,6 @@ void LyX::parseBlock(int _beg, int _end, QDomNode _domCurLevelNode) { for(int j=0;jitem->doc.createElement("row"); - //if(!multiRowFlag) rowToHead = false; - if(j <= lastHeadRow) { //j==0 || rowToHead - row.toElement().setAttribute("rowsep", "1"); - thead.appendChild(row); - } else { - row.toElement().setAttribute("rowsep", "0"); - tbody.appendChild(row); - } - //bool multiRowFlag = false; for(int k=0;kitems[curSubsectionItem].lyxLog = lyxLog; curChapterItem = SM->createPM(-1, -1); SM->setCurItem(curChapterItem); curSectionItem = curSubsectionItem = -1; + SM->item->origTitle = title; SM->item->fileName = QString::number(docChapter+1) + " " + title + ".xml"; // SM->projectPath + "/" + SM->setNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle", title); @@ -1654,11 +1581,12 @@ void LyX::appendSection(QString title) { // lyxLog.append("!Ошибка в структуре заголовков: "+title); // } docSection++; docSubsection = -1; - //if(lyxLog.count() == 2) lyxLog.append("#Завершено без ошибок."); + if(lyxLog.count() == 2) lyxLog.append("#Завершено без ошибок."); if(curSubsectionItem != -1) SM->items[curSubsectionItem].lyxLog = lyxLog; curSectionItem = SM->createPM(curChapterItem, SM->items[curChapterItem].child.count()-1); SM->setCurItem(curSectionItem); curSubsectionItem = -1; + SM->item->origTitle = title; SM->item->fileName = QString::number(docChapter+1) + "." + QString::number(docSection+1) + " " + title + ".xml"; SM->setNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle", title); @@ -1674,7 +1602,7 @@ void LyX::appendSubsection(QString title) { // lyxLog.append("!Ошибка в структуре заголовков: "+title); // } docSubsection++; - //if(lyxLog.count() == 2) lyxLog.append("#Завершено без ошибок."); + if(lyxLog.count() == 2) lyxLog.append("#Завершено без ошибок."); if(curSubsectionItem != -1) SM->items[curSubsectionItem].lyxLog = lyxLog; //SM->item->fileName = QString::number(docChapter+1) + "." + QString::number(docSection+1) + "." + QString::number(docSubsection+1) + " " + title + ".xml"; if(title.startsWith("~")) { @@ -1683,6 +1611,7 @@ void LyX::appendSubsection(QString title) { } else curSubsectionItem = SM->createDM(curSectionItem, SM->items[curSectionItem].child.count()-1, "DESCRIPT"); SM->setCurItem(curSubsectionItem); + SM->item->origTitle = title; SM->item->fileName = QString::number(docChapter+1) + "." + QString::number(docSection+1) + "." + QString::number(docSubsection+1) + " " + title + ".xml"; SM->setNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName", title); @@ -1937,117 +1866,6 @@ void LyX::addQuestInteraction(QDomNode domLearnNode, QString question, QStringLi } } -void LyX::connectRefsWithLabels() { - int i, j; - for(i=0;i= labelList.count()) { - SM->items[refList[i].itemInd].lyxLog.append("!["+QString::number(refList[i].lineNum)+"] Ссылка на неизвестную метку: "+refList[i].lyxRef); - qDebug() << "Ref to unknown label["+QString::number(refList[i].lineNum)+"]: "+refList[i].lyxRef; - } - else { - labelList[j].used = true; refList[i].labelFound = true; - SM->setCurItem(refList[i].itemInd); - - - QDomNode oldrefNode = SM->getNodeFromXPath(refList[i].nodeXPath); - - if(oldrefNode.isNull()) { - qDebug() << "ref "+refList[i].lyxRef+" ignored - refNode.isNull():" << refList[i].nodeXPath << SM->items[refList[i].itemInd].fileName; - refNode = SM->getNodeFromXPath(refList[i].nodeXPath, true); - continue; - } - - if(!oldrefNode.nodeName().startsWith("blankRefNode")) - qDebug() << "Rename "+oldrefNode.nodeName()+" to REF("+refList[i].nodeXPath+")"; - - if(refList[i].itemInd == labelList[j].itemInd) { - QString refID = labelList[j].id; // ссылка внутри модуля данных - - refNode = SM->item->doc.createElement("internalRef"); - oldrefNode.parentNode().replaceChild(refNode, oldrefNode); - refNode.toElement().setAttribute("xlink:actuate", "onRequest"); - refNode.toElement().setAttribute("xlink:show", "replace"); - refNode.toElement().setAttribute("xlink:href", "#"+refID); - refNode.toElement().setAttribute("internalRefId", refID); - QString refTarget = "irtt07"; - if(refID.left(3) == "fig") refTarget = "irtt01"; - if(refID.left(3) == "tab") refTarget = "irtt02"; - if(refID.left(3) == "par") refTarget = "irtt07"; - if(refID.left(3) == "mma") refTarget = "irtt03"; - if(refID.left(3) == "fig" && refID.mid(9,3) == "hot") refTarget = "irtt11"; - refNode.toElement().setAttribute("internalRefTargetType", refTarget); - - //qDebug() << "Internal ref["+QString::number(refList[i].lineNum)+"]:" << labelList[j].id; - - } else { // ссылка на внешний модуль - refNode = SM->item->doc.createElement("dmSegmentRef"); - oldrefNode.parentNode().replaceChild(refNode, oldrefNode); - - - //QString tPath = "//"+labelList[j].nodeName+"[@id='"+labelList[j].id+"']"; //SM->makeXPathToNode(labelNode); // //title[@lang='en'] - - refNode.toElement().setAttribute("targetPath", labelList[j].nodeXPath); - - SM->setCurItem(refList[i].itemInd); - QDomElement dmRefIdent = SM->item->doc.createElement("dmRefIdent"); - refNode.appendChild(dmRefIdent); - QDomElement dmCode = SM->item->doc.createElement("dmCode"); - dmRefIdent.appendChild(dmCode); - - SM->setCurItem(labelList[j].itemInd); - QDomNode labelDMNode = SM->findElement("identAndStatusSection.dmAddress.dmIdent.dmCode"); - SM->setCurItem(refList[i].itemInd); - for(int k=0;kitem->doc.createElement("issueInfo"); - dmRefIdent.appendChild(issueInfo); - issueInfo.setAttribute("inWork", SM->ru_const.inWork); - issueInfo.setAttribute("issueNumber", SM->ru_const.issueNumber); - QDomElement language = SM->item->doc.createElement("language"); - dmRefIdent.appendChild(language); - language.setAttribute("languageIsoCode", SM->ru_const.languageIsoCode); - language.setAttribute("countryIsoCode", SM->ru_const.countryIsoCode); - - SM->setCurItem(labelList[j].itemInd); - QString techName = SM->findElement("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName").childNodes().at(0).toText().data(); - QString infoName = SM->findElement("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName").childNodes().at(0).toText().data(); - SM->setCurItem(refList[i].itemInd); - - QDomElement dmRefAddressItems = SM->item->doc.createElement("dmRefAddressItems"); - refNode.appendChild(dmRefAddressItems); - QDomElement dmTitle = SM->item->doc.createElement("dmTitle"); - dmRefAddressItems.appendChild(dmTitle); - QDomElement dmTechName = SM->item->doc.createElement("techName"); - dmTitle.appendChild(dmTechName); - dmTechName.appendChild(SM->item->doc.createTextNode(techName)); - QDomElement dmInfoName = SM->item->doc.createElement("infoName"); - dmTitle.appendChild(dmInfoName); - dmInfoName.appendChild(SM->item->doc.createTextNode(infoName)); - - //qDebug() << "External ref["+QString::number(refList[i].lineNum)+"]:" << labelList[j].id << labelList[j].lyxLabel << labelList[j].itemInd << refList[i].itemInd; - } - } - - } - - for(j=0;jitems[labelList[j].itemInd].lyxLog.append("#["+QString::number(labelList[j].lineNum)+"] Неиспользуемая метка: "+labelList[j].lyxLabel); - //qDebug() << "Label not used ["+QString::number(labelList[j].lineNum)+"]: "+labelList[j].id; - } -} - - - //QString LyX::questLyXtoHTML(QString answer) { // // функция пока не используется // qDebug() << answer; diff --git a/s1000d/Converter14/lyx.h b/s1000d/Converter14/lyx.h index ed7c839..2ae45e5 100644 --- a/s1000d/Converter14/lyx.h +++ b/s1000d/Converter14/lyx.h @@ -34,7 +34,6 @@ public: // QString questLyXtoHTML(QString answer); void addQuestInteraction(QDomNode domLearnNode, QString question, QStringList answers); QDomNode searchSVGNodeForSpanNode(QDomNode node); - void connectRefsWithLabels(); QStringList lyxList; QStringList lyxLog; @@ -58,22 +57,10 @@ public: }; QList acronymList; struct labelStruct { - int itemInd; QString lyxLabel, id; - bool defined = false; - bool used = false; - QString nodeXPath; - int lineNum; + bool defined; }; QList labelList; - struct refStruct { - int itemInd; - QString lyxRef; - bool labelFound; - QString nodeXPath; - int lineNum; - }; - QList refList; int cntTable, cntFigure, cntPar; struct cellStruct { diff --git a/s1000d/Converter14/s1000d_manager.cpp b/s1000d/Converter14/s1000d_manager.cpp index cbb4a50..b6e3f8b 100644 --- a/s1000d/Converter14/s1000d_manager.cpp +++ b/s1000d/Converter14/s1000d_manager.cpp @@ -554,23 +554,6 @@ QString S1000D_Manager::dmIdentString(QString dmIdentPath) { //resStr += getNodeAttr(dmIdentPath+".issueInfo", "inWork"); return resStr; } -QString S1000D_Manager::dmCodeIdentString(QDomNode node) { - QString resStr = ""; - resStr += node.toElement().attribute("modelIdentCode")+"-"; - resStr += node.toElement().attribute("systemDiffCode")+"-"; - resStr += node.toElement().attribute("systemCode")+"-"; - resStr += node.toElement().attribute("subSystemCode"); - resStr += node.toElement().attribute("subSubSystemCode")+"-"; - resStr += node.toElement().attribute("assyCode")+"-"; - resStr += node.toElement().attribute("disassyCode"); - resStr += node.toElement().attribute("disassyCodeVariant")+"-"; - resStr += node.toElement().attribute("infoCode"); - resStr += node.toElement().attribute("infoCodeVariant")+"-"; - resStr += node.toElement().attribute("itemLocationCode"); - QString learnStr = "-"+node.toElement().attribute("learnCode")+node.toElement().attribute("learnEventCode"); - if(learnStr != "-") resStr += learnStr; - return resStr; -} QString S1000D_Manager::pmIdentString(QString pmIdentPath) { QString resStr = ""; @@ -1545,20 +1528,6 @@ bool S1000D_Manager::exportSCORM(QString packDir, QString packName, QString pack // } resetICN(); - for(int i=0;ischemeType == stLEARNING) { - item->SCORM_fileName = "DMC-" + item->fileCode + "_"+getNodeAttr(_issueInfo, "issueNumber")+"-"+getNodeAttr(_issueInfo, "inWork")+"_"+getNodeAttr(_language, "languageIsoCode")+"-"+getNodeAttr(_language, "countryIsoCode")+".xml"; - if(QFile::exists(SCORMpath+"/" + item->SCORM_fileName)) QFile::remove(SCORMpath+"/" + item->SCORM_fileName); - if(!QFile::copy(projectPath+"/"+item->fileName, SCORMpath+"/" + item->SCORM_fileName)) - if(DBG) qDebug() << "scorm: Error copy" << projectPath+"/"+item->fileName << "to" << SCORMpath+"/" + item->SCORM_fileName; - continue; - } - item->SCORM_fileName = "DMC-" + item->fileCode + "_"+getNodeAttr(_issueInfo, "issueNumber")+"-"+getNodeAttr(_issueInfo, "inWork")+"_"+getNodeAttr(_language, "languageIsoCode")+"-"+getNodeAttr(_language, "countryIsoCode")+".html"; - } - for(int i=0;ifileName; htmlFileName.replace(".xml", ".html"); + QString htmlFileName = projectPath + "/" + item->fileName; + if (item->schemeType != stLEARNING) + htmlFileName.replace(".xml", ".html"); if (item->moduleType == mtDM && !QFile::exists(htmlFileName) && item->schemeType != stLEARNING) { if(!isConsole) { splash->hide(); @@ -1584,6 +1555,16 @@ bool S1000D_Manager::exportSCORM(QString packDir, QString packName, QString pack } return false; } + QString _issueInfo = "identAndStatusSection.dmAddress.dmIdent.issueInfo"; + QString _language = "identAndStatusSection.dmAddress.dmIdent.language"; + if(item->schemeType == stLEARNING) { + item->SCORM_fileName = SCORMpath+"/" + "DMC-" + item->fileCode + "_"+getNodeAttr(_issueInfo, "issueNumber")+"-"+getNodeAttr(_issueInfo, "inWork")+"_"+getNodeAttr(_language, "languageIsoCode")+"-"+getNodeAttr(_language, "countryIsoCode")+".xml"; + if(QFile::exists(item->SCORM_fileName)) QFile::remove(item->SCORM_fileName); + if(!QFile::copy(projectPath+"/"+item->fileName, item->SCORM_fileName)) + if(DBG) qDebug() << "scorm: Error copy" << projectPath+"/"+item->fileName << "to" << item->SCORM_fileName; + continue; + } + item->SCORM_fileName = SCORMpath+"/" + "DMC-" + item->fileCode + "_"+getNodeAttr(_issueInfo, "issueNumber")+"-"+getNodeAttr(_issueInfo, "inWork")+"_"+getNodeAttr(_language, "languageIsoCode")+"-"+getNodeAttr(_language, "countryIsoCode")+".html"; QFile htmlFile(htmlFileName); if (!htmlFile.open(QFile::ReadOnly | QFile::Text)){ @@ -1646,35 +1627,19 @@ bool S1000D_Manager::exportSCORM(QString packDir, QString packName, QString pack if(k > -1) { QString fn = htmlText[j].mid(k+s.length(), htmlText[j].indexOf("\"",k+s.length())-k-s.length()); if(!fn.startsWith("#")) { - if(fn.contains(".html#")) { // межмодульная ссылка - fn = fn.left(fn.indexOf("#")); - QString name; - for(int n=0;nhide(); + splash->ErrMessage("Ошибка", "href: Ошибка копирования:/n'"+projectPath+"/"+fn.split("/")[0]+"' в '"+SCORMpath+"/"+fn.split("/")[0]+"'"); + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); } + return false; } - if(name != "Ok") - qDebug() << "HTML->SCORM - hide(); - splash->ErrMessage("Ошибка", "href: Ошибка копирования:/n'"+projectPath+"/"+fn.split("/")[0]+"' в '"+SCORMpath+"/"+fn.split("/")[0]+"'"); - QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); - } - return false; - } - } - } //# + } } // - if(QFile::exists(SCORMpath+"/" + item->SCORM_fileName)) QFile::remove(SCORMpath+"/" + item->SCORM_fileName); - QFile htmlOutFile(SCORMpath+"/" + item->SCORM_fileName); + if(QFile::exists(item->SCORM_fileName)) QFile::remove(item->SCORM_fileName); + QFile htmlOutFile(item->SCORM_fileName); if (htmlOutFile.open(QFile::WriteOnly | QFile::Text)) { QTextStream out(&htmlOutFile); out.setCodec("UTF-8"); for(int j=0;jnul"; QProcess pc; pc.start(QString(QCoreApplication::applicationDirPath()+"/7z.exe"), params, QIODevice::ReadWrite); - if(pc.waitForStarted(2000)) - while(!pc.waitForFinished(50)) { - if(!isConsole) {splash->Step();} - QCoreApplication::processEvents(); - } - else { - qDebug() << "Failed to start 7z"; - if(!isConsole) { - splash->hide(); - QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); - } - return false; + while(!pc.waitForFinished(50)) { + if(!isConsole) {splash->Step(); splash->Step(); splash->Step(); } + QCoreApplication::processEvents(); } } else @@ -1835,19 +1791,10 @@ bool S1000D_Manager::exportSCORM(QString packDir, QString packName, QString pack params << "a"<<"-r"<<"-y" << QString(packDir+"/"+packName+".zip") << QString(SCORMpath+"/*.*");// << ">nul"; QProcess pc; pc.start("7z", params, QIODevice::ReadWrite); - if(pc.waitForStarted(2000)) - while(!pc.waitForFinished(50)) - { - if(!isConsole) {splash->Step();} - QCoreApplication::processEvents(); - } - else { - qDebug() << "Failed to start 7z"; - if(!isConsole) { - splash->hide(); - QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); - } - return false; + while(!pc.waitForFinished(50)) + { + if(!isConsole) {splash->Step(); splash->Step(); splash->Step(); } + QCoreApplication::processEvents(); } } @@ -2276,162 +2223,7 @@ bool S1000D_Manager::exportS1000D(QString dirName, QString packName, QString pac return true; } -/* -void S1000D_Manager::searchPrepare() { - item->searchList.clear(); - QList nodeList; - nodeList.append(item->doc.namedItem("dmodule")); - QDomNode node; - while(!nodeList.isEmpty()) { - node = nodeList.takeFirst(); - searchListStruct sItem; - sItem.name = node.nodeName(); sItem.node = node; - item->searchList.append(sItem); - for(int k=0;ksearchList.count();i++) - if(item->searchList[i].name == tag) { - qDebug() << "Found node " + tag; - return item->searchList[i].node; - } - QDomNode nullNode; - return nullNode; -} - -QDomNode S1000D_Manager::searchNodeWithAttr(QString attrName, QString attrVal) { //QDomNode startNode, - for(int i=0;isearchList.count();i++) { - if(item->searchList[i].node.toElement().hasAttribute(attrName) && item->searchList[i].node.toElement().attribute(attrName) == attrVal) - return item->searchList[i].node; - } - QDomNode nullNode; - return nullNode; -} -*/ - -// targetPath="//lcInstruction/description/levelledPara[attribute::id = 'para-000' and child::levelledPara[fn:position() = 1]]" - -QString S1000D_Manager::makeNodeXPath(QDomNode node) { - if(item->doc.namedItem("dmodule").childNodes().count() == 0) - qDebug() << "Empty item: " << itemIndex << item->fileName << item->doc.namedItem("dmodule").nodeName() << item->doc.namedItem("dmodule").childNodes().count(); - //else - // qDebug() << itemIndex << "Ok"; - - QString path=""; - QString pos; - int ind=-1, cnt=0; - QDomNode cur = node; - QDomNode chNode; - //if(node.nodeName() == "blankRefNode9") - // qDebug() << "blankRefNode9 debug"; - while(1) { - pos = ""; - if(!cur.parentNode().isNull()) { - cnt = 0; ind = 0; - for(int i=0;i 1) - pos = "["+QString::number(ind)+"]"; - } - - path = "/"+cur.nodeName()+pos+path; - - if(cur.parentNode().isNull() || cur.parentNode().nodeName() == "#document") { - //if(cur.parentNode().nodeName() != "#document") - // qDebug() << "makeNodeXPath: parentNode("+cur.nodeName()+").isNull"; - break; - } - cur = cur.parentNode(); - }; - - QDomNode nd = getNodeFromXPath(path); //, true - if(nd.nodeName() != node.nodeName()) - qDebug() << "makeNodeXPath fail: Need "+node.nodeName()+node.nodeType()+" Found "+nd.nodeName()+nd.nodeType()+" Path "+path+""; - //else - // qDebug() << "makeNodeXPath OK"; - - //if(path.contains("description/para")) { - // qDebug() << "makeNodeXPath: description/para !! " << path << item->fileName; - //} - - return path; -} - -QDomNode S1000D_Manager::getNodeFromXPath(QString path, bool debugTrace) { - QStringList list = path.mid(1).split("/"); - if(debugTrace) qDebug() << "getNodeFromXPath: "+path; - - QDomNode node = item->doc.namedItem("dmodule").parentNode(); //namedItem("dmodule").parentNode(); //namedItem("#document") - if(node.isNull()) { - //if(debugTrace) - qDebug() << " node is NULL: item->doc.namedItem(dmodule).parentNode()"; - if(debugTrace) qDebug() << " " << itemIndex << item->fileName << item->doc.namedItem("dmodule").nodeName() << item->doc.namedItem("dmodule").childNodes().count(); - if(debugTrace) - for(int i=0;idoc.childNodes().count();i++) { - qDebug() << " " << item->doc.childNodes().at(i).nodeName() << item->doc.childNodes().at(i).childNodes().count(); - for(int j=0;jdoc.childNodes().at(i).childNodes().count();j++) { - qDebug() << " " << item->doc.childNodes().at(i).childNodes().at(j).nodeName() << item->doc.childNodes().at(i).childNodes().at(j).childNodes().count(); - for(int k=0;kdoc.childNodes().at(i).childNodes().at(j).childNodes().count();k++) - qDebug() << " " << item->doc.childNodes().at(i).childNodes().at(j).childNodes().at(k).nodeName() << item->doc.childNodes().at(i).childNodes().at(j).childNodes().at(k).childNodes().count(); - } - } - QDomNode nullNode; - return nullNode; - } - - int pos; - if(debugTrace) qDebug() << " ------------------------- "; - while(list.count() > 0) { - if(debugTrace) { - qDebug() << " node: "+node.nodeName()+" child cnt: "+QString::number(node.childNodes().count()); - for(int i=0;i + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/BlankXML/crew.xml b/s1000d/Converter14_Source/BlankXML/crew.xml new file mode 100644 index 0000000..67a0bf9 --- /dev/null +++ b/s1000d/Converter14_Source/BlankXML/crew.xml @@ -0,0 +1,45 @@ + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ми-38 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/s1000d/Converter14_Source/BlankXML/descript.xml b/s1000d/Converter14_Source/BlankXML/descript.xml new file mode 100644 index 0000000..a262e07 --- /dev/null +++ b/s1000d/Converter14_Source/BlankXML/descript.xml @@ -0,0 +1,43 @@ + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ми-38 + + + + + + + + + + + + \ No newline at end of file diff --git a/s1000d/Converter14_Source/BlankXML/dinamika.css b/s1000d/Converter14_Source/BlankXML/dinamika.css new file mode 100644 index 0000000..74b35c6 --- /dev/null +++ b/s1000d/Converter14_Source/BlankXML/dinamika.css @@ -0,0 +1,35 @@ + +td { + border: 1px solid black; + padding: 0.5ex; +} +.grayNote { + color: gray; +} +span.foot_label { + vertical-align: super; + font-size: smaller; + font-weight: bold; + text-decoration: underline; +} +div.foot { + display: inline; + font-size: small; + font-weight: medium; + font-family: serif; + font-variant: normal; + font-style: normal; +} +div.foot_inner { display: none; } +div.foot:hover div.foot_inner { + display: block; + border: 1px double black; + margin: 0em 1em; + padding: 1em; +} +.divTable { + justify-content: center; + margin: 0 auto; + max-width: 90%; + overflow-x: auto; +} diff --git a/s1000d/Converter14_Source/BlankXML/dml.xml b/s1000d/Converter14_Source/BlankXML/dml.xml new file mode 100644 index 0000000..59d4ac8 --- /dev/null +++ b/s1000d/Converter14_Source/BlankXML/dml.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/s1000d/Converter14_Source/BlankXML/imsmanifest.xml b/s1000d/Converter14_Source/BlankXML/imsmanifest.xml new file mode 100644 index 0000000..d1de9ed --- /dev/null +++ b/s1000d/Converter14_Source/BlankXML/imsmanifest.xml @@ -0,0 +1,20 @@ + + + + ADL SCORM + 2004 3rd Edition + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/s1000d/Converter14_Source/BlankXML/learning.xml b/s1000d/Converter14_Source/BlankXML/learning.xml new file mode 100644 index 0000000..a35f60f --- /dev/null +++ b/s1000d/Converter14_Source/BlankXML/learning.xml @@ -0,0 +1,45 @@ + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ми-38 + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/BlankXML/packages.xml b/s1000d/Converter14_Source/BlankXML/packages.xml new file mode 100644 index 0000000..79cc694 --- /dev/null +++ b/s1000d/Converter14_Source/BlankXML/packages.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/s1000d/Converter14_Source/BlankXML/pm.xml b/s1000d/Converter14_Source/BlankXML/pm.xml new file mode 100644 index 0000000..b4c4144 --- /dev/null +++ b/s1000d/Converter14_Source/BlankXML/pm.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/BlankXML/scormIndex.html b/s1000d/Converter14_Source/BlankXML/scormIndex.html new file mode 100644 index 0000000..67a09d5 --- /dev/null +++ b/s1000d/Converter14_Source/BlankXML/scormIndex.html @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + +
+ +
+
+ + diff --git a/s1000d/Converter14_Source/Docs/S1000D_Issue_4.1.pdf b/s1000d/Converter14_Source/Docs/S1000D_Issue_4.1.pdf new file mode 100644 index 0000000..0ee7515 Binary files /dev/null and b/s1000d/Converter14_Source/Docs/S1000D_Issue_4.1.pdf differ diff --git a/s1000d/Converter14_Source/Docs/infoCodes.txt b/s1000d/Converter14_Source/Docs/infoCodes.txt new file mode 100644 index 0000000..f8e5b6c --- /dev/null +++ b/s1000d/Converter14_Source/Docs/infoCodes.txt @@ -0,0 +1,563 @@ +Выписка из модуля данных BREX (содержит требования холдинга ВЕРТОЛЕТЫ РОССИИ к разработке АУК специального применения). +Перечень информационных кодов (information code): + 000 - Function, data for plans and description + 001 - Title page + 003 - Change record or highlights See also code 00T and code 00U + 004 - Access illustration + 005 - List of abbreviations + 006 - List of terms + 007 - List of symbols + 008 - Technical standard record + 009 - table of contents + 010 - General data + 011 - Function + 012 - General warnings and cautions and related safety data + 013 - Numeric index + 014 - Alphabetic and alphanumeric index + 015 - List of special materials + 016 - List of dangerous materials + 017 - List of related data - refer to code 00V + 018 - Introduction + 019 - Supplier list + 020 - Configuration + 021 - Copyright + 022 - Business rules + 023 - Administrative forms and data + 028 - General Refer to codes 010 and 018 + 029 - Data structure + 030 - Technical data + 031 - Electrical standard parts data + 033 - Technical data (functional breakdown) + 034 - Technical data (physical breakdown) + 040 - Description + 041 - Description of how it is made + 042 - Description of function + 043 - Description of function attributed to crew (functional breakdown) + 044 - Description of function (physical breakdown) + 045 - Designated use + 046 - Dependence on peripheral systems/equipment + 050 - Diagram/List + 051 - Wiring diagram + 052 - Routing diagram + 053 - Connection list + 054 - Schematic diagram + 055 - Location diagram + 056 - Equipment list + 057 - Wire list + 058 - Harness list + 059 - Maintenance envelope diagram + 060 - Product support equipment, tools and software + 061 - Special support equipment and tools + 062 - Standard support equipment and tools + 063 - Government supplied support equipment and tools + 064 - Locally made support equipment and tools + 065 - Software + 066 - Support equipment and tools data + 067 - Decals and instruction plates + 070 - Consumables, materials and expendables Supplies =consumables, materials and expendables + 071 - Consumables + 072 - Materials + 073 - Expendables + 074 - Data sheet for dangerous consumables and materials + 075 - Parts list + 076 - Fluid + 077 - Data sheet for consumables and materials + 078 - Fasteners + 080 - Mixture and solution + 081 - Chemical solution + 082 - Chemical mixture + 090 - Software documentation + 096 - Safety items and parts + 00A - List of illustrations - normally used in front matter data modules + 00B - List of support equipment - ormally used in front matter data modules + 00C - List of supplies - normally used in front matter data modules + 00D - List of spares - normally used in front matter data modules + 00E - Functional item numbers common information repository + 00F - Circuit breakers common information repository + 00G - Parts common information repository + 00H - Zones common information repository + 00J - Access panels and doors common information repository + 00K - Organizations common information repository + 00L - Supplies - List of products common information repository + 00M - Supplies - List of requirements common information repository + 00N - Support equipment common information repository + 00P - Product Cross-reference table (PCT) + 00Q - Conditions Cross-reference table (CCT) + 00T - Change record - refer to code 003 + 00U - Highlights - refer to code 003 + 00V - List of applicable specifications and documentation - refer to code 017 + 00W - Applicability Cross-reference table (ACT) + 00X - Controls and indicators common information repository + 00Y - List of charts and forms + 00Z - List of tables + 0A1 - Functional and/or physical areas common information repository + 0A2 - Applicability repository + 0A3 - Applicability Cross-reference table catalog + 0B0 - Maintenance planning information + 0B1 - Time limits + 0B2 - System maintenance/Inspection tasks list + 0B3 - Structure maintenance/inspection tasks lists + 0B4 - Zonal maintenance/inspection tasks list + 0B5 - Unscheduled check + 100 - Operation + 101 - List of consumables associated with operation + 102 - List of materials associated with operation + 103 - List of expendables associated with operation + 104 - List of special support equipment and tools associated with operation + 105 - List of support equipment and tools associated with operation + 106 - List of software associated with operation + 107 - Parts list associated with operation + 110 - Controls and indicators + 111 - Controls and indicators This code is used for crew + 112 - Modes of operation This code is used for crew + 115 - Displays and alerts + 120 - Pre-operation + 121 - Pre-operation procedure This code is used for crew + 122 - Siting + 123 - Shelter + 125 - Pre-operation procedures checklist - this code is used for crew + 126 - Conditions of readiness + 127 - Establish operating position + 130 - Normal operation + 131 - Normal operation procedure This code is used for crew + 132 - Start-up procedure for maintenance + 133 - Shutdown procedure for maintenance + 134 - Aviation checklist + 135 - Normal operation procedures checklist This code is used for crew + 136 - Ground running check + 138 - Ground running and performance adjustment + 139 - Nuclear, biological and chemical procedures + 140 - Emergency procedure + 141 - Emergency operation procedure This code is used for crew + 142 - Operation under unusual conditions + 143 - Radio interference suppression + 144 - Jamming and electronic countermeasures (ECM) + 145 - Emergency operation procedures checklist This code is used for crew + 146 - Emergency shutdown operation procedure (Checklist) + 150 - Post-operation + 151 - Post-operation procedure This code is used for crew + 155 - Post-operation procedures checklist This code is used for crew + 157 - Establish maintenance position + 160 - Loading/Unloading procedure + 161 - Special operation + 162 - Non-tactical operation + 169 - Mass and Balance + 170 - Handling + 171 - Lifting + 172 - Jacking + 173 - Shoring + 174 - Towing + 175 - Taxiing + 176 - Lowering + 177 - Stabilizing + 178 - Tethering + 179 - Debogging + 180 - Dispatch deviation + 181 - Deactivate for dispatch deviation + 200 - Servicing + 201 - List of consumables associated with servicing + 202 - List of materials associated with servicing + 203 - List of expendables associated with servicing + 204 - List of special support equipment and tools associated with servicing + 205 - List of support equipment and tools associated with servicing + 206 - List of software associated with servicing + 207 - Parts list associated with servicing + 210 - Fill + 211 - Refuel + 212 - Fill with oil + 213 - Fill with oxygen + 214 - Fill with nitrogen + 215 - Fill with air + 216 - Fill with water + 217 - Fill with hydrogen + 218 - Fill with other liquid + 219 - Fill with other gas + 220 - Drain liquid and release pressure + 221 - Defuel and drain fuel + 222 - Drain oil + 223 - Release oxygen pressure + 224 - Release nitrogen pressure + 225 - Release air pressure + 226 - Drain water + 227 - Release hydrogen pressure + 228 - Drain other liquid + 229 - Release other gas pressure + 230 - Bleed and prime + 231 - Bleed + 232 - Prime + 233 - Dry + 234 - Facility requirements associated with servicing + 236 - Fill with inert gas/inert liquid + 237 - Evacuate + 240 - Lubrication + 241 - Oil + 242 - Grease + 243 - Dry film + 250 - Clean and apply surface protection + 251 - Clean with chemical agent + 252 - Clean by abrasive blast + 253 - Clean by ultrasonics + 254 - Clean mechanically + 255 - Purge + 256 - Polish and apply wax + 257 - Paint and apply marking + 258 - Other procedure to clean + 259 - Other procedure to protect surfaces + 260 - Remove and prevent ice and remove contamination + 261 - Remove ice + 262 - Prevent ice + 263 - Use disinfectant/Sanitize + 264 - Remove contamination + 270 - Adjust, align and calibrate + 271 - Adjust + 272 - Align + 273 - Calibrate + 274 - Harmonize + 275 - Grooming + 276 - Rig + 277 - Compensate + 278 - Easily and quickly adjust after a battle damage repair + 279 - Easily and quickly align after a battle damage repair + 280 - Inspection + 281 - Scheduled inspection + 282 - Unscheduled inspection + 283 - Special regular inspection + 284 - Special irregular inspection + 285 - Structure inspections for allowable damage limits + 286 - Structure inspections for repair + 288 - Overhaul and retirement schedule + 289 - Check for filling quantity + 290 - Change of liquid/gas + 292 - Change of oil Code 222 + code 212 + 293 - Change of oxygen Code 223 + code 213 + 294 - Change of nitrogen Code 224 + code 214 + 295 - Change of air Code 225 + code 215 + 296 - Change of water Code 226 + code 216 + 297 - Change of hydrogen + 298 - Change of other liquid Code 228 + code 218 + 299 - Change of other gas Code 229 + code 219 + 300 - Examinations, tests and checks + 301 - List of consumables associated with examinations, tests and checks + 302 - List of materials associated with examinations, tests and checks + 303 - List of expendables associated with examinations, tests and checks + 304 - List of special support equipment and tools associated with examinations, tests and checks + 305 - List of support equipment and tools associated with examinations, tests and checks + 306 - List of software associated with examinations, tests and checks + 307 - Parts list associated with examinations, tests and checks + 310 - Visual examination + 311 - Visual examination without special equipment + 312 - Examination with a borescope + 315 - QA requirements + 320 - Operation test + 321 - Unit Break-in + 322 - Test and inspection + 330 - Test preparation + 331 - Connection of test equipment + 332 - Removal of test equipment + 333 - Installation of the unit before the test + 334 - Removal of the unit after the test + 335 - Concluding Final measures + 340 - Function test + 341 - Manual test + 342 - Automatic test + 343 - BIT + 344 - Compatibility test + 345 - System test + 346 - Other check + 347 - Start-up procedure for test + 348 - Finial acceptance test (FAT) + 349 - Test results + 350 - Structure test + 351 - Test for surface cracks with dye penetrant + 352 - Test for surface cracks with magnetic particles + 353 - Test for cracks and other defects with eddy current + 354 - Test for cracks and other defects with X-rays + 355 - Test for cracks and other defects with ultrasonic + 356 - Hardness test + 357 - Gamma ray + 358 - Resonance frequency + 359 - Thermographic test + 360 - Design data/tolerances check + 361 - Dimensions check + 362 - Pressure check + 363 - Flow check + 364 - Leak check + 365 - Continuity check + 366 - Resistance check + 367 - Electrical power check + 368 - Signal strength check + 369 - Other check + 370 - Monitor the condition + 371 - Oil analysis + 372 - Vibration analysis + 373 - Tracking check + 374 - Fuel analysis + 375 - Shooting accidental discharge analysis + 376 - Check post application of adhesive + 377 - Contamination analysis + 390 - Sample test + 396 - Flight control surface movement + 397 - Landing gear movement + 398 - Product configuration + 400 - Fault reports and isolation procedures + 401 - List of consumables associated with fault diagnosis + 402 - List of materials associated with fault diagnosis + 403 - List of expendables associated with fault diagnosis + 404 - List of special support equipment and tools associated with fault diagnosis + 405 - List of support equipment and tools associated with fault diagnosis + 406 - List of software associated with fault diagnosis + 407 - Parts list associated with fault diagnosis + 410 - General fault description + 411 - Isolated fault + 412 - Detected fault + 413 - Observed fault + 414 - Correlated fault + 415 - Impact of fault + 420 - General fault isolation procedure + 421 - Fault isolation procedure + 429 - Diagnostics + 430 - Fault isolation task supporting data + 440 - Index + 441 - Fault code index + 442 - Maintenance message index + 443 - Post-troubleshooting shutdown procedures + 500 - Disconnect, remove and disassemble procedures + 501 - List of consumables associated with removal + 502 - List of materials associated with removal + 503 - List of expendables associated with removal + 504 - List of special support equipment and tools associated with removal + 505 - List of support equipment and tools associated with removal + 506 - List of software associated with removal + 507 - Parts list associated with removal + 510 - Disconnect procedure + 520 - Remove procedure + 521 - Return to basic configuration Undressing + 522 - Remove support equipment/Remove from support equipment + 523 - Preparation before removal + 524 - Follow-on maintenance + 525 - Ammunition unloading + 526 - Deactivate launching device + 530 - Disassemble procedure + 531 - Disassemble procedure on operation site + 540 - Open for access procedure + 550 - Unload software procedure + 551 - Fault monitoring storage readout (downloading) + 552 - Data erasing + 553 - Display, copy and print of data + 560 - Deactivation procedure + 561 - De-Energize electrical network + 562 - Depressurize hydraulics + 563 - Deactivation maintenance practice + 600 - Repairs and locally make procedures and data + 601 - List of consumables associated with repairs + 602 - List of materials associated with repairs + 603 - List of expendables associated with repairs + 604 - List of special support equipment and tools associated with repairs + 605 - List of support equipment and tools associated with repairs + 606 - List of software associated with repairs + 607 - Parts list associated with repairs + 610 - Add material + 611 - Insulation + 612 - Metalize + 613 - Pot + 614 - Remetal + 615 - Retread + 620 - Attach material + 621 - Bond + 622 - Crimp + 623 - Braze + 624 - Rivet + 625 - Solder + 626 - Splice + 627 - Weld + 630 - Change the mechanical strength/structure of material + 631 - Anneal + 632 - Case harden + 633 - Cure + 634 - Normalize + 635 - Shot-peen + 636 - Temper + 638 - Other treatment + 639 - Other process to change the mechanical strength/structure of material + 640 - Change the surface finish of material + 641 - Anodize + 642 - Buff + 643 - Burnish + 644 - Chromate + 645 - Hone + 646 - Lap + 647 - Plate + 648 - Polish + 649 - Clean-up of dents, cracks and scratches + 650 - Remove material + 651 - Abrasive blast + 652 - Bore/drill/ream + 653 - Electrical/electrochemical/chemical etch + 654 - Broach + 655 - Grind + 656 - Mill + 657 - Thread/tap + 658 - Turn + 659 - Other process to remove material + 660 - Structure repair procedure and data + 661 - Allowable damage + 662 - Temporary repair procedure + 663 - Standard repair procedure + 664 - Special repair procedure + 665 - Fly-in repair procedure + 666 - Material classification + 667 - Structure classification + 668 - Allowable damage of composite structures + 669 - Allowable damage of mixed structures + 670 - Locally make procedure and data + 671 - Making of parts + 680 - Battle damage repair procedure and data + 681 - Damage repair symbol marking + 682 - Identification of damaged hardware + 683 - Damage assessment + 684 - Utilization degradation + 685 - Repair procedure + 686 - Isolation procedure + 687 - Function test after battle damage repair + 688 - Battle damage repair kit + 689 - Damage repair + 690 - Miscellaneous + 691 - Marking + 692 - Connector repair + 693 - Varnish + 700 - Assemble, install and connect procedures + 701 - List of consumables associated with installation + 702 - List of materials associated with installation + 703 - List of expendables associated with installation + 704 - List of special support equipment and tools associated with installation + 705 - List of support equipment and tools associated with installation + 706 - List of software associated with installation + 707 - Parts list associated with installation + 710 - Assemble procedure + 711 - Tighten procedure + 712 - Lock procedure + 713 - Pack procedure + 714 - Assemble procedure on operation site + 720 - Install procedure + 721 - Build up to usable configuration Dressing + 722 - Install support equipment/Install on support equipment + 723 - Preparation before installation + 724 - Follow-on maintenance + 725 - Ammunition loading + 726 - Activate launching device + 727 - Site location plan + 728 - Foundation preparation + 730 - Connect procedure + 740 - Close after access procedure + 750 - Load software procedure + 752 - Data loading + 760 - Reactivation procedure + 761 - Energize electrical network + 762 - Pressurize hydraulics + 800 - Package, handling, storage, and transportation + 801 - List of consumables associated with storage + 802 - List of materials associated with storage + 803 - List of expendables associated with storage + 804 - List of special support equipment and tools associated with storage + 805 - List of support equipment and tools associated with storage + 806 - List of software associated with storage + 807 - Parts list associated with storage + 810 - Preservation procedure + 811 - Preparation for vehicle transportation + 812 - Shipping and storage - General + 820 - Procedure to remove preservation material + 830 - Procedure to put item in containers + 831 - Vehicle loading + 832 - Procedure to pack items + 840 - Procedure to remove item from containers + 841 - Vehicle unloading + 842 - Procedure to unpack items + 850 - Procedure to keep item serviceable when in storage + 860 - Procedure to move item when in storage + 870 - Procedure to prepare item for use after storage + 871 - Set on condition + 880 - Procedure when item got out of storage + 890 - Life data of item when in storage + 900 - Miscellaneous + 901 - Miscellaneous list of consumables + 902 - Miscellaneous list of materials + 903 - Miscellaneous list of expendables + 904 - Miscellaneous list of special support equipment and tools + 905 - Miscellaneous list of support equipment and tools + 906 - Miscellaneous list of software + 907 - Miscellaneous parts list + 910 - Miscellaneous + 911 - Illustration + 912 - Handling procedure + 913 - General maintenance procedure + 914 - Container data module + 915 - Facilities + 916 - Maintenance allocation + 917 - Non-S1000D publication + 920 - Change = Remove and install + 921 - Change = Remove and install a new item + 922 - Change = Remove and install the removed item + 923 - Change = Disconnect and connect an item + 930 - Service bulletin + 933 - Accomplishment procedure - Task set + 934 - Material information + 940 - Provisioning data + 941 - Illustrated parts data + 942 - Numerical index + 950 - Composite information + 951 - Generic process + 952 - Generic learning content + 961 - Calculation worksheets + 970 - Approved vendor processes + 980 - Environmental protection, fire-fighting and rescue + 981 - Air cleaning + 982 - Sewage treatment + 989 - Fire-fighting and rescue + 990 - Neutralization and disposal + 991 - Neutralization of ordnance + 992 - Neutralization of substance + 996 - Disposal of ordnance + 997 - Disposal of product + 998 - Disposal of substance + C00 - Computer systems, software and data + C01 - Miscellaneous list of consumables associated with computer systems, software and data + C02 - Miscellaneous list of materials associated with computer systems, software and data + C03 - Miscellaneous list of expendables associated with computer systems, software and data + C04 - Miscellaneous list of special support equipment and tools associated with computer systems, software and data + C05 - Miscellaneous list of support equipment and tools associated with computer systems, software and data + C06 - Miscellaneous list of software associated with computer systems, software and data + C07 - Miscellaneous parts list associated with computer systems, software and data + C13 - Notes + C14 - Problem handling + C15 - Summary of content + C20 - System administration + C21 - System monitoring + C22 - Description of command + C23 - Connect hardware + C25 - System recovery + C26 - Backup and restore + C27 - Reboot + C30 - Coordinate + C31 - Defragmentation + C32 - Input/Output media + C33 - Disk mirroring + C34 - Clear interference + C35 - Time check + C36 - Compatibility check + C50 - Manage data + C51 - Move data + C52 - Manipulate/Use data + C53 - Description of data storage + C60 - Programming information + C61 - Program flow chart + C62 - Processing reference guide + C70 - Security and privacy + C72 - Security information + C73 - Security procedures + C74 - List of security/classification codes + C75 - Access control + C90 - Miscellaneous + C91 - Quality assurance + C92 - Vendor information + C95 - Naming conventions + C96 - Technical requirements \ No newline at end of file diff --git a/s1000d/Converter14_Source/Docs/Образец задания хотспотов.svg b/s1000d/Converter14_Source/Docs/Образец задания хотспотов.svg new file mode 100644 index 0000000..9b33c62 --- /dev/null +++ b/s1000d/Converter14_Source/Docs/Образец задания хотспотов.svg @@ -0,0 +1,3486 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Е + + + + + + + + + + + + + + + + + + + Б + + + + + + + + + + + + + + + + + + + Б + + + + + + + + + + + + + + + + + + + + + + + + + + + + К + + + + + + + + + + + + + + + + + + + + + + + + + + + В + + + + + + + + + + + + + + + + А + + + + + + + + + + + + + + + + А + + + + + + + + + + + + + + + + + + К + + + + + + В + + + + + + Ось балки + + + + + + Б-Б + + + + + + Ось шп.2 + + + + + + А-А + + + + + + Ось шп.2 + + + + + + Вид по полету + + + + + + Ось симметриии вертолета + + + + + + Канат лебедки при закатке колесных грузов + + + + + + Ось шп.1 + + + + + + Ось шп.2 + + + + + + Ось шп.3 + + + + + + Канат лебедки при закатке колесных грузов + + + + + + Крайнее положение стрелы + + + + + + Дверной проем + + + + + + Середина двери + + + + + + 1200 + + + + + + Канатлебедки + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + 4 + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + + + + + + + + + + + + 6 + + + + + + + + + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + + + + + + + + + 9 + + + + + + + + + + + + + + + + + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + + + + 11 + + + + + + + + + + + + + + + + + + + + + + + + + 15 + + + + diff --git a/s1000d/Converter14_Source/Docs/Образец задания хотспотов.txt b/s1000d/Converter14_Source/Docs/Образец задания хотспотов.txt new file mode 100644 index 0000000..7593d62 --- /dev/null +++ b/s1000d/Converter14_Source/Docs/Образец задания хотспотов.txt @@ -0,0 +1,11 @@ +1 - стойка +2 - стрела +3 - крюк с вертлюгом +4 - гидроцилиндр силовой +5 - гидроцилиндр поворота +6 - image1.svg +7 - кронштейн +9 - болт крепления нижней опоры +10 - болт крепления верхней опоры (5 шт.) +11 - image2.svg +15 - колокол \ No newline at end of file diff --git a/s1000d/Converter14_Source/Icons/S1000D_logo.png b/s1000d/Converter14_Source/Icons/S1000D_logo.png new file mode 100644 index 0000000..80914af Binary files /dev/null and b/s1000d/Converter14_Source/Icons/S1000D_logo.png differ diff --git a/s1000d/Converter14_Source/Icons/accept.png b/s1000d/Converter14_Source/Icons/accept.png new file mode 100644 index 0000000..7786ac7 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/accept.png differ diff --git a/s1000d/Converter14_Source/Icons/add.png b/s1000d/Converter14_Source/Icons/add.png new file mode 100644 index 0000000..60a7a29 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/add.png differ diff --git a/s1000d/Converter14_Source/Icons/add_gray.png b/s1000d/Converter14_Source/Icons/add_gray.png new file mode 100644 index 0000000..2b30640 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/add_gray.png differ diff --git a/s1000d/Converter14_Source/Icons/blue_squares.png b/s1000d/Converter14_Source/Icons/blue_squares.png new file mode 100644 index 0000000..ee5738d Binary files /dev/null and b/s1000d/Converter14_Source/Icons/blue_squares.png differ diff --git a/s1000d/Converter14_Source/Icons/chrome.png b/s1000d/Converter14_Source/Icons/chrome.png new file mode 100644 index 0000000..641dc8a Binary files /dev/null and b/s1000d/Converter14_Source/Icons/chrome.png differ diff --git a/s1000d/Converter14_Source/Icons/chrome_refresh.png b/s1000d/Converter14_Source/Icons/chrome_refresh.png new file mode 100644 index 0000000..b0fdc60 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/chrome_refresh.png differ diff --git a/s1000d/Converter14_Source/Icons/delete.png b/s1000d/Converter14_Source/Icons/delete.png new file mode 100644 index 0000000..30a45b8 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/delete.png differ diff --git a/s1000d/Converter14_Source/Icons/doc_config.ico b/s1000d/Converter14_Source/Icons/doc_config.ico new file mode 100644 index 0000000..f4b1f02 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/doc_config.ico differ diff --git a/s1000d/Converter14_Source/Icons/doc_config.png b/s1000d/Converter14_Source/Icons/doc_config.png new file mode 100644 index 0000000..5bc7e71 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/doc_config.png differ diff --git a/s1000d/Converter14_Source/Icons/doc_head_add_child.png b/s1000d/Converter14_Source/Icons/doc_head_add_child.png new file mode 100644 index 0000000..fcc8a14 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/doc_head_add_child.png differ diff --git a/s1000d/Converter14_Source/Icons/doc_head_blue+.png b/s1000d/Converter14_Source/Icons/doc_head_blue+.png new file mode 100644 index 0000000..aa96284 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/doc_head_blue+.png differ diff --git a/s1000d/Converter14_Source/Icons/doc_head_blue.png b/s1000d/Converter14_Source/Icons/doc_head_blue.png new file mode 100644 index 0000000..6a43dc9 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/doc_head_blue.png differ diff --git a/s1000d/Converter14_Source/Icons/doc_head_blue_exclamation.png b/s1000d/Converter14_Source/Icons/doc_head_blue_exclamation.png new file mode 100644 index 0000000..35097fa Binary files /dev/null and b/s1000d/Converter14_Source/Icons/doc_head_blue_exclamation.png differ diff --git a/s1000d/Converter14_Source/Icons/docs_head_orange.png b/s1000d/Converter14_Source/Icons/docs_head_orange.png new file mode 100644 index 0000000..311e78c Binary files /dev/null and b/s1000d/Converter14_Source/Icons/docs_head_orange.png differ diff --git a/s1000d/Converter14_Source/Icons/down_arrow.png b/s1000d/Converter14_Source/Icons/down_arrow.png new file mode 100644 index 0000000..3e568a2 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/down_arrow.png differ diff --git a/s1000d/Converter14/Icons/edl_logo.png b/s1000d/Converter14_Source/Icons/edl_logo.png similarity index 100% rename from s1000d/Converter14/Icons/edl_logo.png rename to s1000d/Converter14_Source/Icons/edl_logo.png diff --git a/s1000d/Converter14_Source/Icons/exclamation.png b/s1000d/Converter14_Source/Icons/exclamation.png new file mode 100644 index 0000000..8270104 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/exclamation.png differ diff --git a/s1000d/Converter14_Source/Icons/export_logo.png b/s1000d/Converter14_Source/Icons/export_logo.png new file mode 100644 index 0000000..ae85832 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/export_logo.png differ diff --git a/s1000d/Converter14_Source/Icons/folder+.png b/s1000d/Converter14_Source/Icons/folder+.png new file mode 100644 index 0000000..cbd288c Binary files /dev/null and b/s1000d/Converter14_Source/Icons/folder+.png differ diff --git a/s1000d/Converter14_Source/Icons/folder.png b/s1000d/Converter14_Source/Icons/folder.png new file mode 100644 index 0000000..8c3ebc1 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/folder.png differ diff --git a/s1000d/Converter14_Source/Icons/folder_add_child.png b/s1000d/Converter14_Source/Icons/folder_add_child.png new file mode 100644 index 0000000..b51948e Binary files /dev/null and b/s1000d/Converter14_Source/Icons/folder_add_child.png differ diff --git a/s1000d/Converter14_Source/Icons/folder_exclamation.png b/s1000d/Converter14_Source/Icons/folder_exclamation.png new file mode 100644 index 0000000..48dce51 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/folder_exclamation.png differ diff --git a/s1000d/Converter14_Source/Icons/folder_search.png b/s1000d/Converter14_Source/Icons/folder_search.png new file mode 100644 index 0000000..d3578d5 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/folder_search.png differ diff --git a/s1000d/Converter14_Source/Icons/folder_with_doc.png b/s1000d/Converter14_Source/Icons/folder_with_doc.png new file mode 100644 index 0000000..16ff09b Binary files /dev/null and b/s1000d/Converter14_Source/Icons/folder_with_doc.png differ diff --git a/s1000d/Converter14_Source/Icons/folders.png b/s1000d/Converter14_Source/Icons/folders.png new file mode 100644 index 0000000..d6b4470 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/folders.png differ diff --git a/s1000d/Converter14_Source/Icons/gray_cross_.png b/s1000d/Converter14_Source/Icons/gray_cross_.png new file mode 100644 index 0000000..9ac5a25 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/gray_cross_.png differ diff --git a/s1000d/Converter14_Source/Icons/green_squares.png b/s1000d/Converter14_Source/Icons/green_squares.png new file mode 100644 index 0000000..c2bed9b Binary files /dev/null and b/s1000d/Converter14_Source/Icons/green_squares.png differ diff --git a/s1000d/Converter14_Source/Icons/item_del.png b/s1000d/Converter14_Source/Icons/item_del.png new file mode 100644 index 0000000..f355a0e Binary files /dev/null and b/s1000d/Converter14_Source/Icons/item_del.png differ diff --git a/s1000d/Converter14_Source/Icons/logo.png b/s1000d/Converter14_Source/Icons/logo.png new file mode 100644 index 0000000..3cfc4d2 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/logo.png differ diff --git a/s1000d/Converter14_Source/Icons/lyx_import.png b/s1000d/Converter14_Source/Icons/lyx_import.png new file mode 100644 index 0000000..884cb15 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/lyx_import.png differ diff --git a/s1000d/Converter14_Source/Icons/mp3_file.png b/s1000d/Converter14_Source/Icons/mp3_file.png new file mode 100644 index 0000000..57a64b0 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/mp3_file.png differ diff --git a/s1000d/Converter14_Source/Icons/question.png b/s1000d/Converter14_Source/Icons/question.png new file mode 100644 index 0000000..e33422d Binary files /dev/null and b/s1000d/Converter14_Source/Icons/question.png differ diff --git a/s1000d/Converter14_Source/Icons/red_cross.png b/s1000d/Converter14_Source/Icons/red_cross.png new file mode 100644 index 0000000..32df3de Binary files /dev/null and b/s1000d/Converter14_Source/Icons/red_cross.png differ diff --git a/s1000d/Converter14_Source/Icons/red_cross_.png b/s1000d/Converter14_Source/Icons/red_cross_.png new file mode 100644 index 0000000..e03bf87 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/red_cross_.png differ diff --git a/s1000d/Converter14_Source/Icons/refresh.png b/s1000d/Converter14_Source/Icons/refresh.png new file mode 100644 index 0000000..44bc15b Binary files /dev/null and b/s1000d/Converter14_Source/Icons/refresh.png differ diff --git a/s1000d/Converter14_Source/Icons/save.png b/s1000d/Converter14_Source/Icons/save.png new file mode 100644 index 0000000..605f09f Binary files /dev/null and b/s1000d/Converter14_Source/Icons/save.png differ diff --git a/s1000d/Converter14_Source/Icons/scorm_logo.png b/s1000d/Converter14_Source/Icons/scorm_logo.png new file mode 100644 index 0000000..9e775fb Binary files /dev/null and b/s1000d/Converter14_Source/Icons/scorm_logo.png differ diff --git a/s1000d/Converter14_Source/Icons/sheep_up_arrow.png b/s1000d/Converter14_Source/Icons/sheep_up_arrow.png new file mode 100644 index 0000000..bf1be6a Binary files /dev/null and b/s1000d/Converter14_Source/Icons/sheep_up_arrow.png differ diff --git a/s1000d/Converter14_Source/Icons/sheet_blank.png b/s1000d/Converter14_Source/Icons/sheet_blank.png new file mode 100644 index 0000000..4c3b220 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/sheet_blank.png differ diff --git a/s1000d/Converter14_Source/Icons/squares_blue+.png b/s1000d/Converter14_Source/Icons/squares_blue+.png new file mode 100644 index 0000000..6e618a7 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/squares_blue+.png differ diff --git a/s1000d/Converter14_Source/Icons/squares_blue.png b/s1000d/Converter14_Source/Icons/squares_blue.png new file mode 100644 index 0000000..ec51dea Binary files /dev/null and b/s1000d/Converter14_Source/Icons/squares_blue.png differ diff --git a/s1000d/Converter14_Source/Icons/squares_gray.png b/s1000d/Converter14_Source/Icons/squares_gray.png new file mode 100644 index 0000000..4d6685f Binary files /dev/null and b/s1000d/Converter14_Source/Icons/squares_gray.png differ diff --git a/s1000d/Converter14_Source/Icons/star_in_circle.png b/s1000d/Converter14_Source/Icons/star_in_circle.png new file mode 100644 index 0000000..cbb60ab Binary files /dev/null and b/s1000d/Converter14_Source/Icons/star_in_circle.png differ diff --git a/s1000d/Converter14_Source/Icons/suspend.png b/s1000d/Converter14_Source/Icons/suspend.png new file mode 100644 index 0000000..dfc3d36 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/suspend.png differ diff --git a/s1000d/Converter14_Source/Icons/svg_file.png b/s1000d/Converter14_Source/Icons/svg_file.png new file mode 100644 index 0000000..ad34629 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/svg_file.png differ diff --git a/s1000d/Converter14_Source/Icons/up_arrow.png b/s1000d/Converter14_Source/Icons/up_arrow.png new file mode 100644 index 0000000..88a62c4 Binary files /dev/null and b/s1000d/Converter14_Source/Icons/up_arrow.png differ diff --git a/s1000d/Converter14_Source/Icons/xml.png b/s1000d/Converter14_Source/Icons/xml.png new file mode 100644 index 0000000..be8152f Binary files /dev/null and b/s1000d/Converter14_Source/Icons/xml.png differ diff --git a/s1000d/Converter14_Source/S1000DEditor.pro b/s1000d/Converter14_Source/S1000DEditor.pro new file mode 100644 index 0000000..02bb643 --- /dev/null +++ b/s1000d/Converter14_Source/S1000DEditor.pro @@ -0,0 +1,54 @@ +QT += core gui xml +#gui-private + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +CONFIG += c++11 +CONFIG += console + +# You can make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +SOURCES += \ + console.cpp \ + exportdialog.cpp \ + html.cpp \ + lyx.cpp \ + main.cpp \ + editormainwindow.cpp \ + ru_const.cpp \ + s1000d_manager.cpp \ + splashform.cpp + +HEADERS += \ + console.h \ + editormainwindow.h \ + exportdialog.h \ + html.h \ + lyx.h \ + ru_const.h \ + s1000d_manager.h \ + splashform.h + +FORMS += \ + editormainwindow.ui \ + exportdialog.ui \ + splashform.ui + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target + +RESOURCES += \ + S1000DResources.qrc + +win32: RC_ICONS = $$PWD/Icons/doc_config.ico + +#QTPLUGIN +=qico \ +# qsvg \ +# qjpeg \ +# qwbmp +#LIBS +=-L$(QTDIR)/plugins/imageformats +#INCLUDEPATH += $(QTDIR)/plugins/imageformats diff --git a/s1000d/Converter14_Source/S1000DResources.qrc b/s1000d/Converter14_Source/S1000DResources.qrc new file mode 100644 index 0000000..8d20040 --- /dev/null +++ b/s1000d/Converter14_Source/S1000DResources.qrc @@ -0,0 +1,43 @@ + + + Icons/doc_config.png + Icons/doc_head_blue.png + Icons/folder.png + Icons/folder_search.png + Icons/folder_with_doc.png + Icons/folder+.png + Icons/folders.png + Icons/suspend.png + Icons/doc_head_blue+.png + Icons/save.png + Icons/logo.png + Icons/docs_head_orange.png + BlankXML/pm.xml + Icons/item_del.png + BlankXML/crew.xml + BlankXML/descript.xml + BlankXML/learning.xml + Icons/add.png + Icons/delete.png + Icons/down_arrow.png + Icons/up_arrow.png + Icons/question.png + Icons/lyx_import.png + Icons/refresh.png + BlankXML/blank.html + Icons/chrome.png + Icons/doc_config.ico + Icons/S1000D_logo.png + Icons/scorm_logo.png + Icons/chrome_refresh.png + Icons/export_logo.png + BlankXML/dml.xml + BlankXML/imsmanifest.xml + Icons/accept.png + Icons/exclamation.png + Icons/doc_head_blue_exclamation.png + Icons/folder_exclamation.png + BlankXML/packages.xml + BlankXML/scormIndex.html + + diff --git a/s1000d/Converter14_Source/Schemas/README.md b/s1000d/Converter14_Source/Schemas/README.md new file mode 100644 index 0000000..abc7658 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/README.md @@ -0,0 +1,4 @@ +# International specification for technical publications +# S1000D Issue No. 4.1 + +http://www.s1000d.org/S1000D_4-1/xml_schema_flat/ diff --git a/s1000d/Converter14_Source/Schemas/appliccrossreftable.xsd b/s1000d/Converter14_Source/Schemas/appliccrossreftable.xsd new file mode 100644 index 0000000..2ee79d7 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/appliccrossreftable.xsd @@ -0,0 +1,5058 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/appliccrossreftable.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/brex.xsd b/s1000d/Converter14_Source/Schemas/brex.xsd new file mode 100644 index 0000000..19657b5 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/brex.xsd @@ -0,0 +1,5522 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/brex.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/checklist.xsd b/s1000d/Converter14_Source/Schemas/checklist.xsd new file mode 100644 index 0000000..508addc --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/checklist.xsd @@ -0,0 +1,7606 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/checklist.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/comment.xsd b/s1000d/Converter14_Source/Schemas/comment.xsd new file mode 100644 index 0000000..2f3d179 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/comment.xsd @@ -0,0 +1,4895 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/comment.xsd + Root element: comment + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/comrep.xsd b/s1000d/Converter14_Source/Schemas/comrep.xsd new file mode 100644 index 0000000..6fa08c8 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/comrep.xsd @@ -0,0 +1,7788 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/comrep.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/condcrossreftable.xsd b/s1000d/Converter14_Source/Schemas/condcrossreftable.xsd new file mode 100644 index 0000000..c24db04 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/condcrossreftable.xsd @@ -0,0 +1,4593 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/condcrossreftable.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/container.xsd b/s1000d/Converter14_Source/Schemas/container.xsd new file mode 100644 index 0000000..0bd7680 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/container.xsd @@ -0,0 +1,4926 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/container.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/crew.xsd b/s1000d/Converter14_Source/Schemas/crew.xsd new file mode 100644 index 0000000..995fe62 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/crew.xsd @@ -0,0 +1,5924 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/crew.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/dc.xsd b/s1000d/Converter14_Source/Schemas/dc.xsd new file mode 100644 index 0000000..109a705 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/dc.xsd @@ -0,0 +1,58 @@ + + + + Issue number: 4.1 + Issue date: 2012-03-30 + Release number: 4.1 + Release date: 2012-03-30 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/dc.xsd + Copyright: + Copyright (C) 2011 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/ddn.xsd b/s1000d/Converter14_Source/Schemas/ddn.xsd new file mode 100644 index 0000000..4d75491 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/ddn.xsd @@ -0,0 +1,4572 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/ddn.xsd + Root element: ddn + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/descript.xsd b/s1000d/Converter14_Source/Schemas/descript.xsd new file mode 100644 index 0000000..c97b2c4 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/descript.xsd @@ -0,0 +1,5524 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/descript.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/dml.xsd b/s1000d/Converter14_Source/Schemas/dml.xsd new file mode 100644 index 0000000..2135401 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/dml.xsd @@ -0,0 +1,4565 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/dml.xsd + Root element: dml + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/fault.xsd b/s1000d/Converter14_Source/Schemas/fault.xsd new file mode 100644 index 0000000..0c08539 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/fault.xsd @@ -0,0 +1,7561 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/fault.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/frontmatter.xsd b/s1000d/Converter14_Source/Schemas/frontmatter.xsd new file mode 100644 index 0000000..5b0d1d0 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/frontmatter.xsd @@ -0,0 +1,5620 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/frontmatter.xsd + Root element: dmodule + Copyright: + Copyright (C) 2010 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/ipd.xsd b/s1000d/Converter14_Source/Schemas/ipd.xsd new file mode 100644 index 0000000..fce4987 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/ipd.xsd @@ -0,0 +1,5972 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/ipd.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/learning.xsd b/s1000d/Converter14_Source/Schemas/learning.xsd new file mode 100644 index 0000000..c9178d6 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/learning.xsd @@ -0,0 +1,6425 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/learning.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/pm.xsd b/s1000d/Converter14_Source/Schemas/pm.xsd new file mode 100644 index 0000000..3e09aae --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/pm.xsd @@ -0,0 +1,4855 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/pm.xsd + Root element: pm + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/prdcrossreftable.xsd b/s1000d/Converter14_Source/Schemas/prdcrossreftable.xsd new file mode 100644 index 0000000..1064a64 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/prdcrossreftable.xsd @@ -0,0 +1,4448 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/prdcrossreftable.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/proced.xsd b/s1000d/Converter14_Source/Schemas/proced.xsd new file mode 100644 index 0000000..8b1af24 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/proced.xsd @@ -0,0 +1,6837 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/proced.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/process.xsd b/s1000d/Converter14_Source/Schemas/process.xsd new file mode 100644 index 0000000..f2acfeb --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/process.xsd @@ -0,0 +1,7819 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/process.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/rdf.xsd b/s1000d/Converter14_Source/Schemas/rdf.xsd new file mode 100644 index 0000000..65b3c09 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/rdf.xsd @@ -0,0 +1,30 @@ + + + + Issue number: 4.0 + Issue date: 2008-08-01 + Release number: 2.0 + Release date: 2003-05-31 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/rdf.xsd + Copyright: + Copyright (C) 2011 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/sb.xsd b/s1000d/Converter14_Source/Schemas/sb.xsd new file mode 100644 index 0000000..df3845b --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/sb.xsd @@ -0,0 +1,7883 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/sb.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/schedul.xsd b/s1000d/Converter14_Source/Schemas/schedul.xsd new file mode 100644 index 0000000..082bbc3 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/schedul.xsd @@ -0,0 +1,7891 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/schedul.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/scocontent.xsd b/s1000d/Converter14_Source/Schemas/scocontent.xsd new file mode 100644 index 0000000..a77ecda --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/scocontent.xsd @@ -0,0 +1,5542 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/scocontent.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/scormcontentpackage.xsd b/s1000d/Converter14_Source/Schemas/scormcontentpackage.xsd new file mode 100644 index 0000000..db688f7 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/scormcontentpackage.xsd @@ -0,0 +1,5000 @@ + + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/scormcontentpackage.xsd + Root element: scormContentPackage + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/update.xsd b/s1000d/Converter14_Source/Schemas/update.xsd new file mode 100644 index 0000000..3aef8fb --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/update.xsd @@ -0,0 +1,7479 @@ + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/update.xsd + Root element: dataUpdateFile + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/wrngdata.xsd b/s1000d/Converter14_Source/Schemas/wrngdata.xsd new file mode 100644 index 0000000..c626540 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/wrngdata.xsd @@ -0,0 +1,5748 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/wrngdata.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/wrngflds.xsd b/s1000d/Converter14_Source/Schemas/wrngflds.xsd new file mode 100644 index 0000000..8b2cb9d --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/wrngflds.xsd @@ -0,0 +1,5567 @@ + + + + + + Issue number: 4.1 + Issue date: 2012-12-31 + Release number: 4.1 + Release date: 2012-12-25 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/wrngflds.xsd + Root element: dmodule + Copyright: + Copyright (C) 2012 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/xcf.xsd b/s1000d/Converter14_Source/Schemas/xcf.xsd new file mode 100644 index 0000000..95b0b51 --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/xcf.xsd @@ -0,0 +1,136 @@ + + + + Issue number: 4.0 + Issue date: 2008-08-01 + Release number: 4.0 + Release date: 2008-08-01 + URL: http://www.s1000d.org/S1000D_4-0/xml_schema_flat/xcf.xsd + Root element: webcgm + Copyright: + Copyright (C) 2011 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/Schemas/xlink.xsd b/s1000d/Converter14_Source/Schemas/xlink.xsd new file mode 100644 index 0000000..3134bfb --- /dev/null +++ b/s1000d/Converter14_Source/Schemas/xlink.xsd @@ -0,0 +1,134 @@ + + + + Issue number: 4.0 + Issue date: 2008-08-01 + Release number: 2.0 + Release date: 2003-05-31 + URL: http://www.s1000d.org/S1000D_4-1/xml_schema_flat/xlink.xsd + Copyright: + Copyright (C) 2011 by each of the following organizations: + 1. AeroSpace and Defence Industries Associations of Europe - ASD. + 2. Ministries of Defence of the member countries of ASD. + + Limitations of Liability: + + 1. This material is provided "As Is" and neither ASD nor any person who has contributed to the creation, revision or maintenance of the material makes any representations or warranties, express or implied, including but not limited to, warranties of merchantability or fitness for any particular purpose. + 2. Neither ASD nor any person who has contributed to the creation, revision or maintenance of this material shall be liable for any direct, indirect, special or consequential damages or any other liability arising from any use of this material. + 3. Revisions to this document may occur after its issuance. The user is responsible for determining if revisions to the material contained in this document have occurred and are applicable. + + Remarks: none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/s1000d/Converter14_Source/app/dinamika/banner.png b/s1000d/Converter14_Source/app/dinamika/banner.png new file mode 100644 index 0000000..5e624c1 Binary files /dev/null and b/s1000d/Converter14_Source/app/dinamika/banner.png differ diff --git a/s1000d/Converter14_Source/app/dinamika/dinamika.css b/s1000d/Converter14_Source/app/dinamika/dinamika.css new file mode 100644 index 0000000..0f45450 --- /dev/null +++ b/s1000d/Converter14_Source/app/dinamika/dinamika.css @@ -0,0 +1,100 @@ +div.S1000Dpara { + text-indent: 35px; + text-align: justify; +} +td { + border: 1px solid black; + padding: 0.5ex; +} +.grayNote { + color: gray; +} + +span.foot_label { + display: inline; + vertical-align: super; + font-size: smaller; + /*font-weight: bold;*/ + text-decoration: underline; + font-weight: medium; + font-family: serif; + font-variant: normal; + font-style: normal; + padding: 2px; + color: rgb(124, 37, 41); +} +/* +div.foot { + display: inline; + font-size: small; + font-weight: medium; + font-family: serif; + font-variant: normal; + font-style: normal; +} +div.foot_inner { display: none; } +div.foot:hover div.foot_inner { + display: block; + border: 1px double rgb(124, 37, 41); + margin: 0em 1em; + padding: 1em; +} */ +.divTable { + justify-content: center; + margin: 0 auto; + max-width: 90%; + overflow-x: auto; +} +body { + font-family: RobotoRegular, Arial, sans-serif; + font-size: 16px; + line-height: 20px; + background: #fff; + color: #212121; +} +#tooltip { + background: rgb(124, 37, 41); + color: white; + border: 1px solid white; + padding: 5px; +} +#tooltipImg { + position: absolute; + background: white; + border: 2px solid rgb(124, 37, 41); + border-radius: 5px; + padding: 5px; + max-width: 500px; +} +#zoom { + width:34px; + height:34px; + border: 1px solid white; + background: rgba(124, 37, 41, 0.5); +} +#zoom:hover { + background: rgb(124, 37, 41); +} +.container_text table { + margin-bottom: 10px; +} +.container_text table.S1000DrandomList td { + height: 30px; + padding: 5px; + padding-left: 0px; +} + +.ui-widget-header { + border: 1px solid rgb(124, 37, 41); + background: rgb(124, 37, 41); + color: #ffffff; + font-weight: bold; +} +.ui-widget { + font-family: Arial,sans-serif; + font-size: 1.0em; +} +.ui-widget .ui-widget { + font-size: 0.9em; +} + diff --git a/s1000d/Converter14_Source/app/dinamika/dinamika.js b/s1000d/Converter14_Source/app/dinamika/dinamika.js new file mode 100644 index 0000000..ba3c511 --- /dev/null +++ b/s1000d/Converter14_Source/app/dinamika/dinamika.js @@ -0,0 +1,162 @@ +var timerId; +var mouseOverImg; + +var unityDivID = ""; + +Start(); + +function showTooltip(evt, text) { + let tooltip = document.getElementById("tooltip"); + tooltip.innerHTML = text; + tooltip.style.display = "block"; + tooltip.style.left = evt.pageX + 10 + 'px'; + tooltip.style.top = evt.pageY + 10 + 'px'; +} + +function hideTooltip() { + var tooltip = document.getElementById("tooltip"); + tooltip.style.display = "none"; +} + +function showTooltipImg(evt, text) { + let tooltip = document.getElementById("tooltipImg"); + tooltip.innerHTML = ""; + tooltip.style.display = "block"; + tooltip.style.left = evt.pageX + 'px'; + tooltip.style.top = evt.pageY + 'px'; + if (evt.clientX < document.documentElement.clientWidth/2) { + if(evt.clientY < document.documentElement.clientHeight/2) + tooltip.style.transform = "translate(10px, 10px)"; + else + tooltip.style.transform = "translate(10px, -10px) translate(0, -100%)"; + } + else { + if(evt.clientY < document.documentElement.clientHeight/2) + tooltip.style.transform = "translate(-10px, 10px) translate(-100%, 0)"; + else + tooltip.style.transform = "translate(-10px, -10px) translate(-100%, -100%)"; + } + clearTimeout(timerId); timerID = null; +} + +function hideTooltipImg() { + timerId = setTimeout( + () => { + var tooltip = document.getElementById("tooltipImg"); + tooltip.style.display = "none"; + }, 100 + ); +} + +function showZoomImg(evt, text) { + if(evt.currentTarget.offsetWidth < 300 && evt.currentTarget.offsetHeight < 300) + return; + mouseOverImg = text; + let tooltip = document.getElementById("zoom"); + evt = evt || window.event; + x = evt.clientX; y = evt.clientY; + img = document.elementFromPoint(x,y); + + var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; + var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; + var rect = img.getBoundingClientRect(); + tooltip.style.display = "block"; + tooltip.style.left = (rect.right+scrollLeft-32-7)+'px'; + tooltip.style.top = (rect.top+scrollTop+3)+'px'; +} + +function doZoomImg() { + viewer.show(mouseOverImg); +} + +// ---------------------------------------------------------------------------------------- + +const scList = new Map(); +const divList = new Map(); +var quitCurUnity = null; +var isClicked = false; + +function Start() { + const url = new URL(document.URL); + //var divID = url.searchParams.get('scenario'); + var savedPage = window.sessionStorage.getItem('curScenarioPage'); + var divID = window.sessionStorage.getItem('scenarioID'); + if(savedPage == location.href && divID != null && divID != "") + unityDivID = divID; + //console.log("Start ", unityDivID); +} + +function scRegister(scName, scTitle, divID, iframeSrc) { + var curSc = window.sessionStorage.getItem(scName); + if(curSc != '~done~') { + scList.set(scName, scTitle); + window.sessionStorage.setItem(scName, scTitle); + } + divList.set(divID, iframeSrc); + if(divID == unityDivID) + { + setDivToIFrame(divID); + var elem = document.getElementById(divID); + elem.scrollIntoView(); + } + else + setDivToBanner(divID); +} +function scFinished(scName, scTitle) { + window.sessionStorage.setItem(scName, '~done~'); + scList.delete(scName); +} +function setDivToBanner(divID) { + var elem = document.getElementById(divID); + if(elem != null) { + if(elem.firstChild != null) + elem.removeChild(elem.firstChild); + elem.innerHTML = ""; + } +} + +function onBannerClick(divID) { + if(isClicked) return; + if(unityDivID == null) + isClicked = true; + unityDivID = divID; + if(quitCurUnity != null) + quitCurUnity(); + else + setDivToIFrame(divID); +} +function afterUnityQuit() { + quitCurUnity = null; + //const url = new URL(document.URL); + //url.searchParams.delete('scenario'); + //url.searchParams.append('scenario', unityDivID); + window.sessionStorage.setItem('scenarioID', unityDivID); + window.sessionStorage.setItem('curScenarioPage', location.href); + document.location.replace(location.href); //url.href +} +function setDivToIFrame(divID) { + var elem = document.getElementById(divID); + if(elem != null) + elem.innerHTML = ""; +} + +// ---------------------------------------------------------------------------------------- + +function onLearnedButton() { + if(scList.size == 0){ + learnResult(); + let btn = document.getElementById('learnedButton'); + btn.style.display = 'none'; + } else { + var msgStr; + msgStr = '

Не изучены сценарии интерактивной модели ВС:


'; + for (let sc of scList.values()) + msgStr += " - "+sc+"
"; + $("#dialog").html(msgStr); + $( function() { + $( "#dialog" ).dialog(); + $('#dialog').dialog("option", "width", "auto"); $('#dialog').dialog("option", "height", "auto"); + } ); + + } +} \ No newline at end of file diff --git a/s1000d/Converter14_Source/app/dinamika/viewimg.css b/s1000d/Converter14_Source/app/dinamika/viewimg.css new file mode 100644 index 0000000..4fe36a8 --- /dev/null +++ b/s1000d/Converter14_Source/app/dinamika/viewimg.css @@ -0,0 +1,13 @@ +#iv-container{position:fixed;width:100%;background:rgba(10,10,10,0.5);height:100%;top:0;left:0;display:none;z-index:1000} +.iv-container{overflow:hidden} +.iv-close{width:32px;height:32px;position:absolute;border: 1px solid white; right:20px;top:20px;background: rgba(124, 37, 41, 0.5); cursor:pointer;text-align:center;overflow:hidden;text-shadow:0 0 3px #6d6d6d;-webkit-transition:all ease 200ms;-moz-transition:all ease 200ms;-o-transition:all ease 200ms;transition:all ease 200ms} +.iv-close:after,.iv-close:before{content:"";height:2px;width:26px;background:white;position:absolute;left:3px;top:17px;margin-top:-2px;border-radius:2px} +.iv-close:before{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)} +.iv-close:after{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)} +.iv-close:hover{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg); background: rgb(124, 37, 41)} +.iv-image-view{position:absolute;height:100%;width:100%} +.iv-image-wrap{display:inline-block} +.iv-image-wrap:active{cursor:move} +.iv-large-image{cursor:move;max-width:100%;max-height:100%;position:absolute;background-color:#FFFFFF;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)} +.iv-loader{top:50%;left:50%;border-radius:50%;width:32px;height:32px;z-index:100;margin-top:-16px;margin-left:-16px;font-size:5px;position:absolute;text-indent:-9999em;border-top:1em solid rgba(255, 255, 255, .2);border-right:1em solid rgba(255, 255, 255, .2);border-bottom:1em solid rgba(255, 255, 255, .2);border-left:1em solid #fff;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:load8 1.1s infinite linear;animation:load8 1.1s infinite linear} +.iv-loader:after{width:10em;height:10em;border-radius:50%}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}} \ No newline at end of file diff --git a/s1000d/Converter14_Source/app/dinamika/viewimg.js b/s1000d/Converter14_Source/app/dinamika/viewimg.js new file mode 100644 index 0000000..499f899 --- /dev/null +++ b/s1000d/Converter14_Source/app/dinamika/viewimg.js @@ -0,0 +1,269 @@ +!function(e,t) + {"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.ViewBigimg=t()} +(this, +function() +{ + "use strict"; + function l(){ + var e=!1;try{addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){e=!0}}))}catch(e){}return e + } + function o(e,t) + { + this.container=e; + var i=function(){}; + this.onStart=t.onStart||i, + this.onMove=t.onMove||i, + this.onEnd=t.onEnd||i, + //this.onKeyDown=t.onKeyDown||i, + this.onMouseWheel=t.onMouseWheel||i, + this.onClick=t.onClick||i, + this.onPinch=t.onPinch||i + } + + o.prototype.init=function() + { + var r=this; + return this.startHandle=function(e) + { + e.preventDefault(); + var t=e.type, + i="touchstart"===t?"touchmove":"mousemove", + n="touchstart"===t?"touchend":"mouseup", + o=e.clientX||e.touches[0].clientX, + a=e.clientY||e.touches[0].clientY; + function s(e) + { + e.preventDefault(); + var t=e.clientX||e.touches[0].clientX,i=e.clientY||e.touches[0].clientY; + r.onMove(e,{dx:t-o,dy:i-a,mx:t,my:i}) + } + !1!==r.onStart(e,{x:o,y:a})&&("touchstart"===t&&e.touches[1]&&r.onPinch(e), + document.addEventListener(i,s,!("touchmove"!==i||!l())&&{capture:!1,passive:!1}), + document.addEventListener(n,function e() + { + document.removeEventListener(i,s), + document.removeEventListener(n,e), + r.onEnd() + })) + }, + this.container.addEventListener("touchstart",this.startHandle,!1), + this.container.addEventListener("mousedown",this.startHandle,!1), + //this.container.addEventListener("onkeydown",this.onKeyDown,!1), + //this.container.onkeydown = function(e){alert('!!close')}, + //document.getElementById('iv-container').contentEditable=true, + //document.getElementById('iv-container').focus(), + this.container.addEventListener("mousewheel",this.onMouseWheel,!1), + this.container.addEventListener("click",this.onClick,!1), + this + }, + o.prototype.destroy=function() + { + this.container.removeEventListener("touchstart",this.startHandle), + this.container.removeEventListener("mousedown",this.startHandle), + //this.container.removeEventListener("onkeydown",this.onKeyDown), + this.container.removeEventListener("mousewheel",this.onMouseWheel), + this.container.removeEventListener("click",this.onClick) + }; + + var r=function(e) + {return e.preventDefault()}; + function n(e,t) + { + this.container=e, + this.options=Object.assign({},n.defaults,t), + this.zoomValue=100, + e.classList.add("iv-container"), + this.imageWrap=e.querySelector(".iv-image-wrap"), + this.closeBtn=e.querySelector(".iv-close") + } + + return function() + { + var o=0; + if(!window.requestAnimationFrame){ + for(var e=["ms","moz","webkit","o"],t=0;t +#include +#include + +using namespace std; + +// -SCORM -p "FULL, 2p" E:\C++\Test\01\auk-01_mi-38.lyx E:\C++\Test\01 +// -SCORM -p "FULL" E:\C++\Test\AUK-01\01_mi-38.lyx E:\C++\Test\AUK-01 +// -SCORM E:\C++\Test\AUK02_Mi38\auk-02_mi-38.lyx E:\C++\Test\AUK02_Mi38 + +console::console() +{ + +} + +int console::exec(int argc, char *argv[]) +{ + //Q_UNUSED(argc) + if(QString(argv[1]) == "-?" || QString(argv[1]) == "-h" || QString(argv[1]) == "/h" || argc < 3) + { printHelp(); return 0; } + + exportSCORM = exportS1000D = false; + for(int i = 1; i < argc-2; i++) + { + if(QString(argv[i]).toUpper() == "-SCORM") exportSCORM = true; + if(QString(argv[i]).toUpper() == "-S1000D") exportS1000D = true; + if(QString(argv[i]).toLower() == "-p" && (i+1 HTML (%d sec) .. ", SM.timeConvert); std::cout << std::flush; + + QElapsedTimer timer; timer.start(); + if(!lyx.Import(&SM, lyxFile, NULL)) { + printf("ОШИБКА импорта LyX.\n"); + return 1; + } + + SM.LoadPackagesXML(); + + if(!isCodingFilled()) { + printf("Ошибка: кодирование S1000D не заполнено.\n"); + return 1; + } + + html.Generate(&SM, false, NULL); + SM.LoadPackagesXML(); + SM.timeConvert = (int)timer.elapsed()/1000; + SM.SaveProject(); + printf("Ok\n"); + + if(exportSCORM) { + printf(" SCORM (%d sec):\n", SM.timeSCORM*packageNames.count()); + if(packageNames.count() == 0) + printf("Пакеты не заданы. Пропущено.\n"); + else + foreach(S1000D_Manager::PackageStruct pack, SM.packages) + if(packageNames.contains(pack.cfgName)) + { + for(int i=0;i "+pack.exportFileName+"_SCORM"+".zip .. " ; + printf("%s", s.toLocal8Bit().toStdString().c_str()); std::cout << std::flush; + QApplication::processEvents(); + bool res = SM.exportSCORM(dstPath, pack.exportFileName, pack.title, NULL); + if(res) + printf("Ok\n"); + else + printf("ОШИБКА экспорта\n"); + } + } + if(exportS1000D) { + printf(" S1000D (%d sec):\n", SM.timeS1000D*packageNames.count()) ; + if(packageNames.count() == 0) + printf("Пакеты не заданы. Пропущено.\n"); + else + foreach(S1000D_Manager::PackageStruct pack, SM.packages) + if(packageNames.contains(pack.cfgName)) + { + for(int i=0;i "+pack.exportFileName+".zip .. "; + printf("%s", s.toLocal8Bit().toStdString().c_str()); std::cout << std::flush; + QApplication::processEvents(); + bool res = SM.exportS1000D(dstPath, pack.exportFileName, pack.title, NULL); + if(res) + printf("Ok\n"); + else + printf("ОШИБКА экспорта\n"); + } + } + + SM.SaveProject(); //SM.SavePackagesXML(); + return 0; +} + +void console::printHelp() +{ + setlocale(LC_ALL,"Russian"); + + qDebug() << "Конвертер АУК с формата LyX в пакеты стандартов S1000D и SCORM\n"; + qDebug() << "Для запуска в оконном режиме запустите без параметров."; + qDebug() << "Формирование пакетов в консольном режиме выполняется со следующими параметрами:"; + qDebug() << "CONVERTER [-SCORM] [-S1000D] [-p \"package1, ...\"] lyxfile destpath\n"; + qDebug() << " -SCORM - тип формируемого пакета - SCORM;"; + qDebug() << " -S1000D - тип формируемого пакета - S1000D, без явного указания формируются оба типа; "; + qDebug() << " -p - сформировать пакеты с именами package1,... (список через запятую в \"кавычках\");"; + qDebug() << " без данной опции формируются все созданные в оконном режиме пакеты;"; + qDebug() << " lyxfile - путь и имя файла LyX;"; + qDebug() << " dstpath - путь для размещения сформировнных пакетов."; +} + + +QString console::delYYY(QString st) { + return st.replace("X", "").replace("Y", "").replace("N", ""); +} +bool console::isCodingFilled() { + tmpStrList.clear(); tmpIntList.clear(); + if(SM.items.count() == 0) return false; + for(int i=0;imoduleType == mtPM) { + QString pmTitle, modelIdentCode, pmIssuer, pmNumber, pmVolume; + title = pmTitle = SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); + modelIdentCode = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode"); + pmIssuer = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer"); + pmNumber = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmNumber"); + pmVolume = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmVolume"); + if(pmTitle.isEmpty() || delYYY(pmIssuer).isEmpty() || delYYY(pmNumber).isEmpty() || delYYY(pmVolume).isEmpty()) { + return false; + } + fCode = SM.pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + } + + if(SM.item->moduleType == mtDM) { + QString modelIdentCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode"); + QString systemDiffCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemDiffCode"); + QString systemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemCode"); + QString subSystemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSystemCode"); + QString subSubSystemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSubSystemCode"); + QString assyCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "assyCode"); + QString disassyCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCode"); + QString disassyCodeVariant = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCodeVariant"); + QString infoCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCode"); + QString infoCodeVariant = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCodeVariant"); + QString itemLocationCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "itemLocationCode"); + QString learnCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnCode"); + QString learnEventCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnEventCode"); + QString techName = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); + //QString infoName = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName"); + if(delYYY(modelIdentCode).isEmpty() || delYYY(systemDiffCode).isEmpty() || delYYY(systemCode).isEmpty() || delYYY(subSystemCode).isEmpty() || delYYY(subSubSystemCode).isEmpty() || + delYYY(assyCode).isEmpty() || delYYY(disassyCode).isEmpty() || delYYY(disassyCodeVariant).isEmpty() || delYYY(infoCode).isEmpty() || delYYY(infoCodeVariant).isEmpty() || + delYYY(itemLocationCode).isEmpty() || delYYY(learnCode).isEmpty() || delYYY(learnEventCode).isEmpty() || delYYY(techName).isEmpty() ) { + return false; + } + title = techName; + fCode = SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + } + + int tmpInd = tmpStrList.indexOf(fCode); + if(tmpInd != -1) { + SM.setCurItem(tmpIntList[tmpInd]); + QString title2; + if(SM.item->moduleType == mtDM) + title2 = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); + else + title2 = SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); + return false; + } + tmpStrList.append(fCode); tmpIntList.append(ind); + + for(int i=0;i +#include "s1000d_manager.h" +#include "editormainwindow.h" +#include "ru_const.h" +#include "lyx.h" +#include "html.h" +#include + +class console +{ + //Q_OBJECT +public: + console(); + int exec(int argc, char *argv[]); + void printHelp(); + + QString lyxFile, dstPath; + QList packageNames; + bool exportSCORM, exportS1000D; + QString delYYY(QString st); + bool isCodingFilled(); + bool isCodingFilledRecurs(int ind); + + S1000D_Manager SM; + LyX lyx; + HTML html; + RU_Const ru_const; + QStringList tmpStrList; + QList tmpIntList; +}; + +#endif // CONSOLE_H diff --git a/s1000d/Converter14_Source/editormainwindow.cpp b/s1000d/Converter14_Source/editormainwindow.cpp new file mode 100644 index 0000000..3e7d8bb --- /dev/null +++ b/s1000d/Converter14_Source/editormainwindow.cpp @@ -0,0 +1,2024 @@ +#include "editormainwindow.h" +#include "ui_editormainwindow.h" +#include "s1000d_manager.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include "private/qzipwriter_p.h" +#include +#include + +// TODO PROCED.xml + +EditorMainWindow::EditorMainWindow(QWidget *parent) + : QMainWindow(parent) + , ui(new Ui::EditorMainWindow) +{ + ui->setupUi(this); + this->hide(); + + QList sizes; + sizes << 300 << 700; ui->splitter->setSizes(sizes); + ui->toolBar->setFixedWidth(ui->treeWidget->geometry().x() + ui->treeWidget->geometry().width() + 10); + + SM.item = nullptr; + isProjectOpened = false; isProjectModifyed = false; + ui->actionSwitchToCodingPage->setChecked(true); ui->actionSwitchToDataPage->setChecked(false); + ui->actionSwitchToCodingPage->setEnabled(true); ui->actionSwitchToDataPage->setEnabled(true); + ui->stackedWidget->setCurrentIndex(0); + setIsModifyed(false); + + ui->toolBar->setFixedWidth(310); + ui->stackedWidget->setTabletTracking(false); + //ui->dataPageEdit->setStyleSheet("background-color: white; border: none;"); + + config.lastOpenedFile = ""; + QFile cfgFile(qApp->applicationDirPath()+"/config.txt");//QDir::currentPath() + if (cfgFile.open(QFile::ReadOnly | QFile::Text)) { + char buf[256]; + cfgFile.readLine(buf, 255); + QStringList cfg = QString(buf).split("="); + if(cfg[0] == "lastOpenedFile") + config.lastOpenedFile = cfg[1]; + } + cfgFile.close(); + + QDir dirScorm = QDir(QCoreApplication::applicationDirPath()+"/Scorm"); + if (!dirScorm.exists()) { + QMessageBox::critical(this,"Ошибка","Папка Scorm не найдена.",QMessageBox::Ok); + QTimer::singleShot(50, this, SLOT(on_actionExit_triggered())); + return; + } + + // создание диалогового окна лога +// logDialogList = new QListWidget(this); +// logDialogList->setFixedHeight(800); logDialogList->setFixedWidth(1000); +// logDialogList->setObjectName("logDialogList"); +// QFont logFont("Courier", 8); logDialogList->setFont(QFont(logFont)); +// QPushButton* logDialogCloseButton = new QPushButton(tr("Закрыть"), this); +// logDialogCloseButton->setDefault(true); +// logDialog = new QDialog(this); +// QVBoxLayout *logDialogLayout = new QVBoxLayout(logDialog); +// logDialogLayout->setMargin(5); logDialogLayout->setSpacing(6); logDialog->setWindowTitle(QString("Log")); +// logDialogLayout->addWidget(logDialogList); logDialogLayout->addWidget(logDialogCloseButton); +// connect(logDialogCloseButton, SIGNAL(clicked()), logDialog, SLOT(close())); +// logDialog->setLayout(logDialogLayout); + + ru_const.Init_RU_Const(); lyx.ru_const = &ru_const; + DBG = true; allowCodePageToSetItems = true; + + ui->pmc_lb_title2->setText(ui->pmc_lb_title2->text() + " " + ru_const.companyName); + ui->pmc_btn_modelIdentCode->setText(ru_const.modelIdentCode); ui->pmc_btn_pmIssuer->setText(ru_const.pmIssuer); + ui->stackedWidget->setCurrentIndex(0); + connect(ui->pmc_t_title, SIGNAL(textChanged()), this, SLOT(codePagePM_TitleChanged())); + connect(ui->pmc_le_modelIdentCode, SIGNAL(textChanged(QString)), this, SLOT(codePagePM_EditChanged(QString))); + connect(ui->pmc_le_pmIssuer, SIGNAL(textChanged(QString)), this, SLOT(codePagePM_EditChanged(QString))); + connect(ui->pmc_le_pmNumABC, SIGNAL(textChanged(QString)), this, SLOT(codePagePM_EditChanged(QString))); + connect(ui->pmc_le_pmNum, SIGNAL(textChanged(QString)), this, SLOT(codePagePM_EditChanged(QString))); + connect(ui->pmc_le_pmVolume, SIGNAL(textChanged(QString)), this, SLOT(codePagePM_EditChanged(QString))); + connect(ui->pmc_btn_modelIdentCode, SIGNAL(pressed()), this, SLOT(pmc_btn_modelIdentCodePressed())); + connect(ui->pmc_btn_pmIssuer, SIGNAL(pressed()), this, SLOT(pmc_btn_pmIssuerPressed())); + connect(ui->pmc_cb_pmNumABC, SIGNAL(currentIndexChanged(int)), this, SLOT(pmc_cb_pmNumABC_Changed(int))); + connect(ui->pmc_cb_pmNum, SIGNAL(currentIndexChanged(int)), this, SLOT(pmc_cb_pmNum_Changed(int))); + connect(ui->pmc_cb_pmVolume, SIGNAL(currentIndexChanged(int)), this, SLOT(pmc_cb_pmVolume_Changed(int))); + + ui->treeWidget->viewport()->installEventFilter(this); + + allowDMCodePageCallOnChangeComboBox = false; + ui->dmc_lb_label2->setText(ui->dmc_lb_label2->text() + " " + ru_const.companyName); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->setText("Да"); ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->setText("Нет"); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->setCheckable(true); ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->setChecked(false); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->setCheckable(true); ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->setChecked(true); + for(int i=0;idmc_cb_InfoSets->addItem(ru_const.dmCodeList[i].chapterName+" - "+ru_const.dmCodeList[i].paraName, i); + } + connect(ui->dmc_le_modelIdentCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_systemDiffCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_systemCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_subSystemCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_subSubSystemCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_assyCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_disassyCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_disassyCodeVariant, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_infoCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_infoCodeVariant, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_itemLocationCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_learnCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_learnEventCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_te_techName, SIGNAL(textChanged()), this, SLOT(codePageDM_TitleChanged())); + connect(ui->dmc_cb_InfoSets, SIGNAL(currentIndexChanged(int)), this, SLOT(on_dmc_cb_InfoSets_currentIndexChanged(int))); + allowDMCodePageCallOnChangeComboBox = true; + + ui->dml_btnBox_question->button(QDialogButtonBox::Yes)->setIcon(QIcon(":new/Icons/add.png")); + ui->dml_btnBox_question->button(QDialogButtonBox::Yes)->setIconSize(QSize(32,32)); + ui->dml_btnBox_question->button(QDialogButtonBox::Yes)->setText(""); + ui->dml_btnBox_question->button(QDialogButtonBox::Yes)->setFlat(true); + ui->dml_btnBox_question->button(QDialogButtonBox::No)->setIcon(QIcon(":new/Icons/delete.png")); + ui->dml_btnBox_question->button(QDialogButtonBox::No)->setIconSize(QSize(32,32)); + ui->dml_btnBox_question->button(QDialogButtonBox::No)->setText(""); + ui->dml_btnBox_question->button(QDialogButtonBox::No)->setFlat(true); + ui->dml_btnBox_question->button(QDialogButtonBox::Apply)->setIcon(QIcon(":new/Icons/up_arrow.png")); + ui->dml_btnBox_question->button(QDialogButtonBox::Apply)->setIconSize(QSize(32,32)); + ui->dml_btnBox_question->button(QDialogButtonBox::Apply)->setText(""); + ui->dml_btnBox_question->button(QDialogButtonBox::Apply)->setFlat(true); + ui->dml_btnBox_question->button(QDialogButtonBox::Reset)->setIcon(QIcon(":new/Icons/down_arrow.png")); + ui->dml_btnBox_question->button(QDialogButtonBox::Reset)->setIconSize(QSize(32,32)); + ui->dml_btnBox_question->button(QDialogButtonBox::Reset)->setText(""); + ui->dml_btnBox_question->button(QDialogButtonBox::Reset)->setFlat(true); + //connect(ui->dml_btnBox_question, SIGNAL(clicked(QAbstractButton*)), this, SLOT(on_dml_btnBox_question_clicked(QAbstractButton*))); + connect(ui->dml_lw_question, SIGNAL(currentRowChanged(int)), this, SLOT(on_dml_lw_question_currentRowChanged(int))); + ui->dml_btnBox_answer->button(QDialogButtonBox::Yes)->setIcon(QIcon(":new/Icons/add.png")); + ui->dml_btnBox_answer->button(QDialogButtonBox::Yes)->setIconSize(QSize(32,32)); + ui->dml_btnBox_answer->button(QDialogButtonBox::Yes)->setText(""); + ui->dml_btnBox_answer->button(QDialogButtonBox::Yes)->setFlat(true); + ui->dml_btnBox_answer->button(QDialogButtonBox::No)->setIcon(QIcon(":new/Icons/delete.png")); + ui->dml_btnBox_answer->button(QDialogButtonBox::No)->setIconSize(QSize(32,32)); + ui->dml_btnBox_answer->button(QDialogButtonBox::No)->setText(""); + ui->dml_btnBox_answer->button(QDialogButtonBox::No)->setFlat(true); + //connect(ui->dml_btnBox_answer, SIGNAL(clicked(QAbstractButton*)), this, SLOT(on_dml_btnBox_answer_clicked(QAbstractButton*))); + + splash = new SplashForm(this); + exportDlg = new ExportDialog(this, &SM); + connect(exportDlg, SIGNAL(actionS1000Dexport()), this, SLOT(exportS1000D())); + connect(exportDlg, SIGNAL(actionSCORMexport()), this, SLOT(exportSCORM())); + on_action_refreshFromLyX_triggered(); + this->setWindowTitle("Конвертер АУК "+version); + this->showMaximized(); +} + +EditorMainWindow::~EditorMainWindow() +{ + delete splash; + delete exportDlg; +// QFile cfgFile(qApp->applicationDirPath()+"/config.txt"); +// if (cfgFile.open(QFile::ReadWrite | QFile::Text)) { +// QString cfg = "lastOpenedFile="+config.lastOpenedFile; +// cfgFile.write(cfg.toStdString().c_str()); +// cfgFile.resize(cfgFile.pos()); +// } +// cfgFile.close(); + + //delete logDialog; + //delete ui; +} + +bool EditorMainWindow::event(QEvent *e) +{ + if (e->type() == QEvent::WindowActivate) { + ui->toolBar->setFixedWidth(ui->treeWidget->geometry().x() + ui->treeWidget->geometry().width() + 10); + } + return QWidget::event(e); +} + +bool EditorMainWindow::eventFilter(QObject* obj, QEvent* ev) +{ + if( obj == ui->treeWidget->viewport() && ev->type() == QEvent::Drop ) + QTimer::singleShot(50, this, SLOT(treeWidgetDrop())); + return false; +} + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ OPEN ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +void EditorMainWindow::on_actionOpenFolder_triggered() +{ + return; // старый подход +/* + if(isProjectModifyed) { + QMessageBox msgBox; + msgBox.setText("Сохранить изменения?"); + msgBox.setWindowTitle("Проект изменен"); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Save); + msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); + int ret = msgBox.exec(); + switch (ret) { + case QMessageBox::Yes: + on_actionSaveProject_triggered(); + if(isProjectModifyed) return; + case QMessageBox::No: + break; + case QMessageBox::Cancel: + return; + } + } + + SM.projectPath = QFileDialog::getExistingDirectory(this, tr("Выберите папку проекта АУК"), ""); //config.lastOpenedDir + if(SM.projectPath == "") + return; + isProjectOpened = true; + //config.lastOpenedDir = SM.projectPath; + this->setWindowTitle("Конвертер АУК - " + SM.projectPath); + + ui->actionAddDM->setEnabled(true); ui->actionAddPM->setEnabled(true); + isProjectOpened = true; + setIsModifyed(false); + + QString schemasPath; + //if (QSysInfo::productType() == "windows") + // schemasPath = QDir::currentPath()+QString("/Schemas/"); + //else + schemasPath = QDir::currentPath()+QString("/Schemas/"); + + SM.OpenProjectDirectory(SM.projectPath, schemasPath); + + fillTreeWidgetWithItems(); + + if(ui->treeWidget->topLevelItemCount() > 0) { + ui->actionDeleteItem->setEnabled(true); + ui->treeWidget->setCurrentItem(ui->treeWidget->topLevelItem(0)); + //ui->actionSwitchToCodingPage->setEnabled(true); ui->actionSwitchToDataPage->setEnabled(true); + on_actionSwitchToCodingPage_triggered(); + } + else { + ui->label_12->setText("Папка проекта выбрана,\n но не содержит публикаций и модулей. \nНачните работу с создания публикации."); + ui->stackedWidget->setCurrentIndex(0); + } + ui->actionSwitchToCodingPage->setEnabled(true); ui->actionSwitchToDataPage->setEnabled(true); + //config.lastOpenedDir = SM.projectPath; + + ui->actionLyXImport->setEnabled(true); + //logDialogList->clear(); + //logDialogList->addItems(SM.log); + //logDialog->show(); logDialog->exec(); + + //import, delete after debug + //on_actionSwitchToDataPage_triggered(); + //on_actionLyXImport_triggered(); + */ +} + +QTreeWidgetItem* EditorMainWindow::getTreeWidgetItemByItemIndexRecurs(int itemInd, QTreeWidgetItem *node) { + QTreeWidgetItem* result=nullptr; + if(node->data(0, Qt::UserRole).toInt() == itemInd) + return node; + for(int i=0;ichildCount();i++) { + result = getTreeWidgetItemByItemIndexRecurs(itemInd, node->child(i)); + if(result != nullptr) return result; + } + return nullptr; +} + +QTreeWidgetItem* EditorMainWindow::getTreeWidgetItemByItemIndex(int itemInd) { + QList fullList; + QTreeWidgetItem* result=nullptr; + for(int i=0;itreeWidget->topLevelItemCount();i++) { + result = getTreeWidgetItemByItemIndexRecurs(itemInd, ui->treeWidget->topLevelItem(i)); + if(result != nullptr) return result; + } + return nullptr; +} + +QList EditorMainWindow::makeTreeWidgetFromItems(QTreeWidgetItem *parent, QList list) { + QList res; + foreach (int treeNodeInd, list) { + QTreeWidgetItem *newItem; + + SM.setCurItem(treeNodeInd); + QString isLearnigDMStr = ""; + if(SM.item->moduleType == mtDM && SM.item->schemeType == stLEARNING) + isLearnigDMStr = ru_const.testQuestions+"\n"; + if(SM.items[treeNodeInd].moduleType == mtPM) + newItem = new QTreeWidgetItem(parent, QStringList( + //SM.item->fileCode+"\n"+//SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.shortPmTitle") + "\n" + SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle") )); + else + newItem = new QTreeWidgetItem(parent, QStringList( + //SM.item->fileCode+" "+ + isLearnigDMStr+ + SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName") + "\n" + + SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName") )); + if(SM.items[treeNodeInd].moduleType == mtPM) + if(SM.item->isQualifyed) + newItem->setIcon(0, iconFolder); + else + newItem->setIcon(0, iconFolder_ex); + else + if(SM.item->isQualifyed) + newItem->setIcon(0, iconDoc_head_blue); + else + newItem->setIcon(0, iconDoc_head_blue_ex); + newItem->setData(0, Qt::UserRole, treeNodeInd); + + if(SM.items[treeNodeInd].child.count() > 0) { + QList treeChildren = makeTreeWidgetFromItems(newItem, SM.items[treeNodeInd].child); + foreach(QTreeWidgetItem *newChild, treeChildren) + newItem->addChild(newChild); + } + res.append(newItem); + } + return res; +} + +void EditorMainWindow::fillTreeWidgetWithItems() { + //if(DBG) qDebug() << " *FillTreeWidgetWithItems*"; + //allowCodePageToSetItems = false; + + isClearing = true; + ui->treeWidget->clear(); + isClearing = false;; + QList treeItems; + QList fullList; + for(int i=0;i(nullptr), fullList); + + ui->treeWidget->insertTopLevelItems(0, treeItems); + ui->treeWidget->expandAll(); + //if(SM.items.count() > 0) + // ui->treeWidget->setCurrentItem(treeItems[0]); + + allowCodePageToSetItems = true; +} + +void EditorMainWindow::resizeEvent(QResizeEvent*) +{ + ui->toolBar->setFixedWidth(ui->treeWidget->geometry().x() + ui->treeWidget->geometry().width() + 10); +} + +void EditorMainWindow::on_actionAddPM_triggered() +{ + int newPMInd = -1; + if(ui->treeWidget->topLevelItemCount() > 0) { + if(ui->treeWidget->currentItem()->parent() == nullptr) { + for(int i=0;itreeWidget->topLevelItemCount();i++) + if(ui->treeWidget->currentItem() == ui->treeWidget->topLevelItem(i)) + newPMInd = SM.createPM(-1, i); + } + else { + for(int i=0;itreeWidget->currentItem()->parent()->childCount();i++) + if(ui->treeWidget->currentItem() == ui->treeWidget->currentItem()->parent()->child(i)) + newPMInd = SM.createPM(ui->treeWidget->currentItem()->parent()->data(0,Qt::UserRole).toInt(), i); + } + } + else + newPMInd = SM.createPM(-1, 0); + if(newPMInd == -1) if(DBG) qDebug() << " Error: AddPM: newPMInd == -1"; + + fillTreeWidgetWithItems(); + QTreeWidgetItem *node = getTreeWidgetItemByItemIndex(newPMInd); + //ui->treeWidget->clearSelection(); ui->treeWidget->setItemSelected(node, true); + ui->treeWidget->setCurrentItem(node); + ui->actionDeleteItem->setEnabled(true); + setIsModifyed(true); + updateTreeWidgetNames(); + Save(); +} + +void EditorMainWindow::on_actionAddDM_triggered() +{ + int newDMInd = -1; + if(ui->treeWidget->topLevelItemCount() > 0) { + if(ui->treeWidget->currentItem()->parent() == nullptr) { + for(int i=0;itreeWidget->topLevelItemCount();i++) + if(ui->treeWidget->currentItem() == ui->treeWidget->topLevelItem(i)) + newDMInd = SM.createDM(-1, i, "DESCRIPT"); + } + else { + for(int i=0;itreeWidget->currentItem()->parent()->childCount();i++) + if(ui->treeWidget->currentItem() == ui->treeWidget->currentItem()->parent()->child(i)) + newDMInd = SM.createDM(ui->treeWidget->currentItem()->parent()->data(0,Qt::UserRole).toInt(), i, "DESCRIPT"); + } + } + else + newDMInd = SM.createDM(-1, 0, "DESCRIPT"); + if(newDMInd == -1) if(DBG) qDebug() << " Error: AddDM: newDMInd == -1"; + + fillTreeWidgetWithItems(); + QTreeWidgetItem *node = getTreeWidgetItemByItemIndex(newDMInd); + ui->treeWidget->setCurrentItem(node); + ui->actionDeleteItem->setEnabled(true); + allowDMCodePageCallOnChangeComboBox = false; ui->dmc_cb_InfoSets->setCurrentIndex(-1); allowDMCodePageCallOnChangeComboBox = true; + setIsModifyed(true); + updateTreeWidgetNames(); + Save(); +} + +void EditorMainWindow::setIsModifyed(bool flag) +{ + isProjectModifyed = flag; + ui->actionSaveProject->setEnabled(flag); +} + +void EditorMainWindow::on_splitter_splitterMoved(int, int) +{ + ui->toolBar->setFixedWidth(ui->treeWidget->geometry().x() + ui->treeWidget->geometry().width() + 10); +} + +void EditorMainWindow::on_actionSwitchToCodingPage_triggered() +{ + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + ui->actionSwitchToCodingPage->setChecked(true); ui->actionSwitchToDataPage->setChecked(false); + if(SM.item != nullptr) { + if(SM.item->moduleType == mtPM) + ui->stackedWidget->setCurrentIndex(1); + if(SM.item->moduleType == mtDM) + ui->stackedWidget->setCurrentIndex(2); + } +} + +void EditorMainWindow::on_actionSwitchToDataPage_triggered() +{ + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + ui->actionSwitchToCodingPage->setChecked(false); ui->actionSwitchToDataPage->setChecked(true); + if(SM.item == nullptr) return; + if(SM.item->schemeType != stLEARNING) + ui->stackedWidget->setCurrentIndex(3); + else + ui->stackedWidget->setCurrentIndex(4); +} + +void EditorMainWindow::on_actionSaveProject_triggered() +{ +// SM.prepareSaveProject(); +// for(int i=0;itreeWidget->setCurrentItem(getTreeWidgetItemByItemIndex(i)); +// if(SM.items[i].moduleType == mtPM) +// ui->stackedWidget->setCurrentIndex(1); +// if(SM.items[i].moduleType == mtDM) +// ui->stackedWidget->setCurrentIndex(2); +// QApplication::beep(); +// QMessageBox msgBox; +// msgBox.setIcon(QMessageBox::Warning); msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); +// msgBox.setWindowTitle("Сохранение"); msgBox.setText("Для сохранения необходимо заполнить кодировку добавленных публикаций и модулей."); +// msgBox.exec(); +// return; +// } +// QStringList list; +// for(int i=0;itreeWidget->setCurrentItem(getTreeWidgetItemByItemIndex(i)); +// if(SM.items[i].moduleType == mtPM) +// ui->stackedWidget->setCurrentIndex(1); +// if(SM.items[i].moduleType == mtDM) +// ui->stackedWidget->setCurrentIndex(2); +// QApplication::beep(); +// QMessageBox msgBox; +// msgBox.setIcon(QMessageBox::Warning); msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); +// msgBox.setWindowTitle("Сохранение"); msgBox.setText("Сохранение отменено - обнаружено дублирование кодировки публикаций или модулей."); +// msgBox.exec(); +// return; +// } +// list.append(SM.items[i].fileCode); +// } + Save(); +} + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SELECTION CHANGED ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +void EditorMainWindow::on_treeWidget_itemSelectionChanged() +{ + if(isClearing) return; // при вызове .clear QT вызывет для каждого элемента itemSelectionChanged + + if(ui->treeWidget->currentItem() == nullptr || ui->treeWidget->topLevelItemCount() == 0 || SM.items.count() == 0) { + ui->stackedWidget->setCurrentIndex(0); + return; + } + if(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt() >= SM.items.count()) return; + + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + + // BRAKE-C3002-EPWG1-00_000_01 + // + // + if(SM.item->moduleType == mtPM) { + QString cur_title="", cur_modelIdentCode="", cur_pmIssuer="", cur_pmNumABC="", cur_pmNum="", cur_pmVolume="", cur_issueNumber="000", cur_inWork="00"; + + cur_title = SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); + cur_modelIdentCode = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode"); + cur_pmIssuer = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer"); + cur_pmNum = cur_pmNumABC = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmNumber"); + cur_pmNumABC.replace(QRegExp("\\d"), ""); + cur_pmNum.replace(QRegExp("\\D"), ""); + cur_pmVolume = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmVolume"); + cur_issueNumber = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.issueInfo", "issueNumber"); + cur_inWork = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.issueInfo", "inWork"); + + allowCodePageToSetItems = false; + + allowCodePageToCallOnChangeComboBox = false; + ui->pmc_cb_pmNumABC->clear(); ui->pmc_cb_pmNum->clear(); ui->pmc_cb_pmVolume->clear(); + for(int i=0; i < ru_const.pmCodeList.count();i++) { + int ind = ui->pmc_cb_pmNumABC->findText(ru_const.pmCodeList[i].pmNumABC+" - "+ru_const.pmCodeList[i].pmNumABCText); + if(ind == -1) + ui->pmc_cb_pmNumABC->addItem(ru_const.pmCodeList[i].pmNumABC+" - "+ru_const.pmCodeList[i].pmNumABCText, ru_const.pmCodeList[i].pmNumABC); + } + ui->pmc_cb_pmNumABC->setCurrentIndex(-1); // повнимательнее с этим + + allowCodePageToCallOnChangeComboBox = true; + + int ind = ui->pmc_cb_pmNumABC->findData(cur_pmNumABC); + if(ind != -1) + ui->pmc_cb_pmNumABC->setCurrentIndex(ind); + ind = ui->pmc_cb_pmNum->findData(cur_pmNum); + if(ind != -1) + ui->pmc_cb_pmNum->setCurrentIndex(ind); + ind = ui->pmc_cb_pmVolume->findData(cur_pmVolume); + if(ind != -1) + ui->pmc_cb_pmVolume->setCurrentIndex(ind); + + ui->pmc_t_title->document()->setPlainText(cur_title); + ui->pmc_le_modelIdentCode->setText(cur_modelIdentCode); + ui->pmc_le_pmIssuer->setText(cur_pmIssuer); + ui->pmc_le_pmNumABC->setText(cur_pmNumABC); + ui->pmc_le_pmNum->setText(cur_pmNum); + ui->pmc_le_pmVolume->setText(cur_pmVolume); + ui->pmc_btn_Qual->setChecked(SM.item->isQualifyed); + + + allowCodePageToSetItems = true; + + if(ui->actionSwitchToCodingPage->isChecked()) + ui->stackedWidget->setCurrentIndex(1); + if(ui->actionSwitchToDataPage->isChecked()) + ui->stackedWidget->setCurrentIndex(3); + +// QString htmlPMData; +// ui->dataPageEdit->document()->clear(); +// htmlPMData += "\n\n\n\n"; +// htmlPMData += "<font size=\"6\" color=\"blue\">Публикация</font>"; +// htmlPMData += "\n\n"; +// htmlPMData += ""+ui->pmc_t_title->toHtml()+"
"; +// htmlPMData += "Состав:
"; +// for(int i=0;ichild.count();i++) { +// SM.setCurItem(SM.item->child[i]); +// if(SM.item->moduleType == mtPM) { +// htmlPMData += " Публикация "; +// htmlPMData += SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); +// htmlPMData += "
\n"; +// } + +// if(SM.item->moduleType == mtDM) { +// htmlPMData += " Модуль "; +// htmlPMData += SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); +// QString iName = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName"); +// if(iName != "") htmlPMData += " - "+iName; +// htmlPMData += "
\n"; +// } +// SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); +// } +// if(SM.item->child.count() == 0) +// htmlPMData += " пусто
\n"; +// htmlPMData += "

\nДля изменения состава публикации и порядка следования элементов используйте перетаскивание мышью элементов дерева в левой части окна."; +// htmlPMData += "\n\n"; +// ui->dataPageEdit->document()->setHtml(htmlPMData); + + ui->dmc_LyXLog->clear(); + } + + if(SM.item->moduleType == mtDM) { + if(ui->actionSwitchToCodingPage->isChecked()) + ui->stackedWidget->setCurrentIndex(2); + if(ui->actionSwitchToDataPage->isChecked()) { + if(SM.item->schemeType != stLEARNING) + ui->stackedWidget->setCurrentIndex(3); + else + ui->stackedWidget->setCurrentIndex(4); + } + + QString modelIdentCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode"); + QString systemDiffCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemDiffCode"); + QString systemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemCode"); + QString subSystemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSystemCode"); + QString subSubSystemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSubSystemCode"); + QString assyCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "assyCode"); + QString disassyCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCode"); + QString disassyCodeVariant = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCodeVariant"); + QString infoCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCode"); + QString infoCodeVariant = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCodeVariant"); + QString itemLocationCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "itemLocationCode"); + QString learnCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnCode"); + QString learnEventCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnEventCode"); + QString techName = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); + QString infoName = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName"); + + allowDMCodePageToSetItems = false; + ui->dmc_te_infoName->setText(infoName); ui->dmc_te_techName->setText(techName); + ui->dmc_le_modelIdentCode->setText(modelIdentCode); ui->dmc_le_systemDiffCode->setText(systemDiffCode); + ui->dmc_le_systemCode->setText(systemCode); ui->dmc_le_subSystemCode->setText(subSystemCode); + ui->dmc_le_subSubSystemCode->setText(subSubSystemCode); ui->dmc_le_assyCode->setText(assyCode); + ui->dmc_le_disassyCode->setText(disassyCode); ui->dmc_le_disassyCodeVariant->setText(disassyCodeVariant); + ui->dmc_le_infoCode->setText(infoCode); ui->dmc_le_infoCodeVariant->setText(infoCodeVariant); + ui->dmc_le_itemLocationCode->setText(itemLocationCode); + ui->dmc_le_learnCode->setText(learnCode); ui->dmc_le_learnEventCode->setText(learnEventCode); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->setChecked(SM.item->schemeType == stLEARNING); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->setChecked(!(SM.item->schemeType == stLEARNING)); + ui->dmc_btn_Qual->setChecked(SM.item->isQualifyed); + allowDMCodePageToSetItems = true; + + allowDMCodePageCallOnChangeComboBox = false; +// if(SM.item->selectedInDMCodeList != -1) { + if(SM.item->selectedInDMCodeList > -1 && SM.item->selectedInDMCodeList < ru_const.dmCodeList.count()) { + ui->dmc_cb_InfoSets->setCurrentIndex(SM.item->selectedInDMCodeList); + ui->dmc_InfoText->document()->setHtml(ru_const.dmCodeList[SM.item->selectedInDMCodeList].text); + } + else { + ui->dmc_cb_InfoSets->setCurrentIndex(-1); + ui->dmc_InfoText->document()->clear(); + } + allowDMCodePageCallOnChangeComboBox = true; + + SM.item->fileCode = SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + SM.item->selectedInDMCodeList = ui->dmc_cb_InfoSets->currentIndex(); + ui->dmc_lb_pageDMName->setText("Модуль данных\n"+SM.item->fileCode); + + //if(SM.item->schemeType == stLEARNING) пока не нужно + // fillLearningPageWithData(); + +// if(SM.item->schemeType == stDESCRIPT || SM.item->schemeType == stCREW) { +// QString htmlFileName = "F:/S1000D/LYX/20201219_auk-05_mi-38.xhtml"; +// QFile htmlFile(htmlFileName); +// htmlFile.open(QFile::ReadOnly | QFile::Text); +// QByteArray fileData = htmlFile.readAll(); // +// QString fileStr = QString(fileData); +// fileStr.replace("dataPageEdit->document()->setHtml(fileStr); +// } + +// QString htmlFileName = SM.projectPath + "/" + SM.item->fileName.replace(".xml", ".html"); +// QFile htmlFile(htmlFileName); +// QStringList htmlDMData; +// if (htmlFile.open(QFile::ReadOnly | QFile::Text)) { +// while(!htmlFile.atEnd()) +// htmlDMData.append(QString::fromLocal8Bit(htmlFile.readLine()).replace("\n","")); +// htmlFile.close(); +// } +// ui->dataPageEdit->document()->setHtml(SM.item->html.join("\n")); + + QString lyxLogFileName = SM.projectPath + "/" + SM.item->fileName+"_importlog.txt"; + QFile logFile(lyxLogFileName); + QStringList lyxLogList; + if (logFile.open(QFile::ReadOnly | QFile::Text)) { + while(!logFile.atEnd()) + lyxLogList.append(QString::fromUtf8(logFile.readLine()).replace("\n","")); + logFile.close(); + } + QString s; + ui->dmc_LyXLog->clear(); + for(int i=0;idmc_LyXLog->addItem(s); continue; } + if(s.at(0) == "!" || s.at(0) == "#") s = s.mid(1); + + QListWidgetItem *logItem = new QListWidgetItem; + logItem->setText(s); + if(lyxLogList.at(i).at(0) == "#") + logItem->setForeground(QBrush(QColor(100,100,100))); +// logItem->setTextColor(QColor(100,100,100)); + if(lyxLogList.at(i).at(0) == "!") { + logItem->setForeground(QBrush(QColor(150,0,0))); +// logItem->setTextColor(QColor(150,0,0)); + //SM.item->isQualifyed = false; + //ui->dmc_btn_Qual->setChecked(false); + } + if(i == 0) + logItem->setForeground(QBrush(QColor(0,0,200))); +// logItem->setTextColor(QColor(0,0,200)); + //logItem->setSizeHint(QSize(logItem->sizeHint().width(), 15)); + logItem->setFont(QFont("Courier", 9)); + logItem->setTextAlignment(Qt::AlignVCenter); + ui->dmc_LyXLog->insertItem(ui->dmc_LyXLog->count(), logItem); // >addItem(s); + } + } + + if(SM.item->moduleType == mtPM || SM.item->schemeType == stLEARNING) + ui->actionOpenInBrowser->setEnabled(false); + else + ui->actionOpenInBrowser->setEnabled(true); + updateTreeWidgetNames(); +} + +void EditorMainWindow::pmc_btn_pmIssuerPressed() { + ui->pmc_le_pmIssuer->setText(ru_const.pmIssuer); +} + +void EditorMainWindow::pmc_btn_modelIdentCodePressed() { + ui->pmc_le_modelIdentCode->setText(ru_const.modelIdentCode); +} + +void EditorMainWindow::pmc_cb_pmNumABC_Changed(int) { + if(!allowCodePageToCallOnChangeComboBox) return; + allowCodePageToSetItems = false; + + allowCodePageToCallOnChangeComboBox = false; + ui->pmc_cb_pmNum->clear(); ui->pmc_cb_pmVolume->clear(); + bool onceFlag = true; + for(int i=0; i < ru_const.pmCodeList.count();i++) { + if((ru_const.pmCodeList[i].pmNumABC+" - "+ru_const.pmCodeList[i].pmNumABCText) == ui->pmc_cb_pmNumABC->itemText(ui->pmc_cb_pmNumABC->currentIndex())) { + if(onceFlag) { + if(ui->pmc_t_title->toPlainText() == "") + ui->pmc_t_title->setText(ru_const.pmCodeList[i].pmNumABCText); + ui->pmc_le_pmNumABC->setText(ru_const.pmCodeList[i].pmNumABC); + ui->pmc_le_pmNum->setText(""); + ui->pmc_le_pmVolume->setText(""); + onceFlag = false; + } + + int ind = ui->pmc_cb_pmNum->findText(ru_const.pmCodeList[i].pmNumber+" - "+ru_const.pmCodeList[i].pmNumberText); + if (ind == -1) + ui->pmc_cb_pmNum->addItem(ru_const.pmCodeList[i].pmNumber+" - "+ru_const.pmCodeList[i].pmNumberText, ru_const.pmCodeList[i].pmNumber); + } + } + + allowCodePageToCallOnChangeComboBox = true; + ui->pmc_cb_pmNum->setCurrentIndex(-1); + allowCodePageToSetItems = true; + codePagePM_EditChanged(""); +} + +void EditorMainWindow::pmc_cb_pmNum_Changed(int) { + if(!allowCodePageToCallOnChangeComboBox) return; + allowCodePageToSetItems = false; + + allowCodePageToCallOnChangeComboBox = false; + ui->pmc_cb_pmVolume->clear(); + bool onceFlag = true; + for(int i=0; i < ru_const.pmCodeList.count();i++) { + if( ((ru_const.pmCodeList[i].pmNumABC+" - "+ru_const.pmCodeList[i].pmNumABCText) == ui->pmc_cb_pmNumABC->itemText(ui->pmc_cb_pmNumABC->currentIndex())) + && ((ru_const.pmCodeList[i].pmNumber+" - "+ru_const.pmCodeList[i].pmNumberText) == ui->pmc_cb_pmNum->itemText(ui->pmc_cb_pmNum->currentIndex()))) { + if(onceFlag) { + if(ui->pmc_t_title->toPlainText() == "") + ui->pmc_t_title->setText(ru_const.pmCodeList[i].pmNumABCText+" - "+ru_const.pmCodeList[i].pmNumberText); + ui->pmc_le_pmNum->setText(ru_const.pmCodeList[i].pmNumber); + ui->pmc_le_pmVolume->setText(""); + } + + int ind = ui->pmc_cb_pmVolume->findText(ru_const.pmCodeList[i].pmVolume+" - "+ru_const.pmCodeList[i].pmVolumeText); + if (ind == -1) { + ui->pmc_cb_pmVolume->addItem(ru_const.pmCodeList[i].pmVolume+" - "+ru_const.pmCodeList[i].pmVolumeText, ru_const.pmCodeList[i].pmVolume); + } + } + } + + allowCodePageToCallOnChangeComboBox = true; + //if(ui->cb_pmVolume->count() == 1) + // ui->cb_pmVolume->setCurrentIndex(0); + //else + ui->pmc_cb_pmVolume->setCurrentIndex(-1); + + allowCodePageToSetItems = true; + codePagePM_EditChanged(""); +} + +void EditorMainWindow::pmc_cb_pmVolume_Changed(int index) { + if(!allowCodePageToCallOnChangeComboBox) return; + if(index == -1) return; + allowCodePageToSetItems = false; + + for(int i=0; i < ru_const.pmCodeList.count();i++) { + if( ((ru_const.pmCodeList[i].pmNumABC+" - "+ru_const.pmCodeList[i].pmNumABCText) == ui->pmc_cb_pmNumABC->itemText(ui->pmc_cb_pmNumABC->currentIndex())) + && ((ru_const.pmCodeList[i].pmNumber+" - "+ru_const.pmCodeList[i].pmNumberText) == ui->pmc_cb_pmNum->itemText(ui->pmc_cb_pmNum->currentIndex())) + && ((ru_const.pmCodeList[i].pmVolume+" - "+ru_const.pmCodeList[i].pmVolumeText) == ui->pmc_cb_pmVolume->itemText(ui->pmc_cb_pmVolume->currentIndex())) ) { + if(ui->pmc_t_title->toPlainText() == "") + ui->pmc_t_title->setText(ru_const.pmCodeList[i].pmNumABCText+" - "+ru_const.pmCodeList[i].pmNumberText+". "+ru_const.pmCodeList[i].pmVolumeText); + ui->pmc_le_pmVolume->setText(ru_const.pmCodeList[i].pmVolume); + break; + } + } + allowCodePageToSetItems = true; + codePagePM_EditChanged(""); +} + +void EditorMainWindow::codePagePM_TitleChanged() { + codePagePM_EditChanged(""); +} + +void EditorMainWindow::codePagePM_EditChanged(QString) { + QString styleRed = "background-color: rgb(255, 230, 230)"; + QString styleWhite = "background-color: white"; + + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + + SM.item->isReady = true; + if(ui->pmc_t_title->document()->toPlainText() == "") + { ui->pmc_t_title->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->pmc_t_title->setStyleSheet(styleWhite); + if(ui->pmc_le_modelIdentCode->text() == "") + { ui->pmc_le_modelIdentCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->pmc_le_modelIdentCode->setStyleSheet(styleWhite); + if(ui->pmc_le_pmIssuer->text() == "") + { ui->pmc_le_pmIssuer->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->pmc_le_pmIssuer->setStyleSheet(styleWhite); + if(ui->pmc_le_pmNumABC->text() == "") + { ui->pmc_le_pmNumABC->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->pmc_le_pmNumABC->setStyleSheet(styleWhite); + if(ui->pmc_le_pmNum->text() == "") + { ui->pmc_le_pmNum->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->pmc_le_pmNum->setStyleSheet(styleWhite); + if(ui->pmc_le_pmVolume->text() == "") + { ui->pmc_le_pmVolume->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->pmc_le_pmVolume->setStyleSheet(styleWhite); + + if(allowCodePageToSetItems) { + //bugCnt++; + //if(DBG) qDebug() << " " << bugCnt << " - set Items"; + SM.replaceCurItem_pmCode(ui->pmc_t_title->document()->toPlainText(), ui->pmc_le_modelIdentCode->text(), ui->pmc_le_pmIssuer->text(), + ui->pmc_le_pmNumABC->text()+ui->pmc_le_pmNum->text(), ui->pmc_le_pmVolume->text()); + QString fCode = SM.pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + SM.item->fileCode = fCode; + + setIsModifyed(true); + updateTreeWidgetNames(); + } +} + +void EditorMainWindow::updateTreeWidgetNamesRecurs(QTreeWidgetItem *node) { + if(node->data(0, Qt::UserRole).toInt() >= SM.items.count()) if(DBG) qDebug() << " Error: updateTreeWidgetNamesRecurs - node->data >= items.count"; + if(node->data(0, Qt::UserRole).toInt() >= SM.items.count()) return; + SM.setCurItem(node->data(0, Qt::UserRole).toInt()); + QString isLearnigDMStr = ""; + if(SM.item->moduleType == mtDM && SM.item->schemeType == stLEARNING) + isLearnigDMStr = "Контроль знаний\n"; + if(SM.item->moduleType == mtPM) { + node->setText(0, //SM.item->fileCode+"\n"+ + SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle") ); + if(SM.item->isQualifyed) + node->setIcon(0, iconFolder); + else + node->setIcon(0, iconFolder_ex); + } else { + node->setText(0, //SM.item->fileCode+" "+ + isLearnigDMStr+ + SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName") + "\n" + + SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName") ); + if(SM.item->isQualifyed) + node->setIcon(0, iconDoc_head_blue); + else + node->setIcon(0, iconDoc_head_blue_ex); + } + for(int i=0;ichildCount();i++) + updateTreeWidgetNamesRecurs(node->child(i)); +} + +void EditorMainWindow::updateTreeWidgetNames() { + if(!allowCodePageToSetItems) return; + int curInd = ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt(); + for(int i=0;itreeWidget->topLevelItemCount();i++) + updateTreeWidgetNamesRecurs(ui->treeWidget->topLevelItem(i)); + if(curInd >= SM.items.count()) curInd = SM.items.count()-1; + if(curInd < 0) curInd = 0; + SM.setCurItem(curInd); +} + +// у DM не может быть детей, убираем их на уровень вверх +void EditorMainWindow::treeWidgetNormalizeDMsAfterDrop(QTreeWidgetItem *node) { + int itemInd = node->data(0, Qt::UserRole).toInt(); + //int childInd; + for(int i=0;ichildCount();i++) { + //childInd = node->child(i)->data(0, Qt::UserRole).toInt(); + if(SM.items[itemInd].moduleType == mtDM) { + QTreeWidgetItem *childClone = node->child(i)->clone(); + node->removeChild(node->child(i)); + if(node->parent() != nullptr) + node->parent()->insertChild(node->parent()->indexOfChild(node)+1, childClone); + else + ui->treeWidget->insertTopLevelItem(ui->treeWidget->indexOfTopLevelItem(node)+1, childClone); + ui->treeWidget->setCurrentItem(childClone); + } + else + if(node->child(i)->childCount() > 0) + treeWidgetNormalizeDMsAfterDrop(node->child(i)); + } +} + +void EditorMainWindow::fillItemsFromTreeWidget(int parentInd, QTreeWidgetItem *node) { + int itemInd = node->data(0, Qt::UserRole).toInt(); + SM.items[itemInd].child.clear(); + if(SM.items[itemInd].moduleType == mtPM) { + SM.setCurItem(itemInd); + QDomNode pmEntry = SM.findElement("content.pmEntry"); // просто удаляем все Ref из PM и далее их заполняем из TreeWidget + for(int i=0;ichildCount();i++) { + childInd = node->child(i)->data(0, Qt::UserRole).toInt(); + SM.items[itemInd].child.append(childInd); + SM.moveItemToPM(childInd, itemInd, i); // переместить xml запись элемента в другую публикацию на i-тое место + // if(DBG) qDebug() << " move item" << SM.items[childInd].fileCode << "to PM" << SM.items[itemInd].fileCode << " at pos." << i; + fillItemsFromTreeWidget(itemInd, node->child(i)); + } + } + SM.items[itemInd].parent = parentInd; +} + +void EditorMainWindow::treeWidgetDrop() { + for(int i=0; itreeWidget->topLevelItemCount();i++) + treeWidgetNormalizeDMsAfterDrop(ui->treeWidget->topLevelItem(i)); + ui->treeWidget->update(); ui->treeWidget->repaint(); + for(int i=0; itreeWidget->topLevelItemCount();i++) { + fillItemsFromTreeWidget(-1, ui->treeWidget->topLevelItem(i)); + } + setIsModifyed(true); +} + +void EditorMainWindow::on_actionDeleteItem_triggered() +{ + if(ui->treeWidget->topLevelItemCount() == 0) return; + if(SM.items.count() <= 1) return; + int itemInd = ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt(); + if(SM.items[itemInd].moduleType == mtPM && SM.items[itemInd].child.count() > 0) { + QApplication::beep(); + QMessageBox msgBox; + msgBox.setIcon(QMessageBox::Warning); msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); + msgBox.setWindowTitle("Удаление"); msgBox.setText("Невозможно удалить непустую публикацию."); + msgBox.exec(); + return; + } + + SM.deleteItem(itemInd); + allowCodePageToSetItems = false; + //ui->treeWidget->currentItem()->setData(0, Qt::UserRole, 0); // временно, чтобы избежать ошибок + fillTreeWidgetWithItems(); + ui->treeWidget->setCurrentItem(ui->treeWidget->topLevelItem(0)); + allowCodePageToSetItems = true; + Save(); +} + +void EditorMainWindow::Save() { + for(int i=0; itreeWidget->topLevelItemCount();i++) + fillItemsFromTreeWidget(-1, ui->treeWidget->topLevelItem(i)); + SM.SaveProject(); setIsModifyed(false); +} + +void EditorMainWindow::on_dmc_btnBox_IsLearningDM_clicked(QAbstractButton *aButton) +{ + if(!allowDMCodePageToSetItems) return; + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + + QDialogButtonBox::StandardButton button = ui->dmc_btnBox_IsLearningDM->standardButton(aButton); + if(button == QDialogButtonBox::Yes && ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->isChecked()) { + //ui->dmc_lb_learnCode->setEnabled(true); ui->dmc_lb_learnEventCode->setEnabled(true); + //ui->dmc_le_learnCode->setEnabled(true); ui->dmc_le_learnEventCode->setEnabled(true); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->setChecked(true); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->setChecked(false); + if(SM.item->schemeType != stLEARNING) { + if(SM.item->dmDataFilled) { + QApplication::beep(); + QMessageBox msgBox; + msgBox.setIcon(QMessageBox::Warning); msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); + msgBox.setWindowTitle("Внимание"); msgBox.setText("Изменить схему модуля данных? Заполенные данные будут утеряны."); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::Yes); + int ret = msgBox.exec(); + if(ret != QMessageBox::Yes) { + allowDMCodePageCallOnChangeComboBox = false; + ui->dmc_cb_InfoSets->setCurrentIndex(SM.item->selectedInDMCodeList); + allowDMCodePageCallOnChangeComboBox = true; + return; + } + SM.item->dmDataFilled = false; + } + + QDomNode identAndStatusSectionClone = SM.findElement("identAndStatusSection").cloneNode(); + + QFile xmlFile(":new/BlankXML/learning.xml"); + if (!xmlFile.open(QFile::ReadOnly | QFile::Text)) { + if(DBG) qDebug() << " Cant open :new/BlankXML/learning.xml"; + QApplication::beep(); + allowDMCodePageCallOnChangeComboBox = false; + ui->dmc_cb_InfoSets->setCurrentIndex(SM.item->selectedInDMCodeList); + allowDMCodePageCallOnChangeComboBox = true; + return; + } + QByteArray fileData = xmlFile.readAll(); + xmlFile.close(); + SM.item->doc.setContent(fileData); + SM.item->schemeType = stLEARNING; + QDomNode newIdent = SM.findElement("identAndStatusSection"); + QDomNode oldIdent = SM.item->doc.importNode(identAndStatusSectionClone, true); + newIdent.parentNode().replaceChild(oldIdent, newIdent); + //qDebug() << SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + + } + if(ui->dmc_cb_InfoSets->currentIndex() > -1) { + allowDMCodePageToSetItems = false; + ui->dmc_le_learnCode->setText(ru_const.dmCodeList[ui->dmc_cb_InfoSets->currentIndex()]._learnCode); + ui->dmc_le_learnEventCode->setText(ru_const.dmCodeList[ui->dmc_cb_InfoSets->currentIndex()]._learnEventCode); + allowDMCodePageToSetItems = true; + } + } + + if(button == QDialogButtonBox::No && ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->isChecked()) { + //ui->dmc_lb_learnCode->setEnabled(false); ui->dmc_lb_learnEventCode->setEnabled(false); + //ui->dmc_le_learnCode->setEnabled(false); ui->dmc_le_learnEventCode->setEnabled(false); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->setChecked(false); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->setChecked(true); + + QString newScheme; + if(ui->dmc_cb_InfoSets->currentIndex() > -1) + newScheme = ru_const.dmCodeList[ui->dmc_cb_InfoSets->currentIndex()].schemeTypeStr; + else + newScheme = "DESCRIPT"; + SM.item->schemeType = SM.getSchemeTypeByStr(newScheme); + + QDomNode identAndStatusSectionClone = SM.findElement("identAndStatusSection").cloneNode(); + QFile xmlFile(":new/BlankXML/"+newScheme.toLower()+".xml"); + if (!xmlFile.open(QFile::ReadOnly | QFile::Text)) { + if(DBG) qDebug() << " Cant open :new/BlankXML/"+newScheme.toLower()+".xml"; + QApplication::beep(); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->setChecked(true); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->setChecked(false); + return; + } + QByteArray fileData = xmlFile.readAll(); + xmlFile.close(); + SM.item->doc.setContent(fileData); + QDomNode newIdent = SM.findElement("identAndStatusSection"); + QDomNode oldIdent = SM.item->doc.importNode(identAndStatusSectionClone, true); + newIdent.parentNode().replaceChild(oldIdent, newIdent); + //qDebug() << SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + + if(ui->dmc_cb_InfoSets->currentIndex() > -1) { + allowDMCodePageToSetItems = false; + ui->dmc_le_learnCode->setText(ru_const.dmCodeList[ui->dmc_cb_InfoSets->currentIndex()].learnCode); + ui->dmc_le_learnEventCode->setText(ru_const.dmCodeList[ui->dmc_cb_InfoSets->currentIndex()].learnEventCode); + allowDMCodePageToSetItems = true; + } + } + + if(ui->dmc_cb_InfoSets->currentIndex() == -1) { + allowDMCodePageToSetItems = false; + ui->dmc_le_learnCode->setText(""); + ui->dmc_le_learnEventCode->setText(""); + allowDMCodePageToSetItems = true; + } + codePageDM_EditChanged(""); +} + +void EditorMainWindow::on_dmc_cb_InfoSets_currentIndexChanged(int index) { + if(!allowDMCodePageCallOnChangeComboBox) return; + if(index == -1) return; + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + + //_schemeType newSchemeType = SM.getSchemeTypeByStr(ru_const.dmCodeList[index].schemeTypeStr); + + //уже нельзя так делать! +// if(SM.item->schemeType != newSchemeType) { +// if(SM.item->dmDataFilled) { +// QApplication::beep(); +// QMessageBox msgBox; +// msgBox.setIcon(QMessageBox::Warning); msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); +// msgBox.setWindowTitle("Внимание"); msgBox.setText("Изменить схему модуля данных? Заполенные данные будут утеряны."); +// msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::Yes); +// int ret = msgBox.exec(); +// if(ret != QMessageBox::Yes) { +// allowDMCodePageCallOnChangeComboBox = false; +// ui->dmc_cb_InfoSets->setCurrentIndex(SM.item->selectedInDMCodeList); +// allowDMCodePageCallOnChangeComboBox = true; +// return; +// } +// SM.item->dmDataFilled = false; +// } + +// QDomNode identAndStatusSectionClone = SM.findElement("identAndStatusSection").cloneNode(); +// QFile xmlFile(":new/BlankXML/"+ru_const.dmCodeList[index].schemeTypeStr.toLower()+".xml"); +// if (!xmlFile.open(QFile::ReadOnly | QFile::Text)) { +// if(DBG) qDebug() << " Cant open :new/BlankXML/"+ru_const.dmCodeList[index].schemeTypeStr.toLower()+".xml"; +// QApplication::beep(); +// allowDMCodePageCallOnChangeComboBox = false; +// ui->dmc_cb_InfoSets->setCurrentIndex(SM.item->selectedInDMCodeList); +// allowDMCodePageCallOnChangeComboBox = true; +// return; +// } +// QByteArray fileData = xmlFile.readAll(); +// xmlFile.close(); +// SM.item->doc.setContent(fileData); +// QDomNode newIdent = SM.findElement("identAndStatusSection"); +// QDomNode oldIdent = SM.item->doc.importNode(identAndStatusSectionClone, true); +// newIdent.parentNode().replaceChild(oldIdent, newIdent); +// //qDebug() << SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); +// } + + //ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->setChecked(false); + //ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->setChecked(true); + allowDMCodePageToSetItems = false; + ui->dmc_InfoText->document()->setHtml(ru_const.dmCodeList[index].text); + ui->dmc_le_modelIdentCode->setText(ru_const.dmCodeList[index].modelIdentCode); + ui->dmc_le_systemDiffCode->setText(ru_const.dmCodeList[index].systemDiffCode); + ui->dmc_le_systemCode->setText(ru_const.dmCodeList[index].systemCode); + ui->dmc_le_subSystemCode->setText(ru_const.dmCodeList[index].subSystemCode); + ui->dmc_le_subSubSystemCode->setText(ru_const.dmCodeList[index].subSubSystemCode); + ui->dmc_le_assyCode->setText(ru_const.dmCodeList[index].assyCode); + ui->dmc_le_disassyCode->setText(ru_const.dmCodeList[index].disassyCode); + ui->dmc_le_disassyCodeVariant->setText(ru_const.dmCodeList[index].disassyCodeVariant); + ui->dmc_le_infoCode->setText(ru_const.dmCodeList[index].infoCode); + ui->dmc_le_infoCodeVariant->setText(ru_const.dmCodeList[index].infoCodeVariant); + ui->dmc_le_itemLocationCode->setText(ru_const.dmCodeList[index].itemLocationCode); + + if(SM.item->schemeType != stLEARNING) { + ui->dmc_le_learnCode->setText(ru_const.dmCodeList[index].learnCode); + ui->dmc_le_learnEventCode->setText(ru_const.dmCodeList[index].learnEventCode); + } else { + ui->dmc_le_learnCode->setText(ru_const.dmCodeList[index]._learnCode); + ui->dmc_le_learnEventCode->setText(ru_const.dmCodeList[index]._learnEventCode); + } + if(ui->dmc_te_techName->document()->toPlainText() == "") { + ui->dmc_te_techName->setText(ru_const.dmCodeList[index].techName); + ui->dmc_te_infoName->setText(ru_const.dmCodeList[index].infoName); + } + allowDMCodePageToSetItems = true; + SM.item->selectedInDMCodeList = index; + + codePageDM_EditChanged(""); +} + +QString EditorMainWindow::delYYY(QString st) { + return st.replace("X", "").replace("Y", "").replace("N", ""); +} +void EditorMainWindow::codePageDM_TitleChanged() { + codePageDM_EditChanged(""); +} + +void EditorMainWindow::codePageDM_EditChanged(QString) { + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + QString styleRed = "background-color: rgb(255, 230, 230)"; + QString styleWhite = "background-color: white"; + SM.item->isReady = true; + if(delYYY(ui->dmc_le_modelIdentCode->text()) == "") + { ui->dmc_le_modelIdentCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_modelIdentCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_systemDiffCode->text()) == "") + { ui->dmc_le_systemDiffCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_systemDiffCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_systemCode->text()) == "") + { ui->dmc_le_systemCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_systemCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_subSystemCode->text()) == "") + { ui->dmc_le_subSystemCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_subSystemCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_subSubSystemCode->text()) == "") + { ui->dmc_le_subSubSystemCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_subSubSystemCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_assyCode->text()) == "") + { ui->dmc_le_assyCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_assyCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_disassyCode->text()) == "") + { ui->dmc_le_disassyCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_disassyCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_disassyCodeVariant->text()) == "") + { ui->dmc_le_disassyCodeVariant->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_disassyCodeVariant->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_infoCode->text()) == "") + { ui->dmc_le_infoCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_infoCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_infoCodeVariant->text()) == "") + { ui->dmc_le_infoCodeVariant->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_infoCodeVariant->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_learnCode->text()) == "") + { ui->dmc_le_learnCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_learnCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_learnEventCode->text()) == "") + { ui->dmc_le_learnEventCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_learnEventCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_itemLocationCode->text()) == "") + { ui->dmc_le_itemLocationCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_itemLocationCode->setStyleSheet(styleWhite); + //if(ui->dmc_te_infoName->document()->toPlainText() == "") + // { ui->dmc_te_infoName->setStyleSheet(styleRed); SM.item->isReady = false; } + //else + // ui->dmc_te_infoName->setStyleSheet(styleWhite); + if(ui->dmc_te_techName->document()->toPlainText() == "") + { ui->dmc_te_techName->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_te_techName->setStyleSheet(styleWhite); + + if(allowDMCodePageToSetItems) { + SM.replaceCurItem_dmCode(ui->dmc_te_techName->document()->toPlainText(), ui->dmc_te_infoName->document()->toPlainText(), + ui->dmc_le_modelIdentCode->text(), ui->dmc_le_systemDiffCode->text(), + ui->dmc_le_systemCode->text(), ui->dmc_le_subSystemCode->text(), ui->dmc_le_subSubSystemCode->text(), ui->dmc_le_assyCode->text(), + ui->dmc_le_disassyCode->text(), ui->dmc_le_disassyCodeVariant->text(), + ui->dmc_le_infoCode->text(), ui->dmc_le_infoCodeVariant->text(), + ui->dmc_le_itemLocationCode->text(), ui->dmc_le_learnCode->text(), ui->dmc_le_learnEventCode->text() ); + QString fCode = SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + //qDebug() << "update DM: "+fCode; + SM.item->fileCode = fCode; + ui->dmc_lb_pageDMName->setText("Модуль данных\n"+fCode); + + setIsModifyed(true); + updateTreeWidgetNames(); + } +} + +void EditorMainWindow::on_dml_btnBox_question_clicked(QAbstractButton *aButton) +{ + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + if(SM.item->schemeType != stLEARNING) return; + QDialogButtonBox::StandardButton button = ui->dml_btnBox_question->standardButton(aButton); + + if(button == QDialogButtonBox::Yes) { // Add question + QDomNode lcInteractionNode = SM.item->doc.createElement("lcInteraction"); + QDomNode lcSingleSelect = SM.item->doc.createElement("lcSingleSelect"); + lcInteractionNode.appendChild(lcSingleSelect); + QDomNode lcQuestion = SM.item->doc.createElement("lcQuestion"); + lcSingleSelect.appendChild(lcQuestion); + QDomNode description = SM.item->doc.createElement("description"); + lcQuestion.appendChild(description); + QDomNode para = SM.item->doc.createElement("para"); + description.appendChild(para); + para.appendChild(SM.item->doc.createTextNode("")); + para.firstChild().toText().setData("Текст вопроса"); + QDomNode lcAnswerOptionGroup = SM.item->doc.createElement("lcAnswerOptionGroup"); + lcSingleSelect.appendChild(lcAnswerOptionGroup); + QDomNode lcAnswerOption = SM.item->doc.createElement("lcAnswerOption"); + lcAnswerOptionGroup.appendChild(lcAnswerOption); + QDomNode lcAnswerOptionContent = SM.item->doc.createElement("lcAnswerOptionContent"); + lcAnswerOption.appendChild(lcAnswerOptionContent); + description = SM.item->doc.createElement("description"); + lcAnswerOptionContent.appendChild(description); + para = SM.item->doc.createElement("para"); + description.appendChild(para); + para.appendChild(SM.item->doc.createTextNode("")); + para.firstChild().toText().setData("Ответ 1"); + QDomNode lcCorrectResponse = SM.item->doc.createElement("lcCorrectResponse"); + lcAnswerOption.appendChild(lcCorrectResponse); + lcAnswerOption = SM.item->doc.createElement("lcAnswerOption"); + lcAnswerOptionGroup.appendChild(lcAnswerOption); + lcAnswerOptionContent = SM.item->doc.createElement("lcAnswerOptionContent"); + lcAnswerOption.appendChild(lcAnswerOptionContent); + description = SM.item->doc.createElement("description"); + lcAnswerOptionContent.appendChild(description); + para = SM.item->doc.createElement("para"); + description.appendChild(para); + para.appendChild(SM.item->doc.createTextNode("")); + para.firstChild().toText().setData("Ответ 2"); + SM.findElement("content.learning.learningAssessment").insertAfter(lcInteractionNode, SM.findElement("content.learning.learningAssessment.lcInteraction["+QString::number(ui->dml_lw_question->currentRow())+"]")); + int ind = ui->dml_lw_question->currentRow(); + fillLearningPageWithData(); + ui->dml_lw_question->setCurrentRow(ind+1); + ui->dml_lw_question->editItem(ui->dml_lw_question->currentItem()); + } + + if(button == QDialogButtonBox::No) { // Delete question + if(ui->dml_lw_question->currentRow() < 0) return; + if(ui->dml_lw_question->currentItem() == nullptr) return; + if(ui->dml_lw_question->count() == 1) return; + + QDomNode questNode; + int tmpRow=-1; + for(int i=0;idml_lw_question->currentRow()) { + questNode.parentNode().parentNode().removeChild(questNode.parentNode()); + break; + } + } + int tmp = ui->dml_lw_question->currentRow(); + fillLearningPageWithData(); + if(tmp >= ui->dml_lw_question->count()) tmp = ui->dml_lw_question->count()-1; + ui->dml_lw_question->setCurrentRow(tmp); + } + + if(button == QDialogButtonBox::Apply) { // move Up question + if(ui->dml_lw_question->currentItem() == nullptr) return; + if(ui->dml_lw_question->currentRow() <= 0) return; + QDomNode prevInter, curInter, tmpCur, tmpPrev; + int tmpRow=-1; + for(int i=1;i<=SM.getNodeChildsWithNameCount("content.learning.learningAssessment", "lcInteraction");i++) { + curInter = SM.findElement("content.learning.learningAssessment.lcInteraction["+QString::number(i-1)+"]"); + if(curInter.firstChild().nodeName() == "lcSingleSelect" || curInter.firstChild().nodeName() == "lcMultipleSelect") { + tmpRow++; + if(tmpRow == ui->dml_lw_question->currentRow()-1) + prevInter = curInter; + if(tmpRow == ui->dml_lw_question->currentRow()) { + tmpCur = curInter.cloneNode(); tmpPrev = prevInter.cloneNode(); + prevInter.parentNode().replaceChild(tmpCur, prevInter); + curInter.parentNode().replaceChild(tmpPrev, curInter); + int tmp = ui->dml_lw_question->currentRow(); + fillLearningPageWithData(); + ui->dml_lw_question->setCurrentRow(tmp-1); + break; + } + } + } + } + + if(button == QDialogButtonBox::Reset) { // move Down question + if(ui->dml_lw_question->currentItem() == nullptr) return; + if(ui->dml_lw_question->currentRow() >= ui->dml_lw_question->count()-1) return; + QDomNode nextInter, curInter, tmpCur, tmpPrev; + int tmpRow=-1; + for(int i=0;idml_lw_question->currentRow()) { + tmpCur = curInter.cloneNode(); tmpPrev = nextInter.cloneNode(); + curInter.parentNode().replaceChild(tmpCur, nextInter); + curInter.parentNode().replaceChild(tmpPrev, curInter); + int tmp = ui->dml_lw_question->currentRow(); + fillLearningPageWithData(); + ui->dml_lw_question->setCurrentRow(tmp+1); + break; + } + } + } + +} + +void EditorMainWindow::on_dml_btnBox_answer_clicked(QAbstractButton *aButton) +{ + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + if(SM.item->schemeType != stLEARNING) return; + + QDialogButtonBox::StandardButton button = ui->dml_btnBox_answer->standardButton(aButton); + int questInterIndex = -1; + QString questNodeName; + questInterIndex = getlcInteractionFromQuestRow(ui->dml_lw_question->currentRow()); + QDomNode curInter = SM.findElement("content.learning.learningAssessment.lcInteraction["+QString::number(questInterIndex)+"]"); + questNodeName = curInter.firstChild().nodeName(); + if(questInterIndex == -1) return; + QString groupStr = "content.learning.learningAssessment.lcInteraction["+QString::number(questInterIndex)+"]."+questNodeName+".lcAnswerOptionGroup"; + QDomNode lcAnswerOptionGroup = SM.findElement(groupStr); + int curRow = ui->dml_lw_answer->currentRow(); + if(lcAnswerOptionGroup.isNull()) + if(DBG) qDebug() << "Error: dml_btnBox_answer_clicked - lcAnswerOptionGroup.isNull " << groupStr; + + if(button == QDialogButtonBox::Yes) { // Add answer + QDomNode lcAnswerOption = SM.item->doc.createElement("lcAnswerOption"); + if(curRow < 0) curRow = 0; + lcAnswerOptionGroup.insertAfter(lcAnswerOption, lcAnswerOptionGroup.childNodes().at(curRow)); + QDomNode lcAnswerOptionContent = SM.item->doc.createElement("lcAnswerOptionContent"); + lcAnswerOption.appendChild(lcAnswerOptionContent); + QDomNode description = SM.item->doc.createElement("description"); + lcAnswerOptionContent.appendChild(description); + QDomNode para = SM.item->doc.createElement("para"); + description.appendChild(para); + para.appendChild(SM.item->doc.createTextNode("")); + para.firstChild().toText().setData("Новый ответ"); + fillLearningPageWithData(); + ui->dml_lw_question->setCurrentRow(questInterIndex); + ui->dml_lw_answer->setCurrentRow(curRow+1); + ui->dml_lw_answer->editItem(ui->dml_lw_answer->currentItem()); + } + + if(button == QDialogButtonBox::No) { // Delete answer + if(ui->dml_lw_answer->currentItem() == nullptr) return; + if(ui->dml_lw_answer->count() <= 1) return; + lcAnswerOptionGroup.removeChild(lcAnswerOptionGroup.childNodes().at(curRow)); + ui->dml_lw_answer->takeItem(curRow); + } + setIsModifyed(true); +} + +void EditorMainWindow::fillLearningPageWithData() { + allowDMLearningPageCallOnChangeLists = false; allowDMLearningPageToSetItems = false; + ui->dml_lw_question->clear(); ui->dml_lw_answer->clear(); + allowDMLearningPageCallOnChangeLists = true; allowDMLearningPageToSetItems = true; + + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + if(SM.item->schemeType != stLEARNING) return; + ui->dml_lb_title->setText("Модуль данных - контроль знаний\n"+SM.getNodeText("content.learning.learningAssessment.title")); + + allowDMLearningPageCallOnChangeLists = false; allowDMLearningPageToSetItems = false; + QDomNode lcInteractionNode, questNode; + QString questStr = ""; + QListWidgetItem *questItem; + QDomElement descriptionNode; + + if(!SM.isNodeCreated("content.learning")) SM.createNode("content","learning"); + if(!SM.isNodeCreated("content.learning.learningAssessment")) { + SM.createNode("content.learning","learningAssessment"); + } + QDomNode learningAssessment = SM.findElement("content.learning.learningAssessment"); + + for(int i=0;isetFlags(questItem->flags() | Qt::ItemIsEditable); + ui->dml_lw_question->addItem(questItem); + } + + allowDMLearningPageCallOnChangeLists = true; allowDMLearningPageToSetItems = true; + ui->dml_lw_question->setCurrentRow(0); +} + +void EditorMainWindow::on_dml_lw_question_currentRowChanged(int) { + if(!allowDMLearningPageCallOnChangeLists) return; + allowDMLearningPageCallOnChangeLists = false; allowDMLearningPageToSetItems = false; + ui->dml_lw_answer->clear(); + QString asnwerText; + QListWidgetItem *answerItem; + + int curQuestInter = getlcInteractionFromQuestRow(ui->dml_lw_question->currentRow()); + QDomNode questNode = SM.findElement("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]").firstChild(); + + for(int j=0;jsetFlags(answerItem->flags() | Qt::ItemIsUserCheckable | Qt::ItemIsEditable); + if(SM.isNodeCreated("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]."+questNode.nodeName()+".lcAnswerOptionGroup.lcAnswerOption["+QString::number(j)+"].lcCorrectResponse")) + answerItem->setCheckState(Qt::Checked); + else + answerItem->setCheckState(Qt::Unchecked); + ui->dml_lw_answer->addItem(answerItem); + } + allowDMLearningPageCallOnChangeLists = true; allowDMLearningPageToSetItems = true; +} + +void EditorMainWindow::on_dml_lw_question_itemChanged(QListWidgetItem *item) { + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + if(!allowDMLearningPageCallOnChangeLists) return; + if(!allowDMLearningPageToSetItems) return; + if(ui->dml_lw_question->currentItem() != item) return; + int curQuestInter = getlcInteractionFromQuestRow(ui->dml_lw_question->currentRow()); + if(curQuestInter == -1) return; + + QDomNode questNode = SM.findElement("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]").firstChild(); + QDomNode description = SM.findElement("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]."+ + questNode.nodeName()+".lcQuestion.description"); + while(description.childNodes().count() > 0) + description.removeChild(description.firstChild()); + QStringList paraList = item->text().split("#"); + QDomNode para; + foreach(QString paraText, paraList) { + para = SM.item->doc.createElement("para"); + para.appendChild(SM.item->doc.createTextNode("")); + para.firstChild().toText().setData(paraText); + description.appendChild(para); + } + setIsModifyed(true); +} + +void EditorMainWindow::on_dml_lw_answer_itemChanged(QListWidgetItem *answerItem) +{ + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + if(!allowDMLearningPageCallOnChangeLists) return; + if(!allowDMLearningPageToSetItems) return; + ui->dml_lw_answer->setCurrentItem(answerItem); + int curQuestInter = getlcInteractionFromQuestRow(ui->dml_lw_question->currentRow()); + + QDomNode questNode = SM.findElement("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]").firstChild(); + QDomNode para = SM.findElement("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]."+ + questNode.nodeName()+".lcAnswerOptionGroup.lcAnswerOption["+QString::number(ui->dml_lw_answer->currentRow())+"]."+ + "lcAnswerOptionContent.description.para"); + if(para.isNull()) { + if(DBG) qDebug() << "answer_itemChanged: para is NULL" << questNode.nodeName() << curQuestInter << ui->dml_lw_answer->currentRow(); + return; + } + para.firstChild().toText().setData(answerItem->text()); + bool lcCorrectResponseCreated = SM.isNodeCreated("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]."+ + questNode.nodeName()+".lcAnswerOptionGroup.lcAnswerOption["+QString::number(ui->dml_lw_answer->currentRow())+"].lcCorrectResponse"); + if(answerItem->checkState() == Qt::Checked) { + if(!lcCorrectResponseCreated) + SM.createNode("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]."+ + questNode.nodeName()+".lcAnswerOptionGroup.lcAnswerOption["+QString::number(ui->dml_lw_answer->currentRow())+"]", "lcCorrectResponse"); + } else { + if(lcCorrectResponseCreated) + SM.deleteNode("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]."+ + questNode.nodeName()+".lcAnswerOptionGroup.lcAnswerOption["+QString::number(ui->dml_lw_answer->currentRow())+"].lcCorrectResponse"); + } + + int checkedAnswersCnt = 0; + for(int k=0;kdml_lw_answer->currentRow())+"]", "lcCorrectResponse"); + allowDMLearningPageCallOnChangeLists=false; answerItem->setCheckState(Qt::Checked); allowDMLearningPageCallOnChangeLists = true; + checkedAnswersCnt++; + } + if(checkedAnswersCnt == 1) questNode.toElement().setTagName("lcSingleSelect"); + if(checkedAnswersCnt > 1) questNode.toElement().setTagName("lcMultipleSelect"); + + setIsModifyed(true); +} + +int EditorMainWindow::getlcInteractionFromQuestRow(int row) { + QDomNode questNode; + int tmpRow=-1; + for(int i=0;itreeWidget->currentItem() == nullptr) return; +// SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); +// if(SM.item->moduleType != mtDM) return; +// if(SM.item->schemeType != stDESCRIPT && SM.item->schemeType != stCREW) return; + + + if(isProjectModifyed) { + QMessageBox msgBox; + msgBox.setText("Сохранить изменения?"); + msgBox.setWindowTitle("Проект изменен"); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Save); + msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); + int ret = msgBox.exec(); + switch (ret) { + case QMessageBox::Yes: + Save(); + if(isProjectModifyed) return; + case QMessageBox::No: + break; + case QMessageBox::Cancel: + return; + } + } + + QString fileName; + QFileInfo info1(config.lastOpenedFile); + fileName = QFileDialog::getOpenFileName(this, tr("Выберите файл сценария в формате LyX"), info1.absolutePath(), tr("*.lyx")); + + if(fileName == "") return; + //import, delete after debug + //fileName = "F:/C++/build-S1000DEditor-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/Test/LyX/auk-05_mi-38.lyx"; + + openLyXFile(fileName); +} + +void EditorMainWindow::openLyXFile(QString fileName) { + if(fileName == "") return; + + this->setWindowTitle("Конвертер АУК "+version+" - " + fileName); + ui->actionAddDM->setEnabled(true); ui->actionAddPM->setEnabled(true); + isProjectOpened = true; + setIsModifyed(false); + SM.rootLyXfile = fileName; + SM.packages.clear(); SM.timeConvert = SM.timeS1000D = SM.timeSCORM = 0; + + splash->Reset(); splash->show(); splash->repaint(); + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + QApplication::processEvents(); + QElapsedTimer timer; timer.start(); + + lyx.Import(&SM, fileName, splash); + html.Generate(&SM, false, splash); + splash->Reset(); splash->SetTitle("Загрузка пакетов..."); + SM.LoadPackagesXML(); + + SM.timeConvert = (int)timer.elapsed()/1000; + splash->Reset(); splash->SetTitle("Сохранение..."); + QApplication::processEvents(); + + //setIsModifyed(true); + fillTreeWidgetWithItems(); + ui->treeWidget->setCurrentItem(ui->treeWidget->topLevelItem(0)); + + + Save(); + + splash->hide(); + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); + + config.lastOpenedFile = fileName; + QFile cfgFile(qApp->applicationDirPath()+"/config.txt"); + if (cfgFile.open(QFile::ReadWrite | QFile::Text)) { + QString cfg = "lastOpenedFile="+config.lastOpenedFile; + cfgFile.write(cfg.toStdString().c_str()); + cfgFile.resize(cfgFile.pos()); + } + cfgFile.close(); + //updateTreeWidgetNames(); +} + + + +// QDialog *LyXDialog; QListWidget* LyXLog; +// LyXLog = new QListWidget(this); +// LyXLog->setFixedHeight(800); LyXLog->setFixedWidth(1000); +// LyXLog->setObjectName("LyXDialogList"); +// QFont logFont("Courier", 8); LyXLog->setFont(QFont(logFont)); +// QPushButton* logDialogCloseButton = new QPushButton(tr("Закрыть"), this); +// logDialogCloseButton->setDefault(true); +// LyXDialog = new QDialog(this); +// QVBoxLayout *logDialogLayout = new QVBoxLayout(LyXDialog); +// logDialogLayout->setMargin(5); logDialogLayout->setSpacing(6); LyXDialog->setWindowTitle(QString("Log")); +// logDialogLayout->addWidget(LyXLog); logDialogLayout->addWidget(logDialogCloseButton); +// connect(logDialogCloseButton, SIGNAL(clicked()), LyXDialog, SLOT(close())); +// LyXDialog->setLayout(logDialogLayout); + +// QString s; +// for(int i=0;iaddItem(s); continue; } +// if(s.at(0) == "!" || s.at(0) == "#") s = s.mid(1); +// LyXLog->addItem(s); +// if(LyXLogList.at(i).at(0) == "#") +// LyXLog->item(LyXLog->count()-1)->setTextColor(QColor(150,150,150)); +// if(LyXLogList.at(i).at(0) == "!") +// LyXLog->item(LyXLog->count()-1)->setTextColor(QColor(100,0,0)); +// } + //config.lastOpenedDir = QFileInfo(fileName).absolutePath(); +// LyXDialog->exec(); + +void EditorMainWindow::on_action_refreshFromLyX_triggered() +{ + if(config.lastOpenedFile == "") return; + if(QFileInfo::exists(config.lastOpenedFile)) + openLyXFile(config.lastOpenedFile); + else { + QApplication::beep(); + config.lastOpenedFile = ""; + } +} + + +void EditorMainWindow::on_actionOpenInBrowser_triggered() +{ + if(SM.item == nullptr) return; + if(SM.item->moduleType == mtPM) return; + if(SM.item->schemeType == stLEARNING) return; + + QString htmlFileName = SM.projectPath + "/" + SM.item->fileName.replace(".xml", ".html"); + QDesktopServices::openUrl(QUrl("file:///"+htmlFileName, QUrl::TolerantMode)); +} + +void EditorMainWindow::on_actionExit_triggered() +{ + this->close(); +} + +void EditorMainWindow::on_S1000D_doc_dmc_linkActivated(const QString &link) // &link +{ + QDesktopServices::openUrl(QUrl("file:///"+QCoreApplication::applicationDirPath()+"/Docs/S1000D_Issue_4.1.pdf", QUrl::TolerantMode)); +} + +void EditorMainWindow::on_label_33_linkActivated(const QString &link) +{ + QDesktopServices::openUrl(QUrl("file:///"+QCoreApplication::applicationDirPath()+"/Docs/infoCodes.txt", QUrl::TolerantMode)); +} +void EditorMainWindow::on_label_34_linkActivated(const QString &link) +{ + QDesktopServices::openUrl(QUrl("file:///"+QCoreApplication::applicationDirPath()+"/Docs/S1000D_Issue_4.1.pdf", QUrl::TolerantMode)); +} + +void EditorMainWindow::on_action_regenHTML_triggered() +{ + splash->Reset(); splash->show(); + splash->SetTitle("Генерация HTML..."); + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + QApplication::processEvents(); + + html.Generate(&SM, false, splash); + splash->Reset(); splash->SetTitle("Сохранение..."); + QApplication::processEvents(); + Save(); + + splash->hide(); + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); +} + +bool EditorMainWindow::isCodingFilled() { + tmpIntList.clear(); tmpStrList.clear(); + if(ui->treeWidget->topLevelItemCount() == 0) return false; + for(int i=0;itreeWidget->topLevelItemCount();i++) + if(!isCodingFilledRecurs(ui->treeWidget->topLevelItem(i))) + return false; + return true; +} + +bool EditorMainWindow::isCodingFilledRecurs(QTreeWidgetItem* treeitem) { + int ind = treeitem->data(0, Qt::UserRole).toInt(); + SM.setCurItem(ind); + + QString fCode, title; + if(SM.item->moduleType == mtPM) { + QString pmTitle, modelIdentCode, pmIssuer, pmNumber, pmVolume; + title = pmTitle = SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); + modelIdentCode = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode"); + pmIssuer = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer"); + pmNumber = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmNumber"); + pmVolume = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmVolume"); + if(pmTitle.isEmpty() || delYYY(pmIssuer).isEmpty() || delYYY(pmNumber).isEmpty() || delYYY(pmVolume).isEmpty()) { + ui->treeWidget->setCurrentItem(treeitem); + QApplication::beep(); + return false; + } + fCode = SM.pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + } + + if(SM.item->moduleType == mtDM) { + QString modelIdentCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode"); + QString systemDiffCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemDiffCode"); + QString systemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemCode"); + QString subSystemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSystemCode"); + QString subSubSystemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSubSystemCode"); + QString assyCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "assyCode"); + QString disassyCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCode"); + QString disassyCodeVariant = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCodeVariant"); + QString infoCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCode"); + QString infoCodeVariant = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCodeVariant"); + QString itemLocationCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "itemLocationCode"); + QString learnCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnCode"); + QString learnEventCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnEventCode"); + QString techName = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); + //QString infoName = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName"); + if(delYYY(modelIdentCode).isEmpty() || delYYY(systemDiffCode).isEmpty() || delYYY(systemCode).isEmpty() || delYYY(subSystemCode).isEmpty() || delYYY(subSubSystemCode).isEmpty() || + delYYY(assyCode).isEmpty() || delYYY(disassyCode).isEmpty() || delYYY(disassyCodeVariant).isEmpty() || delYYY(infoCode).isEmpty() || delYYY(infoCodeVariant).isEmpty() || + delYYY(itemLocationCode).isEmpty() || delYYY(learnCode).isEmpty() || delYYY(learnEventCode).isEmpty() || delYYY(techName).isEmpty() ) { + ui->treeWidget->setCurrentItem(treeitem); + QApplication::beep(); + return false; + } + title = techName; + fCode = SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + } + + int tmpInd = tmpStrList.indexOf(fCode); + if(tmpInd != -1) { + SM.setCurItem(tmpIntList[tmpInd]); + QString title2; + if(SM.item->moduleType == mtDM) + title2 = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); + else + title2 = SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); + ui->treeWidget->setCurrentItem(treeitem); + QApplication::beep(); + QMessageBox::critical(this,"Ошибка","Дублирование кодов публикаций/модулей: \n - \""+title+"\"\n - \""+title2+"\"",QMessageBox::Ok); + return false; + } + tmpStrList.append(fCode); tmpIntList.append(ind); + + for(int i=0;ichildCount();i++) + if(!isCodingFilledRecurs(treeitem->child(i))) + return false; + return true; +} + +void EditorMainWindow::on_action_Export_triggered() +{ + if(!isCodingFilled()) return; + for(int i=0; itreeWidget->topLevelItemCount();i++) + fillItemsFromTreeWidget(-1, ui->treeWidget->topLevelItem(i)); + for(int i=0;imoduleType != mtPM) + SM.item->fileCode = SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + else + SM.item->fileCode = SM.pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + } + + QString title = SM.items[ ui->treeWidget->topLevelItem(0)->data(0, Qt::UserRole).toInt() ].doc.namedItem("pm").namedItem("rdf:Description").attributes().namedItem("atc").nodeValue(); + if(title == "") + title = SM.items[ ui->treeWidget->topLevelItem(0)->data(0, Qt::UserRole).toInt() ].doc.namedItem("pm").namedItem("identAndStatusSection").namedItem("pmAddress").namedItem("pmAddressItems").namedItem("pmTitle").childNodes().at(0).nodeValue(); + exportDlg->setPackTitle(title); + QString fCode = SM.items[ ui->treeWidget->topLevelItem(0)->data(0, Qt::UserRole).toInt() ].fileCode; + exportDlg->setPackName(fCode.left(fCode.length()-7)); + QFileInfo info(SM.items[ ui->treeWidget->topLevelItem(0)->data(0, Qt::UserRole).toInt() ].importedFromLyX); + exportDlg->setPackDir(info.absolutePath()); + exportDlg->fillTree(ui->treeWidget); + exportDlg->fillPackageList(); + if(SM.packages.count() > 0) + exportDlg->setPackageListIndex(0); + exportDlg->exec(); +} + +// ---------------------------------------------- S1000D ------------------------------------------------- + +void EditorMainWindow::exportS1000D() { + if(SM.items.count() == 0) return; + QString dirName = exportDlg->getPackDir(); + QString packName = exportDlg->getPackName(); + QString packTitle = exportDlg->getPackTitle(); + if (packName == "") { + QMessageBox::critical(this,"Ошибка","Задайте имя пакета.",QMessageBox::Ok); + return; + } + QDir dir = QDir(dirName); + if (!dir.exists()) { + QMessageBox::critical(this,"Ошибка","Папка "+dirName+" не найдена.",QMessageBox::Ok); + return; + } + if(QFile::exists(dirName+"/"+packName+".zip")) { + QMessageBox msgBox; + msgBox.setText("Файл "+dirName+"/"+packName+".zip уже существует. Перезаписать?"); + msgBox.setWindowTitle("S1000D"); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); + msgBox.setDefaultButton(QMessageBox::Yes); + msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); + msgBox.setIcon(QMessageBox::Question); + int ret = msgBox.exec(); + switch (ret) { + case QMessageBox::Yes: + break; + case QMessageBox::No: + return; + case QMessageBox::Cancel: + return; + } + } + + splash->Reset(); splash->show(); + splash->SetTitle("Формирование пакета S1000D..."); + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + QApplication::processEvents(); + + + QTreeWidget* dlgTree = exportDlg->getDlgTreeWidget(); + for(int i=0;i childList; + for(int i=0;itopLevelItemCount();i++) + childList.append(dlgTree->topLevelItem(i)); + while(!childList.isEmpty()) { + QTreeWidgetItem* item = childList.takeFirst(); + if(item->checkState(0) == Qt::Checked) + SM.items[item->data(0, Qt::UserRole).toInt()].toExport = true; + for(int i=0;ichildCount();i++) + childList.append(item->child(i)); + } + + int ind = dlgTree->topLevelItem(0)->data(0, Qt::UserRole).toInt(); + QDomNode descr = SM.items[ind].doc.namedItem("pm").namedItem("rdf:Description"); + if(descr.isNull()) { + descr = SM.items[ind].doc.createElement("rdf:Description"); + SM.items[ind].doc.namedItem("pm").appendChild(descr); + } + descr.toElement().setAttribute("atc", packTitle); + + bool res = SM.exportS1000D(dirName, packName, packTitle, splash); + if(res) + exportDlg->setS1000Dlabel("Успешно", "green"); + else + exportDlg->setS1000Dlabel("Не выполнено", "red"); + + +} + +// ---------------------------------------------- SCORM ------------------------------------------------- + +void EditorMainWindow::exportSCORM() { + if(SM.items.count() == 0) return; + QString dirName = exportDlg->getPackDir(); + QString packName = exportDlg->getPackName(); + QString packTitle = exportDlg->getPackTitle(); + if (packName == "") { + QMessageBox::critical(this,"Ошибка","Задайте имя пакета.",QMessageBox::Ok); + return; + } + QDir dir = QDir(dirName); + if (!dir.exists()) { + QMessageBox::critical(this,"Ошибка","Папка "+dirName+" не найдена.",QMessageBox::Ok); + return; + } + + if(QFile::exists(dirName+"/"+packName+"_SCORM.zip")) { + QMessageBox msgBox; + msgBox.setText("Файл "+dirName+"/"+packName+"_SCORM.zip уже существует. Перезаписать?"); + msgBox.setWindowTitle("SCORM"); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); + msgBox.setDefaultButton(QMessageBox::Yes); + msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); + msgBox.setIcon(QMessageBox::Question); + int ret = msgBox.exec(); + switch (ret) { + case QMessageBox::Yes: + break; + case QMessageBox::No: + return; + case QMessageBox::Cancel: + return; + } + } + + splash->Reset(); splash->show(); + splash->SetTitle("Формирование SCORM-пакета..."); + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + QApplication::processEvents(); + + QTreeWidget* dlgTree = exportDlg->getDlgTreeWidget(); + for(int i=0;i childList; + for(int i=0;itopLevelItemCount();i++) + childList.append(dlgTree->topLevelItem(i)); + while(!childList.isEmpty()) { + QTreeWidgetItem* item = childList.takeFirst(); + if(item->checkState(0) == Qt::Checked) + SM.items[item->data(0, Qt::UserRole).toInt()].toExport = true; + for(int i=0;ichildCount();i++) + childList.append(item->child(i)); + } + + int ind = dlgTree->topLevelItem(0)->data(0, Qt::UserRole).toInt(); + QDomNode descr = SM.items[ind].doc.namedItem("pm").namedItem("rdf:Description"); + if(descr.isNull()) { + descr = SM.items[ind].doc.createElement("rdf:Description"); + SM.items[ind].doc.namedItem("pm").appendChild(descr); + } + descr.toElement().setAttribute("atc", packTitle); + + bool res = SM.exportSCORM(dirName, packName, packTitle, splash); + if(res) + exportDlg->setSCORMlabel("Успешно", "green"); + else + exportDlg->setSCORMlabel("Не выполнено", "red"); + +} + +// +// КОНТРОЛЬ ЗНАНИЙ +// +// РЕГИСТРАТОР ПОЛЕТНЫХ ДАННЫХ - ОПИСАНИЕ И РАБОТА +// +// +// РЕГИСТРАТОР ПОЛЕТНЫХ ДАННЫХ - пример +// +// + +// +// +// +// +// + +//
+// Показать +// NOT +// ИМВС +// NOT +// onmousemove="showTooltipImg(evt, 'inline.svg');" + + + +void EditorMainWindow::on_dmc_btn_Qual_clicked(bool checked) +{ + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + SM.item->isQualifyed = checked; + setIsModifyed(true); + updateTreeWidgetNames(); +} + +void EditorMainWindow::on_pmc_btn_Qual_clicked(bool checked) +{ + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + SM.item->isQualifyed = checked; + setIsModifyed(true); + updateTreeWidgetNames(); +} + + diff --git a/s1000d/Converter14_Source/editormainwindow.h b/s1000d/Converter14_Source/editormainwindow.h new file mode 100644 index 0000000..881c5cd --- /dev/null +++ b/s1000d/Converter14_Source/editormainwindow.h @@ -0,0 +1,206 @@ +#ifndef EDITORMAINWINDOW_H +#define EDITORMAINWINDOW_H + +#include +#include +#include +#include "s1000d_manager.h" +#include "ru_const.h" +#include "lyx.h" +#include "html.h" +#include "exportdialog.h" +#include "splashform.h" +#include +#include +#include + +QT_BEGIN_NAMESPACE +namespace Ui { class EditorMainWindow; } +QT_END_NAMESPACE + + +// figure 552 +class EditorMainWindow : public QMainWindow +{ + Q_OBJECT + +public: + QString version = "вер. 1.16"; + EditorMainWindow(QWidget *parent = nullptr); + ~EditorMainWindow(); + + bool isProjectOpened; + bool isProjectModifyed; + S1000D_Manager SM; + LyX lyx; + HTML html; + RU_Const ru_const; + struct { QString lastOpenedFile; } config; + QDialog *logDialog; QListWidget* logDialogList; + SplashForm* splash; + ExportDialog* exportDlg; + + int bugCnt=0; + QIcon iconFolder = QIcon(":new/Icons/folder.png"); + QIcon iconFolder_ex = QIcon(":new/Icons/folder_exclamation.png"); + QIcon iconDoc_head_blue = QIcon(":new/Icons/doc_head_blue.png"); + QIcon iconDoc_head_blue_ex = QIcon(":new/Icons/doc_head_blue_exclamation.png"); + QIcon iconSheep_up_arrow = QIcon(":/new/Icons/sheep_up_arrow.png"); + bool DBG=true; + bool allowCodePageToSetItems = true; + bool allowCodePageToCallOnChangeComboBox = true; + bool allowDMCodePageToSetItems = true; + bool allowDMCodePageCallOnChangeComboBox = false; + bool allowDMLearningPageToSetItems = true; + bool allowDMLearningPageCallOnChangeLists = true; + bool isClearing = false; + QStringList tmpStrList; + QList tmpIntList; + + void openLyXFile(QString fileName); + void Save(); + + bool event(QEvent*); + bool eventFilter(QObject* obj, QEvent* ev); + void setIsModifyed(bool flag); + void fillTreeWidgetWithItems(); + QList makeTreeWidgetFromItems(QTreeWidgetItem *parent, QList list); + void updateTreeWidgetNames(); + void updateTreeWidgetNamesRecurs(QTreeWidgetItem *node); + void fillItemsFromTreeWidget(int parentInd, QTreeWidgetItem *node); + void treeWidgetNormalizeDMsAfterDrop(QTreeWidgetItem *node); + QTreeWidgetItem* getTreeWidgetItemByItemIndexRecurs(int itemInd, QTreeWidgetItem *node); + QTreeWidgetItem* getTreeWidgetItemByItemIndex(int itemInd); + QString delYYY(QString st); + void fillLearningPageWithData(); + int getlcInteractionFromQuestRow(int row); + bool isCodingFilled(); + bool isCodingFilledRecurs(QTreeWidgetItem* treeitem); + + Q_SLOT void exportS1000D(); + Q_SLOT void exportSCORM(); + +private slots: + void on_actionOpenFolder_triggered(); + void on_treeWidget_itemSelectionChanged(); + void on_actionAddPM_triggered(); + void on_actionAddDM_triggered(); + void on_splitter_splitterMoved(int pos, int index); + void on_actionSwitchToCodingPage_triggered(); + void on_actionSwitchToDataPage_triggered(); + void on_actionSaveProject_triggered(); + + void pmc_btn_pmIssuerPressed(); + void pmc_btn_modelIdentCodePressed(); + void pmc_cb_pmNumABC_Changed(int ind); + void pmc_cb_pmNum_Changed(int ind); + void pmc_cb_pmVolume_Changed(int ind); + void codePagePM_TitleChanged(); + void codePagePM_EditChanged(QString newText); + void codePageDM_TitleChanged(); + void codePageDM_EditChanged(QString newText); + + void on_actionDeleteItem_triggered(); + void on_dmc_btnBox_IsLearningDM_clicked(QAbstractButton *button); + void on_dmc_cb_InfoSets_currentIndexChanged(int index); + void on_dml_btnBox_question_clicked(QAbstractButton *aButton); + void on_dml_btnBox_answer_clicked(QAbstractButton *aButton); + void on_dml_lw_question_currentRowChanged(int newRow); + void on_dml_lw_question_itemChanged(QListWidgetItem *item); + void on_dml_lw_answer_itemChanged(QListWidgetItem *item); + void on_actionLyXImport_triggered(); + void on_action_refreshFromLyX_triggered(); + void on_actionOpenInBrowser_triggered(); + void on_actionExit_triggered(); + + void on_S1000D_doc_dmc_linkActivated(const QString &link); + void on_label_33_linkActivated(const QString &link); + void on_action_regenHTML_triggered(); + void on_action_Export_triggered(); + void on_label_34_linkActivated(const QString &link); + void on_dmc_btn_Qual_clicked(bool checked); + void on_pmc_btn_Qual_clicked(bool checked); + + void treeWidgetDrop(); + + +private: + Ui::EditorMainWindow *ui; + void resizeEvent(QResizeEvent*); +}; +#endif // EDITORMAINWINDOW_H + +/* + + + © 2017 АО «Вертолеты России» + +АО «ВСК» + + +Наименование компании-разработчика + + + + +Ссылки на модули данных [с BRDP-S1-00102 по BRDPS1- +00104, BRDP-S1-00107] +Использование атрибутов ссылок на модули данных dmRef: +- applicRefId — не обязательный +- id — запрещен +- changeMark, changeType, reasonForUpdateRefIds — запрещены +- referredFragment — запрещен +- securityClassification, commercialClassification — запрещены +- authorityName, authorityDocument — запрещены +Использование дочерних элементов элемента dmRef: +- behavior — запрещен +- issueInfo — запрещен +- language — запрещен +- dmTitle — обязательный +- issueDate — запрещен + +Использование заголовков [BRDP-S1-00118, BRDP-S1-00120] +Контексты использования элемента title: +- элемент levelledPara — не обязательно, можно включать в уровнях с 6 по 8 +- элемент table — обязательно +- элемент multimedia — обязательно +- элемент proceduralStep — не обязательно, можно включать в уровнях с 6 по 8 + +Использование иллюстраций и активных участков/хотспотов +[BRDP-S1-00125, BRDP-S1-00132] +Использование атрибутов элемента hotspot: +- applicRefId — не обязательный +- id — обязательный +- changeMark, changeType, reasonForUpdateRefIds — запрещены +- applicationStructureIdent — обязательный (уникальный идентификатор в SVG) +- applicationStructureName — обязательный (например, обозначение выноски 1,2,3 или +обозначение) +- hotspotType — обязательный (callout — выноска, detail — контур детали/элемента) +- hotspotTitle — обязательный +- objectDescr — не обязательный +- objectCoordinates — запрещен +- visibility — не обязательный +- securityClassification, commercialClassification, caveat — запрещены + +BRDP-S1-00133] +9.1 Объявление мультимедийного объекта +Использование вложенных элементов multimedia: +- title — обязательный +Использование атрибутов элемента multimediaObject: +- fullscreen — запрещен +- multimediaObjectWidth — необязательный +- autoPlay — запрещен +- multimediaObjectHeight — необязательный +- multimediaType — обязательный +- runTimeDuration — запрещен +- showPluginControls — запрещен +Указание типа мультимедийного объекта выполняется с использованием атрибута +multimediaType и элемента parameter, смотри (Таблица 10). +Наличие одного элемента parameter обязательно, недопустимы 2 или более +элементов parameter c атрибутом parameterIdent=”contenttype”. +Таблица 10 Использование мультимедийных объектов. Идентификация типа объекта + + + */ diff --git a/s1000d/Converter14_Source/editormainwindow.ui b/s1000d/Converter14_Source/editormainwindow.ui new file mode 100644 index 0000000..73901e6 --- /dev/null +++ b/s1000d/Converter14_Source/editormainwindow.ui @@ -0,0 +1,2489 @@ + + + EditorMainWindow + + + + 0 + 0 + 1024 + 888 + + + + + 1024 + 400 + + + + Редактор АУК в формате S1000D + + + + :/new/Icons/doc_config.png:/new/Icons/doc_config.png + + + + + 1024 + 300 + + + + + + + + 0 + 0 + + + + ArrowCursor + + + false + + + Qt::Horizontal + + + + + 210 + 300 + + + + + 8 + + + + true + + + QAbstractItemView::NoEditTriggers + + + true + + + QAbstractItemView::InternalMove + + + Qt::MoveAction + + + + 32 + 32 + + + + true + + + 1 + + + + 1 + + + + + + + 0 + 0 + + + + + 700 + 0 + + + + + Segoe UI + 14 + + + + + + + QFrame::StyledPanel + + + 1 + + + + background-color: white; + + + + + + 9 + + + 9 + + + 9 + + + 9 + + + + + background-color: white; + + + + + + :/new/Icons/logo.png + + + Qt::AlignCenter + + + + + + + + Times New Roman + 14 + + + + background-color: white; + + + Для начала работы откройте файл сценария в формате LyX + + + Qt::AlignHCenter|Qt::AlignTop + + + + + + + + + + + 0 + 0 + + + + + Times New Roman + 14 + + + + false + + + background-color: white; + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 9 + + + 9 + + + 9 + + + 9 + + + + + + 0 + 30 + + + + + 30 + 16777215 + + + + + Times New Roman + 10 + + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Номер тома публикации + + + + + + + + Times New Roman + 12 + + + + Номер темы + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + + Times New Roman + 12 + + + + Код публикации + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 10 + + + + + + + + + Times New Roman + 12 + 75 + true + + + + QLabel { color : blue; } + + + Кодирование в соответствии с рекомендациями + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Идентификационный код модели + + + + + + + + Times New Roman + 12 + + + + Титул + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + Qt::Horizontal + + + + + + + + 80 + 16777215 + + + + + Times New Roman + 12 + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + + 0 + 30 + + + + + Times New Roman + 10 + + + + 20 + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + + Times New Roman + 12 + + + + Код компании-эмитента + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 10 + + + + + + + + + Times New Roman + 12 + + + + Номер тома публикации (цифры) + + + + + + + + 0 + 30 + + + + + 150 + 16777215 + + + + + Times New Roman + 10 + + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Номер темы + + + + + + + Qt::Vertical + + + + 20 + 2000 + + + + + + + + + 150 + 16777215 + + + + + Times New Roman + 12 + + + + + + + + + + + + Times New Roman + 12 + + + + Код компании-эмитента + + + + + + + + 0 + 30 + + + + + 30 + 16777215 + + + + + Times New Roman + 10 + + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + Times New Roman + 12 + + + + Идентификационный код модели + + + + + + + + 0 + 30 + + + + + Times New Roman + 10 + + + + 20 + + + + + + + <a href="pdf">Документация по стандарту S1000D. <br>(Кодирование публикаций - стр. 1889)</a> + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + Qt::TextBrowserInteraction + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 10 + + + + + + + + + 0 + 30 + + + + + Times New Roman + 10 + + + + + + + + + 0 + 60 + + + + + Times New Roman + 12 + + + + + + + + + 0 + 30 + + + + + 80 + 16777215 + + + + + Times New Roman + 10 + + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Код публикации (символы A-Z) + + + + + + + + 0 + 30 + + + + + 80 + 16777215 + + + + + Times New Roman + 10 + + + + Qt::AlignCenter + + + + + + + + + + 40 + 16777215 + + + + + + + + :/new/Icons/exclamation.png + :/new/Icons/accept.png:/new/Icons/exclamation.png + + + + 32 + 32 + + + + true + + + true + + + + + + + + Times New Roman + 12 + 75 + true + + + + QLabel { color : blue; } + + + Публикация + + + Qt::AlignHCenter|Qt::AlignTop + + + + + + + + + + + + + Times New Roman + 12 + + + + background-color: white; + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 9 + + + 9 + + + 9 + + + 9 + + + + + + Times New Roman + 12 + 75 + true + + + + QLabel { color : blue; } + + + Кодирование в соответствии с рекомендациями + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Блок/узел + + + + + + + + Times New Roman + 12 + + + + Под-подсистема + + + + + + + + 0 + 30 + + + + + 130 + 16777215 + + + + + Times New Roman + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Идентификационный код модели (MI)</span> идентифицирует модель или несколько моделей, принадлежащик к одному типу. От 2 до 14 буквенно-цифровых символов.</p></body></html> + + + + + + Qt::AlignCenter + + + + + + + true + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + Times New Roman + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Код обучения (LC)</span> используется для обозначения модулей данных по обучению. Состоит из 1 буквенного и 2 цифровых символов.</p><p>Первый символ может быть:</p><p>- &quot;H&quot; - для обозначения технологии деятельности человека</p><p>- &quot;T&quot; - для обозначения модулей проверки знаний</p><p>Подробный перечень кодов обучения и кодов обучающего события см. в Главах 4.3.9 и 4.3.10 <a href="https://s1000d.org/"><span style=" text-decoration: underline; color:#0000ff;">стандарта S1000D</span></a>.</p></body></html> + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + + 20 + 5 + + + + + + + + + 0 + 30 + + + + + Times New Roman + 12 + + + + 30 + + + + + + + + 0 + 2 + + + + + 0 + 0 + + + + + Times New Roman + 12 + true + + + + false + + + + + + true + + + + + + + + + + Qt::Vertical + + + + 20 + 10 + + + + + + + + + 0 + 30 + + + + + Times New Roman + 12 + true + + + + Это модуль данных обучения? + + + + + + + + 0 + 50 + + + + + 16777215 + 50 + + + + + Times New Roman + 12 + + + + + + + + + 8 + false + + + + color: gray; + + + <a href="pdf">Документация по стандарту S1000D. <br>(Кодирование модуля данных - стр. 1788)</a> + + + Qt::AutoText + + + false + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + true + + + false + + + Qt::TextBrowserInteraction + + + + + + + + Times New Roman + 12 + + + + + + + Информационный код + + + + + + + Qt::Horizontal + + + + + + + + Times New Roman + 12 + + + + Отличительный код системы + + + + + + + + Times New Roman + 12 + + + + Код демонтажа + + + + + + + Qt::Vertical + + + + 20 + 5 + + + + + + + + + Times New Roman + 12 + + + + Код расположения изделия + + + + + + + Qt::Vertical + + + + 20 + 10 + + + + + + + + false + + + + 130 + 16777215 + + + + + true + + + + QDialogButtonBox::No|QDialogButtonBox::Yes + + + true + + + + + + + Qt::Vertical + + + + 20 + 5 + + + + + + + + + Times New Roman + 12 + + + + Система + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Код стандартной системы нумерации (SNS)</span> обеспечивает классификацию информационного материала. От 6 до 9 буквенно-цифровых символов.</p><p><span style=" text-decoration: underline;">Включает:</span></p><p> - <span style=" font-weight:600;">Систему</span>. Код системы включает2-3 символа.</p><p> - <span style=" font-weight:600;">Подсистему / под-подсистему</span>. Описывает разделение системы на составные части. Содержат по 1 буквенно-цифровому символу. Стандарт S1000D определяет значения кодов только для подсистем. Коды для под-подсистем назначаются разработчиком в зависимости от сложности изделия.</p><p> -<span style=" font-weight:600;"> Блок / узел</span> кодируется двумя или четырьмя буквенно-цифровыми символами (начиная с 01 и 0001). Значения кодов назначаются разработчиком.</p></body></html> + + + Qt::AlignCenter + + + + + + + + 0 + 50 + + + + + 16777215 + 50 + + + + + Times New Roman + 12 + + + + + + + + true + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + Times New Roman + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Код типа модуля обучения (LEC)</span> определяет, какой тип схемы обучения используется в модуле данных по обучению. Состоит из 1 буквенного символа.</p><p><span style=" font-style:italic;">Бизнес-правилами АО &quot;Вертолеты России&quot; определено использование только кода &quot;E&quot; (learningAssessment).</span></p><p>Подробный перечень кодов обучения и кодов обучающего события см. в Главах 4.3.9 и 4.3.10 <a href="https://s1000d.org/"><span style=" text-decoration: underline; color:#0000ff;">стандарта S1000D</span></a>.</p></body></html> + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Идентификационный код модели + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + Times New Roman + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Вариант информационного кода (ICV)</span> используется для модулей данных, относящихся к одному изделию и виду информации. Кодируется одним символом (по умолчанию &quot;А&quot;).</p><p>Полное описание информационных кодов и вариантов см. в Главах 8.4 и 8.5 <a href="https://s1000d.org/"><span style=" text-decoration: underline; color:#0000ff;">стандарта S1000D</span></a>.</p></body></html> + + + Qt::AlignCenter + + + + + + + <a href="IC">Перечень информационных кодов + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + Qt::TextBrowserInteraction + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Код стандартной системы нумерации (SNS)</span> обеспечивает классификацию информационного материала. От 6 до 9 буквенно-цифровых символов.</p><p><span style=" text-decoration: underline;">Включает:</span></p><p> - <span style=" font-weight:600;">Систему</span>. Код системы включает2-3 символа.</p><p> - <span style=" font-weight:600;">Подсистему / под-подсистему</span>. Описывает разделение системы на составные части. Содержат по 1 буквенно-цифровому символу. Стандарт S1000D определяет значения кодов только для подсистем. Коды для под-подсистем назначаются разработчиком в зависимости от сложности изделия.</p><p> -<span style=" font-weight:600;"> Блок / узел</span> кодируется двумя или четырьмя буквенно-цифровыми символами (начиная с 01 и 0001). Значения кодов назначаются разработчиком.</p></body></html> + + + Qt::AlignCenter + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + Times New Roman + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Информационный код (IC)</span> используется для определения типа информации, содержащейся в модуле данных. </p><p>Полное описание информационных кодов и вариантов см. в Главах 8.4 и 8.5 <a href="https://s1000d.org/"><span style=" text-decoration: underline; color:#0000ff;">стандарта S1000D</span></a>.</p></body></html> + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Вариант кода демонтажа + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + Times New Roman + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Код демонтажа (DC)</span> определяет степень разбиения на составные части сборочных единиц, к которым применияется информация по техническому обслуживанию. Например, модули данных, относящиеся ко всему изделию или его системе, подсистеме, узлу, будут иметь код демонтажа &quot;00&quot;. Относящиеся к первой снятой сборке - &quot;01&quot;, ко второй - &quot;02&quot; и т.д. Код состоит из 2 буквенно-цифровых символов.</p></body></html> + + + -1 + + + Qt::AlignCenter + + + + + + + true + + + + Times New Roman + 12 + + + + Код типа модуля обучения + + + + + + + + Times New Roman + 12 + + + + Типовые информационные наборы + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Код стандартной системы нумерации (SNS)</span> обеспечивает классификацию информационного материала. От 6 до 9 буквенно-цифровых символов.</p><p><span style=" text-decoration: underline;">Включает:</span></p><p> - <span style=" font-weight:600;">Систему</span>. Код системы включает2-3 символа.</p><p> - <span style=" font-weight:600;">Подсистему / под-подсистему</span>. Описывает разделение системы на составные части. Содержат по 1 буквенно-цифровому символу. Стандарт S1000D определяет значения кодов только для подсистем. Коды для под-подсистем назначаются разработчиком в зависимости от сложности изделия.</p><p> -<span style=" font-weight:600;"> Блок / узел</span> кодируется двумя или четырьмя буквенно-цифровыми символами (начиная с 01 и 0001). Значения кодов назначаются разработчиком.</p></body></html> + + + Qt::AlignCenter + + + + + + + + 0 + 2 + + + + + Arial + 9 + + + + + + + + + Times New Roman + 12 + 75 + true + + + + QLabel { color : blue; } + + + Ошибки импорта файла LyX + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Техническое имя + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + + Times New Roman + 12 + + + + Подсистема + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Отличительный код системы (SDC)</span> назначается, когда возможен выпуск моделей разных видов, и указывает, для какой конфигурации применим модуль данных. От 1 до 4 буквенно-цифровых символов (как правило 1 буквенный символ).</p></body></html> + + + Qt::AlignCenter + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + + Times New Roman + 12 + + + + Информационное имя + + + + + + + true + + + + Times New Roman + 12 + + + + Код обучения + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + Times New Roman + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Вариант кода демонтажа (DCV)</span> обозначает альтернативные элементы оборудования или компоненты, незначительно отличающиеся по конструкции, но не настолько, чтобы изменить отличительный код системы. Состоит из 1, 2 или 3 символов. Предпочтительно должен начинаться с буквенного символа.</p></body></html> + + + Qt::AlignCenter + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + Times New Roman + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Код расположения изделия (ILC</span>) определяет место выполнения работ по обслуживанию компонента изделия, к которому отностится модуль данных. Состоит из 1 буквенного символа. </p><p><span style=" text-decoration: underline;">Примеры:</span></p><p> - &quot;A&quot; - на летательном аппарате, наземной или морской системе</p><p> - &quot;B&quot; - на основной сборочной единице, демонтированной с летательнго аппарата, наземной или морской системы</p><p> - &quot;C&quot; - на стенде</p><p> - &quot;D&quot; - на всех трех перечисленных (A, B, C)</p><p> - &quot;T&quot; - используется для обозначения модуля данных, который содержит информацию по обучению</p><p> - &quot;Z&quot; - общий код расположения изделия</p></body></html> + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Вариант информационного кода + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Код стандартной системы нумерации (SNS)</span> обеспечивает классификацию информационного материала. От 6 до 9 буквенно-цифровых символов.</p><p><span style=" text-decoration: underline;">Включает:</span></p><p> - <span style=" font-weight:600;">Систему</span>. Код системы включает2-3 символа.</p><p> - <span style=" font-weight:600;">Подсистему / под-подсистему</span>. Описывает разделение системы на составные части. Содержат по 1 буквенно-цифровому символу. Стандарт S1000D определяет значения кодов только для подсистем. Коды для под-подсистем назначаются разработчиком в зависимости от сложности изделия.</p><p> -<span style=" font-weight:600;"> Блок / узел</span> кодируется двумя или четырьмя буквенно-цифровыми символами (начиная с 01 и 0001). Значения кодов назначаются разработчиком.</p></body></html> + + + Qt::AlignCenter + + + + + + + + + + 40 + 16777215 + + + + false + + + background-color: rgb(255, 255, 255); + + + + + + + :/new/Icons/exclamation.png + :/new/Icons/accept.png:/new/Icons/exclamation.png + + + + 32 + 32 + + + + true + + + false + + + true + + + + + + + + Times New Roman + 12 + 75 + true + + + + color : blue; + + + Модуль данных + + + + Qt::AlignCenter + + + + + + + + + + + + + Times New Roman + 12 + + + + background-color: white; + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 9 + + + 9 + + + 9 + + + 9 + + + + + Qt::Vertical + + + QDialogButtonBox::No|QDialogButtonBox::Yes + + + + + + + + Times New Roman + 12 + + + + Qt::ScrollBarAlwaysOff + + + false + + + Qt::ElideNone + + + QAbstractItemView::ScrollPerPixel + + + false + + + QListView::Adjust + + + 5 + + + + 0 + 40 + + + + true + + + + + + + + 0 + 400 + + + + + Times New Roman + 12 + + + + Qt::ScrollBarAlwaysOff + + + false + + + Qt::ElideNone + + + 5 + + + + 0 + 40 + + + + true + + + true + + + + + + + + + + 0 + 0 + + + + + 40 + 16777211 + + + + + + + + + + + + Times New Roman + 12 + 75 + true + + + + QLabel { color : blue; } + + + Модуль данных - контроль знаний + + + + Qt::AlignCenter + + + + + + + + + Qt::Vertical + + + + 20 + 15 + + + + + + + + + Times New Roman + 10 + true + + + + QLabel { color : gray; } + + + Возможные типы вопросов: с одним или несколькими правильными ответами, которые помечаются галочками + + + + + + + + Times New Roman + 10 + true + + + + QLabel { color : gray; } + + + При необходимости создания многострочного вопроса, строки разделяются символом # + + + + + + + + Times New Roman + 12 + + + + Вопросы: + + + + + + + Qt::Vertical + + + + 20 + 100 + + + + + + + + Qt::Vertical + + + QDialogButtonBox::Apply|QDialogButtonBox::No|QDialogButtonBox::Reset|QDialogButtonBox::Yes + + + false + + + + + + + + Times New Roman + 12 + + + + Ответы: + + + + + + + Qt::Vertical + + + + 20 + 15 + + + + + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + Qt::LeftToRight + + + false + + + + 32 + 32 + + + + true + + + TopToolBarArea + + + false + + + + + + + + + + + + + + 0 + 0 + + + + + + + false + + + Qt::TopToolBarArea + + + + 32 + 32 + + + + Qt::ToolButtonIconOnly + + + true + + + TopToolBarArea + + + false + + + + + + + + + + + + :/new/Icons/suspend.png:/new/Icons/suspend.png + + + Выход + + + Выход + + + Esc + + + + + + :/new/Icons/folder_search.png:/new/Icons/folder_search.png + + + Открыть АУК + + + Открыть АУК + + + + + false + + + + :/new/Icons/folder+.png:/new/Icons/folder+.png + + + Добавить одноуровневую публикацию + + + Добавить одноуровневую публикацию + + + false + + + + + false + + + + :/new/Icons/doc_head_blue+.png:/new/Icons/doc_head_blue+.png + + + Добавить модуль + + + Добавить модуль + + + false + + + + + + :/new/Icons/save.png:/new/Icons/save.png + + + Сохранить + + + Сохранить + + + Ctrl+S + + + true + + + + + true + + + false + + + + :/new/Icons/doc_config.png:/new/Icons/doc_config.png + + + Кодирование + + + Кодирование + + + false + + + + + true + + + false + + + + :/new/Icons/docs_head_orange.png:/new/Icons/docs_head_orange.png + + + Данные + + + Данные + + + false + + + + + false + + + + :/new/Icons/item_del.png:/new/Icons/item_del.png + + + Удалить публикацию/модуль + + + Удалить публикацию/модуль + + + false + + + + + true + + + + :/new/Icons/lyx_import.png:/new/Icons/lyx_import.png + + + Импортировать данные из файла LyX + + + Импортировать данные из файла LyX + + + Ctrl+O + + + + + + :/new/Icons/refresh.png:/new/Icons/refresh.png + + + Обновить из LyX файла + + + Обновить из LyX файла + + + Ctrl+R + + + + + + :/new/Icons/chrome.png:/new/Icons/chrome.png + + + Открыть модуль в браузере + + + Открыть модуль в браузере + + + Ctrl+B + + + + + + :/new/Icons/export_logo.png:/new/Icons/export_logo.png + + + Сформировать пакеты выходных данных + + + Сформировать пакеты выходных данных + + + + + + :/new/Icons/chrome_refresh.png:/new/Icons/chrome_refresh.png + + + Повторно сгенерировать HTML + + + Повторно сгенерировать HTML + + + + + + + + + actionExit + triggered() + EditorMainWindow + close() + + + -1 + -1 + + + 399 + 299 + + + + + diff --git a/s1000d/Converter14_Source/exportdialog.cpp b/s1000d/Converter14_Source/exportdialog.cpp new file mode 100644 index 0000000..c48b7d6 --- /dev/null +++ b/s1000d/Converter14_Source/exportdialog.cpp @@ -0,0 +1,288 @@ +#include "exportdialog.h" +#include "ui_exportdialog.h" +#include +#include +#include +#include +#include + +ExportDialog::ExportDialog(QWidget *parent, S1000D_Manager* _SM) : + QDialog(parent), + ui(new Ui::ExportDialog) +{ + ui->setupUi(this); + ui->dlgTree->setFocus(); + SM = _SM; + flagCanSetCheck = true; +} + +ExportDialog::~ExportDialog() +{ + delete ui; +} + +void ExportDialog::on_btnCloseDlg_clicked() +{ + this->close(); +} + +void ExportDialog::closeEvent(QCloseEvent *event) +{ + QString packFNCheck = ""; + QStringList packFNList; + foreach(S1000D_Manager::PackageStruct pack, SM->packages) + if(packFNList.contains(pack.exportFileName)) + {packFNCheck = pack.exportFileName; break;} + else + packFNList.append(pack.exportFileName); + if (packFNCheck == "") { + SM->SavePackagesXML(); + event->accept(); + } else { + QMessageBox::warning(this, tr("Ошибка"), tr("Дублирование имен файлов пакетов конфигурации.\n"), + QMessageBox::Ok, QMessageBox::Ok); + event->ignore(); + } +} + +void ExportDialog::on_btnExportS1000D_clicked() +{ + Q_EMIT actionS1000Dexport(); +} + +void ExportDialog::on_btnExportSCORM_clicked() +{ + Q_EMIT actionSCORMexport(); +} + +void ExportDialog::on_dlgTree_itemChanged(QTreeWidgetItem *item, int) +{ + QString nm = item->text(0); + if(item->checkState(0) == Qt::Checked) { + if(item->parent() != nullptr) + item->parent()->setCheckState(0, Qt::Checked); + } else { + for(int i=0;ichildCount();i++) + item->child(i)->setCheckState(0, Qt::Unchecked); + } + + if(ui->cbPackageList->currentIndex() < 0) return; + if(ui->cbPackageList->currentText() != ui->cbPackageList->itemText(ui->cbPackageList->currentIndex())) + return; + if(!flagCanSetCheck) return; + + if(item->checkState(0) == Qt::Checked) { + if(!SM->items[item->data(0, Qt::UserRole).toInt()].inPackages.contains(SM->packages[ui->cbPackageList->currentIndex()].cfgName)) + SM->items[item->data(0, Qt::UserRole).toInt()].inPackages.append(SM->packages[ui->cbPackageList->currentIndex()].cfgName); + } else { + if(SM->items[item->data(0, Qt::UserRole).toInt()].inPackages.contains(SM->packages[ui->cbPackageList->currentIndex()].cfgName)) + SM->items[item->data(0, Qt::UserRole).toInt()].inPackages.removeOne(SM->packages[ui->cbPackageList->currentIndex()].cfgName); + } +} + +void ExportDialog::fillTree(QTreeWidget* tree) { + ui->dlgTree->clear(); + + flagCanSetCheck = false; + for(int i=0;itopLevelItemCount();i++) { + QTreeWidgetItem* newItem = new QTreeWidgetItem(); + ui->dlgTree->addTopLevelItem(newItem); + fillTreeItem(tree->topLevelItem(i), newItem); + } + flagCanSetCheck = true; + ui->dlgTree->expandAll(); + ui->cbPackageList->setCurrentIndex(0); +} + +void ExportDialog::fillTreeItem(QTreeWidgetItem* treeItem, QTreeWidgetItem* dlgItem) { + QString txt = treeItem->text(0); txt.replace("\n", " "); + dlgItem->setText(0, txt); + dlgItem->setData(0, Qt::UserRole, treeItem->data(0, Qt::UserRole)); + dlgItem->setFlags(dlgItem->flags() | Qt::ItemIsUserCheckable); + dlgItem->setCheckState(0, Qt::Checked); + dlgItem->setIcon(0, treeItem->icon(0)); + + for(int i=0;ichildCount();i++) { + QTreeWidgetItem* newItem = new QTreeWidgetItem(); + dlgItem->addChild(newItem); + fillTreeItem(treeItem->child(i), newItem); + } +} + +QTreeWidget* ExportDialog::getDlgTreeWidget() { + return ui->dlgTree; +} + +void ExportDialog::setPackName(QString packname) { + ui->lePackName->setText(packname); +} + +QString ExportDialog::getPackName() { + return ui->lePackName->text(); +} + +void ExportDialog::setPackDir(QString packdir) { + ui->lePackDir->setText(packdir); +} + +QString ExportDialog::getPackDir() { + return ui->lePackDir->text(); +} + +void ExportDialog::setPackTitle(QString packtitle) { + ui->lePackTitle->setText(packtitle); +} + +QString ExportDialog::getPackTitle() { + return ui->lePackTitle->text(); +} +void ExportDialog::on_btnChooseDir_clicked() +{ + QString dir = QFileDialog::getExistingDirectory(this, tr("Выберите папку размещения пакета"), getPackDir()); + if(dir != "") + ui->lePackDir->setText(dir); +} + +void ExportDialog::setS1000Dlabel(QString text, QString color) { + ui->lblS1000D_result->setText(text); + ui->lblS1000D_result->setStyleSheet("QLabel { color: "+color+"; }"); + QTimer::singleShot(3000, this, SLOT(hidelabels())); +} + +void ExportDialog::setSCORMlabel(QString text, QString color) { + ui->lblSCORM_result->setText(text); + ui->lblSCORM_result->setStyleSheet("QLabel { color: "+color+"; }"); + QTimer::singleShot(3000, this, SLOT(hidelabels())); +} + +void ExportDialog::hidelabels() { + ui->lblS1000D_result->setText(""); + ui->lblSCORM_result->setText(""); +} + +void ExportDialog::on_cbPackageList_currentIndexChanged(int index) +{ + if(ignore_cbPackageList_events) return; + + QList treeList; + for(int i=0;idlgTree->topLevelItemCount();i++) + treeList.append(ui->dlgTree->topLevelItem(i)); + QTreeWidgetItem* treeItem; + while(!treeList.isEmpty()) { + treeItem = treeList.takeFirst(); + flagCanSetCheck = false; + if(index >= 0) { + if(SM->items[treeItem->data(0, Qt::UserRole).toInt()].inPackages.contains(SM->packages[index].cfgName, Qt::CaseInsensitive)) + treeItem->setCheckState(0, Qt::Checked); + else + treeItem->setCheckState(0, Qt::Unchecked); + } + else + treeItem->setCheckState(0, Qt::Checked); + flagCanSetCheck = true; + + for(int i=0;ichildCount();i++) + treeList.append(treeItem->child(i)); + } + curPackIndex = index; + ignore_cbPackageList_events = true; + if(index >= 0) { + ui->lePackTitle->setText(SM->packages[index].title); + ui->lePackName->setText(SM->packages[index].exportFileName); + } + else { + //ui->lePackTitle->setText(); + //ui->lePackName->setText(); + } + ignore_cbPackageList_events = false; +} + +void ExportDialog::setPackageListIndex(int ind) { + on_cbPackageList_currentIndexChanged(ind); +} + +void ExportDialog::on_cbPackageList_currentTextChanged(QString newPackName) +{ + if(ignore_cbPackageList_events) return; + ui->btnPackageAdd->setEnabled(true); +} + +void ExportDialog::fillPackageList() +{ + ignore_cbPackageList_events = true; + ui->cbPackageList->clear(); + foreach(S1000D_Manager::PackageStruct pack, SM->packages) + ui->cbPackageList->addItem(pack.cfgName); + ignore_cbPackageList_events = false; +} + +void ExportDialog::on_btnPackageAdd_clicked() +{ + foreach(S1000D_Manager::PackageStruct pack, SM->packages) { + if(pack.cfgName == ui->cbPackageList->currentText()) + { + QMessageBox::warning(this, tr("Ошибка"), tr("Дублирование имен пакетов конфигурации.\n"), + QMessageBox::Ok, QMessageBox::Ok); + return; + } + } + S1000D_Manager::PackageStruct pack; + pack.cfgName = ui->cbPackageList->currentText(); + pack.title = ui->lePackTitle->text(); pack.exportFileName = ui->lePackName->text(); + SM->packages.append(pack); + + QList treeList; + for(int i=0;idlgTree->topLevelItemCount();i++) + treeList.append(ui->dlgTree->topLevelItem(i)); + QTreeWidgetItem* treeItem; + while(!treeList.isEmpty()) { + treeItem = treeList.takeFirst(); + if(treeItem->checkState(0) == Qt::Checked) + if(!SM->items[treeItem->data(0, Qt::UserRole).toInt()].inPackages.contains(pack.cfgName)) + SM->items[treeItem->data(0, Qt::UserRole).toInt()].inPackages.append(pack.cfgName); + + for(int i=0;ichildCount();i++) + treeList.append(treeItem->child(i)); + } + + fillPackageList(); ui->cbPackageList->setCurrentIndex(SM->packages.count()-1); + ui->btnPackageAdd->setEnabled(false); + ui->lePackName->setFocus(); +} + +void ExportDialog::on_btnPackageDel_clicked() +{ + if(ui->cbPackageList->currentIndex() < 0) return; + QList treeList; + for(int i=0;idlgTree->topLevelItemCount();i++) + treeList.append(ui->dlgTree->topLevelItem(i)); + QTreeWidgetItem* treeItem; + while(!treeList.isEmpty()) { + treeItem = treeList.takeFirst(); + + if(SM->items[treeItem->data(0, Qt::UserRole).toInt()].inPackages.contains(SM->packages[ui->cbPackageList->currentIndex()].cfgName, Qt::CaseInsensitive)) + SM->items[treeItem->data(0, Qt::UserRole).toInt()].inPackages.removeOne(SM->packages[ui->cbPackageList->currentIndex()].cfgName); + + for(int i=0;ichildCount();i++) + treeList.append(treeItem->child(i)); + } + SM->packages.removeAt(ui->cbPackageList->currentIndex()); + ui->cbPackageList->removeItem(ui->cbPackageList->currentIndex()); +} + +void ExportDialog::on_cbPackageList_editTextChanged(const QString &arg1) +{ + ui->btnPackageAdd->setEnabled(true); +} + +void ExportDialog::on_lePackName_textEdited(const QString &arg1) +{ + if(curPackIndex == -1) return; + SM->packages[curPackIndex].exportFileName = arg1; +} + +void ExportDialog::on_lePackTitle_textEdited(const QString &arg1) +{ + if(curPackIndex == -1) return; + SM->packages[curPackIndex].title = arg1; +} diff --git a/s1000d/Converter14_Source/exportdialog.h b/s1000d/Converter14_Source/exportdialog.h new file mode 100644 index 0000000..9c5bafb --- /dev/null +++ b/s1000d/Converter14_Source/exportdialog.h @@ -0,0 +1,65 @@ +#ifndef EXPORTDIALOG_H +#define EXPORTDIALOG_H + +#include +#include +#include "s1000d_manager.h" + +namespace Ui { +class ExportDialog; +} + +class ExportDialog : public QDialog +{ + Q_OBJECT + +public: + explicit ExportDialog(QWidget *parent = nullptr, S1000D_Manager* _SM = nullptr); + ~ExportDialog(); + void setPackName(QString packname); + QString getPackName(); + void setPackDir(QString packdir); + QString getPackDir(); + void setPackTitle(QString packtitle); + QString getPackTitle(); + void fillTree(QTreeWidget* tree); + void fillTreeItem(QTreeWidgetItem* treeItem, QTreeWidgetItem* dlgItem); + QTreeWidget* getDlgTreeWidget(); + void setS1000Dlabel(QString text, QString color); + void setSCORMlabel(QString text, QString color); + void fillPackageList(); + void setPackageListIndex(int ind); + + bool flagCanSetCheck; + bool ignore_cbPackageList_events=false; + int curPackIndex = -1; + +private slots: + void on_btnCloseDlg_clicked(); + void on_btnExportS1000D_clicked(); + void on_btnExportSCORM_clicked(); + void on_dlgTree_itemChanged(QTreeWidgetItem *item, int column); + + void on_btnChooseDir_clicked(); + + void on_cbPackageList_currentIndexChanged(int index); + void on_cbPackageList_currentTextChanged(QString newPackName); + + void hidelabels(); + void on_btnPackageAdd_clicked(); + void on_btnPackageDel_clicked(); + void closeEvent(QCloseEvent *event); + void on_cbPackageList_editTextChanged(const QString &arg1); + void on_lePackName_textEdited(const QString &arg1); + void on_lePackTitle_textEdited(const QString &arg1); + +private: + Ui::ExportDialog *ui; + S1000D_Manager* SM; + +Q_SIGNALS: + void actionS1000Dexport(); + void actionSCORMexport(); +}; + +#endif // EXPORTDIALOG_H diff --git a/s1000d/Converter14_Source/exportdialog.ui b/s1000d/Converter14_Source/exportdialog.ui new file mode 100644 index 0000000..cb003b6 --- /dev/null +++ b/s1000d/Converter14_Source/exportdialog.ui @@ -0,0 +1,605 @@ + + + ExportDialog + + + Qt::ApplicationModal + + + + 0 + 0 + 958 + 617 + + + + Конвертер АУК - экспорт + + + + :/new/Icons/doc_config.ico:/new/Icons/doc_config.ico + + + background: white + + + true + + + + 0 + + + + + + Segoe UI + 9 + + + + false + + + true + + + QAbstractItemView::NoSelection + + + + 15 + 15 + + + + true + + + true + + + true + + + true + + + + 1 + + + + + + + + + Times New Roman + 12 + + + + Имя конфигурации пакета: + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 30 + 20 + + + + + + + + + + + + + Times New Roman + 10 + + + + background: rgb(230,230,230); + + + Выбрать... + + + + + + + + Times New Roman + 12 + + + + Расположение: + + + + + + + + Times New Roman + 12 + + + + Имя файла: + + + + + + + + 0 + 25 + + + + + Times New Roman + 12 + 50 + false + + + + color: blue; + + + 250 + + + + + + + + 0 + 25 + + + + + Times New Roman + 12 + + + + + + + + + + + + Times New Roman + 12 + + + + Титул АУК: + + + + + + + + 0 + 25 + + + + + Times New Roman + 12 + + + + color: blue; + + + + + + + + + + + + 0 + 0 + + + + + 490 + 25 + + + + + 0 + 0 + + + + + Times New Roman + 12 + + + + color: blue; + + + true + + + + + + + + 16777215 + 20 + + + + + Times New Roman + 14 + 75 + true + + + + color: blue + + + Формирование и конфигурирование пакетов + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + + + + + + 110 + 110 + + + + + Times New Roman + 12 + + + + false + + + background: rgb(230,230,230); + + + + + + + :/new/Icons/S1000D_logo.png:/new/Icons/S1000D_logo.png + + + + 100 + 100 + + + + true + + + false + + + + + + + + Times New Roman + 10 + + + + + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + + 110 + 110 + + + + false + + + background: rgb(230,230,230); + + + + + + + :/new/Icons/scorm_logo.png:/new/Icons/scorm_logo.png + + + + 100 + 100 + + + + true + + + false + + + + + + + + Times New Roman + 10 + + + + + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 40 + + + + + + + + + 0 + 25 + + + + + 16777215 + 20 + + + + Qt::LeftToRight + + + false + + + background: rgb(230,230,230); + + + Закрыть + + + + :/new/Icons/suspend.png:/new/Icons/suspend.png + + + false + + + + + + + + + + + + 0 + 0 + + + + + 113 + 25 + + + + background: rgb(230,230,230); + + + Удалить + + + + :/new/Icons/delete.png:/new/Icons/delete.png + + + + + + + + Times New Roman + 12 + + + + Состав пакета: + + + + + + + Qt::Horizontal + + + + 30 + 20 + + + + + + + + + 0 + 0 + + + + + 113 + 25 + + + + background: rgb(230,230,230); + + + Создать + + + + :/new/Icons/add.png:/new/Icons/add.png + + + + + + + + + + diff --git a/s1000d/Converter14_Source/html.cpp b/s1000d/Converter14_Source/html.cpp new file mode 100644 index 0000000..1086855 --- /dev/null +++ b/s1000d/Converter14_Source/html.cpp @@ -0,0 +1,1094 @@ +#include "html.h" +#include +#include +#include +#include +#include +#include +#include + +HTML::HTML() +{ + +} + +void HTML::Generate(S1000D_Manager* _SM, bool _toScorm, SplashForm* _splash) { + SM = _SM; toScorm = _toScorm; + ru_const = &SM->ru_const; splash = _splash; + svgUI = 0; paraIdent = true; paraTextAlign = ""; + iframeDivCnt = 0; + + if(!SM->isConsole) + {splash->Reset(); splash->SetTitle("Генерация HTML...");} + QStringList htmlHead, htmlTail; + QFile blankFile(":new/BlankXML/blank.html"); + if (!blankFile.open(QFile::ReadOnly | QFile::Text)) return; + QString s; + bool isHead = true; + while(!blankFile.atEnd()) { + s = QString::fromLocal8Bit(blankFile.readLine()).replace("\n",""); + if(isHead) htmlHead.append(s); else htmlTail.append(s); + if(s.contains("
")) isHead = false; + } + blankFile.close(); + + acrList.clear(); + for(int i=0;iitems.count();i++) + if(SM->items[i].moduleType == mtDM) { + SM->setCurItem(i); + + //qDebug() << "html: " << SM->item->fileName; + + if(SM->item->schemeType == stLEARNING) continue; + + idList.clear(); + ID_pars = ID_tabs = ID_figs = ID_mmos = 0; + + SM->item->html.clear(); + foreach(QString s, htmlHead) { +// if(!toScorm && s == "") { +// add(1, ""); +// } + add(0, s); + } + add(6, "
"); + add(6, "
"); + add(6, "
"); + add(6, "
"); + + add(6, "
"); + add(6, "
"); + add(6, "
"); + add(6, "
"); + QString itemTechName = SM->getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); + QString itemInfoName = SM->getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName"); + itemTechName.replace("'", "\""); itemInfoName.replace("'", "\""); + //if(!toScorm) add(6, "
"); + add(6, "

"+itemTechName+"

"); + if(itemInfoName != "") + add(6, "

"+itemInfoName+"

"); + //if(!toScorm) add(6, "
"); + add(6, "
"); + add(6, "
"); + + QDomNode rootNode; + if(SM->item->schemeType == stDESCRIPT) + rootNode = SM->findElement("content.description"); + if(SM->item->schemeType == stCREW) + rootNode = SM->findElement("content.crew.descrCrew"); + if(SM->item->schemeType == stLEARNING) + rootNode = SM->findElement("content.learning.learningAssessment"); + + for(int j=0;j"); + //if(toScorm) { + add(6, "
"); + add(6, " "); + add(6, "
"); + //} + + add(6, "
"); + add(6, "
"); + add(6, "
"); + + if(true) { //toScorm + add(6, "
"); + + add(6, "
"); // изображения + add(6, " "); + add(6, "
"); + + add(6, "
"); // мультимедиа + add(6, " "); + add(6, "
"); + + add(6, "
"); // таблицы + add(6, " "); + add(6, "
"); + + add(6, "
"); + add(6, " "); + add(6, "
"); + add(6, "
"); + add(6, " "); + add(6, "
"); + } + + // переименовываем временные тексты ссылок idTitle_ + for(int i=htmlHead.count();iitem->html.count();i++) + while(1) { + int _b = SM->item->html[i].indexOf("idTitle_"); + if(_b == -1) break; + int _e = SM->item->html[i].indexOf("<",_b+8); + QString id = SM->item->html[i].mid(_b+8, _e-(_b+8)); + QString newTitle = id; + for(int j=0;jfigureTitle)) + newTitle = ru_const->figureShortTitle+" "+idList[j].title.mid(ru_const->figureTitle.length()+1, idList[j].title.indexOf(":")-(ru_const->figureTitle.length()+1)); + if(idList[j].title.startsWith(ru_const->tableTitle)) + newTitle = ru_const->tableShortTitle+" "+idList[j].title.mid(ru_const->tableTitle.length()+1, idList[j].title.indexOf(":")-(ru_const->tableTitle.length()+1)); + //qDebug() << id << "->" << newTitle; + break; + } else { + if(!SM->isConsole) qDebug() << "Неизвестная структура заголовка в idList" << id << idList[j].title; + } + } + } + if(newTitle == id) + if(!SM->isConsole) + qDebug() << "[html: "+QString::number(i)+"] Ссылка не переименована: " + id + " ("+SM->item->fileName+")"; + SM->item->html[i].replace(SM->item->html[i].mid(_b, _e-_b), newTitle); + } + + //for(int j=0;jitem->html.count();j++) + // if(!SM->item->html[j].contains("\n")) SM->item->html[j] += "\n"; + + foreach(QString s, htmlTail) + add(0, s); + } //mtDM +} + +QString HTML::domElementToXML(const QDomElement& elem, int lvl) +{ + QString head = spc(lvl)+"<"+elem.tagName(); + QDomNamedNodeMap attrs = elem.attributes(); + for(int i = 0; i\n"; + QString mid = ""; + if(elem.childNodes().count() != 0) { + if(elem.childNodes().count() == 1 && elem.childNodes().at(0).isText()) { + head += ">"; + mid += elem.childNodes().at(0).toText().nodeValue(); + tail = "\n"; + } + else { + head += ">\n"; + for(int i=0;iisConsole) splash->Step(); + QString name = node.nodeName(); + + if(name != "acronym") footnoteID = ""; + + if(name == "#text") { + cat(node.nodeValue().replace("<","<").replace(">",">")); + return; + } + + if(name == "para") { + QString ident = ""; + QString textStyle = ""; + if(paraTextAlign != "") + textStyle = " text-align: "+paraTextAlign+";"; + if(node.childNodes().count() > 0) + { + if(node.childNodes().at(0).nodeName() == "multimedia") + ident = " style=\"text-indent: 0px;"+textStyle+"\""; + if(node.childNodes().at(0).nodeName() == "figure") + ident = " style=\"text-indent: 0px;"+textStyle+"\""; + if(!paraIdent) + ident = " style=\"text-indent: 0px;"+textStyle+"\""; + } + if(ident == "" && textStyle != "") + ident = " style=\""+textStyle+"\""; + add(lvl, "
"); + for(int j=0;j"); + cat("
"); + return; + } + + if(name == "levelledPara") { + QString id = "ID_par"+QString::number(ID_pars++); + add(lvl, "

"); + QString title = ""; + if(node.childNodes().at(0).nodeName() == "title") + title = node.childNodes().at(0).childNodes().at(0).nodeValue(); + if(title != "") { + labelStruct lbl; lbl.id = id; lbl.title = title; lbl.type = "par"; + idList.append(lbl); + } + cat(title); + cat("

"); + for(int j=0;j"); + for(int j=0;j"); + return; + } + + if(name == "internalRef") { + QString id = "", target = ""; + for(int j=0;j"); + cat("idTitle_"+id); //TODO + cat(""); + return; + } + + if(name == "dmSegmentRef") { + QString tPath = node.toElement().attribute("targetPath"); + //int _b = tPath.indexOf("'"); + //QString id = tPath.mid(_b+1, tPath.indexOf("'", _b+1)-(_b+1)); + QString refFileCode = SM->dmCodeIdentString(node.toElement().namedItem("dmRefIdent").namedItem("dmCode")); + QString refTechName = node.toElement().namedItem("dmRefAddressItems").namedItem("dmTitle").namedItem("techName").childNodes().at(0).toText().data(); + QString refInfoName = node.toElement().namedItem("dmRefAddressItems").namedItem("dmTitle").namedItem("infoName").childNodes().at(0).toText().data(); + int refItemInd = -1; + int tmpCurItem = SM->itemIndex; + for(int i=0;iitems.count();i++) + if(SM->items[i].moduleType == mtDM){ + SM->setCurItem(i); + QString itemFileCode = SM->dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + QString itemTechName = SM->item->doc.namedItem("dmodule").namedItem("identAndStatusSection").namedItem("dmAddress").namedItem("dmAddressItems").namedItem("dmTitle").namedItem("techName").childNodes().at(0).toText().data(); + QString itemInfoName = SM->item->doc.namedItem("dmodule").namedItem("identAndStatusSection").namedItem("dmAddress").namedItem("dmAddressItems").namedItem("dmTitle").namedItem("infoName").childNodes().at(0).toText().data(); + if(refFileCode == itemFileCode && refTechName == itemTechName && refInfoName == itemInfoName) + { + refItemInd = i; break; + } + } + + if(refItemInd == -1) { + qDebug() << "HTML dmSegmentRef: ref item not found ("+refTechName+" "+refFileCode+")"; + return; + } + + QString labelTitle = ""; + QDomNode labelNode = SM->getNodeFromXPath(tPath); //, true + + if(labelNode.isNull()) { + qDebug() << "HTML dmSegmentRef: labelNode.isNull "; + qDebug() << " " << tPath; + qDebug() << " " << SM->item->fileName; + return; + } + else { + //qDebug() << "HTML dmSegmentRef: OK - " << tPath; + } + if(labelNode.toElement().namedItem("title").isNull()) { + qDebug() << "HTML dmSegmentRef: labelNode.title.isNull"; + //return; + } else { + labelTitle = labelNode.toElement().namedItem("title").toElement().firstChild().toText().data(); + } + + QString id = labelNode.attributes().namedItem("id").nodeValue(); + id = id.replace(".", "_").replace(":", "_").replace("-", "_").replace(" ", "_"); //normID + QString htmlFileName = QString(SM->item->fileName).replace(".xml", ".html"); + + SM->setCurItem(tmpCurItem); + //*********** + //qDebug() << ""; + + cat(""); + cat(refTechName + " / " + labelTitle); + cat(""); + + return; + } + + if(name == "randomList") { + bool oldParaIdent = paraIdent; paraIdent = false; + if(node.firstChild().nodeName() == "title") { + add(lvl, "
"); + for(int j=0;j"); + } + add(lvl, ""); + add(lvl, " "); + for(int j=0;j"); + if(node.childNodes().at(j).childNodes().count() > 0) + if(node.childNodes().at(j).childNodes().at(0).childNodes().count() > 0) + { + QString child0name = node.childNodes().at(j).childNodes().at(0).childNodes().at(0).nodeName(); + if(child0name == "randomList" || child0name == "sequentialList") + add(lvl, " "); + else + add(lvl, " "); + } + add(lvl, " "); + } + add(lvl, " "); + add(lvl, "
-"); + for(int k=0;k"); + add(lvl, "
"); + //if(oldParaIdent) cat("
"); + + paraIdent = oldParaIdent; + return; + } + + if(name == "sequentialList") { + bool oldParaIdent = paraIdent; paraIdent = false; + if(node.firstChild().nodeName() == "title") { + add(lvl, "
"); + for(int j=0;j"); + } + add(lvl, ""); + add(lvl, " "); + int cnt = 0; + for(int j=0;j"); + if(node.childNodes().at(j).childNodes().count() > 0) + if(node.childNodes().at(j).childNodes().at(0).childNodes().count() > 0) + { + QString child0name = node.childNodes().at(j).childNodes().at(0).childNodes().at(0).nodeName(); + if(child0name == "randomList" || child0name == "sequentialList") + add(lvl, " "); + else + add(lvl, " "); + } + add(lvl, " "); + } + add(lvl, " "); + add(lvl, "
"+QString::number(++cnt)+"."); + for(int k=0;k"); + add(lvl, "
"); + //if(oldParaIdent) cat("
"); + paraIdent = oldParaIdent; + return; + } + + if(name == "figure") { + QString id = node.attributes().namedItem("id").nodeValue(); + QString title = node.namedItem("title").firstChild().nodeValue(); + QString infoEntityIdent = node.namedItem("graphic").attributes().namedItem("infoEntityIdent").nodeValue(); + + if(infoEntityIdent == "") { + add(lvl, "Ошибка чтения изображения
"); + return; + } + if(id == "") id = "ID_fig"+QString::number(ID_figs); + ID_figs++; + id = id.replace(".", "_").replace(":", "_").replace("-", "_").replace(" ", "_"); //normID + labelStruct lbl; lbl.id = id; lbl.title = title; lbl.type = "fig"; + idList.append(lbl); + + QFileInfo svgInfo(SM->projectPath+"/"+infoEntityIdent); + QString svgfile = infoEntityIdent.section("/",-1,-1); + //QString svgdir = infoEntityIdent.section("/",0,-2); + //qDebug() << SM->projectPath+"/"+infoEntityIdent << svgfile.toLower().split(".").last(); + + QString txtfile = svgInfo.absolutePath()+"/"+svgfile.left(svgfile.length()-3)+"txt"; + QFileInfo txtInfo(txtfile); + + if(svgInfo.exists() && svgfile.toLower().split(".").last() == "svg" && txtInfo.exists()) { // прописываем хотспоты в svg + QDomDocument svg; + if(!SM->isConsole) splash->SetTitle("Обработка SVG файла: "+infoEntityIdent); + QApplication::processEvents(); + + //qDebug() << "-- Processing SVG "+infoEntityIdent; + //QElapsedTimer timer; timer.start(); + + QFile txtFile(txtfile); + if (!txtFile.open(QFile::ReadOnly)) { // | QFile::Text + qDebug() << "html: Ошибка открытия файла "+svgInfo.absolutePath()+"/"+svgfile.left(svgfile.length()-3)+"txt"; + return; + } + QByteArray data = txtFile.readAll(); + for(int i=0;i < data.length()-2;i++) + { + if(data[i] == (char)10 && (data[i+1] != (char)13)) data[i] = 13; + } + QStringList txtLines = QString(QString(data).toUtf8()).replace("\r\r","\r").split("\r"); // + //qDebug() << txtLines; + + txtFile.close(); + + QFile svgFile(SM->projectPath+"/"+infoEntityIdent); + if (!svgFile.open(QFile::ReadOnly | QFile::Text)){ + qDebug() << "html: Ошибка открытия файла "+SM->projectPath+"/"+infoEntityIdent; + return; + } + svg.setContent(svgFile.readAll()); + svgFile.close(); + + QDomNode svgNode = svg.namedItem("svg"); + if(svgNode.isNull()) { + qDebug() << "html: Ошибка в svg-файле "+SM->projectPath+"/"+infoEntityIdent; + return; + } + svgNode.attributes().namedItem("width").toAttr().setNodeValue("100%"); + svgNode.attributes().removeNamedItem("height"); + + QStringList txtNums, txtTitles; + foreach(QString s, txtLines) + if(s.indexOf(" - ")) + { + txtNums.append(s.mid(0, s.indexOf(" - "))); + txtTitles.append(s.mid(s.indexOf(" - ")+3)); + } + + //qDebug() << " searchSVGNodeForText: " << (int)timer.elapsed()/1000; + + for(int j=0;jisConsole) splash->Step(); + QDomNode g = svgNode.childNodes().at(j); + if(g.nodeName() != "g") continue; + if(!SM->isConsole) splash->Step(); + QString title = searchSVGNodeForText(g); + if(title == "") continue; + int ind = txtNums.indexOf(title); + if(ind == -1) continue; + QString inlinePic = SM->projectPath+"/"+txtTitles[ind]; //QFileInfo(SM->projectPath+"/"+infoEntityIdent).path() + "/"+txtTitles[ind]; + + if(QFile::exists(inlinePic)) { + g.toElement().setAttribute("style", "cursor: pointer;"); + g.toElement().setAttribute("onmouseout", "hideTooltipImg();"); + g.toElement().setAttribute("onmousemove", "showTooltipImg(evt, '"+txtTitles[ind]+"');"); + g.toElement().setAttribute("onclick", "viewer.show('"+txtTitles[ind]+"');"); + } else { + g.toElement().setAttribute("style", "cursor: pointer;"); + g.toElement().setAttribute("onmouseout", "hideTooltip();"); + g.toElement().setAttribute("onmousemove", "showTooltip(evt, '"+txtTitles[ind]+"');"); + } + } + + //qDebug() << " svg.namedItem(svg).save: " << (int)timer.elapsed()/1000; + + QString svgNodeText; + svgNodeText = domElementToXML(svg.namedItem("svg").toElement(), 0); //QTextStream outsvg(&svgNodeText); + //outsvg << svg.namedItem("svg"); + //svg.namedItem("svg").save(outsvg, 2); + + //qDebug() << " svgNodeText.indexOf(id=): " << (int)timer.elapsed()/1000; + + QString svgIDprefix; svgIDprefix.fill('0', 3-QString::number(svgUI).length()); + svgIDprefix = "id"+svgIDprefix+QString::number(svgUI++)+"_"; + int j, i=0; + QString _id; + while(1) { + i = svgNodeText.indexOf("id=\"", i); + if(i == -1) break; + j = svgNodeText.indexOf("\"", i+4); + _id = svgNodeText.mid(i+4, j-i-4); + for(int k=svgIDprefix.length()-1; k>=0; k--) + svgNodeText.insert(i+4, svgIDprefix[k]); + svgNodeText.replace("#"+_id, "#"+svgIDprefix+_id); + i = j+1; + } + + //qDebug() << " final saving to mem: " << (int)timer.elapsed()/1000; + + add(lvl, "
"); + add(0, "\n\n"); + add(0, svgNodeText); + //foreach (QString s, svgNodeText.split("\n")) + // add(lvl, s); + add(0, "\n"); + + //qDebug() << "-- End of SVG "+infoEntityIdent+": " << (int)timer.elapsed()/1000; + } else { + QString imgfilename = QString(infoEntityIdent); + add(lvl, " \"Показать\""); + //if(toScorm) { + // add(lvl, " \"Показать\""); + // add(lvl, "
"); + // add(lvl, " \"Показать\""); + // add(lvl, "
"); + //} else { + // add(lvl, "
"); + // add(lvl, " \"Показать\""); + // add(lvl, "
"); + //} + } + //add(lvl, "
"); + add(lvl, "
" + title + "
"); cat("
"); + //cat("
"); + + if(!SM->isConsole) splash->SetTitle("Генерация HTML..."); + return; + } + + if(name == "table") { + bool oldParaIdent = paraIdent; paraIdent = false; + QString id, colsep, rowsep, frame, tocentry, align; id=frame=tocentry=align=""; colsep=rowsep="0"; + int cols; //, rows + for(int j=0;j"); + add(lvl, "
"); + add(lvl+1, ""); + + QString title=""; + struct colspecStruct { + QString name, align, colwidth; }; + QList colspec; + struct spanspecStruct { + QString spanname; + int st, end; }; + QList spanspec; + + for(int j=0;j"); + //add(lvl+2, " "+title+""); + //add(lvl+2, ""); + } + if(node.childNodes().at(j).nodeName() == "tgroup") { + cols = -1; + for(int k=0;k");add(lvl, ""); return; } + for(int k=0;k"); + for(int l=0;l"); // или 0? + for(int m=0;m"); + } + } //entrys + add(lvl+3, ""); + } + add(lvl+2, ""); + }//thead, tbody + + } //tgroup childs + } //tgroup + } //table + + add(lvl+1, "
"); + add(lvl, "
"); + + add(lvl, "
"); + cat("
" + title + "
"); + cat("

"); + + labelStruct lbl; lbl.id = id; lbl.title = title; lbl.type = "tab"; + idList.append(lbl); + paraIdent = oldParaIdent; + return; + } + + if(name == "warning") { + bool oldParaIdent = paraIdent; paraIdent = false; + add(lvl, "
"); + for(int j=0;j"); + for(int k=0;k"); + } + add(lvl, "
"); + paraIdent = oldParaIdent; + return; + } + if(name == "caution") { + bool oldParaIdent = paraIdent; paraIdent = false; + add(lvl, "
"); + for(int j=0;j"); + for(int k=0;k"); + } + add(lvl, "
"); + paraIdent = oldParaIdent; + return; + } + if(name == "note") { + bool oldParaIdent = paraIdent; paraIdent = false; + add(lvl, "
"); + for(int j=0;j
"); + paraIdent = oldParaIdent; + return; + } + + if(name == "supScript" || name == "subScript") { + if(node.childNodes().count() == 1) + if(node.childNodes().at(0).nodeName() == "footnote" || node.childNodes().at(0).nodeName() == "footnoteRef") { + parseNode(node.childNodes().at(0), lvl); + return; + } + add(lvl, "<"+name.left(3)+" class=\"script_"+name.left(3)+"script\">"); + for(int j=0;j"); + return; + } + + if(name == "footnote") { + for(int j=0;j"); + cat(""); // + if(footnoteID != "") + cat(QString::number(acrList.count())); + else + cat(newAcr.term); + cat(""); + +// cat("
"); // +// cat(""); // +// if(footnoteID != "") +// cat(QString::number(acrList.count())); +// else +// cat(newAcr.term); +// cat(""); +// cat("
"); +// cat(newAcr.definition); +// cat("
"); + return; + } + + if(name == "footnoteRef") { + QString internalRefId = ""; + internalRefId = node.attributes().namedItem("internalRefId").nodeValue(); + + if(internalRefId == "") return; + QString term = "***", definition = "Ссылка на термин ID "+internalRefId+" некорректна"; + for(int j=0;j"); + cat(""); // + cat(term); + cat(""); + +// cat("
"); +// cat(""); // +// cat(term); +// cat(""); +// cat("
"); +// cat(definition); +// cat("
"); + return; + } + + if(name == "externalPubRef") { + QDomNode codeNode, titleNode; + codeNode = node.childNodes().at(0).toElement().namedItem("externalPubCode"); + titleNode = node.childNodes().at(0).toElement().namedItem("externalPubTitle"); + + QString refType="", refName="", refTitle=""; + if(codeNode.attributes().item(0).toAttr().nodeName() == "pubCodingScheme") + refType = codeNode.attributes().item(0).toAttr().nodeValue(); + refName = codeNode.childNodes().at(0).nodeValue(); + refTitle = titleNode.childNodes().at(0).nodeValue(); + + if(refType == "URL") { + cat(""); + cat(refTitle); cat(""); + } + if(refType == "file") { // копируем всю папку с указанным файлом. Если такой нет - игнорируем + refName = refName; + //refTitle = refTitle; + QFileInfo info(SM->item->importedFromLyX); + QString refDir = info.absolutePath() + "/" + refName.split("/")[0]; + //QDir dir = QDir(refDir); + if(!QDir(refDir).exists() && !QDir(SM->projectPath+"/"+refName.split("/")[0]).exists()) { + cat("Гиперссылка: Папка "+refDir+" не найдена. Установите относительный путь к файлу."); + return; + } + + if(!QDir(SM->projectPath+"/"+refName.split("/")[0]).exists()) + SM->copyDir(refDir, SM->projectPath+"/"+refName.split("/")[0]); + + cat(""); + cat(refTitle); cat(""); + } + return; + } + + if(name == "multimedia") { + QString title="", infoEntityIdent="", multimediaType="", scname = ""; + title = node.toElement().namedItem("title").childNodes().at(0).nodeValue(); + infoEntityIdent = node.toElement().namedItem("multimediaObject").attributes().namedItem("infoEntityIdent").nodeValue(); + multimediaType = node.toElement().namedItem("multimediaObject").attributes().namedItem("multimediaType").nodeValue(); + scname = node.toElement().namedItem("multimediaObject").childNodes().at(0).attributes().namedItem("scenario").nodeValue(); + + if(multimediaType == "3D") { + //infoEntityIdent = infoEntityIdent; // копируем всю папку с указанным файлом. Если такой нет - игнорируем + QFileInfo info(SM->item->importedFromLyX); + QString refDir = info.absolutePath() + "/" + infoEntityIdent.split("/")[0]; +// if(!QDir(refDir).exists()) { +// cat("3D: Папка "+refDir+" не найдена. Установите относительный путь к файлу."); +// return; +// } + if(QDir(refDir).exists()) // && !QDir(SM->projectPath+"/"+infoEntityIdent.split("/")[0]).exists() + if(!SM->copyDir(refDir, SM->projectPath+"/"+infoEntityIdent.split("/")[0])) { + QMessageBox::critical(nullptr,"Ошибка", "Ошибка копирования папки '"+refDir+"'",QMessageBox::Ok); + return; + } + + iframeDivCnt++; + QString divID = "d"+QString::number(iframeDivCnt); + QString scfilename = SM->projectPath+"/"+ QFileInfo(infoEntityIdent).path()+"/StreamingAssets/Scenario/"+QFileInfo(scname).fileName(); + if(scname.toLower() == "freemode") { + QString divScName = scname+QString::number(iframeDivCnt); + QString iframeSrc = infoEntityIdent; + add(lvl, "
"); + //add(lvl, ""); + } + else + if(QFile::exists(scfilename) || scname.toLower().startsWith("system_")) { + QString indexfn = SM->projectPath+"/"+ infoEntityIdent; + QString scenariofn = SM->projectPath+"/"+QFileInfo(infoEntityIdent).path() +"/"+ QFileInfo(scname).baseName()+".html"; + QFile indexFile(indexfn); + indexFile.open(QFile::ReadOnly | QFile::Text); + QString htmlData = QString(indexFile.readAll()); + indexFile.close(); + + htmlData.replace("FreeMode", scname); + + QFile scFile(scenariofn); + if(QFile::exists(scenariofn)) QFile::remove(scenariofn); + scFile.open(QFile::WriteOnly | QFile::Text); + QTextStream out(&scFile); out << htmlData; + scFile.close(); + // можно сделать чтение ширины/высоты с htmlData: + // canvas.style.width = "936px"; canvas.style.height = "526px"; + + // scRegister(scName, scTitle, divID, iframeSrc) + //
+ QString divScName = QFileInfo(scname).fileName(); + QString iframeSrc = QFileInfo(infoEntityIdent).path()+"/"+QFileInfo(scname).baseName()+".html"; + add(lvl, "
"); + //add(lvl, ""); + } + else + { + add(lvl, "
Сценарий " + scfilename + " не найден

"); + } + + add(lvl, "
" + title + "

"); + } + + if(multimediaType == "video") { + QString id = "ID_mmo"+QString::number(ID_mmos++); + labelStruct lbl; lbl.id = id; lbl.title = title; lbl.type = "mmo"; + idList.append(lbl); + add(lvl, "
"); + add(lvl, "
"); + add(lvl, "
"); + add(lvl, " "); + add(lvl, " "); + add(lvl, " "); + add(lvl, "
"); + add(lvl, "
"); + add(lvl, "
" + title + "

"); + add(lvl, "
"); + } + + return; + } + + QString s = "(-unknown-) " + node.nodeName() + " " + node.nodeValue() + "
"; + qDebug() << "Unknown S1000D node: "+node.nodeName(); + add(0, s); + //for(int j=0;jitem->html.append(spc(lvl)+s); +} + +void HTML::cat(QString s) { + SM->item->html[SM->item->html.count()-1] += s; +} + +QString HTML::searchSVGNodeForText(QDomNode node) { + if(node.nodeName() == "tspan") + return node.childNodes().at(0).nodeValue(); + for(int j=0;jВ полете: Величина непревышаемой скорости полета (VNE +// +// +// VNE +// Величина непревышаемой скорости +// ) составляет 300 км/ч. + +// Величина непревышаемой скорости полета VNE +// при работе + +//NE +// + +//void clearDir( const QString path ) +//{ +// QDir dir( path ); + +// dir.setFilter( QDir::NoDotAndDotDot | QDir::Files ); +// foreach( QString dirItem, dir.entryList() ) +// dir.remove( dirItem ); + +// dir.setFilter( QDir::NoDotAndDotDot | QDir::Dirs ); +// foreach( QString dirItem, dir.entryList() ) +// { +// QDir subDir( dir.absoluteFilePath( dirItem ) ); +// subDir.removeRecursively(); +// } +//} + + +//tmp: +//http://digitalnativestudios.com/textmeshpro/docs/rich-text/#color diff --git a/s1000d/Converter14_Source/html.h b/s1000d/Converter14_Source/html.h new file mode 100644 index 0000000..ba808f7 --- /dev/null +++ b/s1000d/Converter14_Source/html.h @@ -0,0 +1,43 @@ +#ifndef HTML_H +#define HTML_H + +#include "s1000d_manager.h" +#include "ru_const.h" +#include "splashform.h" + +class HTML +{ +public: + HTML(); + void Generate(S1000D_Manager* SM, bool _toScorm, SplashForm* _splash); + void parseNode(QDomNode node, int lvl); + QString spc(int n); + void add(int lvl, QString s); + void cat(QString s); + QString searchSVGNodeForText(QDomNode g); + + S1000D_Manager* SM; + RU_Const *ru_const; + SplashForm* splash; + bool DBG = true; + bool toScorm; + int ID_pars, ID_tabs, ID_figs, ID_mmos; + struct labelStruct { + QString title, id; + QString type; + }; + QList idList; + struct acronymStruct { + QString id, term, definition; + }; + QList acrList; + QString footnoteID; + int svgUI; + bool paraIdent=true; + QString paraTextAlign; + int iframeDivCnt; + + QString domElementToXML(const QDomElement& elem, int lvl); +}; + +#endif // HTML_H diff --git a/s1000d/Converter14_Source/lyx.cpp b/s1000d/Converter14_Source/lyx.cpp new file mode 100644 index 0000000..57ce873 --- /dev/null +++ b/s1000d/Converter14_Source/lyx.cpp @@ -0,0 +1,2132 @@ +#include "lyx.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include + +LyX::LyX() +{ + +} + +bool LyX::Import(S1000D_Manager* _SM, QString fileName, SplashForm* _splash) { + SM = _SM; + ru_const = &SM->ru_const; splash = _splash; + if(!SM->isConsole) + { splash->Reset(); splash->SetTitle("Копирование файлов..."); } + + // создаем папку Develop (SM->projectPath), файлы с нее перемещаем в Develop\Backup + QFileInfo info1(fileName); + QString filePath = info1.absolutePath(); + QDir dir = QDir(filePath+"/Develop"); + if (!dir.exists()) dir.mkdir(filePath+"/Develop"); + SM->projectPath = filePath+"/Develop"; + + enum OperatingSytem {OS_WINDOWS, OS_UNIX, OS_LINUX, OS_MAC} os; + #if (defined (Q_OS_WIN) || defined (Q_OS_WIN32) || defined (Q_OS_WIN64)) + os = OS_WINDOWS; + #elif (defined (Q_OS_UNIX)) + os = OS_UNIX; + #elif (defined (Q_OS_LINUX)) + os = OS_LINUX; + #elif (defined (Q_OS_MAC)) + os = OS_MAC; + #endif + QStringList params; + + //AllocConsole(); //AttachConsole(GetCurrentProcessId()); + if(os == OS_WINDOWS) { + QString winpath1 = SM->projectPath; winpath1.replace("/","\\"); + params << "/C"<<"xcopy"<<"/E" << "/C" << "/Y"<< QCoreApplication::applicationDirPath().replace("/","\\")+"\\Scorm\\app" << winpath1+"\\app\\" << ">nul"; + if(!SM->isConsole) + QProcess::startDetached("cmd.exe", params); + else + { + QProcess cmdProc; + cmdProc.setProgram("cmd.exe"); cmdProc.setArguments(params); + cmdProc.start(); + while(!cmdProc.waitForFinished(50)) {}; + } + } else { + params << "-r"<< QCoreApplication::applicationDirPath()+"/Scorm/app" << SM->projectPath+"/app/";// << "> /dev/null"; + if(!SM->isConsole) + QProcess::startDetached("cp", params); + else + { + QProcess cmdProc; + cmdProc.setProgram("cp"); cmdProc.setArguments(params); + cmdProc.start(); + while(!cmdProc.waitForFinished(50)) {}; + } + + } + //FreeConsole(); + + QDir dirBackup(SM->projectPath+"/Backup"); + dirBackup.removeRecursively(); + //dirBackup.mkpath("."); + + QDir dirProj(SM->projectPath); + dirProj.setFilter( QDir::NoDotAndDotDot | QDir::Files | QDir::AllDirs); + dirProj.setNameFilters(QStringList() << "*.*"); + dirProj.mkdir("Backup"); + foreach( QString dirItem, dirProj.entryList() ) { + if(!SM->isConsole) + { splash->Step(); splash->Step(); splash->Step(); splash->Step(); } + QFileInfo fileInfo(dirItem); + if(dirItem != "Backup" && dirItem != "app") { + //qDebug() << dirItem; + dirProj.rename(dirItem, SM->projectPath+"/Backup/" + fileInfo.fileName()); + } + } + + SM->clearItems(); + lyxFileStack.clear(); lyxList.clear(); + +// lyxLog.clear(); + +// if(SM->item->schemeType == stDESCRIPT) domContentPath = "content.description"; +// if(SM->item->schemeType == stCREW) domContentPath = "content.crew.descrCrew"; +// domRootNode = SM->findElement(domContentPath); +// //QString domCurLevelPath = domContentPath; +// //QDomNode domCurLevelNode = domRootNode; + +// while(domRootNode.hasChildNodes()) +// domRootNode.removeChild(domRootNode.firstChild()); + +// if(!SM->isNodeCreated("rdf:Description")) { +// QDomNode descr = SM->item->doc.createElement("rdf:Description"); +// SM->findElement("").insertBefore(descr, SM->findElement("").firstChild()); +// } +// if(!SM->isNodeCreated("rdf:Description.dc:source")) SM->createNode("rdf:Description", "dc:source"); +// SM->setNodeText("rdf:Description.dc:source", QFileInfo(fileName).fileName()); +// SM->item->importedFromLyX = QFileInfo(fileName).fileName(); + + + docChapter = docSection = docSubsection = -1; + curChapterItem = curSectionItem = curSubsectionItem = -1; + tocItemNum = acrListItemNum = -1; + tableOfContentsRoot.childs.clear(); domTableOfContentsNode.clear(); domAcronymListNode.clear(); + labelList.clear(); acronymList.clear(); refList.clear(); + cntTable = cntFigure = cntPar = 0; + tableTitle = ""; tableID = ""; + flags.align = ""; flags.bold = false; flags.italic = false; flags.underlined = false; + domRootNode.clear(); + + if(!SM->isConsole) + splash->SetTitle("Чтение файла LyX..."); + + if(!readLyXFile(fileName)) + return false; + + if(tocItemNum != -1) { // заполняем Содержание + SM->setCurItem(tocItemNum); + QDomNode tocTitleNode = SM->item->doc.createElement("para"); + domTableOfContentsNode.appendChild(tocTitleNode); tocTitleNode.appendChild(SM->item->doc.createTextNode(ru_const->tableOfContents+"\n")); + fillTableOfContents(tableOfContentsRoot, domTableOfContentsNode, " "); + } + if(acrListItemNum != -1) { // заполняем список сокращений + SM->setCurItem(acrListItemNum); + fillAcronymList(domAcronymListNode); + } + + return true; +} + +bool LyX::readLyXFile(QString fileName) { + //if(DBG) qDebug() << "reading" << fileName; + QFile lyxFile(fileName); + if(!lyxFile.open(QFile::ReadOnly | QFile::Text)) { + //lyxLog.append("Error: LyX file not found!"); + if(DBG) qDebug() << "Error: LyX file not found - " + fileName; + return false; + } + lyxList.clear(); + lyxList = QString(lyxFile.readAll()).split("\n"); + lyxFile.close(); + lyxEmptyCnt.clear(); + + int delCnt = 0; + for(int i=0;iitems[curSubsectionItem].lyxLog = lyxLog; + + //for(int i=0;iitems.count();i++) + // qDebug() << i << SM->items[i].fileName << SM->items[i].doc.namedItem("dmodule").nodeName() << SM->items[i].doc.namedItem("dmodule").childNodes().count(); + //qDebug() << ""; + + //SM->SaveProject(); + + connectRefsWithLabels(); + + for(int i=0;iitems.count();i++) + if(SM->items[i].lyxLog.count() == 2) SM->items[i].lyxLog.append("#Завершено без ошибок."); + + return true; +} + +int LyX::findTagEnd(int _beg) { + if(!lyxList.at(_beg).startsWith("\\begin_")) { + if(DBG) qDebug() << "Error: findTagEnd not startsWith(\"\\begin_\")"; + return -1; + } + QString tagName = lyxList.at(_beg); + if(tagName.indexOf(" ") != -1) + tagName = tagName.left(tagName.indexOf(" ")); + tagName = tagName.mid(7); + int _insideCnt = 0; + QString itemText; + for(int i=_beg+1;i 649, 541, 547 +void LyX::parseBlock(int _beg, int _end, QDomNode _domCurLevelNode) { + pushFlags(); + if(!SM->isConsole) + splash->Step(); + QDomNode domCurLevelNode = _domCurLevelNode; + QDomNode domCurLevelSubsection; + QString blockText = ""; + QString itemName; + for(int i=_beg;i<=_end;i++) { + itemName = lyxList.at(i); + if(itemName == "") continue; + + + if(itemName == "\\begin_layout Title") { + QString title = ""; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + for(int j=_childBeg+1;j<_childEnd;j++) + title += lyxList.at(j); + i = _childEnd; + //if(!SM->isNodeCreated("rdf:Description.dc:title")) SM->createNode("rdf:Description", "dc:title"); + //SM->setNodeText("rdf:Description.dc:title", title); + continue; + } + + if(itemName == "\\begin_layout Chapter*" || itemName == "\\begin_layout Chapter") { + QString title = ""; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + for(int j=_childBeg+1;j<_childEnd;j++) { + if(lyxList.at(j).startsWith("\\size")) continue; + title += lyxList.at(j); + } + i = _childEnd; + title = title.replace("/n", "").replace(":", ""); + //lyxLog.append(" "+title); + //if(itemName == "\\begin_layout Chapter") + // lyxLog.append("#["+QString::number(_childBeg+lyxEmptyCnt[_childBeg])+"] Необходимо использовать стиль текста \"Глава*\" вместо \"Глава\""); + //if(DBG) qDebug() << "" + title; + appendChapter(title); + checkForOldIdent(); + SM->item->importedFromLyX = curLyXFileName; + domCurLevelNode = SM->item->doc.namedItem("pm").namedItem("content"); + continue; + } + + if(itemName == "\\begin_layout Section*" || itemName == "\\begin_layout Section") { + QString title = ""; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + for(int j=_childBeg+1;j<_childEnd;j++){ + if(lyxList.at(j).startsWith("\\size")) continue; + title += lyxList.at(j); + } + i = _childEnd; + title = title.replace("/n", "").replace(":", ""); + //lyxLog.append(" "+title); + //if(itemName == "\\begin_layout Section") + // lyxLog.append("#["+QString::number(_childBeg+lyxEmptyCnt[_childBeg])+"] Необходимо использовать стиль текста \"Раздел*\" вместо \"Раздел\""); + //if(DBG) qDebug() << " " + title; + if(docChapter == -1) appendChapter(""); + appendSection(title); + checkForOldIdent(); + SM->item->importedFromLyX = curLyXFileName; + domCurLevelNode = SM->item->doc.namedItem("pm").namedItem("content"); + continue; + } + + if(itemName == "\\begin_layout Subsection*" || itemName == "\\begin_layout Subsection") { + QString title = ""; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + for(int j=_childBeg+1;j<_childEnd;j++){ + if(lyxList.at(j).startsWith("\\size")) continue; + title += lyxList.at(j); + } + i = _childEnd; + title = title.replace("/n", "").replace(":", ""); + //lyxLog.append(" "+title); + //if(itemName == "\\begin_layout Subsection") + // lyxLog.append("#["+QString::number(_childBeg+lyxEmptyCnt[_childBeg])+"] Необходимо использовать стиль текста \"Подраздел*\" вместо \"Подраздел\""); + //if(DBG) qDebug() << " " + title; + + //qDebug() << internalRefList.count(); + /* + for(int j=0;jitem->isQualifyed = false; ??? + } + internalRefList.clear(); */ + + if(docChapter == -1) appendChapter(""); + if(docSection == -1) appendSection(""); + appendSubsection(title); + checkForOldIdent(); + SM->item->importedFromLyX = curLyXFileName; + lyxLog.clear(); + QDate date = QDate::currentDate(); QTime time = QTime::currentTime(); + lyxLog.append(" "+date.toString(Qt::SystemLocaleLongDate)+" "+time.toString("hh:mm")+" Импорт модуля из файла "+curLyXFileName); lyxLog.append(""); + + //qDebug() << "lyx: " << curLyXFileName; + + if(SM->item->schemeType == stDESCRIPT) + domCurLevelNode = SM->findElement("content.description"); + if(SM->item->schemeType == stLEARNING) + domCurLevelNode = SM->findElement("content.learning.learningAssessment"); + domCurLevelSubsection = domCurLevelNode; + + if(SM->item->schemeType == stLEARNING) + i = parseLearningModule(domCurLevelNode, i+1, _end); + + continue; + } + + if(itemName == "\\begin_layout Standard" && lyxList[i+1] == "\\begin_inset CommandInset include") { + QString filename = ""; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + for(int j=_childBeg+1;j<_childEnd;j++) + if(lyxList[j].startsWith("filename")) { + filename = lyxList[j].mid(9).replace("\"",""); + pushLyXFileData(); + readLyXFile(SM->projectPath.left(SM->projectPath.length()-7) + "/" + filename); + popLyXFileData(); + } + i = _childEnd; + + continue; + } + + if(curSubsectionItem == -1) continue; // пока не дошли до модуля данных - читаем только заголовки + + if(SM->item->schemeType == stLEARNING) continue; + + if(itemName == "\\begin_layout Subsubsection*" || itemName == "\\begin_layout Subsubsection") { + QString title = ""; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + for(int j=_childBeg+1;j<_childEnd;j++){ + if(lyxList.at(j).startsWith("\\size")) continue; + title += lyxList.at(j); + } + i = _childEnd; + + if(domCurLevelSubsection.isNull()) + blockText += title+"\n"; + else { + QDomNode levelledPara = SM->item->doc.createElement("levelledPara"); + domCurLevelSubsection.appendChild(levelledPara); + QDomNode titleNode = SM->item->doc.createElement("title"); + titleNode.appendChild(SM->item->doc.createTextNode(title)); + levelledPara.appendChild(titleNode); + domCurLevelNode = levelledPara; + } + + continue; + } + + if(itemName == "\\begin_layout Paragraph*" || itemName == "\\begin_layout Paragraph") { + QString title = ""; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + for(int j=_childBeg+1;j<_childEnd;j++){ + if(lyxList.at(j).startsWith("\\size")) continue; + title += lyxList.at(j); + } + i = _childEnd; + + _childBeg = i; + + QDomNode levelledPara = SM->item->doc.createElement("levelledPara"); + domCurLevelNode.appendChild(levelledPara); + QDomNode titleNode = SM->item->doc.createElement("title"); + titleNode.appendChild(SM->item->doc.createTextNode(title)); + levelledPara.appendChild(titleNode); + + _childEnd = _end; + for(int j=_childBeg;j<=_end;j++) { + if(lyxList.at(j).startsWith("\\begin_layout Section") || lyxList.at(j).startsWith("\\begin_layout Subsection") || + lyxList.at(j).startsWith("\\begin_layout Subsubsection") || lyxList.at(j).startsWith("\\begin_layout Paragraph")) { + _childEnd = j-1; break; + } + } + i = _childEnd; + parseBlock(_childBeg+1, _childEnd, levelledPara); + continue; + } + + if(itemName == "\\begin_layout Subparagraph*" || itemName == "\\begin_layout Subparagraph") { + QString title = ""; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + for(int j=_childBeg+1;j<_childEnd;j++){ + if(lyxList.at(j).startsWith("\\size")) continue; + title += lyxList.at(j); + } + i = _childEnd; + + _childBeg = i; + + QDomNode levelledPara = SM->item->doc.createElement("levelledPara"); + domCurLevelNode.appendChild(levelledPara); + QDomNode titleNode = SM->item->doc.createElement("title"); + titleNode.appendChild(SM->item->doc.createTextNode(title)); + levelledPara.appendChild(titleNode); + + _childEnd = _end; + for(int j=_childBeg;j<=_end;j++) { + if(lyxList.at(j).startsWith("\\begin_layout Section") || lyxList.at(j).startsWith("\\begin_layout Subsection") || + lyxList.at(j).startsWith("\\begin_layout Subsubsection") || lyxList.at(j).startsWith("\\begin_layout Paragraph") || + lyxList.at(j).startsWith("\\begin_layout Subparagraph")) { + _childEnd = j-1; break; + } + } + i = _childEnd; + parseBlock(_childBeg+1, _childEnd, levelledPara); + continue; + } + + if((itemName == "\\begin_layout Standard" && lyxList[i+1] == "\\begin_inset Box Shaded") || + (itemName == "\\begin_inset Box Shaded")) { + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + QDomNode warning = SM->item->doc.createElement("warning"); + domCurLevelNode.appendChild(warning); + + for(int j=_childBeg;j<_childEnd;j++) { + int _textBeg = findTag(j, _childEnd-1, "\\begin_layout Plain Layout"); + if(_textBeg == -1) break; + int _textEnd = findTagEnd(_textBeg); + j = _textEnd; + QDomNode warningAndCautionPara = SM->item->doc.createElement("warningAndCautionPara"); + warning.appendChild(warningAndCautionPara); + parseBlock(_textBeg+1, _textEnd-1, warningAndCautionPara); + } + i = _childEnd; + continue; + } + + if((itemName == "\\begin_layout Standard" && lyxList[i+1].startsWith("\\begin_inset Box")) || + (itemName == "\\begin_inset Box")) { + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + QDomNode warning = SM->item->doc.createElement("caution"); + domCurLevelNode.appendChild(warning); + + for(int j=_childBeg;j<_childEnd;j++) { + int _textBeg = findTag(j, _childEnd-1, "\\begin_layout Plain Layout"); + if(_textBeg == -1) break; + int _textEnd = findTagEnd(_textBeg); + j = _textEnd; + QDomNode warningAndCautionPara = SM->item->doc.createElement("warningAndCautionPara"); + warning.appendChild(warningAndCautionPara); + parseBlock(_textBeg+1, _textEnd-1, warningAndCautionPara); + } + i = _childEnd; + continue; + } + + if((itemName == "\\begin_layout Standard" && (lyxList[i+1] == "\\begin_inset Note Greyedout" || lyxList[i+2] == "\\begin_inset Note Greyedout" || lyxList[i+3] == "\\begin_inset Note Greyedout")) || + (itemName == "\\begin_inset Note Greyedout")) { + int _childBeg, _childEnd; + _childBeg = findTag(i, _end, "\\begin_inset Note Greyedout"); + _childEnd = findTagEnd(_childBeg); + int _textBeg = findTag(_childBeg+2, _childEnd-1, "\\begin_layout Plain Layout"); + int _textEnd = findTagEnd(_textBeg); + + QDomNode note = SM->item->doc.createElement("note"); + domCurLevelNode.appendChild(note); + QDomNode notePara = SM->item->doc.createElement("notePara"); + note.appendChild(notePara); + parseBlock(_textBeg+1, _textEnd-1, notePara); + + _childEnd = findTagEnd(i); + i = _childEnd; + continue; + } + + if(itemName[0] != "\\") { blockText += itemName; continue; } + if(itemName == "\\backslash") { blockText += "\\"; continue; } + if(itemName[0] == "\\" && blockText != "") { + QDomNode blockTextNode = SM->item->doc.createTextNode(blockText); + QDomNode tmpCurNode = domCurLevelNode; + if(flags.bold) { + QDomNode emphasisNode = SM->item->doc.createElement("emphasis"); + tmpCurNode.appendChild(emphasisNode); tmpCurNode = emphasisNode; + } + if(flags.italic) { + QDomNode emphasisNode = SM->item->doc.createElement("emphasis"); + emphasisNode.toElement().setAttribute("emphasisType", "em02"); //"em03" Underline, "em04" Overline, "em05" Strikethrough, "em51" - "em99" Available for projects + tmpCurNode.appendChild(emphasisNode); tmpCurNode = emphasisNode; + } + if(flags.underlined) { + QDomNode emphasisNode = SM->item->doc.createElement("emphasis"); + emphasisNode.toElement().setAttribute("emphasisType", "em03"); //"em04" Overline, "em05" Strikethrough, "em51" - "em99" Available for projects + tmpCurNode.appendChild(emphasisNode); tmpCurNode = emphasisNode; + } + tmpCurNode.appendChild(blockTextNode); + blockText = ""; + } + + if(itemName == "\\begin_layout Plain Layout" || itemName == "\\begin_layout Standard") { + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + + QDomNode paraNode = SM->item->doc.createElement("para"); + domCurLevelNode.appendChild(paraNode); + + pushFlags(); + parseBlock(_childBeg+1, _childEnd-1, paraNode); + popFlags(); + + i = _childEnd; + continue; + } + + if(itemName == "\\begin_layout Enumerate" || itemName == "\\begin_layout Itemize") { // +// QDomNode titleNodeClone; +// if(domCurLevelNode.hasChildNodes()) +// if(domCurLevelNode.lastChild().nodeName() == "para") { +// titleNodeClone = domCurLevelNode.lastChild().cloneNode(); +// domCurLevelNode.removeChild(domCurLevelNode.lastChild()); +// titleNodeClone.toElement().setTagName("title"); +// } + QDomNode lastPara; + if(domCurLevelNode.hasChildNodes()) + if(domCurLevelNode.lastChild().nodeName() == "para") + lastPara = domCurLevelNode.lastChild(); + + QDomNode listNode; + if(itemName == "\\begin_layout Enumerate") listNode = SM->item->doc.createElement("sequentialList"); + if(itemName == "\\begin_layout Itemize") listNode = SM->item->doc.createElement("randomList"); + domCurLevelNode.appendChild(listNode); +// QDomNode titleNode; +// if(titleNodeClone.isNull()) { +// //titleNode = SM->item->doc.createElement("title"); +// //titleNode.appendChild(SM->item->doc.createTextNode("")); +// //listNode.appendChild(titleNode); +// } +// else { +// titleNode = SM->item->doc.importNode(titleNodeClone, true); +// listNode.appendChild(titleNode); +// } + + if(!lastPara.isNull()) // вышестоящий абзац берем как заголовок, делаем из para -> title + { + QDomNode titleNode = SM->item->doc.createElement("title"); + while(lastPara.hasChildNodes()) { + QDomNode ch = lastPara.removeChild(lastPara.firstChild()); + titleNode.appendChild(ch); + } + listNode.appendChild(titleNode); + lastPara.parentNode().removeChild(lastPara); + + QList list; + QDomNode node; + list.append(titleNode); + + while(!list.isEmpty()) { // обновляем refList и labelList для перемещенных узлов + node = list.takeFirst(); + if(node.nodeName().startsWith("blankRefNode")) { + for(int n=0;refList.count();n++) + if(refList[n].nodeXPath.endsWith(node.nodeName())) { + refList[n].nodeXPath = SM->makeNodeXPath(node); + break; + } + } + QString nodeID = node.attributes().namedItem("id").nodeValue(); + if(nodeID != "") + for(int n=0;labelList.count();n++) + if(labelList[n].id == nodeID) { + labelList[n].nodeXPath = SM->makeNodeXPath(node); + break; + } + + for(int n=0;nitem->doc.createElement("listItem"); + listNode.appendChild(listItemNode); + QDomNode listItemPara = SM->item->doc.createElement("para"); + listItemNode.appendChild(listItemPara); + pushFlags(); + parseBlock(_childBeg+1, _childEnd-1, listItemPara); + popFlags(); + j = _childEnd; + continue; + } + break; + } + + i = _childEnd; + continue; + } + + if(itemName == "\\series bold") { + flags.bold = true; continue; } + if(itemName == "\\series default") { + flags.bold = false; continue; } + if(itemName == "\\shape italic" || itemName == "\\emph on") { + flags.italic = true; continue; } + if(itemName == "\\shape default" || itemName == "\\emph default") { + flags.italic = false; continue; } + if(itemName == "\\bar under" || itemName == "\\uuline on" || itemName == "\\uwave on") { + flags.underlined = true; continue; } + if(itemName == "\\bar default" || itemName == "\\uuline default" || itemName == "\\uwave default") { + flags.underlined = false; continue; } + + if(itemName.startsWith("\\color")) { + lyxLog.append("#["+QString::number(i)+"] Цветовое выделение не поддерживается ("+itemName+")"); + continue; + } + if(itemName.startsWith("\\size")) { + //lyxLog.append("#["+QString::number(i+lyxEmptyCnt[i])+"] Изменение размера шрифта не поддерживается ("+itemName+")"); + continue; + } + if(itemName.startsWith("\\align")) { + lyxLog.append("#["+QString::number(i+lyxEmptyCnt[i])+"] Выравнивание элементов не поддерживается ("+itemName+")"); + continue; + } + if(itemName.startsWith("\\strikeout")) { continue; } // игнорируем: + if(itemName.startsWith("\\xout")) { continue; } + if(itemName.startsWith("\\family")) { continue; } + if(itemName.startsWith("\\shape")) { continue; } + + + if(itemName.startsWith("\\begin_inset")) { + QString insetName = itemName.mid(13); + int _insetBeg, _insetEnd; + _insetBeg = i; _insetEnd = findTagEnd(_insetBeg); + i = _insetEnd; // !!! не трогать + //pushFlags(); // надо? + + if(insetName == "CommandInset toc") { //Содержание + tocItemNum = curSubsectionItem; + domTableOfContentsNode = SM->item->doc.createElement("para"); + domCurLevelNode.appendChild(domTableOfContentsNode); + continue; + } + if(insetName == "CommandInset nomencl_print") { //Список сокращений + acrListItemNum = curSubsectionItem; + domAcronymListNode = SM->item->doc.createElement("para"); + domCurLevelNode.appendChild(domAcronymListNode); + continue; + } + + if(insetName == "Foot") { + QString footName = ""; + QString termDef = ""; + + int _plainEnd=_insetBeg; + int _labelEnd=_insetBeg; + for(int j=_insetBeg+1;j<_insetEnd;j++) + if(lyxList.at(j).startsWith("\\begin_layout Plain Layout")) { + _plainEnd = findTagEnd(j); _labelEnd = j+1; + for(int k=j+1;k<_insetEnd;k++) + if(lyxList.at(k).startsWith("\\begin_inset CommandInset label")) { + _labelEnd = findTagEnd(k); + footName = ""; + for(int l=k+1;l<=_labelEnd;l++) + if(lyxList.at(l).startsWith("name")) { + footName = lyxList.at(l).mid(6).replace("\"", ""); + break; + } + break; + } + break; + } + for(int j=_labelEnd+1;j<_plainEnd;j++) { + if(lyxList.at(j) == "") continue; + if(lyxList.at(j).startsWith("\\")) { + lyxLog.append("!["+QString::number(j+lyxEmptyCnt[j])+"] Ошибка в структуре сноски: в теле сноски("+footName+") ожидался текст"); + SM->item->isQualifyed = false; + continue; + } + termDef += lyxList.at(j); + } + + if(footName == "") { + lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Ошибка в структуре сноски: остутствует метка"); + SM->item->isQualifyed = false; + continue; + } + + int acroNum = -1; + for(int j=0;jitem->doc.createElement("footnote"); + domCurLevelNode.appendChild(footNode); + footNode.toElement().setAttribute("id", acronymList[acroNum].id); + QDomNode acronymNode = SM->item->doc.createElement("acronym"); + domCurLevelNode.appendChild(acronymNode); + QDomNode acronymTermNode = SM->item->doc.createElement("acronymTerm"); + acronymNode.appendChild(acronymTermNode); + acronymTermNode.appendChild(SM->item->doc.createTextNode(acronymList[acroNum].term)); + QDomNode acronymDefinitionNode = SM->item->doc.createElement("acronymDefinition"); + acronymNode.appendChild(acronymDefinitionNode); + acronymDefinitionNode.toElement().setAttribute("id", acronymList[acroNum].id); + acronymDefinitionNode.appendChild(SM->item->doc.createTextNode(acronymList[acroNum].definition)); + continue; + } + + if(insetName == "CommandInset nomenclature") { // acronym + QString term = "", termDef = ""; + if(lyxList[_insetBeg+2].split(" ")[0] == "symbol") + term = lyxList[_insetBeg+2].mid(7).replace("\"",""); + if(lyxList[_insetBeg+3].split(" ")[0] == "description") + termDef = lyxList[_insetBeg+3].mid(12).replace("\"",""); + int acroNum = -1; + for(int j=0;jitem->doc.createElement("acronym"); + domCurLevelNode.appendChild(acronymNode); + QDomNode acronymTermNode = SM->item->doc.createElement("acronymTerm"); + acronymNode.appendChild(acronymTermNode); + acronymTermNode.appendChild(SM->item->doc.createTextNode(acronymList[acroNum].term)); + QDomNode acronymDefinitionNode = SM->item->doc.createElement("acronymDefinition"); + acronymNode.appendChild(acronymDefinitionNode); + acronymDefinitionNode.toElement().setAttribute("id", acronymList[acroNum].id); + acronymDefinitionNode.appendChild(SM->item->doc.createTextNode(acronymList[acroNum].definition)); + continue; + } + + if(insetName == "CommandInset ref") { + //if(lyxList.at(_insetBeg+2).split(" ")[0] != "reference") continue; + QString refID = ""; + for(int l=_insetBeg+2;l<=_insetEnd;l++) + if(lyxList.at(l).startsWith("reference")) { + refID = QString(lyxList.at(l)).mid(11).replace("\"", ""); + break; + } + if(refID == "") continue; + //lyxList.at(_insetBeg+2).right(lyxList.at(_insetBeg+2).length() - 10).replace("\"", ""); + + if(refID.left(3) == "fn:") { // ссылка на footnote + int acroNum = -1; + for(int j=0;jitem->doc.createElement("footnoteRef"); + footnoteRef.toElement().setAttribute("internalRefId", acronymList[acroNum].id); + domCurLevelNode.appendChild(footnoteRef); + } else { // внутренняя ссылка + /* + int foundLabel = -1; + for(int j=0;j "+labelList[foundLabel].id; + refID = labelList[foundLabel].id; + } + */ + + QDomNode internalRef = SM->item->doc.createElement("blankRefNode"+QString::number(refList.count())); + domCurLevelNode.appendChild(internalRef); + + refStruct ref; + ref.itemInd = SM->itemIndex; + ref.labelFound = false; + ref.lineNum = _insetBeg+lyxEmptyCnt[_insetBeg]; + ref.lyxRef = refID; + //internalRef = domCurLevelNode.childNodes().at(domCurLevelNode.childNodes().count()-1); + ref.nodeXPath = SM->makeNodeXPath(internalRef); + + refList.append(ref); + } + continue; +// attribute internalRefTargetType - Тип объекта внутренней ссылки [BRDP-S1-00100] (Глава 3.9.6.1, таблица 25) +// irtt01 Рисунок (figure) +// irtt02 table (table) +// irtt03 Мультимедиа (multimedia) +// irtt04 Предмет поставки (supply) +// irtt05 Вспомогательное оборудование (supportEquip) +// irtt06 Запасная деталь (spare) +// irtt07 Параграф (para, levelledPara) +// irtt08 Шаг (proceduralStep, faultIsolationStep, crewDrillStep) +// irtt09 Графическое изображение (graphic) +// irtt10 Мультимедийный объект (multimediaObject) +// irtt11 Активный участок (hotspot) +// irtt12 Параметр (parameter) +// irtt13 Зона (zone) +// irtt14 Место работы (workArea) +// irtt15 Набор материалов сервисного бюллетеня (в том числе отдельные, внешние и снятые материалы) +// irtt16 Точка доступа (accessPoint) +// + } + + if(insetName == "CommandInset href") { +// +// //externalPubCode +// Заполнение элемента externalPubCode — Не использовать [BRDP-S1-00540] +// +// +// //externalPubRef +// Формат ссылок в АУК — Не использовать [BRDP-S1-00543] +// + QString name, target, type; name = target = type = ""; + for(int j=_insetBeg+1;j<_insetEnd;j++) { + if(lyxList[j].startsWith("name ")) name = lyxList[j].mid(5).replace("\"", ""); + if(lyxList[j].startsWith("target ")) target = lyxList[j].mid(7).replace("\"", ""); + if(lyxList[j].startsWith("type ")) type = lyxList[j].mid(5).replace("\"", ""); + } + if(name == "" || target == "") { + lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Ошибка в гиперссылке ("+name+", "+target+")"); + SM->item->isQualifyed = false; + continue; + } + QDomNode externalPubRef = SM->item->doc.createElement("externalPubRef"); + domCurLevelNode.appendChild(externalPubRef); + QDomNode externalPubRefIdent = SM->item->doc.createElement("externalPubRefIdent"); + externalPubRef.appendChild(externalPubRefIdent); + QDomNode externalPubCode = SM->item->doc.createElement("externalPubCode"); + externalPubRefIdent.appendChild(externalPubCode); + if(type == "file:") + externalPubCode.toElement().setAttribute("pubCodingScheme", "file"); + else + externalPubCode.toElement().setAttribute("pubCodingScheme", "URL"); + + externalPubCode.appendChild(SM->item->doc.createTextNode(target.replace("\\","/"))); + QDomNode externalPubTitle = SM->item->doc.createElement("externalPubTitle"); + externalPubRefIdent.appendChild(externalPubTitle); + externalPubTitle.appendChild(SM->item->doc.createTextNode(name)); + + continue; + } + + if(insetName == "script superscript") { + QDomNode scriptNode = SM->item->doc.createElement("supScript"); + domCurLevelNode.appendChild(scriptNode); + for(int j=_insetBeg+1;j<_insetEnd;j++) + if(lyxList.at(j).startsWith("\\begin_layout Plain Layout")) { + parseBlock(j+1, findTagEnd(j)-1, scriptNode); + break; + } + continue; + } + if(insetName == "script subscript") { + QDomNode scriptNode = SM->item->doc.createElement("subScript"); + domCurLevelNode.appendChild(scriptNode); + for(int j=_insetBeg+1;j<_insetEnd;j++) + if(lyxList.at(j).startsWith("\\begin_layout Plain Layout")) { + parseBlock(j+1, findTagEnd(j)-1, scriptNode); + break; + } + continue; + } + + if(insetName == "Float figure") { + figureTitle = ""; figureID = ""; + QString lyxID; + int _graphicsBeg = -1; int _graphicsEnd = -1; + for(int j=_insetBeg+1;j<_insetEnd;j++) { + if(lyxList.at(j).startsWith("\\begin_inset Graphics")) { + _graphicsBeg = j; _graphicsEnd = findTagEnd(j); + j = _graphicsEnd; + } + if(lyxList.at(j).startsWith("\\begin_inset Caption Standard")) { + int _capEnd = findTagEnd(j); + for(int k=j+1;k<_capEnd;k++) { + if(lyxList.at(k).startsWith("\\begin_inset CommandInset label")) { + int _labelEnd = findTagEnd(k); + for(int l=k+1;l<_labelEnd;l++) + if(lyxList.at(l).startsWith("name")) { + lyxID = lyxList.at(l).right(lyxList.at(l).length() - 5).replace("\"", ""); + break; + } + k = _labelEnd; + } + if(!lyxList.at(k).startsWith("\\")) + figureTitle += lyxList.at(k); + } + } + } + cntFigure += 1; + figureTitle = ru_const->figureTitle+" "+QString::number(docChapter+1)+"."+QString::number(cntFigure)+": "+figureTitle; + QString z; z.fill('0',3-QString::number(cntFigure).length()); + figureID = "fig-" + z + QString::number(cntFigure); + //figureID = lyxID; + if(lyxID != "") { + int foundLabel = -1; + for(int j=0;jitem->isQualifyed = false; + } + } else { + labelStruct lbl; + lbl.itemInd = SM->itemIndex; + lbl.lyxLabel = lyxID; + lbl.id = figureID; lbl.used = false; + lbl.lineNum = _insetBeg+lyxEmptyCnt[_insetBeg]; + labelList.append(lbl); foundLabel = labelList.count()-1; + //qDebug() << "+fig: lyx="+lyxID+" id="+figureID+" internalRefList.count()="+QString::number(internalRefList.count()); + } + labelList[foundLabel].defined = true; + + + /* + for(int j=0;j nodeList; + QDomNode node; + nodeList.append(SM->item->doc.namedItem("dmodule").namedItem("content")); + while(!nodeList.isEmpty()) { + node = nodeList.takeFirst(); + if(node.nodeName() == "internalRef") + if(//node.toElement().attributes().namedItem("internalRefId").nodeName() == "internalRefId" && + node.toElement().attributes().namedItem("internalRefId").nodeValue() == lyxID) { + //qDebug() << " ! "+QString::number(j)+": "+ lyxID+ " -> "+figureID; + node.toElement().setAttribute("xlink:href", "#"+figureID); + node.toElement().setAttribute("internalRefId", figureID); + QString refTarget = "irtt07"; + if(figureID.left(3) == "fig") refTarget = "irtt01"; + if(figureID.left(3) == "tab") refTarget = "irtt02"; + if(figureID.left(3) == "par") refTarget = "irtt07"; + if(figureID.left(3) == "mma") refTarget = "irtt03"; + if(figureID.left(3) == "fig" && figureID.mid(9,3) == "hot") refTarget = "irtt11"; + node.toElement().setAttribute("internalRefTargetType", refTarget); + } + for(int k=0;kitem->isQualifyed = false; figureID = ""; + continue; + } + if(filename.startsWith("../")) filename = filename.mid(3); + QString absfilename = QString(QFileInfo(curLyXFileName).absolutePath()+"/"+filename); + if (QFile::exists(absfilename)) { + oldfilename = absfilename; + } else { + if (QFile::exists(filename)) { + oldfilename = filename; + lyxLog.append("#["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Рекомендуется использовать относительные пути к файлам изображений: "+filename+" ("+figureTitle+")"); + } + } + if(oldfilename == "") { + lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Файл изображения не найден "+filename+" ("+figureTitle+")"); + SM->item->isQualifyed = false; figureID = ""; + continue; + } + newfilename = SM->projectPath+"/"+ QString::number(docChapter+1) + "." + QString::number(docSection+1) + "." + QString::number(docSubsection+1) + + " " + QFileInfo(oldfilename).fileName(); + if (QFile::exists(newfilename)) { + lyxLog.append("#["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Дублирование имен файлов изображений: "+filename+" ("+figureTitle+")"); + //newfilename = SM->projectPath+"/"+ QString::number(docChapter+1) + "." + QString::number(docSection+1) + "." + QString::number(docSubsection+1)+ + // "_"+QFileInfo(oldfilename).fileName()+"("+QString::number(QRandomGenerator::global()->generate() % 0xFF)+")"; + //if (QFile::exists(newfilename)) QFile::remove(newfilename); + QFile::remove(newfilename); + } + if(!QFile::copy(oldfilename, newfilename)) + if(DBG) qDebug() << "lyx: Error copy" << oldfilename << "to" << newfilename; + + QDomNode figure = SM->item->doc.createElement("figure"); + domCurLevelNode.appendChild(figure); + if(figureID != "") + figure.toElement().setAttribute("id", figureID); + QDomNode title = SM->item->doc.createElement("title"); + figure.appendChild(title); + title.appendChild(SM->item->doc.createTextNode(figureTitle)); + QDomNode graphic = SM->item->doc.createElement("graphic"); + figure.appendChild(graphic); + graphic.toElement().setAttribute("infoEntityIdent", QFileInfo(newfilename).fileName()); + + int labelInd = -1; + for(int j=0;jmakeNodeXPath(figure); + + // если есть файл .txt с хотспотами - копируем его и файлы в нем указанные + QString txtoldfilename = oldfilename; txtoldfilename.replace(".svg", ".txt"); + QString txtnewfilename = newfilename; txtnewfilename.replace(".svg", ".txt"); + if(oldfilename.split(".").last().toLower() == "svg" && QFileInfo(txtoldfilename).exists()) { + if (QFile::exists(txtnewfilename)) QFile::remove(txtnewfilename); + if(!QFile::copy(txtoldfilename, txtnewfilename)) + if(DBG) qDebug() << "lyx: Error copy" << txtoldfilename << "to" << txtnewfilename; + + QFile txtFile(txtoldfilename); + if (!txtFile.open(QFile::ReadOnly)) { + qDebug() << "lyx: Ошибка открытия файла "+txtoldfilename; + return; + } + QByteArray data = txtFile.readAll(); + for(int i=0;i < data.length()-2;i++) + if(int(data[i]) == 10 && int(data[i+1]) != 13) data[i] = 13; + QStringList txtLines = QString(QString(data).toUtf8()).replace("\r\r","\r").split("\r"); // + txtFile.close(); + + QDomDocument svg; + //splash->SetTitle("Обработка SVG файла: "+infoEntityIdent); + QFile svgFile(oldfilename); + if (!svgFile.open(QFile::ReadOnly | QFile::Text)){ + qDebug() << "lyx: Ошибка открытия файла "+oldfilename; + return; + } + svg.setContent(svgFile.readAll()); + svgFile.close(); + + QDomNode svgNode = svg.namedItem("svg"); + if(svgNode.isNull()) { + qDebug() << "lyx: Ошибка в svg-файле "+oldfilename; + return; + } + QStringList txtNums, txtTitles, txtHotID; + foreach(QString s, txtLines) + if(s.indexOf(" - ")) + { + txtNums.append(s.mid(0, s.indexOf(" - "))); + txtTitles.append(s.mid(s.indexOf(" - ")+3)); + txtHotID.append(""); + } + for(int j=0;jisConsole) splash->Step(); + QDomNode g = svgNode.childNodes().at(j); + if(g.nodeName() != "g") continue; + if(!SM->isConsole) splash->Step(); + QDomNode spanNode = searchSVGNodeForSpanNode(g); + if(spanNode.isNull()) continue; + QString title = spanNode.childNodes().at(0).nodeValue(); + if(title == "") continue; + int ind = txtNums.indexOf(title); + if(ind == -1) continue; + txtHotID[ind] = spanNode.attributes().namedItem("id").nodeValue(); + } + + int hotCnt=0; + bool isImage; + for(int j=0;jprojectPath+"/"+txtTitles[j]; + if(QFileInfo::exists(picfile)) { + if (QFile::exists(newpicfile)) QFile::remove(newpicfile); + if(!QFile::copy(picfile, newpicfile)) + if(DBG) qDebug() << "lyx: Error copy" << picfile << "to" << newpicfile; + isImage = true; + } + } + + QDomNode hotspot = SM->item->doc.createElement("hotspot"); + graphic.appendChild(hotspot); + QString hotID; hotID.fill('0', 3-QString::number(hotCnt).length()); + hotID = figureID+"-gra000-hot"+hotID+QString::number(hotCnt++); + hotspot.toElement().setAttribute("id", hotID); + hotspot.toElement().setAttribute("applicationStructureIdent", txtHotID[j]); + hotspot.toElement().setAttribute("applicationStructureName", txtNums[j]); + hotspot.toElement().setAttribute("hotspotTitle", txtTitles[j]); + hotspot.toElement().setAttribute("hotspotType", "callout"); + if(!isImage) + hotspot.toElement().setAttribute("objectDescr", "text"); + else + hotspot.toElement().setAttribute("objectDescr", "image"); + } + } + + + //TODO child: 562 Chapter 3.9.5.2.1.8 + figureTitle = ""; figureID = ""; + continue; + } + + if(insetName == "CommandInset label") { + lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Использование меток допускается только в сносках и плавающих таблицах/рисунках."); + SM->item->isQualifyed = false; + continue; + } + + if(insetName == "Float table") { + tableTitle = ""; tableID = ""; + QString lyxID=""; + int _tabularBeg = -1; int _tabularEnd = -1; + for(int j=_insetBeg+1;j<_insetEnd;j++) { + if(lyxList.at(j).startsWith("\\begin_inset Tabular")) { + _tabularBeg = j; _tabularEnd = findTagEnd(j); + j = _tabularEnd; + } + if(lyxList.at(j).startsWith("\\begin_inset Caption Standard")) { + int _capEnd = findTagEnd(j); + for(int k=j+1;k<_capEnd;k++) { + if(lyxList.at(k).startsWith("\\begin_inset CommandInset label")) { + int _labelEnd = findTagEnd(k); + for(int l=k+1;l<_labelEnd;l++) + if(lyxList.at(l).startsWith("name")) { + lyxID = lyxList.at(l).right(lyxList.at(l).length() - 5).replace("\"", ""); + break; + } + k = _labelEnd; + } + if(!lyxList.at(k).startsWith("\\")) + tableTitle += lyxList.at(k); + } + } + } + cntTable += 1; + tableTitle = ru_const->tableTitle+" "+QString::number(docChapter+1)+"."+QString::number(cntTable)+": "+tableTitle; + QString z; z.fill('0',3-QString::number(cntTable).length()); + tableID = "tab-" + z + QString::number(cntTable); + if(lyxID != "") { + + int foundLabel = -1; + for(int j=0;jitem->isQualifyed = false; + } + } else { + labelStruct lbl; + lbl.itemInd = SM->itemIndex; + lbl.lyxLabel = lyxID; + lbl.id = tableID; lbl.used = false; + lbl.lineNum = _insetBeg+lyxEmptyCnt[_insetBeg]; + labelList.append(lbl); foundLabel = labelList.count()-1; + } + labelList[foundLabel].defined = true; + + /* + for(int j=0;j nodeList; + QDomNode node; + nodeList.append(SM->item->doc.namedItem("dmodule").namedItem("content")); + while(!nodeList.isEmpty()) { + node = nodeList.takeFirst(); + if(node.nodeName() == "internalRef") + if(//node.toElement().attributes().namedItem("internalRefId").nodeName() == "internalRefId" && + node.toElement().attributes().namedItem("internalRefId").nodeValue() == lyxID) { + //qDebug() << " ! "+QString::number(j)+": "+ lyxID+ " -> "+tableID; + node.toElement().setAttribute("xlink:href", "#"+tableID); + node.toElement().setAttribute("internalRefId", tableID); + QString refTarget = "irtt07"; + if(tableID.left(3) == "fig") refTarget = "irtt01"; + if(tableID.left(3) == "tab") refTarget = "irtt02"; + if(tableID.left(3) == "par") refTarget = "irtt07"; + if(tableID.left(3) == "mma") refTarget = "irtt03"; + if(tableID.left(3) == "fig" && tableID.mid(9,3) == "hot") refTarget = "irtt11"; + node.toElement().setAttribute("internalRefTargetType", refTarget); + } + for(int k=0;k","").toInt(); + if(lyxList.at(_lyxtabularBeg).split(" ")[k].split("=")[0] == "columns") + cols = lyxList.at(_lyxtabularBeg).split(" ")[k].split("=")[1].replace("\"","").replace(">","").toInt(); + } + if(rows == 0 || cols == 0) continue; + + for(int j=_lyxtabularBeg+1;j");j++) + if(lyxList.at(j).startsWith("item->doc.createElement("table"); + domCurLevelNode.appendChild(table); + table.toElement().setAttribute("frame", "topbot"); + if(tableID != "") + table.toElement().setAttribute("id", tableID); + table.toElement().setAttribute("colsep", "0"); + table.toElement().setAttribute("rowsep", "0"); + table.toElement().setAttribute("tocentry", "1"); + if(tableTitle != "") { + QDomNode title = SM->item->doc.createElement("title"); + title.appendChild(SM->item->doc.createTextNode(tableTitle)); + table.appendChild(title); + } + QDomNode tgroup = SM->item->doc.createElement("tgroup"); + table.appendChild(tgroup); + tgroup.toElement().setAttribute("cols", QString::number(cols)); + for(int j=0;jitem->doc.createElement("colspec"); + colspec.toElement().setAttribute("colname", "col"+QString::number(j+1)); + if(colsAlign.count() == cols) + colspec.toElement().setAttribute("align", colsAlign[j]); + tgroup.appendChild(colspec); // + } + + int labelInd = -1; + for(int j=0;jmakeNodeXPath(table); + + QList> tableArr; + +// cellStruct** tableArr = new cellStruct*[rows]; +// for(int j=0;j rowStruct; + tableArr.append(rowStruct); + + _rowBeg = findTag(_rowEnd+1, _insetEnd, ""); + int _cellBeg = _rowBeg; int _cellEnd; + for(int k=0;k"); + tableArr[j][k]._cellBeg = _cellBeg+1; tableArr[j][k]._cellEnd = _cellEnd-1; + if(_cellBeg == -1) break; + + tableArr[j][k].alignment = tableArr[j][k].rotate = ""; + tableArr[j][k].multiCol = tableArr[j][k].multiRow = ""; + tableArr[j][k].checkPassed = false; + tableArr[j][k].topline = tableArr[j][k].bottomline = tableArr[j][k].leftline = tableArr[j][k].rightline = false; + tableArr[j][k].createS1000D_entry = true; + QStringList cellAttr = lyxList[_cellBeg].split(" "); + for(int l=1; l",""); + if(cellAttrName == "alignment") + tableArr[j][k].alignment = cellAttrVal; + if(cellAttrName == "rotate") + tableArr[j][k].rotate = cellAttrVal; + if(cellAttrName == "multicolumn") tableArr[j][k].multiCol = cellAttrVal; + if(cellAttrName == "multirow") tableArr[j][k].multiRow = cellAttrVal; + if(cellAttrName == "topline") tableArr[j][k].topline = (cellAttrVal == "true"); + if(cellAttrName == "bottomline") tableArr[j][k].bottomline = (cellAttrVal == "true"); + if(cellAttrName == "leftline") tableArr[j][k].leftline = (cellAttrVal == "true"); + if(cellAttrName == "rightline") tableArr[j][k].rightline = (cellAttrVal == "true"); + } + + } //cols + } //rows + + // выявляем multicolumn, multirow + int lastHeadRow = 0; + for(int j=0;jitem->doc.createElement("spanspec"); + spanspec.toElement().setAttribute("namest", namest); + spanspec.toElement().setAttribute("nameend", nameend); + spanspec.toElement().setAttribute("spanname", spanname); + tgroup.appendChild(spanspec); + } + } + + QDomNode thead = SM->item->doc.createElement("thead"); + tgroup.appendChild(thead); + QDomNode tbody = SM->item->doc.createElement("tbody"); + tgroup.appendChild(tbody); + + // создаем dom из прочитанного + //bool rowToHead = true; + for(int j=0;jitem->doc.createElement("row"); + + //if(!multiRowFlag) rowToHead = false; + if(j <= lastHeadRow) { //j==0 || rowToHead + row.toElement().setAttribute("rowsep", "1"); + thead.appendChild(row); + } else { + row.toElement().setAttribute("rowsep", "0"); + tbody.appendChild(row); + } + + //bool multiRowFlag = false; + for(int k=0;kitem->doc.createElement("entry"); + row.appendChild(entry); + if(tableArr[j][k].alignment != "") + entry.toElement().setAttribute("align", tableArr[j][k].alignment); + if(tableArr[j][k].rotate != "") + entry.toElement().setAttribute("rotate", tableArr[j][k].rotate); + if(tableArr[j][k].spanname != "") + entry.toElement().setAttribute("spanname", tableArr[j][k].spanname); + + parseBlock(tableArr[j][k]._cellBeg+1, tableArr[j][k]._cellEnd-1, entry); + } //cols + //if(tableArr[j][k].multiRow != "") multiRowFlag = true; + } + } //rows + +// for(int j=0;jitem->doc.createElement("para"); + domCurLevelNode.appendChild(newParaNode); + domCurLevelNode = newParaNode; + } + continue; + } + + if(insetName == "Note Note") { + QStringList noteContent; + bool flag = false; + QString txt=""; + for(int j=_insetBeg+1;j<_insetEnd;j++) { + if(lyxList[j].startsWith("\\begin_layout Plain Layout")) { flag = true; txt = ""; continue; } + if(lyxList[j].startsWith("\\end_layout")) { flag = false; noteContent.append(txt); continue; } + if(lyxList[j] != "" && flag) txt += lyxList[j]; + } + if(noteContent.count() == 0) continue; + if(noteContent[0] == "Video") { // стр. 557 + QString oldfilename="", newfilename=""; + if(noteContent[1].startsWith("../")) noteContent[1] = noteContent[1].mid(3); + QString absfilename = QString(QFileInfo(curLyXFileName).absolutePath()+"/"+noteContent[1]); + if (QFile::exists(absfilename)) { + oldfilename = absfilename; + } else { + if (QFile::exists(noteContent[1])) { + oldfilename = noteContent[1]; + lyxLog.append("#["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Рекомендуется использовать относительные пути к файлам видео: "+noteContent[1]); + } + } + if(oldfilename == "") { + lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Файл видео не найден "+noteContent[1]); + SM->item->isQualifyed = false; + continue; + } + newfilename = SM->projectPath+"/"+ QFileInfo(oldfilename).fileName(); + if (QFile::exists(newfilename)) { + lyxLog.append("#["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Дублирование имен файлов видео: "+noteContent[1]); + //newfilename = SM->projectPath+"/"+ QFileInfo(oldfilename).fileName() + "("+QString::number(QRandomGenerator::global()->generate() % 0xFF)+")"; + } + if (QFile::exists(newfilename)) QFile::remove(newfilename); + if(!QFile::copy(oldfilename, newfilename)) + if(DBG) qDebug() << "lyx: Error copy" << oldfilename << "to" << newfilename; + + QDomNode multimedia = SM->item->doc.createElement("multimedia"); + domCurLevelNode.appendChild(multimedia); + QDomNode title = SM->item->doc.createElement("title"); + multimedia.appendChild(title); + title.appendChild(SM->item->doc.createTextNode(noteContent[2])); + QDomNode multimediaObject = SM->item->doc.createElement("multimediaObject"); + multimedia.appendChild(multimediaObject); + multimediaObject.toElement().setAttribute("infoEntityIdent", QFileInfo(newfilename).fileName()); + multimediaObject.toElement().setAttribute("multimediaType", "video"); + + continue; + } + + if(noteContent[0] == "3D") { + if(noteContent.length() < 4) { + lyxLog.append("#["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Ошибка подключения 3D: синтаксис - 3D / имя файла / титул / имя сценария."+noteContent[1]); + return; + } + //QString scfilename = QFileInfo(curLyXFileName).absolutePath()+"/"+ QFileInfo(noteContent[1]).path()+"/StreamingAssets/Scenario/"+QFileInfo(noteContent[3]).fileName(); + //if (!QFile::exists(scfilename)) { + // lyxLog.append("#["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Ошибка подключения 3D: файл сценария не найден ("+scfilename+")"); + // return; + //} + + QDomNode multimedia = SM->item->doc.createElement("multimedia"); + domCurLevelNode.appendChild(multimedia); + QDomNode title = SM->item->doc.createElement("title"); + multimedia.appendChild(title); + title.appendChild(SM->item->doc.createTextNode(noteContent[2])); + QDomNode multimediaObject = SM->item->doc.createElement("multimediaObject"); + multimedia.appendChild(multimediaObject); + multimediaObject.toElement().setAttribute("infoEntityIdent", noteContent[1]); + multimediaObject.toElement().setAttribute("multimediaType", "3D"); + QDomNode parameter = SM->item->doc.createElement("parameter"); + parameter.toElement().setAttribute("id", ""); + parameter.toElement().setAttribute("scenario", noteContent[3]); + multimediaObject.appendChild(parameter); + continue; + } + + //lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Неизвестные параметры заметки ("+noteContent[0]+")."); + //SM->item->isQualifyed = false; + continue; + } + + if(insetName == "Quotes rld") { + blockText += "«"; + continue; + } + if(insetName == "Quotes rrd") { + blockText += "»"; + continue; + } + + lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Неизвестная команда ("+itemName+")."); + SM->item->isQualifyed = false; + + //popFlags(); //??? + continue; + } + + if(itemName.startsWith("\\begin_")) { + lyxLog.append("!["+QString::number(i+lyxEmptyCnt[i])+"] Неизвестный блок ("+itemName+")."); + SM->item->isQualifyed = false; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + i = _childEnd; + continue; + } + lyxLog.append("!["+QString::number(i+lyxEmptyCnt[i])+"] Неизвестная команда ("+itemName+")."); + SM->item->isQualifyed = false; + } + + if(curSubsectionItem != -1) SM->items[curSubsectionItem].lyxLog = lyxLog; + + if(blockText != "") { + QDomNode blockTextNode = SM->item->doc.createTextNode(blockText); + QDomNode tmpCurNode = domCurLevelNode; + if(flags.bold) { + QDomNode emphasisNode = SM->item->doc.createElement("emphasis"); + tmpCurNode.appendChild(emphasisNode); tmpCurNode = emphasisNode; + } + if(flags.italic) { + QDomNode emphasisNode = SM->item->doc.createElement("emphasis"); + emphasisNode.toElement().setAttribute("emphasisType", "em02"); + tmpCurNode.appendChild(emphasisNode); tmpCurNode = emphasisNode; + } + if(flags.underlined) { + QDomNode emphasisNode = SM->item->doc.createElement("emphasis"); + emphasisNode.toElement().setAttribute("emphasisType", "em03"); //"em04" Overline, "em05" Strikethrough, "em51" - "em99" Available for projects + tmpCurNode.appendChild(emphasisNode); tmpCurNode = emphasisNode; + } + tmpCurNode.appendChild(blockTextNode); + } + popFlags(); + return; +} +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ END OF PARSE BLOCK ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +void LyX::appendChapter(QString title) { +// if(title == "") { +// title = "Имя главы не задано (создано автоматически)"; +// lyxLog.append("!Ошибка в структуре заголовков: "+title); +// SM->item->isQualifyed = false; +// } + docChapter++; docSection = docSubsection = -1; + cntTable = cntFigure = cntPar = 0; + //if(lyxLog.count() == 2) lyxLog.append("#Завершено без ошибок."); + if(curSubsectionItem != -1) SM->items[curSubsectionItem].lyxLog = lyxLog; + curChapterItem = SM->createPM(-1, -1); + SM->setCurItem(curChapterItem); + curSectionItem = curSubsectionItem = -1; + SM->item->fileName = QString::number(docChapter+1) + " " + title + ".xml"; // SM->projectPath + "/" + + SM->setNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle", title); + + //QString id = "par-"+QString::number(docChapter+1)+QString::number(docSection+1)+QString::number(docSubsection+1)+"0"; + tableOfContentsStruct tocItem; + tocItem.id = ""; tocItem.title = title; + tableOfContentsRoot.childs.append(tocItem); +} + +void LyX::appendSection(QString title) { +// if(title == "") { +// title = "Имя раздела не задано (создано автоматически)"; +// lyxLog.append("!Ошибка в структуре заголовков: "+title); +// } + docSection++; docSubsection = -1; + //if(lyxLog.count() == 2) lyxLog.append("#Завершено без ошибок."); + if(curSubsectionItem != -1) SM->items[curSubsectionItem].lyxLog = lyxLog; + curSectionItem = SM->createPM(curChapterItem, SM->items[curChapterItem].child.count()-1); + SM->setCurItem(curSectionItem); + curSubsectionItem = -1; + SM->item->fileName = QString::number(docChapter+1) + "." + QString::number(docSection+1) + " " + title + ".xml"; + SM->setNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle", title); + + //QString id = "par-"+QString::number(docChapter+1)+QString::number(docSection+1)+QString::number(docSubsection+1)++"0"; + tableOfContentsStruct tocItem; + tocItem.id = ""; tocItem.title = title; + tableOfContentsRoot.childs[docChapter].childs.append(tocItem); +} + +void LyX::appendSubsection(QString title) { +// if(title == "") { +// title = "Имя подраздела не задано (создано автоматически)"; +// lyxLog.append("!Ошибка в структуре заголовков: "+title); +// } + docSubsection++; + //if(lyxLog.count() == 2) lyxLog.append("#Завершено без ошибок."); + if(curSubsectionItem != -1) SM->items[curSubsectionItem].lyxLog = lyxLog; + //SM->item->fileName = QString::number(docChapter+1) + "." + QString::number(docSection+1) + "." + QString::number(docSubsection+1) + " " + title + ".xml"; + if(title.startsWith("~")) { + curSubsectionItem = SM->createDM(curSectionItem, SM->items[curSectionItem].child.count()-1, "LEARNING"); + title = title.mid(1); + } else + curSubsectionItem = SM->createDM(curSectionItem, SM->items[curSectionItem].child.count()-1, "DESCRIPT"); + SM->setCurItem(curSubsectionItem); + SM->item->fileName = QString::number(docChapter+1) + "." + QString::number(docSection+1) + "." + QString::number(docSubsection+1) + " " + title + ".xml"; + SM->setNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName", title); + + //QString id = "par-"+QString::number(docChapter+1)+QString::number(docSection+1)+QString::number(docSubsection+1)+QString::number(docSubsubsection+1); + + tableOfContentsStruct tocItem; + tocItem.id = ""; tocItem.title = title; + tableOfContentsRoot.childs[docChapter].childs[docSection].childs.append(tocItem); +} + +void LyX::checkForOldIdent() { + QDomDocument doc; + + QFile xmlFile(SM->projectPath + "/Backup/" + SM->item->fileName); + if (!xmlFile.open(QFile::ReadOnly | QFile::Text)) { + SM->item->isQualifyed = false; + return; + } + QByteArray fileData = xmlFile.readAll(); + xmlFile.close(); + doc.setContent(fileData); + + QString curST = QFileInfo(doc.documentElement().attribute("xsi:noNamespaceSchemaLocation", "")).baseName().toUpper(); + QString curMT = doc.documentElement().nodeName().toUpper(); + if(curMT == "DMODULE" && SM->item->moduleType != mtDM) return; + if(curMT == "PM" && SM->item->moduleType != mtPM) return; + if(SM->item->schemeType != SM->getSchemeTypeByStr(curST)) { + if(DBG) qDebug() << " Несоответствует тип схемы при импорте identAndStatusSection: " + SM->item->fileName; + return; + } + + QDomNode oldIdent; + oldIdent = doc.documentElement().namedItem("identAndStatusSection").cloneNode(); + if(oldIdent.isNull()) return; + SM->deleteNode("identAndStatusSection"); + SM->item->doc.importNode(oldIdent, true); + SM->item->doc.documentElement().insertBefore(oldIdent, SM->findElement("content")); + + QDomNode oldDescr = doc.documentElement().namedItem("rdf:Description").cloneNode(); + if(oldDescr.isNull()) return; + SM->deleteNode("rdf:Description"); + SM->item->doc.importNode(oldDescr, true); + SM->item->doc.documentElement().insertBefore(oldDescr, SM->findElement("identAndStatusSection")); + //SM->item->crewFlags = oldDescr.attributes().namedItem("flags").nodeValue().toInt(nullptr,16); + if(SM->item->isQualifyed) + SM->item->isQualifyed = (oldDescr.attributes().namedItem("qualifyed").nodeValue() == "true"); + + //if(DBG) qDebug() << " loaded ident from " + SM->projectPath + "/Backup/" + SM->item->fileName; +} + +void LyX::pushFlags() { + flagsStack.append(flags); +} + +void LyX::popFlags() { + if(flagsStack.count() == 0) return; + flags = flagsStack.takeLast(); +} + +void LyX::pushLyXFileData() { + fileStruct lyxFileData; + lyxFileData.fileName = curLyXFileName; + lyxFileData.lyxList = lyxList; + lyxFileStack.append(lyxFileData); +} + +void LyX::popLyXFileData() { + if(lyxFileStack.count() == 0) return; + fileStruct lyxFileData = lyxFileStack.takeLast(); + curLyXFileName = lyxFileData.fileName; + lyxList = lyxFileData.lyxList; +} + +void LyX::fillTableOfContents(tableOfContentsStruct tocNode, QDomNode domToCNode, QString deepSpaces) { + for(int i=0;iitem->doc.createElement("para"); + QDomText spaces = SM->item->doc.createTextNode(deepSpaces); + para.appendChild(spaces); + QDomNode internalRef = SM->item->doc.createElement("internalRef"); + internalRef.toElement().setAttribute("xlink:actuate", "onRequest"); + internalRef.toElement().setAttribute("xlink:show", "replace"); + internalRef.toElement().setAttribute("xlink:href", "#"+tocNode.childs[i].id); + internalRef.toElement().setAttribute("internalRefId", tocNode.childs[i].id); + internalRef.toElement().setAttribute("internalRefTargetType", "irtt07"); + para.appendChild(internalRef); + fillTableOfContents(tocNode.childs[i], para, deepSpaces+" "); + domToCNode.appendChild(para); + } +} + +void LyX::fillAcronymList(QDomNode domAcronymListNode) { + //QDomNode paraTitle = SM->item->doc.createElement("para"); + //domAcronymListNode.appendChild(paraTitle); paraTitle.appendChild(SM->item->doc.createTextNode(ru_const->acronymsList+"\n")); + QDomNode para = SM->item->doc.createElement("para"); + domAcronymListNode.appendChild(para); + QDomNode table = SM->item->doc.createElement("table"); + para.appendChild(table); + QDomNode tgroup = SM->item->doc.createElement("tgroup"); + tgroup.toElement().setAttribute("cols", "2"); + table.appendChild(tgroup); + QDomNode colspec = SM->item->doc.createElement("colspec"); + colspec.toElement().setAttribute("colwidth", "1*"); + tgroup.appendChild(colspec); + colspec = SM->item->doc.createElement("colspec"); + colspec.toElement().setAttribute("colwidth", "4*"); + tgroup.appendChild(colspec); + QDomNode tbody = SM->item->doc.createElement("tbody"); + tgroup.appendChild(tbody); + + QStringList sortedList; + for(int i=0;iitem->doc.createElement("row"); + tbody.appendChild(row); + + QDomNode entry = SM->item->doc.createElement("entry"); + row.appendChild(entry); + QDomNode para = SM->item->doc.createElement("para"); + entry.appendChild(para); +// QDomNode internalRef = SM->item->doc.createElement("internalRef"); +// internalRef.toElement().setAttribute("xlink:actuate", "onRequest"); +// internalRef.toElement().setAttribute("xlink:show", "replace"); +// internalRef.toElement().setAttribute("xlink:href", "#"+acronymList[j].id); +// internalRef.toElement().setAttribute("internalRefId", acronymList[j].id); +// QString refTarget = "irtt07"; +// internalRef.toElement().setAttribute("internalRefTargetType", refTarget); +// internalRef.appendChild(SM->item->doc.createTextNode(acronymList[j].term)); +// para.appendChild(internalRef); + para.appendChild(SM->item->doc.createTextNode(acronymList[j].term)); + entry = SM->item->doc.createElement("entry"); + row.appendChild(entry); + para = SM->item->doc.createElement("para"); + entry.appendChild(para); + para.appendChild(SM->item->doc.createTextNode(acronymList[j].definition)); + + break; + } + +} + +int LyX::parseLearningModule(QDomNode domLearnNode, int _learnBeg, int _learnMaxEnd) { + QString itemName, text; + int i, _lend; + bool isQuestion; + QString question; + QStringList answers; + + SM->setNodeText("content.learning.learningAssessment.title", ""); // что сюда поставить? + for(i=_learnBeg;i<=_learnMaxEnd;i++) { + itemName = lyxList[i]; + if(itemName == "") continue; + if(itemName == "\\begin_layout Standard") { + _lend = findTagEnd(i); + text = ""; isQuestion = false; + for(int j=i+1;j<_lend;j++) { + if(lyxList[j] == "") continue; + if(lyxList[j] == "\\series bold") { isQuestion = true; continue; } + text += lyxList[j]; + } + i = _lend; + if(!isQuestion && !text.startsWith("+") && !text.startsWith("-")) { + lyxLog.append("!["+QString::number(i+lyxEmptyCnt[i])+"] Неизвестный тип ответа ("+text+")"); + SM->item->isQualifyed = false; + continue; + } + if(isQuestion) { + if(question != "") { + addQuestInteraction(domLearnNode, question, answers); + question = ""; answers.clear(); + } + question = text; + continue; + } + answers.append(text); + continue; + } + break; + } + if(question != "") + addQuestInteraction(domLearnNode, question, answers); + + return i-1; +} + +void LyX::addQuestInteraction(QDomNode domLearnNode, QString question, QStringList answers) { + if(!SM->isConsole) splash->Step(); + int correctAnswers=0; + foreach (QString s, answers) + if(s.startsWith("+")) correctAnswers++; + if(answers.count() == 0) { + lyxLog.append("! Отсутствуют ответы к вопросу ("+question+")"); + SM->item->isQualifyed = false; + return; + } + if(correctAnswers == 0) { + lyxLog.append("! Кол-во верных ответов = 0 ("+question+")"); + SM->item->isQualifyed = false; + return; + } + +// question = questLyXtoHTML(question); +// for(int i=0;iitem->doc.createElement("lcInteraction"); + domLearnNode.appendChild(lcInteraction); + QDomNode lcSelect; + QString lcName; + if(correctAnswers == 1) + lcName = "lcSingleSelect"; + else + lcName = "lcMultipleSelect"; + lcSelect = SM->item->doc.createElement(lcName); + lcInteraction.appendChild(lcSelect); + lcSelect.toElement().setAttribute("lcName", lcName); + QDomNode lcQuestion = SM->item->doc.createElement("lcQuestion"); + lcSelect.appendChild(lcQuestion); + QDomNode questdescription = SM->item->doc.createElement("description"); + lcQuestion.appendChild(questdescription); + QDomNode questpara = SM->item->doc.createElement("para"); + questdescription.appendChild(questpara); + questpara.appendChild(SM->item->doc.createTextNode(question)); + + QDomNode lcAnswerOptionGroup = SM->item->doc.createElement("lcAnswerOptionGroup"); + lcSelect.appendChild(lcAnswerOptionGroup); + bool isCorrect; + foreach (QString s, answers) { + if(!s.startsWith("+") && !s.startsWith("-")) lyxLog.append("# Ответ должен начинаться со знака +/- ("+s+"). Учтен как отрицательный."); + isCorrect = s.startsWith("+"); + s = s.mid(1); + if(s.startsWith(" ")) s = s.mid(1); + + QDomNode lcAnswerOption = SM->item->doc.createElement("lcAnswerOption"); + lcAnswerOptionGroup.appendChild(lcAnswerOption); + QDomNode lcAnswerOptionContent = SM->item->doc.createElement("lcAnswerOptionContent"); + lcAnswerOption.appendChild(lcAnswerOptionContent); + QDomNode answerdescription = SM->item->doc.createElement("description"); + lcAnswerOptionContent.appendChild(answerdescription); + QDomNode answerpara = SM->item->doc.createElement("para"); + answerdescription.appendChild(answerpara); + answerpara.appendChild(SM->item->doc.createTextNode(s)); + if(isCorrect) { + QDomNode lcCorrectResponse = SM->item->doc.createElement("lcCorrectResponse"); + lcAnswerOption.appendChild(lcCorrectResponse); + lcCorrectResponse.toElement().setAttribute("lcName", "lcCorrectResponse"); + } + } +} + +void LyX::connectRefsWithLabels() { + int i, j; + for(i=0;i= labelList.count()) { + SM->items[refList[i].itemInd].lyxLog.append("!["+QString::number(refList[i].lineNum)+"] Ссылка на неизвестную метку: "+refList[i].lyxRef); + qDebug() << "Ref to unknown label["+QString::number(refList[i].lineNum)+"]: "+refList[i].lyxRef; + } + else { + labelList[j].used = true; refList[i].labelFound = true; + SM->setCurItem(refList[i].itemInd); + + + QDomNode oldrefNode = SM->getNodeFromXPath(refList[i].nodeXPath); + + if(oldrefNode.isNull()) { + qDebug() << "ref "+refList[i].lyxRef+" ignored - refNode.isNull():" << refList[i].nodeXPath << SM->items[refList[i].itemInd].fileName; + refNode = SM->getNodeFromXPath(refList[i].nodeXPath, true); + continue; + } + + if(!oldrefNode.nodeName().startsWith("blankRefNode")) + qDebug() << "Rename "+oldrefNode.nodeName()+" to REF("+refList[i].nodeXPath+")"; + + if(refList[i].itemInd == labelList[j].itemInd) { + QString refID = labelList[j].id; // ссылка внутри модуля данных + + refNode = SM->item->doc.createElement("internalRef"); + oldrefNode.parentNode().replaceChild(refNode, oldrefNode); + refNode.toElement().setAttribute("xlink:actuate", "onRequest"); + refNode.toElement().setAttribute("xlink:show", "replace"); + refNode.toElement().setAttribute("xlink:href", "#"+refID); + refNode.toElement().setAttribute("internalRefId", refID); + QString refTarget = "irtt07"; + if(refID.left(3) == "fig") refTarget = "irtt01"; + if(refID.left(3) == "tab") refTarget = "irtt02"; + if(refID.left(3) == "par") refTarget = "irtt07"; + if(refID.left(3) == "mma") refTarget = "irtt03"; + if(refID.left(3) == "fig" && refID.mid(9,3) == "hot") refTarget = "irtt11"; + refNode.toElement().setAttribute("internalRefTargetType", refTarget); + + //qDebug() << "Internal ref["+QString::number(refList[i].lineNum)+"]:" << labelList[j].id; + + } else { // ссылка на внешний модуль + refNode = SM->item->doc.createElement("dmSegmentRef"); + oldrefNode.parentNode().replaceChild(refNode, oldrefNode); + + + //QString tPath = "//"+labelList[j].nodeName+"[@id='"+labelList[j].id+"']"; //SM->makeXPathToNode(labelNode); // //title[@lang='en'] + + refNode.toElement().setAttribute("targetPath", labelList[j].nodeXPath); + + SM->setCurItem(refList[i].itemInd); + QDomElement dmRefIdent = SM->item->doc.createElement("dmRefIdent"); + refNode.appendChild(dmRefIdent); + QDomElement dmCode = SM->item->doc.createElement("dmCode"); + dmRefIdent.appendChild(dmCode); + + SM->setCurItem(labelList[j].itemInd); + QDomNode labelDMNode = SM->findElement("identAndStatusSection.dmAddress.dmIdent.dmCode"); + SM->setCurItem(refList[i].itemInd); + for(int k=0;kitem->doc.createElement("issueInfo"); + dmRefIdent.appendChild(issueInfo); + issueInfo.setAttribute("inWork", SM->ru_const.inWork); + issueInfo.setAttribute("issueNumber", SM->ru_const.issueNumber); + QDomElement language = SM->item->doc.createElement("language"); + dmRefIdent.appendChild(language); + language.setAttribute("languageIsoCode", SM->ru_const.languageIsoCode); + language.setAttribute("countryIsoCode", SM->ru_const.countryIsoCode); + + SM->setCurItem(labelList[j].itemInd); + QString techName = SM->findElement("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName").childNodes().at(0).toText().data(); + QString infoName = SM->findElement("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName").childNodes().at(0).toText().data(); + SM->setCurItem(refList[i].itemInd); + + QDomElement dmRefAddressItems = SM->item->doc.createElement("dmRefAddressItems"); + refNode.appendChild(dmRefAddressItems); + QDomElement dmTitle = SM->item->doc.createElement("dmTitle"); + dmRefAddressItems.appendChild(dmTitle); + QDomElement dmTechName = SM->item->doc.createElement("techName"); + dmTitle.appendChild(dmTechName); + dmTechName.appendChild(SM->item->doc.createTextNode(techName)); + QDomElement dmInfoName = SM->item->doc.createElement("infoName"); + dmTitle.appendChild(dmInfoName); + dmInfoName.appendChild(SM->item->doc.createTextNode(infoName)); + + //qDebug() << "External ref["+QString::number(refList[i].lineNum)+"]:" << labelList[j].id << labelList[j].lyxLabel << labelList[j].itemInd << refList[i].itemInd; + } + } + + } + + for(j=0;jitems[labelList[j].itemInd].lyxLog.append("#["+QString::number(labelList[j].lineNum)+"] Неиспользуемая метка: "+labelList[j].lyxLabel); + //qDebug() << "Label not used ["+QString::number(labelList[j].lineNum)+"]: "+labelList[j].id; + } +} + + + +//QString LyX::questLyXtoHTML(QString answer) { +// // функция пока не используется +// qDebug() << answer; +// QString sb, se; +// int _end, _beg; +// while(1) { +// sb = "\\begin_inset script superscript\\begin_layout Plain Layout"; +// se = "\\end_layout\\end_inset"; +// _beg = answer.indexOf(sb); +// if(_beg != -1) { +// //QString innertext = answer.mid(_beg+sb.length(), _end-_beg-sb.length()); +// answer = answer.replace(_beg, sb.length(), ""); +// _end = answer.indexOf(se, _beg); +// answer = answer.replace(_end, se.length(), ""); +// continue; +// } + +// sb = "\\begin_inset script subscript\\begin_layout Plain Layout"; +// se = "\\end_layout\\end_inset"; +// _beg = answer.indexOf(sb); +// if(_beg != -1) { +// answer = answer.replace(_beg, sb.length(), ""); +// _end = answer.indexOf(se, _beg); +// answer = answer.replace(_end, se.length(), ""); +// continue; +// } +// break; +// } +// qDebug() << " "+answer; +// return answer; +//} + + +QDomNode LyX::searchSVGNodeForSpanNode(QDomNode node) { + if(node.nodeName() == "tspan") + return node; + QDomNode nd; + for(int j=0;j +// +#include +#include "s1000d_manager.h" +#include "splashform.h" + +class LyX { +public: + struct tableOfContentsStruct { + QString id, title; + QList childs; + } tableOfContentsRoot; + + LyX(); + bool Import(S1000D_Manager* SM, QString fileName, SplashForm* splash); + bool readLyXFile(QString fileName); + void checkForOldIdent(); + void parseBlock(int _beg, int _end, QDomNode domCurLevelNode); + void parseInset(int _beg, int _end); + int findTagEnd(int _beg); + int findTag(int _beg, int _end, QString startsWithName); + void pushFlags(); + void popFlags(); + void pushLyXFileData(); + void popLyXFileData(); + void appendChapter(QString title); + void appendSection(QString title); + void appendSubsection(QString title); + void fillTableOfContents(tableOfContentsStruct tocNode, QDomNode domToCNode, QString deepSpaces); + void fillAcronymList(QDomNode domAcronymListNode); + int parseLearningModule(QDomNode domLearnNode, int _learnBeg, int _learnMaxEnd); +// QString questLyXtoHTML(QString answer); + void addQuestInteraction(QDomNode domLearnNode, QString question, QStringList answers); + QDomNode searchSVGNodeForSpanNode(QDomNode node); + void connectRefsWithLabels(); + + QStringList lyxList; + QStringList lyxLog; + QString curLyXFileName; //, domContentPath; + //QString curXmlFileName; + QString projPath; + QDomNode domRootNode, domTableOfContentsNode, domAcronymListNode; + int tocItemNum, acrListItemNum; + QString tableTitle, tableID, figureTitle, figureID; + + S1000D_Manager* SM; + SplashForm* splash; + bool DBG = true; + struct flagsStruct { + QString align; + bool bold, italic, underlined; + } flags; + QList flagsStack; + struct acronymStruct { + QString lyxFootnoteName, id, term, definition; + }; + QList acronymList; + struct labelStruct { + int itemInd; + QString lyxLabel, id; + bool defined = false; + bool used = false; + QString nodeXPath; + int lineNum; + }; + QList labelList; + struct refStruct { + int itemInd; + QString lyxRef; + bool labelFound; + QString nodeXPath; + int lineNum; + }; + QList refList; + int cntTable, cntFigure, cntPar; + + struct cellStruct { + int _cellBeg, _cellEnd; + QString colname, spanname, multiCol, multiRow; + bool topline, bottomline, leftline, rightline, checkPassed; + bool createS1000D_entry; + QString alignment, rotate; + }; + + struct fileStruct { + QString fileName; + QStringList lyxList; + }; + QList lyxFileStack; + QStringList internalRefList; + + RU_Const* ru_const; + + + int docChapter, docSection, docSubsection;//, docSubsubsection; + int curChapterItem, curSectionItem, curSubsectionItem; + + QList lyxEmptyCnt; +}; +#endif // LYX_H diff --git a/s1000d/Converter14_Source/main.cpp b/s1000d/Converter14_Source/main.cpp new file mode 100644 index 0000000..8e29cca --- /dev/null +++ b/s1000d/Converter14_Source/main.cpp @@ -0,0 +1,26 @@ +#include "editormainwindow.h" +#include "console.h" +#include +#ifdef _WIN32 + #include +#endif +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + setlocale(LC_ALL,"Russian"); + if(argc == 1) + { +#ifdef _WIN32 + ShowWindow(GetConsoleWindow(), 0); +#endif + EditorMainWindow w; + w.show(); + return a.exec(); + } + else + { + console c; + c.exec(argc, argv); + return 0; + } +} diff --git a/s1000d/Converter14_Source/ru_const.cpp b/s1000d/Converter14_Source/ru_const.cpp new file mode 100644 index 0000000..4daea95 --- /dev/null +++ b/s1000d/Converter14_Source/ru_const.cpp @@ -0,0 +1,205 @@ +#include +#include +#include "ru_const.h" + +void RU_Const::Init_RU_Const() { + companyName = "АО «Вертолеты России»"; + modelIdentCode = "MI38"; pmIssuer = "RHC01"; + languageIsoCode = "ru"; countryIsoCode = "RU"; + inWork = "01"; issueNumber = "000"; + security_securityClassification = "01"; + responsiblePartnerCompany_enterpriseCode="CAGEC"; responsiblePartnerCompany_enterpriseName = "АО «ВСК»"; + originator_enterpriseCode = "CAGEC"; originator_enterpriseName = "АО ЦНТУ «Динамика»"; + copyrightPara = "© 2017 АО «Вертолеты России»"; + tableOfContents = "Содержание"; acronymsList = "Перечень сокращений"; + htmlButtonLearned = "ИЗУЧЕНО"; + tableTitle = "Таблица"; tableShortTitle = "таб."; figureTitle = "Рисунок"; figureShortTitle = "рис."; + testQuestions = "Контроль знаний"; + icn_variantCode = "R"; // A — для ГМК, в котором нет объектов для локализации/перевода + // R — для ГМК на русском языке + // E — для ГМК на английском языке + crew.append("КВС"); crew.append("2П"); crew.append("ИВД"); crew.append("ИАО"); crew.append("ИРЭО"); crew.append("ИТО"); crew.append("БП"); crew.append("БО"); + + addPMCode("GTC", "01", "00", "АУК ОБЩЕГО ПРИМЕНЕНИЯ", "ВОЗДУШНОЕ ПРАВО", ""); + addPMCode("GTC", "02", "00", "АУК ОБЩЕГО ПРИМЕНЕНИЯ", "МЕТЕОРОЛОГИЯ", ""); + addPMCode("GTC", "03", "00", "АУК ОБЩЕГО ПРИМЕНЕНИЯ", "АВИАЦИОННАЯ БЕЗОПАСНОСТЬ", ""); + addPMCode("GTC", "04", "00", "АУК ОБЩЕГО ПРИМЕНЕНИЯ", "ПРАВИЛА ПЕРЕВОЗКИ ГРУЗОВ", ""); + addPMCode("GTC", "05", "00", "АУК ОБЩЕГО ПРИМЕНЕНИЯ", "ЧЕЛОВЕЧЕСКИЙ ФАКТОР (CRM)", ""); + addPMCode("GTC", "06", "00", "АУК ОБЩЕГО ПРИМЕНЕНИЯ", "ПРОТИВООБЛЕДЕНИТЕЛЬНАЯ ЗАЩИТА ВС НА ЗЕМЛЕ", ""); + addPMCode("GTC", "07", "00", "АУК ОБЩЕГО ПРИМЕНЕНИЯ", "АВАРИЙНО-СПАСАТЕЛЬНАЯ ПОДГОТОВКА (ВОДА И СУША)", ""); + addPMCode("GTC", "08", "00", "АУК ОБЩЕГО ПРИМЕНЕНИЯ", "ПРАВИЛА ТЕХНИЧЕСКОГО ОБСЛУЖИВАНИЯ", ""); + addPMCode("FTC", "01", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "ПРАКТИЧЕСКАЯ АЭРОДИНАМИКА", ""); + addPMCode("FTC", "02", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "ЛЕТНАЯ ЭКСПЛУАТАЦИЯ", ""); + addPMCode("FTC", "03", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "БЕЗОПАСНОСТЬ ПОЛЕТОВ", ""); + addPMCode("FTC", "04", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "ВОЗДУШНАЯ НАВИГАЦИЯ", ""); + addPMCode("FTC", "05", "01", "АУК ЛЕТНОГО ПЕРСОНАЛА", "ВАРИАНТЫ ПРИМЕНЕНИЯ", "(НЕБОЕВЫЕ)"); + addPMCode("FTC", "05", "02", "АУК ЛЕТНОГО ПЕРСОНАЛА", "ВАРИАНТЫ ПРИМЕНЕНИЯ", "(БОЕВЫЕ)"); + addPMCode("FTC", "06", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "КОНСТРУКЦИЯ ВЕРТОЛЕТА И ЕГО СИСТЕМЫ", "ОПИСАНИЕ И ЭКСПЛУАТАЦИЯ"); + addPMCode("FTC", "07", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "КОНСТРУКЦИЯ СИЛОВОЙ УСТАНОВКИ", "ОПИСАНИЕ И ЭКСПЛУАТАЦИЯ"); + addPMCode("FTC", "08", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "АВИАЦИОННОЕ ОБОРУДОВАНИЕ", "ОПИСАНИЕ И ЭКСПЛУАТАЦИЯ"); + addPMCode("FTC", "09", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "РАДИОЭЛЕКТРОННОЕ ОБОРУДОВАНИЕ", "ОПИСАНИЕ И ЭКСПЛУАТАЦИЯ"); + addPMCode("FTC", "10", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "АВИАЦИОННОЕ ВООРУЖЕНИЕ", "ОПИСАНИЕ И ЭКСПЛУАТАЦИЯ"); + addPMCode("FTC", "11", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "АВАРИЙНО-СПАСАТЕЛЬНЫЕ СРЕДСТВА", "ОПИСАНИЕ И ЭКСПЛУАТАЦИЯ"); + addPMCode("FTC", "12", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "ДЕСАНТНО-ТРАНСПОРТНОЕ ОБОРУДОВАНИЕ", "ОПИСАНИЕ И ЭКСПЛУАТАЦИЯ"); + addPMCode("MTC", "01", "01", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "КОНСТРУКЦИЯ ВЕРТОЛЕТА И ЕГО СИСТЕМЫ", "ТЕХНИЧЕСКОЕ ОПИСАНИЕ"); + addPMCode("MTC", "01", "02", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "КОНСТРУКЦИЯ ВЕРТОЛЕТА И ЕГО СИСТЕМЫ", "ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ"); + addPMCode("MTC", "02", "01", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "КОНСТРУКЦИЯ СИЛОВОЙ УСТАНОВКИ", "ТЕХНИЧЕСКОЕ ОПИСАНИЕ"); + addPMCode("MTC", "02", "02", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "КОНСТРУКЦИЯ СИЛОВОЙ УСТАНОВКИ", "ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ"); + addPMCode("MTC", "03", "01", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "АВИАЦИОННОЕ ОБОРУДОВАНИЕ", "ТЕХНИЧЕСКОЕ ОПИСАНИЕ"); + addPMCode("MTC", "03", "02", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "АВИАЦИОННОЕ ОБОРУДОВАНИЕ", "ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ"); + addPMCode("MTC", "04", "01", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "РАДИОЭЛЕКТРОННОЕ ОБОРУДОВАНИЕ", "ТЕХНИЧЕСКОЕ ОПИСАНИЕ"); + addPMCode("MTC", "04", "02", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "РАДИОЭЛЕКТРОННОЕ ОБОРУДОВАНИЕ", "ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ"); + addPMCode("MTC", "05", "01", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "АВИАЦИОННОЕ ВООРУЖЕНИЕ", "ТЕХНИЧЕСКОЕ ОПИСАНИЕ"); + addPMCode("MTC", "05", "02", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "АВИАЦИОННОЕ ВООРУЖЕНИЕ", "ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ"); + addPMCode("MTC", "06", "01", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "АВАРИЙНО-СПАСАТЕЛЬНЫЕ СРЕДСТВА", "ТЕХНИЧЕСКОЕ ОПИСАНИЕ"); + addPMCode("MTC", "06", "02", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "АВАРИЙНО-СПАСАТЕЛЬНЫЕ СРЕДСТВА", "ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ"); + addPMCode("MTC", "07", "01", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "ДЕСАНТНО-ТРАНСПОРТНОЕ ОБОРУДОВАНИЕ", "ТЕХНИЧЕСКОЕ ОПИСАНИЕ"); + addPMCode("MTC", "07", "02", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "ДЕСАНТНО-ТРАНСПОРТНОЕ ОБОРУДОВАНИЕ", "ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ"); + addPMCode("MTC", "11", "XX", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "ОБЩИЕ ПРОЦЕДУРЫ", ""); + + addPMCodesRTC("01", "КОНСТРУКЦИЯ ВЕРТОЛЕТА И ЕГО СИСТЕМЫ"); + addPMCodesRTC("02", "СИЛОВАЯ УСТАНОВКА"); + addPMCodesRTC("03", "РАДИОЭЛЕКТРОННОЕ ОБОРУДОВАНИЕ"); + addPMCodesRTC("04", "АВИАЦИОННОЕ ОБОРУДОВАНИЕ"); + addPMCodesRTC("05", "АВИАЦИОННОЕ ВООРУЖЕНИЕ"); + addPMCodesRTC("06", "АВАРИЙНО-СПАСАТЕЛЬНЫЕ СРЕДСТВА"); + addPMCodesRTC("07", "ДЕСАНТНО-ТРАНСПОРТНЫЕ СРЕДСТВА"); + addPMCodesRTC("11", "ОБЩИЕ ПРОЦЕДУРЫ"); + + addPMCode("PTC", "XX", "00", "АУК ПРОИЗВОДСТВЕННОГО ПЕРСОНАЛА", "(самостоятельно определить тему)", ""); + + addDMCode("Техническое обслуживание", "Описание и работа систем", + "

Модули данных по каждой системе/подсистеме ВС. Задача этих модулей дать полную информацию о конструкции и функционировании систем ВС.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-XX-XX-00-NNA-040A-A_T40C (Наименование системы или подсистемы – Описание и работа), где:

YY-Y: идентификационный код модели и отличительный код системы

XX-XX: код стандартной системы нумерации

NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям, членам экипажа), начиная с 01.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-XX-XX-00-NNA-040A-A_T80E (Наименование системы или подсистемы – Контроль знаний: Описание и работа)

", + "DESCRIPT", "YY-A-XX-XX-00-NNA-040A-A_T40C", "T80E", "Наименование системы или подсистемы", "Описание и работа" ); + addDMCode("Техническое обслуживание", "Описание и работа компонентов", + "

Модули данных по компонентам систем/подсистем ВС, которые обладают сложной конструкцией и внутренней работой. Задача этих модулей дать полную информацию о конструкции и функционировании таких компонентов. Используйте эти модули данных только, если информации, раскрытой в описании системы, не достаточно для полного понимания принципов работы. Обычно, такие компоненты требуют технического обслуживания с разборкой.

ЗАПРЕЩАЕТСЯ ИСПОЛЬЗОВАТЬ ССЫЛКИ НА МЕСТО ЭТОГО КОМПОНЕНТА В СИСТЕМЕ. ИНФОРМАЦИЯ ДОЛЖНА БЫТЬ АВТОНОМНОЙ, РАСКРЫВАЮЩЕЙ ТОЛЬКО ВНУТРЕННЕЕ ФУНКЦИОНИРОВАНИЕ.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-XX-XX-XX-NNA-040A-A_T40C (Наименование компонента – Описание и работа),

где:

YY-Y: идентификационный код модели и отличительный код системы

XX-XX-XX: код стандартной системы нумерации

NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям, членам экипажа), начиная с 01.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-XX-XX-XX-NNA-040A-A_T80E (Наименование компонента – Контроль знаний: Описание и работа)

", + "DESCRIPT", "YY-A-XX-XX-XX-NNA-040A-A_T40C", "T80E", "Наименование компонента", "Описание и работа" ); + addDMCode("Техническое обслуживание", "Планирование ТО", + "

Модули данных по планированию технического обслуживания.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-05-4X-00-NNA-0B0A-A_T40C (Вид технического обслуживания – Информация по планированию технического обслуживания), где:

YY-Y: идентификационный код модели и отличительный код системы

4X: где X последовательная нумерация видов ТО

NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям, членам экипажа), начиная с 01.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-05-4X-00-NNA-0B0A-A_T80E (Вид технического обслуживания – Контроль знаний: Информация по планированию технического обслуживания)

", + "DESCRIPT", "YY-A-05-4X-00-NNA-0B0A-A_T40C", "T80E", "Вид технического обслуживания", "Информация по планированию технического обслуживания" ); + addDMCode("Техническое обслуживание", "Общие меры безопасности", + "

Модули данных по специальным общим мерам безопаности для типа ВС.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-00-20-00-NNA-012A-A_T40C (Меры безопасности – Общие предупреждения и предостережения), где:

YY-Y: идентификационный код модели и отличительный код системы

NN: 00, или если требуется более одного модуля данных, начиная с 01.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-00-20-00-NNA-012A-A_T80E (Меры безопасности – Контроль знаний: Общие предупреждения и предостережения)

", + "DESCRIPT", "YY-A-00-20-00-NNA-012A-A_T40C", "T80E", "Меры безопасности", "Общие предупреждения и предостережения" ); + addDMCode("Техническое обслуживание", "Процедуры ТО", + "

Модули данных по процедурам технического обслуживания для типа ВС.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-XX-XX-XX-NNA-ZZZZ-Q_T40C (Процедуры ТО – Информационное имя), где:

YY-Y: идентификационный код модели и отличительный код системы

XX-XX-XX, принятая стандартной системы нумерации

NN: 00, или если требуется более одного модуля данных, начиная с 01.

ZZZZ: информационный код и его вариант.

Q: код расположения.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-XX-XX-XX-NNA-ZZZZ-Q_T80E (Процедуры ТО – Контроль знаний: Информационное имя)

", + "DESCRIPT", "YY-A-XX-XX-XX-NNA-ZZZZ-Q_T40C", "T80E", "Процедуры ТО", "Информационное имя" ); + addDMCode("Техническое обслуживание", "Средства материально-технического обеспечения", + "

Модули данных с информацией по КПА, вспомогательному оборудованию, инструменту и расходуемым материалам.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-00-00-00-NNA-ZZZA-A_T40C (Воздушное судно – Информационное имя), где:

YY-Y: идентификационный код модели и отличительный код системы

NN: 00, или если требуется более одного модуля данных (например, разделить перечни по специальностям), начиная с 01.

ZZZ: 060 — Вспомогательное оборудование, инструмент и программное

обеспечение, 070 — Расходуемые материалы.

ЗАПРЕЩЕНО ОПИСЫВАТЬ ПРОЦЕДУРЫ ПРОВЕРОК ОБОРУДОВАНИЯ ВС В ЭТИХ МОДУЛЯХ.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-00-00-00-NNA-ZZZA-A_T80E (Воздушное судно – Контроль знаний: Информационное имя)

", + "DESCRIPT", "YY-A-00-00-00-NNA-ZZZA-A_T40C", "T80E", "Воздушное судно", "Информационное имя" ); + addDMCode("Техническое обслуживание", "Общие процедуры", + "

Модули данных с осщей информацией по обращению с ВС в целом.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-ХХ-XX-XX-NNA-ZZZA-A_T40C (Наименование темы – Информационное имя), где:

YY-Y: идентификационный код модели и отличительный код системы

ХХ-XX-XX: 00, Согласно классификации ГОСТ 18675–2012, для систем 07, 08, 09, 10, 12, 15, 16.

NN: 00, или если требуется более одного модуля данных (например, разделить перечни по специальностям), начиная с 01.

ZZZ: — Согласно классификации ГОСТ 18675–2012.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-ХХ-XX-XX-NNA-ZZZA-A_T80E (Наименование темы – Контроль знаний: Информационное имя)

", + "DESCRIPT", "YY-A-ХХ-XX-XX-NNA-ZZZA-A_T40C", "T80E", "Наименование темы", "Информационное имя" ); + addDMCode("Общая информация и данные", "Служебные и вводные данные", + "

Модули данных по правилам подготовки и кодирования служебой и вводной информации.

Коды модулей данных должны иметь следующую структуру:

- YY-Y-00-47-XX-NNA-XXXX-A_T40C (Наименование АУК – Информационное имя), где:

YY-Y: идентификационный код модели и отличительный код системы

XX:

00 – Автоматизированные учебные курсы

01 – Автоматизированные учебные курсы (летный персонал)

02 – Автоматизированные учебные курсы (технический персонал)

03 – Автоматизированные учебные курсы (ремонтный персонал)

04 – Автоматизированные учебные курсы (производственный персонал)

NN: 00, или если требуется более одного модуля данных (для каждого конкретного АУК), начиная с 01.

XXX: информационный код и его вариант:

001A — Титульный лист

00UA — Внесенные изменения

009A — Содержание

009B — Поиск по курсу

018A — Введение

023A — Административные формы и данные

", + "DESCRIPT", "YY-A-00-47-XX-NNA-XXXX-A_T40C", "T80E", "Наименование АУК", "Информационное имя" ); + addDMCode("Общая информация и данные", "Общие сведения о ВС", + "

Модули данных для описания ВС в целом, чтобы дать общее представление о назначении, конструкции, составе оборудования ВС.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-00-00-00-NNA-010A-A_T40C (Воздушное судно – Общие данные), где:

YY-Y: идентификационный код модели и отличительный код системы

NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям, членам экипажа), начиная с 01.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-00-00-00-NNA-010A-A_T80E (Воздушное судно – Контроль знаний: Общие данные)

", + "DESCRIPT", "YY-A-00-00-00-NNA-010A-A_T40C", "T80E", "Воздушное судно", "Общие данные" ); + addDMCode("Общая информация и данные", "Нормативные требования авиации", + "

Модули данных, относящиеся к общим дисциплинам авиационной деятельности и ее тематикам.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-00-7X-XXXX-NNZ-010A-A_T40C (Наименование документа/раздела – Общие данные), где:

YY-Y – идентификационный код модели и отличительный код системы:

RHCT-A — для модулей данных нормативного характера Холдинга “Вертолеты России”

RHCT-B — для модулей данных общего применения международного характера

RHCT-C — для модулей данных общего применения на территории РФ

RHCT-D и далее — для модулей данных общего применения на территории иностранных государств

YY-Y — для модулей данных, применимых к конкретному типу ВС

7X — категории авиационных требований:

71 – авиационные требования общего назначения

72 – авиационные требования гражданской авиации

73 – авиационные требования государственной авиации

74 – авиационные требования экспериментальной авиации

XXXX – последовательная нумерация регламентирующих документов

NN – последовательная нумерация/классификация разделов, согласно структуре исходного документа

Z – один буквенно-цифровой символ для дополнительного разделения информации, начиная c “A”.

В случае использования информации, относящейся к конкретному типу ВС необходимо:

определить категорию и нормативный документ регламентирующий учебную тему

определить тему по соответствующему нормативному документу

если код документа не присвоен, обратиться к организации, ответственной за выпуск Настоящих правил, за присвоением последовательного кода документа

присвоить код МД:

использовать идентификационный код модели и отличительный код системы дляданного типа ВС

использовать категорию (7X) и код документа (XXXX)

использовать номер раздела документа (NN).

ПРИМЕР:

MI171-A: информация по вертолету Ми-171

72-0017: Правила расследования авиационных происшествий и инцидентов (ПРАПИ-98)

03: Расследование авиационных происшествий

Полный код модуля в этом случае: MI171-A-00-72-0017-03A-010A-A-T40C

Наименование модуля модуля в этом случае: (Расследование авиационных происшествий — Общие данные).

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-00-7X-XXXX-NNZ-010A-A_T80E (Наименование документа/раздела – Контроль знаний: Общие данные)

", + "DESCRIPT", "YY-A-00-7X-XXXX-NNZ-010A-A_T40C", "T80E", "Наименование документа/раздела", "Общие данные" ); + addDMCode("Технологии ремонта", "Организация ремонта", + "

Модули данных по общим задачам организации ремонта. Материал нацелен на руководящий состав, который должен обладать знаниями по принципам организации ремонта, его этапам, необходимым организационным мероприятиям, оснащению, требования к персоналу.

Коды модулей данных должны иметь следующую структуру:

- YY-Y-00-6Х-ХХ-NNA-010A-A_T40C (Ремонт – Общие данные), где:

YY-Y: идентификационный код модели и отличительный код системы

6Х:

0 – Ремонт

1 – Средний ремонт

2 – Капитальный ремонт

ХХ: Тема внутри задач организации ремонта

NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям), начиная с 01.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-00-6Х-ХХ-NNA-010A-A_T80E (Ремонт – Общие данные)

", + "DESCRIPT", "YY-A-00-6Х-ХХ-NNA-010A-A_T40C", "T80E", "Ремонт", "Общие данные" ); + addDMCode("Технологии ремонта", "Ремонт конструкций планера", + "

Модули данных по технологиям ремонта конструкций планера. Материал нацелен на персонал рабочих специальностей, который должен обладать знаниями по технологическим операциям выполнения ремонта на различных этапах.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-5Х-ХХ-ХХ-NNA-ZZZA-A_T40C (Наименование темы – Информационное имя), где:

YY-Y: идентификационный код модели и отличительный код системы

5Х-ХХ-ХХ: согласно классификатору ГОСТ 18675-2012

NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям) или компоненты разборки основных узлов, начиная с 01.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-5Х-ХХ-ХХ-NNA-ZZZA-A_T80E (Наименование темы – Информационное имя)


", + "DESCRIPT", "YY-A-5Х-ХХ-ХХ-NNA-ZZZA-A_T40C", "T80E", "Наименование темы", "Информационное имя" ); + addDMCode("Технологии ремонта", "Ремонт силовой установки", + "

Модули данных по технологиям ремонта конструкции силовой установки. Материал нацелен на персонал рабочих специальностей, который должен обладать знаниями по технологическим операциям выполнения ремонта на различных этапах.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-7Х-ХХ-ХХ-NNA-ZZZA-A_T40C (Наименование темы – Информационное имя), где:

YY-Y: идентификационный код модели и отличительный код системы

7Х-ХХ-ХХ: согласно классификатору ГОСТ 18675-2012

NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям) или компоненты разборки основных узлов, начиная с 01.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-7Х-ХХ-ХХ-NNA-ZZZA-A_T80E (Наименование темы – Информационное имя)

", + "DESCRIPT", "YY-A-7Х-ХХ-ХХ-NNA-ZZZA-A_T40C", "T80E", "Наименование темы", "Информационное имя" ); + addDMCode("Технологии ремонта", "Ремонт несущей системы и трансмиссии", + "

Модули данных по технологиям ремонта несущей системы (НС) и трансмиссии воздушного судна. Материал нацелен на персонал рабочих специальностей, который должен обладать знаниями по технологическим операциям выполнения ремонта на различных этапах.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-6Х-ХХ-ХХ-NNA-ZZZA-A_T40C (Наименование темы – Информационное имя), где:

YY-Y: идентификационный код модели и отличительный код системы

6Х-ХХ-ХХ: согласно классификатору ГОСТ 18675-2012 из разделов 60-69, (84).

NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям) или компоненты разборки основных узлов, начиная с 01.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-6Х-ХХ-ХХ-NNA-ZZZA-A_T80E (Наименование темы – Информационное имя)

", + "DESCRIPT", "YY-A-6Х-ХХ-ХХ-NNA-ZZZA-A_T40C", "T80E", "Наименование темы", "Информационное имя" ); + addDMCode("Технологии ремонта", "Ремонт систем и компонентов", + "

Модули данных по технологиям ремонта систем, съемного оборудования воздушного судна. Материал нацелен на персонал рабочих специальностей, который должен обладать знаниями по технологическим операциям выполнения ремонта на различных этапах.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-ХХ-ХХ-ХХ-NNA-ZZZA-A_T40C (Наименование темы – Информационное имя), где:

YY-Y: идентификационный код модели и отличительный код системы

ХХ-ХХ-ХХ: согласно классификатору ГОСТ 18675-2012 из разделов 20-49.

NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям) или компоненты разборки основных узлов, начиная с 01.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-XХ-ХХ-ХХ-NNA-ZZZA-A_T80E (Наименование темы – Информационное имя)

", + "DESCRIPT", "YY-A-ХХ-ХХ-ХХ-NNA-ZZZA-A_T40C", "T80E", "Наименование темы", "Информационное имя" ); + addDMCode("Информация для экипажа", "Описание и работа систем", + "

Модули данных по каждой системе/подсистеме ВС. Задача этих модулей дать инженерный взгляд на конструкцию и функционирование систем и компонентов ВС в объеме достаточном для экипажа.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-XX-XX-00-NNA-043A-A_T40C (Наименование системы или подсистемы – Информация для экипажа), где:

YY-Y: идентификационный код модели и отличительный код системы

XX-XX: код стандартной системы нумерации

NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям, членам экипажа), начиная с 01.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-XX-XX-00-NNA-043A-A_T80E (Наименование системы или подсистемы – Контроль знаний: Информация для экипажа)

", + "DESCRIPT", "YY-A-XX-XX-00-NNA-043A-A_T40C", "T80E", "Наименование системы или подсистемы", "Информация для экипажа" ); + addDMCode("Информация для экипажа", "Нормальная эксплуатация систем и оборудования", + "

Модули данных по каждой системе/подсистеме ВС, имеющей нормальные процедуры эксплуатации.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-XX-XX-00-00A-131A-A_T40C (Наименование системы или подсистемы – Процедура нормальной эксплуатации), где:

YY-Y: идентификационный код модели и отличительный код системы

XX-XX: код стандартной системы нумерации

Содержание разделов модулей данных должно быть составлено, исходя из условий (этапов) работы членов экипажа (по применимости), примеры:

Контрольный осмотр

Контрольная проверка перед запуском

Запуск двигателей

Контрольная проверка после запуска

Выполнение полета

После посадки.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-XX-XX-00-NNA-131A-A_T80E (Наименование системы или подсистемы – Контроль знаний: Процедура нормальной эксплуатации)

", + "DESCRIPT", "YY-A-XX-XX-00-00A-131A-A_T40C", "T80E", "Наименование системы или подсистемы", "Процедура нормальной эксплуатации" ); + addDMCode("Информация для экипажа", "Эксплуатационные ограничения", + "

Модули данных по каждой системе/подсистеме ВС, имеющей эксплуатационные ограничения.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-15-10-XX-NNA-043B-A_T40C (Наименование системы или подсистемы – Эксплуатационные ограничения), где:

YY-Y: идентификационный код модели и отличительный код системы

XX: код стандартной системы нумерации, 00 для ВС в целом.

NN – номер подсистемы/подподсистемы, если не требуется использовать 00.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-15-10-XX-NNA-043B-A_T80E (Наименование системы или подсистемы – Контроль знаний: Эксплуатационные ограничения)

", + "DESCRIPT", "YY-A-15-10-XX-NNA-043B-A_T40C", "T80E", "Наименование системы или подсистемы", "Эксплуатационные ограничения" ); + addDMCode("Информация для экипажа", "Нормальная эксплуатация ВС", + "

Модули данных нормальных процедур эксплуатации по стадиям подготовки и полета.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-15-3X-XX-NNA-043A-A_T40C (Наименование режима (стадии) – Информация для экипажа), где:

YY-Y: идентификационный код модели и отличительный код системы

3X-XX:

31 — Предвариатильная подготовка:

XX: используется для дальнейшей классификации, если необходимо, например:

01: Штурманская подготовка

02: Расчет полета

32 — Подготовка к полету:

XX: используется для дальнейшей классификации, если необходимо, например:

01: Предполетный осмотр

02: Предполетная проверка перед запуском

03: Запуск двигателей

04: Предполетная проверка после запуска

33 — Выполнение полета:

XX: используется для дальнейшей классификации, если необходимо, например:

01 — Руление

02 — Взлет и полет на малой высоте

03 — Набор высоты

04 — Крейсерский полет

05 — Снижение

06 — Заход на посадку

07 — Посадка

34 — Вертолетовождение/Самолетовождение:

XX: используется для дальнейшей классификации, если необходимо

(35–38) — Используется при необходимости

39 — Завершение полета:

XX: используется для дальнейшей классификации, если необходимо, например:

01: Выключение двигателей и оборудования

02: Послеполетный осмотр

03: Заполнение документации

04: Анализ полетных данных

NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям, членам экипажа), начиная с 01.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-15-3X-XX-NNA-043A-A_T80E (Наименование режима (стадии) – Контроль знаний: Информация для экипажа)

", + "DESCRIPT", "YY-A-15-3X-XX-NNA-043A-A_T40C", "T80E", "Наименование режима (стадии)", "Информация для экипажа" ); + addDMCode("Информация для экипажа", "Контрольные облеты и испытания/регулировки", + "

Модули данных программ контрольных облетов и испытаний/регулировок в полете, включая динамическую регулировку несущей системы.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-05-62-XX-NNA-043A-A_T40C (Наименование программы – Информация для экипажа), где:

YY-Y: идентификационный код модели и отличительный код системы

XX: используется для нумерации каждой уникальной программы облета/испытаний/регулировки

NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям, членам экипажа), начиная с 01.

Перечень необходимых программ, смотри ЭТД применимого типа ВС.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-05-62-XX-NNA-043A-A_T80E (Наименование программы – Контроль знаний: Информация для экипажа)

", + "DESCRIPT", "YY-A-05-62-XX-NNA-043A-A_T40C", "T80E", "Наименование программы", "Информация для экипажа" ); + addDMCode("Информация для экипажа", "Особые условия эксплуатации ВС", + "

Модули данных процедур эксплуатации в особых условиях.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-15-50-XX-NNA-131A-A_T40C (Наименование особого условия – Процедура нормальной эксплуатации), где:

YY-Y: идентификационный код модели и отличительный код системы

XX: используется для нумерации каждого уникального особого условия

NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям, членам экипажа), начиная с 01.

Перечень необходимых особых условий, смотри РЛЭ применимого типа ВС.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-15-50-XX-NNA-131A-A_T80E (Наименование особого условия – Контроль знаний: Процедура нормальной эксплуатации)

", + "DESCRIPT", "YY-A-15-50-XX-NNA-131A-A_T40C", "T80E", "Наименование особого условия", "Процедура нормальной эксплуатации" ); + addDMCode("Информация для экипажа", "Аварийная эксплуатация ВС", + "

Модули данных по действиям экипажа при возникновении аварийной ситуации/отказа.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-15-4X-XX-NNA-141A-A_T40C (Наименование отказа/аварийной ситуации – Процедура аварийной эксплуатации), где:

4X – тип ситуации:

41 - Общие сведения

42 - Аварийные ситуации на земле

43 - Аварийные ситуации на взлете

44 - Аварийные ситуации, связанные с неисправностью систем

45 - Отказ одного или нескольких двигателей

46 - Аварийные ситуации при заходе на посадку/посадке

47 - Отказы систем БРЭО

48 - Прочие аварийные ситуации или отказы

49 - Показания многофункционального дисплея со сведениями об аварийной ситуации

XX – последовательная нумерация отказа/аварийной ситуации, внутри типа

NN – последовательная нумерация, если требуется более одного модуля данных.

Типы ситуации 41,42,43,45,46,48 могут быть использованы для АУК Летная эксплуатация.

Типы ситуации 44,45,47,48 могут быть использованы для АУК … Описание и эксплуатация.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-15-4X-XX-NNA-141A-A_T80E (Наименование отказа/аварийной ситуации – Контроль знаний: Процедура аварийной эксплуатации)

", + "DESCRIPT", "YY-A-15-4X-XX-NNA-141A-A_T40C", "T80E", "Наименование отказа/аварийной ситуации", "Процедура аварийной эксплуатации" ); + addDMCode("Информация для экипажа", "Практическая аэродинамика", + "

Модули данных анализа летно-технических характеристик ВС.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-15-21-XX-NNA-043A-A_T40C (Наименование темы — Информация для экипажа), где:

XX – последовательная нумерация МД/тем:

01: Аэродинамические характеристики

02: Устойчивость, управляемость и балансировка

03: Висение и вертикальные режимы полета

04: Установившиеся режимы полета с поступательной скоростью

05: Переходные режимы полета, виражи и развороты

06: Руление, взлет и посадка

07: Дальность и продолжительность полета

08: Особые условия полета

09: Особые случаи в полете

10: Критические режимы полета

NN – 00 или последовательная нумерация, если требуется более одного модуля данных.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-15-21-XX-NNA-043A-A_T80E (Наименование темы – Контроль знаний: Информация для экипажа)

", + "DESCRIPT", "YY-A-15-21-XX-NNA-043A-A_T40C", "T80E", "Наименование темы", "Информация для экипажа" ); + addDMCode("Информация для экипажа", "Эксплуатация по вариантам применения", + "

Модули данных при применении ВС на различных видах работ.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-15-71-XX-NNA-043A-A_T40C (Наименование варианта применения – Информация для экипажа), где:

XX – последовательная нумерация варианта применения

NN – последовательная нумерация, если требуется более одного модуля данных.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-15-71-XX-NNA-043A-A_T80E (Наименование варианта применения – Контроль знаний: Информация для экипажа)

", + "DESCRIPT", "YY-A-15-71-XX-NNA-043A-A_T40C", "T80E", "Наименование варианта применения", "Информация для экипажа" ); + addDMCode("Информация для экипажа", "Боевое применение", + "

Модули данных при боевом применении вооружения. Включают описательные данные/ограничения, нормальные и аварийные процедуры применения по вариантам вооружения.

Коды модулей данных учебной темы должны иметь следующую структуру:

- YY-Y-15-72-00-NNA-043A-A_T40C (Боевое применение – Информация для экипажа)

- YY-Y-15-72-XX-NNA-043A-A_T40C (Наименование варианта боевого применения – Информация для экипажа), где:

XX – последовательная нумерация варианта боевого применения

NN – последовательная нумерация, если требуется более одного модуля данных.

Коды модулей данных контроля знаний должны иметь следующую структуру:

- YY-Y-15-72-XX-NNA-043A-A_T80E (Наименование варианта боевого применения – Контроль знаний: Информация для экипажа)

", + "DESCRIPT", "YY-A-15-72-XX-NNA-043A-A_T40C", "T80E", "Наименование варианта боевого применения", "Информация для экипажа" ); + + +} + +void RU_Const::addPMCodesRTC(QString pmNumber, QString pmNumberText) { + addPMCode("RTC", pmNumber, "00", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ"); + addPMCode("RTC", pmNumber, "10", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ПРЕДВАРИТЕЛЬНАЯ ДЕФЕКТАЦИЯ (СИСТЕМ, КОНСТРУКЦИЙ)"); + addPMCode("RTC", pmNumber, "11", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ТЕХНИЧЕСКОЕ ОПИСАНИЕ (СИСТЕМ, КОНСТРУКЦИЙ)"); + addPMCode("RTC", pmNumber, "12", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ИСПЫТАНИЯ И ОСМОТРЫ (СИСТЕМ, КОНСТРУКЦИЙ)"); + addPMCode("RTC", pmNumber, "13", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РАЗБОРКА, СБОРКА (СИСТЕМ, КОНСТРУКЦИЙ)"); + addPMCode("RTC", pmNumber, "20", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ТИПОВЫЕ ТЕХНОЛОГИИ СИСТЕМ"); + addPMCode("RTC", pmNumber, "21", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ЭЛЕКТРОЖГУТОВ"); + addPMCode("RTC", pmNumber, "22", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ШВЕЙНЫЕ, ОБОЙНО-ЭМАЛИТНЫЕ РАБОТЫ"); + addPMCode("RTC", pmNumber, "23", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ВОЗДУШНО-МАСЛЯНЫХ РАДИАТОРОВ"); + addPMCode("RTC", pmNumber, "24", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ГИДРОБАКОВ"); + addPMCode("RTC", pmNumber, "25", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ МАСЛОБАКОВ"); + addPMCode("RTC", pmNumber, "26", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ЖЕСТКИХ ТОПЛИВНЫХ БАКОВ"); + addPMCode("RTC", pmNumber, "27", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ МЯГКИХ ТОПЛИВНЫХ БАКОВ"); + addPMCode("RTC", pmNumber, "28", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ТРУБОПРОВОДОВ"); + addPMCode("RTC", pmNumber, "29", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ШЛАНГОВ"); + addPMCode("RTC", pmNumber, "30", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ КОМПОНЕНТОВ"); + addPMCode("RTC", pmNumber, "31", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ДЕФЕКТАЦИЯ КОМПОНЕНТОВ"); + addPMCode("RTC", pmNumber, "32", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "СБОРКА/РАЗБОРКА КОМПОНЕНТОВ"); + addPMCode("RTC", pmNumber, "33", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "Технологии ремонта КОМПОНЕНТОВ"); + addPMCode("RTC", pmNumber, "50", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ТИПОВЫЕ ТЕХНОЛОГИИ КОНСТРУКЦИЙ ПЛАНЕРА"); + addPMCode("RTC", pmNumber, "51", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ОСТЕКЛЕНИЯ"); + addPMCode("RTC", pmNumber, "52", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ЛКП"); + addPMCode("RTC", pmNumber, "53", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ КРЕПЕЖА"); + addPMCode("RTC", pmNumber, "54", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ДЕФЕКТАЦИЯ МЕТОДАМИ НЕРАЗРУШАЮЩЕГО КОНТРОЛЯ"); + addPMCode("RTC", pmNumber, "60", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ТИПОВЫЕ ТЕХНОЛОГИИ НЕСУЩЕЙ СИСТЕМЫ И ТРАНСМИССИИ"); + addPMCode("RTC", pmNumber, "61", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ЛОПАСТЕЙ НВ И РВ"); + addPMCode("RTC", pmNumber, "70", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ТИПОВЫЕ ТЕХНОЛОГИИ СИЛОВОЙ УСТАНОВКИ"); +} + +void RU_Const::addPMCode(QString pmNumABC, QString pmNumber, QString pmVolume, + QString pmNumABCText, QString pmNumberText, QString pmVolumeText) { + pmCodeListItemType item; + item.pmNumABC = pmNumABC; item.pmNumABCText = pmNumABCText; + item.pmNumber = pmNumber; item.pmNumberText = pmNumberText; + item.pmVolume = pmVolume; item.pmVolumeText = pmVolumeText; + pmCodeList.append(item); +} + +// DESCRIPT CREW LEARNING +void RU_Const::addDMCode(QString chapterName, QString paraName, QString text, QString schemeTypeStr, QString dmCode, + QString dmLearningCode, QString techName, QString infoName) { + dmCodeListItemType dm; + dm.chapterName = chapterName; dm.paraName = paraName; + dm.text = text; dm.schemeTypeStr = schemeTypeStr; dm.infoName = infoName; dm.techName = techName; + QStringList dmSplitList = dmCode.split("-"); //YY-Y-15-72-XX-NNA-043A-A_T40C + QStringList dmSplitList7 = dmSplitList[7].split("_"); //A_T40C + dm.modelIdentCode = modelIdentCode; /*dmSplitList[0];*/ dm.systemDiffCode = dmSplitList[1]; + dm.systemCode = dmSplitList[2]; dm.subSystemCode = dmSplitList[3].mid(0,1); dm.subSubSystemCode = dmSplitList[3].mid(1,1); dm.assyCode = dmSplitList[4]; + dm.disassyCode = dmSplitList[5].mid(0,2); dm.disassyCodeVariant = dmSplitList[5].mid(2,1); + dm.infoCode = dmSplitList[6].mid(0,3); dm.infoCodeVariant = dmSplitList[6].mid(3,1); + dm.itemLocationCode = dmSplitList7[0]; + dm.learnCode = dmSplitList7[1].mid(0,3); dm.learnEventCode = dmSplitList7[1].mid(3,1); + dm._learnCode = dmLearningCode.mid(0,3); dm._learnEventCode = dmLearningCode.mid(3,1); + dmCodeList.append(dm); +} diff --git a/s1000d/Converter14_Source/ru_const.h b/s1000d/Converter14_Source/ru_const.h new file mode 100644 index 0000000..4d158a8 --- /dev/null +++ b/s1000d/Converter14_Source/ru_const.h @@ -0,0 +1,52 @@ + #ifndef RU_CONST_H +#define RU_CONST_H + +#include +#include + +class RU_Const { +public: + void Init_RU_Const(); + void addPMCode(QString pmNumABC, QString pmNumber, QString pmVolume, + QString pmNumABCText, QString pmNumberText, QString pmVolumeText); + void addPMCodesRTC(QString pmNumber, QString pmNumberText); + void addDMCode(QString chapterName, QString paraName, QString text, QString schemeTypeStr, QString dmCode, + QString dmLearningCode, QString techName, QString infoName); + + QMap attr_accessPointTypeValue; + + QString companyName; + QString modelIdentCode, pmIssuer; + struct pmCodeListItemType{ + QString pmNumABC, pmNumber, pmVolume; + QString pmNumABCText, pmNumberText, pmVolumeText; + }; + + QList pmCodeList; + + struct dmCodeListItemType{ + QString chapterName, paraName, text, schemeTypeStr, dmCode, infoName, techName, dmLearningCode; + QString modelIdentCode, systemDiffCode, systemCode, subSystemCode, subSubSystemCode, assyCode, + disassyCode, disassyCodeVariant, infoCode, infoCodeVariant, itemLocationCode, learnCode, learnEventCode, _learnCode, _learnEventCode; + }; + QList dmCodeList; + + QString languageIsoCode, countryIsoCode, inWork, issueNumber, security_securityClassification; + QString responsiblePartnerCompany_enterpriseCode, responsiblePartnerCompany_enterpriseName, + originator_enterpriseCode, originator_enterpriseName, copyrightPara; + QString tableOfContents, acronymsList; + QString htmlButtonLearned; + QString tableTitle, tableShortTitle, figureTitle, figureShortTitle; + QString testQuestions; + QString icn_variantCode; + QStringList crew; + +}; + + + + + + + +#endif // RU_CONST_H diff --git a/s1000d/Converter14_Source/s1000d_manager.cpp b/s1000d/Converter14_Source/s1000d_manager.cpp new file mode 100644 index 0000000..cbb4a50 --- /dev/null +++ b/s1000d/Converter14_Source/s1000d_manager.cpp @@ -0,0 +1,2510 @@ +#include "s1000d_manager.h" +#include +#include +#include +#include +#include +#include +#include +//#include +//#include +//#include +#include +#include + +// DM: Chapter 3.9.5.2.1.2 Common constructs +// ICN: 1822 + +// большинство функций работают с текущим элементом списка, хранимым в item +// ВСЕГДА сначала необходимо вызывать setCurItem(int ind) + +S1000D_Manager::S1000D_Manager() +{ + ru_const.Init_RU_Const(); +} + +S1000D_Manager::~S1000D_Manager() +{ + clearItems(); +} + + +QDomNode S1000D_Manager::findElementRec(QDomNode domNode, QString path) { + QStringList elementTagNames = path.split('.'); + QDomNodeList domNodeList = domNode.childNodes(); + + //if(DBG) qDebug() << path; + if(elementTagNames.isEmpty() || path == "") + return domNode; + int nodeInd = getNodePathIndex(elementTagNames.first()); + QString nodeName = elementTagNames.first(); + if(nodeName.indexOf("[") != -1) + nodeName = nodeName.mid(0, nodeName.indexOf("[")); + //if(DBG) qDebug() << " " << elementTagNames.first() << " -> " << nodeName << "[" << nodeInd << "]" << " childs " << domNodeList.count(); + + for(int i = 0; i < domNodeList.count(); i++) { + //if(DBG) qDebug() << " search for" << nodeName << "=?" << domNodeList.at(i).nodeName(); + if(domNodeList.at(i).nodeName().compare(nodeName,Qt::CaseInsensitive) == 0) { //toElement().tagName(). + if(nodeInd > 0) { + nodeInd--; continue; + } + + elementTagNames.takeFirst(); + if(elementTagNames.isEmpty()) + return domNodeList.at(i); + else + return findElementRec(domNodeList.at(i), elementTagNames.join(".")); + } + } + + //if(DBG) qDebug() << " Node " << elementTagNames.at(0) << " not found (" << path << ")"; + QDomElement nullElement = item->doc.createElement(""); + return nullElement; + + //QDomElement newElement = item->doc.createElement(elementTagNames.at(0)); // если узел отсутствует - создаем + //elementTagNames.takeFirst(); + //domNode.appendChild(newElement); + //return findElementRec(newElement,elementTagNames.join(".")); +} + +QDomNode S1000D_Manager::findElement(QString path) { + //if(DBG) qDebug() << item->doc.documentElement().tagName(); + //if(DBG) qDebug() << " findElement " << path; + return findElementRec(item->doc.documentElement(), path); +} + +QString S1000D_Manager::getNodeText(QString path) { + QDomNode element = findElement(path); + if(element.isNull()) + return ""; + else + return element.toElement().text(); +} + +void S1000D_Manager::setNodeText(QString path, QString text) { + QDomNode element = findElement(path); + if(element.isNull()) return; + //if(DBG) qDebug() << " element: " << element.firstChild().isText() << element.nodeName(); + for(QDomNode n = element.firstChild(); !n.isNull(); n = n.nextSibling()) + { + QDomText t = n.toText(); + if (!t.isNull()) + t.setNodeValue(text); + } + if(element.childNodes().count() == 0) { + QDomText t = item->doc.createTextNode(text); + element.appendChild(t); + } +} + +void S1000D_Manager::deleteNode(QString path) { + QDomNode element = findElement(path); + if(element.isNull()) return; + element.parentNode().removeChild(element); +} + +int S1000D_Manager::createNode(QString path, QString nodeName) { // возвращает номер созданного узла для обращения по индексу: node[i] + QDomNode element = findElement(path); + if(element.isNull()) return -1; + QDomElement newNode = item->doc.createElement(nodeName); + element.appendChild(newNode); + QDomNodeList lst = element.childNodes(); + int index = -1; + for(int i=0; idoc.createAttribute(attrName); + domAttr.setValue(attrVal); + element.toElement().setAttributeNode(domAttr); + } */ +} + +void S1000D_Manager::deleteNodeAttr(QString path, QString attrName) { + QDomNode element = findElement(path); + if(element.isNull()) return; + element.toElement().removeAttribute(attrName); +} + +QStringList S1000D_Manager::getNodeAllChilds(QString path) { + QStringList nodeList; + QDomNode element = findElement(path); + if(element.isNull()) return nodeList; + + QDomNodeList domNodeList = element.childNodes(); + for(int i=0;i mask; + mask.append(QString("*.xml")); + QStringList listFiles = dir.entryList(mask, QDir::Files); + //bool validFlag; + clearItems(); + + foreach (QString file, listFiles) { + item = new ItemStruct(); + item->fileName = dir.absoluteFilePath(file); item->isReady = true; + //log.append(QFileInfo(file).fileName()); + //if(DBG) qDebug() << "Открытие " << QFileInfo(file).fileName(); + + QFile xmlFile(item->fileName); + if (!xmlFile.open(QFile::ReadOnly | QFile::Text)) { + log.append(QString(" Не удалось открыть файл")); + continue; + } + QByteArray fileData = xmlFile.readAll(); + xmlFile.close(); + item->doc.setContent(fileData); + + QString curscheme = QFileInfo(item->doc.documentElement().attribute("xsi:noNamespaceSchemaLocation", "")).baseName().toUpper(); + item->moduleType = mtUNKNOWN; + if(item->doc.documentElement().nodeName().toUpper() == "DMODULE") + item->moduleType = mtDM; + if(item->doc.documentElement().nodeName().toUpper() == "PM") + item->moduleType = mtPM; + + //log.append(QString(" Тип модуля: ")+item->doc.documentElement().nodeName() + QString(" Файл схемы: ")+curscheme); + //if(DBG) qDebug() << " Тип модуля: " << item->doc.documentElement().nodeName() << " Файл схемы: " << curscheme; + +// Доп. ТЗ № 1 Вертолеты России: +// Резрешено использовать только flat схемы, перечисленные ниже: +// - brex +// - comrep +// - crew +// - descript +// - dml +// - fault +// - frontmatter +// - learning +// - pm +// - proced + + item->schemeType = getSchemeTypeByStr(curscheme); + + if(item->moduleType == mtUNKNOWN) { + //log.append(QString(" Тип модуля не поддерживается, файл пропущен")); + continue; + } + if(item->schemeType == stUNKNOWN) { + //log.append(QString(" Неизвестная схема файла, пропущен")); + continue; + } + + //if((item->schemeType != PM) && (item->schemeType != DESCRIPT) && + // (item->schemeType != CREW) && (item->schemeType != LEARNING) ) { + // log.append(QString(" Работа с файлами схемы " +curscheme+ " в настоящее время не реализована, файл пропущен")); + // continue; + //} + + item->fileCode = ""; + // DMC-S1000DLIGHTING-AAA-D00-00-00-00AA-0A1A-D_001-00_EN-US + //S1000DLIGHTING-AAA-D00-00-00-00AA-00NA-D_001-00 + //dmodule + // + // + QString _language; //_dmCode, _issueInfo, , _pmCode; + QString newFileName = item->fileName; + if(item->moduleType == mtDM) { + item->fileCode = dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + if(!isNodeCreated("rdf:Description")) { + QDomNode descr = item->doc.createElement("rdf:Description"); + findElement("").insertBefore(descr, findElement("").firstChild()); + } + if(!isNodeCreated("rdf:Description.dc:identifier")) createNode("rdf:Description", "dc:identifier"); + setNodeText("rdf:Description.dc:identifier", item->fileCode); + _language = "identAndStatusSection.dmAddress.dmIdent.language"; + newFileName = QFileInfo(item->fileName).absolutePath()+"/" + "DMC-" + item->fileCode + "_"+getNodeAttr(_language, "languageIsoCode").toUpper()+"-"+getNodeAttr(_language, "countryIsoCode").toUpper()+".xml"; + item->dmDataFilled = true; item->selectedInDMCodeList = -1; + } + + // PMC-BRAKE-C3002-EPWG1-00_000-01_EN-US + // BRAKE-C3002-EPWG1-00_000_01 + // + // + if(item->moduleType == mtPM) { + //_pmCode = "identAndStatusSection.pmAddress.pmIdent.pmCode"; + //_issueInfo = "identAndStatusSection.pmAddress.pmIdent.issueInfo"; + _language = "identAndStatusSection.pmAddress.pmIdent.language"; + item->fileCode = pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + if(!isNodeCreated("rdf:Description")) { + QDomNode descr = item->doc.createElement("rdf:Description"); + findElement("").insertBefore(descr, findElement("").firstChild()); + } + if(!isNodeCreated("rdf:Description.dc:identifier")) createNode("rdf:Description", "dc:identifier"); + setNodeText("rdf:Description.dc:identifier", item->fileCode); + newFileName = QFileInfo(item->fileName).absolutePath()+"/" + "PMC-" + item->fileCode + "_"+getNodeAttr(_language, "languageIsoCode").toUpper()+"-"+getNodeAttr(_language, "countryIsoCode").toUpper()+".xml"; + } + + if(isNodeCreated("rdf:Description.dc:source")) + item->importedFromLyX = getNodeText("rdf:Description.dc:source"); + else + item->importedFromLyX = ""; + + if(QFileInfo(newFileName.toUpper()).fileName() != QFileInfo(item->fileName.toUpper()).fileName()) + if(QFileInfo::exists(item->fileName)) { + QFile::rename(item->fileName, newFileName); + log.append(QString(" Файл переименован в " + QFileInfo(newFileName).fileName())); + item->fileName = newFileName; + } + + item->parent = -1; item->child.clear(); + //if(DBG) qDebug() << item->fileCode; + + items.append(*item); // файл прочтен успешно, добавляем в список + } // цикл по файлам + + for(int i=0;i 1) { + nodeClone = lcInteractionNode.lastChild().cloneNode(); + lcInteractionNode.removeChild(lcInteractionNode.lastChild()); + newInter = item->doc.createElement("lcInteraction"); + newInter.appendChild(nodeClone); + lcInteractionNode.parentNode().insertAfter(newInter, lcInteractionNode); + interCnt++; + } + } + } + + return true; + */ +} + +_schemeType S1000D_Manager::getSchemeTypeByStr(QString str) { + _schemeType newSchemeType = stUNKNOWN; + if(str == "DDN") newSchemeType = stDDN; + if(str == "DML") newSchemeType = stDML; + if(str == "PM") newSchemeType = stPM; + if(str == "APPLICCROSSREFTABLE") newSchemeType = stAPPLICCROSSREFTABLE; + if(str == "PRDCROSSREFTABLE") newSchemeType = stPRDCROSSREFTABLE; + if(str == "CONDCROSSREFTABLE") newSchemeType = stCONDCROSSREFTABLE; + if(str == "DESCRIPT") newSchemeType = stDESCRIPT; + if(str == "PROCED") newSchemeType = stPROCED; + if(str == "PROCESS") newSchemeType = stPROCESS; + if(str == "COMREP") newSchemeType = stCOMREP; + if(str == "FRONTMATTER") newSchemeType = stFRONTMATTER; + if(str == "BREX") newSchemeType = stBREX; + if(str == "BRDOC") newSchemeType = stBRDOC; + if(str == "LEARNING") newSchemeType = stLEARNING; + if(str == "CREW") newSchemeType = stCREW; + if(str == "FAULT") newSchemeType = stFAULT; + if(str == "IPD") newSchemeType = stIPD; + if(str == "CHECKLIST") newSchemeType = stCHECKLIST; + if(str == "NOTATIONS") newSchemeType = stNOTATIONS; + if(str == "CONTAINER") newSchemeType = stCONTAINER; + if(str == "XLINK") newSchemeType = stXLINK; + if(str == "WRNGFLDS") newSchemeType = stWRNGFLDS; + return newSchemeType; +} + +void S1000D_Manager::buildPMTree(int pmItemInd) { + setCurItem(pmItemInd); + + bool isModifyed = false; + QString PMCodeStr, DMCodeStr; + QDomNode mainEntry, secondEntry, clone, subEntry, subSubEntry; + mainEntry = findElement("content.pmEntry[0]"); + if(mainEntry.isNull()) return; + + while(isNodeCreated("content.pmEntry[1]")) { + secondEntry = findElement("content.pmEntry[1]"); + while(secondEntry.hasChildNodes()) { + if(secondEntry.firstChild().nodeName() == "dmRef" || secondEntry.firstChild().nodeName() == "pmRef") { + clone = secondEntry.firstChild().cloneNode(); + item->doc.importNode(clone, true); + mainEntry.appendChild(clone); + } + if(secondEntry.firstChild().nodeName() == "pmEntry") { + subEntry = secondEntry.firstChild(); + while(subEntry.hasChildNodes()) { + if(subEntry.firstChild().nodeName() == "dmRef" || subEntry.firstChild().nodeName() == "pmRef") { + clone = subEntry.firstChild().cloneNode(); + item->doc.importNode(clone, true); + mainEntry.appendChild(clone); + } + if(subEntry.firstChild().nodeName() == "pmEntry") { + subSubEntry = secondEntry.firstChild(); + while(subSubEntry.hasChildNodes()) { + if(subSubEntry.firstChild().nodeName() == "dmRef" || subSubEntry.firstChild().nodeName() == "pmRef") { + clone = subSubEntry.firstChild().cloneNode(); + item->doc.importNode(clone, true); + mainEntry.appendChild(clone); + } + //.. + subSubEntry.removeChild(subEntry.firstChild()); + } + subEntry.removeChild(subEntry.firstChild()); + } + } + } + secondEntry.removeChild(secondEntry.firstChild()); + } + mainEntry.parentNode().removeChild(secondEntry); + } + + int pmRefCnt=-1, dmRefCnt=-1; + for(int p=0;p!) в основную pmEntry +// QDomNode mainEntry, subEntry; +// QDomNodeList subEntryChildList; +// while(isNodeCreated(path+".pmEntry["+QString::number(i)+"].pmEntry")) { +// mainEntry = findElement(path+".pmEntry["+QString::number(i)+"]"); + +// int subEntryCnt = getNodeChildsWithNameCount(path+".pmEntry["+QString::number(i)+"]", "pmEntry"); +// for(int j=0;jfileCode = ""; // если изменилось кодирование модулей - переименовываем старые файлы + QString _issueInfo, _language; + QString newFileName = item->fileName; + if(item->moduleType == mtDM) { + + item->fileCode = dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + _issueInfo = "identAndStatusSection.dmAddress.dmIdent.issueInfo"; + _language = "identAndStatusSection.dmAddress.dmIdent.language"; + newFileName = QFileInfo(item->fileName).absolutePath()+"/" + "DMC-" + item->fileCode + "_"+getNodeAttr(_issueInfo, "issueNumber")+"-"+getNodeAttr(_issueInfo, "inWork")+"_"+getNodeAttr(_language, "languageIsoCode")+"-"+getNodeAttr(_language, "countryIsoCode")+".xml"; + } + if(item->moduleType == mtPM) { + _issueInfo = "identAndStatusSection.pmAddress.pmIdent.issueInfo"; + _language = "identAndStatusSection.pmAddress.pmIdent.language"; + item->fileCode = pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + newFileName = QFileInfo(item->fileName).absolutePath()+"/" + "PMC-" + item->fileCode + "_"+getNodeAttr(_language, "languageIsoCode")+"-"+getNodeAttr(_language, "countryIsoCode")+".xml"; + } + + if(QFileInfo(newFileName.toUpper()).fileName() != QFileInfo(item->fileName.toUpper()).fileName()) + if(QFileInfo::exists(item->fileName)) { + QFile::rename(item->fileName, newFileName); + log.append(QString(" Файл "+QFileInfo(item->fileName).fileName()+" переименован в " + QFileInfo(newFileName).fileName())); + } + item->fileName = newFileName; + } */ +} + +void S1000D_Manager::SaveProject() { + qSetGlobalQHashSeed(0); + for(int i=0;imoduleType == mtDM) { + item->fileCode = dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + QDomNode descr = item->doc.namedItem("dmodule").namedItem("rdf:Description"); + if(descr.isNull()) { + descr = item->doc.createElement("rdf:Description"); + item->doc.namedItem("dmodule").insertBefore(descr, item->doc.namedItem("dmodule").namedItem("identAndStatusSection")); + } + //descr.toElement().setAttribute("flags", QString::number(item->crewFlags, 16)); + if(item->isQualifyed) + descr.toElement().setAttribute("qualifyed", "true"); + else + descr.toElement().setAttribute("qualifyed", "false"); + } + if(item->moduleType == mtPM) { + item->fileCode = pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + QDomNode descr = item->doc.namedItem("pm").namedItem("rdf:Description"); + if(descr.isNull()) { + descr = item->doc.createElement("rdf:Description"); + item->doc.namedItem("pm").insertBefore(descr, item->doc.namedItem("pm").namedItem("identAndStatusSection")); + } + //descr.toElement().setAttribute("flags", QString::number(item->crewFlags, 16)); + if(item->isQualifyed) + descr.toElement().setAttribute("qualifyed", "true"); + else + descr.toElement().setAttribute("qualifyed", "false"); + } + + QFile xmlFile(projectPath + "/" + item->fileName); + if (!xmlFile.open(QFile::WriteOnly | QFile::Text)) { + if(DBG) qDebug() << "SaveProject: Не удалось открыть файл "+projectPath + "/" + item->fileName; + return; + } + + QTextStream outFile(&xmlFile); + item->doc.save(outFile, 4); + xmlFile.close(); + //qDebug() << "Save ("+item->fileCode+"): " + projectPath + "/" + item->fileName; + + if(item->moduleType == mtPM) continue; + + if(item->html.count() > 0) { + QString htmlFileName = projectPath + "/" + QString(item->fileName).replace(".xml", ".html"); + QFile htmlFile(htmlFileName); + if (htmlFile.open(QFile::ReadWrite | QFile::Text)) { + QTextStream out(&htmlFile); out.setCodec("UTF-8"); + for(int i=0;ihtml.count();i++) + out << QString(item->html[i]+"\n").toUtf8(); + htmlFile.close(); + } + } + + QString lyxLogFileName = projectPath + "/" + item->fileName+"_importlog.txt"; //lyxLogFileName.toStdString() + QFile logFile(lyxLogFileName); + if (logFile.open(QFile::ReadWrite | QFile::Text)) { + QTextStream out(&logFile); out.setCodec("UTF-8"); + for(int i=0;ilyxLog.count();i++) + out << QString(item->lyxLog[i]+"\n").toUtf8(); + logFile.close(); + } + } + + SavePackagesXML(); + qSetGlobalQHashSeed(-1); // reset hash value +} + +void S1000D_Manager::setCurItem(int ind) { + item = &items[ind]; itemIndex = ind; +} + +void S1000D_Manager::replaceCurItem_pmCode(QString new_pmTitle, QString new_modelIdentCode, QString new_pmIssuer, QString new_pmNumber, QString new_pmVolume) { + ItemStruct *oldItem = item; + QString pmTitle, modelIdentCode, pmIssuer, pmNumber, pmVolume; + QString oldPMCodeStr, pmRefCodeStr; + pmTitle = getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); + modelIdentCode = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode"); + pmIssuer = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer"); + pmNumber = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmNumber"); + pmVolume = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmVolume"); + oldPMCodeStr = pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + + setNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle", new_pmTitle); + setNodeText("content.pmEntry.pmEntryTitle", new_pmTitle); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode", new_modelIdentCode); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer", new_pmIssuer); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmNumber", new_pmNumber); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmVolume", new_pmVolume); + if(isNodeCreated("identAndStatusSection.pmAddress.pmAddressItems.shortPmTitle")) + deleteNode("identAndStatusSection.pmAddress.pmAddressItems.shortPmTitle"); + + if(item->parent != -1) { + int parent = item->parent; + setCurItem(parent); + int cntRef = getNodeChildsWithNameCount("content.pmEntry", "pmRef"); + for(int p=0;p= pmEntry.childNodes().count()) { + if(DBG) qDebug() << " Error: createPM - insertAfterChildNum >= pmEntry.childNodes().count()"; + return items.count()-1; + } + if(isNodeCreated("content.pmEntry.pmEntryTitle")) + pmEntry.insertAfter(pmRef, pmEntry.childNodes().at(insertAfterChildNum+1)); + else + pmEntry.insertAfter(pmRef, pmEntry.childNodes().at(insertAfterChildNum)); + + setCurItem(items.count()-1); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode", parent_modelIdentCode); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer", parent_pmIssuer); + } + + prepareSaveProject(); + return items.count()-1; +} + +int S1000D_Manager::createDM(int parentItemInd, int insertAfterChildNum, QString scheme) { + int parent = parentItemInd; + while(true) { + if(parent == -1) break; + if(items[parent].moduleType == mtPM) break; + parent = items[parent].parent; + } + ItemStruct newDM; + newDM.parent = parent; newDM.child.clear(); + newDM.moduleType = mtDM; newDM.schemeType = getSchemeTypeByStr(scheme); + newDM.isReady = false; + newDM.fileCode = ""; newDM.fileName = projectPath+"/"+"~NEWFILE"+QString::number(rand())+".xml"; + newDM.importedFromLyX = ""; newDM.html.clear(); + newDM.isQualifyed = true; //newDM.crewFlags = 0xFFFF; + + QFile xmlFile(":new/BlankXML/"+scheme.toLower()+".xml"); + if (!xmlFile.open(QFile::ReadOnly | QFile::Text)) { + if(DBG) qDebug() << " Cant open :new/BlankXML/"+scheme.toLower()+".xml"; + return -1; + } + QByteArray fileData = xmlFile.readAll(); + xmlFile.close(); + + newDM.doc.setContent(fileData); + items.append(newDM); + if(parent != -1) + items[parent].child.insert(insertAfterChildNum+1, items.count()-1); + setCurItem(items.count()-1); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.issueInfo", "issueNumber", ru_const.issueNumber); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.issueInfo", "inWork", ru_const.inWork); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.language", "languageIsoCode", ru_const.languageIsoCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.language", "countryIsoCode", ru_const.countryIsoCode); + setNodeAttr("identAndStatusSection.dmStatus.security", "securityClassification", ru_const.security_securityClassification); + setNodeAttr("identAndStatusSection.dmStatus.responsiblePartnerCompany", "enterpriseCode", ru_const.responsiblePartnerCompany_enterpriseCode); + setNodeText("identAndStatusSection.dmStatus.responsiblePartnerCompany.enterpriseName", ru_const.responsiblePartnerCompany_enterpriseName); + setNodeAttr("identAndStatusSection.dmStatus.originator", "enterpriseCode", ru_const.originator_enterpriseCode); + setNodeText("identAndStatusSection.dmStatus.originator.enterpriseName", ru_const.originator_enterpriseName); + + if(parent != -1) { + setCurItem(parent); + QString parent_modelIdentCode = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode"); + //QString parent_pmIssuer = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer"); + QDomNode pmEntry = findElement("content.pmEntry"); + QDomElement dmRef = createEmpty_dmRef(parent_modelIdentCode); + + if(insertAfterChildNum >= pmEntry.childNodes().count()) { + if(DBG) qDebug() << " Error: createDM - insertAfterChildNum >= pmEntry.childNodes().count()"; + return items.count()-1; + } + if(isNodeCreated("content.pmEntry.pmEntryTitle")) + pmEntry.insertAfter(dmRef, pmEntry.childNodes().at(insertAfterChildNum+1)); + else + pmEntry.insertAfter(dmRef, pmEntry.childNodes().at(insertAfterChildNum)); + + setCurItem(items.count()-1); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode", parent_modelIdentCode); + } + setNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName", "Задайте имя и кодирование модуля"); + + prepareSaveProject(); + return items.count()-1; +} + +QDomElement S1000D_Manager::createEmpty_pmRef(QString parent_modelIdentCode, QString parent_pmIssuer) { + QDomElement pmRef = item->doc.createElement("pmRef"); + QDomElement pmRefIdent = item->doc.createElement("pmRefIdent"); + pmRef.appendChild(pmRefIdent); + QDomElement pmCode = item->doc.createElement("pmCode"); + pmRefIdent.appendChild(pmCode); + pmCode.setAttribute("modelIdentCode", parent_modelIdentCode); + pmCode.setAttribute("pmIssuer", parent_pmIssuer); + pmCode.setAttribute("pmNumber", ""); + pmCode.setAttribute("pmVolume", ""); + QDomElement issueInfo = item->doc.createElement("issueInfo"); + pmRefIdent.appendChild(issueInfo); + issueInfo.setAttribute("inWork", ru_const.inWork); + issueInfo.setAttribute("issueNumber", ru_const.issueNumber); + QDomElement language = item->doc.createElement("language"); + pmRefIdent.appendChild(language); + language.setAttribute("languageIsoCode", ru_const.languageIsoCode); + language.setAttribute("countryIsoCode", ru_const.countryIsoCode); + + QDomElement pmRefAddressItems = item->doc.createElement("pmRefAddressItems"); + pmRef.appendChild(pmRefAddressItems); + QDomElement pmTitle = item->doc.createElement("pmTitle"); + pmRefAddressItems.appendChild(pmTitle); + pmTitle.appendChild(item->doc.createTextNode("")); + QDomElement issueDate = item->doc.createElement("issueDate"); + pmRefAddressItems.appendChild(issueDate); + issueDate.setAttribute("day", ""); + issueDate.setAttribute("month", ""); + issueDate.setAttribute("year", ""); + return pmRef; +} + +QDomElement S1000D_Manager::createEmpty_dmRef(QString parent_modelIdentCode) { + QDomElement dmRef = item->doc.createElement("dmRef"); + QDomElement dmRefIdent = item->doc.createElement("dmRefIdent"); + dmRef.appendChild(dmRefIdent); + QDomElement dmCode = item->doc.createElement("dmCode"); + dmRefIdent.appendChild(dmCode); + dmCode.setAttribute("modelIdentCode", parent_modelIdentCode); + dmCode.setAttribute("systemDiffCode", ""); + dmCode.setAttribute("systemCode", ""); + dmCode.setAttribute("subSystemCode", ""); + dmCode.setAttribute("subSubSystemCode", ""); + dmCode.setAttribute("assyCode", ""); + dmCode.setAttribute("disassyCode", ""); + dmCode.setAttribute("disassyCodeVariant", ""); + dmCode.setAttribute("infoCode", ""); + dmCode.setAttribute("infoCodeVariant", ""); + dmCode.setAttribute("itemLocationCode", ""); + dmCode.setAttribute("learnCode", ""); + dmCode.setAttribute("learnEventCode", ""); + QDomElement issueInfo = item->doc.createElement("issueInfo"); + dmRefIdent.appendChild(issueInfo); + issueInfo.setAttribute("inWork", ru_const.inWork); + issueInfo.setAttribute("issueNumber", ru_const.issueNumber); + QDomElement language = item->doc.createElement("language"); + dmRefIdent.appendChild(language); + language.setAttribute("languageIsoCode", ru_const.languageIsoCode); + language.setAttribute("countryIsoCode", ru_const.countryIsoCode); + + QDomElement dmRefAddressItems = item->doc.createElement("dmRefAddressItems"); + dmRef.appendChild(dmRefAddressItems); + QDomElement dmTitle = item->doc.createElement("dmTitle"); + dmRefAddressItems.appendChild(dmTitle); + QDomElement dmTechName = item->doc.createElement("techName"); + dmTitle.appendChild(dmTechName); + dmTechName.appendChild(item->doc.createTextNode("")); + QDomElement dmInfoName = item->doc.createElement("infoName"); + dmTitle.appendChild(dmInfoName); + dmInfoName.appendChild(item->doc.createTextNode("")); + QDomElement issueDate = item->doc.createElement("issueDate"); + dmRefAddressItems.appendChild(issueDate); + issueDate.setAttribute("day", ""); + issueDate.setAttribute("month", ""); + issueDate.setAttribute("year", ""); + return dmRef; +} + +void S1000D_Manager::deleteItem(int itemInd) { + prepareSaveProject(); + QDomNode oldItemNodeRef; + int itemParent = items[itemInd].parent; + QString fileName = items[itemInd].fileName; + + if(items[itemInd].child.count() > 0) return; + if(itemParent != -1) { + QString refCodeStr = ""; + setCurItem(itemParent); + int cntRef = getNodeChildsWithNameCount("content.pmEntry", "pmRef"); + for(int p=0;p itemInd) items[i].child[j]--; + } + + QFile itemFile(fileName); + if(QFileInfo::exists(fileName)) { + itemFile.setPermissions(QFileDevice::WriteUser | QFileDevice::ReadUser | QFileDevice::ExeUser); + itemFile.remove(); + } +} + +void S1000D_Manager::replaceCurItem_dmCode(QString new_techName, QString new_infoName, + QString new_modelIdentCode, QString new_systemDiffCode, + QString new_systemCode, QString new_subSystemCode, QString new_subSubSystemCode, QString new_assyCode, + QString new_disassyCode, QString new_disassyCodeVariant, + QString new_infoCode, QString new_infoCodeVariant, + QString new_itemLocationCode, QString new_learnCode, QString new_learnEventCode) { + if(item->moduleType != mtDM) return; + + ItemStruct *oldItem = item; + QString oldDMCodeStr, dmRefCodeStr; + + oldDMCodeStr = dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode", new_modelIdentCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemDiffCode", new_systemDiffCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemCode", new_systemCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSystemCode", new_subSystemCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSubSystemCode", new_subSubSystemCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "assyCode", new_assyCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCode", new_disassyCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCodeVariant", new_disassyCodeVariant); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCode", new_infoCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCodeVariant", new_infoCodeVariant); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "itemLocationCode", new_itemLocationCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnCode", new_learnCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnEventCode", new_learnEventCode); + setNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName", new_techName); + setNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName", new_infoName); + if(item->schemeType == stLEARNING) + setNodeText("content.learning.learningAssessment.title", new_techName +" - "+ new_infoName); + + if(item->parent != -1) { + int parent = item->parent; + setCurItem(parent); + int cntRef = getNodeChildsWithNameCount("content.pmEntry", "dmRef"); + for(int p=0;pmoduleType == mtPM) return "ICN-ERROR-PM"; + QString modelIdentCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode"); + QString systemDiffCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemDiffCode"); + QString systemCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemCode"); + QString subSystemCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSystemCode"); + QString subSubSystemCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSubSystemCode"); + QString issueNumber = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.issueInfo", "issueNumber"); + QString z; z.fill('0',5-QString::number(ICN_UI).length()); + QString icn_ui = z + QString::number(ICN_UI); + ICN_UI++; + QString icn = "ICN-"+modelIdentCode+"-"+systemDiffCode+"-"+systemCode+subSystemCode+subSubSystemCode+"-A-"+ + ru_const.originator_enterpriseCode+"-"+icn_ui+"-"+ru_const.icn_variantCode+"-"+issueNumber+"-1"; + return icn; +} + +bool S1000D_Manager::copyDir(const QString &srcPath, const QString &dstPath) +{ + QDir dstdir = QDir(dstPath); + //if (dstdir.exists()) dstdir.removeRecursively(); // не удаляем существующую +// QDir parentDstDir(QFileInfo(dstPath).path()); + if (!dstdir.exists()) + { +// if (!parentDstDir.mkdir(QFileInfo(dstPath).fileName())) + if (!dstdir.mkpath(dstPath)) + return false; + } + + QDir srcDir(srcPath); + foreach(const QFileInfo &info, srcDir.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot)) { + QString srcItemPath = srcPath + "/" + info.fileName(); + QString dstItemPath = dstPath + "/" + info.fileName(); + if (info.isDir()) { + if (!copyDir(srcItemPath, dstItemPath)) + return false; + } else if (info.isFile()) { + if(!QFileInfo(dstItemPath).exists()) + if (!QFile::copy(srcItemPath, dstItemPath)) + return false; + } else { + qDebug() << "Unhandled item in copyDir: " + info.filePath(); + } + } + return true; +} + +void S1000D_Manager::ParsePackageContent(QDomNode node, int parentItem) { + for(int i=0;imoduleType == mtDM) + title = getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); + else + title = getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); + QString nodeName = node.childNodes().at(i).toElement().attribute("name"); + QString nodeOrigTitle = node.childNodes().at(i).toElement().attribute("origTitle"); + if(nodeOrigTitle == "") nodeOrigTitle = nodeName; + + if(nodeOrigTitle != item->origTitle) + continue; + if(nodeName != nodeOrigTitle && nodeName != "") { + if(item->moduleType == mtDM) + setNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName", nodeName); + else + setNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle", nodeName); + } else { + if(item->moduleType == mtDM) + setNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName", nodeOrigTitle); + else + setNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle", nodeOrigTitle); + } + + QString t = node.childNodes().at(i).toElement().attribute("packs"); + + QStringList packNames = node.childNodes().at(i).toElement().attribute("packs").split(","); + foreach(PackageStruct pck, packages) + if(pck.cfgName != "" && packNames.contains(pck.cfgName)) + if(!item->inPackages.contains(pck.cfgName)) + item->inPackages.append(pck.cfgName); + + QString infoCode, learnCode, disassyCode, systemCode, subSubSystemCode, subSystemCode, + learnEventCode, itemLocationCode, systemDiffCode, modelIdentCode, infoCodeVariant, assyCode, disassyCodeVariant, + pmIssuer, pmNumber, pmVolume; + if(item->moduleType == mtDM) { + modelIdentCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode"); + if(modelIdentCode == "") { + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCode", node.childNodes().at(i).toElement().attribute("infoCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnCode", node.childNodes().at(i).toElement().attribute("learnCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCode", node.childNodes().at(i).toElement().attribute("disassyCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemCode", node.childNodes().at(i).toElement().attribute("systemCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSubSystemCode", node.childNodes().at(i).toElement().attribute("subSubSystemCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSystemCode", node.childNodes().at(i).toElement().attribute("subSystemCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnEventCode", node.childNodes().at(i).toElement().attribute("learnEventCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "itemLocationCode", node.childNodes().at(i).toElement().attribute("itemLocationCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemDiffCode", node.childNodes().at(i).toElement().attribute("systemDiffCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode", node.childNodes().at(i).toElement().attribute("modelIdentCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCodeVariant", node.childNodes().at(i).toElement().attribute("infoCodeVariant")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "assyCode", node.childNodes().at(i).toElement().attribute("assyCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCodeVariant", node.childNodes().at(i).toElement().attribute("disassyCodeVariant")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.language", "languageIsoCode", ru_const.languageIsoCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.language", "countryIsoCode", ru_const.countryIsoCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.issueInfo", "inWork", ru_const.inWork); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.issueInfo", "issueNumber", ru_const.issueNumber); + item->isQualifyed = (node.childNodes().at(i).toElement().attribute("isQualifyed") == "1"); + + } + } + else { + modelIdentCode = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode"); + if(modelIdentCode == "") { + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer", node.childNodes().at(i).toElement().attribute("pmIssuer")); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmNumber", node.childNodes().at(i).toElement().attribute("pmNumber")); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmVolume", node.childNodes().at(i).toElement().attribute("pmVolume")); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode", node.childNodes().at(i).toElement().attribute("modelIdentCode")); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.language", "languageIsoCode", ru_const.languageIsoCode); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.language", "countryIsoCode", ru_const.countryIsoCode); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.issueInfo", "inWork", ru_const.inWork); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.issueInfo", "issueNumber", ru_const.issueNumber); + item->isQualifyed = (node.childNodes().at(i).toElement().attribute("isQualifyed") == "1"); + } + } + + ParsePackageContent(node.childNodes().at(i), j); + } +} + +void S1000D_Manager::LoadPackagesXML() +{ + QDomDocument packDOM; + QString xmlFileName = rootLyXfile; xmlFileName.replace(".lyx", ".xml"); + QFile packFile(xmlFileName); //QFileInfo(rootLyXfile).path()+"/packages.xml" + if (!packFile.open(QFile::ReadOnly | QFile::Text)) { + //if(DBG) qDebug() << "LoadPackagesXML: Не удалось открыть файл "+xmlFileName; + return; + } + packDOM.setContent(packFile.readAll()); + packFile.close(); + + //QString lyxFileName = packDOM.namedItem("packages").namedItem("lyx").toElement().attribute("filename"); + //if(lyxFileName != QFileInfo(rootLyXfile).fileName()) { + // qDebug() << "LoadPackagesXML: Ошибка импорта - имена исходных файлов LyX отличаются."; + // return; + //} + QDomNode packList = packDOM.namedItem("packages").namedItem("packlist"); + QDomNode contents = packDOM.namedItem("packages").namedItem("contents"); + timeConvert = packList.toElement().attribute("tConvert").toInt(); + timeSCORM = packList.toElement().attribute("tSCORM").toInt(); + timeS1000D = packList.toElement().attribute("tS1000D").toInt(); + packages.clear(); + for(int i=0;imoduleType == mtDM) + { + node = parent.ownerDocument().createElement("DM"); + title = getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); + node.toElement().setAttribute("name", title); + + infoCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCode"); node.toElement().setAttribute("infoCode", infoCode); + learnCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnCode"); node.toElement().setAttribute("learnCode", learnCode); + disassyCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCode"); node.toElement().setAttribute("disassyCode", disassyCode); + systemCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemCode"); node.toElement().setAttribute("systemCode", systemCode); + subSubSystemCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSubSystemCode"); node.toElement().setAttribute("subSubSystemCode", subSubSystemCode); + subSystemCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSystemCode"); node.toElement().setAttribute("subSystemCode", subSystemCode); + learnEventCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnEventCode"); node.toElement().setAttribute("learnEventCode", learnEventCode); + itemLocationCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "itemLocationCode"); node.toElement().setAttribute("itemLocationCode", itemLocationCode); + systemDiffCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemDiffCode"); node.toElement().setAttribute("systemDiffCode", systemDiffCode); + modelIdentCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode"); node.toElement().setAttribute("modelIdentCode", modelIdentCode); + infoCodeVariant = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCodeVariant"); node.toElement().setAttribute("infoCodeVariant", infoCodeVariant); + assyCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "assyCode"); node.toElement().setAttribute("assyCode", assyCode); + disassyCodeVariant = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCodeVariant"); node.toElement().setAttribute("disassyCodeVariant", disassyCodeVariant); + node.toElement().setAttribute("isQualifyed", (int)item->isQualifyed); + node.toElement().setAttribute("origTitle", item->origTitle); + //infoCode="043" learnCode="T40" disassyCode="00" systemCode="05" subSubSystemCode="2" subSystemCode="6" + //learnEventCode="C" itemLocationCode="A" systemDiffCode="A" modelIdentCode="MI38" infoCodeVariant="A" assyCode="00" disassyCodeVariant="A" + } + else + { + node = parent.ownerDocument().createElement("PM"); + title = getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); + node.toElement().setAttribute("name", title); + + pmIssuer = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer"); node.toElement().setAttribute("pmIssuer", pmIssuer); + pmNumber = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmNumber"); node.toElement().setAttribute("pmNumber", pmNumber); + pmVolume = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmVolume"); node.toElement().setAttribute("pmVolume", pmVolume); + modelIdentCode = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode"); node.toElement().setAttribute("modelIdentCode", modelIdentCode); + node.toElement().setAttribute("isQualifyed", (int)item->isQualifyed); + node.toElement().setAttribute("origTitle", item->origTitle); + //pmIssuer="RHC01" pmNumber="FTC01" pmVolume="00" modelIdentCode="MI38" + } + parent.appendChild(node); + QString liststr = item->inPackages.join(","); + node.toElement().setAttribute("packs", liststr); + + for(int i=0;i 0) fontsize = 16; + int padtop = 15; if(lvl > 0) padtop = 5; + addHTML(8+lvl*2, "
"); + + for(int i=0;i"); + } + + // + // + // +} + +void S1000D_Manager::addHTML(int lvl, QString s) { + QString spc = ""; for(int j=0;jSetTitle("Копирование служебных файлов..."); + QApplication::processEvents(); + } + + copyDir(QCoreApplication::applicationDirPath()+"/Scorm", SCORMpath); + + if(!isConsole) + splash->SetTitle("Формирование SCORM-пакета..."); + QApplication::processEvents(); + + +// enum OperatingSytem {OS_WINDOWS, OS_UNIX, OS_LINUX, OS_MAC} os; +// #if (defined (Q_OS_WIN) || defined (Q_OS_WIN32) || defined (Q_OS_WIN64)) +// os = OS_WINDOWS; +// #elif (defined (Q_OS_UNIX)) +// os = OS_UNIX; +// #elif (defined (Q_OS_LINUX)) +// os = OS_LINUX; +// #elif (defined (Q_OS_MAC)) +// os = OS_MAC; +// #endif +// QStringList params; +// if(os == OS_WINDOWS) { +// QString winpath1 = SCORMpath; winpath1.replace("/","\\"); +// params << "/C"<<"xcopy"<<"/E" << "/C" << "/Y"<< QCoreApplication::applicationDirPath().replace("/","\\")+"\\Scorm\\*.*" << winpath1+"\\" << ">nul"; +// QProcess::startDetached("cmd.exe", params); +// } else { +// params << "-R"<< QCoreApplication::applicationDirPath()+"/Scorm/*" << SCORMpath+"/" << "> /dev/null"; +// QProcess::startDetached("cp", params); +// } + + resetICN(); + for(int i=0;ischemeType == stLEARNING) { + item->SCORM_fileName = "DMC-" + item->fileCode + "_"+getNodeAttr(_issueInfo, "issueNumber")+"-"+getNodeAttr(_issueInfo, "inWork")+"_"+getNodeAttr(_language, "languageIsoCode")+"-"+getNodeAttr(_language, "countryIsoCode")+".xml"; + if(QFile::exists(SCORMpath+"/" + item->SCORM_fileName)) QFile::remove(SCORMpath+"/" + item->SCORM_fileName); + if(!QFile::copy(projectPath+"/"+item->fileName, SCORMpath+"/" + item->SCORM_fileName)) + if(DBG) qDebug() << "scorm: Error copy" << projectPath+"/"+item->fileName << "to" << SCORMpath+"/" + item->SCORM_fileName; + continue; + } + item->SCORM_fileName = "DMC-" + item->fileCode + "_"+getNodeAttr(_issueInfo, "issueNumber")+"-"+getNodeAttr(_issueInfo, "inWork")+"_"+getNodeAttr(_language, "languageIsoCode")+"-"+getNodeAttr(_language, "countryIsoCode")+".html"; + } + + for(int i=0;iSetTitle("Формирование SCORM-пакета..."); splash->Step(); + QApplication::processEvents(); + } + + setCurItem(i); + if (!QFile::exists(projectPath + "/" + item->fileName)) { + if(!isConsole) { + splash->hide(); + splash->ErrMessage("Ошибка","Файл "+projectPath + "/" + item->fileName+" не найден."); + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); + } + return false; + } + QString htmlFileName = projectPath + "/" + item->fileName; htmlFileName.replace(".xml", ".html"); + if (item->moduleType == mtDM && !QFile::exists(htmlFileName) && item->schemeType != stLEARNING) { + if(!isConsole) { + splash->hide(); + splash->ErrMessage("Ошибка","Файл "+htmlFileName+" не найден."); + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); + } + return false; + } + + QFile htmlFile(htmlFileName); + if (!htmlFile.open(QFile::ReadOnly | QFile::Text)){ + qDebug() << "scorm: file.open error "+htmlFileName; + return false; + } + QStringList htmlText = QString(htmlFile.readAll()).split("\n"); + htmlFile.close(); + + for(int j=0;jStep(); + + QString s = "class=\"S1000Dmultimediaobj\""; + int k = htmlText[j].indexOf(s); + if(k > -1) { + s = "val=\""; + int m = htmlText[j].indexOf(s); + QString fn = htmlText[j].mid(m+s.length(), htmlText[j].indexOf("\"",m+s.length())-m-s.length()); + QString icn = genICN(); + QString icnfn = icn+"."+fn.split(".").last(); + htmlText[j].replace(fn, icnfn); + //if(QFile::exists(SCORMpath+"/"+icnfn)) QFile::remove(SCORMpath+"/"+icnfn); + if(!QFile::exists(SCORMpath+"/"+icnfn)) + if(!QFile::copy(projectPath+"/"+fn, SCORMpath+"/"+icnfn)) + if(DBG) qDebug() << "scorm: Error copy" << projectPath+"/"+fn << "to" << SCORMpath+"/"+icnfn; + } + + s = " -1) { + s = "src=\""; + int m = htmlText[j].indexOf(s); + QString fn = htmlText[j].mid(m+s.length(), htmlText[j].indexOf("\"",m+s.length())-m-s.length()); + if(!fn.startsWith("app/")) { + QString icn = genICN(); + QString icnfn = icn+"."+fn.split(".").last(); + htmlText[j].replace(fn, icnfn); + //if(QFile::exists(SCORMpath+"/"+icnfn)) QFile::remove(SCORMpath+"/"+icnfn); + if(!QFile::exists(SCORMpath+"/"+icnfn)) + if(!QFile::copy(projectPath+"/"+fn, SCORMpath+"/"+icnfn)) + if(DBG) qDebug() << "scorm: Error copy" << projectPath+"/"+fn << "to" << SCORMpath+"/"+icnfn; + } + } + + s = "onmousemove=\"showTooltipImg(evt, '"; + k = htmlText[j].indexOf(s); + if(k > -1) { + QString fn = htmlText[j].mid(k+s.length(), htmlText[j].indexOf("'",k+s.length())-k-s.length()); + QString icn = genICN(); + QString icnfn = icn+"."+fn.split(".").last(); + htmlText[j].replace(fn, icnfn); + //if(QFile::exists(SCORMpath+"/"+icnfn)) QFile::remove(SCORMpath+"/"+icnfn); + if(!QFile::exists(SCORMpath+"/"+icnfn)) + if(!QFile::copy(projectPath+"/"+fn, SCORMpath+"/"+icnfn)) + if(DBG) qDebug() << "scorm: Error copy" << projectPath+"/"+fn << "to" << SCORMpath+"/"+icnfn; + } + + s = " -1) { + QString fn = htmlText[j].mid(k+s.length(), htmlText[j].indexOf("\"",k+s.length())-k-s.length()); + if(!fn.startsWith("#")) { + if(fn.contains(".html#")) { // межмодульная ссылка + fn = fn.left(fn.indexOf("#")); + QString name; + for(int n=0;nSCORM - hide(); + splash->ErrMessage("Ошибка", "href: Ошибка копирования:/n'"+projectPath+"/"+fn.split("/")[0]+"' в '"+SCORMpath+"/"+fn.split("/")[0]+"'"); + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); + } + return false; + } + } + } //# + } // -1) { + //s = "src=\""; + //int m = htmlText[j].indexOf(s); + //QString fn = htmlText[j].mid(m+s.length(), htmlText[j].indexOf("\"",m+s.length())-m-s.length()); + + //scRegister('01060301-003.xml', 'title', 'd1', 'models/sc1.html'); + QList htmlSplit = htmlText[j].split("'"); + QString fn = htmlSplit[ htmlSplit.count()-2]; + + QDir dir(projectPath+"/"+fn.split("/")[0]); + QDir dir2(SCORMpath+"/"+fn.split("/")[0]); + if(!dir.exists()) { + if(!isConsole) { + splash->hide(); + splash->ErrMessage("Ошибка","ИМВС: Папка "+projectPath+"/"+fn.split("/")[0]+" не найдена."); + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); + } + return false; + } + //qDebug() << "copy 3D: '"+projectPath+"/"+fn.split("/")[0]+"' to '"+S1000Dpath+"/"+fn.split("/")[0]+"'"; + if(!dir2.exists()) + if(!copyDir(projectPath+"/"+fn.split("/")[0], SCORMpath+"/"+fn.split("/")[0])) + { + if(!isConsole) { + splash->hide(); + splash->ErrMessage("Ошибка", "ИМВС: Ошибка копирования:/n'"+projectPath+"/"+fn.split("/")[0]+"' в '"+SCORMpath+"/"+fn.split("/")[0]+"'"); + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); + } + return false; + } + } // "; +} + +// ---------------------------------------------------------------------------------------- + +function onLearnedButton() { + if(scList.size == 0){ + learnResult(); + let btn = document.getElementById('learnedButton'); + btn.style.display = 'none'; + } else { + var msgStr; + msgStr = '

Не изучены сценарии интерактивной модели ВС:


'; + for (let sc of scList.values()) + msgStr += " - "+sc+"
"; + $("#dialog").html(msgStr); + $( function() { + $( "#dialog" ).dialog(); + $('#dialog').dialog("option", "width", "auto"); $('#dialog').dialog("option", "height", "auto"); + } ); + + } +} + +function onLoadFunction() { + var H = document.getElementById('container_text').offsetHeight; + window.sessionStorage.setItem('contentsHeight', H); + window.sessionStorage.setItem('scrollY', window.scrollY); + //console.log('din.js scrollY = ',window.scrollY); + window.scrollTo({ top: 0, behavior: 'auto' }); + if(typeof window.parent.objectHTMLLoaded !== "undefined") + window.parent.objectHTMLLoaded(); + + let timerId = setInterval(() => { + var h = document.getElementById('container_text').offsetHeight; + if(h != H) { + H = h; + window.sessionStorage.setItem('contentsHeight', H); + window.sessionStorage.setItem('scrollY', window.scrollY); + //console.log('din.js scrollY = ',window.scrollY); + + if(typeof window.parent.updateDocHeight !== "undefined") + window.parent.updateDocHeight(); + } + }, 50); + setTimeout(() => { clearInterval(timerId); }, 1000); +} +function onResize() { + var H = document.getElementById('container_text').offsetHeight; + window.sessionStorage.setItem('contentsHeight', H); + if(typeof window.parent.updateDocHeight !== "undefined") + window.parent.updateDocHeight(); +} \ No newline at end of file diff --git a/s1000d/Converter_Source/EDL/dinamika/singlescorm.css b/s1000d/Converter_Source/EDL/dinamika/singlescorm.css new file mode 100644 index 0000000..8c845df --- /dev/null +++ b/s1000d/Converter_Source/EDL/dinamika/singlescorm.css @@ -0,0 +1,275 @@ +html, +body { + margin: 0; + padding: 0; + height:100%; + width: 100%; + scrollbar-width: auto; + text-rendering: optimizeLegibility; + scroll-behavior: smooth; +} +body { + font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif; + line-height: 1.4em; + background: #f5f5f5; + color: #7c2529; + min-width: 230px; + margin: 0 auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + overflow-y: auto; + display: flex; +} +.div, .aside { + display: block; +} +button { + margin: 0; + padding: 0; + border: 0; + background: none; + font-size: 100%; + vertical-align: baseline; + font-family: inherit; + font-family: 'Trebuchet MS', sans-serif; + font-weight: inherit; + color: inherit; + -webkit-appearance: none; + appearance: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.dropbtn { + background-color: f5f5f5; + color: #7c2529; + height: 30px; + font-size: 14px; + border: none; + border-bottom: 1px solid #7c2529cc; + cursor: pointer; + width: 290px; + text-align: left; +} +.dropdown { + display: none; + position: relative; +} +.dropdown-content { + display: none; + position: absolute; + min-width: 250px; + z-index: 1; + background-color: f5f5f5; + transition-duration: 0.3s; + transition-timing-function: ease-out; +} +.dropdown-content button { + color: #7c2529; + background-color: #f5f5f5; + border: none; + border-bottom: 1px solid #f0d1d3; + padding: 8px 16px; + text-decoration: none; + display: block; + width: 100%; + cursor: pointer; + border-bottom-right-radius: 15px; + border-top-left-radius: 15px; +} +.dropdown-content button:hover {background-color: #dfb2b6} +.btnToTop { + position: fixed; + bottom: 0px; + right: 0px; + width: 67px; + height: 64px; + background: url(../images/BG_rightIcon.png) no-repeat; + cursor: pointer; + transform: scale(0.8); +} +.btnToTop:hover { + animation: bounce 2s infinite linear; +} +@keyframes bounce { + 0% {transform: scale(0.8) translateY(0%)} + 25% {transform: scale(0.8) translateY(-10%)} + 50% {transform: scale(0.8) translateY(-0%)} + 75% {transform: scale(0.8) translateY(-10%)} + 100% {transform: scale(0.8) translateY(0%)} +} +.btnToTop i { + display: block; + width: 33px; + height: 30px; + border: none; + background: url(../images/toTop.svg) no-repeat; + position: absolute; + left: -2px; + right: 0; + top: -7px; + bottom: 0; + margin: auto; +} + +.view-toc { + position: sticky; + overflow-y: auto; + overflow-x: hidden; + top: 5px; + left: 0; + width: 20vw; + height: 100%; + padding: 0px 0 0 0; + min-width: 20vw; +} +.view-toc-container { + position:fixed; + scrollbar-width: thin; + width: 20vw; + min-width: 20vw; + height: calc(100vh - 10px); + padding: 0; + overflow-x: hidden; + overflow-y: auto; + vertical-align: top; +} + +.view-toc h1 { + padding: 50px 0; + font-weight: 400; + text-align: center; + } + +.view-toc p { + margin: 0 0 20px; + line-height: 1.5; +} +.view-body::-webkit-scrollbar { + width: 5px; + height: 8px; + background-color: rgb(207, 73, 73); +} + +body::-webkit-scrollbar-track, .view-toc-container::-webkit-scrollbar-track { + background-color: #f0f0f0; + border-radius: 50px; +} + +body::-webkit-scrollbar-thumb, .view-toc-container::-webkit-scrollbar-thumb { + border-radius: 50px; + background-color: #ce9494; + box-shadow: inset 2px 2px 5px 0 rgba(#fff, 0.5); + min-height: 50px; +} +.view-toc-container::-webkit-scrollbar-thumb { + background-color: #ce94947a; +} +body::-webkit-scrollbar { + width: 15px; +} +.view-toc-container::-webkit-scrollbar { + width: 5px; +} + +.tree { + +} +.tree ul { + display: block; + margin: 0px; + padding: 0px; + list-style:none; + color:#7c2529; + position:relative; + font-size: 1rem; + -webkit-touch-callout: none; /* iOS Safari */ + -webkit-user-select: none; /* Chrome/Safari/Opera */ + -khtml-user-select: none; /* Konqueror */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* Internet Explorer/Edge */ + user-select: none; /* Non-prefixed version, currently not supported by any browser */ +} + +.tree ul {margin-left: 0.5em} /* (indentation/2) */ + +.tree ul:before { + content:""; + display:block; + width:0; + position:absolute; + top:0; + bottom:0; + border-left:none; +} + +.tree li { + display: block; + margin:0px; + padding:0 5px; /* indentation + .5em = 1.5em*/ + /*line-height:1.8em; default list item's `line-height` */ + position:relative; +} + +.tree container, .tree folder { + display: block; + padding: 3px; +} +.tree folder { + padding-top: 7px; + font-weight: bold; +} +.tree container icon { + background-repeat: no-repeat; + background-position: center center; + padding: 32px; + background-image: url('../icons/book2.png'); + background-size: 16px 16px; + /* url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAQCAYAAADwMZRfAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAnJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpDb21wcmVzc2lvbj41PC90aWZmOkNvbXByZXNzaW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5GbHlpbmcgTWVhdCBBY29ybiA1LjIuMTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wMi0wMlQxMjo0ODo1ODwveG1wOk1vZGlmeURhdGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgqitOMRAAABuklEQVQ4EZVSvy9sQRT+Znfseh4rfuUVSCQahSBeIZaORqURT6L1FyjlFSJER0In0RMajeqphEVHqxIhmydYrL137sydce5ds9lYWesk9557vvOdb+acexjebXrtMqHjv2I2VtEnvTPT/mDjcp7bpKypX4Vxxm3MTOyKvn/buJwPRQYXTzYn+yLj3W2JJkvO5OTP68XUEWAmU3+TNxb/zLM/G+n1gc7I1FBnork5EYeQgCOAuxcf++f/ce+wXWmiz8XFDOxqe6Zl4Xhl8EdyNuVww9h0f0dDQ2Mdh+cDngakAeKxKMZ6W3D7LCaUT0CReQo3eiP9dHa3vAWQSJCrpndNYaRFbHD00PPRrh9V6+Flbj4T6doLchx0iKcNXLpFpSYLXDcs4dAKgkCnkPhayg3a8yVcVOdFpBJwlEZOfV1sGQFfSUESmbyIki6JmIpE2LuKS3xFh1vjSnkQBH5nJkE7gYgr8kJcKxm280r7UZHRdcJ2aCbWuO/L0/SjM5z1dK0Fy/mgpWxOZLWvTl2vKrxK2Obo0vE/gPWWKy7OGWYuDuaSIxYLN4kmPUFA6VZZVqn/xr8sLf4UeQNldMTNDtyI9wAAAABJRU5ErkJggg=='); */ +} + +.tree folder icon { + background-repeat: no-repeat; + background-position: 0 center; + padding-left: 0px; + + /* background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAQCAYAAADwMZRfAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAnJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpDb21wcmVzc2lvbj41PC90aWZmOkNvbXByZXNzaW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5GbHlpbmcgTWVhdCBBY29ybiA1LjIuMTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wMi0wMlQxMjo0OTowOTwveG1wOk1vZGlmeURhdGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgrkd8ulAAACb0lEQVQ4EZVSTWgTQRT+ZjP5L21KIeAfFpTWikJVqJdeiuJF0qulePHqRcGriAdPXqrFQy8i6EHwIGigFEQQvbRQxP5pSkzbxCbpT9o0SZvs7uzu+HabTeslxQcz7++bb957Mwx1mRy92sp1w+f6lV3TGHj8Y8f1m2neSOoYE5LfcP1AmE+RfdP1j9Tx+12v/0y+3S5nZ6S78t8/lOL3ut4feZgAbOLR5RedvVeGT1y63s5DHTB0AcswsbuZw+r0xF4xt/KO+xSpKIBpWHREgcLx5drD6TfuBXY7t6PdvW3BFg5DFKFYBmAJhMIMnX0D4Ug+c0fxMDACWpZEMZtCKZ/WyT0gkcIE97bBwyPw+OojsonqEj1z3jUdvfhtHIXM8j8xbmgqLL0CqYcaCbslrbq370tJTdt17EutXIIQViT+4OI5QAOCIZPDH4SubUGtErgu+eRvzH76TC1IeIQK0xsg64CIKWxIcgwxoUCaKHNoNUDaAwOEJpBbmEO1WET/8C0nxqgSeagSJ0ibTWnjZuIfwUHD8pp0m6oiO78AWavgVPdZ+AMBBLmFXV1Bi8863JHDU9ooIDs3m4Yp7zqTrFZqKGfmiXoHHcePIdzeBiYq0C0//EYNOoIIQIWAlx6YiDfXsbq4kiisLD2NjSbHHZJcKk1pDSdPR9EajcCkyrx0VKNHCqKKqkG9E4kkgp3CFtZTqUQmsTwWG0m+sssiEjm19nOuv6fvQoh5FFQ21pxy3U11jG2i2Jf1pdX08q+ll4PPks9djDNy+vZfKdDjBptqxp7ERhYbBDbWaceAPsgbP60pBTqsvfoHao777+xfmRQTxswccNgAAAAASUVORK5CYII='); + */ +} + +.tree container:hover { + cursor: pointer; + background: linear-gradient(to top, #ebc4c4, #ebc4c405); + border-radius:5px; + transform: scale(1.03); +} + +.tree button { + width: 100%; + font: 0.9em 'Helvetica Neue', Helvetica, Arial, sans-serif; + text-align: left; +} + +.view-body { + display: flex; + padding: 45px 0px 0px 0px; +} + +.view-doc { + display: flex; + width: 100%; + height: 100%; + margin: 0px 0px 0px 5px; + padding: 10px 20px; + min-width: 500px; + background: #fff; + border: 1px solid #e6e6e6; + border-radius: 8px; + box-shadow: 0px 2px 4px 0 rgba(0, 0, 0, 0.2), + 0px 2px 15px 0 rgba(0, 0, 0, 0.1); + flex-grow: 1; + overflow-y: visible; +} +.view-obj { + display: flex; + height: 100%; +} diff --git a/s1000d/Converter_Source/EDL/dinamika/styles_edl.css b/s1000d/Converter_Source/EDL/dinamika/styles_edl.css new file mode 100644 index 0000000..c843212 --- /dev/null +++ b/s1000d/Converter_Source/EDL/dinamika/styles_edl.css @@ -0,0 +1,1856 @@ +* { + box-sizing: border-box; + outline: none; +} + +html, +body { + height: 100%; +} + +body { + font-family: RobotoRegular, Arial, sans-serif; + font-size: 16px; + line-height: 20px; + background: #fff; + color: #212121; +} + +a { + text-decoration: none; + color: rgb(124, 37, 41); +} + +a:hover { + text-decoration: none; + opacity: .8; + color: rgb(157, 34, 53); +} + +h1 { + font-size: 2em; + line-height: 1.5em; + text-align: center; +} + +h2 { + text-align: center; +} + +p { + margin: 0; +} + +form.inTab { + display: block; + width: 70%; + margin: 20px auto; +} + +.form_row { + margin: 15px 0; +} + +.form_row input[type="text"], +.form_row input[type="number"], +.form_row select { + width: 100%; + height: 40px; + border: 1px solid #bfbaba; + border-radius: 4px; + padding: 0 5px; +} + +.form_row input[type="text"]:focus, +.form_row input[type="number"]:focus, +.form_row select:focus { + border-color: rgb(157, 34, 53); +} + +.form_row label { + display: block; + color: #929292; + padding-left: 15px; +} + +.main-list_inset_body_tabs button { + width: 100%; + margin: 15px 0 0 0; +} + +input[type="radio"], +input[type="checkbox"] { + width: 20px; + height: 20px; + cursor: pointer; + position: relative; + top: 3px; + opacity: 0; +} + +input[type="radio"]+label, +input[type="checkbox"]+label { + cursor: pointer; + display: inline-block; + position: relative; +} + +input[type="radio"]+label:before, +input[type="checkbox"]+label:before { + content: ""; + position: absolute; + display: block; + width: 20px; + height: 20px; + top: 0; + left: -23px; +} + +input[type="radio"]+label:before { + background: url(../images/radio.png) no-repeat; + background-position: 0 0; +} + +input[type="checkbox"]+label:before { + background: url(../images/checkbox.png) no-repeat; +} + +input[type="radio"]:checked+label:before, +input[type="checkbox"]:checked+label:before { + background-position: 0 -22px; +} + +.ui-overlay-a, +.ui-page-theme-a, +.ui-page-theme-a .ui-panel-wrapper { + text-shadow: none; +} + +.white { + color: #ffffff; + font-size: 20px; +} + +.header { + width: 100%; + min-width: 680px; + height: 90px; + background: rgb(124, 37, 41); +} + +.container { + max-width: 100%; + min-width: 680px; + min-height: 100%; + margin: 0 auto; + padding: 0 10px; +} + +.container .container_cell { + height: 100%; + float: left; +} + +.container .container_cell.wth-8 { + width: 8%; +} + +.container .container_cell.wth-10 { + width: 10%; +} + +.container .container_cell.wth-20 { + width: 20%; +} + +.container .container_cell.wth-30 { + width: 30%; +} + +.container .container_cell.wth-40 { + width: 40%; +} + +.container .container_cell.wth-50 { + width: 50%; +} + +.container .container_cell.wth-60 { + width: 60%; +} + +.container .container_cell.wth-70 { + width: 70%; +} + +.container .container_cell.wth-72 { + width: 72%; +} + +.container .container_cell.wth-80 { + width: 80%; +} + +.container .container_cell.wth-90 { + width: 90%; +} + +.container .container_cell.wth-100 { + width: 100%; +} + +.container .container_text { + padding: 20px 20px; + background: #fff; + font-family: 'RobotoRegular'; +} + +.container .container_text img { + display: block; + padding: 0px; + margin: 20px auto; + max-width: 100%; + clear: both; +} + +.container .container_text img+img { + max-width: inherit; +} + +.container .container_text a { + color: rgb(8, 43, 177); + text-decoration: underline; +} + +.container .container_text .img_descript { + text-align: center; + display: block; +} + +.container .container_text ul { + margin: 20px 0; + padding: 0; + list-style: none; +} + +.container .container_text ul li { + margin-bottom: 5px; + position: relative; + padding-left: 15px; +} + +.container .container_text ul li:before { + content: ''; + display: block; + width: 6px; + height: 6px; + background: #01579b; + border-radius: 50%; + position: absolute; + left: 0; + top: 7px; +} + +.container .container_text h3 { + font-size: 24px; + font-weight: normal; +} + +.container .container_text ul.parent ul { + display: block; +} + +.container .container_text ul.parent>li>span { + background: #282828; + color: #fff; + cursor: default; +} + +.descript_img { + margin: 0; +} + +.descript_img .column { + float: left; + padding-right: 20px; +} + +.descript_img:after { + content: " "; + display: table; + clear: both; +} + +.tableBox { + display: table; + height: 100%; + width: 100%; +} + +.tableBox_cell { + display: table-cell; + vertical-align: middle; + text-align: center; +} + +.logotype { + width: 100%; + height: 90px; +} + +.logotype a { + display: block; + height: 100%; + background: url(../images/logo_ru.png) no-repeat center; +} + +.main { + overflow-x: hidden; + width: 100%; + min-height: 100%; + background: rgba(204, 204, 204, 0.30); + position: relative; +} + +.description { + height: 100%; + width: 100%; + margin: 0; + padding: 0 0 0 10px; + position: relative; +} + +.description .description_body_arrow { + position: absolute; + width: 15px; + height: 15px; + right: 30px; + top: 30px; + background: url(../images/descript_arrow.png) no-repeat center; + z-index: 7; + cursor: pointer; +} + +.description .description_body_arrow.opened { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); +} + +.description .description_body { + position: absolute; + width: 98.5%; + min-height: 90px; + overflow: hidden; + text-overflow: ellipsis; + background: #01579b; + color: #fff; + padding: 25px 50px 20px 20px; + max-height: 9999px; + cursor: default; +} + +.description .description_body .description_body_text { + font-size: 20px; + font-family: RobotoLight; + background: #01579b; + line-height: 20px; +} + +.description .description_body .description_body_text.full { + top: -40px; + position: relative; +} + +.description .description_body.closed { + max-height: 90px; + cursor: pointer; +} + +.description:before, +.description:after { + content: ''; + display: block; + width: 1px; + height: 50px; + position: absolute; + top: 50%; + margin-top: -25px; + background: #fff; + z-index: 1; +} + +.description:before { + left: 11px; +} + +.description:after { + right: 1px; +} + +.description_body_fulltext { + display: none; + width: 100%; + position: absolute; + color: #fff; + background: #01579b; + font-size: 20px; + line-height: 24px; + font-family: RobotoLight; + padding: 25px 50px 20px 20px; + box-shadow: 3px 3px 13px 0px rgba(0, 0, 0, 0.35); + z-index: 6; +} + +.main-menu-wrapp { + width: 100%; + min-width: 680px; + height: 40px; + background: #282828; + position: relative; + box-shadow: 0 6px 11px rgba(0, 0, 0, 0.3); + z-index: 3; + /*transition: all ease-in 0.3s;*/ +} + + +/* .main-menu-wrapp.fix { + position: fixed; + top: 0px; + z-index: 8; }*/ + +.main-menu { + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; +} + +.main-menu .main-list { + /*text-align: justify; + -moz-text-align-last: justify; + text-align-last: justify;*/ + list-style-type: none; + /*width: 95%;*/ + height: 40px; + padding: 0; + margin: 0; + margin-left: 20px; +} + +.main-menu .main-list:after { + content: ""; + display: inline-block; + width: 100%; + height: 0; + overflow: hidden; +} + +.main-menu .main-list .main-list_top { + display: inline-block; + position: relative; +} + +.main-menu .main-list .main-list_top+.main-list_top { + margin-left: 40px; +} + +.main-menu .main-list .main-list_top span.main-item { + line-height: 40px; + font-size: 20px; + color: #ababab; +} + +.main-menu .main-list .main-list_top:before { + position: absolute; + content: ""; + display: none; + width: 100%; + height: 4px; + top: 0; + background: transparent; +} + +.main-menu .main-list .main-list_top:hover { + cursor: pointer; +} + +.main-menu .main-list .main-list_top:hover:before, +.main-menu .main-list .main-list_top.selected:before { + display: block; + background: rgb(124, 37, 41); +} + +.main-menu .main-list .main-list_top:hover span.main-item, +.main-menu .main-list .main-list_top.selected span.main-item { + color: #fff; +} + +.right-menu-buttons { + display: flex; + justify-content: flex-end; + align-items: center; +} + +.right-menu-buttons>div+div { + margin-left: 10px; +} + +.right-menu-buttons .iconsBox_item { + position: relative; + width: 35px; + height: 35px; + background: url(../images/BG_rightIcon.png) center center no-repeat; + cursor: pointer; + background-size: 110%; +} + +.right-menu-buttons .iconsBox_item .R_icon.cart { + background: url(../images/cart.png) no-repeat; + background-position: 2px 0px; + background-size: 69%; + width: 25px; + height: 20px; +} + +.right-menu-buttons .iconsBox_item .R_icon.bookmark { + background: none; +} + +.right-menu-buttons .iconsBox_item .R_icon.bookmark svg { + width: auto; + height: 21px; + margin-left: 5px; + margin-top: 3px; +} + +.right-menu-buttons .iconsBox_item .R_icon.sett { + background: none; +} + +.right-menu-buttons .iconsBox_item .R_icon.sett svg { + width: auto; + height: 21px; + margin-left: 5px; + margin-top: 3px; +} + +.main-list_inset, +.main-list_inset-search { + position: absolute; + width: 440px; + height: auto; + top: 40px; + /*box-shadow: 2px 2px 13px 0px rgba(0,0,0,0.25);*/ + background: #fff; + left: -450px; + -webkit-transition: all 0.5s; + transition: all 0.5s; + z-index: 1; +} + +.main-list_inset_c { + width: 0px; + height: auto; + overflow-x: hidden; + position: absolute; + top: 120px; + right: 0px; + /*box-shadow: 2px 2px 13px 0px rgba(0,0,0,0.25); */ + -webkit-transition: all 0.5s; + transition: all 0.5s; +} + +.main-list_inset_c .main-list_inset_body .main-list_inset_body_title { + background: #282828; +} + +.main-list_inset_c.visible { + width: 440px; + box-shadow: 2px 2px 13px 0px rgba(0, 0, 0, 0.25); +} + +#dmc.main-list_inset { + position: fixed; + width: 440px; + height: auto; + top: 193px; + /*box-shadow: 2px 2px 13px 0px rgba(0,0,0,0.25);*/ + background: #fff; + left: initial; + right: -450px; + -webkit-transition: all 0.5s; + transition: all 0.5s; + z-index: 1; +} + +#dmc.main-list_inset.visible { + right: 0; +} + +#dmc .main-list_inset_body { + max-height: 300px; + min-height: 300px; + height: 300px; +} + +#dmc .main-list_inset_body_tabs { + max-height: auto; + min-height: 300px; + height: auto; +} + +.dmc-right-panel ul { + list-style: none; + padding: 10px 15px; + margin: 0; +} + +.dmc-right-panel ul li { + vertical-align: top; + display: block; +} + +.dmc-right-panel .idstatus { + padding: 0 15px; + box-sizing: border-box; +} + +.dmc-right-panel .idstatus table { + width: 100%; +} + +.dmc-right-panel a { + text-decoration: none; + line-height: 185%; + color: rgb(124, 37, 41); +} + +.main-list_inset.visible { + left: 0; +} + +.main-list_inset_body { + position: relative; + box-shadow: 2px 2px 13px 0px rgba(0, 0, 0, 0.25); + max-height: calc(100vh - 130px); + height: calc(100vh - 130px); +} + +.main-list_inset_body .main-list_inset_body_title { + width: 100%; + height: 55px; + background: rgb(124, 37, 41); + color: #fff; + text-align: center; + font-size: 20px; + line-height: 55px; + cursor: pointer; +} + +.main-list_inset_body_tabs { + background: #fff; + max-height: calc(100vh - 185px); + height: calc(100vh - 185px); +} + +.main-list_inset_body_tabs:after { + content: " "; + display: table; + clear: both; +} + +.tabs__content { + display: none; + background: #fff; + padding-bottom: 10px; +} + +.mCSB_inside>.mCSB_container { + margin-right: 0; +} + +.tabs__content.active { + display: block; +} + +.tabs__content.active .btnCenter { + text-align: center; +} + +.tabs__content.active button { + width: 80%; + display: inline-block; +} + +.tabs__caption { + display: table; + width: 100%; + margin: 0; + padding: 0; +} + +.tab_item { + display: table-cell; + width: 33.33%; + height: 60px; + text-align: center; + vertical-align: middle; + background: #dddddd; + color: #282828; + cursor: pointer; +} + +.tab_item.active { + background: #282828; + color: #fff; + cursor: default; +} + +ul.parent { + padding: 0; + margin: 0; +} + +ul.parent li { + list-style: none; + cursor: pointer; + position: relative; + border-bottom: 1px solid #dddddd; +} + +ul.parent li a { + margin: 0; + padding-right: 10px; + display: inherit; + color: #212121; +} + +ul.parent li a:hover { + color: #01579b; +} + +ul.parent>li { + color: #212121; + list-style: none; + cursor: pointer; +} + +ul.parent>li span { + display: block; + padding: 10px 10px 10px 20px; +} + +ul.parent>li.selected span { + background: #282828; + color: #fff; +} + +ul.parent>li, +ul.parent>li li { + /*padding-left: 25px;*/ +} + +ul.parent>li:before, +ul.parent>li li span:before { + position: absolute; + display: block; + content: ""; + background: url(../images/arrow_menu.png); + width: 13px; + height: 13px; + left: 0; + top: 15px; +} + +ul.parent>li li { + border-bottom: 0; +} + +ul.parent>li.selected:before { + background-position: 0px -16px; +} + +ul.parent>li li.selected:before, +ul.parent>li li.selected span:before { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} + +ul.parent>li ul { + display: none; + padding: 3px 0 3px 15px; +} + +ul.parent>li a { + display: block; + padding: 10px 10px 10px 20px; +} + +ul.parent>li a i { + display: block; + font-size: 12px; + line-height: 12px; + font-weight: normal; + color: #888; + font-style: normal; +} + +.container .container_text ul.parent>li a i { + color: #0c0c0c; +} + +ul.parent>li span>a { + padding: 0px; + margin-left: 10px; + box-sizing: border-box; +} + +#com ul.parent>li span>a el, +#com ul.parent>li li a el { + display: block; + font-size: 12px; + line-height: 12px; + font-weight: normal; + color: #888; +} + +ul.parent>li.selected span>a { + color: #fff; +} + +.button_wrapp { + margin: 20px auto; + text-align: center; + padding: 0 15%; +} + +button { + border: none; + padding: 0 50px; + display: inline-block; + height: 50px; + color: #fff; + background: rgb(124, 37, 41); + font-size: 20px; + font-family: RobotoRegular, Arial, sans-serif; + margin: 10px; + border-radius: 5px; +} + +button:hover { + background: rgb(157, 34, 53); +} + +.iconsBox { + width: 70px; + height: auto; + position: fixed; + right: 0px; + top: 90px; + z-index: 4; + -webkit-transition: all 0.5s; + transition: all 0.5s; +} + +.iconsBox.moved { + width: 440px; + height: 64px; + position: fixed; + display: flex; + background: #282828; + top: 129px; +} + +.iconsBox.moved .iconsBox_item { + background: #282828; +} + +.iconsBox_item { + position: relative; + width: 67px; + height: 64px; + background: url(../images/BG_rightIcon.png) no-repeat; + cursor: pointer; +} + +.iconsBox_item .R_icon { + display: block; + width: 33px; + height: 30px; + background: url(../images/rightIcons_sprite1.png) no-repeat; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + margin: auto; +} + +.iconsBox_item .R_icon.lists { + background-position: 0 4px; +} + +.iconsBox_item .R_icon.lists_img { + background-position: 0 -60px; +} + +.iconsBox_item .R_icon.lists_multi { + background: none; +} + +.iconsBox_item .R_icon.lists_multi svg { + max-width: 30px; + max-height: 30px; +} + +.iconsBox_item .R_icon.lists_tables { + background-position: 0 -26px; +} + +.iconsBox_item .R_icon.identif { + background-position: 0 -90px; +} + +.iconsBox_item .R_icon.cart { + background: url(../images/cart.png) no-repeat; + background-position: 0 0px; +} + +.iconsBox_item .R_icon.comment { + background: none; +} + +.iconsBox_item .R_icon.comment svg { + width: 91%; + height: auto; +} + +.iconsBox_item .R_icon.cart+span, +.R_icon.bookmark+span { + color: #fff; + background: #01579b; + border-radius: 10px; + padding: 4px 7px 5px; + font-size: 13px; + line-height: 13px; + font-family: RobotoRegular; + font-style: normal; + text-align: center; + position: absolute; + right: -9px; + top: -9px; + display: none; +} + +.iconsBox_item.active .R_icon.lists, +.iconsBox.moved .iconsBox_item:hover .R_icon.lists { + background-position: 0 -121px; +} + +.iconsBox_item.active .R_icon.lists_img, +.iconsBox.moved .iconsBox_item:hover .R_icon.lists_img { + background-position: 0 -185px; +} + +.iconsBox_item.active .R_icon.lists_tables, +.iconsBox.moved .iconsBox_item:hover .R_icon.lists_tables { + background-position: 0 -151px; +} + +.iconsBox_item.active .R_icon.identif, +.iconsBox.moved .iconsBox_item:hover .R_icon.identif { + background-position: 0 -215px; +} + +.iconsBox_item.active .R_icon.cart, +.iconsBox.moved .iconsBox_item:hover .R_icon.cart { + background-position: 0 -30px; +} + +.iconsBox.moved .R_icon.cart { + display: none; +} + +.iconsBox_item.active { + box-sizing: border-box; + border-top: 4px solid rgb(124, 37, 41); +} + +.iconsBox_item.hidemenu { + display: none; + position: absolute; + right: 0; +} + +.iconsBox_item.hidemenu .R_icon.hidemenu { + background: url(../images/arrow_list.png) center center no-repeat; + display: none; +} + +.iconsBox.moved .iconsBox_item.hidemenu, +.iconsBox.moved .iconsBox_item.hidemenu .R_icon.hidemenu { + display: block; +} + +.tree-el { + display: inline-block; + padding: 8px 0; + padding-left: 10px; +} + +.tree-el a { + display: block; +} + +.tree-el span { + font-size: 12px; + line-height: 15px; + display: block; +} + +.frame_msg { + width: 100%; + border: 70px solid #fff; + margin: 30px 0; + text-align: center; +} + +.frame_msg.caution { + -o-border-image: url(../images/frame_yell.png) 65 round round; + border-image: url(../images/frame_yell.png) 65 round round; +} + +.frame_msg.warning { + -o-border-image: url(../images/frame_red.png) 65 round round; + border-image: url(../images/frame_red.png) 65 round round; +} + +.frame_msg_title { + text-align: center; + font-size: 20px; + text-transform: uppercase; + position: relative; + top: -15px; +} + +.container_text table { + width: 100%; + border-spacing: 0px; + border-collapse: collapse; +} + +.container_text table th, +.container_text table td { + border: 1px solid #dddddd; + padding: 10px; +} + +.S1000Dtable { + margin-bottom: 10px; +} + +.container_text table th, +.S1000Dtable th tr, +.S1000Dtable thead tr, +.S1000Dformaltable thead tr, +.S1000Dformaltable th tr, +.S1000DIpdTable thead tr { + /*height: 40px;*/ + background: rgb(124, 37, 41); + color: #fff; + font: 20px 'RobotoLight'; +} + +.container_text table td { + height: 40px; + vertical-align: top; +} + +.container_text table tbody tr:nth-child(even) { + background: #ebebeb; +} + +.container_text table.levelledPara { + border-bottom: 2px solid #ececec; +} + +.container_text table.levelledPara table.levelledPara { + border-bottom: none; +} + +.S1000DLevelledPara, +.S1000DProceduralStep { + display: flex; + border: 1px solid #ddd; + flex-wrap: wrap; + width: 100%; +} + +.S1000DLevelledPara .S1000DLevelledPara { + border-left: none; + border-right: none; +} + +.S1000DlevelledItemNum { + width: 100px; + min-width: 100px; + max-width: 100px; + box-sizing: border-box; + padding: 14px 10px; + border-right: 1px solid #ddd; +} + +.S1000DlevelleditemC { + display: flex; + width: 100%; +} + +.S1000DlevelleditemC .S1000DSidehead1 { + margin-bottom: 14px; + display: block; +} + +.S1000DlevelleditemC .S1000DSidehead2 { + margin-bottom: 14px; + display: block; +} + +.S1000DlevelleditemC .S1000DSidehead3 { + margin-bottom: 14px; + display: block; +} + +.S1000DlevelleditemC .S1000DSidehead4 { + margin-bottom: 14px; + display: block; +} + +.S1000DlevelleditemC .S1000DSidehead5 { + margin-bottom: 14px; + display: block; +} + +.S1000DlevelledItemContent { + padding: 14px 10px; + width: 100%; + width: calc(100% - 100px); + max-width: 100%; + max-width: calc(100% - 100px); +} + +.S1000DlevelledItemContent .S1000DcrewDrillStep, +.S1000DlevelledItemContent .S1000DcrewDrillConditionText { + margin: 0 -10px; + border-top: 1px solid #ddd; +} + +.S1000DsubCrewDrill { + border-top: 1px solid #ddd; + margin: 0 -10px; + padding: 0 10px; +} + +.S1000DlevelledItemContent .S1000DcrewDrillConditionText { + padding: 10px 14px; +} + +.S1000DlevelleditemC .S1000Dpara { + margin-bottom: 7px; +} + +.S1000DdisplayText { + width: 100%; + padding: 10px; + border-bottom: 1px solid #ccc; + font-weight: 700; +} + +.container_text table.levelledPara tbody tr:nth-child(even) { + background: transparent; +} + +.container_text table tbody tr.S1000Dlistitem:nth-child(even), +.container_text table tbody thead tr:nth-child(even), +.S1000Dtable thead tr:nth-child(even) { + background: transparent; + color: #333; +} + +.container_text table.S1000DrandomList, +.container_text table.S1000DrandomList tr, +.container_text table.S1000DrandomList td { + border: none; +} + +.container_text table.levelledPara>tbody>tr>td { + border: none; +} + +.container .container_text .link-c li { + padding-left: 0; +} + +.container .container_text .link-c li:before { + display: none; +} + +.container .container_text .link-c .pmTreeItem span { + padding-bottom: 5px; +} + +.container .container_text .link-c .pmTreeItem span:before { + display: none; +} + +.container .container_text .link-c .pmTreeItem { + padding-bottom: 10px; +} + +.container .container_text .link-c .pmTreeItem i span { + padding: 0; + padding-left: 20px; +} + +.container .container_text .link-c .pmTreeItem i span a { + font-size: 0.85em; + color: #666; + font-style: normal; +} + +.toTop { + position: fixed; + bottom: 30px; + right: 0; + width: 67px; + height: 64px; + background: url(../images/BG_rightIcon.png) no-repeat; + cursor: pointer; + display: block; +} + +.toTop i { + display: block; + width: 33px; + height: 30px; + border: none; + background: url(../images/toTop.svg) no-repeat; + position: absolute; + left: -2px; + right: 0; + top: -7px; + bottom: 0; + margin: auto; +} +.toPrint{ + position: fixed; + bottom: 90px; + right: 0; + width: 67px; + height: 64px; + background: url(../images/BG_rightIcon.png) no-repeat; + cursor: pointer; + display: block; + } + .toPrint i{ + display: block; + width: 33px; + height: 30px; + border: none; + background: url(../images/toPrint.svg) no-repeat; + position: absolute; + left: -6px; + right: 0; + top: -7px; + bottom: 0; + margin: auto; + } + +.addContent { + position: fixed; + bottom: 90px; + right: 0; + width: 67px; + height: 64px; + background: url(../images/BG_rightIcon.png) no-repeat; + cursor: pointer; + display: block; +} + +.addContent i { + display: block; + width: 33px; + height: 30px; + border: none; + position: absolute; + left: -2px; + right: 0; + top: -7px; + bottom: 0; + margin: auto; +} + +.addContent i svg { + height: 100%; + width: auto; +} + +.addContent .svgMinus { + display: none; +} + +.b4webJsonContainer { + position: relative; +} + +.popupWindow { + display: none; + position: fixed; + height: 100%; + width: 100%; + background: rgba(0, 0, 0, 0.2); + overflow: auto; + /*display: flex;*/ + /*justify-content: center; + align-items: center;*/ + top: 0; + left: 0; + z-index: 1111; +} + +.popupWindow .form-line { + display: flex; + justify-content: flex-start; + align-items: center; +} + +.popupWindow .popupSettTable td { + padding: 0 10px 0 0; +} + +.popupWindow .popupSettTable thead td { + padding: 5px; +} + +.popupCont { + max-width: 1000px; + min-width: 800px; + background: #fff; + padding: 20px; + position: relative; + display: flexbox; +} + +.popupContent { + margin: auto; +} + +.popupCont .popupContent h1 { + margin-top: 0; +} + +.popupCont .popupContent .createBookmarkForm { + padding: 10px; +} + +.popupCont .popupContent .createBookmarkForm input { + width: 100%; + height: 40px; + box-sizing: border-box; + padding: 10px; +} + +.closePopup { + position: absolute; + right: 5px; + top: 5px; + display: block; + width: 40px; + height: 40px; + background: url(../images/cross.png) no-repeat; + background-size: contain; + cursor: pointer; +} + +.popupWindow.popupContentPart .popupCont { + max-width: 95%; + max-height: 95%; + height: 95%; + width: 95%; + margin-left: 2.5%; + margin-top: 1.25%; + padding-top: 50px; +} + +.popupWindow.popupContentPart .popupCont object, +.popupWindow.popupContentPart .popupCont embed { + min-height: calc(100vh - 250px); +} + +.cartContent, +.bookmarkContent { + width: 100%; + border-spacing: 0px; + border-collapse: collapse; +} + +.cartContent td, +.bookmarkContent td { + padding: 3px 5px; + border: 1px solid #dddddd; +} + +.cartButtons { + margin-top: 20px; +} + +.bookmarkButton { + display: inline-block; + width: 32px; + height: 32px; + /*background: #ccc;*/ +} + +.bookmarkButton svg { + width: 24px; + height: auto; + margin-top: 5px; +} + +.changesRequest, +.changesRequestForm { + padding: 10px; +} + +.changesRequestForm textarea { + width: 100%; + resize: vertical; +} + +.S1000DSidehead1 { + font-size: 140%; + font-weight: bold; +} + +.S1000DSidehead2 { + font-size: 130%; + font-weight: bold; +} + +.S1000DSidehead3 { + font-size: 120%; + font-weight: bold; +} + +.S1000DSidehead4 { + font-size: 110%; + font-weight: bold; +} + +.S1000DSidehead5 { + font-weight: bold; +} + +.S1000Dobjecttitle { + text-align: center; + margin-top: 15px; + margin-bottom: 10px; +} + + +/*.S1000DcrewDrillstep{ + фикс разм +}*/ + +.S1000DlevelledItemContent .S1000DcrewDrillStep { + margin: 0 -10px; +} + +.S1000DchallengeAndResponse { + display: flex; + flex-wrap: wrap; + width: 100%; + max-width: 100%; +} + +.S1000DsubCrewDrill { + box-sizing: border-box; +} + +.S1000DchallengeAndResponse .S1000Dchallenge { + width: 300px; +} + +.S1000DchallengeAndResponse .S1000DTDdotted { + width: 70px; +} + +.S1000DchallengeAndResponse .S1000Dresponses { + width: auto; + width: calc(100% - 370px); +} + +.S1000DchallengeAndResponse table td { + border: none; + padding: 0; +} + +.S1000DchallengeAndResponse { + padding: 10px 0; +} + +.S1000Dformaltable4 thead tr td { + width: 45%; +} + +.S1000Dformaltable4 thead tr td+td { + width: 20%; +} + +.S1000Dformaltable4 thead tr td+td+td { + width: 15%; +} + +.S1000Dformaltable4 thead tr td+td+td+td { + width: auto; +} + +.container_text table .S1000DCSNitem>td { + padding: 0; + border: none; +} + + +/*.S1000DIpdTable td{ + word-break: break-all; +}*/ + +audio { + width: 100%; +} + +.bookmarkLink { + padding-right: 30px; +} + +.bookmarkLinkClose { + width: 20px; + height: 100%; + display: block; + top: 0; + right: 10px; + position: absolute; + background: url(../images/cross.png) center center no-repeat; + background-size: contain; + cursor: pointer; +} + + +/* Large Devices, Wide Screens */ + + +/* Medium Devices, Desktops */ + +@media only screen and (max-width: 992px) { + /*.container{width: 768px;}*/ + .logotype a { + background-size: contain; + } + .container .container_text { + padding-right: 60px; + padding-left: 0; + } + .descript_img { + font-size: 13px; + } +} + +.uppercase { + text-transform: uppercase; +} + +.S1000Dfigure { + margin: 20px 0; +} + +.openImage, +.S1000Dfiguregraphic { + display: block; + overflow: hidden; + /*border: 1px solid #ececec;*/ +} + +.addToCartLink, +.addToCartInput { + display: none; +} + +.addToCartInput { + width: 100%; +} + +.S1000DBookmark { + display: none; +} + +.S1000DBookmark.jsBookmark { + display: none; + box-sizing: border-box; + width: 32px; + height: 32px; + padding-left: 32px; + overflow: hidden; + background: url(../images/stars.png) right center no-repeat; +} + +.S1000DBookmark.jsBookmark:hover { + background: url(../images/stars.png) left center no-repeat; +} + +.custom_upload_wrap { + height: 150px; + border: 1px dashed rgba(0, 0, 0, 0.2); + background: white; + border-radius: 5px; + background-color: transparent; + position: relative; + display: block; + text-align: center; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + transition: all 0.3s ease; + margin: 20px 0; +} + +.custom_upload { + height: 100%; + overflow: hidden; + cursor: pointer; + position: relative; +} + +.custom_upload_button { + width: 100%; + height: 100%; + white-space: nowrap; + overflow: hidden; + position: relative; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + transition: all 0.3s ease; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding-top: 15px; +} + +.custom_upload input { + top: 0; + margin: 0; + padding: 0; + width: 100%; + height: 100%; + cursor: pointer; + opacity: 0; + position: absolute; +} + +.custom_upload_button.file_selected, +.custom_upload_wrap:hover { + background: rgba(206, 241, 199, 0.5); +} + +.custom_upload_delete { + top: 0; + bottom: 0; + right: 12px; + margin: auto; + width: 13px; + height: 13px; + display: block; + cursor: pointer; + position: absolute; + background: url(images/close.png) no-repeat; +} + +.copyLink { + display: none; +} + +.jsLinkCommentaryURN { + text-transform: uppercase; +} + +.jsLinkCommentaryURN el { + text-transform: none; +} + +.jsLinkCommentaryRightURN { + display: inline-grid; + max-width: 80%; +} + +.jsLinkCommentaryRightURN el { + font-size: 0.8em; + color: #ccc; + display: block; + box-sizing: border-box; +} + +.commentSub { + box-sizing: border-box; + padding: 0 20px 20px; + margin-top: 20px; + border: 1px solid #ccc; +} + +.search_form { + display: flex; + box-sizing: border-box; + padding: 0 10px; + justify-content: flex-start; +} + +.search_form .form_row { + width: 100%; +} + +.search_form input, +.tabs__content.active .search_form button { + width: 100%; + display: inline-block; +} + +.search_list { + display: none; +} + +div[id^="tbl"] { + overflow: hidden; + width: 100%; +} + +div[changeclass="S1000Ddelete_change"] { + background: rgba(255, 0, 0, 0.2); +} + +div[changeclass="S1000Dmodify_change"] { + background: rgba(255, 255, 0, 0.2); +} + +div[changeclass="S1000Dadd_change"] { + background: rgba(0, 0, 255, 0.2); +} + +object, +embed { + overflow: auto; + width: 100%; + min-height: 650px; +} + +.S1000DHotspot { + display: none; +} + +.inlineDownloadIconC { + display: flex; + justify-content: center; + align-items: center; +} + +.inlineDownloadIcon { + width: 100px; + height: 100px; + background: url(../images/download.svg) center center no-repeat; + background-size: contain; +} + +.cp-color-picker { + z-index: 9999 !important; +} + +.multimediaPanel { + border-top: 1px solid #ececec; + border-bottom: 1px solid #ececec; + display: flex; + justify-content: flex-end; + -ms-align-items: center; + align-items: center; + padding: 5px; +} + +.multimediaPanel .multimediaObjectFullscreen { + font-size: 11px; + padding: 0 10px; + height: 26px; + margin: 5px 0px; +} + +.htmlPopup .multimediaPanel { + width: 100%; + background: #282828; + border: none; +} + +.htmlPopup .S1000Dobjecttitle { + width: 100%; + background: rgb(124, 37, 41); + color: #fff; + font-weight: 700; + font-size: 16px; + padding: 15px; + order: 1; + margin: 0; + display: block; +} + +.multimediaObjectCloseFullscreen { + background: #282828; + color: #c2c2c2; + border: 2px solid #c2c2c2; + font-weight: 600; + font-size: 11px; + padding: 0 10px; + height: 26px; + margin: 5px 0px; +} + + +/*.search_form input{ + display: inline-block; +}*/ + + +/* Small Devices, Tablets */ + + +/* Extra Small Devices, Phones */ + + +/* Custom, iPhone Retina */ + +.divTable { + max-width: 850px; + overflow-x: auto; +} + +img.S1000Dsymbol { + display: inline !important; + max-width: 100% !important; + margin: 0px !important; +} + +.S1000Dnote { + font-weight: bold; +} + +.S1000Dnote p { + font-weight: normal; + padding: 0.5% 2%; + +} +/* Центрирование тега center для кнопки*/ +center { + width: auto; + margin: 0 auto; +} \ No newline at end of file diff --git a/s1000d/Converter_Source/EDL/dinamika/viewimg.css b/s1000d/Converter_Source/EDL/dinamika/viewimg.css new file mode 100644 index 0000000..2947268 --- /dev/null +++ b/s1000d/Converter_Source/EDL/dinamika/viewimg.css @@ -0,0 +1,15 @@ +#iv-container{position:fixed;width:100vw;background:rgba(10,10,10,0.6);height:100vh;top:0;left:0;display:none;z-index:1000; + border:2px solid rgb(124, 37, 41);border-radius: 5px;box-shadow: 0px 2px 4px 0 rgba(0, 0, 0, 0.2), 0px 2px 50px 0 rgba(0, 0, 0, 0.1); + padding: 0px;} +.iv-container{overflow:hidden} +.iv-close{width:32px;height:32px;position:absolute;border: 1px solid white; right:20px;top:20px;background: rgba(124, 37, 41, 0.5); cursor:pointer;text-align:center;overflow:hidden;text-shadow:0 0 3px #6d6d6d;-webkit-transition:all ease 200ms;-moz-transition:all ease 200ms;-o-transition:all ease 200ms;transition:all ease 200ms} +.iv-close:after,.iv-close:before{content:"";height:2px;width:26px;background:white;position:absolute;left:3px;top:17px;margin-top:-3px;border-radius:2px} +.iv-close:before{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)} +.iv-close:after{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)} +.iv-close:hover{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg); background: rgb(124, 37, 41)} +.iv-image-view{position:absolute;height:100%;width:100%} +.iv-image-wrap{display:inline-block} +.iv-image-wrap:active{cursor:move} +.iv-large-image{cursor:move;max-width:100%;max-height:100%;position:absolute;background-color:#FFFFFF;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)} +.iv-loader{top:50%;left:50%;border-radius:50%;width:32px;height:32px;z-index:100;margin-top:-16px;margin-left:-16px;font-size:5px;position:absolute;text-indent:-9999em;border-top:1em solid rgba(255, 255, 255, .2);border-right:1em solid rgba(255, 255, 255, .2);border-bottom:1em solid rgba(255, 255, 255, .2);border-left:1em solid #fff;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:load8 1.1s infinite linear;animation:load8 1.1s infinite linear} +.iv-loader:after{width:10em;height:10em;border-radius:50%}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}} \ No newline at end of file diff --git a/s1000d/Converter_Source/EDL/dinamika/viewimg.js b/s1000d/Converter_Source/EDL/dinamika/viewimg.js new file mode 100644 index 0000000..7c53316 --- /dev/null +++ b/s1000d/Converter_Source/EDL/dinamika/viewimg.js @@ -0,0 +1,285 @@ +var container=null; +var parentScrollListener=null; + +!function(e,t) + {"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.ViewBigimg=t()} +(this, +function() +{ + "use strict"; + function l(){ + var e=!1;try{addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){e=!0}}))}catch(e){}return e + } + function o(e,t) + { + this.container=e; + var i=function(){}; + this.onStart=t.onStart||i, + this.onMove=t.onMove||i, + this.onEnd=t.onEnd||i, + //this.onKeyDown=t.onKeyDown||i, + this.onMouseWheel=t.onMouseWheel||i, + this.onClick=t.onClick||i, + this.onPinch=t.onPinch||i + } + + o.prototype.init=function() + { + var r=this; + return this.startHandle=function(e) + { + e.preventDefault(); + var t=e.type, + i="touchstart"===t?"touchmove":"mousemove", + n="touchstart"===t?"touchend":"mouseup", + o=e.clientX||e.touches[0].clientX, + a=e.clientY||e.touches[0].clientY; + function s(e) + { + e.preventDefault(); + var t=e.clientX||e.touches[0].clientX,i=e.clientY||e.touches[0].clientY; + r.onMove(e,{dx:t-o,dy:i-a,mx:t,my:i}) + } + !1!==r.onStart(e,{x:o,y:a})&&("touchstart"===t&&e.touches[1]&&r.onPinch(e), + document.addEventListener(i,s,!("touchmove"!==i||!l())&&{capture:!1,passive:!1}), + document.addEventListener(n,function e() + { + document.removeEventListener(i,s), + document.removeEventListener(n,e), + r.onEnd() + })) + }, + this.container.addEventListener("touchstart",this.startHandle,!1), + this.container.addEventListener("mousedown",this.startHandle,!1), + //this.container.addEventListener("onkeydown",this.onKeyDown,!1), + //this.container.onkeydown = function(e){alert('!!close')}, + //document.getElementById('iv-container').contentEditable=true, + //document.getElementById('iv-container').focus(), + this.container.addEventListener("wheel",this.onMouseWheel,!1), + this.container.addEventListener("click",this.onClick,!1), + this + }, + o.prototype.destroy=function() + { + this.container.removeEventListener("touchstart",this.startHandle), + this.container.removeEventListener("mousedown",this.startHandle), + //this.container.removeEventListener("onkeydown",this.onKeyDown), + this.container.removeEventListener("wheel",this.onMouseWheel), + this.container.removeEventListener("click",this.onClick) + }; + + var r=function(e) + {return e.preventDefault()}; + function n(e,t) + { + this.container=e, + this.options=Object.assign({},n.defaults,t), + this.zoomValue=100, + e.classList.add("iv-container"), + this.imageWrap=e.querySelector(".iv-image-wrap"), + this.closeBtn=e.querySelector(".iv-close") + } + + return function() + { + var o=0; + if(!window.requestAnimationFrame){ + for(var e=["ms","moz","webkit","o"],t=0;t 0) { + //alert(sessionStorage.length); + $('.R_icon.cart+span').html(sessionStorage.length); + $('.R_icon.cart+span').show(); + } + else { + $('.R_icon.cart+span').hide(); + } + + var CartHtml = ''; + + for (i = 0; i < sessionStorage.length; i++) { + var x = sessionStorage.key(i); + CartHtml += sessionStorage.getItem(x); + } + + $('.cartContent tbody').html(CartHtml); + $('input[type="number"]').niceNumber(); +} + +$(document).ready(function () { + + startActions(); + + $(".popupCont").draggable({ containment: $(this).parent(), scroll: false }); + $('input[type="number"]').niceNumber(); + + var startSettingsObj = Cookies.getJSON('imagePlayerSettings'); + var CookieSettings = Cookies.getJSON('imagePlayerSettings'); + + if (CookieSettings != undefined) { + $('.popupSett .rColor').val(CookieSettings.rColor); + $('.popupSett .rWidth').val(CookieSettings.rWidth); + $('.popupSett .tColor').val(CookieSettings.tColor); + $('.popupSett .tWidth').val(CookieSettings.tWidth); + $('.popupSett .hColor').val(CookieSettings.hColor); + $('.popupSett .hWidth').val(CookieSettings.hWidth); + } + + $.each($('.color'), function (key, value) { + + $(value).paletteColorPicker({ + clear_btn: null, + close_all_but_this: true, + colors: [ + { "#FF0000": "#FF0000" }, + { "#333333": "#333333" }, + { "#E91E63": "#E91E63" }, + { "#C2185B": "#C2185B" }, + { "#F8BBD0": "#F8BBD0" }, + { "#CDDC39": "#CDDC39" }, + { "#212121": "#212121" }, + { "#727272": "#727272" }, + { "#B6B6B6": "#B6B6B6" } + ], + position: 'downside', // default -> 'upside' + // Callback on change value + onchange_callback: function (clicked_color) { + $('.palette-color-picker-bubble').hide(); + } + }); + }); + + var scrollPage = window.pageYOffset || document.documentElement.scrollTop; + window.onscroll = function () { + var scrolled = window.pageYOffset || document.documentElement.scrollTop; + if (scrolled > scrollPage) { + $('#dmc').parent().removeClass('visible'); + $('#dmc').removeClass('visible'); + $('.iconsBox').removeClass('moved'); + $('.main-list_inset_c').removeClass('moved'); + $('.iconsBox_item.active').removeClass('active'); + + $('.main-menu-wrapp').css({ 'position': 'absolute', 'top': '-60px', 'transition': 'none', 'z-index': '999' }); + + hideLeftPanel(); + } + else { + if (scrolled > 90) { + $('.main-menu-wrapp').css({ 'position': 'absolute', 'top': '-60px', 'transition': 'none', 'z-index': '999' }); + //$('.main-menu-wrapp').slideDown(); + $('.main-menu-wrapp').css({ 'transition': 'all ease-in 0.3s' }); + $('.main-menu-wrapp').css({ 'position': 'fixed', 'top': '0' }); + + hideLeftPanel(); + } + else { + $('.main-menu-wrapp').css({ 'position': 'absolute', 'top': '0px', 'transition': 'none' }); + $('.iconsBox').removeClass('moved'); + } + $('.iconsBox').removeClass('moved'); + $('.iconsBox_item.active').removeClass('active'); + } + scrollPage = window.pageYOffset || document.documentElement.scrollTop; + }; + + + //$('.S1000DIpdTable').on('change','.addToCartLink',function(event){ + //alert('cartVal'); + //var cartVal = $(this).parent('.S1000DISNitem').id; + + //sessionStorage.setItem("autosave", field.value); + // }); + + $('body').on('click', '.addToCartLink', function (event) { + + var partVal = $(this).parent().siblings('.partNum').text(); + var isnVal = $(this).parent().parent('.S1000DISNitem').attr('id'); + var dmVal = $(this).parent().parent('.S1000DISNitem').attr('val'); + var descrVal = $(this).parent().siblings('.partNum').next().text(); + + var full = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : ''); + + var urnSplit = '.jsLinkURN[val^="' + dmVal + '"]'; + var urn = $('#loap_tab').find(urnSplit).attr('val'); + + var elem = '#' + isnVal; + + + newstr = full + '/' + urn + elem; + + + var htmltd = '
' + ''; + + //alert(urn); + + sessionStorage.setItem(isnVal, htmltd); + //alert(sessionStorage.getItem(isnVal)); + cartUpdate(); + }); + $('body').on('click', '.cartClean', function (event) { + + sessionStorage.clear(); + cartUpdate(); + $(".popupCart").hide("fast"); + }); + $('body').on('click', '.cartPDF', function (event) { + event.stopPropagation(); + //var full = location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: ''); + //var toPDF = $('.cartContent').html(); + + //var withoutA = $('.cartContent').find('a').text(); + + var toPDF = $('.cartContent').html(); + + + $('.cartContent').append(''); + $('.htmlexport').html(toPDF); + + $('.htmlexport').find('a').each(function () { + var withoutA = $(this).text(); + $(this).replaceWith(withoutA); + }); + + $('.htmlexport').find('input').each(function () { + var withoutA = $(this).attr('value'); + $(this).replaceWith(withoutA); + }); + $('.htmlexport').find('button').each(function () { + $(this).remove(); + }); + + var cleanedPDF = $('.htmlexport').html(); + $('.htmlexport').remove(); + $(".popupCart").hide("fast"); + + + logger('cleanedPDF', cleanedPDF); + //alert($('.htmlexport').html()); + toPDF = '
▸ "+title+"
● "+title+"
▸ 1 Общие сведения о вертолете
▸ 2 Фюзеляж вертолета
● Компоненты фюзеляжа

' + isnVal + '

' + partVal + '

' + descrVal + '

' + cleanedPDF + '
'; + //toPDF=toPDF.replace(/div/g,'span'); + //toPDF=toPDF.replace(/button/g,'span'); + //toPDF.replace(/input/g,'span'); + + //var newHobj = createElementFromHTML(toPDF); + //alert(toPDF); + toPDF = '' + toPDF + ''; + + + + var text = toPDF, + blob = new Blob([text], { type: 'text/html;charset=utf-8' }), + anchor = document.createElement('a'); + + anchor.download = Date(Date.now()); + anchor.href = (window.webkitURL || window.URL).createObjectURL(blob); + anchor.dataset.downloadurl = ['text/html', anchor.download, anchor.href].join(':'); + anchor.click(); + + }); + + $('body').on('click', '.closePopup', function (event) { + $(".popupWindow").hide("fast"); + }); + $('body').on('click', '.R_icon.cart', function (event) { + event.stopPropagation(); + $('.popupWindow.popupCart').css({ 'display': 'block' }); + /*$('.closePopup').css({':'})*/ + if ($('.popupCart .popupCont').outerHeight() < $('.popupCart.popupWindow').outerHeight()) { + var tmp = ($('.popupCart.popupWindow').outerHeight() - $('.popupCart .popupCont').outerHeight()) / 2; + $('.popupCart .popupCont').css({ 'top': tmp + 'px' }); + } + if ($('.popupCart .popupCont').outerWidth() < $('.popupCart.popupWindow').outerWidth()) { + var tmp = ($('.popupCart.popupWindow').outerWidth() - $('.popupCart .popupCont').outerWidth()) / 2; + $('.popupCart .popupCont').css({ 'left': tmp + 'px' }); + } + cartUpdate(); + }); + + + $('body').on('click', '#Contents ul.parent>li', function (event) { + event.stopPropagation(); + logger('here'); + $(this).toggleClass('selected'); + $(this).children('ul').toggle('normal'); + return false; + }); + + + function createElementFromHTML(htmlString) { + var div = document.createElement('div'); + div.innerHTML = htmlString.trim(); + + // Change this to div.childNodes to support multiple top-level nodes + return div.firstChild; + } + + + ////////////////////////Выпадашка + (function ($) { + logger('here2'); + $('.main-list_top').each(function () { + $(this).on('click', function (e) { + var data = $(this).children('.main-item').attr('data-href-id'); + var dataId = (data.substr(1)); + $(this).addClass('selected'); + $(this).nextAll().removeClass('selected'); + $(this).prevAll().removeClass('selected'); + //$('.main-list_inset').attr("id") == dataId; + var elem = '#' + dataId; + $(elem).toggleClass('visible'); + $(elem).nextAll().removeClass('visible'); + $(elem).prevAll().removeClass('visible'); + $(elem).siblings().removeClass('js-wait'); + + $('#dmc').parent().removeClass('visible'); + $('#dmc').removeClass('visible'); + $('.iconsBox').removeClass('moved'); + $('.main-list_inset_c').removeClass('moved'); + $('.iconsBox_item.active').removeClass('active'); + + /*$("body, html").animate({ + scrollTop: 0 + }, 0);*/ + }); + }); + $('.main-list_inset_body_title').click(function () { + $(this).parent().parent().removeClass('visible').addClass('js-wait'); + $('#dmc').parent().removeClass('visible'); + $('#dmc').removeClass('visible'); + $('.iconsBox').removeClass('moved'); + $('.main-list_inset_c').removeClass('moved'); + $('.iconsBox_item.active').removeClass('active'); + + if ($(this).parent().parent().attr('id') == 'dmc') { + $(this).parent().parent().parent().removeClass('visible'); + } + }); + /*$('.main-list_inset_body_title').click(function(){ + $(this).parent().parent().removeClass('visible').addClass('js-wait'); + $('#dmc').parent().removeClass('visible'); + $('#dmc').removeClass('visible'); + $('.iconsBox').removeClass('moved'); + $('.main-list_inset_c').removeClass('moved'); + $('.iconsBox_item.active').removeClass('active'); + + if($(this).parent().parent().attr('id') == 'dmc'){ + $(this).parent().parent().parent().removeClass('visible'); + } + });*/ + }(jQuery)); + + $(".settSet").click(function () { + logger('here3'); + var startSettingsObj = { + rColor: '#FF0000', + rWidth: 1, + tColor: '#333333', + tWidth: 1, + hColor: '#FF0000', + hWidth: 1, + }; + startSettingsObj.rColor = $('.popupSett .rColor').val(); + startSettingsObj.rWidth = $('.popupSett .rWidth').val(); + startSettingsObj.tColor = $('.popupSett .tColor').val(); + startSettingsObj.tWidth = $('.popupSett .tWidth').val(); + startSettingsObj.hColor = $('.popupSett .hColor').val(); + startSettingsObj.hWidth = $('.popupSett .hWidth').val(); + + logger('startSettingsObj', startSettingsObj); + + Cookies.set('imagePlayerSettings', startSettingsObj); + location.reload(); + }); + $(".settDefaultSet").click(function () { + logger('here4'); + var startSettingsObj = { + rColor: '#FF0000', + rWidth: 1, + tColor: '#333333', + tWidth: 1, + hColor: '#FF0000', + hWidth: 1, + }; + + Cookies.set('imagePlayerSettings', startSettingsObj); + location.reload(); + }); + $(".settDismiss").click(function () { + $('.popupWindow.popupSett').hide(); + }); + + $(".toTop").click(function () { + + $("html, body").animate({ scrollTop: 0 }, "slow"); + //logger('scroll'); + }); + + //CustomScrollbar + $('.main-list_inset_body_tabs').mCustomScrollbar({ + theme: "custom-theme" + }); + $('div[id^="tbl"]').mCustomScrollbar({ + theme: "custom-theme" + }); + + + $('body').on('click', '.S1000DIntRefPara, .S1000DIntRefSupEquip, .scrollTo', function (event) {//, .S1000DIntRefFig + event.preventDefault(); + event.stopPropagation(); + var hrefThis = $(this).attr('href'); + if ($(hrefThis).length > 0) { + $(hrefThis).scrollTo(); + } + }); + + $('body').on('click', '.S1000DISNitem', function (event) {//, .S1000DISNitem + event.preventDefault(); + event.stopPropagation(); + $(this).closest('.S1000DIpdTable').find('.S1000DISNitem,.S1000DCSNitem').removeClass('selected'); + $(this).addClass('selected'); + }); + + + + $('body').on('click', '.changesRequestClear', function (event) { + event.preventDefault(); + event.stopPropagation(); + + $('.changesRequest-res input').val(""); + $('.changesRequestForm textarea').val(""); + }); + + $('body').on('click', '.closePopup, .multimediaObjectCloseFullscreen', function (event) { + $(".popupWindow").hide("fast"); + }); + $(function () { + $(document).click(function (event) { + if ($(event.target).closest(".popupWindow .popupCont").length) return; + $(".popupWindow").hide("fast"); + event.stopPropagation(); + }); + }); + + //Select2 + $(".js-select").select2({ + minimumResultsForSearch: Infinity + }); + + //Columns descript img + $('.descript_img').each(function () { + var count = $(this).children('li').length; + + if (count <= 30) { colCount = 2; } else { colCount = 4; } + + var container = document.querySelector('.descript_img'), + anons = document.querySelectorAll('.descript_img li'), + columnCnt = colCount, //колличество колонок + chunk = Math.ceil(anons.length / columnCnt); + + for (var i = 0, j = anons.length; i < j; i += chunk) { + var part = [].slice.call(anons, i, i + chunk), + div = document.createElement('div'); + div.className = 'column'; + for (var k = 0; k < part.length; k++) { + div.appendChild(part[k]); + } + container.appendChild(div); + } + + var cont = $(anons).parent('.column').length; + if (cont == 2) { + $('.column').css('width', '47%'); + } else { + $('.column').css('width', '25%'); + } + }); + $('body').on('click', 'a.S1000DIntRefMultimedia', function (event) { + event.preventDefault(); + event.stopPropagation(); + + var link = $(this).attr('href'); + var actuate = $(this).attr('actuate'); + var show = $(this).attr('show'); + + var Uhash = window.location.hash; + var UhashSpl = []; + UhashSpl = Uhash.split('/'); + var urn = UhashSpl[0]; + logger('show', show); + + switch (show) { + case 'replace': + + $(link).scrollTo(); + link = link.replace('#', ''); + window.location.hash = urn + '/' + link; + + break; + case 'new': + + var loc = Object.assign({}, window.location); + link = link.replace('#', ''); + + loc.hash = urn + '/' + link; + loc.href = loc.protocol + '//' + loc.hostname + (loc.port ? ':' + loc.port : '') + loc.pathname + loc.search + loc.hash; + + $('body').append('click'); + $(".removeMe").click(); + $(".removeMe").remove(); + + break; + case 'embed': + if ($(link).closest('.S1000Dmultimedia').find('.jp-video .jp-full-screen').length > 0) { + logger("GET FULLSCREEN VIDEO"); + logger($(link).parent().find('.jp-full-screen')); + $(link).parent().find('.jp-full-screen').click(); + $(link).parent().find('.jp-play').click(); + } + else { + logger("$('.popupWindow.popupContentPart').length", $('.popupWindow.popupContentPart').length); + if ($('.popupWindow.popupContentPart').length == 0) { + logger("createPopup"); + $('body').append(''); + } + $('.popupWindow.popupContentPart .popupContent').html(''); + $(link).closest('.S1000Dmultimedia').appendTo($('.popupWindow.popupContentPart .popupContent')); + $('.popupWindow.popupContentPart').find('.popupContent, .S1000Dmultimedia, .S1000Dmultimediaobj, .pdfPreviewContainer').attr('max-height', '100%'); + /* $('.popupWindow.popupContentPart').find('.jp-jplayer, .jp-video, .jp-audio').remove(); */ + $('.popupWindow.popupContentPart').show(); + getInnerAudioVideo($('.popupWindow.popupContentPart .S1000Dmultimedia')); + $('.popupContent').find('.jp-play').click(); + } + break; + default: + break; + } + }); + $('body').on('click', 'a.S1000DIntRefMultimediaObject', function (event) { + event.preventDefault(); + event.stopPropagation(); + var link = $(this).attr('href'); + var actuate = $(this).attr('actuate'); + var show = $(this).attr('show'); + + //$(link).scrollTo(); + var Uhash = window.location.hash; + var UhashSpl = []; + UhashSpl = Uhash.split('/'); + var urn = UhashSpl[0]; + logger('show', show); + + switch (show) { + case 'replace': + + $(link).scrollTo(); + link = link.replace('#', ''); + window.location.hash = urn + '/' + link; + + break; + case 'new': + + var loc = Object.assign({}, window.location); + link = link.replace('#', ''); + + loc.hash = urn + '/' + link; + loc.href = loc.protocol + '//' + loc.hostname + (loc.port ? ':' + loc.port : '') + loc.pathname + loc.search + loc.hash; + + $('body').append('click'); + $(".removeMe").click(); + $(".removeMe").remove(); + + break; + case 'embed': + if ($(link).closest('.S1000Dmultimedia').find('.jp-video .jp-full-screen').length > 0) { + logger("GET FULLSCREEN VIDEO"); + logger($(link).parent().find('.jp-full-screen')); + $(link).parent().find('.jp-full-screen').click(); + //$(link).parent().find('.jp-play').click(); + var playlist = $(link).parent().find('.jp-playlist .jp-playlist-item'); + obj = link.split('-obj'); + obj = parseInt(obj[1]); + logger(obj) + $(playlist[obj - 1]).click(); + } + else { + logger("$('.popupWindow.popupContentPart').length", $('.popupWindow.popupContentPart').length); + if ($('.popupWindow.popupContentPart').length == 0) { + logger("createPopup"); + $('body').append(''); + } + $('.popupWindow.popupContentPart .popupContent').html(''); + $(link).closest('.S1000Dmultimedia').clone().appendTo($('.popupWindow.popupContentPart .popupContent')); + $('.popupWindow.popupContentPart').find('.popupContent, .S1000Dmultimedia, .S1000Dmultimediaobj, .pdfPreviewContainer').css({ 'max-height': '100%' }); + $('.popupWindow.popupContentPart').show(); + if ($('.popupWindow.popupContentPart').find('.jp-jplayer, .jp-video, .jp-audio').length > 0) { + $('.popupWindow.popupContentPart').find('.jp-jplayer, .jp-video, .jp-audio').remove(); + obj = link.split('-obj'); + obj = parseInt(obj[1]); + getInnerAudioVideo($('.popupWindow.popupContentPart .S1000Dmultimedia'), obj - 1); + } + + } + break; + default: + break; + } + }); + $('body').on('click', 'a.S1000DIntRefFig', function (event) { + logger('here6'); + event.preventDefault(); + event.stopPropagation(); + + var link = $(this).attr('href'); + var actuate = $(this).attr('actuate'); + var show = $(this).attr('show'); + + //$(link).scrollTo(); + var Uhash = window.location.hash; + var UhashSpl = []; + UhashSpl = Uhash.split('/'); + var urn = UhashSpl[0]; + + switch (show) { + case 'replace': + + $(link).scrollTo(); + link = link.replace('#', ''); + window.location.hash = urn + '/' + link; + + break; + case 'new': + + var loc = Object.assign({}, window.location); + logger('loc', loc); + link = link.replace('#', ''); + + loc.hash = urn + '/' + link; + loc.href = loc.protocol + '//' + loc.hostname + (loc.port ? ':' + loc.port : '') + loc.pathname + loc.search + loc.hash; + logger('loc.location', loc); + + $('body').append('click'); + logger('$(".removeMe")', $(".removeMe")); + $(".removeMe").click(); + $(".removeMe").remove(); + break; + case 'embed': + $('body').append('
'); + $(link).closest('.S1000Dfigure').clone().removeAttr('id').appendTo('.popupWindowFull .popupImagePlayer'); + + + //$('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic').removeAttr('id'); + for (let i = 0; i < $('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic').length; i++) { + if ($($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).css('display') != 'none') { + $($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).imagePlayer('destroy'); + var setts = $($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).find('.localSettingsC').val(); + logger(setts); + setts = JSON.parse(setts); + $($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).imagePlayer({ + viewType: 'fullScreen', + url: setts.url, + legend: setts.legend, + legendSpots: setts.legendSpots, + type: setts.type, + viewBox: setts.viewBox, + + spots: setts.spots, + name: setts.name, + size: setts.size, + redline: false, + canResize: false, + tearWindow: false, + target: { x: 0, y: 0, show: false }, + shawAllRefs: false, + }); + } + } + break; + default: + break; + } + }); + $('body').on('click', 'a.S1000DIntRefGraphic', function (event) { + event.preventDefault(); + event.stopPropagation(); + + var link = $(this).attr('href'); + var actuate = $(this).attr('actuate'); + var show = $(this).attr('show'); + + //$(link).scrollTo(); + var Uhash = window.location.hash; + var UhashSpl = []; + UhashSpl = Uhash.split('/'); + var urn = UhashSpl[0]; + + switch (show) { + case 'replace': + + $(link).scrollTo(); + link = link.replace('#', ''); + window.location.hash = urn + '/' + link; + + break; + case 'new': + + var loc = Object.assign({}, window.location); + link = link.replace('#', ''); + + loc.hash = urn + '/' + link; + loc.href = loc.protocol + '//' + loc.hostname + (loc.port ? ':' + loc.port : '') + loc.pathname + loc.search + loc.hash; + logger('loc.location', loc); + + $('body').append('click'); + $(".removeMe").click(); + $(".removeMe").remove(); + break; + case 'embed': + $('body').append('
'); + $(link).closest('.S1000Dfigure').clone().removeAttr('id').appendTo('.popupWindowFull .popupImagePlayer'); + $('.popupWindowFull .popupImagePlayer').find('.S1000Dfiguregraphic').hide(); + $('.popupWindowFull .popupImagePlayer').find(link).show(); + + for (let i = 0; i < $('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic').length; i++) { + if ($($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).css('display') != 'none') { + $($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).imagePlayer('destroy'); + var setts = $($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).find('.localSettingsC').val(); + setts = JSON.parse(setts); + $($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).imagePlayer({ + viewType: 'fullScreen', + url: setts.url, + legend: setts.legend, + legendSpots: setts.legendSpots, + type: setts.type, + }); + } + } + break; + default: + break; + } + }); + $('body').on('click', 'a.S1000DIntRefHotspot', function (event) { + event.preventDefault(); + event.stopPropagation(); + + var eventElement = event.target; + var searchName = $(eventElement).attr('name'); + + logger('document'); + + var link = $(this).attr('href'); + var actuate = $(this).attr('actuate'); + var show = $(this).attr('show'); + + var parent = $(link); + logger('$(this)', $(this)); + logger('$(this)', $(this).attr('id')); + logger('parent', parent); + + var Uhash = window.location.hash; + var UhashSpl = []; + UhashSpl = Uhash.split('/'); + var urn = UhashSpl[0]; + + /*if (eventElement != null) { + show = false + }*/ + + switch (show) { + case 'replace': + + $(parent).closest('.S1000Dfigure').scrollTo(); + + if ($(parent).closest('.S1000Dfigure').attr('id') != undefined && $(parent).closest('.S1000Dfigure').attr('id') != '') { + var hash = $(parent).closest('.S1000Dfigure').attr('id'); + hash = hash.replace('#', ''); + window.location.hash = urn + '/' + hash; + } + + $(parent).closest('.S1000Dfigure').find('a[href="' + link + '"]').click(); + //logger($(parent).closest('.S1000Dfigure').find('a[href="'+link+'"]')); + + if ($(parent).closest('.S1000Dfigure').find('a[href="' + link + '"]').length == 0) { + //logger($(parent).closest('.S1000Dfigure').find(link)); + $(parent).closest('.S1000Dfigure').find(link).click(); + } + + break; + case 'new': + var loc = Object.assign({}, window.location); + logger('loc', loc); + //link = link.replace('#',''); + if ($(parent).closest('.S1000Dfigure').attr('id') != undefined && $(parent).closest('.S1000Dfigure').attr('id') != '') { + var hash = link; + hash = hash.replace('#', ''); + window.location.hash = urn + '/' + hash; + + loc.hash = urn + '/' + hash; + loc.href = loc.protocol + '//' + loc.hostname + (loc.port ? ':' + loc.port : '') + loc.pathname + loc.search + loc.hash; + + $('body').append('click'); + // logger('$(".removeMe")', $(".removeMe")); + $(".removeMe").click(); + $(".removeMe").remove(); + } + break; + case 'embed': + if ($(parent).closest('.S1000Dfigure').attr('id') != undefined && $(parent).closest('.S1000Dfigure').attr('id') != '') { + var hash = $(parent).closest('.S1000Dfigure').attr('id'); + hash = hash.replace('#', ''); + window.location.hash = urn + '/' + hash; + } + $('body').append('
'); + $(parent).closest('.S1000Dfigure').clone().removeAttr('id').appendTo('.popupWindowFull .popupImagePlayer'); + + for (var i = 0; i < $('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic').length; i++) { + if ($($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).css('display') != 'none') { + $($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).imagePlayer('destroy'); + var setts = $($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).find('.localSettingsC').val(); + setts = JSON.parse(setts); + + $($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).imagePlayer({ + viewType: 'fullScreen', + url: setts.url, + legend: setts.legend, + legendSpots: setts.legendSpots, + type: setts.type, + viewBox: setts.viewBox, + + spots: setts.spots, + name: setts.name, + size: setts.size, + redline: false, + canResize: false, + tearWindow: false, + target: { x: 0, y: 0, show: false }, + shawAllRefs: false, + + ready: function () { + + if ($('.popupWindowFull .popupImagePlayer').find('a[href="' + link + '"]').length == 0) { + $('.popupWindowFull .popupImagePlayer').find(link).click(); + } else { + $('.popupWindowFull .popupImagePlayer').find('a[href="' + link + '"]').click(); + } + + if ($('.popupWindowFull .popupImagePlayer').closest('.S1000Dfigure').find('a[href="' + link + '"]').length == 0) { + $('.popupWindowFull .popupImagePlayer').closest('.S1000Dfigure').find(link).click(); + } + } + }); + } + } + break; + default: + break; + } + }); + + $('body').on('click', 'a.jsLink', function (event) { + event.preventDefault(); + event.stopPropagation(); + var link = $(this).attr('href'); + var objText = $(this).html(); + hideLeftPanel(); + getXML(link, '/Modules/S1000D/templates/default/Common.xslt', $(".container_text"), true, false, true, true, objText); + + //plus icon to minus + + }); + $('body').on('click', 'a.jsLinkURN', function (event) { + //logger('jsLinkURN'); + //event.preventDefault(); + var url = $(this).attr("val"); + var urnPart = url.split('#'); + var urnSplit = '.jsLinkURN[val^="' + urnPart[0] + '"]'; + var urn = $('#loap_tab').find(urnSplit).attr('val'); + const currentIframeHref = new URL(document.location.href); + const urlFilePath = decodeURIComponent(currentIframeHref.pathname); + var lm_data = urlFilePath.split('/', 5); + var lm_data_join = lm_data.join("/"); + var full = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : ''); + //url= url.replace(/URN:S1000D:/g,''); + + if (urnPart[1]) { + if (urnPart[1].substr(0, 3) == 'CSN') { + url = full + '/' + urn + '#' + urnPart[1]; + openExtISN(url, urnPart[1]); + } + } + else { + url = full + lm_data_join + '/' + url; + document.location.href = url; + }; + + /* event.stopPropagation(); + var folder = ''; + var full = location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: ''); + var stLink = $( ".container_text" ).attr('link'); + var obj = $(this); + var urn = $(this).attr("val"); + var urnSplit = urn.split('/'); + /!*logger('getURN'); + logger(urn); + logger(urnSplit[1]);*!/ + var objText = $(this).html(); + + $.ajax({ + type: "POST", + url: full+"/Resolver/resolver.php", + data: {url: stLink, function:'urlFolder'}, + success: function(data) { + //$('#Contents').addClass('visible'); + folder = data; + regex = /^[.]?[\/]?(.*)/g; + mat = regex.exec(folder); + + $.ajax({ + type: "POST", + url: full+"/Resolver/resolver.php", + data: {urn: urnSplit[0], folder: './../'+mat[1], function:'urnUrl'}, + success: function(dat) { + logger('urnUrl - ' + dat); + $.ajax({ + type: "POST", + url: full+"/Resolver/resolver.php", + data: {url: "./../"+mat[1]+'/'+dat, function:'getRdfParamPOST', param: 'title'}, + success: function(datj) { + getUrl(urnSplit[0], mat[1], obj, datj, undefined, urnSplit[1]);//urn, folder, obj, text, pmc, scrollto + } + }); + } + }); + //$('.copyLink').hide(); + } + });*/ + }); + + // $('body').on('click','.S1000Dfigure',function(event){ + // event.preventDefault(); + // event.stopPropagation(); + + // logger("on('click','.S1000Dfigure'"); + + // var $this = this; + + // var stLink = $( ".container_text" ).attr('link'); + + + // //var scrlTo = mainScrollTo; + // //logger('when start player', scrlTo, mainScrollTo ); + + // if( $($this).hasClass('imagePlayer-init') == false){ + // $($this).addClass('imagePlayer-init'); + // $($this).children('.S1000Dfiguregraphic').each(function (index, item) { + // //logger($(this)); + // var urnP = $(item).attr("val"); + // var thisObj = $(item); + // //logger('Item object', item); + // //logger('$(thisObj)', $(thisObj)); + // var hotspotArray = $(thisObj).find('.S1000DHotspot'); + + // Snap.load(urnP, function ( loadedFragment ) { + // logger("urnP LOAD SVG", urnP, loadedFragment); + // thisObj.append( loadedFragment ); + // $(thisObj).find('svg').hide(); + // loadedSvg(thisObj, urnP); + // //Snap("#"+icnId).zpd(); + // //svgttAddCover(icnId); // Добавление обвязки SVG + // } ); + // }); + // } + // return false; + // }); + + $('body').on('click', '.S1000Dsymbolgraphic', function (event) { + event.preventDefault(); + event.stopPropagation(); + + var stLink = $(".container_text").attr('link'); + var urnP = $(this).attr("boardnum"); + var thisObj = $(this); + var full = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : ''); + if ($(thisObj).children('img').length <= 1) { + $.ajax({ + type: "POST", + url: full + "/Resolver/resolver.php", + data: { url: stLink, function: 'urlFolder' }, + success: function (data) { + //$('#Contents').addClass('visible'); + folder = data; + regex = /^[.]?[\/]?(.*)/g; + mat = regex.exec(folder); + $.ajax({ + type: "POST", + url: full + "/Resolver/resolver.php", + data: { url: folder, function: 'getFyletype', urn: urnP, type: '.svg,.jpg,.jpeg,.png,.gif' }, + /*data: {url: stLink, function:'getDoctype', urn: urnP},*/ + success: function (data) { + //logger(data); + $(thisObj).children('img').hide(); + $(thisObj).append(''); + //$(thisObj).children('img+img').draggable(); + //$(thisObj).css({'min-height': $(thisObj).children('img+img').outerHeight() + 'px'}); + } + }); + } + }); + } + return false; + }); + + $('body').on('click', '.openVideo', function (event) { + event.preventDefault(); + event.stopPropagation(); + + var stLink = $(".container_text").attr('link'); + var urnP = $(this).attr("boardnum"); + var thisObj = $(this); + var full = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : ''); + logger('$(thisObj) video', $(thisObj)); + if ($(thisObj).find('.jp-video').length < 1 && !$(thisObj).closest('.S1000Dmultimedia').hasClass('init')) { + $(thisObj).closest('.S1000Dmultimedia').addClass('init'); + + $.ajax({ + type: "POST", + url: full + "/Resolver/resolver.php", + data: { url: stLink, function: 'urlFolder' }, + success: function (data) { + //$('#Contents').addClass('visible'); + folder = data; + regex = /^[.]?[\/]?(.*)/g; + mat = regex.exec(folder); + $.ajax({ + type: "POST", + url: full + "/Resolver/resolver.php", + data: { url: folder, function: 'getFyletype', urn: urnP, type: '.mp4,.webm' }, + success: function (data) { + $(thisObj).children('img').hide(); + + var tmp = ''; + // tmp+='
'; + var l = $(".jp-video").length; + + tmp += ''; + + $(thisObj).append(tmp); + + var setMedia = { title: " " }; + //var playerSettings = + var supply = ''; + + if ((data.search('MP4') != -1) || (data.search('mp4') != -1)) { + //var mp4vid = '/'+mat[1]+'/'+data; + setMedia.m4v = '/' + mat[1] + '/' + data; + supply += 'M4V'; + //tmp += ''; + } + if ((data.search('WEBM') != -1) || (data.search('webm') != -1)) { + //var webm = '/'+mat[1]+'/'+data; + setMedia.webm = '/' + mat[1] + '/' + data; + if (supply != '') { + supply += ', '; + } + supply += 'webm'; + } + + var ret = $("#jquery_jplayer_" + (l + 1)).jPlayer({ + ready: function () { + $(this).jPlayer("setMedia", setMedia); + }, + cssSelectorAncestor: "#jp_container_" + (l + 1), + swfPath: "/js", + supplied: supply, + });/*.jPlayer({ + ready: function () { + $(thisObj).children().jPlayer("setMedia", setMedia); + }, + cssSelectorAncestor: "#jp_container_"+(l+1), + swfPath: "/js", + supplied: supply, + useStateClassSkin: true, + autoBlur: false, + smoothPlayBar: true, + keyEnabled: true, + remainingDuration: true, + toggleDuration: true + });*/ + logger(ret); + //}); + + + /*videojs(document.querySelector('.video-js'), { + controls: true, + autoplay: false, + preload: 'auto', + nativeControlsForTouch: true, + nativeVideoTracks: true, + fluid: true + //aspectRatio: "16:9" + });*/ + // $(thisObj).children().mediaelementplayer({ + // pluginPath: "./Modules/S1000D/templates/default/js/mediaelement-master/build/", + // // When using jQuery's `mediaelementplayer`, an `instance` argument + // // is available in the `success` callback + // success: function(mediaElement, originalNode, instance) { + // // do things + // } + // }); + } + }); + } + }); + } + return false; + }); + + $('body').on('click', '.openAudio', function (event) { + event.preventDefault(); + event.stopPropagation(); + + var stLink = $(".container_text").attr('link'); + var urnP = $(this).attr("boardnum"); + var thisObj = $(this); + var full = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : ''); + var onLoad = $(this).attr('actuate'); + logger('$(thisObj) audio', $(thisObj)); + if ($(thisObj).children('.jp-audio').length < 1 && !$(thisObj).closest('.S1000Dmultimedia').hasClass('init')) { + $(thisObj).closest('.S1000Dmultimedia').addClass('init'); + + $.ajax({ + type: "POST", + url: full + "/Resolver/resolver.php", + data: { url: stLink, function: 'urlFolder' }, + success: function (data) { + //$('#Contents').addClass('visible'); + folder = data; + regex = /^[.]?[\/]?(.*)/g; + mat = regex.exec(folder); + $.ajax({ + type: "POST", + url: full + "/Resolver/resolver.php", + data: { url: folder, function: 'getFyletype', urn: urnP, type: '.mp3,.ogg' }, + success: function (data) { + $(thisObj).children('img').hide(); + + var tmp = ''; + // tmp+=''; + var l = $(".jp-audio").length; + var setMedia = { title: " " }; + //var playerSettings = + var supply = ''; + + if ((data.search('MP3') != -1) || (data.search('mp3') != -1)) { + //var mp4vid = '/'+mat[1]+'/'+data; + setMedia.mp3 = '/' + mat[1] + '/' + data; + supply += 'mp3'; + //tmp += ''; + } + if ((data.search('OGG') != -1) || (data.search('ogg') != -1)) { + //var webm = '/'+mat[1]+'/'+data; + setMedia.oga = '/' + mat[1] + '/' + data; + if (supply != '') { + supply += ', '; + } + supply += 'oga'; + } + logger(setMedia); + + tmp += ''; + $(thisObj).append(tmp); + + $("#jquery_japlayer_" + (l + 1)).jPlayer({ + ready: function () { + $(this).jPlayer("setMedia", setMedia); + if (onLoad == 'onLoad') { + $(this).jPlayer("play"); + } + }, + cssSelectorAncestor: "#jap_container_" + (l + 1), + swfPath: "/js", + supplied: "mp3, oga", + useStateClassSkin: true, + autoBlur: false, + smoothPlayBar: true, + keyEnabled: true, + remainingDuration: true, + toggleDuration: true + }); + /*videojs(document.querySelector('.video-js'), { + controls: true, + autoplay: false, + preload: 'auto' + });*/ + /*$(thisObj).children().mediaelementplayer({ + pluginPath: "./Modules/S1000D/templates/default/js/mediaelement-master/build/", + // When using jQuery's `mediaelementplayer`, an `instance` argument + // is available in the `success` callback + success: function(mediaElement, originalNode, instance) { + // do things + } + });*/ + /*$('.video-js').mediaelementplayer({ + pluginPath: "./Modules/S1000D/templates/default/js/mediaelement-master/build/", + // When using jQuery's `mediaelementplayer`, an `instance` argument + // is available in the `success` callback + success: function(mediaElement, originalNode, instance) { + // do things + } + });*/ + } + }); + } + }); + } + return false; + }); + + $(".printButton").click(function () { + window.print(); + }); + + $('body').on('click', 'button.multimediaObjectFullscreen', function (event) { + event.preventDefault(); + event.stopPropagation(); + //logger('HTML before button - ', $(event.target).parent().prev().get(0).outerHTML); + + var htmlToShow = $(event.target).parent().prev().get(0).outerHTML; + htmlToShow = $(event.target).closest('.S1000Dmultimedia').find('.S1000Dobjecttitle').get(0).outerHTML + htmlToShow + '
'; + logger('HTML before button - ', htmlToShow); + openPopup(htmlToShow); + + }); + + $(".R_icon.lists_img").click(function (event) { + //var link = $( ".container_text" ).attr('link'); + + //getXML(link, '/Modules/S1000D/templates/default/FIG.xslt', $("#dmc.main-list_inset .tabs__content"), false, false, false, true); + + reloadRiconCont('.S1000DLOF'); + + var objText = $(this).html(); + + $("#dmc.main-list_inset").addClass('visible'); + $(".main-list_inset_c").addClass('visible'); + $(".iconsBox").addClass('moved'); + + $(".iconsBox_item").removeClass('active'); + $(this).parent().addClass('active'); + }); + $(".R_icon.lists_multi").click(function (event) { + //var link = $( ".container_text" ).attr('link'); + + //getXML(link, '/Modules/S1000D/templates/default/FIG.xslt', $("#dmc.main-list_inset .tabs__content"), false, false, false, true); + + reloadRiconCont('.S1000DLOM'); + + var objText = $(this).html(); + + $("#dmc.main-list_inset").addClass('visible'); + $(".main-list_inset_c").addClass('visible'); + $(".iconsBox").addClass('moved'); + + $(".iconsBox_item").removeClass('active'); + $(this).parent().addClass('active'); + }); + + $(".R_icon.lists_tables").click(function (event) { + /*var link = $( ".container_text" ).attr('link'); + + getXML(link, '/Modules/S1000D/templates/default/TBL.xslt', $("#dmc.main-list_inset .tabs__content"), false, false, false, true); + */ + reloadRiconCont('.S1000DLOT'); + + $("#dmc.main-list_inset").addClass('visible'); + $(".main-list_inset_c").addClass('visible'); + $(".iconsBox").addClass('moved'); + + $(".iconsBox_item").removeClass('active'); + $(this).parent().addClass('active'); + }); + + $(".R_icon.lists").click(function (event) { + //var link = $( ".container_text" ).attr('link'); + //link, template, object, createNew, startfile, mainCont, removeRdf, linkCont, norecursion, scrollto, returnBack + //getXML(link, '/Modules/S1000D/templates/default/TOC.xslt', $("#dmc.main-list_inset .tabs__content"), false, false, false, true); + reloadRiconCont('.S1000DTOC'); + + $("#dmc.main-list_inset").addClass('visible'); + $(".main-list_inset_c").addClass('visible'); + $(".iconsBox").addClass('moved'); + + $(".iconsBox_item").removeClass('active'); + $(this).parent().addClass('active'); + }); + $(".R_icon.hidemenu").click(function (event) { + $("#dmc.main-list_inset").removeClass('visible'); + $(".main-list_inset_c").removeClass('visible'); + $(".iconsBox").removeClass('moved'); + + $(".iconsBox_item").removeClass('active'); + }); +}); + +function startActions() { + logger('startActionss'); + //change minus to plus + // minusToPlus(); + // //logger("tinymce_start"); + // tinymce.init({ + // selector:'textarea#editor', + // toolbar: 'undo redo | subscript superscript', + // menubar: false, + // force_br_newlines : false, + // force_p_newlines : false, + // forced_root_block : '', + // }); + + imageClick(); + symbolClick(); + + // //videoClick(); + // //audioClick(); + for (var i = 0; i < $('.S1000Dmultimedia').length; i++) { + getInnerAudioVideo($('.S1000Dmultimedia')[i]); + } + loadInlinedDownload(); + loadInlinedPDF(); + loadInlinedHTML(); + + restartScrolls(); + load3dDivs(); + includeHTML(); + cartUpdate(); + //addIconbox(); +} + +function setupContents() { + //var list = $('#contentsContainer').$('.parent').get(0).outerHTML; + logger('here9'); + $('#loap_tab').html($('#contentsContainer .parent').get(0).outerHTML); +} + +/* +function addIconbox() { + logger('here12'); + var tmp = '
'; + $('body').append('
'); + $('.container').append(tmp); + + $('.iconsBox').append('
'); + //logger("$('.S1000DTOC, .S1000DLOF, .S1000DLOM, .S1000DLOT').outerHTML()", $('.S1000DTOC, .S1000DLOF, .S1000DLOM, .S1000DLOT').get(0).outerHTML); + $('.iconsBoxContainer').append($('.S1000DTOC').get(0).outerHTML); + $('.iconsBoxContainer').append($('.S1000DLOF').get(0).outerHTML); + $('.iconsBoxContainer').append($('.S1000DLOM').get(0).outerHTML); + $('.iconsBoxContainer').append($('.S1000DLOT').get(0).outerHTML); + $('.S1000DTOC, .S1000DLOF, .S1000DLOM, .S1000DLOT').hide(); +} */ + +function reloadRiconCont(toShow) { + $("#dmc.main-list_inset .tabs__content").html(''); + logger('$(toShow)', $('.iconsBox').find(toShow)); + $.each($('.iconsBox').find(toShow), function (index, value) { + $("#dmc.main-list_inset .tabs__content").html($(value).get(0).outerHTML); + }); + $("#dmc").find(toShow).show(); +} + +function scrollWindow(scto) { + $('html, body').animate({ + scrollTop: $("#" + scto).offset().top + }, 2000); +} + +function hideLeftPanel() { + $('.main-list_inset_body').parent().removeClass('visible').addClass('js-wait'); + $('.main-list_top').removeClass('selected'); + $('.main-list_top').hide().show(0); +} +function scrollWindow(scto) { + $('html, body').animate({ + scrollTop: $("#" + scto).offset().top + }, 2000); +} + +function load3dDivs() { + logger("ALT START 3D", $('.S1000Dmultimediaobj>.b4webJsonContaine')); + logger("START load3dDivs", $('.b4webJsonContainer .b4webJsonContainer')); + for (var i = 0; i < $('.b4webJsonContainer .b4webJsonContainer').length; i++) { + // var stLink = $( ".container_text" ).attr('link'); + // var urnP = $($('.b4webJsonContainer .b4webJsonContainer')[i]).closest('.S1000Dmultimediaobj').attr("boardnum"); + // var actuate = $($('.b4webJsonContainer .b4webJsonContainer')[i]).closest('.S1000Dmultimediaobj').attr("actuate"); + // var show = $($('.b4webJsonContainer .b4webJsonContainer')[i]).closest('.S1000Dmultimediaobj').attr("show"); + var thisObj = $('.b4webJsonContainer .b4webJsonContainer')[i]; + // var full = location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: ''); + // var serialized = $($('.b4webJsonContainer .b4webJsonContainer')[i]).closest('.S1000Dmultimediaobj').html(); + + logger('load3dDivs', thisObj); + var tmp = '
'; + logger(tmp, $(thisObj)); + $(thisObj).append(tmp); + } + //return false; + + // m_data.unload(); + + // _is_init = false; + // loadJson($('#main_canvas_container').attr('jsonLink')); +} +function restartScrolls() { + + $('div[id^="tbl"]').mCustomScrollbar({ + theme: "custom-theme", + axis: "x" + }); +} +function getInnerAudioVideo(element, autoplay) { + autoplay = typeof autoplay !== 'undefined' ? autoplay : false; + //logger('autoplay',autoplay); + var multimediaList = []; + multimediaList = $(element).find('.openAudio, .openVideo'); + var actuate = $(element).attr('actuate'); + //logger('actuate of element', element, $(element).find('.S1000Dmultimediaobj').attr('actuate')); + + var tmp = ''; + var l = $(".jp-video,.jp-audio").length; + + //logger($(element)); + //logger($(multimediaList)); + + if ($(multimediaList[0]).hasClass('openAudio')) { + tmp += ''; + } + else { + tmp += ''; + } + + if ($(multimediaList).length > 0 && !$(element).hasClass('init')) { + + var playlistArray = []; + var loadNow = false; + for (var i = 0; i < $(multimediaList).length; i++) { + if ($($(multimediaList)[i]).closest('.S1000Dmultimediaobj').attr('actuate') != 'onRequest') { + loadNow = true; + } + //logger(multimediaList[i]); + + else { + logger(multimediaList[i]); + multimediaList = multimediaList.splice(i, 1); + } + } + if (loadNow) { + $(element).addClass('init'); + //logger('multimediaList.length > 0'); + $(element).prepend(tmp); + + for (var i = 0; i < $(multimediaList).length; i++) { + + var stLink = $(".container_text").attr('link'); + var urnP = $($(multimediaList)[i]).closest('.S1000Dmultimediaobj').attr("val"); + var thisObj = $($(multimediaList)[i]); + var onLoad = $($(multimediaList)[i]).attr('actuate'); + logger('onLoad', onLoad, urnP, $($(multimediaList)[i])); + + //if($(element).children('.jp-video').length < 1){ + + $(element).find('img').hide(); + + var setMedia = { title: " " }; + //var playerSettings = + var supply = ''; + + if (urnP != undefined) { + if ((urnP.search('MP3') != -1) || (urnP.search('mp3') != -1)) { + //var mp4vid = '/'+mat[1]+'/'+data; + setMedia.mp3 = urnP; + setMedia.title = labelfragment + (playlistArray.length + 1);//data; + supply += 'mp3'; + //tmp += ''; + } + if ((urnP.search('OGG') != -1) || (urnP.search('ogg') != -1)) { + //var webm = '/'+mat[1]+'/'+data; + setMedia.oga = urnP; + setMedia.title = labelfragment + (playlistArray.length + 1);//data; + if (supply != '') { + supply += ', '; + } + supply += 'oga'; + } + if ((urnP.search('MP4') != -1) || (urnP.search('mp4') != -1)) { + //var mp4vid = '/'+mat[1]+'/'+data; + setMedia.m4v = urnP; + setMedia.title = (playlistArray.length + 1);//data; + if (supply != '') { + supply += ', '; + } + supply += 'M4V'; + //tmp += ''; + } + if ((urnP.search('WEBM') != -1) || (urnP.search('webm') != -1)) { + //var webm = '/'+mat[1]+'/'+data; + setMedia.webm = urnP; + setMedia.title = (playlistArray.length + 1);//data; + if (supply != '') { + supply += ', '; + } + supply += 'webm'; + } + } + + playlistArray.push(setMedia); + + logger('ADD IN PLAYLIST', setMedia); + //logger(myPlaylist.playlist); + if (playlistArray.length == $(multimediaList).length) { + logger('i+1', i + 1); + + var myPlaylist = new jPlayerPlaylist({ + jPlayer: "#jquery_jplayer_" + l, + cssSelectorAncestor: "#jp_container_" + l + }, + playlistArray, //playlist elements + { + playlistOptions: { + enableRemoveControls: false + }, + //swfPath: "../../dist/jplayer", + supplied: "webmv, ogv, m4v, oga, mp3", + useStateClassSkin: true, + autoBlur: false, + smoothPlayBar: true, + keyEnabled: true, + audioFullScreen: true, + ready: function () { + if (autoplay != false) { + logger('SET ELEMENT FOR CLICK', autoplay); + var playlist = $(element).find('.jp-playlist .jp-playlist-item'); + //$() + if (!$(playlist[autoplay]).hasClass('clicked')) { + $(playlist[autoplay]).addClass('clicked');//.click(); + var playlist = $(element).find('.jp-playlist .jp-playlist-item').removeClass('jp-playlist-current'); + $(element).find('.jp-playlist li').removeClass('jp-playlist-current'); + + $(playlist[autoplay]).addClass('jp-playlist-current'); + $($(element).find('.jp-playlist li')[autoplay]).addClass('jp-playlist-current'); + $(playlist[autoplay]).click(); + //$(element).find('.jp-play').click(); + } + } + } + }); + } + } + } + else { + $(element).find('.openAudio, .openVideo').hide(); + multimediaList = $(element).find('.openAudio, .openVideo'); + $(multimediaList[0]).show(); + } + } +} +function symbolClick() { + logger($("div[actuate='onLoad'].S1000Dsymbolgraphic")); + $("div[actuate='onLoad'].S1000Dsymbolgraphic").click(); +} +function imageClick() { + logger('imc'); + $('.S1000Dfigure').each(function (index, item) { + logger('imageClick()', item); + loadGraphic(item); + }); +} +function loadInlinedDownload() { + //logger("$('.downloadContainer').length"); + //logger($('.downloadContainer').length); + for (var i = 0; i < $('.downloadContainer').length; i++) { + // event.preventDefault(); + // event.stopPropagation(); + + var stLink = $(".container_text").attr('link'); + var urnP = $($('.downloadContainer')[i]).parent().attr("val"); + var actuate = $($('.downloadContainer')[i]).parent().attr("actuate"); + var show = $($('.downloadContainer')[i]).parent().attr("show"); + var thisObj = $('.downloadContainer')[i]; + var full = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : ''); + + if (!$(thisObj).hasClass('loaded') && actuate == 'onLoad' && show == 'embed') { + $(thisObj).addClass('loaded'); + + var tmp = ''; + + tmp += '
'; + //tmp += ''; + + $(thisObj).append(tmp); + } + return false; + } +} +function loadInlinedPDF() { + //logger("$('.pdfPreviewContainer').length"); + //logger($('.pdfPreviewContainer').length); + for (var i = 0; i < $('.pdfPreviewContainer').length; i++) { + var stLink = $(".container_text").attr('link'); + var urnP = $($('.pdfPreviewContainer')[i]).parent('.S1000Dmultimediaobj').attr("val"); + logger("loadpdf", urnP); + var actuate = $($('.pdfPreviewContainer')[i]).parent('.S1000Dmultimediaobj').attr("actuate"); + var show = $($('.pdfPreviewContainer')[i]).parent('.S1000Dmultimediaobj').attr("show"); + var thisObj = $('.pdfPreviewContainer')[i]; + var full = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : ''); + + if (!$(thisObj).hasClass('loaded') && actuate == 'onLoad' && show == 'embed') { + $(thisObj).addClass('loaded'); + + + var tmp = ''; + + tmp += '

' + labeldontsupportpdf + ': ' + labledownloadpdf + '.

'; + + //tmp += ''; + + $(thisObj).append(tmp); + } + } + return false; +} +function loadInlinedHTML() { + //logger("$('.htmlContainer').length"); + //logger($('.htmlContainer').length); + + for (var i = 0; i < $('.htmlContainer').length; i++) { + // event.preventDefault(); + // event.stopPropagation(); + + var stLink = $(".container_text").attr('link'); + var urnP = $($('.htmlContainer')[i]).parent().attr("boardnum"); + var start = $($('.htmlContainer')[i]).attr("start"); + + if (start == typeof undefined && start == false) { + start = 'index.html'; + } + + var thisObj = $('.htmlContainer')[i]; + logger('start HTML', urnP + '/' + start); + + if (!$(thisObj).hasClass('loaded')) { + + var tmp = ''; + tmp += '

' + labeldontsupporthtml + ': ' + labledownloadhtml + '.

'; + + logger('start HTML', $(thisObj), tmp); + $(thisObj).append(tmp); + $(thisObj).addClass('loaded'); + } + } +} + +function addHashToBookmark() { + var stLink = $(".container_text").attr('link'); + var linkText = $(".description_body_text span").html(); + + $("#Bookmarks .tabs__content .parent li ul").append('
  • ' + linkText + '
  • '); +} + +function plusToMinus() { + $(".addContent .svgMinus").show(); + $(".addContent .svgPlus").hide(); + $(".S1000DBookmark").css({ "display": "inline-block" }); + $(".addToCartInput").css({ "display": "block" }); + $(".addToCartLink").css({ "display": "block" }); +} +function minusToPlus() { + $(".addContent .svgMinus").hide(); + $(".addContent .svgPlus").show(); + $(".S1000DBookmark").css({ "display": "none" }); + $(".addToCartInput").css({ "display": "none" }); + $(".addToCartLink").css({ "display": "block" }); +} +function copy(str) { + var tmp = document.createElement('INPUT'), // Создаём новый текстовой input + focus = document.activeElement; // Получаем ссылку на элемент в фокусе (чтобы не терять фокус) + + tmp.value = str; // Временному input вставляем текст для копирования + + document.body.appendChild(tmp); // Вставляем input в DOM + tmp.select(); // Выделяем весь текст в input + //logger($(tmp)); + document.execCommand('copy'); // Магия! Копирует в буфер выделенный текст (см. команду выше) + document.body.removeChild(tmp); // Удаляем временный input + focus.focus(); // Возвращаем фокус туда, где был +} +function openPopup(html) { + if ($('.htmlPopup').length > 0) { + $('.htmlPopup .popupContent').html(html); + } + else { + var newPopup = $(''); + $('body').append(newPopup); + } + + $('.htmlPopup').show(); + + $('.htmlPopup .popupCont').css({ 'height': '98%', 'width': '98%', 'max-height': '98%', 'max-width': '98%' }); + $('.htmlPopup .popupContent').css({ 'height': '100%', 'width': '100%', 'overflow': 'hidden' }); + var oh = $('.htmlPopup .popupContent').innerHeight() - $('.htmlPopup .popupContent .multimediaPanel').outerHeight() - $('.htmlPopup .popupContent .S1000Dobjecttitle').outerHeight(); + $('.htmlPopup .popupCont object, .htmlPopup .popupCont embed').removeAttr('height').css({ 'height': oh + 'px', 'min-height': oh + 'px', 'width': '100%' }); + + if ($('.htmlPopup .popupCont').outerHeight() < $('.htmlPopup.popupWindow').outerHeight()) { + tmp = ($('.htmlPopup.popupWindow').outerHeight() - $('.htmlPopup .popupCont').outerHeight()) / 2; + $('.htmlPopup .popupCont').css({ 'top': tmp + 'px' }); + } + if ($('.htmlPopup .popupCont').outerWidth() < $('.htmlPopup.popupWindow').outerWidth()) { + tmp = ($('.htmlPopup.popupWindow').outerWidth() - $('.htmlPopup .popupCont').outerWidth()) / 2; + $('.htmlPopup .popupCont').css({ 'left': tmp + 'px' }); + } +} +function loadGraphic(elem) { + + //elem - figure + logger('loadGraphic', elem); + var $this = elem; + var stLink = $(".container_text").attr('link'); + + //var scrlTo = mainScrollTo; + //logger('when start player', elem, $($this).children('.S1000Dfiguregraphic') ); + // if( $($this).hasClass('imagePlayer-init') == false){ + // $($this).addClass('imagePlayer-init'); + + $($this).children('.S1000Dfiguregraphic').each(function (index, item) { + // item - figure's div with svg + logger('item', item); + var urnP = $(item).attr("val"); + // urnP - SVG's name + var thisObj = $(item); + //thisObj - current object + + /* if (thisObj[0].getAttribute('val') === 'ICN-MI17V5-A-237001-1-AD92F-08001-A-01-1.svg') { + for (var i = 0; i < thisObj[0].childNodes.length; i++) { + logger( thisObj[0].childNodes[i] ); // Text, DIV, Text, UL, ..., SCRIPT + } + logger('Item object', thisObj[0].children); + }*/ + + var hotspotArray = $(thisObj).find('.S1000DHotspot'); + // logger("hotspotArray", hotspotArray); + + Snap.load(urnP, function (loadedFragment) { + Snap($(thisObj)[0]).append(loadedFragment); + $(thisObj).find('svg').hide(); + // logger('hsarr',hotspotArray); + loadedSvg(thisObj, urnP, hotspotArray); + //Snap("#"+icnId).zpd(); + //svgttAddCover(icnId); // Добавление обвязки SVG + }); + }); + // } + // return false; +} +function loadedSvg(thisElement, urnP, hotspotArray) { + //logger('loadedSvg', thisElement); + + var svg = $(thisElement).find('svg'); + var hotspots = []; + + // //console.log(svg[0]); + //logger('svg', svg.attr('width')); + hotspots = $(svg).find('text[itedo' + $.escapeSelector(":apstype") + '="grobject"], g[class], circle[itedo' + $.escapeSelector(":apstype") + '="grobject"], ellipse[itedo' + $.escapeSelector(":apstype") + '="grobject"]') // достаем все хотспоты картинки + +// console.log(hotspots); + + var viewBox = svg[0].getAttribute('viewBox'); + let parenthot = [] + let hotspotArrToPlayer = []; + + let trans = false + let mat = false + + let parrentrecurseidcurent // содержимое тега хотспота + let parrentrecurseid // названия тега + + for (let i = 0; i < hotspots.length; i++) { + let isMatrix = false + let isTranslate = false + const parrentreciursematrix = [] + + + parenthot[i] = hotspots[i].parentElement.id; // текущий хотспот + parrentrecurseidcurent = hotspots[i]; + + const arr = [] + + // //console.log(parrentrecurseidcurent.getAttribute('y')); + //console.log(parrentrecurseidcurent); + // //console.log(svg[0].getElementsByTagName('g')[0]); + parrentrecurseid = parrentrecurseidcurent.tagName; + let n = 0 + let uses = svg[0].getElementsByTagName('use') + + while (parrentrecurseid != 'svg') { + n++ + let parrentrecurseidcurentwh = parrentrecurseidcurent.parentElement; // содержимое тега родителя (проходится по каждому с конца) + let transform = parrentrecurseidcurentwh.getAttribute('transform'); + // logger('parrentrecurseidcurentwh',parrentrecurseidcurentwh); + let idParent = parrentrecurseidcurent.parentElement.getAttribute('id') + let transformForTranslate + + const transArr = [] + const arrUses = [] + + if (uses.length > 0) { + for (let k = 0; k < uses.length; k++) { + arrUses.push(uses[k]) + let idUse = uses[k].getAttribute('xlink:href') + if (idUse.slice(1) == idParent) { + transArr.push(uses[k]) + transformForTranslate = uses[k] + } + } + } + + if (transform != null) { + if (transform.indexOf('translate') != -1 && n == 1) { + isTranslate = true + } else if (transform.indexOf('matrix') != -1 && !isTranslate) { + isMatrix = true + } + } + + let parrentrecurseidwh = parrentrecurseidcurent.parentElement.tagName; // имя родительского тега + + if (parrentrecurseid != "symbol") { + // //console.log(parrentrecurseidcurent); + // logger(parrentrecurseidcurent.transform.baseVal.length); + if (parrentrecurseidcurent.transform.baseVal.length > 0) { + // console.log(1); + // console.log(hotspots[i]); + if (parrentrecurseidcurent.transform.baseVal[0].matrix != null) { + // //console.log(parrentrecurseidcurent); + // //console.log(parrentrecurseidcurent.transform.baseVal[0].matrix); + //logger(parrentrecurseidcurent); + // console.log(2); + parrentreciursematrix.push(parrentrecurseidcurent.transform.baseVal[0].matrix) + //arr.push(parrentrecurseidcurent.transform.baseVal[0].matrix) + } + } else if (transArr.length > 0) { + // } else if (transformForTranslate != null) { + let currentParent + let parentUse + transArr.forEach(elem => { + const arrTemp = [] + if (currentParent == null) { + currentParent = elem + } + + while (currentParent.tagName != 'svg') { + parentUse = currentParent.parentElement + currentParent = parentUse + // logger(hotspots[i]); + // logger('currentParent',currentParent.transform.baseVal[0]); + if (currentParent.transform != undefined) { + if (currentParent.transform.baseVal[0] != undefined) { + //parrentreciursematrix.push(currentParent.transform.baseVal[0].matrix) + arrTemp.push(currentParent.transform.baseVal[0].matrix) + } + } + } + // logger(hotspots[i]); + // logger(elem.transform.baseVal[0]); + //parrentreciursematrix.push(elem.transform.baseVal[0].matrix) + arrTemp.push(elem.transform.baseVal[0].matrix) + trans = true + if (uses[n] != undefined) { + if (uses[n].getAttribute('transform').indexOf('matrix') != -1) { + mat = true + } + } + currentParent = null + arr.push(arrTemp) + }) + // logger(arr); + } + } + parrentrecurseidcurent = parrentrecurseidcurentwh; + parrentrecurseid = parrentrecurseidwh; + //logger('parrentrecurseidcurent',parrentrecurseidcurent); + } + // console.log(hotspots[i]); + // console.log('parrentreciursematrix', parrentreciursematrix); + + let firstX + let firstY + let firstFont + let currentHot + + let resultmatrixmp + + // logger(hotspots[i]); + // //console.log('parrentreciursematrix', parrentreciursematrix); + // logger('arr', arr); + + if (parrentreciursematrix.length != 0) { + if (parrentreciursematrix.length == 1 && !trans) { + resultmatrixmp = parrentreciursematrix[0] + var parenttransformx = 0; + var parenttransformy = 0; + var parenttransformsx = 1; + var parenttransformsy = 1; + + if (resultmatrixmp != null) { + parenttransformx = resultmatrixmp.e; + parenttransformy = resultmatrixmp.f; + parenttransformsx = resultmatrixmp.a; + parenttransformsy = resultmatrixmp.d; + } + + let origgx + let origgy + + if (hotspots[i].getAttribute('x') != null && hotspots[i].getAttribute('y') != null) { + origgx = parseFloat(hotspots[i].getAttribute('x')); + origgy = parseFloat(hotspots[i].getAttribute('y')); + } else { + try { + origgx = hotspots[i].querySelector('tspan').getAttribute('x') + origgy = hotspots[i].querySelector('tspan').getAttribute('y') + } catch (error) { + + } + } + if (isMatrix && parrentreciursematrix.length > 1) { + hotspots[i].setAttribute('x', (origgx * parenttransformsx)); + hotspots[i].setAttribute('y', (origgy * parenttransformsy)); + } else { + if (!mat) { + // //console.log(parenttransformy + origgy * parenttransformsy); + hotspots[i].setAttribute('y', (parenttransformy + origgy * parenttransformsy)); + } else { + hotspots[i].setAttribute('y', (parenttransformy + origgy * parenttransformsy)); + } + hotspots[i].setAttribute('x', (parenttransformx + origgx * parenttransformsx)) + } + + // //console.log(origgy); + // //console.log(origgx); + + var fontsized = parseFloat(hotspots[i].getAttribute('font-size')); + hotspots[i].setAttribute('font-size', fontsized * parenttransformsx + 'px') + + hotspotArrToPlayer.push(hotspots[i].outerHTML); + } else if (parrentreciursematrix.length > 1 || trans) { + resultmatrixmp = parrentreciursematrix.reduce(function (sum, current) { + return sum.multiply(current) + }) + console.log('resultmatrixmp', resultmatrixmp); + var origgx = parseFloat(hotspots[i].getAttribute('x')); + var origgy = parseFloat(hotspots[i].getAttribute('y')); + var fontsized = parseFloat(hotspots[i].getAttribute('font-size')); + + // //console.log(origgy); + // //console.log(origgx); + + var parenttransformx = 0; + var parenttransformy = 0; + var parenttransformsx = 1; + var parenttransformsy = 1; + + if (resultmatrixmp != null) { + parenttransformx = resultmatrixmp.e; + parenttransformy = resultmatrixmp.f; + parenttransformsx = resultmatrixmp.a; + parenttransformsy = resultmatrixmp.d; + } + + // console.log(origgx); + // console.log(origgy); + + if (isMatrix && parrentreciursematrix.length > 1) { + hotspots[i].setAttribute('x', (origgx * parenttransformsx)); + hotspots[i].setAttribute('y', (origgy * parenttransformsy)); + } else { + if (!mat) { + hotspots[i].setAttribute('y', (parenttransformy + origgy * parenttransformsy)); + } else { + hotspots[i].setAttribute('y', (parenttransformy + origgy * parenttransformsy)); + } + hotspots[i].setAttribute('x', (parenttransformx + origgx * parenttransformsx)) + } + + hotspots[i].setAttribute('font-size', fontsized * parenttransformsx + 'px') + hotspotArrToPlayer.push(hotspots[i].outerHTML); + + } + } else if (arr.length > 0) { + arr.forEach(array => { + if (array.length == 1 && !trans) { + resultmatrixmp = array[0] + var parenttransformx = 0; + var parenttransformy = 0; + var parenttransformsx = 1; + var parenttransformsy = 1; + + if (resultmatrixmp != null) { + parenttransformx = resultmatrixmp.e; + parenttransformy = resultmatrixmp.f; + parenttransformsx = resultmatrixmp.a; + parenttransformsy = resultmatrixmp.d; + } + + var origgx = parseFloat(hotspots[i].getAttribute('x')); + var origgy = parseFloat(hotspots[i].getAttribute('y')); + if (isMatrix && array.length > 1) { + hotspots[i].setAttribute('x', (origgx * parenttransformsx)); + hotspots[i].setAttribute('y', (origgy * parenttransformsy)); + } else { + if (!mat) { + hotspots[i].setAttribute('y', (parenttransformy + origgy * parenttransformsy)); + } else { + hotspots[i].setAttribute('y', (parenttransformy + origgy * parenttransformsy)); + } + hotspots[i].setAttribute('x', (parenttransformx + origgx * parenttransformsx)) + } + + // //console.log(origgy); + // //console.log(origgx); + + var fontsized = parseFloat(hotspots[i].getAttribute('font-size')); + hotspots[i].setAttribute('font-size', fontsized * parenttransformsx + 'px') + + hotspotArrToPlayer.push(hotspots[i].outerHTML); + } else if (array.length > 1 || trans && array.length != 0) { + + resultmatrixmp = array.reduce(function (sum, current) { + return sum.multiply(current) + }) + // console.log('resultmatrixmp',resultmatrixmp); + var origgx = parseFloat(hotspots[i].getAttribute('x')); + var origgy = parseFloat(hotspots[i].getAttribute('y')); + var fontsized = parseFloat(hotspots[i].getAttribute('font-size')); + + // //console.log(origgy); + // //console.log(origgx); + + if (currentHot == undefined) { + currentHot = hotspots[i] + firstX = parseFloat(hotspots[i].getAttribute('x')); + firstY = parseFloat(hotspots[i].getAttribute('y')); + firstFont = parseFloat(hotspots[i].getAttribute('font-size')); + } + + if (currentHot == hotspots[i] && arr.length > 1) { + origgx = firstX + origgy = firstY + fontsized = firstFont + } + + var parenttransformx = 0; + var parenttransformy = 0; + var parenttransformsx = 1; + var parenttransformsy = 1; + + if (resultmatrixmp != null) { + parenttransformx = resultmatrixmp.e; + parenttransformy = resultmatrixmp.f; + parenttransformsx = resultmatrixmp.a; + parenttransformsy = resultmatrixmp.d; + } + + if (isMatrix && array.length > 1) { + hotspots[i].setAttribute('x', (origgx * parenttransformsx)); + hotspots[i].setAttribute('y', (origgy * parenttransformsy)); + } else { + if (!mat) { + hotspots[i].setAttribute('y', (parenttransformy + origgy * parenttransformsy)); + } else { + hotspots[i].setAttribute('y', (parenttransformy + origgy * parenttransformsy)); + } + hotspots[i].setAttribute('x', (parenttransformx + origgx * parenttransformsx)) + } + + hotspots[i].setAttribute('font-size', fontsized * parenttransformsx + 'px') + // logger(hotspots[i]) + // logger(hotspots[i].getAttribute('font-size')) + // //console.log(hotspots[i]); + // //console.log(hotspots[i].getAttribute('x')); + // //console.log(hotspots[i].getAttribute('y')); + hotspotArrToPlayer.push(hotspots[i].outerHTML); + } + }) + } else if (hotspots[i].getAttribute('cx') != undefined && hotspots[i].getAttribute('cy') != undefined) { + // console.log(hotspots[i].getAttribute('cx')); + hotspots[i].setAttribute('x', (hotspots[i].getAttribute('cx'))); + hotspots[i].setAttribute('y', (hotspots[i].getAttribute('cy'))); + console.log('here'); + hotspotArrToPlayer.push(hotspots[i].outerHTML); + } else { + + if (hotspots[i].parentElement.tagName != 'symbol') { + + var origgx = parseFloat(hotspots[i].getAttribute('x')); + var origgy = parseFloat(hotspots[i].getAttribute('y')); + var fontsized = parseFloat(hotspots[i].getAttribute('font-size')); + + // //console.log('------------'); + // //console.log(origgy); + // //console.log(origgx); + + hotspots[i].setAttribute('x', (origgx)); + hotspots[i].setAttribute('y', (origgy)); + hotspots[i].setAttribute('font-size', fontsized + 'px') + hotspotArrToPlayer.push(hotspots[i].outerHTML); + } + } + console.log('x',hotspots[i].getAttribute('x')); + console.log('y',hotspots[i].getAttribute('y')); + } + // console.log(origgy); + // console.log(origgx); + // //console.log($(hotspotArray)); + + if (hotspotArrToPlayer.length > $(hotspotArray).length) { + const hotspotIDs = []; + for (let i = 0; i < hotspotArrToPlayer.length; i++) { + let substrI = hotspotArrToPlayer[i].substring(hotspotArrToPlayer[i].indexOf('id="') + 4) + let currentI = substrI.substring(0, substrI.indexOf('"')) + if (currentI != undefined && currentI != '') { + hotspotIDs.push(currentI); + } + } + // logger(hotspotIDs); + if (hotspotIDs.length > 0) { + if ($(thisElement).find('.imagePlayer').length < 1) { + let ready = undefined; + $(thisElement).imagePlayer({ + viewType: 'inline', + url: urnP, + legend: hotspotArrToPlayer, + legendSpots: Array(hotspotArrToPlayer.length).fill({ todraw: false }), + type: 'vector', + viewBox: 'viewBox="' + viewBox + '"', + ready: ready, + }); + } + //logger(hotspotArrToPlayer); + } + } else if (hotspotArray.length > 0) { + // logger('hotspotArray', hotspotArray); + var hotspotIDs = []; + for (var i = 0; i < $(hotspotArray).length; i++) { + if ($($(hotspotArray)[i]).attr('applicationstructureident') != undefined && $($(hotspotArray)[i]).attr('applicationstructureident') != '') { + hotspotIDs.push($($(hotspotArray)[i]).attr('applicationstructureident')); + } + } + // logger('hotspotIDs.length'); + // logger('hotspotIDs', hotspotIDs); + if (hotspotIDs.length > 0) { + hotspotIDs = JSON.stringify(hotspotIDs); + + if ($(thisElement).find('.imagePlayer').length < 1) { + + var ready = undefined; + + logger('ready function', thisElement.height()); + + $(thisElement).imagePlayer({ + viewType: 'inline', + url: urnP, + legend: hotspotArrToPlayer, + legendSpots: Array(hotspotArray.length).fill({ todraw: false }), + type: 'vector', + viewBox: 'viewBox="' + viewBox + '"', + ready: ready, + }); + } + } + else { + // hotspotIDs = []; + // //logger('IN ELSE!'); + // for (var i = 0; i < $(hotspotArray).length; i++) { + // /*if($($(hotspotArray)[i]).attr('applicationstructureident') != undefined + // && $($(hotspotArray)[i]).attr('applicationstructureident') != ''){ + // hotspotIDs.push($($(hotspotArray)[i]).attr('applicationstructureident')); + // }*/ + // if($($(hotspotArray)[i]).attr('objectcoordinates') != undefined && $($(hotspotArray)[i]).attr('objectcoordinates') != ''){ + // var coords = $($(hotspotArray)[i]).attr('objectcoordinates'); + // coords = coords.split(','); + // var outObj = { + // coords: coords, + // hotspottitle: $($(hotspotArray)[i]).attr('hotspottitle'), + // id: $($(hotspotArray)[i]).attr('id'), + // applicationstructurename: $($(hotspotArray)[i]).attr('applicationstructurename'), + // }; + + // hotspotIDs.push(outObj); + // } + // } + } + } + else { + //здесь для случая, если хотов нет + if ($(thisElement).find('.imagePlayer').length < 1) { + $(thisElement).imagePlayer({ + viewType: 'inline', + url: urnP, + legend: false, + legendSpots: [], + type: 'vector', + viewBox: 'viewBox="' + viewBox + '"', + }); + } + } + + + +} +function learnResult() { + + doSetValue("cmi.completion_status", "completed"); + doSetValue("cmi.exit", "suspend"); + doTerminate(); +} + +function includeHTML() { + var z, i, elmnt, file, xhttp; + /* Loop through a collection of all HTML elements: */ + z = document.getElementsByTagName("*"); + for (i = 0; i < z.length; i++) { + elmnt = z[i]; + /*search for elements with a certain atrribute:*/ + file = elmnt.getAttribute("w3-include-html"); + if (file) { + /* Make an HTTP request using the attribute value as the file name: */ + xhttp = new XMLHttpRequest(); + xhttp.onreadystatechange = function () { + if (this.readyState == 4) { + if (this.status == 200) { elmnt.innerHTML = this.responseText; } + if (this.status == 404) { elmnt.innerHTML = "Page not found."; } + /* Remove the attribute, and call this function once more: */ + elmnt.removeAttribute("w3-include-html"); + setupContents(); + includeHTML(); + } + } + xhttp.open("GET", file, true); + xhttp.send(); + /* Exit the function: */ + return; + } + } +} + +$(".toPrint").click(function () { + //var printContents = document.getElementById('container').innerHTML; + var newTab = window.open('', ''); + var printContents = $('.S1000D_root').html(); + var printContents2; + printContents2 = printContents; + newTab.document.write('' + lalbleforprint + '
    ' + printContents2 + ''); + //document.head.innerHTML = ('Версия для печати') + //document.body.innerHTML = ('
    '+printContents2); + //window.print(); + //location.reload(); + //document.body.innerHTML = originalContents; + /* newTab.onafterprint = function() { + window.close(); + }; */ +} +); diff --git a/s1000d/Converter_Source/Icons/S1000D_logo.png b/s1000d/Converter_Source/Icons/S1000D_logo.png new file mode 100644 index 0000000..80914af Binary files /dev/null and b/s1000d/Converter_Source/Icons/S1000D_logo.png differ diff --git a/s1000d/Converter_Source/Icons/accept.png b/s1000d/Converter_Source/Icons/accept.png new file mode 100644 index 0000000..7786ac7 Binary files /dev/null and b/s1000d/Converter_Source/Icons/accept.png differ diff --git a/s1000d/Converter_Source/Icons/add.png b/s1000d/Converter_Source/Icons/add.png new file mode 100644 index 0000000..60a7a29 Binary files /dev/null and b/s1000d/Converter_Source/Icons/add.png differ diff --git a/s1000d/Converter_Source/Icons/chrome.png b/s1000d/Converter_Source/Icons/chrome.png new file mode 100644 index 0000000..641dc8a Binary files /dev/null and b/s1000d/Converter_Source/Icons/chrome.png differ diff --git a/s1000d/Converter_Source/Icons/chrome_refresh.png b/s1000d/Converter_Source/Icons/chrome_refresh.png new file mode 100644 index 0000000..b0fdc60 Binary files /dev/null and b/s1000d/Converter_Source/Icons/chrome_refresh.png differ diff --git a/s1000d/Converter_Source/Icons/delete.png b/s1000d/Converter_Source/Icons/delete.png new file mode 100644 index 0000000..30a45b8 Binary files /dev/null and b/s1000d/Converter_Source/Icons/delete.png differ diff --git a/s1000d/Converter_Source/Icons/doc_config.ico b/s1000d/Converter_Source/Icons/doc_config.ico new file mode 100644 index 0000000..f4b1f02 Binary files /dev/null and b/s1000d/Converter_Source/Icons/doc_config.ico differ diff --git a/s1000d/Converter_Source/Icons/doc_config.png b/s1000d/Converter_Source/Icons/doc_config.png new file mode 100644 index 0000000..5bc7e71 Binary files /dev/null and b/s1000d/Converter_Source/Icons/doc_config.png differ diff --git a/s1000d/Converter_Source/Icons/doc_head_blue+.png b/s1000d/Converter_Source/Icons/doc_head_blue+.png new file mode 100644 index 0000000..aa96284 Binary files /dev/null and b/s1000d/Converter_Source/Icons/doc_head_blue+.png differ diff --git a/s1000d/Converter_Source/Icons/doc_head_blue.png b/s1000d/Converter_Source/Icons/doc_head_blue.png new file mode 100644 index 0000000..6a43dc9 Binary files /dev/null and b/s1000d/Converter_Source/Icons/doc_head_blue.png differ diff --git a/s1000d/Converter_Source/Icons/doc_head_blue_exclamation.png b/s1000d/Converter_Source/Icons/doc_head_blue_exclamation.png new file mode 100644 index 0000000..35097fa Binary files /dev/null and b/s1000d/Converter_Source/Icons/doc_head_blue_exclamation.png differ diff --git a/s1000d/Converter_Source/Icons/docs_head_orange.png b/s1000d/Converter_Source/Icons/docs_head_orange.png new file mode 100644 index 0000000..311e78c Binary files /dev/null and b/s1000d/Converter_Source/Icons/docs_head_orange.png differ diff --git a/s1000d/Converter_Source/Icons/down_arrow.png b/s1000d/Converter_Source/Icons/down_arrow.png new file mode 100644 index 0000000..3e568a2 Binary files /dev/null and b/s1000d/Converter_Source/Icons/down_arrow.png differ diff --git a/s1000d/Converter_Source/Icons/edl_logo.png b/s1000d/Converter_Source/Icons/edl_logo.png new file mode 100644 index 0000000..5028d84 Binary files /dev/null and b/s1000d/Converter_Source/Icons/edl_logo.png differ diff --git a/s1000d/Converter_Source/Icons/exclamation.png b/s1000d/Converter_Source/Icons/exclamation.png new file mode 100644 index 0000000..8270104 Binary files /dev/null and b/s1000d/Converter_Source/Icons/exclamation.png differ diff --git a/s1000d/Converter_Source/Icons/export_logo.png b/s1000d/Converter_Source/Icons/export_logo.png new file mode 100644 index 0000000..ae85832 Binary files /dev/null and b/s1000d/Converter_Source/Icons/export_logo.png differ diff --git a/s1000d/Converter_Source/Icons/folder+.png b/s1000d/Converter_Source/Icons/folder+.png new file mode 100644 index 0000000..cbd288c Binary files /dev/null and b/s1000d/Converter_Source/Icons/folder+.png differ diff --git a/s1000d/Converter_Source/Icons/folder.png b/s1000d/Converter_Source/Icons/folder.png new file mode 100644 index 0000000..8c3ebc1 Binary files /dev/null and b/s1000d/Converter_Source/Icons/folder.png differ diff --git a/s1000d/Converter_Source/Icons/folder_exclamation.png b/s1000d/Converter_Source/Icons/folder_exclamation.png new file mode 100644 index 0000000..48dce51 Binary files /dev/null and b/s1000d/Converter_Source/Icons/folder_exclamation.png differ diff --git a/s1000d/Converter_Source/Icons/folder_search.png b/s1000d/Converter_Source/Icons/folder_search.png new file mode 100644 index 0000000..d3578d5 Binary files /dev/null and b/s1000d/Converter_Source/Icons/folder_search.png differ diff --git a/s1000d/Converter_Source/Icons/folder_with_doc.png b/s1000d/Converter_Source/Icons/folder_with_doc.png new file mode 100644 index 0000000..16ff09b Binary files /dev/null and b/s1000d/Converter_Source/Icons/folder_with_doc.png differ diff --git a/s1000d/Converter_Source/Icons/folders.png b/s1000d/Converter_Source/Icons/folders.png new file mode 100644 index 0000000..d6b4470 Binary files /dev/null and b/s1000d/Converter_Source/Icons/folders.png differ diff --git a/s1000d/Converter_Source/Icons/item_del.png b/s1000d/Converter_Source/Icons/item_del.png new file mode 100644 index 0000000..f355a0e Binary files /dev/null and b/s1000d/Converter_Source/Icons/item_del.png differ diff --git a/s1000d/Converter_Source/Icons/logo.png b/s1000d/Converter_Source/Icons/logo.png new file mode 100644 index 0000000..3cfc4d2 Binary files /dev/null and b/s1000d/Converter_Source/Icons/logo.png differ diff --git a/s1000d/Converter_Source/Icons/lyx_import.png b/s1000d/Converter_Source/Icons/lyx_import.png new file mode 100644 index 0000000..884cb15 Binary files /dev/null and b/s1000d/Converter_Source/Icons/lyx_import.png differ diff --git a/s1000d/Converter_Source/Icons/maple-leaf.png b/s1000d/Converter_Source/Icons/maple-leaf.png new file mode 100644 index 0000000..6c8d94a Binary files /dev/null and b/s1000d/Converter_Source/Icons/maple-leaf.png differ diff --git a/s1000d/Converter_Source/Icons/moodle_logo.png b/s1000d/Converter_Source/Icons/moodle_logo.png new file mode 100644 index 0000000..0f6a61f Binary files /dev/null and b/s1000d/Converter_Source/Icons/moodle_logo.png differ diff --git a/s1000d/Converter_Source/Icons/question.png b/s1000d/Converter_Source/Icons/question.png new file mode 100644 index 0000000..e33422d Binary files /dev/null and b/s1000d/Converter_Source/Icons/question.png differ diff --git a/s1000d/Converter_Source/Icons/refresh.png b/s1000d/Converter_Source/Icons/refresh.png new file mode 100644 index 0000000..44bc15b Binary files /dev/null and b/s1000d/Converter_Source/Icons/refresh.png differ diff --git a/s1000d/Converter_Source/Icons/save.png b/s1000d/Converter_Source/Icons/save.png new file mode 100644 index 0000000..605f09f Binary files /dev/null and b/s1000d/Converter_Source/Icons/save.png differ diff --git a/s1000d/Converter_Source/Icons/scorm_logo.png b/s1000d/Converter_Source/Icons/scorm_logo.png new file mode 100644 index 0000000..9e775fb Binary files /dev/null and b/s1000d/Converter_Source/Icons/scorm_logo.png differ diff --git a/s1000d/Converter_Source/Icons/suspend.png b/s1000d/Converter_Source/Icons/suspend.png new file mode 100644 index 0000000..dfc3d36 Binary files /dev/null and b/s1000d/Converter_Source/Icons/suspend.png differ diff --git a/s1000d/Converter_Source/Icons/up_arrow.png b/s1000d/Converter_Source/Icons/up_arrow.png new file mode 100644 index 0000000..88a62c4 Binary files /dev/null and b/s1000d/Converter_Source/Icons/up_arrow.png differ diff --git a/s1000d/Converter_Source/S1000DEditor.pro b/s1000d/Converter_Source/S1000DEditor.pro new file mode 100644 index 0000000..02bb643 --- /dev/null +++ b/s1000d/Converter_Source/S1000DEditor.pro @@ -0,0 +1,54 @@ +QT += core gui xml +#gui-private + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +CONFIG += c++11 +CONFIG += console + +# You can make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +SOURCES += \ + console.cpp \ + exportdialog.cpp \ + html.cpp \ + lyx.cpp \ + main.cpp \ + editormainwindow.cpp \ + ru_const.cpp \ + s1000d_manager.cpp \ + splashform.cpp + +HEADERS += \ + console.h \ + editormainwindow.h \ + exportdialog.h \ + html.h \ + lyx.h \ + ru_const.h \ + s1000d_manager.h \ + splashform.h + +FORMS += \ + editormainwindow.ui \ + exportdialog.ui \ + splashform.ui + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target + +RESOURCES += \ + S1000DResources.qrc + +win32: RC_ICONS = $$PWD/Icons/doc_config.ico + +#QTPLUGIN +=qico \ +# qsvg \ +# qjpeg \ +# qwbmp +#LIBS +=-L$(QTDIR)/plugins/imageformats +#INCLUDEPATH += $(QTDIR)/plugins/imageformats diff --git a/s1000d/Converter_Source/S1000DEditor.pro.user b/s1000d/Converter_Source/S1000DEditor.pro.user new file mode 100644 index 0000000..f584525 --- /dev/null +++ b/s1000d/Converter_Source/S1000DEditor.pro.user @@ -0,0 +1,322 @@ + + + + + + EnvironmentId + {097cf8a8-2317-4a35-a529-1cb5c5e47f5c} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + *.md, *.MD, Makefile + false + true + + + + ProjectExplorer.Project.PluginSettings + + + true + true + true + true + true + + + 0 + true + + -fno-delayed-template-parsing + + false + Builtin.Questionable + + true + true + Builtin.DefaultTidyAndClazy + 8 + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop Qt 5.15.2 MinGW 64-bit + Desktop Qt 5.15.2 MinGW 64-bit + qt.qt5.5152.win64_mingw81_kit + 1 + 0 + 0 + + 0 + E:\C++\build-S1000DEditor-Desktop_Qt_5_15_2_MinGW_64_bit-Debug + E:/C++/build-S1000DEditor-Desktop_Qt_5_15_2_MinGW_64_bit-Debug + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Отладка + Qt4ProjectManager.Qt4BuildConfiguration + 2 + 0 + + + E:\C++\build-S1000DEditor-Desktop_Qt_5_15_2_MinGW_64_bit-Release + E:/C++/build-S1000DEditor-Desktop_Qt_5_15_2_MinGW_64_bit-Release + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Выпуск + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + + 0 + E:\C++\build-S1000DEditor-Desktop_Qt_5_15_2_MinGW_64_bit-Profile + E:/C++/build-S1000DEditor-Desktop_Qt_5_15_2_MinGW_64_bit-Profile + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Профилирование + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + 0 + + 3 + + + 0 + Развёртывание + Развёртывание + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + + 2 + + S1000DEditor2 + Qt4ProjectManager.Qt4RunConfiguration:E:/C++/S1000DEditor/S1000DEditor.pro + E:/C++/S1000DEditor/S1000DEditor.pro + false + true + true + false + true + E:/C++/build-S1000DEditor-Desktop_Qt_5_15_2_MinGW_64_bit-Release + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/s1000d/Converter_Source/S1000DEditor.pro.user.3554a5b b/s1000d/Converter_Source/S1000DEditor.pro.user.3554a5b new file mode 100644 index 0000000..3d6c9a0 --- /dev/null +++ b/s1000d/Converter_Source/S1000DEditor.pro.user.3554a5b @@ -0,0 +1,319 @@ + + + + + + EnvironmentId + {3554a5b0-26c0-4e9c-896e-0ad6b09e59c9} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + *.md, *.MD, Makefile + false + true + + + + ProjectExplorer.Project.PluginSettings + + + true + true + true + true + true + + + 0 + true + + true + Builtin.Questionable + + true + true + Builtin.DefaultTidyAndClazy + 8 + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop + Desktop + {ad7d87aa-8f5c-4e86-8651-11a06c0ae456} + 1 + 0 + 0 + + 0 + /home/shurick/Projects/643_mi38/s1000d/build-S1000DEditor-Desktop-Debug + /home/shurick/Projects/643_mi38/s1000d/build-S1000DEditor-Desktop-Debug + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Отладка + Qt4ProjectManager.Qt4BuildConfiguration + 2 + 0 + + + /home/shurick/Projects/643_mi38/s1000d/build-S1000DEditor-Desktop-Release + /home/shurick/Projects/643_mi38/s1000d/build-S1000DEditor-Desktop-Release + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Выпуск + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + + 0 + /home/shurick/Projects/643_mi38/s1000d/build-S1000DEditor-Desktop-Profile + /home/shurick/Projects/643_mi38/s1000d/build-S1000DEditor-Desktop-Profile + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Профилирование + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + 0 + + 3 + + + 0 + Развёртывание + Развёртывание + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + + 2 + + Qt4ProjectManager.Qt4RunConfiguration:/home/shurick/Projects/643_mi38/s1000d/S1000DEditor/S1000DEditor.pro + /home/shurick/Projects/643_mi38/s1000d/S1000DEditor/S1000DEditor.pro + false + true + true + false + true + /home/shurick/Projects/643_mi38/s1000d/build-S1000DEditor-Desktop-Release + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/s1000d/Converter_Source/S1000DEditor.pro.user.8d779a8 b/s1000d/Converter_Source/S1000DEditor.pro.user.8d779a8 new file mode 100644 index 0000000..127912e --- /dev/null +++ b/s1000d/Converter_Source/S1000DEditor.pro.user.8d779a8 @@ -0,0 +1,542 @@ + + + + + + EnvironmentId + {8d779a8c-2d05-46ce-a346-322281e5dc8d} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + *.md, *.MD, Makefile + false + true + + + + ProjectExplorer.Project.PluginSettings + + + true + true + true + true + true + + + 0 + true + + -fno-delayed-template-parsing + + true + Builtin.Questionable + + false + true + Builtin.DefaultTidyAndClazy + 2 + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop Qt 5.15.2 MinGW 64-bit + Desktop Qt 5.15.2 MinGW 64-bit + qt.qt5.5152.win64_mingw81_kit + 1 + 0 + 0 + + 0 + F:\C++\build-S1000DEditor-Desktop_Qt_5_15_2_MinGW_64_bit-Debug + F:/C++/build-S1000DEditor-Desktop_Qt_5_15_2_MinGW_64_bit-Debug + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Отладка + Qt4ProjectManager.Qt4BuildConfiguration + 2 + 0 + + + F:\C++\build-S1000DEditor-Desktop_Qt_5_15_2_MinGW_64_bit-Release + F:/C++/build-S1000DEditor-Desktop_Qt_5_15_2_MinGW_64_bit-Release + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Выпуск + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + + 0 + F:\C++\build-S1000DEditor-Desktop_Qt_5_15_2_MinGW_64_bit-Profile + F:/C++/build-S1000DEditor-Desktop_Qt_5_15_2_MinGW_64_bit-Profile + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Профилирование + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + 0 + + 3 + + + 0 + Развёртывание + Развёртывание + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + + 2 + + Qt4ProjectManager.Qt4RunConfiguration:F:/C++/S1000DEditor/S1000DEditor.pro + F:/C++/S1000DEditor/S1000DEditor.pro + false + true + true + false + true + F:/C++/build-S1000DEditor-Desktop_Qt_5_15_2_MinGW_64_bit-Release + + 1 + + + + ProjectExplorer.Project.Target.1 + + Desktop + Qt 5.14 Static + Qt 5.14 Static + {94cbbe2d-0d31-465f-80f1-3cd0950454ef} + 0 + 0 + 0 + + 0 + F:\C++\build-S1000DEditor-Qt_5_14-Debug + F:/C++/build-S1000DEditor-Qt_5_14-Debug + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Отладка + Qt4ProjectManager.Qt4BuildConfiguration + 2 + 0 + + + F:\C++\build-S1000DEditor-Qt_5_14-Release + F:/C++/build-S1000DEditor-Qt_5_14-Release + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Выпуск + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + + 0 + F:\C++\build-S1000DEditor-Qt_5_14-Profile + F:/C++/build-S1000DEditor-Qt_5_14-Profile + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Профилирование + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + 0 + + 3 + + + 0 + Развёртывание + Развёртывание + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + + 2 + + Qt4ProjectManager.Qt4RunConfiguration:F:/C++/S1000DEditor/S1000DEditor.pro + F:/C++/S1000DEditor/S1000DEditor.pro + false + true + true + false + false + + 1 + + + + ProjectExplorer.Project.TargetCount + 2 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/s1000d/Converter_Source/S1000DResources.qrc b/s1000d/Converter_Source/S1000DResources.qrc new file mode 100644 index 0000000..74a1491 --- /dev/null +++ b/s1000d/Converter_Source/S1000DResources.qrc @@ -0,0 +1,48 @@ + + + Icons/doc_config.png + Icons/doc_head_blue.png + Icons/folder.png + Icons/folder_search.png + Icons/folder_with_doc.png + Icons/folder+.png + Icons/folders.png + Icons/suspend.png + Icons/doc_head_blue+.png + Icons/save.png + Icons/logo.png + Icons/docs_head_orange.png + BlankXML/pm.xml + Icons/item_del.png + BlankXML/crew.xml + BlankXML/descript.xml + BlankXML/learning.xml + Icons/add.png + Icons/delete.png + Icons/down_arrow.png + Icons/up_arrow.png + Icons/question.png + Icons/lyx_import.png + Icons/refresh.png + BlankXML/blank.html + Icons/chrome.png + Icons/doc_config.ico + Icons/S1000D_logo.png + Icons/scorm_logo.png + Icons/chrome_refresh.png + Icons/export_logo.png + BlankXML/dml.xml + BlankXML/imsmanifest.xml + Icons/accept.png + Icons/exclamation.png + Icons/doc_head_blue_exclamation.png + Icons/folder_exclamation.png + BlankXML/packages.xml + BlankXML/scormIndex.html + Icons/edl_logo.png + BlankXML/edocinfo.xml + Icons/moodle_logo.png + BlankXML/singleScormIndex.html + Icons/maple-leaf.png + + diff --git a/s1000d/Converter_Source/app/dinamika/banner.png b/s1000d/Converter_Source/app/dinamika/banner.png new file mode 100644 index 0000000..5e624c1 Binary files /dev/null and b/s1000d/Converter_Source/app/dinamika/banner.png differ diff --git a/s1000d/Converter_Source/app/dinamika/dinamika.css b/s1000d/Converter_Source/app/dinamika/dinamika.css new file mode 100644 index 0000000..6800ad9 --- /dev/null +++ b/s1000d/Converter_Source/app/dinamika/dinamika.css @@ -0,0 +1,126 @@ +/* +Закомментировано для для предпросмотра в проекте Клён. +Если в дальнейшем в сборках в браузере появится лишний скроллинг - раскомментировать. + +html::-webkit-scrollbar { + display: none; +} +html { + -ms-overflow-style: none; + scrollbar-width: none; + overflow-y: hidden; +}*/ +body { + font-family: RobotoRegular, Arial, sans-serif; + font-size: 18px; + line-height: 20px; + background: #fff; + color: #212121; +} + +div.S1000Dpara { + text-indent: 35px; + text-align: justify; + padding: 3px; +} +td { + border: 1px solid black; + padding: 0.5ex; +} +.grayNote { + color: gray; + text-indent: 35px; + text-align: justify; + padding: 3px; +} + +span.foot_label { + display: inline; + vertical-align: super; + font-size: smaller; + /*font-weight: bold;*/ + text-decoration: underline; + font-weight: medium; + font-family: serif; + font-variant: normal; + font-style: normal; + padding: 2px; + color: rgb(124, 37, 41); +} +/* +div.foot { + display: inline; + font-size: small; + font-weight: medium; + font-family: serif; + font-variant: normal; + font-style: normal; +} +div.foot_inner { display: none; } +div.foot:hover div.foot_inner { + display: block; + border: 1px double rgb(124, 37, 41); + margin: 0em 1em; + padding: 1em; +} */ +.divTable { + justify-content: center; + margin: 0 auto; + max-width: 90%; + overflow-x: auto; +} +#tooltip { + background: rgb(124, 37, 41); + color: white; + border: 1px solid white; + padding: 5px; + border-radius: 5px; +} +#tooltipImg { + position: absolute; + background: white; + border: 2px solid rgb(124, 37, 41); + border-radius: 5px; + padding: 5px; + max-width: 500px; +} +#zoom { + width:34px; + height:34px; + border: 1px solid white; + background: rgba(124, 37, 41, 0.3); + border-radius: 5px; +} +#zoom:hover { + background: rgb(124, 37, 41); +} +.container_text table { + margin-bottom: 10px; +} +.container_text table.S1000DrandomList td { + height: 10px; + padding: 3px; + padding-left: 0px; +} + +.inlineImg { + margin: 0 0 !important; + display: inline-block !important; + vertical-align: bottom !important; +} + +.ui-widget-header { + border: 1px solid rgb(124, 37, 41); + background: rgb(124, 37, 41); + color: #ffffff; + font-weight: bold; +} +.ui-widget { + font-family: Arial,sans-serif; + font-size: 1.0em; +} +.ui-widget .ui-widget { + font-size: 0.9em; +} + + diff --git a/s1000d/Converter_Source/app/dinamika/dinamika.js b/s1000d/Converter_Source/app/dinamika/dinamika.js new file mode 100644 index 0000000..32f5e4b --- /dev/null +++ b/s1000d/Converter_Source/app/dinamika/dinamika.js @@ -0,0 +1,188 @@ +var timerId; +var mouseOverImg; + +var unityDivID = ""; + +Start(); + +function showTooltip(evt, text) { + let tooltip = document.getElementById("tooltip"); + tooltip.innerHTML = text; + tooltip.style.display = "block"; + + if(evt.pageX > 3*window.innerWidth/4) { + tooltip.style.left = evt.pageX - tooltip.offsetWidth - 10 + 'px'; + tooltip.style.top = evt.pageY + 10 + 'px'; + tooltip.style.maxWidth = window.innerWidth/2 + 'px'; + } else { + tooltip.style.left = evt.pageX + 10 + 'px'; + tooltip.style.top = evt.pageY + 10 + 'px'; + tooltip.style.maxWidth = window.innerWidth/2 + 'px'; + if(evt.pageX + window.innerWidth/2 > window.innerWidth-10) + tooltip.style.maxWidth = window.innerWidth - evt.pageX - 10 + 'px'; + } +} + +function hideTooltip() { + var tooltip = document.getElementById("tooltip"); + tooltip.style.display = "none"; +} + +function showTooltipImg(evt, text) { + let tooltip = document.getElementById("tooltipImg"); + tooltip.innerHTML = ""; + tooltip.style.display = "block"; + tooltip.style.left = evt.pageX + 'px'; + tooltip.style.top = evt.pageY + 'px'; + if (evt.clientX < document.documentElement.clientWidth/2) { + if(evt.clientY < document.documentElement.clientHeight/2) + tooltip.style.transform = "translate(10px, 10px)"; + else + tooltip.style.transform = "translate(10px, -10px) translate(0, -100%)"; + } + else { + if(evt.clientY < document.documentElement.clientHeight/2) + tooltip.style.transform = "translate(-10px, 10px) translate(-100%, 0)"; + else + tooltip.style.transform = "translate(-10px, -10px) translate(-100%, -100%)"; + } + clearTimeout(timerId); timerID = null; +} + +function hideTooltipImg() { + timerId = setTimeout( + () => { + var tooltip = document.getElementById("tooltipImg"); + tooltip.style.display = "none"; + }, 100 + ); +} + +function showZoomImg(evt, text) { + if(evt.currentTarget.offsetWidth < 300 && evt.currentTarget.offsetHeight < 300) + return; + mouseOverImg = text; + let tooltip = document.getElementById("zoom"); + evt = evt || window.event; + x = evt.clientX; y = evt.clientY; + img = document.elementFromPoint(x,y); + + var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; + var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; + var rect = img.getBoundingClientRect(); + tooltip.style.display = "block"; + tooltip.style.left = (rect.right+scrollLeft-32-7)+'px'; + tooltip.style.top = (rect.top+scrollTop+3)+'px'; +} + +function doZoomImg() { + viewer.show(mouseOverImg); +} + +// ---------------------------------------------------------------------------------------- + +const scList = new Map(); +const divList = new Map(); +var quitCurUnity = null; +var isClicked = false; + +function Start() { + const url = new URL(document.URL); + //var divID = url.searchParams.get('scenario'); + var savedPage = window.sessionStorage.getItem('curScenarioPage'); + var divID = window.sessionStorage.getItem('scenarioID'); + if(savedPage == location.href && divID != null && divID != "") + unityDivID = divID; + //console.log("Start ", unityDivID); +} + +function scRegister(scName, scTitle, divID, iframeSrc) { + var curSc = window.sessionStorage.getItem(scName); + if(curSc != '~done~') { + scList.set(scName, scTitle); + window.sessionStorage.setItem(scName, scTitle); + } + divList.set(divID, iframeSrc); + if(divID == unityDivID) + { + setDivToIFrame(divID); + var elem = document.getElementById(divID); + elem.scrollIntoView(); + } + else + setDivToBanner(divID); +} +function scFinished(scName, scTitle) { + window.sessionStorage.setItem(scName, '~done~'); + scList.delete(scName); +} +function setDivToBanner(divID) { + var elem = document.getElementById(divID); + if(elem != null) { + if(elem.firstChild != null) + elem.removeChild(elem.firstChild); + elem.innerHTML = ""; + } +} + +function onBannerClick(divID) { + if(isClicked) return; + if(unityDivID == null) + isClicked = true; + unityDivID = divID; + if(quitCurUnity != null) + quitCurUnity(); + else + setDivToIFrame(divID); +} +function afterUnityQuit() { + quitCurUnity = null; + //const url = new URL(document.URL); + //url.searchParams.delete('scenario'); + //url.searchParams.append('scenario', unityDivID); + window.sessionStorage.setItem('scenarioID', unityDivID); + window.sessionStorage.setItem('curScenarioPage', location.href); + document.location.replace(location.href); //url.href +} +function setDivToIFrame(divID) { + var elem = document.getElementById(divID); + if(elem != null) + elem.innerHTML = ""; +} + +// ---------------------------------------------------------------------------------------- + +function onLearnedButton() { + if(scList.size == 0){ + learnResult(); + let btn = document.getElementById('learnedButton'); + btn.style.display = 'none'; + } else { + var msgStr; + msgStr = '

    Не изучены сценарии интерактивной модели ВС:


    '; + for (let sc of scList.values()) + msgStr += " - "+sc+"
    "; + $("#dialog").html(msgStr); + $( function() { + $( "#dialog" ).dialog(); + $('#dialog').dialog("option", "width", "auto"); $('#dialog').dialog("option", "height", "auto"); + } ); + + } +} + +function onLoadFunction() { + var H = document.getElementById('container_text').offsetHeight; + window.sessionStorage.setItem('contentsHeight', H); + if(typeof window.parent.objectHTMLLoaded !== "undefined") + window.parent.objectHTMLLoaded(); + let timerId = setInterval(() => { + var h = document.getElementById('container_text').offsetHeight; + if(h != H) { + H = h; + window.sessionStorage.setItem('contentsHeight', H); + window.parent.updateDocHeight(); + } + }, 50); + setTimeout(() => { clearInterval(timerId); }, 1000); +} \ No newline at end of file diff --git a/s1000d/Converter_Source/app/dinamika/styles_edl.css b/s1000d/Converter_Source/app/dinamika/styles_edl.css new file mode 100644 index 0000000..c843212 --- /dev/null +++ b/s1000d/Converter_Source/app/dinamika/styles_edl.css @@ -0,0 +1,1856 @@ +* { + box-sizing: border-box; + outline: none; +} + +html, +body { + height: 100%; +} + +body { + font-family: RobotoRegular, Arial, sans-serif; + font-size: 16px; + line-height: 20px; + background: #fff; + color: #212121; +} + +a { + text-decoration: none; + color: rgb(124, 37, 41); +} + +a:hover { + text-decoration: none; + opacity: .8; + color: rgb(157, 34, 53); +} + +h1 { + font-size: 2em; + line-height: 1.5em; + text-align: center; +} + +h2 { + text-align: center; +} + +p { + margin: 0; +} + +form.inTab { + display: block; + width: 70%; + margin: 20px auto; +} + +.form_row { + margin: 15px 0; +} + +.form_row input[type="text"], +.form_row input[type="number"], +.form_row select { + width: 100%; + height: 40px; + border: 1px solid #bfbaba; + border-radius: 4px; + padding: 0 5px; +} + +.form_row input[type="text"]:focus, +.form_row input[type="number"]:focus, +.form_row select:focus { + border-color: rgb(157, 34, 53); +} + +.form_row label { + display: block; + color: #929292; + padding-left: 15px; +} + +.main-list_inset_body_tabs button { + width: 100%; + margin: 15px 0 0 0; +} + +input[type="radio"], +input[type="checkbox"] { + width: 20px; + height: 20px; + cursor: pointer; + position: relative; + top: 3px; + opacity: 0; +} + +input[type="radio"]+label, +input[type="checkbox"]+label { + cursor: pointer; + display: inline-block; + position: relative; +} + +input[type="radio"]+label:before, +input[type="checkbox"]+label:before { + content: ""; + position: absolute; + display: block; + width: 20px; + height: 20px; + top: 0; + left: -23px; +} + +input[type="radio"]+label:before { + background: url(../images/radio.png) no-repeat; + background-position: 0 0; +} + +input[type="checkbox"]+label:before { + background: url(../images/checkbox.png) no-repeat; +} + +input[type="radio"]:checked+label:before, +input[type="checkbox"]:checked+label:before { + background-position: 0 -22px; +} + +.ui-overlay-a, +.ui-page-theme-a, +.ui-page-theme-a .ui-panel-wrapper { + text-shadow: none; +} + +.white { + color: #ffffff; + font-size: 20px; +} + +.header { + width: 100%; + min-width: 680px; + height: 90px; + background: rgb(124, 37, 41); +} + +.container { + max-width: 100%; + min-width: 680px; + min-height: 100%; + margin: 0 auto; + padding: 0 10px; +} + +.container .container_cell { + height: 100%; + float: left; +} + +.container .container_cell.wth-8 { + width: 8%; +} + +.container .container_cell.wth-10 { + width: 10%; +} + +.container .container_cell.wth-20 { + width: 20%; +} + +.container .container_cell.wth-30 { + width: 30%; +} + +.container .container_cell.wth-40 { + width: 40%; +} + +.container .container_cell.wth-50 { + width: 50%; +} + +.container .container_cell.wth-60 { + width: 60%; +} + +.container .container_cell.wth-70 { + width: 70%; +} + +.container .container_cell.wth-72 { + width: 72%; +} + +.container .container_cell.wth-80 { + width: 80%; +} + +.container .container_cell.wth-90 { + width: 90%; +} + +.container .container_cell.wth-100 { + width: 100%; +} + +.container .container_text { + padding: 20px 20px; + background: #fff; + font-family: 'RobotoRegular'; +} + +.container .container_text img { + display: block; + padding: 0px; + margin: 20px auto; + max-width: 100%; + clear: both; +} + +.container .container_text img+img { + max-width: inherit; +} + +.container .container_text a { + color: rgb(8, 43, 177); + text-decoration: underline; +} + +.container .container_text .img_descript { + text-align: center; + display: block; +} + +.container .container_text ul { + margin: 20px 0; + padding: 0; + list-style: none; +} + +.container .container_text ul li { + margin-bottom: 5px; + position: relative; + padding-left: 15px; +} + +.container .container_text ul li:before { + content: ''; + display: block; + width: 6px; + height: 6px; + background: #01579b; + border-radius: 50%; + position: absolute; + left: 0; + top: 7px; +} + +.container .container_text h3 { + font-size: 24px; + font-weight: normal; +} + +.container .container_text ul.parent ul { + display: block; +} + +.container .container_text ul.parent>li>span { + background: #282828; + color: #fff; + cursor: default; +} + +.descript_img { + margin: 0; +} + +.descript_img .column { + float: left; + padding-right: 20px; +} + +.descript_img:after { + content: " "; + display: table; + clear: both; +} + +.tableBox { + display: table; + height: 100%; + width: 100%; +} + +.tableBox_cell { + display: table-cell; + vertical-align: middle; + text-align: center; +} + +.logotype { + width: 100%; + height: 90px; +} + +.logotype a { + display: block; + height: 100%; + background: url(../images/logo_ru.png) no-repeat center; +} + +.main { + overflow-x: hidden; + width: 100%; + min-height: 100%; + background: rgba(204, 204, 204, 0.30); + position: relative; +} + +.description { + height: 100%; + width: 100%; + margin: 0; + padding: 0 0 0 10px; + position: relative; +} + +.description .description_body_arrow { + position: absolute; + width: 15px; + height: 15px; + right: 30px; + top: 30px; + background: url(../images/descript_arrow.png) no-repeat center; + z-index: 7; + cursor: pointer; +} + +.description .description_body_arrow.opened { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); +} + +.description .description_body { + position: absolute; + width: 98.5%; + min-height: 90px; + overflow: hidden; + text-overflow: ellipsis; + background: #01579b; + color: #fff; + padding: 25px 50px 20px 20px; + max-height: 9999px; + cursor: default; +} + +.description .description_body .description_body_text { + font-size: 20px; + font-family: RobotoLight; + background: #01579b; + line-height: 20px; +} + +.description .description_body .description_body_text.full { + top: -40px; + position: relative; +} + +.description .description_body.closed { + max-height: 90px; + cursor: pointer; +} + +.description:before, +.description:after { + content: ''; + display: block; + width: 1px; + height: 50px; + position: absolute; + top: 50%; + margin-top: -25px; + background: #fff; + z-index: 1; +} + +.description:before { + left: 11px; +} + +.description:after { + right: 1px; +} + +.description_body_fulltext { + display: none; + width: 100%; + position: absolute; + color: #fff; + background: #01579b; + font-size: 20px; + line-height: 24px; + font-family: RobotoLight; + padding: 25px 50px 20px 20px; + box-shadow: 3px 3px 13px 0px rgba(0, 0, 0, 0.35); + z-index: 6; +} + +.main-menu-wrapp { + width: 100%; + min-width: 680px; + height: 40px; + background: #282828; + position: relative; + box-shadow: 0 6px 11px rgba(0, 0, 0, 0.3); + z-index: 3; + /*transition: all ease-in 0.3s;*/ +} + + +/* .main-menu-wrapp.fix { + position: fixed; + top: 0px; + z-index: 8; }*/ + +.main-menu { + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; +} + +.main-menu .main-list { + /*text-align: justify; + -moz-text-align-last: justify; + text-align-last: justify;*/ + list-style-type: none; + /*width: 95%;*/ + height: 40px; + padding: 0; + margin: 0; + margin-left: 20px; +} + +.main-menu .main-list:after { + content: ""; + display: inline-block; + width: 100%; + height: 0; + overflow: hidden; +} + +.main-menu .main-list .main-list_top { + display: inline-block; + position: relative; +} + +.main-menu .main-list .main-list_top+.main-list_top { + margin-left: 40px; +} + +.main-menu .main-list .main-list_top span.main-item { + line-height: 40px; + font-size: 20px; + color: #ababab; +} + +.main-menu .main-list .main-list_top:before { + position: absolute; + content: ""; + display: none; + width: 100%; + height: 4px; + top: 0; + background: transparent; +} + +.main-menu .main-list .main-list_top:hover { + cursor: pointer; +} + +.main-menu .main-list .main-list_top:hover:before, +.main-menu .main-list .main-list_top.selected:before { + display: block; + background: rgb(124, 37, 41); +} + +.main-menu .main-list .main-list_top:hover span.main-item, +.main-menu .main-list .main-list_top.selected span.main-item { + color: #fff; +} + +.right-menu-buttons { + display: flex; + justify-content: flex-end; + align-items: center; +} + +.right-menu-buttons>div+div { + margin-left: 10px; +} + +.right-menu-buttons .iconsBox_item { + position: relative; + width: 35px; + height: 35px; + background: url(../images/BG_rightIcon.png) center center no-repeat; + cursor: pointer; + background-size: 110%; +} + +.right-menu-buttons .iconsBox_item .R_icon.cart { + background: url(../images/cart.png) no-repeat; + background-position: 2px 0px; + background-size: 69%; + width: 25px; + height: 20px; +} + +.right-menu-buttons .iconsBox_item .R_icon.bookmark { + background: none; +} + +.right-menu-buttons .iconsBox_item .R_icon.bookmark svg { + width: auto; + height: 21px; + margin-left: 5px; + margin-top: 3px; +} + +.right-menu-buttons .iconsBox_item .R_icon.sett { + background: none; +} + +.right-menu-buttons .iconsBox_item .R_icon.sett svg { + width: auto; + height: 21px; + margin-left: 5px; + margin-top: 3px; +} + +.main-list_inset, +.main-list_inset-search { + position: absolute; + width: 440px; + height: auto; + top: 40px; + /*box-shadow: 2px 2px 13px 0px rgba(0,0,0,0.25);*/ + background: #fff; + left: -450px; + -webkit-transition: all 0.5s; + transition: all 0.5s; + z-index: 1; +} + +.main-list_inset_c { + width: 0px; + height: auto; + overflow-x: hidden; + position: absolute; + top: 120px; + right: 0px; + /*box-shadow: 2px 2px 13px 0px rgba(0,0,0,0.25); */ + -webkit-transition: all 0.5s; + transition: all 0.5s; +} + +.main-list_inset_c .main-list_inset_body .main-list_inset_body_title { + background: #282828; +} + +.main-list_inset_c.visible { + width: 440px; + box-shadow: 2px 2px 13px 0px rgba(0, 0, 0, 0.25); +} + +#dmc.main-list_inset { + position: fixed; + width: 440px; + height: auto; + top: 193px; + /*box-shadow: 2px 2px 13px 0px rgba(0,0,0,0.25);*/ + background: #fff; + left: initial; + right: -450px; + -webkit-transition: all 0.5s; + transition: all 0.5s; + z-index: 1; +} + +#dmc.main-list_inset.visible { + right: 0; +} + +#dmc .main-list_inset_body { + max-height: 300px; + min-height: 300px; + height: 300px; +} + +#dmc .main-list_inset_body_tabs { + max-height: auto; + min-height: 300px; + height: auto; +} + +.dmc-right-panel ul { + list-style: none; + padding: 10px 15px; + margin: 0; +} + +.dmc-right-panel ul li { + vertical-align: top; + display: block; +} + +.dmc-right-panel .idstatus { + padding: 0 15px; + box-sizing: border-box; +} + +.dmc-right-panel .idstatus table { + width: 100%; +} + +.dmc-right-panel a { + text-decoration: none; + line-height: 185%; + color: rgb(124, 37, 41); +} + +.main-list_inset.visible { + left: 0; +} + +.main-list_inset_body { + position: relative; + box-shadow: 2px 2px 13px 0px rgba(0, 0, 0, 0.25); + max-height: calc(100vh - 130px); + height: calc(100vh - 130px); +} + +.main-list_inset_body .main-list_inset_body_title { + width: 100%; + height: 55px; + background: rgb(124, 37, 41); + color: #fff; + text-align: center; + font-size: 20px; + line-height: 55px; + cursor: pointer; +} + +.main-list_inset_body_tabs { + background: #fff; + max-height: calc(100vh - 185px); + height: calc(100vh - 185px); +} + +.main-list_inset_body_tabs:after { + content: " "; + display: table; + clear: both; +} + +.tabs__content { + display: none; + background: #fff; + padding-bottom: 10px; +} + +.mCSB_inside>.mCSB_container { + margin-right: 0; +} + +.tabs__content.active { + display: block; +} + +.tabs__content.active .btnCenter { + text-align: center; +} + +.tabs__content.active button { + width: 80%; + display: inline-block; +} + +.tabs__caption { + display: table; + width: 100%; + margin: 0; + padding: 0; +} + +.tab_item { + display: table-cell; + width: 33.33%; + height: 60px; + text-align: center; + vertical-align: middle; + background: #dddddd; + color: #282828; + cursor: pointer; +} + +.tab_item.active { + background: #282828; + color: #fff; + cursor: default; +} + +ul.parent { + padding: 0; + margin: 0; +} + +ul.parent li { + list-style: none; + cursor: pointer; + position: relative; + border-bottom: 1px solid #dddddd; +} + +ul.parent li a { + margin: 0; + padding-right: 10px; + display: inherit; + color: #212121; +} + +ul.parent li a:hover { + color: #01579b; +} + +ul.parent>li { + color: #212121; + list-style: none; + cursor: pointer; +} + +ul.parent>li span { + display: block; + padding: 10px 10px 10px 20px; +} + +ul.parent>li.selected span { + background: #282828; + color: #fff; +} + +ul.parent>li, +ul.parent>li li { + /*padding-left: 25px;*/ +} + +ul.parent>li:before, +ul.parent>li li span:before { + position: absolute; + display: block; + content: ""; + background: url(../images/arrow_menu.png); + width: 13px; + height: 13px; + left: 0; + top: 15px; +} + +ul.parent>li li { + border-bottom: 0; +} + +ul.parent>li.selected:before { + background-position: 0px -16px; +} + +ul.parent>li li.selected:before, +ul.parent>li li.selected span:before { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} + +ul.parent>li ul { + display: none; + padding: 3px 0 3px 15px; +} + +ul.parent>li a { + display: block; + padding: 10px 10px 10px 20px; +} + +ul.parent>li a i { + display: block; + font-size: 12px; + line-height: 12px; + font-weight: normal; + color: #888; + font-style: normal; +} + +.container .container_text ul.parent>li a i { + color: #0c0c0c; +} + +ul.parent>li span>a { + padding: 0px; + margin-left: 10px; + box-sizing: border-box; +} + +#com ul.parent>li span>a el, +#com ul.parent>li li a el { + display: block; + font-size: 12px; + line-height: 12px; + font-weight: normal; + color: #888; +} + +ul.parent>li.selected span>a { + color: #fff; +} + +.button_wrapp { + margin: 20px auto; + text-align: center; + padding: 0 15%; +} + +button { + border: none; + padding: 0 50px; + display: inline-block; + height: 50px; + color: #fff; + background: rgb(124, 37, 41); + font-size: 20px; + font-family: RobotoRegular, Arial, sans-serif; + margin: 10px; + border-radius: 5px; +} + +button:hover { + background: rgb(157, 34, 53); +} + +.iconsBox { + width: 70px; + height: auto; + position: fixed; + right: 0px; + top: 90px; + z-index: 4; + -webkit-transition: all 0.5s; + transition: all 0.5s; +} + +.iconsBox.moved { + width: 440px; + height: 64px; + position: fixed; + display: flex; + background: #282828; + top: 129px; +} + +.iconsBox.moved .iconsBox_item { + background: #282828; +} + +.iconsBox_item { + position: relative; + width: 67px; + height: 64px; + background: url(../images/BG_rightIcon.png) no-repeat; + cursor: pointer; +} + +.iconsBox_item .R_icon { + display: block; + width: 33px; + height: 30px; + background: url(../images/rightIcons_sprite1.png) no-repeat; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + margin: auto; +} + +.iconsBox_item .R_icon.lists { + background-position: 0 4px; +} + +.iconsBox_item .R_icon.lists_img { + background-position: 0 -60px; +} + +.iconsBox_item .R_icon.lists_multi { + background: none; +} + +.iconsBox_item .R_icon.lists_multi svg { + max-width: 30px; + max-height: 30px; +} + +.iconsBox_item .R_icon.lists_tables { + background-position: 0 -26px; +} + +.iconsBox_item .R_icon.identif { + background-position: 0 -90px; +} + +.iconsBox_item .R_icon.cart { + background: url(../images/cart.png) no-repeat; + background-position: 0 0px; +} + +.iconsBox_item .R_icon.comment { + background: none; +} + +.iconsBox_item .R_icon.comment svg { + width: 91%; + height: auto; +} + +.iconsBox_item .R_icon.cart+span, +.R_icon.bookmark+span { + color: #fff; + background: #01579b; + border-radius: 10px; + padding: 4px 7px 5px; + font-size: 13px; + line-height: 13px; + font-family: RobotoRegular; + font-style: normal; + text-align: center; + position: absolute; + right: -9px; + top: -9px; + display: none; +} + +.iconsBox_item.active .R_icon.lists, +.iconsBox.moved .iconsBox_item:hover .R_icon.lists { + background-position: 0 -121px; +} + +.iconsBox_item.active .R_icon.lists_img, +.iconsBox.moved .iconsBox_item:hover .R_icon.lists_img { + background-position: 0 -185px; +} + +.iconsBox_item.active .R_icon.lists_tables, +.iconsBox.moved .iconsBox_item:hover .R_icon.lists_tables { + background-position: 0 -151px; +} + +.iconsBox_item.active .R_icon.identif, +.iconsBox.moved .iconsBox_item:hover .R_icon.identif { + background-position: 0 -215px; +} + +.iconsBox_item.active .R_icon.cart, +.iconsBox.moved .iconsBox_item:hover .R_icon.cart { + background-position: 0 -30px; +} + +.iconsBox.moved .R_icon.cart { + display: none; +} + +.iconsBox_item.active { + box-sizing: border-box; + border-top: 4px solid rgb(124, 37, 41); +} + +.iconsBox_item.hidemenu { + display: none; + position: absolute; + right: 0; +} + +.iconsBox_item.hidemenu .R_icon.hidemenu { + background: url(../images/arrow_list.png) center center no-repeat; + display: none; +} + +.iconsBox.moved .iconsBox_item.hidemenu, +.iconsBox.moved .iconsBox_item.hidemenu .R_icon.hidemenu { + display: block; +} + +.tree-el { + display: inline-block; + padding: 8px 0; + padding-left: 10px; +} + +.tree-el a { + display: block; +} + +.tree-el span { + font-size: 12px; + line-height: 15px; + display: block; +} + +.frame_msg { + width: 100%; + border: 70px solid #fff; + margin: 30px 0; + text-align: center; +} + +.frame_msg.caution { + -o-border-image: url(../images/frame_yell.png) 65 round round; + border-image: url(../images/frame_yell.png) 65 round round; +} + +.frame_msg.warning { + -o-border-image: url(../images/frame_red.png) 65 round round; + border-image: url(../images/frame_red.png) 65 round round; +} + +.frame_msg_title { + text-align: center; + font-size: 20px; + text-transform: uppercase; + position: relative; + top: -15px; +} + +.container_text table { + width: 100%; + border-spacing: 0px; + border-collapse: collapse; +} + +.container_text table th, +.container_text table td { + border: 1px solid #dddddd; + padding: 10px; +} + +.S1000Dtable { + margin-bottom: 10px; +} + +.container_text table th, +.S1000Dtable th tr, +.S1000Dtable thead tr, +.S1000Dformaltable thead tr, +.S1000Dformaltable th tr, +.S1000DIpdTable thead tr { + /*height: 40px;*/ + background: rgb(124, 37, 41); + color: #fff; + font: 20px 'RobotoLight'; +} + +.container_text table td { + height: 40px; + vertical-align: top; +} + +.container_text table tbody tr:nth-child(even) { + background: #ebebeb; +} + +.container_text table.levelledPara { + border-bottom: 2px solid #ececec; +} + +.container_text table.levelledPara table.levelledPara { + border-bottom: none; +} + +.S1000DLevelledPara, +.S1000DProceduralStep { + display: flex; + border: 1px solid #ddd; + flex-wrap: wrap; + width: 100%; +} + +.S1000DLevelledPara .S1000DLevelledPara { + border-left: none; + border-right: none; +} + +.S1000DlevelledItemNum { + width: 100px; + min-width: 100px; + max-width: 100px; + box-sizing: border-box; + padding: 14px 10px; + border-right: 1px solid #ddd; +} + +.S1000DlevelleditemC { + display: flex; + width: 100%; +} + +.S1000DlevelleditemC .S1000DSidehead1 { + margin-bottom: 14px; + display: block; +} + +.S1000DlevelleditemC .S1000DSidehead2 { + margin-bottom: 14px; + display: block; +} + +.S1000DlevelleditemC .S1000DSidehead3 { + margin-bottom: 14px; + display: block; +} + +.S1000DlevelleditemC .S1000DSidehead4 { + margin-bottom: 14px; + display: block; +} + +.S1000DlevelleditemC .S1000DSidehead5 { + margin-bottom: 14px; + display: block; +} + +.S1000DlevelledItemContent { + padding: 14px 10px; + width: 100%; + width: calc(100% - 100px); + max-width: 100%; + max-width: calc(100% - 100px); +} + +.S1000DlevelledItemContent .S1000DcrewDrillStep, +.S1000DlevelledItemContent .S1000DcrewDrillConditionText { + margin: 0 -10px; + border-top: 1px solid #ddd; +} + +.S1000DsubCrewDrill { + border-top: 1px solid #ddd; + margin: 0 -10px; + padding: 0 10px; +} + +.S1000DlevelledItemContent .S1000DcrewDrillConditionText { + padding: 10px 14px; +} + +.S1000DlevelleditemC .S1000Dpara { + margin-bottom: 7px; +} + +.S1000DdisplayText { + width: 100%; + padding: 10px; + border-bottom: 1px solid #ccc; + font-weight: 700; +} + +.container_text table.levelledPara tbody tr:nth-child(even) { + background: transparent; +} + +.container_text table tbody tr.S1000Dlistitem:nth-child(even), +.container_text table tbody thead tr:nth-child(even), +.S1000Dtable thead tr:nth-child(even) { + background: transparent; + color: #333; +} + +.container_text table.S1000DrandomList, +.container_text table.S1000DrandomList tr, +.container_text table.S1000DrandomList td { + border: none; +} + +.container_text table.levelledPara>tbody>tr>td { + border: none; +} + +.container .container_text .link-c li { + padding-left: 0; +} + +.container .container_text .link-c li:before { + display: none; +} + +.container .container_text .link-c .pmTreeItem span { + padding-bottom: 5px; +} + +.container .container_text .link-c .pmTreeItem span:before { + display: none; +} + +.container .container_text .link-c .pmTreeItem { + padding-bottom: 10px; +} + +.container .container_text .link-c .pmTreeItem i span { + padding: 0; + padding-left: 20px; +} + +.container .container_text .link-c .pmTreeItem i span a { + font-size: 0.85em; + color: #666; + font-style: normal; +} + +.toTop { + position: fixed; + bottom: 30px; + right: 0; + width: 67px; + height: 64px; + background: url(../images/BG_rightIcon.png) no-repeat; + cursor: pointer; + display: block; +} + +.toTop i { + display: block; + width: 33px; + height: 30px; + border: none; + background: url(../images/toTop.svg) no-repeat; + position: absolute; + left: -2px; + right: 0; + top: -7px; + bottom: 0; + margin: auto; +} +.toPrint{ + position: fixed; + bottom: 90px; + right: 0; + width: 67px; + height: 64px; + background: url(../images/BG_rightIcon.png) no-repeat; + cursor: pointer; + display: block; + } + .toPrint i{ + display: block; + width: 33px; + height: 30px; + border: none; + background: url(../images/toPrint.svg) no-repeat; + position: absolute; + left: -6px; + right: 0; + top: -7px; + bottom: 0; + margin: auto; + } + +.addContent { + position: fixed; + bottom: 90px; + right: 0; + width: 67px; + height: 64px; + background: url(../images/BG_rightIcon.png) no-repeat; + cursor: pointer; + display: block; +} + +.addContent i { + display: block; + width: 33px; + height: 30px; + border: none; + position: absolute; + left: -2px; + right: 0; + top: -7px; + bottom: 0; + margin: auto; +} + +.addContent i svg { + height: 100%; + width: auto; +} + +.addContent .svgMinus { + display: none; +} + +.b4webJsonContainer { + position: relative; +} + +.popupWindow { + display: none; + position: fixed; + height: 100%; + width: 100%; + background: rgba(0, 0, 0, 0.2); + overflow: auto; + /*display: flex;*/ + /*justify-content: center; + align-items: center;*/ + top: 0; + left: 0; + z-index: 1111; +} + +.popupWindow .form-line { + display: flex; + justify-content: flex-start; + align-items: center; +} + +.popupWindow .popupSettTable td { + padding: 0 10px 0 0; +} + +.popupWindow .popupSettTable thead td { + padding: 5px; +} + +.popupCont { + max-width: 1000px; + min-width: 800px; + background: #fff; + padding: 20px; + position: relative; + display: flexbox; +} + +.popupContent { + margin: auto; +} + +.popupCont .popupContent h1 { + margin-top: 0; +} + +.popupCont .popupContent .createBookmarkForm { + padding: 10px; +} + +.popupCont .popupContent .createBookmarkForm input { + width: 100%; + height: 40px; + box-sizing: border-box; + padding: 10px; +} + +.closePopup { + position: absolute; + right: 5px; + top: 5px; + display: block; + width: 40px; + height: 40px; + background: url(../images/cross.png) no-repeat; + background-size: contain; + cursor: pointer; +} + +.popupWindow.popupContentPart .popupCont { + max-width: 95%; + max-height: 95%; + height: 95%; + width: 95%; + margin-left: 2.5%; + margin-top: 1.25%; + padding-top: 50px; +} + +.popupWindow.popupContentPart .popupCont object, +.popupWindow.popupContentPart .popupCont embed { + min-height: calc(100vh - 250px); +} + +.cartContent, +.bookmarkContent { + width: 100%; + border-spacing: 0px; + border-collapse: collapse; +} + +.cartContent td, +.bookmarkContent td { + padding: 3px 5px; + border: 1px solid #dddddd; +} + +.cartButtons { + margin-top: 20px; +} + +.bookmarkButton { + display: inline-block; + width: 32px; + height: 32px; + /*background: #ccc;*/ +} + +.bookmarkButton svg { + width: 24px; + height: auto; + margin-top: 5px; +} + +.changesRequest, +.changesRequestForm { + padding: 10px; +} + +.changesRequestForm textarea { + width: 100%; + resize: vertical; +} + +.S1000DSidehead1 { + font-size: 140%; + font-weight: bold; +} + +.S1000DSidehead2 { + font-size: 130%; + font-weight: bold; +} + +.S1000DSidehead3 { + font-size: 120%; + font-weight: bold; +} + +.S1000DSidehead4 { + font-size: 110%; + font-weight: bold; +} + +.S1000DSidehead5 { + font-weight: bold; +} + +.S1000Dobjecttitle { + text-align: center; + margin-top: 15px; + margin-bottom: 10px; +} + + +/*.S1000DcrewDrillstep{ + фикс разм +}*/ + +.S1000DlevelledItemContent .S1000DcrewDrillStep { + margin: 0 -10px; +} + +.S1000DchallengeAndResponse { + display: flex; + flex-wrap: wrap; + width: 100%; + max-width: 100%; +} + +.S1000DsubCrewDrill { + box-sizing: border-box; +} + +.S1000DchallengeAndResponse .S1000Dchallenge { + width: 300px; +} + +.S1000DchallengeAndResponse .S1000DTDdotted { + width: 70px; +} + +.S1000DchallengeAndResponse .S1000Dresponses { + width: auto; + width: calc(100% - 370px); +} + +.S1000DchallengeAndResponse table td { + border: none; + padding: 0; +} + +.S1000DchallengeAndResponse { + padding: 10px 0; +} + +.S1000Dformaltable4 thead tr td { + width: 45%; +} + +.S1000Dformaltable4 thead tr td+td { + width: 20%; +} + +.S1000Dformaltable4 thead tr td+td+td { + width: 15%; +} + +.S1000Dformaltable4 thead tr td+td+td+td { + width: auto; +} + +.container_text table .S1000DCSNitem>td { + padding: 0; + border: none; +} + + +/*.S1000DIpdTable td{ + word-break: break-all; +}*/ + +audio { + width: 100%; +} + +.bookmarkLink { + padding-right: 30px; +} + +.bookmarkLinkClose { + width: 20px; + height: 100%; + display: block; + top: 0; + right: 10px; + position: absolute; + background: url(../images/cross.png) center center no-repeat; + background-size: contain; + cursor: pointer; +} + + +/* Large Devices, Wide Screens */ + + +/* Medium Devices, Desktops */ + +@media only screen and (max-width: 992px) { + /*.container{width: 768px;}*/ + .logotype a { + background-size: contain; + } + .container .container_text { + padding-right: 60px; + padding-left: 0; + } + .descript_img { + font-size: 13px; + } +} + +.uppercase { + text-transform: uppercase; +} + +.S1000Dfigure { + margin: 20px 0; +} + +.openImage, +.S1000Dfiguregraphic { + display: block; + overflow: hidden; + /*border: 1px solid #ececec;*/ +} + +.addToCartLink, +.addToCartInput { + display: none; +} + +.addToCartInput { + width: 100%; +} + +.S1000DBookmark { + display: none; +} + +.S1000DBookmark.jsBookmark { + display: none; + box-sizing: border-box; + width: 32px; + height: 32px; + padding-left: 32px; + overflow: hidden; + background: url(../images/stars.png) right center no-repeat; +} + +.S1000DBookmark.jsBookmark:hover { + background: url(../images/stars.png) left center no-repeat; +} + +.custom_upload_wrap { + height: 150px; + border: 1px dashed rgba(0, 0, 0, 0.2); + background: white; + border-radius: 5px; + background-color: transparent; + position: relative; + display: block; + text-align: center; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + transition: all 0.3s ease; + margin: 20px 0; +} + +.custom_upload { + height: 100%; + overflow: hidden; + cursor: pointer; + position: relative; +} + +.custom_upload_button { + width: 100%; + height: 100%; + white-space: nowrap; + overflow: hidden; + position: relative; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + transition: all 0.3s ease; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding-top: 15px; +} + +.custom_upload input { + top: 0; + margin: 0; + padding: 0; + width: 100%; + height: 100%; + cursor: pointer; + opacity: 0; + position: absolute; +} + +.custom_upload_button.file_selected, +.custom_upload_wrap:hover { + background: rgba(206, 241, 199, 0.5); +} + +.custom_upload_delete { + top: 0; + bottom: 0; + right: 12px; + margin: auto; + width: 13px; + height: 13px; + display: block; + cursor: pointer; + position: absolute; + background: url(images/close.png) no-repeat; +} + +.copyLink { + display: none; +} + +.jsLinkCommentaryURN { + text-transform: uppercase; +} + +.jsLinkCommentaryURN el { + text-transform: none; +} + +.jsLinkCommentaryRightURN { + display: inline-grid; + max-width: 80%; +} + +.jsLinkCommentaryRightURN el { + font-size: 0.8em; + color: #ccc; + display: block; + box-sizing: border-box; +} + +.commentSub { + box-sizing: border-box; + padding: 0 20px 20px; + margin-top: 20px; + border: 1px solid #ccc; +} + +.search_form { + display: flex; + box-sizing: border-box; + padding: 0 10px; + justify-content: flex-start; +} + +.search_form .form_row { + width: 100%; +} + +.search_form input, +.tabs__content.active .search_form button { + width: 100%; + display: inline-block; +} + +.search_list { + display: none; +} + +div[id^="tbl"] { + overflow: hidden; + width: 100%; +} + +div[changeclass="S1000Ddelete_change"] { + background: rgba(255, 0, 0, 0.2); +} + +div[changeclass="S1000Dmodify_change"] { + background: rgba(255, 255, 0, 0.2); +} + +div[changeclass="S1000Dadd_change"] { + background: rgba(0, 0, 255, 0.2); +} + +object, +embed { + overflow: auto; + width: 100%; + min-height: 650px; +} + +.S1000DHotspot { + display: none; +} + +.inlineDownloadIconC { + display: flex; + justify-content: center; + align-items: center; +} + +.inlineDownloadIcon { + width: 100px; + height: 100px; + background: url(../images/download.svg) center center no-repeat; + background-size: contain; +} + +.cp-color-picker { + z-index: 9999 !important; +} + +.multimediaPanel { + border-top: 1px solid #ececec; + border-bottom: 1px solid #ececec; + display: flex; + justify-content: flex-end; + -ms-align-items: center; + align-items: center; + padding: 5px; +} + +.multimediaPanel .multimediaObjectFullscreen { + font-size: 11px; + padding: 0 10px; + height: 26px; + margin: 5px 0px; +} + +.htmlPopup .multimediaPanel { + width: 100%; + background: #282828; + border: none; +} + +.htmlPopup .S1000Dobjecttitle { + width: 100%; + background: rgb(124, 37, 41); + color: #fff; + font-weight: 700; + font-size: 16px; + padding: 15px; + order: 1; + margin: 0; + display: block; +} + +.multimediaObjectCloseFullscreen { + background: #282828; + color: #c2c2c2; + border: 2px solid #c2c2c2; + font-weight: 600; + font-size: 11px; + padding: 0 10px; + height: 26px; + margin: 5px 0px; +} + + +/*.search_form input{ + display: inline-block; +}*/ + + +/* Small Devices, Tablets */ + + +/* Extra Small Devices, Phones */ + + +/* Custom, iPhone Retina */ + +.divTable { + max-width: 850px; + overflow-x: auto; +} + +img.S1000Dsymbol { + display: inline !important; + max-width: 100% !important; + margin: 0px !important; +} + +.S1000Dnote { + font-weight: bold; +} + +.S1000Dnote p { + font-weight: normal; + padding: 0.5% 2%; + +} +/* Центрирование тега center для кнопки*/ +center { + width: auto; + margin: 0 auto; +} \ No newline at end of file diff --git a/s1000d/Converter_Source/app/dinamika/viewimg.css b/s1000d/Converter_Source/app/dinamika/viewimg.css new file mode 100644 index 0000000..4fe36a8 --- /dev/null +++ b/s1000d/Converter_Source/app/dinamika/viewimg.css @@ -0,0 +1,13 @@ +#iv-container{position:fixed;width:100%;background:rgba(10,10,10,0.5);height:100%;top:0;left:0;display:none;z-index:1000} +.iv-container{overflow:hidden} +.iv-close{width:32px;height:32px;position:absolute;border: 1px solid white; right:20px;top:20px;background: rgba(124, 37, 41, 0.5); cursor:pointer;text-align:center;overflow:hidden;text-shadow:0 0 3px #6d6d6d;-webkit-transition:all ease 200ms;-moz-transition:all ease 200ms;-o-transition:all ease 200ms;transition:all ease 200ms} +.iv-close:after,.iv-close:before{content:"";height:2px;width:26px;background:white;position:absolute;left:3px;top:17px;margin-top:-2px;border-radius:2px} +.iv-close:before{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)} +.iv-close:after{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)} +.iv-close:hover{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg); background: rgb(124, 37, 41)} +.iv-image-view{position:absolute;height:100%;width:100%} +.iv-image-wrap{display:inline-block} +.iv-image-wrap:active{cursor:move} +.iv-large-image{cursor:move;max-width:100%;max-height:100%;position:absolute;background-color:#FFFFFF;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)} +.iv-loader{top:50%;left:50%;border-radius:50%;width:32px;height:32px;z-index:100;margin-top:-16px;margin-left:-16px;font-size:5px;position:absolute;text-indent:-9999em;border-top:1em solid rgba(255, 255, 255, .2);border-right:1em solid rgba(255, 255, 255, .2);border-bottom:1em solid rgba(255, 255, 255, .2);border-left:1em solid #fff;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:load8 1.1s infinite linear;animation:load8 1.1s infinite linear} +.iv-loader:after{width:10em;height:10em;border-radius:50%}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}} \ No newline at end of file diff --git a/s1000d/Converter_Source/app/dinamika/viewimg.js b/s1000d/Converter_Source/app/dinamika/viewimg.js new file mode 100644 index 0000000..499f899 --- /dev/null +++ b/s1000d/Converter_Source/app/dinamika/viewimg.js @@ -0,0 +1,269 @@ +!function(e,t) + {"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.ViewBigimg=t()} +(this, +function() +{ + "use strict"; + function l(){ + var e=!1;try{addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){e=!0}}))}catch(e){}return e + } + function o(e,t) + { + this.container=e; + var i=function(){}; + this.onStart=t.onStart||i, + this.onMove=t.onMove||i, + this.onEnd=t.onEnd||i, + //this.onKeyDown=t.onKeyDown||i, + this.onMouseWheel=t.onMouseWheel||i, + this.onClick=t.onClick||i, + this.onPinch=t.onPinch||i + } + + o.prototype.init=function() + { + var r=this; + return this.startHandle=function(e) + { + e.preventDefault(); + var t=e.type, + i="touchstart"===t?"touchmove":"mousemove", + n="touchstart"===t?"touchend":"mouseup", + o=e.clientX||e.touches[0].clientX, + a=e.clientY||e.touches[0].clientY; + function s(e) + { + e.preventDefault(); + var t=e.clientX||e.touches[0].clientX,i=e.clientY||e.touches[0].clientY; + r.onMove(e,{dx:t-o,dy:i-a,mx:t,my:i}) + } + !1!==r.onStart(e,{x:o,y:a})&&("touchstart"===t&&e.touches[1]&&r.onPinch(e), + document.addEventListener(i,s,!("touchmove"!==i||!l())&&{capture:!1,passive:!1}), + document.addEventListener(n,function e() + { + document.removeEventListener(i,s), + document.removeEventListener(n,e), + r.onEnd() + })) + }, + this.container.addEventListener("touchstart",this.startHandle,!1), + this.container.addEventListener("mousedown",this.startHandle,!1), + //this.container.addEventListener("onkeydown",this.onKeyDown,!1), + //this.container.onkeydown = function(e){alert('!!close')}, + //document.getElementById('iv-container').contentEditable=true, + //document.getElementById('iv-container').focus(), + this.container.addEventListener("mousewheel",this.onMouseWheel,!1), + this.container.addEventListener("click",this.onClick,!1), + this + }, + o.prototype.destroy=function() + { + this.container.removeEventListener("touchstart",this.startHandle), + this.container.removeEventListener("mousedown",this.startHandle), + //this.container.removeEventListener("onkeydown",this.onKeyDown), + this.container.removeEventListener("mousewheel",this.onMouseWheel), + this.container.removeEventListener("click",this.onClick) + }; + + var r=function(e) + {return e.preventDefault()}; + function n(e,t) + { + this.container=e, + this.options=Object.assign({},n.defaults,t), + this.zoomValue=100, + e.classList.add("iv-container"), + this.imageWrap=e.querySelector(".iv-image-wrap"), + this.closeBtn=e.querySelector(".iv-close") + } + + return function() + { + var o=0; + if(!window.requestAnimationFrame){ + for(var e=["ms","moz","webkit","o"],t=0;t +#include +#include + +using namespace std; + +// -SCORM -p "FULL, 2p" E:\C++\Test\01\auk-01_mi-38.lyx E:\C++\Test\01 +// -SCORM -p "FULL" E:\C++\Test\AUK-01\01_mi-38.lyx E:\C++\Test\AUK-01 +// -SCORM E:\C++\Test\AUK02_Mi38\auk-02_mi-38.lyx E:\C++\Test\AUK02_Mi38 + +console::console() +{ + +} + +int console::exec(int argc, char *argv[]) +{ + //Q_UNUSED(argc) + if(QString(argv[1]) == "-?" || QString(argv[1]) == "-h" || QString(argv[1]) == "/h" || argc < 3) + { printHelp(); return 0; } + + exportSCORM = exportS1000D = exportSingleSCORM = false; + for(int i = 1; i < argc-2; i++) + { + if(QString(argv[i]).toUpper() == "-SCORM") exportSCORM = true; + if(QString(argv[i]).toUpper() == "-SINGLESCORM") exportSingleSCORM = true; + if(QString(argv[i]).toUpper() == "-S1000D") exportS1000D = true; + if(QString(argv[i]).toLower() == "-p" && (i+1 HTML (%d sec) .. ", SM.timeConvert); std::cout << std::flush; + + QElapsedTimer timer; timer.start(); + if(!lyx.Import(&SM, lyxFile, NULL)) { + printf("ОШИБКА импорта LyX.\n"); + return 1; + } + + SM.LoadPackagesXML(); + + if(!isCodingFilled()) { + // printf("Ошибка: кодирование S1000D не заполнено.\n"); + // return 1; + fillDefaultCoding(); + } + + html.Generate(&SM, false, NULL); + SM.LoadPackagesXML(); + SM.timeConvert = (int)timer.elapsed()/1000; + SM.SaveProject(); + printf("Ok\n"); + + if(exportSCORM) { + printf(" SCORM (%d sec):\n", SM.timeSCORM*packageNames.count()); + if(packageNames.count() == 0) + printf("Пакеты не заданы. Пропущено.\n"); + else + foreach(S1000D_Manager::PackageStruct pack, SM.packages) + if(packageNames.contains(pack.cfgName)) + { + for(int i=0;i "+pack.exportFileName+"_SCORM"+".zip .. " ; + printf("%s", s.toLocal8Bit().toStdString().c_str()); std::cout << std::flush; + QApplication::processEvents(); + bool res = SM.exportSCORM(dstPath, pack.exportFileName, pack.title, NULL); + if(res) + printf("Ok\n"); + else + printf("ОШИБКА экспорта\n"); + } + } + if(exportSingleSCORM) { + printf(" Single SCORM (%d sec):\n", SM.timeSingleSCORM*packageNames.count()); + if(packageNames.count() == 0) + printf("Пакеты не заданы. Пропущено.\n"); + else + { + for(int i=0;i "+pack.exportFileName+".zip .. "; + printf("%s", s.toLocal8Bit().toStdString().c_str()); std::cout << std::flush; + QApplication::processEvents(); + bool res = SM.exportS1000D(dstPath, pack.exportFileName, pack.title, NULL); + if(res) + printf("Ok\n"); + else + printf("ОШИБКА экспорта\n"); + } + } + + SM.SaveProject(); //SM.SavePackagesXML(); + return 0; +} + +void console::printHelp() +{ + setlocale(LC_ALL,"Russian"); + + qDebug() << "Конвертер АУК с формата LyX в пакеты стандартов S1000D и SCORM\n"; + qDebug() << "Для запуска в оконном режиме запустите без параметров."; + qDebug() << "Формирование пакетов в консольном режиме выполняется со следующими параметрами:"; + qDebug() << "CONVERTER [-SCORM] [-S1000D] [-p \"package1, ...\"] lyxfile destpath\n"; + qDebug() << " -SCORM - тип формируемого пакета - SCORM;"; + qDebug() << " -SingleSCORM - тип формируемого пакета - единый пакет SCORM по всем категориям (пакетам);"; + qDebug() << " -S1000D - тип формируемого пакета - S1000D, без явного указания формируются оба типа; "; + qDebug() << " -p - сформировать пакеты с именами package1,... (список через запятую в \"кавычках\");"; + qDebug() << " без данной опции формируются все созданные в оконном режиме пакеты;"; + qDebug() << " lyxfile - путь и имя файла LyX;"; + qDebug() << " dstpath - путь для размещения сформировнных пакетов."; +} + + +QString console::delYYY(QString st) { + return st.replace("X", "").replace("Y", "").replace("N", ""); +} +bool console::isCodingFilled() { + tmpStrList.clear(); tmpIntList.clear(); + if(SM.items.count() == 0) return false; + for(int i=0;imoduleType == mtPM) { + QString pmTitle, modelIdentCode, pmIssuer, pmNumber, pmVolume; + title = pmTitle = SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); + modelIdentCode = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode"); + pmIssuer = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer"); + pmNumber = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmNumber"); + pmVolume = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmVolume"); + if(pmTitle.isEmpty() || delYYY(pmIssuer).isEmpty() || delYYY(pmNumber).isEmpty() || delYYY(pmVolume).isEmpty()) { + return false; + } + fCode = SM.pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + } + + if(SM.item->moduleType == mtDM) { + QString modelIdentCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode"); + QString systemDiffCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemDiffCode"); + QString systemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemCode"); + QString subSystemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSystemCode"); + QString subSubSystemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSubSystemCode"); + QString assyCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "assyCode"); + QString disassyCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCode"); + QString disassyCodeVariant = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCodeVariant"); + QString infoCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCode"); + QString infoCodeVariant = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCodeVariant"); + QString itemLocationCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "itemLocationCode"); + QString learnCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnCode"); + QString learnEventCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnEventCode"); + QString techName = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); + //QString infoName = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName"); + if(delYYY(modelIdentCode).isEmpty() || delYYY(systemDiffCode).isEmpty() || delYYY(systemCode).isEmpty() || delYYY(subSystemCode).isEmpty() || delYYY(subSubSystemCode).isEmpty() || + delYYY(assyCode).isEmpty() || delYYY(disassyCode).isEmpty() || delYYY(disassyCodeVariant).isEmpty() || delYYY(infoCode).isEmpty() || delYYY(infoCodeVariant).isEmpty() || + delYYY(itemLocationCode).isEmpty() || delYYY(learnCode).isEmpty() || delYYY(learnEventCode).isEmpty() || delYYY(techName).isEmpty() ) { + return false; + } + title = techName; + fCode = SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + } + + int tmpInd = tmpStrList.indexOf(fCode); + if(tmpInd != -1) { + SM.setCurItem(tmpIntList[tmpInd]); + QString title2; + if(SM.item->moduleType == mtDM) + title2 = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); + else + title2 = SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); + return false; + } + tmpStrList.append(fCode); tmpIntList.append(ind); + + for(int i=0;imoduleType == mtPM) { + SM.setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode", QString::number(pmCnt++)); + SM.setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer", "ORIG"); + SM.setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmNumber", "GTC00"); + SM.setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmVolume", "00"); + SM.item->fileCode = SM.pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + } + + if (SM.item->moduleType == mtDM) { + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode", "DinamikaEDoc"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemDiffCode", "A"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemCode", "00"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSystemCode", "0"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSubSystemCode", QString::number(dmCnt++)); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "assyCode", "00"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCode", "00"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCodeVariant", "A"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCode", "010"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCodeVariant", "A"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "itemLocationCode", "A"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnCode", "T40"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnEventCode", "C"); + SM.item->fileCode = SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + } + + for (int i = 0; i < SM.items[ind].child.count(); i++) + fillDefaultCodingRecurs(SM.items[ind].child[i]); +} diff --git a/s1000d/Converter_Source/console.h b/s1000d/Converter_Source/console.h new file mode 100644 index 0000000..e87bef2 --- /dev/null +++ b/s1000d/Converter_Source/console.h @@ -0,0 +1,39 @@ +#ifndef CONSOLE_H +#define CONSOLE_H + +#include +#include "s1000d_manager.h" +#include "editormainwindow.h" +#include "ru_const.h" +#include "lyx.h" +#include "html.h" +#include + +class console +{ + //Q_OBJECT +public: + console(); + int exec(int argc, char *argv[]); + void printHelp(); + + QString lyxFile, dstPath; + QList packageNames; + bool exportSCORM, exportS1000D, exportSingleSCORM; + QString delYYY(QString st); + bool isCodingFilled(); + bool isCodingFilledRecurs(int ind); + void fillDefaultCoding(); + void fillDefaultCodingRecurs(int ind); + + S1000D_Manager SM; + LyX lyx; + HTML html; + RU_Const ru_const; + QStringList tmpStrList; + QList tmpIntList; + int dmCnt; + int pmCnt; +}; + +#endif // CONSOLE_H diff --git a/s1000d/Converter_Source/desktop.ini b/s1000d/Converter_Source/desktop.ini new file mode 100644 index 0000000..d9ad270 --- /dev/null +++ b/s1000d/Converter_Source/desktop.ini @@ -0,0 +1,6 @@ +[.ShellClassInfo] +IconResource=C:\Windows\System32\SHELL32.dll,84 +[ViewState] +Mode= +Vid= +FolderType=Generic diff --git a/s1000d/Converter_Source/editormainwindow.cpp b/s1000d/Converter_Source/editormainwindow.cpp new file mode 100644 index 0000000..130ef5e --- /dev/null +++ b/s1000d/Converter_Source/editormainwindow.cpp @@ -0,0 +1,2195 @@ +#include "editormainwindow.h" +#include "ui_editormainwindow.h" +#include "s1000d_manager.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include "private/qzipwriter_p.h" +#include +#include + +// TODO PROCED.xml + +EditorMainWindow::EditorMainWindow(QWidget *parent) + : QMainWindow(parent) + , ui(new Ui::EditorMainWindow) +{ + ui->setupUi(this); + this->hide(); + + QList sizes; + sizes << 300 << 700; ui->splitter->setSizes(sizes); + ui->toolBar->setFixedWidth(ui->treeWidget->geometry().x() + ui->treeWidget->geometry().width() + 10); + + SM.item = nullptr; + isProjectOpened = false; isProjectModifyed = false; + ui->actionSwitchToCodingPage->setChecked(true); ui->actionSwitchToDataPage->setChecked(false); + ui->actionSwitchToCodingPage->setEnabled(true); ui->actionSwitchToDataPage->setEnabled(true); + ui->stackedWidget->setCurrentIndex(0); + setIsModifyed(false); + + ui->toolBar->setFixedWidth(310); + ui->stackedWidget->setTabletTracking(false); + //ui->dataPageEdit->setStyleSheet("background-color: white; border: none;"); + + config.lastOpenedFile = ""; + QFile cfgFile(qApp->applicationDirPath()+"/config.txt");//QDir::currentPath() + if (cfgFile.open(QFile::ReadOnly | QFile::Text)) { + char buf[256]; + cfgFile.readLine(buf, 255); + QStringList cfg = QString(buf).split("="); + if(cfg[0] == "lastOpenedFile") + config.lastOpenedFile = cfg[1]; + } + cfgFile.close(); + + QDir dirScorm = QDir(QCoreApplication::applicationDirPath()+"/Scorm"); + if (!dirScorm.exists()) { + QMessageBox::critical(this,"Ошибка","Папка Scorm не найдена.",QMessageBox::Ok); + QTimer::singleShot(50, this, SLOT(on_actionExit_triggered())); + return; + } + + // создание диалогового окна лога +// logDialogList = new QListWidget(this); +// logDialogList->setFixedHeight(800); logDialogList->setFixedWidth(1000); +// logDialogList->setObjectName("logDialogList"); +// QFont logFont("Courier", 8); logDialogList->setFont(QFont(logFont)); +// QPushButton* logDialogCloseButton = new QPushButton(tr("Закрыть"), this); +// logDialogCloseButton->setDefault(true); +// logDialog = new QDialog(this); +// QVBoxLayout *logDialogLayout = new QVBoxLayout(logDialog); +// logDialogLayout->setMargin(5); logDialogLayout->setSpacing(6); logDialog->setWindowTitle(QString("Log")); +// logDialogLayout->addWidget(logDialogList); logDialogLayout->addWidget(logDialogCloseButton); +// connect(logDialogCloseButton, SIGNAL(clicked()), logDialog, SLOT(close())); +// logDialog->setLayout(logDialogLayout); + + ru_const.Init_RU_Const(); lyx.ru_const = &ru_const; + DBG = true; allowCodePageToSetItems = true; + + ui->pmc_lb_title2->setText(ui->pmc_lb_title2->text() + " " + ru_const.companyName); + ui->pmc_btn_modelIdentCode->setText(ru_const.modelIdentCode); ui->pmc_btn_pmIssuer->setText(ru_const.pmIssuer); + ui->stackedWidget->setCurrentIndex(0); + connect(ui->pmc_t_title, SIGNAL(textChanged()), this, SLOT(codePagePM_TitleChanged())); + connect(ui->pmc_le_modelIdentCode, SIGNAL(textChanged(QString)), this, SLOT(codePagePM_EditChanged(QString))); + connect(ui->pmc_le_pmIssuer, SIGNAL(textChanged(QString)), this, SLOT(codePagePM_EditChanged(QString))); + connect(ui->pmc_le_pmNumABC, SIGNAL(textChanged(QString)), this, SLOT(codePagePM_EditChanged(QString))); + connect(ui->pmc_le_pmNum, SIGNAL(textChanged(QString)), this, SLOT(codePagePM_EditChanged(QString))); + connect(ui->pmc_le_pmVolume, SIGNAL(textChanged(QString)), this, SLOT(codePagePM_EditChanged(QString))); + connect(ui->pmc_btn_modelIdentCode, SIGNAL(pressed()), this, SLOT(pmc_btn_modelIdentCodePressed())); + connect(ui->pmc_btn_pmIssuer, SIGNAL(pressed()), this, SLOT(pmc_btn_pmIssuerPressed())); + connect(ui->pmc_cb_pmNumABC, SIGNAL(currentIndexChanged(int)), this, SLOT(pmc_cb_pmNumABC_Changed(int))); + connect(ui->pmc_cb_pmNum, SIGNAL(currentIndexChanged(int)), this, SLOT(pmc_cb_pmNum_Changed(int))); + connect(ui->pmc_cb_pmVolume, SIGNAL(currentIndexChanged(int)), this, SLOT(pmc_cb_pmVolume_Changed(int))); + + ui->treeWidget->viewport()->installEventFilter(this); + + allowDMCodePageCallOnChangeComboBox = false; + ui->dmc_lb_label2->setText(ui->dmc_lb_label2->text() + " " + ru_const.companyName); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->setText("Да"); ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->setText("Нет"); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->setCheckable(true); ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->setChecked(false); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->setCheckable(true); ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->setChecked(true); + for(int i=0;idmc_cb_InfoSets->addItem(ru_const.dmCodeList[i].chapterName+" - "+ru_const.dmCodeList[i].paraName, i); + } + connect(ui->dmc_le_modelIdentCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_systemDiffCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_systemCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_subSystemCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_subSubSystemCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_assyCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_disassyCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_disassyCodeVariant, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_infoCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_infoCodeVariant, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_itemLocationCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_learnCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_le_learnEventCode, SIGNAL(textChanged(QString)), this, SLOT(codePageDM_EditChanged(QString))); + connect(ui->dmc_te_techName, SIGNAL(textChanged()), this, SLOT(codePageDM_TitleChanged())); + connect(ui->dmc_cb_InfoSets, SIGNAL(currentIndexChanged(int)), this, SLOT(on_dmc_cb_InfoSets_currentIndexChanged(int))); + allowDMCodePageCallOnChangeComboBox = true; + + ui->dml_btnBox_question->button(QDialogButtonBox::Yes)->setIcon(QIcon(":new/Icons/add.png")); + ui->dml_btnBox_question->button(QDialogButtonBox::Yes)->setIconSize(QSize(32,32)); + ui->dml_btnBox_question->button(QDialogButtonBox::Yes)->setText(""); + ui->dml_btnBox_question->button(QDialogButtonBox::Yes)->setFlat(true); + ui->dml_btnBox_question->button(QDialogButtonBox::No)->setIcon(QIcon(":new/Icons/delete.png")); + ui->dml_btnBox_question->button(QDialogButtonBox::No)->setIconSize(QSize(32,32)); + ui->dml_btnBox_question->button(QDialogButtonBox::No)->setText(""); + ui->dml_btnBox_question->button(QDialogButtonBox::No)->setFlat(true); + ui->dml_btnBox_question->button(QDialogButtonBox::Apply)->setIcon(QIcon(":new/Icons/up_arrow.png")); + ui->dml_btnBox_question->button(QDialogButtonBox::Apply)->setIconSize(QSize(32,32)); + ui->dml_btnBox_question->button(QDialogButtonBox::Apply)->setText(""); + ui->dml_btnBox_question->button(QDialogButtonBox::Apply)->setFlat(true); + ui->dml_btnBox_question->button(QDialogButtonBox::Reset)->setIcon(QIcon(":new/Icons/down_arrow.png")); + ui->dml_btnBox_question->button(QDialogButtonBox::Reset)->setIconSize(QSize(32,32)); + ui->dml_btnBox_question->button(QDialogButtonBox::Reset)->setText(""); + ui->dml_btnBox_question->button(QDialogButtonBox::Reset)->setFlat(true); + //connect(ui->dml_btnBox_question, SIGNAL(clicked(QAbstractButton*)), this, SLOT(on_dml_btnBox_question_clicked(QAbstractButton*))); + connect(ui->dml_lw_question, SIGNAL(currentRowChanged(int)), this, SLOT(on_dml_lw_question_currentRowChanged(int))); + ui->dml_btnBox_answer->button(QDialogButtonBox::Yes)->setIcon(QIcon(":new/Icons/add.png")); + ui->dml_btnBox_answer->button(QDialogButtonBox::Yes)->setIconSize(QSize(32,32)); + ui->dml_btnBox_answer->button(QDialogButtonBox::Yes)->setText(""); + ui->dml_btnBox_answer->button(QDialogButtonBox::Yes)->setFlat(true); + ui->dml_btnBox_answer->button(QDialogButtonBox::No)->setIcon(QIcon(":new/Icons/delete.png")); + ui->dml_btnBox_answer->button(QDialogButtonBox::No)->setIconSize(QSize(32,32)); + ui->dml_btnBox_answer->button(QDialogButtonBox::No)->setText(""); + ui->dml_btnBox_answer->button(QDialogButtonBox::No)->setFlat(true); + //connect(ui->dml_btnBox_answer, SIGNAL(clicked(QAbstractButton*)), this, SLOT(on_dml_btnBox_answer_clicked(QAbstractButton*))); + + splash = new SplashForm(this); + exportDlg = new ExportDialog(this, &SM); + connect(exportDlg, SIGNAL(actionS1000Dexport()), this, SLOT(exportS1000D())); + connect(exportDlg, SIGNAL(actionSCORMexport()), this, SLOT(exportSCORM())); + connect(exportDlg, SIGNAL(actionEDLexport()), this, SLOT(exportEDL())); + connect(exportDlg, SIGNAL(actionSingleSCORMexport()), this, SLOT(exportSingleSCORM())); + on_action_refreshFromLyX_triggered(); + this->setWindowTitle("Конвертер АУК "+version); + this->showMaximized(); +} + +EditorMainWindow::~EditorMainWindow() +{ + delete splash; + delete exportDlg; +// QFile cfgFile(qApp->applicationDirPath()+"/config.txt"); +// if (cfgFile.open(QFile::ReadWrite | QFile::Text)) { +// QString cfg = "lastOpenedFile="+config.lastOpenedFile; +// cfgFile.write(cfg.toStdString().c_str()); +// cfgFile.resize(cfgFile.pos()); +// } +// cfgFile.close(); + + //delete logDialog; + //delete ui; +} + +bool EditorMainWindow::event(QEvent *e) +{ + if (e->type() == QEvent::WindowActivate) { + ui->toolBar->setFixedWidth(ui->treeWidget->geometry().x() + ui->treeWidget->geometry().width() + 10); + } + return QWidget::event(e); +} + +bool EditorMainWindow::eventFilter(QObject* obj, QEvent* ev) +{ + if( obj == ui->treeWidget->viewport() && ev->type() == QEvent::Drop ) + QTimer::singleShot(50, this, SLOT(treeWidgetDrop())); + return false; +} + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ OPEN ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +void EditorMainWindow::on_actionOpenFolder_triggered() +{ + return; // старый подход +/* + if(isProjectModifyed) { + QMessageBox msgBox; + msgBox.setText("Сохранить изменения?"); + msgBox.setWindowTitle("Проект изменен"); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Save); + msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); + int ret = msgBox.exec(); + switch (ret) { + case QMessageBox::Yes: + on_actionSaveProject_triggered(); + if(isProjectModifyed) return; + case QMessageBox::No: + break; + case QMessageBox::Cancel: + return; + } + } + + SM.projectPath = QFileDialog::getExistingDirectory(this, tr("Выберите папку проекта АУК"), ""); //config.lastOpenedDir + if(SM.projectPath == "") + return; + isProjectOpened = true; + //config.lastOpenedDir = SM.projectPath; + this->setWindowTitle("Конвертер АУК - " + SM.projectPath); + + ui->actionAddDM->setEnabled(true); ui->actionAddPM->setEnabled(true); + isProjectOpened = true; + setIsModifyed(false); + + QString schemasPath; + //if (QSysInfo::productType() == "windows") + // schemasPath = QDir::currentPath()+QString("/Schemas/"); + //else + schemasPath = QDir::currentPath()+QString("/Schemas/"); + + SM.OpenProjectDirectory(SM.projectPath, schemasPath); + + fillTreeWidgetWithItems(); + + if(ui->treeWidget->topLevelItemCount() > 0) { + ui->actionDeleteItem->setEnabled(true); + ui->treeWidget->setCurrentItem(ui->treeWidget->topLevelItem(0)); + //ui->actionSwitchToCodingPage->setEnabled(true); ui->actionSwitchToDataPage->setEnabled(true); + on_actionSwitchToCodingPage_triggered(); + } + else { + ui->label_12->setText("Папка проекта выбрана,\n но не содержит публикаций и модулей. \nНачните работу с создания публикации."); + ui->stackedWidget->setCurrentIndex(0); + } + ui->actionSwitchToCodingPage->setEnabled(true); ui->actionSwitchToDataPage->setEnabled(true); + //config.lastOpenedDir = SM.projectPath; + + ui->actionLyXImport->setEnabled(true); + //logDialogList->clear(); + //logDialogList->addItems(SM.log); + //logDialog->show(); logDialog->exec(); + + //import, delete after debug + //on_actionSwitchToDataPage_triggered(); + //on_actionLyXImport_triggered(); + */ +} + +QTreeWidgetItem* EditorMainWindow::getTreeWidgetItemByItemIndexRecurs(int itemInd, QTreeWidgetItem *node) { + QTreeWidgetItem* result=nullptr; + if(node->data(0, Qt::UserRole).toInt() == itemInd) + return node; + for(int i=0;ichildCount();i++) { + result = getTreeWidgetItemByItemIndexRecurs(itemInd, node->child(i)); + if(result != nullptr) return result; + } + return nullptr; +} + +QTreeWidgetItem* EditorMainWindow::getTreeWidgetItemByItemIndex(int itemInd) { + QList fullList; + QTreeWidgetItem* result=nullptr; + for(int i=0;itreeWidget->topLevelItemCount();i++) { + result = getTreeWidgetItemByItemIndexRecurs(itemInd, ui->treeWidget->topLevelItem(i)); + if(result != nullptr) return result; + } + return nullptr; +} + +QList EditorMainWindow::makeTreeWidgetFromItems(QTreeWidgetItem *parent, QList list) { + QList res; + foreach (int treeNodeInd, list) { + QTreeWidgetItem *newItem; + + SM.setCurItem(treeNodeInd); + QString isLearnigDMStr = ""; + if(SM.item->moduleType == mtDM && SM.item->schemeType == stLEARNING) + isLearnigDMStr = ru_const.testQuestions+"\n"; + if(SM.items[treeNodeInd].moduleType == mtPM) + newItem = new QTreeWidgetItem(parent, QStringList( + //SM.item->fileCode+"\n"+//SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.shortPmTitle") + "\n" + SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle") )); + else + newItem = new QTreeWidgetItem(parent, QStringList( + //SM.item->fileCode+" "+ + isLearnigDMStr+ + SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName") + "\n" + + SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName") )); + if(SM.items[treeNodeInd].moduleType == mtPM) + if(SM.item->isQualifyed) + newItem->setIcon(0, iconFolder); + else + newItem->setIcon(0, iconFolder_ex); + else + if(SM.item->isQualifyed) + newItem->setIcon(0, iconDoc_head_blue); + else + newItem->setIcon(0, iconDoc_head_blue_ex); + newItem->setData(0, Qt::UserRole, treeNodeInd); + + if(SM.items[treeNodeInd].child.count() > 0) { + QList treeChildren = makeTreeWidgetFromItems(newItem, SM.items[treeNodeInd].child); + foreach(QTreeWidgetItem *newChild, treeChildren) + newItem->addChild(newChild); + } + res.append(newItem); + } + return res; +} + +void EditorMainWindow::fillTreeWidgetWithItems() { + //if(DBG) qDebug() << " *FillTreeWidgetWithItems*"; + //allowCodePageToSetItems = false; + + isClearing = true; + ui->treeWidget->clear(); + isClearing = false;; + QList treeItems; + QList fullList; + for(int i=0;i(nullptr), fullList); + + ui->treeWidget->insertTopLevelItems(0, treeItems); + ui->treeWidget->expandAll(); + //if(SM.items.count() > 0) + // ui->treeWidget->setCurrentItem(treeItems[0]); + + allowCodePageToSetItems = true; +} + +void EditorMainWindow::resizeEvent(QResizeEvent*) +{ + ui->toolBar->setFixedWidth(ui->treeWidget->geometry().x() + ui->treeWidget->geometry().width() + 10); +} + +void EditorMainWindow::on_actionAddPM_triggered() +{ + int newPMInd = -1; + if(ui->treeWidget->topLevelItemCount() > 0) { + if(ui->treeWidget->currentItem()->parent() == nullptr) { + for(int i=0;itreeWidget->topLevelItemCount();i++) + if(ui->treeWidget->currentItem() == ui->treeWidget->topLevelItem(i)) + newPMInd = SM.createPM(-1, i); + } + else { + for(int i=0;itreeWidget->currentItem()->parent()->childCount();i++) + if(ui->treeWidget->currentItem() == ui->treeWidget->currentItem()->parent()->child(i)) + newPMInd = SM.createPM(ui->treeWidget->currentItem()->parent()->data(0,Qt::UserRole).toInt(), i); + } + } + else + newPMInd = SM.createPM(-1, 0); + if(newPMInd == -1) if(DBG) qDebug() << " Error: AddPM: newPMInd == -1"; + + fillTreeWidgetWithItems(); + QTreeWidgetItem *node = getTreeWidgetItemByItemIndex(newPMInd); + //ui->treeWidget->clearSelection(); ui->treeWidget->setItemSelected(node, true); + ui->treeWidget->setCurrentItem(node); + ui->actionDeleteItem->setEnabled(true); + setIsModifyed(true); + updateTreeWidgetNames(); + Save(); +} + +void EditorMainWindow::on_actionAddDM_triggered() +{ + int newDMInd = -1; + if(ui->treeWidget->topLevelItemCount() > 0) { + if(ui->treeWidget->currentItem()->parent() == nullptr) { + for(int i=0;itreeWidget->topLevelItemCount();i++) + if(ui->treeWidget->currentItem() == ui->treeWidget->topLevelItem(i)) + newDMInd = SM.createDM(-1, i, "DESCRIPT"); + } + else { + for(int i=0;itreeWidget->currentItem()->parent()->childCount();i++) + if(ui->treeWidget->currentItem() == ui->treeWidget->currentItem()->parent()->child(i)) + newDMInd = SM.createDM(ui->treeWidget->currentItem()->parent()->data(0,Qt::UserRole).toInt(), i, "DESCRIPT"); + } + } + else + newDMInd = SM.createDM(-1, 0, "DESCRIPT"); + if(newDMInd == -1) if(DBG) qDebug() << " Error: AddDM: newDMInd == -1"; + + fillTreeWidgetWithItems(); + QTreeWidgetItem *node = getTreeWidgetItemByItemIndex(newDMInd); + ui->treeWidget->setCurrentItem(node); + ui->actionDeleteItem->setEnabled(true); + allowDMCodePageCallOnChangeComboBox = false; ui->dmc_cb_InfoSets->setCurrentIndex(-1); allowDMCodePageCallOnChangeComboBox = true; + setIsModifyed(true); + updateTreeWidgetNames(); + Save(); +} + +void EditorMainWindow::setIsModifyed(bool flag) +{ + isProjectModifyed = flag; + ui->actionSaveProject->setEnabled(flag); +} + +void EditorMainWindow::on_splitter_splitterMoved(int, int) +{ + ui->toolBar->setFixedWidth(ui->treeWidget->geometry().x() + ui->treeWidget->geometry().width() + 10); +} + +void EditorMainWindow::on_actionSwitchToCodingPage_triggered() +{ + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + ui->actionSwitchToCodingPage->setChecked(true); ui->actionSwitchToDataPage->setChecked(false); + if(SM.item != nullptr) { + if(SM.item->moduleType == mtPM) + ui->stackedWidget->setCurrentIndex(1); + if(SM.item->moduleType == mtDM) + ui->stackedWidget->setCurrentIndex(2); + } +} + +void EditorMainWindow::on_actionSwitchToDataPage_triggered() +{ + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + ui->actionSwitchToCodingPage->setChecked(false); ui->actionSwitchToDataPage->setChecked(true); + if(SM.item == nullptr) return; + if(SM.item->schemeType != stLEARNING) + ui->stackedWidget->setCurrentIndex(3); + else + ui->stackedWidget->setCurrentIndex(4); +} + +void EditorMainWindow::on_actionSaveProject_triggered() +{ +// SM.prepareSaveProject(); +// for(int i=0;itreeWidget->setCurrentItem(getTreeWidgetItemByItemIndex(i)); +// if(SM.items[i].moduleType == mtPM) +// ui->stackedWidget->setCurrentIndex(1); +// if(SM.items[i].moduleType == mtDM) +// ui->stackedWidget->setCurrentIndex(2); +// QApplication::beep(); +// QMessageBox msgBox; +// msgBox.setIcon(QMessageBox::Warning); msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); +// msgBox.setWindowTitle("Сохранение"); msgBox.setText("Для сохранения необходимо заполнить кодировку добавленных публикаций и модулей."); +// msgBox.exec(); +// return; +// } +// QStringList list; +// for(int i=0;itreeWidget->setCurrentItem(getTreeWidgetItemByItemIndex(i)); +// if(SM.items[i].moduleType == mtPM) +// ui->stackedWidget->setCurrentIndex(1); +// if(SM.items[i].moduleType == mtDM) +// ui->stackedWidget->setCurrentIndex(2); +// QApplication::beep(); +// QMessageBox msgBox; +// msgBox.setIcon(QMessageBox::Warning); msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); +// msgBox.setWindowTitle("Сохранение"); msgBox.setText("Сохранение отменено - обнаружено дублирование кодировки публикаций или модулей."); +// msgBox.exec(); +// return; +// } +// list.append(SM.items[i].fileCode); +// } + Save(); +} + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SELECTION CHANGED ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +void EditorMainWindow::on_treeWidget_itemSelectionChanged() +{ + if(isClearing) return; // при вызове .clear QT вызывет для каждого элемента itemSelectionChanged + + if(ui->treeWidget->currentItem() == nullptr || ui->treeWidget->topLevelItemCount() == 0 || SM.items.count() == 0) { + ui->stackedWidget->setCurrentIndex(0); + return; + } + if(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt() >= SM.items.count()) return; + + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + + // BRAKE-C3002-EPWG1-00_000_01 + // + // + if(SM.item->moduleType == mtPM) { + QString cur_title="", cur_modelIdentCode="", cur_pmIssuer="", cur_pmNumABC="", cur_pmNum="", cur_pmVolume="", cur_issueNumber="000", cur_inWork="00"; + + cur_title = SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); + cur_modelIdentCode = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode"); + cur_pmIssuer = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer"); + cur_pmNum = cur_pmNumABC = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmNumber"); + cur_pmNumABC.replace(QRegExp("\\d"), ""); + cur_pmNum.replace(QRegExp("\\D"), ""); + cur_pmVolume = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmVolume"); + cur_issueNumber = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.issueInfo", "issueNumber"); + cur_inWork = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.issueInfo", "inWork"); + + allowCodePageToSetItems = false; + + allowCodePageToCallOnChangeComboBox = false; + ui->pmc_cb_pmNumABC->clear(); ui->pmc_cb_pmNum->clear(); ui->pmc_cb_pmVolume->clear(); + for(int i=0; i < ru_const.pmCodeList.count();i++) { + int ind = ui->pmc_cb_pmNumABC->findText(ru_const.pmCodeList[i].pmNumABC+" - "+ru_const.pmCodeList[i].pmNumABCText); + if(ind == -1) + ui->pmc_cb_pmNumABC->addItem(ru_const.pmCodeList[i].pmNumABC+" - "+ru_const.pmCodeList[i].pmNumABCText, ru_const.pmCodeList[i].pmNumABC); + } + ui->pmc_cb_pmNumABC->setCurrentIndex(-1); // повнимательнее с этим + + allowCodePageToCallOnChangeComboBox = true; + + int ind = ui->pmc_cb_pmNumABC->findData(cur_pmNumABC); + if(ind != -1) + ui->pmc_cb_pmNumABC->setCurrentIndex(ind); + ind = ui->pmc_cb_pmNum->findData(cur_pmNum); + if(ind != -1) + ui->pmc_cb_pmNum->setCurrentIndex(ind); + ind = ui->pmc_cb_pmVolume->findData(cur_pmVolume); + if(ind != -1) + ui->pmc_cb_pmVolume->setCurrentIndex(ind); + + ui->pmc_t_title->document()->setPlainText(cur_title); + ui->pmc_le_modelIdentCode->setText(cur_modelIdentCode); + ui->pmc_le_pmIssuer->setText(cur_pmIssuer); + ui->pmc_le_pmNumABC->setText(cur_pmNumABC); + ui->pmc_le_pmNum->setText(cur_pmNum); + ui->pmc_le_pmVolume->setText(cur_pmVolume); + ui->pmc_btn_Qual->setChecked(SM.item->isQualifyed); + + + allowCodePageToSetItems = true; + + if(ui->actionSwitchToCodingPage->isChecked()) + ui->stackedWidget->setCurrentIndex(1); + if(ui->actionSwitchToDataPage->isChecked()) + ui->stackedWidget->setCurrentIndex(3); + +// QString htmlPMData; +// ui->dataPageEdit->document()->clear(); +// htmlPMData += "\n\n\n\n"; +// htmlPMData += "<font size=\"6\" color=\"blue\">Публикация</font>"; +// htmlPMData += "\n\n"; +// htmlPMData += ""+ui->pmc_t_title->toHtml()+"
    "; +// htmlPMData += "Состав:
    "; +// for(int i=0;ichild.count();i++) { +// SM.setCurItem(SM.item->child[i]); +// if(SM.item->moduleType == mtPM) { +// htmlPMData += " Публикация "; +// htmlPMData += SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); +// htmlPMData += "
    \n"; +// } + +// if(SM.item->moduleType == mtDM) { +// htmlPMData += " Модуль "; +// htmlPMData += SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); +// QString iName = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName"); +// if(iName != "") htmlPMData += " - "+iName; +// htmlPMData += "
    \n"; +// } +// SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); +// } +// if(SM.item->child.count() == 0) +// htmlPMData += " пусто
    \n"; +// htmlPMData += "

    \nДля изменения состава публикации и порядка следования элементов используйте перетаскивание мышью элементов дерева в левой части окна."; +// htmlPMData += "\n\n"; +// ui->dataPageEdit->document()->setHtml(htmlPMData); + + ui->dmc_LyXLog->clear(); + } + + if(SM.item->moduleType == mtDM) { + if(ui->actionSwitchToCodingPage->isChecked()) + ui->stackedWidget->setCurrentIndex(2); + if(ui->actionSwitchToDataPage->isChecked()) { + if(SM.item->schemeType != stLEARNING) + ui->stackedWidget->setCurrentIndex(3); + else + ui->stackedWidget->setCurrentIndex(4); + } + + QString modelIdentCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode"); + QString systemDiffCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemDiffCode"); + QString systemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemCode"); + QString subSystemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSystemCode"); + QString subSubSystemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSubSystemCode"); + QString assyCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "assyCode"); + QString disassyCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCode"); + QString disassyCodeVariant = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCodeVariant"); + QString infoCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCode"); + QString infoCodeVariant = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCodeVariant"); + QString itemLocationCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "itemLocationCode"); + QString learnCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnCode"); + QString learnEventCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnEventCode"); + QString techName = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); + QString infoName = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName"); + + allowDMCodePageToSetItems = false; + ui->dmc_te_infoName->setText(infoName); ui->dmc_te_techName->setText(techName); + ui->dmc_le_modelIdentCode->setText(modelIdentCode); ui->dmc_le_systemDiffCode->setText(systemDiffCode); + ui->dmc_le_systemCode->setText(systemCode); ui->dmc_le_subSystemCode->setText(subSystemCode); + ui->dmc_le_subSubSystemCode->setText(subSubSystemCode); ui->dmc_le_assyCode->setText(assyCode); + ui->dmc_le_disassyCode->setText(disassyCode); ui->dmc_le_disassyCodeVariant->setText(disassyCodeVariant); + ui->dmc_le_infoCode->setText(infoCode); ui->dmc_le_infoCodeVariant->setText(infoCodeVariant); + ui->dmc_le_itemLocationCode->setText(itemLocationCode); + ui->dmc_le_learnCode->setText(learnCode); ui->dmc_le_learnEventCode->setText(learnEventCode); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->setChecked(SM.item->schemeType == stLEARNING); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->setChecked(!(SM.item->schemeType == stLEARNING)); + ui->dmc_btn_Qual->setChecked(SM.item->isQualifyed); + allowDMCodePageToSetItems = true; + + allowDMCodePageCallOnChangeComboBox = false; +// if(SM.item->selectedInDMCodeList != -1) { + if(SM.item->selectedInDMCodeList > -1 && SM.item->selectedInDMCodeList < ru_const.dmCodeList.count()) { + ui->dmc_cb_InfoSets->setCurrentIndex(SM.item->selectedInDMCodeList); + ui->dmc_InfoText->document()->setHtml(ru_const.dmCodeList[SM.item->selectedInDMCodeList].text); + } + else { + ui->dmc_cb_InfoSets->setCurrentIndex(-1); + ui->dmc_InfoText->document()->clear(); + } + allowDMCodePageCallOnChangeComboBox = true; + + SM.item->fileCode = SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + SM.item->selectedInDMCodeList = ui->dmc_cb_InfoSets->currentIndex(); + ui->dmc_lb_pageDMName->setText("Модуль данных\n"+SM.item->fileCode); + + //if(SM.item->schemeType == stLEARNING) пока не нужно + // fillLearningPageWithData(); + +// if(SM.item->schemeType == stDESCRIPT || SM.item->schemeType == stCREW) { +// QString htmlFileName = "F:/S1000D/LYX/20201219_auk-05_mi-38.xhtml"; +// QFile htmlFile(htmlFileName); +// htmlFile.open(QFile::ReadOnly | QFile::Text); +// QByteArray fileData = htmlFile.readAll(); // +// QString fileStr = QString(fileData); +// fileStr.replace("dataPageEdit->document()->setHtml(fileStr); +// } + +// QString htmlFileName = SM.projectPath + "/" + SM.item->fileName.replace(".xml", ".html"); +// QFile htmlFile(htmlFileName); +// QStringList htmlDMData; +// if (htmlFile.open(QFile::ReadOnly | QFile::Text)) { +// while(!htmlFile.atEnd()) +// htmlDMData.append(QString::fromLocal8Bit(htmlFile.readLine()).replace("\n","")); +// htmlFile.close(); +// } +// ui->dataPageEdit->document()->setHtml(SM.item->html.join("\n")); + + QString lyxLogFileName = SM.projectPath + "/" + SM.item->fileName+"_importlog.txt"; + QFile logFile(lyxLogFileName); + QStringList lyxLogList; + if (logFile.open(QFile::ReadOnly | QFile::Text)) { + while(!logFile.atEnd()) + lyxLogList.append(QString::fromUtf8(logFile.readLine()).replace("\n","")); + logFile.close(); + } + QString s; + ui->dmc_LyXLog->clear(); + for(int i=0;idmc_LyXLog->addItem(s); continue; } + if(s.at(0) == "!" || s.at(0) == "#") s = s.mid(1); + + QListWidgetItem *logItem = new QListWidgetItem; + logItem->setText(s); + if(lyxLogList.at(i).at(0) == "#") + logItem->setForeground(QBrush(QColor(100,100,100))); +// logItem->setTextColor(QColor(100,100,100)); + if(lyxLogList.at(i).at(0) == "!") { + logItem->setForeground(QBrush(QColor(150,0,0))); +// logItem->setTextColor(QColor(150,0,0)); + //SM.item->isQualifyed = false; + //ui->dmc_btn_Qual->setChecked(false); + } + if(i == 0) + logItem->setForeground(QBrush(QColor(0,0,200))); +// logItem->setTextColor(QColor(0,0,200)); + //logItem->setSizeHint(QSize(logItem->sizeHint().width(), 15)); + logItem->setFont(QFont("Courier", 9)); + logItem->setTextAlignment(Qt::AlignVCenter); + ui->dmc_LyXLog->insertItem(ui->dmc_LyXLog->count(), logItem); // >addItem(s); + } + } + + if(SM.item->moduleType == mtPM || SM.item->schemeType == stLEARNING) + ui->actionOpenInBrowser->setEnabled(false); + else + ui->actionOpenInBrowser->setEnabled(true); + updateTreeWidgetNames(); +} + +void EditorMainWindow::pmc_btn_pmIssuerPressed() { + ui->pmc_le_pmIssuer->setText(ru_const.pmIssuer); +} + +void EditorMainWindow::pmc_btn_modelIdentCodePressed() { + ui->pmc_le_modelIdentCode->setText(ru_const.modelIdentCode); +} + +void EditorMainWindow::pmc_cb_pmNumABC_Changed(int) { + if(!allowCodePageToCallOnChangeComboBox) return; + allowCodePageToSetItems = false; + + allowCodePageToCallOnChangeComboBox = false; + ui->pmc_cb_pmNum->clear(); ui->pmc_cb_pmVolume->clear(); + bool onceFlag = true; + for(int i=0; i < ru_const.pmCodeList.count();i++) { + if((ru_const.pmCodeList[i].pmNumABC+" - "+ru_const.pmCodeList[i].pmNumABCText) == ui->pmc_cb_pmNumABC->itemText(ui->pmc_cb_pmNumABC->currentIndex())) { + if(onceFlag) { + if(ui->pmc_t_title->toPlainText() == "") + ui->pmc_t_title->setText(ru_const.pmCodeList[i].pmNumABCText); + ui->pmc_le_pmNumABC->setText(ru_const.pmCodeList[i].pmNumABC); + ui->pmc_le_pmNum->setText(""); + ui->pmc_le_pmVolume->setText(""); + onceFlag = false; + } + + int ind = ui->pmc_cb_pmNum->findText(ru_const.pmCodeList[i].pmNumber+" - "+ru_const.pmCodeList[i].pmNumberText); + if (ind == -1) + ui->pmc_cb_pmNum->addItem(ru_const.pmCodeList[i].pmNumber+" - "+ru_const.pmCodeList[i].pmNumberText, ru_const.pmCodeList[i].pmNumber); + } + } + + allowCodePageToCallOnChangeComboBox = true; + ui->pmc_cb_pmNum->setCurrentIndex(-1); + allowCodePageToSetItems = true; + codePagePM_EditChanged(""); +} + +void EditorMainWindow::pmc_cb_pmNum_Changed(int) { + if(!allowCodePageToCallOnChangeComboBox) return; + allowCodePageToSetItems = false; + + allowCodePageToCallOnChangeComboBox = false; + ui->pmc_cb_pmVolume->clear(); + bool onceFlag = true; + for(int i=0; i < ru_const.pmCodeList.count();i++) { + if( ((ru_const.pmCodeList[i].pmNumABC+" - "+ru_const.pmCodeList[i].pmNumABCText) == ui->pmc_cb_pmNumABC->itemText(ui->pmc_cb_pmNumABC->currentIndex())) + && ((ru_const.pmCodeList[i].pmNumber+" - "+ru_const.pmCodeList[i].pmNumberText) == ui->pmc_cb_pmNum->itemText(ui->pmc_cb_pmNum->currentIndex()))) { + if(onceFlag) { + if(ui->pmc_t_title->toPlainText() == "") + ui->pmc_t_title->setText(ru_const.pmCodeList[i].pmNumABCText+" - "+ru_const.pmCodeList[i].pmNumberText); + ui->pmc_le_pmNum->setText(ru_const.pmCodeList[i].pmNumber); + ui->pmc_le_pmVolume->setText(""); + } + + int ind = ui->pmc_cb_pmVolume->findText(ru_const.pmCodeList[i].pmVolume+" - "+ru_const.pmCodeList[i].pmVolumeText); + if (ind == -1) { + ui->pmc_cb_pmVolume->addItem(ru_const.pmCodeList[i].pmVolume+" - "+ru_const.pmCodeList[i].pmVolumeText, ru_const.pmCodeList[i].pmVolume); + } + } + } + + allowCodePageToCallOnChangeComboBox = true; + //if(ui->cb_pmVolume->count() == 1) + // ui->cb_pmVolume->setCurrentIndex(0); + //else + ui->pmc_cb_pmVolume->setCurrentIndex(-1); + + allowCodePageToSetItems = true; + codePagePM_EditChanged(""); +} + +void EditorMainWindow::pmc_cb_pmVolume_Changed(int index) { + if(!allowCodePageToCallOnChangeComboBox) return; + if(index == -1) return; + allowCodePageToSetItems = false; + + for(int i=0; i < ru_const.pmCodeList.count();i++) { + if( ((ru_const.pmCodeList[i].pmNumABC+" - "+ru_const.pmCodeList[i].pmNumABCText) == ui->pmc_cb_pmNumABC->itemText(ui->pmc_cb_pmNumABC->currentIndex())) + && ((ru_const.pmCodeList[i].pmNumber+" - "+ru_const.pmCodeList[i].pmNumberText) == ui->pmc_cb_pmNum->itemText(ui->pmc_cb_pmNum->currentIndex())) + && ((ru_const.pmCodeList[i].pmVolume+" - "+ru_const.pmCodeList[i].pmVolumeText) == ui->pmc_cb_pmVolume->itemText(ui->pmc_cb_pmVolume->currentIndex())) ) { + if(ui->pmc_t_title->toPlainText() == "") + ui->pmc_t_title->setText(ru_const.pmCodeList[i].pmNumABCText+" - "+ru_const.pmCodeList[i].pmNumberText+". "+ru_const.pmCodeList[i].pmVolumeText); + ui->pmc_le_pmVolume->setText(ru_const.pmCodeList[i].pmVolume); + break; + } + } + allowCodePageToSetItems = true; + codePagePM_EditChanged(""); +} + +void EditorMainWindow::codePagePM_TitleChanged() { + codePagePM_EditChanged(""); +} + +void EditorMainWindow::codePagePM_EditChanged(QString) { + QString styleRed = "background-color: rgb(255, 230, 230)"; + QString styleWhite = "background-color: white"; + + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + + SM.item->isReady = true; + if(ui->pmc_t_title->document()->toPlainText() == "") + { ui->pmc_t_title->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->pmc_t_title->setStyleSheet(styleWhite); + if(ui->pmc_le_modelIdentCode->text() == "") + { ui->pmc_le_modelIdentCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->pmc_le_modelIdentCode->setStyleSheet(styleWhite); + if(ui->pmc_le_pmIssuer->text() == "") + { ui->pmc_le_pmIssuer->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->pmc_le_pmIssuer->setStyleSheet(styleWhite); + if(ui->pmc_le_pmNumABC->text() == "") + { ui->pmc_le_pmNumABC->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->pmc_le_pmNumABC->setStyleSheet(styleWhite); + if(ui->pmc_le_pmNum->text() == "") + { ui->pmc_le_pmNum->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->pmc_le_pmNum->setStyleSheet(styleWhite); + if(ui->pmc_le_pmVolume->text() == "") + { ui->pmc_le_pmVolume->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->pmc_le_pmVolume->setStyleSheet(styleWhite); + + if(allowCodePageToSetItems) { + //bugCnt++; + //if(DBG) qDebug() << " " << bugCnt << " - set Items"; + SM.replaceCurItem_pmCode(ui->pmc_t_title->document()->toPlainText(), ui->pmc_le_modelIdentCode->text(), ui->pmc_le_pmIssuer->text(), + ui->pmc_le_pmNumABC->text()+ui->pmc_le_pmNum->text(), ui->pmc_le_pmVolume->text()); + QString fCode = SM.pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + SM.item->fileCode = fCode; + + setIsModifyed(true); + updateTreeWidgetNames(); + } +} + +void EditorMainWindow::updateTreeWidgetNamesRecurs(QTreeWidgetItem *node) { + if(node->data(0, Qt::UserRole).toInt() >= SM.items.count()) if(DBG) qDebug() << " Error: updateTreeWidgetNamesRecurs - node->data >= items.count"; + if(node->data(0, Qt::UserRole).toInt() >= SM.items.count()) return; + SM.setCurItem(node->data(0, Qt::UserRole).toInt()); + QString isLearnigDMStr = ""; + if(SM.item->moduleType == mtDM && SM.item->schemeType == stLEARNING) + isLearnigDMStr = "Контроль знаний\n"; + if(SM.item->moduleType == mtPM) { + node->setText(0, //SM.item->fileCode+"\n"+ + SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle") ); + if(SM.item->isQualifyed) + node->setIcon(0, iconFolder); + else + node->setIcon(0, iconFolder_ex); + } else { + node->setText(0, //SM.item->fileCode+" "+ + isLearnigDMStr+ + SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName") + "\n" + + SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName") ); + if(SM.item->isQualifyed) + node->setIcon(0, iconDoc_head_blue); + else + node->setIcon(0, iconDoc_head_blue_ex); + } + for(int i=0;ichildCount();i++) + updateTreeWidgetNamesRecurs(node->child(i)); +} + +void EditorMainWindow::updateTreeWidgetNames() { + if(!allowCodePageToSetItems) return; + int curInd = ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt(); + for(int i=0;itreeWidget->topLevelItemCount();i++) + updateTreeWidgetNamesRecurs(ui->treeWidget->topLevelItem(i)); + if(curInd >= SM.items.count()) curInd = SM.items.count()-1; + if(curInd < 0) curInd = 0; + SM.setCurItem(curInd); +} + +// у DM не может быть детей, убираем их на уровень вверх +void EditorMainWindow::treeWidgetNormalizeDMsAfterDrop(QTreeWidgetItem *node) { + int itemInd = node->data(0, Qt::UserRole).toInt(); + //int childInd; + for(int i=0;ichildCount();i++) { + //childInd = node->child(i)->data(0, Qt::UserRole).toInt(); + if(SM.items[itemInd].moduleType == mtDM) { + QTreeWidgetItem *childClone = node->child(i)->clone(); + node->removeChild(node->child(i)); + if(node->parent() != nullptr) + node->parent()->insertChild(node->parent()->indexOfChild(node)+1, childClone); + else + ui->treeWidget->insertTopLevelItem(ui->treeWidget->indexOfTopLevelItem(node)+1, childClone); + ui->treeWidget->setCurrentItem(childClone); + } + else + if(node->child(i)->childCount() > 0) + treeWidgetNormalizeDMsAfterDrop(node->child(i)); + } +} + +void EditorMainWindow::fillItemsFromTreeWidget(int parentInd, QTreeWidgetItem *node) { + int itemInd = node->data(0, Qt::UserRole).toInt(); + SM.items[itemInd].child.clear(); + if(SM.items[itemInd].moduleType == mtPM) { + SM.setCurItem(itemInd); + QDomNode pmEntry = SM.findElement("content.pmEntry"); // просто удаляем все Ref из PM и далее их заполняем из TreeWidget + for(int i=0;ichildCount();i++) { + childInd = node->child(i)->data(0, Qt::UserRole).toInt(); + SM.items[itemInd].child.append(childInd); + SM.moveItemToPM(childInd, itemInd, i); // переместить xml запись элемента в другую публикацию на i-тое место + // if(DBG) qDebug() << " move item" << SM.items[childInd].fileCode << "to PM" << SM.items[itemInd].fileCode << " at pos." << i; + fillItemsFromTreeWidget(itemInd, node->child(i)); + } + } + SM.items[itemInd].parent = parentInd; +} + +void EditorMainWindow::treeWidgetDrop() { + for(int i=0; itreeWidget->topLevelItemCount();i++) + treeWidgetNormalizeDMsAfterDrop(ui->treeWidget->topLevelItem(i)); + ui->treeWidget->update(); ui->treeWidget->repaint(); + for(int i=0; itreeWidget->topLevelItemCount();i++) { + fillItemsFromTreeWidget(-1, ui->treeWidget->topLevelItem(i)); + } + setIsModifyed(true); +} + +void EditorMainWindow::on_actionDeleteItem_triggered() +{ + if(ui->treeWidget->topLevelItemCount() == 0) return; + if(SM.items.count() <= 1) return; + int itemInd = ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt(); + if(SM.items[itemInd].moduleType == mtPM && SM.items[itemInd].child.count() > 0) { + QApplication::beep(); + QMessageBox msgBox; + msgBox.setIcon(QMessageBox::Warning); msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); + msgBox.setWindowTitle("Удаление"); msgBox.setText("Невозможно удалить непустую публикацию."); + msgBox.exec(); + return; + } + + SM.deleteItem(itemInd); + allowCodePageToSetItems = false; + //ui->treeWidget->currentItem()->setData(0, Qt::UserRole, 0); // временно, чтобы избежать ошибок + fillTreeWidgetWithItems(); + ui->treeWidget->setCurrentItem(ui->treeWidget->topLevelItem(0)); + allowCodePageToSetItems = true; + Save(); +} + +void EditorMainWindow::Save() { + for(int i=0; itreeWidget->topLevelItemCount();i++) + fillItemsFromTreeWidget(-1, ui->treeWidget->topLevelItem(i)); + QString sr = SM.SaveProject(); + if(sr != "") { + bool sp = splash->isHidden(); + splash->hide(); + QMessageBox::critical(this, "Ошибка", sr, QMessageBox::Ok); + if(sp) splash->show(); + } + setIsModifyed(false); +} + +void EditorMainWindow::on_dmc_btnBox_IsLearningDM_clicked(QAbstractButton *aButton) +{ + if(!allowDMCodePageToSetItems) return; + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + + QDialogButtonBox::StandardButton button = ui->dmc_btnBox_IsLearningDM->standardButton(aButton); + if(button == QDialogButtonBox::Yes && ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->isChecked()) { + //ui->dmc_lb_learnCode->setEnabled(true); ui->dmc_lb_learnEventCode->setEnabled(true); + //ui->dmc_le_learnCode->setEnabled(true); ui->dmc_le_learnEventCode->setEnabled(true); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->setChecked(true); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->setChecked(false); + if(SM.item->schemeType != stLEARNING) { + if(SM.item->dmDataFilled) { + QApplication::beep(); + QMessageBox msgBox; + msgBox.setIcon(QMessageBox::Warning); msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); + msgBox.setWindowTitle("Внимание"); msgBox.setText("Изменить схему модуля данных? Заполенные данные будут утеряны."); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::Yes); + int ret = msgBox.exec(); + if(ret != QMessageBox::Yes) { + allowDMCodePageCallOnChangeComboBox = false; + ui->dmc_cb_InfoSets->setCurrentIndex(SM.item->selectedInDMCodeList); + allowDMCodePageCallOnChangeComboBox = true; + return; + } + SM.item->dmDataFilled = false; + } + + QDomNode identAndStatusSectionClone = SM.findElement("identAndStatusSection").cloneNode(); + + QFile xmlFile(":new/BlankXML/learning.xml"); + if (!xmlFile.open(QFile::ReadOnly | QFile::Text)) { + if(DBG) qDebug() << " Cant open :new/BlankXML/learning.xml"; + QApplication::beep(); + allowDMCodePageCallOnChangeComboBox = false; + ui->dmc_cb_InfoSets->setCurrentIndex(SM.item->selectedInDMCodeList); + allowDMCodePageCallOnChangeComboBox = true; + return; + } + QByteArray fileData = xmlFile.readAll(); + xmlFile.close(); + SM.item->doc.setContent(fileData); + SM.item->schemeType = stLEARNING; + QDomNode newIdent = SM.findElement("identAndStatusSection"); + QDomNode oldIdent = SM.item->doc.importNode(identAndStatusSectionClone, true); + newIdent.parentNode().replaceChild(oldIdent, newIdent); + //qDebug() << SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + + } + if(ui->dmc_cb_InfoSets->currentIndex() > -1) { + allowDMCodePageToSetItems = false; + ui->dmc_le_learnCode->setText(ru_const.dmCodeList[ui->dmc_cb_InfoSets->currentIndex()]._learnCode); + ui->dmc_le_learnEventCode->setText(ru_const.dmCodeList[ui->dmc_cb_InfoSets->currentIndex()]._learnEventCode); + allowDMCodePageToSetItems = true; + } + } + + if(button == QDialogButtonBox::No && ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->isChecked()) { + //ui->dmc_lb_learnCode->setEnabled(false); ui->dmc_lb_learnEventCode->setEnabled(false); + //ui->dmc_le_learnCode->setEnabled(false); ui->dmc_le_learnEventCode->setEnabled(false); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->setChecked(false); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->setChecked(true); + + QString newScheme; + if(ui->dmc_cb_InfoSets->currentIndex() > -1) + newScheme = ru_const.dmCodeList[ui->dmc_cb_InfoSets->currentIndex()].schemeTypeStr; + else + newScheme = "DESCRIPT"; + SM.item->schemeType = SM.getSchemeTypeByStr(newScheme); + + QDomNode identAndStatusSectionClone = SM.findElement("identAndStatusSection").cloneNode(); + QFile xmlFile(":new/BlankXML/"+newScheme.toLower()+".xml"); + if (!xmlFile.open(QFile::ReadOnly | QFile::Text)) { + if(DBG) qDebug() << " Cant open :new/BlankXML/"+newScheme.toLower()+".xml"; + QApplication::beep(); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->setChecked(true); + ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->setChecked(false); + return; + } + QByteArray fileData = xmlFile.readAll(); + xmlFile.close(); + SM.item->doc.setContent(fileData); + QDomNode newIdent = SM.findElement("identAndStatusSection"); + QDomNode oldIdent = SM.item->doc.importNode(identAndStatusSectionClone, true); + newIdent.parentNode().replaceChild(oldIdent, newIdent); + //qDebug() << SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + + if(ui->dmc_cb_InfoSets->currentIndex() > -1) { + allowDMCodePageToSetItems = false; + ui->dmc_le_learnCode->setText(ru_const.dmCodeList[ui->dmc_cb_InfoSets->currentIndex()].learnCode); + ui->dmc_le_learnEventCode->setText(ru_const.dmCodeList[ui->dmc_cb_InfoSets->currentIndex()].learnEventCode); + allowDMCodePageToSetItems = true; + } + } + + if(ui->dmc_cb_InfoSets->currentIndex() == -1) { + allowDMCodePageToSetItems = false; + ui->dmc_le_learnCode->setText(""); + ui->dmc_le_learnEventCode->setText(""); + allowDMCodePageToSetItems = true; + } + codePageDM_EditChanged(""); +} + +void EditorMainWindow::on_dmc_cb_InfoSets_currentIndexChanged(int index) { + if(!allowDMCodePageCallOnChangeComboBox) return; + if(index == -1) return; + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + + //_schemeType newSchemeType = SM.getSchemeTypeByStr(ru_const.dmCodeList[index].schemeTypeStr); + + //уже нельзя так делать! +// if(SM.item->schemeType != newSchemeType) { +// if(SM.item->dmDataFilled) { +// QApplication::beep(); +// QMessageBox msgBox; +// msgBox.setIcon(QMessageBox::Warning); msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); +// msgBox.setWindowTitle("Внимание"); msgBox.setText("Изменить схему модуля данных? Заполенные данные будут утеряны."); +// msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::Yes); +// int ret = msgBox.exec(); +// if(ret != QMessageBox::Yes) { +// allowDMCodePageCallOnChangeComboBox = false; +// ui->dmc_cb_InfoSets->setCurrentIndex(SM.item->selectedInDMCodeList); +// allowDMCodePageCallOnChangeComboBox = true; +// return; +// } +// SM.item->dmDataFilled = false; +// } + +// QDomNode identAndStatusSectionClone = SM.findElement("identAndStatusSection").cloneNode(); +// QFile xmlFile(":new/BlankXML/"+ru_const.dmCodeList[index].schemeTypeStr.toLower()+".xml"); +// if (!xmlFile.open(QFile::ReadOnly | QFile::Text)) { +// if(DBG) qDebug() << " Cant open :new/BlankXML/"+ru_const.dmCodeList[index].schemeTypeStr.toLower()+".xml"; +// QApplication::beep(); +// allowDMCodePageCallOnChangeComboBox = false; +// ui->dmc_cb_InfoSets->setCurrentIndex(SM.item->selectedInDMCodeList); +// allowDMCodePageCallOnChangeComboBox = true; +// return; +// } +// QByteArray fileData = xmlFile.readAll(); +// xmlFile.close(); +// SM.item->doc.setContent(fileData); +// QDomNode newIdent = SM.findElement("identAndStatusSection"); +// QDomNode oldIdent = SM.item->doc.importNode(identAndStatusSectionClone, true); +// newIdent.parentNode().replaceChild(oldIdent, newIdent); +// //qDebug() << SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); +// } + + //ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::Yes)->setChecked(false); + //ui->dmc_btnBox_IsLearningDM->button(QDialogButtonBox::No)->setChecked(true); + allowDMCodePageToSetItems = false; + ui->dmc_InfoText->document()->setHtml(ru_const.dmCodeList[index].text); + ui->dmc_le_modelIdentCode->setText(ru_const.dmCodeList[index].modelIdentCode); + ui->dmc_le_systemDiffCode->setText(ru_const.dmCodeList[index].systemDiffCode); + ui->dmc_le_systemCode->setText(ru_const.dmCodeList[index].systemCode); + ui->dmc_le_subSystemCode->setText(ru_const.dmCodeList[index].subSystemCode); + ui->dmc_le_subSubSystemCode->setText(ru_const.dmCodeList[index].subSubSystemCode); + ui->dmc_le_assyCode->setText(ru_const.dmCodeList[index].assyCode); + ui->dmc_le_disassyCode->setText(ru_const.dmCodeList[index].disassyCode); + ui->dmc_le_disassyCodeVariant->setText(ru_const.dmCodeList[index].disassyCodeVariant); + ui->dmc_le_infoCode->setText(ru_const.dmCodeList[index].infoCode); + ui->dmc_le_infoCodeVariant->setText(ru_const.dmCodeList[index].infoCodeVariant); + ui->dmc_le_itemLocationCode->setText(ru_const.dmCodeList[index].itemLocationCode); + + if(SM.item->schemeType != stLEARNING) { + ui->dmc_le_learnCode->setText(ru_const.dmCodeList[index].learnCode); + ui->dmc_le_learnEventCode->setText(ru_const.dmCodeList[index].learnEventCode); + } else { + ui->dmc_le_learnCode->setText(ru_const.dmCodeList[index]._learnCode); + ui->dmc_le_learnEventCode->setText(ru_const.dmCodeList[index]._learnEventCode); + } + if(ui->dmc_te_techName->document()->toPlainText() == "") { + ui->dmc_te_techName->setText(ru_const.dmCodeList[index].techName); + ui->dmc_te_infoName->setText(ru_const.dmCodeList[index].infoName); + } + allowDMCodePageToSetItems = true; + SM.item->selectedInDMCodeList = index; + + codePageDM_EditChanged(""); +} + +QString EditorMainWindow::delYYY(QString st) { + return st.replace("X", "").replace("Y", "").replace("N", ""); +} +void EditorMainWindow::codePageDM_TitleChanged() { + codePageDM_EditChanged(""); +} + +void EditorMainWindow::codePageDM_EditChanged(QString) { + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + QString styleRed = "background-color: rgb(255, 230, 230)"; + QString styleWhite = "background-color: white"; + SM.item->isReady = true; + if(delYYY(ui->dmc_le_modelIdentCode->text()) == "") + { ui->dmc_le_modelIdentCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_modelIdentCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_systemDiffCode->text()) == "") + { ui->dmc_le_systemDiffCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_systemDiffCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_systemCode->text()) == "") + { ui->dmc_le_systemCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_systemCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_subSystemCode->text()) == "") + { ui->dmc_le_subSystemCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_subSystemCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_subSubSystemCode->text()) == "") + { ui->dmc_le_subSubSystemCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_subSubSystemCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_assyCode->text()) == "") + { ui->dmc_le_assyCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_assyCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_disassyCode->text()) == "") + { ui->dmc_le_disassyCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_disassyCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_disassyCodeVariant->text()) == "") + { ui->dmc_le_disassyCodeVariant->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_disassyCodeVariant->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_infoCode->text()) == "") + { ui->dmc_le_infoCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_infoCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_infoCodeVariant->text()) == "") + { ui->dmc_le_infoCodeVariant->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_infoCodeVariant->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_learnCode->text()) == "") + { ui->dmc_le_learnCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_learnCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_learnEventCode->text()) == "") + { ui->dmc_le_learnEventCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_learnEventCode->setStyleSheet(styleWhite); + if(delYYY(ui->dmc_le_itemLocationCode->text()) == "") + { ui->dmc_le_itemLocationCode->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_le_itemLocationCode->setStyleSheet(styleWhite); + //if(ui->dmc_te_infoName->document()->toPlainText() == "") + // { ui->dmc_te_infoName->setStyleSheet(styleRed); SM.item->isReady = false; } + //else + // ui->dmc_te_infoName->setStyleSheet(styleWhite); + if(ui->dmc_te_techName->document()->toPlainText() == "") + { ui->dmc_te_techName->setStyleSheet(styleRed); SM.item->isReady = false; } + else + ui->dmc_te_techName->setStyleSheet(styleWhite); + + if(allowDMCodePageToSetItems) { + SM.replaceCurItem_dmCode(ui->dmc_te_techName->document()->toPlainText(), ui->dmc_te_infoName->document()->toPlainText(), + ui->dmc_le_modelIdentCode->text(), ui->dmc_le_systemDiffCode->text(), + ui->dmc_le_systemCode->text(), ui->dmc_le_subSystemCode->text(), ui->dmc_le_subSubSystemCode->text(), ui->dmc_le_assyCode->text(), + ui->dmc_le_disassyCode->text(), ui->dmc_le_disassyCodeVariant->text(), + ui->dmc_le_infoCode->text(), ui->dmc_le_infoCodeVariant->text(), + ui->dmc_le_itemLocationCode->text(), ui->dmc_le_learnCode->text(), ui->dmc_le_learnEventCode->text() ); + QString fCode = SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + //qDebug() << "update DM: "+fCode; + SM.item->fileCode = fCode; + ui->dmc_lb_pageDMName->setText("Модуль данных\n"+fCode); + + setIsModifyed(true); + updateTreeWidgetNames(); + } +} + +void EditorMainWindow::on_dml_btnBox_question_clicked(QAbstractButton *aButton) +{ + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + if(SM.item->schemeType != stLEARNING) return; + QDialogButtonBox::StandardButton button = ui->dml_btnBox_question->standardButton(aButton); + + if(button == QDialogButtonBox::Yes) { // Add question + QDomNode lcInteractionNode = SM.item->doc.createElement("lcInteraction"); + QDomNode lcSingleSelect = SM.item->doc.createElement("lcSingleSelect"); + lcInteractionNode.appendChild(lcSingleSelect); + QDomNode lcQuestion = SM.item->doc.createElement("lcQuestion"); + lcSingleSelect.appendChild(lcQuestion); + QDomNode description = SM.item->doc.createElement("description"); + lcQuestion.appendChild(description); + QDomNode para = SM.item->doc.createElement("para"); + description.appendChild(para); + para.appendChild(SM.item->doc.createTextNode("")); + para.firstChild().toText().setData("Текст вопроса"); + QDomNode lcAnswerOptionGroup = SM.item->doc.createElement("lcAnswerOptionGroup"); + lcSingleSelect.appendChild(lcAnswerOptionGroup); + QDomNode lcAnswerOption = SM.item->doc.createElement("lcAnswerOption"); + lcAnswerOptionGroup.appendChild(lcAnswerOption); + QDomNode lcAnswerOptionContent = SM.item->doc.createElement("lcAnswerOptionContent"); + lcAnswerOption.appendChild(lcAnswerOptionContent); + description = SM.item->doc.createElement("description"); + lcAnswerOptionContent.appendChild(description); + para = SM.item->doc.createElement("para"); + description.appendChild(para); + para.appendChild(SM.item->doc.createTextNode("")); + para.firstChild().toText().setData("Ответ 1"); + QDomNode lcCorrectResponse = SM.item->doc.createElement("lcCorrectResponse"); + lcAnswerOption.appendChild(lcCorrectResponse); + lcAnswerOption = SM.item->doc.createElement("lcAnswerOption"); + lcAnswerOptionGroup.appendChild(lcAnswerOption); + lcAnswerOptionContent = SM.item->doc.createElement("lcAnswerOptionContent"); + lcAnswerOption.appendChild(lcAnswerOptionContent); + description = SM.item->doc.createElement("description"); + lcAnswerOptionContent.appendChild(description); + para = SM.item->doc.createElement("para"); + description.appendChild(para); + para.appendChild(SM.item->doc.createTextNode("")); + para.firstChild().toText().setData("Ответ 2"); + SM.findElement("content.learning.learningAssessment").insertAfter(lcInteractionNode, SM.findElement("content.learning.learningAssessment.lcInteraction["+QString::number(ui->dml_lw_question->currentRow())+"]")); + int ind = ui->dml_lw_question->currentRow(); + fillLearningPageWithData(); + ui->dml_lw_question->setCurrentRow(ind+1); + ui->dml_lw_question->editItem(ui->dml_lw_question->currentItem()); + } + + if(button == QDialogButtonBox::No) { // Delete question + if(ui->dml_lw_question->currentRow() < 0) return; + if(ui->dml_lw_question->currentItem() == nullptr) return; + if(ui->dml_lw_question->count() == 1) return; + + QDomNode questNode; + int tmpRow=-1; + for(int i=0;idml_lw_question->currentRow()) { + questNode.parentNode().parentNode().removeChild(questNode.parentNode()); + break; + } + } + int tmp = ui->dml_lw_question->currentRow(); + fillLearningPageWithData(); + if(tmp >= ui->dml_lw_question->count()) tmp = ui->dml_lw_question->count()-1; + ui->dml_lw_question->setCurrentRow(tmp); + } + + if(button == QDialogButtonBox::Apply) { // move Up question + if(ui->dml_lw_question->currentItem() == nullptr) return; + if(ui->dml_lw_question->currentRow() <= 0) return; + QDomNode prevInter, curInter, tmpCur, tmpPrev; + int tmpRow=-1; + for(int i=1;i<=SM.getNodeChildsWithNameCount("content.learning.learningAssessment", "lcInteraction");i++) { + curInter = SM.findElement("content.learning.learningAssessment.lcInteraction["+QString::number(i-1)+"]"); + if(curInter.firstChild().nodeName() == "lcSingleSelect" || curInter.firstChild().nodeName() == "lcMultipleSelect") { + tmpRow++; + if(tmpRow == ui->dml_lw_question->currentRow()-1) + prevInter = curInter; + if(tmpRow == ui->dml_lw_question->currentRow()) { + tmpCur = curInter.cloneNode(); tmpPrev = prevInter.cloneNode(); + prevInter.parentNode().replaceChild(tmpCur, prevInter); + curInter.parentNode().replaceChild(tmpPrev, curInter); + int tmp = ui->dml_lw_question->currentRow(); + fillLearningPageWithData(); + ui->dml_lw_question->setCurrentRow(tmp-1); + break; + } + } + } + } + + if(button == QDialogButtonBox::Reset) { // move Down question + if(ui->dml_lw_question->currentItem() == nullptr) return; + if(ui->dml_lw_question->currentRow() >= ui->dml_lw_question->count()-1) return; + QDomNode nextInter, curInter, tmpCur, tmpPrev; + int tmpRow=-1; + for(int i=0;idml_lw_question->currentRow()) { + tmpCur = curInter.cloneNode(); tmpPrev = nextInter.cloneNode(); + curInter.parentNode().replaceChild(tmpCur, nextInter); + curInter.parentNode().replaceChild(tmpPrev, curInter); + int tmp = ui->dml_lw_question->currentRow(); + fillLearningPageWithData(); + ui->dml_lw_question->setCurrentRow(tmp+1); + break; + } + } + } + +} + +void EditorMainWindow::on_dml_btnBox_answer_clicked(QAbstractButton *aButton) +{ + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + if(SM.item->schemeType != stLEARNING) return; + + QDialogButtonBox::StandardButton button = ui->dml_btnBox_answer->standardButton(aButton); + int questInterIndex = -1; + QString questNodeName; + questInterIndex = getlcInteractionFromQuestRow(ui->dml_lw_question->currentRow()); + QDomNode curInter = SM.findElement("content.learning.learningAssessment.lcInteraction["+QString::number(questInterIndex)+"]"); + questNodeName = curInter.firstChild().nodeName(); + if(questInterIndex == -1) return; + QString groupStr = "content.learning.learningAssessment.lcInteraction["+QString::number(questInterIndex)+"]."+questNodeName+".lcAnswerOptionGroup"; + QDomNode lcAnswerOptionGroup = SM.findElement(groupStr); + int curRow = ui->dml_lw_answer->currentRow(); + if(lcAnswerOptionGroup.isNull()) + if(DBG) qDebug() << "Error: dml_btnBox_answer_clicked - lcAnswerOptionGroup.isNull " << groupStr; + + if(button == QDialogButtonBox::Yes) { // Add answer + QDomNode lcAnswerOption = SM.item->doc.createElement("lcAnswerOption"); + if(curRow < 0) curRow = 0; + lcAnswerOptionGroup.insertAfter(lcAnswerOption, lcAnswerOptionGroup.childNodes().at(curRow)); + QDomNode lcAnswerOptionContent = SM.item->doc.createElement("lcAnswerOptionContent"); + lcAnswerOption.appendChild(lcAnswerOptionContent); + QDomNode description = SM.item->doc.createElement("description"); + lcAnswerOptionContent.appendChild(description); + QDomNode para = SM.item->doc.createElement("para"); + description.appendChild(para); + para.appendChild(SM.item->doc.createTextNode("")); + para.firstChild().toText().setData("Новый ответ"); + fillLearningPageWithData(); + ui->dml_lw_question->setCurrentRow(questInterIndex); + ui->dml_lw_answer->setCurrentRow(curRow+1); + ui->dml_lw_answer->editItem(ui->dml_lw_answer->currentItem()); + } + + if(button == QDialogButtonBox::No) { // Delete answer + if(ui->dml_lw_answer->currentItem() == nullptr) return; + if(ui->dml_lw_answer->count() <= 1) return; + lcAnswerOptionGroup.removeChild(lcAnswerOptionGroup.childNodes().at(curRow)); + ui->dml_lw_answer->takeItem(curRow); + } + setIsModifyed(true); +} + +void EditorMainWindow::fillLearningPageWithData() { + allowDMLearningPageCallOnChangeLists = false; allowDMLearningPageToSetItems = false; + ui->dml_lw_question->clear(); ui->dml_lw_answer->clear(); + allowDMLearningPageCallOnChangeLists = true; allowDMLearningPageToSetItems = true; + + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + if(SM.item->schemeType != stLEARNING) return; + ui->dml_lb_title->setText("Модуль данных - контроль знаний\n"+SM.getNodeText("content.learning.learningAssessment.title")); + + allowDMLearningPageCallOnChangeLists = false; allowDMLearningPageToSetItems = false; + QDomNode lcInteractionNode, questNode; + QString questStr = ""; + QListWidgetItem *questItem; + QDomElement descriptionNode; + + if(!SM.isNodeCreated("content.learning")) SM.createNode("content","learning"); + if(!SM.isNodeCreated("content.learning.learningAssessment")) { + SM.createNode("content.learning","learningAssessment"); + } + QDomNode learningAssessment = SM.findElement("content.learning.learningAssessment"); + + for(int i=0;isetFlags(questItem->flags() | Qt::ItemIsEditable); + ui->dml_lw_question->addItem(questItem); + } + + allowDMLearningPageCallOnChangeLists = true; allowDMLearningPageToSetItems = true; + ui->dml_lw_question->setCurrentRow(0); +} + +void EditorMainWindow::on_dml_lw_question_currentRowChanged(int) { + if(!allowDMLearningPageCallOnChangeLists) return; + allowDMLearningPageCallOnChangeLists = false; allowDMLearningPageToSetItems = false; + ui->dml_lw_answer->clear(); + QString asnwerText; + QListWidgetItem *answerItem; + + int curQuestInter = getlcInteractionFromQuestRow(ui->dml_lw_question->currentRow()); + QDomNode questNode = SM.findElement("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]").firstChild(); + + for(int j=0;jsetFlags(answerItem->flags() | Qt::ItemIsUserCheckable | Qt::ItemIsEditable); + if(SM.isNodeCreated("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]."+questNode.nodeName()+".lcAnswerOptionGroup.lcAnswerOption["+QString::number(j)+"].lcCorrectResponse")) + answerItem->setCheckState(Qt::Checked); + else + answerItem->setCheckState(Qt::Unchecked); + ui->dml_lw_answer->addItem(answerItem); + } + allowDMLearningPageCallOnChangeLists = true; allowDMLearningPageToSetItems = true; +} + +void EditorMainWindow::on_dml_lw_question_itemChanged(QListWidgetItem *item) { + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + if(!allowDMLearningPageCallOnChangeLists) return; + if(!allowDMLearningPageToSetItems) return; + if(ui->dml_lw_question->currentItem() != item) return; + int curQuestInter = getlcInteractionFromQuestRow(ui->dml_lw_question->currentRow()); + if(curQuestInter == -1) return; + + QDomNode questNode = SM.findElement("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]").firstChild(); + QDomNode description = SM.findElement("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]."+ + questNode.nodeName()+".lcQuestion.description"); + while(description.childNodes().count() > 0) + description.removeChild(description.firstChild()); + QStringList paraList = item->text().split("#"); + QDomNode para; + foreach(QString paraText, paraList) { + para = SM.item->doc.createElement("para"); + para.appendChild(SM.item->doc.createTextNode("")); + para.firstChild().toText().setData(paraText); + description.appendChild(para); + } + setIsModifyed(true); +} + +void EditorMainWindow::on_dml_lw_answer_itemChanged(QListWidgetItem *answerItem) +{ + if(ui->treeWidget->currentItem() == nullptr) return; + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + if(!allowDMLearningPageCallOnChangeLists) return; + if(!allowDMLearningPageToSetItems) return; + ui->dml_lw_answer->setCurrentItem(answerItem); + int curQuestInter = getlcInteractionFromQuestRow(ui->dml_lw_question->currentRow()); + + QDomNode questNode = SM.findElement("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]").firstChild(); + QDomNode para = SM.findElement("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]."+ + questNode.nodeName()+".lcAnswerOptionGroup.lcAnswerOption["+QString::number(ui->dml_lw_answer->currentRow())+"]."+ + "lcAnswerOptionContent.description.para"); + if(para.isNull()) { + if(DBG) qDebug() << "answer_itemChanged: para is NULL" << questNode.nodeName() << curQuestInter << ui->dml_lw_answer->currentRow(); + return; + } + para.firstChild().toText().setData(answerItem->text()); + bool lcCorrectResponseCreated = SM.isNodeCreated("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]."+ + questNode.nodeName()+".lcAnswerOptionGroup.lcAnswerOption["+QString::number(ui->dml_lw_answer->currentRow())+"].lcCorrectResponse"); + if(answerItem->checkState() == Qt::Checked) { + if(!lcCorrectResponseCreated) + SM.createNode("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]."+ + questNode.nodeName()+".lcAnswerOptionGroup.lcAnswerOption["+QString::number(ui->dml_lw_answer->currentRow())+"]", "lcCorrectResponse"); + } else { + if(lcCorrectResponseCreated) + SM.deleteNode("content.learning.learningAssessment.lcInteraction["+QString::number(curQuestInter)+"]."+ + questNode.nodeName()+".lcAnswerOptionGroup.lcAnswerOption["+QString::number(ui->dml_lw_answer->currentRow())+"].lcCorrectResponse"); + } + + int checkedAnswersCnt = 0; + for(int k=0;kdml_lw_answer->currentRow())+"]", "lcCorrectResponse"); + allowDMLearningPageCallOnChangeLists=false; answerItem->setCheckState(Qt::Checked); allowDMLearningPageCallOnChangeLists = true; + checkedAnswersCnt++; + } + if(checkedAnswersCnt == 1) questNode.toElement().setTagName("lcSingleSelect"); + if(checkedAnswersCnt > 1) questNode.toElement().setTagName("lcMultipleSelect"); + + setIsModifyed(true); +} + +int EditorMainWindow::getlcInteractionFromQuestRow(int row) { + QDomNode questNode; + int tmpRow=-1; + for(int i=0;itreeWidget->currentItem() == nullptr) return; +// SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); +// if(SM.item->moduleType != mtDM) return; +// if(SM.item->schemeType != stDESCRIPT && SM.item->schemeType != stCREW) return; + + + if(isProjectModifyed) { + QMessageBox msgBox; + msgBox.setText("Сохранить изменения?"); + msgBox.setWindowTitle("Проект изменен"); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Save); + msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); + int ret = msgBox.exec(); + switch (ret) { + case QMessageBox::Yes: + Save(); + if(isProjectModifyed) return; + case QMessageBox::No: + break; + case QMessageBox::Cancel: + return; + } + } + + QString fileName; + QFileInfo info1(config.lastOpenedFile); + fileName = QFileDialog::getOpenFileName(this, tr("Выберите файл сценария в формате LyX"), info1.absolutePath(), tr("*.lyx")); + + if(fileName == "") return; + //import, delete after debug + //fileName = "F:/C++/build-S1000DEditor-Desktop_Qt_5_15_2_MinGW_64_bit-Debug/Test/LyX/auk-05_mi-38.lyx"; + + openLyXFile(fileName); +} + +void EditorMainWindow::openLyXFile(QString fileName) { + if(fileName == "") return; + + this->setWindowTitle("Конвертер АУК "+version+" - " + fileName); + ui->actionAddDM->setEnabled(true); ui->actionAddPM->setEnabled(true); + isProjectOpened = true; + setIsModifyed(false); + SM.rootLyXfile = fileName; + SM.packages.clear(); SM.timeConvert = SM.timeS1000D = SM.timeSCORM = 0; + + splash->Reset(); splash->show(); splash->repaint(); + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + QApplication::processEvents(); + QElapsedTimer timer; timer.start(); + + lyx.Import(&SM, fileName, splash); + html.Generate(&SM, false, splash); + splash->Reset(); splash->SetTitle("Загрузка пакетов..."); + SM.LoadPackagesXML(); + + SM.timeConvert = (int)timer.elapsed()/1000; + splash->Reset(); splash->SetTitle("Сохранение..."); + QApplication::processEvents(); + + //setIsModifyed(true); + fillTreeWidgetWithItems(); + ui->treeWidget->setCurrentItem(ui->treeWidget->topLevelItem(0)); + + + Save(); + + splash->hide(); + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); + + config.lastOpenedFile = fileName; + QFile cfgFile(qApp->applicationDirPath()+"/config.txt"); + if (cfgFile.open(QFile::ReadWrite | QFile::Text)) { + QString cfg = "lastOpenedFile="+config.lastOpenedFile; + cfgFile.write(cfg.toStdString().c_str()); + cfgFile.resize(cfgFile.pos()); + } + cfgFile.close(); + //updateTreeWidgetNames(); +} + + + +// QDialog *LyXDialog; QListWidget* LyXLog; +// LyXLog = new QListWidget(this); +// LyXLog->setFixedHeight(800); LyXLog->setFixedWidth(1000); +// LyXLog->setObjectName("LyXDialogList"); +// QFont logFont("Courier", 8); LyXLog->setFont(QFont(logFont)); +// QPushButton* logDialogCloseButton = new QPushButton(tr("Закрыть"), this); +// logDialogCloseButton->setDefault(true); +// LyXDialog = new QDialog(this); +// QVBoxLayout *logDialogLayout = new QVBoxLayout(LyXDialog); +// logDialogLayout->setMargin(5); logDialogLayout->setSpacing(6); LyXDialog->setWindowTitle(QString("Log")); +// logDialogLayout->addWidget(LyXLog); logDialogLayout->addWidget(logDialogCloseButton); +// connect(logDialogCloseButton, SIGNAL(clicked()), LyXDialog, SLOT(close())); +// LyXDialog->setLayout(logDialogLayout); + +// QString s; +// for(int i=0;iaddItem(s); continue; } +// if(s.at(0) == "!" || s.at(0) == "#") s = s.mid(1); +// LyXLog->addItem(s); +// if(LyXLogList.at(i).at(0) == "#") +// LyXLog->item(LyXLog->count()-1)->setTextColor(QColor(150,150,150)); +// if(LyXLogList.at(i).at(0) == "!") +// LyXLog->item(LyXLog->count()-1)->setTextColor(QColor(100,0,0)); +// } + //config.lastOpenedDir = QFileInfo(fileName).absolutePath(); +// LyXDialog->exec(); + +void EditorMainWindow::on_action_refreshFromLyX_triggered() +{ + if(config.lastOpenedFile == "") return; + if(QFileInfo::exists(config.lastOpenedFile)) + openLyXFile(config.lastOpenedFile); + else { + QApplication::beep(); + config.lastOpenedFile = ""; + } +} + + +void EditorMainWindow::on_actionOpenInBrowser_triggered() +{ + if(SM.item == nullptr) return; + if(SM.item->moduleType == mtPM) return; + if(SM.item->schemeType == stLEARNING) return; + + QString htmlFileName = SM.projectPath + "/" + SM.item->fileName.replace(".xml", ".html"); + QDesktopServices::openUrl(QUrl("file:///"+htmlFileName, QUrl::TolerantMode)); +} + +void EditorMainWindow::on_actionExit_triggered() +{ + this->close(); +} + +void EditorMainWindow::on_S1000D_doc_dmc_linkActivated(const QString &link) // &link +{ + QDesktopServices::openUrl(QUrl("file:///"+QCoreApplication::applicationDirPath()+"/Docs/S1000D_Issue_4.1.pdf", QUrl::TolerantMode)); +} + +void EditorMainWindow::on_label_33_linkActivated(const QString &link) +{ + QDesktopServices::openUrl(QUrl("file:///"+QCoreApplication::applicationDirPath()+"/Docs/infoCodes.txt", QUrl::TolerantMode)); +} +void EditorMainWindow::on_label_34_linkActivated(const QString &link) +{ + QDesktopServices::openUrl(QUrl("file:///"+QCoreApplication::applicationDirPath()+"/Docs/S1000D_Issue_4.1.pdf", QUrl::TolerantMode)); +} + +void EditorMainWindow::on_action_regenHTML_triggered() +{ + splash->Reset(); splash->show(); + splash->SetTitle("Генерация HTML..."); + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + QApplication::processEvents(); + + html.Generate(&SM, false, splash); + splash->Reset(); splash->SetTitle("Сохранение..."); + QApplication::processEvents(); + Save(); + + splash->hide(); + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); +} + +bool EditorMainWindow::isCodingFilled() { + tmpIntList.clear(); tmpStrList.clear(); + if(ui->treeWidget->topLevelItemCount() == 0) return false; + for(int i=0;itreeWidget->topLevelItemCount();i++) + if(!isCodingFilledRecurs(ui->treeWidget->topLevelItem(i))) + return false; + return true; +} + +bool EditorMainWindow::isCodingFilledRecurs(QTreeWidgetItem* treeitem) { + int ind = treeitem->data(0, Qt::UserRole).toInt(); + SM.setCurItem(ind); + + QString fCode, title; + if(SM.item->moduleType == mtPM) { + QString pmTitle, modelIdentCode, pmIssuer, pmNumber, pmVolume; + title = pmTitle = SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); + modelIdentCode = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode"); + pmIssuer = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer"); + pmNumber = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmNumber"); + pmVolume = SM.getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmVolume"); + if(pmTitle.isEmpty() || delYYY(pmIssuer).isEmpty() || delYYY(pmNumber).isEmpty() || delYYY(pmVolume).isEmpty()) { + ui->treeWidget->setCurrentItem(treeitem); + QApplication::beep(); + return false; + } + fCode = SM.pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + } + + if(SM.item->moduleType == mtDM) { + QString modelIdentCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode"); + QString systemDiffCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemDiffCode"); + QString systemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemCode"); + QString subSystemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSystemCode"); + QString subSubSystemCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSubSystemCode"); + QString assyCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "assyCode"); + QString disassyCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCode"); + QString disassyCodeVariant = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCodeVariant"); + QString infoCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCode"); + QString infoCodeVariant = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCodeVariant"); + QString itemLocationCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "itemLocationCode"); + QString learnCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnCode"); + QString learnEventCode = SM.getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnEventCode"); + QString techName = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); + //QString infoName = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName"); + if(delYYY(modelIdentCode).isEmpty() || delYYY(systemDiffCode).isEmpty() || delYYY(systemCode).isEmpty() || delYYY(subSystemCode).isEmpty() || delYYY(subSubSystemCode).isEmpty() || + delYYY(assyCode).isEmpty() || delYYY(disassyCode).isEmpty() || delYYY(disassyCodeVariant).isEmpty() || delYYY(infoCode).isEmpty() || delYYY(infoCodeVariant).isEmpty() || + delYYY(itemLocationCode).isEmpty() || delYYY(learnCode).isEmpty() || delYYY(learnEventCode).isEmpty() || delYYY(techName).isEmpty() ) { + ui->treeWidget->setCurrentItem(treeitem); + QApplication::beep(); + return false; + } + title = techName; + fCode = SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + } + + int tmpInd = tmpStrList.indexOf(fCode); + if(tmpInd != -1) { + SM.setCurItem(tmpIntList[tmpInd]); + QString title2; + if(SM.item->moduleType == mtDM) + title2 = SM.getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); + else + title2 = SM.getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); + ui->treeWidget->setCurrentItem(treeitem); + QApplication::beep(); + QMessageBox::critical(this,"Ошибка","Дублирование кодов публикаций/модулей: \n - \""+title+"\"\n - \""+title2+"\"",QMessageBox::Ok); + return false; + } + tmpStrList.append(fCode); tmpIntList.append(ind); + + for(int i=0;ichildCount();i++) + if(!isCodingFilledRecurs(treeitem->child(i))) + return false; + return true; +} + +void EditorMainWindow::fillDefaultCoding() { + dmCnt = pmCnt = 0; + for(int i=0;itreeWidget->topLevelItemCount();i++) + fillDefaultCodingRecurs(ui->treeWidget->topLevelItem(i)); +} + +void EditorMainWindow::fillDefaultCodingRecurs(QTreeWidgetItem* treeitem) { + int ind = treeitem->data(0, Qt::UserRole).toInt(); + SM.setCurItem(ind); + + QString fCode, title; + if(SM.item->moduleType == mtPM) { + SM.setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode", QString::number(pmCnt++)); + SM.setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer", "ORIG"); + SM.setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmNumber", "GTC00"); + SM.setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmVolume", "00"); + SM.item->fileCode = SM.pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + } + + if(SM.item->moduleType == mtDM) { + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode", "DinamikaEDoc"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemDiffCode", "A"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemCode", "00"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSystemCode", "0"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSubSystemCode", QString::number(dmCnt++)); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "assyCode", "00"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCode", "00"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCodeVariant", "A"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCode", "010"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCodeVariant", "A"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "itemLocationCode", "A"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnCode", "T40"); + SM.setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnEventCode", "C"); + SM.item->fileCode = SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + } + + for(int i=0;ichildCount();i++) + fillDefaultCodingRecurs(treeitem->child(i)); + +} + +void EditorMainWindow::on_action_Export_triggered() +{ + if(!isCodingFilled()) { + QMessageBox msgBox; + msgBox.setText("Заполнить значениями из раздела \"Общая информация и данные\"?\nВнимание: будет заменена кодировка во всех модулях."); + msgBox.setWindowTitle("Кодировка S1000D не заполнена"); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); + msgBox.setDefaultButton(QMessageBox::Yes); + msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); + if(msgBox.exec() == QMessageBox::Yes) + fillDefaultCoding(); + else + return; + } + + for(int i=0; itreeWidget->topLevelItemCount();i++) + fillItemsFromTreeWidget(-1, ui->treeWidget->topLevelItem(i)); + for(int i=0;imoduleType != mtPM) + SM.item->fileCode = SM.dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + else + SM.item->fileCode = SM.pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + } + + QString title = SM.items[ ui->treeWidget->topLevelItem(0)->data(0, Qt::UserRole).toInt() ].doc.namedItem("pm").namedItem("rdf:Description").attributes().namedItem("atc").nodeValue(); + if(title == "") + title = SM.items[ ui->treeWidget->topLevelItem(0)->data(0, Qt::UserRole).toInt() ].doc.namedItem("pm").namedItem("identAndStatusSection").namedItem("pmAddress").namedItem("pmAddressItems").namedItem("pmTitle").childNodes().at(0).nodeValue(); + exportDlg->setPackTitle(title); + QString fCode = SM.items[ ui->treeWidget->topLevelItem(0)->data(0, Qt::UserRole).toInt() ].fileCode; + exportDlg->setPackName(fCode.left(fCode.length()-7)); + QFileInfo info(SM.items[ ui->treeWidget->topLevelItem(0)->data(0, Qt::UserRole).toInt() ].importedFromLyX); + exportDlg->setPackDir(info.absolutePath()); + exportDlg->fillTree(ui->treeWidget); + exportDlg->fillPackageList(); + if(SM.packages.count() > 0) + exportDlg->setPackageListIndex(0); + exportDlg->exec(); +} + +// ---------------------------------------------- S1000D ------------------------------------------------- + +void EditorMainWindow::exportS1000D() { + if(SM.items.count() == 0) return; + QString dirName = exportDlg->getPackDir(); + QString packName = exportDlg->getPackName(); + QString packTitle = exportDlg->getPackTitle(); + if (packName == "") { + QMessageBox::critical(this,"Ошибка","Задайте имя пакета.",QMessageBox::Ok); + return; + } + QDir dir = QDir(dirName); + if (!dir.exists()) { + QMessageBox::critical(this,"Ошибка","Папка "+dirName+" не найдена.",QMessageBox::Ok); + return; + } + if(QFile::exists(dirName+"/"+packName+".zip")) { + QMessageBox msgBox; + msgBox.setText("Файл "+dirName+"/"+packName+".zip уже существует. Перезаписать?"); + msgBox.setWindowTitle("S1000D"); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); + msgBox.setDefaultButton(QMessageBox::Yes); + msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); + msgBox.setIcon(QMessageBox::Question); + int ret = msgBox.exec(); + switch (ret) { + case QMessageBox::Yes: + break; + case QMessageBox::No: + return; + case QMessageBox::Cancel: + return; + } + } + + splash->Reset(); splash->show(); + splash->SetTitle("Формирование пакета S1000D..."); + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + QApplication::processEvents(); + + + QTreeWidget* dlgTree = exportDlg->getDlgTreeWidget(); + for(int i=0;i childList; + for(int i=0;itopLevelItemCount();i++) + childList.append(dlgTree->topLevelItem(i)); + while(!childList.isEmpty()) { + QTreeWidgetItem* item = childList.takeFirst(); + if(item->checkState(0) == Qt::Checked) + SM.items[item->data(0, Qt::UserRole).toInt()].toExport = true; + for(int i=0;ichildCount();i++) + childList.append(item->child(i)); + } + + int ind = dlgTree->topLevelItem(0)->data(0, Qt::UserRole).toInt(); + QDomNode descr = SM.items[ind].doc.namedItem("pm").namedItem("rdf:Description"); + if(descr.isNull()) { + descr = SM.items[ind].doc.createElement("rdf:Description"); + SM.items[ind].doc.namedItem("pm").appendChild(descr); + } + descr.toElement().setAttribute("atc", packTitle); + + bool res = SM.exportS1000D(dirName, packName, packTitle, splash); + if(res) + exportDlg->setS1000Dlabel("Успешно", "green"); + else + exportDlg->setS1000Dlabel("Не выполнено", "red"); + + +} + +// ---------------------------------------------- SCORM ------------------------------------------------- + +void EditorMainWindow::exportSCORM() { + if(SM.items.count() == 0) return; + QString dirName = exportDlg->getPackDir(); + QString packName = exportDlg->getPackName(); + QString packTitle = exportDlg->getPackTitle(); + if (packName == "") { + QMessageBox::critical(this,"Ошибка","Задайте имя пакета.",QMessageBox::Ok); + return; + } + QDir dir = QDir(dirName); + if (!dir.exists()) { + QMessageBox::critical(this,"Ошибка","Папка "+dirName+" не найдена.",QMessageBox::Ok); + return; + } + + if(QFile::exists(dirName+"/"+packName+"_SCORM.zip")) { + QMessageBox msgBox; + msgBox.setText("Файл "+dirName+"/"+packName+"_SCORM.zip уже существует. Перезаписать?"); + msgBox.setWindowTitle("SCORM"); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); + msgBox.setDefaultButton(QMessageBox::Yes); + msgBox.setWindowIcon(QIcon(":new/Icons/doc_config.png")); + msgBox.setIcon(QMessageBox::Question); + int ret = msgBox.exec(); + switch (ret) { + case QMessageBox::Yes: + break; + case QMessageBox::No: + return; + case QMessageBox::Cancel: + return; + } + } + + splash->Reset(); splash->show(); + splash->SetTitle("Формирование SCORM-пакета..."); + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + QApplication::processEvents(); + + QTreeWidget* dlgTree = exportDlg->getDlgTreeWidget(); + for(int i=0;i childList; + for(int i=0;itopLevelItemCount();i++) + childList.append(dlgTree->topLevelItem(i)); + while(!childList.isEmpty()) { + QTreeWidgetItem* item = childList.takeFirst(); + if(item->checkState(0) == Qt::Checked) + SM.items[item->data(0, Qt::UserRole).toInt()].toExport = true; + for(int i=0;ichildCount();i++) + childList.append(item->child(i)); + } + + int ind = dlgTree->topLevelItem(0)->data(0, Qt::UserRole).toInt(); + QDomNode descr = SM.items[ind].doc.namedItem("pm").namedItem("rdf:Description"); + if(descr.isNull()) { + descr = SM.items[ind].doc.createElement("rdf:Description"); + SM.items[ind].doc.namedItem("pm").appendChild(descr); + } + descr.toElement().setAttribute("atc", packTitle); + + bool res = SM.exportSCORM(dirName, packName, packTitle, splash); + if(res) + exportDlg->setSCORMlabel("Успешно", "green"); + else + exportDlg->setSCORMlabel("Не выполнено", "red"); + +} + +// ---------------------------------------------- EDL ------------------------------------------------- + +void EditorMainWindow::exportEDL() { + if(SM.items.count() == 0) return; + QString dirName = exportDlg->getPackDir(); + QString packName = exportDlg->getPackName(); + QString packTitle = exportDlg->getPackTitle(); + int EDType = exportDlg->getEDType(); + + if (packName == "") { + QMessageBox::critical(this,"Ошибка","Задайте имя пакета.",QMessageBox::Ok); + return; + } + if (EDType == -1) { + QMessageBox::warning(this,"Предупреждение","Выберите тип электронного документа.",QMessageBox::Ok); + return; + } + if (EDType == 2 || EDType == 5) { // 2 - Формуляр, 5 - Каталог изделия + QMessageBox::warning(this,"Ошибка","Формирование выбранного типа электронного документа в данной версии не реализовано.",QMessageBox::Ok); + return; + } + QDir dir = QDir(dirName); + if (!dir.exists()) { + QMessageBox::critical(this,"Ошибка","Папка "+dirName+" не найдена.",QMessageBox::Ok); + return; + } + dir = QDir(dirName+"/"+packName); + if(dir.exists()) + dir.removeRecursively(); + dir.mkpath(dirName+"/"+packName); + + splash->Reset(); splash->show(); + splash->SetTitle("Формирование книги электронной библиотеки..."); + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + QApplication::processEvents(); + + QTreeWidget* dlgTree = exportDlg->getDlgTreeWidget(); + for(int i=0;i childList; + for(int i=0;itopLevelItemCount();i++) + childList.append(dlgTree->topLevelItem(i)); + while(!childList.isEmpty()) { + QTreeWidgetItem* item = childList.takeFirst(); + if(item->checkState(0) == Qt::Checked) + SM.items[item->data(0, Qt::UserRole).toInt()].toExport = true; + for(int i=0;ichildCount();i++) + childList.append(item->child(i)); + } + + int ind = dlgTree->topLevelItem(0)->data(0, Qt::UserRole).toInt(); + QDomNode descr = SM.items[ind].doc.namedItem("pm").namedItem("rdf:Description"); + if(descr.isNull()) { + descr = SM.items[ind].doc.createElement("rdf:Description"); + SM.items[ind].doc.namedItem("pm").appendChild(descr); + } + descr.toElement().setAttribute("atc", packTitle); + + bool res = SM.exportEDL(dirName, packName, packTitle, EDType, splash); + if(res) + exportDlg->setEDLlabel("Успешно", "green"); + else + exportDlg->setEDLlabel("Не выполнено", "red"); +} + +// ---------------------------------------------- Single SCORM ------------------------------------------------- + +void EditorMainWindow::exportSingleSCORM() { + if(SM.items.count() == 0) return; + QString dirName = exportDlg->getPackDir(); + QString packName = exportDlg->getPackName(); + QString packTitle = exportDlg->getPackTitle(); + + QDir dir = QDir(dirName); + if (!dir.exists()) { + QMessageBox::critical(this,"Ошибка","Папка "+dirName+" не найдена.",QMessageBox::Ok); + return; + } + + dir = QDir(dirName+"/"+packName); + if(dir.exists()) + dir.removeRecursively(); + dir.mkpath(dirName+"/"+packName); + + splash->Reset(); splash->show(); + splash->SetTitle("Формирование единого пакета SCORM (для всех категорий обучаемых)..."); + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + QApplication::processEvents(); + + QTreeWidget* dlgTree = exportDlg->getDlgTreeWidget(); + for(int i=0;itopLevelItem(0)->data(0, Qt::UserRole).toInt(); + QDomNode descr = SM.items[ind].doc.namedItem("pm").namedItem("rdf:Description"); + if(descr.isNull()) { + descr = SM.items[ind].doc.createElement("rdf:Description"); + SM.items[ind].doc.namedItem("pm").appendChild(descr); + } + descr.toElement().setAttribute("atc", packTitle); + + bool res = SM.exportSingleSCORM(dirName, packName, packTitle, splash); + if(res) + exportDlg->setSingleSCORMlabel("Успешно", "green"); + else + exportDlg->setSingleSCORMlabel("Не выполнено", "red"); + +} + +// +// КОНТРОЛЬ ЗНАНИЙ +// +// РЕГИСТРАТОР ПОЛЕТНЫХ ДАННЫХ - ОПИСАНИЕ И РАБОТА +// +// +// РЕГИСТРАТОР ПОЛЕТНЫХ ДАННЫХ - пример +// +// + +// +// +// +// +// + +//
    +// Показать +// NOT +// ИМВС +// NOT +// onmousemove="showTooltipImg(evt, 'inline.svg');" + + + +void EditorMainWindow::on_dmc_btn_Qual_clicked(bool checked) +{ + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + SM.item->isQualifyed = checked; + setIsModifyed(true); + updateTreeWidgetNames(); +} + +void EditorMainWindow::on_pmc_btn_Qual_clicked(bool checked) +{ + SM.setCurItem(ui->treeWidget->currentItem()->data(0, Qt::UserRole).toInt()); + SM.item->isQualifyed = checked; + setIsModifyed(true); + updateTreeWidgetNames(); +} + + diff --git a/s1000d/Converter_Source/editormainwindow.h b/s1000d/Converter_Source/editormainwindow.h new file mode 100644 index 0000000..c2cf91e --- /dev/null +++ b/s1000d/Converter_Source/editormainwindow.h @@ -0,0 +1,211 @@ +#ifndef EDITORMAINWINDOW_H +#define EDITORMAINWINDOW_H + +#include +#include +#include +#include "s1000d_manager.h" +#include "ru_const.h" +#include "lyx.h" +#include "html.h" +#include "exportdialog.h" +#include "splashform.h" +#include +#include +#include + +QT_BEGIN_NAMESPACE +namespace Ui { class EditorMainWindow; } +QT_END_NAMESPACE + + +// figure 552 +class EditorMainWindow : public QMainWindow +{ + Q_OBJECT + +public: + QString version = "вер. 1.18b"; + EditorMainWindow(QWidget *parent = nullptr); + ~EditorMainWindow(); + + bool isProjectOpened; + bool isProjectModifyed; + S1000D_Manager SM; + LyX lyx; + HTML html; + RU_Const ru_const; + struct { QString lastOpenedFile; } config; + QDialog *logDialog; QListWidget* logDialogList; + SplashForm* splash; + ExportDialog* exportDlg; + + int bugCnt=0; + QIcon iconFolder = QIcon(":new/Icons/folder.png"); + QIcon iconFolder_ex = QIcon(":new/Icons/folder_exclamation.png"); + QIcon iconDoc_head_blue = QIcon(":new/Icons/doc_head_blue.png"); + QIcon iconDoc_head_blue_ex = QIcon(":new/Icons/doc_head_blue_exclamation.png"); + QIcon iconSheep_up_arrow = QIcon(":/new/Icons/sheep_up_arrow.png"); + bool DBG=true; + bool allowCodePageToSetItems = true; + bool allowCodePageToCallOnChangeComboBox = true; + bool allowDMCodePageToSetItems = true; + bool allowDMCodePageCallOnChangeComboBox = false; + bool allowDMLearningPageToSetItems = true; + bool allowDMLearningPageCallOnChangeLists = true; + bool isClearing = false; + QStringList tmpStrList; + QList tmpIntList; + + void openLyXFile(QString fileName); + void Save(); + + bool event(QEvent*); + bool eventFilter(QObject* obj, QEvent* ev); + void setIsModifyed(bool flag); + void fillTreeWidgetWithItems(); + QList makeTreeWidgetFromItems(QTreeWidgetItem *parent, QList list); + void updateTreeWidgetNames(); + void updateTreeWidgetNamesRecurs(QTreeWidgetItem *node); + void fillItemsFromTreeWidget(int parentInd, QTreeWidgetItem *node); + void treeWidgetNormalizeDMsAfterDrop(QTreeWidgetItem *node); + QTreeWidgetItem* getTreeWidgetItemByItemIndexRecurs(int itemInd, QTreeWidgetItem *node); + QTreeWidgetItem* getTreeWidgetItemByItemIndex(int itemInd); + QString delYYY(QString st); + void fillLearningPageWithData(); + int getlcInteractionFromQuestRow(int row); + bool isCodingFilled(); + bool isCodingFilledRecurs(QTreeWidgetItem* treeitem); + void fillDefaultCoding(); + void fillDefaultCodingRecurs(QTreeWidgetItem* treeitem); + int pmCnt, dmCnt; + + Q_SLOT void exportS1000D(); + Q_SLOT void exportSCORM(); + Q_SLOT void exportSingleSCORM(); + Q_SLOT void exportEDL(); + +private slots: + void on_actionOpenFolder_triggered(); + void on_treeWidget_itemSelectionChanged(); + void on_actionAddPM_triggered(); + void on_actionAddDM_triggered(); + void on_splitter_splitterMoved(int pos, int index); + void on_actionSwitchToCodingPage_triggered(); + void on_actionSwitchToDataPage_triggered(); + void on_actionSaveProject_triggered(); + + void pmc_btn_pmIssuerPressed(); + void pmc_btn_modelIdentCodePressed(); + void pmc_cb_pmNumABC_Changed(int ind); + void pmc_cb_pmNum_Changed(int ind); + void pmc_cb_pmVolume_Changed(int ind); + void codePagePM_TitleChanged(); + void codePagePM_EditChanged(QString newText); + void codePageDM_TitleChanged(); + void codePageDM_EditChanged(QString newText); + + void on_actionDeleteItem_triggered(); + void on_dmc_btnBox_IsLearningDM_clicked(QAbstractButton *button); + void on_dmc_cb_InfoSets_currentIndexChanged(int index); + void on_dml_btnBox_question_clicked(QAbstractButton *aButton); + void on_dml_btnBox_answer_clicked(QAbstractButton *aButton); + void on_dml_lw_question_currentRowChanged(int newRow); + void on_dml_lw_question_itemChanged(QListWidgetItem *item); + void on_dml_lw_answer_itemChanged(QListWidgetItem *item); + void on_actionLyXImport_triggered(); + void on_action_refreshFromLyX_triggered(); + void on_actionOpenInBrowser_triggered(); + void on_actionExit_triggered(); + + void on_S1000D_doc_dmc_linkActivated(const QString &link); + void on_label_33_linkActivated(const QString &link); + void on_action_regenHTML_triggered(); + void on_action_Export_triggered(); + void on_label_34_linkActivated(const QString &link); + void on_dmc_btn_Qual_clicked(bool checked); + void on_pmc_btn_Qual_clicked(bool checked); + + void treeWidgetDrop(); + + +private: + Ui::EditorMainWindow *ui; + void resizeEvent(QResizeEvent*); +}; +#endif // EDITORMAINWINDOW_H + +/* + + + © 2017 АО «Вертолеты России» + +АО «ВСК» + + +Наименование компании-разработчика + + + + +Ссылки на модули данных [с BRDP-S1-00102 по BRDPS1- +00104, BRDP-S1-00107] +Использование атрибутов ссылок на модули данных dmRef: +- applicRefId — не обязательный +- id — запрещен +- changeMark, changeType, reasonForUpdateRefIds — запрещены +- referredFragment — запрещен +- securityClassification, commercialClassification — запрещены +- authorityName, authorityDocument — запрещены +Использование дочерних элементов элемента dmRef: +- behavior — запрещен +- issueInfo — запрещен +- language — запрещен +- dmTitle — обязательный +- issueDate — запрещен + +Использование заголовков [BRDP-S1-00118, BRDP-S1-00120] +Контексты использования элемента title: +- элемент levelledPara — не обязательно, можно включать в уровнях с 6 по 8 +- элемент table — обязательно +- элемент multimedia — обязательно +- элемент proceduralStep — не обязательно, можно включать в уровнях с 6 по 8 + +Использование иллюстраций и активных участков/хотспотов +[BRDP-S1-00125, BRDP-S1-00132] +Использование атрибутов элемента hotspot: +- applicRefId — не обязательный +- id — обязательный +- changeMark, changeType, reasonForUpdateRefIds — запрещены +- applicationStructureIdent — обязательный (уникальный идентификатор в SVG) +- applicationStructureName — обязательный (например, обозначение выноски 1,2,3 или +обозначение) +- hotspotType — обязательный (callout — выноска, detail — контур детали/элемента) +- hotspotTitle — обязательный +- objectDescr — не обязательный +- objectCoordinates — запрещен +- visibility — не обязательный +- securityClassification, commercialClassification, caveat — запрещены + +BRDP-S1-00133] +9.1 Объявление мультимедийного объекта +Использование вложенных элементов multimedia: +- title — обязательный +Использование атрибутов элемента multimediaObject: +- fullscreen — запрещен +- multimediaObjectWidth — необязательный +- autoPlay — запрещен +- multimediaObjectHeight — необязательный +- multimediaType — обязательный +- runTimeDuration — запрещен +- showPluginControls — запрещен +Указание типа мультимедийного объекта выполняется с использованием атрибута +multimediaType и элемента parameter, смотри (Таблица 10). +Наличие одного элемента parameter обязательно, недопустимы 2 или более +элементов parameter c атрибутом parameterIdent=”contenttype”. +Таблица 10 Использование мультимедийных объектов. Идентификация типа объекта + + + */ diff --git a/s1000d/Converter_Source/editormainwindow.ui b/s1000d/Converter_Source/editormainwindow.ui new file mode 100644 index 0000000..73901e6 --- /dev/null +++ b/s1000d/Converter_Source/editormainwindow.ui @@ -0,0 +1,2489 @@ + + + EditorMainWindow + + + + 0 + 0 + 1024 + 888 + + + + + 1024 + 400 + + + + Редактор АУК в формате S1000D + + + + :/new/Icons/doc_config.png:/new/Icons/doc_config.png + + + + + 1024 + 300 + + + + + + + + 0 + 0 + + + + ArrowCursor + + + false + + + Qt::Horizontal + + + + + 210 + 300 + + + + + 8 + + + + true + + + QAbstractItemView::NoEditTriggers + + + true + + + QAbstractItemView::InternalMove + + + Qt::MoveAction + + + + 32 + 32 + + + + true + + + 1 + + + + 1 + + + + + + + 0 + 0 + + + + + 700 + 0 + + + + + Segoe UI + 14 + + + + + + + QFrame::StyledPanel + + + 1 + + + + background-color: white; + + + + + + 9 + + + 9 + + + 9 + + + 9 + + + + + background-color: white; + + + + + + :/new/Icons/logo.png + + + Qt::AlignCenter + + + + + + + + Times New Roman + 14 + + + + background-color: white; + + + Для начала работы откройте файл сценария в формате LyX + + + Qt::AlignHCenter|Qt::AlignTop + + + + + + + + + + + 0 + 0 + + + + + Times New Roman + 14 + + + + false + + + background-color: white; + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 9 + + + 9 + + + 9 + + + 9 + + + + + + 0 + 30 + + + + + 30 + 16777215 + + + + + Times New Roman + 10 + + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Номер тома публикации + + + + + + + + Times New Roman + 12 + + + + Номер темы + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + + Times New Roman + 12 + + + + Код публикации + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 10 + + + + + + + + + Times New Roman + 12 + 75 + true + + + + QLabel { color : blue; } + + + Кодирование в соответствии с рекомендациями + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Идентификационный код модели + + + + + + + + Times New Roman + 12 + + + + Титул + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + Qt::Horizontal + + + + + + + + 80 + 16777215 + + + + + Times New Roman + 12 + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + + 0 + 30 + + + + + Times New Roman + 10 + + + + 20 + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + + Times New Roman + 12 + + + + Код компании-эмитента + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 10 + + + + + + + + + Times New Roman + 12 + + + + Номер тома публикации (цифры) + + + + + + + + 0 + 30 + + + + + 150 + 16777215 + + + + + Times New Roman + 10 + + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Номер темы + + + + + + + Qt::Vertical + + + + 20 + 2000 + + + + + + + + + 150 + 16777215 + + + + + Times New Roman + 12 + + + + + + + + + + + + Times New Roman + 12 + + + + Код компании-эмитента + + + + + + + + 0 + 30 + + + + + 30 + 16777215 + + + + + Times New Roman + 10 + + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + Times New Roman + 12 + + + + Идентификационный код модели + + + + + + + + 0 + 30 + + + + + Times New Roman + 10 + + + + 20 + + + + + + + <a href="pdf">Документация по стандарту S1000D. <br>(Кодирование публикаций - стр. 1889)</a> + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + Qt::TextBrowserInteraction + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 10 + + + + + + + + + 0 + 30 + + + + + Times New Roman + 10 + + + + + + + + + 0 + 60 + + + + + Times New Roman + 12 + + + + + + + + + 0 + 30 + + + + + 80 + 16777215 + + + + + Times New Roman + 10 + + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Код публикации (символы A-Z) + + + + + + + + 0 + 30 + + + + + 80 + 16777215 + + + + + Times New Roman + 10 + + + + Qt::AlignCenter + + + + + + + + + + 40 + 16777215 + + + + + + + + :/new/Icons/exclamation.png + :/new/Icons/accept.png:/new/Icons/exclamation.png + + + + 32 + 32 + + + + true + + + true + + + + + + + + Times New Roman + 12 + 75 + true + + + + QLabel { color : blue; } + + + Публикация + + + Qt::AlignHCenter|Qt::AlignTop + + + + + + + + + + + + + Times New Roman + 12 + + + + background-color: white; + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 9 + + + 9 + + + 9 + + + 9 + + + + + + Times New Roman + 12 + 75 + true + + + + QLabel { color : blue; } + + + Кодирование в соответствии с рекомендациями + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Блок/узел + + + + + + + + Times New Roman + 12 + + + + Под-подсистема + + + + + + + + 0 + 30 + + + + + 130 + 16777215 + + + + + Times New Roman + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Идентификационный код модели (MI)</span> идентифицирует модель или несколько моделей, принадлежащик к одному типу. От 2 до 14 буквенно-цифровых символов.</p></body></html> + + + + + + Qt::AlignCenter + + + + + + + true + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + Times New Roman + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Код обучения (LC)</span> используется для обозначения модулей данных по обучению. Состоит из 1 буквенного и 2 цифровых символов.</p><p>Первый символ может быть:</p><p>- &quot;H&quot; - для обозначения технологии деятельности человека</p><p>- &quot;T&quot; - для обозначения модулей проверки знаний</p><p>Подробный перечень кодов обучения и кодов обучающего события см. в Главах 4.3.9 и 4.3.10 <a href="https://s1000d.org/"><span style=" text-decoration: underline; color:#0000ff;">стандарта S1000D</span></a>.</p></body></html> + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + + 20 + 5 + + + + + + + + + 0 + 30 + + + + + Times New Roman + 12 + + + + 30 + + + + + + + + 0 + 2 + + + + + 0 + 0 + + + + + Times New Roman + 12 + true + + + + false + + + + + + true + + + + + + + + + + Qt::Vertical + + + + 20 + 10 + + + + + + + + + 0 + 30 + + + + + Times New Roman + 12 + true + + + + Это модуль данных обучения? + + + + + + + + 0 + 50 + + + + + 16777215 + 50 + + + + + Times New Roman + 12 + + + + + + + + + 8 + false + + + + color: gray; + + + <a href="pdf">Документация по стандарту S1000D. <br>(Кодирование модуля данных - стр. 1788)</a> + + + Qt::AutoText + + + false + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + true + + + false + + + Qt::TextBrowserInteraction + + + + + + + + Times New Roman + 12 + + + + + + + Информационный код + + + + + + + Qt::Horizontal + + + + + + + + Times New Roman + 12 + + + + Отличительный код системы + + + + + + + + Times New Roman + 12 + + + + Код демонтажа + + + + + + + Qt::Vertical + + + + 20 + 5 + + + + + + + + + Times New Roman + 12 + + + + Код расположения изделия + + + + + + + Qt::Vertical + + + + 20 + 10 + + + + + + + + false + + + + 130 + 16777215 + + + + + true + + + + QDialogButtonBox::No|QDialogButtonBox::Yes + + + true + + + + + + + Qt::Vertical + + + + 20 + 5 + + + + + + + + + Times New Roman + 12 + + + + Система + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Код стандартной системы нумерации (SNS)</span> обеспечивает классификацию информационного материала. От 6 до 9 буквенно-цифровых символов.</p><p><span style=" text-decoration: underline;">Включает:</span></p><p> - <span style=" font-weight:600;">Систему</span>. Код системы включает2-3 символа.</p><p> - <span style=" font-weight:600;">Подсистему / под-подсистему</span>. Описывает разделение системы на составные части. Содержат по 1 буквенно-цифровому символу. Стандарт S1000D определяет значения кодов только для подсистем. Коды для под-подсистем назначаются разработчиком в зависимости от сложности изделия.</p><p> -<span style=" font-weight:600;"> Блок / узел</span> кодируется двумя или четырьмя буквенно-цифровыми символами (начиная с 01 и 0001). Значения кодов назначаются разработчиком.</p></body></html> + + + Qt::AlignCenter + + + + + + + + 0 + 50 + + + + + 16777215 + 50 + + + + + Times New Roman + 12 + + + + + + + + true + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + Times New Roman + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Код типа модуля обучения (LEC)</span> определяет, какой тип схемы обучения используется в модуле данных по обучению. Состоит из 1 буквенного символа.</p><p><span style=" font-style:italic;">Бизнес-правилами АО &quot;Вертолеты России&quot; определено использование только кода &quot;E&quot; (learningAssessment).</span></p><p>Подробный перечень кодов обучения и кодов обучающего события см. в Главах 4.3.9 и 4.3.10 <a href="https://s1000d.org/"><span style=" text-decoration: underline; color:#0000ff;">стандарта S1000D</span></a>.</p></body></html> + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Идентификационный код модели + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + Times New Roman + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Вариант информационного кода (ICV)</span> используется для модулей данных, относящихся к одному изделию и виду информации. Кодируется одним символом (по умолчанию &quot;А&quot;).</p><p>Полное описание информационных кодов и вариантов см. в Главах 8.4 и 8.5 <a href="https://s1000d.org/"><span style=" text-decoration: underline; color:#0000ff;">стандарта S1000D</span></a>.</p></body></html> + + + Qt::AlignCenter + + + + + + + <a href="IC">Перечень информационных кодов + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + Qt::TextBrowserInteraction + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Код стандартной системы нумерации (SNS)</span> обеспечивает классификацию информационного материала. От 6 до 9 буквенно-цифровых символов.</p><p><span style=" text-decoration: underline;">Включает:</span></p><p> - <span style=" font-weight:600;">Систему</span>. Код системы включает2-3 символа.</p><p> - <span style=" font-weight:600;">Подсистему / под-подсистему</span>. Описывает разделение системы на составные части. Содержат по 1 буквенно-цифровому символу. Стандарт S1000D определяет значения кодов только для подсистем. Коды для под-подсистем назначаются разработчиком в зависимости от сложности изделия.</p><p> -<span style=" font-weight:600;"> Блок / узел</span> кодируется двумя или четырьмя буквенно-цифровыми символами (начиная с 01 и 0001). Значения кодов назначаются разработчиком.</p></body></html> + + + Qt::AlignCenter + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + Times New Roman + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Информационный код (IC)</span> используется для определения типа информации, содержащейся в модуле данных. </p><p>Полное описание информационных кодов и вариантов см. в Главах 8.4 и 8.5 <a href="https://s1000d.org/"><span style=" text-decoration: underline; color:#0000ff;">стандарта S1000D</span></a>.</p></body></html> + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Вариант кода демонтажа + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + Times New Roman + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Код демонтажа (DC)</span> определяет степень разбиения на составные части сборочных единиц, к которым применияется информация по техническому обслуживанию. Например, модули данных, относящиеся ко всему изделию или его системе, подсистеме, узлу, будут иметь код демонтажа &quot;00&quot;. Относящиеся к первой снятой сборке - &quot;01&quot;, ко второй - &quot;02&quot; и т.д. Код состоит из 2 буквенно-цифровых символов.</p></body></html> + + + -1 + + + Qt::AlignCenter + + + + + + + true + + + + Times New Roman + 12 + + + + Код типа модуля обучения + + + + + + + + Times New Roman + 12 + + + + Типовые информационные наборы + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Код стандартной системы нумерации (SNS)</span> обеспечивает классификацию информационного материала. От 6 до 9 буквенно-цифровых символов.</p><p><span style=" text-decoration: underline;">Включает:</span></p><p> - <span style=" font-weight:600;">Систему</span>. Код системы включает2-3 символа.</p><p> - <span style=" font-weight:600;">Подсистему / под-подсистему</span>. Описывает разделение системы на составные части. Содержат по 1 буквенно-цифровому символу. Стандарт S1000D определяет значения кодов только для подсистем. Коды для под-подсистем назначаются разработчиком в зависимости от сложности изделия.</p><p> -<span style=" font-weight:600;"> Блок / узел</span> кодируется двумя или четырьмя буквенно-цифровыми символами (начиная с 01 и 0001). Значения кодов назначаются разработчиком.</p></body></html> + + + Qt::AlignCenter + + + + + + + + 0 + 2 + + + + + Arial + 9 + + + + + + + + + Times New Roman + 12 + 75 + true + + + + QLabel { color : blue; } + + + Ошибки импорта файла LyX + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Техническое имя + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + + Times New Roman + 12 + + + + Подсистема + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Отличительный код системы (SDC)</span> назначается, когда возможен выпуск моделей разных видов, и указывает, для какой конфигурации применим модуль данных. От 1 до 4 буквенно-цифровых символов (как правило 1 буквенный символ).</p></body></html> + + + Qt::AlignCenter + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + + Times New Roman + 12 + + + + Информационное имя + + + + + + + true + + + + Times New Roman + 12 + + + + Код обучения + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + Times New Roman + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Вариант кода демонтажа (DCV)</span> обозначает альтернативные элементы оборудования или компоненты, незначительно отличающиеся по конструкции, но не настолько, чтобы изменить отличительный код системы. Состоит из 1, 2 или 3 символов. Предпочтительно должен начинаться с буквенного символа.</p></body></html> + + + Qt::AlignCenter + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + Times New Roman + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Код расположения изделия (ILC</span>) определяет место выполнения работ по обслуживанию компонента изделия, к которому отностится модуль данных. Состоит из 1 буквенного символа. </p><p><span style=" text-decoration: underline;">Примеры:</span></p><p> - &quot;A&quot; - на летательном аппарате, наземной или морской системе</p><p> - &quot;B&quot; - на основной сборочной единице, демонтированной с летательнго аппарата, наземной или морской системы</p><p> - &quot;C&quot; - на стенде</p><p> - &quot;D&quot; - на всех трех перечисленных (A, B, C)</p><p> - &quot;T&quot; - используется для обозначения модуля данных, который содержит информацию по обучению</p><p> - &quot;Z&quot; - общий код расположения изделия</p></body></html> + + + Qt::AlignCenter + + + + + + + + Times New Roman + 12 + + + + Вариант информационного кода + + + + + + + + 0 + 30 + + + + + 40 + 16777215 + + + + + 10 + + + + <html><head/><body><p><span style=" font-weight:600;">Код стандартной системы нумерации (SNS)</span> обеспечивает классификацию информационного материала. От 6 до 9 буквенно-цифровых символов.</p><p><span style=" text-decoration: underline;">Включает:</span></p><p> - <span style=" font-weight:600;">Систему</span>. Код системы включает2-3 символа.</p><p> - <span style=" font-weight:600;">Подсистему / под-подсистему</span>. Описывает разделение системы на составные части. Содержат по 1 буквенно-цифровому символу. Стандарт S1000D определяет значения кодов только для подсистем. Коды для под-подсистем назначаются разработчиком в зависимости от сложности изделия.</p><p> -<span style=" font-weight:600;"> Блок / узел</span> кодируется двумя или четырьмя буквенно-цифровыми символами (начиная с 01 и 0001). Значения кодов назначаются разработчиком.</p></body></html> + + + Qt::AlignCenter + + + + + + + + + + 40 + 16777215 + + + + false + + + background-color: rgb(255, 255, 255); + + + + + + + :/new/Icons/exclamation.png + :/new/Icons/accept.png:/new/Icons/exclamation.png + + + + 32 + 32 + + + + true + + + false + + + true + + + + + + + + Times New Roman + 12 + 75 + true + + + + color : blue; + + + Модуль данных + + + + Qt::AlignCenter + + + + + + + + + + + + + Times New Roman + 12 + + + + background-color: white; + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 9 + + + 9 + + + 9 + + + 9 + + + + + Qt::Vertical + + + QDialogButtonBox::No|QDialogButtonBox::Yes + + + + + + + + Times New Roman + 12 + + + + Qt::ScrollBarAlwaysOff + + + false + + + Qt::ElideNone + + + QAbstractItemView::ScrollPerPixel + + + false + + + QListView::Adjust + + + 5 + + + + 0 + 40 + + + + true + + + + + + + + 0 + 400 + + + + + Times New Roman + 12 + + + + Qt::ScrollBarAlwaysOff + + + false + + + Qt::ElideNone + + + 5 + + + + 0 + 40 + + + + true + + + true + + + + + + + + + + 0 + 0 + + + + + 40 + 16777211 + + + + + + + + + + + + Times New Roman + 12 + 75 + true + + + + QLabel { color : blue; } + + + Модуль данных - контроль знаний + + + + Qt::AlignCenter + + + + + + + + + Qt::Vertical + + + + 20 + 15 + + + + + + + + + Times New Roman + 10 + true + + + + QLabel { color : gray; } + + + Возможные типы вопросов: с одним или несколькими правильными ответами, которые помечаются галочками + + + + + + + + Times New Roman + 10 + true + + + + QLabel { color : gray; } + + + При необходимости создания многострочного вопроса, строки разделяются символом # + + + + + + + + Times New Roman + 12 + + + + Вопросы: + + + + + + + Qt::Vertical + + + + 20 + 100 + + + + + + + + Qt::Vertical + + + QDialogButtonBox::Apply|QDialogButtonBox::No|QDialogButtonBox::Reset|QDialogButtonBox::Yes + + + false + + + + + + + + Times New Roman + 12 + + + + Ответы: + + + + + + + Qt::Vertical + + + + 20 + 15 + + + + + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + Qt::LeftToRight + + + false + + + + 32 + 32 + + + + true + + + TopToolBarArea + + + false + + + + + + + + + + + + + + 0 + 0 + + + + + + + false + + + Qt::TopToolBarArea + + + + 32 + 32 + + + + Qt::ToolButtonIconOnly + + + true + + + TopToolBarArea + + + false + + + + + + + + + + + + :/new/Icons/suspend.png:/new/Icons/suspend.png + + + Выход + + + Выход + + + Esc + + + + + + :/new/Icons/folder_search.png:/new/Icons/folder_search.png + + + Открыть АУК + + + Открыть АУК + + + + + false + + + + :/new/Icons/folder+.png:/new/Icons/folder+.png + + + Добавить одноуровневую публикацию + + + Добавить одноуровневую публикацию + + + false + + + + + false + + + + :/new/Icons/doc_head_blue+.png:/new/Icons/doc_head_blue+.png + + + Добавить модуль + + + Добавить модуль + + + false + + + + + + :/new/Icons/save.png:/new/Icons/save.png + + + Сохранить + + + Сохранить + + + Ctrl+S + + + true + + + + + true + + + false + + + + :/new/Icons/doc_config.png:/new/Icons/doc_config.png + + + Кодирование + + + Кодирование + + + false + + + + + true + + + false + + + + :/new/Icons/docs_head_orange.png:/new/Icons/docs_head_orange.png + + + Данные + + + Данные + + + false + + + + + false + + + + :/new/Icons/item_del.png:/new/Icons/item_del.png + + + Удалить публикацию/модуль + + + Удалить публикацию/модуль + + + false + + + + + true + + + + :/new/Icons/lyx_import.png:/new/Icons/lyx_import.png + + + Импортировать данные из файла LyX + + + Импортировать данные из файла LyX + + + Ctrl+O + + + + + + :/new/Icons/refresh.png:/new/Icons/refresh.png + + + Обновить из LyX файла + + + Обновить из LyX файла + + + Ctrl+R + + + + + + :/new/Icons/chrome.png:/new/Icons/chrome.png + + + Открыть модуль в браузере + + + Открыть модуль в браузере + + + Ctrl+B + + + + + + :/new/Icons/export_logo.png:/new/Icons/export_logo.png + + + Сформировать пакеты выходных данных + + + Сформировать пакеты выходных данных + + + + + + :/new/Icons/chrome_refresh.png:/new/Icons/chrome_refresh.png + + + Повторно сгенерировать HTML + + + Повторно сгенерировать HTML + + + + + + + + + actionExit + triggered() + EditorMainWindow + close() + + + -1 + -1 + + + 399 + 299 + + + + + diff --git a/s1000d/Converter_Source/exportdialog.cpp b/s1000d/Converter_Source/exportdialog.cpp new file mode 100644 index 0000000..9fdbe68 --- /dev/null +++ b/s1000d/Converter_Source/exportdialog.cpp @@ -0,0 +1,315 @@ +#include "exportdialog.h" +#include "ui_exportdialog.h" +#include +#include +#include +#include +#include + +ExportDialog::ExportDialog(QWidget *parent, S1000D_Manager* _SM) : + QDialog(parent), + ui(new Ui::ExportDialog) +{ + ui->setupUi(this); + ui->dlgTree->setFocus(); + SM = _SM; + flagCanSetCheck = true; +} + +ExportDialog::~ExportDialog() +{ + delete ui; +} + +void ExportDialog::on_btnCloseDlg_clicked() +{ + this->close(); +} + +void ExportDialog::closeEvent(QCloseEvent *event) +{ + SM->SavePackagesXML(); + + QString packFNCheck = ""; + QStringList packFNList; + foreach(S1000D_Manager::PackageStruct pack, SM->packages) + if(packFNList.contains(pack.exportFileName)) + {packFNCheck = pack.exportFileName; break;} + else + packFNList.append(pack.exportFileName); + if (packFNCheck == "") { + //SM->SavePackagesXML(); + event->accept(); + } else { + QMessageBox::warning(this, tr("Предупреждение"), tr("Дублирование имен файлов пакетов конфигурации.\n"), + QMessageBox::Ok, QMessageBox::Ok); + //event->ignore(); + } +} + +void ExportDialog::on_btnExportS1000D_clicked() +{ + Q_EMIT actionS1000Dexport(); +} +void ExportDialog::on_btnExportSCORM_clicked() +{ + Q_EMIT actionSCORMexport(); +} +void ExportDialog::on_btnExportEDL_clicked() +{ + Q_EMIT actionEDLexport(); +} +void ExportDialog::on_btnExportSingleSCORM_clicked() +{ + Q_EMIT actionSingleSCORMexport(); +} + +void ExportDialog::on_dlgTree_itemChanged(QTreeWidgetItem *item, int) +{ + QString nm = item->text(0); + if(item->checkState(0) == Qt::Checked) { + if(item->parent() != nullptr) + item->parent()->setCheckState(0, Qt::Checked); + } else { + for(int i=0;ichildCount();i++) + item->child(i)->setCheckState(0, Qt::Unchecked); + } + + if(ui->cbPackageList->currentIndex() < 0) return; + if(ui->cbPackageList->currentText() != ui->cbPackageList->itemText(ui->cbPackageList->currentIndex())) + return; + if(!flagCanSetCheck) return; + + if(item->checkState(0) == Qt::Checked) { + if(!SM->items[item->data(0, Qt::UserRole).toInt()].inPackages.contains(SM->packages[ui->cbPackageList->currentIndex()].cfgName)) + SM->items[item->data(0, Qt::UserRole).toInt()].inPackages.append(SM->packages[ui->cbPackageList->currentIndex()].cfgName); + } else { + if(SM->items[item->data(0, Qt::UserRole).toInt()].inPackages.contains(SM->packages[ui->cbPackageList->currentIndex()].cfgName)) + SM->items[item->data(0, Qt::UserRole).toInt()].inPackages.removeOne(SM->packages[ui->cbPackageList->currentIndex()].cfgName); + } +} + +void ExportDialog::fillTree(QTreeWidget* tree) { + ui->dlgTree->clear(); + + flagCanSetCheck = false; + for(int i=0;itopLevelItemCount();i++) { + QTreeWidgetItem* newItem = new QTreeWidgetItem(); + ui->dlgTree->addTopLevelItem(newItem); + fillTreeItem(tree->topLevelItem(i), newItem); + } + flagCanSetCheck = true; + ui->dlgTree->expandAll(); + ui->cbPackageList->setCurrentIndex(0); +} + +void ExportDialog::fillTreeItem(QTreeWidgetItem* treeItem, QTreeWidgetItem* dlgItem) { + QString txt = treeItem->text(0); txt.replace("\n", " "); + dlgItem->setText(0, txt); + dlgItem->setData(0, Qt::UserRole, treeItem->data(0, Qt::UserRole)); + dlgItem->setFlags(dlgItem->flags() | Qt::ItemIsUserCheckable); + dlgItem->setCheckState(0, Qt::Checked); + dlgItem->setIcon(0, treeItem->icon(0)); + + for(int i=0;ichildCount();i++) { + QTreeWidgetItem* newItem = new QTreeWidgetItem(); + dlgItem->addChild(newItem); + fillTreeItem(treeItem->child(i), newItem); + } +} + +QTreeWidget* ExportDialog::getDlgTreeWidget() { + return ui->dlgTree; +} + +void ExportDialog::setPackName(QString packname) { + ui->lePackName->setText(packname); +} + +QString ExportDialog::getPackName() { + return ui->lePackName->text(); +} + +void ExportDialog::setPackDir(QString packdir) { + ui->lePackDir->setText(packdir); +} + +QString ExportDialog::getPackDir() { + return ui->lePackDir->text(); +} + +void ExportDialog::setPackTitle(QString packtitle) { + ui->lePackTitle->setText(packtitle); +} + +QString ExportDialog::getPackTitle() { + return ui->lePackTitle->text(); +} + +int ExportDialog::getEDType() { + return ui->cbEDType->currentIndex(); +} +void ExportDialog::on_btnChooseDir_clicked() +{ + QString dir = QFileDialog::getExistingDirectory(this, tr("Выберите папку размещения пакета"), getPackDir()); + if(dir != "") + ui->lePackDir->setText(dir); +} + +void ExportDialog::setS1000Dlabel(QString text, QString color) { + ui->lblS1000D_result->setText(text); + ui->lblS1000D_result->setStyleSheet("QLabel { color: "+color+"; }"); + QTimer::singleShot(3000, this, SLOT(hidelabels())); +} + +void ExportDialog::setSCORMlabel(QString text, QString color) { + ui->lblSCORM_result->setText(text); + ui->lblSCORM_result->setStyleSheet("QLabel { color: "+color+"; }"); + QTimer::singleShot(3000, this, SLOT(hidelabels())); +} + +void ExportDialog::setEDLlabel(QString text, QString color) { + ui->lblEDL_result->setText(text); + ui->lblEDL_result->setStyleSheet("QLabel { color: "+color+"; }"); + QTimer::singleShot(3000, this, SLOT(hidelabels())); +} + +void ExportDialog::setSingleSCORMlabel(QString text, QString color) { + ui->lblSingleSCORM_result->setText(text); + ui->lblSingleSCORM_result->setStyleSheet("QLabel { color: "+color+"; }"); + QTimer::singleShot(3000, this, SLOT(hidelabels())); +} + +void ExportDialog::hidelabels() { + ui->lblS1000D_result->setText(""); + ui->lblSCORM_result->setText(""); + ui->lblEDL_result->setText(""); + ui->lblSingleSCORM_result->setText(""); +} + +void ExportDialog::on_cbPackageList_currentIndexChanged(int index) +{ + if(ignore_cbPackageList_events) return; + + QList treeList; + for(int i=0;idlgTree->topLevelItemCount();i++) + treeList.append(ui->dlgTree->topLevelItem(i)); + QTreeWidgetItem* treeItem; + while(!treeList.isEmpty()) { + treeItem = treeList.takeFirst(); + flagCanSetCheck = false; + if(index >= 0) { + if(SM->items[treeItem->data(0, Qt::UserRole).toInt()].inPackages.contains(SM->packages[index].cfgName, Qt::CaseInsensitive)) + treeItem->setCheckState(0, Qt::Checked); + else + treeItem->setCheckState(0, Qt::Unchecked); + } + else + treeItem->setCheckState(0, Qt::Checked); + flagCanSetCheck = true; + + for(int i=0;ichildCount();i++) + treeList.append(treeItem->child(i)); + } + curPackIndex = index; + ignore_cbPackageList_events = true; + if(index >= 0) { + ui->lePackTitle->setText(SM->packages[index].title); + ui->lePackName->setText(SM->packages[index].exportFileName); + } + else { + //ui->lePackTitle->setText(); + //ui->lePackName->setText(); + } + ignore_cbPackageList_events = false; +} + +void ExportDialog::setPackageListIndex(int ind) { + on_cbPackageList_currentIndexChanged(ind); +} + +void ExportDialog::on_cbPackageList_currentTextChanged(QString _) +{ + if(ignore_cbPackageList_events) return; + ui->btnPackageAdd->setEnabled(true); +} + +void ExportDialog::fillPackageList() +{ + ignore_cbPackageList_events = true; + ui->cbPackageList->clear(); + foreach(S1000D_Manager::PackageStruct pack, SM->packages) + ui->cbPackageList->addItem(pack.cfgName); + ignore_cbPackageList_events = false; +} + +void ExportDialog::on_btnPackageAdd_clicked() +{ + foreach(S1000D_Manager::PackageStruct pack, SM->packages) { + if(pack.cfgName == ui->cbPackageList->currentText()) + { + QMessageBox::warning(this, tr("Ошибка"), tr("Дублирование имен пакетов конфигурации.\n"), + QMessageBox::Ok, QMessageBox::Ok); + return; + } + } + S1000D_Manager::PackageStruct pack; + pack.cfgName = ui->cbPackageList->currentText(); + pack.title = ui->lePackTitle->text(); pack.exportFileName = ui->lePackName->text(); + SM->packages.append(pack); + + QList treeList; + for(int i=0;idlgTree->topLevelItemCount();i++) + treeList.append(ui->dlgTree->topLevelItem(i)); + QTreeWidgetItem* treeItem; + while(!treeList.isEmpty()) { + treeItem = treeList.takeFirst(); + if(treeItem->checkState(0) == Qt::Checked) + if(!SM->items[treeItem->data(0, Qt::UserRole).toInt()].inPackages.contains(pack.cfgName)) + SM->items[treeItem->data(0, Qt::UserRole).toInt()].inPackages.append(pack.cfgName); + + for(int i=0;ichildCount();i++) + treeList.append(treeItem->child(i)); + } + + fillPackageList(); ui->cbPackageList->setCurrentIndex(SM->packages.count()-1); + ui->btnPackageAdd->setEnabled(false); + ui->lePackName->setFocus(); +} + +void ExportDialog::on_btnPackageDel_clicked() +{ + if(ui->cbPackageList->currentIndex() < 0) return; + QList treeList; + for(int i=0;idlgTree->topLevelItemCount();i++) + treeList.append(ui->dlgTree->topLevelItem(i)); + QTreeWidgetItem* treeItem; + while(!treeList.isEmpty()) { + treeItem = treeList.takeFirst(); + + if(SM->items[treeItem->data(0, Qt::UserRole).toInt()].inPackages.contains(SM->packages[ui->cbPackageList->currentIndex()].cfgName, Qt::CaseInsensitive)) + SM->items[treeItem->data(0, Qt::UserRole).toInt()].inPackages.removeOne(SM->packages[ui->cbPackageList->currentIndex()].cfgName); + + for(int i=0;ichildCount();i++) + treeList.append(treeItem->child(i)); + } + SM->packages.removeAt(ui->cbPackageList->currentIndex()); + ui->cbPackageList->removeItem(ui->cbPackageList->currentIndex()); +} + +void ExportDialog::on_cbPackageList_editTextChanged(const QString &arg1) +{ + ui->btnPackageAdd->setEnabled(true); +} + +void ExportDialog::on_lePackName_textEdited(const QString &arg1) +{ + if(curPackIndex == -1) return; + SM->packages[curPackIndex].exportFileName = arg1; +} + +void ExportDialog::on_lePackTitle_textEdited(const QString &arg1) +{ + if(curPackIndex == -1) return; + SM->packages[curPackIndex].title = arg1; +} diff --git a/s1000d/Converter_Source/exportdialog.h b/s1000d/Converter_Source/exportdialog.h new file mode 100644 index 0000000..504ab66 --- /dev/null +++ b/s1000d/Converter_Source/exportdialog.h @@ -0,0 +1,72 @@ +#ifndef EXPORTDIALOG_H +#define EXPORTDIALOG_H + +#include +#include +#include "s1000d_manager.h" + +namespace Ui { +class ExportDialog; +} + +class ExportDialog : public QDialog +{ + Q_OBJECT + +public: + explicit ExportDialog(QWidget *parent = nullptr, S1000D_Manager* _SM = nullptr); + ~ExportDialog(); + void setPackName(QString packname); + QString getPackName(); + void setPackDir(QString packdir); + QString getPackDir(); + void setPackTitle(QString packtitle); + QString getPackTitle(); + int getEDType(); + void fillTree(QTreeWidget* tree); + void fillTreeItem(QTreeWidgetItem* treeItem, QTreeWidgetItem* dlgItem); + QTreeWidget* getDlgTreeWidget(); + void setS1000Dlabel(QString text, QString color); + void setSCORMlabel(QString text, QString color); + void setEDLlabel(QString text, QString color); + void setSingleSCORMlabel(QString text, QString color); + void fillPackageList(); + void setPackageListIndex(int ind); + + bool flagCanSetCheck; + bool ignore_cbPackageList_events=false; + int curPackIndex = -1; + +private slots: + void on_btnCloseDlg_clicked(); + void on_btnExportS1000D_clicked(); + void on_btnExportSCORM_clicked(); + void on_btnExportEDL_clicked(); + void on_btnExportSingleSCORM_clicked(); + void on_dlgTree_itemChanged(QTreeWidgetItem *item, int column); + + void on_btnChooseDir_clicked(); + + void on_cbPackageList_currentIndexChanged(int index); + void on_cbPackageList_currentTextChanged(QString _); + + void hidelabels(); + void on_btnPackageAdd_clicked(); + void on_btnPackageDel_clicked(); + void closeEvent(QCloseEvent *event); + void on_cbPackageList_editTextChanged(const QString &arg1); + void on_lePackName_textEdited(const QString &arg1); + void on_lePackTitle_textEdited(const QString &arg1); + +private: + Ui::ExportDialog *ui; + S1000D_Manager* SM; + +Q_SIGNALS: + void actionS1000Dexport(); + void actionSCORMexport(); + void actionEDLexport(); + void actionSingleSCORMexport(); +}; + +#endif // EXPORTDIALOG_H diff --git a/s1000d/Converter_Source/exportdialog.ui b/s1000d/Converter_Source/exportdialog.ui new file mode 100644 index 0000000..06361aa --- /dev/null +++ b/s1000d/Converter_Source/exportdialog.ui @@ -0,0 +1,845 @@ + + + ExportDialog + + + Qt::ApplicationModal + + + + 0 + 0 + 1019 + 617 + + + + Конвертер АУК - экспорт + + + + :/new/Icons/doc_config.ico:/new/Icons/doc_config.ico + + + background: white + + + true + + + + 0 + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 30 + 20 + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + + 0 + 0 + + + + + 113 + 25 + + + + background: rgb(230,230,230); + + + Удалить + + + + :/new/Icons/delete.png:/new/Icons/delete.png + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + + 16777215 + 20 + + + + + Times New Roman + 14 + 75 + true + + + + color: blue + + + Формирование и конфигурирование пакетов + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 490 + 25 + + + + + 0 + 0 + + + + + Times New Roman + 12 + + + + color: blue; + + + true + + + + + + + + Times New Roman + 12 + + + + Имя конфигурации пакета: + + + + + + + + Segoe UI + 9 + + + + false + + + true + + + QAbstractItemView::NoSelection + + + + 15 + 15 + + + + true + + + true + + + true + + + true + + + + 1 + + + + + + + + + 0 + 0 + + + + + 113 + 25 + + + + background: rgb(230,230,230); + + + Создать + + + + :/new/Icons/add.png:/new/Icons/add.png + + + + + + + + + + + + 0 + 25 + + + + + Times New Roman + 12 + + + + color: blue; + + + + + + + + 0 + 25 + + + + + Times New Roman + 12 + 50 + false + + + + color: blue; + + + 250 + + + + + + + + Times New Roman + 10 + + + + background: rgb(230,230,230); + + + Выбрать... + + + + + + + + Times New Roman + 12 + + + + Расположение: + + + + + + + + 0 + 25 + + + + + Times New Roman + 12 + + + + + + + + + + + + Times New Roman + 12 + + + + Титул АУК: + + + + + + + + Times New Roman + 12 + + + + Имя файла: + + + + + + + + Times New Roman + 12 + + + + Тип эл.док-та: + + + + + + + + 0 + 25 + + + + + Times New Roman + 12 + + + + + + + -1 + + + 15 + + + + 1. Руководство по эксплуатации + + + + + 2. Инструкция по монтажу, пуску, регулированию и обкатке изделия + + + + + 3. Формуляр + + + + + 4. Паспорт + + + + + 5. Этикетка + + + + + 6. Каталог изделия + + + + + 7. Нормы расхода запасных частей + + + + + 8. Нормы расхода материалов + + + + + 9. Ведомость ЗИП + + + + + 10. Учебно-технические плакаты + + + + + 11. Инструкции эксплуатационные специальные + + + + + 12. Ведомость эксплуатационных документов + + + + + + + + + + + + + + + + + 110 + 80 + + + + + Times New Roman + 12 + + + + false + + + background: rgb(230,230,230); + + + + + + + :/new/Icons/S1000D_logo.png:/new/Icons/S1000D_logo.png + + + + 70 + 70 + + + + true + + + true + + + false + + + + + + + + 16777215 + 14 + + + + + Times New Roman + 10 + + + + + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + + 110 + 80 + + + + false + + + background: rgb(230,230,230); + + + + + + + :/new/Icons/scorm_logo.png:/new/Icons/scorm_logo.png + + + + 70 + 70 + + + + true + + + false + + + + + + + + 16777215 + 14 + + + + + Times New Roman + 10 + + + + + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + + 0 + 0 + + + + + 110 + 80 + + + + background: rgb(230,230,230); + + + + + + + :/new/Icons/edl_logo.png:/new/Icons/edl_logo.png + + + + 70 + 70 + + + + + + + + + 16777215 + 14 + + + + + Times New Roman + 10 + + + + + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + + 110 + 80 + + + + false + + + background: rgb(230,230,230); + + + + + + + :/new/Icons/maple-leaf.png:/new/Icons/maple-leaf.png + + + + 70 + 70 + + + + true + + + false + + + + + + + + 16777215 + 14 + + + + + Times New Roman + 10 + + + + + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 40 + + + + + + + + + 0 + 25 + + + + + 16777215 + 20 + + + + Qt::LeftToRight + + + false + + + background: rgb(230,230,230); + + + Закрыть + + + + :/new/Icons/suspend.png:/new/Icons/suspend.png + + + false + + + + + + + + + + + + Times New Roman + 12 + + + + Состав пакета: + + + + + + + Qt::Horizontal + + + + 30 + 20 + + + + + + + + + + + diff --git a/s1000d/Converter_Source/html.cpp b/s1000d/Converter_Source/html.cpp new file mode 100644 index 0000000..65ba995 --- /dev/null +++ b/s1000d/Converter_Source/html.cpp @@ -0,0 +1,1126 @@ +#include "html.h" +#include +#include +#include +#include +#include +#include +#include + +HTML::HTML() +{ + +} + +void HTML::Generate(S1000D_Manager* _SM, bool _toScorm, SplashForm* _splash) { + SM = _SM; toScorm = _toScorm; + ru_const = &SM->ru_const; splash = _splash; + svgUI = 0; paraIdent = true; paraTextAlign = ""; + iframeDivCnt = 0; + + if(!SM->isConsole) + {splash->Reset(); splash->SetTitle("Генерация HTML...");} + QStringList htmlHead, htmlTail; + QFile blankFile(":new/BlankXML/blank.html"); + if (!blankFile.open(QFile::ReadOnly | QFile::Text)) return; + QString s; + bool isHead = true; + while(!blankFile.atEnd()) { + s = QString::fromLocal8Bit(blankFile.readLine()).replace("\n",""); + if(isHead) htmlHead.append(s); else htmlTail.append(s); + if(s.contains("
    ")) isHead = false; + } + blankFile.close(); + + acrList.clear(); + for(int i=0;iitems.count();i++) + if(SM->items[i].moduleType == mtDM) { + SM->setCurItem(i); + + //qDebug() << "html: " << SM->item->fileName; + + if(SM->item->schemeType == stLEARNING) continue; + + idList.clear(); + ID_pars = ID_tabs = ID_figs = ID_mmos = 0; + + SM->item->html.clear(); + foreach(QString s, htmlHead) { +// if(!toScorm && s == "") { +// add(1, ""); +// } + add(0, s); + } + add(6, "
    "); + add(6, "
    "); + add(6, "
    "); + add(6, "
    "); + + add(6, "
    "); + add(6, "
    "); + add(6, "
    "); + add(6, "
    "); + QString itemTechName = SM->getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); + QString itemInfoName = SM->getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName"); + itemTechName.replace("'", "\""); itemInfoName.replace("'", "\""); + //if(!toScorm) add(6, "
    "); + add(6, "

    "+itemTechName+"

    "); + if(itemInfoName != "") + add(6, "

    "+itemInfoName+"

    "); + //if(!toScorm) add(6, "
    "); + add(6, "
    "); + add(6, "
    "); + + QDomNode rootNode; + if(SM->item->schemeType == stDESCRIPT) + rootNode = SM->findElement("content.description"); + if(SM->item->schemeType == stCREW) + rootNode = SM->findElement("content.crew.descrCrew"); + if(SM->item->schemeType == stLEARNING) + rootNode = SM->findElement("content.learning.learningAssessment"); + + for(int j=0;j"); + //if(toScorm) { + // add(6, "
    "); + // add(6, " "); + // add(6, "
    "); + //} + + add(6, "
    "); + add(6, "
    "); + add(6, "
    "); + + if(true) { //toScorm + add(6, "
    "); + + add(6, "
    "); // изображения + add(6, " "); + add(6, "
    "); + + add(6, "
    "); // мультимедиа + add(6, " "); + add(6, "
    "); + + add(6, "
    "); // таблицы + add(6, " "); + add(6, "
    "); + + add(6, "
    "); + add(6, " "); + add(6, "
    "); + add(6, "
    "); + add(6, " "); + add(6, "
    "); + } + + // переименовываем временные тексты ссылок idTitle_ + for(int i=htmlHead.count();iitem->html.count();i++) + while(1) { + int _b = SM->item->html[i].indexOf("idTitle_"); + if(_b == -1) break; + int _e = SM->item->html[i].indexOf("<",_b+8); + QString id = SM->item->html[i].mid(_b+8, _e-(_b+8)); + QString newTitle = id; + for(int j=0;jfigureTitle)) + newTitle = ru_const->figureShortTitle+" "+idList[j].title.mid(ru_const->figureTitle.length()+1, idList[j].title.indexOf(":")-(ru_const->figureTitle.length()+1)); + if(idList[j].title.startsWith(ru_const->tableTitle)) + newTitle = ru_const->tableShortTitle+" "+idList[j].title.mid(ru_const->tableTitle.length()+1, idList[j].title.indexOf(":")-(ru_const->tableTitle.length()+1)); + //qDebug() << id << "->" << newTitle; + break; + } else { + if(!SM->isConsole) qDebug() << "Неизвестная структура заголовка в idList" << id << idList[j].title; + } + } + } + if(newTitle == id) + if(!SM->isConsole) + qDebug() << "[html: "+QString::number(i)+"] Ссылка не переименована: " + id + " ("+SM->item->fileName+")"; + SM->item->html[i].replace(SM->item->html[i].mid(_b, _e-_b), newTitle); + } + + //for(int j=0;jitem->html.count();j++) + // if(!SM->item->html[j].contains("\n")) SM->item->html[j] += "\n"; + + foreach(QString s, htmlTail) + add(0, s); + } //mtDM +} + +QString HTML::domElementToXML(const QDomElement& elem, int lvl) +{ + QString head = spc(lvl)+"<"+elem.tagName(); + QDomNamedNodeMap attrs = elem.attributes(); + for(int i = 0; i\n"; + QString mid = ""; + if(elem.childNodes().count() != 0) { + if(elem.childNodes().count() == 1 && elem.childNodes().at(0).isText()) { + head += ">"; + mid += elem.childNodes().at(0).toText().nodeValue(); + tail = "\n"; + } + else { + head += ">\n"; + for(int i=0;iisConsole) splash->Step(); + QString name = node.nodeName(); + + if(name != "acronym") footnoteID = ""; + + if(name == "#text") { + cat(node.nodeValue().replace("<","<").replace(">",">")); + return; + } + + if(name == "para") { + QString ident = ""; + QString textStyle = ""; + if(paraTextAlign != "") + textStyle = " text-align: "+paraTextAlign+";"; + if(node.childNodes().count() > 0) + { + if(node.childNodes().at(0).nodeName() == "multimedia") + ident = " style=\"text-indent: 0px;"+textStyle+"\""; + if(node.childNodes().at(0).nodeName() == "figure") + ident = " style=\"text-indent: 0px;"+textStyle+"\""; + if(!paraIdent) + ident = " style=\"text-indent: 0px;"+textStyle+"\""; + } + if(ident == "" && textStyle != "") + ident = " style=\""+textStyle+"\""; + add(lvl, "
    "); + for(int j=0;j"); + cat("
    "); + return; + } + + if(name == "levelledPara") { + QString id = "ID_par"+QString::number(ID_pars++); + add(lvl, "

    "); + QString title = ""; + if(node.childNodes().at(0).nodeName() == "title") + title = node.childNodes().at(0).childNodes().at(0).nodeValue(); + if(title != "") { + labelStruct lbl; lbl.id = id; lbl.title = title; lbl.type = "par"; + idList.append(lbl); + } + cat(title); + cat("

    "); + for(int j=0;j"); + for(int j=0;j"); + return; + } + + if(name == "internalRef") { + QString id = "", target = ""; + for(int j=0;j"); + cat("idTitle_"+id); //TODO + cat(""); + return; + } + + if(name == "dmSegmentRef") { + QString tPath = node.toElement().attribute("targetPath"); + //int _b = tPath.indexOf("'"); + //QString id = tPath.mid(_b+1, tPath.indexOf("'", _b+1)-(_b+1)); + QString refFileCode = SM->dmCodeIdentString(node.toElement().namedItem("dmRefIdent").namedItem("dmCode")); + QString refTechName = node.toElement().namedItem("dmRefAddressItems").namedItem("dmTitle").namedItem("techName").childNodes().at(0).toText().data(); + QString refInfoName = node.toElement().namedItem("dmRefAddressItems").namedItem("dmTitle").namedItem("infoName").childNodes().at(0).toText().data(); + int refItemInd = -1; + int tmpCurItem = SM->itemIndex; + for(int i=0;iitems.count();i++) + if(SM->items[i].moduleType == mtDM){ + SM->setCurItem(i); + QString itemFileCode = SM->dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + QString itemTechName = SM->item->doc.namedItem("dmodule").namedItem("identAndStatusSection").namedItem("dmAddress").namedItem("dmAddressItems").namedItem("dmTitle").namedItem("techName").childNodes().at(0).toText().data(); + QString itemInfoName = SM->item->doc.namedItem("dmodule").namedItem("identAndStatusSection").namedItem("dmAddress").namedItem("dmAddressItems").namedItem("dmTitle").namedItem("infoName").childNodes().at(0).toText().data(); + if(refFileCode == itemFileCode && refTechName == itemTechName && refInfoName == itemInfoName) + { + refItemInd = i; break; + } + } + + if(refItemInd == -1) { + qDebug() << "HTML dmSegmentRef: ref item not found ("+refTechName+" "+refFileCode+")"; + SM->setCurItem(tmpCurItem); + return; + } + + QString labelTitle = ""; + QDomNode labelNode = SM->getNodeFromXPath(tPath); //, true + + if(labelNode.isNull()) { + qDebug() << "HTML dmSegmentRef: labelNode.isNull "; + qDebug() << " path: " << tPath; + qDebug() << " fileName: " << SM->item->fileName; + SM->setCurItem(tmpCurItem); + return; + } + else { + //qDebug() << "HTML dmSegmentRef: OK - " << tPath; + } + if(labelNode.toElement().namedItem("title").isNull()) { + qDebug() << "HTML dmSegmentRef: labelNode.title.isNull"; + //return; + } else { + labelTitle = labelNode.toElement().namedItem("title").toElement().firstChild().toText().data(); + } + + QString id = labelNode.attributes().namedItem("id").nodeValue(); + id = id.replace(".", "_").replace(":", "_").replace("-", "_").replace(" ", "_"); //normID + QString htmlFileName = SM->item->fileName; + htmlFileName = htmlFileName.replace(".xml", ".html"); + + //*********** + //qDebug() << ""; + + SM->setCurItem(tmpCurItem); + + cat(""); + cat(refTechName + " / " + labelTitle); + cat(""); + + return; + } + + if(name == "randomList") { + bool oldParaIdent = paraIdent; paraIdent = false; + if(node.firstChild().nodeName() == "title") { + add(lvl, "
    "); + for(int j=0;j"); + } + add(lvl, ""); + add(lvl, " "); + for(int j=0;j"); + if(node.childNodes().at(j).childNodes().count() > 0) + if(node.childNodes().at(j).childNodes().at(0).childNodes().count() > 0) + { + QString child0name = node.childNodes().at(j).childNodes().at(0).childNodes().at(0).nodeName(); + if(child0name == "randomList" || child0name == "sequentialList") + add(lvl, " "); + else + add(lvl, " "); + } + add(lvl, " "); + } + add(lvl, " "); + add(lvl, "
    -"); + for(int k=0;k"); + add(lvl, "
    "); + //if(oldParaIdent) cat("
    "); + + paraIdent = oldParaIdent; + return; + } + + if(name == "sequentialList") { + bool oldParaIdent = paraIdent; paraIdent = false; + if(node.firstChild().nodeName() == "title") { + add(lvl, "
    "); + for(int j=0;j"); + } + add(lvl, ""); + add(lvl, " "); + int cnt = 0; + for(int j=0;j"); + if(node.childNodes().at(j).childNodes().count() > 0) + if(node.childNodes().at(j).childNodes().at(0).childNodes().count() > 0) + { + QString child0name = node.childNodes().at(j).childNodes().at(0).childNodes().at(0).nodeName(); + if(child0name == "randomList" || child0name == "sequentialList") + add(lvl, " "); + else + add(lvl, " "); + } + add(lvl, " "); + } + add(lvl, " "); + add(lvl, "
    "+QString::number(++cnt)+"."); + for(int k=0;k"); + add(lvl, "
    "); + //if(oldParaIdent) cat("
    "); + paraIdent = oldParaIdent; + return; + } + + if(name == "figure") { + QString id = node.attributes().namedItem("id").nodeValue(); + QString title = node.namedItem("title").firstChild().nodeValue(); + QString infoEntityIdent = node.namedItem("graphic").attributes().namedItem("infoEntityIdent").nodeValue(); + QString reproductionScale = node.namedItem("graphic").attributes().namedItem("reproductionScale").nodeValue(); + QString reproductionHeight = node.namedItem("graphic").attributes().namedItem("reproductionHeight").nodeValue(); + QString reproductionWidth = node.namedItem("graphic").attributes().namedItem("reproductionWidth").nodeValue(); + QString isInlineClass = ""; + if(id == "" && title == "") isInlineClass = " class='inlineImg' "; + + QString imgStyle = "", scaleStyle = "", wStyle = "", hStyle = ""; + //if(reproductionScale != "") scaleStyle = ": "+reproductionScale+";' "; // пока не используется + if(reproductionHeight != "") hStyle = "height: "+reproductionHeight+";"; + if(reproductionWidth != "") wStyle = "width: "+reproductionWidth+";"; + if(scaleStyle+wStyle+hStyle != "") imgStyle = " style='"+scaleStyle+wStyle+hStyle+"' "; + + + if(infoEntityIdent == "") { + add(lvl, "Ошибка чтения изображения
    "); + return; + } + if(id == "") id = "ID_fig"+QString::number(ID_figs); + ID_figs++; + id = id.replace(".", "_").replace(":", "_").replace("-", "_").replace(" ", "_"); //normID + labelStruct lbl; lbl.id = id; lbl.title = title; lbl.type = "fig"; + idList.append(lbl); + + QFileInfo svgInfo(SM->projectPath+"/"+infoEntityIdent); + QString svgfile = infoEntityIdent.section("/",-1,-1); + //QString svgdir = infoEntityIdent.section("/",0,-2); + //qDebug() << SM->projectPath+"/"+infoEntityIdent << svgfile.toLower().split(".").last(); + + QString txtfile = svgInfo.absolutePath()+"/"+svgfile.left(svgfile.length()-3)+"txt"; + QFileInfo txtInfo(txtfile); + + if(svgInfo.exists() && svgfile.toLower().split(".").last() == "svg" && txtInfo.exists()) { // прописываем хотспоты в svg + QDomDocument svg; + if(!SM->isConsole) splash->SetTitle("Обработка SVG файла: "+infoEntityIdent); + QApplication::processEvents(); + + //qDebug() << "-- Processing SVG "+infoEntityIdent; + //QElapsedTimer timer; timer.start(); + + QFile txtFile(txtfile); + if (!txtFile.open(QFile::ReadOnly)) { // | QFile::Text + qDebug() << "html: Ошибка открытия файла "+svgInfo.absolutePath()+"/"+svgfile.left(svgfile.length()-3)+"txt"; + return; + } + QByteArray data = txtFile.readAll(); + for(int i=0;i < data.length()-2;i++) + { + if(data[i] == (char)10 && (data[i+1] != (char)13)) data[i] = 13; + } + QStringList txtLines = QString(QString(data).toUtf8()).replace("\r\r","\r").split("\r"); // + //qDebug() << txtLines; + + txtFile.close(); + + QFile svgFile(SM->projectPath+"/"+infoEntityIdent); + if (!svgFile.open(QFile::ReadOnly | QFile::Text)){ + qDebug() << "html: Ошибка открытия файла "+SM->projectPath+"/"+infoEntityIdent; + return; + } + svg.setContent(svgFile.readAll()); + svgFile.close(); + + QDomNode svgNode = svg.namedItem("svg"); + if(svgNode.isNull()) { + qDebug() << "html: Ошибка в svg-файле "+SM->projectPath+"/"+infoEntityIdent; + return; + } + svgNode.attributes().namedItem("width").toAttr().setNodeValue("100%"); + svgNode.attributes().removeNamedItem("height"); + + QStringList txtNums, txtTitles; + foreach(QString s, txtLines) + if(s.indexOf(" - ")) + { + txtNums.append(s.mid(0, s.indexOf(" - "))); + txtTitles.append(s.mid(s.indexOf(" - ")+3)); + } + + //qDebug() << " searchSVGNodeForText: " << (int)timer.elapsed()/1000; + + for(int j=0;jisConsole) splash->Step(); + QDomNode g = svgNode.childNodes().at(j); + if(g.nodeName() != "g") continue; + if(!SM->isConsole) splash->Step(); + QString title = searchSVGNodeForText(g); + if(title == "") continue; + int ind = txtNums.indexOf(title); + if(ind == -1) continue; + + QString hotspotTitle = txtTitles[ind]; + QString hotspotImage = txtTitles[ind]; + if(hotspotImage.indexOf("} ") != -1) { // вариант {title} filename + int _b = hotspotImage.indexOf("{")+1; + hotspotTitle = hotspotImage.mid(_b, hotspotImage.indexOf("} ")-_b); + hotspotImage = hotspotImage.mid(hotspotImage.indexOf("} ")+2); + } + + if(QFile::exists(SM->projectPath+"/"+hotspotImage)) { + g.toElement().setAttribute("style", "cursor: pointer;"); + g.toElement().setAttribute("onmouseout", "hideTooltipImg();"); + g.toElement().setAttribute("onmousemove", "showTooltipImg(evt, '"+hotspotImage+"', '"+hotspotTitle+"');"); + g.toElement().setAttribute("onclick", "viewer.show('"+hotspotImage+"');"); + } else { + g.toElement().setAttribute("style", "cursor: pointer;"); + g.toElement().setAttribute("onmouseout", "hideTooltip();"); + g.toElement().setAttribute("onmousemove", "showTooltip(evt, '"+hotspotTitle+"');"); + } + } + + //qDebug() << " svg.namedItem(svg).save: " << (int)timer.elapsed()/1000; + + QString svgNodeText; + svgNodeText = domElementToXML(svg.namedItem("svg").toElement(), 0); //QTextStream outsvg(&svgNodeText); + //outsvg << svg.namedItem("svg"); + //svg.namedItem("svg").save(outsvg, 2); + + //qDebug() << " svgNodeText.indexOf(id=): " << (int)timer.elapsed()/1000; + + QString svgIDprefix; svgIDprefix.fill('0', 3-QString::number(svgUI).length()); + svgIDprefix = "id"+svgIDprefix+QString::number(svgUI++)+"_"; + int j, i=0; + QString _id; + while(1) { + i = svgNodeText.indexOf("id=\"", i); + if(i == -1) break; + j = svgNodeText.indexOf("\"", i+4); + _id = svgNodeText.mid(i+4, j-i-4); + for(int k=svgIDprefix.length()-1; k>=0; k--) + svgNodeText.insert(i+4, svgIDprefix[k]); + svgNodeText.replace("#"+_id, "#"+svgIDprefix+_id); + i = j+1; + } + + //qDebug() << " final saving to mem: " << (int)timer.elapsed()/1000; + + add(lvl, "
    "); + add(0, "\n\n"); + add(0, svgNodeText); + //foreach (QString s, svgNodeText.split("\n")) + // add(lvl, s); + add(0, "\n"); + + //qDebug() << "-- End of SVG "+infoEntityIdent+": " << (int)timer.elapsed()/1000; + } else { + QString imgfilename = QString(infoEntityIdent); + add(lvl, " "); + //if(toScorm) { + // add(lvl, " \"Показать\""); + // add(lvl, "
    "); + // add(lvl, " \"Показать\""); + // add(lvl, "
    "); + //} else { + // add(lvl, "
    "); + // add(lvl, " \"Показать\""); + // add(lvl, "
    "); + //} + } + //add(lvl, "
    "); + if(title != "") { + add(lvl, "
    " + title + "
    "); + cat("
    "); + } + //cat("
    "); + + if(!SM->isConsole) splash->SetTitle("Генерация HTML..."); + return; + } + + if(name == "table") { + bool oldParaIdent = paraIdent; paraIdent = false; + QString id, colsep, rowsep, frame, tocentry, align; id=frame=tocentry=align=""; colsep=rowsep="0"; + int cols; //, rows + for(int j=0;j"); + add(lvl, "
    "); + add(lvl+1, ""); + + QString title=""; + struct colspecStruct { + QString name, align, colwidth; }; + QList colspec; + struct spanspecStruct { + QString spanname; + int st, end; }; + QList spanspec; + + for(int j=0;j"); + //add(lvl+2, " "+title+""); + //add(lvl+2, ""); + } + if(node.childNodes().at(j).nodeName() == "tgroup") { + cols = -1; + for(int k=0;k");add(lvl, ""); return; } + for(int k=0;k"); + for(int l=0;l"); // или 0? + for(int m=0;m"); + } + } //entrys + add(lvl+3, ""); + } + add(lvl+2, ""); + }//thead, tbody + + } //tgroup childs + } //tgroup + } //table + + add(lvl+1, "
    "); + add(lvl, "
    "); + + add(lvl, "
    "); + cat("
    " + title + "
    "); + cat("

    "); + + labelStruct lbl; lbl.id = id; lbl.title = title; lbl.type = "tab"; + idList.append(lbl); + paraIdent = oldParaIdent; + return; + } + + if(name == "warning") { + bool oldParaIdent = paraIdent; paraIdent = false; + add(lvl, "
    "); + for(int j=0;j"); + for(int k=0;k"); + } + add(lvl, "
    "); + paraIdent = oldParaIdent; + return; + } + if(name == "caution") { + bool oldParaIdent = paraIdent; paraIdent = false; + add(lvl, "
    "); + for(int j=0;j"); + for(int k=0;k"); + } + add(lvl, "
    "); + paraIdent = oldParaIdent; + return; + } + if(name == "note") { + bool oldParaIdent = paraIdent; paraIdent = false; + add(lvl, "
    "); + for(int j=0;j
    "); + paraIdent = oldParaIdent; + return; + } + + if(name == "supScript" || name == "subScript") { + if(node.childNodes().count() == 1) + if(node.childNodes().at(0).nodeName() == "footnote" || node.childNodes().at(0).nodeName() == "footnoteRef") { + parseNode(node.childNodes().at(0), lvl); + return; + } + add(lvl, "<"+name.left(3)+" class=\"script_"+name.left(3)+"script\">"); + for(int j=0;j"); + return; + } + + if(name == "footnote") { + for(int j=0;j"); + cat(""); // + if(footnoteID != "") + cat(QString::number(acrList.count()));// + else + cat(newAcr.term); + cat(""); + +// cat("
    "); // +// cat(""); // +// if(footnoteID != "") +// cat(QString::number(acrList.count())); +// else +// cat(newAcr.term); +// cat(""); +// cat("
    "); +// cat(newAcr.definition); +// cat("
    "); + return; + } + + if(name == "footnoteRef") { + QString internalRefId = ""; + internalRefId = node.attributes().namedItem("internalRefId").nodeValue(); + + if(internalRefId == "") return; + QString term = "***", definition = "Ссылка на термин ID "+internalRefId+" некорректна"; + for(int j=0;j"); + cat(""); // + cat(term); + cat(""); + +// cat("
    "); +// cat(""); // +// cat(term); +// cat(""); +// cat("
    "); +// cat(definition); +// cat("
    "); + return; + } + + if(name == "externalPubRef") { + QDomNode codeNode, titleNode; + codeNode = node.childNodes().at(0).toElement().namedItem("externalPubCode"); + titleNode = node.childNodes().at(0).toElement().namedItem("externalPubTitle"); + + QString refType="", refName="", refTitle=""; + if(codeNode.attributes().item(0).toAttr().nodeName() == "pubCodingScheme") + refType = codeNode.attributes().item(0).toAttr().nodeValue(); + refName = codeNode.childNodes().at(0).nodeValue(); + refTitle = titleNode.childNodes().at(0).nodeValue(); + + if(refType == "URL") { + cat(""); + cat(refTitle); cat(""); + } + if(refType == "file") { // копируем всю папку с указанным файлом. Если такой нет - игнорируем + refName = refName; + //refTitle = refTitle; + QFileInfo info(SM->item->importedFromLyX); + QString refDir = info.absolutePath() + "/" + refName.split("/")[0]; + //QDir dir = QDir(refDir); + if(!QDir(refDir).exists() && !QDir(SM->projectPath+"/"+refName.split("/")[0]).exists()) { + cat("Гиперссылка: Папка "+refDir+" не найдена. Установите относительный путь к файлу."); + return; + } + + if(!QDir(SM->projectPath+"/"+refName.split("/")[0]).exists()) + SM->copyDir(refDir, SM->projectPath+"/"+refName.split("/")[0]); + + cat(""); + cat(refTitle); cat(""); + } + return; + } + + if(name == "multimedia") { + QString title="", infoEntityIdent="", multimediaType="", scname = ""; + title = node.toElement().namedItem("title").childNodes().at(0).nodeValue(); + infoEntityIdent = node.toElement().namedItem("multimediaObject").attributes().namedItem("infoEntityIdent").nodeValue(); + multimediaType = node.toElement().namedItem("multimediaObject").attributes().namedItem("multimediaType").nodeValue(); + scname = node.toElement().namedItem("multimediaObject").childNodes().at(0).attributes().namedItem("scenario").nodeValue(); + + if(multimediaType == "3D") { + //infoEntityIdent = infoEntityIdent; // копируем всю папку с указанным файлом. Если такой нет - игнорируем + QFileInfo info(SM->item->importedFromLyX); + QString refDir = info.absolutePath() + "/" + infoEntityIdent.split("/")[0]; +// if(!QDir(refDir).exists()) { +// cat("3D: Папка "+refDir+" не найдена. Установите относительный путь к файлу."); +// return; +// } + if(QDir(refDir).exists()) // && !QDir(SM->projectPath+"/"+infoEntityIdent.split("/")[0]).exists() + if(!SM->copyDir(refDir, SM->projectPath+"/"+infoEntityIdent.split("/")[0])) { + QMessageBox::critical(nullptr,"Ошибка", "Ошибка копирования папки '"+refDir+"'",QMessageBox::Ok); + return; + } + + iframeDivCnt++; + QString divID = "d"+QString::number(iframeDivCnt); + QString scfilename = SM->projectPath+"/"+ QFileInfo(infoEntityIdent).path()+"/StreamingAssets/Scenario/"+QFileInfo(scname).fileName(); + if(scname.toLower() == "freemode") { + QString divScName = scname+QString::number(iframeDivCnt); + QString iframeSrc = infoEntityIdent; + add(lvl, "
    "); + //add(lvl, ""); + } + else + if(QFile::exists(scfilename) || scname.toLower().startsWith("system_")) { + QString indexfn = SM->projectPath+"/"+ infoEntityIdent; + QString scenariofn = SM->projectPath+"/"+QFileInfo(infoEntityIdent).path() +"/"+ QFileInfo(scname).baseName()+".html"; + QFile indexFile(indexfn); + indexFile.open(QFile::ReadOnly | QFile::Text); + QString htmlData = QString(indexFile.readAll()); + indexFile.close(); + + htmlData.replace("FreeMode", scname); + + QFile scFile(scenariofn); + if(QFile::exists(scenariofn)) QFile::remove(scenariofn); + scFile.open(QFile::WriteOnly | QFile::Text); + QTextStream out(&scFile); out << htmlData; + scFile.close(); + // можно сделать чтение ширины/высоты с htmlData: + // canvas.style.width = "936px"; canvas.style.height = "526px"; + + // scRegister(scName, scTitle, divID, iframeSrc) + //
    + QString divScName = QFileInfo(scname).fileName(); + QString iframeSrc = QFileInfo(infoEntityIdent).path()+"/"+QFileInfo(scname).baseName()+".html"; + add(lvl, "
    "); + //add(lvl, ""); + } + else + { + add(lvl, "
    Сценарий " + scfilename + " не найден

    "); + } + + add(lvl, "
    " + title + "

    "); + } + + if(multimediaType == "video") { + QString id = "ID_mmo"+QString::number(ID_mmos++); + labelStruct lbl; lbl.id = id; lbl.title = title; lbl.type = "mmo"; + idList.append(lbl); + add(lvl, "
    "); + add(lvl, "
    "); + add(lvl, "
    "); + add(lvl, " "); + add(lvl, " "); + add(lvl, " "); + add(lvl, "
    "); + add(lvl, "
    "); + add(lvl, "
    " + title + "

    "); + add(lvl, "
    "); + } + + return; + } + + QString s = "(-unknown-) " + node.nodeName() + " " + node.nodeValue() + "
    "; + qDebug() << "Unknown S1000D node: "+node.nodeName(); + add(0, s); + //for(int j=0;jitem->html.append(spc(lvl)+s); +} + +void HTML::cat(QString s) { + int ind = SM->item->html.count()-1; + if(ind < 0) ind = 0; + SM->item->html[ind] += s; +} + +QString HTML::searchSVGNodeForText(QDomNode node) { + if(node.nodeName() == "tspan") + return node.childNodes().at(0).nodeValue(); + for(int j=0;jВ полете: Величина непревышаемой скорости полета (VNE +// +// +// VNE +// Величина непревышаемой скорости +// ) составляет 300 км/ч. + +// Величина непревышаемой скорости полета VNE +// при работе + +//NE +// + +//void clearDir( const QString path ) +//{ +// QDir dir( path ); + +// dir.setFilter( QDir::NoDotAndDotDot | QDir::Files ); +// foreach( QString dirItem, dir.entryList() ) +// dir.remove( dirItem ); + +// dir.setFilter( QDir::NoDotAndDotDot | QDir::Dirs ); +// foreach( QString dirItem, dir.entryList() ) +// { +// QDir subDir( dir.absoluteFilePath( dirItem ) ); +// subDir.removeRecursively(); +// } +//} + + +//tmp: +//http://digitalnativestudios.com/textmeshpro/docs/rich-text/#color diff --git a/s1000d/Converter_Source/html.h b/s1000d/Converter_Source/html.h new file mode 100644 index 0000000..ba808f7 --- /dev/null +++ b/s1000d/Converter_Source/html.h @@ -0,0 +1,43 @@ +#ifndef HTML_H +#define HTML_H + +#include "s1000d_manager.h" +#include "ru_const.h" +#include "splashform.h" + +class HTML +{ +public: + HTML(); + void Generate(S1000D_Manager* SM, bool _toScorm, SplashForm* _splash); + void parseNode(QDomNode node, int lvl); + QString spc(int n); + void add(int lvl, QString s); + void cat(QString s); + QString searchSVGNodeForText(QDomNode g); + + S1000D_Manager* SM; + RU_Const *ru_const; + SplashForm* splash; + bool DBG = true; + bool toScorm; + int ID_pars, ID_tabs, ID_figs, ID_mmos; + struct labelStruct { + QString title, id; + QString type; + }; + QList idList; + struct acronymStruct { + QString id, term, definition; + }; + QList acrList; + QString footnoteID; + int svgUI; + bool paraIdent=true; + QString paraTextAlign; + int iframeDivCnt; + + QString domElementToXML(const QDomElement& elem, int lvl); +}; + +#endif // HTML_H diff --git a/s1000d/Converter_Source/lyx.cpp b/s1000d/Converter_Source/lyx.cpp new file mode 100644 index 0000000..5adf0fe --- /dev/null +++ b/s1000d/Converter_Source/lyx.cpp @@ -0,0 +1,2254 @@ +#include "lyx.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include + +LyX::LyX() +{ + +} + +bool LyX::Import(S1000D_Manager* _SM, QString fileName, SplashForm* _splash) { + SM = _SM; + ru_const = &SM->ru_const; splash = _splash; + if(!SM->isConsole) + { splash->Reset(); splash->SetTitle("Копирование файлов..."); } + + // создаем папку Develop (SM->projectPath), файлы с нее перемещаем в Develop\Backup + QFileInfo info1(fileName); + QString filePath = info1.absolutePath(); + QDir dir = QDir(filePath+"/Develop"); + if (!dir.exists()) dir.mkdir(filePath+"/Develop"); + SM->projectPath = filePath+"/Develop"; + + enum OperatingSytem {OS_WINDOWS, OS_UNIX, OS_LINUX, OS_MAC} os; + #if (defined (Q_OS_WIN) || defined (Q_OS_WIN32) || defined (Q_OS_WIN64)) + os = OS_WINDOWS; + #elif (defined (Q_OS_UNIX)) + os = OS_UNIX; + #elif (defined (Q_OS_LINUX)) + os = OS_LINUX; + #elif (defined (Q_OS_MAC)) + os = OS_MAC; + #endif + QStringList params; + + //AllocConsole(); //AttachConsole(GetCurrentProcessId()); + if(os == OS_WINDOWS) { + QString winpath1 = SM->projectPath; winpath1.replace("/","\\"); + params << "/C"<<"xcopy"<<"/E" << "/C" << "/Y"<< QCoreApplication::applicationDirPath().replace("/","\\")+"\\Scorm\\app" << winpath1+"\\app\\" << ">nul"; + if(!SM->isConsole) + QProcess::startDetached("cmd.exe", params); + else + { + QProcess cmdProc; + cmdProc.setProgram("cmd.exe"); cmdProc.setArguments(params); + cmdProc.start(); + while(!cmdProc.waitForFinished(50)) {}; + } + } else { + params << "-r"<< QCoreApplication::applicationDirPath()+"/Scorm/app" << SM->projectPath+"/app/";// << "> /dev/null"; + if(!SM->isConsole) + QProcess::startDetached("cp", params); + else + { + QProcess cmdProc; + cmdProc.setProgram("cp"); cmdProc.setArguments(params); + cmdProc.start(); + while(!cmdProc.waitForFinished(50)) {}; + } + + } + //FreeConsole(); + + QDir dirBackup(SM->projectPath+"/Backup"); + dirBackup.removeRecursively(); + //dirBackup.mkpath("."); + + QDir dirProj(SM->projectPath); + dirProj.setFilter( QDir::NoDotAndDotDot | QDir::Files | QDir::AllDirs); + dirProj.setNameFilters(QStringList() << "*.*"); + dirProj.mkdir("Backup"); + foreach( QString dirItem, dirProj.entryList() ) { + if(!SM->isConsole) + { splash->Step(); splash->Step(); splash->Step(); splash->Step(); } + QFileInfo fileInfo(dirItem); + if(dirItem != "Backup" && dirItem != "app") { + //qDebug() << dirItem; + dirProj.rename(dirItem, SM->projectPath+"/Backup/" + fileInfo.fileName()); + } + } + + SM->clearItems(); + lyxFileStack.clear(); lyxList.clear(); + +// lyxLog.clear(); + +// if(SM->item->schemeType == stDESCRIPT) domContentPath = "content.description"; +// if(SM->item->schemeType == stCREW) domContentPath = "content.crew.descrCrew"; +// domRootNode = SM->findElement(domContentPath); +// //QString domCurLevelPath = domContentPath; +// //QDomNode domCurLevelNode = domRootNode; + +// while(domRootNode.hasChildNodes()) +// domRootNode.removeChild(domRootNode.firstChild()); + +// if(!SM->isNodeCreated("rdf:Description")) { +// QDomNode descr = SM->item->doc.createElement("rdf:Description"); +// SM->findElement("").insertBefore(descr, SM->findElement("").firstChild()); +// } +// if(!SM->isNodeCreated("rdf:Description.dc:source")) SM->createNode("rdf:Description", "dc:source"); +// SM->setNodeText("rdf:Description.dc:source", QFileInfo(fileName).fileName()); +// SM->item->importedFromLyX = QFileInfo(fileName).fileName(); + + + docChapter = docSection = docSubsection = -1; + curChapterItem = curSectionItem = curSubsectionItem = -1; + tocItemNum = acrListItemNum = -1; + tableOfContentsRoot.childs.clear(); domTableOfContentsNode.clear(); domAcronymListNode.clear(); + labelList.clear(); acronymList.clear(); refList.clear(); + cntTable = cntFigure = cntPar = globalTable = globalFigure = globalPar = 0; + tableTitle = ""; tableID = ""; + flags.align = ""; flags.bold = false; flags.italic = false; flags.underlined = false; + domRootNode.clear(); + + if(!SM->isConsole) + splash->SetTitle("Чтение файла LyX..."); + + if(!readLyXFile(fileName, true)) + return false; + + if(tocItemNum != -1) { // заполняем Содержание + SM->setCurItem(tocItemNum); + QDomNode tocTitleNode = SM->item->doc.createElement("para"); + domTableOfContentsNode.appendChild(tocTitleNode); tocTitleNode.appendChild(SM->item->doc.createTextNode(ru_const->tableOfContents+"\n")); + fillTableOfContents(tableOfContentsRoot, domTableOfContentsNode, " "); + } + if(acrListItemNum != -1) { // заполняем список сокращений + SM->setCurItem(acrListItemNum); + fillAcronymList(domAcronymListNode); + } + + return true; +} + +bool LyX::readLyXFile(QString fileName, bool isMainFile) { + //if(DBG) qDebug() << "reading" << fileName; + QFile lyxFile(fileName); + if(!lyxFile.open(QFile::ReadOnly | QFile::Text)) { + //lyxLog.append("Error: LyX file not found!"); + if(DBG) qDebug() << "Error: LyX file not found - " + fileName; + return false; + } + lyxList.clear(); + lyxList = QString(lyxFile.readAll()).split("\n"); + lyxFile.close(); + lyxEmptyCnt.clear(); + + int delCnt = 0; + for(int i=0;iitems[curSubsectionItem].lyxLog = lyxLog; + + //for(int i=0;iitems.count();i++) + // qDebug() << i << SM->items[i].fileName << SM->items[i].doc.namedItem("dmodule").nodeName() << SM->items[i].doc.namedItem("dmodule").childNodes().count(); + //qDebug() << ""; + + //SM->SaveProject(); + + if(isMainFile) { + connectRefsWithLabels(); + + for(int i=0;iitems.count();i++) + if(SM->items[i].lyxLog.count() == 2) SM->items[i].lyxLog.append("#Завершено без ошибок."); + } + + return true; +} + +int LyX::findTagEnd(int _beg) { + if(!lyxList.at(_beg).startsWith("\\begin_")) { + if(DBG) qDebug() << "Error: findTagEnd not startsWith(\"\\begin_\")"; + return -1; + } + QString tagName = lyxList.at(_beg); + if(tagName.indexOf(" ") != -1) + tagName = tagName.left(tagName.indexOf(" ")); + tagName = tagName.mid(7); + int _insideCnt = 0; + QString itemText; + for(int i=_beg+1;i 649, 541, 547 +void LyX::parseBlock(int _beg, int _end, QDomNode _domCurLevelNode) { + pushFlags(); + if(!SM->isConsole) + splash->Step(); + QDomNode domCurLevelNode = _domCurLevelNode; + QDomNode domCurLevelSubsection; + QString blockText = ""; + QString itemName; + for(int i=_beg;i<=_end;i++) { + itemName = lyxList.at(i); + if(itemName == "") continue; + + + if(itemName == "\\begin_layout Title") { + QString title = ""; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + for(int j=_childBeg+1;j<_childEnd;j++) + title += lyxList.at(j); + i = _childEnd; + //if(!SM->isNodeCreated("rdf:Description.dc:title")) SM->createNode("rdf:Description", "dc:title"); + //SM->setNodeText("rdf:Description.dc:title", title); + continue; + } + + if(itemName == "\\begin_layout Chapter*" || itemName == "\\begin_layout Chapter") { + QString title = ""; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + for(int j=_childBeg+1;j<_childEnd;j++) { + if(lyxList.at(j).startsWith("\\size")) continue; + title += lyxList.at(j); + } + i = _childEnd; + title = title.replace("/n", "").replace(":", ""); + //lyxLog.append(" "+title); + //if(itemName == "\\begin_layout Chapter") + // lyxLog.append("#["+QString::number(_childBeg+lyxEmptyCnt[_childBeg])+"] Необходимо использовать стиль текста \"Глава*\" вместо \"Глава\""); + //if(DBG) qDebug() << "" + title; + appendChapter(title); + checkForOldIdent(); + SM->item->importedFromLyX = curLyXFileName; + domCurLevelNode = SM->item->doc.namedItem("pm").namedItem("content"); + continue; + } + + if(itemName == "\\begin_layout Section*" || itemName == "\\begin_layout Section") { + QString title = ""; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + for(int j=_childBeg+1;j<_childEnd;j++){ + if(lyxList.at(j).startsWith("\\size")) continue; + title += lyxList.at(j); + } + i = _childEnd; + title = title.replace("/n", "").replace(":", ""); + //lyxLog.append(" "+title); + //if(itemName == "\\begin_layout Section") + // lyxLog.append("#["+QString::number(_childBeg+lyxEmptyCnt[_childBeg])+"] Необходимо использовать стиль текста \"Раздел*\" вместо \"Раздел\""); + //if(DBG) qDebug() << " " + title; + if(docChapter == -1) appendChapter(""); + appendSection(title); + checkForOldIdent(); + SM->item->importedFromLyX = curLyXFileName; + domCurLevelNode = SM->item->doc.namedItem("pm").namedItem("content"); + continue; + } + + if(itemName == "\\begin_layout Subsection*" || itemName == "\\begin_layout Subsection") { + QString title = ""; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + for(int j=_childBeg+1;j<_childEnd;j++){ + if(lyxList.at(j).startsWith("\\size")) continue; + title += lyxList.at(j); + } + i = _childEnd; + title = title.replace("/n", "").replace(":", ""); + //lyxLog.append(" "+title); + //if(itemName == "\\begin_layout Subsection") + // lyxLog.append("#["+QString::number(_childBeg+lyxEmptyCnt[_childBeg])+"] Необходимо использовать стиль текста \"Подраздел*\" вместо \"Подраздел\""); + //if(DBG) qDebug() << " " + title; + + //qDebug() << internalRefList.count(); + /* + for(int j=0;jitem->isQualifyed = false; ??? + } + internalRefList.clear(); */ + + if(docChapter == -1) appendChapter(""); + //if(docSection == -1) appendSection(""); + appendSubsection(title); + checkForOldIdent(); + SM->item->importedFromLyX = curLyXFileName; + lyxLog.clear(); + QDate date = QDate::currentDate(); QTime time = QTime::currentTime(); + lyxLog.append(" "+date.toString(Qt::SystemLocaleLongDate)+" "+time.toString("hh:mm")+" Импорт модуля из файла "+curLyXFileName); lyxLog.append(""); + + //qDebug() << "lyx: " << curLyXFileName; + + if(SM->item->schemeType == stDESCRIPT) + domCurLevelNode = SM->findElement("content.description"); + if(SM->item->schemeType == stLEARNING) + domCurLevelNode = SM->findElement("content.learning.learningAssessment"); + domCurLevelSubsection = domCurLevelNode; + + if(SM->item->schemeType == stLEARNING) + i = parseLearningModule(domCurLevelNode, i+1, _end); + + continue; + } + + if(itemName == "\\begin_layout Standard" && lyxList[i+1] == "\\begin_inset CommandInset include") { + QString filename = ""; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + for(int j=_childBeg+1;j<_childEnd;j++) + if(lyxList[j].startsWith("filename")) { + filename = lyxList[j].mid(9).replace("\"",""); + pushLyXFileData(); + readLyXFile(SM->projectPath.left(SM->projectPath.length()-7) + "/" + filename, false); + popLyXFileData(); + } + i = _childEnd; + + continue; + } + + if(curSubsectionItem == -1) continue; // пока не дошли до модуля данных - читаем только заголовки + + if(SM->item->schemeType == stLEARNING) continue; + + if(itemName == "\\begin_layout Subsubsection*" || itemName == "\\begin_layout Subsubsection") { + QString title = ""; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + for(int j=_childBeg+1;j<_childEnd;j++){ + if(lyxList.at(j).startsWith("\\size")) continue; + title += lyxList.at(j); + } + i = _childEnd; + + if(domCurLevelSubsection.isNull()) + blockText += title+"\n"; + else { + QDomNode levelledPara = SM->item->doc.createElement("levelledPara"); + domCurLevelSubsection.appendChild(levelledPara); + QDomNode titleNode = SM->item->doc.createElement("title"); + titleNode.appendChild(SM->item->doc.createTextNode(title)); + levelledPara.appendChild(titleNode); + domCurLevelNode = levelledPara; + } + + continue; + } + + if(itemName == "\\begin_layout Paragraph*" || itemName == "\\begin_layout Paragraph") { + QString title = ""; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + for(int j=_childBeg+1;j<_childEnd;j++){ + if(lyxList.at(j).startsWith("\\size")) continue; + title += lyxList.at(j); + } + i = _childEnd; + + _childBeg = i; + + QDomNode levelledPara = SM->item->doc.createElement("levelledPara"); + domCurLevelNode.appendChild(levelledPara); + QDomNode titleNode = SM->item->doc.createElement("title"); + titleNode.appendChild(SM->item->doc.createTextNode(title)); + levelledPara.appendChild(titleNode); + + _childEnd = _end; + for(int j=_childBeg;j<=_end;j++) { + if(lyxList.at(j).startsWith("\\begin_layout Section") || lyxList.at(j).startsWith("\\begin_layout Subsection") || + lyxList.at(j).startsWith("\\begin_layout Subsubsection") || lyxList.at(j).startsWith("\\begin_layout Paragraph")) { + _childEnd = j-1; break; + } + } + i = _childEnd; + parseBlock(_childBeg+1, _childEnd, levelledPara); + continue; + } + + if(itemName == "\\begin_layout Subparagraph*" || itemName == "\\begin_layout Subparagraph") { + QString title = ""; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + for(int j=_childBeg+1;j<_childEnd;j++){ + if(lyxList.at(j).startsWith("\\size")) continue; + title += lyxList.at(j); + } + i = _childEnd; + + _childBeg = i; + + QDomNode levelledPara = SM->item->doc.createElement("levelledPara"); + domCurLevelNode.appendChild(levelledPara); + QDomNode titleNode = SM->item->doc.createElement("title"); + titleNode.appendChild(SM->item->doc.createTextNode(title)); + levelledPara.appendChild(titleNode); + + _childEnd = _end; + for(int j=_childBeg;j<=_end;j++) { + if(lyxList.at(j).startsWith("\\begin_layout Section") || lyxList.at(j).startsWith("\\begin_layout Subsection") || + lyxList.at(j).startsWith("\\begin_layout Subsubsection") || lyxList.at(j).startsWith("\\begin_layout Paragraph") || + lyxList.at(j).startsWith("\\begin_layout Subparagraph")) { + _childEnd = j-1; break; + } + } + i = _childEnd; + parseBlock(_childBeg+1, _childEnd, levelledPara); + continue; + } + + if((itemName == "\\begin_layout Standard" && lyxList[i+1] == "\\begin_inset Box Shaded") || + (itemName == "\\begin_inset Box Shaded")) { + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + QDomNode warning = SM->item->doc.createElement("warning"); + domCurLevelNode.appendChild(warning); + + for(int j=_childBeg;j<_childEnd;j++) { + int _textBeg = findTag(j, _childEnd-1, "\\begin_layout Plain Layout"); + if(_textBeg == -1) break; + int _textEnd = findTagEnd(_textBeg); + j = _textEnd; + QDomNode warningAndCautionPara = SM->item->doc.createElement("warningAndCautionPara"); + warning.appendChild(warningAndCautionPara); + parseBlock(_textBeg+1, _textEnd-1, warningAndCautionPara); + } + i = _childEnd; + continue; + } + + if((itemName == "\\begin_layout Standard" && lyxList[i+1].startsWith("\\begin_inset Box")) || + (itemName == "\\begin_inset Box")) { + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + QDomNode warning = SM->item->doc.createElement("caution"); + domCurLevelNode.appendChild(warning); + + for(int j=_childBeg;j<_childEnd;j++) { + int _textBeg = findTag(j, _childEnd-1, "\\begin_layout Plain Layout"); + if(_textBeg == -1) break; + int _textEnd = findTagEnd(_textBeg); + j = _textEnd; + QDomNode warningAndCautionPara = SM->item->doc.createElement("warningAndCautionPara"); + warning.appendChild(warningAndCautionPara); + parseBlock(_textBeg+1, _textEnd-1, warningAndCautionPara); + } + i = _childEnd; + continue; + } + + if((itemName == "\\begin_layout Standard" && (lyxList[i+1] == "\\begin_inset Note Greyedout" || lyxList[i+2] == "\\begin_inset Note Greyedout" || lyxList[i+3] == "\\begin_inset Note Greyedout")) || + (itemName == "\\begin_inset Note Greyedout")) { + int _childBeg, _childEnd; + _childBeg = findTag(i, _end, "\\begin_inset Note Greyedout"); + _childEnd = findTagEnd(_childBeg); + int _textBeg = findTag(_childBeg+2, _childEnd-1, "\\begin_layout Plain Layout"); + int _textEnd = findTagEnd(_textBeg); + + QDomNode note = SM->item->doc.createElement("note"); + domCurLevelNode.appendChild(note); + QDomNode notePara = SM->item->doc.createElement("notePara"); + note.appendChild(notePara); + parseBlock(_textBeg+1, _textEnd-1, notePara); + + _childEnd = findTagEnd(i); + i = _childEnd; + continue; + } + + if(itemName[0] != "\\") { blockText += itemName; continue; } + if(itemName == "\\backslash") { blockText += "\\"; continue; } + if(itemName[0] == "\\" && blockText != "") { + QDomNode blockTextNode = SM->item->doc.createTextNode(blockText); + QDomNode tmpCurNode = domCurLevelNode; + if(flags.bold) { + QDomNode emphasisNode = SM->item->doc.createElement("emphasis"); + tmpCurNode.appendChild(emphasisNode); tmpCurNode = emphasisNode; + } + if(flags.italic) { + QDomNode emphasisNode = SM->item->doc.createElement("emphasis"); + emphasisNode.toElement().setAttribute("emphasisType", "em02"); //"em03" Underline, "em04" Overline, "em05" Strikethrough, "em51" - "em99" Available for projects + tmpCurNode.appendChild(emphasisNode); tmpCurNode = emphasisNode; + } + if(flags.underlined) { + QDomNode emphasisNode = SM->item->doc.createElement("emphasis"); + emphasisNode.toElement().setAttribute("emphasisType", "em03"); //"em04" Overline, "em05" Strikethrough, "em51" - "em99" Available for projects + tmpCurNode.appendChild(emphasisNode); tmpCurNode = emphasisNode; + } + tmpCurNode.appendChild(blockTextNode); + blockText = ""; + } + + if(itemName == "\\begin_layout Plain Layout" || itemName == "\\begin_layout Standard") { + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + + QDomNode paraNode = SM->item->doc.createElement("para"); + domCurLevelNode.appendChild(paraNode); + + pushFlags(); + parseBlock(_childBeg+1, _childEnd-1, paraNode); + popFlags(); + + i = _childEnd; + continue; + } + + if(itemName == "\\begin_layout Enumerate" || itemName == "\\begin_layout Itemize") { // +// QDomNode titleNodeClone; +// if(domCurLevelNode.hasChildNodes()) +// if(domCurLevelNode.lastChild().nodeName() == "para") { +// titleNodeClone = domCurLevelNode.lastChild().cloneNode(); +// domCurLevelNode.removeChild(domCurLevelNode.lastChild()); +// titleNodeClone.toElement().setTagName("title"); +// } + QDomNode lastPara; + if(domCurLevelNode.hasChildNodes()) + if(domCurLevelNode.lastChild().nodeName() == "para") + lastPara = domCurLevelNode.lastChild(); + + QDomNode listNode; + if(itemName == "\\begin_layout Enumerate") listNode = SM->item->doc.createElement("sequentialList"); + if(itemName == "\\begin_layout Itemize") listNode = SM->item->doc.createElement("randomList"); + domCurLevelNode.appendChild(listNode); +// QDomNode titleNode; +// if(titleNodeClone.isNull()) { +// //titleNode = SM->item->doc.createElement("title"); +// //titleNode.appendChild(SM->item->doc.createTextNode("")); +// //listNode.appendChild(titleNode); +// } +// else { +// titleNode = SM->item->doc.importNode(titleNodeClone, true); +// listNode.appendChild(titleNode); +// } + + if(!lastPara.isNull()) // вышестоящий абзац берем как заголовок, делаем из para -> title + { + QDomNode titleNode = SM->item->doc.createElement("title"); + while(lastPara.hasChildNodes()) { + QDomNode ch = lastPara.removeChild(lastPara.firstChild()); + titleNode.appendChild(ch); + } + listNode.appendChild(titleNode); + lastPara.parentNode().removeChild(lastPara); + + QList list; + QDomNode node; + list.append(titleNode); + + while(!list.isEmpty()) { // обновляем refList и labelList для перемещенных узлов + node = list.takeFirst(); + if(node.nodeName().startsWith("blankRefNode")) { + for(int n=0;nmakeNodeXPath(node); + break; + } + } + QString nodeID = node.attributes().namedItem("id").nodeValue(); + if(nodeID != "") + for(int n=0;nmakeNodeXPath(node); + //if(labelList[n].lyxLabel == "fig:Рисунок 1 Общий вид АРМ ПЛС на Су-35С") { + // qDebug() << "lyx: Itemize UPDATE ["+QString::number(n)+"] lyxLabel = " << labelList[n].lyxLabel; + // qDebug() << " old nodeXPath = "+oldXPath; + // qDebug() << " new nodeXPath = "+labelList[n].nodeXPath; + //} + break; + } + + for(int n=0;nitem->doc.createElement("listItem"); + listNode.appendChild(listItemNode); + QDomNode listItemPara = SM->item->doc.createElement("para"); + listItemNode.appendChild(listItemPara); + pushFlags(); + parseBlock(_childBeg+1, _childEnd-1, listItemPara); + popFlags(); + j = _childEnd; + continue; + } + break; + } + + i = _childEnd; + continue; + } + + if(itemName == "\\series bold") { + flags.bold = true; continue; } + if(itemName == "\\series default") { + flags.bold = false; continue; } + if(itemName == "\\shape italic" || itemName == "\\emph on") { + flags.italic = true; continue; } + if(itemName == "\\shape default" || itemName == "\\emph default") { + flags.italic = false; continue; } + if(itemName == "\\bar under" || itemName == "\\uuline on" || itemName == "\\uwave on") { + flags.underlined = true; continue; } + if(itemName == "\\bar default" || itemName == "\\uuline default" || itemName == "\\uwave default") { + flags.underlined = false; continue; } + + if(itemName.startsWith("\\color")) { + lyxLog.append("#["+QString::number(i)+"] Цветовое выделение не поддерживается ("+itemName+")"); + continue; + } + if(itemName.startsWith("\\size")) { + //lyxLog.append("#["+QString::number(i+lyxEmptyCnt[i])+"] Изменение размера шрифта не поддерживается ("+itemName+")"); + continue; + } + if(itemName.startsWith("\\align")) { + lyxLog.append("#["+QString::number(i+lyxEmptyCnt[i])+"] Выравнивание элементов не поддерживается ("+itemName+")"); + continue; + } + if(itemName.startsWith("\\strikeout")) { continue; } // игнорируем: + if(itemName.startsWith("\\xout")) { continue; } + if(itemName.startsWith("\\family")) { continue; } + if(itemName.startsWith("\\series")) { continue; } + if(itemName.startsWith("\\size")) { continue; } + if(itemName.startsWith("\\emph")) { continue; } + if(itemName.startsWith("\\bar")) { continue; } + if(itemName.startsWith("\\strikeout")) { continue; } + if(itemName.startsWith("\\uuline")) { continue; } + if(itemName.startsWith("\\uwave")) { continue; } + if(itemName.startsWith("\\noun")) { continue; } + if(itemName.startsWith("\\shape")) { continue; } + + + if(itemName.startsWith("\\begin_inset")) { + QString insetName = itemName.mid(13); + int _insetBeg, _insetEnd; + _insetBeg = i; _insetEnd = findTagEnd(_insetBeg); + i = _insetEnd; // !!! не трогать + //pushFlags(); // надо? + + if(insetName == "CommandInset toc") { //Содержание + tocItemNum = curSubsectionItem; + domTableOfContentsNode = SM->item->doc.createElement("para"); + domCurLevelNode.appendChild(domTableOfContentsNode); + continue; + } + if(insetName == "CommandInset nomencl_print") { //Список сокращений + acrListItemNum = curSubsectionItem; + domAcronymListNode = SM->item->doc.createElement("para"); + domCurLevelNode.appendChild(domAcronymListNode); + continue; + } + + if(insetName == "Foot") { + QString footName = ""; + QString termDef = ""; + + int _plainEnd=_insetBeg; + int _labelEnd=_insetBeg; + for(int j=_insetBeg+1;j<_insetEnd;j++) + if(lyxList.at(j).startsWith("\\begin_layout Plain Layout")) { + _plainEnd = findTagEnd(j); _labelEnd = j+1; + for(int k=j+1;k<_insetEnd;k++) + if(lyxList.at(k).startsWith("\\begin_inset CommandInset label")) { + _labelEnd = findTagEnd(k); + footName = ""; + for(int l=k+1;l<=_labelEnd;l++) + if(lyxList.at(l).startsWith("name")) { + footName = lyxList.at(l).mid(6).replace("\"", ""); + break; + } + break; + } + break; + } + for(int j=_labelEnd+1;j<_plainEnd;j++) { + if(lyxList.at(j) == "") continue; + if(lyxList.at(j).startsWith("\\")) { + lyxLog.append("!["+QString::number(j+lyxEmptyCnt[j])+"] Ошибка в структуре сноски: в теле сноски("+footName+") ожидался текст"); + SM->item->isQualifyed = false; + continue; + } + termDef += lyxList.at(j); + } + + if(footName == "") { + lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Ошибка в структуре сноски: остутствует метка"); + SM->item->isQualifyed = false; + continue; + } + + int acroNum = -1; + for(int j=0;jitem->doc.createElement("footnote"); + domCurLevelNode.appendChild(footNode); + footNode.toElement().setAttribute("id", acronymList[acroNum].id); + QDomNode acronymNode = SM->item->doc.createElement("acronym"); + domCurLevelNode.appendChild(acronymNode); + QDomNode acronymTermNode = SM->item->doc.createElement("acronymTerm"); + acronymNode.appendChild(acronymTermNode); + acronymTermNode.appendChild(SM->item->doc.createTextNode(acronymList[acroNum].term)); + QDomNode acronymDefinitionNode = SM->item->doc.createElement("acronymDefinition"); + acronymNode.appendChild(acronymDefinitionNode); + acronymDefinitionNode.toElement().setAttribute("id", acronymList[acroNum].id); + acronymDefinitionNode.appendChild(SM->item->doc.createTextNode(acronymList[acroNum].definition)); + continue; + } + + if(insetName == "CommandInset nomenclature") { // acronym + QString term = "", termDef = ""; + if(lyxList[_insetBeg+2].split(" ")[0] == "symbol") + term = lyxList[_insetBeg+2].mid(7).replace("\"",""); + if(lyxList[_insetBeg+3].split(" ")[0] == "description") + termDef = lyxList[_insetBeg+3].mid(12).replace("\"",""); + int acroNum = -1; + for(int j=0;jitem->doc.createElement("acronym"); + domCurLevelNode.appendChild(acronymNode); + QDomNode acronymTermNode = SM->item->doc.createElement("acronymTerm"); + acronymNode.appendChild(acronymTermNode); + acronymTermNode.appendChild(SM->item->doc.createTextNode(acronymList[acroNum].term)); + QDomNode acronymDefinitionNode = SM->item->doc.createElement("acronymDefinition"); + acronymNode.appendChild(acronymDefinitionNode); + acronymDefinitionNode.toElement().setAttribute("id", acronymList[acroNum].id); + acronymDefinitionNode.appendChild(SM->item->doc.createTextNode(acronymList[acroNum].definition)); + continue; + } + + if(insetName == "CommandInset ref") { + //if(lyxList.at(_insetBeg+2).split(" ")[0] != "reference") continue; + QString refID = ""; + for(int l=_insetBeg+2;l<=_insetEnd;l++) + if(lyxList.at(l).startsWith("reference")) { + refID = QString(lyxList.at(l)).mid(11).replace("\"", ""); + break; + } + if(refID == "") continue; + //lyxList.at(_insetBeg+2).right(lyxList.at(_insetBeg+2).length() - 10).replace("\"", ""); + + if(refID.left(3) == "fn:") { // ссылка на footnote + int acroNum = -1; + for(int j=0;jitem->doc.createElement("footnoteRef"); + footnoteRef.toElement().setAttribute("internalRefId", acronymList[acroNum].id); + domCurLevelNode.appendChild(footnoteRef); + } else { // внутренняя ссылка + /* + int foundLabel = -1; + for(int j=0;j "+labelList[foundLabel].id; + refID = labelList[foundLabel].id; + } + */ + + QDomNode internalRef = SM->item->doc.createElement("blankRefNode"+QString::number(refList.count())); + domCurLevelNode.appendChild(internalRef); + + refStruct ref; + ref.itemInd = SM->itemIndex; + ref.labelFound = false; + ref.lineNum = _insetBeg+lyxEmptyCnt[_insetBeg]; + ref.lyxRef = refID; + //internalRef = domCurLevelNode.childNodes().at(domCurLevelNode.childNodes().count()-1); + ref.nodeXPath = SM->makeNodeXPath(internalRef); + + refList.append(ref); + } + continue; +// attribute internalRefTargetType - Тип объекта внутренней ссылки [BRDP-S1-00100] (Глава 3.9.6.1, таблица 25) +// irtt01 Рисунок (figure) +// irtt02 table (table) +// irtt03 Мультимедиа (multimedia) +// irtt04 Предмет поставки (supply) +// irtt05 Вспомогательное оборудование (supportEquip) +// irtt06 Запасная деталь (spare) +// irtt07 Параграф (para, levelledPara) +// irtt08 Шаг (proceduralStep, faultIsolationStep, crewDrillStep) +// irtt09 Графическое изображение (graphic) +// irtt10 Мультимедийный объект (multimediaObject) +// irtt11 Активный участок (hotspot) +// irtt12 Параметр (parameter) +// irtt13 Зона (zone) +// irtt14 Место работы (workArea) +// irtt15 Набор материалов сервисного бюллетеня (в том числе отдельные, внешние и снятые материалы) +// irtt16 Точка доступа (accessPoint) +// + } + + if(insetName == "CommandInset href") { +// +// //externalPubCode +// Заполнение элемента externalPubCode — Не использовать [BRDP-S1-00540] +// +// +// //externalPubRef +// Формат ссылок в АУК — Не использовать [BRDP-S1-00543] +// + QString name, target, type; name = target = type = ""; + for(int j=_insetBeg+1;j<_insetEnd;j++) { + if(lyxList[j].startsWith("name ")) name = lyxList[j].mid(5).replace("\"", ""); + if(lyxList[j].startsWith("target ")) target = lyxList[j].mid(7).replace("\"", ""); + if(lyxList[j].startsWith("type ")) type = lyxList[j].mid(5).replace("\"", ""); + } + if(name == "" || target == "") { + lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Ошибка в гиперссылке ("+name+", "+target+")"); + SM->item->isQualifyed = false; + continue; + } + QDomNode externalPubRef = SM->item->doc.createElement("externalPubRef"); + domCurLevelNode.appendChild(externalPubRef); + QDomNode externalPubRefIdent = SM->item->doc.createElement("externalPubRefIdent"); + externalPubRef.appendChild(externalPubRefIdent); + QDomNode externalPubCode = SM->item->doc.createElement("externalPubCode"); + externalPubRefIdent.appendChild(externalPubCode); + if(type == "file:") + externalPubCode.toElement().setAttribute("pubCodingScheme", "file"); + else + externalPubCode.toElement().setAttribute("pubCodingScheme", "URL"); + + externalPubCode.appendChild(SM->item->doc.createTextNode(target.replace("\\","/"))); + QDomNode externalPubTitle = SM->item->doc.createElement("externalPubTitle"); + externalPubRefIdent.appendChild(externalPubTitle); + externalPubTitle.appendChild(SM->item->doc.createTextNode(name)); + + continue; + } + + if(insetName == "script superscript") { + QDomNode scriptNode = SM->item->doc.createElement("supScript"); + domCurLevelNode.appendChild(scriptNode); + for(int j=_insetBeg+1;j<_insetEnd;j++) + if(lyxList.at(j).startsWith("\\begin_layout Plain Layout")) { + parseBlock(j+1, findTagEnd(j)-1, scriptNode); + break; + } + continue; + } + if(insetName == "script subscript") { + QDomNode scriptNode = SM->item->doc.createElement("subScript"); + domCurLevelNode.appendChild(scriptNode); + for(int j=_insetBeg+1;j<_insetEnd;j++) + if(lyxList.at(j).startsWith("\\begin_layout Plain Layout")) { + parseBlock(j+1, findTagEnd(j)-1, scriptNode); + break; + } + continue; + } + + if(insetName == "Float figure") { + figureTitle = ""; figureID = ""; + QString lyxID=""; + int _graphicsBeg = -1; int _graphicsEnd = -1; + for(int j=_insetBeg+1;j<_insetEnd;j++) { + if(lyxList.at(j).startsWith("\\begin_inset Graphics")) { + _graphicsBeg = j; _graphicsEnd = findTagEnd(j); + j = _graphicsEnd; + } + if(lyxList.at(j).startsWith("\\begin_inset Caption Standard")) { + int _capEnd = findTagEnd(j); + for(int k=j+1;k<_capEnd;k++) { + if(lyxList.at(k).startsWith("\\begin_inset CommandInset label")) { + int _labelEnd = findTagEnd(k); + for(int l=k+1;l<_labelEnd;l++) + if(lyxList.at(l).startsWith("name")) { + lyxID = lyxList.at(l).right(lyxList.at(l).length() - 5).replace("\"", ""); + break; + } + k = _labelEnd; + } + if(!lyxList.at(k).startsWith("\\")) + figureTitle += lyxList.at(k); + } + } + } + cntFigure++; globalFigure++; + figureTitle = ru_const->figureTitle+" "+QString::number(docChapter+1)+"."+QString::number(cntFigure)+": "+figureTitle; + QString z; z.fill('0',3-QString::number(globalFigure).length()); + figureID = "fig-" + z + QString::number(globalFigure); + //figureID = lyxID; + if(lyxID != "") { + int foundLabel = -1; + for(int j=0;jitem->isQualifyed = false; + } + } else { + labelStruct lbl; + lbl.itemInd = SM->itemIndex; + lbl.lyxLabel = lyxID; + lbl.id = figureID; lbl.used = false; + lbl.lineNum = _insetBeg+lyxEmptyCnt[_insetBeg]; + lbl.nodeXPath = "imgEMPTY"; + labelList.append(lbl); foundLabel = labelList.count()-1; + + //qDebug() << "+fig label: lyx="+lyxID+" id="+figureID+" internalRefList.count()="+QString::number(internalRefList.count()); + } + labelList[foundLabel].defined = true; + + + /* + for(int j=0;j nodeList; + QDomNode node; + nodeList.append(SM->item->doc.namedItem("dmodule").namedItem("content")); + while(!nodeList.isEmpty()) { + node = nodeList.takeFirst(); + if(node.nodeName() == "internalRef") + if(//node.toElement().attributes().namedItem("internalRefId").nodeName() == "internalRefId" && + node.toElement().attributes().namedItem("internalRefId").nodeValue() == lyxID) { + //qDebug() << " ! "+QString::number(j)+": "+ lyxID+ " -> "+figureID; + node.toElement().setAttribute("xlink:href", "#"+figureID); + node.toElement().setAttribute("internalRefId", figureID); + QString refTarget = "irtt07"; + if(figureID.left(3) == "fig") refTarget = "irtt01"; + if(figureID.left(3) == "tab") refTarget = "irtt02"; + if(figureID.left(3) == "par") refTarget = "irtt07"; + if(figureID.left(3) == "mma") refTarget = "irtt03"; + if(figureID.left(3) == "fig" && figureID.mid(9,3) == "hot") refTarget = "irtt11"; + node.toElement().setAttribute("internalRefTargetType", refTarget); + } + for(int k=0;kitem->isQualifyed = false; figureID = ""; + continue; + } + if(filename.startsWith("../")) filename = filename.mid(3); + QString absfilename = QString(QFileInfo(curLyXFileName).absolutePath()+"/"+filename); + oldfilename = absfilename; + if (QFile::exists(absfilename)) { + oldfilename = absfilename; + } else { + if (QFile::exists(filename)) { + oldfilename = filename; + lyxLog.append("#["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Рекомендуется использовать относительные пути к файлам изображений: "+filename+" ("+figureTitle+")"); + } + } + if(oldfilename == "") { + lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Файл изображения не найден "+filename+" ("+figureTitle+")"); + SM->item->isQualifyed = false; figureID = ""; + //continue; + } + newfilename = SM->projectPath+"/"+ QString::number(docChapter+1) + "." + QString::number(docSection+1) + "." + QString::number(docSubsection+1) + + " " + QFileInfo(oldfilename).fileName(); + if (QFile::exists(newfilename)) { + lyxLog.append("#["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Дублирование имен файлов изображений: "+filename+" ("+figureTitle+")"); + //newfilename = SM->projectPath+"/"+ QString::number(docChapter+1) + "." + QString::number(docSection+1) + "." + QString::number(docSubsection+1)+ + // "_"+QFileInfo(oldfilename).fileName()+"("+QString::number(QRandomGenerator::global()->generate() % 0xFF)+")"; + //if (QFile::exists(newfilename)) QFile::remove(newfilename); + QFile::remove(newfilename); + } + if(!QFile::copy(oldfilename, newfilename)) + if(DBG) qDebug() << "lyx: Error copy" << oldfilename << "to" << newfilename; + + QDomNode figure = SM->item->doc.createElement("figure"); + domCurLevelNode.appendChild(figure); + if(figureID != "") + figure.toElement().setAttribute("id", figureID); + QDomNode title = SM->item->doc.createElement("title"); + figure.appendChild(title); + title.appendChild(SM->item->doc.createTextNode(figureTitle)); + QDomNode graphic = SM->item->doc.createElement("graphic"); + figure.appendChild(graphic); + graphic.toElement().setAttribute("infoEntityIdent", QFileInfo(newfilename).fileName()); + if(scale != "") graphic.toElement().setAttribute("reproductionScale", scale); + if(imgheight != "") graphic.toElement().setAttribute("reproductionHeight", imgheight); + if(imgwidth != "") graphic.toElement().setAttribute("reproductionWidth", imgwidth); + + int labelInd = -1; + if(figureID != "") + for(int j=0;jmakeNodeXPath(figure); + //if(labelList[labelInd].lyxLabel == "fig:Рисунок 1 Общий вид АРМ ПЛС на Су-35С") { + // qDebug() << "lyx: Image SET ["+QString::number(labelInd)+"] lyxLabel = " << labelList[labelInd].lyxLabel << labelList[labelInd].id; + // qDebug() << " old nodeXPath = "+oldXPath; + // qDebug() << " new nodeXPath = "+labelList[labelInd].nodeXPath; + //} + } else { + if(figureID != "") + qDebug() << "lyx: figureID = "+figureID+" not found in labelList ("+figureTitle+")"; + } + + //qDebug() << "lyx: figureID = \""+figureID+"\" labelInd = "+QString::number(labelInd); + + // если есть файл .txt с хотспотами - копируем его и файлы в нем указанные + QString txtoldfilename = oldfilename; txtoldfilename.replace(".svg", ".txt"); + QString txtnewfilename = newfilename; txtnewfilename.replace(".svg", ".txt"); + if(oldfilename.split(".").last().toLower() == "svg" && QFileInfo(txtoldfilename).exists()) { + if (QFile::exists(txtnewfilename)) QFile::remove(txtnewfilename); + if(!QFile::copy(txtoldfilename, txtnewfilename)) + if(DBG) qDebug() << "lyx: Error copy" << txtoldfilename << "to" << txtnewfilename; + + QFile txtFile(txtoldfilename); + if (!txtFile.open(QFile::ReadOnly)) { + qDebug() << "lyx: Ошибка открытия файла "+txtoldfilename; + return; + } + QByteArray data = txtFile.readAll(); + for(int i=0;i < data.length()-2;i++) + if(int(data[i]) == 10 && int(data[i+1]) != 13) data[i] = 13; + QStringList txtLines = QString(QString(data).toUtf8()).replace("\r\r","\r").split("\r"); // + txtFile.close(); + + QDomDocument svg; + //splash->SetTitle("Обработка SVG файла: "+infoEntityIdent); + QFile svgFile(oldfilename); + if (!svgFile.open(QFile::ReadOnly | QFile::Text)){ + qDebug() << "lyx: Ошибка открытия файла "+oldfilename; + lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Ошибка открытия файла "+oldfilename+" ("+figureTitle+")"); + SM->item->isQualifyed = false; + //return; + } else { + svg.setContent(svgFile.readAll()); + svgFile.close(); + + QDomNode svgNode = svg.namedItem("svg"); + if(svgNode.isNull()) { + qDebug() << "lyx: Ошибка в svg-файле "+oldfilename; + continue; + //return; + } + QStringList txtNums, txtTitles, txtHotID; + foreach(QString s, txtLines) + if(s.indexOf(" - ")) + { + txtNums.append(s.mid(0, s.indexOf(" - "))); + txtTitles.append(s.mid(s.indexOf(" - ")+3)); + txtHotID.append(""); + } + for(int j=0;jisConsole) splash->Step(); + QDomNode g = svgNode.childNodes().at(j); + if(g.nodeName() != "g") continue; + if(!SM->isConsole) splash->Step(); + QDomNode spanNode = searchSVGNodeForSpanNode(g); + if(spanNode.isNull()) continue; + QString title = spanNode.childNodes().at(0).nodeValue(); + if(title == "") continue; + int ind = txtNums.indexOf(title); + if(ind == -1) continue; + txtHotID[ind] = spanNode.attributes().namedItem("id").nodeValue(); + } + + int hotCnt=0; + bool isImage; + for(int j=0;jprojectPath+"/"+hotspotImage; + if(QFileInfo::exists(picfile)) { + if (QFile::exists(newpicfile)) QFile::remove(newpicfile); + if(!QFile::copy(picfile, newpicfile)) + if(DBG) qDebug() << "lyx: Error copy" << picfile << "to" << newpicfile; + isImage = true; + } + } + + QDomNode hotspot = SM->item->doc.createElement("hotspot"); + graphic.appendChild(hotspot); + QString hotID; hotID.fill('0', 3-QString::number(hotCnt).length()); + hotID = figureID+"-gra000-hot"+hotID+QString::number(hotCnt++); + hotspot.toElement().setAttribute("id", hotID); + hotspot.toElement().setAttribute("applicationStructureIdent", txtHotID[j]); + hotspot.toElement().setAttribute("applicationStructureName", txtNums[j]); + hotspot.toElement().setAttribute("hotspotTitle", hotspotTitle); + hotspot.toElement().setAttribute("hotspotType", "callout"); + if(!isImage) + hotspot.toElement().setAttribute("objectDescr", "text"); + else { + hotspot.toElement().setAttribute("objectDescr", "image"); + hotspot.toElement().setAttribute("hotspotImage", hotspotImage); + } + } + + } //svgFile.open + } + + //TODO child: 562 Chapter 3.9.5.2.1.8 + figureTitle = ""; figureID = ""; + continue; + } + + if(insetName == "CommandInset label") { + lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Использование меток допускается только в сносках и плавающих таблицах/рисунках."); + SM->item->isQualifyed = false; + continue; + } + + if(insetName == "Float table") { + tableTitle = ""; tableID = ""; + QString lyxID=""; + int _tabularBeg = -1; int _tabularEnd = -1; + for(int j=_insetBeg+1;j<_insetEnd;j++) { + if(lyxList.at(j).startsWith("\\begin_inset Tabular")) { + _tabularBeg = j; _tabularEnd = findTagEnd(j); + j = _tabularEnd; + } + if(lyxList.at(j).startsWith("\\begin_inset Caption Standard")) { + int _capEnd = findTagEnd(j); + for(int k=j+1;k<_capEnd;k++) { + if(lyxList.at(k).startsWith("\\begin_inset CommandInset label")) { + int _labelEnd = findTagEnd(k); + for(int l=k+1;l<_labelEnd;l++) + if(lyxList.at(l).startsWith("name")) { + lyxID = lyxList.at(l).right(lyxList.at(l).length() - 5).replace("\"", ""); + break; + } + k = _labelEnd; + } + if(!lyxList.at(k).startsWith("\\")) + tableTitle += lyxList.at(k); + } + } + } + cntTable++; globalTable++; + tableTitle = ru_const->tableTitle+" "+QString::number(docChapter+1)+"."+QString::number(cntTable)+": "+tableTitle; + QString z; z.fill('0',3-QString::number(globalTable).length()); + tableID = "tab-" + z + QString::number(globalTable); + if(lyxID != "") { + + int foundLabel = -1; + for(int j=0;jitem->isQualifyed = false; + } + } else { + labelStruct lbl; + lbl.itemInd = SM->itemIndex; + lbl.lyxLabel = lyxID; + lbl.id = tableID; lbl.used = false; + lbl.lineNum = _insetBeg+lyxEmptyCnt[_insetBeg]; + lbl.nodeXPath = "tabEMPTY"; + labelList.append(lbl); foundLabel = labelList.count()-1; + } + labelList[foundLabel].defined = true; + + /* + for(int j=0;j nodeList; + QDomNode node; + nodeList.append(SM->item->doc.namedItem("dmodule").namedItem("content")); + while(!nodeList.isEmpty()) { + node = nodeList.takeFirst(); + if(node.nodeName() == "internalRef") + if(//node.toElement().attributes().namedItem("internalRefId").nodeName() == "internalRefId" && + node.toElement().attributes().namedItem("internalRefId").nodeValue() == lyxID) { + //qDebug() << " ! "+QString::number(j)+": "+ lyxID+ " -> "+tableID; + node.toElement().setAttribute("xlink:href", "#"+tableID); + node.toElement().setAttribute("internalRefId", tableID); + QString refTarget = "irtt07"; + if(tableID.left(3) == "fig") refTarget = "irtt01"; + if(tableID.left(3) == "tab") refTarget = "irtt02"; + if(tableID.left(3) == "par") refTarget = "irtt07"; + if(tableID.left(3) == "mma") refTarget = "irtt03"; + if(tableID.left(3) == "fig" && tableID.mid(9,3) == "hot") refTarget = "irtt11"; + node.toElement().setAttribute("internalRefTargetType", refTarget); + } + for(int k=0;k","").toInt(); + if(lyxList.at(_lyxtabularBeg).split(" ")[k].split("=")[0] == "columns") + cols = lyxList.at(_lyxtabularBeg).split(" ")[k].split("=")[1].replace("\"","").replace(">","").toInt(); + } + if(rows == 0 || cols == 0) continue; + + for(int j=_lyxtabularBeg+1;j");j++) + if(lyxList.at(j).startsWith("item->doc.createElement("table"); + domCurLevelNode.appendChild(table); + table.toElement().setAttribute("frame", "topbot"); + if(tableID != "") + table.toElement().setAttribute("id", tableID); + table.toElement().setAttribute("colsep", "0"); + table.toElement().setAttribute("rowsep", "0"); + table.toElement().setAttribute("tocentry", "1"); + if(tableTitle != "") { + QDomNode title = SM->item->doc.createElement("title"); + title.appendChild(SM->item->doc.createTextNode(tableTitle)); + table.appendChild(title); + } + QDomNode tgroup = SM->item->doc.createElement("tgroup"); + table.appendChild(tgroup); + tgroup.toElement().setAttribute("cols", QString::number(cols)); + for(int j=0;jitem->doc.createElement("colspec"); + colspec.toElement().setAttribute("colname", "col"+QString::number(j+1)); + if(colsAlign.count() == cols) + colspec.toElement().setAttribute("align", colsAlign[j]); + tgroup.appendChild(colspec); // + } + + int labelInd = -1; + for(int j=0;jmakeNodeXPath(table); + //if(labelList[labelInd].lyxLabel == "fig:Рисунок 1 Общий вид АРМ ПЛС на Су-35С") { + // qDebug() << "lyx: Table SET ["+QString::number(labelInd)+"] lyxLabel = " << labelList[labelInd].lyxLabel; + // qDebug() << " old nodeXPath = "+oldXPath; + // qDebug() << " new nodeXPath = "+labelList[labelInd].nodeXPath; + //} + } else + qDebug() << "lyx: Table not in labelList" << tableID << tableTitle; + + QList> tableArr; + +// cellStruct** tableArr = new cellStruct*[rows]; +// for(int j=0;j rowStruct; + tableArr.append(rowStruct); + + _rowBeg = findTag(_rowEnd+1, _insetEnd, ""); + int _cellBeg = _rowBeg; int _cellEnd; + for(int k=0;k"); + tableArr[j][k]._cellBeg = _cellBeg+1; tableArr[j][k]._cellEnd = _cellEnd-1; + if(_cellBeg == -1) break; + + tableArr[j][k].alignment = tableArr[j][k].rotate = ""; + tableArr[j][k].multiCol = tableArr[j][k].multiRow = ""; + tableArr[j][k].checkPassed = false; + tableArr[j][k].topline = tableArr[j][k].bottomline = tableArr[j][k].leftline = tableArr[j][k].rightline = false; + tableArr[j][k].createS1000D_entry = true; + QStringList cellAttr = lyxList[_cellBeg].split(" "); + for(int l=1; l",""); + if(cellAttrName == "alignment") + tableArr[j][k].alignment = cellAttrVal; + if(cellAttrName == "rotate") + tableArr[j][k].rotate = cellAttrVal; + if(cellAttrName == "multicolumn") tableArr[j][k].multiCol = cellAttrVal; + if(cellAttrName == "multirow") tableArr[j][k].multiRow = cellAttrVal; + if(cellAttrName == "topline") tableArr[j][k].topline = (cellAttrVal == "true"); + if(cellAttrName == "bottomline") tableArr[j][k].bottomline = (cellAttrVal == "true"); + if(cellAttrName == "leftline") tableArr[j][k].leftline = (cellAttrVal == "true"); + if(cellAttrName == "rightline") tableArr[j][k].rightline = (cellAttrVal == "true"); + } + + } //cols + } //rows + + // выявляем multicolumn, multirow + int lastHeadRow = 0; + for(int j=0;jitem->doc.createElement("spanspec"); + spanspec.toElement().setAttribute("namest", namest); + spanspec.toElement().setAttribute("nameend", nameend); + spanspec.toElement().setAttribute("spanname", spanname); + tgroup.appendChild(spanspec); + } + } + + QDomNode thead = SM->item->doc.createElement("thead"); + tgroup.appendChild(thead); + QDomNode tbody = SM->item->doc.createElement("tbody"); + tgroup.appendChild(tbody); + + // создаем dom из прочитанного + //bool rowToHead = true; + for(int j=0;jitem->doc.createElement("row"); + + //if(!multiRowFlag) rowToHead = false; + if(j <= lastHeadRow) { //j==0 || rowToHead + row.toElement().setAttribute("rowsep", "1"); + thead.appendChild(row); + } else { + row.toElement().setAttribute("rowsep", "0"); + tbody.appendChild(row); + } + + //bool multiRowFlag = false; + for(int k=0;kitem->doc.createElement("entry"); + row.appendChild(entry); + if(tableArr[j][k].alignment != "") + entry.toElement().setAttribute("align", tableArr[j][k].alignment); + if(tableArr[j][k].rotate != "") + entry.toElement().setAttribute("rotate", tableArr[j][k].rotate); + if(tableArr[j][k].spanname != "") + entry.toElement().setAttribute("spanname", tableArr[j][k].spanname); + + parseBlock(tableArr[j][k]._cellBeg+1, tableArr[j][k]._cellEnd-1, entry); + } //cols + //if(tableArr[j][k].multiRow != "") multiRowFlag = true; + } + } //rows + +// for(int j=0;jitem->doc.createElement("para"); + domCurLevelNode.appendChild(newParaNode); + domCurLevelNode = newParaNode; + } + continue; + } + + if(insetName == "Note Note") { + QStringList noteContent; + bool flag = false; + QString txt=""; + for(int j=_insetBeg+1;j<_insetEnd;j++) { + if(lyxList[j].startsWith("\\begin_layout Plain Layout")) { flag = true; txt = ""; continue; } + if(lyxList[j].startsWith("\\end_layout")) { flag = false; noteContent.append(txt); continue; } + if(lyxList[j] != "" && flag) txt += lyxList[j]; + } + if(noteContent.count() == 0) continue; + if(noteContent[0] == "Video") { // стр. 557 + QString oldfilename="", newfilename=""; + if(noteContent[1].startsWith("../")) noteContent[1] = noteContent[1].mid(3); + QString absfilename = QString(QFileInfo(curLyXFileName).absolutePath()+"/"+noteContent[1]); + if (QFile::exists(absfilename)) { + oldfilename = absfilename; + } else { + if (QFile::exists(noteContent[1])) { + oldfilename = noteContent[1]; + lyxLog.append("#["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Рекомендуется использовать относительные пути к файлам видео: "+noteContent[1]); + } + } + if(oldfilename == "") { + lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Файл видео не найден "+noteContent[1]); + SM->item->isQualifyed = false; + continue; + } + newfilename = SM->projectPath+"/"+ QFileInfo(oldfilename).fileName(); + if (QFile::exists(newfilename)) { + lyxLog.append("#["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Дублирование имен файлов видео: "+noteContent[1]); + //newfilename = SM->projectPath+"/"+ QFileInfo(oldfilename).fileName() + "("+QString::number(QRandomGenerator::global()->generate() % 0xFF)+")"; + } + if (QFile::exists(newfilename)) QFile::remove(newfilename); + if(!QFile::copy(oldfilename, newfilename)) + if(DBG) qDebug() << "lyx: Error copy" << oldfilename << "to" << newfilename; + + QDomNode multimedia = SM->item->doc.createElement("multimedia"); + domCurLevelNode.appendChild(multimedia); + QDomNode title = SM->item->doc.createElement("title"); + multimedia.appendChild(title); + title.appendChild(SM->item->doc.createTextNode(noteContent[2])); + QDomNode multimediaObject = SM->item->doc.createElement("multimediaObject"); + multimedia.appendChild(multimediaObject); + multimediaObject.toElement().setAttribute("infoEntityIdent", QFileInfo(newfilename).fileName()); + multimediaObject.toElement().setAttribute("multimediaType", "video"); + QString mmoId = noteContent[1].split("/").last().split(".")[0]; + QString lyxID = "mma:"+mmoId+" "+noteContent[2]; + mmoId = "mmo-"+mmoId; + multimediaObject.toElement().setAttribute("id", mmoId); + + labelStruct lbl; + lbl.itemInd = SM->itemIndex; + lbl.lyxLabel = lyxID; + lbl.id = mmoId; lbl.used = false; + lbl.lineNum = _insetBeg+lyxEmptyCnt[_insetBeg]; + lbl.nodeXPath = "mmoEMPTY"; + labelList.append(lbl); + labelList[labelList.count()-1].defined = true; + + continue; + } + + if(noteContent[0] == "3D") { + if(noteContent.length() < 4) { + lyxLog.append("#["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Ошибка подключения 3D: синтаксис - 3D / имя файла / титул / имя сценария."+noteContent[1]); + return; + } + //QString scfilename = QFileInfo(curLyXFileName).absolutePath()+"/"+ QFileInfo(noteContent[1]).path()+"/StreamingAssets/Scenario/"+QFileInfo(noteContent[3]).fileName(); + //if (!QFile::exists(scfilename)) { + // lyxLog.append("#["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Ошибка подключения 3D: файл сценария не найден ("+scfilename+")"); + // return; + //} + + QDomNode multimedia = SM->item->doc.createElement("multimedia"); + domCurLevelNode.appendChild(multimedia); + QDomNode title = SM->item->doc.createElement("title"); + multimedia.appendChild(title); + title.appendChild(SM->item->doc.createTextNode(noteContent[2])); + QDomNode multimediaObject = SM->item->doc.createElement("multimediaObject"); + multimedia.appendChild(multimediaObject); + multimediaObject.toElement().setAttribute("infoEntityIdent", noteContent[1]); + multimediaObject.toElement().setAttribute("multimediaType", "3D"); + QDomNode parameter = SM->item->doc.createElement("parameter"); + parameter.toElement().setAttribute("id", ""); + parameter.toElement().setAttribute("scenario", noteContent[3]); + multimediaObject.appendChild(parameter); + continue; + } + + //lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Неизвестные параметры заметки ("+noteContent[0]+")."); + //SM->item->isQualifyed = false; + continue; + } + + if(insetName == "Quotes rld") { + blockText += "«"; + continue; + } + if(insetName == "Quotes rrd") { + blockText += "»"; + continue; + } + + lyxLog.append("!["+QString::number(_insetBeg+lyxEmptyCnt[_insetBeg])+"] Неизвестная команда ("+itemName+")."); + SM->item->isQualifyed = false; + + //popFlags(); //??? + continue; + } + + if(itemName.startsWith("\\begin_")) { + lyxLog.append("!["+QString::number(i+lyxEmptyCnt[i])+"] Неизвестный блок ("+itemName+")."); + SM->item->isQualifyed = false; + int _childBeg, _childEnd; + _childBeg = i; _childEnd = findTagEnd(_childBeg); + i = _childEnd; + continue; + } + lyxLog.append("!["+QString::number(i+lyxEmptyCnt[i])+"] Неизвестная команда ("+itemName+")."); + SM->item->isQualifyed = false; + } + + if(curSubsectionItem != -1) SM->items[curSubsectionItem].lyxLog = lyxLog; + + if(blockText != "") { + QDomNode blockTextNode = SM->item->doc.createTextNode(blockText); + QDomNode tmpCurNode = domCurLevelNode; + if(flags.bold) { + QDomNode emphasisNode = SM->item->doc.createElement("emphasis"); + tmpCurNode.appendChild(emphasisNode); tmpCurNode = emphasisNode; + } + if(flags.italic) { + QDomNode emphasisNode = SM->item->doc.createElement("emphasis"); + emphasisNode.toElement().setAttribute("emphasisType", "em02"); + tmpCurNode.appendChild(emphasisNode); tmpCurNode = emphasisNode; + } + if(flags.underlined) { + QDomNode emphasisNode = SM->item->doc.createElement("emphasis"); + emphasisNode.toElement().setAttribute("emphasisType", "em03"); //"em04" Overline, "em05" Strikethrough, "em51" - "em99" Available for projects + tmpCurNode.appendChild(emphasisNode); tmpCurNode = emphasisNode; + } + tmpCurNode.appendChild(blockTextNode); + } + popFlags(); + return; +} +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ END OF PARSE BLOCK ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +void LyX::appendChapter(QString title) { +// if(title == "") { +// title = "Имя главы не задано (создано автоматически)"; +// lyxLog.append("!Ошибка в структуре заголовков: "+title); +// SM->item->isQualifyed = false; +// } + docChapter++; docSection = docSubsection = -1; + cntTable = cntFigure = cntPar = 0; + //if(lyxLog.count() == 2) lyxLog.append("#Завершено без ошибок."); + if(curSubsectionItem != -1) SM->items[curSubsectionItem].lyxLog = lyxLog; + curChapterItem = SM->createPM(-1, -1); + SM->setCurItem(curChapterItem); + curSectionItem = curSubsectionItem = -1; + SM->item->origTitle = title; + SM->item->fileName = QString::number(docChapter+1) + " " + title + ".xml"; // SM->projectPath + "/" + + SM->item->fileName = SM->item->fileName.replace("\"", "").replace("/", "_"); + SM->setNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle", title); + + //QString id = "par-"+QString::number(docChapter+1)+QString::number(docSection+1)+QString::number(docSubsection+1)+"0"; + tableOfContentsStruct tocItem; + tocItem.id = ""; tocItem.title = title; + tableOfContentsRoot.childs.append(tocItem); +} + +void LyX::appendSection(QString title) { +// if(title == "") { +// title = "Имя раздела не задано (создано автоматически)"; +// lyxLog.append("!Ошибка в структуре заголовков: "+title); +// } + docSection++; docSubsection = -1; + //if(lyxLog.count() == 2) lyxLog.append("#Завершено без ошибок."); + if(curSubsectionItem != -1) SM->items[curSubsectionItem].lyxLog = lyxLog; + curSectionItem = SM->createPM(curChapterItem, SM->items[curChapterItem].child.count()-1); + SM->setCurItem(curSectionItem); + curSubsectionItem = -1; + SM->item->origTitle = title; + SM->item->fileName = QString::number(docChapter+1) + "." + QString::number(docSection+1) + " " + title + ".xml"; + SM->item->fileName = SM->item->fileName.replace("\"", "").replace("/", "_"); + SM->setNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle", title); + + //QString id = "par-"+QString::number(docChapter+1)+QString::number(docSection+1)+QString::number(docSubsection+1)++"0"; + tableOfContentsStruct tocItem; + tocItem.id = ""; tocItem.title = title; + tableOfContentsRoot.childs[docChapter].childs.append(tocItem); +} + +void LyX::appendSubsection(QString title) { +// if(title == "") { +// title = "Имя подраздела не задано (создано автоматически)"; +// lyxLog.append("!Ошибка в структуре заголовков: "+title); +// } + docSubsection++; + //if(lyxLog.count() == 2) lyxLog.append("#Завершено без ошибок."); + if(curSubsectionItem != -1) SM->items[curSubsectionItem].lyxLog = lyxLog; + //SM->item->fileName = QString::number(docChapter+1) + "." + QString::number(docSection+1) + "." + QString::number(docSubsection+1) + " " + title + ".xml"; + // SM->item->fileName = SM->item->fileName.replace("\"", "").replace("/", "_"); + int curPMItem = curSectionItem; + if(curPMItem == -1) curPMItem = curChapterItem; + if(title.startsWith("~")) { + curSubsectionItem = SM->createDM(curPMItem, SM->items[curPMItem].child.count()-1, "LEARNING"); + title = title.mid(1); + } else + curSubsectionItem = SM->createDM(curPMItem, SM->items[curPMItem].child.count()-1, "DESCRIPT"); + SM->setCurItem(curSubsectionItem); + SM->item->origTitle = title; + SM->item->fileName = QString::number(docChapter+1) + "." + QString::number(docSection+1) + "." + QString::number(docSubsection+1) + " " + title + ".xml"; + SM->item->fileName = SM->item->fileName.replace("\"", "").replace("/", "_"); + SM->setNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName", title); + + //QString id = "par-"+QString::number(docChapter+1)+QString::number(docSection+1)+QString::number(docSubsection+1)+QString::number(docSubsubsection+1); + + tableOfContentsStruct tocItem; + tocItem.id = ""; tocItem.title = title; + if(docSection != -1) + tableOfContentsRoot.childs[docChapter].childs[docSection].childs.append(tocItem); + else + tableOfContentsRoot.childs[docChapter].childs.append(tocItem); +} + +void LyX::checkForOldIdent() { + QDomDocument doc; + + QFile xmlFile(SM->projectPath + "/Backup/" + SM->item->fileName); + if (!xmlFile.open(QFile::ReadOnly | QFile::Text)) { + SM->item->isQualifyed = false; + return; + } + QByteArray fileData = xmlFile.readAll(); + xmlFile.close(); + doc.setContent(fileData); + + QString curST = QFileInfo(doc.documentElement().attribute("xsi:noNamespaceSchemaLocation", "")).baseName().toUpper(); + QString curMT = doc.documentElement().nodeName().toUpper(); + if(curMT == "DMODULE" && SM->item->moduleType != mtDM) return; + if(curMT == "PM" && SM->item->moduleType != mtPM) return; + if(SM->item->schemeType != SM->getSchemeTypeByStr(curST)) { + if(DBG) qDebug() << " Несоответствует тип схемы при импорте identAndStatusSection: " + SM->item->fileName; + return; + } + + QDomNode oldIdent; + oldIdent = doc.documentElement().namedItem("identAndStatusSection").cloneNode(); + if(oldIdent.isNull()) return; + SM->deleteNode("identAndStatusSection"); + SM->item->doc.importNode(oldIdent, true); + SM->item->doc.documentElement().insertBefore(oldIdent, SM->findElement("content")); + + QDomNode oldDescr = doc.documentElement().namedItem("rdf:Description").cloneNode(); + if(oldDescr.isNull()) return; + SM->deleteNode("rdf:Description"); + SM->item->doc.importNode(oldDescr, true); + SM->item->doc.documentElement().insertBefore(oldDescr, SM->findElement("identAndStatusSection")); + //SM->item->crewFlags = oldDescr.attributes().namedItem("flags").nodeValue().toInt(nullptr,16); + if(SM->item->isQualifyed) + SM->item->isQualifyed = (oldDescr.attributes().namedItem("qualifyed").nodeValue() == "true"); + + //if(DBG) qDebug() << " loaded ident from " + SM->projectPath + "/Backup/" + SM->item->fileName; +} + +void LyX::pushFlags() { + flagsStack.append(flags); +} + +void LyX::popFlags() { + if(flagsStack.count() == 0) return; + flags = flagsStack.takeLast(); +} + +void LyX::pushLyXFileData() { + fileStruct lyxFileData; + lyxFileData.fileName = curLyXFileName; + lyxFileData.lyxList = lyxList; + lyxFileStack.append(lyxFileData); +} + +void LyX::popLyXFileData() { + if(lyxFileStack.count() == 0) return; + fileStruct lyxFileData = lyxFileStack.takeLast(); + curLyXFileName = lyxFileData.fileName; + lyxList = lyxFileData.lyxList; +} + +void LyX::fillTableOfContents(tableOfContentsStruct tocNode, QDomNode domToCNode, QString deepSpaces) { + for(int i=0;iitem->doc.createElement("para"); + QDomText spaces = SM->item->doc.createTextNode(deepSpaces); + para.appendChild(spaces); + QDomNode internalRef = SM->item->doc.createElement("internalRef"); + internalRef.toElement().setAttribute("xlink:actuate", "onRequest"); + internalRef.toElement().setAttribute("xlink:show", "replace"); + internalRef.toElement().setAttribute("xlink:href", "#"+tocNode.childs[i].id); + internalRef.toElement().setAttribute("internalRefId", tocNode.childs[i].id); + internalRef.toElement().setAttribute("internalRefTargetType", "irtt07"); + para.appendChild(internalRef); + fillTableOfContents(tocNode.childs[i], para, deepSpaces+" "); + domToCNode.appendChild(para); + } +} + +void LyX::fillAcronymList(QDomNode domAcronymListNode) { + //QDomNode paraTitle = SM->item->doc.createElement("para"); + //domAcronymListNode.appendChild(paraTitle); paraTitle.appendChild(SM->item->doc.createTextNode(ru_const->acronymsList+"\n")); + QDomNode para = SM->item->doc.createElement("para"); + domAcronymListNode.appendChild(para); + QDomNode table = SM->item->doc.createElement("table"); + para.appendChild(table); + QDomNode tgroup = SM->item->doc.createElement("tgroup"); + tgroup.toElement().setAttribute("cols", "2"); + table.appendChild(tgroup); + QDomNode colspec = SM->item->doc.createElement("colspec"); + colspec.toElement().setAttribute("colwidth", "1*"); + tgroup.appendChild(colspec); + colspec = SM->item->doc.createElement("colspec"); + colspec.toElement().setAttribute("colwidth", "4*"); + tgroup.appendChild(colspec); + QDomNode tbody = SM->item->doc.createElement("tbody"); + tgroup.appendChild(tbody); + + QStringList sortedList; + for(int i=0;iitem->doc.createElement("row"); + tbody.appendChild(row); + + QDomNode entry = SM->item->doc.createElement("entry"); + row.appendChild(entry); + QDomNode para = SM->item->doc.createElement("para"); + entry.appendChild(para); +// QDomNode internalRef = SM->item->doc.createElement("internalRef"); +// internalRef.toElement().setAttribute("xlink:actuate", "onRequest"); +// internalRef.toElement().setAttribute("xlink:show", "replace"); +// internalRef.toElement().setAttribute("xlink:href", "#"+acronymList[j].id); +// internalRef.toElement().setAttribute("internalRefId", acronymList[j].id); +// QString refTarget = "irtt07"; +// internalRef.toElement().setAttribute("internalRefTargetType", refTarget); +// internalRef.appendChild(SM->item->doc.createTextNode(acronymList[j].term)); +// para.appendChild(internalRef); + para.appendChild(SM->item->doc.createTextNode(acronymList[j].term)); + entry = SM->item->doc.createElement("entry"); + row.appendChild(entry); + para = SM->item->doc.createElement("para"); + entry.appendChild(para); + para.appendChild(SM->item->doc.createTextNode(acronymList[j].definition)); + + break; + } + +} + +int LyX::parseLearningModule(QDomNode domLearnNode, int _learnBeg, int _learnMaxEnd) { + QString itemName, text; + int i, _lend; + bool isQuestion; + QString question; + QStringList answers; + + SM->setNodeText("content.learning.learningAssessment.title", ""); // что сюда поставить? + for(i=_learnBeg;i<=_learnMaxEnd;i++) { + itemName = lyxList[i]; + if(itemName == "") continue; + if(itemName == "\\begin_layout Standard") { + _lend = findTagEnd(i); + text = ""; isQuestion = false; + for(int j=i+1;j<_lend;j++) { + if(lyxList[j] == "") continue; + if(lyxList[j] == "\\series bold") { isQuestion = true; continue; } + text += lyxList[j]; + } + i = _lend; + if(!isQuestion && !text.startsWith("+") && !text.startsWith("-")) { + lyxLog.append("!["+QString::number(i+lyxEmptyCnt[i])+"] Неизвестный тип ответа ("+text+")"); + SM->item->isQualifyed = false; + continue; + } + if(isQuestion) { + if(question != "") { + addQuestInteraction(domLearnNode, question, answers); + question = ""; answers.clear(); + } + question = text; + continue; + } + answers.append(text); + continue; + } + break; + } + if(question != "") + addQuestInteraction(domLearnNode, question, answers); + + return i-1; +} + +void LyX::addQuestInteraction(QDomNode domLearnNode, QString question, QStringList answers) { + if(!SM->isConsole) splash->Step(); + int correctAnswers=0; + foreach (QString s, answers) + if(s.startsWith("+")) correctAnswers++; + if(answers.count() == 0) { + lyxLog.append("! Отсутствуют ответы к вопросу ("+question+")"); + SM->item->isQualifyed = false; + return; + } + if(correctAnswers == 0) { + lyxLog.append("! Кол-во верных ответов = 0 ("+question+")"); + SM->item->isQualifyed = false; + return; + } + +// question = questLyXtoHTML(question); +// for(int i=0;iitem->doc.createElement("lcInteraction"); + domLearnNode.appendChild(lcInteraction); + QDomNode lcSelect; + QString lcName; + if(correctAnswers == 1) + lcName = "lcSingleSelect"; + else + lcName = "lcMultipleSelect"; + lcSelect = SM->item->doc.createElement(lcName); + lcInteraction.appendChild(lcSelect); + lcSelect.toElement().setAttribute("lcName", lcName); + QDomNode lcQuestion = SM->item->doc.createElement("lcQuestion"); + lcSelect.appendChild(lcQuestion); + QDomNode questdescription = SM->item->doc.createElement("description"); + lcQuestion.appendChild(questdescription); + QDomNode questpara = SM->item->doc.createElement("para"); + questdescription.appendChild(questpara); + questpara.appendChild(SM->item->doc.createTextNode(question)); + + QDomNode lcAnswerOptionGroup = SM->item->doc.createElement("lcAnswerOptionGroup"); + lcSelect.appendChild(lcAnswerOptionGroup); + bool isCorrect; + foreach (QString s, answers) { + if(!s.startsWith("+") && !s.startsWith("-")) lyxLog.append("# Ответ должен начинаться со знака +/- ("+s+"). Учтен как отрицательный."); + isCorrect = s.startsWith("+"); + s = s.mid(1); + if(s.startsWith(" ")) s = s.mid(1); + + QDomNode lcAnswerOption = SM->item->doc.createElement("lcAnswerOption"); + lcAnswerOptionGroup.appendChild(lcAnswerOption); + QDomNode lcAnswerOptionContent = SM->item->doc.createElement("lcAnswerOptionContent"); + lcAnswerOption.appendChild(lcAnswerOptionContent); + QDomNode answerdescription = SM->item->doc.createElement("description"); + lcAnswerOptionContent.appendChild(answerdescription); + QDomNode answerpara = SM->item->doc.createElement("para"); + answerdescription.appendChild(answerpara); + answerpara.appendChild(SM->item->doc.createTextNode(s)); + if(isCorrect) { + QDomNode lcCorrectResponse = SM->item->doc.createElement("lcCorrectResponse"); + lcAnswerOption.appendChild(lcCorrectResponse); + lcCorrectResponse.toElement().setAttribute("lcName", "lcCorrectResponse"); + } + } +} + +void LyX::connectRefsWithLabels() { + //for(int j=0;jsetCurItem(refList[i].itemInd); + + + QDomNode oldrefNode = SM->getNodeFromXPath(refList[i].nodeXPath); + + if(oldrefNode.isNull()) { + qDebug() << "ref "+refList[i].lyxRef+" ignored - refNode.isNull():" << refList[i].nodeXPath << SM->items[refList[i].itemInd].fileName; + refNode = SM->getNodeFromXPath(refList[i].nodeXPath, true); + continue; + } + + if(!oldrefNode.nodeName().startsWith("blankRefNode")) + qDebug() << "Rename "+oldrefNode.nodeName()+" to REF("+refList[i].nodeXPath+")"; + + refList[i].nodeXPath = refList[i].nodeXPath.replace(oldrefNode.nodeName(), "internalRef"); + if(refList[i].nodeXPath == "") + qDebug() << "lyx: refList[i].nodeXPath == \"\" for "+refList[i].lyxRef; + + if(refList[i].itemInd == labelList[ind].itemInd) { + QString refID = labelList[ind].id; // ссылка внутри модуля данных + + refNode = SM->item->doc.createElement("internalRef"); + oldrefNode.parentNode().replaceChild(refNode, oldrefNode); + refNode.toElement().setAttribute("xlink:actuate", "onRequest"); + refNode.toElement().setAttribute("xlink:show", "replace"); + refNode.toElement().setAttribute("xlink:href", "#"+refID); + refNode.toElement().setAttribute("internalRefId", refID); + QString refTarget = "irtt07"; + if(refID.left(3) == "fig") refTarget = "irtt01"; + if(refID.left(3) == "tab") refTarget = "irtt02"; + if(refID.left(3) == "par") refTarget = "irtt07"; + if(refID.left(3) == "mma") refTarget = "irtt03"; + if(refID.left(3) == "fig" && refID.mid(9,3) == "hot") refTarget = "irtt11"; + refNode.toElement().setAttribute("internalRefTargetType", refTarget); + + //qDebug() << "Internal ref["+QString::number(refList[i].lineNum)+"]:" << labelList[j].id << oldrefNode.nodeName(); + + } else { // ссылка на внешний модуль + refList[i].nodeXPath = refList[i].nodeXPath.replace(oldrefNode.nodeName(), "dmSegmentRef"); + + refNode = SM->item->doc.createElement("dmSegmentRef"); + oldrefNode.parentNode().replaceChild(refNode, oldrefNode); + + //QString tPath = "//"+labelList[ind].nodeName+"[@id='"+labelList[ind].id+"']"; //SM->makeXPathToNode(labelNode); // //title[@lang='en'] + + + refNode.toElement().setAttribute("targetPath", labelList[ind].nodeXPath); + if(labelList[ind].nodeXPath == "" || labelList[ind].nodeXPath.endsWith("EMPTY")) { + qDebug() << "lyx: nodeXPath is empty " << labelList[ind].id << labelList[ind].lyxLabel; + } + + SM->setCurItem(refList[i].itemInd); + QDomElement dmRefIdent = SM->item->doc.createElement("dmRefIdent"); + refNode.appendChild(dmRefIdent); + QDomElement dmCode = SM->item->doc.createElement("dmCode"); + dmRefIdent.appendChild(dmCode); + + SM->setCurItem(labelList[ind].itemInd); + QDomNode labelDMNode = SM->findElement("identAndStatusSection.dmAddress.dmIdent.dmCode"); + SM->setCurItem(refList[i].itemInd); + for(int k=0;kitem->doc.createElement("issueInfo"); + dmRefIdent.appendChild(issueInfo); + issueInfo.setAttribute("inWork", SM->ru_const.inWork); + issueInfo.setAttribute("issueNumber", SM->ru_const.issueNumber); + QDomElement language = SM->item->doc.createElement("language"); + dmRefIdent.appendChild(language); + language.setAttribute("languageIsoCode", SM->ru_const.languageIsoCode); + language.setAttribute("countryIsoCode", SM->ru_const.countryIsoCode); + + SM->setCurItem(labelList[ind].itemInd); + QString techName = SM->findElement("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName").childNodes().at(0).toText().data(); + QString infoName = SM->findElement("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName").childNodes().at(0).toText().data(); + SM->setCurItem(refList[i].itemInd); + + QDomElement dmRefAddressItems = SM->item->doc.createElement("dmRefAddressItems"); + refNode.appendChild(dmRefAddressItems); + QDomElement dmTitle = SM->item->doc.createElement("dmTitle"); + dmRefAddressItems.appendChild(dmTitle); + QDomElement dmTechName = SM->item->doc.createElement("techName"); + dmTitle.appendChild(dmTechName); + dmTechName.appendChild(SM->item->doc.createTextNode(techName)); + QDomElement dmInfoName = SM->item->doc.createElement("infoName"); + dmTitle.appendChild(dmInfoName); + dmInfoName.appendChild(SM->item->doc.createTextNode(infoName)); + + //qDebug() << "External ref["+QString::number(refList[i].lineNum)+"]:" << labelList[ind].id << labelList[ind].lyxLabel << labelList[ind].itemInd << refList[i].itemInd; + } + } + + } + + for(int j=0;jitems[labelList[j].itemInd].lyxLog.append("#["+QString::number(labelList[j].lineNum)+"] Неиспользуемая метка: "+labelList[j].lyxLabel); + //qDebug() << "Label not used ["+QString::number(labelList[j].lineNum)+"]: "+labelList[j].id; + } +} + + + +//QString LyX::questLyXtoHTML(QString answer) { +// // функция пока не используется +// qDebug() << answer; +// QString sb, se; +// int _end, _beg; +// while(1) { +// sb = "\\begin_inset script superscript\\begin_layout Plain Layout"; +// se = "\\end_layout\\end_inset"; +// _beg = answer.indexOf(sb); +// if(_beg != -1) { +// //QString innertext = answer.mid(_beg+sb.length(), _end-_beg-sb.length()); +// answer = answer.replace(_beg, sb.length(), ""); +// _end = answer.indexOf(se, _beg); +// answer = answer.replace(_end, se.length(), ""); +// continue; +// } + +// sb = "\\begin_inset script subscript\\begin_layout Plain Layout"; +// se = "\\end_layout\\end_inset"; +// _beg = answer.indexOf(sb); +// if(_beg != -1) { +// answer = answer.replace(_beg, sb.length(), ""); +// _end = answer.indexOf(se, _beg); +// answer = answer.replace(_end, se.length(), ""); +// continue; +// } +// break; +// } +// qDebug() << " "+answer; +// return answer; +//} + + +QDomNode LyX::searchSVGNodeForSpanNode(QDomNode node) { + if(node.nodeName() == "tspan") + return node; + QDomNode nd; + for(int j=0;j +// +#include +#include "s1000d_manager.h" +#include "splashform.h" + +class LyX { +public: + struct tableOfContentsStruct { + QString id, title; + QList childs; + } tableOfContentsRoot; + + LyX(); + bool Import(S1000D_Manager* SM, QString fileName, SplashForm* splash); + bool readLyXFile(QString fileName, bool isMainFile=false); + void checkForOldIdent(); + void parseBlock(int _beg, int _end, QDomNode domCurLevelNode); + void parseInset(int _beg, int _end); + int findTagEnd(int _beg); + int findTag(int _beg, int _end, QString startsWithName); + void pushFlags(); + void popFlags(); + void pushLyXFileData(); + void popLyXFileData(); + void appendChapter(QString title); + void appendSection(QString title); + void appendSubsection(QString title); + void fillTableOfContents(tableOfContentsStruct tocNode, QDomNode domToCNode, QString deepSpaces); + void fillAcronymList(QDomNode domAcronymListNode); + int parseLearningModule(QDomNode domLearnNode, int _learnBeg, int _learnMaxEnd); +// QString questLyXtoHTML(QString answer); + void addQuestInteraction(QDomNode domLearnNode, QString question, QStringList answers); + QDomNode searchSVGNodeForSpanNode(QDomNode node); + void connectRefsWithLabels(); + + QStringList lyxList; + QStringList lyxLog; + QString curLyXFileName; //, domContentPath; + //QString curXmlFileName; + QString projPath; + QDomNode domRootNode, domTableOfContentsNode, domAcronymListNode; + int tocItemNum, acrListItemNum; + QString tableTitle, tableID, figureTitle, figureID; + + S1000D_Manager* SM; + SplashForm* splash; + bool DBG = true; + struct flagsStruct { + QString align; + bool bold, italic, underlined; + } flags; + QList flagsStack; + struct acronymStruct { + QString lyxFootnoteName, id, term, definition; + }; + QList acronymList; + struct labelStruct { + int itemInd; + QString lyxLabel, id; + bool defined = false; + bool used = false; + QString nodeXPath; + int lineNum; + }; + QList labelList; + struct refStruct { + int itemInd; + QString lyxRef; + bool labelFound; + QString nodeXPath; + int lineNum; + }; + QList refList; + int cntTable, cntFigure, cntPar, globalTable, globalFigure, globalPar; + + struct cellStruct { + int _cellBeg, _cellEnd; + QString colname, spanname, multiCol, multiRow; + bool topline, bottomline, leftline, rightline, checkPassed; + bool createS1000D_entry; + QString alignment, rotate; + }; + + struct fileStruct { + QString fileName; + QStringList lyxList; + }; + QList lyxFileStack; + QStringList internalRefList; + + RU_Const* ru_const; + + + int docChapter, docSection, docSubsection;//, docSubsubsection; + int curChapterItem, curSectionItem, curSubsectionItem; + + QList lyxEmptyCnt; +}; +#endif // LYX_H diff --git a/s1000d/Converter_Source/main.cpp b/s1000d/Converter_Source/main.cpp new file mode 100644 index 0000000..8e29cca --- /dev/null +++ b/s1000d/Converter_Source/main.cpp @@ -0,0 +1,26 @@ +#include "editormainwindow.h" +#include "console.h" +#include +#ifdef _WIN32 + #include +#endif +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + setlocale(LC_ALL,"Russian"); + if(argc == 1) + { +#ifdef _WIN32 + ShowWindow(GetConsoleWindow(), 0); +#endif + EditorMainWindow w; + w.show(); + return a.exec(); + } + else + { + console c; + c.exec(argc, argv); + return 0; + } +} diff --git a/s1000d/Converter_Source/ru_const.cpp b/s1000d/Converter_Source/ru_const.cpp new file mode 100644 index 0000000..8da35a5 --- /dev/null +++ b/s1000d/Converter_Source/ru_const.cpp @@ -0,0 +1,222 @@ +#include +#include +#include "ru_const.h" + +void RU_Const::Init_RU_Const() { + companyName = "АО 'ЦНТУ 'Динамика'";//"АО «Вертолеты России»"; + modelIdentCode = "Model"; pmIssuer = "RHC01"; //modelIdentCode = "MI38" + languageIsoCode = "ru"; countryIsoCode = "RU"; + inWork = "01"; issueNumber = "000"; + security_securityClassification = "01"; + responsiblePartnerCompany_enterpriseCode="CAGEC"; responsiblePartnerCompany_enterpriseName = "АО «ВСК»"; + originator_enterpriseCode = "CAGEC"; originator_enterpriseName = "АО ЦНТУ «Динамика»"; + copyrightPara = "©2022 АО 'ЦНТУ 'Динамика'";//"© 2017 АО «Вертолеты России»"; + tableOfContents = "Содержание"; acronymsList = "Перечень сокращений"; + htmlButtonLearned = "ИЗУЧЕНО"; + tableTitle = "Таблица"; tableShortTitle = "таб."; figureTitle = "Рисунок"; figureShortTitle = "рис."; + testQuestions = "Контроль знаний"; + icn_variantCode = "R"; // A — для ГМК, в котором нет объектов для локализации/перевода + // R — для ГМК на русском языке + // E — для ГМК на английском языке + crew.append("КВС"); crew.append("2П"); crew.append("ИВД"); crew.append("ИАО"); crew.append("ИРЭО"); crew.append("ИТО"); crew.append("БП"); crew.append("БО"); + + addPMCode("GTC", "01", "00", "АУК ОБЩЕГО ПРИМЕНЕНИЯ", "ВОЗДУШНОЕ ПРАВО", ""); + addPMCode("GTC", "02", "00", "АУК ОБЩЕГО ПРИМЕНЕНИЯ", "МЕТЕОРОЛОГИЯ", ""); + addPMCode("GTC", "03", "00", "АУК ОБЩЕГО ПРИМЕНЕНИЯ", "АВИАЦИОННАЯ БЕЗОПАСНОСТЬ", ""); + addPMCode("GTC", "04", "00", "АУК ОБЩЕГО ПРИМЕНЕНИЯ", "ПРАВИЛА ПЕРЕВОЗКИ ГРУЗОВ", ""); + addPMCode("GTC", "05", "00", "АУК ОБЩЕГО ПРИМЕНЕНИЯ", "ЧЕЛОВЕЧЕСКИЙ ФАКТОР (CRM)", ""); + addPMCode("GTC", "06", "00", "АУК ОБЩЕГО ПРИМЕНЕНИЯ", "ПРОТИВООБЛЕДЕНИТЕЛЬНАЯ ЗАЩИТА ВС НА ЗЕМЛЕ", ""); + addPMCode("GTC", "07", "00", "АУК ОБЩЕГО ПРИМЕНЕНИЯ", "АВАРИЙНО-СПАСАТЕЛЬНАЯ ПОДГОТОВКА (ВОДА И СУША)", ""); + addPMCode("GTC", "08", "00", "АУК ОБЩЕГО ПРИМЕНЕНИЯ", "ПРАВИЛА ТЕХНИЧЕСКОГО ОБСЛУЖИВАНИЯ", ""); + addPMCode("FTC", "01", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "ПРАКТИЧЕСКАЯ АЭРОДИНАМИКА", ""); + addPMCode("FTC", "02", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "ЛЕТНАЯ ЭКСПЛУАТАЦИЯ", ""); + addPMCode("FTC", "03", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "БЕЗОПАСНОСТЬ ПОЛЕТОВ", ""); + addPMCode("FTC", "04", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "ВОЗДУШНАЯ НАВИГАЦИЯ", ""); + addPMCode("FTC", "05", "01", "АУК ЛЕТНОГО ПЕРСОНАЛА", "ВАРИАНТЫ ПРИМЕНЕНИЯ", "(НЕБОЕВЫЕ)"); + addPMCode("FTC", "05", "02", "АУК ЛЕТНОГО ПЕРСОНАЛА", "ВАРИАНТЫ ПРИМЕНЕНИЯ", "(БОЕВЫЕ)"); + addPMCode("FTC", "06", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "КОНСТРУКЦИЯ ВЕРТОЛЕТА И ЕГО СИСТЕМЫ", "ОПИСАНИЕ И ЭКСПЛУАТАЦИЯ"); + addPMCode("FTC", "07", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "КОНСТРУКЦИЯ СИЛОВОЙ УСТАНОВКИ", "ОПИСАНИЕ И ЭКСПЛУАТАЦИЯ"); + addPMCode("FTC", "08", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "АВИАЦИОННОЕ ОБОРУДОВАНИЕ", "ОПИСАНИЕ И ЭКСПЛУАТАЦИЯ"); + addPMCode("FTC", "09", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "РАДИОЭЛЕКТРОННОЕ ОБОРУДОВАНИЕ", "ОПИСАНИЕ И ЭКСПЛУАТАЦИЯ"); + addPMCode("FTC", "10", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "АВИАЦИОННОЕ ВООРУЖЕНИЕ", "ОПИСАНИЕ И ЭКСПЛУАТАЦИЯ"); + addPMCode("FTC", "11", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "АВАРИЙНО-СПАСАТЕЛЬНЫЕ СРЕДСТВА", "ОПИСАНИЕ И ЭКСПЛУАТАЦИЯ"); + addPMCode("FTC", "12", "00", "АУК ЛЕТНОГО ПЕРСОНАЛА", "ДЕСАНТНО-ТРАНСПОРТНОЕ ОБОРУДОВАНИЕ", "ОПИСАНИЕ И ЭКСПЛУАТАЦИЯ"); + addPMCode("MTC", "01", "01", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "КОНСТРУКЦИЯ ВЕРТОЛЕТА И ЕГО СИСТЕМЫ", "ТЕХНИЧЕСКОЕ ОПИСАНИЕ"); + addPMCode("MTC", "01", "02", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "КОНСТРУКЦИЯ ВЕРТОЛЕТА И ЕГО СИСТЕМЫ", "ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ"); + addPMCode("MTC", "02", "01", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "КОНСТРУКЦИЯ СИЛОВОЙ УСТАНОВКИ", "ТЕХНИЧЕСКОЕ ОПИСАНИЕ"); + addPMCode("MTC", "02", "02", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "КОНСТРУКЦИЯ СИЛОВОЙ УСТАНОВКИ", "ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ"); + addPMCode("MTC", "03", "01", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "АВИАЦИОННОЕ ОБОРУДОВАНИЕ", "ТЕХНИЧЕСКОЕ ОПИСАНИЕ"); + addPMCode("MTC", "03", "02", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "АВИАЦИОННОЕ ОБОРУДОВАНИЕ", "ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ"); + addPMCode("MTC", "04", "01", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "РАДИОЭЛЕКТРОННОЕ ОБОРУДОВАНИЕ", "ТЕХНИЧЕСКОЕ ОПИСАНИЕ"); + addPMCode("MTC", "04", "02", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "РАДИОЭЛЕКТРОННОЕ ОБОРУДОВАНИЕ", "ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ"); + addPMCode("MTC", "05", "01", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "АВИАЦИОННОЕ ВООРУЖЕНИЕ", "ТЕХНИЧЕСКОЕ ОПИСАНИЕ"); + addPMCode("MTC", "05", "02", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "АВИАЦИОННОЕ ВООРУЖЕНИЕ", "ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ"); + addPMCode("MTC", "06", "01", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "АВАРИЙНО-СПАСАТЕЛЬНЫЕ СРЕДСТВА", "ТЕХНИЧЕСКОЕ ОПИСАНИЕ"); + addPMCode("MTC", "06", "02", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "АВАРИЙНО-СПАСАТЕЛЬНЫЕ СРЕДСТВА", "ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ"); + addPMCode("MTC", "07", "01", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "ДЕСАНТНО-ТРАНСПОРТНОЕ ОБОРУДОВАНИЕ", "ТЕХНИЧЕСКОЕ ОПИСАНИЕ"); + addPMCode("MTC", "07", "02", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "ДЕСАНТНО-ТРАНСПОРТНОЕ ОБОРУДОВАНИЕ", "ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ"); + addPMCode("MTC", "11", "XX", "АУК ТЕХНИЧЕСКОГО ПЕРСОНАЛА", "ОБЩИЕ ПРОЦЕДУРЫ", ""); + + addPMCodesRTC("01", "КОНСТРУКЦИЯ ВЕРТОЛЕТА И ЕГО СИСТЕМЫ"); + addPMCodesRTC("02", "СИЛОВАЯ УСТАНОВКА"); + addPMCodesRTC("03", "РАДИОЭЛЕКТРОННОЕ ОБОРУДОВАНИЕ"); + addPMCodesRTC("04", "АВИАЦИОННОЕ ОБОРУДОВАНИЕ"); + addPMCodesRTC("05", "АВИАЦИОННОЕ ВООРУЖЕНИЕ"); + addPMCodesRTC("06", "АВАРИЙНО-СПАСАТЕЛЬНЫЕ СРЕДСТВА"); + addPMCodesRTC("07", "ДЕСАНТНО-ТРАНСПОРТНЫЕ СРЕДСТВА"); + addPMCodesRTC("11", "ОБЩИЕ ПРОЦЕДУРЫ"); + + addPMCode("PTC", "XX", "00", "АУК ПРОИЗВОДСТВЕННОГО ПЕРСОНАЛА", "(самостоятельно определить тему)", ""); + + addDMCode("Техническое обслуживание", "Описание и работа систем", + "

    Модули данных по каждой системе/подсистеме ВС. Задача этих модулей дать полную информацию о конструкции и функционировании систем ВС.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-XX-XX-00-NNA-040A-A_T40C (Наименование системы или подсистемы – Описание и работа), где:

    YY-Y: идентификационный код модели и отличительный код системы

    XX-XX: код стандартной системы нумерации

    NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям, членам экипажа), начиная с 01.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-XX-XX-00-NNA-040A-A_T80E (Наименование системы или подсистемы – Контроль знаний: Описание и работа)

    ", + "DESCRIPT", "YY-A-XX-XX-00-NNA-040A-A_T40C", "T80E", "Наименование системы или подсистемы", "Описание и работа" ); + addDMCode("Техническое обслуживание", "Описание и работа компонентов", + "

    Модули данных по компонентам систем/подсистем ВС, которые обладают сложной конструкцией и внутренней работой. Задача этих модулей дать полную информацию о конструкции и функционировании таких компонентов. Используйте эти модули данных только, если информации, раскрытой в описании системы, не достаточно для полного понимания принципов работы. Обычно, такие компоненты требуют технического обслуживания с разборкой.

    ЗАПРЕЩАЕТСЯ ИСПОЛЬЗОВАТЬ ССЫЛКИ НА МЕСТО ЭТОГО КОМПОНЕНТА В СИСТЕМЕ. ИНФОРМАЦИЯ ДОЛЖНА БЫТЬ АВТОНОМНОЙ, РАСКРЫВАЮЩЕЙ ТОЛЬКО ВНУТРЕННЕЕ ФУНКЦИОНИРОВАНИЕ.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-XX-XX-XX-NNA-040A-A_T40C (Наименование компонента – Описание и работа),

    где:

    YY-Y: идентификационный код модели и отличительный код системы

    XX-XX-XX: код стандартной системы нумерации

    NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям, членам экипажа), начиная с 01.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-XX-XX-XX-NNA-040A-A_T80E (Наименование компонента – Контроль знаний: Описание и работа)

    ", + "DESCRIPT", "YY-A-XX-XX-XX-NNA-040A-A_T40C", "T80E", "Наименование компонента", "Описание и работа" ); + addDMCode("Техническое обслуживание", "Планирование ТО", + "

    Модули данных по планированию технического обслуживания.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-05-4X-00-NNA-0B0A-A_T40C (Вид технического обслуживания – Информация по планированию технического обслуживания), где:

    YY-Y: идентификационный код модели и отличительный код системы

    4X: где X последовательная нумерация видов ТО

    NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям, членам экипажа), начиная с 01.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-05-4X-00-NNA-0B0A-A_T80E (Вид технического обслуживания – Контроль знаний: Информация по планированию технического обслуживания)

    ", + "DESCRIPT", "YY-A-05-4X-00-NNA-0B0A-A_T40C", "T80E", "Вид технического обслуживания", "Информация по планированию технического обслуживания" ); + addDMCode("Техническое обслуживание", "Общие меры безопасности", + "

    Модули данных по специальным общим мерам безопаности для типа ВС.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-00-20-00-NNA-012A-A_T40C (Меры безопасности – Общие предупреждения и предостережения), где:

    YY-Y: идентификационный код модели и отличительный код системы

    NN: 00, или если требуется более одного модуля данных, начиная с 01.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-00-20-00-NNA-012A-A_T80E (Меры безопасности – Контроль знаний: Общие предупреждения и предостережения)

    ", + "DESCRIPT", "YY-A-00-20-00-NNA-012A-A_T40C", "T80E", "Меры безопасности", "Общие предупреждения и предостережения" ); + addDMCode("Техническое обслуживание", "Процедуры ТО", + "

    Модули данных по процедурам технического обслуживания для типа ВС.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-XX-XX-XX-NNA-ZZZZ-Q_T40C (Процедуры ТО – Информационное имя), где:

    YY-Y: идентификационный код модели и отличительный код системы

    XX-XX-XX, принятая стандартной системы нумерации

    NN: 00, или если требуется более одного модуля данных, начиная с 01.

    ZZZZ: информационный код и его вариант.

    Q: код расположения.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-XX-XX-XX-NNA-ZZZZ-Q_T80E (Процедуры ТО – Контроль знаний: Информационное имя)

    ", + "DESCRIPT", "YY-A-XX-XX-XX-NNA-ZZZZ-Q_T40C", "T80E", "Процедуры ТО", "Информационное имя" ); + addDMCode("Техническое обслуживание", "Средства материально-технического обеспечения", + "

    Модули данных с информацией по КПА, вспомогательному оборудованию, инструменту и расходуемым материалам.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-00-00-00-NNA-ZZZA-A_T40C (Воздушное судно – Информационное имя), где:

    YY-Y: идентификационный код модели и отличительный код системы

    NN: 00, или если требуется более одного модуля данных (например, разделить перечни по специальностям), начиная с 01.

    ZZZ: 060 — Вспомогательное оборудование, инструмент и программное

    обеспечение, 070 — Расходуемые материалы.

    ЗАПРЕЩЕНО ОПИСЫВАТЬ ПРОЦЕДУРЫ ПРОВЕРОК ОБОРУДОВАНИЯ ВС В ЭТИХ МОДУЛЯХ.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-00-00-00-NNA-ZZZA-A_T80E (Воздушное судно – Контроль знаний: Информационное имя)

    ", + "DESCRIPT", "YY-A-00-00-00-NNA-ZZZA-A_T40C", "T80E", "Воздушное судно", "Информационное имя" ); + addDMCode("Техническое обслуживание", "Общие процедуры", + "

    Модули данных с осщей информацией по обращению с ВС в целом.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-ХХ-XX-XX-NNA-ZZZA-A_T40C (Наименование темы – Информационное имя), где:

    YY-Y: идентификационный код модели и отличительный код системы

    ХХ-XX-XX: 00, Согласно классификации ГОСТ 18675–2012, для систем 07, 08, 09, 10, 12, 15, 16.

    NN: 00, или если требуется более одного модуля данных (например, разделить перечни по специальностям), начиная с 01.

    ZZZ: — Согласно классификации ГОСТ 18675–2012.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-ХХ-XX-XX-NNA-ZZZA-A_T80E (Наименование темы – Контроль знаний: Информационное имя)

    ", + "DESCRIPT", "YY-A-ХХ-XX-XX-NNA-ZZZA-A_T40C", "T80E", "Наименование темы", "Информационное имя" ); + addDMCode("Общая информация и данные", "Служебные и вводные данные", + "

    Модули данных по правилам подготовки и кодирования служебой и вводной информации.

    Коды модулей данных должны иметь следующую структуру:

    - YY-Y-00-47-XX-NNA-XXXX-A_T40C (Наименование АУК – Информационное имя), где:

    YY-Y: идентификационный код модели и отличительный код системы

    XX:

    00 – Автоматизированные учебные курсы

    01 – Автоматизированные учебные курсы (летный персонал)

    02 – Автоматизированные учебные курсы (технический персонал)

    03 – Автоматизированные учебные курсы (ремонтный персонал)

    04 – Автоматизированные учебные курсы (производственный персонал)

    NN: 00, или если требуется более одного модуля данных (для каждого конкретного АУК), начиная с 01.

    XXX: информационный код и его вариант:

    001A — Титульный лист

    00UA — Внесенные изменения

    009A — Содержание

    009B — Поиск по курсу

    018A — Введение

    023A — Административные формы и данные

    ", + "DESCRIPT", "YY-A-00-47-XX-NNA-XXXX-A_T40C", "T80E", "Наименование АУК", "Информационное имя" ); + addDMCode("Общая информация и данные", "Общие сведения о ВС", + "

    Модули данных для описания ВС в целом, чтобы дать общее представление о назначении, конструкции, составе оборудования ВС.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-00-00-00-NNA-010A-A_T40C (Воздушное судно – Общие данные), где:

    YY-Y: идентификационный код модели и отличительный код системы

    NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям, членам экипажа), начиная с 01.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-00-00-00-NNA-010A-A_T80E (Воздушное судно – Контроль знаний: Общие данные)

    ", + "DESCRIPT", "YY-A-00-00-00-NNA-010A-A_T40C", "T80E", "Воздушное судно", "Общие данные" ); + addDMCode("Общая информация и данные", "Нормативные требования авиации", + "

    Модули данных, относящиеся к общим дисциплинам авиационной деятельности и ее тематикам.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-00-7X-XXXX-NNZ-010A-A_T40C (Наименование документа/раздела – Общие данные), где:

    YY-Y – идентификационный код модели и отличительный код системы:

    RHCT-A — для модулей данных нормативного характера Холдинга “Вертолеты России”

    RHCT-B — для модулей данных общего применения международного характера

    RHCT-C — для модулей данных общего применения на территории РФ

    RHCT-D и далее — для модулей данных общего применения на территории иностранных государств

    YY-Y — для модулей данных, применимых к конкретному типу ВС

    7X — категории авиационных требований:

    71 – авиационные требования общего назначения

    72 – авиационные требования гражданской авиации

    73 – авиационные требования государственной авиации

    74 – авиационные требования экспериментальной авиации

    XXXX – последовательная нумерация регламентирующих документов

    NN – последовательная нумерация/классификация разделов, согласно структуре исходного документа

    Z – один буквенно-цифровой символ для дополнительного разделения информации, начиная c “A”.

    В случае использования информации, относящейся к конкретному типу ВС необходимо:

    определить категорию и нормативный документ регламентирующий учебную тему

    определить тему по соответствующему нормативному документу

    если код документа не присвоен, обратиться к организации, ответственной за выпуск Настоящих правил, за присвоением последовательного кода документа

    присвоить код МД:

    использовать идентификационный код модели и отличительный код системы дляданного типа ВС

    использовать категорию (7X) и код документа (XXXX)

    использовать номер раздела документа (NN).

    ПРИМЕР:

    MI171-A: информация по вертолету Ми-171

    72-0017: Правила расследования авиационных происшествий и инцидентов (ПРАПИ-98)

    03: Расследование авиационных происшествий

    Полный код модуля в этом случае: MI171-A-00-72-0017-03A-010A-A-T40C

    Наименование модуля модуля в этом случае: (Расследование авиационных происшествий — Общие данные).

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-00-7X-XXXX-NNZ-010A-A_T80E (Наименование документа/раздела – Контроль знаний: Общие данные)

    ", + "DESCRIPT", "YY-A-00-7X-XXXX-NNZ-010A-A_T40C", "T80E", "Наименование документа/раздела", "Общие данные" ); + addDMCode("Технологии ремонта", "Организация ремонта", + "

    Модули данных по общим задачам организации ремонта. Материал нацелен на руководящий состав, который должен обладать знаниями по принципам организации ремонта, его этапам, необходимым организационным мероприятиям, оснащению, требования к персоналу.

    Коды модулей данных должны иметь следующую структуру:

    - YY-Y-00-6Х-ХХ-NNA-010A-A_T40C (Ремонт – Общие данные), где:

    YY-Y: идентификационный код модели и отличительный код системы

    6Х:

    0 – Ремонт

    1 – Средний ремонт

    2 – Капитальный ремонт

    ХХ: Тема внутри задач организации ремонта

    NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям), начиная с 01.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-00-6Х-ХХ-NNA-010A-A_T80E (Ремонт – Общие данные)

    ", + "DESCRIPT", "YY-A-00-6Х-ХХ-NNA-010A-A_T40C", "T80E", "Ремонт", "Общие данные" ); + addDMCode("Технологии ремонта", "Ремонт конструкций планера", + "

    Модули данных по технологиям ремонта конструкций планера. Материал нацелен на персонал рабочих специальностей, который должен обладать знаниями по технологическим операциям выполнения ремонта на различных этапах.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-5Х-ХХ-ХХ-NNA-ZZZA-A_T40C (Наименование темы – Информационное имя), где:

    YY-Y: идентификационный код модели и отличительный код системы

    5Х-ХХ-ХХ: согласно классификатору ГОСТ 18675-2012

    NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям) или компоненты разборки основных узлов, начиная с 01.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-5Х-ХХ-ХХ-NNA-ZZZA-A_T80E (Наименование темы – Информационное имя)


    ", + "DESCRIPT", "YY-A-5Х-ХХ-ХХ-NNA-ZZZA-A_T40C", "T80E", "Наименование темы", "Информационное имя" ); + addDMCode("Технологии ремонта", "Ремонт силовой установки", + "

    Модули данных по технологиям ремонта конструкции силовой установки. Материал нацелен на персонал рабочих специальностей, который должен обладать знаниями по технологическим операциям выполнения ремонта на различных этапах.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-7Х-ХХ-ХХ-NNA-ZZZA-A_T40C (Наименование темы – Информационное имя), где:

    YY-Y: идентификационный код модели и отличительный код системы

    7Х-ХХ-ХХ: согласно классификатору ГОСТ 18675-2012

    NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям) или компоненты разборки основных узлов, начиная с 01.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-7Х-ХХ-ХХ-NNA-ZZZA-A_T80E (Наименование темы – Информационное имя)

    ", + "DESCRIPT", "YY-A-7Х-ХХ-ХХ-NNA-ZZZA-A_T40C", "T80E", "Наименование темы", "Информационное имя" ); + addDMCode("Технологии ремонта", "Ремонт несущей системы и трансмиссии", + "

    Модули данных по технологиям ремонта несущей системы (НС) и трансмиссии воздушного судна. Материал нацелен на персонал рабочих специальностей, который должен обладать знаниями по технологическим операциям выполнения ремонта на различных этапах.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-6Х-ХХ-ХХ-NNA-ZZZA-A_T40C (Наименование темы – Информационное имя), где:

    YY-Y: идентификационный код модели и отличительный код системы

    6Х-ХХ-ХХ: согласно классификатору ГОСТ 18675-2012 из разделов 60-69, (84).

    NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям) или компоненты разборки основных узлов, начиная с 01.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-6Х-ХХ-ХХ-NNA-ZZZA-A_T80E (Наименование темы – Информационное имя)

    ", + "DESCRIPT", "YY-A-6Х-ХХ-ХХ-NNA-ZZZA-A_T40C", "T80E", "Наименование темы", "Информационное имя" ); + addDMCode("Технологии ремонта", "Ремонт систем и компонентов", + "

    Модули данных по технологиям ремонта систем, съемного оборудования воздушного судна. Материал нацелен на персонал рабочих специальностей, который должен обладать знаниями по технологическим операциям выполнения ремонта на различных этапах.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-ХХ-ХХ-ХХ-NNA-ZZZA-A_T40C (Наименование темы – Информационное имя), где:

    YY-Y: идентификационный код модели и отличительный код системы

    ХХ-ХХ-ХХ: согласно классификатору ГОСТ 18675-2012 из разделов 20-49.

    NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям) или компоненты разборки основных узлов, начиная с 01.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-XХ-ХХ-ХХ-NNA-ZZZA-A_T80E (Наименование темы – Информационное имя)

    ", + "DESCRIPT", "YY-A-ХХ-ХХ-ХХ-NNA-ZZZA-A_T40C", "T80E", "Наименование темы", "Информационное имя" ); + addDMCode("Информация для экипажа", "Описание и работа систем", + "

    Модули данных по каждой системе/подсистеме ВС. Задача этих модулей дать инженерный взгляд на конструкцию и функционирование систем и компонентов ВС в объеме достаточном для экипажа.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-XX-XX-00-NNA-043A-A_T40C (Наименование системы или подсистемы – Информация для экипажа), где:

    YY-Y: идентификационный код модели и отличительный код системы

    XX-XX: код стандартной системы нумерации

    NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям, членам экипажа), начиная с 01.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-XX-XX-00-NNA-043A-A_T80E (Наименование системы или подсистемы – Контроль знаний: Информация для экипажа)

    ", + "DESCRIPT", "YY-A-XX-XX-00-NNA-043A-A_T40C", "T80E", "Наименование системы или подсистемы", "Информация для экипажа" ); + addDMCode("Информация для экипажа", "Нормальная эксплуатация систем и оборудования", + "

    Модули данных по каждой системе/подсистеме ВС, имеющей нормальные процедуры эксплуатации.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-XX-XX-00-00A-131A-A_T40C (Наименование системы или подсистемы – Процедура нормальной эксплуатации), где:

    YY-Y: идентификационный код модели и отличительный код системы

    XX-XX: код стандартной системы нумерации

    Содержание разделов модулей данных должно быть составлено, исходя из условий (этапов) работы членов экипажа (по применимости), примеры:

    Контрольный осмотр

    Контрольная проверка перед запуском

    Запуск двигателей

    Контрольная проверка после запуска

    Выполнение полета

    После посадки.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-XX-XX-00-NNA-131A-A_T80E (Наименование системы или подсистемы – Контроль знаний: Процедура нормальной эксплуатации)

    ", + "DESCRIPT", "YY-A-XX-XX-00-00A-131A-A_T40C", "T80E", "Наименование системы или подсистемы", "Процедура нормальной эксплуатации" ); + addDMCode("Информация для экипажа", "Эксплуатационные ограничения", + "

    Модули данных по каждой системе/подсистеме ВС, имеющей эксплуатационные ограничения.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-15-10-XX-NNA-043B-A_T40C (Наименование системы или подсистемы – Эксплуатационные ограничения), где:

    YY-Y: идентификационный код модели и отличительный код системы

    XX: код стандартной системы нумерации, 00 для ВС в целом.

    NN – номер подсистемы/подподсистемы, если не требуется использовать 00.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-15-10-XX-NNA-043B-A_T80E (Наименование системы или подсистемы – Контроль знаний: Эксплуатационные ограничения)

    ", + "DESCRIPT", "YY-A-15-10-XX-NNA-043B-A_T40C", "T80E", "Наименование системы или подсистемы", "Эксплуатационные ограничения" ); + addDMCode("Информация для экипажа", "Нормальная эксплуатация ВС", + "

    Модули данных нормальных процедур эксплуатации по стадиям подготовки и полета.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-15-3X-XX-NNA-043A-A_T40C (Наименование режима (стадии) – Информация для экипажа), где:

    YY-Y: идентификационный код модели и отличительный код системы

    3X-XX:

    31 — Предвариатильная подготовка:

    XX: используется для дальнейшей классификации, если необходимо, например:

    01: Штурманская подготовка

    02: Расчет полета

    32 — Подготовка к полету:

    XX: используется для дальнейшей классификации, если необходимо, например:

    01: Предполетный осмотр

    02: Предполетная проверка перед запуском

    03: Запуск двигателей

    04: Предполетная проверка после запуска

    33 — Выполнение полета:

    XX: используется для дальнейшей классификации, если необходимо, например:

    01 — Руление

    02 — Взлет и полет на малой высоте

    03 — Набор высоты

    04 — Крейсерский полет

    05 — Снижение

    06 — Заход на посадку

    07 — Посадка

    34 — Вертолетовождение/Самолетовождение:

    XX: используется для дальнейшей классификации, если необходимо

    (35–38) — Используется при необходимости

    39 — Завершение полета:

    XX: используется для дальнейшей классификации, если необходимо, например:

    01: Выключение двигателей и оборудования

    02: Послеполетный осмотр

    03: Заполнение документации

    04: Анализ полетных данных

    NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям, членам экипажа), начиная с 01.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-15-3X-XX-NNA-043A-A_T80E (Наименование режима (стадии) – Контроль знаний: Информация для экипажа)

    ", + "DESCRIPT", "YY-A-15-3X-XX-NNA-043A-A_T40C", "T80E", "Наименование режима (стадии)", "Информация для экипажа" ); + addDMCode("Информация для экипажа", "Контрольные облеты и испытания/регулировки", + "

    Модули данных программ контрольных облетов и испытаний/регулировок в полете, включая динамическую регулировку несущей системы.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-05-62-XX-NNA-043A-A_T40C (Наименование программы – Информация для экипажа), где:

    YY-Y: идентификационный код модели и отличительный код системы

    XX: используется для нумерации каждой уникальной программы облета/испытаний/регулировки

    NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям, членам экипажа), начиная с 01.

    Перечень необходимых программ, смотри ЭТД применимого типа ВС.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-05-62-XX-NNA-043A-A_T80E (Наименование программы – Контроль знаний: Информация для экипажа)

    ", + "DESCRIPT", "YY-A-05-62-XX-NNA-043A-A_T40C", "T80E", "Наименование программы", "Информация для экипажа" ); + addDMCode("Информация для экипажа", "Особые условия эксплуатации ВС", + "

    Модули данных процедур эксплуатации в особых условиях.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-15-50-XX-NNA-131A-A_T40C (Наименование особого условия – Процедура нормальной эксплуатации), где:

    YY-Y: идентификационный код модели и отличительный код системы

    XX: используется для нумерации каждого уникального особого условия

    NN: 00, или если требуется более одного модуля данных (например, разделить курсы по специальностям, членам экипажа), начиная с 01.

    Перечень необходимых особых условий, смотри РЛЭ применимого типа ВС.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-15-50-XX-NNA-131A-A_T80E (Наименование особого условия – Контроль знаний: Процедура нормальной эксплуатации)

    ", + "DESCRIPT", "YY-A-15-50-XX-NNA-131A-A_T40C", "T80E", "Наименование особого условия", "Процедура нормальной эксплуатации" ); + addDMCode("Информация для экипажа", "Аварийная эксплуатация ВС", + "

    Модули данных по действиям экипажа при возникновении аварийной ситуации/отказа.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-15-4X-XX-NNA-141A-A_T40C (Наименование отказа/аварийной ситуации – Процедура аварийной эксплуатации), где:

    4X – тип ситуации:

    41 - Общие сведения

    42 - Аварийные ситуации на земле

    43 - Аварийные ситуации на взлете

    44 - Аварийные ситуации, связанные с неисправностью систем

    45 - Отказ одного или нескольких двигателей

    46 - Аварийные ситуации при заходе на посадку/посадке

    47 - Отказы систем БРЭО

    48 - Прочие аварийные ситуации или отказы

    49 - Показания многофункционального дисплея со сведениями об аварийной ситуации

    XX – последовательная нумерация отказа/аварийной ситуации, внутри типа

    NN – последовательная нумерация, если требуется более одного модуля данных.

    Типы ситуации 41,42,43,45,46,48 могут быть использованы для АУК Летная эксплуатация.

    Типы ситуации 44,45,47,48 могут быть использованы для АУК … Описание и эксплуатация.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-15-4X-XX-NNA-141A-A_T80E (Наименование отказа/аварийной ситуации – Контроль знаний: Процедура аварийной эксплуатации)

    ", + "DESCRIPT", "YY-A-15-4X-XX-NNA-141A-A_T40C", "T80E", "Наименование отказа/аварийной ситуации", "Процедура аварийной эксплуатации" ); + addDMCode("Информация для экипажа", "Практическая аэродинамика", + "

    Модули данных анализа летно-технических характеристик ВС.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-15-21-XX-NNA-043A-A_T40C (Наименование темы — Информация для экипажа), где:

    XX – последовательная нумерация МД/тем:

    01: Аэродинамические характеристики

    02: Устойчивость, управляемость и балансировка

    03: Висение и вертикальные режимы полета

    04: Установившиеся режимы полета с поступательной скоростью

    05: Переходные режимы полета, виражи и развороты

    06: Руление, взлет и посадка

    07: Дальность и продолжительность полета

    08: Особые условия полета

    09: Особые случаи в полете

    10: Критические режимы полета

    NN – 00 или последовательная нумерация, если требуется более одного модуля данных.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-15-21-XX-NNA-043A-A_T80E (Наименование темы – Контроль знаний: Информация для экипажа)

    ", + "DESCRIPT", "YY-A-15-21-XX-NNA-043A-A_T40C", "T80E", "Наименование темы", "Информация для экипажа" ); + addDMCode("Информация для экипажа", "Эксплуатация по вариантам применения", + "

    Модули данных при применении ВС на различных видах работ.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-15-71-XX-NNA-043A-A_T40C (Наименование варианта применения – Информация для экипажа), где:

    XX – последовательная нумерация варианта применения

    NN – последовательная нумерация, если требуется более одного модуля данных.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-15-71-XX-NNA-043A-A_T80E (Наименование варианта применения – Контроль знаний: Информация для экипажа)

    ", + "DESCRIPT", "YY-A-15-71-XX-NNA-043A-A_T40C", "T80E", "Наименование варианта применения", "Информация для экипажа" ); + addDMCode("Информация для экипажа", "Боевое применение", + "

    Модули данных при боевом применении вооружения. Включают описательные данные/ограничения, нормальные и аварийные процедуры применения по вариантам вооружения.

    Коды модулей данных учебной темы должны иметь следующую структуру:

    - YY-Y-15-72-00-NNA-043A-A_T40C (Боевое применение – Информация для экипажа)

    - YY-Y-15-72-XX-NNA-043A-A_T40C (Наименование варианта боевого применения – Информация для экипажа), где:

    XX – последовательная нумерация варианта боевого применения

    NN – последовательная нумерация, если требуется более одного модуля данных.

    Коды модулей данных контроля знаний должны иметь следующую структуру:

    - YY-Y-15-72-XX-NNA-043A-A_T80E (Наименование варианта боевого применения – Контроль знаний: Информация для экипажа)

    ", + "DESCRIPT", "YY-A-15-72-XX-NNA-043A-A_T40C", "T80E", "Наименование варианта боевого применения", "Информация для экипажа" ); + + + addEDocName("РЭ", "Руководство по эксплуатации"); + addEDocName("ИМ", "Инструкция по монтажу, пуску, регулированию и обкатке изделия"); + addEDocName("ФО", "Формуляр"); + addEDocName("ПС", "Паспорт"); + addEDocName("ЭТ", "Этикетка"); + addEDocName("КИ", "Каталог изделия"); + addEDocName("НЗЧ", "Нормы расхода запасных частей"); + addEDocName("НМ", "Нормы расхода материалов"); + addEDocName("ЗИ", "Ведомость ЗИП"); + addEDocName("УП", "Учебно-технические плакаты"); + addEDocName("ИС", "Инструкции эксплуатационные специальные"); + addEDocName("ВЭ", "Ведомость эксплуатационных документов"); + +} + +void RU_Const::addPMCodesRTC(QString pmNumber, QString pmNumberText) { + addPMCode("RTC", pmNumber, "00", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ"); + addPMCode("RTC", pmNumber, "10", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ПРЕДВАРИТЕЛЬНАЯ ДЕФЕКТАЦИЯ (СИСТЕМ, КОНСТРУКЦИЙ)"); + addPMCode("RTC", pmNumber, "11", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ТЕХНИЧЕСКОЕ ОПИСАНИЕ (СИСТЕМ, КОНСТРУКЦИЙ)"); + addPMCode("RTC", pmNumber, "12", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ИСПЫТАНИЯ И ОСМОТРЫ (СИСТЕМ, КОНСТРУКЦИЙ)"); + addPMCode("RTC", pmNumber, "13", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РАЗБОРКА, СБОРКА (СИСТЕМ, КОНСТРУКЦИЙ)"); + addPMCode("RTC", pmNumber, "20", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ТИПОВЫЕ ТЕХНОЛОГИИ СИСТЕМ"); + addPMCode("RTC", pmNumber, "21", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ЭЛЕКТРОЖГУТОВ"); + addPMCode("RTC", pmNumber, "22", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ШВЕЙНЫЕ, ОБОЙНО-ЭМАЛИТНЫЕ РАБОТЫ"); + addPMCode("RTC", pmNumber, "23", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ВОЗДУШНО-МАСЛЯНЫХ РАДИАТОРОВ"); + addPMCode("RTC", pmNumber, "24", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ГИДРОБАКОВ"); + addPMCode("RTC", pmNumber, "25", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ МАСЛОБАКОВ"); + addPMCode("RTC", pmNumber, "26", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ЖЕСТКИХ ТОПЛИВНЫХ БАКОВ"); + addPMCode("RTC", pmNumber, "27", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ МЯГКИХ ТОПЛИВНЫХ БАКОВ"); + addPMCode("RTC", pmNumber, "28", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ТРУБОПРОВОДОВ"); + addPMCode("RTC", pmNumber, "29", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ШЛАНГОВ"); + addPMCode("RTC", pmNumber, "30", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ КОМПОНЕНТОВ"); + addPMCode("RTC", pmNumber, "31", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ДЕФЕКТАЦИЯ КОМПОНЕНТОВ"); + addPMCode("RTC", pmNumber, "32", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "СБОРКА/РАЗБОРКА КОМПОНЕНТОВ"); + addPMCode("RTC", pmNumber, "33", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "Технологии ремонта КОМПОНЕНТОВ"); + addPMCode("RTC", pmNumber, "50", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ТИПОВЫЕ ТЕХНОЛОГИИ КОНСТРУКЦИЙ ПЛАНЕРА"); + addPMCode("RTC", pmNumber, "51", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ОСТЕКЛЕНИЯ"); + addPMCode("RTC", pmNumber, "52", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ЛКП"); + addPMCode("RTC", pmNumber, "53", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ КРЕПЕЖА"); + addPMCode("RTC", pmNumber, "54", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ДЕФЕКТАЦИЯ МЕТОДАМИ НЕРАЗРУШАЮЩЕГО КОНТРОЛЯ"); + addPMCode("RTC", pmNumber, "60", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ТИПОВЫЕ ТЕХНОЛОГИИ НЕСУЩЕЙ СИСТЕМЫ И ТРАНСМИССИИ"); + addPMCode("RTC", pmNumber, "61", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "РЕМОНТ ЛОПАСТЕЙ НВ И РВ"); + addPMCode("RTC", pmNumber, "70", "АУК РЕМОНТНОГО ПЕРСОНАЛА", pmNumberText, "ТИПОВЫЕ ТЕХНОЛОГИИ СИЛОВОЙ УСТАНОВКИ"); +} + +void RU_Const::addPMCode(QString pmNumABC, QString pmNumber, QString pmVolume, + QString pmNumABCText, QString pmNumberText, QString pmVolumeText) { + pmCodeListItemType item; + item.pmNumABC = pmNumABC; item.pmNumABCText = pmNumABCText; + item.pmNumber = pmNumber; item.pmNumberText = pmNumberText; + item.pmVolume = pmVolume; item.pmVolumeText = pmVolumeText; + pmCodeList.append(item); +} + +// DESCRIPT CREW LEARNING +void RU_Const::addDMCode(QString chapterName, QString paraName, QString text, QString schemeTypeStr, QString dmCode, + QString dmLearningCode, QString techName, QString infoName) { + dmCodeListItemType dm; + dm.chapterName = chapterName; dm.paraName = paraName; + dm.text = text; dm.schemeTypeStr = schemeTypeStr; dm.infoName = infoName; dm.techName = techName; + QStringList dmSplitList = dmCode.split("-"); //YY-Y-15-72-XX-NNA-043A-A_T40C + QStringList dmSplitList7 = dmSplitList[7].split("_"); //A_T40C + dm.modelIdentCode = modelIdentCode; /*dmSplitList[0];*/ dm.systemDiffCode = dmSplitList[1]; + dm.systemCode = dmSplitList[2]; dm.subSystemCode = dmSplitList[3].mid(0,1); dm.subSubSystemCode = dmSplitList[3].mid(1,1); dm.assyCode = dmSplitList[4]; + dm.disassyCode = dmSplitList[5].mid(0,2); dm.disassyCodeVariant = dmSplitList[5].mid(2,1); + dm.infoCode = dmSplitList[6].mid(0,3); dm.infoCodeVariant = dmSplitList[6].mid(3,1); + dm.itemLocationCode = dmSplitList7[0]; + dm.learnCode = dmSplitList7[1].mid(0,3); dm.learnEventCode = dmSplitList7[1].mid(3,1); + dm._learnCode = dmLearningCode.mid(0,3); dm._learnEventCode = dmLearningCode.mid(3,1); + dmCodeList.append(dm); +} + +void RU_Const::addEDocName(QString shName, QString name) { + eDocShortNames.append(shName); eDocNames.append(name); +} diff --git a/s1000d/Converter_Source/ru_const.h b/s1000d/Converter_Source/ru_const.h new file mode 100644 index 0000000..539256c --- /dev/null +++ b/s1000d/Converter_Source/ru_const.h @@ -0,0 +1,55 @@ + #ifndef RU_CONST_H +#define RU_CONST_H + +#include +#include + +class RU_Const { +public: + void Init_RU_Const(); + void addPMCode(QString pmNumABC, QString pmNumber, QString pmVolume, + QString pmNumABCText, QString pmNumberText, QString pmVolumeText); + void addPMCodesRTC(QString pmNumber, QString pmNumberText); + void addDMCode(QString chapterName, QString paraName, QString text, QString schemeTypeStr, QString dmCode, + QString dmLearningCode, QString techName, QString infoName); + void addEDocName(QString shName, QString name); + + QMap attr_accessPointTypeValue; + + QString companyName; + QString modelIdentCode, pmIssuer; + struct pmCodeListItemType{ + QString pmNumABC, pmNumber, pmVolume; + QString pmNumABCText, pmNumberText, pmVolumeText; + }; + + QList pmCodeList; + + struct dmCodeListItemType{ + QString chapterName, paraName, text, schemeTypeStr, dmCode, infoName, techName, dmLearningCode; + QString modelIdentCode, systemDiffCode, systemCode, subSystemCode, subSubSystemCode, assyCode, + disassyCode, disassyCodeVariant, infoCode, infoCodeVariant, itemLocationCode, learnCode, learnEventCode, _learnCode, _learnEventCode; + }; + QList dmCodeList; + + QString languageIsoCode, countryIsoCode, inWork, issueNumber, security_securityClassification; + QString responsiblePartnerCompany_enterpriseCode, responsiblePartnerCompany_enterpriseName, + originator_enterpriseCode, originator_enterpriseName, copyrightPara; + QString tableOfContents, acronymsList; + QString htmlButtonLearned; + QString tableTitle, tableShortTitle, figureTitle, figureShortTitle; + QString testQuestions; + QString icn_variantCode; + QStringList crew; + + QStringList eDocNames, eDocShortNames; + +}; + + + + + + + +#endif // RU_CONST_H diff --git a/s1000d/Converter_Source/s1000d_manager.cpp b/s1000d/Converter_Source/s1000d_manager.cpp new file mode 100644 index 0000000..86e558c --- /dev/null +++ b/s1000d/Converter_Source/s1000d_manager.cpp @@ -0,0 +1,3492 @@ +#include "s1000d_manager.h" +#include +#include +#include +#include +#include +#include +#include +#include +//#include +//#include +//#include +#include +#include + +// DM: Chapter 3.9.5.2.1.2 Common constructs +// ICN: 1822 + +// большинство функций работают с текущим элементом списка, хранимым в item +// ВСЕГДА сначала необходимо вызывать setCurItem(int ind) + +S1000D_Manager::S1000D_Manager() +{ + ru_const.Init_RU_Const(); +} + +S1000D_Manager::~S1000D_Manager() +{ + clearItems(); +} + +QDomNode S1000D_Manager::findElementRec(QDomNode domNode, QString path) { + QStringList elementTagNames = path.split('.'); + QDomNodeList domNodeList = domNode.childNodes(); + + //if(DBG) qDebug() << path; + if(elementTagNames.isEmpty() || path == "") + return domNode; + int nodeInd = getNodePathIndex(elementTagNames.first()); + QString nodeName = elementTagNames.first(); + if(nodeName.indexOf("[") != -1) + nodeName = nodeName.mid(0, nodeName.indexOf("[")); + //if(DBG) qDebug() << " " << elementTagNames.first() << " -> " << nodeName << "[" << nodeInd << "]" << " childs " << domNodeList.count(); + + for(int i = 0; i < domNodeList.count(); i++) { + //if(DBG) qDebug() << " search for" << nodeName << "=?" << domNodeList.at(i).nodeName(); + if(domNodeList.at(i).nodeName().compare(nodeName,Qt::CaseInsensitive) == 0) { //toElement().tagName(). + if(nodeInd > 0) { + nodeInd--; continue; + } + + elementTagNames.takeFirst(); + if(elementTagNames.isEmpty()) + return domNodeList.at(i); + else + return findElementRec(domNodeList.at(i), elementTagNames.join(".")); + } + } + + //if(DBG) qDebug() << " Node " << elementTagNames.at(0) << " not found (" << path << ")"; + QDomElement nullElement = item->doc.createElement(""); + return nullElement; + + //QDomElement newElement = item->doc.createElement(elementTagNames.at(0)); // если узел отсутствует - создаем + //elementTagNames.takeFirst(); + //domNode.appendChild(newElement); + //return findElementRec(newElement,elementTagNames.join(".")); +} + +QDomNode S1000D_Manager::findElement(QString path) { + //if(DBG) qDebug() << item->doc.documentElement().tagName(); + //if(DBG) qDebug() << " findElement " << path; + return findElementRec(item->doc.documentElement(), path); +} + +QString S1000D_Manager::getNodeText(QString path) { + QDomNode element = findElement(path); + if(element.isNull()) + return ""; + else + return element.toElement().text(); +} + +void S1000D_Manager::setNodeText(QString path, QString text) { + QDomNode element = findElement(path); + if(element.isNull()) return; + //if(DBG) qDebug() << " element: " << element.firstChild().isText() << element.nodeName(); + for(QDomNode n = element.firstChild(); !n.isNull(); n = n.nextSibling()) + { + QDomText t = n.toText(); + if (!t.isNull()) + t.setNodeValue(text); + } + if(element.childNodes().count() == 0) { + QDomText t = item->doc.createTextNode(text); + element.appendChild(t); + } +} + +void S1000D_Manager::deleteNode(QString path) { + QDomNode element = findElement(path); + if(element.isNull()) return; + element.parentNode().removeChild(element); +} + +int S1000D_Manager::createNode(QString path, QString nodeName) { // возвращает номер созданного узла для обращения по индексу: node[i] + QDomNode element = findElement(path); + if(element.isNull()) return -1; + QDomElement newNode = item->doc.createElement(nodeName); + element.appendChild(newNode); + QDomNodeList lst = element.childNodes(); + int index = -1; + for(int i=0; idoc.createAttribute(attrName); + domAttr.setValue(attrVal); + element.toElement().setAttributeNode(domAttr); + } */ +} + +void S1000D_Manager::deleteNodeAttr(QString path, QString attrName) { + QDomNode element = findElement(path); + if(element.isNull()) return; + element.toElement().removeAttribute(attrName); +} + +QStringList S1000D_Manager::getNodeAllChilds(QString path) { + QStringList nodeList; + QDomNode element = findElement(path); + if(element.isNull()) return nodeList; + + QDomNodeList domNodeList = element.childNodes(); + for(int i=0;i mask; + mask.append(QString("*.xml")); + QStringList listFiles = dir.entryList(mask, QDir::Files); + //bool validFlag; + clearItems(); + + foreach (QString file, listFiles) { + item = new ItemStruct(); + item->fileName = dir.absoluteFilePath(file); item->isReady = true; + //log.append(QFileInfo(file).fileName()); + //if(DBG) qDebug() << "Открытие " << QFileInfo(file).fileName(); + + QFile xmlFile(item->fileName); + if (!xmlFile.open(QFile::ReadOnly | QFile::Text)) { + log.append(QString(" Не удалось открыть файл")); + continue; + } + QByteArray fileData = xmlFile.readAll(); + xmlFile.close(); + item->doc.setContent(fileData); + + QString curscheme = QFileInfo(item->doc.documentElement().attribute("xsi:noNamespaceSchemaLocation", "")).baseName().toUpper(); + item->moduleType = mtUNKNOWN; + if(item->doc.documentElement().nodeName().toUpper() == "DMODULE") + item->moduleType = mtDM; + if(item->doc.documentElement().nodeName().toUpper() == "PM") + item->moduleType = mtPM; + + //log.append(QString(" Тип модуля: ")+item->doc.documentElement().nodeName() + QString(" Файл схемы: ")+curscheme); + //if(DBG) qDebug() << " Тип модуля: " << item->doc.documentElement().nodeName() << " Файл схемы: " << curscheme; + +// Доп. ТЗ № 1 Вертолеты России: +// Резрешено использовать только flat схемы, перечисленные ниже: +// - brex +// - comrep +// - crew +// - descript +// - dml +// - fault +// - frontmatter +// - learning +// - pm +// - proced + + item->schemeType = getSchemeTypeByStr(curscheme); + + if(item->moduleType == mtUNKNOWN) { + //log.append(QString(" Тип модуля не поддерживается, файл пропущен")); + continue; + } + if(item->schemeType == stUNKNOWN) { + //log.append(QString(" Неизвестная схема файла, пропущен")); + continue; + } + + //if((item->schemeType != PM) && (item->schemeType != DESCRIPT) && + // (item->schemeType != CREW) && (item->schemeType != LEARNING) ) { + // log.append(QString(" Работа с файлами схемы " +curscheme+ " в настоящее время не реализована, файл пропущен")); + // continue; + //} + + item->fileCode = ""; + // DMC-S1000DLIGHTING-AAA-D00-00-00-00AA-0A1A-D_001-00_EN-US + //S1000DLIGHTING-AAA-D00-00-00-00AA-00NA-D_001-00 + //dmodule + // + // + QString _language; //_dmCode, _issueInfo, , _pmCode; + QString newFileName = item->fileName; + if(item->moduleType == mtDM) { + item->fileCode = dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + if(!isNodeCreated("rdf:Description")) { + QDomNode descr = item->doc.createElement("rdf:Description"); + findElement("").insertBefore(descr, findElement("").firstChild()); + } + if(!isNodeCreated("rdf:Description.dc:identifier")) createNode("rdf:Description", "dc:identifier"); + setNodeText("rdf:Description.dc:identifier", item->fileCode); + _language = "identAndStatusSection.dmAddress.dmIdent.language"; + newFileName = QFileInfo(item->fileName).absolutePath()+"/" + "DMC-" + item->fileCode + "_"+getNodeAttr(_language, "languageIsoCode").toUpper()+"-"+getNodeAttr(_language, "countryIsoCode").toUpper()+".xml"; + item->dmDataFilled = true; item->selectedInDMCodeList = -1; + } + + // PMC-BRAKE-C3002-EPWG1-00_000-01_EN-US + // BRAKE-C3002-EPWG1-00_000_01 + // + // + if(item->moduleType == mtPM) { + //_pmCode = "identAndStatusSection.pmAddress.pmIdent.pmCode"; + //_issueInfo = "identAndStatusSection.pmAddress.pmIdent.issueInfo"; + _language = "identAndStatusSection.pmAddress.pmIdent.language"; + item->fileCode = pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + if(!isNodeCreated("rdf:Description")) { + QDomNode descr = item->doc.createElement("rdf:Description"); + findElement("").insertBefore(descr, findElement("").firstChild()); + } + if(!isNodeCreated("rdf:Description.dc:identifier")) createNode("rdf:Description", "dc:identifier"); + setNodeText("rdf:Description.dc:identifier", item->fileCode); + newFileName = QFileInfo(item->fileName).absolutePath()+"/" + "PMC-" + item->fileCode + "_"+getNodeAttr(_language, "languageIsoCode").toUpper()+"-"+getNodeAttr(_language, "countryIsoCode").toUpper()+".xml"; + } + + if(isNodeCreated("rdf:Description.dc:source")) + item->importedFromLyX = getNodeText("rdf:Description.dc:source"); + else + item->importedFromLyX = ""; + + if(QFileInfo(newFileName.toUpper()).fileName() != QFileInfo(item->fileName.toUpper()).fileName()) + if(QFileInfo::exists(item->fileName)) { + QFile::rename(item->fileName, newFileName); + log.append(QString(" Файл переименован в " + QFileInfo(newFileName).fileName())); + item->fileName = newFileName; + } + + item->parent = -1; item->child.clear(); + //if(DBG) qDebug() << item->fileCode; + + items.append(*item); // файл прочтен успешно, добавляем в список + } // цикл по файлам + + for(int i=0;i 1) { + nodeClone = lcInteractionNode.lastChild().cloneNode(); + lcInteractionNode.removeChild(lcInteractionNode.lastChild()); + newInter = item->doc.createElement("lcInteraction"); + newInter.appendChild(nodeClone); + lcInteractionNode.parentNode().insertAfter(newInter, lcInteractionNode); + interCnt++; + } + } + } + + return true; + */ +} + +_schemeType S1000D_Manager::getSchemeTypeByStr(QString str) { + _schemeType newSchemeType = stUNKNOWN; + if(str == "DDN") newSchemeType = stDDN; + if(str == "DML") newSchemeType = stDML; + if(str == "PM") newSchemeType = stPM; + if(str == "APPLICCROSSREFTABLE") newSchemeType = stAPPLICCROSSREFTABLE; + if(str == "PRDCROSSREFTABLE") newSchemeType = stPRDCROSSREFTABLE; + if(str == "CONDCROSSREFTABLE") newSchemeType = stCONDCROSSREFTABLE; + if(str == "DESCRIPT") newSchemeType = stDESCRIPT; + if(str == "PROCED") newSchemeType = stPROCED; + if(str == "PROCESS") newSchemeType = stPROCESS; + if(str == "COMREP") newSchemeType = stCOMREP; + if(str == "FRONTMATTER") newSchemeType = stFRONTMATTER; + if(str == "BREX") newSchemeType = stBREX; + if(str == "BRDOC") newSchemeType = stBRDOC; + if(str == "LEARNING") newSchemeType = stLEARNING; + if(str == "CREW") newSchemeType = stCREW; + if(str == "FAULT") newSchemeType = stFAULT; + if(str == "IPD") newSchemeType = stIPD; + if(str == "CHECKLIST") newSchemeType = stCHECKLIST; + if(str == "NOTATIONS") newSchemeType = stNOTATIONS; + if(str == "CONTAINER") newSchemeType = stCONTAINER; + if(str == "XLINK") newSchemeType = stXLINK; + if(str == "WRNGFLDS") newSchemeType = stWRNGFLDS; + return newSchemeType; +} + +void S1000D_Manager::buildPMTree(int pmItemInd) { + setCurItem(pmItemInd); + + bool isModifyed = false; + QString PMCodeStr, DMCodeStr; + QDomNode mainEntry, secondEntry, clone, subEntry, subSubEntry; + mainEntry = findElement("content.pmEntry[0]"); + if(mainEntry.isNull()) return; + + while(isNodeCreated("content.pmEntry[1]")) { + secondEntry = findElement("content.pmEntry[1]"); + while(secondEntry.hasChildNodes()) { + if(secondEntry.firstChild().nodeName() == "dmRef" || secondEntry.firstChild().nodeName() == "pmRef") { + clone = secondEntry.firstChild().cloneNode(); + item->doc.importNode(clone, true); + mainEntry.appendChild(clone); + } + if(secondEntry.firstChild().nodeName() == "pmEntry") { + subEntry = secondEntry.firstChild(); + while(subEntry.hasChildNodes()) { + if(subEntry.firstChild().nodeName() == "dmRef" || subEntry.firstChild().nodeName() == "pmRef") { + clone = subEntry.firstChild().cloneNode(); + item->doc.importNode(clone, true); + mainEntry.appendChild(clone); + } + if(subEntry.firstChild().nodeName() == "pmEntry") { + subSubEntry = secondEntry.firstChild(); + while(subSubEntry.hasChildNodes()) { + if(subSubEntry.firstChild().nodeName() == "dmRef" || subSubEntry.firstChild().nodeName() == "pmRef") { + clone = subSubEntry.firstChild().cloneNode(); + item->doc.importNode(clone, true); + mainEntry.appendChild(clone); + } + //.. + subSubEntry.removeChild(subEntry.firstChild()); + } + subEntry.removeChild(subEntry.firstChild()); + } + } + } + secondEntry.removeChild(secondEntry.firstChild()); + } + mainEntry.parentNode().removeChild(secondEntry); + } + + int pmRefCnt=-1, dmRefCnt=-1; + for(int p=0;p!) в основную pmEntry +// QDomNode mainEntry, subEntry; +// QDomNodeList subEntryChildList; +// while(isNodeCreated(path+".pmEntry["+QString::number(i)+"].pmEntry")) { +// mainEntry = findElement(path+".pmEntry["+QString::number(i)+"]"); + +// int subEntryCnt = getNodeChildsWithNameCount(path+".pmEntry["+QString::number(i)+"]", "pmEntry"); +// for(int j=0;jfileCode = ""; // если изменилось кодирование модулей - переименовываем старые файлы + QString _issueInfo, _language; + QString newFileName = item->fileName; + if(item->moduleType == mtDM) { + + item->fileCode = dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + _issueInfo = "identAndStatusSection.dmAddress.dmIdent.issueInfo"; + _language = "identAndStatusSection.dmAddress.dmIdent.language"; + newFileName = QFileInfo(item->fileName).absolutePath()+"/" + "DMC-" + item->fileCode + "_"+getNodeAttr(_issueInfo, "issueNumber")+"-"+getNodeAttr(_issueInfo, "inWork")+"_"+getNodeAttr(_language, "languageIsoCode")+"-"+getNodeAttr(_language, "countryIsoCode")+".xml"; + } + if(item->moduleType == mtPM) { + _issueInfo = "identAndStatusSection.pmAddress.pmIdent.issueInfo"; + _language = "identAndStatusSection.pmAddress.pmIdent.language"; + item->fileCode = pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + newFileName = QFileInfo(item->fileName).absolutePath()+"/" + "PMC-" + item->fileCode + "_"+getNodeAttr(_language, "languageIsoCode")+"-"+getNodeAttr(_language, "countryIsoCode")+".xml"; + } + + if(QFileInfo(newFileName.toUpper()).fileName() != QFileInfo(item->fileName.toUpper()).fileName()) + if(QFileInfo::exists(item->fileName)) { + QFile::rename(item->fileName, newFileName); + log.append(QString(" Файл "+QFileInfo(item->fileName).fileName()+" переименован в " + QFileInfo(newFileName).fileName())); + } + item->fileName = newFileName; + } */ +} + +QString S1000D_Manager::SaveProject() { + qSetGlobalQHashSeed(0); + for(int i=0;ifileName.length() > 127) { // обрезаем длинные имена файлов + QStringList lst = item->fileName.split("."); + QString fext = lst.takeLast(); + QString fname = lst.join("."); + fname = fname.left(127)+".."; + for(int k=0;kfileName = fname+"."+fext; + } + + if(item->moduleType == mtDM) { + item->fileCode = dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + QDomNode descr = item->doc.namedItem("dmodule").namedItem("rdf:Description"); + if(descr.isNull()) { + descr = item->doc.createElement("rdf:Description"); + item->doc.namedItem("dmodule").insertBefore(descr, item->doc.namedItem("dmodule").namedItem("identAndStatusSection")); + } + //descr.toElement().setAttribute("flags", QString::number(item->crewFlags, 16)); + if(item->isQualifyed) + descr.toElement().setAttribute("qualifyed", "true"); + else + descr.toElement().setAttribute("qualifyed", "false"); + } + if(item->moduleType == mtPM) { + item->fileCode = pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + QDomNode descr = item->doc.namedItem("pm").namedItem("rdf:Description"); + if(descr.isNull()) { + descr = item->doc.createElement("rdf:Description"); + item->doc.namedItem("pm").insertBefore(descr, item->doc.namedItem("pm").namedItem("identAndStatusSection")); + } + //descr.toElement().setAttribute("flags", QString::number(item->crewFlags, 16)); + if(item->isQualifyed) + descr.toElement().setAttribute("qualifyed", "true"); + else + descr.toElement().setAttribute("qualifyed", "false"); + } + + QFile xmlFile(projectPath + "/" + item->fileName); + if (!xmlFile.open(QFile::WriteOnly | QFile::Text)) { + if(DBG) qDebug() << "SaveProject: Не удалось открыть файл "+projectPath + "/" + item->fileName; + return "Не удалось открыть файл "+projectPath + "/" + item->fileName; + } + + QTextStream outFile(&xmlFile); + item->doc.save(outFile, 4); + xmlFile.close(); + //qDebug() << "Save ("+item->fileCode+"): " + projectPath + "/" + item->fileName; + + if(item->moduleType == mtPM) continue; + + if(item->html.count() > 0) { + QString htmlFileName = projectPath + "/" + QString(item->fileName).replace(".xml", ".html"); + QFile htmlFile(htmlFileName); + if (htmlFile.open(QFile::ReadWrite | QFile::Text)) { + QTextStream out(&htmlFile); out.setCodec("UTF-8"); + for(int i=0;ihtml.count();i++) + out << QString(item->html[i]+"\n").toUtf8(); + htmlFile.close(); + } + } + + QString lyxLogFileName = projectPath + "/" + item->fileName+"_importlog.txt"; //lyxLogFileName.toStdString() + QFile logFile(lyxLogFileName); + if (logFile.open(QFile::ReadWrite | QFile::Text)) { + QTextStream out(&logFile); out.setCodec("UTF-8"); + for(int i=0;ilyxLog.count();i++) + out << QString(item->lyxLog[i]+"\n").toUtf8(); + logFile.close(); + } + } + + SavePackagesXML(); + qSetGlobalQHashSeed(-1); // reset hash value + return ""; +} + +void S1000D_Manager::setCurItem(int ind) { + item = &items[ind]; itemIndex = ind; +} + +void S1000D_Manager::replaceCurItem_pmCode(QString new_pmTitle, QString new_modelIdentCode, QString new_pmIssuer, QString new_pmNumber, QString new_pmVolume) { + ItemStruct *oldItem = item; + QString pmTitle, modelIdentCode, pmIssuer, pmNumber, pmVolume; + QString oldPMCodeStr, pmRefCodeStr; + pmTitle = getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); + modelIdentCode = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode"); + pmIssuer = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer"); + pmNumber = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmNumber"); + pmVolume = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmVolume"); + oldPMCodeStr = pmIdentString("identAndStatusSection.pmAddress.pmIdent"); + + setNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle", new_pmTitle); + setNodeText("content.pmEntry.pmEntryTitle", new_pmTitle); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode", new_modelIdentCode); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer", new_pmIssuer); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmNumber", new_pmNumber); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmVolume", new_pmVolume); + if(isNodeCreated("identAndStatusSection.pmAddress.pmAddressItems.shortPmTitle")) + deleteNode("identAndStatusSection.pmAddress.pmAddressItems.shortPmTitle"); + + if(item->parent != -1) { + int parent = item->parent; + setCurItem(parent); + int cntRef = getNodeChildsWithNameCount("content.pmEntry", "pmRef"); + for(int p=0;p= pmEntry.childNodes().count()) { + if(DBG) qDebug() << " Error: createPM - insertAfterChildNum >= pmEntry.childNodes().count()"; + return items.count()-1; + } + if(isNodeCreated("content.pmEntry.pmEntryTitle")) + pmEntry.insertAfter(pmRef, pmEntry.childNodes().at(insertAfterChildNum+1)); + else + pmEntry.insertAfter(pmRef, pmEntry.childNodes().at(insertAfterChildNum)); + + setCurItem(items.count()-1); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode", parent_modelIdentCode); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer", parent_pmIssuer); + } + + prepareSaveProject(); + return items.count()-1; +} + +int S1000D_Manager::createDM(int parentItemInd, int insertAfterChildNum, QString scheme) { + int parent = parentItemInd; + while(true) { + if(parent == -1) break; + if(items[parent].moduleType == mtPM) break; + parent = items[parent].parent; + } + ItemStruct newDM; + newDM.parent = parent; newDM.child.clear(); + newDM.moduleType = mtDM; newDM.schemeType = getSchemeTypeByStr(scheme); + newDM.isReady = false; + newDM.fileCode = ""; newDM.fileName = projectPath+"/"+"~NEWFILE"+QString::number(rand())+".xml"; + newDM.importedFromLyX = ""; newDM.html.clear(); + newDM.isQualifyed = true; //newDM.crewFlags = 0xFFFF; + + QFile xmlFile(":new/BlankXML/"+scheme.toLower()+".xml"); + if (!xmlFile.open(QFile::ReadOnly | QFile::Text)) { + if(DBG) qDebug() << " Cant open :new/BlankXML/"+scheme.toLower()+".xml"; + return -1; + } + QByteArray fileData = xmlFile.readAll(); + xmlFile.close(); + + newDM.doc.setContent(fileData); + items.append(newDM); + if(parent != -1) + items[parent].child.insert(insertAfterChildNum+1, items.count()-1); + setCurItem(items.count()-1); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.issueInfo", "issueNumber", ru_const.issueNumber); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.issueInfo", "inWork", ru_const.inWork); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.language", "languageIsoCode", ru_const.languageIsoCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.language", "countryIsoCode", ru_const.countryIsoCode); + setNodeAttr("identAndStatusSection.dmStatus.security", "securityClassification", ru_const.security_securityClassification); + setNodeAttr("identAndStatusSection.dmStatus.responsiblePartnerCompany", "enterpriseCode", ru_const.responsiblePartnerCompany_enterpriseCode); + setNodeText("identAndStatusSection.dmStatus.responsiblePartnerCompany.enterpriseName", ru_const.responsiblePartnerCompany_enterpriseName); + setNodeAttr("identAndStatusSection.dmStatus.originator", "enterpriseCode", ru_const.originator_enterpriseCode); + setNodeText("identAndStatusSection.dmStatus.originator.enterpriseName", ru_const.originator_enterpriseName); + + if(parent != -1) { + setCurItem(parent); + QString parent_modelIdentCode = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode"); + //QString parent_pmIssuer = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer"); + QDomNode pmEntry = findElement("content.pmEntry"); + QDomElement dmRef = createEmpty_dmRef(parent_modelIdentCode); + + if(insertAfterChildNum >= pmEntry.childNodes().count()) { + if(DBG) qDebug() << " Error: createDM - insertAfterChildNum >= pmEntry.childNodes().count()"; + return items.count()-1; + } + if(isNodeCreated("content.pmEntry.pmEntryTitle")) + pmEntry.insertAfter(dmRef, pmEntry.childNodes().at(insertAfterChildNum+1)); + else + pmEntry.insertAfter(dmRef, pmEntry.childNodes().at(insertAfterChildNum)); + + setCurItem(items.count()-1); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode", parent_modelIdentCode); + } + setNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName", "Задайте имя и кодирование модуля"); + + prepareSaveProject(); + return items.count()-1; +} + +QDomElement S1000D_Manager::createEmpty_pmRef(QString parent_modelIdentCode, QString parent_pmIssuer) { + QDomElement pmRef = item->doc.createElement("pmRef"); + QDomElement pmRefIdent = item->doc.createElement("pmRefIdent"); + pmRef.appendChild(pmRefIdent); + QDomElement pmCode = item->doc.createElement("pmCode"); + pmRefIdent.appendChild(pmCode); + pmCode.setAttribute("modelIdentCode", parent_modelIdentCode); + pmCode.setAttribute("pmIssuer", parent_pmIssuer); + pmCode.setAttribute("pmNumber", ""); + pmCode.setAttribute("pmVolume", ""); + QDomElement issueInfo = item->doc.createElement("issueInfo"); + pmRefIdent.appendChild(issueInfo); + issueInfo.setAttribute("inWork", ru_const.inWork); + issueInfo.setAttribute("issueNumber", ru_const.issueNumber); + QDomElement language = item->doc.createElement("language"); + pmRefIdent.appendChild(language); + language.setAttribute("languageIsoCode", ru_const.languageIsoCode); + language.setAttribute("countryIsoCode", ru_const.countryIsoCode); + + QDomElement pmRefAddressItems = item->doc.createElement("pmRefAddressItems"); + pmRef.appendChild(pmRefAddressItems); + QDomElement pmTitle = item->doc.createElement("pmTitle"); + pmRefAddressItems.appendChild(pmTitle); + pmTitle.appendChild(item->doc.createTextNode("")); + QDomElement issueDate = item->doc.createElement("issueDate"); + pmRefAddressItems.appendChild(issueDate); + issueDate.setAttribute("day", ""); + issueDate.setAttribute("month", ""); + issueDate.setAttribute("year", ""); + return pmRef; +} + +QDomElement S1000D_Manager::createEmpty_dmRef(QString parent_modelIdentCode) { + QDomElement dmRef = item->doc.createElement("dmRef"); + QDomElement dmRefIdent = item->doc.createElement("dmRefIdent"); + dmRef.appendChild(dmRefIdent); + QDomElement dmCode = item->doc.createElement("dmCode"); + dmRefIdent.appendChild(dmCode); + dmCode.setAttribute("modelIdentCode", parent_modelIdentCode); + dmCode.setAttribute("systemDiffCode", ""); + dmCode.setAttribute("systemCode", ""); + dmCode.setAttribute("subSystemCode", ""); + dmCode.setAttribute("subSubSystemCode", ""); + dmCode.setAttribute("assyCode", ""); + dmCode.setAttribute("disassyCode", ""); + dmCode.setAttribute("disassyCodeVariant", ""); + dmCode.setAttribute("infoCode", ""); + dmCode.setAttribute("infoCodeVariant", ""); + dmCode.setAttribute("itemLocationCode", ""); + dmCode.setAttribute("learnCode", ""); + dmCode.setAttribute("learnEventCode", ""); + QDomElement issueInfo = item->doc.createElement("issueInfo"); + dmRefIdent.appendChild(issueInfo); + issueInfo.setAttribute("inWork", ru_const.inWork); + issueInfo.setAttribute("issueNumber", ru_const.issueNumber); + QDomElement language = item->doc.createElement("language"); + dmRefIdent.appendChild(language); + language.setAttribute("languageIsoCode", ru_const.languageIsoCode); + language.setAttribute("countryIsoCode", ru_const.countryIsoCode); + + QDomElement dmRefAddressItems = item->doc.createElement("dmRefAddressItems"); + dmRef.appendChild(dmRefAddressItems); + QDomElement dmTitle = item->doc.createElement("dmTitle"); + dmRefAddressItems.appendChild(dmTitle); + QDomElement dmTechName = item->doc.createElement("techName"); + dmTitle.appendChild(dmTechName); + dmTechName.appendChild(item->doc.createTextNode("")); + QDomElement dmInfoName = item->doc.createElement("infoName"); + dmTitle.appendChild(dmInfoName); + dmInfoName.appendChild(item->doc.createTextNode("")); + QDomElement issueDate = item->doc.createElement("issueDate"); + dmRefAddressItems.appendChild(issueDate); + issueDate.setAttribute("day", ""); + issueDate.setAttribute("month", ""); + issueDate.setAttribute("year", ""); + return dmRef; +} + +void S1000D_Manager::deleteItem(int itemInd) { + prepareSaveProject(); + QDomNode oldItemNodeRef; + int itemParent = items[itemInd].parent; + QString fileName = items[itemInd].fileName; + + if(items[itemInd].child.count() > 0) return; + if(itemParent != -1) { + QString refCodeStr = ""; + setCurItem(itemParent); + int cntRef = getNodeChildsWithNameCount("content.pmEntry", "pmRef"); + for(int p=0;p itemInd) items[i].child[j]--; + } + + QFile itemFile(fileName); + if(QFileInfo::exists(fileName)) { + itemFile.setPermissions(QFileDevice::WriteUser | QFileDevice::ReadUser | QFileDevice::ExeUser); + itemFile.remove(); + } +} + +void S1000D_Manager::replaceCurItem_dmCode(QString new_techName, QString new_infoName, + QString new_modelIdentCode, QString new_systemDiffCode, + QString new_systemCode, QString new_subSystemCode, QString new_subSubSystemCode, QString new_assyCode, + QString new_disassyCode, QString new_disassyCodeVariant, + QString new_infoCode, QString new_infoCodeVariant, + QString new_itemLocationCode, QString new_learnCode, QString new_learnEventCode) { + if(item->moduleType != mtDM) return; + + ItemStruct *oldItem = item; + QString oldDMCodeStr, dmRefCodeStr; + + oldDMCodeStr = dmIdentString("identAndStatusSection.dmAddress.dmIdent"); + + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode", new_modelIdentCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemDiffCode", new_systemDiffCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemCode", new_systemCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSystemCode", new_subSystemCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSubSystemCode", new_subSubSystemCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "assyCode", new_assyCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCode", new_disassyCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCodeVariant", new_disassyCodeVariant); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCode", new_infoCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCodeVariant", new_infoCodeVariant); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "itemLocationCode", new_itemLocationCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnCode", new_learnCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnEventCode", new_learnEventCode); + setNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName", new_techName); + setNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.infoName", new_infoName); + if(item->schemeType == stLEARNING) + setNodeText("content.learning.learningAssessment.title", new_techName +" - "+ new_infoName); + + if(item->parent != -1) { + int parent = item->parent; + setCurItem(parent); + int cntRef = getNodeChildsWithNameCount("content.pmEntry", "dmRef"); + for(int p=0;pmoduleType == mtPM) return "ICN-ERROR-PM"; + QString modelIdentCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode"); + QString systemDiffCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemDiffCode"); + QString systemCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemCode"); + QString subSystemCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSystemCode"); + QString subSubSystemCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSubSystemCode"); + QString issueNumber = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.issueInfo", "issueNumber"); + QString z; z.fill('0',5-QString::number(ICN_UI).length()); + QString icn_ui = z + QString::number(ICN_UI); + ICN_UI++; + QString icn = "ICN-"+modelIdentCode+"-"+systemDiffCode+"-"+systemCode+subSystemCode+subSubSystemCode+"-A-"+ + ru_const.originator_enterpriseCode+"-"+icn_ui+"-"+ru_const.icn_variantCode+"-"+issueNumber+"-1"; + return icn; +} + +bool S1000D_Manager::copyDir(const QString &srcPath, const QString &dstPath) +{ + QDir dstdir = QDir(dstPath); + //if (dstdir.exists()) dstdir.removeRecursively(); // не удаляем существующую +// QDir parentDstDir(QFileInfo(dstPath).path()); + if (!dstdir.exists()) + { +// if (!parentDstDir.mkdir(QFileInfo(dstPath).fileName())) + if (!dstdir.mkpath(dstPath)) + return false; + } + + QDir srcDir(srcPath); + foreach(const QFileInfo &info, srcDir.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot)) { + QString srcItemPath = srcPath + "/" + info.fileName(); + QString dstItemPath = dstPath + "/" + info.fileName(); + if (info.isDir()) { + if (!copyDir(srcItemPath, dstItemPath)) + return false; + } else if (info.isFile()) { + if(!QFileInfo(dstItemPath).exists()) + if (!QFile::copy(srcItemPath, dstItemPath)) + return false; + } else { + qDebug() << "Unhandled item in copyDir: " + info.filePath(); + } + } + return true; +} + +void S1000D_Manager::ParsePackageContent(QDomNode node, int parentItem) { + for(int i=0;imoduleType == mtDM) + title = getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); + else + title = getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); + QString nodeName = node.childNodes().at(i).toElement().attribute("name"); + QString nodeOrigTitle = node.childNodes().at(i).toElement().attribute("origTitle"); + if(nodeOrigTitle == "") nodeOrigTitle = nodeName; + + if(nodeOrigTitle != item->origTitle) + { + //qDebug() << " " + nodeOrigTitle << " != " << item->origTitle; + continue; + } //else qDebug() << nodeOrigTitle << " == " << item->origTitle; + + if(nodeName != nodeOrigTitle && nodeName != "") { + if(item->moduleType == mtDM) + setNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName", nodeName); + else + setNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle", nodeName); + } else { + if(item->moduleType == mtDM) + setNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName", nodeOrigTitle); + else + setNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle", nodeOrigTitle); + } + + QString t = node.childNodes().at(i).toElement().attribute("packs"); + + QStringList packNames = node.childNodes().at(i).toElement().attribute("packs").split(","); + foreach(PackageStruct pck, packages) + if(pck.cfgName != "" && packNames.contains(pck.cfgName)) + if(!item->inPackages.contains(pck.cfgName)) + item->inPackages.append(pck.cfgName); + + QString infoCode, learnCode, disassyCode, systemCode, subSubSystemCode, subSystemCode, + learnEventCode, itemLocationCode, systemDiffCode, modelIdentCode, infoCodeVariant, assyCode, disassyCodeVariant, + pmIssuer, pmNumber, pmVolume; + if(item->moduleType == mtDM) { + modelIdentCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode"); + if(modelIdentCode == "") { + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCode", node.childNodes().at(i).toElement().attribute("infoCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnCode", node.childNodes().at(i).toElement().attribute("learnCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCode", node.childNodes().at(i).toElement().attribute("disassyCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemCode", node.childNodes().at(i).toElement().attribute("systemCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSubSystemCode", node.childNodes().at(i).toElement().attribute("subSubSystemCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSystemCode", node.childNodes().at(i).toElement().attribute("subSystemCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnEventCode", node.childNodes().at(i).toElement().attribute("learnEventCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "itemLocationCode", node.childNodes().at(i).toElement().attribute("itemLocationCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemDiffCode", node.childNodes().at(i).toElement().attribute("systemDiffCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode", node.childNodes().at(i).toElement().attribute("modelIdentCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCodeVariant", node.childNodes().at(i).toElement().attribute("infoCodeVariant")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "assyCode", node.childNodes().at(i).toElement().attribute("assyCode")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCodeVariant", node.childNodes().at(i).toElement().attribute("disassyCodeVariant")); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.language", "languageIsoCode", ru_const.languageIsoCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.language", "countryIsoCode", ru_const.countryIsoCode); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.issueInfo", "inWork", ru_const.inWork); + setNodeAttr("identAndStatusSection.dmAddress.dmIdent.issueInfo", "issueNumber", ru_const.issueNumber); + item->isQualifyed = (node.childNodes().at(i).toElement().attribute("isQualifyed") == "1"); + + } + } + else { + modelIdentCode = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode"); + if(modelIdentCode == "") { + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer", node.childNodes().at(i).toElement().attribute("pmIssuer")); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmNumber", node.childNodes().at(i).toElement().attribute("pmNumber")); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmVolume", node.childNodes().at(i).toElement().attribute("pmVolume")); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode", node.childNodes().at(i).toElement().attribute("modelIdentCode")); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.language", "languageIsoCode", ru_const.languageIsoCode); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.language", "countryIsoCode", ru_const.countryIsoCode); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.issueInfo", "inWork", ru_const.inWork); + setNodeAttr("identAndStatusSection.pmAddress.pmIdent.issueInfo", "issueNumber", ru_const.issueNumber); + item->isQualifyed = (node.childNodes().at(i).toElement().attribute("isQualifyed") == "1"); + } + } + + ParsePackageContent(node.childNodes().at(i), j); + break; + } +} + +void S1000D_Manager::LoadPackagesXML() +{ + QDomDocument packDOM; + QString xmlFileName = rootLyXfile; xmlFileName.replace(".lyx", ".xml"); + QFile packFile(xmlFileName); //QFileInfo(rootLyXfile).path()+"/packages.xml" + if (!packFile.open(QFile::ReadOnly | QFile::Text)) { + //if(DBG) qDebug() << "LoadPackagesXML: Не удалось открыть файл "+xmlFileName; + return; + } + packDOM.setContent(packFile.readAll()); + packFile.close(); + + //QString lyxFileName = packDOM.namedItem("packages").namedItem("lyx").toElement().attribute("filename"); + //if(lyxFileName != QFileInfo(rootLyXfile).fileName()) { + // qDebug() << "LoadPackagesXML: Ошибка импорта - имена исходных файлов LyX отличаются."; + // return; + //} + QDomNode packList = packDOM.namedItem("packages").namedItem("packlist"); + QDomNode contents = packDOM.namedItem("packages").namedItem("contents"); + timeConvert = packList.toElement().attribute("tConvert").toInt(); + timeSCORM = packList.toElement().attribute("tSCORM").toInt(); + timeSingleSCORM = packList.toElement().attribute("tSingleSCORM").toInt(); + timeS1000D = packList.toElement().attribute("tS1000D").toInt(); + timeEDL = packList.toElement().attribute("tEDL").toInt(); + packages.clear(); + for(int i=0;imoduleType == mtDM) + { + node = parent.ownerDocument().createElement("DM"); + title = getNodeText("identAndStatusSection.dmAddress.dmAddressItems.dmTitle.techName"); + node.toElement().setAttribute("name", title); + + infoCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCode"); node.toElement().setAttribute("infoCode", infoCode); + learnCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnCode"); node.toElement().setAttribute("learnCode", learnCode); + disassyCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCode"); node.toElement().setAttribute("disassyCode", disassyCode); + systemCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemCode"); node.toElement().setAttribute("systemCode", systemCode); + subSubSystemCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSubSystemCode"); node.toElement().setAttribute("subSubSystemCode", subSubSystemCode); + subSystemCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "subSystemCode"); node.toElement().setAttribute("subSystemCode", subSystemCode); + learnEventCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "learnEventCode"); node.toElement().setAttribute("learnEventCode", learnEventCode); + itemLocationCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "itemLocationCode"); node.toElement().setAttribute("itemLocationCode", itemLocationCode); + systemDiffCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "systemDiffCode"); node.toElement().setAttribute("systemDiffCode", systemDiffCode); + modelIdentCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "modelIdentCode"); node.toElement().setAttribute("modelIdentCode", modelIdentCode); + infoCodeVariant = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "infoCodeVariant"); node.toElement().setAttribute("infoCodeVariant", infoCodeVariant); + assyCode = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "assyCode"); node.toElement().setAttribute("assyCode", assyCode); + disassyCodeVariant = getNodeAttr("identAndStatusSection.dmAddress.dmIdent.dmCode", "disassyCodeVariant"); node.toElement().setAttribute("disassyCodeVariant", disassyCodeVariant); + node.toElement().setAttribute("isQualifyed", (int)item->isQualifyed); + node.toElement().setAttribute("origTitle", item->origTitle); + //infoCode="043" learnCode="T40" disassyCode="00" systemCode="05" subSubSystemCode="2" subSystemCode="6" + //learnEventCode="C" itemLocationCode="A" systemDiffCode="A" modelIdentCode="MI38" infoCodeVariant="A" assyCode="00" disassyCodeVariant="A" + } + else + { + node = parent.ownerDocument().createElement("PM"); + title = getNodeText("identAndStatusSection.pmAddress.pmAddressItems.pmTitle"); + node.toElement().setAttribute("name", title); + + pmIssuer = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmIssuer"); node.toElement().setAttribute("pmIssuer", pmIssuer); + pmNumber = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmNumber"); node.toElement().setAttribute("pmNumber", pmNumber); + pmVolume = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "pmVolume"); node.toElement().setAttribute("pmVolume", pmVolume); + modelIdentCode = getNodeAttr("identAndStatusSection.pmAddress.pmIdent.pmCode", "modelIdentCode"); node.toElement().setAttribute("modelIdentCode", modelIdentCode); + node.toElement().setAttribute("isQualifyed", (int)item->isQualifyed); + node.toElement().setAttribute("origTitle", item->origTitle); + //pmIssuer="RHC01" pmNumber="FTC01" pmVolume="00" modelIdentCode="MI38" + } + parent.appendChild(node); + QString liststr = item->inPackages.join(","); + node.toElement().setAttribute("packs", liststr); + + for(int i=0;i 0) fontsize = 16; + int padtop = 15; if(lvl > 0) padtop = 5; + if(lvl == 0) title = title.toUpper(); + + if(typeOfExport == "SingleSCORM") { + QString liStyle = ""; + if(lvl == 0) liStyle=" style=\"margin-top: 10px;margin-bottom: 0;\""; + addHTML(8+lvl*2, "
  • "+title+""); + addHTML(8+lvl*2+2, "
      "); + for(int i=0;i"); + addHTML(8+lvl*2, ""); + } else { + addHTML(8+lvl*2, "
  • "); + for(int i=0;i"); + addHTML(8+lvl*2+2, "
  • "); + addHTML(8+lvl*2+4, title); + addHTML(8+lvl*2+2, "
  • "); + addHTML(8+lvl*2, ""); + indexTocId++; + } else { + addHTML(8+lvl*2, "
    "); + } + } + + // + // + // +} + +void S1000D_Manager::addHTML(int lvl, QString s) { + QString spc = ""; for(int j=0;jSetTitle("Копирование служебных файлов..."); + QApplication::processEvents(); + } + + copyDir(QCoreApplication::applicationDirPath()+"/Scorm", SCORMpath); + + if(!isConsole) + splash->SetTitle("Формирование SCORM-пакета..."); + QApplication::processEvents(); + + +// enum OperatingSytem {OS_WINDOWS, OS_UNIX, OS_LINUX, OS_MAC} os; +// #if (defined (Q_OS_WIN) || defined (Q_OS_WIN32) || defined (Q_OS_WIN64)) +// os = OS_WINDOWS; +// #elif (defined (Q_OS_UNIX)) +// os = OS_UNIX; +// #elif (defined (Q_OS_LINUX)) +// os = OS_LINUX; +// #elif (defined (Q_OS_MAC)) +// os = OS_MAC; +// #endif +// QStringList params; +// if(os == OS_WINDOWS) { +// QString winpath1 = SCORMpath; winpath1.replace("/","\\"); +// params << "/C"<<"xcopy"<<"/E" << "/C" << "/Y"<< QCoreApplication::applicationDirPath().replace("/","\\")+"\\Scorm\\*.*" << winpath1+"\\" << ">nul"; +// QProcess::startDetached("cmd.exe", params); +// } else { +// params << "-R"<< QCoreApplication::applicationDirPath()+"/Scorm/*" << SCORMpath+"/" << "> /dev/null"; +// QProcess::startDetached("cp", params); +// } + + resetICN(); + for(int i=0;ischemeType == stLEARNING) { + item->SCORM_fileName = "DMC-" + item->fileCode + "_"+getNodeAttr(_issueInfo, "issueNumber")+"-"+getNodeAttr(_issueInfo, "inWork")+"_"+getNodeAttr(_language, "languageIsoCode")+"-"+getNodeAttr(_language, "countryIsoCode")+".xml"; + if(QFile::exists(SCORMpath+"/" + item->SCORM_fileName)) QFile::remove(SCORMpath+"/" + item->SCORM_fileName); + if(!QFile::copy(projectPath+"/"+item->fileName, SCORMpath+"/" + item->SCORM_fileName)) + if(DBG) qDebug() << "scorm: Error copy" << projectPath+"/"+item->fileName << "to" << SCORMpath+"/" + item->SCORM_fileName; + continue; + } + item->SCORM_fileName = "DMC-" + item->fileCode + "_"+getNodeAttr(_issueInfo, "issueNumber")+"-"+getNodeAttr(_issueInfo, "inWork")+"_"+getNodeAttr(_language, "languageIsoCode")+"-"+getNodeAttr(_language, "countryIsoCode")+".html"; + } + + for(int i=0;iSetTitle("Формирование SCORM-пакета..."); splash->Step(); + QApplication::processEvents(); + } + + setCurItem(i); + if (!QFile::exists(projectPath + "/" + item->fileName)) { + if(!isConsole) { + splash->hide(); + splash->ErrMessage("Ошибка","Файл "+projectPath + "/" + item->fileName+" не найден."); + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); + } + return false; + } + QString htmlFileName = projectPath + "/" + item->fileName; + htmlFileName.replace(".xml", ".html"); + if (item->moduleType == mtDM && !QFile::exists(htmlFileName) && item->schemeType != stLEARNING) { + if(!isConsole) { + splash->hide(); + splash->ErrMessage("Ошибка","Файл "+htmlFileName+" не найден."); + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); + } + return false; + } + + QFile htmlFile(htmlFileName); + if (!htmlFile.open(QFile::ReadOnly | QFile::Text)){ + qDebug() << "scorm: file.open error "+htmlFileName; + if(!isConsole) { + splash->hide(); + splash->ErrMessage("Ошибка","Ошибка открытия файла: "+htmlFileName); + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); + } + return false; + } + QStringList htmlText = QString(htmlFile.readAll()).split("\n"); + htmlFile.close(); + + for(int j=0;jStep(); + + QString s = "class=\"S1000Dmultimediaobj\""; + int k = htmlText[j].indexOf(s); + if(k > -1) { + s = "val=\""; + int m = htmlText[j].indexOf(s); + QString fn = htmlText[j].mid(m+s.length(), htmlText[j].indexOf("\"",m+s.length())-m-s.length()); + QString icn = genICN(); + QString icnfn = icn+"."+fn.split(".").last(); + htmlText[j].replace(fn, icnfn); + //if(QFile::exists(SCORMpath+"/"+icnfn)) QFile::remove(SCORMpath+"/"+icnfn); + if(!QFile::exists(SCORMpath+"/"+icnfn)) + if(!QFile::copy(projectPath+"/"+fn, SCORMpath+"/"+icnfn)) + if(DBG) qDebug() << "scorm: Error copy" << projectPath+"/"+fn << "to" << SCORMpath+"/"+icnfn; + } + + s = " -1) { + s = "src=\""; + int m = htmlText[j].indexOf(s); + QString fn = htmlText[j].mid(m+s.length(), htmlText[j].indexOf("\"",m+s.length())-m-s.length()); + if(!fn.startsWith("app/")) { + QString icn = genICN(); + QString icnfn = icn+"."+fn.split(".").last(); + htmlText[j].replace(fn, icnfn); + //if(QFile::exists(SCORMpath+"/"+icnfn)) QFile::remove(SCORMpath+"/"+icnfn); + if(!QFile::exists(SCORMpath+"/"+icnfn)) + if(!QFile::copy(projectPath+"/"+fn, SCORMpath+"/"+icnfn)) + if(DBG) qDebug() << "scorm: Error copy" << projectPath+"/"+fn << "to" << SCORMpath+"/"+icnfn; + } + } + + s = "onmousemove=\"showTooltipImg(evt, '"; + k = htmlText[j].indexOf(s); + if(k > -1) { + QString fn = htmlText[j].mid(k+s.length(), htmlText[j].indexOf("'",k+s.length())-k-s.length()); + QString icn = genICN(); + QString icnfn = icn+"."+fn.split(".").last(); + htmlText[j].replace(fn, icnfn); + //if(QFile::exists(SCORMpath+"/"+icnfn)) QFile::remove(SCORMpath+"/"+icnfn); + if(!QFile::exists(SCORMpath+"/"+icnfn)) + if(!QFile::copy(projectPath+"/"+fn, SCORMpath+"/"+icnfn)) + if(DBG) qDebug() << "scorm: Error copy" << projectPath+"/"+fn << "to" << SCORMpath+"/"+icnfn; + } + + s = " -1) { + QString fn = htmlText[j].mid(k+s.length(), htmlText[j].indexOf("\"",k+s.length())-k-s.length()); + if(!fn.startsWith("#")) { + if(fn.contains(".html#")) { // межмодульная ссылка + fn = fn.left(fn.indexOf("#")); + QString name; + for(int n=0;nSCORM - hide(); + splash->ErrMessage("Ошибка", "href: Ошибка копирования:/n'"+projectPath+"/"+fn.split("/")[0]+"' в '"+SCORMpath+"/"+fn.split("/")[0]+"'"); + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); + } + return false; + } + } + } //# + } // -1) { + //s = "src=\""; + //int m = htmlText[j].indexOf(s); + //QString fn = htmlText[j].mid(m+s.length(), htmlText[j].indexOf("\"",m+s.length())-m-s.length()); + + //scRegister('01060301-003.xml', 'title', 'd1', 'models/sc1.html'); + QList htmlSplit = htmlText[j].split("'"); + QString fn = htmlSplit[ htmlSplit.count()-2]; + + QDir dir(projectPath+"/"+fn.split("/")[0]); + QDir dir2(SCORMpath+"/"+fn.split("/")[0]); + if(!dir.exists()) { + if(!isConsole) { + splash->hide(); + splash->ErrMessage("Ошибка","ИМВС: Папка "+projectPath+"/"+fn.split("/")[0]+" не найдена."); + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); + } + return false; + } + //qDebug() << "copy 3D: '"+projectPath+"/"+fn.split("/")[0]+"' to '"+S1000Dpath+"/"+fn.split("/")[0]+"'"; + if(!dir2.exists()) + if(!copyDir(projectPath+"/"+fn.split("/")[0], SCORMpath+"/"+fn.split("/")[0])) + { + if(!isConsole) { + splash->hide(); + splash->ErrMessage("Ошибка", "ИМВС: Ошибка копирования:/n'"+projectPath+"/"+fn.split("/")[0]+"' в '"+SCORMpath+"/"+fn.split("/")[0]+"'"); + QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); + } + return false; + } + } //
    ▸ "+title+"
    ● "+title+"
    ▸ 1 Общие сведения о вертолете
    ▸ 2 Фюзеляж вертолета
    ● Компоненты фюзеляжа