r5638 jmb - in /trunk/libcss/src/parse: css21.c css21props.c
by netsurf@semichrome.net
Author: jmb
Date: Sun Oct 26 10:36:58 2008
New Revision: 5638
URL: http://source.netsurf-browser.org?rev=5638&view=rev
Log:
direction
display
Modified:
trunk/libcss/src/parse/css21.c
trunk/libcss/src/parse/css21props.c
Modified: trunk/libcss/src/parse/css21.c
URL: http://source.netsurf-browser.org/trunk/libcss/src/parse/css21.c?rev=5638...
==============================================================================
--- trunk/libcss/src/parse/css21.c (original)
+++ trunk/libcss/src/parse/css21.c Sun Oct 26 10:36:58 2008
@@ -53,7 +53,10 @@
INHERIT, IMPORTANT, NONE, BOTH, FIXED, SCROLL, TRANSPARENT,
NO_REPEAT, REPEAT_X, REPEAT_Y, REPEAT, HIDDEN, DOTTED, DASHED,
SOLID, DOUBLE, GROOVE, RIDGE, INSET, OUTSET, THIN, MEDIUM, THICK,
- COLLAPSE, SEPARATE, AUTO,
+ COLLAPSE, SEPARATE, AUTO, LTR, RTL, INLINE, BLOCK, LIST_ITEM, RUN_IN,
+ INLINE_BLOCK, TABLE, INLINE_TABLE, TABLE_ROW_GROUP, TABLE_HEADER_GROUP,
+ TABLE_FOOTER_GROUP, TABLE_ROW, TABLE_COLUMN_GROUP, TABLE_COLUMN,
+ TABLE_CELL, TABLE_CAPTION,
LAST_KNOWN
};
@@ -194,6 +197,23 @@
{ "collapse", SLEN("collapse") },
{ "separate", SLEN("separate") },
{ "auto", SLEN("auto") },
+ { "ltr", SLEN("ltr") },
+ { "rtl", SLEN("rtl") },
+ { "inline", SLEN("inline") },
+ { "block", SLEN("block") },
+ { "list-item", SLEN("list-item") },
+ { "run-in", SLEN("run-in") },
+ { "inline-block", SLEN("inline-block") },
+ { "table", SLEN("table") },
+ { "inline-table", SLEN("inline-table") },
+ { "table-row-group", SLEN("table-row-group") },
+ { "table-header-group", SLEN("table-header-group") },
+ { "table-footer-group", SLEN("table-footer-group") },
+ { "table-row", SLEN("table-row") },
+ { "table-column-group", SLEN("table-column-group") },
+ { "table-column", SLEN("table-column") },
+ { "table-cell", SLEN("table-cell") },
+ { "table-caption", SLEN("table-caption") },
};
typedef struct context_entry {
Modified: trunk/libcss/src/parse/css21props.c
URL: http://source.netsurf-browser.org/trunk/libcss/src/parse/css21props.c?rev...
==============================================================================
--- trunk/libcss/src/parse/css21props.c (original)
+++ trunk/libcss/src/parse/css21props.c Sun Oct 26 10:36:58 2008
@@ -1178,6 +1178,7 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
+ /** \todo cursor */
UNUSED(c);
UNUSED(vector);
UNUSED(ctx);
@@ -1190,10 +1191,39 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
+ css_error error;
+ const css_token *ident;
+ uint8_t flags = 0;
+ uint16_t value = 0;
+ uint32_t opv;
+
+ /* IDENT (ltr, rtl, inherit) */
+ ident = parserutils_vector_iterate(vector, ctx);
+ if (ident == NULL || ident->type != CSS_TOKEN_IDENT)
+ return CSS_INVALID;
+
+ error = parse_important(c, vector, ctx, &flags);
+ if (error != CSS_OK)
+ return error;
+
+ if (ident->lower.ptr == c->strings[INHERIT]) {
+ flags |= FLAG_INHERIT;
+ } else if (ident->lower.ptr == c->strings[LTR]) {
+ value = DIRECTION_LTR;
+ } else if (ident->lower.ptr == c->strings[RTL]) {
+ value = DIRECTION_RTL;
+ } else
+ return CSS_INVALID;
+
+ opv = buildOPV(OP_DIRECTION, flags, value);
+
+ /* Allocate result */
+ *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
+ if (*result == NULL)
+ return CSS_NOMEM;
+
+ /* Copy the bytecode to it */
+ memcpy((*result)->bytecode, &opv, sizeof(opv));
return CSS_OK;
}
@@ -1202,10 +1232,70 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
+ css_error error;
+ const css_token *ident;
+ uint8_t flags = 0;
+ uint16_t value = 0;
+ uint32_t opv;
+
+ /* IDENT (inline, block, list-item, run-in, inline-block, table,
+ * inline-table, table-row-group, table-header-group,
+ * table-footer-group, table-row, table-column-group, table-column,
+ * table-cell, table-caption, none, inherit) */
+ ident = parserutils_vector_iterate(vector, ctx);
+ if (ident == NULL || ident->type != CSS_TOKEN_IDENT)
+ return CSS_INVALID;
+
+ error = parse_important(c, vector, ctx, &flags);
+ if (error != CSS_OK)
+ return error;
+
+ if (ident->lower.ptr == c->strings[INHERIT]) {
+ flags |= FLAG_INHERIT;
+ } else if (ident->lower.ptr == c->strings[INLINE]) {
+ value = DISPLAY_INLINE;
+ } else if (ident->lower.ptr == c->strings[BLOCK]) {
+ value = DISPLAY_BLOCK;
+ } else if (ident->lower.ptr == c->strings[LIST_ITEM]) {
+ value = DISPLAY_LIST_ITEM;
+ } else if (ident->lower.ptr == c->strings[RUN_IN]) {
+ value = DISPLAY_RUN_IN;
+ } else if (ident->lower.ptr == c->strings[INLINE_BLOCK]) {
+ value = DISPLAY_INLINE_BLOCK;
+ } else if (ident->lower.ptr == c->strings[TABLE]) {
+ value = DISPLAY_TABLE;
+ } else if (ident->lower.ptr == c->strings[INLINE_TABLE]) {
+ value = DISPLAY_INLINE_TABLE;
+ } else if (ident->lower.ptr == c->strings[TABLE_ROW_GROUP]) {
+ value = DISPLAY_TABLE_ROW_GROUP;
+ } else if (ident->lower.ptr == c->strings[TABLE_HEADER_GROUP]) {
+ value = DISPLAY_TABLE_HEADER_GROUP;
+ } else if (ident->lower.ptr == c->strings[TABLE_FOOTER_GROUP]) {
+ value = DISPLAY_TABLE_FOOTER_GROUP;
+ } else if (ident->lower.ptr == c->strings[TABLE_ROW]) {
+ value = DISPLAY_TABLE_ROW;
+ } else if (ident->lower.ptr == c->strings[TABLE_COLUMN_GROUP]) {
+ value = DISPLAY_TABLE_COLUMN_GROUP;
+ } else if (ident->lower.ptr == c->strings[TABLE_COLUMN]) {
+ value = DISPLAY_TABLE_COLUMN;
+ } else if (ident->lower.ptr == c->strings[TABLE_CELL]) {
+ value = DISPLAY_TABLE_CELL;
+ } else if (ident->lower.ptr == c->strings[TABLE_CAPTION]) {
+ value = DISPLAY_TABLE_CAPTION;
+ } else if (ident->lower.ptr == c->strings[NONE]) {
+ value = DISPLAY_NONE;
+ } else
+ return CSS_INVALID;
+
+ opv = buildOPV(OP_DISPLAY, flags, value);
+
+ /* Allocate result */
+ *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
+ if (*result == NULL)
+ return CSS_NOMEM;
+
+ /* Copy the bytecode to it */
+ memcpy((*result)->bytecode, &opv, sizeof(opv));
return CSS_OK;
}
14 years, 3 months
r5637 jmb - /trunk/libcss/src/parse/css21props.c
by netsurf@semichrome.net
Author: jmb
Date: Sun Oct 26 10:22:27 2008
New Revision: 5637
URL: http://source.netsurf-browser.org?rev=5637&view=rev
Log:
cue-{after,before}
Modified:
trunk/libcss/src/parse/css21props.c
Modified: trunk/libcss/src/parse/css21props.c
URL: http://source.netsurf-browser.org/trunk/libcss/src/parse/css21props.c?rev...
==============================================================================
--- trunk/libcss/src/parse/css21props.c (original)
+++ trunk/libcss/src/parse/css21props.c Sun Oct 26 10:22:27 2008
@@ -1027,6 +1027,7 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
+ /** \todo content */
UNUSED(c);
UNUSED(vector);
UNUSED(ctx);
@@ -1039,6 +1040,7 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
+ /** \todo counter-increment */
UNUSED(c);
UNUSED(vector);
UNUSED(ctx);
@@ -1051,6 +1053,7 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
+ /** \todo counter-reset */
UNUSED(c);
UNUSED(vector);
UNUSED(ctx);
@@ -1063,10 +1066,54 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
+ css_error error;
+ const css_token *token;
+ uint8_t flags = 0;
+ uint16_t value = 0;
+ uint32_t opv;
+ uint32_t required_size;
+
+ /* URI | IDENT (none, inherit) */
+ token = parserutils_vector_iterate(vector, ctx);
+ if (token == NULL || (token->type != CSS_TOKEN_IDENT &&
+ token->type != CSS_TOKEN_URI))
+ return CSS_INVALID;
+
+ error = parse_important(c, vector, ctx, &flags);
+ if (error != CSS_OK)
+ return error;
+
+ if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[INHERIT]) {
+ flags |= FLAG_INHERIT;
+ } else if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[NONE]) {
+ value = CUE_AFTER_NONE;
+ } else if (token->type == CSS_TOKEN_URI) {
+ value = CUE_AFTER_URI;
+ } else
+ return CSS_INVALID;
+
+ opv = buildOPV(OP_CUE_AFTER, flags, value);
+
+ required_size = sizeof(opv);
+ if (value == CUE_AFTER_URI)
+ required_size += sizeof(uint8_t *) + sizeof(size_t);
+
+ /* Allocate result */
+ *result = css_stylesheet_style_create(c->sheet, required_size);
+ if (*result == NULL)
+ return CSS_NOMEM;
+
+ /* Copy the bytecode to it */
+ memcpy((*result)->bytecode, &opv, sizeof(opv));
+ if (value == CUE_AFTER_URI) {
+ memcpy((uint8_t *) (*result)->bytecode + sizeof(opv),
+ &token->data.ptr, sizeof(uint8_t *));
+ memcpy((uint8_t *) (*result)->bytecode + sizeof(opv) +
+ sizeof(uint8_t *),
+ &token->data.len, sizeof(size_t));
+ }
return CSS_OK;
}
@@ -1075,10 +1122,54 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
+ css_error error;
+ const css_token *token;
+ uint8_t flags = 0;
+ uint16_t value = 0;
+ uint32_t opv;
+ uint32_t required_size;
+
+ /* URI | IDENT (none, inherit) */
+ token = parserutils_vector_iterate(vector, ctx);
+ if (token == NULL || (token->type != CSS_TOKEN_IDENT &&
+ token->type != CSS_TOKEN_URI))
+ return CSS_INVALID;
+
+ error = parse_important(c, vector, ctx, &flags);
+ if (error != CSS_OK)
+ return error;
+
+ if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[INHERIT]) {
+ flags |= FLAG_INHERIT;
+ } else if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[NONE]) {
+ value = CUE_BEFORE_NONE;
+ } else if (token->type == CSS_TOKEN_URI) {
+ value = CUE_BEFORE_URI;
+ } else
+ return CSS_INVALID;
+
+ opv = buildOPV(OP_CUE_BEFORE, flags, value);
+
+ required_size = sizeof(opv);
+ if (value == CUE_BEFORE_URI)
+ required_size += sizeof(uint8_t *) + sizeof(size_t);
+
+ /* Allocate result */
+ *result = css_stylesheet_style_create(c->sheet, required_size);
+ if (*result == NULL)
+ return CSS_NOMEM;
+
+ /* Copy the bytecode to it */
+ memcpy((*result)->bytecode, &opv, sizeof(opv));
+ if (value == CUE_BEFORE_URI) {
+ memcpy((uint8_t *) (*result)->bytecode + sizeof(opv),
+ &token->data.ptr, sizeof(uint8_t *));
+ memcpy((uint8_t *) (*result)->bytecode + sizeof(opv) +
+ sizeof(uint8_t *),
+ &token->data.len, sizeof(size_t));
+ }
return CSS_OK;
}
14 years, 3 months
r5636 jmb - /trunk/libcss/src/parse/css21props.c
by netsurf@semichrome.net
Author: jmb
Date: Sun Oct 26 10:18:34 2008
New Revision: 5636
URL: http://source.netsurf-browser.org?rev=5636&view=rev
Log:
color
Modified:
trunk/libcss/src/parse/css21props.c
Modified: trunk/libcss/src/parse/css21props.c
URL: http://source.netsurf-browser.org/trunk/libcss/src/parse/css21props.c?rev...
==============================================================================
--- trunk/libcss/src/parse/css21props.c (original)
+++ trunk/libcss/src/parse/css21props.c Sun Oct 26 10:18:34 2008
@@ -960,6 +960,7 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
+ /** \todo clip */
UNUSED(c);
UNUSED(vector);
UNUSED(ctx);
@@ -972,10 +973,52 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
+ css_error error;
+ const css_token *token;
+ uint8_t flags = 0;
+ uint16_t value = 0;
+ uint32_t opv;
+ uint32_t colour = 0;
+ uint32_t required_size;
+
+ /* colour | IDENT (inherit) */
+ token= parserutils_vector_peek(vector, *ctx);
+ if (token == NULL)
+ return CSS_INVALID;
+
+ if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[INHERIT]) {
+ parserutils_vector_iterate(vector, ctx);
+ flags |= FLAG_INHERIT;
+ } else {
+ error = parse_colour_specifier(c, vector, ctx, &colour);
+ if (error != CSS_OK)
+ return error;
+
+ value = COLOR_SET;
+ }
+
+ error = parse_important(c, vector, ctx, &flags);
+ if (error != CSS_OK)
+ return error;
+
+ opv = buildOPV(OP_COLOR, flags, value);
+
+ required_size = sizeof(opv);
+ if (value == COLOR_SET)
+ required_size += sizeof(colour);
+
+ /* Allocate result */
+ *result = css_stylesheet_style_create(c->sheet, required_size);
+ if (*result == NULL)
+ return CSS_NOMEM;
+
+ /* Copy the bytecode to it */
+ memcpy((*result)->bytecode, &opv, sizeof(opv));
+ if (value == COLOR_SET) {
+ memcpy(((uint8_t *) (*result)->bytecode) + sizeof(opv),
+ &colour, sizeof(colour));
+ }
return CSS_OK;
}
14 years, 3 months
r5635 jmb - /trunk/libcss/src/parse/css21props.c
by netsurf@semichrome.net
Author: jmb
Date: Sun Oct 26 10:15:34 2008
New Revision: 5635
URL: http://source.netsurf-browser.org?rev=5635&view=rev
Log:
caption-side
Modified:
trunk/libcss/src/parse/css21props.c
Modified: trunk/libcss/src/parse/css21props.c
URL: http://source.netsurf-browser.org/trunk/libcss/src/parse/css21props.c?rev...
==============================================================================
--- trunk/libcss/src/parse/css21props.c (original)
+++ trunk/libcss/src/parse/css21props.c Sun Oct 26 10:15:34 2008
@@ -874,10 +874,39 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
+ css_error error;
+ const css_token *ident;
+ uint8_t flags = 0;
+ uint16_t value = 0;
+ uint32_t opv;
+
+ /* IDENT (top, bottom, inherit) */
+ ident = parserutils_vector_iterate(vector, ctx);
+ if (ident == NULL || ident->type != CSS_TOKEN_IDENT)
+ return CSS_INVALID;
+
+ error = parse_important(c, vector, ctx, &flags);
+ if (error != CSS_OK)
+ return error;
+
+ if (ident->lower.ptr == c->strings[INHERIT]) {
+ flags |= FLAG_INHERIT;
+ } else if (ident->lower.ptr == c->strings[TOP]) {
+ value = CAPTION_SIDE_TOP;
+ } else if (ident->lower.ptr == c->strings[BOTTOM]) {
+ value = CAPTION_SIDE_BOTTOM;
+ } else
+ return CSS_INVALID;
+
+ opv = buildOPV(OP_CAPTION_SIDE, flags, value);
+
+ /* Allocate result */
+ *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
+ if (*result == NULL)
+ return CSS_NOMEM;
+
+ /* Copy the bytecode to it */
+ memcpy((*result)->bytecode, &opv, sizeof(opv));
return CSS_OK;
}
14 years, 3 months
r5634 jmb - in /trunk/libcss/src: bytecode/bytecode.h parse/css21.c parse/css21props.c
by netsurf@semichrome.net
Author: jmb
Date: Sun Oct 26 10:12:01 2008
New Revision: 5634
URL: http://source.netsurf-browser.org?rev=5634&view=rev
Log:
border-collapse
{top,right,bottom,left}
s/parse_length_specifier/parse_unit_specifier/g
Fix error propagation in some cases.
Modified:
trunk/libcss/src/bytecode/bytecode.h
trunk/libcss/src/parse/css21.c
trunk/libcss/src/parse/css21props.c
Modified: trunk/libcss/src/bytecode/bytecode.h
URL: http://source.netsurf-browser.org/trunk/libcss/src/bytecode/bytecode.h?re...
==============================================================================
--- trunk/libcss/src/bytecode/bytecode.h (original)
+++ trunk/libcss/src/bytecode/bytecode.h Sun Oct 26 10:12:01 2008
@@ -117,13 +117,16 @@
UNIT_PCT = (1 << 8),
+ UNIT_ANGLE = (1 << 9),
UNIT_DEG = (1 << 9) + 0,
UNIT_GRAD = (1 << 9) + 1,
UNIT_RAD = (1 << 9) + 2,
+ UNIT_TIME = (1 << 10),
UNIT_MS = (1 << 10) + 0,
UNIT_S = (1 << 10) + 1,
+ UNIT_FREQ = (1 << 11),
UNIT_HZ = (1 << 11) + 0,
UNIT_KHZ = (1 << 11) + 1
} unit;
Modified: trunk/libcss/src/parse/css21.c
URL: http://source.netsurf-browser.org/trunk/libcss/src/parse/css21.c?rev=5634...
==============================================================================
--- trunk/libcss/src/parse/css21.c (original)
+++ trunk/libcss/src/parse/css21.c Sun Oct 26 10:12:01 2008
@@ -53,6 +53,7 @@
INHERIT, IMPORTANT, NONE, BOTH, FIXED, SCROLL, TRANSPARENT,
NO_REPEAT, REPEAT_X, REPEAT_Y, REPEAT, HIDDEN, DOTTED, DASHED,
SOLID, DOUBLE, GROOVE, RIDGE, INSET, OUTSET, THIN, MEDIUM, THICK,
+ COLLAPSE, SEPARATE, AUTO,
LAST_KNOWN
};
@@ -190,6 +191,9 @@
{ "thin", SLEN("thin") },
{ "medium", SLEN("medium") },
{ "thick", SLEN("thick") },
+ { "collapse", SLEN("collapse") },
+ { "separate", SLEN("separate") },
+ { "auto", SLEN("auto") },
};
typedef struct context_entry {
Modified: trunk/libcss/src/parse/css21props.c
URL: http://source.netsurf-browser.org/trunk/libcss/src/parse/css21props.c?rev...
==============================================================================
--- trunk/libcss/src/parse/css21props.c (original)
+++ trunk/libcss/src/parse/css21props.c Sun Oct 26 10:12:01 2008
@@ -315,7 +315,7 @@
static inline css_error parse_colour_specifier(css_css21 *c,
const parserutils_vector *vector, int *ctx,
uint32_t *result);
-static inline css_error parse_length_specifier(css_css21 *c,
+static inline css_error parse_unit_specifier(css_css21 *c,
const parserutils_vector *vector, int *ctx,
uint32_t *length, uint32_t *unit);
@@ -524,7 +524,7 @@
} else {
error = parse_colour_specifier(c, vector, ctx, &colour);
if (error != CSS_OK)
- return CSS_INVALID;
+ return error;
value = BACKGROUND_COLOR_SET;
}
@@ -693,10 +693,39 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
+ css_error error;
+ const css_token *ident;
+ uint8_t flags = 0;
+ uint16_t value = 0;
+ uint32_t opv;
+
+ /* IDENT (collapse, separate, inherit) */
+ ident = parserutils_vector_iterate(vector, ctx);
+ if (ident == NULL || ident->type != CSS_TOKEN_IDENT)
+ return CSS_INVALID;
+
+ error = parse_important(c, vector, ctx, &flags);
+ if (error != CSS_OK)
+ return error;
+
+ if (ident->lower.ptr == c->strings[INHERIT]) {
+ flags |= FLAG_INHERIT;
+ } else if (ident->lower.ptr == c->strings[COLLAPSE]) {
+ value = BORDER_COLLAPSE_COLLAPSE;
+ } else if (ident->lower.ptr == c->strings[SEPARATE]) {
+ value = BORDER_COLLAPSE_SEPARATE;
+ } else
+ return CSS_INVALID;
+
+ opv = buildOPV(OP_BORDER_COLLAPSE, flags, value);
+
+ /* Allocate result */
+ *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
+ if (*result == NULL)
+ return CSS_NOMEM;
+
+ /* Copy the bytecode to it */
+ memcpy((*result)->bytecode, &opv, sizeof(opv));
return CSS_OK;
}
@@ -747,6 +776,7 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
+ /** \todo border-spacing */
UNUSED(c);
UNUSED(vector);
UNUSED(ctx);
@@ -780,10 +810,62 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
+ css_error error;
+ const css_token *token;
+ uint8_t flags = 0;
+ uint16_t value = 0;
+ uint32_t opv;
+ uint32_t length = 0;
+ uint32_t unit = 0;
+ uint32_t required_size;
+
+ /* length | percentage | IDENT(auto, inherit) */
+ token = parserutils_vector_peek(vector, *ctx);
+ if (token == NULL)
+ return CSS_INVALID;
+
+ if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[INHERIT]) {
+ parserutils_vector_iterate(vector, ctx);
+ flags = FLAG_INHERIT;
+ } else if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[AUTO]) {
+ parserutils_vector_iterate(vector, ctx);
+ value = BOTTOM_AUTO;
+ } else {
+ error = parse_unit_specifier(c, vector, ctx, &length, &unit);
+ if (error != CSS_OK)
+ return error;
+
+ if (unit & UNIT_ANGLE || unit & UNIT_TIME || unit & UNIT_FREQ)
+ return CSS_INVALID;
+
+ value = BOTTOM_SET;
+ }
+
+ error = parse_important(c, vector, ctx, &flags);
+ if (error != CSS_OK)
+ return error;
+
+ opv = buildOPV(OP_BOTTOM, flags, value);
+
+ required_size = sizeof(opv);
+ if (value == BOTTOM_SET)
+ required_size += sizeof(length) + sizeof(unit);
+
+ /* Allocate result */
+ *result = css_stylesheet_style_create(c->sheet, required_size);
+ if (*result == NULL)
+ return CSS_NOMEM;
+
+ /* Copy the bytecode to it */
+ memcpy((*result)->bytecode, &opv, sizeof(opv));
+ if (value == BOTTOM_SET) {
+ memcpy(((uint8_t *) (*result)->bytecode) + sizeof(opv),
+ &length, sizeof(length));
+ memcpy(((uint8_t *) (*result)->bytecode) + sizeof(opv) +
+ sizeof(length), &unit, sizeof(unit));
+ }
return CSS_OK;
}
@@ -1077,10 +1159,62 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
+ css_error error;
+ const css_token *token;
+ uint8_t flags = 0;
+ uint16_t value = 0;
+ uint32_t opv;
+ uint32_t length = 0;
+ uint32_t unit = 0;
+ uint32_t required_size;
+
+ /* length | percentage | IDENT(auto, inherit) */
+ token = parserutils_vector_peek(vector, *ctx);
+ if (token == NULL)
+ return CSS_INVALID;
+
+ if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[INHERIT]) {
+ parserutils_vector_iterate(vector, ctx);
+ flags = FLAG_INHERIT;
+ } else if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[AUTO]) {
+ parserutils_vector_iterate(vector, ctx);
+ value = LEFT_AUTO;
+ } else {
+ error = parse_unit_specifier(c, vector, ctx, &length, &unit);
+ if (error != CSS_OK)
+ return error;
+
+ if (unit & UNIT_ANGLE || unit & UNIT_TIME || unit & UNIT_FREQ)
+ return CSS_INVALID;
+
+ value = LEFT_SET;
+ }
+
+ error = parse_important(c, vector, ctx, &flags);
+ if (error != CSS_OK)
+ return error;
+
+ opv = buildOPV(OP_LEFT, flags, value);
+
+ required_size = sizeof(opv);
+ if (value == LEFT_SET)
+ required_size += sizeof(length) + sizeof(unit);
+
+ /* Allocate result */
+ *result = css_stylesheet_style_create(c->sheet, required_size);
+ if (*result == NULL)
+ return CSS_NOMEM;
+
+ /* Copy the bytecode to it */
+ memcpy((*result)->bytecode, &opv, sizeof(opv));
+ if (value == LEFT_SET) {
+ memcpy(((uint8_t *) (*result)->bytecode) + sizeof(opv),
+ &length, sizeof(length));
+ memcpy(((uint8_t *) (*result)->bytecode) + sizeof(opv) +
+ sizeof(length), &unit, sizeof(unit));
+ }
return CSS_OK;
}
@@ -1485,10 +1619,62 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
+ css_error error;
+ const css_token *token;
+ uint8_t flags = 0;
+ uint16_t value = 0;
+ uint32_t opv;
+ uint32_t length = 0;
+ uint32_t unit = 0;
+ uint32_t required_size;
+
+ /* length | percentage | IDENT(auto, inherit) */
+ token = parserutils_vector_peek(vector, *ctx);
+ if (token == NULL)
+ return CSS_INVALID;
+
+ if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[INHERIT]) {
+ parserutils_vector_iterate(vector, ctx);
+ flags = FLAG_INHERIT;
+ } else if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[AUTO]) {
+ parserutils_vector_iterate(vector, ctx);
+ value = RIGHT_AUTO;
+ } else {
+ error = parse_unit_specifier(c, vector, ctx, &length, &unit);
+ if (error != CSS_OK)
+ return error;
+
+ if (unit & UNIT_ANGLE || unit & UNIT_TIME || unit & UNIT_FREQ)
+ return CSS_INVALID;
+
+ value = RIGHT_SET;
+ }
+
+ error = parse_important(c, vector, ctx, &flags);
+ if (error != CSS_OK)
+ return error;
+
+ opv = buildOPV(OP_RIGHT, flags, value);
+
+ required_size = sizeof(opv);
+ if (value == RIGHT_SET)
+ required_size += sizeof(length) + sizeof(unit);
+
+ /* Allocate result */
+ *result = css_stylesheet_style_create(c->sheet, required_size);
+ if (*result == NULL)
+ return CSS_NOMEM;
+
+ /* Copy the bytecode to it */
+ memcpy((*result)->bytecode, &opv, sizeof(opv));
+ if (value == RIGHT_SET) {
+ memcpy(((uint8_t *) (*result)->bytecode) + sizeof(opv),
+ &length, sizeof(length));
+ memcpy(((uint8_t *) (*result)->bytecode) + sizeof(opv) +
+ sizeof(length), &unit, sizeof(unit));
+ }
return CSS_OK;
}
@@ -1629,10 +1815,62 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
+ css_error error;
+ const css_token *token;
+ uint8_t flags = 0;
+ uint16_t value = 0;
+ uint32_t opv;
+ uint32_t length = 0;
+ uint32_t unit = 0;
+ uint32_t required_size;
+
+ /* length | percentage | IDENT(auto, inherit) */
+ token = parserutils_vector_peek(vector, *ctx);
+ if (token == NULL)
+ return CSS_INVALID;
+
+ if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[INHERIT]) {
+ parserutils_vector_iterate(vector, ctx);
+ flags = FLAG_INHERIT;
+ } else if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[AUTO]) {
+ parserutils_vector_iterate(vector, ctx);
+ value = TOP_AUTO;
+ } else {
+ error = parse_unit_specifier(c, vector, ctx, &length, &unit);
+ if (error != CSS_OK)
+ return error;
+
+ if (unit & UNIT_ANGLE || unit & UNIT_TIME || unit & UNIT_FREQ)
+ return CSS_INVALID;
+
+ value = TOP_SET;
+ }
+
+ error = parse_important(c, vector, ctx, &flags);
+ if (error != CSS_OK)
+ return error;
+
+ opv = buildOPV(OP_TOP, flags, value);
+
+ required_size = sizeof(opv);
+ if (value == TOP_SET)
+ required_size += sizeof(length) + sizeof(unit);
+
+ /* Allocate result */
+ *result = css_stylesheet_style_create(c->sheet, required_size);
+ if (*result == NULL)
+ return CSS_NOMEM;
+
+ /* Copy the bytecode to it */
+ memcpy((*result)->bytecode, &opv, sizeof(opv));
+ if (value == TOP_SET) {
+ memcpy(((uint8_t *) (*result)->bytecode) + sizeof(opv),
+ &length, sizeof(length));
+ memcpy(((uint8_t *) (*result)->bytecode) + sizeof(opv) +
+ sizeof(length), &unit, sizeof(unit));
+ }
return CSS_OK;
}
@@ -1801,7 +2039,7 @@
return CSS_OK;
}
-css_error parse_length_specifier(css_css21 *c,
+css_error parse_unit_specifier(css_css21 *c,
const parserutils_vector *vector, int *ctx,
uint32_t *length, uint32_t *unit)
{
@@ -1811,7 +2049,7 @@
UNUSED(length);
UNUSED(unit);
- /** \todo Parse lengths */
+ /** \todo Parse units */
/* For now, consume everything up to the end of the declaration or !,
* whichever comes first */
@@ -1850,7 +2088,7 @@
} else {
error = parse_colour_specifier(c, vector, ctx, &colour);
if (error != CSS_OK)
- return CSS_INVALID;
+ return error;
value = BORDER_COLOR_SET;
}
@@ -1977,8 +2215,12 @@
parserutils_vector_iterate(vector, ctx);
value = BORDER_WIDTH_THICK;
} else {
- error = parse_length_specifier(c, vector, ctx, &length, &unit);
+ error = parse_unit_specifier(c, vector, ctx, &length, &unit);
if (error != CSS_OK)
+ return error;
+
+ if (unit == UNIT_PCT || unit & UNIT_ANGLE ||
+ unit & UNIT_TIME || unit & UNIT_FREQ)
return CSS_INVALID;
value = BORDER_WIDTH_SET;
14 years, 3 months
r5633 jmb - in /trunk/libcss/src/parse: css21.c css21props.c
by netsurf@semichrome.net
Author: jmb
Date: Sun Oct 26 09:44:32 2008
New Revision: 5633
URL: http://source.netsurf-browser.org?rev=5633&view=rev
Log:
border-{top,right,bottom,left}-{style,width}
Modified:
trunk/libcss/src/parse/css21.c
trunk/libcss/src/parse/css21props.c
Modified: trunk/libcss/src/parse/css21.c
URL: http://source.netsurf-browser.org/trunk/libcss/src/parse/css21.c?rev=5633...
==============================================================================
--- trunk/libcss/src/parse/css21.c (original)
+++ trunk/libcss/src/parse/css21.c Sun Oct 26 09:44:32 2008
@@ -51,7 +51,8 @@
/* Other keywords */
INHERIT, IMPORTANT, NONE, BOTH, FIXED, SCROLL, TRANSPARENT,
- NO_REPEAT, REPEAT_X, REPEAT_Y, REPEAT,
+ NO_REPEAT, REPEAT_X, REPEAT_Y, REPEAT, HIDDEN, DOTTED, DASHED,
+ SOLID, DOUBLE, GROOVE, RIDGE, INSET, OUTSET, THIN, MEDIUM, THICK,
LAST_KNOWN
};
@@ -177,6 +178,18 @@
{ "repeat-x", SLEN("repeat-x") },
{ "repeat-y", SLEN("repeat-y") },
{ "repeat", SLEN("repeat") },
+ { "hidden", SLEN("hidden") },
+ { "dotted", SLEN("dotted") },
+ { "dashed", SLEN("dashed") },
+ { "solid", SLEN("solid") },
+ { "double", SLEN("double") },
+ { "groove", SLEN("groove") },
+ { "ridge", SLEN("ridge") },
+ { "inset", SLEN("inset") },
+ { "outset", SLEN("outset") },
+ { "thin", SLEN("thin") },
+ { "medium", SLEN("medium") },
+ { "thick", SLEN("thick") },
};
typedef struct context_entry {
Modified: trunk/libcss/src/parse/css21props.c
URL: http://source.netsurf-browser.org/trunk/libcss/src/parse/css21props.c?rev...
==============================================================================
--- trunk/libcss/src/parse/css21props.c (original)
+++ trunk/libcss/src/parse/css21props.c Sun Oct 26 09:44:32 2008
@@ -315,7 +315,17 @@
static inline css_error parse_colour_specifier(css_css21 *c,
const parserutils_vector *vector, int *ctx,
uint32_t *result);
+static inline css_error parse_length_specifier(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ uint32_t *length, uint32_t *unit);
+
static inline css_error parse_border_side_color(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ uint16_t side, css_style **result);
+static inline css_error parse_border_side_style(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ uint16_t side, css_style **result);
+static inline css_error parse_border_side_width(css_css21 *c,
const parserutils_vector *vector, int *ctx,
uint16_t side, css_style **result);
@@ -669,24 +679,14 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
-
- return CSS_OK;
+ return parse_border_side_style(c, vector, ctx, SIDE_BOTTOM, result);
}
css_error parse_border_bottom_width(css_css21 *c,
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
-
- return CSS_OK;
+ return parse_border_side_width(c, vector, ctx, SIDE_BOTTOM, result);
}
css_error parse_border_collapse(css_css21 *c,
@@ -712,24 +712,14 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
-
- return CSS_OK;
+ return parse_border_side_style(c, vector, ctx, SIDE_LEFT, result);
}
css_error parse_border_left_width(css_css21 *c,
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
-
- return CSS_OK;
+ return parse_border_side_width(c, vector, ctx, SIDE_LEFT, result);
}
css_error parse_border_right_color(css_css21 *c,
@@ -743,24 +733,14 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
-
- return CSS_OK;
+ return parse_border_side_style(c, vector, ctx, SIDE_RIGHT, result);
}
css_error parse_border_right_width(css_css21 *c,
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
-
- return CSS_OK;
+ return parse_border_side_width(c, vector, ctx, SIDE_RIGHT, result);
}
css_error parse_border_spacing(css_css21 *c,
@@ -786,24 +766,14 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
-
- return CSS_OK;
+ return parse_border_side_style(c, vector, ctx, SIDE_TOP, result);
}
css_error parse_border_top_width(css_css21 *c,
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
-
- return CSS_OK;
+ return parse_border_side_width(c, vector, ctx, SIDE_TOP, result);
}
css_error parse_bottom(css_css21 *c,
@@ -1831,6 +1801,27 @@
return CSS_OK;
}
+css_error parse_length_specifier(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ uint32_t *length, uint32_t *unit)
+{
+ const css_token *token;
+
+ UNUSED(c);
+ UNUSED(length);
+ UNUSED(unit);
+
+ /** \todo Parse lengths */
+
+ /* For now, consume everything up to the end of the declaration or !,
+ * whichever comes first */
+ while ((token = parserutils_vector_peek(vector, *ctx)) != NULL &&
+ tokenIsChar(token, '!') == false)
+ parserutils_vector_iterate(vector, ctx);
+
+ return CSS_OK;
+}
+
css_error parse_border_side_color(css_css21 *c,
const parserutils_vector *vector, int *ctx,
uint16_t side, css_style **result)
@@ -1891,4 +1882,136 @@
return CSS_OK;
}
+css_error parse_border_side_style(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ uint16_t side, css_style **result)
+{
+ css_error error;
+ const css_token *ident;
+ uint8_t flags = 0;
+ uint16_t value = 0;
+ uint32_t opv;
+
+ /* IDENT (none, hidden, dotted, dashed, solid, double, groove,
+ * ridge, inset, outset, inherit) */
+ ident = parserutils_vector_iterate(vector, ctx);
+ if (ident == NULL || ident->type != CSS_TOKEN_IDENT)
+ return CSS_INVALID;
+
+ error = parse_important(c, vector, ctx, &flags);
+ if (error != CSS_OK)
+ return error;
+
+ if (ident->lower.ptr == c->strings[INHERIT]) {
+ flags |= FLAG_INHERIT;
+ } else if (ident->lower.ptr == c->strings[NONE]) {
+ value = BORDER_STYLE_NONE;
+ } else if (ident->lower.ptr == c->strings[HIDDEN]) {
+ value = BORDER_STYLE_HIDDEN;
+ } else if (ident->lower.ptr == c->strings[DOTTED]) {
+ value = BORDER_STYLE_DOTTED;
+ } else if (ident->lower.ptr == c->strings[DASHED]) {
+ value = BORDER_STYLE_DASHED;
+ } else if (ident->lower.ptr == c->strings[SOLID]) {
+ value = BORDER_STYLE_SOLID;
+ } else if (ident->lower.ptr == c->strings[DOUBLE]) {
+ value = BORDER_STYLE_DOUBLE;
+ } else if (ident->lower.ptr == c->strings[GROOVE]) {
+ value = BORDER_STYLE_GROOVE;
+ } else if (ident->lower.ptr == c->strings[RIDGE]) {
+ value = BORDER_STYLE_RIDGE;
+ } else if (ident->lower.ptr == c->strings[INSET]) {
+ value = BORDER_STYLE_INSET;
+ } else if (ident->lower.ptr == c->strings[OUTSET]) {
+ value = BORDER_STYLE_OUTSET;
+ } else
+ return CSS_INVALID;
+
+ value |= side;
+
+ opv = buildOPV(OP_BORDER_TRBL_STYLE, flags, value);
+
+ /* Allocate result */
+ *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
+ if (*result == NULL)
+ return CSS_NOMEM;
+
+ /* Copy the bytecode to it */
+ memcpy((*result)->bytecode, &opv, sizeof(opv));
+
+ return CSS_OK;
+}
+
+css_error parse_border_side_width(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ uint16_t side, css_style **result)
+{
+ css_error error;
+ const css_token *token;
+ uint8_t flags = 0;
+ uint16_t value = 0;
+ uint32_t opv;
+ uint32_t length = 0;
+ uint32_t unit = 0;
+ uint32_t required_size;
+
+ /* length | IDENT(thin, medium, thick, inherit) */
+ token= parserutils_vector_peek(vector, *ctx);
+ if (token == NULL)
+ return CSS_INVALID;
+
+ if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[INHERIT]) {
+ parserutils_vector_iterate(vector, ctx);
+ flags |= FLAG_INHERIT;
+ } else if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[THIN]) {
+ parserutils_vector_iterate(vector, ctx);
+ value = BORDER_WIDTH_THIN;
+ } else if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[MEDIUM]) {
+ parserutils_vector_iterate(vector, ctx);
+ value = BORDER_WIDTH_MEDIUM;
+ } else if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[THICK]) {
+ parserutils_vector_iterate(vector, ctx);
+ value = BORDER_WIDTH_THICK;
+ } else {
+ error = parse_length_specifier(c, vector, ctx, &length, &unit);
+ if (error != CSS_OK)
+ return CSS_INVALID;
+
+ value = BORDER_WIDTH_SET;
+ }
+
+ value |= side;
+
+ error = parse_important(c, vector, ctx, &flags);
+ if (error != CSS_OK)
+ return error;
+
+ opv = buildOPV(OP_BORDER_TRBL_WIDTH, flags, value);
+
+ required_size = sizeof(opv);
+ if (value == BORDER_WIDTH_SET)
+ required_size += sizeof(length) + sizeof(unit);
+
+ /* Allocate result */
+ *result = css_stylesheet_style_create(c->sheet, required_size);
+ if (*result == NULL)
+ return CSS_NOMEM;
+
+ /* Copy the bytecode to it */
+ memcpy((*result)->bytecode, &opv, sizeof(opv));
+ if (value == BORDER_WIDTH_SET) {
+ memcpy(((uint8_t *) (*result)->bytecode) + sizeof(opv),
+ &length, sizeof(length));
+ memcpy(((uint8_t *) (*result)->bytecode) + sizeof(opv) +
+ sizeof(length), &unit, sizeof(unit));
+ }
+
+ return CSS_OK;
+
+}
+
#endif
14 years, 3 months
r5632 chris_y - in /trunk/netsurf: !NetSurf/Resources/de/ !NetSurf/Resources/en/ !NetSurf/Resources/fr/ !NetSurf/Resources/it/ !NetSurf/Resources/nl/ amiga/ amiga/dist/
by netsurf@semichrome.net
Author: chris_y
Date: Sun Oct 26 07:25:26 2008
New Revision: 5632
URL: http://source.netsurf-browser.org?rev=5632&view=rev
Log:
ARexx menu with items populated from arexx_dir.
Added:
trunk/netsurf/amiga/dist/Rexx.info (with props)
Modified:
trunk/netsurf/!NetSurf/Resources/de/Messages
trunk/netsurf/!NetSurf/Resources/en/Messages
trunk/netsurf/!NetSurf/Resources/fr/Messages
trunk/netsurf/!NetSurf/Resources/it/Messages
trunk/netsurf/!NetSurf/Resources/nl/Messages
trunk/netsurf/amiga/arexx.c
trunk/netsurf/amiga/dist/NetSurf.guide
trunk/netsurf/amiga/gui.c
trunk/netsurf/amiga/menu.c
trunk/netsurf/amiga/menu.h
trunk/netsurf/amiga/options.h
Modified: trunk/netsurf/!NetSurf/Resources/de/Messages
URL: http://source.netsurf-browser.org/trunk/netsurf/%21NetSurf/Resources/de/M...
==============================================================================
--- trunk/netsurf/!NetSurf/Resources/de/Messages (original)
+++ trunk/netsurf/!NetSurf/Resources/de/Messages Sun Oct 26 07:25:26 2008
@@ -252,6 +252,11 @@
Settings:Settings
SnapshotWindow:Snapshot window
SettingsSave:Save settings
+
+# ARexx menu
+#
+ARexx:ARexx
+ARexxExecute:Execute script...
# Context menu
#
Modified: trunk/netsurf/!NetSurf/Resources/en/Messages
URL: http://source.netsurf-browser.org/trunk/netsurf/%21NetSurf/Resources/en/M...
==============================================================================
--- trunk/netsurf/!NetSurf/Resources/en/Messages (original)
+++ trunk/netsurf/!NetSurf/Resources/en/Messages Sun Oct 26 07:25:26 2008
@@ -252,6 +252,11 @@
Settings:Settings
SnapshotWindow:Snapshot window
SettingsSave:Save settings
+
+# ARexx menu
+#
+ARexx:ARexx
+ARexxExecute:Execute script...
# Context menu
#
Modified: trunk/netsurf/!NetSurf/Resources/fr/Messages
URL: http://source.netsurf-browser.org/trunk/netsurf/%21NetSurf/Resources/fr/M...
==============================================================================
--- trunk/netsurf/!NetSurf/Resources/fr/Messages (original)
+++ trunk/netsurf/!NetSurf/Resources/fr/Messages Sun Oct 26 07:25:26 2008
@@ -252,6 +252,11 @@
Settings:Settings
SnapshotWindow:Snapshot window
SettingsSave:Save settings
+
+# ARexx menu
+#
+ARexx:ARexx
+ARexxExecute:Execute script...
# Context menu
#
Modified: trunk/netsurf/!NetSurf/Resources/it/Messages
URL: http://source.netsurf-browser.org/trunk/netsurf/%21NetSurf/Resources/it/M...
==============================================================================
--- trunk/netsurf/!NetSurf/Resources/it/Messages (original)
+++ trunk/netsurf/!NetSurf/Resources/it/Messages Sun Oct 26 07:25:26 2008
@@ -253,6 +253,11 @@
Settings:Impostazioni
SnapshotWindow:Fissa finestra
SettingsSave:Salva impostazioni
+
+# ARexx menu
+#
+ARexx:ARexx
+ARexxExecute:Execute script...
# Context menu
#
Modified: trunk/netsurf/!NetSurf/Resources/nl/Messages
URL: http://source.netsurf-browser.org/trunk/netsurf/%21NetSurf/Resources/nl/M...
==============================================================================
--- trunk/netsurf/!NetSurf/Resources/nl/Messages (original)
+++ trunk/netsurf/!NetSurf/Resources/nl/Messages Sun Oct 26 07:25:26 2008
@@ -252,6 +252,11 @@
Settings:Settings
SnapshotWindow:Snapshot window
SettingsSave:Save settings
+
+# ARexx menu
+#
+ARexx:ARexx
+ARexxExecute:Execute script...
# Context menu
#
Modified: trunk/netsurf/amiga/arexx.c
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/arexx.c?rev=5632&r1...
==============================================================================
--- trunk/netsurf/amiga/arexx.c (original)
+++ trunk/netsurf/amiga/arexx.c Sun Oct 26 07:25:26 2008
@@ -47,7 +47,7 @@
{ NULL, 0, NULL, NULL, 0, NULL, 0, 0, NULL }
};
-void ami_arexx_init()
+void ami_arexx_init(void)
{
if(arexx_obj = ARexxObject,
AREXX_HostName,"NETSURF",
@@ -61,12 +61,17 @@
}
}
-void ami_arexx_handle()
+void ami_arexx_handle(void)
{
RA_HandleRexx(arexx_obj);
}
-void ami_arexx_cleanup()
+void ami_arexx_execute(char *script)
+{
+ IDoMethod(arexx_obj, AM_EXECUTE, script, NULL, NULL, NULL, NULL, NULL);
+}
+
+void ami_arexx_cleanup(void)
{
if(arexx_obj) DisposeObject(arexx_obj);
}
@@ -95,7 +100,15 @@
STATIC VOID rx_geturl(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unused)))
{
- strcpy(result,curbw->current_content->url);
+ if(curbw)
+ {
+ strcpy(result,curbw->current_content->url);
+ }
+ else
+ {
+ strcpy(result,"\0");
+ }
+
cmd->ac_Result = result;
}
Modified: trunk/netsurf/amiga/dist/NetSurf.guide
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/dist/NetSurf.guide?...
==============================================================================
--- trunk/netsurf/amiga/dist/NetSurf.guide (original)
+++ trunk/netsurf/amiga/dist/NetSurf.guide Sun Oct 26 07:25:26 2008
@@ -25,12 +25,12 @@
@endnode
@node options "Options file"
-The options file is stored in Resources/Options by default. The following options are specific to the Amiga version although there are other relevant options in the file:
+The options file is stored in @{"Resources/Options" link Resources/Options/Main} by default. The following options are specific to the Amiga version although there are other relevant options in the file:
@{b}url_file@{ub} Path to URL database file
@{b}hotlist_file@{ub} Path to Hotlist file
@{b}use_workbench@{ub} Open NetSurf in a window on Workbench screen (default is to open a custom screen)
-@{b}screen_modeid@{ub} Mode ID for NetSurf's custom screen
+@{b}screen_modeid@{ub} Mode ID for NetSurf's custom screen. If not specified, NetSurf will use @{b}window_screen_width@{ub} and @{b}window_screen_height@{ub} to find the best mode.
@{b}theme@{ub} Path to theme (default is Resources/Themes/Default - an alternative included theme is Resources/Themes/AISS)
@{b}no_iframes@{ub} Disable IFrames
@{b}clipboard_write_utf8@{ub} Write UTF-8 strings to the clipboard along with a charset identifier (when this option is 0, NetSurf will convert copied strings to local charset)
@@ -42,6 +42,8 @@
@{b}new_tab_is_active@{ub} Make new tab the active one
@{b}kiosk_mode@{ub} No gadgets
@{b}recent_file@{ub} Path to file to store recent history list
+@{b}arexx_dir@{ub} Path to ARexx scripts dir
+@{b}download_dir@{ub} default download destination (not used yet)
@endnode
@node arexx "ARexx port"
@@ -49,8 +51,25 @@
Commands are:
-@{b}OPEN URL/A@{ub} Opens URL in a new window
+@{b}OPEN URL/A,NEW=NEWWINDOW/S@{ub} Opens URL in current window or a new window if NEWWINDOW is specified.
@{b}QUIT@{ub} Quits NetSurf
+@{b}TOFRONT@{ub} Brings NetSurf's screen to the front
+@{b}GETURL@{ub} Puts the URL displayed in the current window/tab into RESULT
+
+The ARexx menu will be populated with scripts named #?.nsrx in @{"arexx_dir" link options 18}, up to a maximum of 20 entries. The titles of these entries will be the comments field of the file (or the filename if comments field is empty).
+
+
+@{u}OpenURL configuration@{uu}
+
+Click Add on the Browsers page and fill in the details as follows:
+Name: NetSurf
+Path: NetSurf %u
+ARexx port: NETSURF
+Show:
+To front: TOFRONT
+Open URL: OPEN "%u"
+New window: OPEN "%u" NEW
+
@endnode
@node hotlist "Hotlist menu"
Added: trunk/netsurf/amiga/dist/Rexx.info
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/dist/Rexx.info?rev=...
==============================================================================
Binary file - no diff available.
Propchange: trunk/netsurf/amiga/dist/Rexx.info
------------------------------------------------------------------------------
amiga:protection = ----rw-d ---- ----
Propchange: trunk/netsurf/amiga/dist/Rexx.info
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Modified: trunk/netsurf/amiga/gui.c
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/gui.c?rev=5632&r1=5...
==============================================================================
--- trunk/netsurf/amiga/gui.c (original)
+++ trunk/netsurf/amiga/gui.c Sun Oct 26 07:25:26 2008
@@ -65,6 +65,7 @@
#include "amiga/context_menu.h"
#include "amiga/cookies.h"
#include "amiga/clipboard.h"
+#include <proto/keymap.h>
#ifdef WITH_HUBBUB
#include <hubbub/hubbub.h>
@@ -101,6 +102,8 @@
struct TimerIFace *ITimer;
struct Library *PopupMenuBase = NULL;
struct PopupMenuIFace *IPopupMenu = NULL;
+struct Library *KeymapBase = NULL;
+struct KeymapIFace *IKeymap = NULL;
struct BitMap *throbber = NULL;
ULONG throbber_width,throbber_height,throbber_frames;
@@ -183,10 +186,13 @@
IPopupMenu = (struct PopupMenuIFace *)GetInterface(PopupMenuBase,"main",1,NULL);
}
+ if(KeymapBase = OpenLibrary("keymap.library",37))
+ {
+ IKeymap = (struct KeymapIFace *)GetInterface(KeymapBase,"main",1,NULL);
+ }
+
filereq = (struct FileRequester *)AllocAslRequest(ASL_FileRequest,NULL);
- ami_arexx_init();
-
ami_clipboard_init();
win_destroyed = false;
@@ -194,6 +200,7 @@
options_read("Resources/Options");
verbose_log = option_verbose_log;
+
ami_init_mouse_pointers();
nsscreentitle = ASPrintf("NetSurf %s",netsurf_version);
@@ -283,6 +290,9 @@
if((!option_theme) || (option_theme[0] == '\0'))
option_theme = (char *)strdup("Resources/Themes/Default");
+ if((!option_arexx_dir) || (option_arexx_dir[0] == '\0'))
+ option_arexx_dir = (char *)strdup("Rexx");
+
if(!option_window_width) option_window_width = 800;
if(!option_window_height) option_window_height = 600;
if(!option_window_screen_width) option_window_screen_width = 800;
@@ -310,6 +320,7 @@
}
/* end Amiupdate */
+ ami_arexx_init();
ami_init_menulabs();
if(option_context_menu) ami_context_menu_init();
@@ -627,7 +638,14 @@
break;
case GID_RELOAD:
- browser_window_reload(gwin->bw,false);
+ if(gwin->key_state & BROWSER_MOUSE_MOD_1)
+ {
+ browser_window_reload(gwin->bw,true);
+ }
+ else
+ {
+ browser_window_reload(gwin->bw,false);
+ }
break;
case GID_BACK:
@@ -689,6 +707,7 @@
storage = result & WMHI_GADGETMASK;
GetAttr(WINDOW_InputEvent,gwin->objects[OID_MAIN],(ULONG *)&ie);
+
switch(storage)
{
case RAWKEY_CRSRUP:
@@ -718,6 +737,9 @@
case 0xe3: // lctrl up
gwin->key_state = 0;
break;
+ default:
+ /*MapRawKey etc */
+ break;
}
break;
@@ -1075,6 +1097,9 @@
if(IPopupMenu) DropInterface((struct Interface *)IPopupMenu);
if(PopupMenuBase) CloseLibrary(PopupMenuBase);
+
+ if(IKeymap) DropInterface((struct Interface *)IKeymap);
+ if(KeymapBase) CloseLibrary(KeymapBase);
if(ITimer)
{
Modified: trunk/netsurf/amiga/menu.c
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/menu.c?rev=5632&r1=...
==============================================================================
--- trunk/netsurf/amiga/menu.c (original)
+++ trunk/netsurf/amiga/menu.c Sun Oct 26 07:25:26 2008
@@ -34,9 +34,14 @@
#include "amiga/tree.h"
#include "amiga/history.h"
#include "amiga/cookies.h"
+#include <proto/exec.h>
+#include "amiga/arexx.h"
+
+BOOL menualreadyinit;
void ami_menu_scan(struct tree *tree,struct NewMenu *menu);
void ami_menu_scan_2(struct tree *tree,struct node *root,WORD *gen,ULONG *item,struct NewMenu *menu);
+void ami_menu_arexx_scan(struct NewMenu *menu);
void ami_free_menulabs(void)
{
@@ -79,6 +84,9 @@
menulab[65] = ami_utf8_easy((char *)messages_get("Settings"));
menulab[66] = ami_utf8_easy((char *)messages_get("SnapshotWindow"));
menulab[67] = ami_utf8_easy((char *)messages_get("SettingsSave"));
+ menulab[68] = ami_utf8_easy((char *)messages_get("ARexx"));
+ menulab[69] = ami_utf8_easy((char *)messages_get("ARexxExecute"));
+ menulab[70] = NM_BARLABEL;
}
struct NewMenu *ami_create_menu(ULONG type)
@@ -154,6 +162,29 @@
{NM_TITLE,0,0,0,0,0,}, // settings
{ NM_ITEM,0,0,0,0,0,}, // snapshot window
{ NM_ITEM,0,0,0,0,0,}, // save settings
+ {NM_TITLE,0,0,0,0,0,}, // arexx
+ { NM_ITEM,0,0,0,0,0,}, // execute arexx
+ { NM_ITEM,NM_BARLABEL,0,0,0,0,},
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
+ { NM_IGNORE,0,0,0,0,0,}, // ** arexx entry **
{ NM_END,0,0,0,0,0,},
};
@@ -176,9 +207,73 @@
menu[7].nm_Flags = NM_ITEMDISABLED;
#endif
- ami_menu_scan(hotlist,menu);
+ if(!menualreadyinit)
+ {
+ ami_menu_scan(hotlist,menu);
+ ami_menu_arexx_scan(menu);
+ menualreadyinit = TRUE;
+ }
return(menu);
+}
+
+void ami_menu_arexx_scan(struct NewMenu *menu)
+{
+ int item = AMI_MENU_AREXX;
+ BPTR lock = 0;
+ UBYTE *buffer;
+ struct ExAllControl *ctrl;
+ char matchpatt[16];
+ LONG cont;
+ struct ExAllData *ead;
+
+ if(lock = Lock(option_arexx_dir,SHARED_LOCK))
+ {
+ if(buffer = AllocVec(1024,MEMF_PRIVATE | MEMF_CLEAR))
+ {
+ if(ctrl = AllocDosObject(DOS_EXALLCONTROL,NULL))
+ {
+ ctrl->eac_LastKey = 0;
+
+ if(ParsePatternNoCase("#?.nsrx",(char *)&matchpatt,16) != -1)
+ {
+ ctrl->eac_MatchString = (char *)&matchpatt;
+ }
+
+ do
+ {
+ cont = ExAll(lock,buffer,1024,ED_COMMENT,ctrl);
+ if((!cont) && (IoErr() != ERROR_NO_MORE_ENTRIES)) break;
+ if(!ctrl->eac_Entries) continue;
+
+ for(ead = (struct ExAllData *)buffer; ead; ead = ead->ed_Next)
+ {
+ if(item >= AMI_MENU_AREXX_MAX) continue;
+ if(EAD_IS_FILE(ead))
+ {
+ menu[item].nm_Type = NM_ITEM;
+ if(ead->ed_Comment[0] != '\0')
+ {
+ menulab[item] = (char *)strdup(ead->ed_Comment);
+ }
+ else
+ {
+ menulab[item] = (char *)strdup(ead->ed_Name);
+ }
+
+ menu[item].nm_Label = menulab[item];
+ menu[item].nm_UserData = (char *)strdup(ead->ed_Name);
+
+ item++;
+ }
+ }
+ }while(cont);
+ FreeDosObject(DOS_EXALLCONTROL,ctrl);
+ }
+ FreeVec(buffer);
+ }
+ UnLock(lock);
+ }
}
void ami_menu_scan(struct tree *tree,struct NewMenu *menu)
@@ -224,7 +319,7 @@
if(strcmp(element->text,"--"))
{
- menulab[*item] = ami_utf8_easy(element->text);
+ menulab[*item] = ami_utf8_easy((char *)element->text);
}
else
{
@@ -234,7 +329,7 @@
menu[*item].nm_Label = menulab[*item];
element = tree_find_element(node, TREE_ELEMENT_URL);
- if(element && element->text) menu[*item].nm_UserData = element->text;
+ if(element && element->text) menu[*item].nm_UserData = (void *)element->text;
if(node->folder && (!node->child)) menu[*item].nm_Flags = NM_ITEMDISABLED;
@@ -260,6 +355,7 @@
subnum = SUBNUM(code);
bool openwin=false;
bool opentab=true;
+ char *temp;
if(option_force_tabs)
{
@@ -433,5 +529,42 @@
break;
}
break;
- }
-}
+
+ case 5: // arexx
+ switch(itemnum)
+ {
+ case 0: // execute arexx
+ if(AslRequestTags(filereq,
+ ASLFR_TitleText,messages_get("NetSurf"),
+ ASLFR_Screen,scrn,
+ ASLFR_DoSaveMode,FALSE,
+ ASLFR_InitialDrawer,option_arexx_dir,
+ ASLFR_InitialPattern,"#?.nsrx",
+ TAG_DONE))
+ {
+ if(temp = AllocVec(1024,MEMF_PRIVATE | MEMF_CLEAR))
+ {
+ strlcpy(temp,filereq->fr_Drawer,1024);
+ AddPart(temp,filereq->fr_File,1024);
+ ami_arexx_execute(temp);
+ FreeVec(temp);
+ }
+ }
+ break;
+
+ default: // arexx menu items
+ if(GTMENUITEM_USERDATA(item))
+ {
+ if(temp = AllocVec(1024,MEMF_PRIVATE | MEMF_CLEAR))
+ {
+ strcpy(temp,option_arexx_dir);
+ AddPart(temp,GTMENUITEM_USERDATA(item),1024);
+ ami_arexx_execute(temp);
+ FreeVec(temp);
+ }
+ }
+ break;
+ }
+ break;
+ }
+}
Modified: trunk/netsurf/amiga/menu.h
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/menu.h?rev=5632&r1=...
==============================================================================
--- trunk/netsurf/amiga/menu.h (original)
+++ trunk/netsurf/amiga/menu.h Sun Oct 26 07:25:26 2008
@@ -22,10 +22,32 @@
#include "amiga/gui.h"
#include <intuition/intuition.h>
+/* Number of hotlist items, menu structure needs to be changed in ami_create_menu()
+ * if this value is changed. */
#define AMI_HOTLIST_ITEMS 40
-#define AMI_MENU_MAX 28 + AMI_HOTLIST_ITEMS
+
+/* Maximum number of menu items - first value is number of static items
+ * (ie. everything not intially defined as NM_IGNORE) */
+#define AMI_MENU_MAX 31 + AMI_HOTLIST_ITEMS
+
+/* Where the hotlist entries start */
#define AMI_MENU_HOTLIST 25
+
+/* Where the hotlist entries end */
#define AMI_MENU_HOTLIST_MAX AMI_MENU_HOTLIST+AMI_HOTLIST_ITEMS
+
+/* Number of ARexx menu items. menu structure in ami_create_menu() needs to be
+ * changed if this value is modified. */
+#define AMI_MENU_AREXX_ITEMS 20
+
+/* Where the ARexx menu items start. ARexx menu items are right at the end...
+ * for now, at least. We can get away with AMI_MENU_MAX falling short as it is
+ * only used for freeing the UTF-8 converted menu labels */
+#define AMI_MENU_AREXX AMI_MENU_MAX
+
+/* Where the ARexx menu items end (incidentally this is the real AMI_MENU_MAX) */
+#define AMI_MENU_AREXX_MAX AMI_MENU_AREXX+AMI_MENU_AREXX_ITEMS
+
char *menulab[AMI_MENU_MAX+1];
struct NewMenu *ami_create_menu(ULONG type);
Modified: trunk/netsurf/amiga/options.h
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/options.h?rev=5632&...
==============================================================================
--- trunk/netsurf/amiga/options.h (original)
+++ trunk/netsurf/amiga/options.h Sun Oct 26 07:25:26 2008
@@ -36,6 +36,8 @@
extern bool option_new_tab_active;
extern bool option_kiosk_mode;
extern char *option_recent_file;
+extern char *option_arexx_dir;
+extern char *option_download_dir;
#define EXTRA_OPTION_DEFINE \
bool option_verbose_log = false; \
@@ -54,6 +56,8 @@
bool option_new_tab_active = false; \
bool option_kiosk_mode = false; \
char *option_recent_file = 0; \
+char *option_arexx_dir = 0; \
+char *option_download_dir = 0; \
#define EXTRA_OPTION_TABLE \
{ "verbose_log", OPTION_BOOL, &option_verbose_log}, \
@@ -71,5 +75,7 @@
{ "always_open_tabs", OPTION_BOOL, &option_force_tabs}, \
{ "new_tab_is_active", OPTION_BOOL, &option_new_tab_active}, \
{ "kiosk_mode", OPTION_BOOL, &option_kiosk_mode}, \
-{ "recent_file", OPTION_STRING, &option_recent_file },
+{ "recent_file", OPTION_STRING, &option_recent_file }, \
+{ "arexx_dir", OPTION_STRING, &option_arexx_dir }, \
+{ "download_dir", OPTION_STRING, &option_download_dir },
#endif
14 years, 3 months
r5631 chris_y - in /trunk/netsurf/amiga: arexx.c clipboard.c clipboard.h dist/Rexx/ dist/Rexx/GetVideo.nsrx gui.c gui.h
by netsurf@semichrome.net
Author: chris_y
Date: Sat Oct 25 18:22:34 2008
New Revision: 5631
URL: http://source.netsurf-browser.org?rev=5631&view=rev
Log:
Track the current/last used browser window (at the moment, just for ARexx).
Extended ARexx port. First two are primarily for openurl.library:
* OPEN now takes a parameter NEW=NEWWINDOW/S to open the URL in a new window (default
is
to open in the current browser window)
* TOFRONT will bring NetSurf's screen to the front (this may be extended in the future
to bring the current browser window to the front - which might be better for when it
is running on the WB screen)
Next is to make it easy to support getvideo.rexx:
* GETURL returns the URL of the current browser window in RESULT
GetVideo.nsrx script will get the current URL and pass it to rexx:getvideo.rexx
Currently there is no way to call ARexx scripts directly from NetSurf, or any way to
specify whether to save, play or saveplay the video without editing the script.
[clipboard.c/clipboard.h were missing from previous commit]
Added:
trunk/netsurf/amiga/clipboard.c (with props)
trunk/netsurf/amiga/clipboard.h (with props)
trunk/netsurf/amiga/dist/Rexx/
trunk/netsurf/amiga/dist/Rexx/GetVideo.nsrx (with props)
Modified:
trunk/netsurf/amiga/arexx.c
trunk/netsurf/amiga/gui.c
trunk/netsurf/amiga/gui.h
Modified: trunk/netsurf/amiga/arexx.c
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/arexx.c?rev=5631&r1...
==============================================================================
--- trunk/netsurf/amiga/arexx.c (original)
+++ trunk/netsurf/amiga/arexx.c Sat Oct 25 18:22:34 2008
@@ -27,15 +27,23 @@
{
RX_OPEN=0,
RX_QUIT,
+ RX_TOFRONT,
+ RX_GETURL
};
+
+STATIC char result[100];
STATIC VOID rx_open(struct ARexxCmd *, struct RexxMsg *);
STATIC VOID rx_quit(struct ARexxCmd *, struct RexxMsg *);
+STATIC VOID rx_tofront(struct ARexxCmd *, struct RexxMsg *);
+STATIC VOID rx_geturl(struct ARexxCmd *, struct RexxMsg *);
STATIC struct ARexxCmd Commands[] =
{
- {"OPEN",RX_OPEN,rx_open,"URL/A", 0, NULL, 0, 0, NULL },
+ {"OPEN",RX_OPEN,rx_open,"URL/A,NEW=NEWWINDOW/S", 0, NULL, 0, 0, NULL },
{"QUIT",RX_QUIT,rx_quit,NULL, 0, NULL, 0, 0, NULL },
+ {"TOFRONT",RX_TOFRONT,rx_tofront,NULL, 0, NULL, 0, 0, NULL },
+ {"GETURL",RX_GETURL,rx_geturl,NULL, 0, NULL, 0, 0, NULL },
{ NULL, 0, NULL, NULL, 0, NULL, 0, 0, NULL }
};
@@ -65,10 +73,29 @@
STATIC VOID rx_open(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unused)))
{
- browser_window_create((char *)cmd->ac_ArgList[0],NULL,NULL,true,false);
+ if(cmd->ac_ArgList[1])
+ {
+ browser_window_create((char *)cmd->ac_ArgList[0],NULL,NULL,true,false);
+ }
+ else
+ {
+ browser_window_go(curbw,(char *)cmd->ac_ArgList[0],NULL,true);
+ }
}
STATIC VOID rx_quit(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unused)))
{
ami_quit_netsurf();
}
+
+STATIC VOID rx_tofront(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unused)))
+{
+ ScreenToFront(scrn);
+}
+
+STATIC VOID rx_geturl(struct ARexxCmd *cmd, struct RexxMsg *rxm __attribute__((unused)))
+{
+ strcpy(result,curbw->current_content->url);
+ cmd->ac_Result = result;
+}
+
Added: trunk/netsurf/amiga/clipboard.c
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/clipboard.c?rev=563...
==============================================================================
--- trunk/netsurf/amiga/clipboard.c (added)
+++ trunk/netsurf/amiga/clipboard.c Sat Oct 25 18:22:34 2008
@@ -1,0 +1,238 @@
+/*
+ * Copyright 2008 Chris Young <chris(a)unsatisfactorysoftware.co.uk>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "desktop/gui.h"
+#include <parserutils/charset/mibenum.h>
+#include "amiga/iff_cset.h"
+#include <proto/iffparse.h>
+#include <datatypes/textclass.h>
+#include "amiga/options.h"
+#include "amiga/gui.h"
+#include <proto/exec.h>
+#include "amiga/utf8.h"
+#include "utils/utf8.h"
+#include "desktop/selection.h"
+
+
+struct IFFHandle *iffh = NULL;
+
+void ami_clipboard_init(void)
+{
+ if(iffh = AllocIFF())
+ {
+ if(iffh->iff_Stream = (ULONG)OpenClipboard(0))
+ {
+ InitIFFasClip(iffh);
+ }
+ }
+}
+
+void ami_clipboard_free(void)
+{
+ if(iffh->iff_Stream) CloseClipboard((struct ClipboardHandle *)iffh->iff_Stream);
+ if(iffh) FreeIFF(iffh);
+}
+
+void gui_drag_save_selection(struct selection *s, struct gui_window *g)
+{
+}
+
+void gui_start_selection(struct gui_window *g)
+{
+}
+
+void gui_paste_from_clipboard(struct gui_window *g, int x, int y)
+{
+ /* This and the other clipboard code is heavily based on the RKRM examples */
+ struct ContextNode *cn;
+ ULONG rlen=0,error;
+ struct CSet cset;
+ char *clip;
+ STRPTR readbuf = AllocVec(1024,MEMF_CLEAR);
+
+ cset.CodeSet = 0;
+
+ if(OpenIFF(iffh,IFFF_READ)) return;
+ if(StopChunk(iffh,ID_FTXT,ID_CHRS)) return;
+ if(StopChunk(iffh,ID_FTXT,ID_CSET)) return;
+
+ while(1)
+ {
+ error = ParseIFF(iffh,IFFPARSE_SCAN);
+ if(error == IFFERR_EOC) continue;
+ else if(error) break;
+
+ cn = CurrentChunk(iffh);
+
+ if((cn)&&(cn->cn_Type == ID_FTXT)&&(cn->cn_ID == ID_CSET))
+ {
+ rlen = ReadChunkBytes(iffh,&cset,24);
+ }
+
+ if((cn)&&(cn->cn_Type == ID_FTXT)&&(cn->cn_ID == ID_CHRS))
+ {
+ while((rlen = ReadChunkBytes(iffh,readbuf,1024)) > 0)
+ {
+ if(cset.CodeSet == 0)
+ {
+ utf8_from_local_encoding(readbuf,rlen,&clip);
+ }
+ else
+ {
+ utf8_from_enc(readbuf,parserutils_charset_mibenum_to_name(cset.CodeSet),rlen,&clip);
+ }
+
+ browser_window_paste_text(g->shared->bw,clip,rlen,true);
+ }
+ if(rlen < 0) error = rlen;
+ }
+ }
+ CloseIFF(iffh);
+}
+
+bool gui_empty_clipboard(void)
+{
+}
+
+bool gui_add_to_clipboard(const char *text, size_t length, bool space)
+{
+ char *buffer;
+ if(option_utf8_clipboard)
+ {
+ WriteChunkBytes(iffh,text,length);
+ }
+ else
+ {
+ utf8_to_local_encoding(text,length,&buffer);
+ if(buffer) WriteChunkBytes(iffh,buffer,strlen(buffer));
+ ami_utf8_free(buffer);
+ }
+
+ if(space) WriteChunkBytes(iffh," ",1);
+
+ return true;
+}
+
+bool gui_commit_clipboard(void)
+{
+ if(iffh) CloseIFF(iffh);
+
+ return true;
+}
+
+bool ami_clipboard_copy(const char *text, size_t length, struct box *box,
+ void *handle, const char *whitespace_text,size_t whitespace_length)
+{
+ if(!(PushChunk(iffh,0,ID_CHRS,IFFSIZE_UNKNOWN)))
+ {
+ if (whitespace_text)
+ {
+ if(!gui_add_to_clipboard(whitespace_text,whitespace_length, false)) return false;
+ }
+
+ if(text)
+ {
+ if (!gui_add_to_clipboard(text, length, box->space)) return false;
+ }
+
+ PopChunk(iffh);
+ }
+ else
+ {
+ PopChunk(iffh);
+ return false;
+ }
+
+ return true;
+}
+
+bool gui_copy_to_clipboard(struct selection *s)
+{
+ struct CSet cset = {0};
+
+ if(!(OpenIFF(iffh,IFFF_WRITE)))
+ {
+ if(!(PushChunk(iffh,ID_FTXT,ID_FORM,IFFSIZE_UNKNOWN)))
+ {
+ if(option_utf8_clipboard)
+ {
+ if(!(PushChunk(iffh,0,ID_CSET,24)))
+ {
+ cset.CodeSet = 106; // UTF-8
+ WriteChunkBytes(iffh,&cset,24);
+ PopChunk(iffh);
+ }
+ }
+
+ if (s->defined && selection_traverse(s, ami_clipboard_copy, NULL))
+ {
+ gui_commit_clipboard();
+ return true;
+ }
+ }
+ else
+ {
+ PopChunk(iffh);
+ }
+ CloseIFF(iffh);
+ }
+
+ return false;
+}
+
+bool ami_easy_clipboard(char *text)
+{
+ struct CSet cset = {0};
+
+ if(!(OpenIFF(iffh,IFFF_WRITE)))
+ {
+ if(!(PushChunk(iffh,ID_FTXT,ID_FORM,IFFSIZE_UNKNOWN)))
+ {
+ if(option_utf8_clipboard)
+ {
+ if(!(PushChunk(iffh,0,ID_CSET,24)))
+ {
+ cset.CodeSet = 106; // UTF-8
+ WriteChunkBytes(iffh,&cset,24);
+ PopChunk(iffh);
+ }
+ }
+
+ if(!(PushChunk(iffh,0,ID_CHRS,IFFSIZE_UNKNOWN)))
+ {
+ if(gui_add_to_clipboard(text,strlen(text),false))
+ {
+ PopChunk(iffh);
+ gui_commit_clipboard();
+ return true;
+ }
+ }
+ else
+ {
+ PopChunk(iffh);
+ }
+ }
+ else
+ {
+ PopChunk(iffh);
+ }
+ CloseIFF(iffh);
+ }
+
+ return false;
+}
Propchange: trunk/netsurf/amiga/clipboard.c
------------------------------------------------------------------------------
amiga:protection = ----rwed ---- ----
Propchange: trunk/netsurf/amiga/clipboard.c
------------------------------------------------------------------------------
svn:executable = *
Added: trunk/netsurf/amiga/clipboard.h
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/clipboard.h?rev=563...
==============================================================================
--- trunk/netsurf/amiga/clipboard.h (added)
+++ trunk/netsurf/amiga/clipboard.h Sat Oct 25 18:22:34 2008
@@ -1,0 +1,24 @@
+/*
+ * Copyright 2008 Chris Young <chris(a)unsatisfactorysoftware.co.uk>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef AMIGA_CLIPBOARD_H
+#define AMIGA_CLIPBOARD_H
+void ami_clipboard_init(void);
+void ami_clipboard_free(void);
+bool ami_easy_clipboard(char *text);
+#endif
Propchange: trunk/netsurf/amiga/clipboard.h
------------------------------------------------------------------------------
amiga:protection = ----rwed ---- ----
Propchange: trunk/netsurf/amiga/clipboard.h
------------------------------------------------------------------------------
svn:executable = *
Added: trunk/netsurf/amiga/dist/Rexx/GetVideo.nsrx
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/dist/Rexx/GetVideo....
==============================================================================
--- trunk/netsurf/amiga/dist/Rexx/GetVideo.nsrx (added)
+++ trunk/netsurf/amiga/dist/Rexx/GetVideo.nsrx Sat Oct 25 18:22:34 2008
@@ -1,0 +1,26 @@
+/*
+ * Copyright 2008 Chris Young <chris(a)unsatisfactorysoftware.co.uk>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* This script launches getvideo.rexx (Aminet:comm/www/getvideo.lha) */
+
+options results
+address netsurf
+
+geturl
+
+address REXX 'rexx:getvideo.rexx' result 'save "ram:"'
Propchange: trunk/netsurf/amiga/dist/Rexx/GetVideo.nsrx
------------------------------------------------------------------------------
amiga:protection = ----rwed ---- ----
Propchange: trunk/netsurf/amiga/dist/Rexx/GetVideo.nsrx
------------------------------------------------------------------------------
svn:executable = *
Modified: trunk/netsurf/amiga/gui.c
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/gui.c?rev=5631&r1=5...
==============================================================================
--- trunk/netsurf/amiga/gui.c (original)
+++ trunk/netsurf/amiga/gui.c Sat Oct 25 18:22:34 2008
@@ -91,8 +91,6 @@
#include <classes/popupmenu.h>
#include <reaction/reaction_macros.h>
-struct browser_window *curbw;
-
char *default_stylesheet_url;
char *adblock_stylesheet_url;
struct gui_window *search_current_window = NULL;
@@ -739,6 +737,10 @@
ami_close_all_tabs(gwin);
break;
+ case WMHI_ACTIVE:
+ curbw = gwin->bw;
+ break;
+
case WMHI_INTUITICK:
break;
@@ -981,6 +983,7 @@
GetClickTabNodeAttrs(tabnode,
TNA_UserData,&gwin->bw,
TAG_DONE);
+ curbw = gwin->bw;
ami_update_buttons(gwin);
@@ -1339,7 +1342,7 @@
IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
IDCMP_VANILLAKEY | IDCMP_RAWKEY |
IDCMP_GADGETUP | IDCMP_IDCMPUPDATE |
- IDCMP_INTUITICKS,
+ IDCMP_INTUITICKS | IDCMP_ACTIVEWINDOW,
// WINDOW_IconifyGadget, TRUE,
WINDOW_NewMenu,menu,
WINDOW_HorizProp,1,
@@ -1593,6 +1596,8 @@
ICA_TARGET,ICTARGET_IDCMP,
TAG_DONE);
+ curbw = bw;
+
gwin->shared->node = AddObject(window_list,AMINS_WINDOW);
gwin->shared->node->objstruct = gwin->shared;
@@ -1655,6 +1660,8 @@
FreeVec(g);
return;
}
+
+ curbw = NULL;
DisposeObject(g->shared->objects[OID_MAIN]);
DeleteLayer(0,g->shared->rp.Layer);
Modified: trunk/netsurf/amiga/gui.h
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/gui.h?rev=5631&r1=5...
==============================================================================
--- trunk/netsurf/amiga/gui.h (original)
+++ trunk/netsurf/amiga/gui.h Sat Oct 25 18:22:34 2008
@@ -134,4 +134,5 @@
struct FileRequester *filereq;
struct MsgPort *sport;
bool win_destroyed;
+struct browser_window *curbw;
#endif
14 years, 3 months
r5630 jmb - /trunk/libcss/src/parse/css21props.c
by netsurf@semichrome.net
Author: jmb
Date: Sat Oct 25 18:18:42 2008
New Revision: 5630
URL: http://source.netsurf-browser.org?rev=5630&view=rev
Log:
Some kind of border-{top,right,bottom,left}-color parsing.
Modified:
trunk/libcss/src/parse/css21props.c
Modified: trunk/libcss/src/parse/css21props.c
URL: http://source.netsurf-browser.org/trunk/libcss/src/parse/css21props.c?rev...
==============================================================================
--- trunk/libcss/src/parse/css21props.c (original)
+++ trunk/libcss/src/parse/css21props.c Sat Oct 25 18:18:42 2008
@@ -315,6 +315,9 @@
static inline css_error parse_colour_specifier(css_css21 *c,
const parserutils_vector *vector, int *ctx,
uint32_t *result);
+static inline css_error parse_border_side_color(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ uint16_t side, css_style **result);
/**
* Type of property handler function
@@ -659,12 +662,7 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
-
- return CSS_OK;
+ return parse_border_side_color(c, vector, ctx, SIDE_BOTTOM, result);
}
css_error parse_border_bottom_style(css_css21 *c,
@@ -707,12 +705,7 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
-
- return CSS_OK;
+ return parse_border_side_color(c, vector, ctx, SIDE_LEFT, result);
}
css_error parse_border_left_style(css_css21 *c,
@@ -743,12 +736,7 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
-
- return CSS_OK;
+ return parse_border_side_color(c, vector, ctx, SIDE_RIGHT, result);
}
css_error parse_border_right_style(css_css21 *c,
@@ -791,12 +779,7 @@
const parserutils_vector *vector, int *ctx,
css_style **result)
{
- UNUSED(c);
- UNUSED(vector);
- UNUSED(ctx);
- UNUSED(result);
-
- return CSS_OK;
+ return parse_border_side_color(c, vector, ctx, SIDE_TOP, result);
}
css_error parse_border_top_style(css_css21 *c,
@@ -1848,4 +1831,64 @@
return CSS_OK;
}
+css_error parse_border_side_color(css_css21 *c,
+ const parserutils_vector *vector, int *ctx,
+ uint16_t side, css_style **result)
+{
+ css_error error;
+ const css_token *token;
+ uint8_t flags = 0;
+ uint16_t value = 0;
+ uint32_t opv;
+ uint32_t colour = 0;
+ uint32_t required_size;
+
+ /* colour | IDENT (transparent, inherit) */
+ token= parserutils_vector_peek(vector, *ctx);
+ if (token == NULL)
+ return CSS_INVALID;
+
+ if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[INHERIT]) {
+ parserutils_vector_iterate(vector, ctx);
+ flags |= FLAG_INHERIT;
+ } else if (token->type == CSS_TOKEN_IDENT &&
+ token->lower.ptr == c->strings[TRANSPARENT]) {
+ parserutils_vector_iterate(vector, ctx);
+ value = BORDER_COLOR_TRANSPARENT;
+ } else {
+ error = parse_colour_specifier(c, vector, ctx, &colour);
+ if (error != CSS_OK)
+ return CSS_INVALID;
+
+ value = BORDER_COLOR_SET;
+ }
+
+ value |= side;
+
+ error = parse_important(c, vector, ctx, &flags);
+ if (error != CSS_OK)
+ return error;
+
+ opv = buildOPV(OP_BORDER_TRBL_COLOR, flags, value);
+
+ required_size = sizeof(opv);
+ if (value == BORDER_COLOR_SET)
+ required_size += sizeof(colour);
+
+ /* Allocate result */
+ *result = css_stylesheet_style_create(c->sheet, required_size);
+ if (*result == NULL)
+ return CSS_NOMEM;
+
+ /* Copy the bytecode to it */
+ memcpy((*result)->bytecode, &opv, sizeof(opv));
+ if (value == BORDER_COLOR_SET) {
+ memcpy(((uint8_t *) (*result)->bytecode) + sizeof(opv),
+ &colour, sizeof(colour));
+ }
+
+ return CSS_OK;
+}
+
#endif
14 years, 3 months
r5629 chris_y - in /trunk/netsurf: !NetSurf/Resources/de/ !NetSurf/Resources/en/ !NetSurf/Resources/fr/ !NetSurf/Resources/it/ !NetSurf/Resources/nl/ ./ amiga/ amiga/dist/
by netsurf@semichrome.net
Author: chris_y
Date: Sat Oct 25 11:37:08 2008
New Revision: 5629
URL: http://source.netsurf-browser.org?rev=5629&view=rev
Log:
Complete (but quite minimal at the moment) context menu implementation for AmigaOS:
Links, objects and upload file boxes have their own menu item or submenu.
Context menus can be enable/disabled and be made "sticky" with the following options:
context_menu
sticky_context_menu
Seperated clipboard related code out to clipboard.c to make it easier to maintain and
add the ability to copy URLs to the clipboard. Copying images to the clipboard will
come later.
Modified:
trunk/netsurf/!NetSurf/Resources/de/Messages
trunk/netsurf/!NetSurf/Resources/en/Messages
trunk/netsurf/!NetSurf/Resources/fr/Messages
trunk/netsurf/!NetSurf/Resources/it/Messages
trunk/netsurf/!NetSurf/Resources/nl/Messages
trunk/netsurf/Makefile.sources
trunk/netsurf/amiga/context_menu.c
trunk/netsurf/amiga/context_menu.h
trunk/netsurf/amiga/dist/NetSurf.guide
trunk/netsurf/amiga/dist/netsurf.readme
trunk/netsurf/amiga/gui.c
trunk/netsurf/amiga/iff_cset.h
trunk/netsurf/amiga/options.h
trunk/netsurf/amiga/plotters.c
Modified: trunk/netsurf/!NetSurf/Resources/de/Messages
URL: http://source.netsurf-browser.org/trunk/netsurf/%21NetSurf/Resources/de/M...
==============================================================================
--- trunk/netsurf/!NetSurf/Resources/de/Messages (original)
+++ trunk/netsurf/!NetSurf/Resources/de/Messages Sat Oct 25 11:37:08 2008
@@ -252,6 +252,15 @@
Settings:Settings
SnapshotWindow:Snapshot window
SettingsSave:Save settings
+
+# Context menu
+#
+Link:Link
+LinkNewTab:Open in new tab
+LinkNewWin:Open in new window
+CopyURL:Copy URL to clipboard
+ObjShow:Show object
+SelectFile:Select file...
# Treeview interface tokens
# =========================
Modified: trunk/netsurf/!NetSurf/Resources/en/Messages
URL: http://source.netsurf-browser.org/trunk/netsurf/%21NetSurf/Resources/en/M...
==============================================================================
--- trunk/netsurf/!NetSurf/Resources/en/Messages (original)
+++ trunk/netsurf/!NetSurf/Resources/en/Messages Sat Oct 25 11:37:08 2008
@@ -252,6 +252,15 @@
Settings:Settings
SnapshotWindow:Snapshot window
SettingsSave:Save settings
+
+# Context menu
+#
+Link:Link
+LinkNewTab:Open in new tab
+LinkNewWin:Open in new window
+CopyURL:Copy URL to clipboard
+ObjShow:Show object
+SelectFile:Select file...
# Treeview interface tokens
# =========================
Modified: trunk/netsurf/!NetSurf/Resources/fr/Messages
URL: http://source.netsurf-browser.org/trunk/netsurf/%21NetSurf/Resources/fr/M...
==============================================================================
--- trunk/netsurf/!NetSurf/Resources/fr/Messages (original)
+++ trunk/netsurf/!NetSurf/Resources/fr/Messages Sat Oct 25 11:37:08 2008
@@ -252,6 +252,15 @@
Settings:Settings
SnapshotWindow:Snapshot window
SettingsSave:Save settings
+
+# Context menu
+#
+Link:Link
+LinkNewTab:Open in new tab
+LinkNewWin:Open in new window
+CopyURL:Copy URL to clipboard
+ObjShow:Show object
+SelectFile:Select file...
# Treeview interface tokens
# =========================
Modified: trunk/netsurf/!NetSurf/Resources/it/Messages
URL: http://source.netsurf-browser.org/trunk/netsurf/%21NetSurf/Resources/it/M...
==============================================================================
--- trunk/netsurf/!NetSurf/Resources/it/Messages (original)
+++ trunk/netsurf/!NetSurf/Resources/it/Messages Sat Oct 25 11:37:08 2008
@@ -253,6 +253,15 @@
Settings:Impostazioni
SnapshotWindow:Fissa finestra
SettingsSave:Salva impostazioni
+
+# Context menu
+#
+Link:Link
+LinkNewTab:Open in new tab
+LinkNewWin:Open in new window
+CopyURL:Copy URL to clipboard
+ObjShow:Show object
+SelectFile:Select file...
# Treeview interface tokens
# =========================
Modified: trunk/netsurf/!NetSurf/Resources/nl/Messages
URL: http://source.netsurf-browser.org/trunk/netsurf/%21NetSurf/Resources/nl/M...
==============================================================================
--- trunk/netsurf/!NetSurf/Resources/nl/Messages (original)
+++ trunk/netsurf/!NetSurf/Resources/nl/Messages Sat Oct 25 11:37:08 2008
@@ -252,6 +252,15 @@
Settings:Settings
SnapshotWindow:Snapshot window
SettingsSave:Save settings
+
+# Context menu
+#
+Link:Link
+LinkNewTab:Open in new tab
+LinkNewWin:Open in new window
+CopyURL:Copy URL to clipboard
+ObjShow:Show object
+SelectFile:Select file...
# Treeview interface tokens
# =========================
Modified: trunk/netsurf/Makefile.sources
URL: http://source.netsurf-browser.org/trunk/netsurf/Makefile.sources?rev=5629...
==============================================================================
--- trunk/netsurf/Makefile.sources (original)
+++ trunk/netsurf/Makefile.sources Sat Oct 25 11:37:08 2008
@@ -90,7 +90,7 @@
S_AMIGA := compat.c gui.c tree.c history.c hotlist.c schedule.c \
thumbnail.c misc.c bitmap.c font.c filetype.c utf8.c login.c \
plotters.c object.c menu.c save_pdf.c arexx.c version.c \
- cookies.c context_menu.c
+ cookies.c context_menu.c clipboard.c
S_AMIGA := $(addprefix amiga/,$(S_AMIGA))
# S_FRAMEBUFFER are sources purely for the framebuffer build
Modified: trunk/netsurf/amiga/context_menu.c
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/context_menu.c?rev=...
==============================================================================
--- trunk/netsurf/amiga/context_menu.c (original)
+++ trunk/netsurf/amiga/context_menu.c Sat Oct 25 11:37:08 2008
@@ -22,9 +22,50 @@
#include <proto/popupmenu.h>
#include <proto/intuition.h>
#include "amiga/utf8.h"
+#include "utils/utf8.h"
#include "utils/messages.h"
+#include "amiga/options.h"
+#include "amiga/clipboard.h"
+#include <proto/asl.h>
+#include <proto/dos.h>
+#include <string.h>
+#include "utils/utils.h"
uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved);
+
+char *ctxmenulab[CMID_LAST];
+
+void ami_context_menu_init(void)
+{
+ ctxmenulab[CMID_SELECTFILE] = ami_utf8_easy((char *)messages_get("SelectFile"));
+ ctxmenulab[CMID_COPYURL] = ami_utf8_easy((char *)messages_get("CopyURL"));
+ ctxmenulab[CMID_SHOWOBJ] = ami_utf8_easy((char *)messages_get("ObjShow"));
+ ctxmenulab[CMID_COPYOBJ] = ami_utf8_easy((char *)messages_get("CopyURL"));
+
+ if(!option_force_tabs)
+ {
+ ctxmenulab[CMID_URLOPENWIN] = ami_utf8_easy((char *)messages_get("LinkNewWin"));
+ ctxmenulab[CMID_URLOPENTAB] = ami_utf8_easy((char *)messages_get("LinkNewTab"));
+ }
+ else
+ {
+ ctxmenulab[CMID_URLOPENWIN] = ami_utf8_easy((char *)messages_get("LinkNewTab"));
+ ctxmenulab[CMID_URLOPENTAB] = ami_utf8_easy((char *)messages_get("LinkNewWin"));
+ }
+
+ ctxmenulab[CMSUB_OBJECT] = ami_utf8_easy((char *)messages_get("Object"));
+ ctxmenulab[CMSUB_URL] = ami_utf8_easy((char *)messages_get("Link"));
+}
+
+void ami_context_menu_free(void)
+{
+ int i;
+
+ for(i=0;i<CMID_LAST;i++)
+ {
+ ami_utf8_free(ctxmenulab[i]);
+ }
+}
void ami_context_menu_show(struct gui_window_2 *gwin,int x,int y)
{
@@ -52,39 +93,47 @@
{
IDoMethod(gwin->objects[OID_MENU],PM_INSERT,
NewObject(POPUPMENU_GetItemClass(), NULL,
- PMIA_Title, (ULONG)ami_utf8_easy((char *)messages_get("CopyURL")),
- PMIA_ID,CMID_COPYURL,
- PMIA_UserData,curbox->href,
+ PMIA_Title, (ULONG)ctxmenulab[CMSUB_URL],
+ PMSIMPLESUB,
+ PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL,
+ PMIA_Title, (ULONG)ctxmenulab[CMID_URLOPENWIN],
+ PMIA_ID,CMID_URLOPENWIN,
+ PMIA_UserData,curbox->href,
+ TAG_DONE),
+ PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL,
+ PMIA_Title, (ULONG)ctxmenulab[CMID_URLOPENTAB],
+ PMIA_ID,CMID_URLOPENTAB,
+ PMIA_UserData,curbox->href,
+ TAG_DONE),
+ PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL,
+ PMIA_Title, (ULONG)ctxmenulab[CMID_COPYURL],
+ PMIA_ID,CMID_COPYURL,
+ PMIA_UserData,curbox->href,
+ TAG_DONE),
TAG_DONE),
+ TAG_DONE),
~0);
-
+ }
+
+ if (curbox->object)
+ {
IDoMethod(gwin->objects[OID_MENU],PM_INSERT,
NewObject(POPUPMENU_GetItemClass(), NULL,
- PMIA_Title, (ULONG)ami_utf8_easy((char *)messages_get("SaveURL")),
- PMIA_ID,CMID_SAVEURL,
- PMIA_UserData,curbox->href,
+ PMIA_Title, (ULONG)ctxmenulab[CMSUB_OBJECT],
+ PMSIMPLESUB,
+ PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL,
+ PMIA_Title, (ULONG)ctxmenulab[CMID_SHOWOBJ],
+ PMIA_ID,CMID_SHOWOBJ,
+ PMIA_UserData,curbox->object->url,
+ TAG_DONE),
+ PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL,
+ PMIA_Title, (ULONG)ctxmenulab[CMID_COPYOBJ],
+ PMIA_ID,CMID_COPYOBJ,
+ PMIA_UserData,curbox->object->url,
+ TAG_DONE),
TAG_DONE),
+ TAG_DONE),
~0);
- }
-
- if (curbox->object)
- {
- IDoMethod(gwin->objects[OID_MENU],PM_INSERT,
- NewObject(POPUPMENU_GetItemClass(), NULL,
- PMIA_Title, (ULONG)ami_utf8_easy((char *)messages_get("ObjShow")),
- PMIA_ID,CMID_SHOWOBJ,
- PMIA_UserData,curbox->object->url,
- TAG_DONE),
- ~0);
-
- IDoMethod(gwin->objects[OID_MENU],PM_INSERT,
- NewObject(POPUPMENU_GetItemClass(), NULL,
- PMIA_Title, (ULONG)ami_utf8_easy((char *)messages_get("ObjSave")),
- PMIA_ID,CMID_SAVEOBJ,
- PMIA_UserData,curbox->object->url,
- TAG_DONE),
- ~0);
-
}
if (curbox->gadget)
@@ -94,9 +143,9 @@
case GADGET_FILE:
IDoMethod(gwin->objects[OID_MENU],PM_INSERT,
NewObject(POPUPMENU_GetItemClass(), NULL,
- PMIA_Title, (ULONG)ami_utf8_easy((char *)messages_get("SelectFile")),
+ PMIA_Title, (ULONG)ctxmenulab[CMID_SELECTFILE],
PMIA_ID,CMID_SELECTFILE,
- PMIA_UserData,curbox->gadget,
+ PMIA_UserData,curbox,
TAG_DONE),
~0);
break;
@@ -113,6 +162,7 @@
int32 itemid = 0;
struct gui_window_2 *gwin = hook->h_Data;
APTR userdata = NULL;
+ struct browser_window *bw;
if(GetAttrs(item,PMIA_ID,&itemid,
PMIA_UserData,&userdata,
@@ -121,20 +171,51 @@
switch(itemid)
{
case CMID_SELECTFILE:
- printf("select file - gadget %lx\n",userdata);
+ if(AslRequestTags(filereq,
+ ASLFR_TitleText,messages_get("NetSurf"),
+ ASLFR_Screen,scrn,
+ ASLFR_DoSaveMode,FALSE,
+ TAG_DONE))
+ {
+ struct box *box = userdata;
+ char *utf8_fn;
+ char fname[1024];
+ int x,y;
+
+ strlcpy(&fname,filereq->fr_Drawer,1024);
+ AddPart(fname,filereq->fr_File,1024);
+
+ if(utf8_from_local_encoding(fname,0,&utf8_fn) != UTF8_CONVERT_OK)
+ {
+ warn_user("NoMemory","");
+ break;
+ }
+
+ free(box->gadget->value);
+ box->gadget->value = utf8_fn;
+
+ box_coords(box, (int *)&x, (int *)&y);
+ gui_window_redraw(gwin->bw->window,x,y,
+ x + box->width,
+ y + box->height);
+ }
break;
case CMID_COPYURL:
- printf("add to clipboard: %s\n",userdata);
+ case CMID_COPYOBJ:
+ ami_easy_clipboard((char *)userdata);
+ break;
+
+ case CMID_URLOPENWIN:
+ bw = browser_window_create(userdata,gwin->bw, gwin->bw->current_content->url, true, false);
+ break;
+
+ case CMID_URLOPENTAB:
+ bw = browser_window_create(userdata,gwin->bw, gwin->bw->current_content->url, true, true);
break;
case CMID_SHOWOBJ:
- browser_window_go(gwin->bw,userdata,NULL,true);
- break;
-
- case CMID_SAVEOBJ:
- case CMID_SAVEURL:
- printf("download: %s\n",userdata);
+ browser_window_go(gwin->bw,userdata,gwin->bw->current_content->url,true);
break;
}
}
Modified: trunk/netsurf/amiga/context_menu.h
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/context_menu.h?rev=...
==============================================================================
--- trunk/netsurf/amiga/context_menu.h (original)
+++ trunk/netsurf/amiga/context_menu.h Sat Oct 25 11:37:08 2008
@@ -23,10 +23,16 @@
enum {
CMID_SELECTFILE,
CMID_COPYURL,
- CMID_SAVEURL,
+ CMID_URLOPENWIN,
+ CMID_URLOPENTAB,
CMID_SHOWOBJ,
- CMID_SAVEOBJ
+ CMID_COPYOBJ,
+ CMSUB_OBJECT,
+ CMSUB_URL,
+ CMID_LAST
};
+void ami_context_menu_init(void);
+void ami_context_menu_free(void);
void ami_context_menu_show(struct gui_window_2 *gwin,int x,int y);
#endif
Modified: trunk/netsurf/amiga/dist/NetSurf.guide
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/dist/NetSurf.guide?...
==============================================================================
--- trunk/netsurf/amiga/dist/NetSurf.guide (original)
+++ trunk/netsurf/amiga/dist/NetSurf.guide Sat Oct 25 11:37:08 2008
@@ -34,7 +34,8 @@
@{b}theme@{ub} Path to theme (default is Resources/Themes/Default - an alternative included theme is Resources/Themes/AISS)
@{b}no_iframes@{ub} Disable IFrames
@{b}clipboard_write_utf8@{ub} Write UTF-8 strings to the clipboard along with a charset identifier (when this option is 0, NetSurf will convert copied strings to local charset)
-@{b}throbber_frames@{ub} Not used (now in theme description file)
+@{b}context_menu@{ub} Enable context menus
+@{b}sticky_context_menu@{ub} When disabled, context menu requires mouse button to be held down to keep it visible
@{b}truecolour_mouse_pointers@{ub} Use 32-bit mouse pointers, when disabled NetSurf will use old-style 4 colour images (see Resources/Pointers)
@{b}os_mouse_pointers@{ub} Don't override default and busy mouse pointers
@{b}always_open_tabs@{ub} Force opening tabs instead of windows (actually swaps the functions so ctrl-click now opens windows and middle mouse button opens tabs)
Modified: trunk/netsurf/amiga/dist/netsurf.readme
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/dist/netsurf.readme...
==============================================================================
--- trunk/netsurf/amiga/dist/netsurf.readme (original)
+++ trunk/netsurf/amiga/dist/netsurf.readme Sat Oct 25 11:37:08 2008
@@ -4,7 +4,7 @@
Type: comm/www
Version: 2.0 development (SVN 5591)
Architecture: ppc-amigaos >= 4.0.0
-Requires: AISS
+Requires: AISS, dev/c/pthreads.lha
This is a preview release of the OS4 native port of NetSurf.
It is beta software, which means it is unstable and missing
Modified: trunk/netsurf/amiga/gui.c
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/gui.c?rev=5629&r1=5...
==============================================================================
--- trunk/netsurf/amiga/gui.c (original)
+++ trunk/netsurf/amiga/gui.c Sat Oct 25 11:37:08 2008
@@ -39,8 +39,6 @@
#include <libraries/gadtools.h>
#include <proto/layers.h>
#include <proto/asl.h>
-#include <proto/iffparse.h>
-#include <datatypes/textclass.h>
#include <datatypes/pictureclass.h>
#include "desktop/selection.h"
#include "utils/utf8.h"
@@ -53,12 +51,10 @@
#include <intuition/pointerclass.h>
#include <math.h>
#include <workbench/workbench.h>
-#include "amiga/iff_cset.h"
#include <proto/datatypes.h>
#include <proto/icon.h>
#include <workbench/icon.h>
#include "amiga/tree.h"
-#include <parserutils/charset/mibenum.h>
#include "utils/utils.h"
#include "amiga/login.h"
#include "utils/url.h"
@@ -68,6 +64,7 @@
#include "amiga/history.h"
#include "amiga/context_menu.h"
#include "amiga/cookies.h"
+#include "amiga/clipboard.h"
#ifdef WITH_HUBBUB
#include <hubbub/hubbub.h>
@@ -112,7 +109,6 @@
BOOL rmbtrapped;
static struct RastPort dummyrp;
-struct IFFHandle *iffh = NULL;
#define AMI_LASTPOINTER GUI_POINTER_PROGRESS+1
Object *mouseptrobj[AMI_LASTPOINTER+1];
@@ -193,13 +189,7 @@
ami_arexx_init();
- if(iffh = AllocIFF())
- {
- if(iffh->iff_Stream = OpenClipboard(0))
- {
- InitIFFasClip(iffh);
- }
- }
+ ami_clipboard_init();
win_destroyed = false;
@@ -323,6 +313,7 @@
/* end Amiupdate */
ami_init_menulabs();
+ if(option_context_menu) ami_context_menu_init();
schedule_list = NewObjList();
window_list = NewObjList();
@@ -571,7 +562,11 @@
break;
case MENUDOWN:
- ami_context_menu_show(gwin,x,y);
+ if(!option_sticky_context_menu) ami_context_menu_show(gwin,x,y);
+ break;
+
+ case MENUUP:
+ if(option_sticky_context_menu) ami_context_menu_show(gwin,x,y);
break;
}
}
@@ -1053,6 +1048,8 @@
if(!option_use_wb) CloseScreen(scrn);
p96FreeBitMap(dummyrp.BitMap);
FreeVec(nsscreentitle);
+
+ if(option_context_menu) ami_context_menu_free();
ami_free_menulabs();
for(i=0;i<=AMI_LASTPOINTER;i++)
@@ -1065,8 +1062,7 @@
}
}
- if(iffh->iff_Stream) CloseClipboard((struct ClipboardHandle *)iffh->iff_Stream);
- if(iffh) FreeIFF(iffh);
+ ami_clipboard_free();
ami_arexx_cleanup();
FreeSysObject(ASOT_PORT,appport);
@@ -2425,150 +2421,6 @@
{
}
-void gui_drag_save_selection(struct selection *s, struct gui_window *g)
-{
-}
-
-void gui_start_selection(struct gui_window *g)
-{
-}
-
-void gui_paste_from_clipboard(struct gui_window *g, int x, int y)
-{
- /* This and the other clipboard code is heavily based on the RKRM examples */
- struct ContextNode *cn;
- ULONG rlen=0,error;
- struct CSet cset;
- char *clip;
- STRPTR readbuf = AllocVec(1024,MEMF_CLEAR);
-
- cset.CodeSet = 0;
-
- if(OpenIFF(iffh,IFFF_READ)) return;
- if(StopChunk(iffh,ID_FTXT,ID_CHRS)) return;
- if(StopChunk(iffh,ID_FTXT,ID_CSET)) return;
-
- while(1)
- {
- error = ParseIFF(iffh,IFFPARSE_SCAN);
- if(error == IFFERR_EOC) continue;
- else if(error) break;
-
- cn = CurrentChunk(iffh);
-
- if((cn)&&(cn->cn_Type == ID_FTXT)&&(cn->cn_ID == ID_CSET))
- {
- rlen = ReadChunkBytes(iffh,&cset,24);
- }
-
- if((cn)&&(cn->cn_Type == ID_FTXT)&&(cn->cn_ID == ID_CHRS))
- {
- while((rlen = ReadChunkBytes(iffh,readbuf,1024)) > 0)
- {
- if(cset.CodeSet == 0)
- {
- utf8_from_local_encoding(readbuf,rlen,&clip);
- }
- else
- {
- utf8_from_enc(readbuf,parserutils_charset_mibenum_to_name(cset.CodeSet),rlen,&clip);
- }
-
- browser_window_paste_text(g->shared->bw,clip,rlen,true);
- }
- if(rlen < 0) error = rlen;
- }
- }
- CloseIFF(iffh);
-}
-
-bool gui_empty_clipboard(void)
-{
-}
-
-bool gui_add_to_clipboard(const char *text, size_t length, bool space)
-{
- char *buffer;
- if(option_utf8_clipboard)
- {
- WriteChunkBytes(iffh,text,length);
- }
- else
- {
- utf8_to_local_encoding(text,length,&buffer);
- if(buffer) WriteChunkBytes(iffh,buffer,strlen(buffer));
- ami_utf8_free(buffer);
- }
- return true;
-}
-
-bool gui_commit_clipboard(void)
-{
- if(iffh) CloseIFF(iffh);
-
- return true;
-}
-
-bool ami_clipboard_copy(const char *text, size_t length, struct box *box,
- void *handle, const char *whitespace_text,size_t whitespace_length)
-{
- if(!(PushChunk(iffh,0,ID_CHRS,IFFSIZE_UNKNOWN)))
- {
- if (whitespace_text)
- {
- if(!gui_add_to_clipboard(whitespace_text,whitespace_length, false)) return false;
- }
-
- if(text)
- {
- if (!gui_add_to_clipboard(text, length, box->space)) return false;
- }
-
- PopChunk(iffh);
- }
- else
- {
- PopChunk(iffh);
- return false;
- }
-
- return true;
-}
-
-bool gui_copy_to_clipboard(struct selection *s)
-{
- struct CSet cset = {0};
-
- if(!(OpenIFF(iffh,IFFF_WRITE)))
- {
- if(!(PushChunk(iffh,ID_FTXT,ID_FORM,IFFSIZE_UNKNOWN)))
- {
- if(option_utf8_clipboard)
- {
- if(!(PushChunk(iffh,0,ID_CSET,24)))
- {
- cset.CodeSet = 106; // UTF-8
- WriteChunkBytes(iffh,&cset,24);
- PopChunk(iffh);
- }
- }
-
- if (s->defined && selection_traverse(s, ami_clipboard_copy, NULL))
- {
- gui_commit_clipboard();
- return true;
- }
- }
- else
- {
- PopChunk(iffh);
- }
- CloseIFF(iffh);
- }
-
- return false;
-}
-
void gui_create_form_select_menu(struct browser_window *bw,
struct form_control *control)
{
Modified: trunk/netsurf/amiga/iff_cset.h
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/iff_cset.h?rev=5629...
==============================================================================
--- trunk/netsurf/amiga/iff_cset.h (original)
+++ trunk/netsurf/amiga/iff_cset.h Sat Oct 25 11:37:08 2008
@@ -18,6 +18,7 @@
#ifndef AMIGA_IFF_CSET_H
#define AMIGA_IFF_CSET_H
+#include <exec/types.h>
/* This structure is for the IFF CSET chunk, registered by Martin Taillefer */
Modified: trunk/netsurf/amiga/options.h
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/options.h?rev=5629&...
==============================================================================
--- trunk/netsurf/amiga/options.h (original)
+++ trunk/netsurf/amiga/options.h Sat Oct 25 11:37:08 2008
@@ -29,6 +29,7 @@
extern bool option_no_iframes;
extern bool option_utf8_clipboard;
extern bool option_context_menu;
+extern bool option_sticky_context_menu;
extern bool option_truecolour_mouse_pointers;
extern bool option_use_os_pointers;
extern bool option_force_tabs;
@@ -45,7 +46,8 @@
char *option_theme = 0; \
bool option_no_iframes = false; \
bool option_utf8_clipboard = false; \
-bool option_context_menu = false; \
+bool option_context_menu = true; \
+bool option_sticky_context_menu = true; \
bool option_truecolour_mouse_pointers = true; \
bool option_use_os_pointers = false; \
bool option_force_tabs = false; \
@@ -63,6 +65,7 @@
{ "no_iframes", OPTION_BOOL, &option_no_iframes}, \
{ "clipboard_write_utf8", OPTION_BOOL, &option_utf8_clipboard}, \
{ "context_menu", OPTION_BOOL, &option_context_menu}, \
+{ "sticky_context_menu", OPTION_BOOL, &option_sticky_context_menu}, \
{ "truecolour_mouse_pointers", OPTION_BOOL, &option_truecolour_mouse_pointers}, \
{ "os_mouse_pointers", OPTION_BOOL, &option_use_os_pointers}, \
{ "always_open_tabs", OPTION_BOOL, &option_force_tabs}, \
Modified: trunk/netsurf/amiga/plotters.c
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/plotters.c?rev=5629...
==============================================================================
--- trunk/netsurf/amiga/plotters.c (original)
+++ trunk/netsurf/amiga/plotters.c Sat Oct 25 11:37:08 2008
@@ -307,7 +307,7 @@
ri.RGBFormat = RGBFB_R8G8B8A8;
max_width = (repeat_x ? scrn->Width : width);
- max_height = (repeat_y ? scrn->Height: height);
+ max_height = (repeat_y ? scrn->Height : height);
for(xf=0;xf<max_width;xf+=bitmap->width)
{
14 years, 3 months