mirror of
				https://github.com/kovetskiy/mark.git
				synced 2025-10-31 11:47:37 +08:00 
			
		
		
		
	fix: Support relative links with titleFromH1
This commit is contained in:
		
							parent
							
								
									eab5655456
								
							
						
					
					
						commit
						20d3d1f05c
					
				
							
								
								
									
										4
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								main.go
									
									
									
									
									
								
							| @ -181,7 +181,7 @@ func processFile( | |||||||
| 
 | 
 | ||||||
| 	markdown = bytes.ReplaceAll(markdown, []byte("\r\n"), []byte("\n")) | 	markdown = bytes.ReplaceAll(markdown, []byte("\r\n"), []byte("\n")) | ||||||
| 
 | 
 | ||||||
| 	meta, markdown, err := mark.ExtractMeta(markdown) | 	meta, markdown, err := mark.ExtractMeta(markdown, flags.TitleFromH1) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Fatal(err) | 		log.Fatal(err) | ||||||
| 	} | 	} | ||||||
| @ -270,7 +270,7 @@ func processFile( | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	links, err := mark.ResolveRelativeLinks(api, meta, markdown, ".") | 	links, err := mark.ResolveRelativeLinks(api, meta, markdown, filepath.Dir(file), flags.TitleFromH1) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Fatalf(err, "unable to resolve relative links") | 		log.Fatalf(err, "unable to resolve relative links") | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -29,6 +29,7 @@ func ResolveRelativeLinks( | |||||||
| 	meta *Meta, | 	meta *Meta, | ||||||
| 	markdown []byte, | 	markdown []byte, | ||||||
| 	base string, | 	base string, | ||||||
|  | 	titleFromH1 bool, | ||||||
| ) ([]LinkSubstitution, error) { | ) ([]LinkSubstitution, error) { | ||||||
| 	matches := parseLinks(string(markdown)) | 	matches := parseLinks(string(markdown)) | ||||||
| 
 | 
 | ||||||
| @ -42,7 +43,7 @@ func ResolveRelativeLinks( | |||||||
| 			match.hash, | 			match.hash, | ||||||
| 		) | 		) | ||||||
| 
 | 
 | ||||||
| 		resolved, err := resolveLink(api, base, match) | 		resolved, err := resolveLink(api, base, match, titleFromH1) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return nil, karma.Format(err, "resolve link: %q", match.full) | 			return nil, karma.Format(err, "resolve link: %q", match.full) | ||||||
| 		} | 		} | ||||||
| @ -64,12 +65,14 @@ func resolveLink( | |||||||
| 	api *confluence.API, | 	api *confluence.API, | ||||||
| 	base string, | 	base string, | ||||||
| 	link markdownLink, | 	link markdownLink, | ||||||
|  | 	titleFromH1 bool, | ||||||
| ) (string, error) { | ) (string, error) { | ||||||
| 	var result string | 	var result string | ||||||
| 
 | 
 | ||||||
| 	if len(link.filename) > 0 { | 	if len(link.filename) > 0 { | ||||||
| 		filepath := filepath.Join(base, link.filename) | 		filepath := filepath.Join(base, link.filename) | ||||||
| 
 | 
 | ||||||
|  | 		log.Tracef(nil, "filepath: %s", filepath) | ||||||
| 		stat, err := os.Stat(filepath) | 		stat, err := os.Stat(filepath) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return "", nil | 			return "", nil | ||||||
| @ -92,7 +95,7 @@ func resolveLink( | |||||||
| 
 | 
 | ||||||
| 		// This helps to determine if found link points to file that's | 		// This helps to determine if found link points to file that's | ||||||
| 		// not markdown or have mark required metadata | 		// not markdown or have mark required metadata | ||||||
| 		linkMeta, _, err := ExtractMeta(linkContents) | 		linkMeta, _, err := ExtractMeta(linkContents, titleFromH1) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			log.Errorf( | 			log.Errorf( | ||||||
| 				err, | 				err, | ||||||
| @ -107,6 +110,13 @@ func resolveLink( | |||||||
| 			return "", nil | 			return "", nil | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		log.Tracef( | ||||||
|  | 			nil, | ||||||
|  | 			"extracted metadata: space=%s title=%s", | ||||||
|  | 			linkMeta.Space, | ||||||
|  | 			linkMeta.Title, | ||||||
|  | 		) | ||||||
|  | 
 | ||||||
| 		result, err = getConfluenceLink(api, linkMeta.Space, linkMeta.Title) | 		result, err = getConfluenceLink(api, linkMeta.Space, linkMeta.Title) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return "", karma.Format( | 			return "", karma.Format( | ||||||
|  | |||||||
| @ -46,7 +46,7 @@ var ( | |||||||
| 	reHeaderPatternMacro = regexp.MustCompile(`<!-- Macro: .*`) | 	reHeaderPatternMacro = regexp.MustCompile(`<!-- Macro: .*`) | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func ExtractMeta(data []byte) (*Meta, []byte, error) { | func ExtractMeta(data []byte, titleFromH1 bool) (*Meta, []byte, error) { | ||||||
| 	var ( | 	var ( | ||||||
| 		meta   *Meta | 		meta   *Meta | ||||||
| 		offset int | 		offset int | ||||||
| @ -146,6 +146,24 @@ func ExtractMeta(data []byte) (*Meta, []byte, error) { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if titleFromH1 { | ||||||
|  | 		if meta == nil { | ||||||
|  | 			meta = &Meta{} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if meta.Type == "" { | ||||||
|  | 			meta.Type = "page" | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if meta.ContentAppearance == "" { | ||||||
|  | 			meta.ContentAppearance = FullWidthContentAppearance // Default to full-width for backwards compatibility | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if meta.Title == "" { | ||||||
|  | 			meta.Title = ExtractDocumentLeadingH1(data) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	if meta == nil { | 	if meta == nil { | ||||||
| 		return nil, data, nil | 		return nil, data, nil | ||||||
| 	} | 	} | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Manuel Rüger
						Manuel Rüger