Chromium Code Reviews| Index: utils/dartdoc/files.dart |
| diff --git a/utils/dartdoc/files.dart b/utils/dartdoc/files.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..a75744c17756468091ea226355ee3711d671a64c |
| --- /dev/null |
| +++ b/utils/dartdoc/files.dart |
| @@ -0,0 +1,63 @@ |
| +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| +// for details. All rights reserved. Use of this source code is governed by a |
| +// BSD-style license that can be found in the LICENSE file. |
| + |
| +// Functions for working with files and paths. |
| + |
|
pquitslund
2011/12/05 18:14:58
Aside: it'd be great to start collecting handy uti
|
| +/** The path to the file currently being written to, relative to [outdir]. */ |
| +String _filePath; |
| + |
| +/** The file currently being written to. */ |
| +StringBuffer _file; |
| + |
| +FileSystem files; |
| + |
| +startFile(String path) { |
| + _filePath = path; |
| + _file = new StringBuffer(); |
| +} |
| + |
| +write(String s) { |
| + _file.add(s); |
| +} |
| + |
| +writeln(String s) { |
| + write(s); |
| + write('\n'); |
| +} |
| + |
| +endFile() { |
| + String outPath = '$outdir/$_filePath'; |
| + files.createDirectory(dirname(outPath), recursive: true); |
| + |
| + world.files.writeString(outPath, _file.toString()); |
| + _filePath = null; |
| + _file = null; |
| +} |
| + |
| +/** |
| + * Converts [absolute] which is understood to be a full path from the root of |
| + * the generated docs to one relative to the current file. |
| + */ |
| +String relativePath(String absolute) { |
| + // TODO(rnystrom): Walks all the way up to root each time. Shouldn't do this |
| + // if the paths overlap. |
| + return repeat('../', countOccurrences(_filePath, '/')) + absolute; |
| +} |
| + |
| +/** Gets the URL to the documentation for [library]. */ |
| +libraryUrl(Library library) => '${sanitize(library.name)}.html'; |
| + |
| +/** Gets the URL for the documentation for [type]. */ |
| +typeUrl(Type type) { |
| + // Always get the generic type to strip off any type parameters or arguments. |
| + // If the type isn't generic, genericType returns `this`, so it works for |
| + // non-generic types too. |
| + return '${sanitize(type.library.name)}/${type.genericType.name}.html'; |
| +} |
| + |
| +/** Gets the URL for the documentation for [member]. */ |
| +memberUrl(Member member) => '${typeUrl(member.declaringType)}#${member.name}'; |
| + |
| +/** Gets the anchor id for the document for [member]. */ |
| +memberAnchor(Member member) => '${member.name}'; |