mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-25 05:55:34 +00:00
LFUNs.lyx improvements
This commit is contained in:
parent
6b115051a0
commit
f1531b2f90
@ -12,8 +12,7 @@
|
|||||||
# Usage:
|
# Usage:
|
||||||
# gen_lfuns.py <path/to/LyXAction.cpp> <where/to/save/LFUNs.lyx>
|
# gen_lfuns.py <path/to/LyXAction.cpp> <where/to/save/LFUNs.lyx>
|
||||||
|
|
||||||
import sys
|
import sys,re,os.path
|
||||||
import os.path
|
|
||||||
from datetime import date
|
from datetime import date
|
||||||
|
|
||||||
def error(message):
|
def error(message):
|
||||||
@ -24,7 +23,7 @@ def usage(prog_name):
|
|||||||
return "Usage: %s <path/to/LyXAction.cpp> [<where/to/save/LFUNs.lyx>]" % prog_name
|
return "Usage: %s <path/to/LyXAction.cpp> [<where/to/save/LFUNs.lyx>]" % prog_name
|
||||||
|
|
||||||
DOXYGEN_START = "/*!"
|
DOXYGEN_START = "/*!"
|
||||||
DOXYGEN_END = "*/"
|
DOXYGEN_END = "},"
|
||||||
|
|
||||||
LYX_NEWLINE = "\n\\begin_inset Newline newline\n\\end_inset\n\n"
|
LYX_NEWLINE = "\n\\begin_inset Newline newline\n\\end_inset\n\n"
|
||||||
LYX_BACKSLASH = "\n\\backslash\n"
|
LYX_BACKSLASH = "\n\\backslash\n"
|
||||||
@ -139,26 +138,59 @@ The LyX Team
|
|||||||
\\begin_layout Date""" + "\n" + str(date.today()) + """
|
\\begin_layout Date""" + "\n" + str(date.today()) + """
|
||||||
\\end_layout
|
\\end_layout
|
||||||
|
|
||||||
\\begin_layout Standard
|
|
||||||
\\begin_inset ERT
|
|
||||||
status collapsed
|
|
||||||
|
|
||||||
\\begin_layout Plain Layout
|
|
||||||
|
|
||||||
|
|
||||||
\\backslash
|
|
||||||
thispagestyle{empty}
|
|
||||||
\\end_layout
|
|
||||||
|
|
||||||
\\end_inset
|
|
||||||
|
|
||||||
|
|
||||||
\\begin_inset VSpace 1cm
|
|
||||||
\\end_inset
|
|
||||||
|
|
||||||
|
|
||||||
\\end_layout
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
LFUNS_INTRO ="""\\begin_layout Section*
|
||||||
|
About this manual
|
||||||
|
\\end_layout
|
||||||
|
|
||||||
|
\\begin_layout Standard
|
||||||
|
This manual documents the
|
||||||
|
\\begin_inset Quotes eld
|
||||||
|
\\end_inset
|
||||||
|
|
||||||
|
LyX Functions
|
||||||
|
\\begin_inset Quotes erd
|
||||||
|
\\end_inset
|
||||||
|
|
||||||
|
(abbreviated LFUNs).
|
||||||
|
These are commands that are used to make LyX perform specific actions.
|
||||||
|
LyX itself uses these functions internally, and every internal action is
|
||||||
|
bound to an LFUN.
|
||||||
|
\\end_layout
|
||||||
|
|
||||||
|
\\begin_layout Standard
|
||||||
|
LFUNs are also used in the files that define keyboard shortcuts, menu or
|
||||||
|
toolbar items.
|
||||||
|
So if you want to change\\SpecialChar \\slash{}
|
||||||
|
customize the user interface, you need to deal
|
||||||
|
with LFUNs.
|
||||||
|
Furthermore, external programs can use LFUNs to communicate with and
|
||||||
|
\\begin_inset Quotes eld
|
||||||
|
\\end_inset
|
||||||
|
|
||||||
|
remote-control
|
||||||
|
\\begin_inset Quotes erd
|
||||||
|
\\end_inset
|
||||||
|
|
||||||
|
LyX.
|
||||||
|
Finally, you can also issue LFUNs directly via the so called mini-buffer
|
||||||
|
which can be opened via
|
||||||
|
\\begin_inset Info
|
||||||
|
type "shortcuts"
|
||||||
|
arg "command-execute"
|
||||||
|
\\end_inset
|
||||||
|
|
||||||
|
.
|
||||||
|
\\end_layout
|
||||||
|
|
||||||
|
\\begin_layout Standard
|
||||||
|
In the following, all LFUNs are listed, categorized by function.
|
||||||
|
\\end_layout
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
LFUNS_FOOTER = """\\end_body
|
LFUNS_FOOTER = """\\end_body
|
||||||
\\end_document
|
\\end_document
|
||||||
"""
|
"""
|
||||||
@ -166,7 +198,7 @@ LFUNS_FOOTER = """\\end_body
|
|||||||
def parse_lfun(str):
|
def parse_lfun(str):
|
||||||
"""Takes a comment block (str) and parses it for fields describing the LFUN. Returns a dict containing the fields."""
|
"""Takes a comment block (str) and parses it for fields describing the LFUN. Returns a dict containing the fields."""
|
||||||
|
|
||||||
lfun = dict(name="", action="", notion="", syntax="", params="", sample="", origin="")
|
lfun = dict(action="", notion="", syntax="", params="", sample="", origin="")
|
||||||
field = ""
|
field = ""
|
||||||
lines = str.splitlines()
|
lines = str.splitlines()
|
||||||
# strip leading whitespace and * from the lines of the comment to get
|
# strip leading whitespace and * from the lines of the comment to get
|
||||||
@ -181,11 +213,7 @@ def parse_lfun(str):
|
|||||||
# nothing as an existing field is being added to
|
# nothing as an existing field is being added to
|
||||||
# if a field id is found, then its the first line of the field so set the pre_space to ""
|
# if a field id is found, then its the first line of the field so set the pre_space to ""
|
||||||
# so that the first line isn't prespaced
|
# so that the first line isn't prespaced
|
||||||
if lines[i].startswith(LFUN_NAME_ID):
|
if lines[i].startswith(LFUN_ACTION_ID):
|
||||||
field = "name"
|
|
||||||
pre_space = ""
|
|
||||||
skip = len(ID_DICT[field])
|
|
||||||
elif lines[i].startswith(LFUN_ACTION_ID):
|
|
||||||
field = "action"
|
field = "action"
|
||||||
pre_space = ""
|
pre_space = ""
|
||||||
skip = len(ID_DICT[field])
|
skip = len(ID_DICT[field])
|
||||||
@ -320,7 +348,27 @@ def write_fields(file, lfun):
|
|||||||
file.write("Origin " + lfun["origin"] + "\n")
|
file.write("Origin " + lfun["origin"] + "\n")
|
||||||
file.write("\\end_layout\n")
|
file.write("\\end_layout\n")
|
||||||
#file.write("\n")
|
#file.write("\n")
|
||||||
file.write("\n")
|
file.write("\n")
|
||||||
|
|
||||||
|
def write_sections(file,lfuns):
|
||||||
|
"""Write sections of LFUNs"""
|
||||||
|
sections = ["Layout", "Edit", "Math", "Buffer", "System", "Hidden"]
|
||||||
|
section_headings = {
|
||||||
|
"Layout": "Layout Functions (Font, Layout and Textclass related)",
|
||||||
|
"Edit": "Editing Functions (Cursor and Mouse Movement, Copy/Paste etc.)",
|
||||||
|
"Math": "Math Editor Functions",
|
||||||
|
"Buffer": "Buffer Fuctions (File and Window related)",
|
||||||
|
"System": "System Funtions (Preferences, LyX Server etc.)",
|
||||||
|
"Hidden": "Hidden Functions (not listed for configuration)"
|
||||||
|
}
|
||||||
|
# write the lfuns to the file
|
||||||
|
for val in sections:
|
||||||
|
file.write("\\begin_layout Section\n")
|
||||||
|
file.write(section_headings[val] + "\n")
|
||||||
|
file.write("\\end_layout\n")
|
||||||
|
for lf in lfuns:
|
||||||
|
if lf["type"] == val:
|
||||||
|
write_fields(file, lf)
|
||||||
|
|
||||||
def main(argv):
|
def main(argv):
|
||||||
# parse command line arguments
|
# parse command line arguments
|
||||||
@ -346,12 +394,15 @@ def main(argv):
|
|||||||
sys.stderr.write(script_name + ": Start processing " + argv[1] + '\n')
|
sys.stderr.write(script_name + ": Start processing " + argv[1] + '\n')
|
||||||
# Read the input file and write the output file
|
# Read the input file and write the output file
|
||||||
lyxaction_file = open(lyxaction_path, 'rb')
|
lyxaction_file = open(lyxaction_path, 'rb')
|
||||||
|
|
||||||
lyxaction_text = lyxaction_file.read()
|
lyxaction_text = lyxaction_file.read()
|
||||||
|
|
||||||
lfuns_file.write(LFUNS_HEADER)
|
lfuns_file.write(LFUNS_HEADER)
|
||||||
|
|
||||||
# seek to the important bit of LyXAction.cpp
|
# An introductory section
|
||||||
|
lfuns_file.write(LFUNS_INTRO)
|
||||||
|
|
||||||
|
# seek to the important bit of LyXAction.cpp
|
||||||
try:
|
try:
|
||||||
start = lyxaction_text.index("ev_item const items[] = {")
|
start = lyxaction_text.index("ev_item const items[] = {")
|
||||||
except ValueError:
|
except ValueError:
|
||||||
@ -367,12 +418,23 @@ def main(argv):
|
|||||||
# look for a doxygen comment
|
# look for a doxygen comment
|
||||||
start = lyxaction_text.find(DOXYGEN_START, start)
|
start = lyxaction_text.find(DOXYGEN_START, start)
|
||||||
end = lyxaction_text.find(DOXYGEN_END, start) + len(DOXYGEN_END)
|
end = lyxaction_text.find(DOXYGEN_END, start) + len(DOXYGEN_END)
|
||||||
|
name = ""
|
||||||
|
atype = ""
|
||||||
|
snippet = lyxaction_text[start:end]
|
||||||
|
defline = snippet.replace("\n", "")
|
||||||
|
match = re.match(r'.*\s*\{\s*(.+),\s*"(.*)",\s*([\w\|\s]+),\s*(\w+)\s*\},.*$', defline)
|
||||||
|
if match:
|
||||||
|
name = match.group(2)
|
||||||
|
atype = match.group(4)
|
||||||
# parse the lfun if it is found
|
# parse the lfun if it is found
|
||||||
if start > 0:
|
if start > 0:
|
||||||
count = count + 1
|
if name:
|
||||||
lfun = parse_lfun(lyxaction_text[start:end])
|
count = count + 1
|
||||||
# save the lfun (we sort it before writing)
|
lfun = parse_lfun(snippet)
|
||||||
lfun_list_unsorted.append(lfun)
|
lfun["name"] = name
|
||||||
|
lfun["type"] = atype
|
||||||
|
# save the lfun (we sort it before writing)
|
||||||
|
lfun_list_unsorted.append(lfun)
|
||||||
# get the next one
|
# get the next one
|
||||||
start = end
|
start = end
|
||||||
else:
|
else:
|
||||||
@ -382,8 +444,7 @@ def main(argv):
|
|||||||
lfun_list = sorted(lfun_list_unsorted, key=lambda k: k['name'])
|
lfun_list = sorted(lfun_list_unsorted, key=lambda k: k['name'])
|
||||||
|
|
||||||
# write the lfuns to the file
|
# write the lfuns to the file
|
||||||
for lf in lfun_list:
|
write_sections(lfuns_file, lfun_list)
|
||||||
write_fields(lfuns_file, lf)
|
|
||||||
|
|
||||||
sys.stderr.write(script_name + ": Created documentation for " + str(count) + " LFUNs\n")
|
sys.stderr.write(script_name + ": Created documentation for " + str(count) + " LFUNs\n")
|
||||||
|
|
||||||
|
5947
lib/doc/LFUNs.lyx
5947
lib/doc/LFUNs.lyx
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user