1#ifndef __ACCESS_H__
2#define __ACCESS_H__
3
4/* access.h -- carry out accessibility checks
5
6  Copyright University of Toronto
7  Portions (c) 1998-2006 (W3C) MIT, ERCIM, Keio University
8  See tidy.h for the copyright notice.
9
10  CVS Info :
11
12    $Author: iccir $
13    $Date: 2007/01/30 23:46:51 $
14    $Revision: 1.3 $
15
16*/
17
18/*********************************************************************
19* AccessibilityChecks
20*
21* Carries out processes for all accessibility checks.  Traverses
22* through all the content within the tree and evaluates the tags for
23* accessibility.
24*
25* To perform the following checks, 'AccessibilityChecks' must be
26* called AFTER the tree structure has been formed.
27*
28* If, in the command prompt, there is no specification of which
29* accessibility priorities to check, no accessibility checks will be
30* performed.  (ie. '1' for priority 1, '2' for priorities 1 and 2,
31*                  and '3') for priorities 1, 2 and 3.)
32*
33* Copyright University of Toronto
34* Programmed by: Mike Lam and Chris Ridpath
35* Modifications by : Terry Teague (TRT)
36*
37*********************************************************************/
38
39
40#include "forward.h"
41
42#if SUPPORT_ACCESSIBILITY_CHECKS
43
44/* The accessibility checks to perform depending on user's desire.
45
46   1. priority 1
47   2. priority 1 & 2
48   3. priority 1, 2, & 3
49*/
50
51/* Determines if the client-side text link is found within the document
52typedef struct AreaLinks
53{
54    struct AreaLinks* next;
55    char* link;
56    Bool HasBeenFound;
57} AreaLinks;
58*/
59
60#define TEXTBUF_SIZE    128
61
62
63struct _TidyAccessImpl;
64typedef struct _TidyAccessImpl TidyAccessImpl;
65
66struct _TidyAccessImpl
67{
68    /* gets set from Tidy variable AccessibilityCheckLevel */
69    int PRIORITYCHK;
70
71    /* Number of characters that are found within the concatenated text */
72    int counter;
73
74    /* list of characters in the text nodes found within a container element */
75    tmbchar textNode[ TEXTBUF_SIZE ];
76
77    /* The list of characters found within one text node */
78    tmbchar text[ TEXTBUF_SIZE ];
79
80    /* Number of frame elements found within a frameset */
81    int numFrames;
82
83    /* Number of 'longdesc' attributes found within a frameset */
84    int HasCheckedLongDesc;
85
86    int  CheckedHeaders;
87    int  ListElements;
88    int  OtherListElements;
89
90    /* For 'USEMAP' identifier */
91    Bool HasUseMap;
92    Bool HasName;
93    Bool HasMap;
94
95    /* For tracking nodes that are deleted from the original parse tree - TRT */
96    /* Node *access_tree; */
97
98    Bool HasTH;
99    Bool HasValidFor;
100    Bool HasValidId;
101    Bool HasValidRowHeaders;
102    Bool HasValidColumnHeaders;
103    Bool HasInvalidRowHeader;
104    Bool HasInvalidColumnHeader;
105    int  ForID;
106
107    /* List containing map-links
108    AreaLinks* links;
109    AreaLinks* start;
110    AreaLinks* current;
111    */
112
113};
114
115
116/*
117    Determines which error/warning message should be displayed,
118    depending on the error code that was called.
119
120    Offset accessibility error codes by FIRST_ACCESS_ERR to avoid conflict with
121    other error codes defined in message.h and used in localize.c.
122*/
123enum accessErrorCodes
124{
125                           FIRST_ACCESS_ERR = 1000,    /* must be first */
126
127    /* [1.1.1.1] */        IMG_MISSING_ALT,
128    /* [1.1.1.2] */        IMG_ALT_SUSPICIOUS_FILENAME,
129    /* [1.1.1.3] */        IMG_ALT_SUSPICIOUS_FILE_SIZE,
130    /* [1.1.1.4] */        IMG_ALT_SUSPICIOUS_PLACEHOLDER,
131    /* [1.1.1.10] */       IMG_ALT_SUSPICIOUS_TOO_LONG,
132    /* [1.1.1.11] */       IMG_MISSING_ALT_BULLET,
133    /* [1.1.1.12] */       IMG_MISSING_ALT_H_RULE,
134    /* [1.1.2.1] */        IMG_MISSING_LONGDESC_DLINK,
135    /* [1.1.2.2] */        IMG_MISSING_DLINK,
136    /* [1.1.2.3] */        IMG_MISSING_LONGDESC,
137    /* [1.1.2.5] */        LONGDESC_NOT_REQUIRED,
138    /* [1.1.3.1] */        IMG_BUTTON_MISSING_ALT,
139    /* [1.1.4.1] */        APPLET_MISSING_ALT,
140    /* [1.1.5.1] */        OBJECT_MISSING_ALT,
141    /* [1.1.6.1] */        AUDIO_MISSING_TEXT_WAV,
142    /* [1.1.6.2] */        AUDIO_MISSING_TEXT_AU,
143    /* [1.1.6.3] */        AUDIO_MISSING_TEXT_AIFF,
144    /* [1.1.6.4] */        AUDIO_MISSING_TEXT_SND,
145    /* [1.1.6.5] */        AUDIO_MISSING_TEXT_RA,
146    /* [1.1.6.6] */        AUDIO_MISSING_TEXT_RM,
147    /* [1.1.8.1] */        FRAME_MISSING_LONGDESC,
148    /* [1.1.9.1] */        AREA_MISSING_ALT,
149    /* [1.1.10.1] */       SCRIPT_MISSING_NOSCRIPT,
150    /* [1.1.12.1] */       ASCII_REQUIRES_DESCRIPTION,
151    /* [1.2.1.1] */        IMG_MAP_SERVER_REQUIRES_TEXT_LINKS,
152    /* [1.4.1.1] */        MULTIMEDIA_REQUIRES_TEXT,
153    /* [1.5.1.1] */        IMG_MAP_CLIENT_MISSING_TEXT_LINKS,
154    /* [2.1.1.1] */        INFORMATION_NOT_CONVEYED_IMAGE,
155    /* [2.1.1.2] */        INFORMATION_NOT_CONVEYED_APPLET,
156    /* [2.1.1.3] */        INFORMATION_NOT_CONVEYED_OBJECT,
157    /* [2.1.1.4] */        INFORMATION_NOT_CONVEYED_SCRIPT,
158    /* [2.1.1.5] */        INFORMATION_NOT_CONVEYED_INPUT,
159    /* [2.2.1.1] */        COLOR_CONTRAST_TEXT,
160    /* [2.2.1.2] */        COLOR_CONTRAST_LINK,
161    /* [2.2.1.3] */        COLOR_CONTRAST_ACTIVE_LINK,
162    /* [2.2.1.4] */        COLOR_CONTRAST_VISITED_LINK,
163    /* [3.2.1.1] */        DOCTYPE_MISSING,
164    /* [3.3.1.1] */        STYLE_SHEET_CONTROL_PRESENTATION,
165    /* [3.5.1.1] */        HEADERS_IMPROPERLY_NESTED,
166    /* [3.5.2.1] */        POTENTIAL_HEADER_BOLD,
167    /* [3.5.2.2] */        POTENTIAL_HEADER_ITALICS,
168    /* [3.5.2.3] */        POTENTIAL_HEADER_UNDERLINE,
169    /* [3.5.3.1] */        HEADER_USED_FORMAT_TEXT,
170    /* [3.6.1.1] */        LIST_USAGE_INVALID_UL,
171    /* [3.6.1.2] */        LIST_USAGE_INVALID_OL,
172    /* [3.6.1.4] */        LIST_USAGE_INVALID_LI,
173    /* [4.1.1.1] */        INDICATE_CHANGES_IN_LANGUAGE,
174    /* [4.3.1.1] */        LANGUAGE_NOT_IDENTIFIED,
175    /* [4.3.1.1] */        LANGUAGE_INVALID,
176    /* [5.1.2.1] */        DATA_TABLE_MISSING_HEADERS,
177    /* [5.1.2.2] */        DATA_TABLE_MISSING_HEADERS_COLUMN,
178    /* [5.1.2.3] */        DATA_TABLE_MISSING_HEADERS_ROW,
179    /* [5.2.1.1] */        DATA_TABLE_REQUIRE_MARKUP_COLUMN_HEADERS,
180    /* [5.2.1.2] */        DATA_TABLE_REQUIRE_MARKUP_ROW_HEADERS,
181    /* [5.3.1.1] */        LAYOUT_TABLES_LINEARIZE_PROPERLY,
182    /* [5.4.1.1] */        LAYOUT_TABLE_INVALID_MARKUP,
183    /* [5.5.1.1] */        TABLE_MISSING_SUMMARY,
184    /* [5.5.1.2] */        TABLE_SUMMARY_INVALID_NULL,
185    /* [5.5.1.3] */        TABLE_SUMMARY_INVALID_SPACES,
186    /* [5.5.1.6] */        TABLE_SUMMARY_INVALID_PLACEHOLDER,
187    /* [5.5.2.1] */        TABLE_MISSING_CAPTION,
188    /* [5.6.1.1] */        TABLE_MAY_REQUIRE_HEADER_ABBR,
189    /* [5.6.1.2] */        TABLE_MAY_REQUIRE_HEADER_ABBR_NULL,
190    /* [5.6.1.3] */        TABLE_MAY_REQUIRE_HEADER_ABBR_SPACES,
191    /* [6.1.1.1] */        STYLESHEETS_REQUIRE_TESTING_LINK,
192    /* [6.1.1.2] */        STYLESHEETS_REQUIRE_TESTING_STYLE_ELEMENT,
193    /* [6.1.1.3] */        STYLESHEETS_REQUIRE_TESTING_STYLE_ATTR,
194    /* [6.2.1.1] */        FRAME_SRC_INVALID,
195    /* [6.2.2.1] */        TEXT_EQUIVALENTS_REQUIRE_UPDATING_APPLET,
196    /* [6.2.2.2] */        TEXT_EQUIVALENTS_REQUIRE_UPDATING_SCRIPT,
197    /* [6.2.2.3] */        TEXT_EQUIVALENTS_REQUIRE_UPDATING_OBJECT,
198    /* [6.3.1.1] */        PROGRAMMATIC_OBJECTS_REQUIRE_TESTING_SCRIPT,
199    /* [6.3.1.2] */        PROGRAMMATIC_OBJECTS_REQUIRE_TESTING_OBJECT,
200    /* [6.3.1.3] */        PROGRAMMATIC_OBJECTS_REQUIRE_TESTING_EMBED,
201    /* [6.3.1.4] */        PROGRAMMATIC_OBJECTS_REQUIRE_TESTING_APPLET,
202    /* [6.5.1.1] */        FRAME_MISSING_NOFRAMES,
203    /* [6.5.1.2] */        NOFRAMES_INVALID_NO_VALUE,
204    /* [6.5.1.3] */        NOFRAMES_INVALID_CONTENT,
205    /* [6.5.1.4] */        NOFRAMES_INVALID_LINK,
206    /* [7.1.1.1] */        REMOVE_FLICKER_SCRIPT,
207    /* [7.1.1.2] */        REMOVE_FLICKER_OBJECT,
208    /* [7.1.1.3] */        REMOVE_FLICKER_EMBED,
209    /* [7.1.1.4] */        REMOVE_FLICKER_APPLET,
210    /* [7.1.1.5] */        REMOVE_FLICKER_ANIMATED_GIF,
211    /* [7.2.1.1] */        REMOVE_BLINK_MARQUEE,
212    /* [7.4.1.1] */        REMOVE_AUTO_REFRESH,
213    /* [7.5.1.1] */        REMOVE_AUTO_REDIRECT,
214    /* [8.1.1.1] */        ENSURE_PROGRAMMATIC_OBJECTS_ACCESSIBLE_SCRIPT,
215    /* [8.1.1.2] */        ENSURE_PROGRAMMATIC_OBJECTS_ACCESSIBLE_OBJECT,
216    /* [8.1.1.3] */        ENSURE_PROGRAMMATIC_OBJECTS_ACCESSIBLE_APPLET,
217    /* [8.1.1.4] */        ENSURE_PROGRAMMATIC_OBJECTS_ACCESSIBLE_EMBED,
218    /* [9.1.1.1] */        IMAGE_MAP_SERVER_SIDE_REQUIRES_CONVERSION,
219    /* [9.3.1.1] */        SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_DOWN,
220    /* [9.3.1.2] */        SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_UP,
221    /* [9.3.1.3] */        SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_CLICK,
222    /* [9.3.1.4] */        SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_OVER,
223    /* [9.3.1.5] */        SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_OUT,
224    /* [9.3.1.6] */        SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_MOVE,
225    /* [10.1.1.1] */       NEW_WINDOWS_REQUIRE_WARNING_NEW,
226    /* [10.1.1.2] */       NEW_WINDOWS_REQUIRE_WARNING_BLANK,
227    /* [10.2.1.1] */       LABEL_NEEDS_REPOSITIONING_BEFORE_INPUT,
228    /* [10.2.1.2] */       LABEL_NEEDS_REPOSITIONING_AFTER_INPUT,
229    /* [10.4.1.1] */       FORM_CONTROL_REQUIRES_DEFAULT_TEXT,
230    /* [10.4.1.2] */       FORM_CONTROL_DEFAULT_TEXT_INVALID_NULL,
231    /* [10.4.1.3] */       FORM_CONTROL_DEFAULT_TEXT_INVALID_SPACES,
232    /* [11.2.1.1] */       REPLACE_DEPRECATED_HTML_APPLET,
233    /* [11.2.1.2] */       REPLACE_DEPRECATED_HTML_BASEFONT,
234    /* [11.2.1.3] */       REPLACE_DEPRECATED_HTML_CENTER,
235    /* [11.2.1.4] */       REPLACE_DEPRECATED_HTML_DIR,
236    /* [11.2.1.5] */       REPLACE_DEPRECATED_HTML_FONT,
237    /* [11.2.1.6] */       REPLACE_DEPRECATED_HTML_ISINDEX,
238    /* [11.2.1.7] */       REPLACE_DEPRECATED_HTML_MENU,
239    /* [11.2.1.8] */       REPLACE_DEPRECATED_HTML_S,
240    /* [11.2.1.9] */       REPLACE_DEPRECATED_HTML_STRIKE,
241    /* [11.2.1.10] */      REPLACE_DEPRECATED_HTML_U,
242    /* [12.1.1.1] */       FRAME_MISSING_TITLE,
243    /* [12.1.1.2] */       FRAME_TITLE_INVALID_NULL,
244    /* [12.1.1.3] */       FRAME_TITLE_INVALID_SPACES,
245    /* [12.4.1.1] */       ASSOCIATE_LABELS_EXPLICITLY,
246    /* [12.4.1.2] */       ASSOCIATE_LABELS_EXPLICITLY_FOR,
247    /* [12.4.1.3] */       ASSOCIATE_LABELS_EXPLICITLY_ID,
248    /* [13.1.1.1] */       LINK_TEXT_NOT_MEANINGFUL,
249    /* [13.1.1.2] */       LINK_TEXT_MISSING,
250    /* [13.1.1.3] */       LINK_TEXT_TOO_LONG,
251    /* [13.1.1.4] */       LINK_TEXT_NOT_MEANINGFUL_CLICK_HERE,
252    /* [13.1.1.5] */       LINK_TEXT_NOT_MEANINGFUL_MORE,
253    /* [13.1.1.6] */       LINK_TEXT_NOT_MEANINGFUL_FOLLOW_THIS,
254    /* [13.2.1.1] */       METADATA_MISSING,
255    /* [13.2.1.2] */       METADATA_MISSING_LINK,
256    /* [13.2.1.3] */       METADATA_MISSING_REDIRECT_AUTOREFRESH,
257    /* [13.10.1.1] */      SKIPOVER_ASCII_ART,
258
259    LAST_ACCESS_ERR    /* must be last */
260};
261
262
263void TY_(AccessibilityHelloMessage)( TidyDocImpl* doc );
264void TY_(DisplayHTMLTableAlgorithm)( TidyDocImpl* doc );
265
266/************************************************************
267* AccessibilityChecks
268*
269* Traverses through the individual nodes of the tree
270* and checks attributes and elements for accessibility.
271* after the tree structure has been formed.
272************************************************************/
273
274void TY_(AccessibilityChecks)( TidyDocImpl* doc );
275
276
277#endif /* SUPPORT_ACCESSIBILITY_CHECKS */
278#endif /* __ACCESS_H__ */
279