Rev 2187 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* Copyright (C) 2011.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 or
* version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*/
package uk.me.parabola.mkgmap.typ;
import uk.me.parabola.imgfmt.app.typ.TypData;
import uk.me.parabola.mkgmap.scan.SyntaxException;
import uk.me.parabola.mkgmap.scan.TokenScanner;
/**
* Process lines from the draw order section of the typ.txt file.
*
* @author Steve Ratcliffe
*/
class DrawOrderSection
implements ProcessSection
{
private final TypData data
;
DrawOrderSection
(TypData data
) {
this.
data = data
;
}
/**
* There is only one tag in this section.
*/
public void processLine
(TokenScanner scanner,
String name,
String value
) {
if (!"Type".
equalsIgnoreCase(name
))
throw new SyntaxException
(scanner,
"Unrecognised keyword in draw order section: " + name
);
String[] typeDrawOrder = value.
split(",",-
1);
if (typeDrawOrder.
length !=
2)
throw new SyntaxException
(scanner,
"Unrecognised drawOrder type " + value
);
int fulltype
;
try {
fulltype =
Integer.
decode(typeDrawOrder
[0]);
} catch (NumberFormatException e
) {
throw new SyntaxException
(scanner,
"Bad number " + typeDrawOrder
[0]);
}
int type
;
int subtype =
0;
if (fulltype
>= 0x100
) {
type =
(fulltype
>>> 8) & 0x3fff
;
subtype = fulltype
& 0xff
;
} else {
type = fulltype
& 0xff
;
}
try {
int level =
Integer.
parseInt(typeDrawOrder
[1]);
data.
addPolygonStackOrder(level, type, subtype
);
} catch (NumberFormatException e
) {
throw new SyntaxException
(scanner,
"Bad number '" + typeDrawOrder
[1] +
"'");
}
}
/**
* Nothing to do, each line stands by itself.
*/
public void finish
(TokenScanner scanner
) {
}
}