-
Notifications
You must be signed in to change notification settings - Fork 44
/
InputOps.scala
114 lines (99 loc) · 4.68 KB
/
InputOps.scala
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
/*
* Copyright 2012-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package laika.io.ops
import cats.effect.Async
import laika.api.builder.OperationConfig
import laika.io.internal.model.DirectoryInput
import laika.io.model.{ FileFilter, FilePath, InputTree, InputTreeBuilder }
import scala.io.Codec
/** API for specifying the tree of character inputs for a parsing operation.
*
* It allows any class merging in this trait to define all input related operations
* in terms of the only abstract method `fromInput`.
*
* @author Jens Halm
*/
private[io] trait InputOps[F[_]] {
protected def F: Async[F]
/** The type of the result returned by all operations of this trait.
*/
type Result
/** The configuration to use for all input operations.
*/
def config: OperationConfig
/** Builder step that instructs the runtime to parse files from the
* specified directory and its subdirectories.
*
* @param name the name of the directory to traverse
* @param codec the character encoding of the files, if not specified the platform default will be used.
*/
def fromDirectory(name: String)(implicit codec: Codec): Result =
fromDirectory(FilePath.parse(name), DirectoryInput.hiddenFileFilter)(codec)
/** Builder step that instructs the runtime to parse files from the
* specified directory and its subdirectories.
*
* @param name the name of the directory to traverse
* @param exclude the files to exclude from processing
* @param codec the character encoding of the files, if not specified the platform default will be used.
*/
def fromDirectory(name: String, exclude: FileFilter)(implicit codec: Codec): Result =
fromDirectory(FilePath.parse(name), exclude)(codec)
/** Builder step that instructs the runtime to parse files from the
* specified directory and its subdirectories.
*
* @param dir the root directory to traverse
* @param codec the character encoding of the files, if not specified the platform default will be used.
*/
def fromDirectory(dir: FilePath)(implicit codec: Codec): Result =
fromDirectory(dir, DirectoryInput.hiddenFileFilter)(codec)
/** Builder step that instructs the runtime to parse files from the
* specified directory and its subdirectories.
*
* @param dir the root directory to traverse
* @param exclude the files to exclude from processing
* @param codec the character encoding of the files, if not specified the platform default will be used.
*/
def fromDirectory(dir: FilePath, exclude: FileFilter)(implicit codec: Codec): Result =
fromDirectories(Seq(dir), exclude)(codec)
/** Builder step that instructs the runtime to parse files from the
* specified directories and its subdirectories, merging them into
* a tree with a single root.
*
* @param roots the root directories to traverse
* @param codec the character encoding of the files, if not specified the platform default will be used.
*/
def fromDirectories(roots: Seq[FilePath])(implicit codec: Codec): Result =
fromDirectories(roots, DirectoryInput.hiddenFileFilter)(codec)
/** Builder step that instructs the runtime to parse files from the
* specified directories and its subdirectories, merging them into
* a tree with a single root.
*
* @param roots the root directories to traverse
* @param exclude the files to exclude from processing
* @param codec the character encoding of the files, if not specified the platform default will be used.
*/
def fromDirectories(roots: Seq[FilePath], exclude: FileFilter)(implicit codec: Codec): Result =
fromInput(InputTree[F](exclude)(F).addDirectories(roots))
/** Builder step that instructs the runtime to use the specified input builder for all parsing operations.
*
* This is the most generic way to specify the input as it allows to freely compose inputs from multiple
* directories, files, streams, the classpath or in-memory inputs.
* All other methods in this trait are mere shortcuts that delegate to this method.
*
* @param input the input tree to process
*/
def fromInput(input: InputTreeBuilder[F]): Result
}