diff --git a/lib/layout/laydom.c b/lib/layout/laydom.c index a7ce20bd0f5..e69de29bb2d 100644 --- a/lib/layout/laydom.c +++ b/lib/layout/laydom.c @@ -1,306 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -/* - * laydom.c - Parse CSS/DOM values, constructors and destructors for data storage - * - */ - - -#include "xp.h" -#include "layout.h" -#include "dom.h" -#include "laydom.h" -#include "laystyle.h" - -JSBool -lo_atoi(const char *str, uint32 *num, void *closure) -{ - *num = XP_ATOI(str); - return JS_TRUE; -} - -JSBool -lo_SSUnitsToData(const char *str, uint32 *data, void *closure) -{ - /* XXX NYI */ - *data = XP_ATOI(str); - return JS_TRUE; -} - -JSBool -FontWeightToData(const char *str, uint32 *data, void *closure) -{ - uint32 weight; - /* XXX use proper CSS-value parsing stuff */ - if (!strcasecomp(str, "bolder")) { - weight = FONT_WEIGHT_BOLDER; - } else if (!strcasecomp(str, "lighter")) { - weight = FONT_WEIGHT_LIGHTER; - } else if (!strcasecomp(str, "bold")) { - weight = 700; - } else if (!strcasecomp(str, "normal")) { - weight = 400; - } else { - weight = XP_ATOI(str); - weight -= weight % 100; - } - *data = weight; - return JS_TRUE; -} - -#define SET_ATTR_BIT_IF(style, bit) \ -if (!strcasecomp(decors, style)) \ - attrs |= bit; - -JSBool -TextDecorationToData(const char *decors, uint32 *data, void *closure) -{ - uint32 attrs = 0; - /* XXX handle multiple tokens */ - SET_ATTR_BIT_IF(BLINK_STYLE, LO_ATTR_BLINK) - else - SET_ATTR_BIT_IF(STRIKEOUT_STYLE, LO_ATTR_STRIKEOUT) - else - SET_ATTR_BIT_IF(UNDERLINE_STYLE, LO_ATTR_UNDERLINE) - else - if (!strcasecomp(decors, "none")) - attrs = 0; - - *data = attrs; - return JS_TRUE; -} - -#undef SET_ATTR_BIT_IF - -JSBool -PositionParser(const char *position, uint32 *data, void *closure) -{ - if (!XP_STRCASECMP(position, ABSOLUTE_STYLE)) - *data = 0; - else if (!XP_STRCASECMP(position, RELATIVE_STYLE)) - *data = 1; - else - *data = 2; - return JS_TRUE; -} - -JSBool -lo_ColorStringToData(const char *color, uint32 *data, void *closure) -{ - LO_Color col; - if (!LO_ParseStyleSheetRGB((char *)color, &col.red, &col.green, &col.blue)) - return JS_FALSE; - *data = *(uint32 *)&col; - return JS_TRUE; -} - -/* - * Update LO_AdjustSSUnits() in laystyle.c to deal with DOM_StyleUnits - */ - -JSBool -lo_ParseSSNum(const char *str, uint32 *num, DOM_StyleUnits *units) -{ - const char *ptr, *num_ptr; - - ptr = str; - - /* skip any whitespace */ - while(XP_IS_SPACE(*ptr)) ptr++; - - /* save a pointer to the first non white char */ - num_ptr = ptr; - - /* go past any sign in front of the number */ - if(*ptr == '-' || *ptr == '+') ptr++; - - /* go forward until a non number is encountered */ - while(XP_IS_DIGIT(*ptr)) ptr++; - - /* go past a decimal */ - if(*ptr == '.') ptr++; - - while(XP_IS_DIGIT(*ptr)) ptr++; - - /* skip any whitespace between the number and units */ - while(XP_IS_SPACE(*ptr)) ptr++; - - /* - * no need to clear out the string at the end since - * atof will do that for us, and writting to the string - * will make us crash - * - * ptr_value = *ptr; - * *ptr = '\0'; - * *ptr = ptr_value; - */ - *num = XP_ATOI(num_ptr); - - if(!XP_STRNCASECMP(ptr, "em", 2)) - *units = STYLE_UNITS_EMS; - else if(!XP_STRNCASECMP(ptr, "ex", 2)) - *units = STYLE_UNITS_EXS; - else if(!XP_STRNCASECMP(ptr, "px", 2)) - *units = STYLE_UNITS_PXS; - else if(!XP_STRNCASECMP(ptr, "pt", 2)) - *units = STYLE_UNITS_PTS; - else if(!XP_STRNCASECMP(ptr, "pc", 2)) - *units = STYLE_UNITS_PCS; - else if(!XP_STRNCASECMP(ptr, "in", 2)) - *units = STYLE_UNITS_INS; - else if(!XP_STRNCASECMP(ptr, "cm", 2)) - *units = STYLE_UNITS_CMS; - else if(!XP_STRNCASECMP(ptr, "mm", 2)) - *units = STYLE_UNITS_MMS; - else if(!XP_STRNCMP(ptr, "%", 1)) - *units = STYLE_UNITS_PERCENT; - else if(!*ptr) - *units = STYLE_UNITS_REL; - else - *units = STYLE_UNITS_PXS; - - return JS_TRUE; -} - -JSBool -lo_ParseSSNumToData(const char *str, uint32 *data, void *closure) -{ - struct SSUnitContext *argp = closure; - int32 num; - - if (!lo_ParseSSNum(str, &num, (DOM_StyleUnits *)&argp->units)) - return JS_FALSE; - - if (argp->units == STYLE_UNITS_PERCENT) { - num = argp->enclosingVal * num / 100; - } - - if (argp->axisAdjust == AXIS_X) - num = FEUNITS_X(num, argp->context); - else if (argp->axisAdjust == AXIS_Y) - num = FEUNITS_Y(num, argp->context); - - *data = num; - - return JS_TRUE; -} - -/* XXX Merge with lo_ParseSSNum */ - -JSBool -lo_ParseFontSize(const char *str, uint32 *num, DOM_StyleUnits *units) -{ - const char *ptr, *num_ptr; - double *value = XP_NEW(double); - - if (!value) - return JS_FALSE; - - ptr = str; - - /* skip any whitespace */ - while(XP_IS_SPACE(*ptr)) ptr++; - - /* save a pointer to the first non white char */ - num_ptr = ptr; - - /* go past any sign in front of the number */ - if(*ptr == '-' || *ptr == '+') ptr++; - - /* go forward until a non number is encountered */ - while(XP_IS_DIGIT(*ptr)) ptr++; - - /* go past a decimal */ - if(*ptr == '.') ptr++; - - while(XP_IS_DIGIT(*ptr)) ptr++; - - /* skip any whitespace between the number and units */ - while(XP_IS_SPACE(*ptr)) ptr++; - - /* - * no need to clear out the string at the end since - * atof will do that for us, and writting to the string - * will make us crash - * - * ptr_value = *ptr; - * *ptr = '\0'; - * *ptr = ptr_value; - */ - *value = atof(num_ptr); /* Calculate value */ - *num = (int32)value; /* Save pointer to value in data */ - - if(!XP_STRNCASECMP(ptr, "em", 2)) - *units = STYLE_UNITS_EMS; - else if(!XP_STRNCASECMP(ptr, "ex", 2)) - *units = STYLE_UNITS_EXS; - else if(!XP_STRNCASECMP(ptr, "px", 2)) - *units = STYLE_UNITS_PXS; - else if(!XP_STRNCASECMP(ptr, "pt", 2)) - *units = STYLE_UNITS_PTS; - else if(!XP_STRNCASECMP(ptr, "pc", 2)) - *units = STYLE_UNITS_PCS; - else if(!XP_STRNCASECMP(ptr, "in", 2)) - *units = STYLE_UNITS_INS; - else if(!XP_STRNCASECMP(ptr, "cm", 2)) - *units = STYLE_UNITS_CMS; - else if(!XP_STRNCASECMP(ptr, "mm", 2)) - *units = STYLE_UNITS_MMS; - else if(!XP_STRNCMP(ptr, "%", 1)) - *units = STYLE_UNITS_PERCENT; - else if(!*ptr) - *units = STYLE_UNITS_REL; - else - *units = STYLE_UNITS_PXS; - - return JS_TRUE; -} - -JSBool -lo_ParseFontSizeToData(const char *str, uint32 *data, void *closure) -{ - struct SSUnitContext *argp = closure; - int32 num; - - if (!lo_ParseFontSize(str, &num, (DOM_StyleUnits *)&argp->units)) - return JS_FALSE; - - if (argp->units == STYLE_UNITS_PERCENT) { - num = argp->enclosingVal * num / 100; - } - - if (argp->axisAdjust == AXIS_X) - num = FEUNITS_X(num, argp->context); - else if (argp->axisAdjust == AXIS_Y) - num = FEUNITS_Y(num, argp->context); - - *data = num; - - return JS_TRUE; -} - -JSBool -lo_DeleteFontSize(DOM_AttributeEntry *entry) -{ - if (!entry) - return JS_FALSE; - - XP_FREEIF((double *)entry->data); - return JS_TRUE; -} diff --git a/lib/layout/laydom.h b/lib/layout/laydom.h index 57c3fcbfd65..e69de29bb2d 100644 --- a/lib/layout/laydom.h +++ b/lib/layout/laydom.h @@ -1,82 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -/* - * Perignon: parse style information to store in the DOM. - */ - -#ifndef LAY_DOM_H -#define LAY_DOM_H - -#define AXIS_NONE 0 -#define AXIS_X 1 -#define AXIS_Y 2 - -#define FONT_WEIGHT_BOLDER 0x10000 -#define FONT_WEIGHT_LIGHTER 0x20000 - -struct SSUnitContext { - MWContext *context; - uint32 enclosingVal; - uint8 units; - uint8 axisAdjust; -}; - -typedef enum DOM_StyleUnits { - STYLE_UNITS_UNKNOWN = -1, - STYLE_UNITS_NONE, - STYLE_UNITS_PERCENT, - STYLE_UNITS_EMS, - STYLE_UNITS_EXS, - STYLE_UNITS_PTS, /* points */ - STYLE_UNITS_PXS, /* pixels */ - STYLE_UNITS_PCS, - STYLE_UNITS_REL, - STYLE_UNITS_INS, /* inches */ - STYLE_UNITS_CMS, /* centimeters */ - STYLE_UNITS_MMS, /* millimeters */ -} DOM_StyleUnits; - -extern JSBool -lo_atoi(const char *str, uint32 *num, void *closure); - -extern JSBool -lo_ColorStringToData(const char *color, uint32 *data, void *closure); - -extern JSBool -lo_SSUnitsToData(const char *units, uint32 *data, void *closure); - -extern JSBool -FontWeightToData(const char *str, uint32 *data, void *closure); - -extern JSBool -TextDecorationToData(const char *decors, uint32 *data, void *closure); - -extern JSBool -PositionParser(const char *position, uint32 *data, void *closure); - -extern JSBool -lo_ParseSSNumToData(const char *str, uint32 *data, void *closure); - -extern JSBool -lo_ParseFontSizeToData(const char *str, uint32 *data, void *closure); - -extern JSBool -lo_DeleteFontSize(DOM_AttributeEntry *entry); - -#endif /* LAY_DOM_H */