/**
  * Return the value of the source attribute if it exists.
  *
  * @param node the node containing attributes
  * @return the source path or {@code null} if not defined
  */
 private String getScriptSourcePath(XmlTagNode node) {
   for (XmlAttributeNode attribute : node.getAttributes()) {
     if (attribute.getName().getLexeme().equals(SRC)) {
       String text = attribute.getText();
       return text != null && text.length() > 0 ? text : null;
     }
   }
   return null;
 }
 /**
  * Determine if the specified node is a Dart script.
  *
  * @param node the node to be tested (not {@code null})
  * @return {@code true} if the node is a Dart script
  */
 private boolean isScriptNode(XmlTagNode node) {
   if (node.getTagNodes().size() != 0 || !node.getTag().getLexeme().equals(SCRIPT)) {
     return false;
   }
   for (XmlAttributeNode attribute : node.getAttributes()) {
     if (attribute.getName().getLexeme().equals(TYPE)) {
       Token valueToken = attribute.getValue();
       if (valueToken != null) {
         String value = valueToken.getLexeme();
         if (value.equals(APPLICATION_DART_IN_DOUBLE_QUOTES)
             || value.equals(APPLICATION_DART_IN_SINGLE_QUOTES)) {
           return true;
         }
       }
     }
   }
   return false;
 }