forked from MapComplete/MapComplete
		
	Some fixes in the rewrite of the maprendering
This commit is contained in:
		
							parent
							
								
									9f3a23843c
								
							
						
					
					
						commit
						67c8d08f3e
					
				
					 9 changed files with 117 additions and 19 deletions
				
			
		|  | @ -113,7 +113,9 @@ export class OnEveryConcat<X, T> extends DesugaringStep<T> { | |||
|         } | ||||
|         const r = step.convertAll((<X[]>values), context + "." + key) | ||||
|         const vals: X[][] = r.result | ||||
|          | ||||
|         json[key] = [].concat(...vals) | ||||
|          | ||||
|         return { | ||||
|             ...r, | ||||
|             result: json, | ||||
|  |  | |||
|  | @ -279,25 +279,27 @@ class ExpandRewrite<T> extends Conversion<T | RewritableConfigJson<T>, T[]> { | |||
|     * Every 'keyToRewrite' will be replaced with 'target' recursively. This substitution will happen in place in the object 'tr' */ | ||||
|     public static RewriteParts<T>(keyToRewrite: string, target: string | any, tr: T): T { | ||||
| 
 | ||||
|         const isTranslation = typeof target !== "string" | ||||
| 
 | ||||
|         function replaceRecursive(transl: string | any) { | ||||
|              | ||||
|             if(transl === keyToRewrite){ | ||||
|                 return target | ||||
|             } | ||||
|              | ||||
|             if (typeof transl === "string") { | ||||
|                 // This is a simple string - we do a simple replace
 | ||||
|                 return transl.replace(keyToRewrite, target) | ||||
|             } | ||||
|             if (transl.map !== undefined) { | ||||
|             if (Array.isArray(transl)) { | ||||
|                 // This is a list of items
 | ||||
|                 return transl.map(o => replaceRecursive(o)) | ||||
|             } | ||||
| 
 | ||||
|             if (Translations.isProbablyATranslation(transl) && isTranslation) { | ||||
|                 return Translations.T(transl).Fuse(new Translation(target), keyToRewrite).translations | ||||
|             } | ||||
| 
 | ||||
|             transl = {...transl} | ||||
|             for (const key in transl) { | ||||
|                 transl[key] = replaceRecursive(transl[key]) | ||||
|             if(typeof transl === "object"){ | ||||
|                 transl = {...transl} | ||||
|                 for (const key in transl) { | ||||
|                     transl[key] = replaceRecursive(transl[key]) | ||||
|                 } | ||||
|                 return transl | ||||
|             } | ||||
|             return transl | ||||
|         } | ||||
|  | @ -318,10 +320,19 @@ class ExpandRewrite<T> extends Conversion<T | RewritableConfigJson<T>, T[]> { | |||
|         } | ||||
| 
 | ||||
|         const rewrite = <RewritableConfigJson<T>>json; | ||||
|         let toRewrite: T = rewrite.renderings | ||||
|         const keysToRewrite = rewrite.rewrite | ||||
|         const keysToRewrite  = rewrite.rewrite | ||||
|         const ts : T[] = [] | ||||
| 
 | ||||
|         for (let i = 0; i < keysToRewrite.sourceString.length; i++){ | ||||
|             const guard = keysToRewrite.sourceString[i]; | ||||
|             for (let j = i + 1; j < keysToRewrite.sourceString.length; j++) { | ||||
|                 const toRewrite = keysToRewrite.sourceString[j] | ||||
|                 if(toRewrite.indexOf(guard) >= 0){ | ||||
|                     throw `${context} Error in rewrite: sourcestring[${i}] is a substring of sourcestring[${j}]: ${guard} will be substituted away before ${toRewrite} is reached.` | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         for (let i = 0; i < keysToRewrite.into[0].length; i++){ | ||||
|             let t = Utils.Clone(rewrite.renderings) | ||||
|             for (let i1 = 0; i1 < keysToRewrite.sourceString.length; i1++){ | ||||
|  | @ -338,6 +349,22 @@ class ExpandRewrite<T> extends Conversion<T | RewritableConfigJson<T>, T[]> { | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| class ExpandRewriteWithFlatten<T> extends Conversion<T | RewritableConfigJson<T | T[]>, T[]> { | ||||
| 
 | ||||
|     private _rewrite = new ExpandRewrite<T>() | ||||
| 
 | ||||
|     constructor() { | ||||
|         super("Applies a rewrite, the result is flattened if it is an array", [], "ExpandRewriteWithFlatten"); | ||||
|     } | ||||
| 
 | ||||
|     convert(json: RewritableConfigJson<T[] | T> | T, context: string): { result: T[]; errors?: string[]; warnings?: string[]; information?: string[] } { | ||||
|         return undefined; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| export class PrepareLayer extends Fuse<LayerConfigJson> { | ||||
|     constructor(state: DesugaringContext) { | ||||
|         super( | ||||
|  |  | |||
|  | @ -179,7 +179,7 @@ export interface LayerConfigJson { | |||
|     /** | ||||
|      * Visualisation of the items on the map | ||||
|      */ | ||||
|     mapRendering: null | (PointRenderingConfigJson | LineRenderingConfigJson | RewritableConfigJson<LineRenderingConfigJson | PointRenderingConfigJson>)[] | ||||
|     mapRendering: null | (PointRenderingConfigJson | LineRenderingConfigJson | RewritableConfigJson<LineRenderingConfigJson | PointRenderingConfigJson | LineRenderingConfigJson[] | PointRenderingConfigJson[]>)[] | ||||
| 
 | ||||
|     /** | ||||
|      * If set, this layer will pass all the features it receives onto the next layer. | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue