Attached is the patch switching us from prettyref to refstyle. What happens at the moment is pretty minimal, but there is more that could now be done, e.g., allowing customization of the separator in labels, which still defaults to the colon. See bug 6420.

Comments welcome.

Richard

Index: src/Buffer.cpp
===================================================================
--- src/Buffer.cpp	(revision 33785)
+++ src/Buffer.cpp	(working copy)
@@ -126,7 +126,7 @@
 
 // Do not remove the comment below, so we get merge conflict in
 // independent branches. Instead add your own.
-int const LYX_FORMAT = 378; // ps: rev insetinfo
+int const LYX_FORMAT = 379; // rgh: refstyle
 
 typedef map<string, bool> DepClean;
 typedef map<docstring, pair<InsetLabel const *, Buffer::References> > RefCache;
Index: src/insets/InsetRef.cpp
===================================================================
--- src/insets/InsetRef.cpp	(revision 33785)
+++ src/insets/InsetRef.cpp	(working copy)
@@ -24,6 +24,7 @@
 #include "sgml.h"
 #include "TocBackend.h"
 
+#include "support/debug.h"
 #include "support/docstream.h"
 #include "support/gettext.h"
 #include "support/lstrings.h"
@@ -51,7 +52,7 @@
 		|| s == "pageref"
 		|| s == "vref" 
 		|| s == "vpageref"
-		|| s == "prettyref"
+		|| s == "refstyle"
 		|| s == "eqref";
 }
 
@@ -74,6 +75,25 @@
 	// in docbook. So we construct new params, without it, and use that.
 	InsetCommandParams p(REF_CODE, getCmdName());
 	p["reference"] = getParam("reference");
+	string const cmd = p.getCmdName();
+	if (cmd != "refstyle") {
+		os << p.getCommand(runparams);
+		return 0;
+	}
+	// refstyle isn't really a command. rather, it signals that
+	// we need to create the command needed.
+	docstring prefix;
+	docstring const rest = split(p["reference"], prefix, ':');
+	// if rest is empty, then there's no ":", so we'll treat
+	// it simply as a normal reference.
+	if (rest.empty()) {
+		LYXERR0("Couldn't determine reference type for label `" << 
+				prefix << "'");
+		p.setCmdName("ref");
+	} else {
+		p.setCmdName(to_utf8(prefix) + "ref");
+		p["reference"] = rest;
+	}
 	os << p.getCommand(runparams);
 	return 0;
 }
@@ -208,8 +228,8 @@
 {
 	if (getCmdName() == "vref" || getCmdName() == "vpageref")
 		features.require("varioref");
-	else if (getCmdName() == "prettyref")
-		features.require("prettyref");
+	else if (getCmdName() == "refstyle")
+		features.require("refstyle");
 	else if (getCmdName() == "eqref")
 		features.require("amsmath");
 }
@@ -221,7 +241,7 @@
 	{ "pageref",   N_("Page Number"),           N_("Page: ")},
 	{ "vpageref",  N_("Textual Page Number"),   N_("TextPage: ")},
 	{ "vref",      N_("Standard+Textual Page"), N_("Ref+Text: ")},
-	{ "prettyref", N_("PrettyRef"),             N_("FrmtRef: ")},
+	{ "refstyle",  N_("RefStyle"),              N_("RefStyle: ")},
 	{ "", "", "" }
 };
 
Index: src/LaTeXFeatures.cpp
===================================================================
--- src/LaTeXFeatures.cpp	(revision 33785)
+++ src/LaTeXFeatures.cpp	(working copy)
@@ -510,7 +510,7 @@
 	"pifont",
 	// subfig is handled in BufferParams.cpp
 	"varioref",
-	"prettyref",
+	"refstyle",
 	/*For a successful cooperation of the `wrapfig' package with the
 	  `float' package you should load the `wrapfig' package *after*
 	  the `float' package. See the caption package documentation
Index: src/LyXAction.cpp
===================================================================
--- src/LyXAction.cpp	(revision 33785)
+++ src/LyXAction.cpp	(working copy)
@@ -2305,7 +2305,7 @@
                pageref -- <page> \n
                vpageref -- on <page> \n
                vref -- <reference> on <page> \n
-               prettyref -- Formatted reference
+               refstyle -- Formatted reference
  * \endvar
  */
 		{ LFUN_INSET_INSERT, "inset-insert", Noop, Edit },
