Giter Club home page Giter Club logo

qutepart's Introduction

Build Status

Code editor component for PyQt5

Component has been created for Enki editor as replacement for QScintilla

API documentation

Features

  • Syntax highlighting for 196 languages
  • Smart indentation for many languages
  • Line numbers
  • Bookmarks
  • Advanced edit operations
  • Matching braces highlighting
  • Autocompletion based on document content
  • Marking too long lines with red line
  • Rectangular selection and copy-paste
  • Vim mode

Building and installation on Linux

Qutepart depends on:

  • Python 3
  • PyQt5
  • pcre

Versions up to 2.2.3 used to work on Python 2 and PyQt4.

1. Install pcre and development files

On Debian, Ubuntu and other Linuxes install package libpcreX-dev, where X is available in your distribution pcre version. For other OSes - see instructions on pcre website

2. Install Python development files

On Debian, Ubuntu and other Linuxes install package python3-dev, on other systems - see Python website

3. Install C compiler

It will probably be gcc

4. Build and install the package

python3 setup.py install

Building and installation on Windows

  • Download and install the CMake binary. Tested with 2.8.12.
  • Download and install Microsoft Visual Studio Express Edition 2010 (or the full version).
  • Create a root directory and place the following as subdirectories in it:

Make pcre

cd <pcre-8.37 source>
mkdir build
cd build
cmake .. -DBUILD_SHARED_LIBS:BOOL=OFF -DPCRE_SUPPORT_UTF:BOOL=ON -DPCRE_SUPPORT_JIT:BOOL=ON -G "Visual Studio 10 2010"
cmake --build . --config Release

Build/install Python modules

cd qutepart
python3 setup.py build_ext --include-dir=../pcre-8.37/build --lib-dir=../pcre-8.37/build/Release
python3 -m pip install -e .

Tests status

Qutepart contains a lot of tests. See tests/ directory. This tests are very useful to verify correctness of highlighting, indentation, Vim mode, etc. The tests often fail on CI because of hard-to-track PyQt bugs. Many issues were workarounded, but new issues appear on new OSes and software envinronments. If we try to run tests on CI, more time are spent on finding workarounds than saved by tests. It is not recommended to run the tests automatically now, hovewer the tests still live in the repository for manual execution by developers.

Qutepart and Katepart

Kate and Katepart (an editor component) is really cool software. The Kate authors and community have created, probably, the biggest set of highlighters and indenters for programming languages.

  • Qutepart uses Kate syntax highlighters (XML files)
  • Qutepart contains a port from Javascript to Python of Kate indenters (12% of the code base in version 1.0.0)
  • Qutepart doesn't contain Katepart code.

Nothing is wrong with Katepart. Qutepart has been created to enable reusing highlighters and indenters in projects where a KDE dependency is not acceptable.

Releasing new version

    make bump-version  # Set next version number. Commit the changes
    make changelog-update  # Edit and commit 3 changelog files
    git tag vx.x.x
    git push
    git push --tags
    make push-obs  # upload the version to Open Suse build service
    # make pip release TODO document this step

Author

Andrei Kopats [email protected]

Bug reports, patches

Github page

License

LGPL v2

qutepart's People

Contributors

abitrolly avatar andreikop avatar bjones1 avatar cmpitg avatar dglent avatar hlamer avatar richboss avatar sergeysatskiy avatar vi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

qutepart's Issues

Wheels for 32bit

It is possible to have wheels for qutepart 32 bit available ?
I can find only for 64bit in pypi

Thanks in advance

  • I have problems building locally in windows

Unit test failure

Just updated to head and tested on Windows...

======================================================================
FAIL: test_1 (test_api.DetectSyntax)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\bjones\Documents\enki_all\qutepart\tests\test_api.py", line 183, in test_1
    self.assertEquals(self.qpart.language(), 'PHP (HTML)')
AssertionError: u'HTML' != 'PHP (HTML)'

----------------------------------------------------------------------

Compiled version

Is it possible to compile qutepart so there's no runtime dependency on a Python install? I'm interested in embedding this in a Qt C++ application.

reStructuredText highlighting issue

The reStructuredText highlighting is not working as expected.

As you can see in the following images when there is formatted text inside a paragraph or you just prepend whitespace the text is not getting highlighted.

I firstly thought this might be the desired behavior so I tested kate editor. The result is the following:

kate

kate

qutepart

qutepart

Enhancement for completer.py

Here's a simple modification to support (My)SQL, where typically keywords are capped (that part is happening in a subclass of qutepart).

The word list is not dynamic but consists of SQL keywords (reserved words and functions).

class Completer(QObject):
    """Object listens Qutepart widget events, computes and shows autocompletion lists
    """
    _globalUpdateWordSetTimer = _GlobalUpdateWordSetTimer()

    _WORD_SET_UPDATE_MAX_TIME_SEC = 0.4

    def __init__(self, qpart, WordList=None):
        QObject.__init__(self, qpart)

        self._qpart = qpart
        self._widget = None
        self._completionOpenedManually = False

        self._wordSet = None
        if (WordList is not None):
            self._wordSet = set()
            for word in WordList:
                self._wordSet.add(word)

        qpart.installEventFilter(self)
        if (WordList is None):
            qpart.textChanged.connect(self._onTextChanged)

and so that the user-types casing can be arbitrary, see use of .lower() below:

    def _makeListOfCompletions(self, wordBeforeCursor, wholeWord):
        """Make list of completions, which shall be shown
        """
        onlySuitable = [word for word in self._wordSet \
                                if word.lower().startswith(wordBeforeCursor.lower()) and \
                                   word != wholeWord]

The subclass logic keeps track of user-typed text and effectively caps all keywords. The effect is illustrated by this time series:
s
se
sel
sele
selec
SELECT
selec (the 't' is deleted)

"Better dependencies checking" breaks the build

Starting from 9687ae2 it shows

/usr/bin/ld: cannot find -lPython
collect2: error: ld returned 1 exit status
distcc[15876] ERROR: compile (null) on localhost failed
Failed to find Python headers.
    Try to install python-dev package
    If not standard directories are used, set CFLAGS and LDFLAGS environment variables

python-dev is already installed, earlier commits are built successfuly, 86b5769 can aslo be build without problems after git revert 9687ae23f591e1e219d28b4e5f198f905a176771

AttributeError: type object 'QApplication' has no attribute 'instance'

+ make html
sphinx-build -b html -d build/doctrees   source build/html
Making output directory...
Running Sphinx v1.2.3

Exception occurred:
  File "/home/builder/rpmbuild/BUILD/qutepart-2.2.2/qutepart/syntaxhlighter.py", line 53, in __init__
    self._timer = QTimer(QApplication.instance())
AttributeError: type object 'QApplication' has no attribute 'instance'
The full traceback has been saved in /tmp/sphinx-err-dLBlPs.log, if you want to report the issue to the developers.
Please also report this if it was a user error, so that a better error message can be provided next time.
A bug report can be filed in the tracker at <https://bitbucket.org/birkenfeld/sphinx/issues/>. Thanks!

See also: https://www.readthedocs.org/projects/qutepart/builds/2506996/

Python files use Windows line endings (\r\n), not just \n

The python files in the released tarball have Windows line endings (\r\n) and not unix line endings (\n). This is very surprising as most packages use the latter.

Is this intentional? For me, it looks like the git repo uses Unix line endings (but maybe the Git client automatically converts line endings on Linux?).

Anyway, using Windows line endings leads to problems with some tools, e.g., when applying patches that contain Unix line endings (which is the default that most tools use).

Many tests fail with Python 3.5

Many tests fail with the py3 branch. Please take a look below into the build log with Python 3.5.

Besides that some tests are sloppy and crash, so I've to disable them:
tests/test_bookmarks.py tests/test_bracket_hlighter.py tests/test_completion.py tests/test_edit.py

