@@ -18,25 +18,37 @@ module.exports = function shredMapProcessor(log, createDocMessage) {
18
18
var fragToJadeMap = { } ;
19
19
20
20
docs . forEach ( function ( doc ) {
21
- var jadePath = path . join ( options . jadeDir , doc . fileInfo . relativePath ) ;
21
+ var relativePath = doc . fileInfo . relativePath ;
22
+ var jadePath = path . join ( options . jadeDir , relativePath ) ;
23
+ var lang = relativePath . substr ( 0 , relativePath . indexOf ( '\/' ) ) ;
24
+ var appProjDirName = jadeBaseFileNameToExampleName ( doc . fileInfo . baseName ) ;
22
25
var fragInfoSet = { } ;
23
26
doc . fragItems . forEach ( function ( fragItem ) {
24
27
var mixinPath = fragItem . mixinPath ;
25
28
var fullExamplePath ;
29
+ // Normalize mixinPath: strip out optional trailing '(...)'
30
+ var mixinPath = mixinPath . replace ( / \( [ ^ \) ] * \) / , '' ) ;
26
31
if ( mixinPath . indexOf ( '_api' ) >= 0 ) {
27
32
var sourcePath = mixinPath . replace ( '_api/' , '' ) ;
28
33
fullExamplePath = path . join ( options . apiExamplesDir , sourcePath ) ;
29
34
} else {
30
35
fullExamplePath = path . join ( options . devguideExamplesDir , mixinPath ) ;
31
36
}
32
- var region = fragItem . region ? "-" + fragItem . region : '' ;
33
- var extn = path . extname ( mixinPath ) ;
34
- var basename = path . basename ( mixinPath , extn ) ;
35
- var fragDir = path . dirname ( mixinPath ) ;
36
- var fragPath = path . join ( fragDir , basename + region + extn ) + '.md' ;
37
- var fullFragPath = path . join ( options . fragmentsDir , fragPath ) ;
38
-
39
- var fragInfo = { fragPath : fullFragPath , examplePath : fullExamplePath , exists : fs . existsSync ( fullFragPath ) } ;
37
+ var fragInfo = makeFragInfo ( options . fragmentsDir , fullExamplePath , fragItem , mixinPath ) ;
38
+ if ( ! fragInfo . exists ) {
39
+ var savedFragInfo = fragInfo ;
40
+ // Assume that mixinPath is actually app-project-folder relative and
41
+ // prepend "lang/appProjDirName":
42
+ var appProjRelPath = mixinPath ;
43
+ mixinPath = appProjDirName + '/' + lang + '/' + mixinPath ;
44
+ fragInfo = makeFragInfo ( options . fragmentsDir , fullExamplePath , fragItem , mixinPath ) ;
45
+ if ( fragInfo . exists ) {
46
+ log . info ( 'Ajusted example path (' + doc . fileInfo . baseName + '): ' + appProjRelPath + ' -> ' + mixinPath ) ;
47
+ } else {
48
+ fragInfo = savedFragInfo ;
49
+ }
50
+ }
51
+ var fragPath = fragInfo . relFragPath ;
40
52
fragInfoSet [ fragPath ] = fragInfo ;
41
53
if ( fragInfo . exists ) {
42
54
var jadePathsSet = fragToJadeMap [ fragPath ] ;
@@ -46,7 +58,7 @@ module.exports = function shredMapProcessor(log, createDocMessage) {
46
58
}
47
59
jadePathsSet [ jadePath ] = jadePath ;
48
60
} else {
49
- var relativePath = path . relative ( "." , fullFragPath ) ;
61
+ var relativePath = path . relative ( "." , fragInfo . fragPath ) ;
50
62
log . warn ( createDocMessage ( 'Invalid example (unable to locate fragment file: "' + relativePath + '")' , doc ) ) ;
51
63
}
52
64
} ) ;
@@ -82,13 +94,24 @@ module.exports = function shredMapProcessor(log, createDocMessage) {
82
94
}
83
95
} ;
84
96
85
- function getExampleName ( fragPath ) {
86
- // pattern to isolate base fileName and extension from fragment name
87
- var rx = / ( .* ) \- ( .* ) \. ( .s ) / ;
88
- var r = rx . exec ( fragPath ) ;
89
- if ( r ) {
90
- return r [ 1 ] + '.' + r [ 3 ] ;
91
- } else {
92
- return fragPath ;
93
- }
97
+ // TODO: use the functionality in public/resources/js/util.js once it lands.
98
+ function jadeBaseFileNameToExampleName ( name ) {
99
+ // Adjust for known cases where chapter name is not the example name.
100
+ var matches = name . match ( / ( t o h - ) p t ( \d + ) / ) ;
101
+ if ( matches ) name = matches [ 1 ] + matches [ 2 ] ;
102
+ return name ;
103
+ }
104
+
105
+ function makeFragInfo ( fragmentsDir , fullExamplePath , fragItem , mixinPath ) {
106
+ var region = fragItem . region ? "-" + fragItem . region : '' ;
107
+ var extn = path . extname ( mixinPath ) ;
108
+ var basename = path . basename ( mixinPath , extn ) ;
109
+ var fragDir = path . dirname ( mixinPath ) ;
110
+ var fragPath = path . join ( fragDir , basename + region + extn ) + '.md' ;
111
+ var fullFragPath = path . join ( fragmentsDir , fragPath ) ;
112
+ return {
113
+ fragPath : fullFragPath ,
114
+ relFragPath : fragPath ,
115
+ examplePath : fullExamplePath ,
116
+ exists : fs . existsSync ( fullFragPath ) } ;
94
117
}
0 commit comments