Skip to content

Commit

Permalink
- Fixed some issues with StringHandler::unparse
Browse files Browse the repository at this point in the history
- Added StringHandler::unparseStrings (handles arrays of strings)
- Added support for multiple html-documentations, including mixed <html> and text sections


git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@8672 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
sjoelund committed Apr 16, 2011
1 parent d07677e commit 468a3d0
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 44 deletions.
7 changes: 0 additions & 7 deletions OMEdit/OMEditGUI/DocumentationWidget.cpp
Expand Up @@ -80,13 +80,6 @@ void DocumentationWidget::show(QString className)
}

QString documentation = mpParentMainWindow->mpOMCProxy->getDocumentationAnnotation(className);
documentation = StringHandler::removeFirstLastCurlBrackets(documentation);
documentation = StringHandler::removeFirstLastQuotes(documentation);
if (!documentation.startsWith("<html>", Qt::CaseInsensitive)) {
documentation = "<pre>" + documentation.replace("<","&lt;").replace(">","&gt;") + "</pre>";
}
documentation = documentation.replace("\\\"", "\"");
documentation = documentation.replace("Modelica://", "Modelica:/");
mpDocumentationViewer->setHtml(documentation, mpDocumentationViewer->getBaseUrl());
setVisible(true);
}
Expand Down
37 changes: 31 additions & 6 deletions OMEdit/OMEditGUI/OMCProxy.cpp
Expand Up @@ -909,13 +909,38 @@ QString OMCProxy::getDocumentationAnnotation(QString className)
if (expressionResult.isEmpty())
{
sendCommand(expression);
addExpressionInCommandMap(expression, getResult());
return getResult();
}
else
{
return expressionResult;
expressionResult = getResult();
QStringList lst = StringHandler::unparseStrings(expressionResult);
QString doc;
foreach (QString expressionResult, lst) {
expressionResult = expressionResult.replace("Modelica://", "Modelica:/");
int i,j;
/*
* Documentation may have the form
* text <HTML>...</html> text <html>...</HTML> [...]
* Nothing is standardized, but we will treat non-html tags as <pre>-formatted text
*/
while (1) {
expressionResult = expressionResult.trimmed();
i = expressionResult.indexOf("<html>", 0, Qt::CaseInsensitive);
if (i == -1) break;
if (i != 0) {
doc += "<pre>" + expressionResult.left(i).replace("<","&lt;").replace(">","&gt;") + "</pre>";
expressionResult = expressionResult.remove(i);
}
j = expressionResult.indexOf("</html>", 0, Qt::CaseInsensitive);
if (j == -1) break;
doc += expressionResult.leftRef(j+7);
expressionResult = expressionResult.mid(j+7,-1);
}
if (expressionResult.length()) {
doc += "<pre>" + expressionResult.replace("<","&lt;").replace(">","&gt;") + "</pre>";
}
}
addExpressionInCommandMap(expression, doc);
return doc;
}
return expressionResult;
}

QString OMCProxy::changeDirectory(QString directory)
Expand Down
82 changes: 51 additions & 31 deletions OMEdit/OMEditGUI/StringHandler.cpp
Expand Up @@ -347,45 +347,65 @@ QString StringHandler::getModifierValue(QString value)
return "";
}

#define CONSUME_CHAR(value,res,i) \
if (value.at(i) == '\\') { \
i++; \
switch (value[i].toAscii()) { \
case '\'': res.append('\''); break; \
case '"': res.append('\"'); break; \
case '?': res.append('\?'); break; \
case '\\': res.append('\\'); break; \
case 'a': res.append('\a'); break; \
case 'b': res.append('\b'); break; \
case 'f': res.append('\f'); break; \
case 'n': res.append('\n'); break; \
case 'r': res.append('\r'); break; \
case 't': res.append('\t'); break; \
case 'v': res.append('\v'); break; \
} \
} else { \
res.append(value[i]); \
}


QString StringHandler::unparse(QString value)
{
QString res;
value = value.trimmed();
if (value.length() > 1 && value.at(0) == '\"' && value.at(value.length() - 1) == '\"') {
value = value.mid(1, (value.length() - 2));
int j=0;
for (int i=0; i < value.length(); i++) {
if (value.at(i) == '\\') {
i++;
switch (value[i].toAscii()) {
case '\'':
value[j++] = '\''; break;
case '"':
value[j++] = '\"'; break;
case '?':
value[j++] = '\?'; break;
case '\\':
value[j++] = '\\'; break;
case 'a':
value[j++] = '\a'; break;
case 'b':
value[j++] = '\b'; break;
case 'f':
value[j++] = '\f'; break;
case 'n':
value[j++] = '\n'; break;
case 'r':
value[j++] = '\r'; break;
case 't':
value[j++] = '\t'; break;
case 'v':
value[j++] = '\v'; break;
}
} else {
value[j++] = value[i];
}
CONSUME_CHAR(value,res,i);
}
return value;
return res;
} else {
return "";
}
}


QStringList StringHandler::unparseStrings(QString value)
{
QStringList lst;
value = value.trimmed();
if (value[0] != '{') return lst; // ERROR?
int i=1;
while (value[i] == '"') {
QString res;
i++;
while (value.at(i) != '"') {
CONSUME_CHAR(value,res,i);
i++;
}
i++;
lst.append(res);
if (value[i] == '}') return lst;
if (value[i] == ',') {
i++;
continue;
}
fprintf(stderr, "error?\n");
return lst; // ERROR?
}
return lst; // ERROR?
}
2 changes: 2 additions & 0 deletions OMEdit/OMEditGUI/StringHandler.h
Expand Up @@ -63,6 +63,8 @@ class StringHandler
static QList<QString> getSimulationResultVars(QString value);
// Returns "" if the string is not a standard Modelica string. Else it unparses it into normal form.
static QString unparse(QString value);
// Returns empty list if the string is not a standard Modelica string-array. Else it unparses it into normal form.
static QStringList unparseStrings(QString value);
};

#endif // STRINGHANDLER_H

0 comments on commit 468a3d0

Please sign in to comment.