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.
236 237 238 239 |
# File 'ext/ox/sax_as.c', line 236
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.
165 166 167 168 169 170 171 172 173 |
# File 'ext/ox/sax_as.c', line 165
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.
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 206 |
# File 'ext/ox/sax_as.c', line 179
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.
117 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 145 |
# File 'ext/ox/sax_as.c', line 117
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 HAVE_RB_ENC_ASSOCIATE
if (0 != dr->encoding) {
rb_enc_associate(rs, dr->encoding);
}
#endif
return rs;
}
|
#as_sym ⇒ Object
return value as an Symbol.
151 152 153 154 155 156 157 158 159 |
# File 'ext/ox/sax_as.c', line 151
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, 0);
}
|
#as_time ⇒ Object
return value as an Time.
212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 |
# File 'ext/ox/sax_as.c', line 212
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.
245 246 247 248 |
# File 'ext/ox/sax_as.c', line 245
static VALUE
sax_value_empty(VALUE self) {
return ('\0' == *((SaxDrive)DATA_PTR(self))->buf.str) ? Qtrue : Qfalse;
}
|