{{ $target := .Get "target" }} {{ $lang := .Get "lang" | default "text" }} {{ $hl := .Get "hl" }} {{ $tab_size := .Get "tab_size" | default "4" }} {{ $target_obj := urls.Parse $target }} {{ $target_host := $target_obj.Host }} {{ if not $target }} {{ errorf "emgithub shortcode in %s has no target" .Position }} {{ else if not (eq $target_host "github.com") }} {{ errorf "emgithub shortcode in %s has unsupported target host: %s" .Position $target_host }} {{ end }} {{ $target_path := (split $target_obj.Path "/") }} {{ $user := index $target_path 1 }} {{ $repo := index $target_path 2 }} {{ $branch := index $target_path 4 }} {{ $file := delimit (after 5 $target_path) "/" }} {{ $raw_file_url := printf "https://cdn.jsdelivr.net/gh/%s/%s@%s/%s" $user $repo $branch $file }} {{ $line_range := split (trim $target_obj.Fragment " ") "-" }} {{ $line_range_begin := (trim (index $line_range 0) " L") }} {{ $line_range_end := (trim (index $line_range 1) " L") }} {{ if and (eq $line_range_begin "") (eq $line_range_end "") }} {{ $line_range_begin = 0 }} {{ $line_range_end = 0 }} {{ else if and (ne $line_range_begin "") (eq $line_range_end "") }} {{ $line_range_end = $line_range_begin }} {{ else if or (eq $line_range_begin "") (eq $line_range_end "") }} {{ errorf "emgithub shortcode in %s has wrong line range format: range begin after parsing: %s, range end after parsing %s" .Position $line_range_begin $line_range_end }} {{ end }} {{ $line_range_begin = int $line_range_begin }} {{ $line_range_end = int $line_range_end }} {{ if gt $line_range_begin $line_range_end }} {{ $tmp := $line_range_begin }} {{ $line_range_begin = $line_range_end }} {{ $line_range_end = $tmp }} {{ end }} {{ $line_range_diff := add (sub $line_range_end $line_range_begin) 1 }}