//
// Copyright (c) 2010, Brian Frank and Andy Frank
// Licensed under the Academic Free License version 3.0
//
// History:
// 27 Jul 10 Andy Frank Creation
//
**
** JsUnitDatabase
**
class JsUnitDatabase
{
Void write(OutStream out)
{
// open etc/sys/units.txt
in := Env.cur.findFile(`etc/sys/units.txt`).in
out.printLine(
"(function () {
${JsPod.requireSys}
")
// parse each line
curQuantityName := ""
in.readAllLines.each |line|
{
// skip comment and blank lines
line = line.trim
if (line.startsWith("//") || line.size == 0) return
// quanity sections delimited as "-- name (dim)"
if (line.startsWith("--"))
{
name := line[2..<line.index("(")].trim
if (name != curQuantityName)
{
// close off last def
if (curQuantityName.size > 0)
{
out.printLine("}")
writeImmutable(out, curQuantityName)
}
// start new def
curQuantityName = name
out.printLine(
"// $curQuantityName
fan.sys.Unit.m_quantityNames.add('$curQuantityName');
with (fan.sys.Unit.m_quantities['$curQuantityName'] = fan.sys.List.make(fan.sys.Unit.\$type))
{")
}
return
}
// add unit
out.printLine(" add(fan.sys.Unit.define('$line'));")
}
// finish up
out.printLine("}")
writeImmutable(out, curQuantityName)
out.printLine("fan.sys.Unit.m_quantityNames = fan.sys.Unit.m_quantityNames.toImmutable();")
out.printLine("}).call(this);")
}
private Void writeImmutable(OutStream out, Str quantityName)
{
out.printLine("fan.sys.Unit.m_quantities['$quantityName'] = " +
"fan.sys.Unit.m_quantities['$quantityName'].toImmutable();")
}
}