webkit在win32下的编译规则(八)
HTMLElementFactory.cpp和HTMLNames.cpp是由如下规则生成的:
ifdef HTML_FLAGS
HTMLElementFactory.cpp HTMLNames.cpp : dom/make_names.pl html/HTMLTagNames.in html/HTMLAttributeNames.in
perl -I $(WebCore)/bindings/scripts $< --tags $(WebCore)/html/HTMLTagNames.in --attrs $(WebCore)/html/HTMLAttributeNames.in --factory --wrapperFactory --extraDefines "$(HTML_FLAGS)"else
HTMLElementFactory.cpp HTMLNames.cpp : dom/make_names.pl html/HTMLTagNames.in html/HTMLAttributeNames.in
perl -I $(WebCore)/bindings/scripts $< --tags $(WebCore)/html/HTMLTagNames.in --attrs $(WebCore)/html/HTMLAttributeNames.in --factory --wrapperFactoryendif
可以看出HTMLElementFactory.cpp和HTMLNames.cpp是由make_names.pl处理HTMLTagNames.in和HTMLAttributeNames.in生成的。HTMLTagNames.in(D: oolscygwinhomexufanWebKitSourceWebCorehtmlHTMLTagNames.in)定义了所有的html tag name,里面还有html tag对应webkit处理类的名字,例如a inte易做图ceName=HTMLAnchorElement表明a标签是由HTMLAnchorElement这个类处理的。HTMLAttributeNames.in(D: oolscygwinhomexufanWebKitSourceWebCorehtmlHTMLAttributeNames.in )定义了所有的html Attribute name, 例如href,style,onclick等.
HTMLEntityTable.cpp是由如下规则生成:
HTMLEntityTable.cpp : html/parser/HTMLEntityNames.in $(WebCore)/html/parser/create-html-entity-table
python $(WebCore)/html/parser/create-html-entity-table -o HTMLEntityTable.cpp $(WebCore)/html/parser/HTMLEntityNames.in可以看出HTMLEntityTable.cpp是用create-html-entity-table(D: oolscygwinhomexufanWebKitSourceWebCorehtmlparsercreate-html-entity-table)这个python脚本处理HTMLEntityNames.in(D: oolscygwinhomexufanWebKitSourceWebCorehtmlparserHTMLEntityNames.in )生成的。html entity是什么东西呢?html entity的中文翻译一般为HTML 字符实体,指的是那些HTML 中拥有特殊的含义的字符,这些字符的显示就是用html entity表示的。字符实体有三部分:一个和号 (&),一个实体名称,或者 # 和一个实体编号,以及一个分号 (;),例如<(小于号)在html就要写< 或<。在HTMLEntityNames.in里面,小于号的表示为:"LT;","U+0003C" (3c的十进制值为60)。对于小于号和&等符号,最后的分号是可以去掉的,即<和&也是可以的,因为HTMLEntityNames.in对这种符号定义了两个,一个有分号,一个没分号。HTMLEntityNames.in里面还有一些不常用的html entry,例如·(显示为·)。关于html entry更详细的介绍可以参考http://en.易做图.org/wiki/List_of_XML_and_HTML_character_entity_references和http://www.w3.org/TR/html4/sgml/entities.html。html entry可以做一些很有趣的事情,例如http://www.beijing-time.org/wannianli.htm(用ie打开)里面的世界地图,或者你建立一个网页,输入如下内容<FONT style="FONT-SIZE: 120pt; COLOR: green; FONT-FAMILY: Webdings">û</FONT>,在浏览器打开就可以看见一个世界地图。
WMLElementFactory.cpp和WMLNames.cpp是由如下规则生成:
ifeq ($(findstring ENABLE_WML,$(FEATURE_DEFINES)), ENABLE_WML)
WMLElementFactory.cpp WMLNames.cpp : dom/make_names.pl wml/WMLTagNames.in wml/WMLAttributeNames.in
perl -I $(WebCore)/bindings/scripts $< --tags $(WebCore)/wml/WMLTagNames.in --attrs $(WebCore)/wml/WMLAttributeNames.in --factory --wrapperFactoryelse
WMLElementFactory.cpp :
echo > $@WMLNames.cpp :
echo > $@endif
从上面可以看出,WMLElementFactory.cpp和WMLNames.cpp只有在编译选项中包含ENABLE_WML才会有内容,否则就是一个空文件。ENABLE_WML在win32平台上默认是关闭的,因为pc上不会去访问WML网页。如果大家需要编译手机上的webkit浏览器,记得要将这个编译选项打开,否则编译出来的浏览器是无法浏览wap网站上面的网页。WMLTagNames.in (D: oolscygwinhomexufanWebKitSourceWebCorewmlWMLTagNames.in )和WMLAttributeNames.in(D: oolscygwinhomexufanWebKitSourceWebCorewmlWMLAttributeNames.in )的规则与HTMLTagNames.in和HTMLAttributeNames.in基本一样,只是标签和属性少了很多。
SVGElementFactory.cpp和SVGNames.cpp由如下规则生成:
ifdef SVG_FLAGS
SVGElementFactory.cpp SVGNames.cpp : dom/make_names.pl svg/svgtags.in svg/svgattrs.in
perl -I $(WebCore)/bindings/scripts $< --tags $(WebCore)/svg/svgtags.in --attrs $(WebCore)/svg/svgattrs.in --extraDefines "$(SVG_FLAGS)" --factory --wrapperFactory
elseSVGElementFactory.cpp SVGNames.cpp : dom/make_names.pl svg/svgtags.in svg/svgattrs.in
perl -I $(WebCore)/bindings/scripts $< --tags $(WebCore)/svg/svgtags.in --attrs $(WebCore)/svg/svgattrs.in --factory --wrapperFactoryendif
SVGElementFactory.cpp和SVGNames.cpp只有定义了SVG_FLAGS 才会生成,与WMLElementFactory.cpp和WMLNames.cpp等的处理差不多,都是调用make_names.pl(D: oolscygwinhomexufanWebKitSourceWebCoredommake_names.pl)生成的。
UserAgentStyleSheets.h由如下规则生成:
USER_AGENT_STYLE_SHEETS = $(WebCore)/css/html.css $(WebCore)/css/quirks.css $(WebCore)/css/view-source.css $(WebCore)/css/themeWin.css $(WebCore)/css/themeWinQuirks.css
……………
UserAgentStyleSheets.h : css/make-css-file-arrays.pl $(USER_AGENT_STYLE_SHEETS)
perl $< $@ UserAgentStyleSheetsData.cpp $(USER_AGENT_STYLE_SHEETS)从上面可以看到,UserAgentStyleSheets.h由make-css-file-arrays.pl(D: oolscygwinhomexufanWebKitSourceWebCorecssmake-css-file-arrays.pl )处理html.css,quirks.css,view-source.css等文件而产生。html.css(D: oolscygwinhomexufanWebKitSourceWebCorecsshtml.css)等文件里面定义了webkit的一些tag的默认css属性,例如下面的body,p和h1:
body {
display: block;
margin: 8px
}p {
display: block;
-webkit-margin-before: 1__qem;
-webkit-margin-after: 1__qem;
-webkit-margin-start: 0;
-webkit-margin-end: 0;
}…………
h1 {
display: block;
font-size: 2em;
-webkit-margin-before: 0.67__qem;
-webkit-margin-after: 0.67em;
-webkit-margin-start: 0;
-webkit-margin-end: 0;
font-weight: bold
}我想大家看了上面的css,应该对浏览器的一些默认显示有所了解了吧。关于body margin的在各个浏览器上的默认值可以参考:http://shuaigg-babysky.javaeye.com/blog/865245。
XLinkNames.cpp由如下规则生成:
XLinkNames.cpp : dom/make_names.pl svg/xlinkattrs.in
perl -I $(WebCore)/bindings/scripts $< --attrs $(WebCore)/svg/xlinkattrs.inxlinkattrs.in里面定义了xlink里面的支持的属性。XLink 是 XML 链接语言(XML Linking Language)的缩写,用于在 XML 文档中创建超级链接的语言,其更加详细的介绍可以参考http://www.w3.org/TR/xlink/和asp">http://www.w3school.com.cn/xlink/index.asp。webkit里面的xlink主要用于svg。
XMLNSNames.cpp由如下规则生成:
XMLNSNames.cpp : dom/make_names.pl xml/xmlnsattrs.in
perl -I $(WebCore)/bindings/scripts $< --attrs $(WebCore)/xml/xmlnsattrs.inxmlnsattrs.in里面定义了xml namsapce这个属性的名字:xmlns。
XMLNames.cpp由如下规则生成:
XMLNames.cpp : dom/make_names.pl xml/xmlattrs.in
perl -I $(WebCore)/bindings/scripts $< --attrs $(WebCore)/xml/xmlattrs.inxmlattrs.in里面定义了xml一些属性的名字:base,lang,space。
MathMLElementFactory.cpp和MathMLNames.cpp由如下规则生成:MathMLElementFactory.cpp MathMLNames.cpp : dom/make_names.pl mathm
补充:综合编程 , 其他综合 ,