Georg Baum wrote:
> OK, I will change it. But since the LyX file format really has nothing to
> do with LaTeX (except for math), I will remove all backslashes and {}
> pairs from InsetSpecialChar. BTW, LaTeX2E is not the only one which is
> different.
This would look like the attached. Before I commit: Any wishes for other
names?
Georg
diff --git a/lib/lyx2lyx/LyX.py b/lib/lyx2lyx/LyX.py
index 89b08c8..d96b7b4 100644
--- a/lib/lyx2lyx/LyX.py
+++ b/lib/lyx2lyx/LyX.py
@@ -85,7 +85,7 @@ format_relation = [("0_06", [200], minor_versions("0.6" , 4)),
("1_6", list(range(277,346)), minor_versions("1.6" , 10)),
("2_0", list(range(346,414)), minor_versions("2.0", 8)),
("2_1", list(range(414,475)), minor_versions("2.1", 0)),
- ("2_2", list(range(475,483)), minor_versions("2.2", 0))
+ ("2_2", list(range(475,484)), minor_versions("2.2", 0))
]
####################################################################
diff --git a/lib/lyx2lyx/lyx_2_2.py b/lib/lyx2lyx/lyx_2_2.py
index b4ce71e..5d91085 100644
--- a/lib/lyx2lyx/lyx_2_2.py
+++ b/lib/lyx2lyx/lyx_2_2.py
@@ -645,6 +645,49 @@ def revert_phrases(document):
i += 1
+def convert_specialchar_internal(document, forward):
+ specialchars = {"\\-":"hyphen", "\\textcompwordmark{}":"ligaturebreak", \
+ "\\@.":"endofsentence", "\\ldots{}":"ldots", \
+ "\\menuseparator":"menuseparator", "\\slash{}":"slash", \
+ "\\nobreakdash-":"nobreakdash-", "\\LyX":"LyX", \
+ "\\TeX":"TeX", "\\LaTeX2e":"LaTeX2e", \
+ "\\LaTeX":"LaTeX" # must be after LaTeX2e
+ }
+
+ i = 0
+ while i < len(document.body):
+ words = document.body[i].split()
+ if len(words) > 1 and words[0] == "\\begin_inset" and \
+ words[1] in ["CommandInset", "External", "Formula", "Graphics", "listings"]:
+ # see convert_phrases
+ j = find_end_of_inset(document.body, i)
+ if j == -1:
+ document.warning("Malformed LyX document: Can't find end of Formula inset at line " + str(i))
+ i += 1
+ else:
+ i = j
+ continue
+ for key, value in specialchars.iteritems():
+ if forward:
+ document.body[i] = document.body[i].replace("\\SpecialChar " + key, "\\SpecialChar " + value)
+ document.body[i] = document.body[i].replace("\\SpecialCharNoPassThru " + key, "\\SpecialCharNoPassThru " + value)
+ else:
+ document.body[i] = document.body[i].replace("\\SpecialChar " + value, "\\SpecialChar " + key)
+ document.body[i] = document.body[i].replace("\\SpecialCharNoPassThru " + value, "\\SpecialCharNoPassThru " + key)
+ i += 1
+
+
+def convert_specialchar(document):
+ "convert special characters to new syntax"
+ convert_specialchar_internal(document, True)
+
+
+def revert_specialchar(document):
+ "convert special characters to old syntax"
+ convert_specialchar_internal(document, False)
+
+
+
##
# Conversion hub
#
@@ -661,10 +704,12 @@ convert = [
[479, []],
[480, []],
[481, [convert_dashes]],
- [482, [convert_phrases]]
+ [482, [convert_phrases]],
+ [483, [convert_specialchar]]
]
revert = [
+ [482, [revert_specialchar]],
[481, [revert_phrases]],
[480, [revert_dashes]],
[479, [revert_question_env]],
diff --git a/src/insets/InsetSpecialChar.cpp b/src/insets/InsetSpecialChar.cpp
index 6d967bf..c3ef2ec 100644
--- a/src/insets/InsetSpecialChar.cpp
+++ b/src/insets/InsetSpecialChar.cpp
@@ -283,37 +283,37 @@ void InsetSpecialChar::write(ostream & os) const
string command;
switch (kind_) {
case HYPHENATION:
- command = "\\-";
+ command = "hyphen";
break;
case LIGATURE_BREAK:
- command = "\\textcompwordmark{}";
+ command = "ligaturebreak";
break;
case END_OF_SENTENCE:
- command = "\\@.";
+ command = "endofsentence";
break;
case LDOTS:
- command = "\\ldots{}";
+ command = "ldots";
break;
case MENU_SEPARATOR:
- command = "\\menuseparator";
+ command = "menuseparator";
break;
case SLASH:
- command = "\\slash{}";
+ command = "slash";
break;
case NOBREAKDASH:
- command = "\\nobreakdash-";
+ command = "nobreakdash";
break;
case PHRASE_LYX:
- command = "\\LyX";
+ command = "LyX";
break;
case PHRASE_TEX:
- command = "\\TeX";
+ command = "TeX";
break;
case PHRASE_LATEX2E:
- command = "\\LaTeX2e";
+ command = "LaTeX2e";
break;
case PHRASE_LATEX:
- command = "\\LaTeX";
+ command = "LaTeX";
break;
}
os << "\\SpecialChar " << command << "\n";
@@ -326,27 +326,27 @@ void InsetSpecialChar::read(Lexer & lex)
lex.next();
string const command = lex.getString();
- if (command == "\\-")
+ if (command == "hyphen")
kind_ = HYPHENATION;
- else if (command == "\\textcompwordmark{}")
+ else if (command == "ligaturebreak")
kind_ = LIGATURE_BREAK;
- else if (command == "\\@.")
+ else if (command == "endofsentence")
kind_ = END_OF_SENTENCE;
- else if (command == "\\ldots{}")
+ else if (command == "ldots")
kind_ = LDOTS;
- else if (command == "\\menuseparator")
+ else if (command == "menuseparator")
kind_ = MENU_SEPARATOR;
- else if (command == "\\slash{}")
+ else if (command == "slash")
kind_ = SLASH;
- else if (command == "\\nobreakdash-")
+ else if (command == "nobreakdash")
kind_ = NOBREAKDASH;
- else if (command == "\\LyX")
+ else if (command == "LyX")
kind_ = PHRASE_LYX;
- else if (command == "\\TeX")
+ else if (command == "TeX")
kind_ = PHRASE_TEX;
- else if (command == "\\LaTeX2e")
+ else if (command == "LaTeX2e")
kind_ = PHRASE_LATEX2E;
- else if (command == "\\LaTeX")
+ else if (command == "LaTeX")
kind_ = PHRASE_LATEX;
else
lex.printError("InsetSpecialChar: Unknown kind: `$$Token'");
diff --git a/src/tex2lyx/test/CJK.lyx.lyx b/src/tex2lyx/test/CJK.lyx.lyx
index f5b84a4..600b7a7 100644
--- a/src/tex2lyx/test/CJK.lyx.lyx
+++ b/src/tex2lyx/test/CJK.lyx.lyx
@@ -1,5 +1,5 @@
#LyX file created by tex2lyx 2.2
-\lyxformat 482
+\lyxformat 483
\begin_document
\begin_header
\textclass article
diff --git a/src/tex2lyx/test/CJKutf8.lyx.lyx b/src/tex2lyx/test/CJKutf8.lyx.lyx
index e8a6b37..d44a7e0 100644
--- a/src/tex2lyx/test/CJKutf8.lyx.lyx
+++ b/src/tex2lyx/test/CJKutf8.lyx.lyx
@@ -1,5 +1,5 @@
#LyX file created by tex2lyx 2.2
-\lyxformat 482
+\lyxformat 483
\begin_document
\begin_header
\textclass article
diff --git a/src/tex2lyx/test/DummyDocument.lyx.lyx b/src/tex2lyx/test/DummyDocument.lyx.lyx
index 9727ed2..6f69e69 100644
--- a/src/tex2lyx/test/DummyDocument.lyx.lyx
+++ b/src/tex2lyx/test/DummyDocument.lyx.lyx
@@ -1,5 +1,5 @@
#LyX file created by tex2lyx 2.2
-\lyxformat 482
+\lyxformat 483
\begin_document
\begin_header
\textclass article
diff --git a/src/tex2lyx/test/Dummy~Document.lyx.lyx b/src/tex2lyx/test/Dummy~Document.lyx.lyx
index d5f27bd..5e47998 100644
--- a/src/tex2lyx/test/Dummy~Document.lyx.lyx
+++ b/src/tex2lyx/test/Dummy~Document.lyx.lyx
@@ -1,5 +1,5 @@
#LyX file created by tex2lyx 2.2
-\lyxformat 482
+\lyxformat 483
\begin_document
\begin_header
\textclass article
diff --git a/src/tex2lyx/test/XeTeX-polyglossia.lyx.lyx b/src/tex2lyx/test/XeTeX-polyglossia.lyx.lyx
index 23580b3..6e17f47 100644
--- a/src/tex2lyx/test/XeTeX-polyglossia.lyx.lyx
+++ b/src/tex2lyx/test/XeTeX-polyglossia.lyx.lyx
@@ -1,5 +1,5 @@
#LyX file created by tex2lyx 2.2
-\lyxformat 482
+\lyxformat 483
\begin_document
\begin_header
\textclass article
diff --git a/src/tex2lyx/test/algo2e.lyx.lyx b/src/tex2lyx/test/algo2e.lyx.lyx
index dfb6c7a..976b212 100644
--- a/src/tex2lyx/test/algo2e.lyx.lyx
+++ b/src/tex2lyx/test/algo2e.lyx.lyx
@@ -1,5 +1,5 @@
#LyX file created by tex2lyx 2.2
-\lyxformat 482
+\lyxformat 483
\begin_document
\begin_header
\textclass article
diff --git a/src/tex2lyx/test/box-color-size-space-align.lyx.lyx b/src/tex2lyx/test/box-color-size-space-align.lyx.lyx
index b08a0bf..776736a 100644
--- a/src/tex2lyx/test/box-color-size-space-align.lyx.lyx
+++ b/src/tex2lyx/test/box-color-size-space-align.lyx.lyx
@@ -1,5 +1,5 @@
#LyX file created by tex2lyx 2.2
-\lyxformat 482
+\lyxformat 483
\begin_document
\begin_header
\textclass article
diff --git a/src/tex2lyx/test/test-insets.lyx.lyx b/src/tex2lyx/test/test-insets.lyx.lyx
index 422775d..4ffd785 100644
--- a/src/tex2lyx/test/test-insets.lyx.lyx
+++ b/src/tex2lyx/test/test-insets.lyx.lyx
@@ -1,5 +1,5 @@
#LyX file created by tex2lyx 2.2
-\lyxformat 482
+\lyxformat 483
\begin_document
\begin_header
\textclass article
@@ -3120,7 +3120,7 @@ row
\begin_inset Quotes erd
\end_inset
- of the table can take up several lines. Note however that \SpecialChar \TeX
+ of the table can take up several lines. Note however that \SpecialChar TeX
\begin_inset space \space{}
@@ -6685,17 +6685,17 @@ Special characters
\begin_layout Standard
Then one has those macros with a long name for a short meaning, like ~, ^ or
\backslash
-, \SpecialChar \slash{}
-, \SpecialChar \nobreakdash-
+, \SpecialChar slash
+, \SpecialChar nobreakdash
and the characters that LaTeX wants to espace because they are active, like _&#${}%.
\end_layout
\begin_layout Standard
-And what about special characters like hyphe\SpecialChar \-
-nation mark, ellipsis\SpecialChar \ldots{}
-, and end-of-sentence\SpecialChar \@.
- LyX also supports a menu separator\SpecialChar \menuseparator
-and a spif\SpecialChar \textcompwordmark{}
+And what about special characters like hyphe\SpecialChar hyphen
+nation mark, ellipsis\SpecialChar ldots
+, and end-of-sentence\SpecialChar endofsentence
+ LyX also supports a menu separator\SpecialChar menuseparator
+and a spif\SpecialChar ligaturebreak
fy ligature break.
\end_layout
@@ -6764,10 +6764,10 @@ status collapsed
\end_layout
\begin_layout Standard
-LyX translates the phrases LyX, TeX, LaTeX2e and LaTeX to the commands \SpecialChar \LyX
-, \SpecialChar \TeX
-, \SpecialChar \LaTeX2e
- and \SpecialChar \LaTeX
+LyX translates the phrases LyX, TeX, LaTeX2e and LaTeX to the commands \SpecialChar LyX
+, \SpecialChar TeX
+, \SpecialChar LaTeX2e
+ and \SpecialChar LaTeX
. If these phrases occur as part of other words (like 1LyX or aTeX or LaTeX3) they should not be put into ERT.
\end_layout
diff --git a/src/tex2lyx/test/test-memoir.lyx.lyx b/src/tex2lyx/test/test-memoir.lyx.lyx
index 38e6f8d..e294b20 100644
--- a/src/tex2lyx/test/test-memoir.lyx.lyx
+++ b/src/tex2lyx/test/test-memoir.lyx.lyx
@@ -1,5 +1,5 @@
#LyX file created by tex2lyx 2.2
-\lyxformat 482
+\lyxformat 483
\begin_document
\begin_header
\textclass memoir
diff --git a/src/tex2lyx/test/test-modules.lyx.lyx b/src/tex2lyx/test/test-modules.lyx.lyx
index 7070d36..3b7f8ab 100644
--- a/src/tex2lyx/test/test-modules.lyx.lyx
+++ b/src/tex2lyx/test/test-modules.lyx.lyx
@@ -1,5 +1,5 @@
#LyX file created by tex2lyx 2.2
-\lyxformat 482
+\lyxformat 483
\begin_document
\begin_header
\textclass amsart
diff --git a/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx b/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx
index 4ae6755..eab4b59 100644
--- a/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx
+++ b/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx
@@ -1,5 +1,5 @@
#LyX file created by tex2lyx 2.2
-\lyxformat 482
+\lyxformat 483
\begin_document
\begin_header
\textclass book
diff --git a/src/tex2lyx/test/test-scr.lyx.lyx b/src/tex2lyx/test/test-scr.lyx.lyx
index 9658942..91d502e 100644
--- a/src/tex2lyx/test/test-scr.lyx.lyx
+++ b/src/tex2lyx/test/test-scr.lyx.lyx
@@ -1,5 +1,5 @@
#LyX file created by tex2lyx 2.2
-\lyxformat 482
+\lyxformat 483
\begin_document
\begin_header
\textclass scrbook
diff --git a/src/tex2lyx/test/test-structure.lyx.lyx b/src/tex2lyx/test/test-structure.lyx.lyx
index 1082c45..9fe5f1d 100644
--- a/src/tex2lyx/test/test-structure.lyx.lyx
+++ b/src/tex2lyx/test/test-structure.lyx.lyx
@@ -1,5 +1,5 @@
#LyX file created by tex2lyx 2.2
-\lyxformat 482
+\lyxformat 483
\begin_document
\begin_header
\textclass article
@@ -446,7 +446,7 @@ test1
\end_layout
\begin_layout Standard
-\SpecialChar \LyX
+\SpecialChar LyX
is a document preparation system. It excels at letting you create complex technical and scientific articles with mathematics, cross-references, bibliographies, indices, etc. It is very good at documents of any length in which the usual processing abilities are required: automatic sectioning and pagination, spell checking, and so forth. It can also be used to write a letter to your mom, though granted, there are probably simpler programs available for that. It is definitely not the best tool for creating banners, flyers, or advertisements (we'll explain why later), though with some effort all these can be done, too.
\end_layout
@@ -484,7 +484,7 @@ test2
\end_layout
\begin_layout Standard
-\SpecialChar \LyX
+\SpecialChar LyX
is a document preparation system. It excels at letting you create complex technical and scientific articles with mathematics, cross-references, bibliographies, indices, etc. It is very good at documents of any length in which the usual processing abilities are required: automatic sectioning and pagination, spell checking, and so forth. It can also be used to write a letter to your mom, though granted, there are probably simpler programs available for that. It is definitely not the best tool for creating banners, flyers, or advertisements (we'll explain why later), though with some effort all these can be done, too.
\end_layout
@@ -543,7 +543,7 @@ dfgd
\end_layout
\begin_layout Standard
-\SpecialChar \LyX
+\SpecialChar LyX
is a document preparation system. It excels at letting you create complex technical and scientific articles with mathematics, cross-references, bibliographies, indices, etc. It is very good at documents of any length in which the usual processing abilities are required: automatic sectioning and pagination, spell checking, and so forth. It can also be used to write a letter to your mom, though granted, there are probably simpler programs available for that. It is definitely not the best tool for creating banners, flyers, or advertisements (we'll explain why later), though with some effort all these can be done, too.
\end_layout
diff --git a/src/tex2lyx/test/test.lyx.lyx b/src/tex2lyx/test/test.lyx.lyx
index 115209f..234273d 100644
--- a/src/tex2lyx/test/test.lyx.lyx
+++ b/src/tex2lyx/test/test.lyx.lyx
@@ -1,5 +1,5 @@
#LyX file created by tex2lyx 2.2
-\lyxformat 482
+\lyxformat 483
\begin_document
\begin_header
\textclass article
@@ -137,7 +137,7 @@ status open
\begin_layout Standard
-What are you doing \SpecialChar \ldots{}
+What are you doing \SpecialChar ldots
Dave
\end_layout
@@ -242,17 +242,17 @@ status collapsed
\end_inset
- is text in a new par\SpecialChar \-
+ is text in a new par\SpecialChar hyphen
agraph.
\begin_inset Newline newline
\end_inset
- It has \SpecialChar \ldots{}
+ It has \SpecialChar ldots
an
\begin_inset Formula $ \alpha $
\end_inset
- in it, which is OK\SpecialChar \@.
+ in it, which is OK\SpecialChar endofsentence
I can type special characters
\begin_inset Foot
status collapsed
diff --git a/src/tex2lyx/test/verbatim.lyx.lyx b/src/tex2lyx/test/verbatim.lyx.lyx
index e16487d..f756637 100644
--- a/src/tex2lyx/test/verbatim.lyx.lyx
+++ b/src/tex2lyx/test/verbatim.lyx.lyx
@@ -1,5 +1,5 @@
#LyX file created by tex2lyx 2.2
-\lyxformat 482
+\lyxformat 483
\begin_document
\begin_header
\textclass article
diff --git a/src/tex2lyx/text.cpp b/src/tex2lyx/text.cpp
index 6a67b58..7e6215f 100644
--- a/src/tex2lyx/text.cpp
+++ b/src/tex2lyx/text.cpp
@@ -258,11 +258,11 @@ char const * const known_special_protect_chars[] = {"LyX", "TeX",
"LaTeXe", "LaTeX", 0};
/// the same as known_special_chars with .lyx names
-char const * const known_coded_special_chars[] = {"\\SpecialChar \\ldots{}\n",
-"\\SpecialChar \\menuseparator\n", "\\SpecialChar \\textcompwordmark{}\n",
-"\\SpecialChar \\slash{}\n", "~", "^", "\n\\backslash\n",
-"\\SpecialChar \\LyX\n", "\\SpecialChar \\TeX\n", "\\SpecialChar \\LaTeX2e\n",
-"\\SpecialChar \\LaTeX\n", 0};
+char const * const known_coded_special_chars[] = {"\\SpecialChar ldots\n",
+"\\SpecialChar menuseparator\n", "\\SpecialChar ligaturebreak\n",
+"\\SpecialChar slash\n", "~", "^", "\n\\backslash\n",
+"\\SpecialChar LyX\n", "\\SpecialChar TeX\n", "\\SpecialChar LaTeX2e\n",
+"\\SpecialChar LaTeX\n", 0};
/*!
* Graphics file extensions known by the dvips driver of the graphics package.
@@ -3800,8 +3800,11 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
if (t.cs() == "protect")
p.get_token();
context.check_layout(os);
- os << "\\SpecialChar \\" << t.cs()
- << p.get_token().asInput() << '\n';
+ if (t.cs() == "nobreakdash")
+ os << "\\SpecialChar nobreakdash\n";
+ else
+ os << "\\SpecialChar endofsentence\n";
+ p.get_token();
}
else if (t.cs() == "textquotedbl") {
@@ -3815,7 +3818,7 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
|| t.cs() == "%" || t.cs() == "-") {
context.check_layout(os);
if (t.cs() == "-")
- os << "\\SpecialChar \\-\n";
+ os << "\\SpecialChar hyphen\n";
else
os << t.cs();
}
diff --git a/src/version.h b/src/version.h
index 124a404..a112664 100644
--- a/src/version.h
+++ b/src/version.h
@@ -36,8 +36,8 @@ extern char const * const lyx_version_info;
// Do not remove the comment below, so we get merge conflict in
// independent branches. Instead add your own.
-#define LYX_FORMAT_LYX 482 // gb: special phrases
-#define LYX_FORMAT_TEX2LYX 482
+#define LYX_FORMAT_LYX 483 // gb: sanitize SpecialChar format
+#define LYX_FORMAT_TEX2LYX 483
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
#ifndef _MSC_VER