mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 14:32:22 -04:00
use raw strings for regexs
This commit is contained in:
parent
3464b5fd80
commit
6e077ab414
13 changed files with 26 additions and 26 deletions
|
@ -301,7 +301,7 @@ class AnkiPackageExporter(AnkiExporter):
|
||||||
if os.path.isdir(mpath):
|
if os.path.isdir(mpath):
|
||||||
continue
|
continue
|
||||||
if os.path.exists(mpath):
|
if os.path.exists(mpath):
|
||||||
if re.search('\.svg$', file, re.IGNORECASE):
|
if re.search(r'\.svg$', file, re.IGNORECASE):
|
||||||
z.write(mpath, cStr, zipfile.ZIP_DEFLATED)
|
z.write(mpath, cStr, zipfile.ZIP_DEFLATED)
|
||||||
else:
|
else:
|
||||||
z.write(mpath, cStr, zipfile.ZIP_STORED)
|
z.write(mpath, cStr, zipfile.ZIP_STORED)
|
||||||
|
|
|
@ -70,7 +70,7 @@ class TextImporter(NoteImporter):
|
||||||
self.fileobj = open(self.file, "r", encoding='utf-8-sig')
|
self.fileobj = open(self.file, "r", encoding='utf-8-sig')
|
||||||
self.data = self.fileobj.read()
|
self.data = self.fileobj.read()
|
||||||
def sub(s):
|
def sub(s):
|
||||||
return re.sub("^\#.*$", "__comment", s)
|
return re.sub(r"^\#.*$", "__comment", s)
|
||||||
self.data = [sub(x)+"\n" for x in self.data.split("\n") if sub(x) != "__comment"]
|
self.data = [sub(x)+"\n" for x in self.data.split("\n") if sub(x) != "__comment"]
|
||||||
if self.data:
|
if self.data:
|
||||||
if self.data[0].startswith("tags:"):
|
if self.data[0].startswith("tags:"):
|
||||||
|
|
|
@ -81,7 +81,7 @@ acq_reps+ret_reps, lapses, card_type_id from cards"""):
|
||||||
rem = int((next - time.time())/86400)
|
rem = int((next - time.time())/86400)
|
||||||
c.due = self.col.sched.today+rem
|
c.due = self.col.sched.today+rem
|
||||||
# get ord
|
# get ord
|
||||||
m = re.search(".(\d+)$", row[1])
|
m = re.search(r".(\d+)$", row[1])
|
||||||
ord = int(m.group(1))-1
|
ord = int(m.group(1))-1
|
||||||
if 'cards' not in note:
|
if 'cards' not in note:
|
||||||
note['cards'] = {}
|
note['cards'] = {}
|
||||||
|
@ -103,7 +103,7 @@ acq_reps+ret_reps, lapses, card_type_id from cards"""):
|
||||||
# \n -> br
|
# \n -> br
|
||||||
fld = re.sub("\r?\n", "<br>", fld)
|
fld = re.sub("\r?\n", "<br>", fld)
|
||||||
# latex differences
|
# latex differences
|
||||||
fld = re.sub("(?i)<(/?(\$|\$\$|latex))>", "[\\1]", fld)
|
fld = re.sub(r"(?i)<(/?(\$|\$\$|latex))>", "[\\1]", fld)
|
||||||
# audio differences
|
# audio differences
|
||||||
fld = re.sub("<audio src=\"(.+?)\">(</audio>)?", "[sound:\\1]", fld)
|
fld = re.sub("<audio src=\"(.+?)\">(</audio>)?", "[sound:\\1]", fld)
|
||||||
return fld
|
return fld
|
||||||
|
@ -178,7 +178,7 @@ acq_reps+ret_reps, lapses, card_type_id from cards"""):
|
||||||
res = ("{{c%d::%s}}" % (state['n'], match.group(1)))
|
res = ("{{c%d::%s}}" % (state['n'], match.group(1)))
|
||||||
state['n'] += 1
|
state['n'] += 1
|
||||||
return res
|
return res
|
||||||
fld = re.sub("\[(.+?)\]", repl, fld)
|
fld = re.sub(r"\[(.+?)\]", repl, fld)
|
||||||
fld = self._mungeField(fld)
|
fld = self._mungeField(fld)
|
||||||
n.fields.append(fld)
|
n.fields.append(fld)
|
||||||
n.fields.append("") # extra
|
n.fields.append("") # extra
|
||||||
|
|
|
@ -231,8 +231,8 @@ class SupermemoXmlImporter(NoteImporter):
|
||||||
# clean things like [999] or [111-2222] from title path, example: xyz / [1000-1200] zyx / xyz
|
# clean things like [999] or [111-2222] from title path, example: xyz / [1000-1200] zyx / xyz
|
||||||
# clean whitespaces
|
# clean whitespaces
|
||||||
# set Capital letters for first char of the word
|
# set Capital letters for first char of the word
|
||||||
tmp = list(set([ re.sub('(\[[0-9]+\])' , ' ' , i ).replace('_',' ') for i in item.lTitle ]))
|
tmp = list(set([ re.sub(r'(\[[0-9]+\])' , ' ' , i ).replace('_',' ') for i in item.lTitle ]))
|
||||||
tmp = list(set([ re.sub('(\W)',' ', i ) for i in tmp ]))
|
tmp = list(set([ re.sub(r'(\W)',' ', i ) for i in tmp ]))
|
||||||
tmp = list(set([ re.sub( '^[0-9 ]+$','',i) for i in tmp ]))
|
tmp = list(set([ re.sub( '^[0-9 ]+$','',i) for i in tmp ]))
|
||||||
tmp = list(set([ capwords(i).replace(' ','') for i in tmp ]))
|
tmp = list(set([ capwords(i).replace(' ','') for i in tmp ]))
|
||||||
tags = [ j[0].lower() + j[1:] for j in tmp if j.strip() != '']
|
tags = [ j[0].lower() + j[1:] for j in tmp if j.strip() != '']
|
||||||
|
|
|
@ -111,7 +111,7 @@ def getLang():
|
||||||
|
|
||||||
def noHint(str):
|
def noHint(str):
|
||||||
"Remove translation hint from end of string."
|
"Remove translation hint from end of string."
|
||||||
return re.sub("(^.*?)( ?\(.+?\))?$", "\\1", str)
|
return re.sub(r"(^.*?)( ?\(.+?\))?$", "\\1", str)
|
||||||
|
|
||||||
if not currentTranslation:
|
if not currentTranslation:
|
||||||
setLang("en_US", local=False)
|
setLang("en_US", local=False)
|
||||||
|
|
|
@ -19,12 +19,12 @@ from anki.lang import _
|
||||||
|
|
||||||
class MediaManager:
|
class MediaManager:
|
||||||
|
|
||||||
soundRegexps = ["(?i)(\[sound:(?P<fname>[^]]+)\])"]
|
soundRegexps = [r"(?i)(\[sound:(?P<fname>[^]]+)\])"]
|
||||||
imgRegexps = [
|
imgRegexps = [
|
||||||
# src element quoted case
|
# src element quoted case
|
||||||
"(?i)(<img[^>]* src=(?P<str>[\"'])(?P<fname>[^>]+?)(?P=str)[^>]*>)",
|
r"(?i)(<img[^>]* src=(?P<str>[\"'])(?P<fname>[^>]+?)(?P=str)[^>]*>)",
|
||||||
# unquoted case
|
# unquoted case
|
||||||
"(?i)(<img[^>]* src=(?!['\"])(?P<fname>[^ >]+)[^>]*?>)",
|
r"(?i)(<img[^>]* src=(?!['\"])(?P<fname>[^ >]+)[^>]*?>)",
|
||||||
]
|
]
|
||||||
regexps = soundRegexps + imgRegexps
|
regexps = soundRegexps + imgRegexps
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ class MediaManager:
|
||||||
self._dir = None
|
self._dir = None
|
||||||
return
|
return
|
||||||
# media directory
|
# media directory
|
||||||
self._dir = re.sub("(?i)\.(anki2)$", ".media", self.col.path)
|
self._dir = re.sub(r"(?i)\.(anki2)$", ".media", self.col.path)
|
||||||
if not os.path.exists(self._dir):
|
if not os.path.exists(self._dir):
|
||||||
os.makedirs(self._dir)
|
os.makedirs(self._dir)
|
||||||
try:
|
try:
|
||||||
|
@ -183,7 +183,7 @@ create table meta (dirMod int, lastUsn int); insert into meta values (0, 0);
|
||||||
if checksum(f.read()) == csum:
|
if checksum(f.read()) == csum:
|
||||||
return fname
|
return fname
|
||||||
# otherwise, increment the index in the filename
|
# otherwise, increment the index in the filename
|
||||||
reg = " \((\d+)\)$"
|
reg = r" \((\d+)\)$"
|
||||||
if not re.search(reg, root):
|
if not re.search(reg, root):
|
||||||
root = root + " (1)"
|
root = root + " (1)"
|
||||||
else:
|
else:
|
||||||
|
@ -215,7 +215,7 @@ create table meta (dirMod int, lastUsn int); insert into meta values (0, 0);
|
||||||
return l
|
return l
|
||||||
|
|
||||||
def _expandClozes(self, string):
|
def _expandClozes(self, string):
|
||||||
ords = set(re.findall("{{c(\d+)::.+?}}", string))
|
ords = set(re.findall(r"{{c(\d+)::.+?}}", string))
|
||||||
strings = []
|
strings = []
|
||||||
from anki.template.template import clozeReg
|
from anki.template.template import clozeReg
|
||||||
def qrepl(m):
|
def qrepl(m):
|
||||||
|
|
|
@ -578,7 +578,7 @@ select id from notes where mid = ?)""" % " ".join(map),
|
||||||
continue
|
continue
|
||||||
ord = map[fname][0]
|
ord = map[fname][0]
|
||||||
ords.update([int(m)-1 for m in re.findall(
|
ords.update([int(m)-1 for m in re.findall(
|
||||||
"(?s){{c(\d+)::.+?}}", sflds[ord])])
|
r"(?s){{c(\d+)::.+?}}", sflds[ord])])
|
||||||
if -1 in ords:
|
if -1 in ords:
|
||||||
ords.remove(-1)
|
ords.remove(-1)
|
||||||
if not ords and allowEmpty:
|
if not ords and allowEmpty:
|
||||||
|
|
|
@ -12,7 +12,7 @@ from anki.lang import _
|
||||||
# Shared utils
|
# Shared utils
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
_soundReg = "\[sound:(.*?)\]"
|
_soundReg = r"\[sound:(.*?)\]"
|
||||||
|
|
||||||
def playFromText(text):
|
def playFromText(text):
|
||||||
for match in allSounds(text):
|
for match in allSounds(text):
|
||||||
|
|
|
@ -85,7 +85,7 @@ class Template:
|
||||||
|
|
||||||
# check for cloze
|
# check for cloze
|
||||||
val = None
|
val = None
|
||||||
m = re.match("c[qa]:(\d+):(.+)", section_name)
|
m = re.match(r"c[qa]:(\d+):(.+)", section_name)
|
||||||
if m:
|
if m:
|
||||||
# get full field text
|
# get full field text
|
||||||
txt = get_or_attr(context, m.group(2), None)
|
txt = get_or_attr(context, m.group(2), None)
|
||||||
|
@ -184,7 +184,7 @@ class Template:
|
||||||
txt = self.clozeText(txt, extra, mod[1]) if txt and extra else ""
|
txt = self.clozeText(txt, extra, mod[1]) if txt and extra else ""
|
||||||
else:
|
else:
|
||||||
# hook-based field modifier
|
# hook-based field modifier
|
||||||
mod, extra = re.search("^(.*?)(?:\((.*)\))?$", mod).groups()
|
mod, extra = re.search(r"^(.*?)(?:\((.*)\))?$", mod).groups()
|
||||||
txt = runFilter('fmod_' + mod, txt or '', extra or '', context,
|
txt = runFilter('fmod_' + mod, txt or '', extra or '', context,
|
||||||
tag, tag_name)
|
tag, tag_name)
|
||||||
if txt is None:
|
if txt is None:
|
||||||
|
@ -211,7 +211,7 @@ class Template:
|
||||||
return buf
|
return buf
|
||||||
txt = re.sub(reg%ord, repl, txt)
|
txt = re.sub(reg%ord, repl, txt)
|
||||||
# and display other clozes normally
|
# and display other clozes normally
|
||||||
return re.sub(reg%"\d+", "\\2", txt)
|
return re.sub(reg%r"\d+", "\\2", txt)
|
||||||
|
|
||||||
# look for clozes wrapped in mathjax, and change {{cx to {{Cx
|
# look for clozes wrapped in mathjax, and change {{cx to {{Cx
|
||||||
def _removeFormattingFromMathjax(self, txt, ord):
|
def _removeFormattingFromMathjax(self, txt, ord):
|
||||||
|
|
|
@ -130,7 +130,7 @@ reComment = re.compile("(?s)<!--.*?-->")
|
||||||
reStyle = re.compile("(?si)<style.*?>.*?</style>")
|
reStyle = re.compile("(?si)<style.*?>.*?</style>")
|
||||||
reScript = re.compile("(?si)<script.*?>.*?</script>")
|
reScript = re.compile("(?si)<script.*?>.*?</script>")
|
||||||
reTag = re.compile("(?s)<.*?>")
|
reTag = re.compile("(?s)<.*?>")
|
||||||
reEnts = re.compile("&#?\w+;")
|
reEnts = re.compile(r"&#?\w+;")
|
||||||
reMedia = re.compile("(?i)<img[^>]+src=[\"']?([^\"'>]+)[\"']?[^>]*>")
|
reMedia = re.compile("(?i)<img[^>]+src=[\"']?([^\"'>]+)[\"']?[^>]*>")
|
||||||
|
|
||||||
def stripHTML(s):
|
def stripHTML(s):
|
||||||
|
@ -161,8 +161,8 @@ def htmlToTextLine(s):
|
||||||
s = s.replace("<br />", " ")
|
s = s.replace("<br />", " ")
|
||||||
s = s.replace("<div>", " ")
|
s = s.replace("<div>", " ")
|
||||||
s = s.replace("\n", " ")
|
s = s.replace("\n", " ")
|
||||||
s = re.sub("\[sound:[^]]+\]", "", s)
|
s = re.sub(r"\[sound:[^]]+\]", "", s)
|
||||||
s = re.sub("\[\[type:[^]]+\]\]", "", s)
|
s = re.sub(r"\[\[type:[^]]+\]\]", "", s)
|
||||||
s = stripHTMLMedia(s)
|
s = stripHTMLMedia(s)
|
||||||
s = s.strip()
|
s = s.strip()
|
||||||
return s
|
return s
|
||||||
|
|
|
@ -337,7 +337,7 @@ Please create a new card type first."""))
|
||||||
repl = "<center>%s</center>" % repl
|
repl = "<center>%s</center>" % repl
|
||||||
else:
|
else:
|
||||||
repl = answerRepl
|
repl = answerRepl
|
||||||
return re.sub("\[\[type:.+?\]\]", repl, txt)
|
return re.sub(r"\[\[type:.+?\]\]", repl, txt)
|
||||||
|
|
||||||
# Card operations
|
# Card operations
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
|
@ -291,7 +291,7 @@ def importFile(mw, file):
|
||||||
for i in importing.Importers:
|
for i in importing.Importers:
|
||||||
if done:
|
if done:
|
||||||
break
|
break
|
||||||
for mext in re.findall("[( ]?\*\.(.+?)[) ]", i[0]):
|
for mext in re.findall(r"[( ]?\*\.(.+?)[) ]", i[0]):
|
||||||
if file.endswith("." + mext):
|
if file.endswith("." + mext):
|
||||||
importerClass = i[1]
|
importerClass = i[1]
|
||||||
done = True
|
done = True
|
||||||
|
|
|
@ -296,7 +296,7 @@ The front of this card is empty. Please run Tools>Empty Cards.""")
|
||||||
# Type in the answer
|
# Type in the answer
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
typeAnsPat = "\[\[type:(.+?)\]\]"
|
typeAnsPat = r"\[\[type:(.+?)\]\]"
|
||||||
|
|
||||||
def typeAnsFilter(self, buf):
|
def typeAnsFilter(self, buf):
|
||||||
if self.state == "question":
|
if self.state == "question":
|
||||||
|
@ -379,7 +379,7 @@ Please run Tools>Empty Cards""")
|
||||||
return re.sub(self.typeAnsPat, repl, buf)
|
return re.sub(self.typeAnsPat, repl, buf)
|
||||||
|
|
||||||
def _contentForCloze(self, txt, idx):
|
def _contentForCloze(self, txt, idx):
|
||||||
matches = re.findall("\{\{c%s::(.+?)\}\}"%idx, txt, re.DOTALL)
|
matches = re.findall(r"\{\{c%s::(.+?)\}\}"%idx, txt, re.DOTALL)
|
||||||
if not matches:
|
if not matches:
|
||||||
return None
|
return None
|
||||||
def noHint(txt):
|
def noHint(txt):
|
||||||
|
|
Loading…
Reference in a new issue