Executing(%check): /bin/sh -e /var/tmp/rpm-tmp.cxIp0j
+ umask 022
+ cd /builddir/build/BUILD
~/build/BUILD/qutepart-2.2.2/tests ~/build/BUILD/qutepart-2.2.2
+ cd qutepart-2.2.2
+ pushd tests
+ xvfb-run /usr/bin/python2 run_all.py
test_click_selects_first (test_completion.Test) ... skipped 'Crashes Qt 4.8.3'
test_down_selects_first (test_completion.Test) ... ok
test_down_selects_second (test_completion.Test) ... ok
test_manual (test_completion.Test) ... ok
test_tab_completes (test_completion.Test) ... ok
test_too_long_list (test_completion.Test) ... ok
test_1 (test_actions.Print) ... skipped 'Does not work'
test_basic (test_rectangular_selection.Test) ... ok
test_copy_paste (test_rectangular_selection.Test) ... ok
test_copy_paste_utf8 (test_rectangular_selection.Test) ... ok
test_cut (test_rectangular_selection.Test) ... ok
test_cut_paste (test_rectangular_selection.Test) ... ok
test_delete (test_rectangular_selection.Test) ... ok
test_paste_new_lines (test_rectangular_selection.Test) ... ok
test_paste_replace_rectangular_selection (test_rectangular_selection.Test) ... ok
test_paste_replace_selection (test_rectangular_selection.Test) ... ok
test_real_to_visible (test_rectangular_selection.Test) ... ok
test_reset_by_edit (test_rectangular_selection.Test) ... ok
test_reset_by_move (test_rectangular_selection.Test) ... ok
test_visible_to_real (test_rectangular_selection.Test) ... ok
test_warning (test_rectangular_selection.Test) ... ok
test_with_tabs (test_rectangular_selection.Test) ... ok
test_02 (test_vim.CopyPaste)
Paste text with p ... ok
test_03 (test_vim.CopyPaste)
Paste lines with p ... ok
test_04 (test_vim.CopyPaste)
Paste lines with P ... ok
test_05 (test_vim.CopyPaste)
Yank line with yy ... ok
test_06 (test_vim.CopyPaste)
Yank until the end of line ... ok
test_08 (test_vim.CopyPaste)
Composite yank with y, paste with P ... ok
test_01a (test_vim.Del)
Delete with x ... ok
test_01b (test_vim.Del)
Delete with x. Use count ... ok
test_02 (test_vim.Del)
Composite delete with d. Left and right ... ok
test_03 (test_vim.Del)
Composite delete with d. Down ... ok
test_04 (test_vim.Del)
Composite delete with d. Up ... ok
test_05 (test_vim.Del)
Delete Count times ... ok
test_06 (test_vim.Del)
Delete line ... ok
test_07 (test_vim.Del)
Delete until end of file ... ok
test_08 (test_vim.Del)
Delete until start of file ... ok
test_09 (test_vim.Del)
Delete with X ... ok
test_10 (test_vim.Del)
Delete with D ... ok
test_01 (test_vim.Edit)
Undo ... ok
test_02 (test_vim.Edit)
Change with C ... ok
test_03 (test_vim.Edit)
Substitute with s ... ok
test_04 (test_vim.Edit)
Replace char with r ... ok
test_05 (test_vim.Edit)
Change 2 words with c ... ok
test_06 (test_vim.Edit)
Open new line with o ... ok
test_07 (test_vim.Edit)
Open new line with O ... ok
test_08 (test_vim.Edit)
Substitute with S ... ok
test_09 (test_vim.Edit)
% to jump to next braket ... ok
test_10 (test_vim.Edit)
J join lines ... ok
test_01 (test_vim.Indent)
Increase indent with >j, decrease with <j ... ok
test_02 (test_vim.Indent)
Increase indent with >>, decrease with << ... ok
test_03 (test_vim.Indent)
Autoindent with =j ... ok
test_04 (test_vim.Indent)
Autoindent with == ... ok
test_11 (test_vim.Indent)
Increase indent with >, decrease with < in visual mode ... ok
test_12 (test_vim.Indent)
Autoindent with = in visual mode ... ok
test_01 (test_vim.Modes)
Switch modes insert/normal ... ok
test_02 (test_vim.Modes)
Append with A ... ok
test_03 (test_vim.Modes)
Append with a ... ok
test_04 (test_vim.Modes)
Mode line shows composite command start ... ok
test_05 (test_vim.Modes)
Replace mode ... ok
test_06 (test_vim.Modes)
Visual mode ... ok
test_07 (test_vim.Modes)
Switch to visual on selection ... ok
test_08 (test_vim.Modes)
From VISUAL to VISUAL LINES ... ok
test_09 (test_vim.Modes)
From VISUAL LINES to VISUAL ... ok
test_10 (test_vim.Modes)
Insert mode with I ... ok
test_01 (test_vim.Move)
Move hjkl ... ok
test_02 (test_vim.Move)
w ... ok
test_03 (test_vim.Move)
e ... ok
test_04 (test_vim.Move)
$ ... ok
test_05 (test_vim.Move)
0 ... ok
test_06 (test_vim.Move)
G ... ok
test_07 (test_vim.Move)
gg ... ok
test_08 (test_vim.Move)
b word back ... ok
test_09 (test_vim.Move)
% to jump to next braket ... ok
test_10 (test_vim.Move)
^ to jump to the first non-space char ... ok
test_11 (test_vim.Move)
f to search forward ... ok
test_12 (test_vim.Move)
F to search backward ... ok
test_13 (test_vim.Move)
t to search forward ... ok
test_14 (test_vim.Move)
T to search backward ... ok
test_15 (test_vim.Move)
f in a composite command ... ok
test_16 (test_vim.Move)
E ... ok
test_17 (test_vim.Move)
W ... ok
test_18 (test_vim.Move)
B ... ok
test_19 (test_vim.Move)
Enter, Return ... ok
test_01 (test_vim.Repeat)
Repeat o ... ok
test_02 (test_vim.Repeat)
Repeat o. Use count from previous command ... ok
test_03 (test_vim.Repeat)
Repeat O ... ok
test_04 (test_vim.Repeat)
Repeat p ... ok
test_05 (test_vim.Repeat)
Repeat p ... ok
test_06 (test_vim.Repeat)
Repeat D ... ok
test_07 (test_vim.Repeat)
Repeat dw ... ok
test_08 (test_vim.Repeat)
Repeat Visual x ... ok
test_09 (test_vim.Repeat)
Repeat visual X ... ok
test_10 (test_vim.Repeat)
Repeat Visual > ... ok
test_01 (test_vim.Visual)
x ... ok
test_02 (test_vim.Visual)
Append with a ... ok
test_03 (test_vim.Visual)
Replace with r ... ok
test_04 (test_vim.Visual)
Replace selected lines with R ... ok
test_05 (test_vim.Visual)
Reset selection with u ... ok
test_06 (test_vim.Visual)
Yank with y and paste with p ... ok
test_07 (test_vim.Visual)
Replace word when pasting ... ok
test_08 (test_vim.Visual)
Change with c ... ok
test_09 (test_vim.Visual)
Delete lines with X and D ... ok
test_10 (test_vim.Visual)
Check if f works ... ok
test_11 (test_vim.Visual)
J join lines ... ok
test_01 (test_vim.VisualLines)
x Delete ... ok
test_02 (test_vim.VisualLines)
Replace text when pasting ... ok
test_06 (test_vim.VisualLines)
Yank with y and paste with p ... ok
test_07 (test_vim.VisualLines)
Change with c ... ok
test_1 (test_bracket_hlighter.Test) ... ok
test_parse_all_definitions (test_syntax.test_xml_definition_parsing.XmlParsingTestCase)
Parse all definitions ... ok
test_RegExp (test_syntax.test_dynamic_substitution.TestCase) ... ok
test_StringDetect (test_syntax.test_dynamic_substitution.TestCase) ... ok
test_AnyChar (test_syntax.test_rules.Test) ... ok
test_Detect2Chars (test_syntax.test_rules.Test) ... ok
test_Detect2Chars_shell_escape (test_syntax.test_rules.Test)
Test escape characters processing in Detect2Chars rule ... ok
test_DetectChar (test_syntax.test_rules.Test) ... ok
test_DetectChar_dynamic (test_syntax.test_rules.Test)
DetectChar rule, dynamic=true ... ok
test_DetectChar_dynamic2 (test_syntax.test_rules.Test) ... ok
test_DetectIdentifier (test_syntax.test_rules.Test) ... ok
test_DetectSpaces (test_syntax.test_rules.Test) ... ok
test_Float (test_syntax.test_rules.Test) ... ok
test_HlCChar (test_syntax.test_rules.Test) ... ok
test_HlCHex (test_syntax.test_rules.Test) ... ok
test_HlCOct (test_syntax.test_rules.Test) ... ok
test_HlCStringChar (test_syntax.test_rules.Test) ... ok
test_IncludeRules (test_syntax.test_rules.Test) ... ok
test_IncludeRulesExternal (test_syntax.test_rules.Test) ... ok
test_Int (test_syntax.test_rules.Test) ... ok
test_LineContinue (test_syntax.test_rules.Test) ... ok
test_RangeDetect (test_syntax.test_rules.Test) ... ok
test_RegExpr (test_syntax.test_rules.Test) ... ok
test_RegExpr_caret (test_syntax.test_rules.Test) ... ok
test_RegExpr_slashB (test_syntax.test_rules.Test) ... ok
test_StringDetect (test_syntax.test_rules.Test) ... ok
test_StringDetect_first_non_space (test_syntax.test_rules.Test)
StringDetect with firstNonSpace=true ... ok
test_WordDetect (test_syntax.test_rules.Test) ... ok
test_dynamic_reg_exp (test_syntax.test_rules.Test)
RegExpr rule, dynamic=true ... ok
test_dynamic_string_detect (test_syntax.test_rules.Test)
StringDetect rule, dynamic=true ... ok
test_firstNonSpace (test_syntax.test_rules.Test) ... ok
test_jsp_keyword (test_syntax.test_rules.Test) ... ok
test_keyword (test_syntax.test_rules.Test) ... ok
test_keyword_insensitive (test_syntax.test_rules.Test)
Insensitive attribute for particular keyword ... ok
test_keyword_insensitive_syntax (test_syntax.test_rules.Test)
Insensitive attribute for whole syntax ... ok
test_keyword_weak_delimiter (test_syntax.test_rules.Test)
Test weakDeliminator attribute parsing and usage ... ok
test_lookahead (test_syntax.test_rules.Test) ... ok
test_mup_keyword (test_syntax.test_rules.Test)
Test for additionalDeliminator syntax attribute ... ok
test_1 (test_indenter.test_scheme.Test) ... ok
test_2 (test_indenter.test_scheme.Test) ... ok
test_3 (test_indenter.test_scheme.Test) ... ok
test_4 (test_indenter.test_scheme.Test) ... ok
test_5 (test_indenter.test_scheme.Test) ... ok
test_6 (test_indenter.test_scheme.Test) ... ok
test_7 (test_indenter.test_scheme.Test) ... ok
test_8 (test_indenter.test_scheme.Test) ... ok
test_9 (test_indenter.test_scheme.Test) ... ok
test_1 (test_indenter.test_scheme.TestAutoindent) ... ok
test_2 (test_indenter.test_scheme.TestAutoindent) ... ok
test_3 (test_indenter.test_scheme.TestAutoindent) ... ok
test_4 (test_indenter.test_scheme.TestAutoindent) ... ok
test_5 (test_indenter.test_scheme.TestAutoindent) ... ok
test_6 (test_indenter.test_scheme.TestAutoindent) ... ok
test_7 (test_indenter.test_scheme.TestAutoindent) ... ok
test_8 (test_indenter.test_scheme.TestAutoindent) ... ok
test_autoIndentAfterEmpty (test_indenter.test_python.Test) ... ok
test_dedentBreak (test_indenter.test_python.Test) ... ok
test_dedentContinue (test_indenter.test_python.Test) ... ok
test_dedentPass (test_indenter.test_python.Test) ... ok
test_dedentRaise (test_indenter.test_python.Test) ... ok
test_dedentReturn (test_indenter.test_python.Test) ... ok
test_hangingIndentation (test_indenter.test_python.Test) ... ok
test_hangingIndentation2 (test_indenter.test_python.Test) ... ok
test_hangingIndentation3 (test_indenter.test_python.Test) ... ok
test_hangingIndentation4 (test_indenter.test_python.Test) ... ok
test_hangingIndentation5 (test_indenter.test_python.Test) ... ok
test_indentColon1 (test_indenter.test_python.Test) ... ok
test_indentColon2 (test_indenter.test_python.Test) ... ok
test_indentColon3 (test_indenter.test_python.Test)
Do not indent colon if hanging indentation used ... ok
test_keepIndent1 (test_indenter.test_python.Test) ... ok
test_keepIndent2 (test_indenter.test_python.Test) ... ok
test_keepIndent3 (test_indenter.test_python.Test) ... ok
test_keepIndent4 (test_indenter.test_python.Test) ... ok
test_aplist1 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist10 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist11 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist12 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist13 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist14 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist15 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist16 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist17 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist18 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist19 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist2 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist20 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist3 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist4 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist5 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist6 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist8 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist9 (test_indenter.test_cstyle.Aplist) ... ok
test_clospar1 (test_indenter.test_cstyle.ClosPar) ... ok
test_clospar2 (test_indenter.test_cstyle.ClosPar) ... ok
test_clospar3 (test_indenter.test_cstyle.ClosPar) ... ok
test_clospar4 (test_indenter.test_cstyle.ClosPar) ... ok
test_comma1 (test_indenter.test_cstyle.Comma) ... ok
test_comma2 (test_indenter.test_cstyle.Comma) ... ok
test_comma3 (test_indenter.test_cstyle.Comma) ... ok
test_comma4 (test_indenter.test_cstyle.Comma) ... ok
test_comma5 (test_indenter.test_cstyle.Comma) ... ok
test_comma6 (test_indenter.test_cstyle.Comma) ... ok
test_comment1 (test_indenter.test_cstyle.Comment) ... ok
test_comment2 (test_indenter.test_cstyle.Comment) ... ok
test_do1 (test_indenter.test_cstyle.Do) ... ok
test_do2 (test_indenter.test_cstyle.Do) ... ok
test_do3 (test_indenter.test_cstyle.Do) ... ok
test_doxygen1 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen2 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen3 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen4 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen5 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen6 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen7 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen8 (test_indenter.test_cstyle.Doxygen) ... ok
test_for1 (test_indenter.test_cstyle.For) ... ok
test_for2 (test_indenter.test_cstyle.For) ... ok
test_for3 (test_indenter.test_cstyle.For) ... ok
test_for4 (test_indenter.test_cstyle.For) ... ok
test_for5 (test_indenter.test_cstyle.For) ... ok
test_foreign1 (test_indenter.test_cstyle.Forein) ... ok
test_foreign2 (test_indenter.test_cstyle.Forein) ... ok
test_foreign3 (test_indenter.test_cstyle.Forein) ... ok
test_if1 (test_indenter.test_cstyle.If) ... ok
test_if10 (test_indenter.test_cstyle.If) ... ok
test_if11 (test_indenter.test_cstyle.If) ... ok
test_if2 (test_indenter.test_cstyle.If) ... ok
test_if3 (test_indenter.test_cstyle.If) ... ok
test_if4 (test_indenter.test_cstyle.If) ... ok
test_if5 (test_indenter.test_cstyle.If) ... ok
test_if6 (test_indenter.test_cstyle.If) ... ok
test_if7 (test_indenter.test_cstyle.If) ... ok
test_if8 (test_indenter.test_cstyle.If) ... ok
test_if9 (test_indenter.test_cstyle.If) ... ok
test_if_qutepart1 (test_indenter.test_cstyle.If) ... ok
test_normal1 (test_indenter.test_cstyle.Normal) ... ok
test_normal2 (test_indenter.test_cstyle.Normal) ... ok
test_normal3 (test_indenter.test_cstyle.Normal) ... ok
test_openpar1 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar10 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar2 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar3 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar4 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar5 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar6 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar7 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar8 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar9 (test_indenter.test_cstyle.OpenPar) ... ok
test_137157 (test_indenter.test_cstyle.Other) ... ok
test_alignbrace (test_indenter.test_cstyle.Other) ... ok
test_plist1 (test_indenter.test_cstyle.PList) ... ok
test_plist11 (test_indenter.test_cstyle.PList) ... ok
test_plist12 (test_indenter.test_cstyle.PList) ... ok
test_plist13 (test_indenter.test_cstyle.PList) ... ok
test_plist15 (test_indenter.test_cstyle.PList) ... ok
test_plist16 (test_indenter.test_cstyle.PList) ... ok
test_plist17 (test_indenter.test_cstyle.PList) ... ok
test_plist18 (test_indenter.test_cstyle.PList) ... ok
test_plist19 (test_indenter.test_cstyle.PList) ... ok
test_plist2 (test_indenter.test_cstyle.PList) ... ok
test_plist20 (test_indenter.test_cstyle.PList) ... ok
test_plist21 (test_indenter.test_cstyle.PList) ... ok
test_plist22 (test_indenter.test_cstyle.PList) ... ok
test_plist24 (test_indenter.test_cstyle.PList) ... ok
test_plist25 (test_indenter.test_cstyle.PList) ... ok
test_plist3 (test_indenter.test_cstyle.PList) ... ok
test_plist4 (test_indenter.test_cstyle.PList) ... ok
test_plist5 (test_indenter.test_cstyle.PList) ... ok
test_plist6 (test_indenter.test_cstyle.PList) ... ok
test_plist7 (test_indenter.test_cstyle.PList) ... ok
test_plist8 (test_indenter.test_cstyle.PList) ... ok
test_plist9 (test_indenter.test_cstyle.PList) ... ok
test_prep1 (test_indenter.test_cstyle.Prep) ... ok
test_prep2 (test_indenter.test_cstyle.Prep) ... ok
test_prep5 (test_indenter.test_cstyle.Prep) ... ok
test_prep6 (test_indenter.test_cstyle.Prep) ... ok
test_switch1 (test_indenter.test_cstyle.Switch) ... ok
test_switch12 (test_indenter.test_cstyle.Switch) ... ok
test_switch14 (test_indenter.test_cstyle.Switch) ... ok
test_switch2 (test_indenter.test_cstyle.Switch) ... ok
test_switch3 (test_indenter.test_cstyle.Switch) ... ok
test_switch4 (test_indenter.test_cstyle.Switch) ... ok
test_switch5 (test_indenter.test_cstyle.Switch) ... ok
test_switch6 (test_indenter.test_cstyle.Switch) ... ok
test_switch7 (test_indenter.test_cstyle.Switch) ... ok
test_switch9 (test_indenter.test_cstyle.Switch) ... ok
test_top1 (test_indenter.test_cstyle.Top) ... ok
test_top10 (test_indenter.test_cstyle.Top) ... ok
test_top11 (test_indenter.test_cstyle.Top) ... ok
test_top12 (test_indenter.test_cstyle.Top) ... ok
test_top13 (test_indenter.test_cstyle.Top) ... ok
test_top14 (test_indenter.test_cstyle.Top) ... ok
test_top15 (test_indenter.test_cstyle.Top) ... ok
test_top16 (test_indenter.test_cstyle.Top) ... ok
test_top17 (test_indenter.test_cstyle.Top) ... ok
test_top18 (test_indenter.test_cstyle.Top) ... ok
test_top19 (test_indenter.test_cstyle.Top) ... ok
test_top2 (test_indenter.test_cstyle.Top) ... ok
test_top3 (test_indenter.test_cstyle.Top) ... ok
test_top4 (test_indenter.test_cstyle.Top) ... ok
test_top5 (test_indenter.test_cstyle.Top) ... ok
test_top6 (test_indenter.test_cstyle.Top) ... ok
test_top7 (test_indenter.test_cstyle.Top) ... ok
test_top8 (test_indenter.test_cstyle.Top) ... ok
test_top9 (test_indenter.test_cstyle.Top) ... ok
test_using3 (test_indenter.test_cstyle.Using) ... ok
test_visib1 (test_indenter.test_cstyle.Visib) ... ok
test_visib2 (test_indenter.test_cstyle.Visib) ... ok
test_visib3 (test_indenter.test_cstyle.Visib) ... ok
test_visib4 (test_indenter.test_cstyle.Visib) ... ok
test_visib5 (test_indenter.test_cstyle.Visib) ... ok
test_visib6 (test_indenter.test_cstyle.Visib) ... ok
test_visib7 (test_indenter.test_cstyle.Visib) ... ok
test_visib8 (test_indenter.test_cstyle.Visib) ... ok
test_while1 (test_indenter.test_cstyle.While) ... ok
test_while2 (test_indenter.test_cstyle.While) ... ok
test_while3 (test_indenter.test_cstyle.While) ... ok
test_afterComma1 (test_indenter.test_haskell.Test) ... skipped 'Haskell not supported yet'
test_dontIndent1 (test_indenter.test_haskell.Test) ... skipped 'Haskell not supported yet'
test_if1 (test_indenter.test_haskell.Test) ... skipped 'Haskell not supported yet'
test_if2 (test_indenter.test_haskell.Test) ... skipped 'Haskell not supported yet'
test_parsec1 (test_indenter.test_haskell.Test) ... skipped 'Haskell not supported yet'
test_normal2 (test_indenter.test_normal.Test) ... qutepart: Indenter 'lua' is not finished yet. But you can do it!
ok
test_find_brace (test_indenter.test_lisp.Test) ... ok
test_not_found_brace (test_indenter.test_lisp.Test) ... ok
test_three_semicolons (test_indenter.test_lisp.Test) ... ok
test_two_semicolons (test_indenter.test_lisp.Test) ... ok
test_array1 (test_indenter.test_ruby.Array) ... ok
test_array10 (test_indenter.test_ruby.Array) ... ok
test_array11 (test_indenter.test_ruby.Array) ... ok
test_array12 (test_indenter.test_ruby.Array) ... ok
test_array16 (test_indenter.test_ruby.Array) ... ok
test_array17 (test_indenter.test_ruby.Array) ... ok
test_array18 (test_indenter.test_ruby.Array) ... ok
test_array19 (test_indenter.test_ruby.Array) ... ok
test_array2 (test_indenter.test_ruby.Array) ... ok
test_array20 (test_indenter.test_ruby.Array) ... ok
test_array21 (test_indenter.test_ruby.Array) ... ok
test_array22 (test_indenter.test_ruby.Array) ... ok
test_array3 (test_indenter.test_ruby.Array) ... ok
test_array4 (test_indenter.test_ruby.Array) ... ok
test_array5 (test_indenter.test_ruby.Array) ... ok
test_array6 (test_indenter.test_ruby.Array) ... ok
test_array7 (test_indenter.test_ruby.Array) ... ok
test_array8 (test_indenter.test_ruby.Array) ... ok
test_array9 (test_indenter.test_ruby.Array) ... ok
test_array_comment1 (test_indenter.test_ruby.ArrayComment) ... ok
test_array_comment2 (test_indenter.test_ruby.ArrayComment) ... ok
test_array_comment3 (test_indenter.test_ruby.ArrayComment) ... ok
test_array_comment4 (test_indenter.test_ruby.ArrayComment) ... ok
test_array_comment5 (test_indenter.test_ruby.ArrayComment) ... ok
test_basic1 (test_indenter.test_ruby.Basic) ... ok
test_basic2 (test_indenter.test_ruby.Basic) ... expected failure
test_basic3 (test_indenter.test_ruby.Basic) ... ok
test_basic4 (test_indenter.test_ruby.Basic) ... ok
test_block01 (test_indenter.test_ruby.Block) ... expected failure
test_block02 (test_indenter.test_ruby.Block) ... expected failure
test_block_comment1 (test_indenter.test_ruby.BlockComment) ... ok
test_block_comment2 (test_indenter.test_ruby.BlockComment) ... ok
test_block_comment3 (test_indenter.test_ruby.BlockComment) ... ok
test_block_comment4 (test_indenter.test_ruby.BlockComment) ... ok
test_block_comment5 (test_indenter.test_ruby.BlockComment) ... ok
test_block_comment6 (test_indenter.test_ruby.BlockComment) ... ok
test_block_comment7 (test_indenter.test_ruby.BlockComment) ... ok
test_block_comment8 (test_indenter.test_ruby.BlockComment) ... expected failure
test_comment1 (test_indenter.test_ruby.Comment) ... ok
test_comment2 (test_indenter.test_ruby.Comment) ... ok
test_comment3 (test_indenter.test_ruby.Comment) ... ok
test_comment4 (test_indenter.test_ruby.Comment) ... ok
test_comment5 (test_indenter.test_ruby.Comment) ... ok
test_comment6 (test_indenter.test_ruby.Comment) ... ok
test_do1 (test_indenter.test_ruby.Do) ... ok
test_do2 (test_indenter.test_ruby.Do) ... ok
test_do3 (test_indenter.test_ruby.Do) ... ok
test_do4 (test_indenter.test_ruby.Do) ... ok
test_do5 (test_indenter.test_ruby.Do) ... ok
test_do6 (test_indenter.test_ruby.Do) ... ok
test_do7 (test_indenter.test_ruby.Do) ... ok
test_empty_file1 (test_indenter.test_ruby.EmptyFile) ... ok
test_hash1 (test_indenter.test_ruby.Hash) ... ok
test_hash10 (test_indenter.test_ruby.Hash) ... ok
test_hash11 (test_indenter.test_ruby.Hash) ... ok
test_hash12 (test_indenter.test_ruby.Hash) ... ok
test_hash16 (test_indenter.test_ruby.Hash) ... ok
test_hash17 (test_indenter.test_ruby.Hash) ... ok
test_hash18 (test_indenter.test_ruby.Hash) ... ok
test_hash19 (test_indenter.test_ruby.Hash) ... ok
test_hash2 (test_indenter.test_ruby.Hash) ... ok
test_hash20 (test_indenter.test_ruby.Hash) ... ok
test_hash21 (test_indenter.test_ruby.Hash) ... ok
test_hash22 (test_indenter.test_ruby.Hash) ... ok
test_hash3 (test_indenter.test_ruby.Hash) ... ok
test_hash4 (test_indenter.test_ruby.Hash) ... ok
test_hash5 (test_indenter.test_ruby.Hash) ... ok
test_hash6 (test_indenter.test_ruby.Hash) ... ok
test_hash7 (test_indenter.test_ruby.Hash) ... ok
test_hash8 (test_indenter.test_ruby.Hash) ... ok
test_hash9 (test_indenter.test_ruby.Hash) ... ok
test_heredoc1 (test_indenter.test_ruby.Heredoc) ... ok
test_heredoc2 (test_indenter.test_ruby.Heredoc) ... ok
test_heredoc3 (test_indenter.test_ruby.Heredoc) ... ok
test_heredoc4 (test_indenter.test_ruby.Heredoc) ... ok
test_heredoc5 (test_indenter.test_ruby.Heredoc) ... ok
test_heredoc6 (test_indenter.test_ruby.Heredoc) ... ok
test_if10 (test_indenter.test_ruby.If) ... ok
test_if11 (test_indenter.test_ruby.If) ... ok
test_if20 (test_indenter.test_ruby.If) ... expected failure
test_if21 (test_indenter.test_ruby.If) ... expected failure
test_if22 (test_indenter.test_ruby.If) ... ok
test_if30 (test_indenter.test_ruby.If) ... expected failure
test_if31 (test_indenter.test_ruby.If) ... expected failure
test_multiline1 (test_indenter.test_ruby.Multiline) ... ok
test_multiline10 (test_indenter.test_ruby.Multiline) ... ok
test_multiline2 (test_indenter.test_ruby.Multiline) ... ok
test_multiline3 (test_indenter.test_ruby.Multiline) ... ok
test_multiline4 (test_indenter.test_ruby.Multiline) ... ok
test_multiline5 (test_indenter.test_ruby.Multiline) ... ok
test_multiline6 (test_indenter.test_ruby.Multiline) ... expected failure
test_multiline7 (test_indenter.test_ruby.Multiline) ... ok
test_multiline8 (test_indenter.test_ruby.Multiline) ... ok
test_multiline9 (test_indenter.test_ruby.Multiline) ... ok
test_no_do1 (test_indenter.test_ruby.NoDo) ... ok
test_no_do2 (test_indenter.test_ruby.NoDo) ... ok
test_no_do3 (test_indenter.test_ruby.NoDo) ... ok
test_no_do4 (test_indenter.test_ruby.NoDo) ... ok
test_ops1 (test_indenter.test_ruby.Ops) ... ok
test_ops11 (test_indenter.test_ruby.Ops) ... ok
test_ops12 (test_indenter.test_ruby.Ops) ... ok
test_ops13 (test_indenter.test_ruby.Ops) ... ok
test_ops14 (test_indenter.test_ruby.Ops) ... ok
test_ops15 (test_indenter.test_ruby.Ops) ... ok
test_ops16 (test_indenter.test_ruby.Ops) ... ok
test_ops17 (test_indenter.test_ruby.Ops) ... ok
test_ops18 (test_indenter.test_ruby.Ops) ... ok
test_ops2 (test_indenter.test_ruby.Ops) ... ok
test_ops21 (test_indenter.test_ruby.Ops) ... ok
test_ops22 (test_indenter.test_ruby.Ops) ... ok
test_ops23 (test_indenter.test_ruby.Ops) ... ok
test_ops24 (test_indenter.test_ruby.Ops) ... ok
test_ops25 (test_indenter.test_ruby.Ops) ... ok
test_ops26 (test_indenter.test_ruby.Ops) ... ok
test_ops27 (test_indenter.test_ruby.Ops) ... ok
test_ops28 (test_indenter.test_ruby.Ops) ... ok
test_ops3 (test_indenter.test_ruby.Ops) ... ok
test_ops4 (test_indenter.test_ruby.Ops) ... ok
test_ops5 (test_indenter.test_ruby.Ops) ... ok
test_ops6 (test_indenter.test_ruby.Ops) ... ok
test_ops7 (test_indenter.test_ruby.Ops) ... ok
test_ops8 (test_indenter.test_ruby.Ops) ... ok
test_plist1 (test_indenter.test_ruby.Plist) ... ok
test_plist10 (test_indenter.test_ruby.Plist) ... ok
test_plist11 (test_indenter.test_ruby.Plist) ... ok
test_plist12 (test_indenter.test_ruby.Plist) ... ok
test_plist13 (test_indenter.test_ruby.Plist) ... ok
test_plist14 (test_indenter.test_ruby.Plist) ... ok
test_plist15 (test_indenter.test_ruby.Plist) ... ok
test_plist16 (test_indenter.test_ruby.Plist) ... ok
test_plist17 (test_indenter.test_ruby.Plist) ... ok
test_plist18 (test_indenter.test_ruby.Plist) ... ok
test_plist19 (test_indenter.test_ruby.Plist) ... ok
test_plist2 (test_indenter.test_ruby.Plist) ... ok
test_plist20 (test_indenter.test_ruby.Plist) ... ok
test_plist3 (test_indenter.test_ruby.Plist) ... ok
test_plist4 (test_indenter.test_ruby.Plist) ... ok
test_plist5 (test_indenter.test_ruby.Plist) ... ok
test_plist6 (test_indenter.test_ruby.Plist) ... ok
test_plist7 (test_indenter.test_ruby.Plist) ... ok
test_plist8 (test_indenter.test_ruby.Plist) ... ok
test_plist9 (test_indenter.test_ruby.Plist) ... ok
test_plist_comment1 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment10 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment2 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment3 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment4 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment5 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment6 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment7 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment8 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment9 (test_indenter.test_ruby.PlistComment) ... ok
test_regexp1 (test_indenter.test_ruby.RegExp) ... ok
test_singleline01 (test_indenter.test_ruby.SingleLine) ... expected failure
test_singleline02 (test_indenter.test_ruby.SingleLine) ... expected failure
test_singleline03 (test_indenter.test_ruby.SingleLine) ... ok
test_singleline04 (test_indenter.test_ruby.SingleLine) ... ok
test_wordlist01 (test_indenter.test_ruby.WordList) ... ok
test_wordlist02 (test_indenter.test_ruby.WordList) ... ok
test_wordlist11 (test_indenter.test_ruby.WordList) ... expected failure
test_wordlist12 (test_indenter.test_ruby.WordList) ... expected failure
test_wordlist21 (test_indenter.test_ruby.WordList) ... expected failure
test_wordlist22 (test_indenter.test_ruby.WordList) ... expected failure
test_align1 (test_indenter.test_xmlindent.Align) ... ok
test_align2 (test_indenter.test_xmlindent.Align) ... ok
test_align3 (test_indenter.test_xmlindent.Align) ... ok
test_align4 (test_indenter.test_xmlindent.Align) ... ok
test_align5 (test_indenter.test_xmlindent.Align) ... ok
test_enter1 (test_indenter.test_xmlindent.Enter)
zero indent for <?xml ... ok
test_enter2 (test_indenter.test_xmlindent.Enter)
zero indent for <!DOCTYPE ... ok
test_enter3 (test_indenter.test_xmlindent.Enter)
keep indent when prev line was a comment ... ok
test_enter4 (test_indenter.test_xmlindent.Enter)
keep indent when prev line closed a tag ... ok
test_enter5 (test_indenter.test_xmlindent.Enter)
increase indent when prev line opened a tag ... ok
test_grater2 (test_indenter.test_xmlindent.Greater)
keep indent when prev line opened a tag ... ok
test_greater1 (test_indenter.test_xmlindent.Greater)
closing tag, decrease indentation when previous didn't open a tag ... ok
test_greater3 (test_indenter.test_xmlindent.Greater)
zero indent for <?xml ... ok
test_greater4 (test_indenter.test_xmlindent.Greater)
zero indent for <!DOCTYPE ... ok
test_greater5 (test_indenter.test_xmlindent.Greater)
keep indent when prev line closed a tag or was a comment ... ok
test_greater6 (test_indenter.test_xmlindent.Greater)
keep indent when prev line closed a tag or was a comment ... ok
test_greater7 (test_indenter.test_xmlindent.Greater)
increase indent ... ok
test_slash1 (test_indenter.test_xmlindent.Slash) ... ok
test_slash2 (test_indenter.test_xmlindent.Slash)
Do not indent, if in text block ... ok
test_slash3 (test_indenter.test_xmlindent.Slash)
Do not indent, if previous line opens tag ... ok
test_slash4 (test_indenter.test_xmlindent.Slash) ... ok
test_split1 (test_indenter.test_xmlindent.Split) ... ok
test_split2 (test_indenter.test_xmlindent.Split) ... ok
test_split3 (test_indenter.test_xmlindent.Split) ... ok
test_split4 (test_indenter.test_xmlindent.Split) ... ok
test_completion_enabled (test_api.Completion) ... ok
test_threshold (test_api.Completion) ... ok
test_1 (test_api.DetectSyntax) ... qutepart: Indenter 'ada' is not finished yet. But you can do it!
ok
test_1 (test_api.InsertText) ... ok
test_2 (test_api.InsertText) ... ok
test_3 (test_api.InsertText) ... ok
test_1 (test_api.IsCodeOrComment) ... ok
test_2 (test_api.IsCodeOrComment) ... ok
test_block_comment (test_api.IsCodeOrComment) ... ok
test_here_doc (test_api.IsCodeOrComment) ... ok
test_accessByIndex (test_api.Lines) ... ok
test_getSlice (test_api.Lines) ... ok
test_modifyByIndex (test_api.Lines) ... ok
test_setSlice_1 (test_api.Lines) ... ok
test_setSlice_2 (test_api.Lines) ... ok
test_setSlice_3 (test_api.Lines) ... ok
test_setSlice_4 (test_api.Lines) ... ok
test_setSlice_5 (test_api.Lines) ... ok
test_setSlice_6 (test_api.Lines) ... ok
test_setSlice_61 (test_api.Lines) ... ok
test_setSlice_7 (test_api.Lines) ... ok
test_setSlice_8 (test_api.Lines) ... ok
test_setSlice_9 (test_api.Lines) ... ok
test_accessByIndex (test_api.LinesWin) ... ok
test_getSlice (test_api.LinesWin) ... ok
test_modifyByIndex (test_api.LinesWin) ... ok
test_setSlice_1 (test_api.LinesWin) ... ok
test_setSlice_2 (test_api.LinesWin) ... ok
test_setSlice_3 (test_api.LinesWin) ... ok
test_setSlice_4 (test_api.LinesWin) ... ok
test_setSlice_5 (test_api.LinesWin) ... ok
test_setSlice_6 (test_api.LinesWin) ... ok
test_setSlice_61 (test_api.LinesWin) ... ok
test_setSlice_7 (test_api.LinesWin) ... ok
test_setSlice_8 (test_api.LinesWin) ... ok
test_setSlice_9 (test_api.LinesWin) ... ok
test_replaceText1 (test_api.ReplaceText) ... ok
test_replaceText2 (test_api.ReplaceText) ... ok
test_replaceText3 (test_api.ReplaceText) ... ok
test_replaceText4 (test_api.ReplaceText) ... ok
test_replaceText5 (test_api.ReplaceText) ... ok
test_resetSelection (test_api.Selection) ... ok
test_selected_multiline_text (test_api.Selection) ... ok
test_setSelection (test_api.Selection) ... ok
test_eol_changed (test_api.Signals) ... ok
test_indent_width_changed (test_api.Signals) ... ok
test_language_changed (test_api.Signals) ... ok
test_use_tabs_changed (test_api.Signals) ... ok
test_1 (test_draw_whitespace.Test) ... ok
test_2 (test_draw_whitespace.Test) ... ok
test_3 (test_draw_whitespace.Test) ... ok
test_4 (test_draw_whitespace.Test) ... ok
test_jump (test_bookmarks.Test) ... ok
test_set_with_keyboard (test_bookmarks.Test) ... ok
test_set_with_mouse (test_bookmarks.Test) ... skipped 'Crashes Qt'
test_alt_does_not_type (test_edit.Test)
By default when Alt+Key is pressed - text is inserted. ... ok
test_overwrite_backspace (test_edit.Test) ... ok
test_overwrite_edit (test_edit.Test) ... ok
test_overwrite_undo (test_edit.Test) ... ok
test_1 (test_indent.Test) ... ok
test_2 (test_indent.Test) ... ok
test_3 (test_indent.Test) ... ok
test_4 (test_indent.Test) ... ok
test_5 (test_indent.Test) ... ok
test_6 (test_indent.Test) ... ok
test_7 (test_indent.Test)
Smartly indent python ... ok
----------------------------------------------------------------------
Ran 590 tests in 41.215s
OK (skipped=8, expected failures=15)
~/build/BUILD/qutepart-2.2.2
~/build/BUILD/qutepart-2.2.2/python3/tests ~/build/BUILD/qutepart-2.2.2
+ popd
+ pushd python3/tests
+ xvfb-run -a /usr/bin/python3 run_all.py
test_1 (test_actions.Print) ... skipped 'Does not work'
test_completion_enabled (test_api.Completion) ... ok
test_threshold (test_api.Completion) ... ok
test_1 (test_api.DetectSyntax) ... qutepart: Indenter 'ada' is not finished yet. But you can do it!
ok
test_1 (test_api.InsertText) ... ok
test_2 (test_api.InsertText) ... ok
test_3 (test_api.InsertText) ... ok
test_1 (test_api.IsCodeOrComment) ... ok
test_2 (test_api.IsCodeOrComment) ... ok
test_block_comment (test_api.IsCodeOrComment) ... When opening /builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/data/xml/ruby.xml:
ERROR
test_here_doc (test_api.IsCodeOrComment) ... ERROR
test_accessByIndex (test_api.Lines) ... ok
test_getSlice (test_api.Lines) ... ok
test_modifyByIndex (test_api.Lines) ... ok
test_setSlice_1 (test_api.Lines) ... ok
test_setSlice_2 (test_api.Lines) ... ok
test_setSlice_3 (test_api.Lines) ... ok
test_setSlice_4 (test_api.Lines) ... ok
test_setSlice_5 (test_api.Lines) ... ok
test_setSlice_6 (test_api.Lines) ... ok
test_setSlice_61 (test_api.Lines) ... ok
test_setSlice_7 (test_api.Lines) ... ok
test_setSlice_8 (test_api.Lines) ... ok
test_setSlice_9 (test_api.Lines) ... ok
test_accessByIndex (test_api.LinesWin) ... ok
test_getSlice (test_api.LinesWin) ... ok
test_modifyByIndex (test_api.LinesWin) ... ok
test_setSlice_1 (test_api.LinesWin) ... ok
test_setSlice_2 (test_api.LinesWin) ... ok
test_setSlice_3 (test_api.LinesWin) ... ok
test_setSlice_4 (test_api.LinesWin) ... ok
test_setSlice_5 (test_api.LinesWin) ... ok
test_setSlice_6 (test_api.LinesWin) ... ok
test_setSlice_61 (test_api.LinesWin) ... ok
test_setSlice_7 (test_api.LinesWin) ... ok
test_setSlice_8 (test_api.LinesWin) ... ok
test_setSlice_9 (test_api.LinesWin) ... ok
test_replaceText1 (test_api.ReplaceText) ... ok
test_replaceText2 (test_api.ReplaceText) ... ok
test_replaceText3 (test_api.ReplaceText) ... ok
test_replaceText4 (test_api.ReplaceText) ... ok
test_replaceText5 (test_api.ReplaceText) ... ok
test_resetSelection (test_api.Selection) ... ok
test_selected_multiline_text (test_api.Selection) ... ok
test_setSelection (test_api.Selection) ... ok
test_eol_changed (test_api.Signals) ... ok
test_indent_width_changed (test_api.Signals) ... ok
test_language_changed (test_api.Signals) ... ok
test_use_tabs_changed (test_api.Signals) ... ok
test_1 (test_draw_whitespace.Test) ... ok
test_2 (test_draw_whitespace.Test) ... ok
test_3 (test_draw_whitespace.Test) ... ok
test_4 (test_draw_whitespace.Test) ... ok
test_1 (test_indent.Test) ... ok
test_2 (test_indent.Test) ... ok
test_3 (test_indent.Test) ... ok
test_4 (test_indent.Test) ... ok
test_5 (test_indent.Test) ... ok
test_6 (test_indent.Test) ... ok
test_7 (test_indent.Test)
Smartly indent python ... ok
test_aplist1 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist10 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist11 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist12 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist13 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist14 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist15 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist16 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist17 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist18 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist19 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist2 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist20 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist3 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist4 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist5 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist6 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist8 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist9 (test_indenter.test_cstyle.Aplist) ... ok
test_clospar1 (test_indenter.test_cstyle.ClosPar) ... ok
test_clospar2 (test_indenter.test_cstyle.ClosPar) ... ok
test_clospar3 (test_indenter.test_cstyle.ClosPar) ... ok
test_clospar4 (test_indenter.test_cstyle.ClosPar) ... ok
test_comma1 (test_indenter.test_cstyle.Comma) ... ok
test_comma2 (test_indenter.test_cstyle.Comma) ... ok
test_comma3 (test_indenter.test_cstyle.Comma) ... ok
test_comma4 (test_indenter.test_cstyle.Comma) ... ok
test_comma5 (test_indenter.test_cstyle.Comma) ... ok
test_comma6 (test_indenter.test_cstyle.Comma) ... ok
test_comment1 (test_indenter.test_cstyle.Comment) ... ok
test_comment2 (test_indenter.test_cstyle.Comment) ... ok
test_do1 (test_indenter.test_cstyle.Do) ... ok
test_do2 (test_indenter.test_cstyle.Do) ... ok
test_do3 (test_indenter.test_cstyle.Do) ... ok
test_doxygen1 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen2 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen3 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen4 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen5 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen6 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen7 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen8 (test_indenter.test_cstyle.Doxygen) ... ok
test_for1 (test_indenter.test_cstyle.For) ... ok
test_for2 (test_indenter.test_cstyle.For) ... ok
test_for3 (test_indenter.test_cstyle.For) ... ok
test_for4 (test_indenter.test_cstyle.For) ... ok
test_for5 (test_indenter.test_cstyle.For) ... ok
test_foreign1 (test_indenter.test_cstyle.Forein) ... ok
test_foreign2 (test_indenter.test_cstyle.Forein) ... ok
test_foreign3 (test_indenter.test_cstyle.Forein) ... ok
test_if1 (test_indenter.test_cstyle.If) ... ok
test_if10 (test_indenter.test_cstyle.If) ... ok
test_if11 (test_indenter.test_cstyle.If) ... ok
test_if2 (test_indenter.test_cstyle.If) ... ok
test_if3 (test_indenter.test_cstyle.If) ... ok
test_if4 (test_indenter.test_cstyle.If) ... ok
test_if5 (test_indenter.test_cstyle.If) ... ok
test_if6 (test_indenter.test_cstyle.If) ... ok
test_if7 (test_indenter.test_cstyle.If) ... ok
test_if8 (test_indenter.test_cstyle.If) ... ok
test_if9 (test_indenter.test_cstyle.If) ... ok
test_if_qutepart1 (test_indenter.test_cstyle.If) ... ok
test_normal1 (test_indenter.test_cstyle.Normal) ... ok
test_normal2 (test_indenter.test_cstyle.Normal) ... ok
test_normal3 (test_indenter.test_cstyle.Normal) ... ok
test_openpar1 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar10 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar2 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar3 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar4 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar5 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar6 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar7 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar8 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar9 (test_indenter.test_cstyle.OpenPar) ... ok
test_137157 (test_indenter.test_cstyle.Other) ... ok
test_alignbrace (test_indenter.test_cstyle.Other) ... ok
test_plist1 (test_indenter.test_cstyle.PList) ... ok
test_plist11 (test_indenter.test_cstyle.PList) ... ok
test_plist12 (test_indenter.test_cstyle.PList) ... ok
test_plist13 (test_indenter.test_cstyle.PList) ... ok
test_plist15 (test_indenter.test_cstyle.PList) ... ok
test_plist16 (test_indenter.test_cstyle.PList) ... ok
test_plist17 (test_indenter.test_cstyle.PList) ... ok
test_plist18 (test_indenter.test_cstyle.PList) ... ok
test_plist19 (test_indenter.test_cstyle.PList) ... ok
test_plist2 (test_indenter.test_cstyle.PList) ... ok
test_plist20 (test_indenter.test_cstyle.PList) ... ok
test_plist21 (test_indenter.test_cstyle.PList) ... ok
test_plist22 (test_indenter.test_cstyle.PList) ... ok
test_plist24 (test_indenter.test_cstyle.PList) ... ok
test_plist25 (test_indenter.test_cstyle.PList) ... ok
test_plist3 (test_indenter.test_cstyle.PList) ... ok
test_plist4 (test_indenter.test_cstyle.PList) ... ok
test_plist5 (test_indenter.test_cstyle.PList) ... ok
test_plist6 (test_indenter.test_cstyle.PList) ... ok
test_plist7 (test_indenter.test_cstyle.PList) ... ok
test_plist8 (test_indenter.test_cstyle.PList) ... ok
test_plist9 (test_indenter.test_cstyle.PList) ... ok
test_prep1 (test_indenter.test_cstyle.Prep) ... ok
test_prep2 (test_indenter.test_cstyle.Prep) ... ok
test_prep5 (test_indenter.test_cstyle.Prep) ... ok
test_prep6 (test_indenter.test_cstyle.Prep) ... ok
test_switch1 (test_indenter.test_cstyle.Switch) ... ok
test_switch12 (test_indenter.test_cstyle.Switch) ... ok
test_switch14 (test_indenter.test_cstyle.Switch) ... ok
test_switch2 (test_indenter.test_cstyle.Switch) ... ok
test_switch3 (test_indenter.test_cstyle.Switch) ... ok
test_switch4 (test_indenter.test_cstyle.Switch) ... ok
test_switch5 (test_indenter.test_cstyle.Switch) ... ok
test_switch6 (test_indenter.test_cstyle.Switch) ... ok
test_switch7 (test_indenter.test_cstyle.Switch) ... ok
test_switch9 (test_indenter.test_cstyle.Switch) ... ok
test_top1 (test_indenter.test_cstyle.Top) ... ok
test_top10 (test_indenter.test_cstyle.Top) ... ok
test_top11 (test_indenter.test_cstyle.Top) ... ok
test_top12 (test_indenter.test_cstyle.Top) ... ok
test_top13 (test_indenter.test_cstyle.Top) ... ok
test_top14 (test_indenter.test_cstyle.Top) ... ok
test_top15 (test_indenter.test_cstyle.Top) ... ok
test_top16 (test_indenter.test_cstyle.Top) ... ok
test_top17 (test_indenter.test_cstyle.Top) ... ok
test_top18 (test_indenter.test_cstyle.Top) ... ok
test_top19 (test_indenter.test_cstyle.Top) ... ok
test_top2 (test_indenter.test_cstyle.Top) ... ok
test_top3 (test_indenter.test_cstyle.Top) ... ok
test_top4 (test_indenter.test_cstyle.Top) ... ok
test_top5 (test_indenter.test_cstyle.Top) ... ok
test_top6 (test_indenter.test_cstyle.Top) ... ok
test_top7 (test_indenter.test_cstyle.Top) ... ok
test_top8 (test_indenter.test_cstyle.Top) ... ok
test_top9 (test_indenter.test_cstyle.Top) ... ok
test_using3 (test_indenter.test_cstyle.Using) ... ok
test_visib1 (test_indenter.test_cstyle.Visib) ... ok
test_visib2 (test_indenter.test_cstyle.Visib) ... ok
test_visib3 (test_indenter.test_cstyle.Visib) ... ok
test_visib4 (test_indenter.test_cstyle.Visib) ... ok
test_visib5 (test_indenter.test_cstyle.Visib) ... ok
test_visib6 (test_indenter.test_cstyle.Visib) ... ok
test_visib7 (test_indenter.test_cstyle.Visib) ... ok
test_visib8 (test_indenter.test_cstyle.Visib) ... ok
test_while1 (test_indenter.test_cstyle.While) ... ok
test_while2 (test_indenter.test_cstyle.While) ... ok
test_while3 (test_indenter.test_cstyle.While) ... ok
test_afterComma1 (test_indenter.test_haskell.Test) ... skipped 'Haskell not supported yet'
test_dontIndent1 (test_indenter.test_haskell.Test) ... skipped 'Haskell not supported yet'
test_if1 (test_indenter.test_haskell.Test) ... skipped 'Haskell not supported yet'
test_if2 (test_indenter.test_haskell.Test) ... skipped 'Haskell not supported yet'
test_parsec1 (test_indenter.test_haskell.Test) ... skipped 'Haskell not supported yet'
test_find_brace (test_indenter.test_lisp.Test) ... ok
test_not_found_brace (test_indenter.test_lisp.Test) ... ok
test_three_semicolons (test_indenter.test_lisp.Test) ... ok
test_two_semicolons (test_indenter.test_lisp.Test) ... ok
test_normal2 (test_indenter.test_normal.Test) ... qutepart: Indenter 'lua' is not finished yet. But you can do it!
ok
test_autoIndentAfterEmpty (test_indenter.test_python.Test) ... ok
test_dedentBreak (test_indenter.test_python.Test) ... ok
test_dedentContinue (test_indenter.test_python.Test) ... ok
test_dedentPass (test_indenter.test_python.Test) ... ok
test_dedentRaise (test_indenter.test_python.Test) ... ok
test_dedentReturn (test_indenter.test_python.Test) ... ok
test_hangingIndentation (test_indenter.test_python.Test) ... ok
test_hangingIndentation2 (test_indenter.test_python.Test) ... ok
test_hangingIndentation3 (test_indenter.test_python.Test) ... ok
test_hangingIndentation4 (test_indenter.test_python.Test) ... ok
test_hangingIndentation5 (test_indenter.test_python.Test) ... ok
test_indentColon1 (test_indenter.test_python.Test) ... ok
test_indentColon2 (test_indenter.test_python.Test) ... ok
test_indentColon3 (test_indenter.test_python.Test)
Do not indent colon if hanging indentation used ... ok
test_keepIndent1 (test_indenter.test_python.Test) ... ok
test_keepIndent2 (test_indenter.test_python.Test) ... ok
test_keepIndent3 (test_indenter.test_python.Test) ... ok
test_keepIndent4 (test_indenter.test_python.Test) ... ok
test_array1 (test_indenter.test_ruby.Array) ... ERROR
test_array10 (test_indenter.test_ruby.Array) ... ERROR
test_array11 (test_indenter.test_ruby.Array) ... ERROR
test_array12 (test_indenter.test_ruby.Array) ... ERROR
test_array16 (test_indenter.test_ruby.Array) ... ERROR
test_array17 (test_indenter.test_ruby.Array) ... ERROR
test_array18 (test_indenter.test_ruby.Array) ... ERROR
test_array19 (test_indenter.test_ruby.Array) ... ERROR
test_array2 (test_indenter.test_ruby.Array) ... ERROR
test_array20 (test_indenter.test_ruby.Array) ... ERROR
test_array21 (test_indenter.test_ruby.Array) ... ERROR
test_array22 (test_indenter.test_ruby.Array) ... ERROR
test_array3 (test_indenter.test_ruby.Array) ... ERROR
test_array4 (test_indenter.test_ruby.Array) ... ERROR
test_array5 (test_indenter.test_ruby.Array) ... ERROR
test_array6 (test_indenter.test_ruby.Array) ... ERROR
test_array7 (test_indenter.test_ruby.Array) ... ERROR
test_array8 (test_indenter.test_ruby.Array) ... ERROR
test_array9 (test_indenter.test_ruby.Array) ... ERROR
test_array_comment1 (test_indenter.test_ruby.ArrayComment) ... ERROR
test_array_comment2 (test_indenter.test_ruby.ArrayComment) ... ERROR
test_array_comment3 (test_indenter.test_ruby.ArrayComment) ... ERROR
test_array_comment4 (test_indenter.test_ruby.ArrayComment) ... ERROR
test_array_comment5 (test_indenter.test_ruby.ArrayComment) ... ERROR
test_basic1 (test_indenter.test_ruby.Basic) ... ERROR
test_basic2 (test_indenter.test_ruby.Basic) ... ERROR
test_basic3 (test_indenter.test_ruby.Basic) ... ERROR
test_basic4 (test_indenter.test_ruby.Basic) ... ERROR
test_block01 (test_indenter.test_ruby.Block) ... ERROR
test_block02 (test_indenter.test_ruby.Block) ... ERROR
test_block_comment1 (test_indenter.test_ruby.BlockComment) ... ERROR
test_block_comment2 (test_indenter.test_ruby.BlockComment) ... ERROR
test_block_comment3 (test_indenter.test_ruby.BlockComment) ... ERROR
test_block_comment4 (test_indenter.test_ruby.BlockComment) ... ERROR
test_block_comment5 (test_indenter.test_ruby.BlockComment) ... ERROR
test_block_comment6 (test_indenter.test_ruby.BlockComment) ... ERROR
test_block_comment7 (test_indenter.test_ruby.BlockComment) ... ERROR
test_block_comment8 (test_indenter.test_ruby.BlockComment) ... ERROR
test_comment1 (test_indenter.test_ruby.Comment) ... ERROR
test_comment2 (test_indenter.test_ruby.Comment) ... ERROR
test_comment3 (test_indenter.test_ruby.Comment) ... ERROR
test_comment4 (test_indenter.test_ruby.Comment) ... ERROR
test_comment5 (test_indenter.test_ruby.Comment) ... ERROR
test_comment6 (test_indenter.test_ruby.Comment) ... ERROR
test_do1 (test_indenter.test_ruby.Do) ... ERROR
test_do2 (test_indenter.test_ruby.Do) ... ERROR
test_do3 (test_indenter.test_ruby.Do) ... ERROR
test_do4 (test_indenter.test_ruby.Do) ... ERROR
test_do5 (test_indenter.test_ruby.Do) ... ERROR
test_do6 (test_indenter.test_ruby.Do) ... ERROR
test_do7 (test_indenter.test_ruby.Do) ... ERROR
test_empty_file1 (test_indenter.test_ruby.EmptyFile) ... ERROR
test_hash1 (test_indenter.test_ruby.Hash) ... ERROR
test_hash10 (test_indenter.test_ruby.Hash) ... ERROR
test_hash11 (test_indenter.test_ruby.Hash) ... ERROR
test_hash12 (test_indenter.test_ruby.Hash) ... ERROR
test_hash16 (test_indenter.test_ruby.Hash) ... ERROR
test_hash17 (test_indenter.test_ruby.Hash) ... ERROR
test_hash18 (test_indenter.test_ruby.Hash) ... ERROR
test_hash19 (test_indenter.test_ruby.Hash) ... ERROR
test_hash2 (test_indenter.test_ruby.Hash) ... ERROR
test_hash20 (test_indenter.test_ruby.Hash) ... ERROR
test_hash21 (test_indenter.test_ruby.Hash) ... ERROR
test_hash22 (test_indenter.test_ruby.Hash) ... ERROR
test_hash3 (test_indenter.test_ruby.Hash) ... ERROR
test_hash4 (test_indenter.test_ruby.Hash) ... ERROR
test_hash5 (test_indenter.test_ruby.Hash) ... ERROR
test_hash6 (test_indenter.test_ruby.Hash) ... ERROR
test_hash7 (test_indenter.test_ruby.Hash) ... ERROR
test_hash8 (test_indenter.test_ruby.Hash) ... ERROR
test_hash9 (test_indenter.test_ruby.Hash) ... ERROR
test_heredoc1 (test_indenter.test_ruby.Heredoc) ... ERROR
test_heredoc2 (test_indenter.test_ruby.Heredoc) ... ERROR
test_heredoc3 (test_indenter.test_ruby.Heredoc) ... ERROR
test_heredoc4 (test_indenter.test_ruby.Heredoc) ... ERROR
test_heredoc5 (test_indenter.test_ruby.Heredoc) ... ERROR
test_heredoc6 (test_indenter.test_ruby.Heredoc) ... ERROR
test_if10 (test_indenter.test_ruby.If) ... ERROR
test_if11 (test_indenter.test_ruby.If) ... ERROR
test_if20 (test_indenter.test_ruby.If) ... ERROR
test_if21 (test_indenter.test_ruby.If) ... ERROR
test_if22 (test_indenter.test_ruby.If) ... ERROR
test_if30 (test_indenter.test_ruby.If) ... ERROR
test_if31 (test_indenter.test_ruby.If) ... ERROR
test_multiline1 (test_indenter.test_ruby.Multiline) ... ERROR
test_multiline10 (test_indenter.test_ruby.Multiline) ... ERROR
test_multiline2 (test_indenter.test_ruby.Multiline) ... ERROR
test_multiline3 (test_indenter.test_ruby.Multiline) ... ERROR
test_multiline4 (test_indenter.test_ruby.Multiline) ... ERROR
test_multiline5 (test_indenter.test_ruby.Multiline) ... ERROR
test_multiline6 (test_indenter.test_ruby.Multiline) ... ERROR
test_multiline7 (test_indenter.test_ruby.Multiline) ... ERROR
test_multiline8 (test_indenter.test_ruby.Multiline) ... ERROR
test_multiline9 (test_indenter.test_ruby.Multiline) ... ERROR
test_no_do1 (test_indenter.test_ruby.NoDo) ... ERROR
test_no_do2 (test_indenter.test_ruby.NoDo) ... ERROR
test_no_do3 (test_indenter.test_ruby.NoDo) ... ERROR
test_no_do4 (test_indenter.test_ruby.NoDo) ... ERROR
test_ops1 (test_indenter.test_ruby.Ops) ... ERROR
test_ops11 (test_indenter.test_ruby.Ops) ... ERROR
test_ops12 (test_indenter.test_ruby.Ops) ... ERROR
test_ops13 (test_indenter.test_ruby.Ops) ... ERROR
test_ops14 (test_indenter.test_ruby.Ops) ... ERROR
test_ops15 (test_indenter.test_ruby.Ops) ... ERROR
test_ops16 (test_indenter.test_ruby.Ops) ... ERROR
test_ops17 (test_indenter.test_ruby.Ops) ... ERROR
test_ops18 (test_indenter.test_ruby.Ops) ... ERROR
test_ops2 (test_indenter.test_ruby.Ops) ... ERROR
test_ops21 (test_indenter.test_ruby.Ops) ... ERROR
test_ops22 (test_indenter.test_ruby.Ops) ... ERROR
test_ops23 (test_indenter.test_ruby.Ops) ... ERROR
test_ops24 (test_indenter.test_ruby.Ops) ... ERROR
test_ops25 (test_indenter.test_ruby.Ops) ... ERROR
test_ops26 (test_indenter.test_ruby.Ops) ... ERROR
test_ops27 (test_indenter.test_ruby.Ops) ... ERROR
test_ops28 (test_indenter.test_ruby.Ops) ... ERROR
test_ops3 (test_indenter.test_ruby.Ops) ... ERROR
test_ops4 (test_indenter.test_ruby.Ops) ... ERROR
test_ops5 (test_indenter.test_ruby.Ops) ... ERROR
test_ops6 (test_indenter.test_ruby.Ops) ... ERROR
test_ops7 (test_indenter.test_ruby.Ops) ... ERROR
test_ops8 (test_indenter.test_ruby.Ops) ... ERROR
test_plist1 (test_indenter.test_ruby.Plist) ... ERROR
test_plist10 (test_indenter.test_ruby.Plist) ... ERROR
test_plist11 (test_indenter.test_ruby.Plist) ... ERROR
test_plist12 (test_indenter.test_ruby.Plist) ... ERROR
test_plist13 (test_indenter.test_ruby.Plist) ... ERROR
test_plist14 (test_indenter.test_ruby.Plist) ... ERROR
test_plist15 (test_indenter.test_ruby.Plist) ... ERROR
test_plist16 (test_indenter.test_ruby.Plist) ... ERROR
test_plist17 (test_indenter.test_ruby.Plist) ... ERROR
test_plist18 (test_indenter.test_ruby.Plist) ... ERROR
test_plist19 (test_indenter.test_ruby.Plist) ... ERROR
test_plist2 (test_indenter.test_ruby.Plist) ... ERROR
test_plist20 (test_indenter.test_ruby.Plist) ... ERROR
test_plist3 (test_indenter.test_ruby.Plist) ... ERROR
test_plist4 (test_indenter.test_ruby.Plist) ... ERROR
test_plist5 (test_indenter.test_ruby.Plist) ... ERROR
test_plist6 (test_indenter.test_ruby.Plist) ... ERROR
test_plist7 (test_indenter.test_ruby.Plist) ... ERROR
test_plist8 (test_indenter.test_ruby.Plist) ... ERROR
test_plist9 (test_indenter.test_ruby.Plist) ... ERROR
test_plist_comment1 (test_indenter.test_ruby.PlistComment) ... ERROR
test_plist_comment10 (test_indenter.test_ruby.PlistComment) ... ERROR
test_plist_comment2 (test_indenter.test_ruby.PlistComment) ... ERROR
test_plist_comment3 (test_indenter.test_ruby.PlistComment) ... ERROR
test_plist_comment4 (test_indenter.test_ruby.PlistComment) ... ERROR
test_plist_comment5 (test_indenter.test_ruby.PlistComment) ... ERROR
test_plist_comment6 (test_indenter.test_ruby.PlistComment) ... ERROR
test_plist_comment7 (test_indenter.test_ruby.PlistComment) ... ERROR
test_plist_comment8 (test_indenter.test_ruby.PlistComment) ... ERROR
test_plist_comment9 (test_indenter.test_ruby.PlistComment) ... ERROR
test_regexp1 (test_indenter.test_ruby.RegExp) ... ERROR
test_singleline01 (test_indenter.test_ruby.SingleLine) ... ERROR
test_singleline02 (test_indenter.test_ruby.SingleLine) ... ERROR
test_singleline03 (test_indenter.test_ruby.SingleLine) ... ERROR
test_singleline04 (test_indenter.test_ruby.SingleLine) ... ERROR
test_wordlist01 (test_indenter.test_ruby.WordList) ... ERROR
test_wordlist02 (test_indenter.test_ruby.WordList) ... ERROR
test_wordlist11 (test_indenter.test_ruby.WordList) ... ERROR
test_wordlist12 (test_indenter.test_ruby.WordList) ... ERROR
test_wordlist21 (test_indenter.test_ruby.WordList) ... ERROR
test_wordlist22 (test_indenter.test_ruby.WordList) ... ERROR
test_1 (test_indenter.test_scheme.Test) ... ok
test_2 (test_indenter.test_scheme.Test) ... ok
test_3 (test_indenter.test_scheme.Test) ... ok
test_4 (test_indenter.test_scheme.Test) ... ok
test_5 (test_indenter.test_scheme.Test) ... ok
test_6 (test_indenter.test_scheme.Test) ... ok
test_7 (test_indenter.test_scheme.Test) ... ok
test_8 (test_indenter.test_scheme.Test) ... ok
test_9 (test_indenter.test_scheme.Test) ... ok
test_1 (test_indenter.test_scheme.TestAutoindent) ... ok
test_2 (test_indenter.test_scheme.TestAutoindent) ... ok
test_3 (test_indenter.test_scheme.TestAutoindent) ... ok
test_4 (test_indenter.test_scheme.TestAutoindent) ... ok
test_5 (test_indenter.test_scheme.TestAutoindent) ... ok
test_6 (test_indenter.test_scheme.TestAutoindent) ... ok
test_7 (test_indenter.test_scheme.TestAutoindent) ... ok
test_8 (test_indenter.test_scheme.TestAutoindent) ... ok
test_align1 (test_indenter.test_xmlindent.Align) ... ok
test_align2 (test_indenter.test_xmlindent.Align) ... ok
test_align3 (test_indenter.test_xmlindent.Align) ... ok
test_align4 (test_indenter.test_xmlindent.Align) ... ok
test_align5 (test_indenter.test_xmlindent.Align) ... ok
test_enter1 (test_indenter.test_xmlindent.Enter)
zero indent for <?xml ... ok
test_enter2 (test_indenter.test_xmlindent.Enter)
zero indent for <!DOCTYPE ... ok
test_enter3 (test_indenter.test_xmlindent.Enter)
keep indent when prev line was a comment ... ok
test_enter4 (test_indenter.test_xmlindent.Enter)
keep indent when prev line closed a tag ... ok
test_enter5 (test_indenter.test_xmlindent.Enter)
increase indent when prev line opened a tag ... ok
test_grater2 (test_indenter.test_xmlindent.Greater)
keep indent when prev line opened a tag ... ok
test_greater1 (test_indenter.test_xmlindent.Greater)
closing tag, decrease indentation when previous didn't open a tag ... ok
test_greater3 (test_indenter.test_xmlindent.Greater)
zero indent for <?xml ... ok
test_greater4 (test_indenter.test_xmlindent.Greater)
zero indent for <!DOCTYPE ... ok
test_greater5 (test_indenter.test_xmlindent.Greater)
keep indent when prev line closed a tag or was a comment ... ok
test_greater6 (test_indenter.test_xmlindent.Greater)
keep indent when prev line closed a tag or was a comment ... ok
test_greater7 (test_indenter.test_xmlindent.Greater)
increase indent ... ok
test_slash1 (test_indenter.test_xmlindent.Slash) ... ok
test_slash2 (test_indenter.test_xmlindent.Slash)
Do not indent, if in text block ... ok
test_slash3 (test_indenter.test_xmlindent.Slash)
Do not indent, if previous line opens tag ... ok
test_slash4 (test_indenter.test_xmlindent.Slash) ... ok
test_split1 (test_indenter.test_xmlindent.Split) ... ok
test_split2 (test_indenter.test_xmlindent.Split) ... ok
test_split3 (test_indenter.test_xmlindent.Split) ... ok
test_split4 (test_indenter.test_xmlindent.Split) ... ok
test_basic (test_rectangular_selection.Test) ... Unsupported screen format: depth: 8, red_mask: 0, blue_mask: 0
Unsupported screen format: depth: 8, red_mask: 0, blue_mask: 0
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
Unsupported screen format: depth: 8, red_mask: 0, blue_mask: 0
ok
test_copy_paste (test_rectangular_selection.Test) ... Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
Unsupported screen format: depth: 8, red_mask: 0, blue_mask: 0
ok
test_copy_paste_utf8 (test_rectangular_selection.Test) ... Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
Unsupported screen format: depth: 8, red_mask: 0, blue_mask: 0
ok
test_cut (test_rectangular_selection.Test) ... Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
Unsupported screen format: depth: 8, red_mask: 0, blue_mask: 0
ok
test_cut_paste (test_rectangular_selection.Test) ... Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
Unsupported screen format: depth: 8, red_mask: 0, blue_mask: 0
ok
test_delete (test_rectangular_selection.Test) ... Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
Unsupported screen format: depth: 8, red_mask: 0, blue_mask: 0
ok
test_paste_new_lines (test_rectangular_selection.Test) ... Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
Unsupported screen format: depth: 8, red_mask: 0, blue_mask: 0
ok
test_paste_replace_rectangular_selection (test_rectangular_selection.Test) ... Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
Unsupported screen format: depth: 8, red_mask: 0, blue_mask: 0
ok
test_paste_replace_selection (test_rectangular_selection.Test) ... Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
Unsupported screen format: depth: 8, red_mask: 0, blue_mask: 0
ok
test_real_to_visible (test_rectangular_selection.Test) ... ok
test_reset_by_edit (test_rectangular_selection.Test) ... Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
Unsupported screen format: depth: 8, red_mask: 0, blue_mask: 0
ok
test_reset_by_move (test_rectangular_selection.Test) ... Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
Unsupported screen format: depth: 8, red_mask: 0, blue_mask: 0
ok
test_visible_to_real (test_rectangular_selection.Test) ... ok
test_warning (test_rectangular_selection.Test) ... Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
Unsupported screen format: depth: 8, red_mask: 0, blue_mask: 0
ok
test_with_tabs (test_rectangular_selection.Test) ... Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.
Unsupported screen format: depth: 8, red_mask: 0, blue_mask: 0
ok
test_RegExp (test_syntax.test_dynamic_substitution.TestCase) ... ok
test_StringDetect (test_syntax.test_dynamic_substitution.TestCase) ... ok
test_AnyChar (test_syntax.test_rules.Test) ... ok
test_Detect2Chars (test_syntax.test_rules.Test) ... ok
test_Detect2Chars_shell_escape (test_syntax.test_rules.Test)
Test escape characters processing in Detect2Chars rule ... ok
test_DetectChar (test_syntax.test_rules.Test) ... ok
test_DetectChar_dynamic (test_syntax.test_rules.Test)
DetectChar rule, dynamic=true ... ok
test_DetectChar_dynamic2 (test_syntax.test_rules.Test) ... ok
test_DetectIdentifier (test_syntax.test_rules.Test) ... ok
test_DetectSpaces (test_syntax.test_rules.Test) ... ok
test_Float (test_syntax.test_rules.Test) ... ok
test_HlCChar (test_syntax.test_rules.Test) ... ok
test_HlCHex (test_syntax.test_rules.Test) ... ok
test_HlCOct (test_syntax.test_rules.Test) ... ok
test_HlCStringChar (test_syntax.test_rules.Test) ... ok
test_IncludeRules (test_syntax.test_rules.Test) ... ok
test_IncludeRulesExternal (test_syntax.test_rules.Test) ... ok
test_Int (test_syntax.test_rules.Test) ... ok
test_LineContinue (test_syntax.test_rules.Test) ... ok
test_RangeDetect (test_syntax.test_rules.Test) ... ok
test_RegExpr (test_syntax.test_rules.Test) ... ok
test_RegExpr_caret (test_syntax.test_rules.Test) ... ok
test_RegExpr_slashB (test_syntax.test_rules.Test) ... ok
test_StringDetect (test_syntax.test_rules.Test) ... ok
test_StringDetect_first_non_space (test_syntax.test_rules.Test)
StringDetect with firstNonSpace=true ... When opening /builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/data/xml/d.xml:
ERROR
test_WordDetect (test_syntax.test_rules.Test) ... ok
test_dynamic_reg_exp (test_syntax.test_rules.Test)
RegExpr rule, dynamic=true ... When opening /builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/data/xml/ruby.xml:
ERROR
test_dynamic_string_detect (test_syntax.test_rules.Test)
StringDetect rule, dynamic=true ... ok
test_firstNonSpace (test_syntax.test_rules.Test) ... When opening /builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/data/xml/d.xml:
ERROR
test_jsp_keyword (test_syntax.test_rules.Test) ... ok
test_keyword (test_syntax.test_rules.Test) ... ok
test_keyword_insensitive (test_syntax.test_rules.Test)
Insensitive attribute for particular keyword ... ok
test_keyword_insensitive_syntax (test_syntax.test_rules.Test)
Insensitive attribute for whole syntax ... ok
test_keyword_weak_delimiter (test_syntax.test_rules.Test)
Test weakDeliminator attribute parsing and usage ... ok
test_lookahead (test_syntax.test_rules.Test) ... ok
test_mup_keyword (test_syntax.test_rules.Test)
Test for additionalDeliminator syntax attribute ... ok
test_parse_all_definitions (test_syntax.test_xml_definition_parsing.XmlParsingTestCase)
Parse all definitions ... When opening /builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/data/xml/gnuassembler.xml:
ERROR
test_02 (test_vim.CopyPaste)
Paste text with p ... ok
test_03 (test_vim.CopyPaste)
Paste lines with p ... ok
test_04 (test_vim.CopyPaste)
Paste lines with P ... ok
test_05 (test_vim.CopyPaste)
Yank line with yy ... ok
test_06 (test_vim.CopyPaste)
Yank until the end of line ... ok
test_08 (test_vim.CopyPaste)
Composite yank with y, paste with P ... ok
test_01a (test_vim.Del)
Delete with x ... ok
test_01b (test_vim.Del)
Delete with x. Use count ... ok
test_02 (test_vim.Del)
Composite delete with d. Left and right ... ok
test_03 (test_vim.Del)
Composite delete with d. Down ... ok
test_04 (test_vim.Del)
Composite delete with d. Up ... ok
test_05 (test_vim.Del)
Delete Count times ... ok
test_06 (test_vim.Del)
Delete line ... ok
test_07 (test_vim.Del)
Delete until end of file ... ok
test_08 (test_vim.Del)
Delete until start of file ... ok
test_09 (test_vim.Del)
Delete with X ... ok
test_10 (test_vim.Del)
Delete with D ... ok
test_01 (test_vim.Edit)
Undo ... ok
test_02 (test_vim.Edit)
Change with C ... ok
test_03 (test_vim.Edit)
Substitute with s ... ok
test_04 (test_vim.Edit)
Replace char with r ... ok
test_05 (test_vim.Edit)
Change 2 words with c ... ok
test_06 (test_vim.Edit)
Open new line with o ... ok
test_07 (test_vim.Edit)
Open new line with O ... ok
test_08 (test_vim.Edit)
Substitute with S ... ok
test_09 (test_vim.Edit)
% to jump to next braket ... ok
test_10 (test_vim.Edit)
J join lines ... ok
test_01 (test_vim.Indent)
Increase indent with >j, decrease with <j ... ok
test_02 (test_vim.Indent)
Increase indent with >>, decrease with << ... ok
test_03 (test_vim.Indent)
Autoindent with =j ... ok
test_04 (test_vim.Indent)
Autoindent with == ... ok
test_11 (test_vim.Indent)
Increase indent with >, decrease with < in visual mode ... ok
test_12 (test_vim.Indent)
Autoindent with = in visual mode ... ok
test_01 (test_vim.Modes)
Switch modes insert/normal ... ok
test_02 (test_vim.Modes)
Append with A ... ok
test_03 (test_vim.Modes)
Append with a ... ok
test_04 (test_vim.Modes)
Mode line shows composite command start ... ok
test_05 (test_vim.Modes)
Replace mode ... ok
test_06 (test_vim.Modes)
Visual mode ... ok
test_07 (test_vim.Modes)
Switch to visual on selection ... ok
test_08 (test_vim.Modes)
From VISUAL to VISUAL LINES ... ok
test_09 (test_vim.Modes)
From VISUAL LINES to VISUAL ... ok
test_10 (test_vim.Modes)
Insert mode with I ... ok
test_01 (test_vim.Move)
Move hjkl ... ok
test_02 (test_vim.Move)
w ... ok
test_03 (test_vim.Move)
e ... ok
test_04 (test_vim.Move)
$ ... ok
test_05 (test_vim.Move)
0 ... ok
test_06 (test_vim.Move)
G ... ok
test_07 (test_vim.Move)
gg ... ok
test_08 (test_vim.Move)
b word back ... ok
test_09 (test_vim.Move)
% to jump to next braket ... ok
test_10 (test_vim.Move)
^ to jump to the first non-space char ... ok
test_11 (test_vim.Move)
f to search forward ... ok
test_12 (test_vim.Move)
F to search backward ... ok
test_13 (test_vim.Move)
t to search forward ... ok
test_14 (test_vim.Move)
T to search backward ... ok
test_15 (test_vim.Move)
f in a composite command ... ok
test_16 (test_vim.Move)
E ... ok
test_17 (test_vim.Move)
W ... ok
test_18 (test_vim.Move)
B ... ok
test_19 (test_vim.Move)
Enter, Return ... ok
test_01 (test_vim.Repeat)
Repeat o ... ok
test_02 (test_vim.Repeat)
Repeat o. Use count from previous command ... ok
test_03 (test_vim.Repeat)
Repeat O ... ok
test_04 (test_vim.Repeat)
Repeat p ... ok
test_05 (test_vim.Repeat)
Repeat p ... ok
test_06 (test_vim.Repeat)
Repeat D ... ok
test_07 (test_vim.Repeat)
Repeat dw ... ok
test_08 (test_vim.Repeat)
Repeat Visual x ... ok
test_09 (test_vim.Repeat)
Repeat visual X ... ok
test_10 (test_vim.Repeat)
Repeat Visual > ... ok
test_01 (test_vim.Visual)
x ... ok
test_02 (test_vim.Visual)
Append with a ... ok
test_03 (test_vim.Visual)
Replace with r ... ok
test_04 (test_vim.Visual)
Replace selected lines with R ... ok
test_05 (test_vim.Visual)
Reset selection with u ... ok
test_06 (test_vim.Visual)
Yank with y and paste with p ... ok
test_07 (test_vim.Visual)
Replace word when pasting ... ok
test_08 (test_vim.Visual)
Change with c ... ok
test_09 (test_vim.Visual)
Delete lines with X and D ... ok
test_10 (test_vim.Visual)
Check if f works ... ok
test_11 (test_vim.Visual)
J join lines ... ok
test_01 (test_vim.VisualLines)
x Delete ... ok
test_02 (test_vim.VisualLines)
Replace text when pasting ... ok
test_06 (test_vim.VisualLines)
Yank with y and paste with p ... ok
test_07 (test_vim.VisualLines)
Change with c ... ok
======================================================================
ERROR: test_block_comment (test_api.IsCodeOrComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_api.py", line 148, in test_block_comment
    self.qpart.detectSyntax(language = 'Ruby')
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 689, in detectSyntax
    firstLine=firstLine)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/__init__.py", line 243, in getSyntax
    syntax = self._getSyntaxByLanguageName(languageName, formatConverterFunction)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/__init__.py", line 188, in _getSyntaxByLanguageName
    return self._getSyntaxByXmlFileName(xmlFileName, formatConverterFunction)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/__init__.py", line 180, in _getSyntaxByXmlFileName
    qutepart.syntax.loader.loadSyntax(syntax, xmlFilePath, formatConverterFunction)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/loader.py", line 541, in loadSyntax
    root = xml.etree.ElementTree.parse(definitionFile).getroot()
  File "/usr/lib64/python3.5/xml/etree/ElementTree.py", line 1183, in parse
    tree.parse(source, parser)
  File "/usr/lib64/python3.5/xml/etree/ElementTree.py", line 594, in parse
    self._root = parser._parse_whole(source)
  File "/usr/lib64/python3.5/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 381: ordinal not in range(128)
