From 02dbb08cdc13fd0c0029fb7c019eb5f24ed868fb Mon Sep 17 00:00:00 2001 From: Greg Spencer Date: Fri, 25 Jan 2019 08:48:52 -0800 Subject: [PATCH] Modify offline docs platform family for Dash/Zeal (#27053) This changes the DocSetPlatformFamily key to be "dartlang" instead of the name of the package (usually "flutter"). This is so that the IntelliJ plugin for Dash will be able to go directly to the docs for a symbol from a keystroke, instead of needing to search all the docsets each time. Without this, flutter isn't part of the list of package names it searches. After this, it finds the flutter docs because they're declared to be part of the "dartlang" family of docs. Dashing doesn't have a way to configure this, so we modify the Info.plist directly to make the change. --- dev/bots/docs.sh | 5 +++-- dev/docs/dashing_postprocess.dart | 29 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 dev/docs/dashing_postprocess.dart diff --git a/dev/bots/docs.sh b/dev/bots/docs.sh index 17d35afa3a..1984ea43bc 100755 --- a/dev/bots/docs.sh +++ b/dev/bots/docs.sh @@ -42,12 +42,13 @@ function create_offline_zip() { function create_docset() { # Must be run from "$FLUTTER_ROOT/dev/docs" # Must have dashing installed: go get -u github.com/technosophos/dashing - # Dashing produces a LOT of output (~30MB), so we redirect it, and just show - # the end of it if there was a problem. + # Dashing produces a LOT of log output (~30MB), so we redirect it, and just + # show the end of it if there was a problem. echo "Building Flutter docset." rm -rf flutter.docset (dashing build --source ./doc --config ./dashing.json > /tmp/dashing.log 2>&1 || (tail -100 /tmp/dashing.log; false)) && \ cp ./doc/flutter/static-assets/favicon.png ./flutter.docset/icon.png && \ + "$DART" ./dashing_postprocess.dart && \ tar cf flutter.docset.tar.gz --use-compress-program="gzip --best" flutter.docset } diff --git a/dev/docs/dashing_postprocess.dart b/dev/docs/dashing_postprocess.dart new file mode 100644 index 0000000000..f84b5d854f --- /dev/null +++ b/dev/docs/dashing_postprocess.dart @@ -0,0 +1,29 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:io'; + +/// This changes the DocSetPlatformFamily key to be "dartlang" instead of the +/// name of the package (usually "flutter"). +/// +/// This is so that the IntelliJ plugin for Dash will be able to go directly to +/// the docs for a symbol from a keystroke. Without this, flutter isn't part +/// of the list of package names it searches. After this, it finds the flutter +/// docs because they're declared here to be part of the "dartlang" family of +/// docs. +/// +/// Dashing doesn't have a way to configure this, so we modify the Info.plist +/// directly to make the change. +void main(List args) { + final File infoPlist = File('flutter.docset/Contents/Info.plist'); + String contents = infoPlist.readAsStringSync(); + + // Since I didn't want to add the XML package as a dependency just for this, + // I just used a regular expression to make this simple change. + final RegExp findRe = RegExp(r'''(\s*DocSetPlatformFamily\s*)[^<]+()''', multiLine: true); + contents = contents.replaceAllMapped(findRe, (Match match) { + return '${match.group(1)}dartlang${match.group(2)}'; + }); + infoPlist.writeAsStringSync(contents); +}