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|$))""")
}