======================================================================
ERROR: test_here_doc (test_api.IsCodeOrComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_api.py", line 157, in test_here_doc
    self.qpart.detectSyntax(language = 'Ruby')
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array1 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array10 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array11 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array12 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array16 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array17 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array18 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array19 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array2 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array20 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array21 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array22 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array3 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array4 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array5 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array6 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array7 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array8 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array9 (test_indenter.test_ruby.Array)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array_comment1 (test_indenter.test_ruby.ArrayComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array_comment2 (test_indenter.test_ruby.ArrayComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array_comment3 (test_indenter.test_ruby.ArrayComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array_comment4 (test_indenter.test_ruby.ArrayComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_array_comment5 (test_indenter.test_ruby.ArrayComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_basic1 (test_indenter.test_ruby.Basic)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_basic2 (test_indenter.test_ruby.Basic)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_basic3 (test_indenter.test_ruby.Basic)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_basic4 (test_indenter.test_ruby.Basic)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_block01 (test_indenter.test_ruby.Block)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_block02 (test_indenter.test_ruby.Block)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_block_comment1 (test_indenter.test_ruby.BlockComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_block_comment2 (test_indenter.test_ruby.BlockComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_block_comment3 (test_indenter.test_ruby.BlockComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_block_comment4 (test_indenter.test_ruby.BlockComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_block_comment5 (test_indenter.test_ruby.BlockComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_block_comment6 (test_indenter.test_ruby.BlockComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_block_comment7 (test_indenter.test_ruby.BlockComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_block_comment8 (test_indenter.test_ruby.BlockComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_comment1 (test_indenter.test_ruby.Comment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_comment2 (test_indenter.test_ruby.Comment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_comment3 (test_indenter.test_ruby.Comment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_comment4 (test_indenter.test_ruby.Comment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_comment5 (test_indenter.test_ruby.Comment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_comment6 (test_indenter.test_ruby.Comment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_do1 (test_indenter.test_ruby.Do)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_do2 (test_indenter.test_ruby.Do)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_do3 (test_indenter.test_ruby.Do)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_do4 (test_indenter.test_ruby.Do)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_do5 (test_indenter.test_ruby.Do)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_do6 (test_indenter.test_ruby.Do)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_do7 (test_indenter.test_ruby.Do)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_empty_file1 (test_indenter.test_ruby.EmptyFile)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash1 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash10 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash11 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash12 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash16 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash17 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash18 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash19 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash2 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash20 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash21 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash22 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash3 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash4 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash5 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash6 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash7 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash8 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_hash9 (test_indenter.test_ruby.Hash)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_heredoc1 (test_indenter.test_ruby.Heredoc)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_heredoc2 (test_indenter.test_ruby.Heredoc)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_heredoc3 (test_indenter.test_ruby.Heredoc)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_heredoc4 (test_indenter.test_ruby.Heredoc)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_heredoc5 (test_indenter.test_ruby.Heredoc)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_heredoc6 (test_indenter.test_ruby.Heredoc)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_if10 (test_indenter.test_ruby.If)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_if11 (test_indenter.test_ruby.If)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_if20 (test_indenter.test_ruby.If)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_if21 (test_indenter.test_ruby.If)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_if22 (test_indenter.test_ruby.If)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_if30 (test_indenter.test_ruby.If)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_if31 (test_indenter.test_ruby.If)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_multiline1 (test_indenter.test_ruby.Multiline)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_multiline10 (test_indenter.test_ruby.Multiline)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_multiline2 (test_indenter.test_ruby.Multiline)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_multiline3 (test_indenter.test_ruby.Multiline)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_multiline4 (test_indenter.test_ruby.Multiline)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_multiline5 (test_indenter.test_ruby.Multiline)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_multiline6 (test_indenter.test_ruby.Multiline)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_multiline7 (test_indenter.test_ruby.Multiline)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_multiline8 (test_indenter.test_ruby.Multiline)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_multiline9 (test_indenter.test_ruby.Multiline)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_no_do1 (test_indenter.test_ruby.NoDo)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_no_do2 (test_indenter.test_ruby.NoDo)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_no_do3 (test_indenter.test_ruby.NoDo)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_no_do4 (test_indenter.test_ruby.NoDo)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops1 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops11 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops12 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops13 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops14 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops15 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops16 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops17 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops18 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops2 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops21 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops22 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops23 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops24 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops25 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops26 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops27 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops28 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops3 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops4 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops5 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops6 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops7 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_ops8 (test_indenter.test_ruby.Ops)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist1 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist10 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist11 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist12 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist13 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist14 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist15 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist16 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist17 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist18 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist19 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist2 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist20 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist3 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist4 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist5 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist6 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist7 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist8 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist9 (test_indenter.test_ruby.Plist)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist_comment1 (test_indenter.test_ruby.PlistComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist_comment10 (test_indenter.test_ruby.PlistComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist_comment2 (test_indenter.test_ruby.PlistComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist_comment3 (test_indenter.test_ruby.PlistComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist_comment4 (test_indenter.test_ruby.PlistComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist_comment5 (test_indenter.test_ruby.PlistComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist_comment6 (test_indenter.test_ruby.PlistComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist_comment7 (test_indenter.test_ruby.PlistComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist_comment8 (test_indenter.test_ruby.PlistComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_plist_comment9 (test_indenter.test_ruby.PlistComment)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_regexp1 (test_indenter.test_ruby.RegExp)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_singleline01 (test_indenter.test_ruby.SingleLine)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_singleline02 (test_indenter.test_ruby.SingleLine)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_singleline03 (test_indenter.test_ruby.SingleLine)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_singleline04 (test_indenter.test_ruby.SingleLine)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_wordlist01 (test_indenter.test_ruby.WordList)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_wordlist02 (test_indenter.test_ruby.WordList)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_wordlist11 (test_indenter.test_ruby.WordList)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_wordlist12 (test_indenter.test_ruby.WordList)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_wordlist21 (test_indenter.test_ruby.WordList)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_wordlist22 (test_indenter.test_ruby.WordList)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_indenter/indenttest.py", line 60, in setUp
    self.qpart.detectSyntax(language = self.LANGUAGE)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/__init__.py", line 693, in detectSyntax
    self._indenter.setSyntax(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 71, in setSyntax
    self._smartIndenter = self._chooseSmartIndenter(syntax)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/indenter/__init__.py", line 219, in _chooseSmartIndenter
    if syntax.indenter is not None:
AttributeError: 'Syntax' object has no attribute 'indenter'
======================================================================
ERROR: test_StringDetect_first_non_space (test_syntax.test_rules.Test)
StringDetect with firstNonSpace=true
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_syntax/test_rules.py", line 88, in test_StringDetect_first_non_space
    rule = self._getRule('d.xml', 'normal', 9)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_syntax/test_rules.py", line 38, in _getRule
    _currentSyntax = SyntaxManager().getSyntax(xmlFileName=syntaxName)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/__init__.py", line 231, in getSyntax
    syntax = self._getSyntaxByXmlFileName(xmlFileName, formatConverterFunction)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/__init__.py", line 180, in _getSyntaxByXmlFileName
    qutepart.syntax.loader.loadSyntax(syntax, xmlFilePath, formatConverterFunction)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/loader.py", line 541, in loadSyntax
    root = xml.etree.ElementTree.parse(definitionFile).getroot()
  File "/usr/lib64/python3.5/xml/etree/ElementTree.py", line 1183, in parse
    tree.parse(source, parser)
  File "/usr/lib64/python3.5/xml/etree/ElementTree.py", line 594, in parse
    self._root = parser._parse_whole(source)
  File "/usr/lib64/python3.5/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 360: ordinal not in range(128)
======================================================================
ERROR: test_dynamic_reg_exp (test_syntax.test_rules.Test)
RegExpr rule, dynamic=true
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_syntax/test_rules.py", line 292, in test_dynamic_reg_exp
    rule = self._getRule("ruby.xml", "gdl_dq_string_5", 2)  # "\s*%1"
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_syntax/test_rules.py", line 38, in _getRule
    _currentSyntax = SyntaxManager().getSyntax(xmlFileName=syntaxName)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/__init__.py", line 231, in getSyntax
    syntax = self._getSyntaxByXmlFileName(xmlFileName, formatConverterFunction)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/__init__.py", line 180, in _getSyntaxByXmlFileName
    qutepart.syntax.loader.loadSyntax(syntax, xmlFilePath, formatConverterFunction)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/loader.py", line 541, in loadSyntax
    root = xml.etree.ElementTree.parse(definitionFile).getroot()
  File "/usr/lib64/python3.5/xml/etree/ElementTree.py", line 1183, in parse
    tree.parse(source, parser)
  File "/usr/lib64/python3.5/xml/etree/ElementTree.py", line 594, in parse
    self._root = parser._parse_whole(source)
  File "/usr/lib64/python3.5/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 381: ordinal not in range(128)
======================================================================
ERROR: test_firstNonSpace (test_syntax.test_rules.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_syntax/test_rules.py", line 284, in test_firstNonSpace
    rule = self._getRule("d.xml", "DdocBlock", 3)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_syntax/test_rules.py", line 38, in _getRule
    _currentSyntax = SyntaxManager().getSyntax(xmlFileName=syntaxName)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/__init__.py", line 231, in getSyntax
    syntax = self._getSyntaxByXmlFileName(xmlFileName, formatConverterFunction)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/__init__.py", line 180, in _getSyntaxByXmlFileName
    qutepart.syntax.loader.loadSyntax(syntax, xmlFilePath, formatConverterFunction)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/loader.py", line 541, in loadSyntax
    root = xml.etree.ElementTree.parse(definitionFile).getroot()
  File "/usr/lib64/python3.5/xml/etree/ElementTree.py", line 1183, in parse
    tree.parse(source, parser)
  File "/usr/lib64/python3.5/xml/etree/ElementTree.py", line 594, in parse
    self._root = parser._parse_whole(source)
  File "/usr/lib64/python3.5/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 360: ordinal not in range(128)
======================================================================
ERROR: test_parse_all_definitions (test_syntax.test_xml_definition_parsing.XmlParsingTestCase)
Parse all definitions
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/tests/test_syntax/test_xml_definition_parsing.py", line 25, in test_parse_all_definitions
    syntax = SyntaxManager().getSyntax(None, xmlFileName = xmlFileName)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/__init__.py", line 231, in getSyntax
    syntax = self._getSyntaxByXmlFileName(xmlFileName, formatConverterFunction)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/__init__.py", line 180, in _getSyntaxByXmlFileName
    qutepart.syntax.loader.loadSyntax(syntax, xmlFilePath, formatConverterFunction)
  File "/builddir/build/BUILD/qutepart-2.2.2/python3/qutepart/syntax/loader.py", line 541, in loadSyntax
    root = xml.etree.ElementTree.parse(definitionFile).getroot()
  File "/usr/lib64/python3.5/xml/etree/ElementTree.py", line 1183, in parse
    tree.parse(source, parser)
  File "/usr/lib64/python3.5/xml/etree/ElementTree.py", line 594, in parse
    self._root = parser._parse_whole(source)
  File "/usr/lib64/python3.5/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 554: ordinal not in range(128)
----------------------------------------------------------------------
Ran 576 tests in 9.294s
FAILED (errors=169, skipped=6)

Further enhancement of completer.py

Back to (My)SQL, another auto-complete possibility: when you have typed in a table name, followed by a dot, pop-up a list of table columns, narrow the list as more characters are typed.

In this case, the word pattern is "\w+[.]?\w*", and if the captured word-before-cursor contains the dot character:

            # krc: ParentChildDict
            if (('.' in wordBeforeCursor) and 
                (len(wordBeforeCursor.split('.')[0]) >= 2) and 
                (len(wordBeforeCursor.split('.')[1]) >= 0)):
                if ((self._parentChildDict is not None) and
                    (wordBeforeCursor.split('.')[0] in self._parentChildDict)):
                    child_set = self._parentChildDict[wordBeforeCursor.split('.')[0]]
                    if self._widget is None:
                        model = _CompletionModel(child_set)
                        model.setData(wordBeforeCursor.split('.')[1], wholeWord)
                        if model.hasWords():
                            self._widget = _CompletionList(self._qpart, model)
                            self._widget.closeMe.connect(self._closeCompletion)
                            self._widget.itemSelected.connect(self._onCompletionListItemSelected)
                            self._widget.tabPressed.connect(self._onCompletionListTabPressed)
                            return True
                    else:
                        self._widget.model().setData(wordBeforeCursor.split('.')[1], wholeWord)
                        if self._widget.model().hasWords():
                            self._widget.updateGeometry()
                            return True

the table_name (parent) part before the dot is used to look up the set of possible column_name children, further narrowed by the (child) part after the dot, to display as the current popup list.

The parent-child-dictionary is constructed like so:

        self._parentChildDict = {}
        for parent, child_list in ParentChildDict.items():
            child_set = set()
            for child in child_list:
                child_set.add(child)
            self._parentChildDict[parent] = child_set

        # krc: Detect end of 'identifier' OR 'identifier.'
        self._wordPattern = "\w+[.]?\w*"
        self._wordRegExp = re.compile(self._wordPattern)
        self._wordAtEndRegExp = re.compile(self._wordPattern + '$')
        self._wordAtStartRegExp = re.compile('^' + self._wordPattern)

and the event filter is modified like so:

    def eventFilter(self, object, event):
        """Catch events from qpart. Show completion if necessary
        """
        if event.type() == QEvent.KeyRelease:
            text = event.text()
            textTyped = (event.modifiers() in (Qt.NoModifier, Qt.ShiftModifier)) and \
                        (text.isalpha() or text.isdigit() or (text == '_') or
                         ((text == '.') and (self._parentChildDict is not None)))

            if textTyped or \
            (event.key() == Qt.Key_Backspace and self._widget is not None):
                self._invokeCompletionIfAvailable()
                return False

        return False

and the possible match machinery is modified:

    def _makeListOfCompletions(self, wordBeforeCursor, wholeWord):
        """Make list of completions, which shall be shown
        """
        # krc: WordList, ParentChildDict
        lc_word_before_cursor = wordBeforeCursor.lower()
        onlySuitable = [word for word in self._wordSet 
                        # krc: WordList
                        if ((len(lc_word_before_cursor) == 0) or
                            (word.lower().startswith(lc_word_before_cursor) and 
                             (word != wholeWord)))]

        return sorted(onlySuitable)

so that a list of all possible children is displayed as soon as the dot is typed and narrowed as child characters are typed.

The _wordPattern and dependent compiled RegExes are moved into the Completer class so that different Completer instances can be configured differently.

Odd code that goes to a LOT of trouble to do something simple

One thing I don't understand is why your code reacts differently if you press [Tab] on a single item completion list versus clicking on that single item with mouse. [Tab] only works with a single item on the completion list, so it must be as definitive as click-select.

You have this:

    def _onCompletionListTabPressed(self):
        """Tab pressed on completion list
        Insert completable text, if available
        """
        canCompleteText = self._widget.model().canCompleteText
        if canCompleteText:
            self._qpart.textCursor().insertText(canCompleteText)
            self._invokeCompletionIfAvailable()

The following code appears to be equivalent, at least I can't think of any counter example:

    def _onCompletionListTabPressed(self):
        """Tab pressed on completion list
        Insert completable text, if available
        """
        canCompleteText = self._widget.model().canCompleteText
        if canCompleteText:
            self._qpart.textCursor().insertText(canCompleteText)
            self._closeCompletion()

It's simpler, more efficient, and works exactly like the click-select code above it to accomplish exactly the same task (in def _onCompletionListItemSelected).

Memory leaks in cParser

@SergeySatskiy , I hope you don't mind if I publish the mail here.

(Russinan)

Для анализа я инструментировал код с помощью guppy. Идея была простая:
- инициализация
- установка reference point для кучи, доступ к которой предоставляет guppy
- выполнение одного и того же действия несколько раз (здесь я привожу данные для открытия вкладки с пустым питон файлом и ее закрытие 5 раз)
- запуск отладчика и просмотр кучи

guppy предоставляет вызов heapu() - далее в переменной unreachable - где скорее всего оседают не освобожденные данные от модулей расширения, написанных на C.
В моем эксперименте данные копились в процессе работы, поэтому я сделал два эксперимента: один с C парсером синтаксиса, а второй с питон парсером из пакета qutepart. Для включения питон парсера потребовалось прямое изменение в loader.py, благо код в виртуальном окружении.

Результат запуска с C парсером:

(Pdb) p unreachable
Data from unreachable objects relative to: Fri Feb 14 10:33:19 2020.
Summary of difference operation (A-B).
        Count     Size
  A      2616   388639
  B      1817   287452
  A-B     799   101187  =      35.2 % of B

Differences by kind, largest absolute size diffs first.
 Index  Count     Size  Cumulative  % of B Type
     0     20    41760     41760      14.5 qutepart.syntax.cParser.keyword
     1    371    21475     63235        22 str
     2    158    17696     80931      28.2 PyQt5.QtGui.QTextCharFormat
     3     80    10744     91675      31.9 list
     4     37     2960     94635      32.9 qutepart.syntax.cParser.RegExpr
     5     45     1800     96435      33.5 qutepart.syntax.cParser.IncludeRules
     6     23     1104     97539      33.9 qutepart.syntax.cParser.DetectChar
     7      3      976     98515      34.3 dict
     8     17      816     99331      34.6 qutepart.syntax.cParser.StringDetect
     9      7      560     99891      34.8 builtins.weakref

Здесь видно, что есть порядком данных в unreachable части.


Результат запуска с питон парсером:  

(Pdb) p unreachable
Data from unreachable objects relative to: Fri Feb 14 10:31:45 2020.
Summary of difference operation (A-B).
        Count     Size
  A      1854   290452
  B      1821   287756
  A-B      33     2696  =     0.937 % of B

Differences by kind, largest absolute size diffs first.
 Index  Count     Size  Cumulative  % of B Type
     0     30     2432      2432     0.845 list
     1      5      400      2832     0.984 builtins.weakref
     2     -1      -80      2752     0.956 builtins.dict_keyiterator
     3     -1      -56      2696     0.937 builtins.list_iterator

Здесь гораздо лучше!
Выглядит так, как если в C парсере есть утечки памяти.

there are also andreikop/enki#436 by @vi, which might be related

PySide Support

Your documentation states this control is for PyQt and Pyside, but I'm not seeing how this would work with PySide.

#34 mentions there is a PySide branch, but I'm not seeing it. Has the PySide branch been discontinued?

Thanks!

Qutepart Installation Bug Report 2

Qutepart Installation Bug Report

On Windows 8.1, using Python 3.4.4 from the WinPython distribution, the following error occured while attempting to run setup.py. Upon further investigation, it was discovered that if a --force command was included in the setup command, it would install correctly.

This pull request therefore avoids a call _checkDependencies for Windows, achieving the same result as using --force.

Output From Error:

C:\Users\Alden\Documents\GitHub\qutepart>python setup.py install --include-dir=.
./pcre-8.38/build --lib-dir=../pcre-8.38/build/Release
rand17owxxqo.c

Users\Alden\AppData\Local\Temp\a.out.exe.manifest : general error c1010070: Fail
ed to load and parse the manifest. The system cannot find the file specified.
It seems like C compiler is not installed or not operable.

Windows unit test failures

WinPython 32-bit 3.4.3.7Qt5, run_all.py, Windows 8.1 64-bit
Using python parser not C parser
Revision ac6650d

======================================================================
FAIL: test_RegExpr (test_syntax.test_rules.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\Grant\Documents\CodeChat\software\qutepart\tests\test_syntax\te
st_rules.py", line 159, in test_RegExpr
    self.assertEqual(rule.regExp.pattern, "[A-Z][A-Za-z\xc0-\xd6\xd8-\xf6\xf8-\x
ff0-9_']*")
AssertionError: "[A-Z][A-Za-z\\300-\\326\\330-\\366\\370-\\3770-9_']*" != "[A-Z]
[A-Za-z\xc0-Ö\xd8-ö\xf8-ÿ0-9_']*"
- [A-Z][A-Za-z\300-\326\330-\366\370-\3770-9_']*
+ [A-Z][A-Za-z\xc0-Ö\xd8-ö\xf8-ÿ0-9_']*


======================================================================
FAIL: test_keyword (test_syntax.test_rules.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\Grant\Documents\CodeChat\software\qutepart\tests\test_syntax\te
st_rules.py", line 109, in test_keyword
    self.assertEqual(tryMatch(rule, 0, "var"), 3)
AssertionError: None != 3

----------------------------------------------------------------------
Ran 594 tests in 77.355s

FAILED (failures=2, skipped=8, expected failures=15)

C:\Users\Grant\Documents\CodeChat\software\qutepart\tests>

Unit test failure

======================================================================
FAIL: test_with_tabs (test_rectangular_selection.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\bjones\Documents\enki_all\qutepart\tests\test_rectangular_selection.py", line 103, in test_with_tabs
    self.assertEqual(self.qpart.text, 'abcdefhh\n\tkl\n\t\tz')
AssertionError: u'abcdefh\n\tkl\n\t\t' != 'abcdefhh\n\tkl\n\t\tz'

----------------------------------------------------------------------

Line selection / indentation interaction

I sometimes want to select a few lines and tab / untab them. To do so, I'm used to moving to the beginning of a line, pressing shift+down arrow a few times, then hitting tab. However, this indents one extra line for me, the line the cursor is on; I'm used to not having that line indented, since it's not marked as being highlighted. (This is how most editors I use, e.g. MSVC++, Spyder, etc. work). Could this be changed / added to qutepart?

Unit test crash

On Windows, Py 3.4, Qt 5.5, 8f431f0, when running python -m unittest -v test_syntax.test_rules.Test.test_dynamic_string_detect and using the C parser, Python crashes. It's fine with the Python parser.

I think this has been present for a while -- I remember that in the past, all tests passed before I ran python setup.py install ..., then they would crash until I deleted cPython.pyd. But for some reason I didn't pay much attention...

Inproper code highlighting

The following text cannot be rendered correctly because of the :math: keyword:

test :math:`y = a*x + b < 1` after test

"after text" should not be colored nor bold.

Compile Error On Windows 8.1 Using gcc

Qutepart Installation Bug Report

On Windows 8.1, using Python 3.4.4 from the WinPython distribution, the following error occurred while attempting to run setup.py. This error occured because both the gcc and msvc compiler were installed, and the gcc compiler was selected rather than the msvc compiler.

The solution to this bug was to create a file named setup.cfg (Setup Configuration file) containing the lines:

[build_ext]
compiler=msvc

For more information regarding setup.cfg and the various availiable command line options, click here.

Output From Error:

C:\Users\Alden\Documents\GitHub\qutepart>python setup.py install --include-dir=.
./pcre-8.38/build --lib-dir=../pcre-8.38/build/Release --force 
running install
running bdist_egg
running egg_info
writing top-level names to qutepart.egg-info\top_level.txt
writing dependency_links to qutepart.egg-info\dependency_links.txt
writing qutepart.egg-info\PKG-INFO
reading manifest file 'qutepart.egg-info\SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'qutepart.egg-info\SOURCES.txt'
installing library code to build\bdist.win32\egg
running install_lib
running build_py
running build_ext
building 'qutepart.syntax.cParser' extension
C:\Users\Alden\Downloads\WinPython-32bit-3.4.4.2Qt5\scripts\..\python-3.4.4\Scri
pts\gcc.exe -mdll -O -Wall -DHAVE_PCRE_CONFIG_H -I../pcre-8.38/build -IC:\Users\
Alden\Downloads\WinPython-32bit-3.4.4.2Qt5\python-3.4.4\include -IC:\Users\Alden
\Downloads\WinPython-32bit-3.4.4.2Qt5\python-3.4.4\include -c qutepart/syntax/cP
arser.c -o build\temp.win32-3.4\Release\qutepart\syntax\cparser.o
In file included from qutepart/syntax/cParser.c:25:0:
../pcre-8.38/build/config.h:16:0: warning: "HAVE_STRERROR" redefined
 #define HAVE_STRERROR 1
 ^
In file included from C:\Users\Alden\Downloads\WinPython-32bit-3.4.4.2Qt5\python
-3.4.4\include/Python.h:8:0,
                 from qutepart/syntax/cParser.c:7:
C:\Users\Alden\Downloads\WinPython-32bit-3.4.4.2Qt5\python-3.4.4\include/pyconfi
g.h:64:0: note: this is the location of the previous definition
 #define HAVE_STRERROR
 ^
qutepart/syntax/cParser.c: In function 'Context_parseBlock':
qutepart/syntax/cParser.c:2818:17: warning: unknown conversion type character 'z
' in format [-Wformat=]
                 fprintf(stderr, ": matched rule %zu at %zu\n", i, currentColumn
Index);
                 ^
qutepart/syntax/cParser.c:2818:17: warning: unknown conversion type character 'z
' in format [-Wformat=]
qutepart/syntax/cParser.c:2818:17: warning: too many arguments for format [-Wfor
mat-extra-args]
writing build\temp.win32-3.4\Release\qutepart\syntax\cParser.def
C:\Users\Alden\Downloads\WinPython-32bit-3.4.4.2Qt5\scripts\..\python-3.4.4\Scri
pts\gcc.exe -shared -s build\temp.win32-3.4\Release\qutepart\syntax\cparser.o bu
ild\temp.win32-3.4\Release\qutepart\syntax\cParser.def -L../pcre-8.38/build/Rele
ase -LC:\Users\Alden\Downloads\WinPython-32bit-3.4.4.2Qt5\scripts\..\python-3.4.
4\libs -LC:\Users\Alden\Downloads\WinPython-32bit-3.4.4.2Qt5\scripts\..\python-3
.4.4\PCbuild -lpcre -lpython34 -lmsvcr100 -o build\lib.win32-3.4\qutepart\syntax
\cParser.pyd
Warning: corrupt .drectve at end of def file
Warning: corrupt .drectve at end of def file
Warning: corrupt .drectve at end of def file
Warning: corrupt .drectve at end of def file
Warning: corrupt .drectve at end of def file
Warning: corrupt .drectve at end of def file
Warning: corrupt .drectve at end of def file
Warning: corrupt .drectve at end of def file
Warning: corrupt .drectve at end of def file
Warning: corrupt .drectve at end of def file
Warning: corrupt .drectve at end of def file
Warning: corrupt .drectve at end of def file
Warning: corrupt .drectve at end of def file
Warning: corrupt .drectve at end of def file
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_study.obj):(.text[_set
_type_bits]+0x83): undefined reference to `@__security_check_cookie@4'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_study.obj):(.text[_set
_start_bits]+0x656): undefined reference to `@__security_check_cookie@4'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_study.obj):(.text[_set
_start_bits]+0x66c): undefined reference to `@__security_check_cookie@4'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_study.obj):(.text[_set
_start_bits]+0x682): undefined reference to `@__security_check_cookie@4'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_study.obj):(.text[_set
_start_bits]+0x696): undefined reference to `@__security_check_cookie@4'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_study.obj):(.text[_pcr
e_study]+0x63): more undefined references to `@__security_check_cookie@4' follow

../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_jit_compile.obj):(.tex
t[@sljit_grow_stack@4]+0x11): undefined reference to `_alloca_probe_16'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_jit_compile.obj):(.tex
t[@sljit_grow_stack@4]+0x26): undefined reference to `@__security_check_cookie@4
'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_jit_compile.obj):(.tex
t[_scan_prefix]+0x593): undefined reference to `@__security_check_cookie@4'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_jit_compile.obj):(.tex
t[_scan_prefix]+0x5a7): undefined reference to `@__security_check_cookie@4'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_jit_compile.obj):(.tex
t[_fast_forward_first_n_chars]+0xa9): undefined reference to `@__security_check_
cookie@4'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_jit_compile.obj):(.tex
t[_fast_forward_first_n_chars]+0x269): undefined reference to `@__security_check
_cookie@4'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_jit_compile.obj):(.tex
t[_fast_forward_first_n_chars]+0x78e): more undefined references to `@__security
_check_cookie@4' follow
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_jit_compile.obj):(.tex
t[_jit_machine_stack_exec]+0x9): undefined reference to `_chkstk'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_jit_compile.obj):(.tex
t[_jit_machine_stack_exec]+0x4b): undefined reference to `@__security_check_cook
ie@4'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_exec.obj):(.text[_matc
h]+0x64): undefined reference to `@__security_check_cookie@4'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_exec.obj):(.text[_matc
h]+0x7c): undefined reference to `@__security_check_cookie@4'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_exec.obj):(.text[_matc
h]+0x65c): undefined reference to `@__security_check_cookie@4'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_exec.obj):(.text[_matc
h]+0xd3e): undefined reference to `@__security_check_cookie@4'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_exec.obj):(.text[_matc
h]+0x180d): more undefined references to `@__security_check_cookie@4' follow
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_compile.obj):(.text[_p
cre_compile2]+0x9): undefined reference to `_chkstk'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_compile.obj):(.text[_p
cre_compile2]+0x8b): undefined reference to `@__security_check_cookie@4'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_compile.obj):(.text[_p
cre_compile2]+0xbf0): undefined reference to `@__security_check_cookie@4'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_compile.obj):(.text[_p
cre_compile2]+0xd0d): undefined reference to `@__security_check_cookie@4'
../pcre-8.38/build/Release/pcre.lib(pcre.dir/Release/pcre_compile.obj):(.text[_p
cre_compile2]+0xd59): undefined reference to `@__security_check_cookie@4'
collect2.exe: error: ld returned 1 exit status
error: command 'C:\\Users\\Alden\\Downloads\\WinPython-32bit-3.4.4.2Qt5\\scripts
\\..\\python-3.4.4\\Scripts\\gcc.exe' failed with exit status 1

Calling setLineWrapMode does not update the side area

When you call setLineWrapMode(mode) (e.g., via a checkable QAction), the side area (line numbers, ...) is not updated. It is only updated when you resize the window or when you call update() manually:

class Editor(Qutepart)
    ...

    def set_word_wrap(self, do_wrap):
        mode = self.WidgetWidth if do_wrap else self.NoWrap
        self.setLineWrapMode(mode)
        self.update()  # Force side area to update itself

Change indent with space shortcut

I was about to change the shortcut, but found, that Shift+Backspace is used to Unindent by 1 space.
Current map:

  • Shift+Space - indent with 1 space
  • Shift+Backspace - Unindent with 1 space
  • Ctrl+Backspace - Delete word back.

If we use Ctrl+Shift to indent, the keyboard map would be inconsistent.

@bjones1

Warnings when compiling cParser.c

On a Windows build of cParser.c with MSVC 2008:

building 'qutepart.syntax.cParser' extension
c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -DHAVE_PCRE_CONFIG_H -I..\pcre-8.33-bin -Iwin -IC:\Python27\include -IC:\Python27\PC /Tcqutepart/syntax/cParser.c /Fobuild\temp.win32-2.7\Release\qutepart/syntax/cParser.obj
cParser.c
..\pcre-8.33-bin\config.h(14) : warning C4005: 'HAVE_STRERROR' : macro redefinition
        c:\python27\include\pyconfig.h(64) : see previous definition of 'HAVE_STRERROR'
qutepart/syntax/cParser.c(340) : warning C4090: 'function' : different 'const' qualifiers
qutepart/syntax/cParser.c(1689) : warning C4047: 'function' : 'bool' differs inlevels of indirection from 'PyObject *'
qutepart/syntax/cParser.c(1689) : warning C4024: '_compileRegExp' : different types for formal and actual parameter 2

PyQt5 support

It would be nice to have PyQt5 support for this widget for my application.

I contributed to the support in matplotlib for PySide, PyQt4 and PyQt5 and would suggest a similar approach, namely:

  • move Qt imports to a qt.py shim file in the root, and have each file import from there
  • in the shim handle the incompatibilities between Qt4 and Qt5 (module rearrangements) in either direction (i.e. to either make Qt4 look like Qt5 or vice versa).

If you'd be interested in adding the support for this I'm happy to do it and submit a PR for the completed code?

Thanks,

Unit test hang

Unless I delete test/test_api.py and test/test_bracket_hilighter.py, the tests hang. When I press Ctrl+C on a hang, I see:

C:\Users\bjones\Documents\enki_all\qutepart\tests>python run_all.py
test_1 (test_actions.Print) ... skipped 'Does not work'
test_jump (test_bookmarks.Test) ... ok
test_set_with_keyboard (test_bookmarks.Test) ... ok
test_set_with_mouse (test_bookmarks.Test) ... skipped 'Crashes Qt'
test_1 (test_bracket_hlighter.Test) ... ok
test_click_selects_first (test_completion.Test) ... skipped 'Crashes Qt 4.8.3'
test_down_selects_first (test_completion.Test) ... Traceback (most recent call l
ast):
  File "run_all.py", line 9, in <module>
    unittest.TextTestRunner(verbosity=2).run(suite)
  File "C:\Users\bjones\Downloads\WinPython-64bit-3.4.3.7Qt5\python-3.4.3.amd64\
lib\unittest\runner.py", line 168, in run
    test(result)
  File "C:\Users\bjones\Downloads\WinPython-64bit-3.4.3.7Qt5\python-3.4.3.amd64\
lib\unittest\suite.py", line 84, in __call__
    return self.run(*args, **kwds)
  File "C:\Users\bjones\Downloads\WinPython-64bit-3.4.3.7Qt5\python-3.4.3.amd64\
lib\unittest\suite.py", line 122, in run
    test(result)
  File "C:\Users\bjones\Downloads\WinPython-64bit-3.4.3.7Qt5\python-3.4.3.amd64\
lib\unittest\suite.py", line 84, in __call__
    return self.run(*args, **kwds)
  File "C:\Users\bjones\Downloads\WinPython-64bit-3.4.3.7Qt5\python-3.4.3.amd64\
lib\unittest\suite.py", line 122, in run
    test(result)
  File "C:\Users\bjones\Downloads\WinPython-64bit-3.4.3.7Qt5\python-3.4.3.amd64\
lib\unittest\suite.py", line 84, in __call__
    return self.run(*args, **kwds)
  File "C:\Users\bjones\Downloads\WinPython-64bit-3.4.3.7Qt5\python-3.4.3.amd64\
lib\unittest\suite.py", line 122, in run
    test(result)
  File "C:\Users\bjones\Downloads\WinPython-64bit-3.4.3.7Qt5\python-3.4.3.amd64\
lib\unittest\case.py", line 625, in __call__
    return self.run(*args, **kwds)
  File "C:\Users\bjones\Downloads\WinPython-64bit-3.4.3.7Qt5\python-3.4.3.amd64\
lib\unittest\case.py", line 577, in run
    testMethod()
  File "C:\Users\bjones\Documents\enki_all\qutepart\tests\test_completion.py", l
ine 34, in test_down_selects_first
    self.app.processEvents()
KeyboardInterrupt

So, it seems like the Windows Qt works a bit differently than Linux in terms of processing events. I'll play with this when I can...

Window build notes

This "issue" is more a log of the problems I encountered trying to build in Windows. I'm building on Python 3.4 x64. I think most of the pain is caused by the requirement of using Visual Studio 2010 on Windows 10. When binaries for PyQt5 are available for Python 3.5, this should be much easier, since Python 3.5 uses a modern compiler (Visual Studio 2015).

Determine compiler to build with

To determine what compiler was used to build CPython, and therefore what compiler should be used to build an extension, just run Python.

C:\Users\bjones\Documents\enki_all\qutepart>python
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AM
D64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

See http://stackoverflow.com/questions/70013/how-to-detect-if-im-compiling-code-with-visual-studio-2008 for a list of values to match with compiler versions.

Wrong compiler detected

An earlier Python 2.7 installation (Pythonx,y) provides an installed Microsoft Visual C++ 2008. Python finds that and complains by default.]:

C:\Users\bjones\Documents\enki_all\qutepart>python setup.py install --include-di
r=../pcre2-10.10/build --lib_dir=../pcre2-10.10/build/Release
Traceback (most recent call last):
  File "setup.py", line 98, in <module>
    if not _checkDependencies():
  File "setup.py", line 64, in _checkDependencies
    if not compiler.has_function('rand', includes=['stdlib.h']):
  File "C:\Users\bjones\Downloads\WinPython-64bit-3.4.3.7Qt5\python-3.4.3.amd64\
lib\distutils\ccompiler.py", line 791, in has_function
    objects = self.compile([fname], include_dirs=include_dirs)
  File "C:\Users\bjones\Downloads\WinPython-64bit-3.4.3.7Qt5\python-3.4.3.amd64\
lib\distutils\msvc9compiler.py", line 460, in compile
    self.initialize()
  File "C:\Users\bjones\Downloads\WinPython-64bit-3.4.3.7Qt5\python-3.4.3.amd64\
lib\distutils\msvc9compiler.py", line 371, in initialize
    vc_env = query_vcvarsall(VERSION, plat_spec)
  File "C:\Users\bjones\Downloads\WinPython-64bit-3.4.3.7Qt5\python-3.4.3.amd64\
lib\site-packages\setuptools\msvc9_support.py", line 52, in query_vcvarsall
    return unpatched['query_vcvarsall'](version, *args, **kwargs)
  File "C:\Users\bjones\Downloads\WinPython-64bit-3.4.3.7Qt5\python-3.4.3.amd64\
lib\distutils\msvc9compiler.py", line 287, in query_vcvarsall
    raise ValueError(str(list(result.keys())))

The solution: run Python from a Visual Studio Command Prompt (2010) (see the Start menu).

Failing test builds

Next, the build complains that test builds fail:

C:\Users\bjones\Documents\enki_all\qutepart>\Users\bjones\Downloads\WinPython-64
bit-3.4.3.7Qt5\python-3.4.3.amd64\python.exe setup.py install --include-dir=../p
cre-8.37/build --lib-dir=../pcre-8.37/build/Release
randulkyuaoe.c

Users\bjones\AppData\Local\Temp\a.out.exe.manifest : general error c1010070: Fai
led to load and parse the manifest. The system cannot find the file specified.
It seems like C compiler is not installed or not operable.

Solution: use the --force option.

C:\Users\bjones\Documents\enki_all\qutepart>\Users\bjones\Downloads\WinPython-64
bit-3.4.3.7Qt5\python-3.4.3.amd64\python.exe setup.py install --include-dir=../p
cre-8.37/build --lib-dir=../pcre-8.37/build/Release --force

#64-bit compiler not installed

Next, building an extension with the default Visual Studio 2010 Express tool set fails.

C:\Users\bjones\Documents\enki_all\qutepart>\Users\bjones\Downloads\WinPython-64
bit-3.4.3.7Qt5\python-3.4.3.amd64\python.exe setup.py install --include-dir=../p
cre-8.37/build --lib-dir=../pcre-8.37/build/Release --force
running install
running bdist_egg

..snip...

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\link.exe /DLL /nologo
 /INCREMENTAL:NO /LIBPATH:../pcre-8.37/build/Release /LIBPATH:C:\Users\bjones\Do
wnloads\WinPython-64bit-3.4.3.7Qt5\python-3.4.3.amd64\libs /LIBPATH:C:\Users\bjo
nes\Downloads\WinPython-64bit-3.4.3.7Qt5\python-3.4.3.amd64\PCbuild\amd64 pcre.l
ib /EXPORT:PyInit_cParser build\temp.win-amd64-3.4\Release\qutepart/syntax/cPars
er.obj /OUT:build\lib.win-amd64-3.4\qutepart\syntax\cParser.pyd /IMPLIB:build\te
mp.win-amd64-3.4\Release\qutepart/syntax\cParser.lib /MANIFESTFILE:build\temp.wi
n-amd64-3.4\Release\qutepart/syntax\cParser.pyd.manifest
python34.lib(python34.dll) : fatal error LNK1112: module machine type 'x64' conf
licts with target machine type 'X86'
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\BIN\\
link.exe' failed with exit status 1112

Solution: Install the 64-bit compiler. This isn't easy; just downloading and installing the Windows 7 DSK fails. Instead, carefully follow http://www.mathworks.com/matlabcentral/answers/95039-why-does-the-sdk-7-1-installation-fail-with-an-installation-failed-message-on-my-windows-system.

Rebuild PCRE

So, rebuild PCRE: C:\Users\bjones\Documents\enki_all\pcre-8.37\build>"\Program Files (x86)\CMake\bin\cmake.exe" cmake .. -DBUILD_SHARED_LIBS:BOOL=OFF -DPCRE_SUPPORT_UTF:BOOL=ON -DPCRE_SUPPORT_JIT:BOOL=ON -G "Visual Studio 10 2010 Win64. Note the different compiler name.

The rebuild fails:

c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\intrin.h(26): fa
tal error C1083: Cannot open include file: 'ammintrin.h': No such file or direc
tory [C:\Users\bjones\Documents\enki_all\pcre-8.37\build\pcre.vcxproj]

Compiler fix

Per a comment in https://connect.microsoft.com/VisualStudio/feedback/details/660584/, the overall order is:

(a) VS2010 C++ Express (in my case)
(b) SDK 7.1
(c) VS2010 SP1
(d) SP1 Compiler patch KB2519277

The previous link took care of (a) and (b). Installing (c), then a clean and rebuild of PCRE worked. However, trying to build from a Visual Studio Command Prompr (2010) fails, since this selects the x86 tools.

Environment fix

Instead, open the Windows SDK 7.1 Command Prompt, then build qutepart there. This works.

Test failure

That's with Qt 5.6 in Fedora.

+ xvfb-run /usr/bin/python3 run_tests_fedora.py
libEGL warning: DRI2: failed to open swrast (search paths /usr/lib64/dri)
libEGL warning: DRI2: failed to open swrast (search paths /usr/lib64/dri)
test_1 (test_actions.Print) ... skipped 'Does not work'
test_completion_enabled (test_api.Completion) ... ok
test_threshold (test_api.Completion) ... ok
test_1 (test_api.DetectSyntax) ... qutepart: Indenter 'ada' is not finished yet. But you can do it!
ok
test_1 (test_api.InsertText) ... ok
test_2 (test_api.InsertText) ... ok
test_3 (test_api.InsertText) ... ok
test_1 (test_api.IsCodeOrComment) ... ok
test_2 (test_api.IsCodeOrComment) ... ok
test_block_comment (test_api.IsCodeOrComment) ... ok
test_here_doc (test_api.IsCodeOrComment) ... ok
test_accessByIndex (test_api.Lines) ... ok
test_getSlice (test_api.Lines) ... ok
test_modifyByIndex (test_api.Lines) ... ok
test_setSlice_1 (test_api.Lines) ... ok
test_setSlice_2 (test_api.Lines) ... ok
test_setSlice_3 (test_api.Lines) ... ok
test_setSlice_4 (test_api.Lines) ... ok
test_setSlice_5 (test_api.Lines) ... ok
test_setSlice_6 (test_api.Lines) ... ok
test_setSlice_61 (test_api.Lines) ... ok
test_setSlice_7 (test_api.Lines) ... ok
test_setSlice_8 (test_api.Lines) ... ok
test_setSlice_9 (test_api.Lines) ... ok
test_accessByIndex (test_api.LinesWin) ... ok
test_getSlice (test_api.LinesWin) ... ok
test_modifyByIndex (test_api.LinesWin) ... ok
test_setSlice_1 (test_api.LinesWin) ... ok
test_setSlice_2 (test_api.LinesWin) ... ok
test_setSlice_3 (test_api.LinesWin) ... ok
test_setSlice_4 (test_api.LinesWin) ... ok
test_setSlice_5 (test_api.LinesWin) ... ok
test_setSlice_6 (test_api.LinesWin) ... ok
test_setSlice_61 (test_api.LinesWin) ... ok
test_setSlice_7 (test_api.LinesWin) ... ok
test_setSlice_8 (test_api.LinesWin) ... ok
test_setSlice_9 (test_api.LinesWin) ... ok
test_replaceText1 (test_api.ReplaceText) ... ok
test_replaceText2 (test_api.ReplaceText) ... ok
test_replaceText3 (test_api.ReplaceText) ... ok
test_replaceText4 (test_api.ReplaceText) ... ok
test_replaceText5 (test_api.ReplaceText) ... ok
test_resetSelection (test_api.Selection) ... ok
test_selected_multiline_text (test_api.Selection) ... ok
test_setSelection (test_api.Selection) ... ok
test_eol_changed (test_api.Signals) ... ok
test_indent_width_changed (test_api.Signals) ... ok
test_language_changed (test_api.Signals) ... ok
test_use_tabs_changed (test_api.Signals) ... ok
test_jump (test_bookmarks.Test) ... ok
test_set_with_keyboard (test_bookmarks.Test) ... ok
test_set_with_mouse (test_bookmarks.Test) ... skipped 'Crashes Qt'
test_1 (test_bracket_hlighter.Test) ... ok
test_click_selects_first (test_completion.Test) ... skipped 'Crashes Qt 4.8.3'
test_down_selects_first (test_completion.Test) ... ok
test_down_selects_second (test_completion.Test) ... ok
test_manual (test_completion.Test) ... ok
test_tab_completes (test_completion.Test) ... ok
test_too_long_list (test_completion.Test) ... ok
test_1 (test_draw_whitespace.Test) ... ok
test_2 (test_draw_whitespace.Test) ... ok
test_3 (test_draw_whitespace.Test) ... ok
test_4 (test_draw_whitespace.Test) ... ok
test_alt_does_not_type (test_edit.Test)
By default when Alt+Key is pressed - text is inserted. ... ok
test_home1 (test_edit.Test)
Test the operation of the home key. ... ok
test_home2 (test_edit.Test)
Test the operation of the home key. ... ok
test_overwrite_backspace (test_edit.Test) ... ok
test_overwrite_edit (test_edit.Test) ... ok
test_overwrite_undo (test_edit.Test) ... ok
test_1 (test_indent.Test) ... ok
test_2 (test_indent.Test) ... ok
test_3 (test_indent.Test) ... ok
test_4 (test_indent.Test) ... ok
test_4b (test_indent.Test) ... ok
test_5 (test_indent.Test) ... ok
test_6 (test_indent.Test) ... ok
test_7 (test_indent.Test)
Smartly indent python ... ok
test_aplist1 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist10 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist11 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist12 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist13 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist14 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist15 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist16 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist17 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist18 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist19 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist2 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist20 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist21 (test_indenter.test_cstyle.Aplist)
Tabs are used ... ok
test_aplist3 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist4 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist5 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist6 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist8 (test_indenter.test_cstyle.Aplist) ... ok
test_aplist9 (test_indenter.test_cstyle.Aplist) ... ok
test_clospar1 (test_indenter.test_cstyle.ClosPar) ... ok
test_clospar2 (test_indenter.test_cstyle.ClosPar) ... ok
test_clospar3 (test_indenter.test_cstyle.ClosPar) ... ok
test_clospar4 (test_indenter.test_cstyle.ClosPar) ... ok
test_comma1 (test_indenter.test_cstyle.Comma) ... ok
test_comma2 (test_indenter.test_cstyle.Comma) ... ok
test_comma3 (test_indenter.test_cstyle.Comma) ... ok
test_comma4 (test_indenter.test_cstyle.Comma) ... ok
test_comma5 (test_indenter.test_cstyle.Comma) ... ok
test_comma6 (test_indenter.test_cstyle.Comma) ... ok
test_comment1 (test_indenter.test_cstyle.Comment) ... ok
test_comment2 (test_indenter.test_cstyle.Comment) ... ok
test_do1 (test_indenter.test_cstyle.Do) ... ok
test_do2 (test_indenter.test_cstyle.Do) ... ok
test_do3 (test_indenter.test_cstyle.Do) ... ok
test_doxygen1 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen2 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen3 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen4 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen5 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen6 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen7 (test_indenter.test_cstyle.Doxygen) ... ok
test_doxygen8 (test_indenter.test_cstyle.Doxygen) ... ok
test_for1 (test_indenter.test_cstyle.For) ... ok
test_for2 (test_indenter.test_cstyle.For) ... ok
test_for3 (test_indenter.test_cstyle.For) ... ok
test_for4 (test_indenter.test_cstyle.For) ... ok
test_for5 (test_indenter.test_cstyle.For) ... ok
test_foreign1 (test_indenter.test_cstyle.Forein) ... ok
test_foreign2 (test_indenter.test_cstyle.Forein) ... ok
test_foreign3 (test_indenter.test_cstyle.Forein) ... ok
test_if1 (test_indenter.test_cstyle.If) ... ok
test_if10 (test_indenter.test_cstyle.If) ... ok
test_if11 (test_indenter.test_cstyle.If) ... ok
test_if2 (test_indenter.test_cstyle.If) ... ok
test_if3 (test_indenter.test_cstyle.If) ... ok
test_if4 (test_indenter.test_cstyle.If) ... ok
test_if5 (test_indenter.test_cstyle.If) ... ok
test_if6 (test_indenter.test_cstyle.If) ... ok
test_if7 (test_indenter.test_cstyle.If) ... ok
test_if8 (test_indenter.test_cstyle.If) ... ok
test_if9 (test_indenter.test_cstyle.If) ... ok
test_if_qutepart1 (test_indenter.test_cstyle.If) ... ok
test_normal1 (test_indenter.test_cstyle.Normal) ... ok
test_normal2 (test_indenter.test_cstyle.Normal) ... ok
test_normal3 (test_indenter.test_cstyle.Normal) ... ok
test_openpar1 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar10 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar2 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar3 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar4 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar5 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar6 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar7 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar8 (test_indenter.test_cstyle.OpenPar) ... ok
test_openpar9 (test_indenter.test_cstyle.OpenPar) ... ok
test_137157 (test_indenter.test_cstyle.Other) ... ok
test_alignbrace (test_indenter.test_cstyle.Other) ... ok
test_plist1 (test_indenter.test_cstyle.PList) ... ok
test_plist11 (test_indenter.test_cstyle.PList) ... ok
test_plist12 (test_indenter.test_cstyle.PList) ... ok
test_plist13 (test_indenter.test_cstyle.PList) ... ok
test_plist15 (test_indenter.test_cstyle.PList) ... ok
test_plist16 (test_indenter.test_cstyle.PList) ... ok
test_plist17 (test_indenter.test_cstyle.PList) ... ok
test_plist18 (test_indenter.test_cstyle.PList) ... ok
test_plist19 (test_indenter.test_cstyle.PList) ... ok
test_plist2 (test_indenter.test_cstyle.PList) ... ok
test_plist20 (test_indenter.test_cstyle.PList) ... ok
test_plist21 (test_indenter.test_cstyle.PList) ... ok
test_plist22 (test_indenter.test_cstyle.PList) ... ok
test_plist24 (test_indenter.test_cstyle.PList) ... ok
test_plist25 (test_indenter.test_cstyle.PList) ... ok
test_plist3 (test_indenter.test_cstyle.PList) ... ok
test_plist4 (test_indenter.test_cstyle.PList) ... ok
test_plist5 (test_indenter.test_cstyle.PList) ... ok
test_plist6 (test_indenter.test_cstyle.PList) ... ok
test_plist7 (test_indenter.test_cstyle.PList) ... ok
test_plist8 (test_indenter.test_cstyle.PList) ... ok
test_plist9 (test_indenter.test_cstyle.PList) ... ok
test_prep1 (test_indenter.test_cstyle.Prep) ... ok
test_prep2 (test_indenter.test_cstyle.Prep) ... ok
test_prep5 (test_indenter.test_cstyle.Prep) ... ok
test_prep6 (test_indenter.test_cstyle.Prep) ... ok
test_switch1 (test_indenter.test_cstyle.Switch) ... ok
test_switch12 (test_indenter.test_cstyle.Switch) ... ok
test_switch14 (test_indenter.test_cstyle.Switch) ... ok
test_switch2 (test_indenter.test_cstyle.Switch) ... ok
test_switch3 (test_indenter.test_cstyle.Switch) ... ok
test_switch4 (test_indenter.test_cstyle.Switch) ... ok
test_switch5 (test_indenter.test_cstyle.Switch) ... ok
test_switch6 (test_indenter.test_cstyle.Switch) ... ok
test_switch7 (test_indenter.test_cstyle.Switch) ... ok
test_switch9 (test_indenter.test_cstyle.Switch) ... ok
test_top1 (test_indenter.test_cstyle.Top) ... ok
test_top10 (test_indenter.test_cstyle.Top) ... ok
test_top11 (test_indenter.test_cstyle.Top) ... ok
test_top12 (test_indenter.test_cstyle.Top) ... ok
test_top13 (test_indenter.test_cstyle.Top) ... ok
test_top14 (test_indenter.test_cstyle.Top) ... ok
test_top15 (test_indenter.test_cstyle.Top) ... ok
test_top16 (test_indenter.test_cstyle.Top) ... ok
test_top17 (test_indenter.test_cstyle.Top) ... ok
test_top18 (test_indenter.test_cstyle.Top) ... ok
test_top19 (test_indenter.test_cstyle.Top) ... ok
test_top2 (test_indenter.test_cstyle.Top) ... ok
test_top3 (test_indenter.test_cstyle.Top) ... ok
test_top4 (test_indenter.test_cstyle.Top) ... ok
test_top5 (test_indenter.test_cstyle.Top) ... ok
test_top6 (test_indenter.test_cstyle.Top) ... ok
test_top7 (test_indenter.test_cstyle.Top) ... ok
test_top8 (test_indenter.test_cstyle.Top) ... ok
test_top9 (test_indenter.test_cstyle.Top) ... ok
test_using3 (test_indenter.test_cstyle.Using) ... ok
test_visib1 (test_indenter.test_cstyle.Visib) ... ok
test_visib2 (test_indenter.test_cstyle.Visib) ... ok
test_visib3 (test_indenter.test_cstyle.Visib) ... ok
test_visib4 (test_indenter.test_cstyle.Visib) ... ok
test_visib5 (test_indenter.test_cstyle.Visib) ... ok
test_visib6 (test_indenter.test_cstyle.Visib) ... ok
test_visib7 (test_indenter.test_cstyle.Visib) ... ok
test_visib8 (test_indenter.test_cstyle.Visib) ... ok
test_while1 (test_indenter.test_cstyle.While) ... ok
test_while2 (test_indenter.test_cstyle.While) ... ok
test_while3 (test_indenter.test_cstyle.While) ... ok
test_afterComma1 (test_indenter.test_haskell.Test) ... skipped 'Haskell not supported yet'
test_dontIndent1 (test_indenter.test_haskell.Test) ... skipped 'Haskell not supported yet'
test_if1 (test_indenter.test_haskell.Test) ... skipped 'Haskell not supported yet'
test_if2 (test_indenter.test_haskell.Test) ... skipped 'Haskell not supported yet'
test_parsec1 (test_indenter.test_haskell.Test) ... skipped 'Haskell not supported yet'
test_find_brace (test_indenter.test_lisp.Test) ... ok
test_not_found_brace (test_indenter.test_lisp.Test) ... ok
test_three_semicolons (test_indenter.test_lisp.Test) ... ok
test_two_semicolons (test_indenter.test_lisp.Test) ... ok
test_normal2 (test_indenter.test_normal.Test) ... qutepart: Indenter 'lua' is not finished yet. But you can do it!
ok
test_autoIndentAfterEmpty (test_indenter.test_python.Test) ... ok
test_dedentBreak (test_indenter.test_python.Test) ... ok
test_dedentContinue (test_indenter.test_python.Test) ... ok
test_dedentPass (test_indenter.test_python.Test) ... ok
test_dedentRaise (test_indenter.test_python.Test) ... ok
test_dedentReturn (test_indenter.test_python.Test) ... ok
test_hangingIndentation (test_indenter.test_python.Test) ... ok
test_hangingIndentation2 (test_indenter.test_python.Test) ... ok
test_hangingIndentation3 (test_indenter.test_python.Test) ... ok
test_hangingIndentation4 (test_indenter.test_python.Test) ... ok
test_hangingIndentation5 (test_indenter.test_python.Test) ... ok
test_indentColon1 (test_indenter.test_python.Test) ... ok
test_indentColon2 (test_indenter.test_python.Test) ... ok
test_indentColon3 (test_indenter.test_python.Test)
Do not indent colon if hanging indentation used ... ok
test_keepIndent1 (test_indenter.test_python.Test) ... ok
test_keepIndent2 (test_indenter.test_python.Test) ... ok
test_keepIndent3 (test_indenter.test_python.Test) ... ok
test_keepIndent4 (test_indenter.test_python.Test) ... ok
test_array1 (test_indenter.test_ruby.Array) ... ok
test_array10 (test_indenter.test_ruby.Array) ... ok
test_array11 (test_indenter.test_ruby.Array) ... ok
test_array12 (test_indenter.test_ruby.Array) ... ok
test_array16 (test_indenter.test_ruby.Array) ... ok
test_array17 (test_indenter.test_ruby.Array) ... ok
test_array18 (test_indenter.test_ruby.Array) ... ok
test_array19 (test_indenter.test_ruby.Array) ... ok
test_array2 (test_indenter.test_ruby.Array) ... ok
test_array20 (test_indenter.test_ruby.Array) ... ok
test_array21 (test_indenter.test_ruby.Array) ... ok
test_array22 (test_indenter.test_ruby.Array) ... ok
test_array3 (test_indenter.test_ruby.Array) ... ok
test_array4 (test_indenter.test_ruby.Array) ... ok
test_array5 (test_indenter.test_ruby.Array) ... ok
test_array6 (test_indenter.test_ruby.Array) ... ok
test_array7 (test_indenter.test_ruby.Array) ... ok
test_array8 (test_indenter.test_ruby.Array) ... ok
test_array9 (test_indenter.test_ruby.Array) ... ok
test_array_comment1 (test_indenter.test_ruby.ArrayComment) ... ok
test_array_comment2 (test_indenter.test_ruby.ArrayComment) ... ok
test_array_comment3 (test_indenter.test_ruby.ArrayComment) ... ok
test_array_comment4 (test_indenter.test_ruby.ArrayComment) ... ok
test_array_comment5 (test_indenter.test_ruby.ArrayComment) ... ok
test_basic1 (test_indenter.test_ruby.Basic) ... ok
test_basic2 (test_indenter.test_ruby.Basic) ... expected failure
test_basic3 (test_indenter.test_ruby.Basic) ... ok
test_basic4 (test_indenter.test_ruby.Basic) ... ok
test_block01 (test_indenter.test_ruby.Block) ... expected failure
test_block02 (test_indenter.test_ruby.Block) ... expected failure
test_block_comment1 (test_indenter.test_ruby.BlockComment) ... ok
test_block_comment2 (test_indenter.test_ruby.BlockComment) ... ok
test_block_comment3 (test_indenter.test_ruby.BlockComment) ... ok
test_block_comment4 (test_indenter.test_ruby.BlockComment) ... ok
test_block_comment5 (test_indenter.test_ruby.BlockComment) ... ok
test_block_comment6 (test_indenter.test_ruby.BlockComment) ... ok
test_block_comment7 (test_indenter.test_ruby.BlockComment) ... ok
test_block_comment8 (test_indenter.test_ruby.BlockComment) ... expected failure
test_comment1 (test_indenter.test_ruby.Comment) ... ok
test_comment2 (test_indenter.test_ruby.Comment) ... ok
test_comment3 (test_indenter.test_ruby.Comment) ... ok
test_comment4 (test_indenter.test_ruby.Comment) ... ok
test_comment5 (test_indenter.test_ruby.Comment) ... ok
test_comment6 (test_indenter.test_ruby.Comment) ... ok
test_do1 (test_indenter.test_ruby.Do) ... ok
test_do2 (test_indenter.test_ruby.Do) ... ok
test_do3 (test_indenter.test_ruby.Do) ... ok
test_do4 (test_indenter.test_ruby.Do) ... ok
test_do5 (test_indenter.test_ruby.Do) ... ok
test_do6 (test_indenter.test_ruby.Do) ... ok
test_do7 (test_indenter.test_ruby.Do) ... ok
test_empty_file1 (test_indenter.test_ruby.EmptyFile) ... ok
test_hash1 (test_indenter.test_ruby.Hash) ... ok
test_hash10 (test_indenter.test_ruby.Hash) ... ok
test_hash11 (test_indenter.test_ruby.Hash) ... ok
test_hash12 (test_indenter.test_ruby.Hash) ... ok
test_hash16 (test_indenter.test_ruby.Hash) ... ok
test_hash17 (test_indenter.test_ruby.Hash) ... ok
test_hash18 (test_indenter.test_ruby.Hash) ... ok
test_hash19 (test_indenter.test_ruby.Hash) ... ok
test_hash2 (test_indenter.test_ruby.Hash) ... ok
test_hash20 (test_indenter.test_ruby.Hash) ... ok
test_hash21 (test_indenter.test_ruby.Hash) ... ok
test_hash22 (test_indenter.test_ruby.Hash) ... ok
test_hash3 (test_indenter.test_ruby.Hash) ... ok
test_hash4 (test_indenter.test_ruby.Hash) ... ok
test_hash5 (test_indenter.test_ruby.Hash) ... ok
test_hash6 (test_indenter.test_ruby.Hash) ... ok
test_hash7 (test_indenter.test_ruby.Hash) ... ok
test_hash8 (test_indenter.test_ruby.Hash) ... ok
test_hash9 (test_indenter.test_ruby.Hash) ... ok
test_heredoc1 (test_indenter.test_ruby.Heredoc) ... ok
test_heredoc2 (test_indenter.test_ruby.Heredoc) ... ok
test_heredoc3 (test_indenter.test_ruby.Heredoc) ... ok
test_heredoc4 (test_indenter.test_ruby.Heredoc) ... ok
test_heredoc5 (test_indenter.test_ruby.Heredoc) ... ok
test_heredoc6 (test_indenter.test_ruby.Heredoc) ... ok
test_if10 (test_indenter.test_ruby.If) ... ok
test_if11 (test_indenter.test_ruby.If) ... ok
test_if20 (test_indenter.test_ruby.If) ... expected failure
test_if21 (test_indenter.test_ruby.If) ... expected failure
test_if22 (test_indenter.test_ruby.If) ... ok
test_if30 (test_indenter.test_ruby.If) ... ok
test_if31 (test_indenter.test_ruby.If) ... ok
test_multiline1 (test_indenter.test_ruby.Multiline) ... ok
test_multiline10 (test_indenter.test_ruby.Multiline) ... ok
test_multiline2 (test_indenter.test_ruby.Multiline) ... ok
test_multiline3 (test_indenter.test_ruby.Multiline) ... ok
test_multiline4 (test_indenter.test_ruby.Multiline) ... ok
test_multiline5 (test_indenter.test_ruby.Multiline) ... ok
test_multiline6 (test_indenter.test_ruby.Multiline) ... expected failure
test_multiline7 (test_indenter.test_ruby.Multiline) ... ok
test_multiline8 (test_indenter.test_ruby.Multiline) ... ok
test_multiline9 (test_indenter.test_ruby.Multiline) ... ok
test_no_do1 (test_indenter.test_ruby.NoDo) ... ok
test_no_do2 (test_indenter.test_ruby.NoDo) ... ok
test_no_do3 (test_indenter.test_ruby.NoDo) ... ok
test_no_do4 (test_indenter.test_ruby.NoDo) ... ok
test_ops1 (test_indenter.test_ruby.Ops) ... ok
test_ops11 (test_indenter.test_ruby.Ops) ... ok
test_ops12 (test_indenter.test_ruby.Ops) ... ok
test_ops13 (test_indenter.test_ruby.Ops) ... ok
test_ops14 (test_indenter.test_ruby.Ops) ... ok
test_ops15 (test_indenter.test_ruby.Ops) ... ok
test_ops16 (test_indenter.test_ruby.Ops) ... ok
test_ops17 (test_indenter.test_ruby.Ops) ... ok
test_ops18 (test_indenter.test_ruby.Ops) ... ok
test_ops2 (test_indenter.test_ruby.Ops) ... ok
test_ops21 (test_indenter.test_ruby.Ops) ... ok
test_ops22 (test_indenter.test_ruby.Ops) ... ok
test_ops23 (test_indenter.test_ruby.Ops) ... ok
test_ops24 (test_indenter.test_ruby.Ops) ... ok
test_ops25 (test_indenter.test_ruby.Ops) ... ok
test_ops26 (test_indenter.test_ruby.Ops) ... ok
test_ops27 (test_indenter.test_ruby.Ops) ... ok
test_ops28 (test_indenter.test_ruby.Ops) ... ok
test_ops3 (test_indenter.test_ruby.Ops) ... ok
test_ops4 (test_indenter.test_ruby.Ops) ... ok
test_ops5 (test_indenter.test_ruby.Ops) ... ok
test_ops6 (test_indenter.test_ruby.Ops) ... ok
test_ops7 (test_indenter.test_ruby.Ops) ... ok
test_ops8 (test_indenter.test_ruby.Ops) ... ok
test_plist1 (test_indenter.test_ruby.Plist) ... ok
test_plist10 (test_indenter.test_ruby.Plist) ... ok
test_plist11 (test_indenter.test_ruby.Plist) ... ok
test_plist12 (test_indenter.test_ruby.Plist) ... ok
test_plist13 (test_indenter.test_ruby.Plist) ... ok
test_plist14 (test_indenter.test_ruby.Plist) ... ok
test_plist15 (test_indenter.test_ruby.Plist) ... ok
test_plist16 (test_indenter.test_ruby.Plist) ... ok
test_plist17 (test_indenter.test_ruby.Plist) ... ok
test_plist18 (test_indenter.test_ruby.Plist) ... ok
test_plist19 (test_indenter.test_ruby.Plist) ... ok
test_plist2 (test_indenter.test_ruby.Plist) ... ok
test_plist20 (test_indenter.test_ruby.Plist) ... ok
test_plist3 (test_indenter.test_ruby.Plist) ... ok
test_plist4 (test_indenter.test_ruby.Plist) ... ok
test_plist5 (test_indenter.test_ruby.Plist) ... ok
test_plist6 (test_indenter.test_ruby.Plist) ... ok
test_plist7 (test_indenter.test_ruby.Plist) ... ok
test_plist8 (test_indenter.test_ruby.Plist) ... ok
test_plist9 (test_indenter.test_ruby.Plist) ... ok
test_plist_comment1 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment10 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment2 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment3 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment4 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment5 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment6 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment7 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment8 (test_indenter.test_ruby.PlistComment) ... ok
test_plist_comment9 (test_indenter.test_ruby.PlistComment) ... ok
test_regexp1 (test_indenter.test_ruby.RegExp) ... ok
test_singleline01 (test_indenter.test_ruby.SingleLine) ... ok
test_singleline02 (test_indenter.test_ruby.SingleLine) ... ok
test_singleline03 (test_indenter.test_ruby.SingleLine) ... ok
test_singleline04 (test_indenter.test_ruby.SingleLine) ... ok
test_wordlist01 (test_indenter.test_ruby.WordList) ... ok
test_wordlist02 (test_indenter.test_ruby.WordList) ... ok
test_wordlist11 (test_indenter.test_ruby.WordList) ... expected failure
test_wordlist12 (test_indenter.test_ruby.WordList) ... expected failure
test_wordlist21 (test_indenter.test_ruby.WordList) ... expected failure
test_wordlist22 (test_indenter.test_ruby.WordList) ... expected failure
test_1 (test_indenter.test_scheme.Test) ... ok
test_2 (test_indenter.test_scheme.Test) ... ok
test_3 (test_indenter.test_scheme.Test) ... ok
test_4 (test_indenter.test_scheme.Test) ... ok
test_5 (test_indenter.test_scheme.Test) ... ok
test_6 (test_indenter.test_scheme.Test) ... ok
test_7 (test_indenter.test_scheme.Test) ... ok
test_8 (test_indenter.test_scheme.Test) ... ok
test_9 (test_indenter.test_scheme.Test) ... ok
test_1 (test_indenter.test_scheme.TestAutoindent) ... ok
test_2 (test_indenter.test_scheme.TestAutoindent) ... ok
test_3 (test_indenter.test_scheme.TestAutoindent) ... ok
test_4 (test_indenter.test_scheme.TestAutoindent) ... ok
test_5 (test_indenter.test_scheme.TestAutoindent) ... ok
test_6 (test_indenter.test_scheme.TestAutoindent) ... ok
test_7 (test_indenter.test_scheme.TestAutoindent) ... ok
test_8 (test_indenter.test_scheme.TestAutoindent) ... ok
test_align1 (test_indenter.test_xmlindent.Align) ... ok
test_align2 (test_indenter.test_xmlindent.Align) ... ok
test_align3 (test_indenter.test_xmlindent.Align) ... ok
test_align4 (test_indenter.test_xmlindent.Align) ... ok
test_align5 (test_indenter.test_xmlindent.Align) ... ok
test_enter1 (test_indenter.test_xmlindent.Enter)
zero indent for <?xml ... ok
test_enter2 (test_indenter.test_xmlindent.Enter)
zero indent for <!DOCTYPE ... ok
test_enter3 (test_indenter.test_xmlindent.Enter)
keep indent when prev line was a comment ... ok
test_enter4 (test_indenter.test_xmlindent.Enter)
keep indent when prev line closed a tag ... ok
test_enter5 (test_indenter.test_xmlindent.Enter)
increase indent when prev line opened a tag ... ok
test_grater2 (test_indenter.test_xmlindent.Greater)
keep indent when prev line opened a tag ... ok
test_greater1 (test_indenter.test_xmlindent.Greater)
closing tag, decrease indentation when previous didn't open a tag ... ok
test_greater3 (test_indenter.test_xmlindent.Greater)
zero indent for <?xml ... ok
test_greater4 (test_indenter.test_xmlindent.Greater)
zero indent for <!DOCTYPE ... ok
test_greater5 (test_indenter.test_xmlindent.Greater)
keep indent when prev line closed a tag or was a comment ... ok
test_greater6 (test_indenter.test_xmlindent.Greater)
keep indent when prev line closed a tag or was a comment ... ok
test_greater7 (test_indenter.test_xmlindent.Greater)
increase indent ... ok
test_slash1 (test_indenter.test_xmlindent.Slash) ... ok
test_slash2 (test_indenter.test_xmlindent.Slash)
Do not indent, if in text block ... ok
test_slash3 (test_indenter.test_xmlindent.Slash)
Do not indent, if previous line opens tag ... ok
test_slash4 (test_indenter.test_xmlindent.Slash) ... ok
test_split1 (test_indenter.test_xmlindent.Split) ... ok
test_split2 (test_indenter.test_xmlindent.Split) ... ok
test_split3 (test_indenter.test_xmlindent.Split) ... ok
test_split4 (test_indenter.test_xmlindent.Split) ... ok
test_basic (test_rectangular_selection.Test) ... ok
test_copy_paste (test_rectangular_selection.Test) ... ok
test_copy_paste_utf8 (test_rectangular_selection.Test) ... ok
test_cut (test_rectangular_selection.Test) ... ok
test_cut_paste (test_rectangular_selection.Test) ... ok
test_delete (test_rectangular_selection.Test) ... ok
test_paste_new_lines (test_rectangular_selection.Test) ... ok
test_paste_replace_rectangular_selection (test_rectangular_selection.Test) ... ok
test_paste_replace_selection (test_rectangular_selection.Test) ... ok
test_real_to_visible (test_rectangular_selection.Test) ... ok
test_reset_by_edit (test_rectangular_selection.Test) ... ok
test_reset_by_move (test_rectangular_selection.Test) ... ok
test_visible_to_real (test_rectangular_selection.Test) ... ok
test_warning (test_rectangular_selection.Test) ... ok
test_with_tabs (test_rectangular_selection.Test) ... ok
test_RegExp (test_syntax.test_dynamic_substitution.TestCase) ... ok
test_StringDetect (test_syntax.test_dynamic_substitution.TestCase) ... ok
test_AnyChar (test_syntax.test_rules.Test) ... ok
test_Detect2Chars (test_syntax.test_rules.Test) ... ok
test_Detect2Chars_shell_escape (test_syntax.test_rules.Test)
Test escape characters processing in Detect2Chars rule ... ok
test_DetectChar (test_syntax.test_rules.Test) ... ok
test_DetectChar_dynamic (test_syntax.test_rules.Test)
DetectChar rule, dynamic=true ... ok
test_DetectChar_dynamic2 (test_syntax.test_rules.Test) ... ok
test_DetectIdentifier (test_syntax.test_rules.Test) ... ok
test_DetectSpaces (test_syntax.test_rules.Test) ... ok
test_Float (test_syntax.test_rules.Test) ... ok
test_HlCChar (test_syntax.test_rules.Test) ... ok
test_HlCHex (test_syntax.test_rules.Test) ... ok
test_HlCOct (test_syntax.test_rules.Test) ... ok
test_HlCStringChar (test_syntax.test_rules.Test) ... ok
test_IncludeRules (test_syntax.test_rules.Test) ... ok
test_IncludeRulesExternal (test_syntax.test_rules.Test) ... ok
test_Int (test_syntax.test_rules.Test) ... ok
test_LineContinue (test_syntax.test_rules.Test) ... ok
test_RangeDetect (test_syntax.test_rules.Test) ... ok
test_RegExpr (test_syntax.test_rules.Test) ... ok
test_RegExpr_caret (test_syntax.test_rules.Test) ... ok
test_RegExpr_slashB (test_syntax.test_rules.Test) ... ok
test_StringDetect (test_syntax.test_rules.Test) ... ok
test_StringDetect_first_non_space (test_syntax.test_rules.Test)
StringDetect with firstNonSpace=true ... ok
test_WordDetect (test_syntax.test_rules.Test) ... ok
test_dynamic_reg_exp (test_syntax.test_rules.Test)
RegExpr rule, dynamic=true ... ok
test_dynamic_string_detect (test_syntax.test_rules.Test)
StringDetect rule, dynamic=true ... ok
test_firstNonSpace (test_syntax.test_rules.Test) ... ok
test_jsp_keyword (test_syntax.test_rules.Test) ... ok
test_keyword (test_syntax.test_rules.Test) ... ok
test_keyword_insensitive (test_syntax.test_rules.Test)
Insensitive attribute for particular keyword ... ok
test_keyword_insensitive_syntax (test_syntax.test_rules.Test)
Insensitive attribute for whole syntax ... ok
test_keyword_weak_delimiter (test_syntax.test_rules.Test)
Test weakDeliminator attribute parsing and usage ... ok
test_lookahead (test_syntax.test_rules.Test) ... ok
test_mup_keyword (test_syntax.test_rules.Test)
Test for additionalDeliminator syntax attribute ... ok
test_parse_all_definitions (test_syntax.test_xml_definition_parsing.XmlParsingTestCase)
Parse all definitions ... ok
test_02 (test_vim.CopyPaste)
Paste text with p ... ok
test_03 (test_vim.CopyPaste)
Paste lines with p ... ok
test_04 (test_vim.CopyPaste)
Paste lines with P ... ok
test_05 (test_vim.CopyPaste)
Yank line with yy ... ok
test_06 (test_vim.CopyPaste)
Yank until the end of line ... ok
test_08 (test_vim.CopyPaste)
Composite yank with y, paste with P ... ok
test_01a (test_vim.Del)
Delete with x ... ok
test_01b (test_vim.Del)
Delete with x. Use count ... ok
test_02 (test_vim.Del)
Composite delete with d. Left and right ... ok
test_03 (test_vim.Del)
Composite delete with d. Down ... ok
test_04 (test_vim.Del)
Composite delete with d. Up ... ok
test_05 (test_vim.Del)
Delete Count times ... ok
test_06 (test_vim.Del)
Delete line ... ok
test_07 (test_vim.Del)
Delete until end of file ... ok
test_08 (test_vim.Del)
Delete until start of file ... ok
test_09 (test_vim.Del)
Delete with X ... ok
test_10 (test_vim.Del)
Delete with D ... ok
test_01 (test_vim.Edit)
Undo ... ok
test_02 (test_vim.Edit)
Change with C ... ok
test_03 (test_vim.Edit)
Substitute with s ... ok
test_04 (test_vim.Edit)
Replace char with r ... ok
test_05 (test_vim.Edit)
Change 2 words with c ... ok
test_06 (test_vim.Edit)
Open new line with o ... ok
test_07 (test_vim.Edit)
Open new line with O ... ok
test_08 (test_vim.Edit)
Substitute with S ... ok
test_09 (test_vim.Edit)
% to jump to next braket ... ok
test_10 (test_vim.Edit)
J join lines ... ok
test_01 (test_vim.Indent)
Increase indent with >j, decrease with <j ... ok
test_02 (test_vim.Indent)
Increase indent with >>, decrease with << ... ok
test_03 (test_vim.Indent)
Autoindent with =j ... ok
test_04 (test_vim.Indent)
Autoindent with == ... ok
test_11 (test_vim.Indent)
Increase indent with >, decrease with < in visual mode ... ok
test_12 (test_vim.Indent)
Autoindent with = in visual mode ... ok
test_01 (test_vim.Modes)
Switch modes insert/normal ... ok
test_02 (test_vim.Modes)
Append with A ... ok
test_03 (test_vim.Modes)
Append with a ... ok
test_04 (test_vim.Modes)
Mode line shows composite command start ... ok
test_05 (test_vim.Modes)
Replace mode ... ok
test_05a (test_vim.Modes)
Replace mode - at end of line ... ok
test_06 (test_vim.Modes)
Visual mode ... ok
test_07 (test_vim.Modes)
Switch to visual on selection ... ok
test_08 (test_vim.Modes)
From VISUAL to VISUAL LINES ... ok
test_09 (test_vim.Modes)
From VISUAL LINES to VISUAL ... ok
test_10 (test_vim.Modes)
Insert mode with I ... ok
test_01 (test_vim.Move)
Move hjkl ... FAIL
test_02 (test_vim.Move)
w ... ok
test_03 (test_vim.Move)
e ... ok
test_04 (test_vim.Move)
$ ... ok
test_05 (test_vim.Move)
0 ... ok
test_06 (test_vim.Move)
G ... ok
test_07 (test_vim.Move)
gg ... ok
test_08 (test_vim.Move)
b word back ... ok
test_09 (test_vim.Move)
% to jump to next braket ... ok
test_10 (test_vim.Move)
^ to jump to the first non-space char ... ok
test_11 (test_vim.Move)
f to search forward ... ok
test_12 (test_vim.Move)
F to search backward ... ok
test_13 (test_vim.Move)
t to search forward ... ok
test_14 (test_vim.Move)
T to search backward ... ok
test_15 (test_vim.Move)
f in a composite command ... ok
test_16 (test_vim.Move)
E ... ok
test_17 (test_vim.Move)
W ... ok
test_18 (test_vim.Move)
B ... ok
test_19 (test_vim.Move)
Enter, Return ... ok
test_01 (test_vim.Repeat)
Repeat o ... ok
test_02 (test_vim.Repeat)
Repeat o. Use count from previous command ... ok
test_03 (test_vim.Repeat)
Repeat O ... ok
test_04 (test_vim.Repeat)
Repeat p ... ok
test_05 (test_vim.Repeat)
Repeat p ... ok
test_06 (test_vim.Repeat)
Repeat D ... ok
test_07 (test_vim.Repeat)
Repeat dw ... ok
test_08 (test_vim.Repeat)
Repeat Visual x ... ok
test_09 (test_vim.Repeat)
Repeat visual X ... ok
test_10 (test_vim.Repeat)
Repeat Visual > ... ok
test_01 (test_vim.Visual)
x ... ok
test_02 (test_vim.Visual)
Append with a ... ok
test_03 (test_vim.Visual)
Replace with r ... ok
test_04 (test_vim.Visual)
Replace selected lines with R ... ok
test_05 (test_vim.Visual)
Reset selection with u ... ok
test_06 (test_vim.Visual)
Yank with y and paste with p ... ok
test_07 (test_vim.Visual)
Replace word when pasting ... ok
test_08 (test_vim.Visual)
Change with c ... ok
test_09 (test_vim.Visual)
Delete lines with X and D ... ok
test_10 (test_vim.Visual)
Check if f works ... ok
test_11 (test_vim.Visual)
J join lines ... ok
test_01 (test_vim.VisualLines)
x Delete ... ok
test_02 (test_vim.VisualLines)
Replace text when pasting ... ok
test_06 (test_vim.VisualLines)
Yank with y and paste with p ... ok
test_07 (test_vim.VisualLines)
Change with c ... ok
======================================================================
FAIL: test_01 (test_vim.Move)
Move hjkl
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/build/BUILD/qutepart-3.0.0/tests/test_vim.py", line 185, in test_01
    self.assertEqual(self.qpart.cursorPosition, (2, 1))
AssertionError: Tuples differ: (2, 2) != (2, 1)
First differing element 1:
2
1
- (2, 2)
?     ^
+ (2, 1)
?     ^
----------------------------------------------------------------------
Ran 595 tests in 32.255s
FAILED (failures=1, skipped=8, expected failures=11)

Full build.log, see https://kojipkgs.fedoraproject.org//packages/python-qutepart/3.0.0/1.fc25/data/logs/x86_64/build.log @

Fix freeze on apparmor highlighting

usr.bin.apparmor-profile-test file freezes re.match with regexp

   re.compile('([^\\s/\\[\\(]*|\\[[^\\s\\]]*\\])*/($|[^/])')

and code

   {u,un,unc,unco,uncon,unconf,unconfi,unconfin,unconfine},

Try to fix the reg exp

Unit test hang

When I execute run_all.py, all tests pass but the program never quits; I have to kill the process manually. (This is on Windows). Investigating, I can remove all tests except for test_vim.py and still get the hang. Looking at older revisions, this happens back to ba77ebb (again, with only test_vim.py). Before that, I get syntax errors (del_ is now named terminate). If I run test_vim.py directly, there's no hang; running run_all.py (which only executes test_vim.py, since I've deleted all other tests) produces the hang. ???

Multicursor feature

Hi, first of all let me tell you after reading this project code a bit I must to say I'm impressed, it is pretty awesome&cool :)

Why am I telling this? Thing is, I've explored almost all github for few months in order to find a standalone text editor widget for python+qt that offers similar "core functionality" than codemirror, monarch, sublimetext, vscode, atom, etc... in my experience I can tell you none of the qt attempts (not even qtcreator itself) I've found were able to reach the same level of "core features"... Why? Because implementing multicursor feature properly isn't trivial by all means.

For instance, take a look to the good old (Q)Scintilla, you'll see that widget has already attempted to implement multicursor few years ago but the whole experience is completely ruined mainly because it hasn't implemented properly undo/redo and also the feature itself is not very "consistent".

Anyway, my question to you is, how hard would be implementing the multicursor feature with undo/redo properly on qutepart? IMHO if such feature was implemented, this project would reach the "next level/milestone" and it'd probably become some sort of "reference" for the python+qt community for sure.

Btw, I'll paste here some resources I've found in the past in case it may help somehow:

Text editors
------------

https://github.com/ajaxorg/ace
https://github.com/andreikop/qutepart
https://github.com/awm/synhtor/wiki/Research
https://github.com/codemirror/CodeMirror
https://github.com/edbee/edbee
https://github.com/edbee/edbee-app
https://github.com/edbee/edbee-data
https://github.com/edbee/edbee-examples
https://github.com/edbee/edbee-lib
https://github.com/githole/Live-Coder
https://github.com/howl-editor
https://github.com/hydrargyrum/eye
https://github.com/JuBan1/notepadqq
https://github.com/JuBan1/OpenTextEdit
https://github.com/kai66673/PythonEditor
https://github.com/luchko/QCodeEditor
https://github.com/lukedan/codepad
https://github.com/martinrotter/textosaurus
https://github.com/matkuki/ExCo
https://github.com/prymatex/prymatex
https://github.com/pybee/seasnake
https://github.com/pyQode/pyqode.core
https://github.com/richrd/suplemon
https://github.com/SergeySatskiy/codimension
https://github.com/smathot/QProgEdit
https://github.com/spyder-ide/spyder
https://github.com/trishume/syntect
https://github.com/tsujan/FeatherPad
https://github.com/waddlesplash/Heidi
https://kate-editor.org/
https://sourceforge.net/projects/synwrite

Text rendering
--------------
https://learnopengl.com/In-Practice/Text-Rendering
https://wdobbie.com/post/gpu-text-rendering-with-vector-textures/
https://medium.com/@evanwallace/easy-scalable-text-rendering-on-the-gpu-c3f4d782c5ac
http://jcgt.org/published/0006/02/02/
https://blog.mapbox.com/drawing-text-with-signed-distance-fields-in-mapbox-gl-b0933af6f817
https://aras-p.info/blog/2017/02/15/Font-Rendering-is-Getting-Interesting/
https://medium.com/@calebfaith/implementing-msdf-font-in-opengl-ea09a9ab7e00
https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch25.html
https://www.microsoft.com/en-us/research/wp-content/uploads/2005/01/p1000-loop.pdf
https://wildfiregames.com/forum/index.php?/topic/17365-freetype-ttf-fonts-in-opengl/

https://github.com/rougier/freetype-gl
https://github.com/servo/pathfinder
https://github.com/Chlumsky/msdfgen
https://github.com/behdad/glyphy
https://github.com/0ad/0ad

Ps. The way codemirror implements that feature is quite nice actually.

TypeError: unicodeText must be unicode

Can't use Qutepart on Ubuntu 14.04 with python2.7 and PyQt 4.10.4 with the following code:

from qutepart import Qutepart


class QueryEditor(Qutepart):
    def __init__(self, *args, **kwargs):
        super(QueryEditor, self).__init__(*args, **kwargs)
        self.completionEnabled = True
        self.completionThreshold = 2
        self.indentUseTabs = True
        self.indentWidth = 4
        self.detectSyntax(xmlFileName="sql-postgresql.xml")

    def setText(self, text):
        self.text = text

    def getText(self):
        return self.text


if __name__ == "__main__":
    from PyQt4 import QtGui
    import sys
    app = QtGui.QApplication(sys.argv)
    editor = QueryEditor()
    editor.show()
    editor.setText(open(sys.argv[0]).read())
    app.exec_()

and the traceback :

Traceback (most recent call last):
  File "/home/lionel/Developpement/Projets/pgleon/ui/widgets/editor.py", line 29, in <module>
    editor = QueryEditor()
  File "/home/lionel/Developpement/Projets/pgleon/ui/widgets/editor.py", line 16, in __init__
    self.detectSyntax(xmlFileName="sql-postgresql.xml")
  File "/usr/local/lib/python2.7/dist-packages/qutepart/__init__.py", line 674, in detectSyntax
    self._highlighter = SyntaxHighlighter(syntax, self)
  File "/usr/local/lib/python2.7/dist-packages/qutepart/syntaxhlighter.py", line 114, in __init__
    self._onContentsChange(0, 0, charsAdded, zeroTimeout=self._wasChangedJustBefore())
  File "/usr/local/lib/python2.7/dist-packages/qutepart/syntaxhlighter.py", line 220, in _onContentsChange
    self._highlighBlocks(firstBlock, untilBlock, timeout)
  File "/usr/local/lib/python2.7/dist-packages/qutepart/syntaxhlighter.py", line 242, in _highlighBlocks
    lineData, highlightedSegments = self._syntax.highlightBlock(block.text(), contextStack)
TypeError: unicodeText must be unicode

Lags during typing

vi, could you please

  • pull the latest version
  • cd profiling
  • ./typing_performance_test.py ../qutepart/__init__.py Execute from this directory, not from root of the repository!
  • Paste me the output

Output from your old Atom is especially interesting
Sometimes I feel, that typing response is not ideal, but, haven't reproduced it under profiler yet.

Incorrect cursorRect() for wrapped lines

I'm working on a features which aligns the cursor / selection in both the preview dock and the main qutepart editor window. To do this, I rely on qutepart.cursorRect() to give me the coordinates of the cusor in qutepart. However, it looks like these coordinates aren't correct for long lines which qutepart wraps. Do you want a screen shot, a test case, or something else to help demonstrate this bug?

Prefer system icons over bundled ones

qutepart would look nicer/more integrated if the system’s icons (QIcon.fromTheme()) would be used. The bundled icons can be used as a fallback.

I could create a PR if this is something you’d like to change.

Compiler warning

When compiling on MSVC++, I get:

qutepart/syntax/cParser.c(2100) : warning C4244: 'initializing' : conversion from 'Py_UNICODE' to 'char', possible loss of data.

Test failures with Python 3.9

+ xvfb-run -s '-screen :0 1024x768x16' /usr/bin/python3 -m unittest -vvv test_actions.py test_api.py test_bookmarks.py test_bracket_hlighter.py test_completion.py test_draw_whitespace.py test_edit.py 
test_indent.py test_indenter test_rectangular_selection.py test_syntax
test_1 (test_actions.Print) ... skipped 'Does not work'
test_completion_enabled (test_api.Completion) ... /builddir/build/BUILD/qutepart-3.3.0/qutepart/margins.py:78: DeprecationWarning: an integer is required (got type float).  Implicit conversion to integers using __int__ is deprecated, and may be removed in a future version of Python.
  self.update(0, rect.y(), self.width(), rect.height() + blockHeight)
/builddir/build/BUILD/qutepart-3.3.0/qutepart/htmldelegate.py:83: DeprecationWarning: an integer is required (got type float).  Implicit conversion to integers using __int__ is deprecated, and may be removed in a future version of Python.
  return QSize(doc.idealWidth(),
/builddir/build/BUILD/qutepart-3.3.0/qutepart/completer.py:233: DeprecationWarning: an integer is required (got type float).  Implicit conversion to integers using __int__ is deprecated, and may be removed in a future version of Python.
  return QSize(width, height)
ok
test_threshold (test_api.Completion) ... ok
test_1 (test_api.DetectSyntax) ... ERROR
test_1 (test_api.InsertText) ... ok
test_2 (test_api.InsertText) ... ok
test_3 (test_api.InsertText) ... ok
test_1 (test_api.IsCodeOrComment) ... ERROR
test_2 (test_api.IsCodeOrComment) ... ERROR
test_block_comment (test_api.IsCodeOrComment) ... ERROR
test_here_doc (test_api.IsCodeOrComment) ... /builddir/build/BUILD/qutepart-3.3.0/qutepart/indenter/ruby.py:241: DeprecationWarning: invalid escape sequence \s
  self.testAtEnd(prevStmt, re.compile(',\s*'))
/usr/bin/xvfb-run: line 181:   457 Aborted                 (core dumped) DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" 2>&1
error: Bad exit status from /var/tmp/rpm-tmp.4daIdx (%check)

I guess the error happens somewhere inside the detectSyntax method.

def detectSyntax(self,

PEP 623

python-qutepart fails to build with Python 3.12.0a3.

qutepart/syntax/cParser.c: In function ‘RangeDetect_init’:
qutepart/syntax/cParser.c:2323:46: error: subscripted value is neither array
nor pointer nor vector
2323 | self->char_ = PyUnicode_AS_UNICODE(char_)[0];
| ^
qutepart/syntax/cParser.c:2324:48: error: subscripted value is neither array
nor pointer nor vector
2324 | self->char1_ = PyUnicode_AS_UNICODE(char1_)[0];
| ^
qutepart/syntax/cParser.c: In function ‘Context_setValues’:
qutepart/syntax/cParser.c:2743:57: error: subscripted value is neither array
nor pointer nor vector
2743 | self->textType = PyUnicode_AsUnicode(textTypePython)[0];
|

Leagcy Unicode APIs has been removed. See PEP 623 for detail.
PyUnicode_WCHAR_KIND
PyUnicode_AS_UNICODE()
PyUnicode_AsUnicode()
PyUnicode_AsUnicodeAndSize()
PyUnicode_AS_DATA()
PyUnicode_FromUnicode()
PyUnicode_GET_SIZE()
PyUnicode_GetSize()
PyUnicode_GET_DATA_SIZE()

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.