anchor.diff:      }
   }
   
  +class markdown_link extends markdown_node {
  +    String link;
  +    markdown_link(String _link, String content) : super() {
  +        link = _link;
  +        children.add(new markdown_plaintext(content));
  +    }
  +
  +    String generate_html() {
  +        String ret = "<a href=\"${link}\">";
  +        for (markdown_node cur in children) {
  +            ret = "${ret}${cur.generate_html()}";
  +        }
  +        ret = "${ret}</a>";
  +        return ret;
  +    }
  +}
  +
   /** 
    * Convert markdown to HTML
    * 
  
positive.code:     }, process: generate_markdown_emphasis));
      regular_expressions.add(new markdown_regex(backslash_underscore, (Match found) {
                  return new markdown_plaintext(found.group(1));
      }, process: generate_markdown_emphasis));
      
      bool found_match = false;
  
negative.code:     RegExp spaced_underscore = new RegExp(r" (_) ");
      RegExp backslash_asterix = new RegExp(r"\\(\*)");
      RegExp backslash_underscore = new RegExp(r"\\(_)");
  
      RegExp link = new RegExp(r"\[([^\]]+)\]\(([^)]+)\)");
      
      regular_expressions.add(new markdown_regex(single_asterix, (Match found) {
                  return new markdown_emphasis(found.group(1));
  