2929typedef enum {
3030 K_ANCHOR ,
3131 K_CLASS ,
32+ K_TITLE ,
3233 K_HEADING1 ,
3334 K_HEADING2 ,
3435 K_HEADING3 ,
@@ -66,6 +67,7 @@ static kindDefinition HtmlKinds [] = {
6667 { true, 'a' , "anchor" , "named anchors" },
6768 { true, 'c' , "class" , "classes" ,
6869 .referenceOnly = true, ATTACH_ROLES (ClassRoles )},
70+ { true, 't' , "title" , "titles" },
6971 { true, 'h' , "heading1" , "H1 headings" },
7072 { true, 'i' , "heading2" , "H2 headings" },
7173 { true, 'j' , "heading3" , "H3 headings" },
@@ -77,9 +79,16 @@ static kindDefinition HtmlKinds [] = {
7779};
7880
7981typedef enum {
82+ /* The order starting from "title" to "h3" should
83+ * not be changed.
84+ *
85+ */
86+ KEYWORD_heading_start ,
87+ KEYWORD_title = KEYWORD_heading_start ,
8088 KEYWORD_h1 ,
8189 KEYWORD_h2 ,
8290 KEYWORD_h3 ,
91+ KEYWORD_heading_end = KEYWORD_h3 ,
8392 KEYWORD_a ,
8493 KEYWORD_script ,
8594 KEYWORD_style ,
@@ -110,6 +119,7 @@ typedef enum {
110119} keywordId ;
111120
112121static const keywordTable HtmlKeywordTable [] = {
122+ {"title" , KEYWORD_title },
113123 {"h1" , KEYWORD_h1 },
114124 {"h2" , KEYWORD_h2 },
115125 {"h3" , KEYWORD_h3 },
@@ -465,7 +475,7 @@ static void readTag (tokenInfo *token, vString *text, int depth)
465475 bool stylesheet_expectation = false;
466476
467477 startTag = lookupKeyword (vStringValue (token -> string ), Lang_html );
468- isHeading = (startTag == KEYWORD_h1 || startTag == KEYWORD_h2 || startTag == KEYWORD_h3 );
478+ isHeading = (KEYWORD_heading_start <= startTag && startTag <= KEYWORD_heading_end );
469479 isVoid = (startTag >= KEYWORD_area && startTag <= KEYWORD_wbr );
470480 if (text == NULL && isHeading )
471481 {
@@ -600,6 +610,8 @@ static void readTag (tokenInfo *token, vString *text, int depth)
600610 {
601611 htmlKind headingKind ;
602612
613+ if (startTag == KEYWORD_title )
614+ headingKind = K_TITLE ;
603615 if (startTag == KEYWORD_h1 )
604616 headingKind = K_HEADING1 ;
605617 else if (startTag == KEYWORD_h2 )
0 commit comments