Robert Klemme
11/21/2007 10:48:00 AM
2007/11/21, Martin Durai <martin@angleritech.com>:
> Hi peter,
>
> i have attached my java code which i have to port to ruby. could you
> help me with this
>
> public char[] getTextCharacters(int [] holderForStartAndLength)
> {
> if( eventType == TEXT ) {
> if(usePC) {
> holderForStartAndLength[0] = pcStart;
> holderForStartAndLength[1] = pcEnd - pcStart;
> return pc;
> } else {
> holderForStartAndLength[0] = posStart;
> holderForStartAndLength[1] = posEnd - posStart;
> return buf;
>
> }
> } else if( eventType == START_TAG
> || eventType == END_TAG
> || eventType == CDSECT
> || eventType == COMMENT
> || eventType == ENTITY_REF
> || eventType == PROCESSING_INSTRUCTION
> || eventType == IGNORABLE_WHITESPACE
> || eventType == DOCDECL)
> {
> holderForStartAndLength[0] = posStart;
> holderForStartAndLength[1] = posEnd - posStart;
> return buf;
> } else if(eventType == START_DOCUMENT
> || eventType == END_DOCUMENT) {
> //throw new XmlPullParserException("no content available to
> read");
> holderForStartAndLength[0] = holderForStartAndLength[1] =
> -1;
> return null;
> } else {
> throw new IllegalArgumentException("unknown text eventType:
> "+eventType);
> }
> // String s = getText();
> // char[] cb = null;
> // if(s!= null) {
> // cb = s.toCharArray();
> // holderForStartAndLength[0] = 0;
> // holderForStartAndLength[1] = s.length();
> // } else {
> // }
> // return cb;
> }
>
> All these code comes unde java version of pull parser
First of all I would create a class for the return values, like
TextSubRange = Struct.new :text, :start, :end
Then I would change all the if (x==..||x==...) to use a case statement.
Btw, I would do the same to the Java code (i.e. create another class
and use "switch").
Cheers
robert
--
use.inject do |as, often| as.you_can - without end