2012-04-10 20 views
8

Chcę przeczytać config w YAML z kodem elizacyjnym. Szukano, ale nie znalazłem gotowego do użycia parsera w elemencie. Czy tęskniłem za czymś przydatnym?Jaki jest najlepszy parser YAML w elisp?

+0

Nie znam odpowiedzi, ale jeśli jej nie ma, to możesz wywołać inny parser, aby odczytać yaml i wypisać na nim tekstową reprezentację seplenienia, którą możesz odczytać za pomocą 'read'. – Tom

+0

Dzięki! To dobry pomysł. Może mogę wypróbować 'pymacs'. – Vivodo

+0

Nie jestem pewien, co masz na myśli - jest tu tryb yaml: https://github.com/yoshiki/yaml-mode - ale chcesz, żeby parser czytał yaml i robił z nim co? –

Odpowiedz

1

Sześć miesięcy później wygląda na to, że odpowiedź brzmi: "nie istnieje żaden solidny, łatwo dostępny parser YAML.

Jeśli naprawdę chcesz przeczytać dokument YAML w elicie i przekształcić go w coś, z czym może współpracować elisp, będziesz musiał włożyć trochę pracowitości. EmacsWiki YAML page nie ma wiele dla ciebie, a kanoniczny YAML mode ma wskazówki dotyczące składni, ale nie ma rzeczywistego parsera. Na szczęście ktoś ma implemented a YAML-parsing web-app, który pobiera YAML i wyprowadza JSON lub Python - możesz spróbować spojrzeć pod maską tego i - lub użyć go do sprawdzenia dowolnego parsera YAML, który sam napiszesz.

Powodzenia.

+0

Dodatek: patrz [to odpowiedź SO] (http://stackoverflow.com/a/2231327/244494) dla jakiegoś kodu uruchomieniowego podczas pisania własnego parsera rekursywno-zejścia w elicie. –

+2

http://edward.oconnor.cx/2006/03/json.el może być również przydatny do porównań i pomysłów. Oczywiście, YAML nie jest JSON, ale z pewnością mają pewne podobieństwa. – tripleee

3

Oraz kilka miesięcy później: Chciałem go, więc oto jak to zrobić z pewną pomocą python:

(defun yaml-parse() 
    "yaml to json to a hashmap of current buffer, with python. 

    There is no yaml parser in elisp. 
    You need pyYaml and some yaml datatypes like dates are not supported by json." 
    (interactive) 
    (let ((json-object-type 'hash-table)) 
    (setq myyaml (json-read-from-string (shell-command-to-string (concat "python -c 'import sys, yaml, json; json.dump(yaml.load(sys.stdin), sys.stdout, indent=4)' < " (buffer-file-name)))))) 
    ;; code here 
) 

Okazuje się YAML bieżącego bufora do w elisp hashmap, z pomocą json.el .

Potrzebujesz pyyaml ​​Pythona: pip install PyYaml.

json.el: http://edward.oconnor.cx/2006/03/json.el

+0

Chodzi mi o to, że na jednym poziomie jest to hack, który sprawia, że ​​wzdrygam się, ale na innym, nie mogę zmusić się do braku szacunku "Narzędzie, którego potrzebuję, nie istnieje, więc sam je napiszę". Rewizja. –

0

Trzy lata później, mamy dynamic modules i emacs-libyaml wygląda całkiem interesująco. Używa systemu modułów dynamicznych do odsłonięcia wiązań C z libyaml w Elisp. Spodziewam się, że występ będzie fantastyczny, chociaż go nie testowałem.

Powiązane problemy