home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2000 April / VPR0004A.BIN / OLS / HTMLLINT / htmllint.lzh / common.rul < prev    next >
Text File  |  1999-12-15  |  13KB  |  388 lines

  1. # DOCTYPE に関する情報 (キーはファイル名)
  2. $doctypescnt = 0;
  3. %doctypes = (
  4.   #  doctype  => DOCTYPE 宣言 (手抜きのため引用符の対応はいいかげん)
  5.   #  guess    => 不完全な宣言 (これから宣言を類推する)
  6.   #  superset => ここで示されたHTMLのサブセットであることを示す
  7.   #  name     => 起動時オプションによる DOCTYPE 指定
  8.   #  guide    => ガイド文字列
  9.   #  abbr     => 短縮名
  10.   #  expired  => 廃棄された DOCTYPE のとき abbr と同じものを指定
  11.   #  group    => グループ名
  12.   #  order    => 順序
  13.   #  version  => HTMLヴァージョン
  14.   #  charref  => 文字参照限界
  15.   #  doclimit => 文書サイズ限界 (KB)
  16.   #  scheme   => 追加スキーム
  17.   #  restrict => SJIS限定等 (1:SJISのみ 2:半角カナ可)
  18.   #  alloweuc  => 機種依存文字から除外する文字コード (範囲を示す対で指定)
  19.   #  allowsjis => 機種依存文字から除外する文字コード (範囲を示す対で指定)
  20.   'html10' => {
  21.     guess    => 'HTML\s*1\.?0',
  22.     name     => 'html1\.?0',
  23.     guide    => 'HTML1.0',
  24.     abbr     => 'HTML1.0',
  25.     group    => 'HTML1.0',
  26.     order    => ++$doctypescnt,
  27.     version  => 1.0,
  28.     charref  => 256 },
  29.   'html20' => {
  30.     doctype  => 'HTML\s+PUBLIC\s+["\']-//IETF//DTD\s+HTML(\s+2\.0.*)?//EN["\']',
  31.     guess    => 'HTML\s*2\.?0',
  32.     name     => 'html2\.?0|rfc1866',
  33.     guide    => 'HTML2.0',
  34.     abbr     => 'HTML2.0',
  35.     group    => 'HTML2.0',
  36.     order    => ++$doctypescnt,
  37.     version  => 2.0,
  38.     charref  => 256 },
  39.   'i18n' => {
  40.     doctype  => 'HTML\s+PUBLIC\s+["\']-//IETF//DTD\s+HTML\s+i18n.*//EN["\']',
  41.     guess    => 'i18n',
  42.     name     => 'html2\.?x|i18n|rfc2070',
  43.     guide    => 'HTML2.x (i18n)',
  44.     abbr     => 'HTML2.x',
  45.     group    => 'HTML2.x',
  46.     order    => ++$doctypescnt,
  47.     version  => 2.0,
  48.     charref  => 2147483486 },
  49.   'arena' => {
  50.     doctype  => 'HTML\s+PUBLIC\s+["\']-//IETF//DTD\s+HTML\s+3\.0.*//EN["\']',
  51.     guess    => 'HTML\s*3\.?0',
  52.     name     => 'html3\.?0|arena',
  53.     guide    => 'HTML3.0',
  54.     abbr     => 'HTML3.0',
  55.     expired  => 'HTML3.0',
  56.     group    => 'HTML3.0',
  57.     order    => ++$doctypescnt,
  58.     version  => 3.0,
  59.     charref  => 256 },
  60.   'wilbur' => {
  61.     doctype  => 'HTML\s+PUBLIC\s+["\']-//W3C//DTD\s+HTML\s+3\.2.*//EN["\']',
  62.     guess    => 'HTML\s*3\.?2',
  63.     name     => 'html3\.?2|wilbur',
  64.     guide    => 'HTML3.2',
  65.     abbr     => 'HTML3.2',
  66.     group    => 'HTML3.2',
  67.     order    => ++$doctypescnt,
  68.     version  => 3.2,
  69.     charref  => 256 },
  70.   'html40-strict' => {
  71.     doctype  => 'HTML\s+PUBLIC\s+["\']-//W3C//DTD\s+HTML\s+4\.0//EN["\']',
  72.     guess    => 'HTML\s*4\.?0(?!1)',
  73.     superset => 'html40-transitional',
  74.     name     => 'html4\.?0(-?s(trict)?)?|cougar(-s(trict)?)?',
  75.     guide    => 'HTML4.0 Strict',
  76.     abbr     => 'HTML4.0 Strict',
  77.     group    => 'HTML4.0',
  78.     order    => ++$doctypescnt,
  79.     version  => 4.0,
  80.     charref  => 1114112 },
  81.   'html40-transitional' => {
  82.     doctype  => 'HTML\s+PUBLIC\s+["\']-//W3C//DTD\s+HTML\s+4\.0\s+Transitional//EN["\']',
  83.     name     => 'html4\.?0-?t(ransitional)?|cougar-t(ransitional)?',
  84.     guide    => 'HTML4.0 Transitional',
  85.     abbr     => 'HTML4.0 Transitional',
  86.     group    => 'HTML4.0',
  87.     order    => ++$doctypescnt,
  88.     version  => 4.0,
  89.     charref  => 1114112 },
  90.   'html40-frameset' => {
  91.     doctype  => 'HTML\s+PUBLIC\s+["\']-//W3C//DTD\s+HTML\s+4\.0\s+Frameset//EN["\']',
  92.     name     => 'html4\.?0-?f(rameset)?|cougar-f(rameset)?',
  93.     guide    => 'HTML4.0 Frameset',
  94.     abbr     => 'HTML4.0 Frameset',
  95.     group    => 'HTML4.0',
  96.     order    => ++$doctypescnt,
  97.     version  => 4.0,
  98.     charref  => 1114112 },
  99.   'html40-mobile' => {
  100.     doctype  => 'HTML\s+SYSTEM\s+["\']html40-mobile.dtd["\']',
  101.     name     => 'html4\.?0-?m(obile)?|cougar-m(obile)?',
  102.     superset => 'html40-strict|15445',
  103.     guide    => 'HTML4.0 Mobile',
  104.     abbr     => 'HTML4.0 Mobile',
  105.     group    => 'HTML4.0',
  106.     order    => ++$doctypescnt,
  107.     version  => 4.0,
  108.     charref  => 1114112 },
  109.   'html401-strict' => {
  110.     doctype  => 'HTML\s+PUBLIC\s+["\']-//W3C//DTD\s+HTML\s+4\.01//EN["\']',
  111.     guess    => 'HTML\s*4\.?01',
  112.     superset => 'html401-transitional',
  113.     name     => 'html4\.?01(-?s(trict)?)?',
  114.     guide    => 'HTML4.01 Strict',
  115.     abbr     => 'HTML4.01 Strict',
  116.     group    => 'HTML4.01',
  117.     order    => ++$doctypescnt,
  118.     version  => 4.0,
  119.     charref  => 1114112 },
  120.   'html401-transitional' => {
  121.     doctype  => 'HTML\s+PUBLIC\s+["\']-//W3C//DTD\s+HTML\s+4\.01\s+Transitional//EN["\']',
  122.     name     => 'html4\.?01-?t(ransitional)?',
  123.     guide    => 'HTML4.01 Transitional',
  124.     abbr     => 'HTML4.01 Transitional',
  125.     group    => 'HTML4.01',
  126.     order    => ++$doctypescnt,
  127.     version  => 4.0,
  128.     charref  => 1114112 },
  129.   'html401-frameset' => {
  130.     doctype  => 'HTML\s+PUBLIC\s+["\']-//W3C//DTD\s+HTML\s+4\.01\s+Frameset//EN["\']',
  131.     name     => 'html4\.?01-?f(rameset)?',
  132.     guide    => 'HTML4.01 Frameset',
  133.     abbr     => 'HTML4.01 Frameset',
  134.     group    => 'HTML4.01',
  135.     order    => ++$doctypescnt,
  136.     version  => 4.0,
  137.     charref  => 1114112 },
  138.   '15445' => {
  139.     doctype  => 'HTML\s+PUBLIC\s+["\']ISO/IEC 15445:1999//DTD\s+(HTML|HyperText\s+Markup\s+Language)//EN["\']',
  140.     guess    => '15445',
  141.     name     => '(iso(/iec)?)?15445|iso-html',
  142.     guide    => 'ISO/IEC 15445',
  143.     abbr     => 'ISO/IEC 15445',
  144.     group    => 'ISO15445',
  145.     order    => ++$doctypescnt,
  146.     version  => 4.0,
  147.     charref  => 1114112 },
  148.   'mozilla20' => {
  149.     guess    => '(Netscape|Navigator|Mozilla)\D*2',
  150.     name     => 'mozilla2\.?0',
  151.     superset => 'mozilla30|mozilla40',
  152.     guide    => 'Netscape Navigator 2.0 (Mozilla)',
  153.     abbr     => 'Mozilla2.0',
  154.     group    => 'Mozilla',
  155.     order    => ++$doctypescnt,
  156.     version  => 2.0,
  157.     scheme   => 'view-source|about|livescript|mocha|montulli' },
  158.   'mozilla30' => {
  159.     guess    => '(Netscape|Navigator|Mozilla)\D*3',
  160.     name     => 'mozilla(3\.?0)?',
  161.     superset => 'mozilla40',
  162.     guide    => 'Netscape Navigator 3.0 (Mozilla)',
  163.     abbr     => 'Mozilla3.0',
  164.     group    => 'Mozilla',
  165.     order    => ++$doctypescnt,
  166.     version  => 3.2,
  167.     scheme   => 'view-source|about|livescript|mocha|montulli' },
  168.   'mozilla40' => {
  169.     guess    => '(Netscape|Navigator|Communicator|Mozilla)\D*([^23]|$)',
  170.     name     => 'mozilla4\.?0|communicator|navigator|netscape',
  171.     guide    => 'Netscape Navigator 4.0 (Mozilla)',
  172.     abbr     => 'Mozilla4.0',
  173.     group    => 'Mozilla',
  174.     order    => ++$doctypescnt,
  175.     version  => 3.2,
  176.     scheme   => 'view-source|about|livescript|mocha|montulli' },
  177.   'ie30b' => {
  178.     doctype  => 'HTML\s+PUBLIC\s+["\']-//Microsoft//DTD\s+Internet\s+Explorer\s+3\.0\s+HTML//EN["\']',
  179.     name     => '(ms)?ie3\.?0b',
  180.     guide    => 'Microsoft Internet Explorer 3.0 beta',
  181.     abbr     => 'MSIE3.0beta',
  182.     group    => 'MSIE',
  183.     order    => ++$doctypescnt,
  184.     version  => 3.0,
  185.     scheme   => 'view-source|about|livescript|mocha|montulli' },
  186.   'ie30' => {
  187.     guess    => '(Internet Explorer|MSIE)\D*3',
  188.     name     => '(ms)?ie3\.?0',
  189.     guide    => 'Microsoft Internet Explorer 3.0',
  190.     abbr     => 'MSIE3.0',
  191.     group    => 'MSIE',
  192.     order    => ++$doctypescnt,
  193.     version  => 3.2,
  194.     scheme   => 'view-source|about|livescript|mocha|montulli' },
  195.   'ie40' => {
  196.     guess    => '(Internet Explorer|MSIE)\D*4',
  197.     name     => '(ms)?ie4\.?0',
  198.     guide    => 'Microsoft Internet Explorer 4.0',
  199.     abbr     => 'MSIE4.0',
  200.     group    => 'MSIE',
  201.     order    => ++$doctypescnt,
  202.     version  => 4.0,
  203.     scheme   => 'view-source|about|livescript|mocha|montulli' },
  204.   'ie50' => {
  205.     guess    => '(Internet Explorer|MSIE)\D*([^34]|$)',
  206.     name     => '(ms)?ie5\.?0|microsoft',
  207.     guide    => 'Microsoft Internet Explorer 5.0',
  208.     abbr     => 'MSIE5.0',
  209.     group    => 'MSIE',
  210.     order    => ++$doctypescnt,
  211.     version  => 4.0,
  212.     scheme   => 'view-source|about|livescript|mocha|montulli' },
  213.   'webexp' => {
  214.     name     => 'webexp(1\.1)?',
  215.     guide    => 'IBM WebExplorer 1.1',
  216.     abbr     => 'WebExplorer1.1',
  217.     group    => 'WebExplorer',
  218.     order    => ++$doctypescnt,
  219.     version  => 2.0,
  220.     charref  => 256 },
  221.   'compact-html' => {
  222.     doctype  => 'HTML\s+PUBLIC\s+["\']-//W3C//DTD\s+Compact\s+HTML\s+1.0\s+Draft//EN["\']',
  223.     guess    => 'Compact(\s+HTML)?',
  224.     name     => 'compact(-?html)?',
  225.     guide    => 'Compact HTML',
  226.     abbr     => 'Compact HTML',
  227.     group    => 'Compact HTML',
  228.     order    => ++$doctypescnt,
  229.     version  => 3.2,
  230.     charref  => 256 },
  231.   'imode' => {
  232.     guess    => '(DoCoMo|iMode)\D*(1|$)',
  233.     name     => 'imode(1\.?0)?',
  234.     guide    => 'NTT DoCoMo iMode 1.0',
  235.     abbr     => 'iMode1.0',
  236.     group    => 'iMode',
  237.     order    => ++$doctypescnt,
  238.     version  => 3.2,
  239.     charref  => 65536,
  240.     doclimit => 2,
  241.     scheme   => 'tel',
  242.     restrict => 3,
  243.     allowsjis => { 0xF89F => 0xF9B0 } },
  244.   'imode20' => {
  245.     guess    => '(DoCoMo|iMode)\D*2',
  246.     name     => 'imode2\.?0',
  247.     guide    => 'NTT DoCoMo iMode 2.0',
  248.     abbr     => 'iMode2.0',
  249.     group    => 'iMode',
  250.     order    => ++$doctypescnt,
  251.     version  => 3.2,
  252.     charref  => 65536,
  253.     doclimit => 5,
  254.     scheme   => 'tel',
  255.     restrict => 3,
  256.     allowsjis => { 0xF89F => 0xF9B0 } },
  257.   'jpo' => {
  258.     name     => 'jpo',
  259.     guide    => '特許出願用HTML',
  260.     abbr     => '特許出願用HTML',
  261.     group    => '特許出願用HTML',
  262.     order    => ++$doctypescnt,
  263.     version  => 0,
  264.     restrict => 3,
  265.     alloweuc  => { 0xADA1 => 0xADA9 },
  266.     allowsjis => { 0x8740 => 0x8748 } },
  267. );
  268.  
  269. # サポートしていない DOCTYPE
  270. %xdoctypes = (
  271.   'htmlplus' => {
  272.     doctype  => 'HTMLPLUS\s+PUBLIC\s+["\']-//Internet/RFC \d+//EN["\']',
  273.     guess    => 'HTMLPLUS',
  274.     guide    => 'HTML+',
  275.     subst    => 'html10' },
  276.   'xhtml10-strict' => {
  277.     doctype  => 'HTML\s+PUBLIC\s+["\']-//W3C//DTD\s+XHTML\s+1\.0(\s+Strict)?//EN["\']',
  278.     guess    => 'XHTML',
  279.     guide    => 'XHTML1.0 Strict',
  280.     subst    => 'html40-strict' },
  281.   'xhtml10-transitional' => {
  282.     doctype  => 'HTML\s+PUBLIC\s+["\']-//W3C//DTD\s+XHTML\s+1\.0\s+Transitional//EN["\']',
  283.     guide    => 'XHTML1.0 Transitional',
  284.     subst    => 'html40-transitional' },
  285.   'xhtml10-frameset' => {
  286.     doctype  => 'HTML\s+PUBLIC\s+["\']-//W3C//DTD\s+XHTML\s+1\.0\s+Frameset//EN["\']',
  287.     guide    => 'XHTML1.0 Frameset',
  288.     subst    => 'html40-frameset' },
  289. );
  290.  
  291. # 物理的フォントタグとその代替え候補
  292. %physicalFontElements = (
  293.   B  => 'STRONG',
  294.   I  => 'EM',
  295.   TT => 'CODE|SAMP|KBD',
  296. );
  297.  
  298. # フォームコントロール
  299. $formControls = 'INPUT|TEXTAREA|SELECT|BUTTON|KEYGEN|OBJECT';
  300.  
  301. # 特定の要素の内容にしか書けないタグ
  302. %innerElements = (
  303.   FORM => 'INPUT|TEXTAREA|SELECT|BUTTON|KEYGEN',
  304. );
  305.  
  306. # ブラウザによる非サポートタグを吸収する対
  307. %nonsupportedTagsPair = (
  308.   FRAMESET => [ 'NOFRAMES', 'no-noframes' ],
  309.   SCRIPT   => [ 'NOSCRIPT', 'no-noscript' ],
  310. );
  311.  
  312. # 推奨されないタグの代替え
  313. %altDeprecated = (
  314.   CENTER => 'DIV ALIGN=CENTER',
  315. # DIR =>
  316. # MENU =>
  317. # NEXTID =>
  318.   ISINDEX => 'INPUT',
  319.   XMP => 'PRE',
  320. # LISTING =>
  321. # PLAINTEXT =>
  322.   APPLET => 'OBJECT',
  323.   'BASEFONT|FONT|S|STRIKE|U' => 'css',
  324. );
  325.  
  326. # ヘディングの独立ブロック
  327. $headingBlocks = 'BLOCK|BLOCKQUOTE|TABLE';
  328.  
  329. # タグの要素の先頭や末尾に空白を禁止するタグ
  330. $cuddleContainers = 'A|H\d|LI|TITLE';
  331.  
  332. # WAI で使うべきでないとされているタグ
  333. $shouldNotUse = 'BLINK|MARQUEE';
  334.  
  335. # WIDTH と HEIGHT 属性があった方がいいタグ
  336. $recommendedWidth = 'IMG|APPLET|EMBED|OBJECT';
  337.  
  338. # TITLE 属性があった方がいいタグ
  339. $recommendedTitle = 'ABBR|ACRONYM';
  340. $recommendedFrameTitle = 'FRAMESET|FRAME|IFRAME';
  341.  
  342. # LONGDESC 属性があった方がいいタグ
  343. #$recommendedLongdesc = 'FRAME';
  344.  
  345. # ACCESSKEY 属性があった方がいいタグ
  346. $recommendedAccesskey = 'A|AREA|LEGEND|INPUT|TEXTAREA|BUTTON';
  347.  
  348. # TABINDEX 属性があった方がいいタグ
  349. $recommendedTabindex = 'INPUT|TEXTAREA|BUTTON|SELECT';
  350.  
  351. # SUMMARY 属性があった方がいいタグ
  352. $recommendedSummary = 'TABLE';
  353.  
  354. # ABBR 属性があった方がいいタグ
  355. $recommendedAbbr = 'TH';
  356.  
  357. # <!-- --> で要素の内容を囲んだ方がいいタグ
  358. $commentedElement = 'SCRIPT|STYLE|SERVER';
  359.  
  360. # 共通スキーム
  361. $allSchemes  = # RFC1738
  362.                'ftp|http|gopher|mailto|news|nntp|telnet|wais|file|prospero'.
  363.                # RFC2224 2255 2192 2122  2056             2384 2392    2397
  364.                    '|nfs|ldap|imap|vemmi|z39\.50r|z39\.50s|pop|cid|mid|data'.
  365.                # HTML4.0
  366.                '|java|javascript'.
  367.                # Others
  368.                '|https|clsid|snews';
  369. $httpSchemes = 'https?';
  370.  
  371. # 予約フレーム名
  372. $reservedFrameNames = '_top|_self|_parent|_blank';
  373.  
  374. # HTML4.0 の Link Types
  375. $linkTypes = 'alternate|stylesheet|start|next|prev(?:ious)?|contents|toc|index|glossary|copyright|chapter|section|subsection|appendix|help|bookmark';
  376.  
  377. # <META NAME=ROBOTS CONTENTS> の値
  378. $robotsContents = 'ALL|INDEX|NOFOLLOW|NOINDEX';
  379.  
  380. # <A> の好ましくない内容 (英大文字小文字区別なし)
  381. $hereAnchors = '(?:click\s+)?(?:here|this)(?:\s+(?:site|page|link))?[,.]?';
  382. $hereAnchorsJ =
  383.   '(?:ここ|ココ|これ|コレ|こちら|コチラ|こっち|コッチ|うち|ウチ|此所|此処|こんなの)(?:で|へ)?(?:、|。|,|.)?'.
  384.   '|(?:この|こちらの|コチラの|こっちの|コッチの|うちの|ウチの|此の)\s*(?:サイト|ページ|リンク)(?:で|へ)?(?:、|。|,|.)?'.
  385.   '|(?:(?:ここ|ココ|此所|此処)を)?(?:クリック|押)(?:し(?:て|ま)|す)[^<]*';
  386.  
  387. 1;
  388.