Skip to content

Commit e7c0cac

Browse files
authored
Merge pull request #124 from gRegorLove/issue96
Fix parsing of lang attribute
2 parents dc0d90d + fb21982 commit e7c0cac

File tree

2 files changed

+55
-22
lines changed

2 files changed

+55
-22
lines changed

Mf2/Parser.php

+8-8
Original file line numberDiff line numberDiff line change
@@ -817,7 +817,7 @@ public function parseE(\DOMElement $e) {
817817
if($this->lang) {
818818
// Language
819819
if ( $html_lang = $this->language($e) ) {
820-
$return['html-lang'] = $html_lang;
820+
$return['lang'] = $html_lang;
821821
}
822822
}
823823

@@ -1078,13 +1078,6 @@ public function parseH(\DOMElement $e, $is_backcompat = false) {
10781078
}
10791079
}
10801080

1081-
if($this->lang) {
1082-
// Language
1083-
if ( $html_lang = $this->language($e) ) {
1084-
$return['html-lang'] = $html_lang;
1085-
}
1086-
}
1087-
10881081
// Make sure things are in alphabetical order
10891082
sort($mfTypes);
10901083

@@ -1094,6 +1087,13 @@ public function parseH(\DOMElement $e, $is_backcompat = false) {
10941087
'properties' => $return
10951088
);
10961089

1090+
if($this->lang) {
1091+
// Language
1092+
if ( $html_lang = $this->language($e) ) {
1093+
$parsed['lang'] = $html_lang;
1094+
}
1095+
}
1096+
10971097
if (!empty($shape)) {
10981098
$parsed['shape'] = $shape;
10991099
}

tests/Mf2/ParseLanguageTest.php

+47-14
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ public function testHtmlLangOnly()
2626
$parser->lang = true;
2727
$result = $parser->parse();
2828

29-
$this->assertEquals('en', $result['items'][0]['properties']['html-lang']);
29+
$this->assertArrayHasKey('lang', $result['items'][0]);
30+
$this->assertEquals('en', $result['items'][0]['lang']);
3031
} # end method testHtmlLangOnly()
3132

