2014-01-23 35 views
1

我想爲自己的目的編寫自己的簡化CSS解析器。它必須承認一些屬性(當然不是全部)。所以,我投影了這個架構,現在想要投影一些細節。如何使通用結構包含任何CSS屬性的值

現在我需要創建可以包含任何CSS屬性值的通用結構。我想到了與每個可能加工屬性結構的聯合,但它對我來說看起來像是方形輪 - 有大約146種不同的屬性(我只想提供大約20-40的支持,但這並不重要) - 所以我將需要創建一個具有146個不同結構的聯合,並且描述這個結構。我的項目現在大約有60 KB,我不想讓它長到60 MB。

我曾考慮過char值[255],但它將每個值限制爲小於255(或N)個符號。我能做些什麼來解決這個小問題?

+0

動態內存分配? –

+0

@MrLister,你的意思是有一個指向動態內存塊的指針並將數據解釋爲像CSSBorder(int * block)這樣的函數所需要的? –

+0

也許更改爲C++是一個選項。 –

回答

3

一(很簡單)的方式將接近它,像這樣

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

然後,在解析CSS文檔或任何你想填補它,使用malloc分配結構方式。

您可以在頂部/旁邊包含鏈接列表,這樣當您想釋放分配的內存時,只需遍歷列表並釋放所有分配的char *變量即可。然後,結構看起來是這樣的:

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

如果未來將包含一個指向下一個結構,如果有一個或NULL,如果沒有

最後,我想你需要一個類型拿着匹配器。也許這可能是這樣的:

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

性能指針將指向該塊的第一特性,CSS_matcher本身就可以對目前你在CSS文件中遇到的所有的匹配另一個鏈接列表。

我不熟悉用正確的CSS術語,我敢肯定,他們不會真正調用的匹配器匹配器...

+0

謝謝。你讓我的想法走向正確的道路。 –

相關問題