/* * call-seq: * token.cmp(other_token) -> bool * * Used to compare two tokens. Token is extended by Comparable so you can * also use +<+, +>+, +<=+, +>=+ etc. to compare tokens. * * Tokens are sorted by the position in the text at which they occur, ie * the start offset. If two tokens have the same start offset, (see * pos_inc=) then, they are sorted by the end offset and then * lexically by the token text. */ static VALUE frt_token_cmp(VALUE self, VALUE rother) { RToken *token, *other; int cmp; GET_TK(token, self); GET_TK(other, rother); if (token->start > other->start) { cmp = 1; } else if (token->start < other->start) { cmp = -1; } else { if (token->end > other->end) { cmp = 1; } else if (token->end < other->end) { cmp = -1; } else { cmp = strcmp(RSTRING(token->text)->ptr, RSTRING(other->text)->ptr); } } return INT2FIX(cmp); }