3233
/**
@@ -39,7 +40,8 @@ public function testHEntryLangOnly()
3940
$parser->lang = true;
4041
$result = $parser->parse();
4142

42-
$this->assertEquals('en', $result['items'][0]['properties']['html-lang']);
43+
$this->assertArrayHasKey('lang', $result['items'][0]);
44+
$this->assertEquals('en', $result['items'][0]['lang']);
4345
} # end method testHEntryLangOnly()
4446

4547
/**
@@ -52,7 +54,8 @@ public function testHtmlAndHEntryLang()
5254
$parser->lang = true;
5355
$result = $parser->parse();
5456

55-
$this->assertEquals('es', $result['items'][0]['properties']['html-lang']);
57+
$this->assertArrayHasKey('lang', $result['items'][0]);
58+
$this->assertEquals('es', $result['items'][0]['lang']);
5659
} # end method testHtmlAndHEntryLang()
5760

5861
/**
@@ -65,7 +68,8 @@ public function testFragmentHEntryLangOnly()
6568
$parser->lang = true;
6669
$result = $parser->parse();
6770

68-
$this->assertEquals('en', $result['items'][0]['properties']['html-lang']);
71+
$this->assertArrayHasKey('lang', $result['items'][0]);
72+
$this->assertEquals('en', $result['items'][0]['lang']);
6973
} # end method testFragmentHEntryLangOnly()
7074

7175
/**
@@ -78,7 +82,7 @@ public function testFragmentHEntryNoLang()
7882
$parser->lang = true;
7983
$result = $parser->parse();
8084

81-
$this->assertFalse(isset($result['items'][0]['properties']['html-lang']));
85+
$this->assertArrayNotHasKey('lang', $result['items'][0]);
8286
} # end method testFragmentHEntryNoLang()
8387

8488
/**
@@ -91,7 +95,7 @@ public function testFragmentHEntryNoLangXML()
9195
$parser = new Parser($input);
9296
$result = $parser->parse();
9397

94-
$this->assertFalse(isset($result['items'][0]['properties']['html-lang']));
98+
$this->assertArrayNotHasKey('lang', $result['items'][0]);
9599
} # end method testFragmentHEntryNoLangXML()
96100

97101
/**
@@ -105,8 +109,10 @@ public function testMultiLanguageInheritance()
105109
$parser->lang = true;
106110
$result = $parser->parse();
107111

108-
$this->assertEquals('en', $result['items'][0]['properties']['html-lang']);
109-
$this->assertEquals('es', $result['items'][1]['properties']['html-lang']);
112+
$this->assertArrayHasKey('lang', $result['items'][0]);
113+
$this->assertArrayHasKey('lang', $result['items'][1]);
114+
$this->assertEquals('en', $result['items'][0]['lang']);
115+
$this->assertEquals('es', $result['items'][1]['lang']);
110116
} # end method testMultiLanguageInheritance()
111117

112118
/**
@@ -120,10 +126,17 @@ public function testMultiLanguageFeed()
120126
$parser->lang = true;
121127
$result = $parser->parse();
122128

123-
$this->assertEquals('en', $result['items'][0]['properties']['html-lang']);
124-
$this->assertEquals('en', $result['items'][0]['children'][0]['properties']['html-lang']);
125-
$this->assertEquals('es', $result['items'][0]['children'][1]['properties']['html-lang']);
126-
$this->assertEquals('fr', $result['items'][0]['children'][2]['properties']['html-lang']);
129+
$this->assertArrayHasKey('lang', $result['items'][0]);
130+
$this->assertEquals('en', $result['items'][0]['lang']);
131+
132+
$this->assertArrayHasKey('lang', $result['items'][0]['children'][0]);
133+
$this->assertEquals('en', $result['items'][0]['children'][0]['lang']);
134+
135+
$this->assertArrayHasKey('lang', $result['items'][0]['children'][1]);
136+
$this->assertEquals('es', $result['items'][0]['children'][1]['lang']);
137+
138+
$this->assertArrayHasKey('lang', $result['items'][0]['children'][2]);
139+
$this->assertEquals('fr', $result['items'][0]['children'][2]['lang']);
127140
} # end method testMultiLanguageFeed()
128141

129142
/**
@@ -136,7 +149,8 @@ public function testMetaContentLanguage()
136149
$parser->lang = true;
137150
$result = $parser->parse();
138151

139-
$this->assertEquals('es', $result['items'][0]['properties']['html-lang']);
152+
$this->assertArrayHasKey('lang', $result['items'][0]);
153+
$this->assertEquals('es', $result['items'][0]['lang']);
140154
} # end method testMetaContentLanguage()
141155

142156
/**
@@ -230,7 +244,26 @@ public function testVoxpelliCom()
230244
$parser->lang = true;
231245
$result = $parser->parse();
232246

233-
$this->assertEquals('sv', $result['items'][0]['properties']['html-lang']);
247+
$this->assertArrayHasKey('lang', $result['items'][0]);
248+
$this->assertEquals('sv', $result['items'][0]['lang']);
234249
} # end method testVoxpelliCom()
235250

251+
252+
/**
253+
* @see https://github.com/indieweb/php-mf2/issues/96#issuecomment-304457341
254+
*/
255+
public function testNoLangInParsedProperties() {
256+
$input = '<div class="h-entry" lang="sv" id="postfrag123">
257+
<h1 class="p-name">En svensk titel</h1>
258+
<div class="e-content" lang="en">With an <em>english</em> summary</div>
259+
<div class="e-content">Och <em>svensk</em> huvudtext</div>
260+
</div>';
261+
$parser = new Parser($input);
262+
$parser->lang = true;
263+
$result = $parser->parse();
264+
265+
$this->assertArrayNotHasKey('lang', $result['items'][0]['properties']);
266+
$this->assertArrayHasKey('lang', $result['items'][0]);
267+
}
268+
236269
}

0 commit comments

Comments
 (0)