Hi list,

Here is my current design and a technical discussion.  Any feedback is 
appreciated.  Please ignore if you don't want to peak under the hood.

Background material:
1) Regular Expressions

2) Cartesian Coordinates.


I use Cartesian Coordinates for the SignPuddle data.  We start with a 
2-dimensional canvas.  Both the width and the height are divided into 
specific points to create a grid.  The center of the grid is point 
(0,0).  The horizontal position is called the X value.  The vertical 
position is called the Y value.

-x         |          +x

In my current design, the x and y values are unlimited.  Negative to the 
top-left.  Positive to the bottom-right.

In general, the challenge I face is to create a string that represents a 
specific coordinate.  My current string has the form "n100x100" for the 
coordinate (-100,100)".  Simply replace the "-" minus sign with an "n" 
and replace the "," comma with an "x".  The purpose of these 
replacements is to enable double click selection.  The "n" and the "x" 
continue the string without a character that creates a gap.

Regular Expressions allow for efficient searching and pattern matching.  
Regular expressions are simple and powerful when used correctly.  They 
can easily become overly complex and difficult to understand.

The current coordinate characters can be described with the regular 
expression pattern:

This can be understood in parts.

n? , may or may not have an "n"

[0-9] , select one value between 0 and 9.

[0-9]+ , select one or more digits

x , match the character "x"

I've run into a problem that general searching is inefficient or slow.  
This is due to Unicode and the current form of the coordinate value.  
More accurate searching is forcing me use overly complex Regular 
Expressions features, like negative lookahead.

I think I need to change the form of my coordinates so that searching is 
efficient and accurate.  I am considering a new form of coordinate 
string that is a simple value 6 digits long.

The pattern can be described as "[0-9]{6}".   Understood in parts as:

[0-9] , select one value between 0 and 9.
[0-9]{6} , select six values between 0 and 9.

I will limit both the X and Y axis to the values -500 to +499.  The 
center is still (0,0).

Here is the coordinate string for (0,0): "500500".  The string is 
divided in half.  The first 3 digits are for the X value and the last 3 
digits are used for the Y value.  Simply subtract 500 from the value in 
the string.  To go in the reverse, simply add 500 to the value and 
combine the Y and Y values.  For example, the coordinate (111,111) would 
have a string of "611611" and the coordinate (-15,-20) would have the 
string "485480".

Depending on speed experiments, I may duplicate the SignPuddle XML files 
with ASCII rather then the Preliminary Unicode.  Large files have a lot 
of wasted overhead processing UTF-8 and Unicode values.

Thoughts? Opinions?