Skip to content

Commit

Permalink
Updates to try to get arround brackets problems. Not yet.
Browse files Browse the repository at this point in the history
  • Loading branch information
rowanc1 committed Nov 20, 2016
1 parent 230a2db commit 2316e18
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 27 deletions.
3 changes: 3 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
google-api-python-client
markdown
pyparsing
5 changes: 4 additions & 1 deletion tests/test_parsing_commands.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import print_function
import unittest
from xmd.parser import command
from xmd.parser import command, Command
from xmd.parser import variable_name
import pyparsing as pp

Expand Down Expand Up @@ -80,6 +80,9 @@ def test_arg_type(self):
# print(arg_float.parseString("1.0eE02"))
# self.assertRaises(pp.ParseException, arg_float.parseString, "abc")

def test_Command(self):
t = Command.parseString('[>command]{hi}')
print(t)


if __name__ == '__main__':
Expand Down
41 changes: 27 additions & 14 deletions xmd/nodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,10 @@ def count(self, name):

class XmdNode(object):

def __init__(self, s, loc, raw):
self.loc = loc
self.raw = raw
def __init__(self, string, location, ppinput):
self.string = string
self.location = location
self.ppinput = ppinput
self.parse()

def parse(self):
Expand All @@ -43,18 +44,28 @@ def context(self, val):

def parseArguments(self):
# print(self.args)
inner = self.args[0].strip('(').strip(')')
inner = self.command.args[0].strip('(').strip(')')
args = [_.strip() for _ in inner.split(',')]
# print(args)
return args


class CommandArguments(object):
def __init__(self, ppinput):
# print('here', ppinput)
self.ppinput = ppinput
self.name = ppinput[0]
self.args = ppinput[1]

def __repr__(self):
return "<{name} #{n}>".format(name=self.name, n=len(self.args))


class Command(XmdNode):

def parse(self):
self.name = self.raw[0][0]
self.args = self.raw[0][1]
self.content = self.raw[0][2]
self.command = self.ppinput[0][0]
self.content = self.ppinput[1]

def render(self):
inner = '\n'.join([x.render() for x in self.content])
Expand Down Expand Up @@ -92,14 +103,16 @@ def render(self):
class Markdown(XmdNode):

def render(self):
return markdown.markdown(self.raw[0][0], extensions=[
return markdown.markdown(self.ppinput[0][0], extensions=[
mdx_math.makeExtension(enable_dollar_delimiter=True)
])


def chooseCommand(s, loc, raw):
if raw[0][0] == 'sidenote':
return Sidenote(s, loc, raw)
if raw[0][0] == 'figure':
return Figure(s, loc, raw)
return Command(s, loc, raw)
def chooseCommand(string, location, ppinput):
# ppinput = ppinput[0]
# print('r: ', ppinput[0][0])
if ppinput[0][0].name == 'sidenote':
return Sidenote(string, location, ppinput)
if ppinput[0][0].name == 'figure':
return Figure(string, location, ppinput)
return Command(string, location, ppinput)
21 changes: 9 additions & 12 deletions xmd/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import pyparsing as pp
import nodes

mdObject = pp.Forward()
xmdObject = pp.Forward()


def createKwarg(z):
Expand All @@ -14,7 +14,7 @@ def createArg(z):


def recurse(s, b, c):
out = mdObject.parseString(s[c[0]+1: c[2]-1])
out = xmdObject.parseString(s[c[0]+1: c[2]-1])
return [out]


Expand All @@ -25,7 +25,6 @@ def recurse(s, b, c):

arg_string = pp.Group(
pp.Suppress(pp.Word("'") | pp.Word('"')) +
# pp.Word(pp.alphanums + '._-') +
pp.Word("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%&()*+,-./:;<=>?@[\]^_`{|}~ ") +
pp.Suppress(pp.Word("'") | pp.Word('"'))
)
Expand All @@ -39,19 +38,17 @@ def recurse(s, b, c):
).setParseAction(createKwarg)

command = (
pp.Suppress(">") + variable_name +
variable_name +
pp.Group(pp.Optional(
# pp.Suppress('(') +
# pp.delimitedList(arg) +
# pp.Suppress(')')
pp.originalTextFor(
pp.nestedExpr(opener='(', closer=')')
)
))
)
).setParseAction(nodes.CommandArguments)

Command = pp.Group(
pp.Suppress('[') + command + pp.Suppress(']') + pp.FollowedBy('{') +
Command = (
pp.nestedExpr(opener='[>', closer=']', content=command) +
pp.FollowedBy('{') +
pp.originalTextFor(
pp.nestedExpr(opener='{', closer='}')
).setParseAction(recurse)
Expand Down Expand Up @@ -82,11 +79,11 @@ def recurse(s, b, c):
pp.OneOrMore(pp.Word(chars))
).setParseAction(nodes.Markdown)

mdObject << pp.ZeroOrMore(pp.MatchFirst([Command, injector, text_block]))
xmdObject << pp.ZeroOrMore(Command | injector | text_block)


def transform(text):
return mdObject.parseString(text)
return xmdObject.parseString(text)


def render(text):
Expand Down

0 comments on commit 2316e18

Please sign in to comment.