Ticket #26 (closed task: fixed)

Opened 8 years ago

Last modified 8 years ago

parser formatowania wiki

Reported by: dozzie Owned by: dozzie
Priority: normal Milestone: połączenie logiki z UI
Component: Keywords:
Cc: Parent ID:

Description

Trzeba będzie napisać parser języka wiki (propozycja składni).

Parser powinien przede wszystkim produkować drzewo wyprowadzenia. To drzewo będzie jeszcze modyfikowane przed wytworzeniem HTML-a do wyświetlenia (głównie chodzi o makra zwracające listy elementów).

Child Tickets

Change History

comment:1 Changed 8 years ago by dozzie

Udało mi się znaleźć generator samodzielnych parserów dla Pythona: Wisent. To nie było takie łatwe i oczywiste, prawie wszystkie generatory jakie znalazłem produkują kod, który wymaga ich runtime'u do pracy.

comment:2 Changed 8 years ago by dozzie

Notatka: dla automatycznego uruchomienia parsera i zapisania drzewa wyprowadzenia mogę się wpiąć w sygnał pre_save: https://docs.djangoproject.com/en/1.2/topics/signals/

comment:3 Changed 8 years ago by dozzie

Dalsza podpowiedź o sygnałach:

# models.py
class WikiPage(models.Model):
  # ...
  def set_content(self, content):
    self.content = content # could be no-op
    self.ast = '{"msg":"here would be parse tree for this object"}'

# still models.py
from django.db.models import signals

def wikipage_update_ast(sender, instance, *args, **kwargs):
  instance.set_content(instance.content)

signals.pre_save.connect(wikipage_update_ast, sender = WikiPage)

comment:4 Changed 8 years ago by dozzie

Wisent jest dość trudny w pracy nad nową gramatyką (brakuje mu komunikatów diagnostycznych), ale jest bardzo bliski możliwościami perlowemu modułowi Parse::Eyapp, który z kolei komunikaty diagnostyczne ma jak trzeba.

Udało mi się połączyć kod pythonowy z perlowym w taki sposób, że parser napisany w Perlu jest używalny z pythonowej aplikacji, więc prace nad gramatyką mogą się posuwać normalnie, a potem dość prostym konwerterem gramatyka dla Parse::Eyapp jest zamieniana na gramatykę dla Wisenta.

Obecny wygląd gramatyki nie pozwala na użycie pełni zaplanowanych możliwości (np. brak zagnieżdżonego formatowania, brak list, bloków kodu, %bloków), ale jest bardzo dobrym punktem startowym.

Zostało mi napisać przetwarzacz drzewa wyprowadzenia do docelowej formy (która będzie zapisywana w bazie). Wprowadzenie reszty elementów składniowych będzie mogło zaczekać na późniejszy termin.

comment:5 Changed 8 years ago by dozzie

  • Status changed from new to closed
  • Resolution set to fixed

Parser osadzony w aplikacji, wliczając przetwarzacz drzewa do formy, która jest docelowa dla składowania.

Jeszcze będzie trzeba udokumentować budowę drzewa.

Note: See TracTickets for help on using tickets.