2014-01-23 1 views
1

나만의 단순화 된 CSS 파서를 직접 작성하고 싶습니다. 그것은 몇 가지 속성을 인식해야합니다 (물론 모든 것은 아닙니다). 그래서 건축물을 투사했고, 이제 사소한 세부 사항을 투영하려고합니다.CSS 속성 값을 포함하도록 일반 구조체를 만드는 방법

지금은 CSS 속성 값을 포함 할 수있는 보편적 인 구조를 만들어야합니다. 모든 속성을 처리하기 위해 structs와의 결합을 생각했지만 사각형 휠처럼 보였습니다. ~ 146 개의 속성이 있습니다 (약 20-40에 대한 지원 만 제공하고 싶지만 중요하지 않습니다). 146 개의 서로 다른 구조로 구성된 유니온을 생성해야하며이 구조를 설명해야합니다. 내 프로젝트는 현재 약 60KB이며, 아직 60MB까지 증가시키지 않으려합니다.

char 값 [255]에 대해 생각했지만 모든 값이 255 (또는 N) 기호보다 작은 것으로 제한되었습니다. 이 작은 문제를 해결하기 위해 무엇을 할 수 있습니까?

+0

동적 메모리 할당? –

+0

@MrLister, 동적 메모리 블록에 대한 포인터를 가지고 CSSBorder (int * block)와 같은 함수가 필요하다는 것을 해석합니까? –

+0

아마도 C++로 변경하는 것이 옵션 일 수 있습니다. –

답변

3

하나 (오히려 간단한) 방법은 CSS의 문서 또는 무엇이든 당신이 그것을 채우기의 malloc과 구조를 할당 할 방법을 구문 분석하는 동안, 그리고 너무

struct CSS { 
    char *property; 
    char *value; 
} 

처럼 접근하는 것입니다.

당신은 할당 된 메모리를 비우고 싶을 때 목록을 살펴보고 할당 된 모든 char * 변수를 비울 수 있도록 링크 된 목록을 포함 할 수 있습니다. 구조체는 다음과 같이 수 : 하나 또는 NULL이있는 경우 마지막으로

이없는 경우 다음 다음 구조체에 대한 포인터를 포함됩니다

struct CSS_property { 
    char *property; 
    char *value; 
    struct CSS_property *next; 
} 

, 나는 당신이 형식이 필요합니다 거라고 생각 매처를 잡는다. 어쩌면 그것은 다음과 같이 수 :

struct CSS_matcher { 
    char *matcher; 
    struct CSS_property *properties; 
    struct CSS_matcher *next; 
} 

속성 포인터가이 블록의 첫 번째 속성을 가리키는 것의 CSS_matcher은 그 자체로 당신이 CSS 파일에서 발생하는 것 모든 매처 (matcher)에 대한 또 다른 링크 된 목록이 될 수 있습니다.

저는 올바른 CSS 용어에 익숙하지 않아 실제로 matchers matcher를 호출하지 않는다고 확신합니다.

+0

감사합니다. 당신은 올바른 길로 가도록 내 마음을 열었습니다. –

관련 문제