@@ -18,25 +18,37 @@ module.exports = function shredMapProcessor(log, createDocMessage) {
1818 var fragToJadeMap = { } ;
1919
2020 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 ) ;
2225 var fragInfoSet = { } ;
2326 doc . fragItems . forEach ( function ( fragItem ) {
2427 var mixinPath = fragItem . mixinPath ;
2528 var fullExamplePath ;
29+ // Normalize mixinPath: strip out optional trailing '(...)'
30+ var mixinPath = mixinPath . replace ( / \( [ ^ \) ] * \) / , '' ) ;
2631 if ( mixinPath . indexOf ( '_api' ) >= 0 ) {
2732 var sourcePath = mixinPath . replace ( '_api/' , '' ) ;
2833 fullExamplePath = path . join ( options . apiExamplesDir , sourcePath ) ;
2934 } else {
3035 fullExamplePath = path . join ( options . devguideExamplesDir , mixinPath ) ;
3136 }
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 ;
4052 fragInfoSet [ fragPath ] = fragInfo ;
4153 if ( fragInfo . exists ) {
4254 var jadePathsSet = fragToJadeMap [ fragPath ] ;
@@ -46,7 +58,7 @@ module.exports = function shredMapProcessor(log, createDocMessage) {
4658 }
4759 jadePathsSet [ jadePath ] = jadePath ;
4860 } else {
49- var relativePath = path . relative ( "." , fullFragPath ) ;
61+ var relativePath = path . relative ( "." , fragInfo . fragPath ) ;
5062 log . warn ( createDocMessage ( 'Invalid example (unable to locate fragment file: "' + relativePath + '")' , doc ) ) ;
5163 }
5264 } ) ;
@@ -82,13 +94,24 @@ module.exports = function shredMapProcessor(log, createDocMessage) {
8294 }
8395} ;
8496
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 ) } ;
94117}
0 commit comments