1920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson/*
2920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Copyright (C) 2010 Google Inc.
3920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson *
4920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Licensed under the Apache License, Version 2.0 (the "License");
5920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * you may not use this file except in compliance with the License.
6920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * You may obtain a copy of the License at
7920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson *
8920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * http://www.apache.org/licenses/LICENSE-2.0
9920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson *
10920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Unless required by applicable law or agreed to in writing, software
11920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * distributed under the License is distributed on an "AS IS" BASIS,
12920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * See the License for the specific language governing permissions and
14920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * limitations under the License.
157b826470e9556e0aa2709d8d77ccfbbd7087acdbDavid Friedman *
16920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson */
17920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
18920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonpackage com.google.doclava;
19920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
20920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport com.google.clearsilver.jsilver.data.Data;
21920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
22920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.io.*;
23920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.util.regex.Pattern;
24920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.util.regex.Matcher;
25920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
26920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
27920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonpublic class DocFile {
2871bf8d2ae787c28691910bb228a5d9efca9b153dScott Main  public static final Pattern LINE = Pattern.compile("(.*)[\r]?\n", Pattern.MULTILINE);
2971bf8d2ae787c28691910bb228a5d9efca9b153dScott Main  public static final Pattern PROP = Pattern.compile("([^=]+)=(.*)");
30920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
31920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public static String readFile(String filename) {
32920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    try {
33920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      File f = new File(filename);
34920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      int length = (int) f.length();
35920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      FileInputStream is = new FileInputStream(f);
36920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      InputStreamReader reader = new InputStreamReader(is, "UTF-8");
37920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      char[] buf = new char[length];
38920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      int index = 0;
39920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      int amt;
40920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      while (true) {
41920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        amt = reader.read(buf, index, length - index);
42920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
43920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        if (amt < 1) {
44920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson          break;
45920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        }
46920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
47920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        index += amt;
48920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      }
49920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return new String(buf, 0, index);
50920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } catch (IOException e) {
51920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return null;
52920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
53920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
54920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
552e6abf56dc0d6f8f65b632d8097def1de7f0b027Dirk Dougherty  public static String[] DEVSITE_VALID_LANGS = {"en", "es", "id", "in", "ja", "ko",
567ef2a3f8c63298a273c097fedfd8362fe8903768David Friedman      "ru", "vi", "zh-cn", "zh-tw", "pt-br"};
579b316c84e2e15268db79772d9cef60da1df488ecDirk Dougherty
589b316c84e2e15268db79772d9cef60da1df488ecDirk Dougherty  public static String getPathRoot(String filename) {
598bfc32ba1c79cdc576101944346f66112b1a3776Dirk Dougherty    //look for a valid lang string in the file path. If found,
608bfc32ba1c79cdc576101944346f66112b1a3776Dirk Dougherty    //snip the intl/lang from the path.
618bfc32ba1c79cdc576101944346f66112b1a3776Dirk Dougherty    for (String t : DEVSITE_VALID_LANGS) {
628bfc32ba1c79cdc576101944346f66112b1a3776Dirk Dougherty      int langStart = filename.indexOf("/" + t + "/");
638bfc32ba1c79cdc576101944346f66112b1a3776Dirk Dougherty      if (langStart > -1) {
648bfc32ba1c79cdc576101944346f66112b1a3776Dirk Dougherty        int langEnd = filename.indexOf("/", langStart + 1);
658bfc32ba1c79cdc576101944346f66112b1a3776Dirk Dougherty        filename = filename.substring(langEnd + 1);
668bfc32ba1c79cdc576101944346f66112b1a3776Dirk Dougherty        break;
679b316c84e2e15268db79772d9cef60da1df488ecDirk Dougherty      }
689b316c84e2e15268db79772d9cef60da1df488ecDirk Dougherty    }
698bfc32ba1c79cdc576101944346f66112b1a3776Dirk Dougherty    return filename;
709b316c84e2e15268db79772d9cef60da1df488ecDirk Dougherty  }
718bfc32ba1c79cdc576101944346f66112b1a3776Dirk Dougherty
728a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty  public static Data getPageMetadata (String docfile, Data hdf) {
738a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty    //utility method for extracting metadata without generating file output.
748a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty    if (hdf == null) {
758a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty      hdf = Doclava.makeHDF();
768a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty    }
778a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty    String filedata = readFile(docfile);
788a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty
798a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty    // The document is properties up until the line "@jd:body".
808a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty    // Any blank lines are ignored.
818a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty    int start = -1;
828a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty    int lineno = 1;
838a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty    Matcher lines = LINE.matcher(filedata);
848a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty    String line = null;
858a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty    while (lines.find()) {
868a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty      line = lines.group(1);
878a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty      if (line.length() > 0) {
888a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty        if (line.equals("@jd:body")) {
898a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty          start = lines.end();
908a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty          break;
918a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty        }
928a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty        Matcher prop = PROP.matcher(line);
938a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty        if (prop.matches()) {
948a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty          String key = prop.group(1);
958a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty          String value = prop.group(2);
968a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty          hdf.setValue(key, value);
978a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty        } else {
988a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty          break;
998a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty        }
1008a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty      }
1018a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty      lineno++;
1028a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty    }
1038a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty    if (start < 0) {
1048a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty      System.err.println(docfile + ":" + lineno + ": error parsing docfile");
1058a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty      if (line != null) {
1068a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty        System.err.println(docfile + ":" + lineno + ":" + line);
1078a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty      }
1088a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty      System.exit(1);
1098a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty    }
1108a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty    return hdf;
1118a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty  }
1128a8f7912692bcf9f984a7a24eaf47da69b6d2992Dirk Dougherty
113e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty  public static void writePage(String docfile, String relative, String outfile, Data hdf) {
114920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
115920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    /*
116920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson     * System.out.println("docfile='" + docfile + "' relative='" + relative + "'" + "' outfile='" +
117920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson     * outfile + "'");
118920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson     */
119e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty    if (hdf == null) {
120fb76810d270d603810031f6e1dfabcce5d387dcesmain@google.com      hdf = Doclava.makeHDF();
121fb76810d270d603810031f6e1dfabcce5d387dcesmain@google.com    }
122920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    String filedata = readFile(docfile);
123920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
124920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    // The document is properties up until the line "@jd:body".
125920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    // Any blank lines are ignored.
126920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    int start = -1;
127920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    int lineno = 1;
128920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    Matcher lines = LINE.matcher(filedata);
129920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    String line = null;
130920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    while (lines.find()) {
131920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      line = lines.group(1);
132920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      if (line.length() > 0) {
133920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        if (line.equals("@jd:body")) {
134920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson          start = lines.end();
135920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson          break;
136920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        }
137920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        Matcher prop = PROP.matcher(line);
138920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        if (prop.matches()) {
139920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson          String key = prop.group(1);
140920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson          String value = prop.group(2);
141920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson          hdf.setValue(key, value);
142920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        } else {
143920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson          break;
144920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        }
145920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      }
146920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      lineno++;
147920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
148920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (start < 0) {
149920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      System.err.println(docfile + ":" + lineno + ": error parsing docfile");
150920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      if (line != null) {
151920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        System.err.println(docfile + ":" + lineno + ":" + line);
152920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      }
153920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      System.exit(1);
154920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
155920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
156920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    // if they asked to only be for a certain template, maybe skip it
157920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    String fromTemplate = hdf.getValue("template.which", "");
158920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    String fromPage = hdf.getValue("page.onlyfortemplate", "");
159920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (!"".equals(fromPage) && !fromTemplate.equals(fromPage)) {
160920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return;
161920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
162920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
163920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    // and the actual text after that
164920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    String commentText = filedata.substring(start);
165920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
166920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    Comment comment = new Comment(commentText, null, new SourcePositionInfo(docfile, lineno, 1));
167920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    TagInfo[] tags = comment.tags();
168920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
169920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    TagInfo.makeHDF(hdf, "root.descr", tags);
170920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
171920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    hdf.setValue("commentText", commentText);
172920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
173920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    // write the page using the appropriate root template, based on the
174920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    // whichdoc value supplied by build
175920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    String fromWhichmodule = hdf.getValue("android.whichmodule", "");
176920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (fromWhichmodule.equals("online-pdk")) {
177920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      // leaving this in just for temporary compatibility with pdk doc
178920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      hdf.setValue("online-pdk", "true");
179920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      // add any conditional login for root template here (such as
180920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      // for custom left nav based on tab etc.
181920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      ClearPage.write(hdf, "docpage.cs", outfile);
182920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else {
1833c925b473212325cbf5f734cb5d1d57588ea83e3Scott Main      String filename = outfile;
184d676a0d2c47bd5de95497dfd092f877a5525de98Dirk Dougherty      // Special case handling of samples files for devsite
185d676a0d2c47bd5de95497dfd092f877a5525de98Dirk Dougherty      // locale handling -- strip out the en/ root
186d676a0d2c47bd5de95497dfd092f877a5525de98Dirk Dougherty      if (Doclava.USE_DEVSITE_LOCALE_OUTPUT_PATHS) {
187d676a0d2c47bd5de95497dfd092f877a5525de98Dirk Dougherty        filename = filename.replaceFirst("^en/", "");
188d676a0d2c47bd5de95497dfd092f877a5525de98Dirk Dougherty      }
189fb76810d270d603810031f6e1dfabcce5d387dcesmain@google.com      // Strip out the intl and lang id substr and get back just the
190fb76810d270d603810031f6e1dfabcce5d387dcesmain@google.com      // guide, design, distribute, etc.
1919b316c84e2e15268db79772d9cef60da1df488ecDirk Dougherty      filename = getPathRoot(filename);
19204029c1a118976266be5d1e2d915fced5c2c59c6Dirk Dougherty
193c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      // map types to design, dev, distribute etc.
194c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      if (filename.indexOf("design") == 0) {
195c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("design", "true");
196c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.type", "design");
197c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.category", "design");
198c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("develop") == 0) {
199c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("develop", "true");
200c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.type", "develop");
201c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.category", "develop");
202c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("guide") == 0) {
203c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("guide", "true");
204c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.type", "develop");
205c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        if (filename.indexOf("guide/topics/manif") == 0) {
206c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("page.category", "app manifest");
207c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        } else {
208c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("page.category", "guide");
209c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        }
210c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("training") == 0) {
211c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("training", "true");
212c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.type", "develop");
213c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.category", "training");
214c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("more") == 0) {
215c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("more", "true");
216c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("google") == 0) {
217c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("google", "true");
218c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.type", "develop");
219c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.category", "google");
220c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("samples") == 0) {
221c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("samples", "true");
222c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("samplesDocPage", "true");
223c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.type", "develop");
224c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.category", "samples");
225c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        if (Doclava.samplesNavTree != null) {
226c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("samples_toc_tree", Doclava.samplesNavTree.getValue("samples_toc_tree", ""));
227c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        }
228c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("topic/") == 0) {
229c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("topic", "true");
230c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.type", "develop");
231c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        if (filename.indexOf("topic/libraries") == 0) {
232c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("page.category", "libraries");
23304029c1a118976266be5d1e2d915fced5c2c59c6Dirk Dougherty          hdf.setValue("page.type", "develop");
234c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("libraries", "true");
235c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        } else if (filename.indexOf("topic/instant-apps") == 0) {
236c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("instantapps", "true");
23704029c1a118976266be5d1e2d915fced5c2c59c6Dirk Dougherty          hdf.setValue("page.type", "develop");
238c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("page.category", "instant apps");
239c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        } else if (filename.indexOf("topic/performance") == 0) {
240c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("perf", "true");
24104029c1a118976266be5d1e2d915fced5c2c59c6Dirk Dougherty          hdf.setValue("page.type", "develop");
242c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("page.category", "performance");
243c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        } else if (filename.indexOf("topic/arc") == 0) {
244c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("arc", "true");
245ca9c54fbcb1d3423525e33f4cab8aa14ebd0b60bAmanda Kassay          hdf.setValue("page.type", "develop");
246c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("page.category", "arc");
247c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        }
248c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("distribute") == 0) {
249c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("distribute", "true");
250c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.type", "distribute");
251c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.category", "distribute");
252c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        if (filename.indexOf("distribute/googleplay") == 0) {
253c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("page.category", "googleplay");
25404029c1a118976266be5d1e2d915fced5c2c59c6Dirk Dougherty          hdf.setValue("page.type", "distribute");
255c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("googleplay", "true");
256c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        } else if (filename.indexOf("distribute/essentials") == 0) {
257c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("page.category", "essentials");
258c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("essentials", "true");
259c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        } else if (filename.indexOf("distribute/users") == 0) {
260c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("page.category", "users");
261c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("users", "true");
262c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        } else if (filename.indexOf("distribute/engage") == 0) {
263c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("page.category", "engage");
264c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("engage", "true");
265c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        } else if (filename.indexOf("distribute/monetize") == 0) {
266c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("page.category", "monetize");
267c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("monetize", "true");
268c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        } else if (filename.indexOf("distribute/analyze") == 0) {
269c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("page.category", "analyze");
270c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("analyze", "true");
271c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        } else if (filename.indexOf("distribute/tools") == 0) {
272c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("page.category", "essentials");
273c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("essentials", "true");
274c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        } else if (filename.indexOf("distribute/stories") == 0) {
275c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("page.category", "stories");
276c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("stories", "true");
277c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        }
278c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("about") == 0) {
279c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("about", "true");
280c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.type", "about");
281c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.category", "about");
282c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        if ((filename.indexOf("about/versions") == 0)) {
283c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("versions", "true");
284c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("page.category", "versions");
285c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        //todo remove this because there's no file at this location
286c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        } else if ((filename.indexOf("wear") == 0)) {
28704029c1a118976266be5d1e2d915fced5c2c59c6Dirk Dougherty          hdf.setValue("wear", "true");
28804029c1a118976266be5d1e2d915fced5c2c59c6Dirk Dougherty          hdf.setValue("page.category", "wear");
289c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        } else if ((filename.indexOf("tv") == 0)) {
29004029c1a118976266be5d1e2d915fced5c2c59c6Dirk Dougherty          hdf.setValue("tv", "true");
29104029c1a118976266be5d1e2d915fced5c2c59c6Dirk Dougherty          hdf.setValue("page.category", "tv");
292c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        } else if ((filename.indexOf("auto") == 0)) {
29304029c1a118976266be5d1e2d915fced5c2c59c6Dirk Dougherty          hdf.setValue("auto", "true");
294c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com          hdf.setValue("page.category", "auto");
295fb76810d270d603810031f6e1dfabcce5d387dcesmain@google.com        }
296c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("wear/preview") == 0) {
297c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("wearpreview", "true");
298c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.type", "about");
299c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.category", "wear preview");
300c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("devices") == 0) {
301c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("devices", "true");
302c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.type", "devices");
303c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("source") == 0) {
304c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("source", "true");
305c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("security") == 0) {
306c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("security", "true");
307c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("compatibility") == 0) {
308c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("compatibility", "true");
309c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("wear") == 0) {
310c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("wear", "true");
311c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("about", "true");
312c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.type", "about");
313c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.category", "wear");
314c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("work") == 0) {
315c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("work", "true");
316c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.type", "about");
317c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.category", "work");
318c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("preview") == 0) {
319c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.type", "develop");
320c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.category", "preview");
321c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("preview", "true");
322c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("auto") == 0) {
323c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("auto", "true");
324c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("about", "true");
325c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.type", "about");
326c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.category", "auto");
327c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else if (filename.indexOf("tv") == 0) {
328c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("tv", "true");
329c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("about", "true");
330c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.type", "about");
331c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.category", "tv");
332c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com      } else {
333c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("about", "true");
334c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.type", "about");
335c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com        hdf.setValue("page.category", "about");
3363c925b473212325cbf5f734cb5d1d57588ea83e3Scott Main      }
337c7db8642549605ec8d13868cdc6a6efab64cacf1smain@google.com
338d22901d925c81bb0045a467a6222ede55e97a593Dirk Dougherty      //set metadata for this file in jd_lists_unified
339d22901d925c81bb0045a467a6222ede55e97a593Dirk Dougherty      PageMetadata.setPageMetadata(docfile, relative, outfile, hdf, Doclava.sTaglist);
3408bfc32ba1c79cdc576101944346f66112b1a3776Dirk Dougherty
341d676a0d2c47bd5de95497dfd092f877a5525de98Dirk Dougherty      //for devsite builds, remove 'intl/' from output paths for localized files
342d676a0d2c47bd5de95497dfd092f877a5525de98Dirk Dougherty      if (Doclava.USE_DEVSITE_LOCALE_OUTPUT_PATHS) {
343d676a0d2c47bd5de95497dfd092f877a5525de98Dirk Dougherty        outfile = outfile.replaceFirst("^intl/", "");
344d676a0d2c47bd5de95497dfd092f877a5525de98Dirk Dougherty      }
345d676a0d2c47bd5de95497dfd092f877a5525de98Dirk Dougherty
346b86c636ae3e4ce6e6bbb776a6549219bba49c028smain@google.com      ClearPage.write(hdf, "docpage.cs", outfile);
347920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
348920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  } // writePage
34955c140c9c9d4d8d63d59a308196211da125a8fc9Amanda Kassay}
350