view src/luan/modules/parsers/BBCodeLuan.java @ 1705:a6e27c8e7ef4

bbcode now returns data
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 03 Jul 2022 21:59:38 -0600
parents 8ad468cc88d4
children 6c9aea554691
line wrap: on
line source

package luan.modules.parsers;

import java.util.List;
import java.util.Map;
import luan.LuanTable;
import luan.LuanException;
import luan.modules.Utils;
import goodjava.bbcode.BBCode;


public final class BBCodeLuan {

	public static Object parse(String text)
		throws LuanException
	{
		Utils.checkNotNull(text,1);
		Object obj = BBCode.parse(text);
		return convert(obj);
	}

	private static Object convert(Object obj) throws LuanException {
		if( obj instanceof String )
			return obj;
		if( obj instanceof BBCode.Element )
			return convert((BBCode.Element)obj);
		if( obj instanceof List )
			return convert((List)obj);
		throw new RuntimeException("invalid obj: "+obj);
	}

	private static LuanTable convert(List list) throws LuanException {
		LuanTable t = new LuanTable();
		for( Object obj : list ) {
			t.rawAdd( convert(obj) );
		}
		return t;
	}

	private static LuanTable convert(BBCode.Element el) throws LuanException {
		LuanTable t = new LuanTable();
		t.rawPut( "name", el.name );
		Object param = el.param;
		Object contents = el.contents;
		Map<String,String> extra = el.extra;
		if( param != null )
			t.rawPut( "param", param );
		t.rawPut( "contents", convert(contents) );
		if( extra != null ) {
			for( Map.Entry<String,String> entry : extra.entrySet() ) {
				t.rawPut( entry.getKey(), entry.getValue() );
			}
		}
		return t;
	}

}