case eCSSProperty_outline:
PRBool CSSParserImpl::ParseSingleValueProperty(nsresult& aErrorCode,                                               nsCSSValue& aValue,                                               nsCSSProperty aPropID){  switch (aPropID) {  case eCSSProperty_UNKNOWN:  case eCSSProperty_background:  case eCSSProperty_background_position:  case eCSSProperty_border:  case eCSSProperty_border_color:  case eCSSProperty_border_bottom_colors:  case eCSSProperty_border_left_colors:  case eCSSProperty_border_right_colors:  case eCSSProperty_border_top_colors:  case eCSSProperty_border_spacing:  case eCSSProperty_border_style:  case eCSSProperty_border_bottom:  case eCSSProperty_border_left:  case eCSSProperty_border_right:  case eCSSProperty_border_top:  case eCSSProperty_border_width:  case eCSSProperty__moz_border_radius:  case eCSSProperty_clip:  case eCSSProperty_content:  case eCSSProperty__moz_counter_increment:  case eCSSProperty__moz_counter_reset:  case eCSSProperty_cue:  case eCSSProperty_cursor:  case eCSSProperty_font:  case eCSSProperty_image_region:  case eCSSProperty_list_style:  case eCSSProperty_margin:  case eCSSProperty_margin_end:  case eCSSProperty_margin_left:  case eCSSProperty_margin_right:  case eCSSProperty_margin_start:#ifdef ENABLE_OUTLINE  case eCSSProperty__moz_outline:  case eCSSProperty__moz_outline_radius:#endif  case eCSSProperty_overflow:  case eCSSProperty_padding:  case eCSSProperty_padding_end:  case eCSSProperty_padding_left:  case eCSSProperty_padding_right:  case eCSSProperty_padding_start:  case eCSSProperty_pause:  case eCSSProperty_quotes:  case eCSSProperty_size:  case eCSSProperty_text_shadow:  case eCSSProperty_COUNT:#ifdef MOZ_SVG  case eCSSProperty_stroke_dasharray:  case eCSSProperty_marker:#endif    NS_ERROR("not a single value property");    return PR_FALSE;  case eCSSProperty_margin_left_ltr_source:  case eCSSProperty_margin_left_rtl_source:  case eCSSProperty_margin_right_ltr_source:  case eCSSProperty_margin_right_rtl_source:  case eCSSProperty_padding_left_ltr_source:  case eCSSProperty_padding_left_rtl_source:  case eCSSProperty_padding_right_ltr_source:  case eCSSProperty_padding_right_rtl_source:    NS_ERROR("not currently parsed here");    return PR_FALSE;  case eCSSProperty_appearance:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kAppearanceKTable);  case eCSSProperty_azimuth:    return ParseAzimuth(aErrorCode, aValue);  case eCSSProperty_background_attachment:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kBackgroundAttachmentKTable);  case eCSSProperty__moz_background_clip:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kBackgroundClipKTable);  case eCSSProperty_background_color:    return ParseVariant(aErrorCode, aValue, VARIANT_HCK,                        nsCSSProps::kBackgroundColorKTable);  case eCSSProperty_background_image:    return ParseVariant(aErrorCode, aValue, VARIANT_HUO, nsnull);  case eCSSProperty__moz_background_inline_policy:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kBackgroundInlinePolicyKTable);  case eCSSProperty__moz_background_origin:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kBackgroundOriginKTable);  case eCSSProperty_background_repeat:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kBackgroundRepeatKTable);  case eCSSProperty_background_x_position: // for internal use  case eCSSProperty_background_y_position: // for internal use    return ParseVariant(aErrorCode, aValue, VARIANT_HKLP,                        kBackgroundXYPositionKTable);  case eCSSProperty_binding:    return ParseVariant(aErrorCode, aValue, VARIANT_HUO, nsnull);  case eCSSProperty_border_collapse:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kBorderCollapseKTable);  case eCSSProperty_border_bottom_color:  case eCSSProperty_border_left_color:  case eCSSProperty_border_right_color:  case eCSSProperty_border_top_color:    return ParseVariant(aErrorCode, aValue, VARIANT_HCK,                         nsCSSProps::kBorderColorKTable);  case eCSSProperty_border_bottom_style:  case eCSSProperty_border_left_style:  case eCSSProperty_border_right_style:  case eCSSProperty_border_top_style:    return ParseVariant(aErrorCode, aValue, VARIANT_HOK,                        nsCSSProps::kBorderStyleKTable);  case eCSSProperty_border_bottom_width:  case eCSSProperty_border_left_width:  case eCSSProperty_border_right_width:  case eCSSProperty_border_top_width:    return ParsePositiveVariant(aErrorCode, aValue, VARIANT_HKL,                                nsCSSProps::kBorderWidthKTable);  case eCSSProperty__moz_border_radius_topLeft:  case eCSSProperty__moz_border_radius_topRight:  case eCSSProperty__moz_border_radius_bottomRight:  case eCSSProperty__moz_border_radius_bottomLeft:    return ParseVariant(aErrorCode, aValue, VARIANT_HLP, nsnull);  case eCSSProperty__moz_column_count:    return ParsePositiveVariant(aErrorCode, aValue, VARIANT_AHI, nsnull);  case eCSSProperty__moz_column_width:    return ParseVariant(aErrorCode, aValue, VARIANT_AHL, nsnull);  case eCSSProperty__moz_column_gap:    return ParseVariant(aErrorCode, aValue, VARIANT_HLP, nsnull);#ifdef ENABLE_OUTLINE  case eCSSProperty__moz_outline_radius_topLeft:  case eCSSProperty__moz_outline_radius_topRight:  case eCSSProperty__moz_outline_radius_bottomRight:  case eCSSProperty__moz_outline_radius_bottomLeft:    return ParseVariant(aErrorCode, aValue, VARIANT_HLP, nsnull);#endif  case eCSSProperty_bottom:  case eCSSProperty_top:  case eCSSProperty_left:  case eCSSProperty_right:	  return ParseVariant(aErrorCode, aValue, VARIANT_AHLP, nsnull);  case eCSSProperty_box_align:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kBoxAlignKTable);  case eCSSProperty_box_direction:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kBoxDirectionKTable);  case eCSSProperty_box_flex:    return ParseVariant(aErrorCode, aValue, VARIANT_HN, nsnull);  case eCSSProperty_box_orient:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kBoxOrientKTable);  case eCSSProperty_box_pack:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kBoxPackKTable);  case eCSSProperty_box_ordinal_group:    return ParseVariant(aErrorCode, aValue, VARIANT_INTEGER, nsnull);#ifdef MOZ_SVG  case eCSSProperty_clip_path:    return ParseVariant(aErrorCode, aValue, VARIANT_HUO, nsnull);  case eCSSProperty_clip_rule:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kFillRuleKTable);  case eCSSProperty_dominant_baseline:    return ParseVariant(aErrorCode, aValue, VARIANT_AHK,                        nsCSSProps::kDominantBaselineKTable);  case eCSSProperty_fill:    return ParseVariant(aErrorCode, aValue, VARIANT_HC | VARIANT_NONE | VARIANT_URL,                        nsnull);  case eCSSProperty_fill_opacity:    return ParseVariant(aErrorCode, aValue, VARIANT_HN,                        nsnull);  case eCSSProperty_fill_rule:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kFillRuleKTable);  case eCSSProperty_marker_end:  case eCSSProperty_marker_mid:  case eCSSProperty_marker_start:    return ParseVariant(aErrorCode, aValue, VARIANT_HUO, nsnull);  case eCSSProperty_pointer_events:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kPointerEventsKTable);  case eCSSProperty_shape_rendering:    return ParseVariant(aErrorCode, aValue, VARIANT_AHK,                        nsCSSProps::kShapeRenderingKTable);  case eCSSProperty_stop_color:    return ParseVariant(aErrorCode, aValue, VARIANT_HC | VARIANT_NONE,                        nsnull);  case eCSSProperty_stop_opacity:    return ParseVariant(aErrorCode, aValue, VARIANT_HN,                        nsnull);  case eCSSProperty_stroke:    return ParseVariant(aErrorCode, aValue, VARIANT_HC | VARIANT_NONE | VARIANT_URL,                        nsnull);  case eCSSProperty_stroke_dashoffset:    return ParseVariant(aErrorCode, aValue, VARIANT_HLPN,                        nsnull);  case eCSSProperty_stroke_linecap:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kStrokeLinecapKTable);  case eCSSProperty_stroke_linejoin:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kStrokeLinejoinKTable);  case eCSSProperty_stroke_miterlimit:    return ParsePositiveVariant(aErrorCode, aValue, VARIANT_HN,                                nsnull); // XXX value > 1  case eCSSProperty_stroke_opacity:    return ParseVariant(aErrorCode, aValue, VARIANT_HN,                        nsnull);  case eCSSProperty_stroke_width:    return ParsePositiveVariant(aErrorCode, aValue, VARIANT_HLPN,                        nsnull);  case eCSSProperty_text_anchor:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kTextAnchorKTable);  case eCSSProperty_text_rendering:    return ParseVariant(aErrorCode, aValue, VARIANT_AHK,                        nsCSSProps::kTextRenderingKTable);#endif  case eCSSProperty_box_sizing:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kBoxSizingKTable);  case eCSSProperty_height:  case eCSSProperty_width:    return ParsePositiveVariant(aErrorCode, aValue, VARIANT_AHLP, nsnull);  case eCSSProperty_force_broken_image_icon:    return ParsePositiveVariant(aErrorCode, aValue, VARIANT_INTEGER, nsnull);  case eCSSProperty_caption_side:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                         nsCSSProps::kCaptionSideKTable);  case eCSSProperty_clear:    return ParseVariant(aErrorCode, aValue, VARIANT_HOK,                        nsCSSProps::kClearKTable);  case eCSSProperty_color:    return ParseVariant(aErrorCode, aValue, VARIANT_HC, nsnull);  case eCSSProperty_cue_after:  case eCSSProperty_cue_before:    return ParseVariant(aErrorCode, aValue, VARIANT_HUO, nsnull);  case eCSSProperty_direction:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kDirectionKTable);  case eCSSProperty_display:    if (ParseVariant(aErrorCode, aValue, VARIANT_HOK, nsCSSProps::kDisplayKTable)) {			if (aValue.GetUnit() == eCSSUnit_Enumerated) {				switch (aValue.GetIntValue()) {					case NS_STYLE_DISPLAY_MARKER:        // bug 2055					case NS_STYLE_DISPLAY_RUN_IN:		 // bug 2056					case NS_STYLE_DISPLAY_COMPACT:       // bug 14983					case NS_STYLE_DISPLAY_INLINE_TABLE:  // bug 18218						return PR_FALSE;				}			}      return PR_TRUE;		}    return PR_FALSE;  case eCSSProperty_elevation:    return ParseVariant(aErrorCode, aValue, VARIANT_HK | VARIANT_ANGLE,                        nsCSSProps::kElevationKTable);  case eCSSProperty_empty_cells:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kEmptyCellsKTable);  case eCSSProperty_float:    return ParseVariant(aErrorCode, aValue, VARIANT_HOK,                        nsCSSProps::kFloatKTable);  case eCSSProperty_float_edge:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kFloatEdgeKTable);  case eCSSProperty_font_family:    return ParseFamily(aErrorCode, aValue);  case eCSSProperty_font_size:     return ParsePositiveVariant(aErrorCode, aValue, VARIANT_HKLP,                                nsCSSProps::kFontSizeKTable);  case eCSSProperty_font_size_adjust:    return ParseVariant(aErrorCode, aValue, VARIANT_HON,                        nsnull);  case eCSSProperty_font_stretch:    return ParseVariant(aErrorCode, aValue, VARIANT_HMK,                        nsCSSProps::kFontStretchKTable);  case eCSSProperty_font_style:    return ParseVariant(aErrorCode, aValue, VARIANT_HMK,                        nsCSSProps::kFontStyleKTable);  case eCSSProperty_font_variant:    return ParseVariant(aErrorCode, aValue, VARIANT_HMK,                        nsCSSProps::kFontVariantKTable);  case eCSSProperty_font_weight:    return ParseFontWeight(aErrorCode, aValue);  case eCSSProperty_letter_spacing:  case eCSSProperty_word_spacing:    return ParseVariant(aErrorCode, aValue, VARIANT_HL | VARIANT_NORMAL, nsnull);  case eCSSProperty_line_height:    return ParsePositiveVariant(aErrorCode, aValue, VARIANT_HLPN | VARIANT_NORMAL, nsnull);  case eCSSProperty_list_style_image:    return ParseVariant(aErrorCode, aValue, VARIANT_HUO, nsnull);  case eCSSProperty_list_style_position:    return ParseVariant(aErrorCode, aValue, VARIANT_HK, nsCSSProps::kListStylePositionKTable);  case eCSSProperty_list_style_type:    return ParseVariant(aErrorCode, aValue, VARIANT_HOK, nsCSSProps::kListStyleKTable);  case eCSSProperty_margin_bottom:  case eCSSProperty_margin_end_value: // for internal use  case eCSSProperty_margin_left_value: // for internal use  case eCSSProperty_margin_right_value: // for internal use  case eCSSProperty_margin_start_value: // for internal use  case eCSSProperty_margin_top:    return ParseVariant(aErrorCode, aValue, VARIANT_AHLP, nsnull);  case eCSSProperty_marker_offset:    return ParseVariant(aErrorCode, aValue, VARIANT_AHL, nsnull);  case eCSSProperty_marks:    return ParseMarks(aErrorCode, aValue);  case eCSSProperty_max_height:  case eCSSProperty_max_width:    return ParsePositiveVariant(aErrorCode, aValue, VARIANT_HLPO, nsnull);  case eCSSProperty_min_height:  case eCSSProperty_min_width:    return ParsePositiveVariant(aErrorCode, aValue, VARIANT_HLP, nsnull);  case eCSSProperty_opacity:    return ParseVariant(aErrorCode, aValue, VARIANT_HN, nsnull);  case eCSSProperty_orphans:  case eCSSProperty_widows:    return ParseVariant(aErrorCode, aValue, VARIANT_HI, nsnull);#ifdef ENABLE_OUTLINE  case eCSSProperty__moz_outline_color:    return ParseVariant(aErrorCode, aValue, VARIANT_HCK,                         nsCSSProps::kOutlineColorKTable);  case eCSSProperty__moz_outline_style:    return ParseVariant(aErrorCode, aValue, VARIANT_HOK,                         nsCSSProps::kBorderStyleKTable);  case eCSSProperty__moz_outline_width:  case eCSSProperty__moz_outline_offset:    return ParseVariant(aErrorCode, aValue, VARIANT_HKL,                        nsCSSProps::kBorderWidthKTable);#endif  case eCSSProperty_overflow_x:  case eCSSProperty_overflow_y:    return ParseVariant(aErrorCode, aValue, VARIANT_AHK,                        nsCSSProps::kOverflowSubKTable);  case eCSSProperty_padding_bottom:  case eCSSProperty_padding_end_value: // for internal use  case eCSSProperty_padding_left_value: // for internal use  case eCSSProperty_padding_right_value: // for internal use  case eCSSProperty_padding_start_value: // for internal use  case eCSSProperty_padding_top:    return ParsePositiveVariant(aErrorCode, aValue, VARIANT_HLP, nsnull);  case eCSSProperty_page:    return ParseVariant(aErrorCode, aValue, VARIANT_AUTO | VARIANT_IDENTIFIER, nsnull);  case eCSSProperty_page_break_after:  case eCSSProperty_page_break_before:    return ParseVariant(aErrorCode, aValue, VARIANT_AHK,                         nsCSSProps::kPageBreakKTable);  case eCSSProperty_page_break_inside:    return ParseVariant(aErrorCode, aValue, VARIANT_AHK,                         nsCSSProps::kPageBreakInsideKTable);  case eCSSProperty_pause_after:  case eCSSProperty_pause_before:    return ParseVariant(aErrorCode, aValue, VARIANT_HTP, nsnull);  case eCSSProperty_pitch:    return ParseVariant(aErrorCode, aValue, VARIANT_HKF, nsCSSProps::kPitchKTable);  case eCSSProperty_pitch_range:    return ParseVariant(aErrorCode, aValue, VARIANT_HN, nsnull);  case eCSSProperty_position:    return ParseVariant(aErrorCode, aValue, VARIANT_HK, nsCSSProps::kPositionKTable);  case eCSSProperty_richness:    return ParseVariant(aErrorCode, aValue, VARIANT_HN, nsnull);  case eCSSProperty_speak:    return ParseVariant(aErrorCode, aValue, VARIANT_HMK | VARIANT_NONE,                        nsCSSProps::kSpeakKTable);  case eCSSProperty_speak_header:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kSpeakHeaderKTable);  case eCSSProperty_speak_numeral:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kSpeakNumeralKTable);  case eCSSProperty_speak_punctuation:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kSpeakPunctuationKTable);  case eCSSProperty_speech_rate:    return ParseVariant(aErrorCode, aValue, VARIANT_HN | VARIANT_KEYWORD,                        nsCSSProps::kSpeechRateKTable);  case eCSSProperty_stress:    return ParseVariant(aErrorCode, aValue, VARIANT_HN, nsnull);  case eCSSProperty_table_layout:    return ParseVariant(aErrorCode, aValue, VARIANT_AHK,                        nsCSSProps::kTableLayoutKTable);  case eCSSProperty_text_align:    // When we support aligning on a string, we can parse text-align    // as a string....    return ParseVariant(aErrorCode, aValue, VARIANT_HK /* | VARIANT_STRING */,                        nsCSSProps::kTextAlignKTable);  case eCSSProperty_text_decoration:    return ParseTextDecoration(aErrorCode, aValue);  case eCSSProperty_text_indent:    return ParseVariant(aErrorCode, aValue, VARIANT_HLP, nsnull);  case eCSSProperty_text_transform:    return ParseVariant(aErrorCode, aValue, VARIANT_HOK,                        nsCSSProps::kTextTransformKTable);  case eCSSProperty_unicode_bidi:    return ParseVariant(aErrorCode, aValue, VARIANT_HMK,                        nsCSSProps::kUnicodeBidiKTable);  case eCSSProperty_user_focus:    return ParseVariant(aErrorCode, aValue, VARIANT_HMK | VARIANT_NONE,                        nsCSSProps::kUserFocusKTable);  case eCSSProperty_user_input:    return ParseVariant(aErrorCode, aValue, VARIANT_AHK | VARIANT_NONE,                        nsCSSProps::kUserInputKTable);  case eCSSProperty_user_modify:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                        nsCSSProps::kUserModifyKTable);  case eCSSProperty_user_select:    return ParseVariant(aErrorCode, aValue, VARIANT_HOK,                        nsCSSProps::kUserSelectKTable);  case eCSSProperty_vertical_align:    return ParseVariant(aErrorCode, aValue, VARIANT_HKLP,                        nsCSSProps::kVerticalAlignKTable);  case eCSSProperty_visibility:    return ParseVariant(aErrorCode, aValue, VARIANT_HK,                         nsCSSProps::kVisibilityKTable);  case eCSSProperty_voice_family:    return ParseFamily(aErrorCode, aValue);  case eCSSProperty_volume:    return ParseVariant(aErrorCode, aValue, VARIANT_HPN | VARIANT_KEYWORD,                        nsCSSProps::kVolumeKTable);  case eCSSProperty_white_space:    return ParseVariant(aErrorCode, aValue, VARIANT_HMK,                        nsCSSProps::kWhitespaceKTable);  case eCSSProperty_z_index:    return ParseVariant(aErrorCode, aValue, VARIANT_AHI, nsnull);  }  // explicitly do NOT have a default case to let the compiler  // help find missing properties  return PR_FALSE;}