]> git.phdru.name Git - phdru.name/cgi-bin/blog-ru/search-tags.git/commitdiff
Use new grako-based parser
authorOleg Broytman <phd@phdru.name>
Sat, 9 Jul 2016 18:39:06 +0000 (21:39 +0300)
committerOleg Broytman <phd@phdru.name>
Sun, 10 Jul 2016 22:51:26 +0000 (01:51 +0300)
.gitignore
search-tags.py

index 682fdd49fab8df541712ba26428a2f0233ec0a73..539da7411f1d5a03e01b75c76fb3a76d16fbdc2f 100644 (file)
@@ -1,3 +1 @@
 *.py[co]
-parser.out
-parsetab.py
index e40f05c0500e5104d88e0948da57a7196ba85dbc..33d141f33107c9f7fcdcc1728f4f160ba74d106d 100755 (executable)
@@ -7,10 +7,9 @@ __copyright__ = "Copyright (C) 2014-2016 PhiloSoft Design"
 __license__ = "GNU GPL"
 
 import cgi, sys
-from ply.lex import LexError
+from grako.exceptions import FailedParse
 
 from html.response import redirect, response
-from parser.parser import parser
 
 form = cgi.FieldStorage()
 if not form.has_key('q'):
@@ -21,41 +20,43 @@ if not form.has_key('q'):
 else:
     q = form['q'].value
     try:
-        tree = parser.parse(q)
-    except LexError:
-        tree = None
-    if tree is None:
+        from parser.parser import TagsParser
+        from parser.build_ast import TagsSemantics
+        parser = TagsParser(parseinfo=False)
+        tree = parser.parse(q, semantics=TagsSemantics())
+    except FailedParse:
         status = "400 Bad request"
         title = "Error!"
         body = "Bad query syntax!"
-    elif tree[0] == 'NAME': # Single tag - just do redirect
-        tag = tree[1]
-        assert isinstance(tag, str)
-        from tags import tag_exists
-        if tag_exists(tag):
-            redirect("/Russian/blog/tags/%s.html" % tag, status="301 Moved")
-            sys.exit()
-        status = "404 Tag not found"
-        title = "Ошибка!"
-        body = "Тег %s не существует!" % tag
-    else: # Process tree
-        from tags import find_tags
-        posts = find_tags(tree)
-        status = None
-        title = "Записи, найденные для выражения " + cgi.escape(q)
-        if posts:
-            _posts = ["""\
-<p class="head">
-<ul>
-"""]
-            for year, month, day, suburl, _title in posts:
-                _posts.append('<li>%s-%s-%s <a href="../../../../Russian/blog/%s">%s</a></li>\n' % (year, month, day, suburl, _title))
-            _posts .append("""\
-</ul>
-</p>
-""")
-            body = ''.join(_posts)
-        else:
-            body = "Не найдено ни одной записи."
+    else:
+        if tree[0] == 'NAME': # Single tag - just do redirect
+            tag = tree[1]
+            assert isinstance(tag, str)
+            from tags import tag_exists
+            if tag_exists(tag):
+                redirect("/Russian/blog/tags/%s.html" % tag, status="301 Moved")
+                sys.exit()
+            status = "404 Tag not found"
+            title = "Ошибка!"
+            body = "Тег %s не существует!" % tag
+        else: # Process tree
+            from tags import find_tags
+            posts = find_tags(tree)
+            status = None
+            title = "Записи, найденные для выражения " + cgi.escape(q)
+            if posts:
+                _posts = ["""\
+    <p class="head">
+    <ul>
+    """]
+                for year, month, day, suburl, _title in posts:
+                    _posts.append('<li>%s-%s-%s <a href="../../../../Russian/blog/%s">%s</a></li>\n' % (year, month, day, suburl, _title))
+                _posts .append("""\
+    </ul>
+    </p>
+    """)
+                body = ''.join(_posts)
+            else:
+                body = "Не найдено ни одной записи."
 
 response(title, body, status)