Index: src/Text.cpp
===================================================================
--- src/Text.cpp	(revision 33785)
+++ src/Text.cpp	(working copy)
@@ -1888,7 +1888,6 @@
 	if (!name.empty())
 		// FIXME
 		// we should allow customization of the separator or else change it
-		// once we have refstyle
 		text = name + ':' + text;
 
 	return text;
Index: lib/lyx2lyx/lyx_2_0.py
===================================================================
--- lib/lyx2lyx/lyx_2_0.py	(revision 33785)
+++ lib/lyx2lyx/lyx_2_0.py	(working copy)
@@ -602,6 +602,41 @@
         i = i + 1
 
 
+def convert_prettyref(document):
+    " Converts prettyref commands to refstyle commands "
+    #re_ref = re.compile("^reference\s+\"(\w+):(\S+)\"")
+    i = 0
+    while True:
+        i = find_token(document.body, "\\begin_inset CommandInset ref", i)
+        if i == -1:
+            break
+        j = find_end_of_inset(document.body, i)
+        if j == -1:
+            document.warning("Malformed LyX document: No end of InsetRef")
+            i += 1
+            continue
+        k = find_token(document.body, "LatexCommand prettyref", i)
+        if k == -1 or k > j:
+            i = j + 1
+            continue
+        document.body[k] = "LatexCommand refstyle"
+        k = find_token(document.body, "reference", i)
+        if k == -1 or k > j:
+            i = j + 1
+            continue
+        m = re_ref.match(document.body[k])
+        if m:
+            # Note: We could switch from ":" to something else here, though
+            # that would mean doing a lot of \newref somewhere.
+            prefix = m.group(1)
+            suffix = m.group(2)
+            if prefix == "cha":
+                prefix = "chap"
+            elif prefix == "par":
+                prefix == "part"
+            document.body[k] = prefix + ":" + suffix
+        i = j + 1
+
 def convert_splitindex(document):
     " Converts index and printindex insets to splitindex-aware format "
     i = 0
@@ -1242,10 +1277,12 @@
            [375, []],
            [376, []],
            [377, []],
-           [378, []]
+           [378, []],
+           [379, [convert_prettyref]]
           ]
 
-revert =  [[377, []],
+revert =  [#[378, [revert_refstyle]]
+           [377, []],
            [376, [revert_multirow]],
            [375, [revert_includeall]],
            [374, [revert_includeonly]],
Index: lib/symbols
===================================================================
--- lib/symbols	(revision 33785)
+++ lib/symbols	(working copy)
@@ -131,7 +131,7 @@
 
 # references
 pageref           ref         none
-prettyref         ref         none
+refstyle          ref         none
 ref               ref         none
 vpageref          ref         none
 vref              ref         none
Index: lib/ui/stdcontext.inc
===================================================================
--- lib/ui/stdcontext.inc	(revision 33785)
+++ lib/ui/stdcontext.inc	(working copy)
@@ -90,7 +90,7 @@
 		Item "<Page>|P" "inset-modify changetype pageref"
 		Item "On Page <Page>|O" "inset-modify changetype vpageref"
 		Item "<Reference> on Page <Page>|f" "inset-modify changetype vref"
-		Item "Formatted Reference|t" "inset-modify changetype prettyref"
+		Item "Formatted Reference|t" "inset-modify changetype refstyle"
 		Separator
 		Item "Settings...|S" "inset-settings"
 	End
Index: lib/chkconfig.ltx
===================================================================
--- lib/chkconfig.ltx	(revision 33785)
+++ lib/chkconfig.ltx	(working copy)
@@ -265,8 +265,8 @@
 \TestPackage{nomencl}
 \TestPackage{pdfcolmk}
 \TestPackage{pdfpages}
-\TestPackage{prettyref}
 \TestPackage{preview}
+\TestPackage{refstyle}
 \TestPackage{rotating}
 \TestPackage{rotfloat}
 \TestPackage{setspace}

Reply via email to