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.
226 227 228 229 230 231 |
# File 'ext/ox/sax_as.c', line 226
static VALUE sax_value_as_bool(VALUE self) {
SaxDrive dr;
TypedData_Get_Struct(self, struct _saxDrive, &ox_sax_value_type, dr);
return (0 == strcasecmp("true", dr->buf.str)) ? Qtrue : Qfalse;
}
|
#as_f ⇒ Object
return value as an Float.
151 152 153 154 155 156 157 158 159 160 |
# File 'ext/ox/sax_as.c', line 151
static VALUE sax_value_as_f(VALUE self) {
SaxDrive dr;
TypedData_Get_Struct(self, struct _saxDrive, &ox_sax_value_type, dr);
if ('\0' == *dr->buf.str) {
return Qnil;
}
return rb_float_new(strtod(dr->buf.str, 0));
}
|
#as_i ⇒ Object
return value as an Fixnum.
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'ext/ox/sax_as.c', line 166
static VALUE sax_value_as_i(VALUE self) {
SaxDrive dr;
const char *s;
long n = 0;
int neg = 0;
TypedData_Get_Struct(self, struct _saxDrive, &ox_sax_value_type, dr);
s = dr->buf.str;
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.
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'ext/ox/sax_as.c', line 108
static VALUE sax_value_as_s(VALUE self) {
SaxDrive dr;
VALUE rs;
TypedData_Get_Struct(self, struct _saxDrive, &ox_sax_value_type, dr);
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.
136 137 138 139 140 141 142 143 144 145 |
# File 'ext/ox/sax_as.c', line 136
static VALUE sax_value_as_sym(VALUE self) {
SaxDrive dr;
TypedData_Get_Struct(self, struct _saxDrive, &ox_sax_value_type, dr);
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.
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 |
# File 'ext/ox/sax_as.c', line 201
static VALUE sax_value_as_time(VALUE self) {
SaxDrive dr;
const char *str;
VALUE t;
TypedData_Get_Struct(self, struct _saxDrive, &ox_sax_value_type, dr);
str = dr->buf.str;
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.
237 238 239 240 241 242 |
# File 'ext/ox/sax_as.c', line 237
static VALUE sax_value_empty(VALUE self) {
SaxDrive dr;
TypedData_Get_Struct(self, struct _saxDrive, &ox_sax_value_type, dr);
return ('\0' == *dr->buf.str) ? Qtrue : Qfalse;
}
|