/**
* Parse an un-interned unit:
* unit := <name> [";" <symbol> [";" <dim> [";" <scale> [";" <offset>]]]]
*/
private static Unit parseUnit(string s)
{
string idStrs = s;
int c = s.IndexOf(';');
if (c > 0)
{
idStrs = s.Substring(0, c);
}
List ids = FanStr.split(idStrs, Long.valueOf(','));
if (c < 0)
{
return(new Unit(ids, m_dimensionless, 1, 0));
}
string dim = s = s.Substring(c + 1).Trim();
c = s.IndexOf(';');
if (c < 0)
{
return(new Unit(ids, parseDim(dim), 1, 0));
}
dim = s.Substring(0, c).Trim();
string scale = s = s.Substring(c + 1).Trim();
c = s.IndexOf(';');
if (c < 0)
{
return(new Unit(ids, parseDim(dim), Double.parseDouble(scale), 0));
}
scale = s.Substring(0, c).Trim();
string offset = s.Substring(c + 1).Trim();
return(new Unit(ids, parseDim(dim), Double.parseDouble(scale), Double.parseDouble(offset)));
}