Sync with master

This commit is contained in:
Juergen Spitzmueller 2022-10-26 10:52:21 +02:00
parent 5e87cfbf4c
commit b3b22b0c70
175 changed files with 12004 additions and 9473 deletions

View File

@ -424,6 +424,7 @@ qtHaveModule(core5compat): QT += core5compat
percent.target = %
percent.commands = @echo -n "\$(\$(@))\ "
QMAKE_EXTRA_TARGETS += percent
QMAKE_PROJECT_DEPTH = 0
EOF1
$QT_QMAKE $lyx_test_qt_pro -o $lyx_test_qt_mak 1>/dev/null 2>&1
QT_CORE_INCLUDES=`cd $lyx_test_qt_dir; make -s -f $lyx_test_qt_mak INCPATH | sed 's/-I\. //g'`
@ -452,6 +453,7 @@ qtHaveModule(widgets): QT += widgets
percent.target = %
percent.commands = @echo -n "\$(\$(@))\ "
QMAKE_EXTRA_TARGETS += percent
QMAKE_PROJECT_DEPTH = 0
EOF2
$QT_QMAKE $lyx_test_qt_pro -o $lyx_test_qt_mak 1>/dev/null 2>&1
QT_INCLUDES=`cd $lyx_test_qt_dir; make -s -f $lyx_test_qt_mak INCPATH | sed 's/-I\. //g'`

View File

@ -285,7 +285,6 @@ while [ $# -gt 0 ]; do
shift
;;
--enable-cxx11|--enable-cxx-mode=*)
LyXConfigureOptions="${LyXConfigureOptions} ${1}"
EnableCXXMode="${1}"
shift
;;
@ -423,11 +422,13 @@ case "${EnableCXXMode}" in
export CC=cc
export CXX="c++ -stdlib=libc++"
export CXXFLAGS=-std=c++11
LyXConfigureOptions="${LyXConfigureOptions} --enable-cxx-mode=11"
;;
--enable-cxx-mode=17)
export CC=cc
export CXX="c++ -stdlib=libc++"
export CXXFLAGS=-std=c++17
LyXConfigureOptions="${LyXConfigureOptions} ${EnableCXXMode}"
;;
esac

View File

@ -26,7 +26,14 @@ Examples where convergence tests took time and annoyance to figure out that
they were actually "false positives" (i.e., no bug that is worth the time or
complexity to fix):
https://www.mail-archive.com/search?l=mid&q=20210125200655.e27xaaoy2belyxhw%40tallinn
Report :https://www.mail-archive.com/search?l=mid&q=20210125200655.e27xaaoy2belyxhw%40tallinn
Examples where an upstream issue was reported and ended up wasting time:
Report : https://github.com/latex3/latex2e/issues/836#issuecomment-1159826566
ctests : export/templates/Obsolete/.*American_Geophysical_Union.*_(lyx22|lyx23|pdf|dvi).*
Examples where bugs were fixed (more quickly) because of ctests:
@ -66,7 +73,6 @@ Fix : 489bf46a, e3489d54
Report : https://www.mail-archive.com/search?l=mid&q=20220205184128.4clckanaufwmx5z4%40gary
Fix : d66c27de
Report : https://www.mail-archive.com/search?l=mid&q=20220206142559.rpgwki7wruhtasxp%40gary
Fix : f71f71d0
@ -97,3 +103,19 @@ Fix : https://github.com/reutenauer/polyglossia/commit/c7489ebaf8c66a7e4fe252
Benefit: Not clear. The regressions were in the development version so they
could have easily been caught before release.
ctests : export/export/lyx2lyx/revert-languages-polyglossia-primary_lyx22
Report : https://github.com/latex3/latex2e/issues/836
Fix : https://github.com/latex3/latex2e/commit/878a4715df024fc3425d2bfd5d3d138b9395c178
ctests : doc/EmbeddedObjects
Report : https://github.com/gsilano/EuropeCV/issues/29
Fix : none yet
ctests : Modern_CV
Report : https://github.com/schlcht/microtype/issues/21
upstream: https://github.com/latex3/latex2e/issues/880
Fix : none yet
ctests : export/templates/Articles/Hebrew_Article_.*(dvi|pdf|pdf2|pdf3)

View File

@ -1,6 +1,10 @@
# After replacing with something that matches the search pattern, the next
# match should not consider the just replaced text (#4388)
#
UnuseShortcut "Tab" "*"
PrepareShortcuts
Lang it_IT.utf8
CO: findadv-01.ctrl
KD: 100

View File

@ -1,5 +1,9 @@
# Basic test on refactoring of mathematics notation
#
UnuseShortcut "Tab" "*"
PrepareShortcuts
Lang it_IT.utf8
CO: findadv-02.ctrl
TestBegin test.lyx -dbg key,find > findadv-02.loga.txt 2>&1

View File

@ -1,5 +1,9 @@
# Regression test for #7245
#
UnuseShortcut "Tab" "*"
PrepareShortcuts
Lang it_IT.utf8
CO: findadv-04.ctrl
TestBegin test.lyx -dbg key,find > findadv-04.loga.txt 2>&1

View File

@ -2,6 +2,10 @@
# again the search pattern, should not result in a double replacement
# (#7442)
#
UnuseShortcut "Tab" "*"
PrepareShortcuts
Lang sk_SK.utf8
CO: findadv-12.ctrl
TestBegin test.lyx -dbg key,find > findadv-12.loga.txt 2>&1

View File

@ -1,6 +1,9 @@
# Avoiding recursive replacements when replaced text matches search pattern
# Addresses #7675.
#
UnuseShortcut "Tab" "*"
PrepareShortcuts
Lang it_IT.utf8

View File

@ -1,6 +1,10 @@
# Test for searching the special LyX and LaTeX words
# when ignoring format
UnuseShortcut "Tab" "*"
PrepareShortcuts
Lang sk_SK.utf8
TestBegin test.lyx -dbg key,find > findadv-logo.loga.txt 2>&1
KK: This should be a LaTeX logo:

View File

@ -1,5 +1,7 @@
# Finding styles with regexp
UseShortcut "C-F20" "regexp-mode"
UnuseShortcut "Tab" "*"
PrepareShortcuts
Lang sk_SK.utf8

View File

@ -244,3 +244,10 @@ Sublabel: lyx_later
# failing (and are not regressions).
export/.*/(ar|ca|cs|da|de|el|es|eu|fa|fr|gl|he|hu|id|it|ja|ko|lt|nb|nl|pl|pt|pt_BR|pt_PT|ro|ru|sk|sl|sr|sv|uk|zh_CN|).*_epub
# For zh_CN: Jürgen pointed out that it might be due to this issue:
# https://tex.stackexchange.com/questions/548139/
# TODO: and that we might want to report it here:
# https://www.nongnu.org/cjk/
# ML discussion was here:
# https://www.mail-archive.com/lyx-devel@lists.lyx.org/msg217924.html
export/doc/zh_CN/Tutorial_(lyx22|lyx23|dvi|pdf|pdf2|pdf3)

View File

@ -317,6 +317,19 @@ export/templates/Articles/Econometrica_(dvi3|pdf5)_texF
# Error message says pdfTeX is required for xypdf.
export/export/latex/lyxbugs-resolved/6243-protect-xymatrix-in-caption_pdf5.*
# Issue triggered by June 2022 LaTeX 2e update, it is an issue in the .cls that
# likely will not be fixed since the cls does not appear to be maintained.
# https://github.com/latex3/latex2e/issues/836#issuecomment-1160073486
export/templates/Obsolete/.*American_Geophysical_Union.*_(lyx22|lyx23|pdf|dvi).*
export/templates/Obsolete/.*American_Geophysical_Union.*_(lyx22|lyx23|pdf|dvi).*
# Fails starting with microtype version v3.0e
# https://github.com/schlcht/microtype/issues/21
export/templates/Articles/Hebrew_Article_.*(dvi|pdf|pdf2|pdf3)
# https://github.com/gsilano/EuropeCV/pull/33
export/examples/(|es/)Curricula_Vitae/Europe_CV_(pdf.*|dvi|lyx22|lyx23)
# ================================================
Sublabel: externalissues

View File

@ -481,7 +481,8 @@ class Shortcuts:
def __init__(self):
self.shortcut_entry = re.compile(r'^\s*"([^"]+)"\s*\"([^"]+)\"')
self.bindings = {}
self.bind = re.compile(r'^\s*\\bind\s+"([^"]+)"')
self.unbindings = {}
self.bind = re.compile(r'^\s*\\(un)?bind\s+"([^"]+)"')
if lyx_userdir_ver is None:
self.dir = lyx_userdir
else:
@ -496,6 +497,15 @@ class Shortcuts:
else:
die(1, "cad shortcut spec(" + c + ")")
def __UnuseShortcut(self, c):
m = self.shortcut_entry.match(c)
if m:
sh = m.group(1)
fkt = m.group(2)
self.unbindings[sh] = fkt
else:
die(1, "cad shortcut spec(" + c + ")")
def __PrepareShortcuts(self):
if not self.dir is None:
tmp = tempfile.NamedTemporaryFile(suffix='.bind', delete=False)
@ -511,11 +521,15 @@ class Shortcuts:
m = self.bind.match(line)
if m:
bindfound = True
val = m.group(1)
val = m.group(2)
if val in self.bindings:
if self.bindings[val] != "":
tmp.write("\\bind \"" + val + "\" \"" + self.bindings[val] + "\"\n")
self.bindings[val] = ""
elif val in self.unbindings:
if self.unbindings[val] != "":
tmp.write("\\unbind \"" + val + "\" \"" + self.unbindings[val] + "\"\n")
self.unbindings[val] = ""
else:
tmp.write(line + '\n')
elif not bindfound:
@ -527,9 +541,14 @@ class Shortcuts:
)
for val in self.bindings:
if not self.bindings[val] is None:
if self.bindings[val] != "":
if self.bindings[val] != "":
tmp.write("\\bind \"" + val + "\" \"" + self.bindings[val] + "\"\n")
self.bindings[val] = ""
for val in self.unbindings:
if not self.unbindings[val] is None:
if self.unbindings[val] != "":
tmp.write("\\unbind \"" + val + "\" \"" + self.unbindings[val] + "\"\n")
self.unbindings[val] = ""
tmp.close()
shutil.move(tmp.name, self.dir + '/bind/user.bind')
else:
@ -538,6 +557,8 @@ class Shortcuts:
def dispatch(self, c):
if c[0:12] == 'UseShortcut ':
self.__UseShortcut(c[12:])
elif c[0:14] == 'UnuseShortcut ':
self.__UnuseShortcut(c[14:])
elif c == 'PrepareShortcuts':
print('Preparing usefull sortcuts for tests')
self.__PrepareShortcuts()

View File

@ -284,14 +284,14 @@ if (LYX_USE_QT MATCHES "QT5|QT6")
else()
set(QtVal Qt6)
endif()
set(CMAKE_REQUIRED_INCLUDES ${Qt5Core_INCLUDE_DIRS})
set(CMAKE_REQUIRED_INCLUDES ${${QtVal}Core_INCLUDE_DIRS})
set(CMAKE_REQUIRED_FLAGS)
#message(STATUS "${QtVal}Core_INCLUDE_DIRS = ${${QtVal}Core_INCLUDE_DIRS}")
check_include_file_cxx(QtGui/qtgui-config.h HAVE_QTGUI_CONFIG_H)
if (HAVE_QTGUI_CONFIG_H)
set(lyx_qt5_config "QtGui/qtgui-config.h")
set(lyx_qt_config "QtGui/qtgui-config.h")
else()
set(lyx_qt5_config "QtCore/qconfig.h")
set(lyx_qt_config "QtCore/qconfig.h")
endif()
if(WIN32)
set(QT_USES_X11 OFF CACHE BOOL "Win32 compiled without X11")
@ -299,7 +299,7 @@ if (LYX_USE_QT MATCHES "QT5|QT6")
else()
check_cxx_source_runs(
"
#include <${lyx_qt5_config}>
#include <${lyx_qt_config}>
#include <string>
using namespace std;
string a(QT_QPA_DEFAULT_PLATFORM_NAME);
@ -312,8 +312,9 @@ if (LYX_USE_QT MATCHES "QT5|QT6")
}
"
QT_USES_X11)
if(QT_USES_X11)
if(QT_USES_X11 AND NOT LYX_USE_QT MATCHES "QT6")
set(QPA_XCB ${QT_USES_X11})
message(STATUS "Found QPA_XCB = ${QPA_XCB}")
endif()
endif()
@ -335,8 +336,9 @@ if (LYX_USE_QT MATCHES "QT5|QT6")
}
"
QT_HAS_X11_EXTRAS)
set(HAVE_QT5_X11_EXTRAS ${QT_HAS_X11_EXTRAS})
set(LYX_QT5_X11_EXTRAS_LIBRARY ${_x11extra_link_libraries})
string(TOUPPER ${QtVal} QTVAL)
set(HAVE_${QTVAL}_X11_EXTRAS ${QT_HAS_X11_EXTRAS})
set(LYX_${QTVAL}_X11_EXTRAS_LIBRARY ${_x11extra_link_libraries})
endif()
if (${QtVal}WinExtras_FOUND)
get_target_property(_winextra_prop ${QtVal}::WinExtras IMPORTED_CONFIGURATIONS)

View File

@ -167,7 +167,9 @@ elseif(CYGWIN)
elseif(WIN32)
set(lyxrcorig "${TOP_SRC_DIR}/development/Win32/lyxrc.dist.in")
endif()
install(FILES ${TOP_SRC_DIR}/lib/images/lyx.svg DESTINATION ${LYX_DATA_SUBDIR}/images/)
foreach(_file lyx.svg icon.aliases)
install(FILES ${TOP_SRC_DIR}/lib/images/${_file} DESTINATION ${LYX_DATA_SUBDIR}/images/)
endforeach()
if(NOT lyxrcorig STREQUAL "")
configure_file("${lyxrcorig}" lyxrc.dist)

View File

@ -629,7 +629,9 @@ dist_images_DATA1X = \
images/layout-toggle_Section.svgz \
images/lyx.svg \
images/lyxfiles-system.svgz \
images/lyxfiles-system-folder.svgz \
images/lyxfiles-user.svgz \
images/lyxfiles-user-folder.svgz \
images/lyx-quit.svgz \
images/marginalnote-insert.svgz \
images/master-buffer-update.svgz \
@ -740,7 +742,8 @@ dist_images_DATA = \
images/banner.png \
$(dist_images_DATA1X) \
$(dist_images_DATA2X) \
$(dist_images_DATA3X)
$(dist_images_DATA3X) \
images/icon.aliases
imagesmathdir = $(imagesdir)/math
dist_imagesmath_DATA = \

View File

@ -32,6 +32,11 @@
* Continuous spellcheck is now on by default, but only if the user does not have
an existing preferences file. In that case, the old setting is preserved.
* Document (or selection statistics) is now shown in status bar and can be
disabled by the context menu.
* The actual enabled state of the synchronize TeX output option of the document
is used to enable or disable the menu item for forward-search.
!!Documents compilation process and images conversion

View File

@ -235,6 +235,8 @@
\AddVariable{fmtversion}{\fmtversion}
%%% Crucial versions
% This one introduces \textsubscript
\TestLaTeXVersion{2005/12/01}
% This one introduces path encoding changes
\TestLaTeXVersion{2019/10/01}
% This introduces all math and text spaces
@ -591,6 +593,9 @@
% With this version, hyperref option unicode is true
% by default
\TestPackageVersion{hyperref}{2021/02/04}
% As of this version, the ucs package must be explicitly
% loaded to get utf8x (rather than utf8) encoding tables
\TestPackageVersion{ucs}{2022/08/07}
%%% Document classes
% The list of layout files has been put in this file here by the

View File

