Skip to content

HWP Format Language

Jimin Park edited this page Dec 9, 2013 · 4 revisions

여러 레코드와 HWPML (이하 HML) 노드들을 처리하는 코드를 추가하는 것은 상당히 번거로운 작업이기 때문에, 그러한 것들을 처리하는 언어를 만들고 그 언어에 따라 형식 파일 (format/node.format, format/record.format) 을 만들고 있는 작업을 하고 있습니다.

문법은 format/format.jison에 기술되어 있습니다. (문법이 구린 점 죄송합니다.)

generate.jsformat에 있는 것들로부터 HWP 데이터를 나타내는 코드인 lib/hwpdata.js를 생성합니다.

enum

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과 대응됩니다.

HML 노드

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;
}

태그

tagtago는 HWP 5.0의 레코드와 그 레코드의 태그 사이의 관계를 나타냅니다.

tag NAME 42NAME 레코드의 태그값이 42임을 나타내며, tago FOO 42 BARBAR 레코드의 태그값이 FOO 레코드의 태그값 + 42임을 나타냅니다. (HWP_BEGIN같은 값을 베이스로 사용하는 문서에 적힌 값들을 옮기기 편하게 하기 위해 사용)

레코드

record는 HWP 5.0의 레코드 구조를 나타냅니다.

Clone this wiki locally