1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
import haxe.display.Position;
import haxe.macro.Context;
import haxe.macro.PositionTools;
class Main {
static function main() {
var s = "待到来年九月八";
posChecking("我花开后百花杀");
}
macro static function posChecking(expr) {
var info = PositionTools.getInfos(expr.pos);
var txtPos = PositionTools.make({
min: info.min,
max: info.max,
file: info.file + '.txt'
});
var hxLoc = PositionTools.toLocation(expr.pos);
var txtLoc = PositionTools.toLocation(txtPos);
if(!equalRanges(hxLoc.range, txtLoc.range)) {
var msg = 'position numbers should be the same';
Context.warning(msg, expr.pos);
Context.error(msg, txtPos);
}
return expr;
}
static function equalRanges(r1:Range, r2:Range):Bool {
return equalPositions(r1.start, r2.start) && equalPositions(r1.end, r2.end);
}
static function equalPositions(p1:Position, p2:Position) {
return p1.line == p2.line && p1.character == p2.character;
}
}
|