name: core
syntax:
  Hashtag:
    firstCharacters:
      - "#"
    regex: "#[^#\\d\\s]+\\w+"
    className: sb-hashtag
  NakedURL:
    firstCharacters:
      - "h"
    regex: "https?:\\/\\/[-a-zA-Z0-9@:%._\\+~#=]{1,256}([-a-zA-Z0-9()@:%_\\+.~#?&=\\/]*)"
    className: sb-naked-url
  CommandLink:
    firstCharacters:
      - "{"
    regex: "\\{\\[[^\\]]+\\]\\}"
    className: sb-command-link
  NamedAnchor:
    firstCharacters:
      - "@"
    regex: "@[a-zA-Z\\.\\-\\/]+[\\w\\.\\-\\/]*"
    className: sb-named-anchor
functions:
  clearPageIndex:
    path: "./page.ts:clearPageIndex"
    env: server
    events:
      - page:saved
      - page:deleted
  pageQueryProvider:
    path: ./page.ts:pageQueryProvider
    events:
      - query:page
  parseIndexTextRepublish:
    path: "./page.ts:parseIndexTextRepublish"
    events:
      - page:index_text
  reindexSpaceCommand:
    path: "./page.ts:reindexCommand"
    command:
      name: "Space: Reindex"
  reindexSpace:
    path: "./page.ts:reindexSpace"
    env: server
  deletePage:
    path: "./page.ts:deletePage"
    command:
      name: "Page: Delete"

  editorLoad:
    path: "./editor.ts:editorLoad"
    events:
      - plugs:loaded
  toggleReadOnlyode:
    path: "./editor.ts:toggleReadOnlyMode"
    command:
      name: "Editor: Toggle Read Only Mode"

  # Backlinks
  indexLinks:
    path: "./page.ts:indexLinks"
    events:
      - page:index
  linkQueryProvider:
    path: ./page.ts:linkQueryProvider
    events:
      - query:link
  renamePage:
    path: "./page.ts:renamePage"
    command:
      name: "Page: Rename"
      mac: Cmd-Alt-r
      key: Ctrl-Alt-r

  pageComplete:
    path: "./page.ts:pageComplete"
    events:
      - page:complete

  # Commands
  commandComplete:
    path: "./command.ts:commandComplete"
    events:
      - page:complete

  # Item indexing
  indexItem:
    path: "./item.ts:indexItems"
    events:
      - page:index
  itemQueryProvider:
    path: "./item.ts:queryProvider"
    events:
      - query:item

  # Navigation
  linkNavigate:
    path: "./navigate.ts:linkNavigate"
    command:
      name: Navigate To page
      key: Ctrl-Enter
      mac: Cmd-Enter
  clickNavigate:
    path: "./navigate.ts:clickNavigate"
    events:
      - page:click
  navigateHome:
    path: "./navigate.ts:navigateCommand"
    command:
      name: "Navigate: Home"
      key: "Alt-h"
      page: ""

  # Hashtags
  indexTags:
    path: "./tags.ts:indexTags"
    events:
      - page:index
  tagComplete:
    path: "./tags.ts:tagComplete"
    events:
      - page:complete
  tagProvider:
    path: "./tags.ts:tagProvider"
    events:
      - query:tag

  # Anchors
  indexAnchors:
    path: "./anchor.ts:indexAnchors"
    events:
      - page:index
  anchorComplete:
    path: "./anchor.ts:anchorComplete"
    events:
      - page:complete

  # Full text search
  searchIndex:
    path: ./search.ts:index
    events:
      - page:index
  searchUnindex:
    path: "./search.ts:unindex"
    env: server
    events:
      - page:deleted
  searchQueryProvider:
    path: ./search.ts:queryProvider
    events:
      - query:full-text
  searchCommand:
    path: ./search.ts:searchCommand
    command:
      name: "Search Space"
      key: Ctrl-Shift-f
      mac: Cmd-Shift-f
  readPageSearch:
    path: ./search.ts:readPageSearch
    pageNamespace:
      pattern: "🔍 .+"
      operation: readFile
  getPageMetaSearch:
    path: ./search.ts:getPageMetaSearch
    pageNamespace:
      pattern: "🔍 .+"
      operation: getFileMeta

  # Template commands
  insertPageMeta:
    path: "./template.ts:insertTemplateText"
    slashCommand:
      name: meta
      description: Insert a page metadata block
      value: |
        ```meta
        |^|
        ```
  insertTask:
    path: "./template.ts:insertTemplateText"
    slashCommand:
      name: task
      description: Insert a task
      value: "* [ ] |^|"
  insertQuery:
    path: "./template.ts:insertTemplateText"
    slashCommand:
      name: query
      description: Insert a query
      value: |
        <!-- #query |^| -->

        <!-- /query -->
  insertInclude:
    path: "./template.ts:insertTemplateText"
    slashCommand:
      name: include
      description: Include another page
      value: |
        <!-- #include [[|^|]] -->

        <!-- /include -->
  insertInjectTemplate:
    path: "./template.ts:insertTemplateText"
    slashCommand:
      name: use
      description: Use a template
      value: |
        <!-- #use [[|^|]] {} -->

        <!-- /use -->
  insertInjectCleanTemplate:
    path: "./template.ts:insertTemplateText"
    slashCommand:
      name: use-verbose
      description: Use a template (verbose mode)
      value: |
        <!-- #use-verbose [[|^|]] {} -->

        <!-- /use-verbose -->
  insertHRTemplate:
    path: "./template.ts:insertTemplateText"
    slashCommand:
      name: hr
      description: Insert a horizontal rule
      value: "---"
  quickNoteCommand:
    path: ./template.ts:quickNoteCommand
    command:
      name: "Quick Note"
      key: "Alt-Shift-n"
      priority: 1
  dailyNoteCommand:
    path: ./template.ts:dailyNoteCommand
    command:
      name: "Open Daily Note"
      key: "Alt-Shift-d"

  instantiateTemplateCommand:
    path: ./template.ts:instantiateTemplateCommand
    command:
      name: "Template: Instantiate Page"
  insertSnippet:
    path: ./template.ts:insertSnippet
    command:
      name: "Template: Insert Snippet"
    slashCommand:
      name: snippet
      description: Insert a snippet
  insertTodayCommand:
    path: "./template.ts:insertTemplateText"
    slashCommand:
      name: today
      description: Insert today's date
      value: "{{today}}"
  insertTomorrowCommand:
    path: "./template.ts:insertTemplateText"
    slashCommand:
      name: tomorrow
      description: Insert tomorrow's date
      value: "{{tomorrow}}"

  # Text editing commands
  quoteSelectionCommand:
    path: ./text.ts:quoteSelection
    command:
      name: "Text: Quote Selection"
      key: "Ctrl-Shift-."
      mac: "Cmd-Shift-."
  listifySelection:
    path: ./text.ts:listifySelection
    command:
      name: "Text: Listify Selection"
  numberListifySelection:
    path: ./text.ts:numberListifySelection
    command:
      name: "Text: Number Listify Selection"
  linkSelection:
    path: ./text.ts:linkSelection
    command:
      name: "Text: Link Selection"
      key: "Ctrl-Shift-k"
      mac: "Cmd-Shift-k"
  bold:
    path: ./text.ts:wrapSelection
    command:
      name: "Text: Bold"
      key: "Ctrl-b"
      mac: "Cmd-b"
      wrapper: "**"
  italic:
    path: ./text.ts:wrapSelection
    command:
      name: "Text: Italic"
      key: "Ctrl-i"
      mac: "Cmd-i"
      wrapper: "_"
  marker:
    path: ./text.ts:wrapSelection
    command:
      name: "Text: Marker"
      key: "Alt-m"
      wrapper: "=="

  # Plug manager
  updatePlugsCommand:
    path: ./plugmanager.ts:updatePlugsCommand
    command:
      name: "Plugs: Update"
      key: "Ctrl-Shift-p"
      mac: "Cmd-Shift-p"
  updatePlugs:
    path: ./plugmanager.ts:updatePlugs
    env: server
  getPlugHTTPS:
    path: "./plugmanager.ts:getPlugHTTPS"
    events:
      - get-plug:https
  getPlugGithub:
    path: "./plugmanager.ts:getPlugGithub"
    events:
      - get-plug:github
  getPlugGithubRelease:
    path: "./plugmanager.ts:getPlugGithubRelease"
    events:
      - get-plug:ghr
  # Debug commands
  parseCommand:
    path: ./debug.ts:parsePageCommand
    command:
      name: "Debug: Parse Document"
  showLogsCommand:
    path: ./debug.ts:showLogsCommand
    command:
      name: "Debug: Show Logs"
      key: "Ctrl-Alt-l"
      mac: "Cmd-Alt-l"
    events:
      - log:reload
  hideBhsCommand:
    path: ./debug.ts:hideBhsCommand
    command:
      name: "UI: Hide BHS"
      key: "Ctrl-Alt-b"
      mac: "Cmd-Alt-b"

  # Link unfurl infrastructure
  unfurlLink:
    path: ./link.ts:unfurlCommand
    command:
      name: "Link: Unfurl"
      key: "Ctrl-Shift-u"
      mac: "Cmd-Shift-u"
      contexts:
        - NakedURL
  unfurlExec:
    env: server
    path: ./link.ts:unfurlExec

  # Title-based link unfurl
  titleUnfurlOptions:
    path: ./link.ts:titleUnfurlOptions
    events:
      - unfurl:options
  titleUnfurl:
    path: ./link.ts:titleUnfurl
    events:
      - unfurl:title-unfurl

  # Random stuff
  statsCommand:
    path: ./stats.ts:statsCommand
    command:
      name: "Stats: Show"
      key: "Ctrl-s"
      mac: "Cmd-s"

  # Cloud pages
  readPageCloud:
    path: ./cloud.ts:readFileCloud
    pageNamespace:
      pattern: "💭 .+"
      operation: readFile
  getPageMetaCloud:
    path: ./cloud.ts:getFileMetaCloud
    pageNamespace:
      pattern: "💭 .+"
      operation: getFileMeta
