summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/doc/html/page/Source.scala
blob: ff42bbb9d077e473344a980ff82339a4cfc8e5fd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/* NSC -- new Scala compiler
 * Copyright 2007-2009 LAMP/EPFL
 * @author  David Bernard, Manohar Jonnalagedda
 */

package scala.tools.nsc
package doc
package html
package page

import model._
import comment._
import xml.{NodeSeq, Unparsed}
import java.io.File

class Source(sourceFile: File) extends HtmlPage {

  val path = List("source.html")

  val title = "Scaladoc: page source"

  val headers =
    NodeSeq.Empty

  val body =
    <body>
      <h1>Page source is not implmented yet</h1>
    </body>

    /*


    def readTextFromSrcDir(subPath: String) :Option[String] = {
      readTextFromFile(new File(sourceDir, subPath))
    }

    def readTextFromFile(f : File) :Option[String] = {
      if (f.exists) {
        Some(Source.fromFile(f)(Codec.default).getLines().mkString(""))
      } else {
        None
      }
    }


    def writeTextToFile(f : File, txt : String, header: Option[String], footer: Option[String]) {
      val out = new FileOutputStream(f)
      try {
        val enc = "UTF-8"
        header.foreach(s => out.write(s.getBytes(enc)))
        out.write(txt.getBytes(enc))
        footer.foreach(s => out.write(s.getBytes(enc)))
      } finally {
        try {
          out.close()
        } catch {
          case _ => //ignore
        }
      }
    }

    trait SourceHtmlizer {
      def scalaToHtml(src :File) : Option[File]
    }

    lazy val sourceHtmlizer : SourceHtmlizer = {
      if (cfg.htmlizeSource) {
        new SourceHtmlizer {

          val inDir: File = cfg.sourcedir
          val outDir: File = cfg.outputdir

          private def relativize(uri: URI, from: URI) = linkHelper.relativize(uri, from).getOrElse("__notFound__" + uri.getPath)

          def header(dest: URI) = Some("""
          <html>
          <head>
            <link href='""" + relativize(new URI("site:/_highlighter/SyntaxHighlighter.css"), dest) + """' rel='stylesheet' type='text/css'/>
            <script language='javascript' src='""" + relativize(new URI("site:/_highlighter/shAll.js"), dest) + """'></script>
          </head>
          <body>
            <pre name="code" class="scala" style="width:100%">
        """)

          def footer(dest: URI) = Some("""</pre>
            <script language='javascript'>
              dp.SyntaxHighlighter.ClipboardSwf = '""" + relativize(new URI("site:/_highlighter/clipboard.swf"), dest) + """';
              dp.SyntaxHighlighter.HighlightAll('code');
            </script>
          </body>
          </html>
        """)

          //TODO: escape the source code
          def scalaToHtml(src :File) = {
            val dest = new File(outDir, fileHelper.relativePathUnderDir(src, inDir) + ".html")
            if (!dest.exists || dest.lastModified < src.lastModified) {

              //we need to verify whether the directory we are trying to write to has already been created or not
              if(!dest.getParentFile.exists) dest.getParentFile.mkdirs

              val uri = linkHelper.uriFor(dest).get
              var txt = fileHelper.readTextFromFile(src).getOrElse("")
              txt = txt.replace("<", "&lt;")
              fileHelper.writeTextToFile(dest, txt, header(uri), footer(uri))
            }
            Some(dest)
          }

          def copyResources() {
            val loader = this.getClass().getClassLoader()
            val buf = new Array[Byte](1024)
            def copyResource(name: String) = fileHelper.copyResource("/scala/tools/nsc/doc/html/resource/", name, outDir, loader, buf)
            copyResource("_highlighter/clipboard.swf")
            copyResource("_highlighter/shAll.js")
            copyResource("_highlighter/SyntaxHighlighter.css")
          }

          copyResources()
        }
      } else {
        new SourceHtmlizer {
          def scalaToHtml(src :File) = None
        }
      }
    }
    */

}