Merge branch 'master' of git://github.com/rgiot/ultisnips into rgiot-master
This commit is contained in:
commit
ef2c657721
@ -58,7 +58,7 @@ endsnippet
|
|||||||
|
|
||||||
snippet part "Part" b
|
snippet part "Part" b
|
||||||
\part{${1:part name}}
|
\part{${1:part name}}
|
||||||
\label{prt:${2:${1/(\w+)|\W+/(?1:\L$0\E:_)/g}}}
|
\label{prt:${2:${1/(\w+)|\W+/(?1:\L$0\E:_)/ga}}}
|
||||||
|
|
||||||
${0}
|
${0}
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ endsnippet
|
|||||||
|
|
||||||
snippet cha "Chapter" b
|
snippet cha "Chapter" b
|
||||||
\chapter{${1:chapter name}}
|
\chapter{${1:chapter name}}
|
||||||
\label{cha:${2:${1/\\\w+\{(.*?)\}|\\(.)|(\w+)|([^\w\\]+)/(?4:_:\L$1$2$3\E)/g}}}
|
\label{cha:${2:${1/\\\w+\{(.*?)\}|\\(.)|(\w+)|([^\w\\]+)/(?4:_:\L$1$2$3\E)/ga}}}
|
||||||
|
|
||||||
${0}
|
${0}
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ endsnippet
|
|||||||
|
|
||||||
snippet sec "Section" b
|
snippet sec "Section" b
|
||||||
\section{${1:section name}}
|
\section{${1:section name}}
|
||||||
\label{sec:${2:${1/\\\w+\{(.*?)\}|\\(.)|(\w+)|([^\w\\]+)/(?4:_:\L$1$2$3\E)/g}}}
|
\label{sec:${2:${1/\\\w+\{(.*?)\}|\\(.)|(\w+)|([^\w\\]+)/(?4:_:\L$1$2$3\E)/ga}}}
|
||||||
|
|
||||||
${0}
|
${0}
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ endsnippet
|
|||||||
|
|
||||||
snippet sub "Subsection" b
|
snippet sub "Subsection" b
|
||||||
\subsection{${1:subsection name}}
|
\subsection{${1:subsection name}}
|
||||||
\label{sub:${2:${1/\\\w+\{(.*?)\}|\\(.)|(\w+)|([^\w\\]+)/(?4:_:\L$1$2$3\E)/g}}}
|
\label{sub:${2:${1/\\\w+\{(.*?)\}|\\(.)|(\w+)|([^\w\\]+)/(?4:_:\L$1$2$3\E)/ga}}}
|
||||||
|
|
||||||
${0}
|
${0}
|
||||||
|
|
||||||
@ -95,7 +95,7 @@ endsnippet
|
|||||||
|
|
||||||
snippet ssub "Subsubsection" b
|
snippet ssub "Subsubsection" b
|
||||||
\subsubsection{${1:subsubsection name}}
|
\subsubsection{${1:subsubsection name}}
|
||||||
\label{ssub:${2:${1/\\\w+\{(.*?)\}|\\(.)|(\w+)|([^\w\\]+)/(?4:_:\L$1$2$3\E)/g}}}
|
\label{ssub:${2:${1/\\\w+\{(.*?)\}|\\(.)|(\w+)|([^\w\\]+)/(?4:_:\L$1$2$3\E)/ga}}}
|
||||||
|
|
||||||
${0}
|
${0}
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ endsnippet
|
|||||||
|
|
||||||
snippet par "Paragraph" b
|
snippet par "Paragraph" b
|
||||||
\paragraph{${1:paragraph name}}
|
\paragraph{${1:paragraph name}}
|
||||||
\label{par:${2:${1/\\\w+\{(.*?)\}|\\(.)|(\w+)|([^\w\\]+)/(?4:_:\L$1$2$3\E)/g}}}
|
\label{par:${2:${1/\\\w+\{(.*?)\}|\\(.)|(\w+)|([^\w\\]+)/(?4:_:\L$1$2$3\E)/ga}}}
|
||||||
|
|
||||||
${0}
|
${0}
|
||||||
|
|
||||||
@ -115,7 +115,7 @@ endsnippet
|
|||||||
|
|
||||||
snippet subp "Subparagraph" b
|
snippet subp "Subparagraph" b
|
||||||
\subparagraph{${1:subparagraph name}}
|
\subparagraph{${1:subparagraph name}}
|
||||||
\label{par:${2:${1/\\\w+\{(.*?)\}|\\(.)|(\w+)|([^\w\\]+)/(?4:_:\L$1$2$3\E)/g}}}
|
\label{par:${2:${1/\\\w+\{(.*?)\}|\\(.)|(\w+)|([^\w\\]+)/(?4:_:\L$1$2$3\E)/ga}}}
|
||||||
|
|
||||||
${0}
|
${0}
|
||||||
|
|
||||||
|
@ -1155,6 +1155,11 @@ The options can be any combination of >
|
|||||||
i - case insensitive
|
i - case insensitive
|
||||||
By default, regular expression matching is case sensitive. With this
|
By default, regular expression matching is case sensitive. With this
|
||||||
option, matching is done without regard to case.
|
option, matching is done without regard to case.
|
||||||
|
a - ascii conversion
|
||||||
|
By default, transformation are made on the raw utf-8 string. With
|
||||||
|
this option, matching is done on the corresponding ASCII string
|
||||||
|
instead, for example 'à' will become 'a'.
|
||||||
|
This option required the python package 'unidecode'.
|
||||||
|
|
||||||
The syntax of regular expressions is beyond the scope of this document. Python
|
The syntax of regular expressions is beyond the scope of this document. Python
|
||||||
regular expressions are used internally, so the python 're' module can be used
|
regular expressions are used internally, so the python 're' module can be used
|
||||||
@ -1214,6 +1219,18 @@ this is a title
|
|||||||
This Is A Title
|
This Is A Title
|
||||||
|
|
||||||
|
|
||||||
|
Demo: ASCII transformation
|
||||||
|
------------------- SNIP -------------------
|
||||||
|
snippet ascii "Replace non ascii chars"
|
||||||
|
${1: an accentued text}
|
||||||
|
${1/.*/$0/a}
|
||||||
|
endsnippet
|
||||||
|
------------------- SNAP -------------------
|
||||||
|
ascii<tab>à la pêche aux moules
|
||||||
|
à la pêche aux moules
|
||||||
|
a la peche aux moules
|
||||||
|
|
||||||
|
|
||||||
Demo: Regular expression grouping
|
Demo: Regular expression grouping
|
||||||
This is a clever c-like printf snippet, the second tabstop is only shown
|
This is a clever c-like printf snippet, the second tabstop is only shown
|
||||||
when there is a format (%) character in the first tabstop.
|
when there is a format (%) character in the first tabstop.
|
||||||
|
@ -2,9 +2,12 @@
|
|||||||
# encoding: utf-8
|
# encoding: utf-8
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
import sys
|
||||||
from UltiSnips.text_objects._mirror import Mirror
|
from UltiSnips.text_objects._mirror import Mirror
|
||||||
|
|
||||||
|
# flag used to display only one time the lack of unidecode
|
||||||
|
UNIDECODE_ALERT_RAISED = False
|
||||||
|
|
||||||
class _CleverReplace(object):
|
class _CleverReplace(object):
|
||||||
"""
|
"""
|
||||||
This class mimics TextMates replace syntax
|
This class mimics TextMates replace syntax
|
||||||
@ -108,16 +111,28 @@ class TextObjectTransformation(object):
|
|||||||
|
|
||||||
flags = 0
|
flags = 0
|
||||||
self._match_this_many = 1
|
self._match_this_many = 1
|
||||||
|
self._convert_to_ascii = False
|
||||||
if token.options:
|
if token.options:
|
||||||
if "g" in token.options:
|
if "g" in token.options:
|
||||||
self._match_this_many = 0
|
self._match_this_many = 0
|
||||||
if "i" in token.options:
|
if "i" in token.options:
|
||||||
flags |= re.IGNORECASE
|
flags |= re.IGNORECASE
|
||||||
|
if "a" in token.options:
|
||||||
|
self._convert_to_ascii = True
|
||||||
|
|
||||||
self._find = re.compile(token.search, flags | re.DOTALL)
|
self._find = re.compile(token.search, flags | re.DOTALL)
|
||||||
self._replace = _CleverReplace(token.replace)
|
self._replace = _CleverReplace(token.replace)
|
||||||
|
|
||||||
def _transform(self, text):
|
def _transform(self, text):
|
||||||
|
global UNIDECODE_ALERT_RAISED
|
||||||
|
if self._convert_to_ascii:
|
||||||
|
try:
|
||||||
|
import unidecode
|
||||||
|
text = unidecode.unidecode(text)
|
||||||
|
except Exception, e:
|
||||||
|
if UNIDECODE_ALERT_RAISED == False:
|
||||||
|
UNIDECODE_ALERT_RAISED = True
|
||||||
|
sys.stderr.write("Please install unidecode python package in order to be able to make ascii conversions.\n")
|
||||||
if self._find is None:
|
if self._find is None:
|
||||||
return text
|
return text
|
||||||
return self._find.subn(self._replace.replace, text, self._match_this_many)[0]
|
return self._find.subn(self._replace.replace, text, self._match_this_many)[0]
|
||||||
|
16
test.py
16
test.py
@ -40,6 +40,12 @@ import subprocess
|
|||||||
|
|
||||||
from textwrap import dedent
|
from textwrap import dedent
|
||||||
|
|
||||||
|
try:
|
||||||
|
import unidecode
|
||||||
|
UNIDECODE_IMPORTED = True
|
||||||
|
except ImportError:
|
||||||
|
UNIDECODE_IMPORTED = False
|
||||||
|
|
||||||
# Some constants for better reading
|
# Some constants for better reading
|
||||||
BS = '\x7f'
|
BS = '\x7f'
|
||||||
ESC = '\x1b'
|
ESC = '\x1b'
|
||||||
@ -1473,6 +1479,16 @@ class Transformation_CleverTransformLongLower_ExceptCorrectResult(_VimTest):
|
|||||||
keys = "test" + EX + "HALLO"
|
keys = "test" + EX + "HALLO"
|
||||||
wanted = "HALLO hallo"
|
wanted = "HALLO hallo"
|
||||||
|
|
||||||
|
if UNIDECODE_IMPORTED:
|
||||||
|
class Transformation_SimpleCaseAsciiResult(_VimTest):
|
||||||
|
snippets = ("ascii", "$1 ${1/(.*)/$1/a}")
|
||||||
|
keys = "ascii" + EX + "éèàçôïÉÈÀÇÔÏ€"
|
||||||
|
wanted = "éèàçôïÉÈÀÇÔÏ€ eeacoiEEACOIEU"
|
||||||
|
class Transformation_LowerCaseAsciiResult(_VimTest):
|
||||||
|
snippets = ("ascii", "$1 ${1/(.*)/\L$1\E/a}")
|
||||||
|
keys = "ascii" + EX + "éèàçôïÉÈÀÇÔÏ€"
|
||||||
|
wanted = "éèàçôïÉÈÀÇÔÏ€ eeacoieeacoieu"
|
||||||
|
|
||||||
class Transformation_ConditionalInsertionSimple_ExceptCorrectResult(_VimTest):
|
class Transformation_ConditionalInsertionSimple_ExceptCorrectResult(_VimTest):
|
||||||
snippets = ("test", "$1 ${1/(^a).*/(?0:began with an a)/}")
|
snippets = ("test", "$1 ${1/(^a).*/(?0:began with an a)/}")
|
||||||
keys = "test" + EX + "a some more text"
|
keys = "test" + EX + "a some more text"
|
||||||
|
Loading…
Reference in New Issue
Block a user