Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Tobias Hunger
qt-creator
Commits
0894033f
Commit
0894033f
authored
Jun 15, 2010
by
Leandro Melo
Browse files
Coloring white spaces even if there's no highlight syntax definition set.
Relative to QTCREATORBUG-1225.
parent
54ea41af
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/plugins/texteditor/generichighlighter/highlighter.cpp
View file @
0894033f
...
...
@@ -51,15 +51,12 @@ namespace {
const
Highlighter
::
KateFormatMap
Highlighter
::
m_kateFormats
;
Highlighter
::
Highlighter
(
const
QSharedPointer
<
Context
>
&
defaultContext
,
QTextDocument
*
parent
)
:
Highlighter
::
Highlighter
(
QTextDocument
*
parent
)
:
QSyntaxHighlighter
(
parent
),
m_persistentStatesCounter
(
PersistentsStart
),
m_dynamicContextsCounter
(
0
),
m_isBroken
(
false
),
m_defaultContext
(
defaultContext
)
{
m_persistentStates
.
insert
(
m_defaultContext
->
name
(),
Default
);
}
m_isBroken
(
false
)
{}
Highlighter
::~
Highlighter
()
{}
...
...
@@ -88,37 +85,47 @@ Highlighter::KateFormatMap::KateFormatMap()
m_ids
.
insert
(
QLatin1String
(
"dsError"
),
Highlighter
::
Error
);
}
void
Highlighter
::
highlightBlock
(
const
QString
&
tex
t
)
void
Highlighter
::
configureFormat
(
TextFormatId
id
,
const
QTextCharFormat
&
forma
t
)
{
if
(
m_isBroken
)
return
;
m_creatorFormats
[
id
]
=
format
;
}
try
{
setupDataForBlock
(
text
);
void
Highlighter
::
setDefaultContext
(
const
QSharedPointer
<
Context
>
&
defaultContext
)
{
m_defaultContext
=
defaultContext
;
m_persistentStates
.
insert
(
m_defaultContext
->
name
(),
Default
);
}
handleContextChange
(
m_currentContext
->
lineBeginContext
(),
m_currentContext
->
definition
());
void
Highlighter
::
highlightBlock
(
const
QString
&
text
)
{
if
(
!
m_defaultContext
.
isNull
()
&&
!
m_isBroken
)
{
try
{
setupDataForBlock
(
text
);
ProgressData
progress
;
const
int
length
=
text
.
length
();
while
(
progress
.
offset
()
<
length
)
{
handleContextChange
(
m_currentContext
->
lineBeginContext
(),
m_currentContext
->
definition
());
if
(
progress
.
offset
()
>
0
&&
progress
.
onlySpacesSoFar
()
&&
!
text
.
at
(
progress
.
offset
()).
isSpace
())
{
progress
.
setOnlySpacesSoFar
(
false
);
ProgressData
progress
;
const
int
length
=
text
.
length
();
while
(
progress
.
offset
()
<
length
)
{
if
(
progress
.
offset
()
>
0
&&
progress
.
onlySpacesSoFar
()
&&
!
text
.
at
(
progress
.
offset
()).
isSpace
())
{
progress
.
setOnlySpacesSoFar
(
false
);
}
iterateThroughRules
(
text
,
length
,
&
progress
,
false
,
m_currentContext
->
rules
());
}
iterateThroughRules
(
text
,
length
,
&
progress
,
false
,
m_currentContext
->
rules
());
handleContextChange
(
m_currentContext
->
lineEndContext
(),
m_currentContext
->
definition
(),
false
);
m_contexts
.
clear
();
}
catch
(
const
HighlighterException
&
)
{
m_isBroken
=
true
;
}
handleContextChange
(
m_currentContext
->
lineEndContext
(),
m_currentContext
->
definition
(),
false
);
}
catch
(
const
HighlighterException
&
)
{
m_isBroken
=
true
;
return
;
}
m_contexts
.
clear
();
applyVisualWhitespaceFormat
(
text
);
}
...
...
@@ -462,8 +469,3 @@ void Highlighter::setCurrentContext()
}
m_currentContext
=
m_contexts
.
back
();
}
void
Highlighter
::
configureFormat
(
TextFormatId
id
,
const
QTextCharFormat
&
format
)
{
m_creatorFormats
[
id
]
=
format
;
}
src/plugins/texteditor/generichighlighter/highlighter.h
View file @
0894033f
...
...
@@ -51,7 +51,7 @@ class ProgressData;
class
Highlighter
:
public
QSyntaxHighlighter
{
public:
Highlighter
(
const
QSharedPointer
<
Context
>
&
defaultContext
,
QTextDocument
*
parent
=
0
);
Highlighter
(
QTextDocument
*
parent
=
0
);
virtual
~
Highlighter
();
enum
TextFormatId
{
...
...
@@ -73,6 +73,8 @@ public:
};
void
configureFormat
(
TextFormatId
id
,
const
QTextCharFormat
&
format
);
void
setDefaultContext
(
const
QSharedPointer
<
Context
>
&
defaultContext
);
protected:
virtual
void
highlightBlock
(
const
QString
&
text
);
...
...
src/plugins/texteditor/plaintexteditor.cpp
View file @
0894033f
...
...
@@ -160,32 +160,31 @@ void PlainTextEditor::fileChanged()
void
PlainTextEditor
::
configure
(
const
Core
::
MimeType
&
mimeType
)
{
Highlighter
*
highlighter
=
new
Highlighter
();
baseTextDocument
()
->
setSyntaxHighlighter
(
highlighter
);
m_isMissingSyntaxDefinition
=
true
;
if
(
mimeType
.
isNull
())
return
;
QString
definitionId
;
if
(
!
mimeType
.
isNull
())
{
const
QString
&
type
=
mimeType
.
type
();
setMimeType
(
type
);
const
QString
&
type
=
mimeType
.
type
();
setMimeType
(
type
);
QString
definitionId
=
Manager
::
instance
()
->
definitionIdByMimeType
(
type
);
if
(
definitionId
.
isEmpty
())
definitionId
=
findDefinitionId
(
mimeType
,
true
);
definitionId
=
Manager
::
instance
()
->
definitionIdByMimeType
(
type
);
if
(
definitionId
.
isEmpty
())
definitionId
=
findDefinitionId
(
mimeType
,
true
);
}
if
(
!
definitionId
.
isEmpty
())
{
const
QSharedPointer
<
HighlightDefinition
>
&
definition
=
Manager
::
instance
()
->
definition
(
definitionId
);
if
(
!
definition
.
isNull
())
{
Highlighter
*
highlighter
=
new
Highlighter
(
definition
->
initialContext
());
baseTextDocument
()
->
setSyntaxHighlighter
(
highlighter
);
highlighter
->
setDefaultContext
(
definition
->
initialContext
());
m_commentDefinition
.
setAfterWhiteSpaces
(
definition
->
isCommentAfterWhiteSpaces
());
m_commentDefinition
.
setSingleLine
(
definition
->
singleLineComment
());
m_commentDefinition
.
setMultiLineStart
(
definition
->
multiLineCommentStart
());
m_commentDefinition
.
setMultiLineEnd
(
definition
->
multiLineCommentEnd
());
setFontSettings
(
TextEditorSettings
::
instance
()
->
fontSettings
());
m_isMissingSyntaxDefinition
=
false
;
}
}
else
if
(
file
())
{
...
...
@@ -194,6 +193,8 @@ void PlainTextEditor::configure(const Core::MimeType &mimeType)
m_isMissingSyntaxDefinition
=
false
;
}
setFontSettings
(
TextEditorSettings
::
instance
()
->
fontSettings
());
// @todo: Indentation specification through the definition files is not really being used
// because Kate recommends to configure indentation through another feature. Maybe we should
// provide something similar in Creator? For now, only normal indentation is supported.
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment