2009-12-01 130 views
0

我认为,CSS语法和基本原则可以非常有用,而不仅仅适用于样式。 是否有任何PARSE引擎可以使用类似CSS的规则操作,就像XML的规则一样?CSS语法不适用于STYLE


例如,我们可以创建类似框架(是的,另一个),其中我们在XML中定义的页面风格(JUST例如,也许很愚蠢或两个复杂):

<page id="index" url="/" controller="staticpage" /> 
<page id="about" url="/" controller="staticpage" action="about" /> 
<page id="post" url="/post/(\d+)" type="regex" controller="post" class=""> 
    <param id="1" name="post_id" /> 
</page> 
<page id="post_comment" url="/comment/(\d+)" type="regex" controller="post" action="comment" class="authneeded"> 
    <param id="1" name="post_id" /> 
</page> 
<page id="post_write" url="/write" type="regex" controller="staticpage" action="write" class="authneeded" /> 

然后写一个“CSS”:

* { 
    layout: "layout.html"; // default layout 
} 
*[action=''] { 
    action: "index"; // default action 
} 
#post_write { 
    layout: "adminlayout.html"; 
} 
.authneeded { 
    redirect: "/"; 
} 
.authneeded:loggedin { // pseudoclass which is set only if the user logged in. 
         // (maybe POSTS:loggedin .authneeded to apply only one 
         // pseudoclass) 

    redirect: false; // no, we don't need to redirect then the user logged in 
} 

这不是一个有趣的配置方式吗? 更妙的是,我们可以创建一个管理脚本(的jQuery的启发;)

./admin #about addClass authneeded 
./admin "#post PARAM" attr id param_post 

那么,有没有可以与CSS类规则的操作任何引擎?

+0

这样做有没有什么好处,而不是坚持标准的metaformats? (见http://www.faqs.org/docs/artu/ch05s02。html)你有一个有趣的想法,但是什么是错误的,例如,为此使用YAML? – deau 2009-12-01 19:22:25

+0

这看起来像JSON的工作! – 2009-12-01 19:22:59

+0

在json中没有选择器 – 2009-12-01 20:15:23

回答

0

不完全是CSS,但自从您提到XML以来,始终存在XSLT,它可用于以不同方式转换XML。例如,您可以从简单的XML文件等构建HTML列表。

+0

不,我想要一个CSS解析器 – 2009-12-01 20:17:20

+0

也许你应该在你的问题中说“我想要一个CSS解析器”。 – 2009-12-01 20:27:38

-1

我想说它已经完成了?下面是一些在grails & django中的url映射。它不是CSS,但是再一次,CSS应该包含style而不是actions,并且语法没有那么不同。

Grails中,UrlMapping.groovy可能类似于:

class UrlMappings { 
    static mappings = { 
     "/$controller/$action?/$id?"{ 
     constraints { 
     // apply constraints here 
     } 
    } 
    "/"(controller:"static") 
    "500"(view:'/error') 
    "/product/" (controller:"myController", action:"show") 
    "/old/**" (view:"/index") 
    "/uploads/$requestedFile**" (controller:"processFile") 
    } 
} 

在蟒蛇:

urlpatterns = patterns('', 
    # Example: 
    (r'^$', direct_to_template, {'template': 'pages/front.html' }), 
    (r'^about/',direct_to_template, {'template': 'pages/about.html' }), 
    (r'^demo/',direct_to_template, {'template':'pages/demo.html'}), 
    (r'^accounts/', include('apps.accounts.urls')), 
    (r'^forms/', include('apps.forms.urls')), 
    (r'^admin/doc/', include('django.contrib.admindocs.urls')), 
    (r'^admin/(.*)', admin.site.root), 
    {'document_root': settings.MEDIA_ROOT}), 
) 

我个人的偏好是Grails的,这恰好接近类似于您介绍的脚本。在Grails中,大部分网址/动作都会由您的控制器自动生成,因此您不需要该配置,但在世界不太完美的情况下可以使用)。

+0

我不需要框架,我需要一个CSS解析器 – 2009-12-01 20:14:37

0

我已经看到了Mac的HTML/CSS编辑器演示,使用CSS选择器来生成HTML标记。不记得该程序的名称,但它似乎是一个非常优雅和有效的方式来编写HTML。

给你它是如何工作的想法,可以说你在编辑器中这样写:

ul#navigation li a.active 

而按一些神奇的快捷键(或只是输入)将其转换成这样:

<ul id="navigation"> 
    <li><a class="active"></a></li> 
</ul> 

对我来说,这看起来像是CSS的逻辑用法。正如你所描述的那样,将它用于元数据可能会有用,如果你想将它分开。

然而在你的例子中,两者关系非常密切。并且在XML中设置默认值和条件是很有意义的(就像param标签一样)。

+0

是的,我已经看到了:)我将检查他们正在使用的解析器,谢谢 – 2009-12-01 20:39:53

+0

我认为你所指的是Zen Coding - http:/ /code.google.com/p/zen-coding/。它是许多编辑的插件,并且在Mac上由Espresso本地支持。 – 2012-01-20 17:53:47