Sha256: f42c6b8b307c25d11c63bfa3b5413eaa7edc4e39f79a38ebe0463009405d9cf4

Contents?: true

Size: 963 Bytes

Versions: 3

Compression:

Stored size: 963 Bytes

Contents

# frozen_string_literal: true

module BridgetownObsidian
  class Builder < Bridgetown::Builder
    REGEX_WIKILINK = /(?<!!)\[\[([^\]]+?)(?:\|([^\]]+))?\]\]/
    REGEX_IMAGES = /!\[\[(.+?)\]\]/

    def build
      generator :wikilinks
      generator :images
    end

    def wikilinks
      resources.each do |post|
        post.content.gsub!(REGEX_WIKILINK) do |match|
          wikilink = Regexp.last_match(1)
          wikilink_title = Regexp.last_match(2) || wikilink
          "[#{wikilink_title}](#{url_for("_posts/#{wikilink}.md")})"
        end
      end
    end

    def images
      resources.each do |post|
        post.content.gsub!(REGEX_IMAGES) do |match|
          image = Regexp.last_match(1)
          "![](/#{image})"
        end
      end
    end

    private

    def resources
      site.collections.posts.resources
    end

    def url_for(url)
      Bridgetown::RubyTemplateView::Helpers.new(resource, site).url_for(url)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
bridgetown_obsidian-0.1.2 lib/bridgetown_obsidian/builder.rb
bridgetown_obsidian-0.1.1 lib/bridgetown_obsidian/builder.rb
bridgetown_obsidian-0.1.0 lib/bridgetown_obsidian/builder.rb