Pith - wedge
package com.vgmlr.wedge

object WedgeRegex {
    private const val SCOPED = """(?![^\n]*\([^()\n]*[*!~?]\)?$)"""
    
    val ALARM_TIME = Regex("""^(\d{2}):(\d{2})\s*.*(?<!\s)\((-\d+(\.\d+)?|0)?\)$""")
    val BOLD_LINE = Regex("""(?m)^$SCOPED.*![*!~?]*$""")
    val BOLD_SCOPE = Regex("""(?m)\(([^()\n]*![*!~?]*)\)?$""")
    val BULLET_TRIGGER = Regex("""^([ \t]*)(-) """)
    val COMMENT_LINE = Regex("""(?m)(?<!\S)//.*$""")
    val COUNTDOWN_TIME = Regex("""^(\d{2}):(\d{2})\s*.*(?<!\s)(?:\((-\d+(\.\d+)?|0)?\)|\[(-\d+(\.\d+)?|0)?])$""")
    val DASH_TRIGGER = Regex("""(?<=\s|^)dash\((\d+)\)$""")
    val DATE_MATH_REFRESH = Regex("""(?<=\s|^)(\d{1,2})([a-zA-Z]{3})(\d{2})?\(\d*\)=\d*""")
    val DATE_MATH_TRIGGER = Regex("""(?<=\s|^)(\d{1,2})([a-zA-Z]{3})(\d{2})?\(\)=$""")
    val HR_TRIGGER = Regex("""(?<=\s|^)hr\((\d+)\)$""")
    val ITALIC_LINE = Regex("""(?m)^$SCOPED.*\?[*!~?]*$""")
    val ITALIC_SCOPE = Regex("""(?m)\(([^()\n]*\?[*!~?]*)\)?$""")
    val LIST_TRIGGER = Regex("""^(\s*)(\d+)\.\s""")
    val MATH_CHAIN = Regex("""^((?:[+\-/*]\d+(?:\.\d+)?%?)+)=(-?\d+(?:\.\d+)?)?""")
    val MATH_SPLIT = Regex("[+\\-/*=]")
    val MATH_TRIGGER = Regex("""(?<=\s|^|=)((\d+(\.\d+)?[+\-/*])+(\d+(\.\d+)?%?)=)$""")
    val STRIKE_LINE = Regex("""(?m)^$SCOPED[^\S\r\n]*(\S.*?)[*!~?]*~[*!~?]*$""")
    val STRIKE_SCOPE = Regex("""(?m)\([^\S\r\n]*([^()\s][^()\n]*?)[*!~?]*~[*!~?]*\)?$""")
    val TIME_ENTRY = Regex("""^(\d{2}):(\d{2})""")
    val UNDERLINE_LINE = Regex("""(?m)^$SCOPED[^\S\r\n]*(\S.*?)[*!~?]*\*[*!~?]*$""")
    val UNDERLINE_SCOPE = Regex("""(?m)\([^\S\r\n]*([^()\s][^()\n]*?)[*!~?]*\*[*!~?]*\)?$""")
    val URL = Regex("""https?://\S+?(?=[.,;:!?)\]}]*(?:\s|$))""")
}