import urllib2 import HTMLParser class AsyLinkParser(HTMLParser.HTMLParser): def handle_starttag(self, tag, attrs): if not hasattr(self, "asy_files"): self.asy_files = [] if tag == "a": for attr in attrs: if attr[0] == "href" and attr[1].endswith(".asy"): self.asy_files.append(attr[1]) gallery_url_base = "http://asymptote.sourceforge.net/gallery/" parser = AsyLinkParser() parser.feed(urllib2.urlopen(gallery_url_base + ".index1.html").read()) parser.asy_files[:10] asy_data = [] skip_urls = ["intro.asy", # This file is missing "exp3.asy", # Compiling leads to a stack overflow? "galleon.asy", # Requires external data "westnile.asy", # Requires external data ] # These keywords suggest additional asymptote modules or tampering # with settings in an unexpected way. skip_list = ["cpkcolors", "embed", "logo", "settings"] for gallery_url in parser.asy_files: if gallery_url in skip_urls: continue asy_code = urllib2.urlopen(gallery_url_base + gallery_url).read() if not any([skip_word in asy_code for skip_word in skip_list]): asy_data.append({"code": asy_code, "name": gallery_url}) len(asy_data) from IPython.display import display, HTML import asymagic def display_asy(asy_data, start_index=0, end_index=-1): """Display subset of asymptote examples""" asy_codes = [tup["code"] for tup in asy_data[start_index : end_index]] with asymagic.TemporaryAsymptoteFile(asy_codes) as tmp_asy: for i, asy_file in enumerate(tmp_asy.asy_files): display(HTML("{asy}".format( base=gallery_url_base, asy=asy_data[i + start_index]["name"]))) display(asymagic.run_asy_file(asy_file)[0]) display_asy(asy_data, 0, 10) display_asy(asy_data, 10, 20) display_asy(asy_data, 20, 30) display_asy(asy_data, 30, 40) display_asy(asy_data, 40, 50) display_asy(asy_data, -10, -1)