This commit is contained in:
@@ -0,0 +1,251 @@
|
||||
# -*- coding: utf-8 -*- #
|
||||
# frozen_string_literal: true
|
||||
# Lexer adapted from https://github.com/pygments/pygments/blob/ad55974ce83b85dbb333ab57764415ab84169461/pygments/lexers/theorem.py
|
||||
|
||||
module Rouge
|
||||
module Lexers
|
||||
class Isabelle < RegexLexer
|
||||
title "Isabelle"
|
||||
desc 'Isabelle theories (isabelle.in.tum.de)'
|
||||
tag 'isabelle'
|
||||
aliases 'isa', 'Isabelle'
|
||||
filenames '*.thy'
|
||||
mimetypes 'text/x-isabelle'
|
||||
|
||||
def self.keyword_minor
|
||||
@keyword_minor ||= Set.new %w(
|
||||
and assumes attach avoids binder checking
|
||||
class_instance class_relation code_module congs
|
||||
constant constrains datatypes defines file fixes
|
||||
for functions hints identifier if imports in
|
||||
includes infix infixl infixr is keywords lazy
|
||||
module_name monos morphisms no_discs_sels notes
|
||||
obtains open output overloaded parametric permissive
|
||||
pervasive rep_compat shows structure type_class
|
||||
type_constructor unchecked unsafe where
|
||||
)
|
||||
end
|
||||
|
||||
def self.keyword_diag
|
||||
@keyword_diag ||= Set.new %w(
|
||||
ML_command ML_val class_deps code_deps code_thms
|
||||
display_drafts find_consts find_theorems find_unused_assms
|
||||
full_prf help locale_deps nitpick pr prf
|
||||
print_abbrevs print_antiquotations print_attributes
|
||||
print_binds print_bnfs print_bundles
|
||||
print_case_translations print_cases print_claset
|
||||
print_classes print_codeproc print_codesetup
|
||||
print_coercions print_commands print_context
|
||||
print_defn_rules print_dependencies print_facts
|
||||
print_induct_rules print_inductives print_interps
|
||||
print_locale print_locales print_methods print_options
|
||||
print_orders print_quot_maps print_quotconsts
|
||||
print_quotients print_quotientsQ3 print_quotmapsQ3
|
||||
print_rules print_simpset print_state print_statement
|
||||
print_syntax print_theorems print_theory print_trans_rules
|
||||
prop pwd quickcheck refute sledgehammer smt_status
|
||||
solve_direct spark_status term thm thm_deps thy_deps
|
||||
try try0 typ unused_thms value values welcome
|
||||
print_ML_antiquotations print_term_bindings values_prolog
|
||||
)
|
||||
end
|
||||
|
||||
def self.keyword_thy
|
||||
@keyword_thy ||= Set.new %w(theory begin end)
|
||||
end
|
||||
|
||||
def self.keyword_section
|
||||
@keyword_section ||= Set.new %w(header chapter)
|
||||
end
|
||||
|
||||
def self.keyword_subsection
|
||||
@keyword_subsection ||= Set.new %w(section subsection subsubsection sect subsect subsubsect)
|
||||
end
|
||||
|
||||
def self.keyword_theory_decl
|
||||
@keyword_theory_decl ||= Set.new %w(
|
||||
ML ML_file abbreviation adhoc_overloading arities
|
||||
atom_decl attribute_setup axiomatization bundle
|
||||
case_of_simps class classes classrel codatatype
|
||||
code_abort code_class code_const code_datatype
|
||||
code_identifier code_include code_instance code_modulename
|
||||
code_monad code_printing code_reflect code_reserved
|
||||
code_type coinductive coinductive_set consts context
|
||||
datatype datatype_new datatype_new_compat declaration
|
||||
declare default_sort defer_recdef definition defs
|
||||
domain domain_isomorphism domaindef equivariance
|
||||
export_code extract extract_type fixrec fun
|
||||
fun_cases hide_class hide_const hide_fact hide_type
|
||||
import_const_map import_file import_tptp import_type_map
|
||||
inductive inductive_set instantiation judgment lemmas
|
||||
lifting_forget lifting_update local_setup locale
|
||||
method_setup nitpick_params no_adhoc_overloading
|
||||
no_notation no_syntax no_translations no_type_notation
|
||||
nominal_datatype nonterminal notation notepad oracle
|
||||
overloading parse_ast_translation parse_translation
|
||||
partial_function primcorec primrec primrec_new
|
||||
print_ast_translation print_translation quickcheck_generator
|
||||
quickcheck_params realizability realizers recdef record
|
||||
refute_params setup setup_lifting simproc_setup
|
||||
simps_of_case sledgehammer_params spark_end spark_open
|
||||
spark_open_siv spark_open_vcg spark_proof_functions
|
||||
spark_types statespace syntax syntax_declaration text
|
||||
text_raw theorems translations type_notation
|
||||
type_synonym typed_print_translation typedecl hoarestate
|
||||
install_C_file install_C_types wpc_setup c_defs c_types
|
||||
memsafe SML_export SML_file SML_import approximate
|
||||
bnf_axiomatization cartouche datatype_compat
|
||||
free_constructors functor nominal_function
|
||||
nominal_termination permanent_interpretation
|
||||
binds defining smt2_status term_cartouche
|
||||
boogie_file text_cartouche
|
||||
)
|
||||
end
|
||||
|
||||
def self.keyword_theory_script
|
||||
@keyword_theory_script ||= Set.new %w(inductive_cases inductive_simps)
|
||||
end
|
||||
|
||||
def self.keyword_theory_goal
|
||||
@keyword_theory_goal ||= Set.new %w(
|
||||
ax_specification bnf code_pred corollary cpodef
|
||||
crunch crunch_ignore
|
||||
enriched_type function instance interpretation lemma
|
||||
lift_definition nominal_inductive nominal_inductive2
|
||||
nominal_primrec pcpodef primcorecursive
|
||||
quotient_definition quotient_type recdef_tc rep_datatype
|
||||
schematic_corollary schematic_lemma schematic_theorem
|
||||
spark_vc specification subclass sublocale termination
|
||||
theorem typedef wrap_free_constructors
|
||||
)
|
||||
end
|
||||
|
||||
def self.keyword_qed
|
||||
@keyword_qed ||= Set.new %w(by done qed)
|
||||
end
|
||||
|
||||
def self.keyword_abandon_proof
|
||||
@keyword_abandon_proof ||= Set.new %w(sorry oops)
|
||||
end
|
||||
|
||||
def self.keyword_proof_goal
|
||||
@keyword_proof_goal ||= Set.new %w(have hence interpret)
|
||||
end
|
||||
|
||||
def self.keyword_proof_block
|
||||
@keyword_proof_block ||= Set.new %w(next proof)
|
||||
end
|
||||
|
||||
def self.keyword_proof_chain
|
||||
@keyword_proof_chain ||= Set.new %w(finally from then ultimately with)
|
||||
end
|
||||
|
||||
def self.keyword_proof_decl
|
||||
@keyword_proof_decl ||= Set.new %w(
|
||||
ML_prf also include including let moreover note
|
||||
txt txt_raw unfolding using write
|
||||
)
|
||||
end
|
||||
|
||||
def self.keyword_proof_asm
|
||||
@keyword_proof_asm ||= Set.new %w(assume case def fix presume)
|
||||
end
|
||||
|
||||
def self.keyword_proof_asm_goal
|
||||
@keyword_proof_asm_goal ||= Set.new %w(guess obtain show thus)
|
||||
end
|
||||
|
||||
def self.keyword_proof_script
|
||||
@keyword_proof_script ||= Set.new %w(apply apply_end apply_trace back defer prefer)
|
||||
end
|
||||
|
||||
state :root do
|
||||
rule %r/\s+/, Text::Whitespace
|
||||
rule %r/\(\*/, Comment, :comment
|
||||
rule %r/\{\*|‹/, Text, :text
|
||||
|
||||
rule %r/::|\[|\]|-|[:()_=,|+!?]/, Operator
|
||||
rule %r/[{}.]|\.\./, Operator::Word
|
||||
|
||||
def word(keywords)
|
||||
return %r/\b(#{keywords.join('|')})\b/
|
||||
end
|
||||
|
||||
rule %r/[a-zA-Z]\w*/ do |m|
|
||||
sym = m[0]
|
||||
|
||||
if self.class.keyword_minor.include?(sym) ||
|
||||
self.class.keyword_proof_script.include?(sym)
|
||||
token Keyword::Pseudo
|
||||
elsif self.class.keyword_diag.include?(sym)
|
||||
token Keyword::Type
|
||||
elsif self.class.keyword_thy.include?(sym) ||
|
||||
self.class.keyword_theory_decl.include?(sym) ||
|
||||
self.class.keyword_qed.include?(sym) ||
|
||||
self.class.keyword_proof_goal.include?(sym) ||
|
||||
self.class.keyword_proof_block.include?(sym) ||
|
||||
self.class.keyword_proof_decl.include?(sym) ||
|
||||
self.class.keyword_proof_chain.include?(sym) ||
|
||||
self.class.keyword_proof_asm.include?(sym) ||
|
||||
self.class.keyword_proof_asm_goal.include?(sym)
|
||||
token Keyword
|
||||
elsif self.class.keyword_section.include?(sym)
|
||||
token Generic::Heading
|
||||
elsif self.class.keyword_subsection.include?(sym)
|
||||
token Generic::Subheading
|
||||
elsif self.class.keyword_theory_goal.include?(sym) ||
|
||||
self.class.keyword_theory_script.include?(sym)
|
||||
token Keyword::Namespace
|
||||
elsif self.class.keyword_abandon_proof.include?(sym)
|
||||
token Generic::Error
|
||||
else
|
||||
token Name
|
||||
end
|
||||
end
|
||||
|
||||
rule %r/\\<\w*>/, Str::Symbol
|
||||
|
||||
rule %r/'[^\W\d][.\w']*/, Name::Variable
|
||||
|
||||
rule %r/0[xX][\da-fA-F][\da-fA-F_]*/, Num::Hex
|
||||
rule %r/0[oO][0-7][0-7_]*/, Num::Oct
|
||||
rule %r/0[bB][01][01_]*/, Num::Bin
|
||||
|
||||
rule %r/"/, Str, :string
|
||||
rule %r/`/, Str::Other, :fact
|
||||
# Everything except for (most) operators whitespaces may be name
|
||||
rule %r/[^\s:|\[\]\-()=,+!?{}._][^\s:|\[\]\-()=,+!?{}]*/, Name
|
||||
end
|
||||
|
||||
state :comment do
|
||||
rule %r/[^(*)]+/, Comment
|
||||
rule %r/\(\*/, Comment, :comment
|
||||
rule %r/\*\)/, Comment, :pop!
|
||||
rule %r/[(*)]/, Comment
|
||||
end
|
||||
|
||||
state :text do
|
||||
rule %r/[^{*}‹›]+/, Text
|
||||
rule %r/\{\*|‹/, Text, :text
|
||||
rule %r/\*\}|›/, Text, :pop!
|
||||
rule %r/[{*}]/, Text
|
||||
end
|
||||
|
||||
state :string do
|
||||
rule %r/[^"\\]+/, Str
|
||||
rule %r/\\<\w*>/, Str::Symbol
|
||||
rule %r/\\"/, Str
|
||||
rule %r/\\/, Str
|
||||
rule %r/"/, Str, :pop!
|
||||
end
|
||||
|
||||
state :fact do
|
||||
rule %r/[^`\\]+/, Str::Other
|
||||
rule %r/\\<\w*>/, Str::Symbol
|
||||
rule %r/\\`/, Str::Other
|
||||
rule %r/\\/, Str::Other
|
||||
rule %r/`/, Str::Other, :pop!
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user