X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=generate-documentation.py;h=2f91503500fee20986a72c4980a03b388b341255;hb=80e653aa7a48cd48dbcaf24dff5d5b99417d91e7;hp=e06c223608c557a2407fd7d9f0fd930730cd438c;hpb=88b1e0523dbc8d0dd9186592e8b633ccb014adbe;p=dygraphs.git
diff --git a/generate-documentation.py b/generate-documentation.py
index e06c223..2f91503 100755
--- a/generate-documentation.py
+++ b/generate-documentation.py
@@ -1,12 +1,21 @@
#!/usr/bin/python
+
+# Generate docs/options.html
+
import json
import glob
import re
+import sys
+
+# Set this to the path to a test file to get debug output for just that test
+# file. Can be helpful to figure out why a test is not being shown for a
+# particular option.
+debug_tests = [] # [ 'tests/zoom.html' ]
# Pull options reference JSON out of dygraph.js
js = ''
in_json = False
-for line in file('dygraph.js'):
+for line in file('dygraph-options-reference.js'):
if '' in line:
in_json = True
elif '' in line:
@@ -40,37 +49,129 @@ def find_braces(txt):
# Find text followed by a colon. These won't all be options, but those that
# have the same name as a Dygraph option probably will be.
-prop_re = re.compile(r'\b([a-zA-Z0-9]+):')
-for test_file in glob.glob('tests/*.html'):
+prop_re = re.compile(r'\b([a-zA-Z0-9]+) *:')
+tests = debug_tests or glob.glob('tests/*.html')
+for test_file in tests:
braced_html = find_braces(file(test_file).read())
+ if debug_tests:
+ print braced_html
+
ms = re.findall(prop_re, braced_html)
for opt in ms:
+ if debug_tests: print '\n'.join(ms)
if opt in docs and test_file not in docs[opt]['tests']:
docs[opt]['tests'].append(test_file)
+if debug_tests: sys.exit(0)
+
+# Extract a labels list.
+labels = []
+for nu, opt in docs.iteritems():
+ for label in opt['labels']:
+ if label not in labels:
+ labels.append(label)
+
+print """
+
+
+
+
Options Reference
+
Dygraphs tries to do a good job of displaying your data without any further configuration. But inevitably, you're going to want to tinker. Dygraphs provides a rich set of options for configuring its display and behavior.
+
+
Usage
+You specify options in the third parameter to the dygraphs constructor:
+
g = new Dygraph(div,
+ data,
+ {
+ option1: value1,
+ option2: value2,
+ ...
+ });
+
+
+After you've created a Dygraph, you can change an option by calling the updateOptions
method:
+g.updateOptions({
+ new_option1: value1,
+ new_option2: value2
+ });
+
+
+And, without further ado, here's the complete list of options:
+"""
+for label in sorted(labels):
+ print '%s
\n' % (label, label)
+
+ for opt_name in sorted(docs.keys()):
+ opt = docs[opt_name]
+ if label not in opt['labels']: continue
+ tests = opt['tests']
+ if not tests:
+ examples_html = 'NONE'
+ else:
+ examples_html = ' '.join(
+ '%s' % (f, name(f)) for f in tests)
+
+ if not opt['type']: opt['type'] = '(missing)'
+ if not opt['default']: opt['default'] = '(missing)'
+ if not opt['description']: opt['description'] = '(missing)'
+
+ print """
+
%(name)s
+ %(desc)s
+ Type: %(type)s
+ Default: %(default)s
+ Examples: %(examples_html)s
+
+ """ % { 'name': opt_name,
+ 'type': opt['type'],
+ 'default': opt['default'],
+ 'desc': opt['description'],
+ 'examples_html': examples_html}
+
+
+print """
+
+
+
+"""
+# This page was super-helpful:
+# http://jsbeautifier.org/