Skip to content
GitLab
Menu
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
ea9f96a3
Commit
ea9f96a3
authored
Jan 14, 2010
by
Roberto Raggi
Browse files
Improved QML/JS indenter when using C-like multiline comments.
parent
35e35268
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/shared/qscripthighlighter/qscriptindenter.cpp
View file @
ea9f96a3
...
...
@@ -208,12 +208,10 @@ QString QScriptIndenter::trimmedCodeLine(const QString &t)
{
QScriptIncrementalScanner
scanner
;
int
state
=
yyLinizerState
.
iter
.
userState
();
if
(
state
==
-
1
)
state
=
0
;
state
=
state
&
0xff
;
QTextBlock
currentLine
=
yyLinizerState
.
iter
;
int
startState
=
qMax
(
0
,
currentLine
.
previous
().
userState
())
&
0xff
;
yyLinizerState
.
tokens
=
scanner
(
t
,
state
);
yyLinizerState
.
tokens
=
scanner
(
t
,
sta
rtSta
te
);
QString
trimmed
;
int
previousTokenEnd
=
0
;
foreach
(
const
QScriptIncrementalScanner
::
Token
&
token
,
yyLinizerState
.
tokens
)
{
...
...
@@ -224,8 +222,25 @@ QString QScriptIndenter::trimmedCodeLine(const QString &t)
trimmed
.
append
(
QLatin1Char
(
'X'
));
}
else
if
(
token
.
is
(
QScriptIncrementalScanner
::
Token
::
Comment
))
{
for
(
int
i
=
0
;
i
<
token
.
length
;
++
i
)
trimmed
.
append
(
QLatin1Char
(
' '
));
int
i
=
0
;
int
e
=
token
.
length
;
if
(
token
.
offset
>
0
||
startState
==
0
)
{
trimmed
.
append
(
QLatin1String
(
"/*"
));
i
+=
2
;
}
bool
needEndOfComment
=
false
;
if
(
e
>
2
&&
token
.
end
()
==
t
.
length
()
&&
scanner
.
endState
()
!=
0
)
{
needEndOfComment
=
true
;
e
-=
2
;
}
for
(;
i
<
e
;
++
i
)
trimmed
.
append
(
QLatin1Char
(
' '
));
if
(
needEndOfComment
)
trimmed
.
append
(
QLatin1String
(
"*/"
));
}
else
{
trimmed
.
append
(
t
.
midRef
(
token
.
offset
,
token
.
length
));
...
...
@@ -450,35 +465,15 @@ void QScriptIndenter::startLinizer()
potentially the whole line) is part of a C-style comment;
otherwise returns false.
*/
bool
QScriptIndenter
::
bottomLineStartsIn
C
Comment
()
bool
QScriptIndenter
::
bottomLineStartsIn
Multiline
Comment
()
{
const
QLatin1String
slashAster
(
"/*"
);
const
QLatin1String
asterSlash
(
"*/"
);
/*
We could use the linizer here, but that would slow us down
terribly. We are better to trim only the code lines we need.
*/
QTextBlock
p
=
yyProgram
.
lastBlock
();
p
=
p
.
previous
();
// skip bottom line
for
(
int
i
=
0
;
i
<
BigRoof
;
i
++
)
{
if
(
p
==
yyProgram
.
firstBlock
())
return
false
;
p
=
p
.
previous
();
const
QString
blockText
=
p
.
text
();
QTextBlock
currentLine
=
yyProgram
.
lastBlock
().
previous
();
QTextBlock
previousLine
=
currentLine
.
previous
();
if
(
blockText
.
indexOf
(
slashAster
)
!=
-
1
||
blockText
.
indexOf
(
asterSlash
)
!=
-
1
)
{
const
QString
trimmed
=
trimmedCodeLine
(
blockText
);
int
startState
=
qMax
(
0
,
previousLine
.
userState
())
&
0xff
;
if
(
startState
>
0
)
return
true
;
if
(
trimmed
.
indexOf
(
slashAster
)
!=
-
1
)
{
return
true
;
}
else
if
(
trimmed
.
indexOf
(
asterSlash
)
!=
-
1
)
{
return
false
;
}
}
}
return
false
;
}
...
...
@@ -490,7 +485,7 @@ bool QScriptIndenter::bottomLineStartsInCComment()
Essentially, we're trying to align against some text on the
previous line.
*/
int
QScriptIndenter
::
indentWhenBottomLineStartsIn
C
Comment
()
int
QScriptIndenter
::
indentWhenBottomLineStartsIn
MultiLine
Comment
()
{
int
k
=
yyLine
->
lastIndexOf
(
QLatin1String
(
"/*"
));
if
(
k
==
-
1
)
{
...
...
@@ -1028,14 +1023,14 @@ int QScriptIndenter::indentForBottomLine(QTextBlock begin, QTextBlock end, QChar
QChar
firstCh
=
firstNonWhiteSpace
(
bottomLine
);
int
indent
=
0
;
if
(
bottomLineStartsIn
C
Comment
())
{
if
(
bottomLineStartsIn
Multiline
Comment
())
{
/*
The bottom line starts in a C-style comment. Indent it
smartly, unless the user has already played around with it,
in which case it's better to leave her stuff alone.
*/
if
(
isOnlyWhiteSpace
(
bottomLine
))
{
indent
=
indentWhenBottomLineStartsIn
C
Comment
();
indent
=
indentWhenBottomLineStartsIn
MultiLine
Comment
();
}
else
{
indent
=
indentOfLine
(
bottomLine
);
}
...
...
src/shared/qscripthighlighter/qscriptindenter.h
View file @
ea9f96a3
...
...
@@ -74,8 +74,8 @@ private:
bool
readLine
();
void
startLinizer
();
bool
bottomLineStartsIn
C
Comment
();
int
indentWhenBottomLineStartsIn
C
Comment
();
bool
bottomLineStartsIn
Multiline
Comment
();
int
indentWhenBottomLineStartsIn
MultiLine
Comment
();
bool
matchBracelessControlStatement
();
bool
isUnfinishedLine
();
bool
isContinuationLine
();
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a 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