feat: Detect background color info in VRML 1 and encode it in VRML 97 (#11)

Resolves #7

Reviewed-on: #11
Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Co-committed-by: Glen Whitney <glen@studioinfinity.org>
This commit is contained in:
Glen Whitney 2023-09-05 06:27:27 +00:00 committed by Glen Whitney
parent 8a0ece1dde
commit b355d0c001
2 changed files with 17 additions and 4 deletions

View File

@ -1,6 +1,6 @@
{
name: 'vrml1to97',
version: '0.1.0',
version: '0.1.1',
description: 'JavaScript converter from VRML 1 to VRML97',
scripts: {
test: 'echo "Error: no test specified" && exit 1',

View File

@ -143,14 +143,27 @@ function parse(stream: Lexer, tree: Tree = {}): Tree
else
parse stream // discard the subgroup
held = filtered stream
if not held or held.type === 'cbrace' then break
{ht: 'word', hv: 'vertexOrdering', nt: 'word', nv: 'COUNTERCLOCKWISE'}
tree.vertexOrdering = ['ccw']
held = filtered stream
if not held or held.type === 'cbrace' then break
{ht: 'word', hv: 'BackgroundColor', nt: 'word', nv: 'Info'}
opener := filtered stream
if opener and opener.type === 'obrace'
contents := toksUntilClose stream
// Find the first string token and assume it is the color
stok := contents.find .type[0] === 'string'
colorString := stok?.value[0]
if colorString and typeof colorString === 'string'
color := colorString.replace /^"|"$/g, ''
addChild `Background {
groundColor [ ${color} ]
skyColor [ ${color} ]
}\n`, tree
held = filtered stream
else held = opener
else
held = next // ignore unknown words
if not held or held.type === 'cbrace' then break
if not held or held.type === 'cbrace' then break
if held and held.type !== 'cbrace'
console.log 'Oddly ended up with held', held
tree