> On 14 May 2017, at 11:24 pm, Matic Kukovec <[email protected]> wrote:
> >
> >
> > > On 14 May 2017, at 11:26 am, [email protected] wrote:
> > > >
> > > > Dear QScintilla users,
> > > >
> > > > Automatic indentation is a very nice feature offered by QScintilla.
> > > > When inserting a new line, automatic indentation pushes the cursor to
> > > > the same indentation level as the previous one. You have two options to
> > > > switch on this feature: (1) call the function setAutoIndent(True) on
> > > > the QsciScintilla editor or (2) call the function
> > > > setAutoIndentStyle(..) on the lexer.
> > > >
> > > > The first option works. The second doesn't. For full details on the
> > > > problem, please take a look at the following StackOverflow question:
> > > >
> > > > http://stackoverflow.com/questions/43962669/setautoindentstyle-on-the-qscintilla-lexer-doesnt-work
> > > >
> > > > Do you know the answer?
> > >
> > > You have to implement the various block method (blockStart(), blockEnd()
> > > etc).
> > >
> > > Phil
> >
> > Hey Phil,
> >
> > Tried implementing blockStart() and blockEnd(), but it throws a TypeError
> > if using for example:
> > def blockStart(self):
> > return "{"
> >
> > def blockEnd(self):
> > return "}"
> > With a bit of trial&error I found that the methods need to return a tuple
> > of (bytes, int). Why?
>
> http://pyqt.sourceforge.net/Docs/QScintilla2/classQsciLexer.html#a7c99eb2877dc6a9762815bc0471f0c36
>
> Phil
Hey Phil,
I'm assuming it means that it returns a tuple(bytesstring_of_block_start_chars,
pointer_to_style), because lexers that implement the blockStart method (like
QsciLexerPython) return (None, some_large_number). But why do they always
return the byte_string as None?
Anyway, I edited the blockStart() and blockEnd() methods of my custom lexer to:
def blockStart(self):
return b'{', 0
def blockStart(self):
return b'}', 0
and set the qscintilla editors setAutoIndent(True) and my custom lexers
setAutoIndentStyle(QsciScintilla.AiOpening | QsciScintilla.AiOpening). Now the
next line after inserting a '{' doesn't indent (like in the QsciLexerCPP, for
example), but it does unindent when inserting a '}'?
Example:
if (test)
{
|<- doesn't indent
Then I manually indent:
if (test)
{
|<- manual indent with the tab key
test line added;
Inserting the '}' character unindents automatically:
if (test)
{
test line added;
} <- automatically unindented from the previous line's indentation level
I really have no idea if I'm doing something wrong or if I'm misunderstanding
something, could you please help?
P.S.:
I'm also helping Kristof, so that is why we are both posting separately on the
same topic.
Matic
_______________________________________________
QScintilla mailing list
[email protected]
https://www.riverbankcomputing.com/mailman/listinfo/qscintilla