@ -357,6 +357,18 @@ def check_java():
return ''
def checkMacOSappInstalled(prog):
'''
Use metadata lookup to search for an "installed" macOS application bundle.
'''
if sys.platform == 'darwin' and len(prog) >= 1:
command = r'mdfind "kMDItemContentTypeTree == \"com.apple.application\"c && kMDItemFSName == \"%s\""' % prog
result = cmdOutput(command)
logger.debug(command + ": " + result)
return result != ''
return False
def checkProgAlternatives(description, progs, rc_entry=None,
alt_rc_entry=None, path=None, not_found=''):
'''
@ -395,6 +407,10 @@ def checkProgAlternatives(description, progs, rc_entry=None,
continue
msg = '+checking for "' + ac_word + '"... '
found_alt = False
if len(alt_rc_entry) >= 1 and ac_word.endswith('.app') and checkMacOSappInstalled(ac_word):
logger.info('+add alternative app ' + ac_word)
addToRC(alt_rc_entry[0].replace('%%', ac_word))
found_alt = True
for ac_dir in path:
if hasattr(os, "access") and not os.access(ac_dir, os.F_OK):
continue
@ -545,7 +561,7 @@ def checkViewerNoRC(description, progs, rc_entry=None, path=None):
def checkEditorNoRC(description, progs, rc_entry=None, path=None):
''' The same as checkViewer, but do not add rc entry '''
''' The same as checkEditor, but do not add rc entry '''
if rc_entry is None:
rc_entry = []
if path is None:
@ -705,7 +721,7 @@ texteditors = ['xemacs', 'gvim', 'kedit', 'kwrite', 'kate',
'xed', 'notepad', 'WinEdt', 'WinShell', 'PSPad']
def checkFormatEntries(dtl_tools):
''' Check all formats (\Format entries) '''
r''' Check all formats (\Format entries) '''
checkViewerEditor('a Tgif viewer and editor', ['tgif'],
rc_entry = [r'\Format tgif "obj, tgo" Tgif "" "%%" "%%" "vector" "application/x-tgif"'])
#
@ -812,7 +828,7 @@ def checkFormatEntries(dtl_tools):
checkViewer('a PDF previewer',
['pdfview', 'kpdf', 'okular', 'qpdfview --unique',
'evince', 'xreader', 'kghostview', 'xpdf', 'SumatraPDF',
'acrobat', 'acroread', 'mupdf',
'acrobat', 'acroread', 'mupdf', 'Skim.app',
'gv', 'ghostview', 'AcroRd32', 'gsview64', 'gsview32'],
rc_entry = [r'''\Format pdf pdf "PDF (ps2pdf)" P "%%" "" "document,vector,menu=export" ""
\Format pdf2 pdf "PDF (pdflatex)" F "%%" "" "document,vector,menu=export" ""
@ -876,7 +892,7 @@ def checkFormatEntries(dtl_tools):
def checkConverterEntries():
''' Check all converters (\converter entries) '''
r''' Check all converters (\converter entries) '''
checkProg('the pdflatex program', ['pdflatex $$i'],
rc_entry = [ r'\converter pdflatex pdf2 "%%" "latex=pdflatex,hyperref-driver=pdftex"' ])
@ -901,7 +917,7 @@ def checkConverterEntries():
path, t2l = checkProg('a LaTeX/Noweb -> LyX converter', [quoteIfSpace(in_binary_subdir), quoteIfSpace(in_binary_subdir + version_suffix), quoteIfSpace(in_binary_dir), quoteIfSpace(in_binary_dir + version_suffix), 'tex2lyx' + version_suffix, 'tex2lyx'],
rc_entry = [r'''\converter latex lyx "%% -f $$i $$o" ""
\converter latexclipboard lyx "%% -fixedenc utf8 -f $$i $$o" ""
\converter latexclipboard lyx "%% -fixedenc utf8 -c $$c -m $$m -f $$i $$o" ""
\converter literate lyx "%% -n -m noweb -f $$i $$o" ""
\converter sweave lyx "%% -n -m sweave -f $$i $$o" ""
\converter knitr lyx "%% -n -m knitr -f $$i $$o" ""'''], not_found = 'tex2lyx')
@ -1071,13 +1087,15 @@ def checkConverterEntries():
# Only define a converter from pdf6 for graphics
checkProg('a PDF to EPS converter', ['pdftops -eps -f 1 -l 1 $$i $$o'],
rc_entry = [ r'\converter pdf6 eps "%%" ""' ])
# Define a converter from pdf6 to png for Macs where pdftops is missing.
# sips:Define a converter from pdf6 to png for Macs where pdftops is missing.
# The converter utility sips allows to force the dimensions of the resulting
# png image. The value of 800 pixel for the width is arbitrary and not
# related to the current screen resolution or width.
# There is no converter parameter for this information.
#
#pdftoppm: Some systems ban IM eps->png conversion. We will offer eps->pdf->png route instead.
checkProg('a PDF to PNG converter',
['sips --resampleWidth 800 --setProperty format png $$i --out $$o'],
['sips --resampleWidth 800 --setProperty format png $$i --out $$o' , 'pdftoppm -r 72 -png -singlefile $$i > $$o'],
rc_entry = [ r'\converter pdf6 png "%%" ""' ])
# Create one converter for a PDF produced using TeX fonts and one for a
# PDF produced using non-TeX fonts. This does not produce non-unique
@ -1174,8 +1192,23 @@ def checkConverterEntries():
checkProg('an EPS -> PDF converter', ['epstopdf'],
rc_entry = [ r'\converter eps pdf6 "epstopdf --outfile=$$o $$i" ""'])
#
checkProg('an EPS -> PNG converter', ['magick $$i[0] $$o', 'convert $$i[0] $$o'],
rc_entry = [ r'\converter eps png "%%" ""'])
# Due to more restrictive policies, it is possible that (image)magick
# does not allow conversions from eps to png.
# So before setting the converter test it it on a mock file
_, cmd = checkProg('an EPS -> PNG converter', ['magick', 'convert'])
if cmd:
writeToFile('mock.eps', r'%!PS')
try:
subprocess.check_call([cmd, "mock.eps", "mock.png"])
removeFiles(['mock.eps', 'mock.png'])
rc_entry = r'\converter eps png "%s $$i[0] $$o" ""'
addToRC(rc_entry % cmd)
except:
removeFiles(['mock.eps'])
#needs empty record otherwise default converter will be issued
rc_entry = r'\converter eps png "" ""'
addToRC(rc_entry)
logger.info('ImageMagick seems to ban conversions from EPS. Disabling direct EPS->PNG.')
#
# no agr -> pdf6 converter, since the pdf library used by gracebat is not
# free software and therefore not compiled in in many installations.
@ -1269,7 +1302,7 @@ def checkConverterEntries():
path, lilypond = checkProg('a LilyPond -> EPS/PDF/PNG converter', ['lilypond'])
if (lilypond):
version_string = cmdOutput("lilypond --version")
match = re.match('GNU LilyPond (\S+)', version_string)
match = re.match(r'GNU LilyPond (\S+)', version_string)
if match:
version_number = match.groups()[0]
version = version_number.split('.')
@ -1299,7 +1332,7 @@ def checkConverterEntries():
continue
found_lilypond_book = True
match = re.match('(\S+)$', version_string)
match = re.match(r'(\S+)$', version_string)
if match:
version_number = match.groups()[0]
version = version_number.split('.')
@ -1426,7 +1459,7 @@ def _checkForClassExtension(x):
return x.strip()
def processLayoutFile(file):
""" process layout file and get a line of result
r""" process layout file and get a line of result
Declare lines look like this:
@ -1454,8 +1487,8 @@ def processLayoutFile(file):
"""
classname = file.split(os.sep)[-1].split('.')[0]
# return ('[a,b]', 'a', ',b,c', 'article') for \DeclareLaTeXClass[a,b,c]{article}
p = re.compile('\s*#\s*\\\\DeclareLaTeXClass\s*(\[([^,]*)(,.*)*])*\s*{(.*)}\s*$')
q = re.compile('\s*#\s*\\\\DeclareCategory{(.*)}\s*$')
p = re.compile('\\s*#\\s*\\\\DeclareLaTeXClass\\s*(\\[([^,]*)(,.*)*])*\\s*{(.*)}\\s*$')
q = re.compile('\\s*#\\s*\\\\DeclareCategory{(.*)}\\s*$')
classdeclaration = ""
categorydeclaration = '""'
for line in open(file, 'r', encoding='utf8').readlines():
@ -1547,7 +1580,7 @@ def checkLatexConfig(check_config):
# Construct the list of classes to test for.
# build the list of available layout files and convert it to commands
# for chkconfig.ltx
declare = re.compile('\\s*#\\s*\\\\DeclareLaTeXClass\\s*(\[([^,]*)(,.*)*\])*\\s*{(.*)}\\s*$')
declare = re.compile('\\s*#\\s*\\\\DeclareLaTeXClass\\s*(\\[([^,]*)(,.*)*\\])*\\s*{(.*)}\\s*$')
category = re.compile('\\s*#\\s*\\\\DeclareCategory{(.*)}\\s*$')
empty = re.compile('\\s*$')
testclasses = list()
@ -1563,7 +1596,7 @@ def checkLatexConfig(check_config):
for line in open(file, 'r', encoding='utf8').readlines():
if not empty.match(line) and line[0] != '#'[0]:
if decline == "":
logger.warning("Failed to find valid \Declare line "
logger.warning(r"Failed to find valid \Declare line "
"for layout file `%s'.\n\t=> Skipping this file!" % file)
nodeclaration = True
# A class, but no category declaration. Just break.
@ -1672,7 +1705,7 @@ def checkModulesConfig():
def processModuleFile(file, filename):
''' process module file and get a line of result
r''' process module file and get a line of result
The top of a module file should look like this:
#\DeclareLyXModule[LaTeX Packages]{ModuleName}
@ -1686,12 +1719,12 @@ def processModuleFile(file, filename):
We expect output:
"ModuleName" "filename" "Description" "Packages" "Requires" "Excludes" "Category"
'''
remods = re.compile('\s*#\s*\\\\DeclareLyXModule\s*(?:\[([^]]*?)\])?{(.*)}')
rereqs = re.compile('\s*#+\s*Requires: (.*)')
reexcs = re.compile('\s*#+\s*Excludes: (.*)')
remods = re.compile('\\s*#\\s*\\\\DeclareLyXModule\\s*(?:\\[([^]]*?)\\])?{(.*)}')
rereqs = re.compile(r'\s*#+\s*Requires: (.*)')
reexcs = re.compile(r'\s*#+\s*Excludes: (.*)')
recaty = re.compile('\\s*#\\s*\\\\DeclareCategory{(.*)}\\s*$')
redbeg = re.compile('\s*#+\s*DescriptionBegin\s*$')
redend = re.compile('\s*#+\s*DescriptionEnd\s*$')
redbeg = re.compile(r'\s*#+\s*DescriptionBegin\s*$')
redend = re.compile(r'\s*#+\s*DescriptionEnd\s*$')
modname = desc = pkgs = req = excl = catgy = ""
readingDescription = False
@ -1739,7 +1772,7 @@ def processModuleFile(file, filename):
continue
if modname == "":
logger.warning("Module file without \DeclareLyXModule line. ")
logger.warning(r"Module file without \DeclareLyXModule line. ")
return ""
if pkgs:
@ -1803,7 +1836,7 @@ def checkCiteEnginesConfig():
def processCiteEngineFile(file, filename):
''' process cite engines file and get a line of result
r''' process cite engines file and get a line of result
The top of a cite engine file should look like this:
#\DeclareLyXCiteEngine[LaTeX Packages]{CiteEngineName}
@ -1813,12 +1846,12 @@ def processCiteEngineFile(file, filename):
We expect output:
"CiteEngineName" "filename" "CiteEngineType" "CiteFramework" "DefaultBiblio" "Description" "Packages"
'''
remods = re.compile('\s*#\s*\\\\DeclareLyXCiteEngine\s*(?:\[([^]]*?)\])?{(.*)}')
redbeg = re.compile('\s*#+\s*DescriptionBegin\s*$')
redend = re.compile('\s*#+\s*DescriptionEnd\s*$')
recet = re.compile('\s*CiteEngineType\s*(.*)')
redb = re.compile('\s*DefaultBiblio\s*(.*)')
resfm = re.compile('\s*CiteFramework\s*(.*)')
remods = re.compile('\\s*#\\s*\\\\DeclareLyXCiteEngine\\s*(?:\\[([^]]*?)\\])?{(.*)}')
redbeg = re.compile(r'\s*#+\s*DescriptionBegin\s*$')
redend = re.compile(r'\s*#+\s*DescriptionEnd\s*$')
recet = re.compile(r'\s*CiteEngineType\s*(.*)')
redb = re.compile(r'\s*DefaultBiblio\s*(.*)')
resfm = re.compile(r'\s*CiteFramework\s*(.*)')
modname = desc = pkgs = cet = db = cfm = ""
readingDescription = False
@ -1862,7 +1895,7 @@ def processCiteEngineFile(file, filename):
continue
if modname == "":
logger.warning("Cite Engine File file without \DeclareLyXCiteEngine line. ")
logger.warning(r"Cite Engine File file without \DeclareLyXCiteEngine line. ")
return ""
if pkgs:

View File

@ -1,5 +1,5 @@
#LyX 2.4 created this file. For more info see https://www.lyx.org/
\lyxformat 608
\lyxformat 609
\begin_document
\begin_header
\save_transient_properties true
@ -129,6 +129,7 @@ shapepar
\docbook_table_output 0
\docbook_mathml_prefix 1
\author -712698321 "Jürgen Spitzmüller"
\author 177693 "x"
\author 5863208 "ab"
\author 244031559 "Yuriy"
\author 630872221 "Jean-Pierre Chrétien" jeanpierre.chretien@free.fr
@ -2214,11 +2215,23 @@ misuse
status collapsed
\begin_layout Plain Layout
\change_deleted 177693 1654669036
Protected
\change_inserted 177693 1654669038
Non-Breaking
\change_unchanged
\begin_inset space ~
\end_inset
\change_deleted 177693 1654669040
Blanks
\change_inserted 177693 1654669041
Spaces
\change_unchanged
\end_layout
\end_inset

View File

@ -1,5 +1,5 @@
#LyX 2.4 created this file. For more info see https://www.lyx.org/
\lyxformat 608
\lyxformat 609
\begin_document
\begin_header
\save_transient_properties true
@ -141,6 +141,7 @@ logicalmkup
\author -712698321 "Jürgen Spitzmüller"
\author -584632292 "Richard Kimberly Heck"
\author -495245474 "Jean-Marc Lasgouttes"
\author 177693 "x"
\author 5863208 "ab"
\author 34634807 "Jean-Pierre"
\author 232239728 "Owner"
@ -14597,7 +14598,19 @@ FreeSpacing
Note that
\change_unchanged
\SpecialChar LyX
will create protected blanks for the additional blanks when
will create
\change_deleted 177693 1654669077
protected
\change_inserted 177693 1654669079
non-breaking
\change_unchanged
\change_deleted 177693 1654669082
blanks
\change_inserted 177693 1654669082
spaces
\change_unchanged
for the additional blanks when
\change_deleted 34634807 1619626461
in
\change_unchanged
@ -15544,7 +15557,13 @@ Manual
\end_inset
means the label is the very first word (up to the first real blank).
Use protected spaces if you want more than one word as the label.
Use
\change_deleted 177693 1654669087
protected
\change_inserted 177693 1654669089
non-breaking
\change_unchanged
spaces if you want more than one word as the label.
\end_layout

View File

@ -252,6 +252,7 @@ varwidth
\docbook_mathml_prefix 1
\author -1382599118 "Daniel"
\author -712698321 "Jürgen Spitzmüller"
\author 177693 "x"
\author 630872221 "Jean-Pierre Chrétien" jeanpierre.chretien@free.fr
\end_header
@ -26539,8 +26540,14 @@ arg "dialog-show-new-inset ref"
\end_layout
\begin_layout Standard
It is recommended that you use a protected space between the cross-reference
name and its number to avoid line breaks between them.
It is recommended that you use a
\change_deleted 177693 1654669168
protected
\change_inserted 177693 1654669170
non-breaking
\change_unchanged
space between the cross-reference name and its number to avoid line breaks
between them.
If a cross-reference refers to a non-existing label, you will see two question
marks in the output instead of the reference.
\end_layout
@ -29608,7 +29615,13 @@ thefigure
\begin_inset Quotes erd
\end_inset
creates a protected space.
creates a
\change_deleted 177693 1654669177
protected
\change_inserted 177693 1654669179
non-breaking
\change_unchanged
space.
\end_layout
\begin_layout Standard

View File

@ -1,5 +1,5 @@
#LyX 2.4 created this file. For more info see https://www.lyx.org/
\lyxformat 606
\lyxformat 609
\begin_document
\begin_header
\save_transient_properties true
@ -232,7 +232,9 @@ subequations
\html_css_as_file 0
\html_be_strict false
\docbook_table_output 0
\docbook_mathml_prefix 1
\author -563046850 "Jean-Marc LASGOUTTES"
\author 177693 "x"
\author 5863208 "ab"
\author 47243155 "Jean-Marc"
\author 232239728 "Owner"
@ -1028,11 +1030,23 @@ always
be behind the command to end it.
This space doesn't appear in the output.
When the space should appear in the output, the space must be followed
by a protected space in normal text.
by a
\change_deleted 177693 1654668848
protected
\change_inserted 177693 1654668851
non-breaking
\change_unchanged
space in normal text.
\end_layout
\begin_layout Standard
A protected space is inserted with
A
\change_deleted 177693 1654668857
protected
\change_inserted 177693 1654668860
non-breaking
\change_unchanged
space is inserted with
\change_inserted 232239728 1610908934
\change_deleted 5863208 1612729787
@ -1060,7 +1074,13 @@ or with the menu selection
\change_inserted 232239728 1610908897
Insert\SpecialChar menuseparator
Formatting\SpecialChar menuseparator
Protected Space
\change_deleted 177693 1654668863
Protected
\change_inserted 177693 1654668975
Non-Breaking Normal
\change_inserted 232239728 1610908897
Space
\family default
or
\change_inserted 5863208 1612729638
@ -11215,7 +11235,13 @@ Space ! horizontal ! predefined
\begin_layout Standard
Sometimes it is necessary to insert horizontal space into a formula.
This is done by inserting a protected space (shortcut
This is done by inserting a
\change_deleted 177693 1654668870
protected
\change_inserted 177693 1654668872
non-breaking
\change_unchanged
space (shortcut
\change_inserted 5863208 1612729962
\begin_inset Info
@ -11812,7 +11838,13 @@ Number of
\family sans
Space
\family default
keystrokes after inserting the protected space
keystrokes after inserting the
\change_deleted 177693 1654668881
protected
\change_inserted 177693 1654668883
non-breaking
\change_unchanged
space
\end_layout
\end_inset

View File

@ -1,5 +1,5 @@
#LyX 2.4 created this file. For more info see https://www.lyx.org/
\lyxformat 600
\lyxformat 609
\begin_document
\begin_header
\save_transient_properties true
@ -21,9 +21,9 @@ logicalmkup
\font_default_family default
\use_non_tex_fonts false
\font_sc false
\font_roman_osf false
\font_sans_osf false
\font_typewriter_osf false
\font_roman_osf false
\font_sf_scale 100 100
\font_tt_scale 100 100
\use_microtype false
@ -88,14 +88,19 @@ logicalmkup
\papercolumns 1
\papersides 2
\paperpagestyle headings
\tablestyle default
\tracking_changes true
\postpone_fragile_content false
\output_changes false
\change_bars false
\postpone_fragile_content false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\docbook_table_output 0
\docbook_mathml_prefix 1
\author -712698321 "Jürgen Spitzmüller"
\author -131811572 "Yuriy Skalko"
\author 177693 "x"
\end_header
\begin_body
@ -1630,11 +1635,25 @@ Return
item
\emph default
, one way is to use the
\change_deleted 177693 1654668928
\family sans
Protected
\change_inserted 177693 1654668930
Non-Breaking
\change_deleted 177693 1654668945
\begin_inset space ~
\end_inset
\change_inserted 177693 1654668949
Normal
\begin_inset space ~
\end_inset
\change_unchanged
Break
\family default
, which you get by typing
@ -1773,11 +1792,25 @@ List
) from the rest of the paragraph.
If you want to have more than one word in the definition, then separate
the words with
\change_deleted 177693 1654668936
\family sans
Protected
\change_inserted 177693 1654668939
Non-Breaking
\change_unchanged
\begin_inset space ~
\end_inset
\change_inserted 177693 1654668953
Normal
\begin_inset space ~
\end_inset
\change_unchanged
Space
\family default
s.

File diff suppressed because it is too large Load Diff

View File

@ -8752,12 +8752,10 @@ Unformatiert
\end_layout
\begin_layout Verbatim
Dies ist Unformatiert.
\end_layout
\begin_layout Verbatim
Die folgenden 2 Zeilen sind leer:
\end_layout
@ -8770,7 +8768,6 @@ Die folgenden 2 Zeilen sind leer:
\end_layout
\begin_layout Verbatim
Fast alles ist in Unformatiert erlaubt:"%&$§#~'`
\backslash
}][{|
@ -8794,7 +8791,6 @@ Unformatiert
\end_layout
\begin_layout Verbatim*
Dies ist Unformatiert*.
\end_layout
@ -30031,7 +30027,7 @@ Automatisch
\family sans
Prozessor
\family default
in in
in
\family sans
Werkzeuge\SpecialChar menuseparator
Einstellungen\SpecialChar menuseparator
@ -33457,7 +33453,7 @@ en.
\begin_layout Quote
\series bold
PackageOptions hyperref option1,option1
PackageOptions hyperref option1,option2
\end_layout
\begin_layout Standard
@ -39569,7 +39565,7 @@ reference "subsec:Gedankenstriche-und-Zeilenumbrüche"
\end_inset
für ein ein Anwendungsbeispiel.
für ein Anwendungsbeispiel.
\end_layout
\begin_layout Description
@ -40535,8 +40531,8 @@ Nächste Notiz, Änderung, Querverweis
\end_layout
\begin_layout Standard
Springt zur nächsten Notiz, Änderung, oder Querverweis der der aktuellen
Cursorposition folgt.
Springt zur nächsten Notiz, Änderung, oder Querverweis nach der aktuellen
Cursorposition.
\end_layout
\begin_layout Subsection
@ -47805,7 +47801,7 @@ TEXINPUTS-Präfix Die TEXINPUTS Umgebungsvariable erlaubt es externe Dateien,
chen des Betriebssystems (':' auf UNIX-artigen Systemen und ';' auf Windows)
getrennt sind.
Falls Dateien eingefügt werden, werden die Pfade, die im TEXINPUTS-Präfix
aufgelistet sind, nach den den eingefügten Dateien gescannt.
aufgelistet sind, nach den eingefügten Dateien gescannt.
Es ist zu beachten, dass jeder nicht-absolute Pfad im TEXINPUTS-Präfix
als relativ zum Verzeichnis Ihrer \SpecialChar LyX
-Datei betrachtet wird.

View File

@ -1,5 +1,5 @@
#LyX 2.4 created this file. For more info see https://www.lyx.org/
\lyxformat 608
\lyxformat 609
\begin_document
\begin_header
\save_transient_properties true
@ -235,7 +235,7 @@ M
eunier-Guttin-Cluzel
\noun default
.
Revue finale 1.6 et mises à jour 2.0, 2.1, 2.2 et 2.3: Jean-Pierre
Revue finale 1.6 et mises à jour 2.0, 2.1, 2.2, 2.3 et 2.4: Jean-Pierre
\noun on
Chrétien
\noun default

View File

@ -1,5 +1,5 @@
#LyX 2.4 created this file. For more info see https://www.lyx.org/
\lyxformat 600
\lyxformat 609
\begin_document
\begin_header
\save_transient_properties true
@ -18,7 +18,7 @@
\maintain_unincluded_children no
\language english
\language_package default
\inputencoding utf8x
\inputencoding utf8
\fontencoding auto
\font_roman "default" "default"
\font_sans "default" "default"
@ -27,9 +27,9 @@
\font_default_family default
\use_non_tex_fonts false
\font_sc false
\font_roman_osf false
\font_sans_osf false
\font_typewriter_osf false
\font_roman_osf false
\font_sf_scale 100 100
\font_tt_scale 100 100
\use_microtype false
@ -39,6 +39,8 @@
\output_sync 0
\bibtex_command bibtex
\index_command default
\float_placement class
\float_alignment class
\paperfontsize 10
\spacing single
\use_hyperref false
@ -84,12 +86,16 @@
\papercolumns 1
\papersides 1
\paperpagestyle default
\tablestyle default
\tracking_changes false
\postpone_fragile_content false
\output_changes false
\change_bars false
\postpone_fragile_content false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\docbook_table_output 0
\docbook_mathml_prefix 1
\end_header
\begin_body

View File

@ -1,5 +1,5 @@
#LyX 2.4 created this file. For more info see https://www.lyx.org/
\lyxformat 600
\lyxformat 609
\begin_document
\begin_header
\save_transient_properties true
@ -18,7 +18,7 @@
\maintain_unincluded_children no
\language spanish
\language_package default
\inputencoding utf8x
\inputencoding utf8
\fontencoding auto
\font_roman "default" "default"
\font_sans "default" "default"
@ -27,9 +27,9 @@
\font_default_family default
\use_non_tex_fonts false
\font_sc false
\font_roman_osf false
\font_sans_osf false
\font_typewriter_osf false
\font_roman_osf false
\font_sf_scale 100 100
\font_tt_scale 100 100
\use_microtype false
@ -39,6 +39,8 @@
\output_sync 0
\bibtex_command bibtex
\index_command default
\float_placement class
\float_alignment class
\paperfontsize 10
\spacing single
\use_hyperref false
@ -84,12 +86,16 @@
\papercolumns 1
\papersides 1
\paperpagestyle default
\tablestyle default
\tracking_changes false
\postpone_fragile_content false
\output_changes false
\change_bars false
\postpone_fragile_content false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\docbook_table_output 0
\docbook_mathml_prefix 1
\end_header
\begin_body

View File

@ -1274,7 +1274,7 @@ contributors = [
"Re: LyX 1.4cvs crash on Fedora Core 3",
"m=111204368700246",
"28 March 2005",
u"Added native support for \makebox to mathed. Several bug fixes, both to the source code and to the llncs layout file"),
u"Added native support for \\makebox to mathed. Several bug fixes, both to the source code and to the llncs layout file"),
contributor(u"LibreOffice Team",
"https://www.libreoffice.org/",

6
lib/images/icon.aliases Normal file
View File

@ -0,0 +1,6 @@
# Aliases for icon names. This allows to avoid duplication of icons
# Each line is of the form
# <original substring> <replacement substring>
dialog-toggle dialog-show
layout_ layout-toggle_
tabular-feature_set tabular-feature_toggle

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -145,7 +145,7 @@ def insert_to_preamble(document, text, index = 0):
# A dictionary of Unicode->LICR mappings for use in a Unicode string's translate() method
# Created from the reversed list to keep the first of alternative definitions.
licr_table = dict((ord(ch), cmd) for cmd, ch in unicode_reps[::-1])
licr_table = {ord(ch): cmd for cmd, ch in unicode_reps[::-1]}
def put_cmd_in_ert(cmd, is_open=False, as_paragraph=False):
"""

