2014-01-23 34 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

谢谢。你让我的想法走向正确的道路。 –

相关问题