Revert "More escaping fixes"

This reverts commit fcb10e2bff.
This commit is contained in:
Florian Bruhin 2014-05-02 13:24:00 +02:00
parent 0640eacb95
commit de368aa43d
2 changed files with 14 additions and 34 deletions

View File

@ -32,6 +32,7 @@ import os.path
import logging import logging
import textwrap import textwrap
import configparser import configparser
from configparser import ExtendedInterpolation
from collections.abc import MutableMapping from collections.abc import MutableMapping
from PyQt5.QtCore import pyqtSignal, QObject from PyQt5.QtCore import pyqtSignal, QObject
@ -82,35 +83,6 @@ class NoOptionError(configparser.NoOptionError):
pass pass
class Interpolation(configparser.ExtendedInterpolation):
"""Subclass of ExtendedInterpolation to change escape char."""
def _interpolate_some(self, parser, option, accum, rest, section, mapping,
depth):
r"""Override _interpolate_some to change the escape char.
We replace "\$" by "$$" which then gets interpreted as a single $ by
the interpolation.
We also replace "\\" by a single \.
"""
c = ConfigManager.ESCAPE_CHAR
if rest is not None:
rest = rest.replace(c + '$', '$$').replace(c + c, c)
return super()._interpolate_some(parser, option, accum, rest, section,
mapping, depth)
def before_set(self, parser, section, option, value):
c = ConfigManager.ESCAPE_CHAR
tmp_value = value.replace(c + '$', '') # escaped dollar signs
tmp_value = self._KEYCRE.sub('', tmp_value) # valid syntax
if '$' in tmp_value:
raise ValueError("invalid interpolation syntax in %r at "
"position %d" % (value, tmp_value.find('$')))
return value
class ConfigManager(QObject): class ConfigManager(QObject):
"""Configuration manager for qutebrowser. """Configuration manager for qutebrowser.
@ -118,6 +90,7 @@ class ConfigManager(QObject):
Class attributes: Class attributes:
KEY_ESCAPE: Chars which need escaping when they occur as first char KEY_ESCAPE: Chars which need escaping when they occur as first char
in a line. in a line.
VALUE_ESCAPE: Chars to escape inside values.
ESCAPE_CHAR: The char to be used for escaping ESCAPE_CHAR: The char to be used for escaping
Attributes: Attributes:
@ -137,6 +110,7 @@ class ConfigManager(QObject):
""" """
KEY_ESCAPE = r'\#[' KEY_ESCAPE = r'\#['
VALUE_ESCAPE = r'\$'
ESCAPE_CHAR = '\\' ESCAPE_CHAR = '\\'
changed = pyqtSignal(str, str) changed = pyqtSignal(str, str)
@ -154,7 +128,7 @@ class ConfigManager(QObject):
'break_on_hyphens': False, 'break_on_hyphens': False,
} }
self._configdir = configdir self._configdir = configdir
self._interpolation = Interpolation() self._interpolation = ExtendedInterpolation()
self._proxies = {} self._proxies = {}
for secname in self.sections.keys(): for secname in self.sections.keys():
self._proxies[secname] = SectionProxy(self, secname) self._proxies[secname] = SectionProxy(self, secname)
@ -219,6 +193,8 @@ class ConfigManager(QObject):
lines += wrapper.wrap("Valid values: {}".format(', '.join( lines += wrapper.wrap("Valid values: {}".format(', '.join(
valid_values))) valid_values)))
default = option.values['default'] default = option.values['default']
for c in self.VALUE_ESCAPE:
default = default.replace(c, self.ESCAPE_CHAR + c)
lines += wrapper.wrap("Default: {}".format(default)) lines += wrapper.wrap("Default: {}".format(default))
return lines return lines
@ -230,6 +206,8 @@ class ConfigManager(QObject):
for c in self.KEY_ESCAPE: for c in self.KEY_ESCAPE:
if optname.startswith(c): if optname.startswith(c):
optname = optname.replace(c, self.ESCAPE_CHAR + c, 1) optname = optname.replace(c, self.ESCAPE_CHAR + c, 1)
for c in self.VALUE_ESCAPE:
value = value.replace(c, self.ESCAPE_CHAR + c)
keyval = '{} = {}'.format(optname, value) keyval = '{} = {}'.format(optname, value)
lines.append(keyval) lines.append(keyval)
return lines return lines
@ -246,6 +224,8 @@ class ConfigManager(QObject):
for k, v in cp[secname].items(): for k, v in cp[secname].items():
if k.startswith(self.ESCAPE_CHAR): if k.startswith(self.ESCAPE_CHAR):
k = k[1:] k = k[1:]
for c in self.VALUE_ESCAPE:
v = v.replace(self.ESCAPE_CHAR + c, c)
try: try:
self.set('conf', secname, k, v) self.set('conf', secname, k, v)
except ValidationError as e: except ValidationError as e:

View File

@ -421,14 +421,14 @@ DATA = OrderedDict([
('next-regexes', ('next-regexes',
SettingValue(types.RegexList(flags=re.IGNORECASE), SettingValue(types.RegexList(flags=re.IGNORECASE),
r'\\bnext\\b,\\bmore\\b,\\bnewer\\b,^>\$,^(>>|»|→|≫)\$,' r'\bnext\b,\bmore\b,\bnewer\b,^>$,^(>>|»|→|≫)$,'
r'^(>|»|→|≫),(>|»|→|≫)\$'), r'^(>|»|→|≫),(>|»|→|≫)$'),
"A comma-separated list of regexes to use for 'next' links."), "A comma-separated list of regexes to use for 'next' links."),
('prev-regexes', ('prev-regexes',
SettingValue(types.RegexList(flags=re.IGNORECASE), SettingValue(types.RegexList(flags=re.IGNORECASE),
r'\\bprev(ious)\\b,\\bback\\b,\\bolder\\b,^<\$,' r'\bprev(ious)\b,\bback\b,\bolder\b,^<$,^(<<|«|←|≪)$,'
r'^(<<|«|←|≪)\$,^(<|«|←|≪),(<|«|←|≪)\$'), r'^(<|«|←|≪),(<|«|←|≪)$'),
"A comma-separated list of regexes to use for 'prev' links."), "A comma-separated list of regexes to use for 'prev' links."),
)), )),