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)