return &(*_identifiers.insert(QString::fromLatin1(s, n)));
}
+QSet<QString> Engine::identifiers() const
+{
+ return _identifiers;
+}
+
+const QString *Engine::number(const QString &s)
+{
+ return &(*_numbers.insert(s));
+}
+
+const QString *Engine::number(const char *s, int n)
+{
+ return &(*_numbers.insert(QString::fromLatin1(s, n)));
+}
+
+QSet<QString> Engine::numbers() const
+{
+ return _numbers;
+}
+
MemoryPool *Engine::pool()
{
return &_pool;
addDiagnosticMessage(m);
}
-QSet<QString> Engine::identifiers() const
-{
- return _identifiers;
-}
-
bool DiagnosticMessage::isError() const
{
return _kind == Error;
const QString *identifier(const char *s, int n);
QSet<QString> identifiers() const;
+ const QString *number(const QString &s);
+ const QString *number(const char *s, int n);
+ QSet<QString> numbers() const;
+
// types
const UndefinedType *undefinedType();
const VoidType *voidType();
private:
QSet<QString> _identifiers;
+ QSet<QString> _numbers;
TypeTable<VectorType> _vectorTypes;
TypeTable<MatrixType> _matrixTypes;
TypeTable<SamplerType> _samplerTypes;
// float constant
case '.':
if (std::isdigit(_yychar)) {
+ const char *word = _it - 2;
while (std::isalnum(_yychar)) {
yyinp();
}
+ if (_engine)
+ _yyval.string = _engine->number(word, _it - word - 1);
return Parser::T_NUMBER;
}
return Parser::T_DOT;
yyinp();
}
if (_engine)
- _yyval.string = _engine->identifier(word, _it - word - 1);
+ _yyval.string = _engine->number(word, _it - word - 1);
return Parser::T_NUMBER;
}
**************************************************************************/
#include "glslcodecompletion.h"
#include "glsleditor.h"
+#include "glsleditorplugin.h"
+#include <glsl/glslengine.h>
#include <texteditor/completionsettings.h>
#include <QtGui/QIcon>
#include <QtGui/QPainter>
#include <QtCore/QDebug>
using namespace GLSLEditor;
+using namespace GLSLEditor::Internal;
static bool isIdentifierChar(QChar ch)
{
int pos = editor->position() - 1;
QChar ch = editor->characterAt(pos);
- while (ch.isLetterOrNumber())
+ while (ch.isLetterOrNumber() || ch == QLatin1Char('_'))
ch = editor->characterAt(--pos);
const QIcon symbolIcon = iconForColor(Qt::darkCyan);
m_completions += m_keywordCompletions;
if (GLSLTextEditor *ed = qobject_cast<GLSLTextEditor *>(m_editor->widget())) {
- foreach (const QString &id, ed->identifiers()) {
+ QSet<QString> identifiers = ed->identifiers();
+
+ identifiers += GLSLEditorPlugin::instance()->shaderInit()->engine->identifiers();
+
+ if (ed->isVertexShader())
+ identifiers += GLSLEditorPlugin::instance()->vertexShaderInit()->engine->identifiers();
+
+ if (ed->isFragmentShader())
+ identifiers += GLSLEditorPlugin::instance()->fragmentShaderInit()->engine->identifiers();
+
+ foreach (const QString &id, identifiers) {
TextEditor::CompletionItem item(this);
item.text = id;
item.icon = symbolIcon;
#include <texteditor/icompletioncollector.h>
namespace GLSLEditor {
+namespace Internal {
class CodeCompletion: public TextEditor::ICompletionCollector
{
bool m_restartCompletion;
};
+} // namespace Internal
} // namespace GLSLEditor
#endif // GLSLCODECOMPLETION_H