-
Notifications
You must be signed in to change notification settings - Fork 25
HWP Format Language
여러 레코드와 HWPML (이하 HML) 노드들을 처리하는 코드를 추가하는 것은 상당히 번거로운 작업이기 때문에, 그러한 것들을 처리하는 언어를 만들고 그 언어에 따라 형식 파일 (format/node.format, format/record.format) 을 만들고 있는 작업을 하고 있습니다.
문법은 format/format.jison에 기술되어 있습니다. (문법이 구린 점 죄송합니다.)
generate.js는 format에 있는 것들로부터 HWP 데이터를 나타내는 코드인 lib/hwpdata.js를 생성합니다.
HWP 5.0 문서의 4.1.5의 표 21과, HWPML 문서의 2.2의 LineWidth와 같이, 몇 가지 속성 값은 enum과 같은 것을 사용하여 간단히 표시할 수 있음을 알 수 있으며, 또한 이것을 이용해 HWP와 HML간의 변환을 조금 쉽게 할 수 있다는 사실을 알 수 있습니다. enum은 이러한 것을 간단히 나타낼 수 있게 하는 것입니다.
enum ENUM_NAME {
FirstThing; SecondThing; "ThirdThing"; null; FifthThing;
}
HWPML에서 FirstThing은 HWP의 0과 대응됩니다.
node는 HML의 노드를 나타내는 것으로, 각 node에 어떠한 속성들이 올 수 있는지를 기술합니다.
사실 이런 것은 DTD나 그와 비슷한 것을 이용해 작업하는 것이 제일 낫지만, HML의 DTD를 구할 수 없어서 간단하게 이런 방식을 사용하기로 했습니다.
node NODE_NAME {
String this-is-a-string;
Int this-is-an-integer default="42";
Boolean this-is-a-boolean;
}
tag와 tago는 HWP 5.0의 레코드와 그 레코드의 태그 사이의 관계를 나타냅니다.
tag NAME 42는 NAME 레코드의 태그값이 42임을 나타내며, tago FOO 42 BAR는 BAR 레코드의 태그값이 FOO 레코드의 태그값 + 42임을 나타냅니다. (HWP_BEGIN같은 값을 베이스로 사용하는 문서에 적힌 값들을 옮기기 편하게 하기 위해 사용)
record는 HWP 5.0의 레코드 구조를 나타냅니다.