[llvm] r311939 - [llvm-rc] Add ICON and HTML parsing ability (parser, pt 2/8).
Marek Sokolowski via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 28 14:59:54 PDT 2017
Author: mnbvmar
Date: Mon Aug 28 14:59:54 2017
New Revision: 311939
URL: http://llvm.org/viewvc/llvm-project?rev=311939&view=rev
Log:
[llvm-rc] Add ICON and HTML parsing ability (parser, pt 2/8).
This extends the current llvm-rc parser by ICON and HTML resources.
Moreover, some tests have been slightly rewritten.
Thanks for Nico Weber for his original work in this area.
Differential Revision: https://reviews.llvm.org/D36891
Added:
llvm/trunk/test/tools/llvm-rc/Inputs/parser-html-bad-string.rc
llvm/trunk/test/tools/llvm-rc/Inputs/parser-html-extra-comma.rc
Modified:
llvm/trunk/test/tools/llvm-rc/Inputs/parser-correct-everything.rc
llvm/trunk/test/tools/llvm-rc/parser.test
llvm/trunk/tools/llvm-rc/ResourceScriptParser.cpp
llvm/trunk/tools/llvm-rc/ResourceScriptParser.h
llvm/trunk/tools/llvm-rc/ResourceScriptStmt.cpp
llvm/trunk/tools/llvm-rc/ResourceScriptStmt.h
Modified: llvm/trunk/test/tools/llvm-rc/Inputs/parser-correct-everything.rc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/Inputs/parser-correct-everything.rc?rev=311939&r1=311938&r2=311939&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/Inputs/parser-correct-everything.rc (original)
+++ llvm/trunk/test/tools/llvm-rc/Inputs/parser-correct-everything.rc Mon Aug 28 14:59:54 2017
@@ -13,3 +13,6 @@ VERSION 14
2 "world"
}
STRINGTABLE BEGIN END
+
+500 HTML "index.html"
+Name Cursor "hello.ico"
Added: llvm/trunk/test/tools/llvm-rc/Inputs/parser-html-bad-string.rc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/Inputs/parser-html-bad-string.rc?rev=311939&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/Inputs/parser-html-bad-string.rc (added)
+++ llvm/trunk/test/tools/llvm-rc/Inputs/parser-html-bad-string.rc Mon Aug 28 14:59:54 2017
@@ -0,0 +1 @@
+200 HTML ThisPassesInTheOriginalToolButDocSaysItShouldBeQuoted
Added: llvm/trunk/test/tools/llvm-rc/Inputs/parser-html-extra-comma.rc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/Inputs/parser-html-extra-comma.rc?rev=311939&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/Inputs/parser-html-extra-comma.rc (added)
+++ llvm/trunk/test/tools/llvm-rc/Inputs/parser-html-extra-comma.rc Mon Aug 28 14:59:54 2017
@@ -0,0 +1 @@
+1 HTML, "index.html"
Modified: llvm/trunk/test/tools/llvm-rc/parser.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/parser.test?rev=311939&r1=311938&r2=311939&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/parser.test (original)
+++ llvm/trunk/test/tools/llvm-rc/parser.test Mon Aug 28 14:59:54 2017
@@ -11,57 +11,60 @@
; PGOOD-NEXT: 1 => "hello"
; PGOOD-NEXT: 2 => "world"
; PGOOD-NEXT: StringTable:
+; PGOOD-NEXT: HTML (500): "index.html"
+; PGOOD-NEXT: Cursor (Name): "hello.ico"
-; RUN: not llvm-rc /V %p/Inputs/parser-stringtable-no-string.rc 2> %t2
-; RUN: FileCheck %s --check-prefix PSTRINGTABLE1 --input-file %t2
+; RUN: not llvm-rc /V %p/Inputs/parser-stringtable-no-string.rc 2>&1 | FileCheck %s --check-prefix PSTRINGTABLE1
; PSTRINGTABLE1: llvm-rc: Error parsing file: expected string, got }
-; RUN: not llvm-rc /V %p/Inputs/parser-stringtable-weird-option.rc 2> %t3
-; RUN: FileCheck %s --check-prefix PSTRINGTABLE2 --input-file %t3
+; RUN: not llvm-rc /V %p/Inputs/parser-stringtable-weird-option.rc 2>&1 | FileCheck %s --check-prefix PSTRINGTABLE2
; PSTRINGTABLE2: llvm-rc: Error parsing file: expected optional statement type, BEGIN or '{', got NONSENSETYPE
-; RUN: not llvm-rc /V %p/Inputs/parser-eof.rc 2> %t4
-; RUN: FileCheck %s --check-prefix PEOF --input-file %t4
+; RUN: not llvm-rc /V %p/Inputs/parser-eof.rc 2>&1 | FileCheck %s --check-prefix PEOF
; PEOF: llvm-rc: Error parsing file: expected integer, got <EOF>
-; RUN: not llvm-rc /V %p/Inputs/parser-no-characteristics-arg.rc 2> %t5
-; RUN: FileCheck %s --check-prefix PCHARACTERISTICS1 --input-file %t5
+; RUN: not llvm-rc /V %p/Inputs/parser-no-characteristics-arg.rc 2>&1 | FileCheck %s --check-prefix PCHARACTERISTICS1
; PCHARACTERISTICS1: llvm-rc: Error parsing file: expected integer, got BEGIN
-; RUN: not llvm-rc /V %p/Inputs/parser-nonsense-token.rc 2> %t6
-; RUN: FileCheck %s --check-prefix PNONSENSE1 --input-file %t6
+; RUN: not llvm-rc /V %p/Inputs/parser-nonsense-token.rc 2>&1 | FileCheck %s --check-prefix PNONSENSE1
; PNONSENSE1: llvm-rc: Error parsing file: expected int or identifier, got &
-; RUN: not llvm-rc /V %p/Inputs/parser-nonsense-type.rc 2> %t7
-; RUN: FileCheck %s --check-prefix PNONSENSE2 --input-file %t7
+; RUN: not llvm-rc /V %p/Inputs/parser-nonsense-type.rc 2>&1 | FileCheck %s --check-prefix PNONSENSE2
; PNONSENSE2: llvm-rc: Error parsing file: expected resource type, got WORLD
-; RUN: not llvm-rc /V %p/Inputs/parser-nonsense-type-eof.rc 2> %t8
-; RUN: FileCheck %s --check-prefix PNONSENSE3 --input-file %t8
+; RUN: not llvm-rc /V %p/Inputs/parser-nonsense-type-eof.rc 2>&1 | FileCheck %s --check-prefix PNONSENSE3
; PNONSENSE3: llvm-rc: Error parsing file: expected int or identifier, got <EOF>
-; RUN: not llvm-rc /V %p/Inputs/parser-language-no-comma.rc 2> %t9
-; RUN: FileCheck %s --check-prefix PLANGUAGE1 --input-file %t9
+; RUN: not llvm-rc /V %p/Inputs/parser-language-no-comma.rc 2>&1 | FileCheck %s --check-prefix PLANGUAGE1
; PLANGUAGE1: llvm-rc: Error parsing file: expected ',', got 7
-; RUN: not llvm-rc /V %p/Inputs/parser-language-too-many-commas.rc 2> %t10
-; RUN: FileCheck %s --check-prefix PLANGUAGE2 --input-file %t10
+; RUN: not llvm-rc /V %p/Inputs/parser-language-too-many-commas.rc 2>&1 | FileCheck %s --check-prefix PLANGUAGE2
; PLANGUAGE2: llvm-rc: Error parsing file: expected integer, got ,
+
+
+; RUN: not llvm-rc /V %p/Inputs/parser-html-bad-string.rc 2>&1 | FileCheck %s --check-prefix PHTML1
+
+; PHTML1: llvm-rc: Error parsing file: expected string, got ThisPassesInTheOriginalToolButDocSaysItShouldBeQuoted
+
+
+; RUN: not llvm-rc /V %p/Inputs/parser-html-extra-comma.rc 2>&1 | FileCheck %s --check-prefix PHTML2
+
+; PHTML2: llvm-rc: Error parsing file: expected string, got ,
Modified: llvm/trunk/tools/llvm-rc/ResourceScriptParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rc/ResourceScriptParser.cpp?rev=311939&r1=311938&r2=311939&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-rc/ResourceScriptParser.cpp (original)
+++ llvm/trunk/tools/llvm-rc/ResourceScriptParser.cpp Mon Aug 28 14:59:54 2017
@@ -63,8 +63,12 @@ RCParser::ParseType RCParser::parseSingl
ParseType Result = std::unique_ptr<RCResource>();
(void)!Result;
- if (TypeToken->equalsLower("ICON"))
+ if (TypeToken->equalsLower("CURSOR"))
+ Result = parseCursorResource();
+ else if (TypeToken->equalsLower("ICON"))
Result = parseIconResource();
+ else if (TypeToken->equalsLower("HTML"))
+ Result = parseHTMLResource();
else
return getExpectedError("resource type", /* IsAlreadyRead = */ true);
@@ -219,11 +223,21 @@ RCParser::ParseType RCParser::parseLangu
return parseLanguageStmt();
}
+RCParser::ParseType RCParser::parseCursorResource() {
+ ASSIGN_OR_RETURN(Arg, readString());
+ return make_unique<CursorResource>(*Arg);
+}
+
RCParser::ParseType RCParser::parseIconResource() {
ASSIGN_OR_RETURN(Arg, readString());
return make_unique<IconResource>(*Arg);
}
+RCParser::ParseType RCParser::parseHTMLResource() {
+ ASSIGN_OR_RETURN(Arg, readString());
+ return make_unique<HTMLResource>(*Arg);
+}
+
RCParser::ParseType RCParser::parseStringTableResource() {
ASSIGN_OR_RETURN(OptStatements, parseOptionalStatements());
RETURN_IF_ERROR(consumeType(Kind::BlockBegin));
Modified: llvm/trunk/tools/llvm-rc/ResourceScriptParser.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rc/ResourceScriptParser.h?rev=311939&r1=311938&r2=311939&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-rc/ResourceScriptParser.h (original)
+++ llvm/trunk/tools/llvm-rc/ResourceScriptParser.h Mon Aug 28 14:59:54 2017
@@ -118,7 +118,9 @@ private:
// Top-level resource parsers.
ParseType parseLanguageResource();
+ ParseType parseCursorResource();
ParseType parseIconResource();
+ ParseType parseHTMLResource();
ParseType parseStringTableResource();
// Optional statement parsers.
Modified: llvm/trunk/tools/llvm-rc/ResourceScriptStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rc/ResourceScriptStmt.cpp?rev=311939&r1=311938&r2=311939&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-rc/ResourceScriptStmt.cpp (original)
+++ llvm/trunk/tools/llvm-rc/ResourceScriptStmt.cpp Mon Aug 28 14:59:54 2017
@@ -36,10 +36,18 @@ raw_ostream &LanguageResource::log(raw_o
return OS << "Language: " << Lang << ", Sublanguage: " << SubLang << "\n";
}
+raw_ostream &CursorResource::log(raw_ostream &OS) const {
+ return OS << "Cursor (" << ResName << "): " << CursorLoc << "\n";
+}
+
raw_ostream &IconResource::log(raw_ostream &OS) const {
return OS << "Icon (" << ResName << "): " << IconLoc << "\n";
}
+raw_ostream &HTMLResource::log(raw_ostream &OS) const {
+ return OS << "HTML (" << ResName << "): " << HTMLLoc << "\n";
+}
+
raw_ostream &StringTableResource::log(raw_ostream &OS) const {
OS << "StringTable:\n";
OptStatements.log(OS);
Modified: llvm/trunk/tools/llvm-rc/ResourceScriptStmt.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rc/ResourceScriptStmt.h?rev=311939&r1=311938&r2=311939&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-rc/ResourceScriptStmt.h (original)
+++ llvm/trunk/tools/llvm-rc/ResourceScriptStmt.h Mon Aug 28 14:59:54 2017
@@ -90,6 +90,17 @@ public:
raw_ostream &log(raw_ostream &) const override;
};
+// CURSOR resource. Represents a single cursor (".cur") file.
+//
+// Ref: msdn.microsoft.com/en-us/library/windows/desktop/aa380920(v=vs.85).aspx
+class CursorResource : public RCResource {
+ StringRef CursorLoc;
+
+public:
+ CursorResource(StringRef Location) : CursorLoc(Location) {}
+ raw_ostream &log(raw_ostream &) const override;
+};
+
// ICON resource. Represents a single ".ico" file containing a group of icons.
//
// Ref: msdn.microsoft.com/en-us/library/windows/desktop/aa381018(v=vs.85).aspx
@@ -101,6 +112,19 @@ public:
raw_ostream &log(raw_ostream &) const override;
};
+// HTML resource. Represents a local webpage that is to be embedded into the
+// resulting resource file. It embeds a file only - no additional resources
+// (images etc.) are included with this resource.
+//
+// Ref: msdn.microsoft.com/en-us/library/windows/desktop/aa966018(v=vs.85).aspx
+class HTMLResource : public RCResource {
+ StringRef HTMLLoc;
+
+public:
+ HTMLResource(StringRef Location) : HTMLLoc(Location) {}
+ raw_ostream &log(raw_ostream &) const override;
+};
+
// STRINGTABLE resource. Contains a list of strings, each having its unique ID.
//
// Ref: msdn.microsoft.com/en-us/library/windows/desktop/aa381050(v=vs.85).aspx
More information about the llvm-commits
mailing list