Hello community, here is the log from the commit of package python-markdown2 for openSUSE:Factory checked in at 2019-07-24 20:35:44 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-markdown2 (Old) and /work/SRC/openSUSE:Factory/.python-markdown2.new.4126 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-markdown2" Wed Jul 24 20:35:44 2019 rev:4 rq:718111 version:2.3.8 Changes: -------- --- /work/SRC/openSUSE:Factory/python-markdown2/python-markdown2.changes 2019-04-08 20:53:24.338562610 +0200 +++ /work/SRC/openSUSE:Factory/.python-markdown2.new.4126/python-markdown2.changes 2019-07-24 20:35:45.438572624 +0200 @@ -1,0 +2,11 @@ +Wed Jul 24 08:02:38 UTC 2019 - Tomáš Chvátal <tchva...@suse.com> + +- Update to 2.3.8: + * [pull #317] Temporary fix to issue #150 + * [pull #319] Stop XML escaping the body of a link + * [pull #322] Don't auto link patterns surrounded by triple quotes + * [pull #324] Add class configurability to the enclosing tag + * [pull #328] Accept [X] as marked task +- Drop merged patch fix-build.patch + +------------------------------------------------------------------- Old: ---- fix-build.patch markdown2-2.3.7.tar.gz New: ---- markdown2-2.3.8.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-markdown2.spec ++++++ --- /var/tmp/diff_new_pack.uIujp1/_old 2019-07-24 20:35:45.906572572 +0200 +++ /var/tmp/diff_new_pack.uIujp1/_new 2019-07-24 20:35:45.906572572 +0200 @@ -17,16 +17,14 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} -%bcond_without test Name: python-markdown2 -Version: 2.3.7 +Version: 2.3.8 Release: 0 Summary: A Python implementation of Markdown License: MIT Group: Development/Languages/Python URL: https://github.com/trentm/python-markdown2 Source: https://files.pythonhosted.org/packages/source/m/markdown2/markdown2-%{version}.tar.gz -Patch0: fix-build.patch BuildRequires: %{python_module pygments} BuildRequires: %{python_module setuptools} BuildRequires: fdupes @@ -46,7 +44,6 @@ %prep %setup -q -n markdown2-%{version} -%patch0 -p1 %build %python_build ++++++ markdown2-2.3.7.tar.gz -> markdown2-2.3.8.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/CHANGES.md new/markdown2-2.3.8/CHANGES.md --- old/markdown2-2.3.7/CHANGES.md 2018-12-05 19:55:15.000000000 +0100 +++ new/markdown2-2.3.8/CHANGES.md 2019-05-29 20:55:44.000000000 +0200 @@ -1,5 +1,14 @@ # python-markdown2 Changelog +## python-markdown2 2.3.8 + +- [pull #317] Temporary fix to issue #150 +- [pull #319] Stop XML escaping the body of a link +- [pull #322] Don't auto link patterns surrounded by triple quotes +- [pull #324] Add class configurability to the enclosing tag +- [pull #328] Accept [X] as marked task + + ## python-markdown2 2.3.7 - [pull #306] Drop support for legacy Python versions diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/CONTRIBUTORS.txt new/markdown2-2.3.8/CONTRIBUTORS.txt --- old/markdown2-2.3.7/CONTRIBUTORS.txt 2018-09-17 18:02:01.000000000 +0200 +++ new/markdown2-2.3.8/CONTRIBUTORS.txt 2019-05-28 19:49:01.000000000 +0200 @@ -38,3 +38,7 @@ Hassan Magdy Saad (github.com/hmagdy) Christian Klus (github.com/kluchrj) Tsuyoshi Hombashi (github.com/thombashi) +Sym Roe (github.com/symroe) +Alex Elzenaar (github.com/aelzenaar) +Francisco Saldaña (github.com/FrankSalad) +Shivam Kumar Jha (github.com/thealphadollar) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/PKG-INFO new/markdown2-2.3.8/PKG-INFO --- old/markdown2-2.3.7/PKG-INFO 2018-12-05 19:57:52.000000000 +0100 +++ new/markdown2-2.3.8/PKG-INFO 2019-05-29 20:55:53.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: markdown2 -Version: 2.3.7 +Version: 2.3.8 Summary: A fast and complete Python implementation of Markdown Home-page: https://github.com/trentm/python-markdown2 Author: Trent Mick diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/lib/markdown2.egg-info/PKG-INFO new/markdown2-2.3.8/lib/markdown2.egg-info/PKG-INFO --- old/markdown2-2.3.7/lib/markdown2.egg-info/PKG-INFO 2018-12-05 19:57:52.000000000 +0100 +++ new/markdown2-2.3.8/lib/markdown2.egg-info/PKG-INFO 2019-05-29 20:55:52.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: markdown2 -Version: 2.3.7 +Version: 2.3.8 Summary: A fast and complete Python implementation of Markdown Home-page: https://github.com/trentm/python-markdown2 Author: Trent Mick diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/lib/markdown2.egg-info/SOURCES.txt new/markdown2-2.3.8/lib/markdown2.egg-info/SOURCES.txt --- old/markdown2-2.3.7/lib/markdown2.egg-info/SOURCES.txt 2018-12-05 19:57:52.000000000 +0100 +++ new/markdown2-2.3.8/lib/markdown2.egg-info/SOURCES.txt 2019-05-29 20:55:52.000000000 +0200 @@ -156,6 +156,9 @@ test/tm-cases/footnotes_safe_mode_escape.opts test/tm-cases/footnotes_safe_mode_escape.tags test/tm-cases/footnotes_safe_mode_escape.text +test/tm-cases/footnotes_smarty-pants.html +test/tm-cases/footnotes_smarty-pants.opts +test/tm-cases/footnotes_smarty-pants.text test/tm-cases/footnotes_underscores.html test/tm-cases/footnotes_underscores.opts test/tm-cases/footnotes_underscores.tags @@ -250,6 +253,9 @@ test/tm-cases/link_patterns_edge_cases.opts test/tm-cases/link_patterns_edge_cases.tags test/tm-cases/link_patterns_edge_cases.text +test/tm-cases/link_patterns_escape.html +test/tm-cases/link_patterns_escape.opts +test/tm-cases/link_patterns_escape.text test/tm-cases/link_patterns_markdown_syntax.html test/tm-cases/link_patterns_markdown_syntax.opts test/tm-cases/link_patterns_markdown_syntax.text diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/lib/markdown2.py new/markdown2-2.3.8/lib/markdown2.py --- old/markdown2-2.3.7/lib/markdown2.py 2018-12-05 19:55:15.000000000 +0100 +++ new/markdown2-2.3.8/lib/markdown2.py 2019-05-28 19:47:41.000000000 +0200 @@ -96,7 +96,7 @@ # not yet sure if there implications with this. Compare 'pydoc sre' # and 'perldoc perlre'. -__version_info__ = (2, 3, 7) +__version_info__ = (2, 3, 8) __version__ = '.'.join(map(str, __version_info__)) __author__ = "Trent Mick" @@ -1408,7 +1408,7 @@ result_head = '<a href="#"%s>' % (title_str) else: result_head = '<a href="%s"%s>' % (_html_escape_url(url, safe_mode=self.safe_mode), title_str) - result = '%s%s</a>' % (result_head, _xml_escape_attr(link_text)) + result = '%s%s</a>' % (result_head, link_text) if "smarty-pants" in self.extras: result = result.replace('"', self._escape_table['"']) # <img> allowed from curr_pos on, <a> from @@ -1655,7 +1655,7 @@ re.M | re.X | re.S) _task_list_item_re = re.compile(r''' - (\[[\ x]\])[ \t]+ # tasklist marker = \1 + (\[[\ xX]\])[ \t]+ # tasklist marker = \1 (.*) # list item text = \2 ''', re.M | re.X | re.S) @@ -1664,7 +1664,7 @@ def _task_list_item_sub(self, match): marker = match.group(1) item_text = match.group(2) - if marker == '[x]': + if marker in ['[x]','[X]']: return self._task_list_warpper_str % ('checked ', item_text) elif marker == '[ ]': return self._task_list_warpper_str % ('', item_text) @@ -1772,7 +1772,7 @@ lexer_name = lexer_name[3:].strip() codeblock = rest.lstrip("\n") # Remove lexer declaration line. formatter_opts = self.extras['code-color'] or {} - + # Use pygments only if not using the highlightjs-lang extra if lexer_name and "highlightjs-lang" not in self.extras: def unhash_code(codeblock): @@ -1981,6 +1981,13 @@ text = text.replace("...", "…") text = text.replace(" . . . ", "…") text = text.replace(". . .", "…") + + # TODO: Temporary hack to fix https://github.com/trentm/python-markdown2/issues/150 + if "footnotes" in self.extras and "footnote-ref" in text: + # Quotes in the footnote back ref get converted to "smart" quotes + # Change them back here to ensure they work. + text = text.replace('class="footnote-ref”', 'class="footnote-ref"') + return text _block_quote_base = r''' @@ -2066,7 +2073,7 @@ # Wrap <p> tags. graf = self._run_span_gamut(graf) - grafs.append("<p>" + graf.lstrip(" \t") + "</p>") + grafs.append("<p%s>" % self._html_class_str_from_tag('p') + graf.lstrip(" \t") + "</p>") if cuddled_list: grafs.append(cuddled_list) @@ -2139,7 +2146,7 @@ def _encode_incomplete_tags(self, text): if self.safe_mode not in ("replace", "escape"): return text - + return self._incomplete_tags_re.sub("<\\1", text) def _encode_backslash_escapes(self, text): @@ -2211,6 +2218,11 @@ if text[start - 2:start] == '](' or text[end:end + 2] == '")': continue + # Do not match against links which are escaped. + if text[start - 3:start] == '"""' and text[end:end + 3] == '"""': + text = text[:start - 3] + text[start:end] + text[end + 3:] + continue + escaped_href = ( href.replace('"', '"') # b/c of attr quote # To avoid markdown <em> and <strong>: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/setup.cfg new/markdown2-2.3.8/setup.cfg --- old/markdown2-2.3.7/setup.cfg 2018-12-05 19:57:52.000000000 +0100 +++ new/markdown2-2.3.8/setup.cfg 2019-05-29 20:55:53.000000000 +0200 @@ -1,6 +1,3 @@ -[aliases] -build = sdist bdist_wheel - [wheel] universal = 1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/test/tm-cases/footnotes_smarty-pants.html new/markdown2-2.3.8/test/tm-cases/footnotes_smarty-pants.html --- old/markdown2-2.3.7/test/tm-cases/footnotes_smarty-pants.html 1970-01-01 01:00:00.000000000 +0100 +++ new/markdown2-2.3.8/test/tm-cases/footnotes_smarty-pants.html 2018-12-14 19:15:07.000000000 +0100 @@ -0,0 +1,14 @@ +<p>This is a para with a footnote.<sup class="footnote-ref" id="fnref-1"><a href="#fn-1">1</a></sup></p> + +<div class="footnotes"> +<hr /> +<ol> +<li id="fn-1"> +<p>Here is the <em>body</em> of <span class="yo">the</span> footnote.</p> + +<div class="blah">And here is the second para of the footnote.</div> + +<p><a href="#fnref-1" class="footnoteBackLink" title="Jump back to footnote 1 in the text.">↩</a></p> +</li> +</ol> +</div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/test/tm-cases/footnotes_smarty-pants.opts new/markdown2-2.3.8/test/tm-cases/footnotes_smarty-pants.opts --- old/markdown2-2.3.7/test/tm-cases/footnotes_smarty-pants.opts 1970-01-01 01:00:00.000000000 +0100 +++ new/markdown2-2.3.8/test/tm-cases/footnotes_smarty-pants.opts 2018-12-14 19:15:07.000000000 +0100 @@ -0,0 +1 @@ +{"extras": ["footnotes", "smarty-pants"]} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/test/tm-cases/footnotes_smarty-pants.text new/markdown2-2.3.8/test/tm-cases/footnotes_smarty-pants.text --- old/markdown2-2.3.7/test/tm-cases/footnotes_smarty-pants.text 1970-01-01 01:00:00.000000000 +0100 +++ new/markdown2-2.3.8/test/tm-cases/footnotes_smarty-pants.text 2018-12-14 19:15:07.000000000 +0100 @@ -0,0 +1,5 @@ +This is a para with a footnote.[^1] + +[^1]: Here is the <em>body</em> of <span class="yo">the</span> footnote. + + <div class="blah">And here is the second para of the footnote.</div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/test/tm-cases/html_classes.html new/markdown2-2.3.8/test/tm-cases/html_classes.html --- old/markdown2-2.3.7/test/tm-cases/html_classes.html 2014-12-22 06:29:36.000000000 +0100 +++ new/markdown2-2.3.8/test/tm-cases/html_classes.html 2019-05-09 00:01:50.000000000 +0200 @@ -26,10 +26,10 @@ </tbody> </table> -<p>For example:</p> +<p class="col-xs-3 custom-paragraph-class">For example:</p> <pre class="syntaxcolor"><code class="codesyntaxcolor">if cond: print doit() </code></pre> -<p><img src="http://www.google.com/images/logo.gif" alt="the google logo" class="custom-image-class" /></p> +<p class="col-xs-3 custom-paragraph-class"><img src="http://www.google.com/images/logo.gif" alt="the google logo" class="custom-image-class" /></p> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/test/tm-cases/html_classes.opts new/markdown2-2.3.8/test/tm-cases/html_classes.opts --- old/markdown2-2.3.7/test/tm-cases/html_classes.opts 2014-12-22 06:29:36.000000000 +0100 +++ new/markdown2-2.3.8/test/tm-cases/html_classes.opts 2019-05-09 00:01:50.000000000 +0200 @@ -6,7 +6,8 @@ "pre": "syntaxcolor", "code": "codesyntaxcolor", "img": "custom-image-class", - "table": "table table-striped" + "table": "table table-striped", + "p": "col-xs-3 custom-paragraph-class", } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/test/tm-cases/html_classes.tags new/markdown2-2.3.8/test/tm-cases/html_classes.tags --- old/markdown2-2.3.7/test/tm-cases/html_classes.tags 2013-11-12 18:07:14.000000000 +0100 +++ new/markdown2-2.3.8/test/tm-cases/html_classes.tags 2019-05-09 00:01:50.000000000 +0200 @@ -1 +1 @@ -extras html-classes knownfailure code.as.com +extras html-classes code.as.com diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/test/tm-cases/inline_links.html new/markdown2-2.3.8/test/tm-cases/inline_links.html --- old/markdown2-2.3.7/test/tm-cases/inline_links.html 2016-11-08 21:02:30.000000000 +0100 +++ new/markdown2-2.3.8/test/tm-cases/inline_links.html 2019-01-23 20:43:58.000000000 +0100 @@ -1,6 +1,8 @@ <p>an inline <a href="/url/">link</a></p> -<p>a <a href="/url/" title="title">link "with" title</a></p> +<p>a <a href="/url/" title="title">link "with" title</a></p> + +<p>an inline <a href="/url/">link with <code>code</code></a></p> <p>an inline <img src="/url/" alt="image link" /></p> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/test/tm-cases/inline_links.text new/markdown2-2.3.8/test/tm-cases/inline_links.text --- old/markdown2-2.3.7/test/tm-cases/inline_links.text 2013-11-12 18:07:14.000000000 +0100 +++ new/markdown2-2.3.8/test/tm-cases/inline_links.text 2019-01-23 20:43:58.000000000 +0100 @@ -2,6 +2,8 @@ a [link "with" title](/url/ "title") +an inline [link with `code`](/url/) + an inline ![image link](/url/) an ![image "with" title](/url/ "title") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/test/tm-cases/link_patterns_escape.html new/markdown2-2.3.8/test/tm-cases/link_patterns_escape.html --- old/markdown2-2.3.7/test/tm-cases/link_patterns_escape.html 1970-01-01 01:00:00.000000000 +0100 +++ new/markdown2-2.3.8/test/tm-cases/link_patterns_escape.html 2019-03-05 19:42:11.000000000 +0100 @@ -0,0 +1,9 @@ +<p>Recipe 123 and <a href="http://bugs.activestate.com/show_bug.cgi?id=234">a link to Komodo bug 234</a> are related.</p> + +<p><a href="http://example.org/Recipe 123">This is a link which has a pattern inside the url that shouldn't expand.</a></p> + +<p>Matched pattern is escaped: PEP 42 might be related too.</p> + +<p>Triple quotes not surrounding a matched pattern: PEP """42""" might be related too.</p> + +<p>"""This is some random text which should not be touched."""</p> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/test/tm-cases/link_patterns_escape.opts new/markdown2-2.3.8/test/tm-cases/link_patterns_escape.opts --- old/markdown2-2.3.7/test/tm-cases/link_patterns_escape.opts 1970-01-01 01:00:00.000000000 +0100 +++ new/markdown2-2.3.8/test/tm-cases/link_patterns_escape.opts 2019-03-05 19:42:11.000000000 +0100 @@ -0,0 +1,8 @@ +{"extras": ["link-patterns"], + "link_patterns": [ + (re.compile("recipe\s+(\d+)", re.I), r"http://code.activestate.com/recipes/\1/"), + (re.compile("(?:komodo\s+)?bug\s+(\d+)", re.I), r"http://bugs.activestate.com/show_bug.cgi?id=\1"), + (re.compile("PEP\s+(\d+)", re.I), lambda m: "http://www.python.org/dev/peps/pep-%04d/" % int(m.group(1))), + ], +} + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/test/tm-cases/link_patterns_escape.text new/markdown2-2.3.8/test/tm-cases/link_patterns_escape.text --- old/markdown2-2.3.7/test/tm-cases/link_patterns_escape.text 1970-01-01 01:00:00.000000000 +0100 +++ new/markdown2-2.3.8/test/tm-cases/link_patterns_escape.text 2019-03-05 19:42:11.000000000 +0100 @@ -0,0 +1,9 @@ +"""Recipe 123""" and <a href="http://bugs.activestate.com/show_bug.cgi?id=234">a link to """Komodo bug 234"""</a> are related. + +<a href="http://example.org/"""Recipe 123"""">This is a link which has a pattern inside the url that shouldn't expand.</a> + +Matched pattern is escaped: """PEP 42""" might be related too. + +Triple quotes not surrounding a matched pattern: PEP """42""" might be related too. + +"""This is some random text which should not be touched.""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/test/tm-cases/long_link.html new/markdown2-2.3.8/test/tm-cases/long_link.html --- old/markdown2-2.3.7/test/tm-cases/long_link.html 2016-11-08 21:02:30.000000000 +0100 +++ new/markdown2-2.3.8/test/tm-cases/long_link.html 2019-01-23 20:43:58.000000000 +0100 @@ -1,12 +1,12 @@ <h1>works</h1> -<p><a href="http://tuxdeluxe.org/node/287">wever installation of Kunnafonix was resisted by many of the local organizations they had to work with The local "computer person" resented a solution that was so easy to use that it undermined the power and prestige they received by being the person to consult when a Windows computer had problems</a></p> +<p><a href="http://tuxdeluxe.org/node/287">wever installation of Kunnafonix was resisted by many of the local organizations they had to work with The local "computer person" resented a solution that was so easy to use that it undermined the power and prestige they received by being the person to consult when a Windows computer had problems</a></p> <h1>issue 24: these fail</h1> <p><a href="http://tuxdeluxe.org/node/287">wever installation of Kunnafonix was resisted by many of the local organizations they had to -work with The local "computer person" resented a solution that was so easy to use that it undermined +work with The local "computer person" resented a solution that was so easy to use that it undermined the power and prestige they received by being the person to consult when a Windows computer had problems</a></p> -<p><a href="http://tuxdeluxe.org/node/287">However installation of Kunnafonix was resisted by many of the local organizations they had to work with The local "computer person" resented a solution that was so easy to use that it undermined the power and prestige they received by being the person to consult when a Windows computer had problems</a></p> +<p><a href="http://tuxdeluxe.org/node/287">However installation of Kunnafonix was resisted by many of the local organizations they had to work with The local "computer person" resented a solution that was so easy to use that it undermined the power and prestige they received by being the person to consult when a Windows computer had problems</a></p> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/test/tm-cases/task_list.html new/markdown2-2.3.8/test/tm-cases/task_list.html --- old/markdown2-2.3.7/test/tm-cases/task_list.html 2017-02-10 19:37:55.000000000 +0100 +++ new/markdown2-2.3.8/test/tm-cases/task_list.html 2019-05-28 19:47:41.000000000 +0200 @@ -1,4 +1,5 @@ <ul> <li><input type="checkbox" class="task-list-item-checkbox" checked disabled> item1</li> <li><input type="checkbox" class="task-list-item-checkbox" disabled> item2</li> +<li><input type="checkbox" class="task-list-item-checkbox" checked disabled> item3</li> </ul> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/markdown2-2.3.7/test/tm-cases/task_list.text new/markdown2-2.3.8/test/tm-cases/task_list.text --- old/markdown2-2.3.7/test/tm-cases/task_list.text 2016-06-24 05:41:18.000000000 +0200 +++ new/markdown2-2.3.8/test/tm-cases/task_list.text 2019-05-28 19:47:41.000000000 +0200 @@ -1,2 +1,3 @@ - [x] item1 - [ ] item2 +- [X] item3