--- xpointer.c~ 2012-02-28 21:56:32.000000000 -0500 +++ xpointer.c 2012-05-22 15:25:38.313438224 -0400 @@ -1007,21 +1007,14 @@ NEXT; break; } - *cur++ = CUR; } else if (CUR == '(') { level++; - *cur++ = CUR; } else if (CUR == '^') { - NEXT; - if ((CUR == ')') || (CUR == '(') || (CUR == '^')) { - *cur++ = CUR; - } else { - *cur++ = '^'; - *cur++ = CUR; + if ((NXT(1) == ')') || (NXT(1) == '(') || (NXT(1) == '^')) { + NEXT; } - } else { - *cur++ = CUR; } + *cur++ = CUR; NEXT; } *cur = 0;