Skip to content

Instantly share code, notes, and snippets.

@icyflame
Last active February 13, 2018 10:53
Show Gist options
  • Save icyflame/d89dd169de8262c62f39c1b7a849731a to your computer and use it in GitHub Desktop.
Save icyflame/d89dd169de8262c62f39c1b7a849731a to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"golang.org/x/net/html"
"log"
"strings"
)
// return the first tag in subtree for which reqd returns true (DFS)
func findReqd(doc *html.Node, reqd func(*html.Node) bool) *html.Node {
if reqd(doc) {
return doc
}
for c := doc.FirstChild; c != nil; c = c.NextSibling {
g := findReqd(c, reqd)
if g != nil {
return g
}
}
return nil
}
func tableTag(t *html.Node) bool {
if (t.Data == "table") {
a := t.Attr
for _, attr := range a {
if attr.Key == "id" && attr.Val == "disptab" {
return true
}
}
}
return false
}
func num_children(t *html.Node) int64 {
var num int64
c := t.FirstChild
for c != nil {
if c.Type == html.ElementNode {
num += 1
}
c = c.NextSibling
}
return num
}
func element_node_children(t *html.Node) []*html.Node {
ret := []*html.Node{}
for c := t.FirstChild; c != nil; c = c.NextSibling {
if c.Type == html.ElementNode {
ret = append(ret, c)
}
}
return ret
}
func parse_html(input string) [][]string {
doc, err := html.Parse(strings.NewReader(input))
if err != nil {
log.Fatal(err)
}
rTag := findReqd(doc, tableTag)
tbody := rTag.LastChild
rows := element_node_children(tbody)
ret := [][]string{}
for _, c := range rows {
kids := element_node_children(c)
// TODO: make this a constant
if len(kids) == 7 && kids[0].Data != "th" {
kid_info := []string{}
for _, tag := range kids {
log.Print(tag.FirstChild.Data)
kid_info = append(kid_info, tag.FirstChild.Data)
}
ret = append(ret, kid_info)
}
}
return ret
}
func main() {
fmt.Println("Hello, playground")
s := `
<script language='JavaScript' type='text/javascript' src='./build/common.js'></script>
<script>
function getDept()
{
document.frm.method="POST" ;
document.frm.action="timetable_track.jsp?action=second&dept="+document.getElementById('dept').value;
document.frm.submit();
}
function openWin()
{
// window.open("view/slot_info.jsp","mywindow","menubar=1,resizable=1,width=1000,height=1000");
window.open("view/slot_info.jsp");
}
function changeSemester(val){
var curSes =document.getElementById('for_session').value;
var curSem =document.getElementById('for_semester').value;
if(val=='N'){
if(curSem=='SPRING'){
document.getElementById('for_semester').value='AUTUMN';
var year=curSes.split('-');
var nextSem=year[1]+'-'+(parseInt(year[1])+1);
document.getElementById('for_session').value=nextSem;
}else{
document.getElementById('for_semester').value='SPRING';
}
}else if(val=='P'){
if(curSem=='AUTUMN'){
document.getElementById('for_semester').value='SPRING';
var year=curSes.split('-');
var prevSem=(parseInt(year[0])-1)+'-'+year[0];
document.getElementById('for_session').value=prevSem;
}else{
document.getElementById('for_semester').value='AUTUMN';
}
}
//recall();
// submitForm();
}
function printInfo(elementid,styleSheetHref){
var prtContent="<html><head>";
if(typeof styleSheetHref != 'undefined'){
prtContent+="<link rel='StyleSheet' href='"+styleSheetHref+"' />";
}
prtContent+="</head><body>";
prtContent+=document.getElementById(elementid).innerHTML;
prtContent+="</body>";
//alert(prtContent);
var WinPrint =window.open('','','left=0,top=0,width=1,height=1,toolbar=0,scrollbars=0,status=0');
WinPrint.document.write(prtContent);
WinPrint.document.close();
WinPrint.focus();
WinPrint.print();
WinPrint.close();
}
</script>
<html>
<head>
<link rel='StyleSheet' href='./css/style1.css' />
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>JSP Page</title>
</head>
<body onload="save()"><TABLE align="center"><TR><TD><form name="frm" action="timetable_track.jsp?action=second" method="post">
<table align="center" border="0" cellpadding="0" cellspacing="0" width="80%"><tr><td>
<input type="button" class="button" value=" Print " onclick="printInfo('printIt','./css/style1.css')"/>
<table align="left" border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td align="left"><b>Department : CS</b></td>
<td align="right"><a href="timetable_track.jsp?action=first">Back</a></td>
</tr></table>
</td></tr>
<tr><td>
<div id="printIt"> <table align="center" border="0">
<tr>
<td valign="top">
<table id=disptab border=1 style='border-color:#557CD7' cellspacing=0 cellpadding=3 align="center">
<tr><td colspan="7"><center><b>List Of Subjects Allocated</b></center></td></tr>
<tr>
<th>Subject No</th>
<th>Subject Name</th>
<th>Faculty Name</th>
<th>Ltp</th>
<th>Credits</th>
<th>Slot</th>
<th>Room</th>
<tr><td>CS10001</td>
<td>PROGRAMMING AND DATA STRUCTURES</td>
<td>Rogers Mathew,Aritra Hazra,Pawan Goyal,Animesh Mukherjee</td>
<td>3-0-0</td>
<td>3</td>
<td>--</td>
<tr><td>CS11001</td>
<td>PROGRAMMING AND DATA STRUCTURE</td>
<td>Pawan Goyal,Rogers Mathew</td>
<td>3-1-0</td>
<td>4</td>
<td>--</td>
<tr><td>CS19001</td>
<td>PROGRAMMING AND DATA STRUCTURE LAB.</td>
<td>Saptarshi Ghosh,Rogers Mathew</td>
<td>0-0-3</td>
<td>2</td>
<td>--</td>
<tr><td>CS19101</td>
<td>PROGRAMMING AND DATA STRUCTURES TUTORIAL AND LABORATORY</td>
<td>Saptarshi Ghosh,Somindu Chaya Ramanna,Pabitra Mitra,Rogers Mathew,Debasis Samanta,Bivas Mitra,Sujoy Ghose,Sudebkumar Prasant Pal,Chittaranjan Mandal,Sourangshu Bhattacharya</td>
<td>0-1-3</td>
<td>3</td>
<td>--</td>
<tr><td>CS20006</td>
<td>SOFTWARE ENGINEERING</td>
<td>Sudip Misra</td>
<td>3-0-0</td>
<td>3</td>
<td>G3</td>
<td>NC132</td>
<tr><td>CS21002</td>
<td>SWITCHING CIRCUITS AND LOGIC DESIGN</td>
<td>Dipanwita Roy Chowdhury</td>
<td>3-1-0</td>
<td>4</td>
<td>E4</td>
<td>NC132</td>
<tr><td>CS21003</td>
<td>ALGORITHMS - I</td>
<td>Abhijit Das</td>
<td>3-1-0</td>
<td>4</td>
<td>D4</td>
<td>NC233</td>
<tr><td>CS21004</td>
<td>FORMAL LANGUAGE AND AUTOMATA THEORY</td>
<td>Soumyajit Dey</td>
<td>3-1-0</td>
<td>4</td>
<td>C4</td>
<td>NC132</td>
<tr><td>CS29002</td>
<td>SWITCHING CIRCUITS LABORATORY</td>
<td>Rajat Subhra Chakraborty,Dipanwita Roy Chowdhury</td>
<td>0-0-3</td>
<td>2</td>
<td>J</td>
<td>HWLab(Annex)</td>
<tr><td>CS29003</td>
<td>ALGORITHMS LABORATORY</td>
<td>Aritra Hazra,Abhijit Das</td>
<td>0-0-3</td>
<td>2</td>
<td>L</td>
<td>0</td>
<tr><td>CS29006</td>
<td>SOFTWARE ENGINEERING LABORATORY</td>
<td>Sudip Misra,Rajib Mall</td>
<td>0-0-3</td>
<td>2</td>
<td>P</td>
<td>SWLab(Annex)</td>
<tr><td>CS30002</td>
<td>OPERATING SYSTEMS</td>
<td>Indranil Sengupta</td>
<td>3-0-0</td>
<td>3</td>
<td>A3</td>
<td>NC334</td>
<tr><td>CS31006</td>
<td>COMPUTER NETWORKS</td>
<td>Sandip Chakraborty</td>
<td>3-0-0</td>
<td>3</td>
<td>B3</td>
<td>NC334</td>
<tr><td>CS31702</td>
<td>COMPUTER ARCHITECTURE AND OPERATING SYSTEM</td>
<td>Krothapalli Sreenivasa Rao</td>
<td>4-0-0</td>
<td>4</td>
<td>D4</td>
<td>NR321</td>
<tr><td>CS39002</td>
<td>OPERATING SYSTEMS LABORATORY</td>
<td>Partha Sarathi Dey,Indranil Sengupta</td>
<td>0-0-3</td>
<td>2</td>
<td>J</td>
<td>SWLab(Annex)</td>
<tr><td>CS39006</td>
<td>NETWORKS LAB.</td>
<td>Sandip Chakraborty,Krothapalli Sreenivasa Rao</td>
<td>0-0-3</td>
<td>2</td>
<td>N</td>
<td>SWLab(Annex)</td>
<tr><td>CS39008</td>
<td>PROJECT SEMINAR</td>
<td>Bivas Mitra,Dipanwita Roy Chowdhury</td>
<td>0-0-3</td>
<td>2</td>
<td>--</td>
<tr><td>CS40032</td>
<td>PRINCIPLES OF PROGRAMMING LANGUAGES</td>
<td>Partha Pratim Das</td>
<td>3-0-0</td>
<td>3</td>
<td>H3</td>
<td>CSE-119</td>
<tr><td>CS43002</td>
<td>DATABASE MANAGEMENT SYSTEMS</td>
<td>Soumya Kanti Ghosh,Shamik Sural</td>
<td>3-0-3</td>
<td>5</td>
<td>F4, L</td>
<td>NC334, SWLab(Annex)</td>
<tr><td>CS43004</td>
<td>COMPUTER GRAPHICS</td>
<td>Partha Bhowmick</td>
<td>3-0-3</td>
<td>5</td>
<td>F4, L</td>
<td>CSE-107, CSE-Software-Lab</td>
<tr><td>CS47006</td>
<td>PROJECT- PART 2</td>
<td>Partha Bhowmick</td>
<td>0-0-9</td>
<td>6</td>
<td>--</td>
<tr><td>CS48004</td>
<td>COMPREHENSIVE VIVA</td>
<td>Partha Bhowmick</td>
<td>0-0-0</td>
<td>2</td>
<td>--</td>
<tr><td>CS57004</td>
<td>PROJECT- PART 2</td>
<td>Animesh Mukherjee</td>
<td>0-0-20</td>
<td>13</td>
<td>--</td>
<tr><td>CS58004</td>
<td>COMPREHENSIVE VIVA</td>
<td>Animesh Mukherjee</td>
<td>0-0-0</td>
<td>2</td>
<td>--</td>
<tr><td>CS59001</td>
<td>DESIGN LABORATORY</td>
<td>Animesh Mukherjee</td>
<td>0-0-3</td>
<td>2</td>
<td>O</td>
<td>0</td>
<tr><td>CS60002</td>
<td>DISTRIBUTED SYSTEMS</td>
<td>Arobinda Gupta</td>
<td>4-0-0</td>
<td>4</td>
<td>F4</td>
<td>CSE-120</td>
<tr><td>CS60003</td>
<td>HIGH PERFORMANCE COMPUTER ARCHITECTURE</td>
<td>Rajib Mall</td>
<td>4-0-0</td>
<td>4</td>
<td>A3</td>
<td>NC344</td>
<tr><td>CS60004</td>
<td>HARDWARE SECURITY</td>
<td>Debdeep Mukhopadhyay</td>
<td>3-0-0</td>
<td>3</td>
<td>U3</td>
<td>CSE-119</td>
<tr><td>CS60006</td>
<td>COMPUTATIONAL PHYLOGENETICS AND MOLECULAR EVOLUTION</td>
<td>Jayanta Mukhopadhyay</td>
<td>3-0-0</td>
<td>3</td>
<td>G3</td>
<td>CSE-108</td>
<tr><td>CS60010</td>
<td>DEEP LEARNING</td>
<td>Sudeshna Sarkar</td>
<td>3-0-0</td>
<td>3</td>
<td>D3</td>
<td>NC232</td>
<tr><td>CS60012</td>
<td>COMPUTER GRAPHICS</td>
<td>Partha Bhowmick</td>
<td>3-1-0</td>
<td>4</td>
<td>F4</td>
<td>CSE-107</td>
<tr><td>CS60020</td>
<td>FOUNDATIONS OF ALGORITHM DESIGN & MACHINE LEARNING</td>
<td>Sourangshu Bhattacharya</td>
<td>4-0-0</td>
<td>4</td>
<td>C4</td>
<td>CSE-107</td>
<tr><td>CS60030</td>
<td>FORMAL SYSTEMS</td>
<td>Pallab Dasgupta</td>
<td>3-1-0</td>
<td>4</td>
<td>C4</td>
<td>CSE-108</td>
<tr><td>CS60036</td>
<td>INTELLIGENT SYSTEMS</td>
<td>Niloy Ganguly</td>
<td>3-0-0</td>
<td>3</td>
<td>F3</td>
<td>CSE-302</td>
<tr><td>CS60042</td>
<td>ADVANCES IN COMPILER CONSTRUCTION</td>
<td>Chittaranjan Mandal</td>
<td>3-1-0</td>
<td>4</td>
<td>U4</td>
<td>CSE-120</td>
<tr><td>CS60050</td>
<td>MACHINE LEARNING</td>
<td>Saptarshi Ghosh</td>
<td>3-0-0</td>
<td>3</td>
<td>D3</td>
<td>NC231</td>
<tr><td>CS60052</td>
<td>ADVANCED DIGITAL IMAGE PROCESSING AND COMPUTER VISION</td>
<td>Jayanta Mukhopadhyay</td>
<td>3-0-0</td>
<td>3</td>
<td>S3</td>
<td>CSE-119</td>
<tr><td>CS60058</td>
<td>FAULT TOLERANT SYSTEMS</td>
<td>Rajat Subhra Chakraborty</td>
<td>3-0-0</td>
<td>3</td>
<td>G3</td>
<td>CSE-107</td>
<tr><td>CS60064</td>
<td>COMPUTATIONAL GEOMETRY</td>
<td>Sudebkumar Prasant Pal</td>
<td>3-0-0</td>
<td>3</td>
<td>S3</td>
<td>CSE-107</td>
<tr><td>CS60073</td>
<td>ADVANCED MACHINE LEARNING</td>
<td>Pabitra Mitra</td>
<td>3-0-0</td>
<td>3</td>
<td>F3</td>
<td>CSE-119</td>
<tr><td>CS60078</td>
<td>COMPLEX NETWORK</td>
<td>Bivas Mitra</td>
<td>3-0-0</td>
<td>3</td>
<td>U3</td>
<td>CSE-108</td>
<tr><td>CS60088</td>
<td>FOUNDATIONS OF CRYPTOGRAPHY</td>
<td>Somindu Chaya Ramanna</td>
<td>3-1-0</td>
<td>4</td>
<td>C4</td>
<td>CSE-119</td>
<tr><td>CS60092</td>
<td>INFORMATION RETRIEVAL</td>
<td>Pawan Goyal,Animesh Mukherjee</td>
<td>3-0-0</td>
<td>3</td>
<td>G3</td>
<td>NR123,NR123</td>
<tr><td>CS60094</td>
<td>COMPUTATIONAL NUMBER THEORY</td>
<td>Abhijit Das,Debdeep Mukhopadhyay</td>
<td>3-0-0</td>
<td>3</td>
<td>G3</td>
<td>CSE-119</td>
<tr><td>CS60100</td>
<td>ADVANCED MICROPROCESSOR BASED SYSTEMS</td>
<td>Partha Sarathi Dey</td>
<td>3-0-0</td>
<td>3</td>
<td>V3</td>
<td>CSE-108</td>
<tr><td>CS61060</td>
<td>COMPUTATIONAL BIOPHYSICS: ALGORITHMS TO APPLICATIONS</td>
<td>Pralay Mitra</td>
<td>3-1-0</td>
<td>4</td>
<td>U4</td>
<td>CSE-107</td>
<tr><td>CS61064</td>
<td>HIGH PERFORMANCE PARALLEL PROGRAMMING</td>
<td>Pralay Mitra,Soumyajit Dey</td>
<td>3-1-0</td>
<td>4</td>
<td>V4</td>
<td>CSE-107</td>
<tr><td>CS67102</td>
<td>THESIS PART-II</td>
<td>Sudip Misra</td>
<td>0-0-0</td>
<td>20</td>
<td>--</td>
<tr><td>CS68101</td>
<td>COMPREHENSIVE VIVA-VOCE</td>
<td>Pawan Goyal</td>
<td>0-0-0</td>
<td>3</td>
<td>--</td>
<tr><td>CS69002</td>
<td>SEMINAR-II</td>
<td>Pawan Goyal</td>
<td>0-0-3</td>
<td>2</td>
<td>--</td>
<tr><td>CS69012</td>
<td>COMPUTING LAB II</td>
<td>Niloy Ganguly</td>
<td>0-0-6</td>
<td>4</td>
<td>X4, N</td>
<td>CSE-Software-Lab</td>
<tr><td>IT60020</td>
<td>CLOUD COMPUTING</td>
<td>Soumya Kanti Ghosh</td>
<td>3-0-0</td>
<td>3</td>
<td>C3</td>
<td>NC233</td>
<tr><td>IT60108</td>
<td>SOFT COMPUTING APPLICATIONS</td>
<td>Debasis Samanta</td>
<td>4-0-0</td>
<td>4</td>
<td>D4</td>
<td>ITCLA1</td>
</tr></table>
</td>
</tr>
</table></div>
</td></tr></table></form></TD></TR></TABLE>
</body>
</html>
`
result := parse_html(s)
log.Print(result)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment