Синтаксическая ошибка синтаксического анализа файла сцены Unity YAML с Ruby & Psych - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь проанализировать файл сцены Unity YAML с Ruby и самоцветом Psych. Файл Unity предположительно является подмножеством YAML. Каждый объект Unity является отдельным документом YAML. Вот пример:

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
  m_ObjectHideFlags: 0
  serializedVersion: 2
  m_OcclusionBakeSettings:
    smallestOccluder: 5
    smallestHole: 0.25
    backfaceThreshold: 100
  m_SceneGUID: 00000000000000000000000000000000
  m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
  m_ObjectHideFlags: 0
  serializedVersion: 9
  m_Fog: 0
  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
  m_FogMode: 3
  m_FogDensity: 0.01

Я анализирую его с помощью:

require 'psych'

scene = Psych.load_stream(File.read "./Scene.unity")

Что приводит к этому сообщению об ошибке:

Psych::SyntaxError ((<unknown>): found undefined tag handle while parsing a node at line 13 column 5)

После некоторого расследования появляется что Psych ожидает, что у каждого документа YAML будет своя собственная директива TAG, в то время как синтаксический анализатор Unity YAML должен считать директивы в начале файла глобальными. Итак ...

Вопрос 1: Кто прав? Расширяется ли область действия директивы TAG от объявления до конца файла или только до конца документа (следующее вхождение ---)?

Я хотел бы иметь возможность проанализировать файл без необходимости его изменения. Это приводит к ...

Ouestion 2: Есть ли чистый способ сделать это? Скажите опцию Psych, которую я пропустил, или способ передать блок на File.read, чтобы я мог добавить директивы TAG на лету?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...