2012-12-10 8 views

Odpowiedz

5

Nie ma żadnego i trudno jest, jeśli nie niemożliwe, zaimplementować jeden poza banalnym znacznikiem ReST.

ReST Role i dyrektywy mogą wykonywać dowolny kod w czasie parse. W szczególności rola lub dyrektywa może tworzyć i wstawiać węzły arbitralnych typów z dowolną zawartością do drzewa dokumentu. Tak więc nie ma bezpośredniego mapowania między drzewem dokumentu a kodem źródłowym ReST iw związku z tym niemożliwe jest uzyskanie oryginalnego kodu źródłowego ReST - lub przynajmniej czegoś, co się zbliża - dla dowolnego drzewa dokumentu.

Przykładem realnym są różne dyrektywy z Sphinx, np. py:class. Te dyrektywy wstawiają węzły do ​​drzewa dokumentu, które w późniejszym czasie są przekształcane w rzeczywiste odsyłacze. Jednakże nie ma jednej dyrektywy, która odpowiada węzłowi, a zatem nie ma źródła ReST, które bezpośrednio odpowiada drzewu dokumentów zawierającemu takie węzły.

Można zaimplementować program piszący do prostych standardowych znaczników ReST, tj. Nagłówków, akapitów, podkreślenia i tym podobnych. Nie znam żadnej implementacji, ale to jest trywialne. To może, ale nie musi wystarczyć dla twoich celów.

Jeśli twoje dokumenty zawierają role, dyrektywy lub substytucje, kompletne transformacje ReST są niemożliwe. Można jednak sortować - oszukiwać, najpierw wyrejestrowując wszystkie role i dyrektywy, a następnie rejestrując funkcję, która przechwytuje wszystkie role i dyrektywy, i zachowuje je dosłownie w drzewie dokumentu. Na podstawie takiego drzewa możesz przywrócić źródło (lub przynajmniej zbliżyć się do tego). Zastępstwa są jednak tracone, ponieważ są one stosowane na wczesnym etapie analizowania i nie pojawiają się w wynikowym drzewie.

+0

+1 Piękna odpowiedź, dzięki. – ThomasH

Powiązane problemy