# $Id: Radiko.rb,v 1.8 2001/10/03 17:44:19 ser Exp $
# A class describing an Esperanto radical; that is, a morpheme
module EO
	class Radiko
		include Comparable

		def []( s )
			@vorto[s]
		end

		def length
			@vorto.length
		end
		
		def initialize( vorto, tipo, subtipo, angla )
			@vorto = vorto
			@tipo = tipo
			@subtipo = subtipo
			@angla = angla
		end

		def to_s
			@vorto
		end

		def <=>( other )
		  	other = other.vorto if other.is_a? Radiko
			return @vorto <=> other.to_s
		end

		def gramatiku
			vorto + " " + tipo + " " + subtipo + " " + angla
		end

		def longa_tipo
			TIPO[ @tipo ]
		end

		def longa_subtipo
			SUBTIPO[ @subtipo ]
		end

		def estasTipo?( tipo )
			tipo == @tipo
		end

		def estasSubtipo?( tipo )
			tipo == @subtipo
		end

		attr_reader :vorto, :angla, :tipo, :subtipo

		TIPO = { 
			"r" => "radiko",
			"w" => "memstara vorto",
			"c" => "korelativo",
			"s" => "sufikso",
			"g" => "gramatiko",
			"p" => "prefikso",
			"-" => "gamatika finajxo"
		}
		SUBTIPO = {
			"?" => "lacigxis",
			"!" => "interjekcio",
			"a" => "adjektivo",
			"e" => "adverbo",
			"i" => "netransitiva verbo",
			"I" => "transitiva verbo",
			"j" => "pluralo",
			"k" => "subjukcio",
			"K" => "konjunkcio",
			"l" => "demonstra adjektivo",
			"L" => "aux homo, aux demonstra pronomo",
			"m" => "prosubstantivo",
			"M" => "diversranga konjukcio",
			"n" => "akuzitivo",
			"N" => "numero",
			"o" => "substantivo",
			"O" => "PIV adverbo, sed fukcias kiel substantivo en frazo",
			"r" => "finajxo",
			"R" => "ke",
			"s" => "verba finajxo",
			"S" => "nomo aux ne rekonas",
			"u" => "prepozicio",
			"z" => "konjunkcio kio povas ligi aux simplaj frazoj aux substantivoj aux adjektivoj aux adverboj"
		}
	end
end
