Mercurial Hosting > luan
view src/luan/modules/parsers/Css.java @ 1289:8d54bcc0b6d3
add css style parser
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 31 Dec 2018 20:59:08 -0700 |
parents | |
children | f41919741100 |
line wrap: on
line source
package luan.modules.parsers; import luan.LuanState; import luan.LuanTable; import luan.lib.parser.Parser; public final class Css { public static LuanTable style(LuanState luan,String text) { return new Css(luan,text).parseStyle(); } private final LuanState luan; private final Parser parser; private Css(LuanState luan,String text) { this.luan = luan; this.parser = new Parser(text); } private LuanTable parseStyle() { LuanTable tbl = new LuanTable(luan); while( matchSpace() ); while( !parser.endOfInput() ) { int start = parser.currentIndex(); if( !matchPropertyChar() ) return null; while( matchPropertyChar() ); String prop = parser.textFrom(start).toLowerCase(); while( matchSpace() ); if( !parser.match(':') ) return null; start = parser.currentIndex(); while( !parser.endOfInput() && parser.noneOf(";") ); String val = parser.textFrom(start).trim(); tbl.rawPut(prop,val); parser.match(';'); while( matchSpace() ); } return tbl; } private boolean matchPropertyChar() { return parser.inCharRange('a','z') || parser.inCharRange('A','Z') || parser.inCharRange('0','9') || parser.anyOf("_-") ; } private boolean matchSpace() { return parser.anyOf(" \t\r\n"); } }