Create attractive VASL scenarios, with loads of useful information embedded to assist with game play.
https://vasl-templates.org
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.8 KiB
81 lines
2.8 KiB
package vassal_shim ;
|
|
|
|
import java.io.FileOutputStream ;
|
|
import java.io.IOException ;
|
|
import javax.xml.transform.TransformerFactory ;
|
|
import javax.xml.transform.Transformer ;
|
|
import javax.xml.transform.OutputKeys ;
|
|
import javax.xml.transform.TransformerException ;
|
|
import javax.xml.transform.TransformerConfigurationException ;
|
|
import javax.xml.transform.dom.DOMSource ;
|
|
import javax.xml.transform.stream.StreamResult ;
|
|
import java.util.regex.Matcher ;
|
|
|
|
import org.w3c.dom.Document ;
|
|
import org.w3c.dom.NodeList ;
|
|
import org.w3c.dom.Node ;
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
public class Utils
|
|
{
|
|
|
|
public static void saveXml( Document doc, String fname )
|
|
throws IOException, TransformerConfigurationException, TransformerException
|
|
{
|
|
// save the XML
|
|
Transformer trans = TransformerFactory.newInstance().newTransformer() ;
|
|
trans.setOutputProperty( OutputKeys.INDENT, "yes" ) ;
|
|
trans.setOutputProperty( "{http://xml.apache.org/xslt}indent-amount", "4" ) ;
|
|
trans.setOutputProperty( OutputKeys.METHOD, "xml" ) ;
|
|
trans.setOutputProperty( OutputKeys.ENCODING, "UTF-8" ) ;
|
|
trans.transform( new DOMSource(doc), new StreamResult(new FileOutputStream(fname)) ) ;
|
|
}
|
|
|
|
public static String getNodeTextContent( Node node )
|
|
{
|
|
// get the text content for an XML node (just itself, no descendants)
|
|
StringBuilder buf = new StringBuilder() ;
|
|
NodeList childNodes = node.getChildNodes() ;
|
|
for ( int i=0 ; i < childNodes.getLength() ; ++i ) {
|
|
Node childNode = childNodes.item( i ) ;
|
|
if ( childNode.getNodeName().equals( "#text" ) )
|
|
buf.append( childNode.getTextContent() ) ;
|
|
}
|
|
return buf.toString() ;
|
|
}
|
|
|
|
public static String getCapturedGroup( Matcher matcher, String groupName, String defaultVal )
|
|
{
|
|
// get the captured group
|
|
try {
|
|
return matcher.group( groupName ) ;
|
|
} catch( IllegalArgumentException exc ) {
|
|
return defaultVal ;
|
|
}
|
|
}
|
|
|
|
public static boolean startsWith( String val, String target )
|
|
{
|
|
// check if a string starts with a target substring
|
|
if ( val.length() < target.length() )
|
|
return false ;
|
|
return val.substring( 0, target.length() ).equals( target ) ;
|
|
}
|
|
|
|
public static String printableString( String val )
|
|
{
|
|
// encode non-ASCII characters
|
|
if ( val == null )
|
|
return "<null>" ;
|
|
StringBuilder buf = new StringBuilder() ;
|
|
for ( char ch: val.toCharArray() ) {
|
|
if ( (int)ch >= 32 && (int)ch <= 127 )
|
|
buf.append( ch ) ;
|
|
else
|
|
buf.append( String.format( "<%02x>", (int)ch ) ) ;
|
|
}
|
|
return buf.toString() ;
|
|
}
|
|
|
|
}
|
|
|