All the docs related files (docs-app, doc-gen, content, etc)
are now to be found inside the `/aio` folder.
The related gulp tasks have been moved from the top level
gulp file to a new one inside the `/aio` folder.
The structure of the `/aio` folder now looks like:
```
/aio/
  build/         # gulp tasks
  content/       #MARKDOWN FILES for devguides, cheatsheet, etc
    devguides/
    cheatsheets/
  transforms/    #dgeni packages, templates, etc
  src/
    app/
    assets/
    content/    #HTML + JSON build artifacts produced by dgeni from /aio/content.
                #This dir is .gitignored-ed
  e2e/           #protractor tests for the doc viewer app
  node_modules/ #dependencies for both the doc viewer builds and the dgeni stuff
                #This dir is .gitignored-ed
  gulpfile.js   #Tasks for generating docs and building & deploying the doc viewer
```
Closes #14361
		
	
			
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| module.exports = function(encodeCodeBlock) {
 | |
|   // var MIXIN_PATTERN = /\S*\+\S*\(.*/;
 | |
|   return {
 | |
|     name: 'indentForMarkdown',
 | |
|     process: function(str, width) {
 | |
|       if (str == null || str.length === 0) {
 | |
|         return '';
 | |
|       }
 | |
|       width = width || 4;
 | |
| 
 | |
|       var lines = str.split('\n');
 | |
|       var newLines = [];
 | |
|       var sp = spaces(width);
 | |
|       var spMixin = spaces(width - 2);
 | |
|       var isAfterMarkdownTag = true;
 | |
|       lines.forEach(function(line) {
 | |
|         // indent lines that match mixin pattern by 2 less than specified width
 | |
|         if (line.indexOf('{@example') >= 0) {
 | |
|           if (isAfterMarkdownTag) {
 | |
|             // happens if example follows example
 | |
|             if (newLines.length > 0) {
 | |
|               newLines.pop();
 | |
|             } else {
 | |
|               // wierd case - first expression in str is an @example
 | |
|               // in this case the :marked appear above the str passed in,
 | |
|               // so we need to put 'something' into the markdown tag.
 | |
|               newLines.push(sp + '.');  // '.' is a dummy char
 | |
|             }
 | |
|           }
 | |
|           newLines.push(spMixin + line);
 | |
|           // after a mixin line we need to reenter markdown.
 | |
|           newLines.push(spMixin + ':marked');
 | |
|           isAfterMarkdownTag = true;
 | |
|         } else {
 | |
|           if ((!isAfterMarkdownTag) || (line.trim().length > 0)) {
 | |
|             newLines.push(sp + line);
 | |
|             isAfterMarkdownTag = false;
 | |
|           }
 | |
|         }
 | |
|       });
 | |
|       if (isAfterMarkdownTag) {
 | |
|         if (newLines.length > 0) {
 | |
|           // if last line is a markdown tag remove it.
 | |
|           newLines.pop();
 | |
|         }
 | |
|       }
 | |
|       // force character to be a newLine.
 | |
|       if (newLines.length > 0) newLines.push('');
 | |
|       var res = newLines.join('\n');
 | |
|       return res;
 | |
|     }
 | |
|   };
 | |
| 
 | |
|   function spaces(n) {
 | |
|     var str = '';
 | |
|     for (var i = 0; i < n; i++) {
 | |
|       str += ' ';
 | |
|     }
 | |
|     return str;
 | |
|   };
 | |
| 
 | |
| }; |