View File

@ -112,7 +112,7 @@ def update_inset_label(document):
i = find_token(lines, '\\begin_inset Label', i)
if i == -1:
return
lines[i] = '\\begin_inset LatexCommand \label{' + lines[i][19:] + '}'
lines[i] = '\\begin_inset LatexCommand \\label{' + lines[i][19:] + '}'
i = i + 1

View File

@ -69,7 +69,7 @@ def find_beginning_of_inset(lines, i):
def find_end_of_inset(lines, i):
" Finds the matching \end_inset"
r" Finds the matching \end_inset"
return find_end_of(lines, i, "\\begin_inset", "\\end_inset")
@ -143,7 +143,7 @@ def get_width(mo):
def remove_oldfloat(document):
" Change \begin_float .. \end_float into \begin_inset Float .. \end_inset"
r" Change \begin_float .. \end_float into \begin_inset Float .. \end_inset"
lines = document.body
i = 0
while True:
@ -250,7 +250,7 @@ def remove_pextra(document):
if flag:
flag = 0
if hfill:
start = ["","\hfill",""]+start
start = ["",r"\hfill",""]+start
else:
start = ['\\layout %s' % document.default_layout,''] + start
@ -324,7 +324,7 @@ def remove_oldert(document):
new = []
new2 = []
if check_token(lines[i], "\\layout LaTeX"):
new = ['\layout %s' % document.default_layout, "", ""]
new = [r'\layout %s' % document.default_layout, "", ""]
k = i+1
while True:
@ -808,7 +808,7 @@ def change_infoinset(document):
note_lines = [txt]+note_lines
for line in note_lines:
new = new + ['\layout %s' % document.default_layout, ""]
new = new + [r'\layout %s' % document.default_layout, ""]
tmp = line.split('\\')
new = new + [tmp[0]]
for x in tmp[1:]:

View File

@ -27,7 +27,7 @@ from parser_tools import find_token, find_end_of, get_value,\
# Private helper functions
def find_end_of_inset(lines, i):
"Finds the matching \end_inset"
r"Finds the matching \end_inset"
return find_end_of(lines, i, "\\begin_inset", "\\end_inset")

View File

