Browse Source

Determine spacing conventions when adding a parameter.

tags/v0.1
Ben Kurtovic 11 years ago
parent
commit
94d5fc0734
1 changed files with 35 additions and 3 deletions
  1. +35
    -3
      mwparserfromhell/nodes/template.py

+ 35
- 3
mwparserfromhell/nodes/template.py View File

@@ -20,6 +20,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

from collections import defaultdict
import re

from mwparserfromhell.nodes import HTMLEntity, Node, Text
@@ -53,6 +54,26 @@ class Template(Node):
match = re.search("^(\s*).*?(\s*)$", value, re.DOTALL|re.UNICODE)
value.nodes = [Text(match.group(1)), Text(match.group(2))]

def _select_theory(self, theories):
if theories:
best = max(theories.values())
confidence = float(best) / sum(theories.values())
if confidence > 0.75:
return theories.keys()[theories.values().index(best)]

def _get_spacing_conventions(self):
before_theories = defaultdict(lambda: 0)
after_theories = defaultdict(lambda: 0)
for param in self.params:
match = re.search("^(\s*).*?(\s*)$", param.value, re.S|re.U)
before, after = match.group(1), match.group(2)
before_theories[before] += 1
after_theories[after] += 1

before = self._select_theory(before_theories)
after = self._select_theory(after_theories)
return before, after

@property
def name(self):
return self._name
@@ -77,7 +98,7 @@ class Template(Node):
return param
raise ValueError(name)

def add(self, name, value, showkey=None):
def add(self, name, value, showkey=None, force_nonconformity=False):
name, value = parse_anything(name), parse_anything(value)
self._surface_escape(value, "|")

@@ -89,7 +110,10 @@ class Template(Node):
if not showkey:
self._surface_escape(value, "=")
nodes = existing.value.nodes
existing.value = parse_anything([nodes[0], value, nodes[1]])
if force_nonconformity:
existing.value = value
else:
existing.value = parse_anything([nodes[0], value, nodes[1]])
return existing

if showkey is None:
@@ -100,7 +124,15 @@ class Template(Node):
showkey = False
if not showkey:
self._surface_escape(value, "=")
param = Parameter(name, value, showkey) # CONFORM TO FORMATTING CONVENTIONS?
if not force_nonconformity:
before, after = self._get_spacing_conventions()
if before and after:
value = parse_anything([before, value, after])
elif before:
value = parse_anything([before, value])
elif after:
value = parse_anything([value, after])
param = Parameter(name, value, showkey)
self.params.append(param)
return param



Loading…
Cancel
Save