Class: Ox::Sax::Value
- Inherits:
-
Object
- Object
- Ox::Sax::Value
- Defined in:
- ext/ox/sax_as.c,
ext/ox/sax_as.c
Overview
Values in the SAX callbacks. They can be converted to various different types. with the _as_x()_ methods.
Instance Method Summary collapse
-
#as_bool ⇒ Object
return value as an boolean.
-
#as_f ⇒ Object
return value as an Float.
-
#as_i ⇒ Object
return value as an Fixnum.
-
#as_s ⇒ Object
return value as an String.
-
#as_sym ⇒ Object
return value as an Symbol.
-
#as_time ⇒ Object
return value as an Time.
-
#empty ⇒ Boolean
return true if the value is empty.
Instance Method Details
#as_bool ⇒ Object
return value as an boolean.
235 236 237 238 |
# File 'ext/ox/sax_as.c', line 235
static VALUE
sax_value_as_bool(VALUE self) {
return (0 == strcasecmp("true", ((SaxDrive)DATA_PTR(self))->buf.str)) ? Qtrue : Qfalse;
}
|
#as_f ⇒ Object
return value as an Float.
164 165 166 167 168 169 170 171 172 |
# File 'ext/ox/sax_as.c', line 164
static VALUE
sax_value_as_f(VALUE self) {
SaxDrive dr = DATA_PTR(self);
if ('\0' == *dr->buf.str) {
return Qnil;
}
return rb_float_new(strtod(dr->buf.str, 0));
}
|
#as_i ⇒ Object
return value as an Fixnum.
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
# File 'ext/ox/sax_as.c', line 178
static VALUE
sax_value_as_i(VALUE self) {
SaxDrive dr = DATA_PTR(self);
const char *s = dr->buf.str;
long n = 0;
int neg = 0;
if ('\0' == *s) {
return Qnil;
}
if ('-' == *s) {
neg = 1;
s++;
} else if ('+' == *s) {
s++;
}
for (; '\0' != *s; s++) {
if ('0' <= *s && *s <= '9') {
n = n * 10 + (*s - '0');
} else {
rb_raise(ox_arg_error_class, "Not a valid Fixnum.\n");
}
}
if (neg) {
n = -n;
}
return LONG2NUM(n);
}
|
#as_s ⇒ Object
return value as an String.
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'ext/ox/sax_as.c', line 118
static VALUE
sax_value_as_s(VALUE self) {
SaxDrive dr = DATA_PTR(self);
VALUE rs;
if ('\0' == *dr->buf.str) {
return Qnil;
}
if (dr->options.convert_special) {
ox_sax_collapse_special(dr, dr->buf.str, dr->buf.pos, dr->buf.line, dr->buf.col);
}
switch (dr->options.skip) {
case CrSkip:
buf_collapse_return(dr->buf.str);
break;
case SpcSkip:
buf_collapse_white(dr->buf.str);
break;
default:
break;
}
rs = rb_str_new2(dr->buf.str);
if (0 != dr->encoding) {
rb_enc_associate(rs, dr->encoding);
}
return rs;
}
|
#as_sym ⇒ Object
return value as an Symbol.
150 151 152 153 154 155 156 157 158 |
# File 'ext/ox/sax_as.c', line 150
static VALUE
sax_value_as_sym(VALUE self) {
SaxDrive dr = DATA_PTR(self);
if ('\0' == *dr->buf.str) {
return Qnil;
}
return str2sym(dr, dr->buf.str, strlen(dr->buf.str), 0);
}
|
#as_time ⇒ Object
return value as an Time.
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 |
# File 'ext/ox/sax_as.c', line 211
static VALUE
sax_value_as_time(VALUE self) {
SaxDrive dr = DATA_PTR(self);
const char *str = dr->buf.str;
VALUE t;
if ('\0' == *str) {
return Qnil;
}
if (Qnil == (t = parse_double_time(str)) &&
Qnil == (t = parse_xsd_time(str))) {
VALUE args[1];
/*printf("**** time parse\n"); */
*args = rb_str_new2(str);
t = rb_funcall2(ox_time_class, ox_parse_id, 1, args);
}
return t;
}
|
#empty ⇒ Boolean
return true if the value is empty.
244 245 246 247 |
# File 'ext/ox/sax_as.c', line 244
static VALUE
sax_value_empty(VALUE self) {
return ('\0' == *((SaxDrive)DATA_PTR(self))->buf.str) ? Qtrue : Qfalse;
}
|