@ -81,7 +81,7 @@ def get_next_paragraph(lines, i, format):
def find_end_of_inset(lines, i):
"Finds the matching \end_inset"
r"Finds the matching \end_inset"
return find_end_of(lines, i, "\\begin_inset", "\\end_inset")
def del_token(lines, token, start, end):
@ -103,7 +103,7 @@ def del_token(lines, token, start, end):
####################################################################
def remove_color_default(document):
" Remove \color default"
r" Remove \color default"
i = 0
while True:
i = find_token(document.body, "\\color default", i)
@ -114,12 +114,12 @@ def remove_color_default(document):
def add_end_header(document):
" Add \end_header"
r" Add \end_header"
document.header.append("\\end_header");
def rm_end_header(document):
" Remove \end_header"
r" Remove \end_header"
i = find_token(document.header, "\\end_header", 0)
if i == -1:
return
@ -169,14 +169,14 @@ def revert_amsmath(document):
def convert_spaces(document):
" \SpecialChar ~ -> \InsetSpace ~"
r" \SpecialChar ~ -> \InsetSpace ~"
for i in range(len(document.body)):
document.body[i] = document.body[i].replace("\\SpecialChar ~",
"\\InsetSpace ~")
def revert_spaces(document):
" \InsetSpace ~ -> \SpecialChar ~"
r" \InsetSpace ~ -> \SpecialChar ~"
regexp = re.compile(r'(.*)(\\InsetSpace\s+)(\S+)')
i = 0
while True:
@ -197,18 +197,18 @@ def revert_spaces(document):
def rename_spaces(document):
""" \InsetSpace \, -> \InsetSpace \thinspace{}
\InsetSpace \space -> \InsetSpace \space{}"""
""" \\InsetSpace \\, -> \\InsetSpace \thinspace{}
\\InsetSpace \\space -> \\InsetSpace \\space{}"""
for i in range(len(document.body)):
document.body[i] = document.body[i].replace("\\InsetSpace \\space",
"\\InsetSpace \\space{}")
document.body[i] = document.body[i].replace("\\InsetSpace \,",
document.body[i] = document.body[i].replace("\\InsetSpace \\,",
"\\InsetSpace \\thinspace{}")
def revert_space_names(document):
""" \InsetSpace \thinspace{} -> \InsetSpace \,
\InsetSpace \space{} -> \InsetSpace \space"""
""" \\InsetSpace \thinspace{} -> \\InsetSpace \\,
\\InsetSpace \\space{} -> \\InsetSpace \\space"""
for i in range(len(document.body)):
document.body[i] = document.body[i].replace("\\InsetSpace \\space{}",
"\\InsetSpace \\space")
@ -262,7 +262,7 @@ def revert_bibtex(document):
def remove_insetparent(document):
" Remove \lyxparent"
r" Remove \lyxparent"
i = 0
while True:
i = find_token(document.body, "\\begin_inset LatexCommand \\lyxparent", i)
@ -428,7 +428,7 @@ def revert_comment(document):
def add_end_layout(document):
" Add \end_layout"
r" Add \end_layout"
i = find_token(document.body, '\\layout', 0)
if i == -1:
@ -502,7 +502,7 @@ def add_end_layout(document):
def rm_end_layout(document):
" Remove \end_layout"
r" Remove \end_layout"
i = 0
while True:
i = find_token(document.body, '\\end_layout', i)
@ -544,7 +544,7 @@ def rm_body_changes(document):
def layout2begin_layout(document):
" \layout -> \begin_layout "
r" \layout -> \begin_layout "
i = 0
while True:
i = find_token(document.body, '\\layout', i)
@ -556,7 +556,7 @@ def layout2begin_layout(document):
def begin_layout2layout(document):
" \begin_layout -> \layout "
r" \begin_layout -> \layout "
i = 0
while True:
i = find_token(document.body, '\\begin_layout', i)
@ -1051,7 +1051,7 @@ def convert_minipage(document):
# convert the inner_position
if document.body[i][:14] == "inner_position":
innerpos = inner_pos[int(document.body[i][15])]
del document.body[i]
del document.body[i]
else:
innerpos = inner_pos[0]
@ -1972,9 +1972,9 @@ def convert_names(document):
'\\begin_layout %s' % document.default_layout,
"",
"%s" % firstname,
"\end_layout",
r"\end_layout",
"",
"\end_inset",
r"\end_inset",
"",
"",
"\\begin_inset CharStyle Surname",
@ -2229,7 +2229,7 @@ def use_x_binary(document):
def normalize_paragraph_params(document):
" Place all the paragraph parameters in their own line. "
body = document.body
allowed_parameters = '\\paragraph_spacing', '\\noindent', \
'\\align', '\\labelwidthstring', "\\start_of_appendix", \
"\\leftindent"

View File

@ -421,7 +421,7 @@ def revert_unicode_line(document, i, insets, spec_chars, replacement_character =
else:
if insets and insets[-1] == "Formula":
# avoid putting an ERT in a math; instead put command as text
command = command.replace('\\\\', '\mathrm{')
command = command.replace('\\\\', r'\mathrm{')
command = command + '}'
elif not insets or insets[-1] != "ERT":
# add an ERT inset with the replacement character
@ -491,7 +491,7 @@ def revert_cs_label(document):
def convert_bibitem(document):
""" Convert
r""" Convert
\bibitem [option]{argument}
to
@ -576,16 +576,16 @@ commandparams_info = {
def convert_commandparams(document):
""" Convert
\begin_inset LatexCommand \cmdname[opt1][opt2]{arg}
\end_inset
\\begin_inset LatexCommand \\cmdname[opt1][opt2]{arg}
\\end_inset
to
\begin_inset LatexCommand cmdname
\\begin_inset LatexCommand cmdname
name1 "opt1"
name2 "opt2"
name3 "arg"
\end_inset
\\end_inset
name1, name2 and name3 can be different for each command.
"""
@ -896,7 +896,7 @@ def revert_cleardoublepage(document):
def convert_lyxline(document):
" remove fontsize commands for \lyxline "
r" remove fontsize commands for \lyxline "
# The problematic is: The old \lyxline definition doesn't handle the fontsize
# to change the line thickness. The new definiton does this so that imported
# \lyxlines would have a different line thickness. The eventual fontsize command
@ -1687,7 +1687,7 @@ def revert_CJK(document):
def revert_preamble_listings_params(document):
" Revert preamble option \listings_params "
r" Revert preamble option \listings_params "
i = find_token(document.header, "\\listings_params", 0)
if i != -1:
document.preamble.append('\\usepackage{listings}')
@ -2005,10 +2005,10 @@ def convert_arabic (document):
document.header[i] = "\\language arabic_arabtex"
i = 0
while i < len(document.body):
h = document.body[i].find("\lang arabic", 0, len(document.body[i]))
h = document.body[i].find(r"\lang arabic", 0, len(document.body[i]))
if (h != -1):
# change the language name
document.body[i] = '\lang arabic_arabtex'
document.body[i] = r'\lang arabic_arabtex'
i = i + 1
@ -2020,10 +2020,10 @@ def revert_arabic (document):
document.header[i] = "\\language arabic"
i = 0
while i < len(document.body):
h = document.body[i].find("\lang arabic_arabtex", 0, len(document.body[i]))
h = document.body[i].find(r"\lang arabic_arabtex", 0, len(document.body[i]))
if (h != -1):
# change the language name
document.body[i] = '\lang arabic'
document.body[i] = r'\lang arabic'
i = i + 1

View File

@ -152,7 +152,7 @@ def extract_argument(line):
if not line:
return (None, "")
bracere = re.compile("(\s*)(.*)")
bracere = re.compile(r"(\s*)(.*)")
n = bracere.match(line)
whitespace = n.group(1)
stuff = n.group(2)
@ -277,7 +277,7 @@ def latex2lyx(data, isindex):
data = data.replace('\\\\', '\\')
# Math:
mathre = re.compile('^(.*?)(\$.*?\$)(.*)')
mathre = re.compile(r'^(.*?)(\$.*?\$)(.*)')
lines = data.split('\n')
for line in lines:
#document.warning("LINE: " + line)
@ -946,7 +946,7 @@ def remove_inzip_options(document):
def convert_inset_command(document):
"""
r"""
Convert:
\begin_inset LatexCommand cmd
to
@ -983,7 +983,7 @@ def convert_inset_command(document):
def revert_inset_command(document):
"""
r"""
Convert:
\begin_inset CommandInset InsetType
LatexCommand cmd
@ -1558,7 +1558,7 @@ def convert_usorbian(document):
def convert_macro_global(document):
"Remove TeX code command \global when it is in front of a macro"
r"Remove TeX code command \global when it is in front of a macro"
# math macros are nowadays already defined \global, so that an additional
# \global would make the document uncompilable, see
# http://www.lyx.org/trac/ticket/5371
@ -2339,7 +2339,7 @@ def revert_wrapplacement(document):
def remove_extra_embedded_files(document):
" Remove \extra_embedded_files from buffer params "
r" Remove \extra_embedded_files from buffer params "
i = find_token(document.header, '\\extra_embedded_files', 0)
if i == -1:
return

View File

@ -1119,7 +1119,7 @@ def revert_multirow(document):
def convert_math_output(document):
" Convert \html_use_mathml to \html_math_output "
r" Convert \html_use_mathml to \html_math_output "
i = find_token(document.header, "\\html_use_mathml", 0)
if i == -1:
return
@ -1136,7 +1136,7 @@ def convert_math_output(document):
def revert_math_output(document):
" Revert \html_math_output to \html_use_mathml "
r" Revert \html_math_output to \html_use_mathml "
i = find_token(document.header, "\\html_math_output", 0)
if i == -1:
return
@ -1619,8 +1619,8 @@ def revert_IEEEtran(document):
def convert_prettyref(document):
" Converts prettyref references to neutral formatted refs "
re_ref = re.compile("^\s*reference\s+\"(\w+):(\S+)\"")
nm_ref = re.compile("^\s*name\s+\"(\w+):(\S+)\"")
re_ref = re.compile("^\\s*reference\\s+\"(\\w+):(\\S+)\"")
nm_ref = re.compile("^\\s*name\\s+\"(\\w+):(\\S+)\"")
i = 0
while True:
@ -1641,8 +1641,8 @@ def convert_prettyref(document):
def revert_refstyle(document):
" Reverts neutral formatted refs to prettyref "
re_ref = re.compile("^reference\s+\"(\w+):(\S+)\"")
nm_ref = re.compile("^\s*name\s+\"(\w+):(\S+)\"")
re_ref = re.compile("^reference\\s+\"(\\w+):(\\S+)\"")
nm_ref = re.compile("^\\s*name\\s+\"(\\w+):(\\S+)\"")
i = 0
while True:
@ -1723,7 +1723,7 @@ def remove_Nameref(document):
def revert_mathrsfs(document):
" Load mathrsfs if \mathrsfs us use in the document "
r" Load mathrsfs if \mathrsfs us use in the document "
i = 0
for line in document.body:
if line.find("\\mathscr{") != -1:
@ -2079,7 +2079,7 @@ def convert_passthru(document):
if not check_passthru:
return
rx = re.compile("\\\\begin_layout \s*(\w+)")
rx = re.compile("\\\\begin_layout \\s*(\\w+)")
beg = 0
for lay in ["Chunk", "Scrap"]:
while True:
@ -2143,7 +2143,7 @@ def revert_passthru(document):
" http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg161298.html "
if not check_passthru:
return
rx = re.compile("\\\\begin_layout \s*(\w+)")
rx = re.compile("\\\\begin_layout \\s*(\\w+)")
beg = 0
for lay in ["Chunk", "Scrap"]:
while True:
@ -2435,7 +2435,7 @@ def revert_langpack(document):
def convert_langpack(document):
" Add \\language_package parameter "
i = find_token(document.header, "\language" , 0)
i = find_token(document.header, r"\language" , 0)
if i == -1:
document.warning("Malformed document. No \\language defined!")
return

View File

@ -59,7 +59,7 @@ def revert_Argument_to_TeX_brace(document, line, endline, n, nmax, environment,
usage:
revert_Argument_to_TeX_brace(document, LineOfBegin, LineOfEnd, StartArgument, EndArgument, isEnvironment, isOpt)
LineOfBegin is the line of the \\begin_layout or \\begin_inset statement
LineOfEnd is the line of the \end_layout or \end_inset statement, if "0" is given, the end of the file is used instead
LineOfEnd is the line of the \\end_layout or \\end_inset statement, if "0" is given, the end of the file is used instead
StartArgument is the number of the first argument that needs to be converted
EndArgument is the number of the last argument that needs to be converted or the last defined one
isEnvironment must be true, if the layout is for a LaTeX environment
@ -1060,7 +1060,7 @@ def convert_table_rotation(document):
def convert_listoflistings(document):
'Convert ERT \lstlistoflistings to TOC lstlistoflistings inset'
r'Convert ERT \lstlistoflistings to TOC lstlistoflistings inset'
# We can support roundtrip because the command is so simple
i = 0
while True:

View File

@ -39,7 +39,7 @@ from parser_tools import (check_token, del_complete_lines,
# Private helper functions
def revert_Argument_to_TeX_brace(document, line, endline, n, nmax, environment, opt, nolastopt):
"""
r"""
Reverts an InsetArgument to TeX-code
usage:
revert_Argument_to_TeX_brace(document, LineOfBegin, LineOfEnd, StartArgument, EndArgument, isEnvironment, isOpt, notLastOpt)
@ -599,7 +599,7 @@ def revert_question_env(document):
document.body[i : i + 1] = ["\\begin_layout Standard", ""] + begcmd
add_to_preamble(document, "\\providecommand{\questionname}{Question}")
add_to_preamble(document, "\\providecommand{\\questionname}{Question}")
if starred:
add_to_preamble(document, "\\theoremstyle{plain}\n" \
@ -1354,7 +1354,7 @@ def revert_jss(document):
if document.textclass != "jss":
return
# at first revert the inset layouts because
# at first revert the inset layouts because
# they can be part of the In_Preamble layouts
il_dict = {
"Pkg" : "pkg",
@ -2045,7 +2045,7 @@ def revert_moderncv_1(document):
i += 1
continue
content = lyx2latex(document, document.body[i:j + 1])
add_to_preamble(document, ["\\setlength{\hintscolumnwidth}{" + content + "}"])
add_to_preamble(document, ["\\setlength{\\hintscolumnwidth}{" + content + "}"])
del document.body[i:j + 1]
# now change the new styles to the obsolete ones
# \name
@ -2383,7 +2383,7 @@ def revert_solution(document):
add_to_preamble(document, "\\%s{%s}[thm]{\\protect\\solutionname}" % \
(theoremName, LaTeXName))
add_to_preamble(document, "\\providecommand{\solutionname}{Solution}")
add_to_preamble(document, "\\providecommand{\\solutionname}{Solution}")
i = j

View File

@ -173,7 +173,7 @@ beamer_article_styles = [
"Preamble",
" \\usepackage{beamerarticle,pgf}",
" % this default might be overridden by plain title style",
" \\newcommand\makebeamertitle{\\frame{\\maketitle}}%",
" \\newcommand\\makebeamertitle{\\frame{\\maketitle}}%",
" \\AtBeginDocument{",
" \\let\\origtableofcontents=\\tableofcontents",
" \\def\\tableofcontents{\\@ifnextchar[{\\origtableofcontents}{\\gobbletableofcontents}}",
@ -1627,12 +1627,12 @@ def convert_dashligatures(document):
continue
# literal dash followed by a non-white-character or no-break space:
if re.search(u"[\u2013\u2014]([\S\u00A0\u202F\u2060]|$)",
if re.search(u"[\u2013\u2014]([\\S\u00A0\u202F\u2060]|$)",
line, flags=re.UNICODE):
has_literal_dashes = True
# ligature dash followed by non-white-char or no-break space on next line:
if (re.search(r"(\\twohyphens|\\threehyphens)", line) and
re.match(u"[\S\u00A0\u202F\u2060]", lines[i+1], flags=re.UNICODE)):
re.match(u"[\\S\u00A0\u202F\u2060]", lines[i+1], flags=re.UNICODE)):
has_ligature_dashes = True
if has_literal_dashes and has_ligature_dashes:
# TODO: insert a warning note in the document?
@ -1845,7 +1845,7 @@ allowbreak_emulation = [r"\begin_inset space \hspace{}",
r""]
def convert_allowbreak(document):
" Zero widths Space-inset -> \SpecialChar allowbreak. "
r" Zero widths Space-inset -> \SpecialChar allowbreak. "
lines = document.body
i = find_complete_lines(lines, allowbreak_emulation, 2)
while i != -1:
@ -1854,7 +1854,7 @@ def convert_allowbreak(document):
def revert_allowbreak(document):
" \SpecialChar allowbreak -> Zero widths Space-inset. "
r" \SpecialChar allowbreak -> Zero widths Space-inset. "
i = 1
lines = document.body
while i < len(lines):

View File

@ -752,7 +752,7 @@ def revert_floatalignment(document):
i += 1
def revert_tuftecite(document):
"""Revert \cite commands in tufte classes"""
r"""Revert \cite commands in tufte classes"""
tufte = ["tufte-book", "tufte-handout"]
if document.textclass not in tufte:
@ -1223,7 +1223,7 @@ def revert_dateinfo(document):
if len(datecomps) > 1:
argv = datecomps[0]
isodate = datecomps[1]
m = re.search('(\d\d\d\d)-(\d\d)-(\d\d)', isodate)
m = re.search(r'(\d\d\d\d)-(\d\d)-(\d\d)', isodate)
if m:
dte = date(int(m.group(1)), int(m.group(2)), int(m.group(3)))
# FIXME if we had the path to the original document (not the one in the tmp dir),
@ -1403,11 +1403,11 @@ def revert_timeinfo(document):
if len(timecomps) > 1:
argv = timecomps[0]
isotime = timecomps[1]
m = re.search('(\d\d):(\d\d):(\d\d)', isotime)
m = re.search(r'(\d\d):(\d\d):(\d\d)', isotime)
if m:
tme = time(int(m.group(1)), int(m.group(2)), int(m.group(3)))
else:
m = re.search('(\d\d):(\d\d)', isotime)
m = re.search(r'(\d\d):(\d\d)', isotime)
if m:
tme = time(int(m.group(1)), int(m.group(2)))
# FIXME if we had the path to the original document (not the one in the tmp dir),
@ -1875,7 +1875,7 @@ def revert_new_languages(document):
"korean": ("", "korean"),
}
if document.language in new_languages:
used_languages = set((document.language, ))
used_languages = {document.language}
else:
used_languages = set()
i = 0
@ -4100,7 +4100,7 @@ def revert_branch_darkcols(document):
break
k = find_token(document.header, "\\color", i, j)
if k != -1:
m = re.search('\\\\color (\S+) (\S+)', document.header[k])
m = re.search('\\\\color (\\S+) (\\S+)', document.header[k])
if m:
document.header[k] = "\\color " + m.group(1)
i += 1
@ -4222,7 +4222,7 @@ def revert_vcolumns2(document):
el = find_token(document.body, '\\strikeout on', flt, elt)
if el != -1:
extralines.append("\\strikeout default")
document.body[elt:elt+1] = extralines + put_cmd_in_ert("\\end{cellvarwidth}") + ["\end_layout"]
document.body[elt:elt+1] = extralines + put_cmd_in_ert("\\end{cellvarwidth}") + [r"\end_layout"]
parlang = -1
for q in range(flt, elt):
if document.body[q] != "" and document.body[q][0] != "\\":

View File

@ -121,8 +121,8 @@ find_end_of_layout(lines, i):
find_end_of_sequence(lines, i):
Find the end of the sequence of layouts of the same kind.
Considers nesting. If the last paragraph in sequence is nested,
the position of the last \end_deeper is returned, else
the position of the last \end_layout.
the position of the last \\end_deeper is returned, else
the position of the last \\end_layout.
is_in_inset(lines, i, inset, default=(-1,-1)):
Check if line i is in an inset of the given type.
@ -139,7 +139,7 @@ is_in_inset(lines, i, inset, default=(-1,-1)):
get_containing_inset(lines, i):
Finds out what kind of inset line i is within. Returns a
list containing what follows \begin_inset on the line
list containing what follows \\begin_inset on the line
on which the inset begins, plus the starting and ending line.
Returns False on any kind of error or if it isn't in an inset.
So get_containing_inset(document.body, i) might return:
@ -470,7 +470,7 @@ def set_bool_value(lines, token, value, start=0, end=0):
def get_option_value(line, option):
rx = option + '\s*=\s*"([^"]+)"'
rx = option + r'\s*=\s*"([^"]+)"'
rx = re.compile(rx)
m = rx.search(line)
if not m:
@ -479,12 +479,12 @@ def get_option_value(line, option):
def set_option_value(line, option, value):
rx = '(' + option + '\s*=\s*")[^"]+"'
rx = '(' + option + r'\s*=\s*")[^"]+"'
rx = re.compile(rx)
m = rx.search(line)
if not m:
return line
return re.sub(rx, '\g<1>' + value + '"', line)
return re.sub(rx, r'\g<1>' + value + '"', line)
def del_token(lines, token, start=0, end=0):
@ -612,7 +612,7 @@ def is_in_inset(lines, i, inset, default=(-1,-1)):
def get_containing_inset(lines, i):
'''
Finds out what kind of inset line i is within. Returns a
list containing (i) what follows \begin_inset on the line
list containing (i) what follows \\begin_inset on the line
on which the inset begins, plus the starting and ending line.
Returns False on any kind of error or if it isn't in an inset.
'''

View File

@ -111,12 +111,12 @@ for type in types:
file_ext = '.' + type
out = open(outfile, 'w')
visited = set()
for dir in dirs.split(path_sep):
# for each valid directory
if not os.path.isdir(dir):
continue
# walk down the file hierarchy
visited = set()
for root,dirs,files in os.walk(dir, followlinks=True):
# prevent inifinite recursion
recurse = []

View File

@ -78,7 +78,7 @@ else:
# with tetex.
epsfile = outbase + '.pstex'
tmp = mkstemp()
boundingboxline = re.compile(b'%%BoundingBox:\s+(\d*)\s+(\d*)\s+(\d*)\s+(\d*)')
boundingboxline = re.compile(br'%%BoundingBox:\s+(\d*)\s+(\d*)\s+(\d*)\s+(\d*)')
for line in open(epsfile, 'rb'):
if line[:13] == b'%%BoundingBox':
(llx, lly, urx, ury) = list(map(int, boundingboxline.search(line).groups()))

View File

@ -457,10 +457,10 @@ def convert(lines, end_format):
re_ChapterStyle = re.compile(b'^\\s*Style\\s+Chapter\\s*$', re.IGNORECASE)
re_InsetLayout_CaptionLTNN = re.compile(b'^(\\s*InsetLayout\\s+)(Caption:LongTableNonumber)', re.IGNORECASE)
# for format 64
re_trimLabelString = re.compile(b'^(\\s*LabelString\s+)"\\s*(.*?)\\s*"\\s*$')
re_trimLabelStringAppendix = re.compile(b'^(\\s*LabelStringAppendix\s+)"\\s*(.*?)\\s*"\\s*$')
re_trimEndLabelString = re.compile(b'^(\\s*EndLabelString\s+)"\\s*(.*?)\\s*"\\s*$')
re_trimLabelCounter = re.compile(b'^(\\s*LabelCounter\s+)"\\s*(.*?)\\s*"\\s*$')
re_trimLabelString = re.compile(b'^(\\s*LabelString\\s+)"\\s*(.*?)\\s*"\\s*$')
re_trimLabelStringAppendix = re.compile(b'^(\\s*LabelStringAppendix\\s+)"\\s*(.*?)\\s*"\\s*$')
re_trimEndLabelString = re.compile(b'^(\\s*EndLabelString\\s+)"\\s*(.*?)\\s*"\\s*$')
re_trimLabelCounter = re.compile(b'^(\\s*LabelCounter\\s+)"\\s*(.*?)\\s*"\\s*$')
# counters for sectioning styles (hardcoded in 1.3)

View File

@ -156,7 +156,7 @@ def legacy_extract_metrics_info(log_file):
def extract_resolution(log_file, dpi):
fontsize_re = re.compile(b"Preview: Fontsize")
magnification_re = re.compile(b"Preview: Magnification")
extract_decimal_re = re.compile(b"([0-9\.]+)")
extract_decimal_re = re.compile(br"([0-9\.]+)")
extract_integer_re = re.compile(b"([0-9]+)")
found_fontsize = 0
@ -235,9 +235,9 @@ def legacy_latex_file(latex_file, fg_color, bg_color):
else:
tmp.write(b"""
\\usepackage{color}
\\definecolor{fg}{rgb}{%s}
\\definecolor{bg}{rgb}{%s}
\\pagecolor{bg}
\\definecolor{lyxfg}{rgb}{%s}
\\definecolor{lyxbg}{rgb}{%s}
\\pagecolor{lyxbg}
\\usepackage{polyglossia}
""" % (fg_color_gr, bg_color_gr))
polyglossia = True
@ -248,16 +248,16 @@ def legacy_latex_file(latex_file, fg_color, bg_color):
if not polyglossia:
tmp.write(b"""
\\usepackage{color}
\\definecolor{fg}{rgb}{%s}
\\definecolor{bg}{rgb}{%s}
\\pagecolor{bg}
\\definecolor{lyxfg}{rgb}{%s}
\\definecolor{lyxbg}{rgb}{%s}
\\pagecolor{lyxbg}
\\usepackage[%s,tightpage]{preview}
\\makeatletter
\\def\\t@a{cmr}
\\if\\f@family\\t@a
\\IfFileExists{lmodern.sty}{\\usepackage{lmodern}}{\\usepackage{ae,aecompl}}
\\fi
\\g@addto@macro\\preview{\\begingroup\\color{bg}\\special{ps::clippath fill}\\color{fg}}
\\g@addto@macro\\preview{\\begingroup\\color{lyxbg}\\special{ps::clippath fill}\\color{lyxfg}}
\\g@addto@macro\\endpreview{\\endgroup}
\\makeatother
""" % (fg_color_gr, bg_color_gr, previewopts))
@ -265,7 +265,7 @@ def legacy_latex_file(latex_file, fg_color, bg_color):
tmp.write(b"""
\\usepackage[%s,tightpage]{preview}
\\makeatletter
\\g@addto@macro\\preview{\\begingroup\\color{bg}\\special{ps::clippath fill}\\color{fg}}
\\g@addto@macro\\preview{\\begingroup\\color{lyxbg}\\special{ps::clippath fill}\\color{lyxfg}}
\\g@addto@macro\\endpreview{\\endgroup}
\\makeatother
""" % previewopts)

View File

@ -37,7 +37,7 @@ if running_on_windows:
from tempfile import NamedTemporaryFile
# Pre-compiled regular expressions.
re_lyxfile = re.compile(b"\.lyx$")
re_lyxfile = re.compile(br"\.lyx$")
re_input = re.compile(b'^(.*)\\\\(input|include){(\\s*)(.+)(\\s*)}.*$')
re_ertinput = re.compile(b'^(input|include)({)(\\s*)(.+)(\\s*)}.*$')
re_package = re.compile(b'^(.*)\\\\(usepackage){(\\s*)(.+)(\\s*)}.*$')

View File

@ -78,7 +78,7 @@ def find(args, path):
# use locate if possible (faster)
if find_exe(['locate']):
p1 = subprocess.Popen(['locate', '-i', args[0].lower()], stdout=subprocess.PIPE)
px = subprocess.Popen(['grep', '-Ei', '\.pdf$|\.ps$'], stdin=p1.stdout, stdout=subprocess.PIPE)
px = subprocess.Popen(['grep', '-Ei', r'\.pdf$|\.ps$'], stdin=p1.stdout, stdout=subprocess.PIPE)
for arg in args:
if arg == args[0]:
# have this already

View File

@ -120,7 +120,7 @@ def extract_metrics_info(dvipng_stdout):
# "\[[0-9]+" can match two kinds of numbers: page numbers from dvipng
# and glyph numbers from mktexpk. The glyph numbers always match
# "\[[0-9]+\]" while the page number never is followed by "\]". Thus:
page_re = re.compile("\[([0-9]+)[^]]");
page_re = re.compile(r"\[([0-9]+)[^]]");
metrics_re = re.compile("depth=(-?[0-9]+) height=(-?[0-9]+)")
success = 0
@ -197,7 +197,7 @@ def fix_latex_file(latex_file, pdf_output):
def convert_to_ppm_format(pngtopnm, basename):
png_file_re = re.compile("\.png$")
png_file_re = re.compile(r"\.png$")
for png_file in glob.glob("%s*.png" % basename):
ppm_file = png_file_re.sub(".ppm", png_file)

View File

@ -1,4 +1,3 @@
# file lyxpreview_tools.py
# This file is part of LyX, the document processor.
# Licence details can be found in the file COPYING.

View File

@ -223,7 +223,7 @@ def remove_obsolete(line):
def language_use_babel(line):
if not line.lower().startswith("\language_use_babel"):
if not line.lower().startswith(r"\language_use_babel"):
return no_match
re_lub = re.compile(r'^\\language_use_babel\s+"?(true|false)', re.IGNORECASE)
m = re_lub.match(line)
@ -364,7 +364,7 @@ def split_pdf_format(line):
viewer = ''
else:
viewer = entries[5]
converted = line.replace('application/pdf', '') + '''
converted = line.replace('application/pdf', '') + r'''
\Format pdf6 pdf "PDF (graphics)" "" "''' + viewer + '" "" "vector" "application/pdf"'
return (True, converted)
elif line.lower().startswith("\\viewer_alternatives") or \

View File

@ -261,24 +261,24 @@ Menuset
# InsetSpace context menu
#
Menu "context-space"
Item "Interword Space|w" "inset-modify space \space{}"
Item "Protected Space|o" "inset-modify space ~"
Item "Normal Space|e" "inset-modify space \space{}"
Item "Non-Breaking Normal Space|o" "inset-modify space ~"
Item "Visible Space|a" "inset-modify space \textvisiblespace{}"
Item "Thin Space|T" "inset-modify space \thinspace{}"
Item "Medium Space|M" "inset-modify space \medspace{}"
Item "Thick Space|i" "inset-modify space \thickspace{}"
Item "Negative Thin Space|N" "inset-modify space \negthinspace{}"
Item "Negative Medium Space|v" "inset-modify space \negmedspace{}"
Item "Negative Thick Space|h" "inset-modify space \negthickspace{}"
Item "Half Quad Space (Enskip)|k" "inset-modify space \enskip{}"
Item "Protected Half Quad Space (Enspace)|E" "inset-modify space \enspace{}"
Item "Quad Space|Q" "inset-modify space \quad{}"
Item "Double Quad Space|u" "inset-modify space \qquad{}"
Item "Non-Breaking Thin Space (1/6 em)|T" "inset-modify space \thinspace{}"
Item "Non-Breaking Medium Space (3/9 em)|M" "inset-modify space \medspace{}"
Item "Non-Breaking Thick Space (5/18 em)|i" "inset-modify space \thickspace{}"
Item "Non-Breaking Negative Thin Space (-1/6 em)|N" "inset-modify space \negthinspace{}"
Item "Non-Breaking Negative Medium Space (-2/9 em)|v" "inset-modify space \negmedspace{}"
Item "Non-Breaking Negative Thick Space (-5/18 em)|h" "inset-modify space \negthickspace{}"
Item "Half Quad Space (1/2 em)|l" "inset-modify space \enskip{}"
Item "Non-Breaking Half Quad Space (1/2 em)|k" "inset-modify space \enspace{}"
Item "Quad Space (1 em)|Q" "inset-modify space \quad{}"
Item "Double Quad Space (2 em)|u" "inset-modify space \qquad{}"
Item "Horizontal Fill|F" "inset-modify space \hfill{}"
Item "Protected Horizontal Fill|z" "inset-modify space \hspace*{\fill}"
Item "Non-Breaking Horizontal Fill|z" "inset-modify space \hspace*{\fill}"
Item "Horizontal Fill (Dots)|D" "inset-modify space \dotfill{}"
Item "Horizontal Fill (Rule)|R" "inset-modify space \hrulefill{}"
Item "Horizontal Fill (Left Arrow)|L" "inset-modify space \leftarrowfill{}"
Item "Horizontal Fill (Left Arrow)|w" "inset-modify space \leftarrowfill{}"
Item "Horizontal Fill (Right Arrow)|g" "inset-modify space \rightarrowfill{}"
Item "Horizontal Fill (Up Brace)|p" "inset-modify space \upbracefill{}"
Item "Horizontal Fill (Down Brace)|B" "inset-modify space \downbracefill{}"
@ -309,13 +309,13 @@ Menuset
# InsetVSpace context menu
#
Menu "context-vspace"
Item "DefSkip|D" "inset-modify vspace defskip"
Item "SmallSkip|S" "inset-modify vspace smallskip"
Item "MedSkip|M" "inset-modify vspace medskip"
Item "BigSkip|B" "inset-modify vspace bigskip"
Item "Default Skip|D" "inset-modify vspace defskip"
Item "Small Skip|S" "inset-modify vspace smallskip"
Item "Medium Skip|M" "inset-modify vspace medskip"
Item "Big Skip|B" "inset-modify vspace bigskip"
Item "Half line height|H" "inset-modify vspace halfline"
Item "Line height|L" "inset-modify vspace fullline"
Item "VFill|F" "inset-modify vspace vfill"
Item "Vertical Fill|F" "inset-modify vspace vfill"
Item "Custom|C" "command-sequence inset-modify vspace custom; inset-settings"
Separator
Item "Settings...|e" "inset-settings"
@ -740,14 +740,23 @@ Menuset
Item "Giant-sized Icons" "icon-size giant"
End
#
# Status bar zoom context menu
#
Menu "context-zoom"
ZoomOptions
End
#
# Status bar context menu
#
Menu "context-statusbar"
ZoomOptions
Item "Zoom Level|Z" "ui-toggle zoomlevel"
Item "Zoom Slider|S" "ui-toggle zoomslider"
Separator
Item "Show Zoom Level|Z" "ui-toggle zoomlevel"
Item "Show Zoom Slider|S" "ui-toggle zoomslider"
Item "Word Count|W" "ui-toggle statistics-w"
Item "Character Count|C" "ui-toggle statistics-cb"
Item "Character Count (No Blanks)|h" "ui-toggle statistics-c"
End
End

View File

@ -416,7 +416,7 @@ Menuset
Item "End of Sentence|E" "specialchar-insert end-of-sentence"
Item "Plain Quotation Mark|Q" "quote-insert outer auto plain"
Item "Inner Quotation Mark|n" "quote-insert inner"
Item "Protected Hyphen|y" "specialchar-insert nobreakdash"
Item "Non-Breaking Hyphen|y" "specialchar-insert nobreakdash"
Item "Breakable Slash|a" "specialchar-insert slash"
Item "Visible Space|V" "space-insert visible"
Item "Menu Separator|M" "specialchar-insert menu-separator"
@ -452,9 +452,9 @@ Menuset
Item "Superscript|S" "script-insert superscript"
Item "Subscript|u" "script-insert subscript"
Separator
Item "Protected Space|P" "space-insert protected"
Item "Interword Space|w" "space-insert normal"
Item "Thin Space|T" "space-insert thin"
Item "Normal Space|e" "space-insert normal"
Item "Non-breaking Normal Space|p" "space-insert protected"
Item "Non-breaking Thin Space|T" "space-insert thin"
Item "Horizontal Space...|o" "command-alternatives dialog-show-new-inset space;dialog-show-new-inset mathspace"
Item "Horizontal Line...|L" "dialog-show-new-inset line"
Item "Vertical Space...|V" "dialog-show-new-inset vspace"

View File

@ -28,7 +28,7 @@
#
# Toolbar "name" "GUI Name"
#
# Only seven commands are allowed inside the Toolbar and End
# Only eight commands are allowed inside the Toolbar and End
# directives:
# Item "The tooltip" "<action> [<parameter>]" adds an icon to the toolbar performing
# "<action> <parameter>"
@ -37,9 +37,9 @@
# Item Emphasized set-emph
#
# BidiItem is like Item, but an alternative icon (with name ending
# with "+rtl") will be used <hen the paragraph has a right-to-left
# layout. If this alternative icon does not exist, the LtR icon will
# be mirrored instead.
# with "+rtl") will be used <hen the paragraph has a right-to-left
# layout. If this alternative icon does not exist, the LtR icon will
# be mirrored instead.
#
# Layouts adds the layouts combo-box to the toolbar
#
@ -48,23 +48,26 @@
# Minibuffer adds the command buffer (only one may exist)
#
# TableInsert "The tooltip" adds a special widget for quick
# insertion of tables
# insertion of tables
#
# PopupMenu "name" "The tooltip"
#
# ... inserts a button with a popup menu derived from Toolbar "name"
# ... inserts a button with a popup menu derived from Toolbar "name"
#
# IconPalette "name" "The tooltip"
#
# ... inserts a button with a popup iconpalette derived from Toolbar "name"
# ... inserts a button with a popup icon palette derived from Toolbar "name"
#
#
# The icons are found in the lib/images/ direcory under the name
# The icons are found in the lib/images/ directory under the name
# action.png or action_parameter.png, except for math-insert, which
# is e.g. lib/image/math/sum.png. Note that some characters are
# replaced (e.g. ')' -> rbracket).
#
# All other lyx commands will get a "unknown" icon.
# Note that the lib/images/icon.aliases file can be used to specify
# fallback icons for some functions.
#
# All other LyX commands will get a "unknown" icon.
#
# This is the default toolbar:

BIN
po/de.gmo

Binary file not shown.

4609
po/de.po

File diff suppressed because it is too large Load Diff

BIN
po/fr.gmo

Binary file not shown.

4656
po/fr.po

File diff suppressed because it is too large Load Diff

BIN
po/it.gmo

Binary file not shown.

8095
po/it.po

File diff suppressed because it is too large Load Diff

Binary file not shown.

501
po/sk.po
View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: LyX-2.4\n"
"Report-Msgid-Bugs-To: lyx-devel@lists.lyx.org\n"
"POT-Creation-Date: 2022-05-11 18:56+0200\n"
"PO-Revision-Date: 2022-05-11 16:59+0000\n"
"POT-Creation-Date: 2022-09-13 18:57+0200\n"
"PO-Revision-Date: 2022-09-13 17:02+0000\n"
"Last-Translator: Kornel Benko <kornel@lyx.org>\n"
"Language-Team: Slovak <kornel@lyx.org>\n"
"Language: sk\n"
@ -1267,6 +1267,18 @@ msgstr "Vyberte dokument z ktorého chcete nastavenia kopírovať"
msgid "Document Settings"
msgstr "Nastavenia dokumentu"
#: src/frontends/qt/GuiDocument.cpp:870
msgid "Small Skip"
msgstr "Malá medzera(SmallSkip)"
#: src/frontends/qt/GuiDocument.cpp:871
msgid "Medium Skip"
msgstr "Stredná medzera"
#: src/frontends/qt/GuiDocument.cpp:872
msgid "Big Skip"
msgstr "Veľká medzera(BigSkip)"
#: src/frontends/qt/ui/CompareUi.ui:129
msgid "O&ld Document"
msgstr "Bý&valí dokument"
@ -2127,6 +2139,10 @@ msgstr ""
msgid "Sho&w in LyX"
msgstr "Zobraziť v L&yXe"
#: src/frontends/qt/ui/GraphicsUi.ui:556 src/frontends/qt/ui/GraphicsUi.ui:563
msgid "Percentage to scale by in LyX (1 to 1000)"
msgstr "Percento zmeny zobrazenia v LyXe (1 až 1000)"
#: src/frontends/qt/ui/GraphicsUi.ui:566
msgid "Sca&le on screen (%):"
msgstr "Mierka na obra&zovke (%):"
@ -2231,6 +2247,14 @@ msgstr "Vlastná hodnota. Potrebuje typ rozstupu \"Vlastný\"."
msgid "&Fill Pattern:"
msgstr "Vzor Vý&plne:"
#: src/frontends/qt/ui/HSpaceUi.ui:118
msgid "&Non-Breaking:"
msgstr "&Nerozbitný:"
#: src/frontends/qt/ui/HSpaceUi.ui:128
msgid "Prevent automatic line break at the space"
msgstr "Zabrániť automatickému zlomu riadku na medzere"
#: src/frontends/qt/ui/HSpaceUi.ui:123 src/frontends/qt/ui/VSpaceUi.ui:46
msgid "&Protect:"
msgstr "&Chrániť:"
@ -3625,12 +3649,12 @@ msgstr "Š&tandardné zarovnanie odstavca"
#: src/frontends/qt/ui/ParagraphUi.ui:154
msgid "Label Width"
msgstr "Šírka návestie"
msgstr "Šírka návestia"
#: src/frontends/qt/ui/ParagraphUi.ui:178
#: src/frontends/qt/ui/ParagraphUi.ui:191
msgid "This text defines the width of the paragraph label"
msgstr "Tento text definuje šírku návestia odstavca"
msgstr "Tento text definuje šírku návestia v odstavci"
#: src/frontends/qt/ui/ParagraphUi.ui:181
msgid "Lo&ngest label"
@ -3798,7 +3822,7 @@ msgstr "Slová kratšie ako zadané dĺžkou sa nebudú doplňovať."
#: src/frontends/qt/ui/PrefCompletionUi.ui:250
msgid "Minimum characters for words that should be completed"
msgstr "Minimálny počet písmen pre doplňovanie slov"
msgstr "Minimálny počet znakov pre doplňovanie slov"
#: src/frontends/qt/ui/PrefCompletionUi.ui:275
msgid ""
@ -5415,9 +5439,9 @@ msgstr ""
"Ignorovať výskyt tohto slova v tomto dokumente. Platí aj pre každé neskoršie "
"sedenie."
#: src/frontends/qt/ui/SpellcheckerUi.ui:184
#: src/frontends/qt/ui/SpellcheckerUi.ui:178
msgid "I&gnore All"
msgstr "Ignorovať všad&e"
msgstr "Ignorovať &všade"
#: src/frontends/qt/ui/SymbolsUi.ui:40
msgid ""
@ -6026,22 +6050,6 @@ msgstr "Toto varovanie odteraz už &nezobrazovať!"
msgid "Insert the spacing even after a page break"
msgstr "Vložiť rozstup i za zalomením stránky"
#: src/frontends/qt/ui/VSpaceUi.ui:83
msgid "DefSkip"
msgstr "Štandardná medzera(DefSkip)"
#: src/frontends/qt/ui/VSpaceUi.ui:88 src/frontends/qt/GuiDocument.cpp:862
msgid "SmallSkip"
msgstr "Malá medzera(SmallSkip)"
#: src/frontends/qt/ui/VSpaceUi.ui:93 src/frontends/qt/GuiDocument.cpp:863
msgid "MedSkip"
msgstr "Stredná medzera(MedSkip)"
#: src/frontends/qt/ui/VSpaceUi.ui:98 src/frontends/qt/GuiDocument.cpp:864
msgid "BigSkip"
msgstr "Veľká medzera(BigSkip)"
#: src/frontends/qt/ui/VSpaceUi.ui:103 src/VSpace.cpp:201
#: src/frontends/qt/GuiDocument.cpp:860
msgid "Half line height"
@ -6052,11 +6060,6 @@ msgstr "Polovičná výška riadku"
msgid "Line height"
msgstr "Výška riadku"
# Výplň
#: src/frontends/qt/ui/VSpaceUi.ui:113
msgid "VFill"
msgstr "Variabilná medzera"
#: src/frontends/qt/ui/ViewSourceUi.ui:91
msgid "F&ormat:"
msgstr "&Formát:"
@ -19690,18 +19693,61 @@ msgstr "Horizontálny fantóm|H"
msgid "Vertical Phantom|V"
msgstr "Vertikálny fantóm|ó"
#: lib/ui/stdcontext.inc:244 lib/ui/stdmenus.inc:455
msgid "Interword Space|w"
msgstr "Medzi-slovná medzera|e"
#: lib/ui/stdcontext.inc:264
msgid "Normal Space|e"
msgstr "Normálna medzera|m"
#: lib/ui/stdcontext.inc:245
msgid "Protected Space|o"
msgstr "Chránená medzera|C"
#: lib/ui/stdcontext.inc:265
msgid "Non-Breaking Normal Space|o"
msgstr "Nerozbitná normálna medzera|e"
#: lib/ui/stdcontext.inc:246
msgid "Visible Space|a"
msgstr "Viditeľná medzera|a"
#: lib/ui/stdcontext.inc:267
msgid "Non-Breaking Thin Space (1/6 em)|T"
msgstr "Nerozbitná úzka medzera (1/6 em)|ú"
#: lib/ui/stdcontext.inc:268
msgid "Non-Breaking Medium Space (3/9 em)|M"
msgstr "Nerozbitná stredná medzera (3/9 em)|b"
#: lib/ui/stdcontext.inc:269
msgid "Non-Breaking Thick Space (5/18 em)|i"
msgstr "Nerozbitná tučná medzera (5/18 em)|t"
#: lib/ui/stdcontext.inc:270
msgid "Non-Breaking Negative Thin Space (-1/6 em)|N"
msgstr "Nerozbitná záporná úzka medzera (1/6 em)|z"
#: lib/ui/stdcontext.inc:271
msgid "Non-Breaking Negative Medium Space (-2/9 em)|v"
msgstr "Nerozbitná záporná stredná medzera (-2/9 em)|o"
#: lib/ui/stdcontext.inc:272
msgid "Non-Breaking Negative Thick Space (-5/18 em)|h"
msgstr "Nerozbitná záporná tučná medzera (-5/18 em)|č"
#: lib/ui/stdcontext.inc:273
msgid "Half Quad Space (1/2 em)|l"
msgstr "Polovica štvorčeka (1/2 em)|i"
# Chránená pološiroká medzera (Enspace)|k"
#: lib/ui/stdcontext.inc:274
msgid "Non-Breaking Half Quad Space (1/2 em)|k"
msgstr "Nerozbitná polovica štvorčeka (1/2 em)|k"
# Široká medzera|Š
#: lib/ui/stdcontext.inc:275
msgid "Quad Space (1 em)|Q"
msgstr "Štvorček (1 em)|Š"
# Dvojitá široká medzera|D
#: lib/ui/stdcontext.inc:276
msgid "Double Quad Space (2 em)|u"
msgstr "Dva štvorčeky (2 em)|D"
#: lib/ui/stdcontext.inc:247 lib/ui/stdcontext.inc:274 lib/ui/stdmenus.inc:456
msgid "Thin Space|T"
msgstr "Úzka medzera|Ú"
@ -19726,73 +19772,72 @@ msgstr "Záporná stredná medzera|o"
msgid "Negative Thick Space|h"
msgstr "Záporná tučná medzera|u"
#: lib/ui/stdcontext.inc:253 lib/ui/stdcontext.inc:280
# Pološiroká medzera (Enskip)|i
#: lib/ui/stdcontext.inc:273 lib/ui/stdcontext.inc:300
msgid "Half Quad Space (Enskip)|k"
msgstr "Polovička Quad medzery (Enskip)|i"
msgstr "Polovica štvorčeka (Enskip)|i"
#: lib/ui/stdcontext.inc:254
msgid "Protected Half Quad Space (Enspace)|E"
msgstr "Chránená polovička Quad medzery (Enspace)|E"
#: lib/ui/stdcontext.inc:255 lib/ui/stdcontext.inc:281
# Široká medzera|Š
#: lib/ui/stdcontext.inc:275 lib/ui/stdcontext.inc:301
msgid "Quad Space|Q"
msgstr "Quad medzera|Q"
msgstr "Štvorček (1 em)|Š"
#: lib/ui/stdcontext.inc:256 lib/ui/stdcontext.inc:282
# Dvojitá široká medzera|D
#: lib/ui/stdcontext.inc:276 lib/ui/stdcontext.inc:302
msgid "Double Quad Space|u"
msgstr "Dvojnásobná Quad medzera|D"
msgstr "Dva štvorčeky (2 em)|D"
#: lib/ui/stdcontext.inc:257
#: lib/ui/stdcontext.inc:277
msgid "Horizontal Fill|F"
msgstr "Variabilná horizontálna medzera|h"
msgstr "Horizontálna výplň|h"
#: lib/ui/stdcontext.inc:258
msgid "Protected Horizontal Fill|z"
msgstr "Chránená horizontálna medzera|á"
#: lib/ui/stdcontext.inc:278
msgid "Non-Breaking Horizontal Fill|z"
msgstr "Nerozbitná horizontálna výplň|á"
#: lib/ui/stdcontext.inc:259
#: lib/ui/stdcontext.inc:279
msgid "Horizontal Fill (Dots)|D"
msgstr "Variabilná horizontálna medzera(Bodky)|y"
msgstr "Horizontálna výplň (Bodky)|y"
#: lib/ui/stdcontext.inc:260
#: lib/ui/stdcontext.inc:280
msgid "Horizontal Fill (Rule)|R"
msgstr "Variabilná horizontálna medzera (Línia)|í"
msgstr "Horizontálna výplň (Línia)|í"
#: lib/ui/stdcontext.inc:261
msgid "Horizontal Fill (Left Arrow)|L"
msgstr "Variabilná horizontálna medzera(Šípka doľava)|ľ"
#: lib/ui/stdcontext.inc:281
msgid "Horizontal Fill (Left Arrow)|w"
msgstr "Horizontálna výplň (Šípka doľava)|ľ"
#: lib/ui/stdcontext.inc:262
#: lib/ui/stdcontext.inc:282
msgid "Horizontal Fill (Right Arrow)|g"
msgstr "Variabilná horizontálna medzera(Šípka doprava)|p"
msgstr "Horizontálna výplň (Šípka doprava)|p"
#: lib/ui/stdcontext.inc:263
#: lib/ui/stdcontext.inc:283
msgid "Horizontal Fill (Up Brace)|p"
msgstr "Variabilná horizontálna medzera(Svorka nahor)|r"
msgstr "Horizontálna výplň (Svorka nahor)|r"
#: lib/ui/stdcontext.inc:264
#: lib/ui/stdcontext.inc:284
msgid "Horizontal Fill (Down Brace)|B"
msgstr "Variabilná horizontálna medzera(Svorka nadol)|l"
msgstr "Horizontálna výplň (Svorka nadol)|l"
#: lib/ui/stdcontext.inc:265 lib/ui/stdcontext.inc:283
msgid "Custom Length|C"
msgstr "Vlastná dĺžka|V"
#: lib/ui/stdcontext.inc:292
msgid "DefSkip|D"
msgstr "Štandardná medzera(DefSkip)|t"
#: lib/ui/stdcontext.inc:312
msgid "Default Skip|D"
msgstr "Štandardné riadkovanie|t"
#: lib/ui/stdcontext.inc:293
msgid "SmallSkip|S"
msgstr "Malá medzera(SmallSkip)|M"
#: lib/ui/stdcontext.inc:313
msgid "Small Skip|S"
msgstr "Malá medzera|M"
#: lib/ui/stdcontext.inc:294
msgid "MedSkip|M"
msgstr "Stredná medzera(MedSkip)|S"
#: lib/ui/stdcontext.inc:314
msgid "Medium Skip|M"
msgstr "Stredná medzera|S"
#: lib/ui/stdcontext.inc:295
msgid "BigSkip|B"
msgstr "Veľká medzera(BigSkip)|e"
#: lib/ui/stdcontext.inc:315
msgid "Big Skip|B"
msgstr "Veľká medzera|e"
#: lib/ui/stdcontext.inc:296
msgid "Half line height|H"
@ -19802,10 +19847,9 @@ msgstr "Polovičná výška riadku|P"
msgid "Line height|L"
msgstr "Výška riadku|š"
# Výplň
#: lib/ui/stdcontext.inc:298
msgid "VFill|F"
msgstr "Variabilná medzera|r"
#: lib/ui/stdcontext.inc:318
msgid "Vertical Fill|F"
msgstr "Vertikálna výplň|r"
#: lib/ui/stdcontext.inc:299
msgid "Custom|C"
@ -19883,9 +19927,9 @@ msgstr "Externe upraviť…"
msgid "End Editing Externally..."
msgstr "Externú úpravu dokončiť…"
#: lib/ui/stdcontext.inc:360
#: lib/ui/stdcontext.inc:380
msgid "Split Inset|t"
msgstr "Rozdeliť vložku"
msgstr "Rozdeliť vložku| "
#: lib/ui/stdcontext.inc:362
msgid "Jump Back to Saved Bookmark|B"
@ -19895,9 +19939,9 @@ msgstr "Skoč späť na uloženú záložku|S"
msgid "Forward Search|F"
msgstr "Dopredu hľadať|a"
#: lib/ui/stdcontext.inc:365 lib/ui/stdmenus.inc:120
#: lib/ui/stdcontext.inc:385 lib/ui/stdmenus.inc:120
msgid "Move Paragraph Up|o"
msgstr "Presunúť odstavec nahor|d"
msgstr "Presunúť odstavec nahor|h"
#: lib/ui/stdcontext.inc:366 lib/ui/stdmenus.inc:121
msgid "Move Paragraph Down|v"
@ -19915,9 +19959,9 @@ msgstr "Znížiť úroveň sekcie|í"
msgid "Move Section Down|D"
msgstr "Presunúť sekciu nadol|r"
#: lib/ui/stdcontext.inc:373 lib/ui/stdcontext.inc:661
#: lib/ui/stdcontext.inc:393 lib/ui/stdcontext.inc:681
msgid "Move Section Up|U"
msgstr "Presunúť sekciu nahor|c"
msgstr "Presunúť sekciu nahor|r"
#: lib/ui/stdcontext.inc:375
msgid "Insert Regular Expression"
@ -19931,13 +19975,13 @@ msgstr "Akceptovať zmenu|e"
msgid "Reject Change|j"
msgstr "Odmietnuť zmenu|m"
#: lib/ui/stdcontext.inc:380 lib/ui/stdmenus.inc:124
#: lib/ui/stdcontext.inc:400 lib/ui/stdmenus.inc:124
msgid "Text Properties|x"
msgstr "Vlastnosti textu|u"
msgstr "Vlastnosti textu|x"
#: lib/ui/stdcontext.inc:381 lib/ui/stdmenus.inc:125
#: lib/ui/stdcontext.inc:401 lib/ui/stdmenus.inc:125
msgid "Custom Text Styles|S"
msgstr "Vlastné štýly textu|x"
msgstr "Vlastné štýly textu|š"
#: lib/ui/stdcontext.inc:382 lib/ui/stdmenus.inc:123
msgid "Paragraph Settings...|P"
@ -20176,17 +20220,17 @@ msgstr "Odmietnuť zmenu|d"
msgid "Promote Section|P"
msgstr "Zvýšiť úroveň sekcie|i"
#: lib/ui/stdcontext.inc:660
#: lib/ui/stdcontext.inc:680
msgid "Demote Section|D"
msgstr "Znížiť úroveň sekcie|n"
msgstr "Znížiť úroveň sekcie|Z"
#: lib/ui/stdcontext.inc:662
#: lib/ui/stdcontext.inc:682
msgid "Move Section Down|w"
msgstr "Presunúť sekciu nadol|P"
msgstr "Presunúť sekciu nadol|l"
#: lib/ui/stdcontext.inc:664
#: lib/ui/stdcontext.inc:684
msgid "Select Section|S"
msgstr "Vybrať sekciu|V"
msgstr "Vybrať sekciu|y"
#: lib/ui/stdcontext.inc:672
msgid "Wrap by Preview|y"
@ -20221,12 +20265,24 @@ msgid "Giant-sized Icons"
msgstr "Gigantické ikony"
#: lib/ui/stdcontext.inc:732
msgid "Show Zoom Level|Z"
msgstr "Ukáž úroveň lupy|U"
msgid "Zoom Level|Z"
msgstr "Úroveň lupy|U"
#: lib/ui/stdcontext.inc:733
msgid "Show Zoom Slider|S"
msgstr "Ukáž posuvník lupy|p"
msgid "Zoom Slider|S"
msgstr "Posuvník lupy|P"
#: lib/ui/stdcontext.inc:735
msgid "Word Count|W"
msgstr "Počet slov|s"
#: lib/ui/stdcontext.inc:736
msgid "Character Count|C"
msgstr "Počet znakov|z"
#: lib/ui/stdcontext.inc:742
msgid "Character Count (No Blanks)|h"
msgstr "Počet znakov (bez medzier)|m"
#: lib/ui/stdmenus.inc:30
msgid "File|F"
@ -20933,8 +20989,8 @@ msgid "Inner Quotation Mark|n"
msgstr "Vnútorná úvodzovka|n"
#: lib/ui/stdmenus.inc:418
msgid "Protected Hyphen|y"
msgstr "Chránený spojovník|C"
msgid "Non-Breaking Hyphen|y"
msgstr "Nerozbitný spojovník|b"
#: lib/ui/stdmenus.inc:419
msgid "Breakable Slash|a"
@ -21024,9 +21080,13 @@ msgstr "Horný index|H"
msgid "Subscript|u"
msgstr "Dolný index|D"
#: lib/ui/stdmenus.inc:454
msgid "Protected Space|P"
msgstr "Chránená medzera|m"
#: lib/ui/stdmenus.inc:455
msgid "Non-breaking Normal Space|p"
msgstr "Nerozbitná normálna medzera|t"
#: lib/ui/stdmenus.inc:456
msgid "Non-breaking Thin Space|T"
msgstr "Nerozbitná úzka medzera|e"
#: lib/ui/stdmenus.inc:457
msgid "Horizontal Space...|o"
@ -22208,7 +22268,7 @@ msgstr "Kvadratická medzera\t\\quad"
#: lib/ui/stdtoolbars.inc:396
msgid "Double quadratin space\t\\qquad"
msgstr "Dvojitá kvadratická\t\\qquad"
msgstr "Dvojitá kvadratická medzera\t\\qquad"
#: lib/ui/stdtoolbars.inc:397
msgid "Negative space\t\\!"
@ -27971,10 +28031,6 @@ msgstr "Už nie je viac vložiek"
msgid "Save bookmark"
msgstr "Uložiť záložku"
#: src/BufferView.cpp:1054
msgid "Converting document to new document class..."
msgstr "Prevádzam dokument do novej triedy dokumentov…"
#: src/BufferView.cpp:1099
msgid "Document is read-only"
msgstr "Dokument je iba na čítanie"
@ -28042,23 +28098,23 @@ msgstr "%1$d slov"
msgid "One word"
msgstr "Jedno slovo"
#: src/BufferView.cpp:1836
#: src/BufferView.cpp:1879
#, c-format
msgid "%1$d characters (including blanks)"
msgstr "%1$d znakov (spolu s medzerami)"
msgid "%1$d characters"
msgstr "%1$d (znakov)"
#: src/BufferView.cpp:1839
msgid "One character (including blanks)"
msgstr "Jeden znak (aj medzere)"
#: src/BufferView.cpp:1881
msgid "One character"
msgstr "Jeden znak"
#: src/BufferView.cpp:1842
#: src/BufferView.cpp:1884
#, c-format
msgid "%1$d characters (excluding blanks)"
msgid "%1$d characters (no blanks)"
msgstr "%1$d znakov (bez medzier)"
#: src/BufferView.cpp:1845
msgid "One character (excluding blanks)"
msgstr "Jeden znak (bez medzier)"
#: src/BufferView.cpp:1886
msgid "One character (no blanks)"
msgstr "Jeden znak (nie medzera)"
#: src/BufferView.cpp:1847
msgid "Statistics"
@ -30056,12 +30112,12 @@ msgstr ""
"UI (užívateľské rozhranie) súbor. Môžete použiť absolútnu cestu, alebo LyX "
"bude hľadať v globálnych a lokálnych ui/ adresároch."
#: src/LyXRC.cpp:3400
#: src/LyXRC.cpp:3472
msgid ""
"Enable use the system colors for some things like main window background and "
"selection."
msgstr ""
"Umožniť používane farieb systému pre niektoré predmety ako pozadie hlavného "
"Umožniť používanie farieb systému pre niektoré predmety ako pozadie hlavného "
"okna a výber."
#: src/LyXRC.cpp:3404
@ -30713,9 +30769,9 @@ msgstr "Blokovanie súborov aktívne."
msgid "Do not forget to commit the locking property into the repository."
msgstr "Nezabudnite zapísať blokovaciu vlastnosť do repozitára."
#: src/VSpace.cpp:189
#: src/VSpace.cpp:189 src/frontends/qt/ui/VSpaceUi.ui:83
msgid "Default skip"
msgstr "Štd. riadkovanie"
msgstr "Štandardné riadkovanie"
#: src/VSpace.cpp:192
msgid "Small skip"
@ -30729,9 +30785,9 @@ msgstr "Stredná"
msgid "Big skip"
msgstr "Veľká"
#: src/VSpace.cpp:207
#: src/VSpace.cpp:207 src/frontends/qt/ui/VSpaceUi.ui:113
msgid "Vertical fill"
msgstr "Variabilné"
msgstr "Vertikálna výplň"
#: src/VSpace.cpp:214
msgid "protected"
@ -32670,61 +32726,61 @@ msgid "&Clipart"
msgstr "&Grafika"
#: src/frontends/qt/GuiHSpace.cpp:44 src/insets/InsetSpace.cpp:68
msgid "Interword Space"
msgstr "Medzi-slovná medzera"
msgid "Normal Space"
msgstr "Normálna medzera"
#: src/frontends/qt/GuiHSpace.cpp:45 src/insets/InsetSpace.cpp:77
msgid "Thin Space"
msgstr "Úzka medzera"
#: src/frontends/qt/GuiHSpace.cpp:45
msgid "Thin Space (1/6 em)"
msgstr "Úzka medzera (1/6 em)"
#: src/frontends/qt/GuiHSpace.cpp:46 src/insets/InsetSpace.cpp:80
msgid "Medium Space"
msgstr "Stredná medzera"
#: src/frontends/qt/GuiHSpace.cpp:46
msgid "Medium Space (2/9 em)"
msgstr "Stredná medzera (2/9 em)"
#: src/frontends/qt/GuiHSpace.cpp:47 src/insets/InsetSpace.cpp:83
msgid "Thick Space"
msgstr "Tučná medzera"
#: src/frontends/qt/GuiHSpace.cpp:47
msgid "Thick Space (5/18 em)"
msgstr "Tučná medzera (5/18 em)"
#: src/frontends/qt/GuiHSpace.cpp:48 src/insets/InsetSpace.cpp:98
msgid "Negative Thin Space"
msgstr "Záporná úzka medzera"
#: src/frontends/qt/GuiHSpace.cpp:48
msgid "Negative Thin Space (1/6 em)"
msgstr "Záporná úzka medzera (1/6 em)"
#: src/frontends/qt/GuiHSpace.cpp:49 src/insets/InsetSpace.cpp:101
msgid "Negative Medium Space"
msgstr "Záporná stredná medzera"
#: src/frontends/qt/GuiHSpace.cpp:49
msgid "Negative Medium Space (2/9 em)"
msgstr "Záporná stredná medzera (2/9 em)"
#: src/frontends/qt/GuiHSpace.cpp:50 src/insets/InsetSpace.cpp:104
msgid "Negative Thick Space"
msgstr "Záporná tučná medzera"
#: src/frontends/qt/GuiHSpace.cpp:50
msgid "Negative Thick Space (5/18 em)"
msgstr "Záporná tučná medzera (5/18 em)"
#: src/frontends/qt/GuiHSpace.cpp:51
msgid "Half Quad (0.5 em)"
msgstr "0.5 em"
msgid "Half Quad (1/2 em)"
msgstr "Polovica štvorčeka (1/2 em)"
#: src/frontends/qt/GuiHSpace.cpp:52
msgid "Quad (1 em)"
msgstr "1 em"
msgstr "Štvorček (1 em)"
#: src/frontends/qt/GuiHSpace.cpp:53
msgid "Double Quad (2 em)"
msgstr "Dvojité Quad (2 em)"
msgstr "Dva štvorčeky (2 em)"
#: src/frontends/qt/GuiHSpace.cpp:54 src/insets/InsetSpace.cpp:107
msgid "Horizontal Fill"
msgstr "Variabilná horizontálna medzera"
msgstr "Horizontálna výplň"
#: src/frontends/qt/GuiHSpace.cpp:56 src/insets/InsetSpace.cpp:74
msgid "Visible Space"
msgstr "Viditeľná medzera"
#: src/frontends/qt/GuiHSpace.cpp:208
#: src/frontends/qt/GuiHSpace.cpp:217
msgid ""
"Insert the spacing even after a line break.\n"
"Note that a protected Half Quad will be turned into\n"
"a vertical space if used at the beginning of a paragraph!"
msgstr ""
"Vložiť rozstup i za koniec riadku.\n"
"Pozn. - chránená polovičná Quad medzera sa zmení na\n"
"Pozn. - chránená polovica štvorčeka sa zmení na\n"
"vertikálnu medzeru, keď bude použitá na začiatku odstavca!"
#: src/frontends/qt/GuiHSpace.h:39
@ -33434,6 +33490,10 @@ msgstr ""
"Nemôžte zmeniť skratku formátu používané konvertorom. Odstráňte najprv "
"konvertor."
#: src/frontends/qt/GuiPrefs.cpp:2329 src/frontends/qt/GuiPrefs.cpp:2354
msgid "System Default"
msgstr "Systémový Štandard"
#: src/frontends/qt/GuiPrefs.cpp:2368
msgid "Cannot remove a Format used by a Converter. Remove the converter first."
msgstr ""
@ -34153,6 +34213,40 @@ msgstr "Ukončiť LyX"
msgid "LyX could not be closed because documents are being processed by LyX."
msgstr "Nemohol som zavrieť LyX, lebo LyX ešte spracováva dokumenty."
#: src/frontends/qt/GuiView.cpp:1461
#, c-format
msgid "%1$d Word"
msgstr "%1$d (Počet slov)"
#: src/frontends/qt/GuiView.cpp:1463
#, c-format
msgid "%1$d Words"
msgstr "%1$d (Počet slov)"
#: src/frontends/qt/GuiView.cpp:1468
#, c-format
msgid "%1$d Character"
msgstr "%1$d (Počet znakov)"
#: src/frontends/qt/GuiView.cpp:1470
#, c-format
msgid "%1$d Characters"
msgstr "%1$d (Počet znakov)"
#: src/frontends/qt/GuiView.cpp:1475
#, c-format
msgid "%1$d Character (no Blanks)"
msgstr "%1$d (Počet znakov bez medzier)"
#: src/frontends/qt/GuiView.cpp:1477
#, c-format
msgid "%1$d Characters (no Blanks)"
msgstr "%1$d (Počet znakov bez medzier)"
#: src/frontends/qt/GuiView.cpp:1479
msgid ", [[stats separator]]"
msgstr ", "
#: src/frontends/qt/GuiView.cpp:1245
#, c-format
msgid "%1$s (modified externally)"
@ -35305,6 +35399,20 @@ msgstr ""
"Štatus vetvy '%1$s v hlavnom dokumente sa zmenil. Zaistite uloženie hlavného "
"dokument."
#: src/insets/InsetCaption.cpp:333
msgid ""
"Standard captions are not allowed outside floats. You will get a LaTeX "
"error.\n"
"For captions outside floats, you can use the 'nonfloat' LaTeX package."
msgstr ""
"Štandardný popis sa mimo plávajúceho objektu nepripúšťa. LaTeX to dá ako "
"chybu.\n"
"Pre popisy mimo plávajúcich objektov sa môže použiť LaTeX-balík 'nonfloat'."
#: src/insets/InsetCaption.cpp:416
msgid "Orphaned caption:"
msgstr "Osirelý popis:"
#: src/insets/InsetCaption.cpp:423
#, c-format
msgid "Sub-%1$s"
@ -36516,52 +36624,80 @@ msgid "superscript"
msgstr "horný index"
#: src/insets/InsetSpace.cpp:71
msgid "Protected Space"
msgstr "Chránená medzera"
msgid "Non-Breaking Normal Space"
msgstr "Nerozbitná normálna medzera"
#: src/insets/InsetSpace.cpp:74
msgid "Non-Breaking Visible Normal Space"
msgstr "Nerozbitná viditeľná normálna medzera"
#: src/insets/InsetSpace.cpp:77
msgid "Non-Breaking Thin Space (1/6 em)"
msgstr "Nerozbitná úzka medzera (1/6 em)"
#: src/insets/InsetSpace.cpp:80
msgid "Non-Breaking Medium Space (2/9 em)"
msgstr "Nerozbitná stredná medzera (2/9 em)"
#: src/insets/InsetSpace.cpp:83
msgid "Non-Breaking Thick Space (5/18 em)"
msgstr "Nerozbitná tučná medzera (5/18 em)"
#: src/insets/InsetSpace.cpp:86
msgid "Quad Space"
msgstr "Quad medzera"
msgid "Quad Space (1 em)"
msgstr "Štvorček (1 em)"
#: src/insets/InsetSpace.cpp:89
msgid "Double Quad Space"
msgstr "Dvojnásobná Quad medzera"
msgid "Double Quad Space (2 em)"
msgstr "Dva štvorčeky (2 em)"
#: src/insets/InsetSpace.cpp:92
msgid "Enspace"
msgstr "En-medzera (Enspace)"
msgid "Non-Breaking Half Quad Space (1/2 em)"
msgstr "Nerozbitná polovica štvorčeka (1/2 em)"
#: src/insets/InsetSpace.cpp:95
msgid "Enskip"
msgstr "En-medzera (Enskip)"
msgid "Half Quad Space (1/2 em)"
msgstr "Polovica štvorčeka (1/2 em)"
#: src/insets/InsetSpace.cpp:98
msgid "Non-Breaking Negative Thin Space (-1/6 em)"
msgstr "Nerozbitná záporná úzka medzera (-1/6 em)"
#: src/insets/InsetSpace.cpp:101
msgid "Non-Breaking Negative Medium Space (-2/9 em)"
msgstr "Nerozbitná záporná stredná medzera (-2/9 em)"
#: src/insets/InsetSpace.cpp:104
msgid "Non-Breaking Negative Thick Space (-5/18 em)"
msgstr "Nerozbitná záporná tučná medzera (-5/18 em)"
#: src/insets/InsetSpace.cpp:110
msgid "Protected Horizontal Fill"
msgstr "Chránená variabilná horizontálna medzera"
msgid "Non-Breaking Horizontal Fill"
msgstr "Nerozbitná horizontálna výplň"
#: src/insets/InsetSpace.cpp:113
msgid "Horizontal Fill (Dots)"
msgstr "Variabilná horizontálna medzera(Bodky)"
msgid "Non-Breaking Horizontal Fill (Dots)"
msgstr "Nerozbitná horizontálna výplň (Bodky)"
#: src/insets/InsetSpace.cpp:116
msgid "Horizontal Fill (Rule)"
msgstr "Variabilná horizontálna medzera (línia)"
msgid "Non-Breaking Horizontal Fill (Rule)"
msgstr "Nerozbitná horizontálna výplň (línia)"
#: src/insets/InsetSpace.cpp:119
msgid "Horizontal Fill (Left Arrow)"
msgstr "Variabilná horizontálna medzera(šípka doľava)"
msgid "Non-Breaking Horizontal Fill (Left Arrow)"
msgstr "Nerozbitná horizontálna výplň (šípka doľava)"
#: src/insets/InsetSpace.cpp:122
msgid "Horizontal Fill (Right Arrow)"
msgstr "Variabilná horizontálna medzera(šípka doprava)"
msgid "Non-Breaking Horizontal Fill (Right Arrow)"
msgstr "Nerozbitná horizontálna výplň (šípka doprava)"
#: src/insets/InsetSpace.cpp:125
msgid "Horizontal Fill (Up Brace)"
msgstr "Variabilná horizontálna medzera(svorka nahor)"
msgid "Non-Breaking Horizontal Fill (Up Brace)"
msgstr "Nerozbitná horizontálna výplň (svorka nahor)"
#: src/insets/InsetSpace.cpp:128
msgid "Horizontal Fill (Down Brace)"
msgstr "Variabilná horizontálna medzera(svorka nadol)"
msgid "Non-Breaking Horizontal Fill (Down Brace)"
msgstr "Nerozbitná horizontálna výplň (svorka nadol)"
#: src/insets/InsetSpace.cpp:132
#, c-format
@ -36570,8 +36706,8 @@ msgstr "Horizontálna medzera (%1$s)"
#: src/insets/InsetSpace.cpp:137
#, c-format
msgid "Protected Horizontal Space (%1$s)"
msgstr "Chránená horizontálna medzera (%1$s)"
msgid "Non-Breaking Horizontal Space (%1$s)"
msgstr "Nerozbitná horizontálna medzera (%1$s)"
#: src/insets/InsetTOC.cpp:78
msgid "Unknown TOC type"
@ -37366,6 +37502,15 @@ msgstr ""
msgid "Unknown user"
msgstr "Neznámy používateľ"
#~ msgid "Converting document to new document class..."
#~ msgstr "Prevádzam dokument do novej triedy dokumentov…"
#~ msgid "MedSkip"
#~ msgstr "Stredná medzera(MedSkip)"
#~ msgid "MedSkip|M"
#~ msgstr "Stredná medzera(MedSkip)|S"
#~ msgid "I&gnore formatting"
#~ msgstr "&Ignorovať formát"

View File

@ -1110,6 +1110,24 @@ bool Buffer::readDocument(Lexer & lex)
}
bool Buffer::isSyncTeXenabled() const
{
bool enabled = params().output_sync;
if (!enabled)
for (auto const & c : theConverters()) {
const string dest = c.to().substr(0,3);
if (dest == "dvi" || dest == "pdf") {
const string cmd = c.command();
enabled |= cmd.find("-synctex=") != string::npos
&& cmd.find("-synctex=0") == string::npos;
if (enabled)
break;
}
}
return enabled;
}
bool Buffer::importString(string const & format, docstring const & contents, ErrorList & errorList)
{
Format const * fmt = theFormats().getFormat(format);
@ -1145,7 +1163,7 @@ bool Buffer::importFile(string const & format, FileName const & name, ErrorList
FileName const lyx = tempFileName("Buffer_importFileXXXXXX.lyx");
Converters::RetVal const retval =
theConverters().convert(nullptr, name, lyx, name, format, "lyx", errorList);
theConverters().convert(this, name, lyx, name, format, "lyx", errorList);
if (retval == Converters::SUCCESS) {
bool const success = readFile(lyx) == ReadSuccess;
removeTempFile(lyx);

View File

@ -221,6 +221,11 @@ public:
int readHeader(Lexer & lex);
double fontScalingFactor() const;
/// check for active synctex support:
/// - either the document has synchronize output enabled or
/// - there is a converter to dvi or pdf defined with synctex command line argument
/// this is the "expert mode", false positives are possible
bool isSyncTeXenabled() const;
private:
///

View File

@ -1979,6 +1979,8 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
if (!features.runparams().includeall && !included_children_.empty()) {
os << "\\includeonly{";
bool first = true;
// we do not use "auto const &" here, because incfile is modified later
// coverity[auto_causes_copy]
for (auto incfile : included_children_) {
FileName inc = makeAbsPath(incfile, filepath.absFileName());
string mangled = DocFileName(changeExtension(inc.absFileName(), ".tex")).
@ -2191,7 +2193,7 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
os << from_utf8(output_sync_macro) +"\n";
else if (features.runparams().flavor == Flavor::LaTeX)
os << "\\usepackage[active]{srcltx}\n";
else if (features.runparams().flavor == Flavor::PdfLaTeX)
else
os << "\\synctex=-1\n";
}
@ -2275,7 +2277,7 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
if (!tmppreamble.str.empty())
atlyxpreamble << "\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "
"LyX specific LaTeX commands.\n"
<< move(tmppreamble)
<< std::move(tmppreamble)
<< '\n';
}
// the text class specific preamble
@ -3440,8 +3442,20 @@ void BufferParams::writeEncodingPreamble(otexstream & os,
if (features.isRequired("japanese")
|| features.isProvided("inputenc"))
break;
os << "\\usepackage[" << from_ascii(encoding().latexName());
if (features.runparams().flavor == Flavor::LuaTeX
string const doc_encoding = encoding().latexName();
// The 2022 release of ucs.sty uses the default utf8
// inputenc encoding with 'utf8x' inputenc if the ucs
// package is not loaded before inputenc.
// This breaks existing documents that use utf8x
// and also makes utf8x redundant.
// Thus we load ucs.sty in order to keep functionality
// that would otherwise be silently dropped.
if (doc_encoding == "utf8x"
&& features.isAvailable("ucs-2022/08/07")
&& !features.isProvided("ucs"))
os << "\\usepackage{ucs}\n";
os << "\\usepackage[" << from_ascii(doc_encoding);
if (features.runparams().flavor == Flavor::LuaTeX
|| features.runparams().flavor == Flavor::DviLuaTeX)
os << "]{luainputenc}\n";
else
@ -3805,6 +3819,7 @@ void BufferParams::copyForAdvFR(const BufferParams & bp)
{
string const & lang = bp.language->lang();
setLanguage(lang);
quotes_style = bp.quotes_style;
layout_modules_ = bp.layout_modules_;
string const & doc_class = bp.documentClass().name();
setBaseClass(doc_class);

View File

@ -292,6 +292,8 @@ struct BufferView::Private
bool clickable_inset_;
/// shape of the caret
frontend::CaretGeometry caret_geometry_;
///
bool mouse_selecting_ = false;
};
@ -1089,8 +1091,6 @@ void BufferView::makeDocumentClass()
void BufferView::updateDocumentClass(DocumentClassConstPtr olddc)
{
message(_("Converting document to new document class..."));
StableDocIterator backcur(d->cursor_);
ErrorList & el = buffer_.errorList("Class Switch");
cap::switchBetweenClasses(
@ -1719,6 +1719,8 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
}
if (cur.selection())
pattern = cur.selectionAsString(false);
else if (!cur.inTexted())
break; // not suitable for selectWord at cursor
else {
pos_type spos = cur.pos();
cur.innerText()->selectWord(cur, WHOLE_WORD);
@ -1874,16 +1876,14 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
message += _("One word");
message += "\n";
if (chars_blanks != 1)
message += bformat(_("%1$d characters (including blanks)"),
chars_blanks);
message += bformat(_("%1$d characters"), chars_blanks);
else
message += _("One character (including blanks)");
message += _("One character");
message += "\n";
if (chars != 1)
message += bformat(_("%1$d characters (excluding blanks)"),
chars);
message += bformat(_("%1$d characters (no blanks)"), chars);
else
message += _("One character (excluding blanks)");
message += _("One character (no blanks)");
Alert::information(_("Statistics"), message);
}
@ -2468,6 +2468,12 @@ void BufferView::clearLastInset(Inset * inset) const
}
bool BufferView::mouseSelecting() const
{
return d->mouse_selecting_;
}
void BufferView::mouseEventDispatch(FuncRequest const & cmd0)
{
//lyxerr << "[ cmd0 " << cmd0 << "]" << endl;
@ -2490,6 +2496,9 @@ void BufferView::mouseEventDispatch(FuncRequest const & cmd0)
d->mouse_position_cache_.x_ = cmd.x();
d->mouse_position_cache_.y_ = cmd.y();
d->mouse_selecting_ =
cmd.action() == LFUN_MOUSE_MOTION && cmd.button() == mouse_button::button1;
if (cmd.action() == LFUN_MOUSE_MOTION && cmd.button() == mouse_button::none) {
updateHoveredInset();
return;

View File

@ -375,6 +375,8 @@ public:
bool clickableInset() const;
///
void makeDocumentClass();
/// Are we currently performing a selection with the mouse?
bool mouseSelecting() const;
private:
/// noncopyable

View File

@ -15,6 +15,7 @@
#include "Buffer.h"
#include "BufferParams.h"
#include "ConverterCache.h"
#include "TextClass.h"
#include "Encoding.h"
#include "ErrorList.h"
#include "Format.h"
@ -58,6 +59,8 @@ string const token_to("$$o");
string const token_path("$$p");
string const token_orig_path("$$r");
string const token_orig_from("$$f");
string const token_textclass("$$c");
string const token_modules("$$m");
string const token_encoding("$$e");
string const token_latex_encoding("$$E");
string const token_python("$${python}");
@ -472,7 +475,7 @@ Converters::RetVal Converters::convert(Buffer const * buffer,
return FAILURE;
}
// buffer is only invalid for importing, and then runparams is not
// buffer can only be null for importing, and then runparams is not
// used anyway.
OutputParams runparams(buffer ? &buffer->params().encoding() : nullptr);
runparams.flavor = getFlavor(edgepath, buffer);
@ -649,7 +652,15 @@ Converters::RetVal Converters::convert(Buffer const * buffer,
command = subst(command, token_path, quoteName(onlyPath(infile.absFileName())));
command = subst(command, token_orig_path, quoteName(onlyPath(orig_from.absFileName())));
command = subst(command, token_orig_from, quoteName(onlyFileName(orig_from.absFileName())));
command = subst(command, token_encoding, buffer ? buffer->params().encoding().iconvName() : string());
command = subst(command, token_textclass,
buffer ? quoteName(buffer->params().documentClass().name())
: string());
command = subst(command, token_modules,
buffer ? quoteName(buffer->params().getModules().asString())
: string());
command = subst(command, token_encoding,
buffer ? quoteName(buffer->params().encoding().iconvName())
: string());
command = subst(command, token_python, os::python());
if (!conv.parselog().empty())

View File

@ -421,6 +421,16 @@ void Counters::reset(docstring const & match)
}
bool Counters::copy(docstring const & cnt, docstring const & newcnt)
{
auto const it = counterList_.find(cnt);
if (it == counterList_.end())
return false;
counterList_[newcnt] = it->second;
return true;
}
bool Counters::remove(docstring const & cnt)
{
bool retval = counterList_.erase(cnt);

View File

@ -162,6 +162,8 @@ public:
void reset();
/// Reset counters matched by match string.
void reset(docstring const & match);
/// Copy counter \p cnt to \p newcnt.
bool copy(docstring const & cnt, docstring const & newcnt);
/// Remove counter \p cnt.
bool remove(docstring const & cnt);
/** returns the expanded string representation of counter \c

View File

@ -289,12 +289,25 @@ pasteSelectionHelper(DocIterator const & cur, ParagraphList const & parlist,
Change::INSERTED : Change::UNCHANGED));
}
bool const empty = pars[pit].empty();
if (!empty) {
// Make the buf exactly the same layout as the cursor
// paragraph.
bool const target_empty = pars[pit].empty();
// Use the paste content's layout, if...
bool const paste_layout =
// if target paragraph is empty
(target_empty
// ... and its layout is default
&& (pars[pit].layout() == defaultLayout
// ... or plain
|| pars[pit].layout() == plainLayout
// ... or the paste content spans several paragraphs
|| insertion.size() > 1))
// or if pasting is done at the beginning of paragraph
|| (pos == 0
// and the paste content spans several paragraphs
&& insertion.size() > 1);
if (!paste_layout)
// Give the first paragraph to insert the same layout as the
// target paragraph.
insertion.begin()->makeSameLayout(pars[pit]);
}
// Prepare the paragraphs and insets for insertion.
insertion.swap(in.paragraphs());
@ -458,11 +471,17 @@ pasteSelectionHelper(DocIterator const & cur, ParagraphList const & parlist,
insertion.swap(in.paragraphs());
// Split the paragraph for inserting the buf if necessary.
if (!empty)
if (!target_empty)
breakParagraphConservative(buffer.params(), pars, pit, pos);
// If multiple paragraphs are inserted before the target paragraph,
// the cursor is now in a new paragraph before it,
// so use layout from paste content in that case.
if (pos == 0 && insertion.size() > 1)
pars[pit].makeSameLayout(* insertion.begin());
// Paste it!
if (empty) {
if (target_empty) {
pars.insert(pars.iterator_at(pit),
insertion.begin(), insertion.end());
@ -491,7 +510,7 @@ pasteSelectionHelper(DocIterator const & cur, ParagraphList const & parlist,
// Join (conditionally) last pasted paragraph with next one, i.e.,
// the tail of the spliced document paragraph
if (!empty && last_paste + 1 != pit_type(pars.size())) {
if (!target_empty && last_paste + 1 != pit_type(pars.size())) {
if (pars[last_paste + 1].hasSameLayout(pars[last_paste])) {
mergeParagraph(buffer.params(), pars, last_paste);
} else if (pars[last_paste + 1].empty()) {
@ -1299,6 +1318,7 @@ bool pasteClipboardText(Cursor & cur, ErrorList & errorList, bool asParagraphs,
Buffer buffer(string(), false);
buffer.setInternal(true);
buffer.setUnnamed(true);
buffer.params() = cur.buffer()->params();
available = buffer.importString(names[i], text, errorList);
if (available)
available = !buffer.paragraphs().empty();

View File

@ -160,29 +160,30 @@ void KeyMap::unbind(KeySequence * seq, FuncRequest const & func, unsigned int r)
KeyModifier const mod2 = seq->modifiers[r].second;
// check if key is already there
vector <Table::iterator> removes;
Table::iterator end = table.end();
Table::iterator remove = end;
for (Table::iterator it = table.begin(); it != end; ++it) {
if (code == it->code
&& mod1 == it->mod.first
&& mod2 == it->mod.second) {
// remove
if (r + 1 == seq->length()) {
if (it->func == func) {
remove = it;
if (it->func == func || func == FuncRequest::unknown) {
removes.push_back(it);
if (it->prefixes)
it->prefixes.reset();
}
} else if (it->prefixes) {
it->prefixes->unbind(seq, func, r + 1);
if (it->prefixes->empty())
remove = it;
removes.push_back(it);
return;
}
}
}
if (remove != end)
table.erase(remove);
for (unsigned i = removes.size(); i > 0; --i)
table.erase(removes[i-1]);
}
@ -333,7 +334,7 @@ KeyMap::ReturnValues KeyMap::readWithoutConv(FileName const & bind_file, KeyMap
string cmd = lexrc.getString();
FuncRequest func = lyxaction.lookupFunc(cmd);
if (func.action() == LFUN_UNKNOWN_ACTION) {
if (func == FuncRequest::unknown) {
lexrc.printError("BN_BIND: Unknown LyX function `$$Token'");
error = true;
break;
@ -357,13 +358,16 @@ KeyMap::ReturnValues KeyMap::readWithoutConv(FileName const & bind_file, KeyMap
break;
}
string cmd = lexrc.getString();
FuncRequest func = lyxaction.lookupFunc(cmd);
if (func.action() == LFUN_UNKNOWN_ACTION) {
lexrc.printError("BN_UNBIND: Unknown LyX"
" function `$$Token'");
error = true;
break;
FuncRequest func;
if (cmd == "*")
func = FuncRequest::unknown;
else {
func = lyxaction.lookupFunc(cmd);
if (func == FuncRequest::unknown) {
lexrc.printError("BN_UNBIND: Unknown LyX function `$$Token'");
error = true;
break;
}
}
if (unbind_map)
@ -409,17 +413,17 @@ void KeyMap::write(string const & bind_file, bool append, bool unbind) const
<< "Format " << LFUN_FORMAT << "\n\n";
string tag = unbind ? "\\unbind" : "\\bind";
BindingList const list = listBindings(false);
BindingList::const_iterator it = list.begin();
BindingList::const_iterator it_end = list.end();
for (; it != it_end; ++it) {
FuncCode action = it->request.action();
string arg = to_utf8(it->request.argument());
for (auto const & bnd : listBindings(false)) {
FuncCode const action = bnd.request.action();
string const arg = to_utf8(bnd.request.argument());
string const cmd = lyxaction.getActionName(action)
+ (arg.empty() ? string() : " " + arg) ;
string cmd;
if (unbind && bnd.request == FuncRequest::unknown)
cmd = "*";
else
cmd = lyxaction.getActionName(action) + (arg.empty() ? string() : " " + arg);
os << tag << " \""
<< to_utf8(it->sequence.print(KeySequence::BindFile))
<< to_utf8(bnd.sequence.print(KeySequence::BindFile))
<< "\" " << Lexer::quoteString(cmd)
<< "\n";
}

View File

@ -837,7 +837,7 @@ void addSnippet(std::list<TexString> & list, TexString ts, bool allow_dupes)
return ts.str == ts2.str;
})
)
list.push_back(move(ts));
list.push_back(std::move(ts));
}
@ -854,7 +854,7 @@ TexString getSnippets(std::list<TexString> const & list)
void LaTeXFeatures::addPreambleSnippet(TexString snippet, bool allow_dupes)
{
addSnippet(preamble_snippets_, move(snippet), allow_dupes);
addSnippet(preamble_snippets_, std::move(snippet), allow_dupes);
}
@ -1511,7 +1511,8 @@ string const LaTeXFeatures::getPackages() const
}
// fixltx2e provides subscript
if (mustProvide("subscript") && !isRequired("fixltx2e"))
if (mustProvide("subscript") && !isRequired("fixltx2e")
&& !isAvailable("LaTeX-2005/12/01"))
packages << "\\usepackage{subscript}\n";
// footmisc must be loaded after setspace

View File

@ -53,6 +53,18 @@ bool LayoutModuleList::adaptToBaseClass(LayoutFile const * const lay,
}
string LayoutModuleList::asString() const
{
string mods;
for (auto const & mod : lml_)
mods += mod + ',';
// remove trailing comma
if (!mods.empty())
mods.pop_back();
return mods;
}
bool LayoutModuleList::moduleCanBeAdded(string const & modName,
LayoutFile const * const lay) const
{

View File

@ -55,6 +55,8 @@ public:
/// This is needed in GuiDocument. It seems better than an
/// implicit conversion.
std::list<std::string> const & list() const { return lml_; }
/// List of modules as a comma-separated string
std::string asString() const;
/// Checks to make sure module's requriements are satisfied, that it does
/// not conflict with already-present modules, isn't already loaded, etc.
bool moduleCanBeAdded(std::string const & modName,

View File

@ -843,8 +843,8 @@ void LyXAction::init()
is able to detect such changes (e.g. ghostview for postscript).
* \li Syntax: buffer-update [<FORMAT>]
* \li Params: <FORMAT>: The format to display, where this is one of the
formats defined (in the current GUI) in the
Tools>Preferences>File Formats dialog.
formats defined in the Tools>Preferences>File Formats dialog,
use the "Short name" field.
If no format is given, the default format as
specified in the same dialog is used.
* \li Origin: Dekel, 5 Aug 2000
@ -4101,13 +4101,20 @@ void LyXAction::init()
* \var lyx::FuncCode lyx::LFUN_UI_TOGGLE
* \li Action: Various UI visibility-toggling actions.
* \li Syntax: ui-toggle <statusbar|menubar|scrollbar|frame|fullscreen>
* \li Params: statusbar : Toggle visibility of the statusbar.\n
menubar : Toggle visibility of the menubar.\n
scrollbar : Toggle visibility of the scrollbar.\n
frame : Toggle visibility of the frames around editing window.\n
fullscreen : Toggle fullscreen mode. This also covers calling the
previous functions. However #LFUN_TOOLBAR_TOGGLE for the
custom tweaks of the toolbars should be used.
* \li Params: statusbar : Toggle visibility of the statusbar.\n
menubar : Toggle visibility of the menubar.\n
scrollbar : Toggle visibility of the scrollbar.\n
frame : Toggle visibility of the frames around editing window.\n
zoomslider : Toggle visibility of the zoom slider in statusbar.\n
zoomlevel : Toggle visibility of the zoom level display in statusbar.\n
statistics-w : Toggle visibility of the document word count in statusbar.\n
statistics-cb : Toggle visibility of the document character count (incl. blanks)
in statusbar.\n
statistics-c : Toggle visibility of the document character count (excl. blanks)
in statusbar.\n
fullscreen : Toggle fullscreen mode. This also covers calling the
previous functions. However #LFUN_TOOLBAR_TOGGLE for the
custom tweaks of the toolbars should be used.
* \li Origin: sanda, 9 Feb 2007
* \endvar
*/

View File

@ -33,7 +33,7 @@ namespace lyx {
/////////////////////////////////////////////////////////////////////////
MetricsBase::MetricsBase(BufferView * b, FontInfo f, int w)
: bv(b), font(move(f)), fontname("mathnormal"),
: bv(b), font(std::move(f)), fontname("mathnormal"),
textwidth(w), macro_nesting(0),
solid_line_thickness_(1), solid_line_offset_(1), dotted_line_thickness_(1)
{
@ -75,11 +75,7 @@ Changer MetricsBase::changeFontSet(string const & name)
&& ((isTextFont(oldname) && oldcolor != Color_foreground)
|| (isMathFont(oldname) && oldcolor != Color_math)))
font.setColor(oldcolor);
#if __cplusplus >= 201402L
return rc;
#else
return move(rc);
#endif
}

View File

@ -1927,7 +1927,8 @@ FontSpan Paragraph::fontSpan(pos_type pos) const
// This should not happen, but if so, we take no chances.
LYXERR0("Paragraph::fontSpan: position not found in fontinfo table!");
LASSERT(false, return FontSpan(pos, pos));
LASSERT(false, /**/);
return FontSpan(pos, pos);
}
@ -2788,9 +2789,11 @@ void Paragraph::latex(BufferParams const & bparams,
os << '}';
column += 1;
}
if (closeLanguage)
if (closeLanguage) {
// Force language closing
current_font.setLanguage(basefont.language());
langClosed = true;
}
Font const nextfont = (i == body_pos-1) ? basefont : current_font;
bool needPar = false;
column += running_font.latexWriteEndChanges(
@ -2804,7 +2807,7 @@ void Paragraph::latex(BufferParams const & bparams,
Change(Change::UNCHANGED), Change(Change::DELETED), rp);
}
// Has the language been closed in the latexWriteEndChanges() call above?
langClosed = running_font.language() != basefont.language()
langClosed |= running_font.language() != basefont.language()
&& running_font.language() != nextfont.language()
&& (running_font.language()->encoding()->package() != Encoding::CJK);
running_font = basefont;
@ -2908,9 +2911,14 @@ void Paragraph::latex(BufferParams const & bparams,
column += Changes::latexMarkChange(os, bparams,
Change(Change::UNCHANGED), change, rp);
}
} else {
} else {// if fontswitch_inset
if (current_font != running_font || !langClosed)
// font is still open in fontswitch_insets if we have
// a non-lang font difference or if the language
// is the only difference but has not been forcedly
// closed meanwhile
open_font = true;
running_font = current_font;
open_font &= !langClosed;
}
}
@ -2979,7 +2987,7 @@ void Paragraph::latex(BufferParams const & bparams,
d->latexInset(bparams, os, rp, running_font,
basefont, real_outerfont, open_font,
runningChange, style, i, column, fontswitch_inset,
closeLanguage, lang_switched_at_inset);
closeLanguage, (lang_switched_at_inset || langClosed));
if (fontswitch_inset) {
if (open_font) {
bool needPar = false;
@ -4012,6 +4020,8 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
runparams, i);
if (c == ' ' && (style.free_spacing || runparams.free_spacing))
xs << XMLStream::ESCAPE_NONE << "&nbsp;";
else if (c == '\'')
xs << XMLStream::ESCAPE_NONE << "&#8217;";
else
xs << c;
}

View File

@ -144,7 +144,7 @@ bool Row::Element::splitAt(int const width, int next_width, bool force,
isRTL(), wrap_any | force);
// if breaking did not really work, give up
if (!force && breaks.front().wid > width) {
if (!force && breaks.front().nspc_wid > width) {
if (dim.wid == 0)
dim.wid = fm.width(str);
return false;
@ -336,7 +336,7 @@ ostream & operator<<(ostream & os, Row const & row)
<< " descent: " << row.dim_.des
<< " separator: " << row.separator
<< " label_hfill: " << row.label_hfill
<< " right_boundary: " << row.right_boundary()
<< " end_boundary: " << row.end_boundary()
<< " flushed: " << row.flushed() << "\n";
// We cannot use the operator above, unfortunately
double x = row.left_margin;
@ -562,7 +562,7 @@ Row::Elements Row::shortenIfNeeded(int const w, int const next_width)
Element brk = *cit_brk;
/* If the current element is an inset that allows breaking row
* after itself, and if the row is already short enough after
* this inset, then cut right after this element.
* this element, then cut right after it.
*/
if (wid_brk <= w && brk.row_flags & CanBreakAfter) {
end_ = brk.endpos;
@ -572,6 +572,16 @@ Row::Elements Row::shortenIfNeeded(int const w, int const next_width)
}
// assume now that the current element is not there
wid_brk -= brk.dim.wid;
/* If the current element is an inset that allows breaking row
* before itself, and if the row is already short enough before
* this element, then cut right before it.
*/
if (wid_brk <= w && brk.row_flags & CanBreakBefore && cit_brk != beg) {
end_ = (cit_brk -1)->endpos;
dim_.wid = wid_brk;
moveElements(elements_, cit_brk, tail);
return tail;
}
/* We have found a suitable separable element. This is the common case.
* Try to break it cleanly at a length that is both
* - less than the available space on the row

View File

@ -89,14 +89,16 @@ public:
*/
pos_type x2pos(int &x) const;
/** Break the element in two if possible, so that its width is less
* than \param w.
* \return a vector of elements containing the remainder of
* the text (empty if nothing happened).
* \param width maximum width of the row.
* \param next_width available width on next row.
* than the required values.
* \return true if something has been done ; false if this is
* not needed or not possible.
* \param width: maximum width of the row.
* \param next_width: available width on next rows.
* \param force: if true, cut string at any place, even for
* languages that wrap at word delimiters; if false, do not
* break at all if first element would larger than \c width.
* \param tail: a vector of elements where the remainder of
* the text will be appended (empty if nothing happened).
*/
// FIXME: ideally last parameter should be Elements&, but it is not possible.
bool splitAt(int width, int next_width, bool force, std::vector<Element> & tail);
@ -139,7 +141,7 @@ public:
Change change;
// is it possible to add contents to this element?
bool final = false;
// properties with respect to row breaking (made of RowFlag enums)
// properties with respect to row breaking (made of RowFlag enumerators)
int row_flags = Inline;
friend std::ostream & operator<<(std::ostream & os, Element const & row);
@ -204,9 +206,9 @@ public:
///
pos_type endpos() const { return end_; }
///
void right_boundary(bool b) { right_boundary_ = b; }
void end_boundary(bool b) { end_boundary_ = b; }
///
bool right_boundary() const { return right_boundary_; }
bool end_boundary() const { return end_boundary_; }
///
void flushed(bool b) { flushed_ = b; }
///
@ -366,7 +368,7 @@ private:
/// one behind last pos covered by this row
pos_type end_ = 0;
// Is there a boundary at the end of the row (display inset...)
bool right_boundary_ = false;
bool end_boundary_ = false;
// Shall the row be flushed when it is supposed to be justified?
bool flushed_ = false;
/// Row dimension.

View File

@ -16,10 +16,9 @@
namespace lyx {
/* The list of possible flags, that can be combined.
* Some flags that should logically be here (e.g.,
* CanBreakBefore), do not exist. This is because the need has not
* been identitfied yet.
/* The list of possible flags, that can be combined. Some flags that
* should logically be here (e.g., AlwaysBreakBefore), do not exist.
* This is because the need has not been identitfied yet.
*
* Priorities when before/after disagree:
* AlwaysBreak* > NoBreak* > Break* or CanBreak*.
@ -30,26 +29,28 @@ enum RowFlags {
Inline = 0,
// break row before this element if the row is not empty
BreakBefore = 1 << 0,
// break row whenever needed before this element
CanBreakBefore = 1 << 1,
// Avoid breaking row before this element
NoBreakBefore = 1 << 1,
NoBreakBefore = 1 << 2,
// flush the row before this element (useful with BreakBefore)
FlushBefore = 1 << 2,
FlushBefore = 1 << 3,
// force new (maybe empty) row after this element
AlwaysBreakAfter = 1 << 3,
AlwaysBreakAfter = 1 << 4,
// break row after this element if there are more elements
BreakAfter = 1 << 4,
BreakAfter = 1 << 5,
// break row whenever needed after this element
CanBreakAfter = 1 << 5,
CanBreakAfter = 1 << 6,
// Avoid breaking row after this element
NoBreakAfter = 1 << 6,
NoBreakAfter = 1 << 7,
// The contents of the row may be broken in two (e.g. string)
CanBreakInside = 1 << 7,
CanBreakInside = 1 << 8,
// Flush the row that ends with this element
Flush = 1 << 8,
Flush = 1 << 9,
// specify an alignment (left, right) for a display element
// (default is center)
AlignLeft = 1 << 9,
AlignRight = 1 << 10,
AlignLeft = 1 << 10,
AlignRight = 1 << 11,
// A display element breaks row at both ends
Display = FlushBefore | BreakBefore | BreakAfter,
// Flags that concern breaking after element

View File

@ -408,6 +408,11 @@ void LastCommandsSection::setNumberOfLastCommands(unsigned int no)
void LastCommandsSection::add(std::string const & command)
{
// remove traces of 'command' in history using the erase-remove idiom
// https://en.wikipedia.org/wiki/Erase%E2%80%93remove_idiom
lastcommands.erase(remove(lastcommands.begin(), lastcommands.end(), command),
lastcommands.end());
// add it at the end of the list.
lastcommands.push_back(command);
}

View File

@ -302,7 +302,7 @@ public:
void write(std::ostream & os) const override;
/// Return lastcommands container (vector)
LastCommands const getcommands() const { return lastcommands; }
LastCommands const & getcommands() const { return lastcommands; }
/** add command to lastcommands list
@param command command to add

View File

@ -38,14 +38,14 @@ namespace lyx {
TexString::TexString(docstring s)
: str(move(s)), texrow(TexRow())
: str(std::move(s)), texrow(TexRow())
{
texrow.setRows(1 + count(str.begin(), str.end(), '\n'));
}
TexString::TexString(docstring s, TexRow t)
: str(move(s)), texrow(move(t))
: str(std::move(s)), texrow(std::move(t))
{
validate();
}
@ -235,7 +235,7 @@ void TexRow::append(TexRow other)
RowList::iterator it = other.rowlist_.begin();
RowList::iterator const end = other.rowlist_.end();
LASSERT(it != end, return);
currentRow().append(move(*it++));
currentRow().append(std::move(*it++));
move(it, end, back_inserter(rowlist_));
}

View File

@ -1369,6 +1369,20 @@ void Text::selectWord(Cursor & cur, word_location loc)
}
void Text::expandWordSel(Cursor & cur)
{
// get selection of word around cur
Cursor c = cur;
c.selection(false);
c.text()->selectWord(c, WHOLE_WORD);
// use the correct word boundary, depending on selection direction
if (cur.top() > cur.normalAnchor())
cur.pos() = c.selEnd().pos();
else
cur.pos() = c.selBegin().pos();
}
void Text::selectAll(Cursor & cur)
{
LBUFERR(this == cur.text());
@ -2367,7 +2381,8 @@ void Text::setMacrocontextPosition(DocIterator const & pos)
bool Text::completionSupported(Cursor const & cur) const
{
Paragraph const & par = cur.paragraph();
return !cur.selection()
return !cur.buffer()->isReadonly()
&& !cur.selection()
&& cur.pos() > 0
&& (cur.pos() >= par.size() || par.isWordSeparator(cur.pos()))
&& !par.isWordSeparator(cur.pos() - 1);
@ -2381,9 +2396,12 @@ CompletionList const * Text::createCompletionList(Cursor const & cur) const
}
bool Text::insertCompletion(Cursor & cur, docstring const & s, bool /*finished*/)
bool Text::insertCompletion(Cursor & cur, docstring const & s)
{
LBUFERR(cur.bv().cursor() == cur);
if (cur.buffer()->isReadonly())
return false;
cur.recordUndo();
cur.insert(s);
cur.bv().cursor() = cur;
if (!(cur.result().screenUpdate() & Update::Force))

View File

@ -171,6 +171,8 @@ public:
void getWord(CursorSlice & from, CursorSlice & to, word_location const) const;
/// just selects the word the cursor is in
void selectWord(Cursor & cur, word_location loc);
/// expands the selection to the word the cursor is in
void expandWordSel(Cursor & cur);
/// select all text
void selectAll(Cursor & cur);
@ -329,8 +331,9 @@ public:
bool completionSupported(Cursor const & cur) const;
///
CompletionList const * createCompletionList(Cursor const & cur) const;
///
bool insertCompletion(Cursor & cur, docstring const & s, bool /*finished*/);
/// Do a completion at the cursor position. Return true on success.
/// The completion does not contain the prefix. Handles undo.
bool insertCompletion(Cursor & cur, docstring const & s);
///
docstring completionPrefix(Cursor const & cur) const;
/// find a paragraph before \p par with the given \p depth, if such

View File

@ -426,8 +426,12 @@ void Text::toggleFree(Cursor & cur, Font const & font, bool toggleall)
cur.clearSelection();
cur.top() = resetCursor;
cur.resetAnchor();
cur.setCurrentFont();
}
// if there was no selection at all, the point was to change cursor font.
// Otherwise, we want to reset it to local text font.
if (cur.selection() || implicitSelection)
cur.setCurrentFont();
}

View File

@ -1876,17 +1876,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
if (!bv->mouseSetCursor(cur, cmd.modifier() == ShiftModifier))
cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
// FIXME: move this to mouseSetCursor?
if (bvcur.wordSelection() && bvcur.inTexted()) {
// select word around new position
Cursor c = bvcur;
c.selection(false);
c.text()->selectWord(c, WHOLE_WORD);
// use the correct word boundary, depending on selection direction
if (bvcur.top() > bvcur.normalAnchor())
bvcur.pos() = c.selEnd().pos();
else
bvcur.pos() = c.selBegin().pos();
}
if (bvcur.wordSelection() && bvcur.inTexted())
expandWordSel(bvcur);
break;
case mouse_button::button2:
@ -1954,6 +1945,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
// We continue with our existing selection or start a new one, so don't
// reset the anchor.
bvcur.setCursor(cur);
if (bvcur.wordSelection() && bvcur.inTexted())
expandWordSel(bvcur);
bvcur.selection(true);
bvcur.setCurrentFont();
if (cur.top() == old) {
@ -3191,15 +3184,22 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
break;
case LFUN_FLEX_INSERT: {
code = FLEX_CODE;
string s = cmd.getArg(0);
InsetLayout il =
cur.buffer()->params().documentClass().insetLayout(from_utf8(s));
if (il.lyxtype() != InsetLyXType::CHARSTYLE &&
il.lyxtype() != InsetLyXType::CUSTOM &&
il.lyxtype ()!= InsetLyXType::STANDARD)
docstring s = from_utf8(cmd.getArg(0));
// Prepend "Flex:" prefix if not there
if (!prefixIs(s, from_ascii("Flex:")))
s = from_ascii("Flex:") + s;
if (!cur.buffer()->params().documentClass().hasInsetLayout(s))
enable = false;
break;
else {
InsetLyXType ilt =
cur.buffer()->params().documentClass().insetLayout(s).lyxtype();
if (ilt != InsetLyXType::CHARSTYLE
&& ilt != InsetLyXType::CUSTOM
&& ilt != InsetLyXType::STANDARD)
enable = false;
}
break;
}
case LFUN_BOX_INSERT:
code = BOX_CODE;
break;

View File

@ -691,7 +691,7 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
case TC_PKGOPTS : {
lexrc.next();
string const pkg = lexrc.getString();
lexrc.next();
lexrc.eatLine();
string const options = lexrc.getString();
package_options_[pkg] = options;
break;

View File

@ -1059,7 +1059,7 @@ void cleanupRow(Row & row, bool at_end)
if (!at_end && !row.flushed())
row.back().rtrim();
// boundary exists when there was no space at the end of row
row.right_boundary(!at_end && row.back().endpos == row.endpos());
row.end_boundary(!at_end && row.back().endpos == row.endpos());
// make sure that the RTL elements are in reverse ordering
row.reverseRTL();
}
@ -1368,7 +1368,7 @@ pos_type TextMetrics::getPosNearX(Row const & row, int & x,
|| inset->lyxCode() == SEPARATOR_CODE))
pos = row.back().pos;
else
boundary = row.right_boundary();
boundary = row.end_boundary();
}
x += xo - offset;

View File

@ -147,7 +147,7 @@ shared_ptr<Toc> TocBackend::toc(string const & type)
TocBuilder & TocBackend::builder(string const & type)
{
auto p = lyx::make_unique<TocBuilder>(toc(type));
return * builders_.insert(make_pair(type, move(p))).first->second;
return * builders_.insert(make_pair(type, std::move(p))).first->second;
}

View File

@ -21,6 +21,7 @@
#include "support/convert.h"
#include "support/Length.h"
#include "support/lstrings.h"
#include "support/qstring_helpers.h"
#include "support/lassert.h"
@ -207,7 +208,7 @@ docstring const VSpace::asGUIName() const
result = _("Vertical fill");
break;
case LENGTH:
result = from_ascii(len_.asString());
result = locLengthDocString(from_ascii(len_.asString()));
break;
}
if (keep_)

View File

@ -33,6 +33,9 @@ public:
/// Initialize with the name of a key. F. ex. "space" or "a"
void init(std::string const & symbolname);
/// Initialize with some platform specific sym value
void init(int key);
/// Is this a valid key?
bool isOK() const;

View File

@ -34,7 +34,7 @@ namespace frontend {
Action::Action(FuncRequest func, QIcon const & icon, QString const & text,
QString const & tooltip, QObject * parent)
: QAction(parent), func_(make_shared<FuncRequest>(move(func))), icon_(icon)
: QAction(parent), func_(make_shared<FuncRequest>(std::move(func))), icon_(icon)
{
init(text, tooltip);
}

Some files were not shown because too many files have changed in this diff Show More